2026-02-15T09:00:15.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:00:15.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:00:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:00:16.881 [DEBUG] [Thread-201503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:00:17.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 8, 59, 53), 4.92, 72.56, 0.0, 22.58, 10.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:00:17.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 08:59:53
2026-02-15T09:00:18.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:00:18.204 [DEBUG] [Thread-201504] [transport.py] [_log()] starting thread (client mode): 0xa2db5fc0
2026-02-15T09:00:18.204 [DEBUG] [Thread-201504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:00:18.226 [DEBUG] [Thread-201504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:00:18.226 [INFO] [Thread-201504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:00:18.229 [DEBUG] [Thread-201504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] client lang: <none>
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] server lang: <none>
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] kex follows: False
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] Compression: none
2026-02-15T09:00:18.230 [DEBUG] [Thread-201504] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:00:18.252 [DEBUG] [Thread-201504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:00:18.252 [DEBUG] [Thread-201504] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:00:18.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:00:18.253 [DEBUG] [Thread-201504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:00:18.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:00:18.256 [DEBUG] [Thread-201504] [transport.py] [_log()] userauth is OK
2026-02-15T09:00:18.256 [DEBUG] [Thread-201504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:00:18.256 [DEBUG] [Thread-201504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:00:18.256 [DEBUG] [Thread-201504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:00:18.256 [DEBUG] [Thread-201504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:00:18.282 [INFO] [Thread-201504] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:00:18.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:00:26.128 [DEBUG] [Thread-201504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:00:26.128 [DEBUG] [Thread-201504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:00:26.129 [DEBUG] [Thread-201504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:00:26.169 [DEBUG] [Thread-201504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:00:26.169 [DEBUG] [Thread-201504] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:00:26.173 [DEBUG] [Thread-201504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:00:26.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:00:26.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:00:26.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:00:26.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:00:26.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:00:26.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:00:26.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:00:26.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:00:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:00:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.291421 -999.00   +9.50  21.12     68   +4.00 1 1 1 1 1   888    0 6.33 62.33 ----- 21.1 21.1 161.2 28.2 15.2 -27.6 14.3 -25.9 12.9 -26.2 13.5 -27.0
2026-02-15T09:00:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:00:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:00:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.291421
2026-02-15T09:00:26.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:00:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:00:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:00:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:00:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:00:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T08:59:53', tmtdew=4.92, humidity=72.56, cloud=0.0, wind=22.58, temperature=10.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T06:59:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:00:26.328 [DEBUG] [Thread-201504] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:00:26.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:00:26.425 [DEBUG] [Thread-201507] [transport.py] [_log()] starting thread (client mode): 0xa57c3cd0
2026-02-15T09:00:26.425 [DEBUG] [Thread-201507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:00:26.439 [DEBUG] [Thread-201507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:00:26.440 [INFO] [Thread-201507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:00:26.447 [DEBUG] [Thread-201507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:00:26.448 [DEBUG] [Thread-201507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:00:26.448 [DEBUG] [Thread-201507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:00:26.448 [DEBUG] [Thread-201507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:00:26.448 [DEBUG] [Thread-201507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:00:26.448 [DEBUG] [Thread-201507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:00:26.448 [DEBUG] [Thread-201507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] client lang: <none>
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] server lang: <none>
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] kex follows: False
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:00:26.449 [DEBUG] [Thread-201507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:00:26.450 [DEBUG] [Thread-201507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:00:26.450 [DEBUG] [Thread-201507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:00:26.450 [DEBUG] [Thread-201507] [transport.py] [_log()] Compression: none
2026-02-15T09:00:26.450 [DEBUG] [Thread-201507] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:00:26.507 [DEBUG] [Thread-201507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:00:26.508 [DEBUG] [Thread-201507] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:00:26.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:00:26.510 [DEBUG] [Thread-201507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:00:26.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:00:26.563 [DEBUG] [Thread-201507] [transport.py] [_log()] userauth is OK
2026-02-15T09:00:26.563 [DEBUG] [Thread-201507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:00:26.563 [DEBUG] [Thread-201507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:00:26.563 [DEBUG] [Thread-201507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:00:26.564 [DEBUG] [Thread-201507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:00:26.584 [INFO] [Thread-201507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:00:26.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:00:26.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:00:27.406 [DEBUG] [Thread-201507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:00:27.406 [DEBUG] [Thread-201507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:00:27.454 [DEBUG] [Thread-201507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:00:27.454 [DEBUG] [Thread-201507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:00:27.463 [DEBUG] [Thread-201507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:00:27.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:00:27.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:00:27.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:00:27.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:00:27.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:00:27.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:00:27.503 [DEBUG] [Thread-201507] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:00:31.918 [DEBUG] [Thread-201509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:00:38.691 [DEBUG] [Thread-201510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:00:46.967 [DEBUG] [Thread-201511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:00:54.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:00:54.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:00:57.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:00:57.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:00:57.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:00:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 0, 28), 4.93, 72.49, 0.0, 23.59, 10.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:00:59.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:00:28
2026-02-15T09:01:00.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:01:00.327 [DEBUG] [Thread-201512] [transport.py] [_log()] starting thread (client mode): 0xa2d13580
2026-02-15T09:01:00.327 [DEBUG] [Thread-201512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:01:00.347 [DEBUG] [Thread-201512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:01:00.347 [INFO] [Thread-201512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:01:00.350 [DEBUG] [Thread-201512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:01:00.350 [DEBUG] [Thread-201512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] client lang: <none>
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] server lang: <none>
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] kex follows: False
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:01:00.351 [DEBUG] [Thread-201512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:01:00.352 [DEBUG] [Thread-201512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:01:00.352 [DEBUG] [Thread-201512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:01:00.352 [DEBUG] [Thread-201512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:01:00.352 [DEBUG] [Thread-201512] [transport.py] [_log()] Compression: none
2026-02-15T09:01:00.352 [DEBUG] [Thread-201512] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:01:00.372 [DEBUG] [Thread-201512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:01:00.373 [DEBUG] [Thread-201512] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:01:00.373 [DEBUG] [Thread-201512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:01:00.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:01:00.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:01:00.375 [DEBUG] [Thread-201512] [transport.py] [_log()] userauth is OK
2026-02-15T09:01:00.375 [DEBUG] [Thread-201512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:01:00.375 [DEBUG] [Thread-201512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:01:00.375 [DEBUG] [Thread-201512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:01:00.375 [DEBUG] [Thread-201512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:01:00.411 [INFO] [Thread-201512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:01:00.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:01:01.086 [DEBUG] [Thread-201512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:01:01.086 [DEBUG] [Thread-201512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:01:01.087 [DEBUG] [Thread-201512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:01:01.127 [DEBUG] [Thread-201512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:01:01.128 [DEBUG] [Thread-201512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:01:01.131 [DEBUG] [Thread-201512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:01:01.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:01:01.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:01:01.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:01:01.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:01:01.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:01:01.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:01:01.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.291768 -999.00   +9.50  24.79     69   +4.20 1 1 1 1 1   888    0 6.44 64.57 ----- 24.8 24.8 142.8 30.0 15.1 -30.4 14.3 -25.4 12.8 -26.0 13.5 -27.5
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.291768
2026-02-15T09:01:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:01:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:01:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:01:01.153 [DEBUG] [Thread-201512] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:01:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:01:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:01:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:00:28', tmtdew=4.93, humidity=72.49, cloud=0.0, wind=23.59, temperature=10.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:00:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:01:01.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:01:01.242 [DEBUG] [Thread-201515] [transport.py] [_log()] starting thread (client mode): 0xa57b1030
2026-02-15T09:01:01.243 [DEBUG] [Thread-201515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:01:01.257 [DEBUG] [Thread-201515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:01:01.257 [INFO] [Thread-201515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:01:01.264 [DEBUG] [Thread-201515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:01:01.264 [DEBUG] [Thread-201515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] client lang: <none>
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] server lang: <none>
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] kex follows: False
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] Compression: none
2026-02-15T09:01:01.265 [DEBUG] [Thread-201515] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:01:01.323 [DEBUG] [Thread-201515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:01:01.323 [DEBUG] [Thread-201515] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:01:01.324 [DEBUG] [Thread-201515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:01:01.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:01:01.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:01:01.379 [DEBUG] [Thread-201515] [transport.py] [_log()] userauth is OK
2026-02-15T09:01:01.379 [DEBUG] [Thread-201515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:01:01.380 [DEBUG] [Thread-201515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:01:01.380 [DEBUG] [Thread-201515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:01:01.380 [DEBUG] [Thread-201515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:01:01.399 [INFO] [Thread-201515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:01:01.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:01:01.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:01:02.001 [DEBUG] [Thread-201517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:01:02.242 [DEBUG] [Thread-201515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:01:02.243 [DEBUG] [Thread-201515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:01:02.290 [DEBUG] [Thread-201515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:01:02.291 [DEBUG] [Thread-201515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:01:02.300 [DEBUG] [Thread-201515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:01:02.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:01: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')
2026-02-15T09:01:02.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:01:02.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:01:02.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:01:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:01:02.336 [DEBUG] [Thread-201515] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:01:17.043 [DEBUG] [Thread-201518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:01:32.080 [DEBUG] [Thread-201519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:01:32.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:01:32.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:01:32.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:01:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 1, 4), 4.87, 72.71, 0.0, 24.49, 9.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:01:34.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:01:04
2026-02-15T09:01:34.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:01:34.774 [DEBUG] [Thread-201520] [transport.py] [_log()] starting thread (client mode): 0xa57b35e0
2026-02-15T09:01:34.774 [DEBUG] [Thread-201520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:01:34.794 [DEBUG] [Thread-201520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:01:34.794 [INFO] [Thread-201520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:34.795 [DEBUG] [Thread-201520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] client lang: <none>
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] server lang: <none>
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] kex follows: False
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] Compression: none
2026-02-15T09:01:34.796 [DEBUG] [Thread-201520] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:01:34.804 [DEBUG] [Thread-201520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:01:34.804 [DEBUG] [Thread-201520] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:01:34.805 [DEBUG] [Thread-201520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:01:34.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:01:34.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:01:34.806 [DEBUG] [Thread-201520] [transport.py] [_log()] userauth is OK
2026-02-15T09:01:34.806 [DEBUG] [Thread-201520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:01:34.807 [DEBUG] [Thread-201520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:01:34.807 [DEBUG] [Thread-201520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:01:34.807 [DEBUG] [Thread-201520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:01:34.842 [INFO] [Thread-201520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:01:34.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:01:35.500 [DEBUG] [Thread-201520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:01:35.500 [DEBUG] [Thread-201520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:01:35.500 [DEBUG] [Thread-201520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:01:35.541 [DEBUG] [Thread-201520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:01:35.541 [DEBUG] [Thread-201520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:01:35.545 [DEBUG] [Thread-201520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:01:35.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:01:35.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:01:35.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:01:35.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:01:35.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:01:35.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:01:35.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:01:35.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:01:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:01:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.292115 -999.00   +9.70  28.86     69   +4.40 1 1 1 1 1   888    0 6.39 63.46 ----- 28.9 28.9 136.2 31.3 15.2 -26.8 14.3 -26.1 12.9 -25.2 13.6 -27.6
2026-02-15T09:01:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:01:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:01:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.292115
2026-02-15T09:01:35.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:01:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:01:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:01:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:01:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:01:35.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:01:04', tmtdew=4.87, humidity=72.71, cloud=0.0, wind=24.49, temperature=9.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:00:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:01:35.572 [DEBUG] [Thread-201520] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:01:35.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:01:35.664 [DEBUG] [Thread-201523] [transport.py] [_log()] starting thread (client mode): 0xa2db6710
2026-02-15T09:01:35.665 [DEBUG] [Thread-201523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:01:35.679 [DEBUG] [Thread-201523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:01:35.679 [INFO] [Thread-201523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:01:35.687 [DEBUG] [Thread-201523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:01:35.687 [DEBUG] [Thread-201523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] client lang: <none>
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] server lang: <none>
2026-02-15T09:01:35.688 [DEBUG] [Thread-201523] [transport.py] [_log()] kex follows: False
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] Compression: none
2026-02-15T09:01:35.689 [DEBUG] [Thread-201523] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:01:35.747 [DEBUG] [Thread-201523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:01:35.748 [DEBUG] [Thread-201523] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:01:35.748 [DEBUG] [Thread-201523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:01:35.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:01:35.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:01:35.803 [DEBUG] [Thread-201523] [transport.py] [_log()] userauth is OK
2026-02-15T09:01:35.803 [DEBUG] [Thread-201523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:01:35.803 [DEBUG] [Thread-201523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:01:35.803 [DEBUG] [Thread-201523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:01:35.803 [DEBUG] [Thread-201523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:01:35.823 [INFO] [Thread-201523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:01:35.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:01:35.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:01:36.686 [DEBUG] [Thread-201523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:01:36.686 [DEBUG] [Thread-201523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:01:36.735 [DEBUG] [Thread-201523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:01:36.735 [DEBUG] [Thread-201523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:01:36.744 [DEBUG] [Thread-201523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:01:36.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:01:36.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:01:36.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:01:36.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:01:36.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:01:36.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:01:36.780 [DEBUG] [Thread-201523] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:01:38.724 [DEBUG] [Thread-201525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:01:47.119 [DEBUG] [Thread-201526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:01:54.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:01:54.875 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:02.169 [DEBUG] [Thread-201527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:06.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:02:06.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:02:06.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:02:08.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 1, 39), 7.05, 61.67, 0.0, 28.19, 10.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:02:08.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:01:39
2026-02-15T09:02:09.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:02:09.277 [DEBUG] [Thread-201528] [transport.py] [_log()] starting thread (client mode): 0xa57585b0
2026-02-15T09:02:09.277 [DEBUG] [Thread-201528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:02:09.297 [DEBUG] [Thread-201528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:02:09.297 [INFO] [Thread-201528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:02:09.301 [DEBUG] [Thread-201528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] client lang: <none>
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] server lang: <none>
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] kex follows: False
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] Compression: none
2026-02-15T09:02:09.302 [DEBUG] [Thread-201528] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:02:09.319 [DEBUG] [Thread-201528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:02:09.319 [DEBUG] [Thread-201528] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:02:09.320 [DEBUG] [Thread-201528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:02:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:02:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:02:09.321 [DEBUG] [Thread-201528] [transport.py] [_log()] userauth is OK
2026-02-15T09:02:09.322 [DEBUG] [Thread-201528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:02:09.322 [DEBUG] [Thread-201528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:02:09.322 [DEBUG] [Thread-201528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:02:09.322 [DEBUG] [Thread-201528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:02:09.346 [INFO] [Thread-201528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:02:09.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:02:10.007 [DEBUG] [Thread-201528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:02:10.007 [DEBUG] [Thread-201528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:02:10.008 [DEBUG] [Thread-201528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:02:10.048 [DEBUG] [Thread-201528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:02:10.049 [DEBUG] [Thread-201528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:02:10.052 [DEBUG] [Thread-201528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:02:10.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:02:10.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:02:10.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:02:10.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:02:10.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:02:10.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:02:10.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:02:10.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:02:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:02:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.292463 -999.00   +9.80  22.08     69   +4.50 1 1 1 1 1   888    0 6.34 57.88 ----- 22.1 22.1 157.6 29.9 15.2 -28.5 14.4 -27.7 12.9 -25.8 13.6 -26.6
2026-02-15T09:02:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:02:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:02:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.292463
2026-02-15T09:02:10.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:02:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:02:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:02:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:02:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:02:10.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:01:39', tmtdew=7.05, humidity=61.67, cloud=0.0, wind=28.19, temperature=10.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:01:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:02:10.077 [DEBUG] [Thread-201528] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:02:10.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:02:10.170 [DEBUG] [Thread-201531] [transport.py] [_log()] starting thread (client mode): 0xa57c1f90
2026-02-15T09:02:10.170 [DEBUG] [Thread-201531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:02:10.186 [DEBUG] [Thread-201531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:02:10.186 [INFO] [Thread-201531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] client lang: <none>
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] server lang: <none>
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] kex follows: False
2026-02-15T09:02:10.195 [DEBUG] [Thread-201531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:02:10.196 [DEBUG] [Thread-201531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:02:10.196 [DEBUG] [Thread-201531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:02:10.196 [DEBUG] [Thread-201531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:02:10.196 [DEBUG] [Thread-201531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:02:10.196 [DEBUG] [Thread-201531] [transport.py] [_log()] Compression: none
2026-02-15T09:02:10.196 [DEBUG] [Thread-201531] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:02:10.257 [DEBUG] [Thread-201531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:02:10.258 [DEBUG] [Thread-201531] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:02:10.259 [DEBUG] [Thread-201531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:02:10.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:02:10.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:02:10.319 [DEBUG] [Thread-201531] [transport.py] [_log()] userauth is OK
2026-02-15T09:02:10.319 [DEBUG] [Thread-201531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:02:10.319 [DEBUG] [Thread-201531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:02:10.319 [DEBUG] [Thread-201531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:02:10.320 [DEBUG] [Thread-201531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:02:10.340 [INFO] [Thread-201531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:02:10.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:02:10.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:02:11.220 [DEBUG] [Thread-201531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:02:11.220 [DEBUG] [Thread-201531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:02:11.272 [DEBUG] [Thread-201531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:02:11.273 [DEBUG] [Thread-201531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:02:11.287 [DEBUG] [Thread-201531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:02:11.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:02:11.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:02:11.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:02:11.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:02:11.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:02:11.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:02:11.344 [DEBUG] [Thread-201531] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:02:17.201 [DEBUG] [Thread-201533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:32.256 [DEBUG] [Thread-201534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:38.778 [DEBUG] [Thread-201535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:41.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:02:41.361 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:02:41.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:02:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 2, 15), 4.9, 72.38, 0.0, 29.06, 9.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:02:43.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:02:15
2026-02-15T09:02:43.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:02:43.699 [DEBUG] [Thread-201536] [transport.py] [_log()] starting thread (client mode): 0xa2d11f90
2026-02-15T09:02:43.699 [DEBUG] [Thread-201536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:02:43.719 [DEBUG] [Thread-201536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:02:43.719 [INFO] [Thread-201536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] client lang: <none>
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] server lang: <none>
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] kex follows: False
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] Compression: none
2026-02-15T09:02:43.723 [DEBUG] [Thread-201536] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:02:43.741 [DEBUG] [Thread-201536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:02:43.742 [DEBUG] [Thread-201536] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:02:43.742 [DEBUG] [Thread-201536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:02:43.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:02:43.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:02:43.785 [DEBUG] [Thread-201536] [transport.py] [_log()] userauth is OK
2026-02-15T09:02:43.785 [DEBUG] [Thread-201536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:02:43.785 [DEBUG] [Thread-201536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:02:43.785 [DEBUG] [Thread-201536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:02:43.785 [DEBUG] [Thread-201536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:02:43.806 [INFO] [Thread-201536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:02:43.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:02:44.473 [DEBUG] [Thread-201536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:02:44.473 [DEBUG] [Thread-201536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:02:44.474 [DEBUG] [Thread-201536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:02:44.514 [DEBUG] [Thread-201536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:02:44.514 [DEBUG] [Thread-201536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:02:44.517 [DEBUG] [Thread-201536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:02:44.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:02:44.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:02:44.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:02:44.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:02:44.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:02:44.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:02:44.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:02:44.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:02:44.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:02:44.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.293157 -999.00   +9.50  26.58     68   +4.10 1 1 1 1 1   888    0 6.23 53.12 ----- 26.6 26.6 142.6 30.7 15.2 -27.8 14.3 -25.9 12.9 -25.8 13.6 -28.2
2026-02-15T09:02:44.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:02:44.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:02:44.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.293157
2026-02-15T09:02:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:02:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:02:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:02:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:02:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:02:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:02:15', tmtdew=4.9, humidity=72.38, cloud=0.0, wind=29.06, temperature=9.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:02:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:02:44.539 [DEBUG] [Thread-201536] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:02:44.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:02:44.647 [DEBUG] [Thread-201539] [transport.py] [_log()] starting thread (client mode): 0xa57c36d0
2026-02-15T09:02:44.647 [DEBUG] [Thread-201539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:02:44.673 [DEBUG] [Thread-201539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:02:44.673 [INFO] [Thread-201539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:02:44.691 [DEBUG] [Thread-201539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] client lang: <none>
2026-02-15T09:02:44.692 [DEBUG] [Thread-201539] [transport.py] [_log()] server lang: <none>
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] kex follows: False
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:02:44.693 [DEBUG] [Thread-201539] [transport.py] [_log()] Compression: none
2026-02-15T09:02:44.694 [DEBUG] [Thread-201539] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:02:44.762 [DEBUG] [Thread-201539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:02:44.763 [DEBUG] [Thread-201539] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:02:44.764 [DEBUG] [Thread-201539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:02:44.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:02:44.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:02:44.842 [DEBUG] [Thread-201539] [transport.py] [_log()] userauth is OK
2026-02-15T09:02:44.842 [DEBUG] [Thread-201539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:02:44.842 [DEBUG] [Thread-201539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:02:44.843 [DEBUG] [Thread-201539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:02:44.843 [DEBUG] [Thread-201539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:02:44.874 [INFO] [Thread-201539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:02:44.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:02:44.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:02:45.709 [DEBUG] [Thread-201539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:02:45.710 [DEBUG] [Thread-201539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:02:45.757 [DEBUG] [Thread-201539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:02:45.757 [DEBUG] [Thread-201539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:02:45.766 [DEBUG] [Thread-201539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:02:45.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:02: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')
2026-02-15T09:02:45.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:02:45.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:02:45.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:02:45.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:02:45.848 [DEBUG] [Thread-201539] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:02:47.288 [DEBUG] [Thread-201541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:55.020 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:02:55.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:02.335 [DEBUG] [Thread-201542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:15.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:03:15.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:03:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:03:17.371 [DEBUG] [Thread-201543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 2, 51), 5.09, 71.19, 0.0, 24.17, 9.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:03:17.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:02:51
2026-02-15T09:03:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:03:18.193 [DEBUG] [Thread-201544] [transport.py] [_log()] starting thread (client mode): 0xa575a3b0
2026-02-15T09:03:18.193 [DEBUG] [Thread-201544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:03:18.212 [DEBUG] [Thread-201544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:03:18.212 [INFO] [Thread-201544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:03:18.215 [DEBUG] [Thread-201544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] client lang: <none>
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] server lang: <none>
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] kex follows: False
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] Compression: none
2026-02-15T09:03:18.216 [DEBUG] [Thread-201544] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:03:18.235 [DEBUG] [Thread-201544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:03:18.236 [DEBUG] [Thread-201544] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:03:18.237 [DEBUG] [Thread-201544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:03:18.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:03:18.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:03:18.239 [DEBUG] [Thread-201544] [transport.py] [_log()] userauth is OK
2026-02-15T09:03:18.239 [DEBUG] [Thread-201544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:03:18.239 [DEBUG] [Thread-201544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:03:18.239 [DEBUG] [Thread-201544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:03:18.239 [DEBUG] [Thread-201544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:03:18.255 [INFO] [Thread-201544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:03:18.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:03:19.021 [DEBUG] [Thread-201544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:03:19.021 [DEBUG] [Thread-201544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:03:19.021 [DEBUG] [Thread-201544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:03:19.061 [DEBUG] [Thread-201544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:03:19.061 [DEBUG] [Thread-201544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:03:19.063 [DEBUG] [Thread-201544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:03:19.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:03:19.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:03:19.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:03:19.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:03:19.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:03:19.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:03:19.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.293504 -999.00   +9.50  20.33     70   +4.40 1 1 1 1 1   888    0 6.20 51.88 ----- 20.3 20.3 158.6 28.0 15.2 -27.2 14.4 -26.0 12.9 -26.3 13.6 -27.1
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.293504
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:03:19.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:02:51', tmtdew=5.09, humidity=71.19, cloud=0.0, wind=24.17, temperature=9.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:02:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:03:19.078 [DEBUG] [Thread-201544] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:03:19.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:03:19.184 [DEBUG] [Thread-201547] [transport.py] [_log()] starting thread (client mode): 0xa57597b0
2026-02-15T09:03:19.184 [DEBUG] [Thread-201547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:03:19.219 [DEBUG] [Thread-201547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:03:19.220 [INFO] [Thread-201547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:03:19.247 [DEBUG] [Thread-201547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] client lang: <none>
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] server lang: <none>
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] kex follows: False
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] Compression: none
2026-02-15T09:03:19.248 [DEBUG] [Thread-201547] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:03:19.325 [DEBUG] [Thread-201547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:03:19.325 [DEBUG] [Thread-201547] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:03:19.326 [DEBUG] [Thread-201547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:03:19.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:03:19.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:03:19.424 [DEBUG] [Thread-201547] [transport.py] [_log()] userauth is OK
2026-02-15T09:03:19.424 [DEBUG] [Thread-201547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:03:19.424 [DEBUG] [Thread-201547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:03:19.424 [DEBUG] [Thread-201547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:03:19.424 [DEBUG] [Thread-201547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:03:19.464 [INFO] [Thread-201547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:03:19.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:03:19.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:03:20.255 [DEBUG] [Thread-201547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:03:20.255 [DEBUG] [Thread-201547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:03:20.303 [DEBUG] [Thread-201547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:03:20.304 [DEBUG] [Thread-201547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:03:20.313 [DEBUG] [Thread-201547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:03:20.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:03:20.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:03:20.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:03:20.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:03:20.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:03:20.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:03:20.351 [DEBUG] [Thread-201547] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:03:32.408 [DEBUG] [Thread-201549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:38.810 [DEBUG] [Thread-201550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:47.459 [DEBUG] [Thread-201551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:50.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:03:50.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:03:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:03:52.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 3, 26), 4.98, 71.65, 0.0, 23.17, 9.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:03:52.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:03:26
2026-02-15T09:03:52.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:03:52.924 [DEBUG] [Thread-201552] [transport.py] [_log()] starting thread (client mode): 0xa81d5c00
2026-02-15T09:03:52.925 [DEBUG] [Thread-201552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:03:52.945 [DEBUG] [Thread-201552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:03:52.945 [INFO] [Thread-201552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] client lang: <none>
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] server lang: <none>
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] kex follows: False
2026-02-15T09:03:52.948 [DEBUG] [Thread-201552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:03:52.949 [DEBUG] [Thread-201552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:03:52.949 [DEBUG] [Thread-201552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:03:52.949 [DEBUG] [Thread-201552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:03:52.949 [DEBUG] [Thread-201552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:03:52.949 [DEBUG] [Thread-201552] [transport.py] [_log()] Compression: none
2026-02-15T09:03:52.949 [DEBUG] [Thread-201552] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:03:52.965 [DEBUG] [Thread-201552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:03:52.965 [DEBUG] [Thread-201552] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:03:52.966 [DEBUG] [Thread-201552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:03:52.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:03:52.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:03:52.967 [DEBUG] [Thread-201552] [transport.py] [_log()] userauth is OK
2026-02-15T09:03:52.967 [DEBUG] [Thread-201552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:03:52.967 [DEBUG] [Thread-201552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:03:52.967 [DEBUG] [Thread-201552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:03:52.967 [DEBUG] [Thread-201552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:03:52.983 [INFO] [Thread-201552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:03:52.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:03:53.582 [DEBUG] [Thread-201552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:03:53.582 [DEBUG] [Thread-201552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:03:53.583 [DEBUG] [Thread-201552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:03:53.623 [DEBUG] [Thread-201552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:03:53.624 [DEBUG] [Thread-201552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:03:53.628 [DEBUG] [Thread-201552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:03:53.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:03:53.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:03:53.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:03:53.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:03:53.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:03:53.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:03:53.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:03:53.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:03:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:03:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.293852 -999.00   +9.60  15.47     69   +4.30 1 1 1 1 1   888    0 6.21 50.80 ----- 15.5 15.5 137.8 23.9 15.2 -27.1 14.5 -26.1 13.0 -25.3 13.7 -27.0
2026-02-15T09:03:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:03:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:03:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.293852
2026-02-15T09:03:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:03:53.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:03:53.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:03:53.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:03:53.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:03:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:03:26', tmtdew=4.98, humidity=71.65, cloud=0.0, wind=23.17, temperature=9.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:03:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:03:53.656 [DEBUG] [Thread-201552] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:03:53.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:03:53.751 [DEBUG] [Thread-201555] [transport.py] [_log()] starting thread (client mode): 0xa81d5450
2026-02-15T09:03:53.751 [DEBUG] [Thread-201555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:03:53.766 [DEBUG] [Thread-201555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:03:53.766 [INFO] [Thread-201555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:03:53.774 [DEBUG] [Thread-201555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:03:53.774 [DEBUG] [Thread-201555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:03:53.774 [DEBUG] [Thread-201555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:03:53.774 [DEBUG] [Thread-201555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:53.774 [DEBUG] [Thread-201555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] client lang: <none>
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] server lang: <none>
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] kex follows: False
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:03:53.775 [DEBUG] [Thread-201555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:03:53.776 [DEBUG] [Thread-201555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:03:53.776 [DEBUG] [Thread-201555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:03:53.776 [DEBUG] [Thread-201555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:03:53.776 [DEBUG] [Thread-201555] [transport.py] [_log()] Compression: none
2026-02-15T09:03:53.776 [DEBUG] [Thread-201555] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:03:53.831 [DEBUG] [Thread-201555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:03:53.831 [DEBUG] [Thread-201555] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:03:53.832 [DEBUG] [Thread-201555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:03:53.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:03:53.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:03:53.887 [DEBUG] [Thread-201555] [transport.py] [_log()] userauth is OK
2026-02-15T09:03:53.887 [DEBUG] [Thread-201555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:03:53.887 [DEBUG] [Thread-201555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:03:53.887 [DEBUG] [Thread-201555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:03:53.887 [DEBUG] [Thread-201555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:03:53.906 [INFO] [Thread-201555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:03:53.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:03:53.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:03:54.741 [DEBUG] [Thread-201555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:03:54.741 [DEBUG] [Thread-201555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:03:54.789 [DEBUG] [Thread-201555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:03:54.789 [DEBUG] [Thread-201555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:03:54.797 [DEBUG] [Thread-201555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:03:54.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:03:54.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:03:54.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:03:54.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:03:54.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:03:54.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:03:54.828 [DEBUG] [Thread-201555] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:03:55.162 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:03:55.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:02.496 [DEBUG] [Thread-201557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:17.549 [DEBUG] [Thread-201558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:04:24.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:04:24.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:04:27.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 4, 2), 4.91, 72.0, 0.0, 24.67, 9.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:04:27.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:04:02
2026-02-15T09:04:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:04:27.656 [DEBUG] [Thread-201559] [transport.py] [_log()] starting thread (client mode): 0xa81d7f10
2026-02-15T09:04:27.656 [DEBUG] [Thread-201559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:04:27.675 [DEBUG] [Thread-201559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:04:27.675 [INFO] [Thread-201559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] client lang: <none>
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] server lang: <none>
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] kex follows: False
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] Compression: none
2026-02-15T09:04:27.678 [DEBUG] [Thread-201559] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:04:27.692 [DEBUG] [Thread-201559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:04:27.692 [DEBUG] [Thread-201559] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:04:27.692 [DEBUG] [Thread-201559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:04:27.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:04:27.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:04:27.693 [DEBUG] [Thread-201559] [transport.py] [_log()] userauth is OK
2026-02-15T09:04:27.693 [DEBUG] [Thread-201559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:04:27.693 [DEBUG] [Thread-201559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:04:27.693 [DEBUG] [Thread-201559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:04:27.693 [DEBUG] [Thread-201559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:04:27.708 [INFO] [Thread-201559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:04:27.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:04:28.365 [DEBUG] [Thread-201559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:04:28.366 [DEBUG] [Thread-201559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:04:28.366 [DEBUG] [Thread-201559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:04:28.406 [DEBUG] [Thread-201559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:04:28.407 [DEBUG] [Thread-201559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:04:28.411 [DEBUG] [Thread-201559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:04:28.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:04:28.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:04:28.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:04:28.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:04:28.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:04:28.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:04:28.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:04:28.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:04:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:04:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.294199 -999.00  +10.10  20.81     70   +4.90 1 1 1 1 1   888    0 6.19 51.12 ----- 20.8 20.8 143.6 26.5 15.4 -26.1 14.6 -25.3 13.1 -24.4 13.8 -26.2
2026-02-15T09:04:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:04:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:04:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.294199
2026-02-15T09:04:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:04:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:04:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:04:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:04:28.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:04:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:04:02', tmtdew=4.91, humidity=72.0, cloud=0.0, wind=24.67, temperature=9.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:03:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:04:28.437 [DEBUG] [Thread-201559] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:04:28.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:04:28.533 [DEBUG] [Thread-201562] [transport.py] [_log()] starting thread (client mode): 0xa57e1c30
2026-02-15T09:04:28.533 [DEBUG] [Thread-201562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:04:28.548 [DEBUG] [Thread-201562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:04:28.548 [INFO] [Thread-201562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:04:28.556 [DEBUG] [Thread-201562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:04:28.556 [DEBUG] [Thread-201562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] client lang: <none>
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] server lang: <none>
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] kex follows: False
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] Compression: none
2026-02-15T09:04:28.557 [DEBUG] [Thread-201562] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:04:28.614 [DEBUG] [Thread-201562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:04:28.615 [DEBUG] [Thread-201562] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:04:28.616 [DEBUG] [Thread-201562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:04:28.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:04:28.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:04:28.671 [DEBUG] [Thread-201562] [transport.py] [_log()] userauth is OK
2026-02-15T09:04:28.671 [DEBUG] [Thread-201562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:04:28.671 [DEBUG] [Thread-201562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:04:28.672 [DEBUG] [Thread-201562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:04:28.672 [DEBUG] [Thread-201562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:04:28.690 [INFO] [Thread-201562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:04:28.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:04:28.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:04:29.558 [DEBUG] [Thread-201562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:04:29.559 [DEBUG] [Thread-201562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:04:29.609 [DEBUG] [Thread-201562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:04:29.610 [DEBUG] [Thread-201562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:04:29.622 [DEBUG] [Thread-201562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:04:29.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:04:29.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:04:29.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:04:29.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:04:29.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:04:29.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:04:29.673 [DEBUG] [Thread-201562] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:04:32.585 [DEBUG] [Thread-201564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:38.853 [DEBUG] [Thread-201565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:47.637 [DEBUG] [Thread-201566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:55.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:55.305 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:04:59.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:04:59.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:04:59.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:05:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 4, 37), 6.48, 64.16, 0.0, 26.99, 10.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:05:01.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:04:37
2026-02-15T09:05:02.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:05:02.213 [DEBUG] [Thread-201567] [transport.py] [_log()] starting thread (client mode): 0xa2db4bb0
2026-02-15T09:05:02.213 [DEBUG] [Thread-201567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:05:02.233 [DEBUG] [Thread-201567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:05:02.233 [INFO] [Thread-201567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:05:02.236 [DEBUG] [Thread-201567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] client lang: <none>
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] server lang: <none>
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] kex follows: False
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] Compression: none
2026-02-15T09:05:02.237 [DEBUG] [Thread-201567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:05:02.255 [DEBUG] [Thread-201567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:05:02.256 [DEBUG] [Thread-201567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:05:02.257 [DEBUG] [Thread-201567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:05:02.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:05:02.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:05:02.259 [DEBUG] [Thread-201567] [transport.py] [_log()] userauth is OK
2026-02-15T09:05:02.259 [DEBUG] [Thread-201567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:05:02.259 [DEBUG] [Thread-201567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:05:02.259 [DEBUG] [Thread-201567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:05:02.259 [DEBUG] [Thread-201567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:05:02.283 [INFO] [Thread-201567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:05:02.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:05:02.673 [DEBUG] [Thread-201569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:05:02.924 [DEBUG] [Thread-201567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:05:02.924 [DEBUG] [Thread-201567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:05:02.924 [DEBUG] [Thread-201567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:05:02.965 [DEBUG] [Thread-201567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:05:02.965 [DEBUG] [Thread-201567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:05:02.967 [DEBUG] [Thread-201567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:05:02.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:05:02.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:05:02.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:05:02.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:05:02.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:05:02.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:05:02.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:05:02.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:05:02.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:05:02.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.294546 -999.00  +10.30  20.99     69   +4.80 1 1 1 1 1   888    0 6.19 51.22 ----- 21.0 21.0 136.0 29.5 15.5 -27.1 14.7 -26.1 13.1 -25.5 13.8 -26.9
2026-02-15T09:05:02.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:05:02.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:05:02.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.294546
2026-02-15T09:05:02.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:05:02.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:05:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:05:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:05:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:05:02.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:04:37', tmtdew=6.48, humidity=64.16, cloud=0.0, wind=26.99, temperature=10.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:04:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:05:02.989 [DEBUG] [Thread-201567] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:05:03.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:05:03.085 [DEBUG] [Thread-201571] [transport.py] [_log()] starting thread (client mode): 0xa81d52a0
2026-02-15T09:05:03.085 [DEBUG] [Thread-201571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:05:03.100 [DEBUG] [Thread-201571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:05:03.100 [INFO] [Thread-201571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] client lang: <none>
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] server lang: <none>
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] kex follows: False
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:05:03.107 [DEBUG] [Thread-201571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:05:03.108 [DEBUG] [Thread-201571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:05:03.108 [DEBUG] [Thread-201571] [transport.py] [_log()] Compression: none
2026-02-15T09:05:03.108 [DEBUG] [Thread-201571] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:05:03.166 [DEBUG] [Thread-201571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:05:03.167 [DEBUG] [Thread-201571] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:05:03.167 [DEBUG] [Thread-201571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:05:03.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:05:03.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:05:03.222 [DEBUG] [Thread-201571] [transport.py] [_log()] userauth is OK
2026-02-15T09:05:03.223 [DEBUG] [Thread-201571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:05:03.223 [DEBUG] [Thread-201571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:05:03.223 [DEBUG] [Thread-201571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:05:03.223 [DEBUG] [Thread-201571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:05:03.241 [INFO] [Thread-201571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:05:03.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:05:03.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:05:04.073 [DEBUG] [Thread-201571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:05:04.074 [DEBUG] [Thread-201571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:05:04.122 [DEBUG] [Thread-201571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:05:04.122 [DEBUG] [Thread-201571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:05:04.131 [DEBUG] [Thread-201571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:05:04.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:05:04.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:05:04.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:05:04.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:05:04.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:05:04.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:05:04.166 [DEBUG] [Thread-201571] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:05:17.712 [DEBUG] [Thread-201573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:05:32.775 [DEBUG] [Thread-201574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:05:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:05:34.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:05:34.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:05:36.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 5, 13), 5.25, 70.32, 0.0, 24.23, 10.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:05:36.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:05:13
2026-02-15T09:05:37.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:05:37.449 [DEBUG] [Thread-201575] [transport.py] [_log()] starting thread (client mode): 0xa57c1ff0
2026-02-15T09:05:37.449 [DEBUG] [Thread-201575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:05:37.469 [DEBUG] [Thread-201575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:05:37.469 [INFO] [Thread-201575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] client lang: <none>
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] server lang: <none>
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] kex follows: False
2026-02-15T09:05:37.472 [DEBUG] [Thread-201575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:05:37.473 [DEBUG] [Thread-201575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:05:37.473 [DEBUG] [Thread-201575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:05:37.473 [DEBUG] [Thread-201575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:05:37.473 [DEBUG] [Thread-201575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:05:37.473 [DEBUG] [Thread-201575] [transport.py] [_log()] Compression: none
2026-02-15T09:05:37.473 [DEBUG] [Thread-201575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:05:37.490 [DEBUG] [Thread-201575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:05:37.491 [DEBUG] [Thread-201575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:05:37.492 [DEBUG] [Thread-201575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:05:37.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:05:37.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:05:37.494 [DEBUG] [Thread-201575] [transport.py] [_log()] userauth is OK
2026-02-15T09:05:37.494 [DEBUG] [Thread-201575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:05:37.494 [DEBUG] [Thread-201575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:05:37.494 [DEBUG] [Thread-201575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:05:37.495 [DEBUG] [Thread-201575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:05:37.518 [INFO] [Thread-201575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:05:37.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:05:38.895 [DEBUG] [Thread-201577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:05:39.792 [DEBUG] [Thread-201575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:05:39.792 [DEBUG] [Thread-201575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:05:39.793 [DEBUG] [Thread-201575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:05:39.833 [DEBUG] [Thread-201575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:05:39.834 [DEBUG] [Thread-201575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:05:39.837 [DEBUG] [Thread-201575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:05:39.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:05:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:05:39.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:05:39.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:05:39.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:05:39.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:05:39.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:05:39.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:05:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:05:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.294893 -999.00  +10.10  21.00     68   +4.60 1 1 1 1 1   888    0 6.38 56.57 ----- 21.0 21.0 142.4 26.1 15.6 -26.7 14.8 -26.3 13.2 -25.4 13.8 -27.4
2026-02-15T09:05:39.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:05:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:05:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.294893
2026-02-15T09:05:39.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:05:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:05:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:05:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:05:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:05:39.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:05:13', tmtdew=5.25, humidity=70.32, cloud=0.0, wind=24.23, temperature=10.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:04:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:05:39.866 [DEBUG] [Thread-201575] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:05:39.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:05:39.975 [DEBUG] [Thread-201579] [transport.py] [_log()] starting thread (client mode): 0xa2db78e0
2026-02-15T09:05:39.976 [DEBUG] [Thread-201579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:05:39.990 [DEBUG] [Thread-201579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:05:39.990 [INFO] [Thread-201579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:05:39.998 [DEBUG] [Thread-201579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:05:39.998 [DEBUG] [Thread-201579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:05:39.998 [DEBUG] [Thread-201579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] client lang: <none>
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] server lang: <none>
2026-02-15T09:05:39.999 [DEBUG] [Thread-201579] [transport.py] [_log()] kex follows: False
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] Compression: none
2026-02-15T09:05:40.000 [DEBUG] [Thread-201579] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:05:40.059 [DEBUG] [Thread-201579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:05:40.060 [DEBUG] [Thread-201579] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:05:40.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:05:40.061 [DEBUG] [Thread-201579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:05:40.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:05:40.119 [DEBUG] [Thread-201579] [transport.py] [_log()] userauth is OK
2026-02-15T09:05:40.119 [DEBUG] [Thread-201579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:05:40.119 [DEBUG] [Thread-201579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:05:40.119 [DEBUG] [Thread-201579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:05:40.119 [DEBUG] [Thread-201579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:05:40.138 [INFO] [Thread-201579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:05:40.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:05:40.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:05:40.960 [DEBUG] [Thread-201579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:05:40.961 [DEBUG] [Thread-201579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:05:41.008 [DEBUG] [Thread-201579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:05:41.009 [DEBUG] [Thread-201579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:05:41.019 [DEBUG] [Thread-201579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:05:41.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:05:41.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:05:41.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:05:41.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:05:41.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:05:41.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:05:41.056 [DEBUG] [Thread-201579] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:05:47.814 [DEBUG] [Thread-201581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:05:55.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:05:55.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:02.873 [DEBUG] [Thread-201582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:06:11.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:06:11.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:06:13.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 5, 49), 5.16, 70.48, 0.0, 27.47, 9.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:06:13.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:05:49
2026-02-15T09:06:13.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:06:13.876 [DEBUG] [Thread-201583] [transport.py] [_log()] starting thread (client mode): 0xa57580a0
2026-02-15T09:06:13.876 [DEBUG] [Thread-201583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:06:13.896 [DEBUG] [Thread-201583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:06:13.897 [INFO] [Thread-201583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:06:13.900 [DEBUG] [Thread-201583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:06:13.900 [DEBUG] [Thread-201583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:06:13.900 [DEBUG] [Thread-201583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:06:13.900 [DEBUG] [Thread-201583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:13.900 [DEBUG] [Thread-201583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:13.900 [DEBUG] [Thread-201583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] client lang: <none>
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] server lang: <none>
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] kex follows: False
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] Compression: none
2026-02-15T09:06:13.901 [DEBUG] [Thread-201583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:06:13.909 [DEBUG] [Thread-201583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:06:13.910 [DEBUG] [Thread-201583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:06:13.910 [DEBUG] [Thread-201583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:06:13.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:06:13.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:06:13.912 [DEBUG] [Thread-201583] [transport.py] [_log()] userauth is OK
2026-02-15T09:06:13.912 [DEBUG] [Thread-201583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:06:13.912 [DEBUG] [Thread-201583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:06:13.912 [DEBUG] [Thread-201583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:06:13.912 [DEBUG] [Thread-201583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:06:13.931 [INFO] [Thread-201583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:06:13.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:06:14.599 [DEBUG] [Thread-201583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:06:14.600 [DEBUG] [Thread-201583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:06:14.600 [DEBUG] [Thread-201583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:06:14.640 [DEBUG] [Thread-201583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:06:14.640 [DEBUG] [Thread-201583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:06:14.644 [DEBUG] [Thread-201583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:06:14.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:06:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:06:14.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:06:14.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:06:14.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:06:14.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:06:14.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:06:14.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:06:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:06:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.295587 -999.00  +10.10  21.29     68   +4.60 1 1 1 1 1   888    0 6.78 66.86 ----- 21.3 21.3 157.4 28.1 15.6 -27.2 14.7 -25.9 13.3 -25.6 14.1 -26.9
2026-02-15T09:06:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:06:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:06:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.295587
2026-02-15T09:06:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:06:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:06:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:06:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:06:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:06:14.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:05:49', tmtdew=5.16, humidity=70.48, cloud=0.0, wind=27.47, temperature=9.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:05:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:06:14.673 [DEBUG] [Thread-201583] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:06:14.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:06:14.774 [DEBUG] [Thread-201586] [transport.py] [_log()] starting thread (client mode): 0xa57b37c0
2026-02-15T09:06:14.775 [DEBUG] [Thread-201586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:06:14.796 [DEBUG] [Thread-201586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:06:14.796 [INFO] [Thread-201586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:06:14.811 [DEBUG] [Thread-201586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:06:14.811 [DEBUG] [Thread-201586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:06:14.811 [DEBUG] [Thread-201586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] client lang: <none>
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] server lang: <none>
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] kex follows: False
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:06:14.812 [DEBUG] [Thread-201586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:06:14.813 [DEBUG] [Thread-201586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:06:14.813 [DEBUG] [Thread-201586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:06:14.813 [DEBUG] [Thread-201586] [transport.py] [_log()] Compression: none
2026-02-15T09:06:14.813 [DEBUG] [Thread-201586] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:06:14.879 [DEBUG] [Thread-201586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:06:14.880 [DEBUG] [Thread-201586] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:06:14.881 [DEBUG] [Thread-201586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:06:14.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:06:14.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:06:14.952 [DEBUG] [Thread-201586] [transport.py] [_log()] userauth is OK
2026-02-15T09:06:14.953 [DEBUG] [Thread-201586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:06:14.953 [DEBUG] [Thread-201586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:06:14.953 [DEBUG] [Thread-201586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:06:14.953 [DEBUG] [Thread-201586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:06:14.979 [INFO] [Thread-201586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:06:14.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:06:14.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:06:15.804 [DEBUG] [Thread-201586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:06:15.804 [DEBUG] [Thread-201586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:06:15.851 [DEBUG] [Thread-201586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:06:15.851 [DEBUG] [Thread-201586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:06:15.861 [DEBUG] [Thread-201586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:06:15.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:06:15.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:06:15.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:06:15.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:06:15.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:06:15.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:06:15.898 [DEBUG] [Thread-201586] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:06:17.908 [DEBUG] [Thread-201588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:32.960 [DEBUG] [Thread-201589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:38.927 [DEBUG] [Thread-201590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:45.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:06:45.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:06: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
2026-02-15T09:06:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 6, 24), 5.17, 70.43, 0.0, 27.79, 9.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:06:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:06:24
2026-02-15T09:06:47.998 [DEBUG] [Thread-201591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:48.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:06:48.417 [DEBUG] [Thread-201592] [transport.py] [_log()] starting thread (client mode): 0xa57b2e00
2026-02-15T09:06:48.417 [DEBUG] [Thread-201592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:06:48.438 [DEBUG] [Thread-201592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:06:48.438 [INFO] [Thread-201592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] client lang: <none>
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] server lang: <none>
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] kex follows: False
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] Compression: none
2026-02-15T09:06:48.442 [DEBUG] [Thread-201592] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:06:48.459 [DEBUG] [Thread-201592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:06:48.460 [DEBUG] [Thread-201592] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:06:48.460 [DEBUG] [Thread-201592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:06:48.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:06:48.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:06:48.462 [DEBUG] [Thread-201592] [transport.py] [_log()] userauth is OK
2026-02-15T09:06:48.463 [DEBUG] [Thread-201592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:06:48.463 [DEBUG] [Thread-201592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:06:48.463 [DEBUG] [Thread-201592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:06:48.463 [DEBUG] [Thread-201592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:06:48.487 [INFO] [Thread-201592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:06:48.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:06:49.106 [DEBUG] [Thread-201592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:06:49.116 [DEBUG] [Thread-201592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:06:49.117 [DEBUG] [Thread-201592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:06:49.147 [DEBUG] [Thread-201592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:06:49.147 [DEBUG] [Thread-201592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:06:49.149 [DEBUG] [Thread-201592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:06:49.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:06:49.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:06:49.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:06:49.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:06:49.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:06:49.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:06:49.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.295935 -999.00  +10.10  19.12     68   +4.70 1 1 1 1 1   888    0 7.14 73.74 ----- 19.1 19.1 139.4 28.1 15.7 -27.0 14.8 -25.3 13.2 -26.0 14.0 -26.6
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.295935
2026-02-15T09:06:49.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:06:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:06:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:06:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:06:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:06:49.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:06:24', tmtdew=5.17, humidity=70.43, cloud=0.0, wind=27.79, temperature=9.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:06:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:06:49.168 [DEBUG] [Thread-201592] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:06:49.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:06:49.253 [DEBUG] [Thread-201595] [transport.py] [_log()] starting thread (client mode): 0xa2dc0460
2026-02-15T09:06:49.254 [DEBUG] [Thread-201595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:06:49.270 [DEBUG] [Thread-201595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:06:49.270 [INFO] [Thread-201595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:06:49.283 [DEBUG] [Thread-201595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:06:49.283 [DEBUG] [Thread-201595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:06:49.283 [DEBUG] [Thread-201595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] client lang: <none>
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] server lang: <none>
2026-02-15T09:06:49.284 [DEBUG] [Thread-201595] [transport.py] [_log()] kex follows: False
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] Compression: none
2026-02-15T09:06:49.285 [DEBUG] [Thread-201595] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:06:49.342 [DEBUG] [Thread-201595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:06:49.343 [DEBUG] [Thread-201595] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:06:49.343 [DEBUG] [Thread-201595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:06:49.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:06:49.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:06:49.402 [DEBUG] [Thread-201595] [transport.py] [_log()] userauth is OK
2026-02-15T09:06:49.402 [DEBUG] [Thread-201595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:06:49.403 [DEBUG] [Thread-201595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:06:49.403 [DEBUG] [Thread-201595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:06:49.403 [DEBUG] [Thread-201595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:06:49.422 [INFO] [Thread-201595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:06:49.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:06:49.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:06:50.275 [DEBUG] [Thread-201595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:06:50.276 [DEBUG] [Thread-201595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:06:50.323 [DEBUG] [Thread-201595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:06:50.323 [DEBUG] [Thread-201595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:06:50.333 [DEBUG] [Thread-201595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:06:50.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:06:50.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:06:50.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:06:50.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:06:50.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:06:50.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:06:50.380 [DEBUG] [Thread-201595] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:06:55.588 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:06:55.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:03.031 [DEBUG] [Thread-201597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:18.075 [DEBUG] [Thread-201598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:20.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:07:20.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:07:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:07:22.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 6, 24), 5.17, 70.43, 0.0, 25.99, 9.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:07:22.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:06:24
2026-02-15T09:07:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:07:22.801 [DEBUG] [Thread-201599] [transport.py] [_log()] starting thread (client mode): 0xa2de3820
2026-02-15T09:07:22.801 [DEBUG] [Thread-201599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:07:22.821 [DEBUG] [Thread-201599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:07:22.821 [INFO] [Thread-201599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:07:22.824 [DEBUG] [Thread-201599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:07:22.824 [DEBUG] [Thread-201599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:07:22.824 [DEBUG] [Thread-201599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:07:22.824 [DEBUG] [Thread-201599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:22.824 [DEBUG] [Thread-201599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] client lang: <none>
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] server lang: <none>
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] kex follows: False
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] Compression: none
2026-02-15T09:07:22.825 [DEBUG] [Thread-201599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:07:22.842 [DEBUG] [Thread-201599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:07:22.843 [DEBUG] [Thread-201599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:07:22.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:07:22.844 [DEBUG] [Thread-201599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:07:22.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:07:22.846 [DEBUG] [Thread-201599] [transport.py] [_log()] userauth is OK
2026-02-15T09:07:22.846 [DEBUG] [Thread-201599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:07:22.847 [DEBUG] [Thread-201599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:07:22.847 [DEBUG] [Thread-201599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:07:22.847 [DEBUG] [Thread-201599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:07:22.867 [INFO] [Thread-201599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:07:22.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:07:23.544 [DEBUG] [Thread-201599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:07:23.544 [DEBUG] [Thread-201599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:07:23.554 [DEBUG] [Thread-201599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:07:23.584 [DEBUG] [Thread-201599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:07:23.585 [DEBUG] [Thread-201599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:07:23.588 [DEBUG] [Thread-201599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:07:23.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:07:23.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:07:23.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:07:23.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:07:23.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:07:23.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:07:23.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:07:23.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:07:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:07:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.296282 -999.00  +10.30  21.28     68   +4.80 1 1 1 1 1   888    0 7.07 76.21 ----- 21.3 21.3 137.4 28.4 15.8 -28.1 14.8 -26.7 13.4 -24.9 14.1 -27.0
2026-02-15T09:07:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:07:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:07:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.296282
2026-02-15T09:07:23.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:07:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:07:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:07:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:07:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:07:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:06:24', tmtdew=5.17, humidity=70.43, cloud=0.0, wind=25.99, temperature=9.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:06:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:07:23.615 [DEBUG] [Thread-201599] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:07:23.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:07:23.776 [DEBUG] [Thread-201602] [transport.py] [_log()] starting thread (client mode): 0xa2d016c0
2026-02-15T09:07:23.776 [DEBUG] [Thread-201602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:07:23.794 [DEBUG] [Thread-201602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:07:23.794 [INFO] [Thread-201602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:07:23.801 [DEBUG] [Thread-201602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:07:23.801 [DEBUG] [Thread-201602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:07:23.801 [DEBUG] [Thread-201602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] client lang: <none>
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] server lang: <none>
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] kex follows: False
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:07:23.802 [DEBUG] [Thread-201602] [transport.py] [_log()] Compression: none
2026-02-15T09:07:23.803 [DEBUG] [Thread-201602] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:07:23.861 [DEBUG] [Thread-201602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:07:23.862 [DEBUG] [Thread-201602] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:07:23.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:07:23.863 [DEBUG] [Thread-201602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:07:23.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:07:23.918 [DEBUG] [Thread-201602] [transport.py] [_log()] userauth is OK
2026-02-15T09:07:23.918 [DEBUG] [Thread-201602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:07:23.918 [DEBUG] [Thread-201602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:07:23.919 [DEBUG] [Thread-201602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:07:23.919 [DEBUG] [Thread-201602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:07:23.942 [INFO] [Thread-201602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:07:23.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:07:23.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:07:24.734 [DEBUG] [Thread-201602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:07:24.735 [DEBUG] [Thread-201602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:07:24.782 [DEBUG] [Thread-201602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:07:24.782 [DEBUG] [Thread-201602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:07:24.793 [DEBUG] [Thread-201602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:07:24.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:07:24.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:07:24.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:07:24.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:07:24.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:07:24.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:07:24.829 [DEBUG] [Thread-201602] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:07:33.112 [DEBUG] [Thread-201604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:38.981 [DEBUG] [Thread-201605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:48.160 [DEBUG] [Thread-201606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:07:54.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:07:54.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:07:55.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:55.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:07:56.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 7, 36), 6.8, 62.77, 0.0, 28.44, 10.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:07:56.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:07:36
2026-02-15T09:07:57.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:07:57.331 [DEBUG] [Thread-201607] [transport.py] [_log()] starting thread (client mode): 0xa2d00a30
2026-02-15T09:07:57.331 [DEBUG] [Thread-201607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:07:57.352 [DEBUG] [Thread-201607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:07:57.352 [INFO] [Thread-201607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] client lang: <none>
2026-02-15T09:07:57.355 [DEBUG] [Thread-201607] [transport.py] [_log()] server lang: <none>
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] kex follows: False
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] Compression: none
2026-02-15T09:07:57.356 [DEBUG] [Thread-201607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:07:57.377 [DEBUG] [Thread-201607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:07:57.378 [DEBUG] [Thread-201607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:07:57.379 [DEBUG] [Thread-201607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:07:57.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:07:57.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:07:57.421 [DEBUG] [Thread-201607] [transport.py] [_log()] userauth is OK
2026-02-15T09:07:57.421 [DEBUG] [Thread-201607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:07:57.421 [DEBUG] [Thread-201607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:07:57.421 [DEBUG] [Thread-201607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:07:57.421 [DEBUG] [Thread-201607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:07:57.457 [INFO] [Thread-201607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:07:57.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:07:58.096 [DEBUG] [Thread-201607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:07:58.096 [DEBUG] [Thread-201607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:07:58.096 [DEBUG] [Thread-201607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:07:58.137 [DEBUG] [Thread-201607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:07:58.137 [DEBUG] [Thread-201607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:07:58.140 [DEBUG] [Thread-201607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:07:58.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:07:58.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:07:58.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:07:58.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:07:58.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:07:58.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:07:58.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:07:58.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:07:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:07:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.296629 -999.00  +10.10  24.96     69   +4.80 1 1 1 1 1   888    0 7.36 81.87 ----- 25.0 25.0 167.6 28.0 15.8 -26.4 14.9 -26.3 13.3 -25.2 14.1 -27.3
2026-02-15T09:07:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:07:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:07:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.296629
2026-02-15T09:07:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:07:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:07:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:07:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:07:58.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:07:58.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:07:36', tmtdew=6.8, humidity=62.77, cloud=0.0, wind=28.44, temperature=10.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:07:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:07:58.165 [DEBUG] [Thread-201607] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:07:58.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:07:58.271 [DEBUG] [Thread-201610] [transport.py] [_log()] starting thread (client mode): 0xa2d03700
2026-02-15T09:07:58.272 [DEBUG] [Thread-201610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:07:58.286 [DEBUG] [Thread-201610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:07:58.287 [INFO] [Thread-201610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] client lang: <none>
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] server lang: <none>
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] kex follows: False
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:07:58.294 [DEBUG] [Thread-201610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:07:58.295 [DEBUG] [Thread-201610] [transport.py] [_log()] Compression: none
2026-02-15T09:07:58.295 [DEBUG] [Thread-201610] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:07:58.352 [DEBUG] [Thread-201610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:07:58.352 [DEBUG] [Thread-201610] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:07:58.352 [DEBUG] [Thread-201610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:07:58.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:07:58.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:07:58.410 [DEBUG] [Thread-201610] [transport.py] [_log()] userauth is OK
2026-02-15T09:07:58.410 [DEBUG] [Thread-201610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:07:58.410 [DEBUG] [Thread-201610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:07:58.410 [DEBUG] [Thread-201610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:07:58.410 [DEBUG] [Thread-201610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:07:58.424 [INFO] [Thread-201610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:07:58.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:07:58.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:07:59.260 [DEBUG] [Thread-201610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:07:59.260 [DEBUG] [Thread-201610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:07:59.308 [DEBUG] [Thread-201610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:07:59.309 [DEBUG] [Thread-201610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:07:59.318 [DEBUG] [Thread-201610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:07:59.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:07:59.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:07:59.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:07:59.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:07:59.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:07:59.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:07:59.354 [DEBUG] [Thread-201610] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:08:03.195 [DEBUG] [Thread-201612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:08:18.248 [DEBUG] [Thread-201613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:08:29.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:08:29.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:08:29.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:08:31.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 8, 12), 5.32, 69.72, 0.0, 27.45, 10.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:08:31.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:08:12
2026-02-15T09:08:31.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:08:31.948 [DEBUG] [Thread-201614] [transport.py] [_log()] starting thread (client mode): 0xa2d036a0
2026-02-15T09:08:31.948 [DEBUG] [Thread-201614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:08:31.970 [DEBUG] [Thread-201614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:08:31.970 [INFO] [Thread-201614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:08:31.974 [DEBUG] [Thread-201614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] client lang: <none>
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] server lang: <none>
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] kex follows: False
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] Compression: none
2026-02-15T09:08:31.975 [DEBUG] [Thread-201614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:08:31.991 [DEBUG] [Thread-201614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:08:31.991 [DEBUG] [Thread-201614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:08:31.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:08:31.992 [DEBUG] [Thread-201614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:08:31.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:08:31.994 [DEBUG] [Thread-201614] [transport.py] [_log()] userauth is OK
2026-02-15T09:08:31.995 [DEBUG] [Thread-201614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:08:31.995 [DEBUG] [Thread-201614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:08:31.995 [DEBUG] [Thread-201614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:08:31.995 [DEBUG] [Thread-201614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:08:32.018 [INFO] [Thread-201614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:08:32.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:08:32.768 [DEBUG] [Thread-201614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:08:32.769 [DEBUG] [Thread-201614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:08:32.769 [DEBUG] [Thread-201614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:08:32.809 [DEBUG] [Thread-201614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:08:32.809 [DEBUG] [Thread-201614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:08:32.812 [DEBUG] [Thread-201614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:08:32.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:08:32.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:08:32.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:08:32.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:08:32.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:08:32.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:08:32.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:08:32.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:08:32.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:08:32.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.296976 -999.00  +10.10  21.82     70   +4.90 1 1 1 1 1   888    0 7.53 86.00 ----- 21.8 21.8 149.6 31.9 15.8 -27.1 14.9 -25.0 13.4 -25.9 14.2 -27.4
2026-02-15T09:08:32.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:08:32.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:08:32.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.296976
2026-02-15T09:08:32.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:08:32.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:08:32.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:08:32.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:08:32.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:08:32.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:08:12', tmtdew=5.32, humidity=69.72, cloud=0.0, wind=27.45, temperature=10.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:07:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:08:32.837 [DEBUG] [Thread-201614] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:08:32.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:08:32.958 [DEBUG] [Thread-201617] [transport.py] [_log()] starting thread (client mode): 0xa2d00a30
2026-02-15T09:08:32.958 [DEBUG] [Thread-201617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:08:32.997 [DEBUG] [Thread-201617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:08:32.997 [INFO] [Thread-201617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:08:33.029 [DEBUG] [Thread-201617] [transport.py] [_log()] client lang: <none>
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] server lang: <none>
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] kex follows: False
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] Compression: none
2026-02-15T09:08:33.030 [DEBUG] [Thread-201617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:08:33.107 [DEBUG] [Thread-201617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:08:33.108 [DEBUG] [Thread-201617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:08:33.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:08:33.109 [DEBUG] [Thread-201617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:08:33.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:08:33.215 [DEBUG] [Thread-201617] [transport.py] [_log()] userauth is OK
2026-02-15T09:08:33.215 [DEBUG] [Thread-201617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:08:33.216 [DEBUG] [Thread-201617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:08:33.216 [DEBUG] [Thread-201617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:08:33.216 [DEBUG] [Thread-201617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:08:33.260 [INFO] [Thread-201617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:08:33.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:08:33.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:08:33.287 [DEBUG] [Thread-201619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:08:34.075 [DEBUG] [Thread-201617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:08:34.076 [DEBUG] [Thread-201617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:08:34.151 [DEBUG] [Thread-201617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:08:34.151 [DEBUG] [Thread-201617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:08:34.185 [DEBUG] [Thread-201617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:08:34.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:08:34.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:08:34.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:08:34.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:08:34.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:08:34.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:08:34.320 [DEBUG] [Thread-201617] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:08:39.009 [DEBUG] [Thread-201620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:08:48.345 [DEBUG] [Thread-201621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:08:55.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:08:55.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:03.381 [DEBUG] [Thread-201622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:04.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:09:04.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:09:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:09:06.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 8, 48), 5.21, 70.25, 0.0, 25.64, 10.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:09:06.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:08:48
2026-02-15T09:09:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:09:06.670 [DEBUG] [Thread-201623] [transport.py] [_log()] starting thread (client mode): 0xa57e31f0
2026-02-15T09:09:06.670 [DEBUG] [Thread-201623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:09:06.689 [DEBUG] [Thread-201623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:09:06.689 [INFO] [Thread-201623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] client lang: <none>
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] server lang: <none>
2026-02-15T09:09:06.692 [DEBUG] [Thread-201623] [transport.py] [_log()] kex follows: False
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] Compression: none
2026-02-15T09:09:06.693 [DEBUG] [Thread-201623] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:09:06.710 [DEBUG] [Thread-201623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:09:06.710 [DEBUG] [Thread-201623] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:09:06.711 [DEBUG] [Thread-201623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:09:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:09:06.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:09:06.712 [DEBUG] [Thread-201623] [transport.py] [_log()] userauth is OK
2026-02-15T09:09:06.712 [DEBUG] [Thread-201623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:09:06.713 [DEBUG] [Thread-201623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:09:06.713 [DEBUG] [Thread-201623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:09:06.713 [DEBUG] [Thread-201623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:09:06.730 [INFO] [Thread-201623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:09:06.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:09:07.384 [DEBUG] [Thread-201623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:09:07.384 [DEBUG] [Thread-201623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:09:07.385 [DEBUG] [Thread-201623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:09:07.425 [DEBUG] [Thread-201623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:09:07.426 [DEBUG] [Thread-201623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:09:07.429 [DEBUG] [Thread-201623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:09:07.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:09:07.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:09:07.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:09:07.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:09:07.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:09:07.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:09:07.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:09:07.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:09:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:09:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.297324 -999.00   +9.80  25.93     71   +4.80 1 1 1 1 1   888    0 7.38 84.45 ----- 25.9 25.9 139.8 30.0 15.8 -27.5 14.9 -25.3 13.4 -25.5 14.2 -27.0
2026-02-15T09:09:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:09:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:09:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.297324
2026-02-15T09:09:07.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:09:07.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:08:48', tmtdew=5.21, humidity=70.25, cloud=0.0, wind=25.64, temperature=10.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:08:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:09:07.455 [DEBUG] [Thread-201623] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:09:07.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:09:07.551 [DEBUG] [Thread-201626] [transport.py] [_log()] starting thread (client mode): 0xa57e2740
2026-02-15T09:09:07.551 [DEBUG] [Thread-201626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:09:07.569 [DEBUG] [Thread-201626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:09:07.569 [INFO] [Thread-201626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:09:07.577 [DEBUG] [Thread-201626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:09:07.577 [DEBUG] [Thread-201626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:09:07.577 [DEBUG] [Thread-201626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:09:07.577 [DEBUG] [Thread-201626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] client lang: <none>
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] server lang: <none>
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] kex follows: False
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] Compression: none
2026-02-15T09:09:07.578 [DEBUG] [Thread-201626] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:09:07.639 [DEBUG] [Thread-201626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:09:07.640 [DEBUG] [Thread-201626] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:09:07.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:09:07.641 [DEBUG] [Thread-201626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:09:07.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:09:07.698 [DEBUG] [Thread-201626] [transport.py] [_log()] userauth is OK
2026-02-15T09:09:07.699 [DEBUG] [Thread-201626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:09:07.699 [DEBUG] [Thread-201626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:09:07.699 [DEBUG] [Thread-201626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:09:07.699 [DEBUG] [Thread-201626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:09:07.724 [INFO] [Thread-201626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:09:07.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:09:07.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:09:08.587 [DEBUG] [Thread-201626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:09:08.587 [DEBUG] [Thread-201626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:09:08.641 [DEBUG] [Thread-201626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:09:08.641 [DEBUG] [Thread-201626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:09:08.651 [DEBUG] [Thread-201626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:09:08.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:09:08.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:09:08.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:09:08.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:09:08.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:09:08.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:09:08.687 [DEBUG] [Thread-201626] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:09:18.415 [DEBUG] [Thread-201628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:33.463 [DEBUG] [Thread-201629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:38.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:09:38.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:09:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:09:39.044 [DEBUG] [Thread-201630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 9, 24), 5.25, 70.08, 0.0, 24.35, 10.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:09:40.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:09:24
2026-02-15T09:09:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:09:41.292 [DEBUG] [Thread-201631] [transport.py] [_log()] starting thread (client mode): 0xa57e25c0
2026-02-15T09:09:41.292 [DEBUG] [Thread-201631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:09:41.313 [DEBUG] [Thread-201631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:09:41.313 [INFO] [Thread-201631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:41.316 [DEBUG] [Thread-201631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] client lang: <none>
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] server lang: <none>
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] kex follows: False
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] Compression: none
2026-02-15T09:09:41.317 [DEBUG] [Thread-201631] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:09:41.336 [DEBUG] [Thread-201631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:09:41.336 [DEBUG] [Thread-201631] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:09:41.337 [DEBUG] [Thread-201631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:09:41.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:09:41.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:09:41.339 [DEBUG] [Thread-201631] [transport.py] [_log()] userauth is OK
2026-02-15T09:09:41.339 [DEBUG] [Thread-201631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:09:41.339 [DEBUG] [Thread-201631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:09:41.339 [DEBUG] [Thread-201631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:09:41.339 [DEBUG] [Thread-201631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:09:41.364 [INFO] [Thread-201631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:09:41.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:09:41.947 [DEBUG] [Thread-201631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:09:41.947 [DEBUG] [Thread-201631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:09:41.947 [DEBUG] [Thread-201631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:09:41.988 [DEBUG] [Thread-201631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:09:41.988 [DEBUG] [Thread-201631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:09:41.991 [DEBUG] [Thread-201631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:09:42.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:09:42.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:09:42.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:09:42.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:09:42.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:09:42.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:09:42.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:09:42.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:09:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:09:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.297671 -999.00   +9.80  20.74     70   +4.80 1 1 1 1 1   888    0 7.17 79.12 ----- 20.7 20.7 153.0 31.2 15.8 -27.6 14.9 -25.7 13.4 -26.6 14.2 -27.0
2026-02-15T09:09:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:09:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:09:42.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.297671
2026-02-15T09:09:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:09:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:09:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:09:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:09:42.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:09:42.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:09:24', tmtdew=5.25, humidity=70.08, cloud=0.0, wind=24.35, temperature=10.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:08:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:09:42.019 [DEBUG] [Thread-201631] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:09:42.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:09:42.120 [DEBUG] [Thread-201634] [transport.py] [_log()] starting thread (client mode): 0xa57e1d50
2026-02-15T09:09:42.120 [DEBUG] [Thread-201634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:09:42.140 [DEBUG] [Thread-201634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:09:42.140 [INFO] [Thread-201634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:09:42.153 [DEBUG] [Thread-201634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:09:42.153 [DEBUG] [Thread-201634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:09:42.153 [DEBUG] [Thread-201634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] client lang: <none>
2026-02-15T09:09:42.154 [DEBUG] [Thread-201634] [transport.py] [_log()] server lang: <none>
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] kex follows: False
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:09:42.155 [DEBUG] [Thread-201634] [transport.py] [_log()] Compression: none
2026-02-15T09:09:42.156 [DEBUG] [Thread-201634] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:09:42.219 [DEBUG] [Thread-201634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:09:42.220 [DEBUG] [Thread-201634] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:09:42.221 [DEBUG] [Thread-201634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:09:42.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:09:42.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:09:42.288 [DEBUG] [Thread-201634] [transport.py] [_log()] userauth is OK
2026-02-15T09:09:42.288 [DEBUG] [Thread-201634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:09:42.288 [DEBUG] [Thread-201634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:09:42.289 [DEBUG] [Thread-201634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:09:42.289 [DEBUG] [Thread-201634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:09:42.312 [INFO] [Thread-201634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:09:42.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:09:42.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:09:43.139 [DEBUG] [Thread-201634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:09:43.139 [DEBUG] [Thread-201634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:09:43.192 [DEBUG] [Thread-201634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:09:43.192 [DEBUG] [Thread-201634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:09:43.205 [DEBUG] [Thread-201634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:09:43.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:09:43.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:09:43.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:09:43.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:09:43.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:09:43.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:09:43.254 [DEBUG] [Thread-201634] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:09:48.502 [DEBUG] [Thread-201636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:56.016 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:09:56.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:03.557 [DEBUG] [Thread-201637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:13.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:10:13.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:10:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:10:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 10), 5.44, 68.9, 0.0, 24.56, 10.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:10:15.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:10:00
2026-02-15T09:10:15.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:10:15.651 [DEBUG] [Thread-201638] [transport.py] [_log()] starting thread (client mode): 0xa2d02560
2026-02-15T09:10:15.651 [DEBUG] [Thread-201638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:10:15.671 [DEBUG] [Thread-201638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:10:15.671 [INFO] [Thread-201638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:10:15.674 [DEBUG] [Thread-201638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] client lang: <none>
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] server lang: <none>
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] kex follows: False
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:10:15.675 [DEBUG] [Thread-201638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:10:15.676 [DEBUG] [Thread-201638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:10:15.676 [DEBUG] [Thread-201638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:10:15.676 [DEBUG] [Thread-201638] [transport.py] [_log()] Compression: none
2026-02-15T09:10:15.676 [DEBUG] [Thread-201638] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:10:15.695 [DEBUG] [Thread-201638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:10:15.696 [DEBUG] [Thread-201638] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:10:15.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:10:15.697 [DEBUG] [Thread-201638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:10:15.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:10:15.699 [DEBUG] [Thread-201638] [transport.py] [_log()] userauth is OK
2026-02-15T09:10:15.699 [DEBUG] [Thread-201638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:10:15.700 [DEBUG] [Thread-201638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:10:15.700 [DEBUG] [Thread-201638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:10:15.700 [DEBUG] [Thread-201638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:10:15.725 [INFO] [Thread-201638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:10:15.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:10:18.595 [DEBUG] [Thread-201640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:28.441 [DEBUG] [Thread-201638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:10:28.441 [DEBUG] [Thread-201638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:10:28.441 [DEBUG] [Thread-201638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:10:28.483 [DEBUG] [Thread-201638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:10:28.483 [DEBUG] [Thread-201638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:10:28.485 [DEBUG] [Thread-201638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:10:28.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:10:28.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:10:28.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:10:28.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:10:28.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:10:28.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:10:28.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:10:28.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:10:28.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:10:28.849 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-15T09:10:28.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:10:00', tmtdew=5.44, humidity=68.9, cloud=0.0, wind=24.56, temperature=10.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:10:28.851 [DEBUG] [Thread-201638] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:10:28.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:10:28.958 [DEBUG] [Thread-201642] [transport.py] [_log()] starting thread (client mode): 0xa2d006d0
2026-02-15T09:10:28.959 [DEBUG] [Thread-201642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:10:29.002 [DEBUG] [Thread-201642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:10:29.003 [INFO] [Thread-201642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:10:29.034 [DEBUG] [Thread-201642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] client lang: <none>
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] server lang: <none>
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] kex follows: False
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:10:29.035 [DEBUG] [Thread-201642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:10:29.036 [DEBUG] [Thread-201642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:10:29.036 [DEBUG] [Thread-201642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:10:29.036 [DEBUG] [Thread-201642] [transport.py] [_log()] Compression: none
2026-02-15T09:10:29.036 [DEBUG] [Thread-201642] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:10:29.116 [DEBUG] [Thread-201642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:10:29.117 [DEBUG] [Thread-201642] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:10:29.118 [DEBUG] [Thread-201642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:10:29.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:10:29.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:10:29.185 [DEBUG] [Thread-201642] [transport.py] [_log()] userauth is OK
2026-02-15T09:10:29.185 [DEBUG] [Thread-201642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:10:29.186 [DEBUG] [Thread-201642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:10:29.186 [DEBUG] [Thread-201642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:10:29.186 [DEBUG] [Thread-201642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:10:29.213 [INFO] [Thread-201642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:10:29.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:10:29.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:10:30.070 [DEBUG] [Thread-201642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:10:30.070 [DEBUG] [Thread-201642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:10:30.120 [DEBUG] [Thread-201642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:10:30.120 [DEBUG] [Thread-201642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:10:30.131 [DEBUG] [Thread-201642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:10:30.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:10:30.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:10:30.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:10:30.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:10:30.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:10:30.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:10:30.177 [DEBUG] [Thread-201642] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:10:33.632 [DEBUG] [Thread-201644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:39.090 [DEBUG] [Thread-201645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:48.696 [DEBUG] [Thread-201646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:56.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:10:56.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:11:00.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:11:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:11:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 10, 35), 6.55, 63.89, 0.0, 26.08, 10.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:11:02.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:10:35
2026-02-15T09:11:03.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:11:03.401 [DEBUG] [Thread-201647] [transport.py] [_log()] starting thread (client mode): 0xa2d03c70
2026-02-15T09:11:03.401 [DEBUG] [Thread-201647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:11:03.420 [DEBUG] [Thread-201647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:11:03.421 [INFO] [Thread-201647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] client lang: <none>
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] server lang: <none>
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] kex follows: False
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] Compression: none
2026-02-15T09:11:03.424 [DEBUG] [Thread-201647] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:11:03.440 [DEBUG] [Thread-201647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:11:03.441 [DEBUG] [Thread-201647] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:11:03.442 [DEBUG] [Thread-201647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:11:03.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:11:03.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:11:03.444 [DEBUG] [Thread-201647] [transport.py] [_log()] userauth is OK
2026-02-15T09:11:03.444 [DEBUG] [Thread-201647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:11:03.444 [DEBUG] [Thread-201647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:11:03.444 [DEBUG] [Thread-201647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:11:03.444 [DEBUG] [Thread-201647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:11:03.463 [INFO] [Thread-201647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:11:03.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:11:03.742 [DEBUG] [Thread-201649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:04.032 [DEBUG] [Thread-201647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:11:04.033 [DEBUG] [Thread-201647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:11:04.033 [DEBUG] [Thread-201647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:11:04.073 [DEBUG] [Thread-201647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:11:04.074 [DEBUG] [Thread-201647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:11:04.077 [DEBUG] [Thread-201647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:11:04.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:11:04.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:11:04.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:11:04.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:11:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:11:04.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:11:04.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:11:04.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:11:04.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:11:04.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.299060 -999.00  +10.20  24.47     69   +4.80 1 1 1 1 1   888    0 6.99 70.93 ----- 24.5 24.5 152.4 30.3 15.9 -27.2 15.0 -26.1 13.6 -25.9 14.2 -27.5
2026-02-15T09:11:04.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:11:04.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:11:04.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.299060
2026-02-15T09:11:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:11:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:11:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:11:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:11:04.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:11:04.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:10:35', tmtdew=6.55, humidity=63.89, cloud=0.0, wind=26.08, temperature=10.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:10:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:11:04.097 [DEBUG] [Thread-201647] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:11:04.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:11:04.193 [DEBUG] [Thread-201651] [transport.py] [_log()] starting thread (client mode): 0xa57c29b0
2026-02-15T09:11:04.193 [DEBUG] [Thread-201651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:11:04.208 [DEBUG] [Thread-201651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:11:04.208 [INFO] [Thread-201651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:11:04.216 [DEBUG] [Thread-201651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:11:04.216 [DEBUG] [Thread-201651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:11:04.216 [DEBUG] [Thread-201651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:11:04.216 [DEBUG] [Thread-201651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] client lang: <none>
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] server lang: <none>
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] kex follows: False
2026-02-15T09:11:04.217 [DEBUG] [Thread-201651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:11:04.218 [DEBUG] [Thread-201651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:11:04.218 [DEBUG] [Thread-201651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:11:04.218 [DEBUG] [Thread-201651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:11:04.218 [DEBUG] [Thread-201651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:11:04.218 [DEBUG] [Thread-201651] [transport.py] [_log()] Compression: none
2026-02-15T09:11:04.218 [DEBUG] [Thread-201651] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:11:04.273 [DEBUG] [Thread-201651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:11:04.274 [DEBUG] [Thread-201651] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:11:04.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:11:04.275 [DEBUG] [Thread-201651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:11:04.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:11:04.328 [DEBUG] [Thread-201651] [transport.py] [_log()] userauth is OK
2026-02-15T09:11:04.329 [DEBUG] [Thread-201651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:11:04.329 [DEBUG] [Thread-201651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:11:04.329 [DEBUG] [Thread-201651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:11:04.329 [DEBUG] [Thread-201651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:11:04.350 [INFO] [Thread-201651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:11:04.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:11:04.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:11:05.181 [DEBUG] [Thread-201651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:11:05.182 [DEBUG] [Thread-201651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:11:05.229 [DEBUG] [Thread-201651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:11:05.230 [DEBUG] [Thread-201651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:11:05.242 [DEBUG] [Thread-201651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:11:05.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:11:05.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:11: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-02-15T09:11:05.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:11:05.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:11:05.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:11:05.281 [DEBUG] [Thread-201651] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:11:18.780 [DEBUG] [Thread-201653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:33.834 [DEBUG] [Thread-201654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:11:35.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:11:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:11:37.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 11, 11), 5.53, 68.96, 0.0, 26.84, 10.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:11:37.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:11:11
2026-02-15T09:11:38.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:11:38.467 [DEBUG] [Thread-201655] [transport.py] [_log()] starting thread (client mode): 0xa57e3f40
2026-02-15T09:11:38.468 [DEBUG] [Thread-201655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:11:38.483 [DEBUG] [Thread-201655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:11:38.483 [INFO] [Thread-201655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] client lang: <none>
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] server lang: <none>
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] kex follows: False
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:11:38.486 [DEBUG] [Thread-201655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:11:38.487 [DEBUG] [Thread-201655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:11:38.487 [DEBUG] [Thread-201655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:11:38.487 [DEBUG] [Thread-201655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:11:38.487 [DEBUG] [Thread-201655] [transport.py] [_log()] Compression: none
2026-02-15T09:11:38.487 [DEBUG] [Thread-201655] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:11:38.502 [DEBUG] [Thread-201655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:11:38.502 [DEBUG] [Thread-201655] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:11:38.502 [DEBUG] [Thread-201655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:11:38.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:11:38.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:11:38.545 [DEBUG] [Thread-201655] [transport.py] [_log()] userauth is OK
2026-02-15T09:11:38.546 [DEBUG] [Thread-201655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:11:38.546 [DEBUG] [Thread-201655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:11:38.546 [DEBUG] [Thread-201655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:11:38.546 [DEBUG] [Thread-201655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:11:38.567 [INFO] [Thread-201655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:11:38.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:11:39.123 [DEBUG] [Thread-201657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:39.201 [DEBUG] [Thread-201655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:11:39.201 [DEBUG] [Thread-201655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:11:39.201 [DEBUG] [Thread-201655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:11:39.241 [DEBUG] [Thread-201655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:11:39.241 [DEBUG] [Thread-201655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:11:39.246 [DEBUG] [Thread-201655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:11:39.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:11:39.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:11:39.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:11:39.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:11:39.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:11:39.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:11:39.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:11:39.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:11:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:11:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.299407 -999.00  +10.10  17.69     70   +4.90 1 1 1 1 1   888    0 7.11 72.87 ----- 17.7 17.7 150.1 26.8 15.9 -28.0 15.0 -26.0 13.6 -25.8 14.2 -26.9
2026-02-15T09:11:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:11:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:11:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.299407
2026-02-15T09:11:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:11:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:11:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:11:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:11:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:11:39.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:11:11', tmtdew=5.53, humidity=68.96, cloud=0.0, wind=26.84, temperature=10.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:11:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:11:39.270 [DEBUG] [Thread-201655] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:11:39.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:11:39.384 [DEBUG] [Thread-201659] [transport.py] [_log()] starting thread (client mode): 0xa57e2d70
2026-02-15T09:11:39.384 [DEBUG] [Thread-201659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:11:39.417 [DEBUG] [Thread-201659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:11:39.418 [INFO] [Thread-201659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:11:39.443 [DEBUG] [Thread-201659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] client lang: <none>
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] server lang: <none>
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] kex follows: False
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:11:39.444 [DEBUG] [Thread-201659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:11:39.445 [DEBUG] [Thread-201659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:11:39.445 [DEBUG] [Thread-201659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:11:39.445 [DEBUG] [Thread-201659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:11:39.445 [DEBUG] [Thread-201659] [transport.py] [_log()] Compression: none
2026-02-15T09:11:39.445 [DEBUG] [Thread-201659] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:11:39.521 [DEBUG] [Thread-201659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:11:39.522 [DEBUG] [Thread-201659] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:11:39.523 [DEBUG] [Thread-201659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:11:39.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:11:39.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:11:39.615 [DEBUG] [Thread-201659] [transport.py] [_log()] userauth is OK
2026-02-15T09:11:39.615 [DEBUG] [Thread-201659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:11:39.615 [DEBUG] [Thread-201659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:11:39.615 [DEBUG] [Thread-201659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:11:39.616 [DEBUG] [Thread-201659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:11:39.659 [INFO] [Thread-201659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:11:39.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:11:39.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:11:40.478 [DEBUG] [Thread-201659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:11:40.478 [DEBUG] [Thread-201659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:11:40.547 [DEBUG] [Thread-201659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:11:40.547 [DEBUG] [Thread-201659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:11:40.576 [DEBUG] [Thread-201659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:11:40.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:11:40.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:11:40.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:11:40.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:11:40.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:11:40.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:11:40.691 [DEBUG] [Thread-201659] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:11:48.870 [DEBUG] [Thread-201661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:56.302 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:11:56.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:03.922 [DEBUG] [Thread-201662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:10.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:12:10.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:12:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:12:12.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 11, 46), 5.71, 68.12, 0.0, 26.38, 10.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:12:12.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:11:46
2026-02-15T09:12:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:12:13.104 [DEBUG] [Thread-201663] [transport.py] [_log()] starting thread (client mode): 0xa57e1c00
2026-02-15T09:12:13.104 [DEBUG] [Thread-201663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:12:13.123 [DEBUG] [Thread-201663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:12:13.123 [INFO] [Thread-201663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] client lang: <none>
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] server lang: <none>
2026-02-15T09:12:13.127 [DEBUG] [Thread-201663] [transport.py] [_log()] kex follows: False
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] Compression: none
2026-02-15T09:12:13.128 [DEBUG] [Thread-201663] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:12:13.146 [DEBUG] [Thread-201663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:12:13.147 [DEBUG] [Thread-201663] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:12:13.147 [DEBUG] [Thread-201663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:12:13.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:12:13.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:12:13.149 [DEBUG] [Thread-201663] [transport.py] [_log()] userauth is OK
2026-02-15T09:12:13.149 [DEBUG] [Thread-201663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:12:13.150 [DEBUG] [Thread-201663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:12:13.150 [DEBUG] [Thread-201663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:12:13.150 [DEBUG] [Thread-201663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:12:13.168 [INFO] [Thread-201663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:12:13.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:12:13.804 [DEBUG] [Thread-201663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:12:13.804 [DEBUG] [Thread-201663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:12:13.804 [DEBUG] [Thread-201663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:12:13.845 [DEBUG] [Thread-201663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:12:13.846 [DEBUG] [Thread-201663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:12:13.849 [DEBUG] [Thread-201663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:12:13.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:12:13.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:12:13.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:12:13.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:12:13.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:12:13.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:12:13.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:12:13.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:12:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:12:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.299754 -999.00  +10.10  17.11     70   +5.00 1 1 1 1 1   888    0 7.02 68.54 ----- 17.1 17.1 161.4 29.7 15.9 -27.4 15.0 -25.5 13.6 -26.4 14.3 -27.0
2026-02-15T09:12:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:12:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:12:13.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.299754
2026-02-15T09:12:13.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:12:13.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:12:13.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:12:13.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:12:13.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:12:13.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:11:46', tmtdew=5.71, humidity=68.12, cloud=0.0, wind=26.38, temperature=10.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:11:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:12:13.871 [DEBUG] [Thread-201663] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:12:13.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:12:13.970 [DEBUG] [Thread-201666] [transport.py] [_log()] starting thread (client mode): 0xa575a3b0
2026-02-15T09:12:13.970 [DEBUG] [Thread-201666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:12:13.985 [DEBUG] [Thread-201666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:12:13.985 [INFO] [Thread-201666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:12:13.992 [DEBUG] [Thread-201666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] client lang: <none>
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] server lang: <none>
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] kex follows: False
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] Compression: none
2026-02-15T09:12:13.993 [DEBUG] [Thread-201666] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:12:14.052 [DEBUG] [Thread-201666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:12:14.053 [DEBUG] [Thread-201666] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:12:14.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:12:14.054 [DEBUG] [Thread-201666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:12:14.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:12:14.108 [DEBUG] [Thread-201666] [transport.py] [_log()] userauth is OK
2026-02-15T09:12:14.109 [DEBUG] [Thread-201666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:12:14.109 [DEBUG] [Thread-201666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:12:14.109 [DEBUG] [Thread-201666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:12:14.109 [DEBUG] [Thread-201666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:12:14.129 [INFO] [Thread-201666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:12:14.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:12:14.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:12:14.948 [DEBUG] [Thread-201666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:12:14.948 [DEBUG] [Thread-201666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:12:14.998 [DEBUG] [Thread-201666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:12:14.998 [DEBUG] [Thread-201666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:12:15.012 [DEBUG] [Thread-201666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:12:15.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:12:15.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:12:15.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:12:15.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:12:15.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:12:15.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:12:15.044 [DEBUG] [Thread-201666] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:12:18.959 [DEBUG] [Thread-201668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:34.016 [DEBUG] [Thread-201669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:39.158 [DEBUG] [Thread-201670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:45.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:12:45.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:12:45.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:12:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 12, 22), 5.64, 68.45, 0.0, 29.93, 10.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:12:47.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:12:22
2026-02-15T09:12:47.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:12:47.709 [DEBUG] [Thread-201671] [transport.py] [_log()] starting thread (client mode): 0xa81d6bf0
2026-02-15T09:12:47.709 [DEBUG] [Thread-201671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:12:47.729 [DEBUG] [Thread-201671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:12:47.729 [INFO] [Thread-201671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:12:47.732 [DEBUG] [Thread-201671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:12:47.732 [DEBUG] [Thread-201671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] client lang: <none>
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] server lang: <none>
2026-02-15T09:12:47.733 [DEBUG] [Thread-201671] [transport.py] [_log()] kex follows: False
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] Compression: none
2026-02-15T09:12:47.734 [DEBUG] [Thread-201671] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:12:47.752 [DEBUG] [Thread-201671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:12:47.753 [DEBUG] [Thread-201671] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:12:47.753 [DEBUG] [Thread-201671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:12:47.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:12:47.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:12:47.755 [DEBUG] [Thread-201671] [transport.py] [_log()] userauth is OK
2026-02-15T09:12:47.755 [DEBUG] [Thread-201671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:12:47.756 [DEBUG] [Thread-201671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:12:47.756 [DEBUG] [Thread-201671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:12:47.756 [DEBUG] [Thread-201671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:12:47.779 [INFO] [Thread-201671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:12:47.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:12:48.431 [DEBUG] [Thread-201671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:12:48.431 [DEBUG] [Thread-201671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:12:48.432 [DEBUG] [Thread-201671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:12:48.472 [DEBUG] [Thread-201671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:12:48.473 [DEBUG] [Thread-201671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:12:48.476 [DEBUG] [Thread-201671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:12:48.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:12:48.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:12:48.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:12:48.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:12:48.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:12:48.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:12:48.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:12:48.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:12:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:12:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.300449 -999.00  +10.20  24.31     69   +4.80 1 1 1 1 1   888    0 6.77 57.94 ----- 24.3 24.3 166.4 32.5 15.9 -28.3 15.0 -25.9 13.6 -25.8 14.3 -27.4
2026-02-15T09:12:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:12:48.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:12:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.300449
2026-02-15T09:12:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:12:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:12:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:12:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:12:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:12:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:12:22', tmtdew=5.64, humidity=68.45, cloud=0.0, wind=29.93, temperature=10.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:12:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:12:48.504 [DEBUG] [Thread-201671] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:12:48.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:12:48.606 [DEBUG] [Thread-201674] [transport.py] [_log()] starting thread (client mode): 0xa2d02860
2026-02-15T09:12:48.606 [DEBUG] [Thread-201674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:12:48.629 [DEBUG] [Thread-201674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:12:48.630 [INFO] [Thread-201674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:12:48.643 [DEBUG] [Thread-201674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:12:48.643 [DEBUG] [Thread-201674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] client lang: <none>
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] server lang: <none>
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] kex follows: False
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:12:48.644 [DEBUG] [Thread-201674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:12:48.645 [DEBUG] [Thread-201674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:12:48.645 [DEBUG] [Thread-201674] [transport.py] [_log()] Compression: none
2026-02-15T09:12:48.645 [DEBUG] [Thread-201674] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:12:48.710 [DEBUG] [Thread-201674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:12:48.710 [DEBUG] [Thread-201674] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:12:48.711 [DEBUG] [Thread-201674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:12:48.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:12:48.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:12:48.783 [DEBUG] [Thread-201674] [transport.py] [_log()] userauth is OK
2026-02-15T09:12:48.783 [DEBUG] [Thread-201674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:12:48.783 [DEBUG] [Thread-201674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:12:48.783 [DEBUG] [Thread-201674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:12:48.783 [DEBUG] [Thread-201674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:12:48.809 [INFO] [Thread-201674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:12:48.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:12:48.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:12:49.053 [DEBUG] [Thread-201676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:49.637 [DEBUG] [Thread-201674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:12:49.638 [DEBUG] [Thread-201674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:12:49.692 [DEBUG] [Thread-201674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:12:49.692 [DEBUG] [Thread-201674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:12:49.707 [DEBUG] [Thread-201674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:12:49.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:12:49.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:12:49.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:12:49.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:12:49.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:12:49.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:12:49.770 [DEBUG] [Thread-201674] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:12:56.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:12:56.444 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:04.111 [DEBUG] [Thread-201677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:19.153 [DEBUG] [Thread-201678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:19.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:13:19.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:13:19.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:13:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 12, 57), 5.71, 67.81, 0.0, 24.67, 10.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:13:21.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:12:57
2026-02-15T09:13:22.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:13:22.192 [DEBUG] [Thread-201679] [transport.py] [_log()] starting thread (client mode): 0xa57c0c10
2026-02-15T09:13:22.192 [DEBUG] [Thread-201679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:13:22.203 [DEBUG] [Thread-201679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:13:22.203 [INFO] [Thread-201679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] client lang: <none>
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] server lang: <none>
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] kex follows: False
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:13:22.205 [DEBUG] [Thread-201679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:13:22.206 [DEBUG] [Thread-201679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:13:22.206 [DEBUG] [Thread-201679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:13:22.206 [DEBUG] [Thread-201679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:13:22.206 [DEBUG] [Thread-201679] [transport.py] [_log()] Compression: none
2026-02-15T09:13:22.206 [DEBUG] [Thread-201679] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:13:22.220 [DEBUG] [Thread-201679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:13:22.221 [DEBUG] [Thread-201679] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:13:22.222 [DEBUG] [Thread-201679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:13:22.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:13:22.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:13:22.224 [DEBUG] [Thread-201679] [transport.py] [_log()] userauth is OK
2026-02-15T09:13:22.225 [DEBUG] [Thread-201679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:13:22.225 [DEBUG] [Thread-201679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:13:22.225 [DEBUG] [Thread-201679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:13:22.225 [DEBUG] [Thread-201679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:13:22.252 [INFO] [Thread-201679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:13:22.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:13:22.875 [DEBUG] [Thread-201679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:13:22.875 [DEBUG] [Thread-201679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:13:22.876 [DEBUG] [Thread-201679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:13:22.916 [DEBUG] [Thread-201679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:13:22.916 [DEBUG] [Thread-201679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:13:22.918 [DEBUG] [Thread-201679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:13:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:13:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:13:22.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:13:22.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:13:22.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:13:22.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:13:22.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:13:22.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:13:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:13:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.300796 -999.00  +10.00  23.03     70   +4.80 1 1 1 1 1   888    0 6.62 56.42 ----- 23.0 23.0 144.0 27.6 15.9 -28.6 15.0 -26.6 13.5 -26.3 14.3 -27.0
2026-02-15T09:13:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:13:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:13:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.300796
2026-02-15T09:13:22.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:13:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:13:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:13:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:13:22.941 [DEBUG] [Thread-201679] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:13:22.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:13:22.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:12:57', tmtdew=5.71, humidity=67.81, cloud=0.0, wind=24.67, temperature=10.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:13:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:13:23.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:13:23.039 [DEBUG] [Thread-201682] [transport.py] [_log()] starting thread (client mode): 0xa57c0310
2026-02-15T09:13:23.039 [DEBUG] [Thread-201682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:13:23.053 [DEBUG] [Thread-201682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:13:23.054 [INFO] [Thread-201682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:13:23.061 [DEBUG] [Thread-201682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:13:23.061 [DEBUG] [Thread-201682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:13:23.061 [DEBUG] [Thread-201682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:13:23.061 [DEBUG] [Thread-201682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:23.061 [DEBUG] [Thread-201682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] client lang: <none>
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] server lang: <none>
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] kex follows: False
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:13:23.062 [DEBUG] [Thread-201682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:13:23.063 [DEBUG] [Thread-201682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:13:23.063 [DEBUG] [Thread-201682] [transport.py] [_log()] Compression: none
2026-02-15T09:13:23.063 [DEBUG] [Thread-201682] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:13:23.122 [DEBUG] [Thread-201682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:13:23.122 [DEBUG] [Thread-201682] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:13:23.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:13:23.123 [DEBUG] [Thread-201682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:13:23.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:13:23.180 [DEBUG] [Thread-201682] [transport.py] [_log()] userauth is OK
2026-02-15T09:13:23.181 [DEBUG] [Thread-201682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:13:23.181 [DEBUG] [Thread-201682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:13:23.181 [DEBUG] [Thread-201682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:13:23.181 [DEBUG] [Thread-201682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:13:23.204 [INFO] [Thread-201682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:13:23.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:13:23.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:13:24.071 [DEBUG] [Thread-201682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:13:24.071 [DEBUG] [Thread-201682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:13:24.119 [DEBUG] [Thread-201682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:13:24.119 [DEBUG] [Thread-201682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:13:24.127 [DEBUG] [Thread-201682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:13:24.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:13:24.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:13:24.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:13:24.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:13:24.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:13:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:13:24.162 [DEBUG] [Thread-201682] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:13:34.190 [DEBUG] [Thread-201684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:39.199 [DEBUG] [Thread-201685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:49.244 [DEBUG] [Thread-201686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:54.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:13:54.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:13:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:13:56.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 13, 33), 6.86, 62.63, 0.0, 27.73, 11.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:13:56.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:13:33
2026-02-15T09:13:56.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:13:56.584 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:56.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:13:56.610 [DEBUG] [Thread-201687] [transport.py] [_log()] starting thread (client mode): 0xa5759a80
2026-02-15T09:13:56.610 [DEBUG] [Thread-201687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:13:56.631 [DEBUG] [Thread-201687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:13:56.631 [INFO] [Thread-201687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:13:56.635 [DEBUG] [Thread-201687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:13:56.635 [DEBUG] [Thread-201687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:13:56.635 [DEBUG] [Thread-201687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:13:56.635 [DEBUG] [Thread-201687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:56.635 [DEBUG] [Thread-201687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:56.635 [DEBUG] [Thread-201687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] client lang: <none>
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] server lang: <none>
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] kex follows: False
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] Compression: none
2026-02-15T09:13:56.636 [DEBUG] [Thread-201687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:13:56.657 [DEBUG] [Thread-201687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:13:56.657 [DEBUG] [Thread-201687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:13:56.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:13:56.658 [DEBUG] [Thread-201687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:13:56.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:13:56.661 [DEBUG] [Thread-201687] [transport.py] [_log()] userauth is OK
2026-02-15T09:13:56.661 [DEBUG] [Thread-201687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:13:56.661 [DEBUG] [Thread-201687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:13:56.661 [DEBUG] [Thread-201687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:13:56.661 [DEBUG] [Thread-201687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:13:56.698 [INFO] [Thread-201687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:13:56.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:13:57.371 [DEBUG] [Thread-201687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:13:57.371 [DEBUG] [Thread-201687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:13:57.372 [DEBUG] [Thread-201687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:13:57.413 [DEBUG] [Thread-201687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:13:57.413 [DEBUG] [Thread-201687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:13:57.416 [DEBUG] [Thread-201687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:13:57.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:13:57.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:13:57.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:13:57.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:13:57.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:13:57.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:13:57.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:13:57.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:13:57.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:13:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.301143 -999.00  +10.10  21.61     70   +4.90 1 1 1 1 1   888    0 6.53 54.64 ----- 21.6 21.6 151.5 29.1 15.9 -27.0 15.0 -26.3 13.6 -24.6 14.4 -26.2
2026-02-15T09:13:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:13:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:13:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.301143
2026-02-15T09:13:57.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:13:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:13:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:13:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:13:57.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:13:57.442 [DEBUG] [Thread-201687] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:13:57.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:13:33', tmtdew=6.86, humidity=62.63, cloud=0.0, wind=27.73, temperature=11.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:13:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:13:57.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:13:57.540 [DEBUG] [Thread-201690] [transport.py] [_log()] starting thread (client mode): 0xa57b0070
2026-02-15T09:13:57.540 [DEBUG] [Thread-201690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:13:57.556 [DEBUG] [Thread-201690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:13:57.557 [INFO] [Thread-201690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:13:57.566 [DEBUG] [Thread-201690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:13:57.566 [DEBUG] [Thread-201690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:13:57.566 [DEBUG] [Thread-201690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] client lang: <none>
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] server lang: <none>
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] kex follows: False
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:13:57.567 [DEBUG] [Thread-201690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:13:57.568 [DEBUG] [Thread-201690] [transport.py] [_log()] Compression: none
2026-02-15T09:13:57.568 [DEBUG] [Thread-201690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:13:57.625 [DEBUG] [Thread-201690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:13:57.625 [DEBUG] [Thread-201690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:13:57.626 [DEBUG] [Thread-201690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:13:57.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:13:57.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:13:57.685 [DEBUG] [Thread-201690] [transport.py] [_log()] userauth is OK
2026-02-15T09:13:57.685 [DEBUG] [Thread-201690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:13:57.685 [DEBUG] [Thread-201690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:13:57.685 [DEBUG] [Thread-201690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:13:57.685 [DEBUG] [Thread-201690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:13:57.706 [INFO] [Thread-201690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:13:57.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:13:57.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:13:58.592 [DEBUG] [Thread-201690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:13:58.593 [DEBUG] [Thread-201690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:13:58.643 [DEBUG] [Thread-201690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:13:58.643 [DEBUG] [Thread-201690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:13:58.655 [DEBUG] [Thread-201690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:13:58.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:13:58.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:13:58.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:13:58.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:13:58.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:13:58.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:13:58.704 [DEBUG] [Thread-201690] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:14:04.281 [DEBUG] [Thread-201692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:14:19.338 [DEBUG] [Thread-201693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:14:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:14:28.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:14:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:14:30.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 14, 8), 6.04, 66.6, 0.0, 25.97, 10.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:14:30.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:14:08
2026-02-15T09:14:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:14:31.077 [DEBUG] [Thread-201694] [transport.py] [_log()] starting thread (client mode): 0xa57e3ee0
2026-02-15T09:14:31.077 [DEBUG] [Thread-201694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:14:31.098 [DEBUG] [Thread-201694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:14:31.098 [INFO] [Thread-201694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:14:31.101 [DEBUG] [Thread-201694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] client lang: <none>
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] server lang: <none>
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] kex follows: False
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] Compression: none
2026-02-15T09:14:31.102 [DEBUG] [Thread-201694] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:14:31.118 [DEBUG] [Thread-201694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:14:31.119 [DEBUG] [Thread-201694] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:14:31.119 [DEBUG] [Thread-201694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:14:31.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:14:31.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:14:31.122 [DEBUG] [Thread-201694] [transport.py] [_log()] userauth is OK
2026-02-15T09:14:31.122 [DEBUG] [Thread-201694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:14:31.122 [DEBUG] [Thread-201694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:14:31.122 [DEBUG] [Thread-201694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:14:31.122 [DEBUG] [Thread-201694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:14:31.170 [INFO] [Thread-201694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:14:31.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:14:31.820 [DEBUG] [Thread-201694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:14:31.821 [DEBUG] [Thread-201694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:14:31.821 [DEBUG] [Thread-201694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:14:31.861 [DEBUG] [Thread-201694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:14:31.862 [DEBUG] [Thread-201694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:14:31.865 [DEBUG] [Thread-201694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:14:31.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:14:31.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:14:31.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:14:31.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:14:31.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:14:31.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:14:31.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:14:31.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:14:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:14:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.301490 -999.00  +10.00  22.89     69   +4.70 1 1 1 1 1   888    0 6.65 54.24 ----- 22.9 22.9 143.8 27.9 15.9 -27.3 14.9 -27.2 13.6 -25.6 14.4 -27.4
2026-02-15T09:14:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:14:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:14:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.301490
2026-02-15T09:14:31.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:14:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:14:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:14:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:14:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:14:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:14:08', tmtdew=6.04, humidity=66.6, cloud=0.0, wind=25.97, temperature=10.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:14:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:14:31.892 [DEBUG] [Thread-201694] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:14:31.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:14:31.988 [DEBUG] [Thread-201697] [transport.py] [_log()] starting thread (client mode): 0xa57e14b0
2026-02-15T09:14:31.989 [DEBUG] [Thread-201697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:14:32.003 [DEBUG] [Thread-201697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:14:32.003 [INFO] [Thread-201697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] client lang: <none>
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] server lang: <none>
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] kex follows: False
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:14:32.011 [DEBUG] [Thread-201697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:14:32.012 [DEBUG] [Thread-201697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:14:32.012 [DEBUG] [Thread-201697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:14:32.012 [DEBUG] [Thread-201697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:14:32.012 [DEBUG] [Thread-201697] [transport.py] [_log()] Compression: none
2026-02-15T09:14:32.012 [DEBUG] [Thread-201697] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:14:32.069 [DEBUG] [Thread-201697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:14:32.070 [DEBUG] [Thread-201697] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:14:32.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:14:32.071 [DEBUG] [Thread-201697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:14:32.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:14:32.124 [DEBUG] [Thread-201697] [transport.py] [_log()] userauth is OK
2026-02-15T09:14:32.124 [DEBUG] [Thread-201697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:14:32.125 [DEBUG] [Thread-201697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:14:32.125 [DEBUG] [Thread-201697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:14:32.125 [DEBUG] [Thread-201697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:14:32.138 [INFO] [Thread-201697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:14:32.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:14:32.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:14:32.961 [DEBUG] [Thread-201697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:14:32.962 [DEBUG] [Thread-201697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:14:33.009 [DEBUG] [Thread-201697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:14:33.009 [DEBUG] [Thread-201697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:14:33.017 [DEBUG] [Thread-201697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:14:33.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:14: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')
2026-02-15T09:14:33.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:14:33.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:14:33.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:14:33.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:14:33.050 [DEBUG] [Thread-201697] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:14:34.375 [DEBUG] [Thread-201699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:14:39.231 [DEBUG] [Thread-201700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:14:49.430 [DEBUG] [Thread-201701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:14:56.725 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:14:56.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:15:03.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:15:03.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:15:04.468 [DEBUG] [Thread-201702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:04.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 14, 44), 6.24, 65.53, 0.0, 29.43, 10.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:15:04.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:14:44
2026-02-15T09:15:05.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:15:05.489 [DEBUG] [Thread-201703] [transport.py] [_log()] starting thread (client mode): 0xa81d62c0
2026-02-15T09:15:05.489 [DEBUG] [Thread-201703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:15:05.510 [DEBUG] [Thread-201703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:15:05.510 [INFO] [Thread-201703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:05.515 [DEBUG] [Thread-201703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] client lang: <none>
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] server lang: <none>
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] kex follows: False
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:15:05.516 [DEBUG] [Thread-201703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:15:05.517 [DEBUG] [Thread-201703] [transport.py] [_log()] Compression: none
2026-02-15T09:15:05.517 [DEBUG] [Thread-201703] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:15:05.535 [DEBUG] [Thread-201703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:15:05.536 [DEBUG] [Thread-201703] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:15:05.536 [DEBUG] [Thread-201703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:15:05.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:15:05.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:15:05.539 [DEBUG] [Thread-201703] [transport.py] [_log()] userauth is OK
2026-02-15T09:15:05.539 [DEBUG] [Thread-201703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:15:05.539 [DEBUG] [Thread-201703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:15:05.539 [DEBUG] [Thread-201703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:15:05.539 [DEBUG] [Thread-201703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:15:05.559 [INFO] [Thread-201703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:15:05.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:15:17.084 [DEBUG] [Thread-201703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:15:17.084 [DEBUG] [Thread-201703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:15:17.085 [DEBUG] [Thread-201703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:15:17.125 [DEBUG] [Thread-201703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:15:17.126 [DEBUG] [Thread-201703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:15:17.128 [DEBUG] [Thread-201703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:15:17.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:15:17.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:15:17.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:15:17.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:15:17.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:15:17.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:15:17.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:15:17.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:15:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:15:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.301837 -999.00  +10.20  23.41     68   +4.70 1 1 1 1 1   888    0 6.43 48.51 ----- 23.4 23.4 163.4 27.9 16.1 -27.3 15.1 -26.5 13.7 -25.0 14.4 -27.5
2026-02-15T09:15:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:15:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:15:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.301837
2026-02-15T09:15:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:15:17.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:15:17.172 [DEBUG] [Thread-201703] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:15:17.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:15:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:15:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:15:17.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:14:44', tmtdew=6.24, humidity=65.53, cloud=0.0, wind=29.43, temperature=10.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:14:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:15:17.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:15:17.267 [DEBUG] [Thread-201706] [transport.py] [_log()] starting thread (client mode): 0xa2d03940
2026-02-15T09:15:17.267 [DEBUG] [Thread-201706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:15:17.282 [DEBUG] [Thread-201706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:15:17.282 [INFO] [Thread-201706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:17.290 [DEBUG] [Thread-201706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] client lang: <none>
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] server lang: <none>
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] kex follows: False
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] Compression: none
2026-02-15T09:15:17.291 [DEBUG] [Thread-201706] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:15:17.349 [DEBUG] [Thread-201706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:15:17.349 [DEBUG] [Thread-201706] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:15:17.350 [DEBUG] [Thread-201706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:15:17.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:15:17.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:15:17.405 [DEBUG] [Thread-201706] [transport.py] [_log()] userauth is OK
2026-02-15T09:15:17.406 [DEBUG] [Thread-201706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:15:17.406 [DEBUG] [Thread-201706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:15:17.406 [DEBUG] [Thread-201706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:15:17.406 [DEBUG] [Thread-201706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:15:17.425 [INFO] [Thread-201706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:15:17.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:15:17.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:15:18.274 [DEBUG] [Thread-201706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:15:18.274 [DEBUG] [Thread-201706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:15:18.322 [DEBUG] [Thread-201706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:15:18.323 [DEBUG] [Thread-201706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:15:18.332 [DEBUG] [Thread-201706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:15:18.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:15: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')
2026-02-15T09:15:18.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:15:18.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:15:18.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:15:18.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:15:18.368 [DEBUG] [Thread-201706] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:15:19.509 [DEBUG] [Thread-201708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:34.564 [DEBUG] [Thread-201709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:39.272 [DEBUG] [Thread-201710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:48.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:15:48.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:15:48.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:15:49.601 [DEBUG] [Thread-201711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 15, 20), 6.24, 65.5, 0.0, 27.83, 10.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:15:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:15:20
2026-02-15T09:15:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:15:51.344 [DEBUG] [Thread-201712] [transport.py] [_log()] starting thread (client mode): 0xa57c1630
2026-02-15T09:15:51.344 [DEBUG] [Thread-201712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:15:51.365 [DEBUG] [Thread-201712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:15:51.365 [INFO] [Thread-201712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] client lang: <none>
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] server lang: <none>
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] kex follows: False
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] Compression: none
2026-02-15T09:15:51.367 [DEBUG] [Thread-201712] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:15:51.375 [DEBUG] [Thread-201712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:15:51.375 [DEBUG] [Thread-201712] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:15:51.375 [DEBUG] [Thread-201712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:15:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:15:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:15:51.376 [DEBUG] [Thread-201712] [transport.py] [_log()] userauth is OK
2026-02-15T09:15:51.376 [DEBUG] [Thread-201712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:15:51.376 [DEBUG] [Thread-201712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:15:51.376 [DEBUG] [Thread-201712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:15:51.376 [DEBUG] [Thread-201712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:15:51.385 [INFO] [Thread-201712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:15:51.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:15:52.048 [DEBUG] [Thread-201712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:15:52.048 [DEBUG] [Thread-201712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:15:52.048 [DEBUG] [Thread-201712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:15:52.089 [DEBUG] [Thread-201712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:15:52.089 [DEBUG] [Thread-201712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:15:52.092 [DEBUG] [Thread-201712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:15:52.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:15:52.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:15:52.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:15:52.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:15:52.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:15:52.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:15:52.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:15:52.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:15:52.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:15:52.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.302532 -999.00  +10.10  23.18     67   +4.40 1 1 1 1 1   888    0 6.56 46.02 ----- 23.2 23.2 150.6 30.9 16.1 -26.9 15.2 -27.0 13.7 -25.9 14.5 -26.6
2026-02-15T09:15:52.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:15:52.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:15:52.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.302532
2026-02-15T09:15:52.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:15:52.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:15:52.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:15:52.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:15:52.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:15:52.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:15:20', tmtdew=6.24, humidity=65.5, cloud=0.0, wind=27.83, temperature=10.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:15:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:15:52.116 [DEBUG] [Thread-201712] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:15:52.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:15:52.214 [DEBUG] [Thread-201715] [transport.py] [_log()] starting thread (client mode): 0xa81d7730
2026-02-15T09:15:52.214 [DEBUG] [Thread-201715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:15:52.229 [DEBUG] [Thread-201715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:15:52.229 [INFO] [Thread-201715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] client lang: <none>
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] server lang: <none>
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] kex follows: False
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] Compression: none
2026-02-15T09:15:52.238 [DEBUG] [Thread-201715] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:15:52.296 [DEBUG] [Thread-201715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:15:52.296 [DEBUG] [Thread-201715] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:15:52.296 [DEBUG] [Thread-201715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:15:52.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:15:52.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:15:52.353 [DEBUG] [Thread-201715] [transport.py] [_log()] userauth is OK
2026-02-15T09:15:52.353 [DEBUG] [Thread-201715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:15:52.353 [DEBUG] [Thread-201715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:15:52.353 [DEBUG] [Thread-201715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:15:52.353 [DEBUG] [Thread-201715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:15:52.372 [INFO] [Thread-201715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:15:52.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:15:52.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:15:53.199 [DEBUG] [Thread-201715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:15:53.199 [DEBUG] [Thread-201715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:15:53.250 [DEBUG] [Thread-201715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:15:53.250 [DEBUG] [Thread-201715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:15:53.262 [DEBUG] [Thread-201715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:15:53.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:15:53.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:15:53.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:15:53.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:15:53.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:15:53.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:15:53.309 [DEBUG] [Thread-201715] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:15:56.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:15:56.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:04.633 [DEBUG] [Thread-201717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:19.673 [DEBUG] [Thread-201718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:23.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:16:23.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:16:23.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:16:25.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 15, 55), 6.36, 64.84, 0.0, 24.23, 10.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:16:25.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:15:55
2026-02-15T09:16:25.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:16:25.662 [DEBUG] [Thread-201719] [transport.py] [_log()] starting thread (client mode): 0xa57b2650
2026-02-15T09:16:25.662 [DEBUG] [Thread-201719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:16:25.675 [DEBUG] [Thread-201719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:16:25.675 [INFO] [Thread-201719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] client lang: <none>
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] server lang: <none>
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] kex follows: False
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] Compression: none
2026-02-15T09:16:25.677 [DEBUG] [Thread-201719] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:16:25.693 [DEBUG] [Thread-201719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:16:25.693 [DEBUG] [Thread-201719] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:16:25.694 [DEBUG] [Thread-201719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:16:25.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:16:25.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:16:25.695 [DEBUG] [Thread-201719] [transport.py] [_log()] userauth is OK
2026-02-15T09:16:25.695 [DEBUG] [Thread-201719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:16:25.696 [DEBUG] [Thread-201719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:16:25.696 [DEBUG] [Thread-201719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:16:25.696 [DEBUG] [Thread-201719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:16:25.722 [INFO] [Thread-201719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:16:25.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:16:26.365 [DEBUG] [Thread-201719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:16:26.366 [DEBUG] [Thread-201719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:16:26.366 [DEBUG] [Thread-201719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:16:26.406 [DEBUG] [Thread-201719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:16:26.406 [DEBUG] [Thread-201719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:16:26.409 [DEBUG] [Thread-201719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:16:26.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:16:26.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:16:26.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:16:26.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:16:26.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:16:26.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:16:26.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:16:26.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:16:26.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:16:26.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.302879 -999.00  +10.40  16.80     65   +4.20 1 1 1 1 1   888    0 6.34 43.09 ----- 16.8 16.8 157.4 30.7 16.1 -29.2 15.2 -25.6 13.7 -26.2 14.6 -27.3
2026-02-15T09:16:26.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:16:26.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:16:26.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.302879
2026-02-15T09:16:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:16:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:16:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:16:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:16:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:16:26.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:15:55', tmtdew=6.36, humidity=64.84, cloud=0.0, wind=24.23, temperature=10.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:16:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:16:26.436 [DEBUG] [Thread-201719] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:16:26.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:16:26.546 [DEBUG] [Thread-201722] [transport.py] [_log()] starting thread (client mode): 0xa2d03940
2026-02-15T09:16:26.546 [DEBUG] [Thread-201722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:16:26.576 [DEBUG] [Thread-201722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:16:26.577 [INFO] [Thread-201722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:16:26.599 [DEBUG] [Thread-201722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] client lang: <none>
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] server lang: <none>
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] kex follows: False
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] Compression: none
2026-02-15T09:16:26.600 [DEBUG] [Thread-201722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:16:26.677 [DEBUG] [Thread-201722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:16:26.677 [DEBUG] [Thread-201722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:16:26.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:16:26.679 [DEBUG] [Thread-201722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:16:26.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:16:26.765 [DEBUG] [Thread-201722] [transport.py] [_log()] userauth is OK
2026-02-15T09:16:26.765 [DEBUG] [Thread-201722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:16:26.766 [DEBUG] [Thread-201722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:16:26.766 [DEBUG] [Thread-201722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:16:26.766 [DEBUG] [Thread-201722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:16:26.801 [INFO] [Thread-201722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:16:26.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:16:26.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:16:27.704 [DEBUG] [Thread-201722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:16:27.705 [DEBUG] [Thread-201722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:16:27.769 [DEBUG] [Thread-201722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:16:27.769 [DEBUG] [Thread-201722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:16:27.795 [DEBUG] [Thread-201722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:16:27.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:16:27.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:16:27.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:16:27.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:16:27.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:16:27.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:16:27.896 [DEBUG] [Thread-201722] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:16:34.711 [DEBUG] [Thread-201724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:39.310 [DEBUG] [Thread-201725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:49.765 [DEBUG] [Thread-201726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:57.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:57.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:16:57.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:16:57.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:16:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:16:59.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 16, 30), 6.4, 64.65, 0.0, 25.6, 10.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:16:59.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:16:30
2026-02-15T09:17:00.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:17:00.338 [DEBUG] [Thread-201727] [transport.py] [_log()] starting thread (client mode): 0xa57b33a0
2026-02-15T09:17:00.338 [DEBUG] [Thread-201727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:17:00.358 [DEBUG] [Thread-201727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:17:00.359 [INFO] [Thread-201727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] client lang: <none>
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] server lang: <none>
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] kex follows: False
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] Compression: none
2026-02-15T09:17:00.362 [DEBUG] [Thread-201727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:17:00.372 [DEBUG] [Thread-201727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:17:00.373 [DEBUG] [Thread-201727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:17:00.373 [DEBUG] [Thread-201727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:17:00.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:17:00.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:17:00.375 [DEBUG] [Thread-201727] [transport.py] [_log()] userauth is OK
2026-02-15T09:17:00.375 [DEBUG] [Thread-201727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:17:00.375 [DEBUG] [Thread-201727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:17:00.375 [DEBUG] [Thread-201727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:17:00.375 [DEBUG] [Thread-201727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:17:00.399 [INFO] [Thread-201727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:17:00.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:17:01.061 [DEBUG] [Thread-201727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:17:01.061 [DEBUG] [Thread-201727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:17:01.062 [DEBUG] [Thread-201727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:17:01.102 [DEBUG] [Thread-201727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:17:01.102 [DEBUG] [Thread-201727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:17:01.105 [DEBUG] [Thread-201727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:17:01.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:17:01.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:17:01.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:17:01.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:17:01.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:17:01.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:17:01.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:17:01.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:17:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:17:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.303226 -999.00  +10.40  23.87     65   +4.10 1 1 1 1 1   888    0 6.58 48.25 ----- 23.9 23.9 152.8 26.6 16.1 -28.6 15.2 -26.5 13.8 -26.0 14.6 -27.5
2026-02-15T09:17:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:17:01.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:17:01.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.303226
2026-02-15T09:17:01.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:17:01.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:17:01.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:17:01.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:17:01.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:17:01.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:16:30', tmtdew=6.4, humidity=64.65, cloud=0.0, wind=25.6, temperature=10.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:16:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:17:01.132 [DEBUG] [Thread-201727] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:17:01.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:17:01.227 [DEBUG] [Thread-201730] [transport.py] [_log()] starting thread (client mode): 0xa2d02ce0
2026-02-15T09:17:01.228 [DEBUG] [Thread-201730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:17:01.243 [DEBUG] [Thread-201730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:17:01.243 [INFO] [Thread-201730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] client lang: <none>
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] server lang: <none>
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] kex follows: False
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] Compression: none
2026-02-15T09:17:01.250 [DEBUG] [Thread-201730] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:17:01.311 [DEBUG] [Thread-201730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:17:01.311 [DEBUG] [Thread-201730] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:17:01.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:17:01.311 [DEBUG] [Thread-201730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:17:01.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:17:01.368 [DEBUG] [Thread-201730] [transport.py] [_log()] userauth is OK
2026-02-15T09:17:01.368 [DEBUG] [Thread-201730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:17:01.368 [DEBUG] [Thread-201730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:17:01.368 [DEBUG] [Thread-201730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:17:01.368 [DEBUG] [Thread-201730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:17:01.382 [INFO] [Thread-201730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:17:01.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:17:01.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:17:02.231 [DEBUG] [Thread-201730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:17:02.231 [DEBUG] [Thread-201730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:17:02.279 [DEBUG] [Thread-201730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:17:02.279 [DEBUG] [Thread-201730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:17:02.287 [DEBUG] [Thread-201730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:17:02.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:17:02.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:17:02.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:17:02.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:17:02.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:17:02.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:17:02.319 [DEBUG] [Thread-201730] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:17:04.800 [DEBUG] [Thread-201732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:17:19.852 [DEBUG] [Thread-201733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:17:32.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:17:32.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:17:32.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:17:34.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 17, 5), 6.45, 64.41, 0.0, 26.01, 10.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:17:34.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:17:05
2026-02-15T09:17:34.887 [DEBUG] [Thread-201734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:17:35.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:17:35.332 [DEBUG] [Thread-201735] [transport.py] [_log()] starting thread (client mode): 0xa57c09d0
2026-02-15T09:17:35.332 [DEBUG] [Thread-201735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:17:35.353 [DEBUG] [Thread-201735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:17:35.353 [INFO] [Thread-201735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] client lang: <none>
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] server lang: <none>
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] kex follows: False
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] Compression: none
2026-02-15T09:17:35.357 [DEBUG] [Thread-201735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:17:35.375 [DEBUG] [Thread-201735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:17:35.375 [DEBUG] [Thread-201735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:17:35.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:17:35.376 [DEBUG] [Thread-201735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:17:35.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:17:35.379 [DEBUG] [Thread-201735] [transport.py] [_log()] userauth is OK
2026-02-15T09:17:35.379 [DEBUG] [Thread-201735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:17:35.379 [DEBUG] [Thread-201735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:17:35.379 [DEBUG] [Thread-201735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:17:35.379 [DEBUG] [Thread-201735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:17:35.404 [INFO] [Thread-201735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:17:35.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:17:36.057 [DEBUG] [Thread-201735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:17:36.057 [DEBUG] [Thread-201735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:17:36.058 [DEBUG] [Thread-201735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:17:36.098 [DEBUG] [Thread-201735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:17:36.099 [DEBUG] [Thread-201735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:17:36.102 [DEBUG] [Thread-201735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:17:36.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:17:36.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:17:36.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:17:36.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:17:36.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:17:36.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:17:36.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:17:36.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:17:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:17:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.303573 -999.00  +10.30  21.25     66   +4.40 1 1 1 1 1   888    0 6.61 49.34 ----- 21.2 21.2 149.8 30.0 16.2 -28.1 15.2 -26.2 13.8 -25.9 14.6 -27.7
2026-02-15T09:17:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:17:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:17:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.303573
2026-02-15T09:17:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:17:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:17:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:17:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:17:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:17:36.131 [DEBUG] [Thread-201735] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:17:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:17:05', tmtdew=6.45, humidity=64.41, cloud=0.0, wind=26.01, temperature=10.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:17:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:17:36.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:17:36.226 [DEBUG] [Thread-201738] [transport.py] [_log()] starting thread (client mode): 0xa2db6ad0
2026-02-15T09:17:36.226 [DEBUG] [Thread-201738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:17:36.240 [DEBUG] [Thread-201738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:17:36.241 [INFO] [Thread-201738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:17:36.248 [DEBUG] [Thread-201738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] client lang: <none>
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] server lang: <none>
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] kex follows: False
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:17:36.249 [DEBUG] [Thread-201738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:17:36.250 [DEBUG] [Thread-201738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:17:36.250 [DEBUG] [Thread-201738] [transport.py] [_log()] Compression: none
2026-02-15T09:17:36.250 [DEBUG] [Thread-201738] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:17:36.309 [DEBUG] [Thread-201738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:17:36.309 [DEBUG] [Thread-201738] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:17:36.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:17:36.310 [DEBUG] [Thread-201738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:17:36.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:17:36.365 [DEBUG] [Thread-201738] [transport.py] [_log()] userauth is OK
2026-02-15T09:17:36.366 [DEBUG] [Thread-201738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:17:36.366 [DEBUG] [Thread-201738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:17:36.366 [DEBUG] [Thread-201738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:17:36.366 [DEBUG] [Thread-201738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:17:36.387 [INFO] [Thread-201738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:17:36.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:17:36.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:17:37.218 [DEBUG] [Thread-201738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:17:37.219 [DEBUG] [Thread-201738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:17:37.270 [DEBUG] [Thread-201738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:17:37.271 [DEBUG] [Thread-201738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:17:37.280 [DEBUG] [Thread-201738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:17:37.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:17:37.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:17:37.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:17:37.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:17:37.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:17:37.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:17:37.317 [DEBUG] [Thread-201738] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:17:39.356 [DEBUG] [Thread-201740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:17:49.922 [DEBUG] [Thread-201741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:17:57.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:17:57.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:04.967 [DEBUG] [Thread-201742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:18:07.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:18:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:18:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 17, 41), 7.46, 60.04, 0.0, 29.67, 11.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:18:09.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:17:41
2026-02-15T09:18:09.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:18:09.811 [DEBUG] [Thread-201743] [transport.py] [_log()] starting thread (client mode): 0xa2db5b10
2026-02-15T09:18:09.811 [DEBUG] [Thread-201743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:18:09.831 [DEBUG] [Thread-201743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:18:09.831 [INFO] [Thread-201743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:09.834 [DEBUG] [Thread-201743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] client lang: <none>
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] server lang: <none>
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] kex follows: False
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] Compression: none
2026-02-15T09:18:09.835 [DEBUG] [Thread-201743] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:18:09.854 [DEBUG] [Thread-201743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:18:09.854 [DEBUG] [Thread-201743] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:18:09.855 [DEBUG] [Thread-201743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:18:09.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:18:09.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:18:09.857 [DEBUG] [Thread-201743] [transport.py] [_log()] userauth is OK
2026-02-15T09:18:09.857 [DEBUG] [Thread-201743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:18:09.857 [DEBUG] [Thread-201743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:18:09.857 [DEBUG] [Thread-201743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:18:09.858 [DEBUG] [Thread-201743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:18:09.881 [INFO] [Thread-201743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:18:09.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:18:10.529 [DEBUG] [Thread-201743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:18:10.529 [DEBUG] [Thread-201743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:18:10.529 [DEBUG] [Thread-201743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:18:10.570 [DEBUG] [Thread-201743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:18:10.571 [DEBUG] [Thread-201743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:18:10.574 [DEBUG] [Thread-201743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:18:10.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:18:10.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:18:10.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:18:10.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:18:10.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:18:10.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:18:10.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:18:10.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:18:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:18:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.303921 -999.00  +10.10  22.31     66   +4.10 1 1 1 1 1   888    0 6.64 48.90 ----- 22.3 22.3 154.4 29.6 16.2 -28.7 15.2 -26.4 13.8 -26.7 14.5 -27.2
2026-02-15T09:18:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:18:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:18:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.303921
2026-02-15T09:18:10.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:18:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:18:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:18:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:18:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:18:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:17:41', tmtdew=7.46, humidity=60.04, cloud=0.0, wind=29.67, temperature=11.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:17:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:18:10.601 [DEBUG] [Thread-201743] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:18:10.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:18:10.699 [DEBUG] [Thread-201746] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fb0
2026-02-15T09:18:10.699 [DEBUG] [Thread-201746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:18:10.721 [DEBUG] [Thread-201746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:18:10.721 [INFO] [Thread-201746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] client lang: <none>
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] server lang: <none>
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] kex follows: False
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] Compression: none
2026-02-15T09:18:10.729 [DEBUG] [Thread-201746] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:18:10.787 [DEBUG] [Thread-201746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:18:10.787 [DEBUG] [Thread-201746] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:18:10.787 [DEBUG] [Thread-201746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:18:10.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:18:10.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:18:10.846 [DEBUG] [Thread-201746] [transport.py] [_log()] userauth is OK
2026-02-15T09:18:10.846 [DEBUG] [Thread-201746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:18:10.846 [DEBUG] [Thread-201746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:18:10.846 [DEBUG] [Thread-201746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:18:10.846 [DEBUG] [Thread-201746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:18:10.860 [INFO] [Thread-201746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:18:10.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:18:10.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:18:11.680 [DEBUG] [Thread-201746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:18:11.680 [DEBUG] [Thread-201746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:18:11.729 [DEBUG] [Thread-201746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:18:11.729 [DEBUG] [Thread-201746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:18:11.739 [DEBUG] [Thread-201746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:18:11.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:18:11.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:18:11.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:18:11.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:18:11.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:18:11.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:18:11.776 [DEBUG] [Thread-201746] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:18:20.003 [DEBUG] [Thread-201748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:35.064 [DEBUG] [Thread-201749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:39.390 [DEBUG] [Thread-201750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:41.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:18:41.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:18:41.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:18:43.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 18, 16), 6.63, 63.54, 0.0, 26.75, 10.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:18:43.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:18:16
2026-02-15T09:18:44.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:18:44.263 [DEBUG] [Thread-201751] [transport.py] [_log()] starting thread (client mode): 0xa57e2770
2026-02-15T09:18:44.263 [DEBUG] [Thread-201751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:18:44.284 [DEBUG] [Thread-201751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:18:44.284 [INFO] [Thread-201751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:18:44.288 [DEBUG] [Thread-201751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] client lang: <none>
2026-02-15T09:18:44.297 [DEBUG] [Thread-201751] [transport.py] [_log()] server lang: <none>
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] kex follows: False
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] Compression: none
2026-02-15T09:18:44.298 [DEBUG] [Thread-201751] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:18:44.316 [DEBUG] [Thread-201751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:18:44.317 [DEBUG] [Thread-201751] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:18:44.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:18:44.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:18:44.319 [DEBUG] [Thread-201751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:18:44.320 [DEBUG] [Thread-201751] [transport.py] [_log()] userauth is OK
2026-02-15T09:18:44.320 [DEBUG] [Thread-201751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:18:44.320 [DEBUG] [Thread-201751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:18:44.320 [DEBUG] [Thread-201751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:18:44.320 [DEBUG] [Thread-201751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:18:44.344 [INFO] [Thread-201751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:18:44.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:18:44.943 [DEBUG] [Thread-201751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:18:44.943 [DEBUG] [Thread-201751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:18:44.943 [DEBUG] [Thread-201751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:18:44.983 [DEBUG] [Thread-201751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:18:44.983 [DEBUG] [Thread-201751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:18:44.985 [DEBUG] [Thread-201751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:18:44.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:18:44.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:18:45.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:18:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:18:45.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:18:45.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:18:45.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:18:45.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:18:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:18:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.304268 -999.00   +9.90  19.83     67   +4.20 1 1 1 1 1   888    0 6.67 46.39 ----- 19.8 19.8 151.6 32.1 16.1 -28.1 15.2 -28.1 13.8 -26.2 14.5 -27.6
2026-02-15T09:18:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:18:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:18:45.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.304268
2026-02-15T09:18:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:18:45.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:18:45.012 [DEBUG] [Thread-201751] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:18:45.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:18:45.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:18:45.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:18:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:18:16', tmtdew=6.63, humidity=63.54, cloud=0.0, wind=26.75, temperature=10.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:18:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:18:45.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:18:45.118 [DEBUG] [Thread-201754] [transport.py] [_log()] starting thread (client mode): 0xa57e3af0
2026-02-15T09:18:45.118 [DEBUG] [Thread-201754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:18:45.139 [DEBUG] [Thread-201754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:18:45.139 [INFO] [Thread-201754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:18:45.155 [DEBUG] [Thread-201754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:18:45.155 [DEBUG] [Thread-201754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:18:45.155 [DEBUG] [Thread-201754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:18:45.155 [DEBUG] [Thread-201754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] client lang: <none>
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] server lang: <none>
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] kex follows: False
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:18:45.156 [DEBUG] [Thread-201754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:18:45.157 [DEBUG] [Thread-201754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:18:45.157 [DEBUG] [Thread-201754] [transport.py] [_log()] Compression: none
2026-02-15T09:18:45.157 [DEBUG] [Thread-201754] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:18:45.222 [DEBUG] [Thread-201754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:18:45.222 [DEBUG] [Thread-201754] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:18:45.223 [DEBUG] [Thread-201754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:18:45.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:18:45.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:18:45.299 [DEBUG] [Thread-201754] [transport.py] [_log()] userauth is OK
2026-02-15T09:18:45.300 [DEBUG] [Thread-201754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:18:45.300 [DEBUG] [Thread-201754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:18:45.300 [DEBUG] [Thread-201754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:18:45.300 [DEBUG] [Thread-201754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:18:45.328 [INFO] [Thread-201754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:18:45.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:18:45.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:18:46.170 [DEBUG] [Thread-201754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:18:46.171 [DEBUG] [Thread-201754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:18:46.233 [DEBUG] [Thread-201754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:18:46.233 [DEBUG] [Thread-201754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:18:46.257 [DEBUG] [Thread-201754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:18:46.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:18:46.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:18:46.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:18:46.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:18:46.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:18:46.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:18:46.355 [DEBUG] [Thread-201754] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:18:50.104 [DEBUG] [Thread-201756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:57.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:18:57.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:05.152 [DEBUG] [Thread-201757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:16.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:19:16.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:19:16.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:19:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 18, 52), 6.72, 62.89, 0.0, 28.57, 10.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:19:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:18:52
2026-02-15T09:19:18.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:19:18.610 [DEBUG] [Thread-201758] [transport.py] [_log()] starting thread (client mode): 0xa2dc1420
2026-02-15T09:19:18.610 [DEBUG] [Thread-201758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:19:18.630 [DEBUG] [Thread-201758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:19:18.630 [INFO] [Thread-201758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] client lang: <none>
2026-02-15T09:19:18.633 [DEBUG] [Thread-201758] [transport.py] [_log()] server lang: <none>
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] kex follows: False
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] Compression: none
2026-02-15T09:19:18.634 [DEBUG] [Thread-201758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:19:18.654 [DEBUG] [Thread-201758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:19:18.654 [DEBUG] [Thread-201758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:19:18.655 [DEBUG] [Thread-201758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:19:18.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:19:18.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:19:18.657 [DEBUG] [Thread-201758] [transport.py] [_log()] userauth is OK
2026-02-15T09:19:18.657 [DEBUG] [Thread-201758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:19:18.657 [DEBUG] [Thread-201758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:19:18.657 [DEBUG] [Thread-201758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:19:18.657 [DEBUG] [Thread-201758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:19:18.693 [INFO] [Thread-201758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:19:18.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:19:19.316 [DEBUG] [Thread-201758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:19:19.316 [DEBUG] [Thread-201758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:19:19.317 [DEBUG] [Thread-201758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:19:19.357 [DEBUG] [Thread-201758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:19:19.357 [DEBUG] [Thread-201758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:19:19.361 [DEBUG] [Thread-201758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:19:19.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:19:19.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:19:19.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:19:19.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:19:19.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:19:19.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:19:19.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:19:19.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:19:19.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:19:19.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.304615 -999.00   +9.80  20.93     69   +4.50 1 1 1 1 1   888    0 6.44 41.06 ----- 20.9 20.9 149.8 33.3 16.1 -27.6 15.2 -26.4 13.7 -27.0 14.6 -27.3
2026-02-15T09:19:19.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:19:19.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:19:19.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.304615
2026-02-15T09:19:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:19:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:19:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:19:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:19:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:19:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:18:52', tmtdew=6.72, humidity=62.89, cloud=0.0, wind=28.57, temperature=10.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:18:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:19:19.389 [DEBUG] [Thread-201758] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:19:19.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:19:19.485 [DEBUG] [Thread-201761] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-15T09:19:19.485 [DEBUG] [Thread-201761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:19:19.499 [DEBUG] [Thread-201761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:19:19.500 [INFO] [Thread-201761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:19:19.507 [DEBUG] [Thread-201761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:19:19.508 [DEBUG] [Thread-201761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:19:19.508 [DEBUG] [Thread-201761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:19:19.508 [DEBUG] [Thread-201761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:19.508 [DEBUG] [Thread-201761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:19.508 [DEBUG] [Thread-201761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:19.508 [DEBUG] [Thread-201761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] client lang: <none>
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] server lang: <none>
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] kex follows: False
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:19:19.509 [DEBUG] [Thread-201761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:19:19.510 [DEBUG] [Thread-201761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:19:19.510 [DEBUG] [Thread-201761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:19:19.510 [DEBUG] [Thread-201761] [transport.py] [_log()] Compression: none
2026-02-15T09:19:19.510 [DEBUG] [Thread-201761] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:19:19.566 [DEBUG] [Thread-201761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:19:19.566 [DEBUG] [Thread-201761] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:19:19.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:19:19.568 [DEBUG] [Thread-201761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:19:19.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:19:19.625 [DEBUG] [Thread-201761] [transport.py] [_log()] userauth is OK
2026-02-15T09:19:19.625 [DEBUG] [Thread-201761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:19:19.626 [DEBUG] [Thread-201761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:19:19.626 [DEBUG] [Thread-201761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:19:19.626 [DEBUG] [Thread-201761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:19:19.645 [INFO] [Thread-201761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:19:19.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:19:19.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:19:20.189 [DEBUG] [Thread-201763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:20.474 [DEBUG] [Thread-201761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:19:20.474 [DEBUG] [Thread-201761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:19:20.522 [DEBUG] [Thread-201761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:19:20.523 [DEBUG] [Thread-201761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:19:20.532 [DEBUG] [Thread-201761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:19:20.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:19:20.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:19:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:19:20.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:19:20.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:19:20.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:19:20.568 [DEBUG] [Thread-201761] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:19:35.243 [DEBUG] [Thread-201764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:39.423 [DEBUG] [Thread-201765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:50.281 [DEBUG] [Thread-201766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:50.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:19:50.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:19:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:19:52.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 19, 29), 6.65, 63.19, 0.0, 25.6, 10.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:19:52.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:19:29
2026-02-15T09:19:52.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:19:53.124 [DEBUG] [Thread-201767] [transport.py] [_log()] starting thread (client mode): 0xa2dc3250
2026-02-15T09:19:53.124 [DEBUG] [Thread-201767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:19:53.143 [DEBUG] [Thread-201767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:19:53.143 [INFO] [Thread-201767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:19:53.146 [DEBUG] [Thread-201767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] client lang: <none>
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] server lang: <none>
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] kex follows: False
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] Compression: none
2026-02-15T09:19:53.147 [DEBUG] [Thread-201767] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:19:53.165 [DEBUG] [Thread-201767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:19:53.165 [DEBUG] [Thread-201767] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:19:53.166 [DEBUG] [Thread-201767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:19:53.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:19:53.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:19:53.168 [DEBUG] [Thread-201767] [transport.py] [_log()] userauth is OK
2026-02-15T09:19:53.168 [DEBUG] [Thread-201767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:19:53.168 [DEBUG] [Thread-201767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:19:53.168 [DEBUG] [Thread-201767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:19:53.168 [DEBUG] [Thread-201767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:19:53.204 [INFO] [Thread-201767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:19:53.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:19:53.822 [DEBUG] [Thread-201767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:19:53.823 [DEBUG] [Thread-201767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:19:53.823 [DEBUG] [Thread-201767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:19:53.864 [DEBUG] [Thread-201767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:19:53.864 [DEBUG] [Thread-201767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:19:53.866 [DEBUG] [Thread-201767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:19:53.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:19:53.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:19:53.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:19:53.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:19:53.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:19:53.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:19:53.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.305309 -999.00  +10.30  17.08     68   +4.70 1 1 1 1 1   888    0 6.56 42.52 ----- 17.1 17.1 165.8 27.0 16.2 -27.9 15.3 -25.9 13.9 -25.7 14.7 -27.3
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.305309
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:19:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:19:29', tmtdew=6.65, humidity=63.19, cloud=0.0, wind=25.6, temperature=10.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:19:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:19:53.886 [DEBUG] [Thread-201767] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:19:53.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:19:53.970 [DEBUG] [Thread-201770] [transport.py] [_log()] starting thread (client mode): 0xa2db49a0
2026-02-15T09:19:53.970 [DEBUG] [Thread-201770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:19:53.985 [DEBUG] [Thread-201770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:19:53.985 [INFO] [Thread-201770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] client lang: <none>
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] server lang: <none>
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] kex follows: False
2026-02-15T09:19:53.992 [DEBUG] [Thread-201770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:19:53.993 [DEBUG] [Thread-201770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:19:53.993 [DEBUG] [Thread-201770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:19:53.993 [DEBUG] [Thread-201770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:19:53.993 [DEBUG] [Thread-201770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:19:53.993 [DEBUG] [Thread-201770] [transport.py] [_log()] Compression: none
2026-02-15T09:19:53.993 [DEBUG] [Thread-201770] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:19:54.047 [DEBUG] [Thread-201770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:19:54.047 [DEBUG] [Thread-201770] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:19:54.048 [DEBUG] [Thread-201770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:19:54.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:19:54.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:19:54.104 [DEBUG] [Thread-201770] [transport.py] [_log()] userauth is OK
2026-02-15T09:19:54.104 [DEBUG] [Thread-201770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:19:54.104 [DEBUG] [Thread-201770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:19:54.104 [DEBUG] [Thread-201770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:19:54.104 [DEBUG] [Thread-201770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:19:54.118 [INFO] [Thread-201770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:19:54.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:19:54.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:19:55.000 [DEBUG] [Thread-201770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:19:55.000 [DEBUG] [Thread-201770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:19:55.048 [DEBUG] [Thread-201770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:19:55.048 [DEBUG] [Thread-201770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:19:55.056 [DEBUG] [Thread-201770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:19:55.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:19:55.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:19:55.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:19:55.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:19:55.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:19:55.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:19:55.091 [DEBUG] [Thread-201770] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:19:57.463 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:19:57.464 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:05.315 [DEBUG] [Thread-201772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:20.365 [DEBUG] [Thread-201773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:25.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:20:25.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:20:25.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:20:27.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 20, 4), 6.67, 63.1, 0.0, 27.42, 10.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:20:27.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:20:04
2026-02-15T09:20:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:20:27.562 [DEBUG] [Thread-201774] [transport.py] [_log()] starting thread (client mode): 0xa2db59f0
2026-02-15T09:20:27.563 [DEBUG] [Thread-201774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:20:27.583 [DEBUG] [Thread-201774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:20:27.583 [INFO] [Thread-201774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:20:27.586 [DEBUG] [Thread-201774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:20:27.586 [DEBUG] [Thread-201774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:20:27.586 [DEBUG] [Thread-201774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:20:27.586 [DEBUG] [Thread-201774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] client lang: <none>
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] server lang: <none>
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] kex follows: False
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] Compression: none
2026-02-15T09:20:27.587 [DEBUG] [Thread-201774] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:20:27.596 [DEBUG] [Thread-201774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:20:27.596 [DEBUG] [Thread-201774] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:20:27.597 [DEBUG] [Thread-201774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:20:27.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:20:27.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:20:27.598 [DEBUG] [Thread-201774] [transport.py] [_log()] userauth is OK
2026-02-15T09:20:27.598 [DEBUG] [Thread-201774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:20:27.598 [DEBUG] [Thread-201774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:20:27.598 [DEBUG] [Thread-201774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:20:27.598 [DEBUG] [Thread-201774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:20:27.616 [INFO] [Thread-201774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:20:27.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:20:28.218 [DEBUG] [Thread-201774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:20:28.219 [DEBUG] [Thread-201774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:20:28.220 [DEBUG] [Thread-201774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:20:28.260 [DEBUG] [Thread-201774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:20:28.260 [DEBUG] [Thread-201774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:20:28.263 [DEBUG] [Thread-201774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:20:28.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:20:28.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:20:28.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:20:28.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:20:28.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:20:28.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:20:28.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:20:28.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:20:28.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:20:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.305656 -999.00  +10.40  32.34     67   +4.60 1 1 2 1 1   888    0 6.50 42.91 ----- 32.3 32.3 144.6 35.0 16.2 -27.2 15.3 -26.6 13.9 -25.4 14.7 -27.9
2026-02-15T09:20:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:20:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:20:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.305656
2026-02-15T09:20:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:20:28.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:20:28.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:20:28.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:20:28.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:20:28.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:20:04', tmtdew=6.67, humidity=63.1, cloud=0.0, wind=27.42, temperature=10.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:20:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:20:28.289 [DEBUG] [Thread-201774] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:20:28.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:20:28.398 [DEBUG] [Thread-201777] [transport.py] [_log()] starting thread (client mode): 0xa2db6fb0
2026-02-15T09:20:28.398 [DEBUG] [Thread-201777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:20:28.412 [DEBUG] [Thread-201777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:20:28.413 [INFO] [Thread-201777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:20:28.422 [DEBUG] [Thread-201777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:20:28.422 [DEBUG] [Thread-201777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:20:28.422 [DEBUG] [Thread-201777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:20:28.422 [DEBUG] [Thread-201777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:20:28.422 [DEBUG] [Thread-201777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:20:28.422 [DEBUG] [Thread-201777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] client lang: <none>
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] server lang: <none>
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] kex follows: False
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] Compression: none
2026-02-15T09:20:28.423 [DEBUG] [Thread-201777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:20:28.500 [DEBUG] [Thread-201777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:20:28.501 [DEBUG] [Thread-201777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:20:28.501 [DEBUG] [Thread-201777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:20:28.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:20:28.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:20:28.576 [DEBUG] [Thread-201777] [transport.py] [_log()] userauth is OK
2026-02-15T09:20:28.576 [DEBUG] [Thread-201777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:20:28.576 [DEBUG] [Thread-201777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:20:28.576 [DEBUG] [Thread-201777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:20:28.576 [DEBUG] [Thread-201777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:20:28.601 [INFO] [Thread-201777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:20:28.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:20:28.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:20:29.479 [DEBUG] [Thread-201777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:20:29.480 [DEBUG] [Thread-201777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:20:29.541 [DEBUG] [Thread-201777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:20:29.542 [DEBUG] [Thread-201777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:20:29.565 [DEBUG] [Thread-201777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:20:29.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:20:29.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:20:29.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:20:29.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:20:29.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:20:29.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:20:29.651 [DEBUG] [Thread-201777] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:20:35.402 [DEBUG] [Thread-201779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:39.477 [DEBUG] [Thread-201780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:50.467 [DEBUG] [Thread-201781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:57.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:57.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:20:59.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:20:59.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:20:59.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:21:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 20, 39), 7.34, 60.61, 0.0, 30.45, 11.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:21:01.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:20:39
2026-02-15T09:21:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:21:02.016 [DEBUG] [Thread-201782] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fb0
2026-02-15T09:21:02.016 [DEBUG] [Thread-201782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:21:02.029 [DEBUG] [Thread-201782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:21:02.029 [INFO] [Thread-201782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:21:02.031 [DEBUG] [Thread-201782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:21:02.031 [DEBUG] [Thread-201782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:21:02.031 [DEBUG] [Thread-201782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] client lang: <none>
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] server lang: <none>
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] kex follows: False
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] Compression: none
2026-02-15T09:21:02.032 [DEBUG] [Thread-201782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:21:02.041 [DEBUG] [Thread-201782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:21:02.041 [DEBUG] [Thread-201782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:21:02.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:21:02.042 [DEBUG] [Thread-201782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:21:02.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:21:02.044 [DEBUG] [Thread-201782] [transport.py] [_log()] userauth is OK
2026-02-15T09:21:02.044 [DEBUG] [Thread-201782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:21:02.044 [DEBUG] [Thread-201782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:21:02.044 [DEBUG] [Thread-201782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:21:02.044 [DEBUG] [Thread-201782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:21:02.079 [INFO] [Thread-201782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:21:02.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:21:02.624 [DEBUG] [Thread-201782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:21:02.625 [DEBUG] [Thread-201782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:21:02.625 [DEBUG] [Thread-201782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:21:02.666 [DEBUG] [Thread-201782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:21:02.666 [DEBUG] [Thread-201782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:21:02.668 [DEBUG] [Thread-201782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:21:02.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:21:02.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:21:02.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:21:02.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:21:02.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:21:02.688 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:21:02.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.306004 -999.00  +10.30  20.84     68   +4.80 1 1 1 1 1   888    0 6.79 48.30 ----- 20.8 20.8 156.4 27.5 16.2 -27.3 15.3 -25.4 13.9 -25.6 14.7 -26.4
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.306004
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:21:02.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:20:39', tmtdew=7.34, humidity=60.61, cloud=0.0, wind=30.45, temperature=11.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:20:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:21:02.689 [DEBUG] [Thread-201782] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:21:02.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:21:02.774 [DEBUG] [Thread-201785] [transport.py] [_log()] starting thread (client mode): 0xa57b2770
2026-02-15T09:21:02.774 [DEBUG] [Thread-201785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:21:02.790 [DEBUG] [Thread-201785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:21:02.791 [INFO] [Thread-201785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:21:02.800 [DEBUG] [Thread-201785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:21:02.800 [DEBUG] [Thread-201785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] client lang: <none>
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] server lang: <none>
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] kex follows: False
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:21:02.801 [DEBUG] [Thread-201785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:21:02.802 [DEBUG] [Thread-201785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:21:02.802 [DEBUG] [Thread-201785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:21:02.802 [DEBUG] [Thread-201785] [transport.py] [_log()] Compression: none
2026-02-15T09:21:02.802 [DEBUG] [Thread-201785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:21:02.862 [DEBUG] [Thread-201785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:21:02.863 [DEBUG] [Thread-201785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:21:02.864 [DEBUG] [Thread-201785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:21:02.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:21:02.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:21:02.925 [DEBUG] [Thread-201785] [transport.py] [_log()] userauth is OK
2026-02-15T09:21:02.925 [DEBUG] [Thread-201785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:21:02.925 [DEBUG] [Thread-201785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:21:02.926 [DEBUG] [Thread-201785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:21:02.926 [DEBUG] [Thread-201785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:21:02.947 [INFO] [Thread-201785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:21:02.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:21:02.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:21:03.797 [DEBUG] [Thread-201785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:21:03.798 [DEBUG] [Thread-201785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:21:03.846 [DEBUG] [Thread-201785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:21:03.846 [DEBUG] [Thread-201785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:21:03.856 [DEBUG] [Thread-201785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:21:03.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:21:03.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:21:03.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:21:03.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:21:03.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:21:03.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:21:03.893 [DEBUG] [Thread-201785] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:21:05.503 [DEBUG] [Thread-201787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:21:20.557 [DEBUG] [Thread-201788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:21:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:21:33.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:21:33.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:21:35.594 [DEBUG] [Thread-201789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:21:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 21, 16), 6.69, 63.45, 0.0, 27.19, 10.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:21:35.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:21:16
2026-02-15T09:21:36.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:21:36.533 [DEBUG] [Thread-201790] [transport.py] [_log()] starting thread (client mode): 0xa57b0220
2026-02-15T09:21:36.533 [DEBUG] [Thread-201790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:21:36.554 [DEBUG] [Thread-201790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:21:36.554 [INFO] [Thread-201790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:21:36.556 [DEBUG] [Thread-201790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] client lang: <none>
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] server lang: <none>
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] kex follows: False
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] Compression: none
2026-02-15T09:21:36.557 [DEBUG] [Thread-201790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:21:36.565 [DEBUG] [Thread-201790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:21:36.565 [DEBUG] [Thread-201790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:21:36.565 [DEBUG] [Thread-201790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:21:36.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:21:36.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:21:36.568 [DEBUG] [Thread-201790] [transport.py] [_log()] userauth is OK
2026-02-15T09:21:36.568 [DEBUG] [Thread-201790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:21:36.568 [DEBUG] [Thread-201790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:21:36.568 [DEBUG] [Thread-201790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:21:36.568 [DEBUG] [Thread-201790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:21:36.583 [INFO] [Thread-201790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:21:36.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:21:37.155 [DEBUG] [Thread-201790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:21:37.155 [DEBUG] [Thread-201790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:21:37.155 [DEBUG] [Thread-201790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:21:37.196 [DEBUG] [Thread-201790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:21:37.196 [DEBUG] [Thread-201790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:21:37.200 [DEBUG] [Thread-201790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:21:37.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:21:37.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:21:37.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:21:37.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:21:37.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:21:37.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:21:37.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:21:37.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:21:37.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:21:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.306351 -999.00  +10.40  23.51     67   +4.60 1 1 1 1 1   888    0 6.84 48.73 ----- 23.5 23.5 138.8 31.6 16.3 -27.4 15.4 -26.3 13.9 -25.0 14.7 -27.4
2026-02-15T09:21:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:21:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:21:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.306351
2026-02-15T09:21:37.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:21:37.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:21:37.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:21:37.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:21:37.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:21:37.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:21:16', tmtdew=6.69, humidity=63.45, cloud=0.0, wind=27.19, temperature=10.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:21:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:21:37.223 [DEBUG] [Thread-201790] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:21:37.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:21:37.319 [DEBUG] [Thread-201793] [transport.py] [_log()] starting thread (client mode): 0xa2d11c60
2026-02-15T09:21:37.319 [DEBUG] [Thread-201793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:21:37.334 [DEBUG] [Thread-201793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:21:37.334 [INFO] [Thread-201793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:21:37.342 [DEBUG] [Thread-201793] [transport.py] [_log()] client lang: <none>
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] server lang: <none>
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] kex follows: False
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] Compression: none
2026-02-15T09:21:37.343 [DEBUG] [Thread-201793] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:21:37.401 [DEBUG] [Thread-201793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:21:37.402 [DEBUG] [Thread-201793] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:21:37.402 [DEBUG] [Thread-201793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:21:37.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:21:37.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:21:37.457 [DEBUG] [Thread-201793] [transport.py] [_log()] userauth is OK
2026-02-15T09:21:37.457 [DEBUG] [Thread-201793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:21:37.457 [DEBUG] [Thread-201793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:21:37.458 [DEBUG] [Thread-201793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:21:37.458 [DEBUG] [Thread-201793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:21:37.476 [INFO] [Thread-201793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:21:37.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:21:37.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:21:38.294 [DEBUG] [Thread-201793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:21:38.295 [DEBUG] [Thread-201793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:21:38.344 [DEBUG] [Thread-201793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:21:38.345 [DEBUG] [Thread-201793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:21:38.354 [DEBUG] [Thread-201793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:21:38.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:21:38.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:21:38.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:21:38.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:21:38.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:21:38.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:21:38.391 [DEBUG] [Thread-201793] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:21:39.520 [DEBUG] [Thread-201795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:21:50.630 [DEBUG] [Thread-201796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:21:57.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:21:57.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:05.692 [DEBUG] [Thread-201797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:08.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:22:08.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:22:08.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:22:10.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 21, 51), 6.88, 62.29, 0.0, 28.44, 10.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:22:10.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:21:51
2026-02-15T09:22:10.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:22:10.805 [DEBUG] [Thread-201798] [transport.py] [_log()] starting thread (client mode): 0xa2db5000
2026-02-15T09:22:10.805 [DEBUG] [Thread-201798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:22:10.826 [DEBUG] [Thread-201798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:22:10.826 [INFO] [Thread-201798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] client lang: <none>
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] server lang: <none>
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] kex follows: False
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:22:10.829 [DEBUG] [Thread-201798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:22:10.830 [DEBUG] [Thread-201798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:22:10.830 [DEBUG] [Thread-201798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:22:10.830 [DEBUG] [Thread-201798] [transport.py] [_log()] Compression: none
2026-02-15T09:22:10.830 [DEBUG] [Thread-201798] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:22:10.848 [DEBUG] [Thread-201798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:22:10.849 [DEBUG] [Thread-201798] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:22:10.849 [DEBUG] [Thread-201798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:22:10.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:22:10.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:22:10.851 [DEBUG] [Thread-201798] [transport.py] [_log()] userauth is OK
2026-02-15T09:22:10.852 [DEBUG] [Thread-201798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:22:10.852 [DEBUG] [Thread-201798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:22:10.852 [DEBUG] [Thread-201798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:22:10.852 [DEBUG] [Thread-201798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:22:10.876 [INFO] [Thread-201798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:22:10.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:22:11.487 [DEBUG] [Thread-201798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:22:11.487 [DEBUG] [Thread-201798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:22:11.487 [DEBUG] [Thread-201798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:22:11.527 [DEBUG] [Thread-201798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:22:11.528 [DEBUG] [Thread-201798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:22:11.531 [DEBUG] [Thread-201798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:22:11.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:22:11.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:22:11.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:22:11.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:22:11.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:22:11.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:22:11.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:22:11.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:22:11.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:22:11.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.306698 -999.00  +10.40  24.75     67   +4.50 1 1 1 1 1   888    0 6.85 49.80 ----- 24.8 24.8 147.9 29.7 16.3 -27.5 15.4 -25.8 13.9 -26.2 14.8 -25.7
2026-02-15T09:22:11.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:22:11.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:22:11.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.306698
2026-02-15T09:22:11.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:22:11.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:22:11.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:22:11.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:22:11.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:22:11.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:21:51', tmtdew=6.88, humidity=62.29, cloud=0.0, wind=28.44, temperature=10.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:21:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:22:11.562 [DEBUG] [Thread-201798] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:22:11.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:22:11.658 [DEBUG] [Thread-201801] [transport.py] [_log()] starting thread (client mode): 0xa2db64a0
2026-02-15T09:22:11.658 [DEBUG] [Thread-201801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:22:11.674 [DEBUG] [Thread-201801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:22:11.674 [INFO] [Thread-201801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] client lang: <none>
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] server lang: <none>
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] kex follows: False
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:22:11.682 [DEBUG] [Thread-201801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:22:11.683 [DEBUG] [Thread-201801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:22:11.683 [DEBUG] [Thread-201801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:22:11.683 [DEBUG] [Thread-201801] [transport.py] [_log()] Compression: none
2026-02-15T09:22:11.683 [DEBUG] [Thread-201801] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:22:11.741 [DEBUG] [Thread-201801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:22:11.741 [DEBUG] [Thread-201801] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:22:11.742 [DEBUG] [Thread-201801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:22:11.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:22:11.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:22:11.797 [DEBUG] [Thread-201801] [transport.py] [_log()] userauth is OK
2026-02-15T09:22:11.798 [DEBUG] [Thread-201801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:22:11.798 [DEBUG] [Thread-201801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:22:11.798 [DEBUG] [Thread-201801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:22:11.798 [DEBUG] [Thread-201801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:22:11.817 [INFO] [Thread-201801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:22:11.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:22:11.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:22:12.640 [DEBUG] [Thread-201801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:22:12.640 [DEBUG] [Thread-201801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:22:12.688 [DEBUG] [Thread-201801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:22:12.689 [DEBUG] [Thread-201801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:22:12.698 [DEBUG] [Thread-201801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:22:12.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:22:12.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:22:12.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:22:12.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:22:12.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:22:12.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:22:12.733 [DEBUG] [Thread-201801] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:22:20.728 [DEBUG] [Thread-201803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:35.775 [DEBUG] [Thread-201804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:39.565 [DEBUG] [Thread-201805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:22:42.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:22:42.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:22:44.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 22, 27), 6.85, 62.36, 0.0, 28.27, 10.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:22:44.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:22:27
2026-02-15T09:22:45.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:22:45.226 [DEBUG] [Thread-201806] [transport.py] [_log()] starting thread (client mode): 0xa2db7160
2026-02-15T09:22:45.226 [DEBUG] [Thread-201806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:22:45.247 [DEBUG] [Thread-201806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:22:45.247 [INFO] [Thread-201806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:45.250 [DEBUG] [Thread-201806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] client lang: <none>
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] server lang: <none>
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] kex follows: False
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] Compression: none
2026-02-15T09:22:45.251 [DEBUG] [Thread-201806] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:22:45.268 [DEBUG] [Thread-201806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:22:45.268 [DEBUG] [Thread-201806] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:22:45.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:22:45.269 [DEBUG] [Thread-201806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:22:45.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:22:45.271 [DEBUG] [Thread-201806] [transport.py] [_log()] userauth is OK
2026-02-15T09:22:45.272 [DEBUG] [Thread-201806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:22:45.272 [DEBUG] [Thread-201806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:22:45.272 [DEBUG] [Thread-201806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:22:45.272 [DEBUG] [Thread-201806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:22:45.289 [INFO] [Thread-201806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:22:45.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:22:45.889 [DEBUG] [Thread-201806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:22:45.889 [DEBUG] [Thread-201806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:22:45.890 [DEBUG] [Thread-201806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:22:45.930 [DEBUG] [Thread-201806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:22:45.931 [DEBUG] [Thread-201806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:22:45.934 [DEBUG] [Thread-201806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:22:45.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:22:45.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:22:45.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:22:45.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:22:45.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:22:45.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:22:45.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:22:45.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:22:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:22:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.307393 -999.00  +10.40  18.88     67   +4.50 1 1 1 1 1   888    0 6.87 48.06 ----- 18.9 18.9 146.2 25.4 16.4 -28.4 15.5 -26.4 14.1 -26.3 14.8 -27.0
2026-02-15T09:22:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:22:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:22:45.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.307393
2026-02-15T09:22:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:22:45.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:22:45.962 [DEBUG] [Thread-201806] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:22:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:22:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:22:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:22:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:22:27', tmtdew=6.85, humidity=62.36, cloud=0.0, wind=28.27, temperature=10.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:22:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:22:46.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:22:46.059 [DEBUG] [Thread-201809] [transport.py] [_log()] starting thread (client mode): 0xa575b250
2026-02-15T09:22:46.059 [DEBUG] [Thread-201809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:22:46.074 [DEBUG] [Thread-201809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:22:46.074 [INFO] [Thread-201809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:22:46.081 [DEBUG] [Thread-201809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] client lang: <none>
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] server lang: <none>
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] kex follows: False
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:22:46.082 [DEBUG] [Thread-201809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:22:46.083 [DEBUG] [Thread-201809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:22:46.083 [DEBUG] [Thread-201809] [transport.py] [_log()] Compression: none
2026-02-15T09:22:46.083 [DEBUG] [Thread-201809] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:22:46.141 [DEBUG] [Thread-201809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:22:46.142 [DEBUG] [Thread-201809] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:22:46.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:22:46.143 [DEBUG] [Thread-201809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:22:46.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:22:46.198 [DEBUG] [Thread-201809] [transport.py] [_log()] userauth is OK
2026-02-15T09:22:46.198 [DEBUG] [Thread-201809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:22:46.198 [DEBUG] [Thread-201809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:22:46.198 [DEBUG] [Thread-201809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:22:46.198 [DEBUG] [Thread-201809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:22:46.217 [INFO] [Thread-201809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:22:46.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:22:46.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:22:47.070 [DEBUG] [Thread-201809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:22:47.071 [DEBUG] [Thread-201809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:22:47.122 [DEBUG] [Thread-201809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:22:47.122 [DEBUG] [Thread-201809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:22:47.131 [DEBUG] [Thread-201809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:22:47.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:22:47.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:22:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:22:47.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:22:47.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:22:47.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:22:47.168 [DEBUG] [Thread-201809] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:22:50.816 [DEBUG] [Thread-201811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:57.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:22:57.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:05.866 [DEBUG] [Thread-201812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:17.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:23:17.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:23:17.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:23:19.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 23, 2), 6.8, 62.52, 0.0, 27.49, 10.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:23:19.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:23:02
2026-02-15T09:23:19.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:23:19.682 [DEBUG] [Thread-201813] [transport.py] [_log()] starting thread (client mode): 0xa2db43a0
2026-02-15T09:23:19.682 [DEBUG] [Thread-201813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:23:19.695 [DEBUG] [Thread-201813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:23:19.695 [INFO] [Thread-201813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:23:19.696 [DEBUG] [Thread-201813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] client lang: <none>
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] server lang: <none>
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] kex follows: False
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] Compression: none
2026-02-15T09:23:19.697 [DEBUG] [Thread-201813] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:23:19.707 [DEBUG] [Thread-201813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:23:19.707 [DEBUG] [Thread-201813] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:23:19.708 [DEBUG] [Thread-201813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:23:19.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:23:19.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:23:19.709 [DEBUG] [Thread-201813] [transport.py] [_log()] userauth is OK
2026-02-15T09:23:19.709 [DEBUG] [Thread-201813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:23:19.709 [DEBUG] [Thread-201813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:23:19.709 [DEBUG] [Thread-201813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:23:19.709 [DEBUG] [Thread-201813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:23:19.728 [INFO] [Thread-201813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:23:19.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:23:20.320 [DEBUG] [Thread-201813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:23:20.320 [DEBUG] [Thread-201813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:23:20.320 [DEBUG] [Thread-201813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:23:20.360 [DEBUG] [Thread-201813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:23:20.361 [DEBUG] [Thread-201813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:23:20.363 [DEBUG] [Thread-201813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:23:20.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:23:20.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:23:20.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:23:20.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:23:20.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:23:20.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:23:20.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:23:20.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:23:20.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:23:20.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.307740 -999.00  +10.40  20.33     67   +4.60 1 1 1 1 1   888    0 7.01 51.57 ----- 20.3 20.3 135.0 32.0 16.4 -27.4 15.5 -26.0 14.1 -26.1 14.8 -26.0
2026-02-15T09:23:20.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:23:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:23:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.307740
2026-02-15T09:23:20.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:23:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:23:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:23:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:23:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:23:20.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:23:02', tmtdew=6.8, humidity=62.52, cloud=0.0, wind=27.49, temperature=10.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:23:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:23:20.383 [DEBUG] [Thread-201813] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:23:20.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:23:20.505 [DEBUG] [Thread-201816] [transport.py] [_log()] starting thread (client mode): 0xa2db5c00
2026-02-15T09:23:20.506 [DEBUG] [Thread-201816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:23:20.543 [DEBUG] [Thread-201816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:23:20.543 [INFO] [Thread-201816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:23:20.573 [DEBUG] [Thread-201816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] client lang: <none>
2026-02-15T09:23:20.574 [DEBUG] [Thread-201816] [transport.py] [_log()] server lang: <none>
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] kex follows: False
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] Compression: none
2026-02-15T09:23:20.575 [DEBUG] [Thread-201816] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:23:20.654 [DEBUG] [Thread-201816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:23:20.654 [DEBUG] [Thread-201816] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:23:20.655 [DEBUG] [Thread-201816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:23:20.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:23:20.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:23:20.758 [DEBUG] [Thread-201816] [transport.py] [_log()] userauth is OK
2026-02-15T09:23:20.759 [DEBUG] [Thread-201816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:23:20.759 [DEBUG] [Thread-201816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:23:20.759 [DEBUG] [Thread-201816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:23:20.759 [DEBUG] [Thread-201816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:23:20.799 [INFO] [Thread-201816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:23:20.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:23:20.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:23:20.902 [DEBUG] [Thread-201818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:21.612 [DEBUG] [Thread-201816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:23:21.613 [DEBUG] [Thread-201816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:23:21.683 [DEBUG] [Thread-201816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:23:21.684 [DEBUG] [Thread-201816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:23:21.717 [DEBUG] [Thread-201816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:23:21.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:23:21.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:23:21.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:23:21.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:23:21.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:23:21.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:23:21.848 [DEBUG] [Thread-201816] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:23:35.953 [DEBUG] [Thread-201819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:39.609 [DEBUG] [Thread-201820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:50.990 [DEBUG] [Thread-201821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:51.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:23:51.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:23:51.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:23:53.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 23, 38), 7.12, 61.43, 0.0, 25.69, 10.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:23:53.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:23:38
2026-02-15T09:23:54.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:23:54.266 [DEBUG] [Thread-201822] [transport.py] [_log()] starting thread (client mode): 0xa2db5120
2026-02-15T09:23:54.266 [DEBUG] [Thread-201822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:23:54.286 [DEBUG] [Thread-201822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:23:54.287 [INFO] [Thread-201822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:23:54.290 [DEBUG] [Thread-201822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] client lang: <none>
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] server lang: <none>
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] kex follows: False
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] Compression: none
2026-02-15T09:23:54.291 [DEBUG] [Thread-201822] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:23:54.305 [DEBUG] [Thread-201822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:23:54.306 [DEBUG] [Thread-201822] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:23:54.306 [DEBUG] [Thread-201822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:23:54.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:23:54.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:23:54.308 [DEBUG] [Thread-201822] [transport.py] [_log()] userauth is OK
2026-02-15T09:23:54.308 [DEBUG] [Thread-201822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:23:54.308 [DEBUG] [Thread-201822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:23:54.308 [DEBUG] [Thread-201822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:23:54.308 [DEBUG] [Thread-201822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:23:54.326 [INFO] [Thread-201822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:23:54.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:23:54.978 [DEBUG] [Thread-201822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:23:54.979 [DEBUG] [Thread-201822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:23:54.979 [DEBUG] [Thread-201822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:23:55.019 [DEBUG] [Thread-201822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:23:55.019 [DEBUG] [Thread-201822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:23:55.022 [DEBUG] [Thread-201822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:23:55.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:23:55.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:23:55.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:23:55.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:23:55.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:23:55.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:23:55.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:23:55.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:23:55.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:23:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.308087 -999.00  +10.50  25.74     66   +4.50 1 1 1 1 1   888    0 7.28 60.02 ----- 25.7 25.7 145.8 30.1 16.4 -28.6 15.6 -26.0 14.1 -26.0 14.8 -26.5
2026-02-15T09:23:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:23:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:23:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.308087
2026-02-15T09:23:55.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:23:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:23:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:23:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:23:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:23:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:23:38', tmtdew=7.12, humidity=61.43, cloud=0.0, wind=25.69, temperature=10.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:23:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:23:55.048 [DEBUG] [Thread-201822] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:23:55.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:23:55.177 [DEBUG] [Thread-201825] [transport.py] [_log()] starting thread (client mode): 0xa2dc2b90
2026-02-15T09:23:55.178 [DEBUG] [Thread-201825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:23:55.224 [DEBUG] [Thread-201825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:23:55.224 [INFO] [Thread-201825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:23:55.264 [DEBUG] [Thread-201825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:23:55.264 [DEBUG] [Thread-201825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:23:55.264 [DEBUG] [Thread-201825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] client lang: <none>
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] server lang: <none>
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] kex follows: False
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:23:55.265 [DEBUG] [Thread-201825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:23:55.266 [DEBUG] [Thread-201825] [transport.py] [_log()] Compression: none
2026-02-15T09:23:55.266 [DEBUG] [Thread-201825] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:23:55.356 [DEBUG] [Thread-201825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:23:55.356 [DEBUG] [Thread-201825] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:23:55.357 [DEBUG] [Thread-201825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:23:55.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:23:55.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:23:55.478 [DEBUG] [Thread-201825] [transport.py] [_log()] userauth is OK
2026-02-15T09:23:55.478 [DEBUG] [Thread-201825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:23:55.478 [DEBUG] [Thread-201825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:23:55.478 [DEBUG] [Thread-201825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:23:55.478 [DEBUG] [Thread-201825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:23:55.529 [INFO] [Thread-201825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:23:55.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:23:55.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:23:56.342 [DEBUG] [Thread-201825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:23:56.342 [DEBUG] [Thread-201825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:23:56.420 [DEBUG] [Thread-201825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:23:56.421 [DEBUG] [Thread-201825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:23:56.461 [DEBUG] [Thread-201825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:23:56.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:23:56.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:23:56.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:23:56.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:23:56.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:23:56.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:23:56.609 [DEBUG] [Thread-201825] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:23:58.032 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:23:58.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:06.027 [DEBUG] [Thread-201827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:21.080 [DEBUG] [Thread-201828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:26.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:24:26.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:24:26.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:24:28.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 24, 14), 6.71, 62.94, 0.0, 26.77, 10.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:24:28.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:24:14
2026-02-15T09:24:28.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:24:28.961 [DEBUG] [Thread-201829] [transport.py] [_log()] starting thread (client mode): 0xa2db5930
2026-02-15T09:24:28.961 [DEBUG] [Thread-201829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:24:28.982 [DEBUG] [Thread-201829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:24:28.982 [INFO] [Thread-201829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:24:28.985 [DEBUG] [Thread-201829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] client lang: <none>
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] server lang: <none>
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] kex follows: False
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:24:28.986 [DEBUG] [Thread-201829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:24:28.987 [DEBUG] [Thread-201829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:24:28.987 [DEBUG] [Thread-201829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:24:28.987 [DEBUG] [Thread-201829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:24:28.987 [DEBUG] [Thread-201829] [transport.py] [_log()] Compression: none
2026-02-15T09:24:28.987 [DEBUG] [Thread-201829] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:24:29.002 [DEBUG] [Thread-201829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:24:29.003 [DEBUG] [Thread-201829] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:24:29.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:24:29.004 [DEBUG] [Thread-201829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:24:29.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:24:29.005 [DEBUG] [Thread-201829] [transport.py] [_log()] userauth is OK
2026-02-15T09:24:29.006 [DEBUG] [Thread-201829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:24:29.006 [DEBUG] [Thread-201829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:24:29.006 [DEBUG] [Thread-201829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:24:29.006 [DEBUG] [Thread-201829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:24:29.029 [INFO] [Thread-201829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:24:29.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:24:29.671 [DEBUG] [Thread-201829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:24:29.671 [DEBUG] [Thread-201829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:24:29.671 [DEBUG] [Thread-201829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:24:29.713 [DEBUG] [Thread-201829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:24:29.713 [DEBUG] [Thread-201829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:24:29.716 [DEBUG] [Thread-201829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:24:29.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:24:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:24:29.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:24:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:24:29.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:24:29.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:24:29.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:24:29.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:24:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:24:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.308434 -999.00  +10.60  25.91     66   +4.50 1 1 1 1 1   888    0 6.90 51.74 ----- 25.9 25.9 143.2 34.5 16.5 -28.1 15.6 -26.3 14.2 -25.9 14.9 -26.8
2026-02-15T09:24:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:24:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:24:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.308434
2026-02-15T09:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:24:29.738 [DEBUG] [Thread-201829] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:24:14', tmtdew=6.71, humidity=62.94, cloud=0.0, wind=26.77, temperature=10.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:24:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:24:29.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:24:29.841 [DEBUG] [Thread-201832] [transport.py] [_log()] starting thread (client mode): 0xa2db4f70
2026-02-15T09:24:29.842 [DEBUG] [Thread-201832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:24:29.856 [DEBUG] [Thread-201832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:24:29.856 [INFO] [Thread-201832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:24:29.864 [DEBUG] [Thread-201832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:24:29.864 [DEBUG] [Thread-201832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:24:29.864 [DEBUG] [Thread-201832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:24:29.864 [DEBUG] [Thread-201832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] client lang: <none>
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] server lang: <none>
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] kex follows: False
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] Compression: none
2026-02-15T09:24:29.865 [DEBUG] [Thread-201832] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:24:29.926 [DEBUG] [Thread-201832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:24:29.927 [DEBUG] [Thread-201832] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:24:29.927 [DEBUG] [Thread-201832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:24:29.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:24:29.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:24:29.984 [DEBUG] [Thread-201832] [transport.py] [_log()] userauth is OK
2026-02-15T09:24:29.985 [DEBUG] [Thread-201832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:24:29.985 [DEBUG] [Thread-201832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:24:29.985 [DEBUG] [Thread-201832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:24:29.985 [DEBUG] [Thread-201832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:24:30.007 [INFO] [Thread-201832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:24:30.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:24:30.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:24:30.881 [DEBUG] [Thread-201832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:24:30.881 [DEBUG] [Thread-201832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:24:30.929 [DEBUG] [Thread-201832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:24:30.929 [DEBUG] [Thread-201832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:24:30.939 [DEBUG] [Thread-201832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:24:30.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:24:30.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:24:30.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:24:30.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:24:30.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:24:30.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:24:30.974 [DEBUG] [Thread-201832] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:24:36.113 [DEBUG] [Thread-201834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:39.655 [DEBUG] [Thread-201835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:51.166 [DEBUG] [Thread-201836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:58.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:24:58.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:00.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:25:00.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:25:00.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:25:02.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 24, 48), 7.41, 60.31, 0.0, 27.45, 10.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:25:02.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:24:48
2026-02-15T09:25:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:25:03.504 [DEBUG] [Thread-201837] [transport.py] [_log()] starting thread (client mode): 0xa575aa10
2026-02-15T09:25:03.504 [DEBUG] [Thread-201837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:25:03.525 [DEBUG] [Thread-201837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:25:03.525 [INFO] [Thread-201837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] client lang: <none>
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] server lang: <none>
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] kex follows: False
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:25:03.529 [DEBUG] [Thread-201837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:25:03.530 [DEBUG] [Thread-201837] [transport.py] [_log()] Compression: none
2026-02-15T09:25:03.530 [DEBUG] [Thread-201837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:25:03.549 [DEBUG] [Thread-201837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:25:03.550 [DEBUG] [Thread-201837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:25:03.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:25:03.551 [DEBUG] [Thread-201837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:25:03.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:25:03.553 [DEBUG] [Thread-201837] [transport.py] [_log()] userauth is OK
2026-02-15T09:25:03.554 [DEBUG] [Thread-201837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:25:03.554 [DEBUG] [Thread-201837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:25:03.554 [DEBUG] [Thread-201837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:25:03.554 [DEBUG] [Thread-201837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:25:03.579 [INFO] [Thread-201837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:25:03.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:25:06.202 [DEBUG] [Thread-201839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:16.184 [DEBUG] [Thread-201837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:25:16.184 [DEBUG] [Thread-201837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:25:16.185 [DEBUG] [Thread-201837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:25:16.225 [DEBUG] [Thread-201837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:25:16.225 [DEBUG] [Thread-201837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:25:16.230 [DEBUG] [Thread-201837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:25:16.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:25:16.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:25:16.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:25:16.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:25:16.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:25:16.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:25:16.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:25:16.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:25:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:25:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.308781 -999.00  +10.70  22.84     65   +4.50 1 1 1 1 1   888    0 6.86 45.99 ----- 22.8 22.8 135.6 28.0 16.6 -26.3 15.7 -25.7 14.2 -25.5 15.0 -26.7
2026-02-15T09:25:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:25:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:25:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.308781
2026-02-15T09:25:16.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:25:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:25:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:25:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:25:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:25:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:24:48', tmtdew=7.41, humidity=60.31, cloud=0.0, wind=27.45, temperature=10.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:24:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:25:16.322 [DEBUG] [Thread-201837] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:25:16.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:25:16.423 [DEBUG] [Thread-201841] [transport.py] [_log()] starting thread (client mode): 0xa575b970
2026-02-15T09:25:16.423 [DEBUG] [Thread-201841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:25:16.441 [DEBUG] [Thread-201841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:25:16.441 [INFO] [Thread-201841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:16.452 [DEBUG] [Thread-201841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] client lang: <none>
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] server lang: <none>
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] kex follows: False
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] Compression: none
2026-02-15T09:25:16.453 [DEBUG] [Thread-201841] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:25:16.513 [DEBUG] [Thread-201841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:25:16.514 [DEBUG] [Thread-201841] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:25:16.515 [DEBUG] [Thread-201841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:25:16.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:25:16.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:25:16.578 [DEBUG] [Thread-201841] [transport.py] [_log()] userauth is OK
2026-02-15T09:25:16.578 [DEBUG] [Thread-201841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:25:16.578 [DEBUG] [Thread-201841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:25:16.578 [DEBUG] [Thread-201841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:25:16.578 [DEBUG] [Thread-201841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:25:16.602 [INFO] [Thread-201841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:25:16.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:25:16.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:25:17.428 [DEBUG] [Thread-201841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:25:17.428 [DEBUG] [Thread-201841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:25:17.479 [DEBUG] [Thread-201841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:25:17.479 [DEBUG] [Thread-201841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:25:17.491 [DEBUG] [Thread-201841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:25:17.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:25:17.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:25:17.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:25:17.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:25:17.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:25:17.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:25:17.541 [DEBUG] [Thread-201841] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:25:21.238 [DEBUG] [Thread-201843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:36.286 [DEBUG] [Thread-201844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:39.689 [DEBUG] [Thread-201845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:25:47.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:25:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:25:49.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 25, 24), 7.37, 60.41, 0.0, 26.26, 10.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:25:49.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:25:24
2026-02-15T09:25:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:25:49.818 [DEBUG] [Thread-201846] [transport.py] [_log()] starting thread (client mode): 0xa81d7130
2026-02-15T09:25:49.818 [DEBUG] [Thread-201846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:25:49.834 [DEBUG] [Thread-201846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:25:49.834 [INFO] [Thread-201846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:25:49.837 [DEBUG] [Thread-201846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] client lang: <none>
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] server lang: <none>
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] kex follows: False
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] Compression: none
2026-02-15T09:25:49.838 [DEBUG] [Thread-201846] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:25:49.854 [DEBUG] [Thread-201846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:25:49.854 [DEBUG] [Thread-201846] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:25:49.855 [DEBUG] [Thread-201846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:25:49.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:25:49.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:25:49.857 [DEBUG] [Thread-201846] [transport.py] [_log()] userauth is OK
2026-02-15T09:25:49.857 [DEBUG] [Thread-201846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:25:49.857 [DEBUG] [Thread-201846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:25:49.857 [DEBUG] [Thread-201846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:25:49.858 [DEBUG] [Thread-201846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:25:49.884 [INFO] [Thread-201846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:25:49.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:25:50.556 [DEBUG] [Thread-201846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:25:50.556 [DEBUG] [Thread-201846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:25:50.557 [DEBUG] [Thread-201846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:25:50.598 [DEBUG] [Thread-201846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:25:50.598 [DEBUG] [Thread-201846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:25:50.601 [DEBUG] [Thread-201846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:25:50.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:25:50.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:25:50.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:25:50.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:25:50.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:25:50.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:25:50.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:25:50.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:25:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:25:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.309128 -999.00  +10.70  24.16     65   +4.40 1 1 1 1 1   888    0 7.10 48.54 ----- 24.2 24.2 136.8 29.6 16.6 -26.7 15.8 -25.6 14.3 -25.9 15.1 -26.7
2026-02-15T09:25:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:25:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:25:50.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.309128
2026-02-15T09:25:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:25:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:25:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:25:50.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:25:50.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:25:50.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:25:24', tmtdew=7.37, humidity=60.41, cloud=0.0, wind=26.26, temperature=10.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:25:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:25:50.624 [DEBUG] [Thread-201846] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:25:50.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:25:50.727 [DEBUG] [Thread-201849] [transport.py] [_log()] starting thread (client mode): 0xa57c0040
2026-02-15T09:25:50.727 [DEBUG] [Thread-201849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:25:50.749 [DEBUG] [Thread-201849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:25:50.749 [INFO] [Thread-201849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:25:50.763 [DEBUG] [Thread-201849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:25:50.763 [DEBUG] [Thread-201849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:25:50.763 [DEBUG] [Thread-201849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:25:50.763 [DEBUG] [Thread-201849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] client lang: <none>
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] server lang: <none>
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] kex follows: False
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] Compression: none
2026-02-15T09:25:50.764 [DEBUG] [Thread-201849] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:25:50.829 [DEBUG] [Thread-201849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:25:50.830 [DEBUG] [Thread-201849] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:25:50.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:25:50.831 [DEBUG] [Thread-201849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:25:50.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:25:50.900 [DEBUG] [Thread-201849] [transport.py] [_log()] userauth is OK
2026-02-15T09:25:50.901 [DEBUG] [Thread-201849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:25:50.901 [DEBUG] [Thread-201849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:25:50.901 [DEBUG] [Thread-201849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:25:50.901 [DEBUG] [Thread-201849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:25:50.926 [INFO] [Thread-201849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:25:50.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:25:50.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:25:51.324 [DEBUG] [Thread-201851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:51.810 [DEBUG] [Thread-201849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:25:51.811 [DEBUG] [Thread-201849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:25:51.865 [DEBUG] [Thread-201849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:25:51.865 [DEBUG] [Thread-201849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:25:51.881 [DEBUG] [Thread-201849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:25:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:25:51.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:25:51.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:25:51.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:25:51.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:25:51.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:25:51.943 [DEBUG] [Thread-201849] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:25:58.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:25:58.315 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:06.372 [DEBUG] [Thread-201852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:21.410 [DEBUG] [Thread-201853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:26:21.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:26:21.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:26:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 26, 1), 7.24, 60.93, 0.0, 24.44, 10.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:26:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:26:01
2026-02-15T09:26:24.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:26:24.573 [DEBUG] [Thread-201854] [transport.py] [_log()] starting thread (client mode): 0xa81d78b0
2026-02-15T09:26:24.573 [DEBUG] [Thread-201854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:26:24.594 [DEBUG] [Thread-201854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:26:24.594 [INFO] [Thread-201854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:26:24.598 [DEBUG] [Thread-201854] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:26:24.598 [DEBUG] [Thread-201854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:26:24.598 [DEBUG] [Thread-201854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:26:24.598 [DEBUG] [Thread-201854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:26:24.598 [DEBUG] [Thread-201854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:26:24.598 [DEBUG] [Thread-201854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] client lang: <none>
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] server lang: <none>
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] kex follows: False
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] Compression: none
2026-02-15T09:26:24.599 [DEBUG] [Thread-201854] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:26:24.616 [DEBUG] [Thread-201854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:26:24.617 [DEBUG] [Thread-201854] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:26:24.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:26:24.618 [DEBUG] [Thread-201854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:26:24.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:26:24.620 [DEBUG] [Thread-201854] [transport.py] [_log()] userauth is OK
2026-02-15T09:26:24.620 [DEBUG] [Thread-201854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:26:24.620 [DEBUG] [Thread-201854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:26:24.621 [DEBUG] [Thread-201854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:26:24.621 [DEBUG] [Thread-201854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:26:24.645 [INFO] [Thread-201854] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:26:24.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:26:25.283 [DEBUG] [Thread-201854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:26:25.283 [DEBUG] [Thread-201854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:26:25.283 [DEBUG] [Thread-201854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:26:25.324 [DEBUG] [Thread-201854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:26:25.324 [DEBUG] [Thread-201854] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:26:25.327 [DEBUG] [Thread-201854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:26:25.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:26:25.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:26:25.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:26:25.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:26:25.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:26:25.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:26:25.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:26:25.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:26:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:26:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.309476 -999.00  +10.80  19.84     64   +4.50 1 1 1 1 1   888    0 7.13 53.44 ----- 19.8 19.8 140.2 32.3 16.8 -27.0 15.9 -26.2 14.3 -25.9 15.1 -27.7
2026-02-15T09:26:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:26:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:26:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.309476
2026-02-15T09:26:25.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:26:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:26:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:26:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:26:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:26:25.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:26:01', tmtdew=7.24, humidity=60.93, cloud=0.0, wind=24.44, temperature=10.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:25:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:26:25.350 [DEBUG] [Thread-201854] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:26:25.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:26:25.444 [DEBUG] [Thread-201857] [transport.py] [_log()] starting thread (client mode): 0xa57b3550
2026-02-15T09:26:25.444 [DEBUG] [Thread-201857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:26:25.462 [DEBUG] [Thread-201857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:26:25.462 [INFO] [Thread-201857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:26:25.470 [DEBUG] [Thread-201857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:26:25.470 [DEBUG] [Thread-201857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:26:25.470 [DEBUG] [Thread-201857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:26:25.470 [DEBUG] [Thread-201857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:26:25.470 [DEBUG] [Thread-201857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] client lang: <none>
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] server lang: <none>
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] kex follows: False
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:26:25.471 [DEBUG] [Thread-201857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:26:25.472 [DEBUG] [Thread-201857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:26:25.472 [DEBUG] [Thread-201857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:26:25.472 [DEBUG] [Thread-201857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:26:25.472 [DEBUG] [Thread-201857] [transport.py] [_log()] Compression: none
2026-02-15T09:26:25.472 [DEBUG] [Thread-201857] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:26:25.526 [DEBUG] [Thread-201857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:26:25.526 [DEBUG] [Thread-201857] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:26:25.527 [DEBUG] [Thread-201857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:26:25.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:26:25.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:26:25.583 [DEBUG] [Thread-201857] [transport.py] [_log()] userauth is OK
2026-02-15T09:26:25.583 [DEBUG] [Thread-201857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:26:25.583 [DEBUG] [Thread-201857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:26:25.583 [DEBUG] [Thread-201857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:26:25.583 [DEBUG] [Thread-201857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:26:25.602 [INFO] [Thread-201857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:26:25.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:26:25.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:26:26.409 [DEBUG] [Thread-201857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:26:26.410 [DEBUG] [Thread-201857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:26:26.457 [DEBUG] [Thread-201857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:26:26.457 [DEBUG] [Thread-201857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:26:26.467 [DEBUG] [Thread-201857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:26:26.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:26:26.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:26:26.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:26:26.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:26:26.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:26:26.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:26:26.503 [DEBUG] [Thread-201857] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:26:36.447 [DEBUG] [Thread-201859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:39.763 [DEBUG] [Thread-201860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:51.496 [DEBUG] [Thread-201861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:56.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:26:56.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:26:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:26:58.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:58.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:26:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 26, 36), 8.04, 57.58, 0.0, 24.17, 11.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:26:58.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:26:36
2026-02-15T09:26:58.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:26:59.013 [DEBUG] [Thread-201862] [transport.py] [_log()] starting thread (client mode): 0xa57594b0
2026-02-15T09:26:59.013 [DEBUG] [Thread-201862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:26:59.031 [DEBUG] [Thread-201862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:26:59.031 [INFO] [Thread-201862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:26:59.035 [DEBUG] [Thread-201862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] client lang: <none>
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] server lang: <none>
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] kex follows: False
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] Compression: none
2026-02-15T09:26:59.036 [DEBUG] [Thread-201862] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:26:59.056 [DEBUG] [Thread-201862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:26:59.057 [DEBUG] [Thread-201862] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:26:59.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:26:59.058 [DEBUG] [Thread-201862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:26:59.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:26:59.060 [DEBUG] [Thread-201862] [transport.py] [_log()] userauth is OK
2026-02-15T09:26:59.061 [DEBUG] [Thread-201862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:26:59.061 [DEBUG] [Thread-201862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:26:59.061 [DEBUG] [Thread-201862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:26:59.061 [DEBUG] [Thread-201862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:26:59.085 [INFO] [Thread-201862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:26:59.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:26:59.750 [DEBUG] [Thread-201862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:26:59.750 [DEBUG] [Thread-201862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:26:59.750 [DEBUG] [Thread-201862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:26:59.790 [DEBUG] [Thread-201862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:26:59.791 [DEBUG] [Thread-201862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:26:59.794 [DEBUG] [Thread-201862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:26:59.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:26:59.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:26:59.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:26:59.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:26:59.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:26:59.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:26:59.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:26:59.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:26:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:26:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.309823 -999.00  +10.90  20.27     63   +4.20 1 1 1 1 1   888    0 7.50 60.08 ----- 20.3 20.3 160.8 30.7 16.8 -28.7 15.9 -27.0 14.4 -26.1 15.2 -27.3
2026-02-15T09:26:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:26:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:26:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.309823
2026-02-15T09:26:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:26:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:26:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:26:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:26:59.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:26:59.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:26:36', tmtdew=8.04, humidity=57.58, cloud=0.0, wind=24.17, temperature=11.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:26:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:26:59.820 [DEBUG] [Thread-201862] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:26:59.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:26:59.939 [DEBUG] [Thread-201865] [transport.py] [_log()] starting thread (client mode): 0xa57e3730
2026-02-15T09:26:59.939 [DEBUG] [Thread-201865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:26:59.974 [DEBUG] [Thread-201865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:26:59.974 [INFO] [Thread-201865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:27:00.005 [DEBUG] [Thread-201865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] client lang: <none>
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] server lang: <none>
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] kex follows: False
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] Compression: none
2026-02-15T09:27:00.006 [DEBUG] [Thread-201865] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:27:00.086 [DEBUG] [Thread-201865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:27:00.086 [DEBUG] [Thread-201865] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:27:00.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:27:00.087 [DEBUG] [Thread-201865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:27:00.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:27:00.191 [DEBUG] [Thread-201865] [transport.py] [_log()] userauth is OK
2026-02-15T09:27:00.191 [DEBUG] [Thread-201865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:27:00.191 [DEBUG] [Thread-201865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:27:00.191 [DEBUG] [Thread-201865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:27:00.191 [DEBUG] [Thread-201865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:27:00.234 [INFO] [Thread-201865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:27:00.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:27:00.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:27:01.077 [DEBUG] [Thread-201865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:27:01.077 [DEBUG] [Thread-201865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:27:01.152 [DEBUG] [Thread-201865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:27:01.152 [DEBUG] [Thread-201865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:27:01.185 [DEBUG] [Thread-201865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:27:01.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:27:01.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:27:01.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:27:01.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:27:01.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:27:01.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:27:01.321 [DEBUG] [Thread-201865] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:27:06.530 [DEBUG] [Thread-201867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:27:21.588 [DEBUG] [Thread-201868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:27:31.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:27:31.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:27:31.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:27:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 27, 11), 7.44, 59.97, 0.0, 28.44, 10.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:27:33.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:27:11
2026-02-15T09:27:33.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:27:33.724 [DEBUG] [Thread-201869] [transport.py] [_log()] starting thread (client mode): 0xa2db6590
2026-02-15T09:27:33.725 [DEBUG] [Thread-201869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:27:33.744 [DEBUG] [Thread-201869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:27:33.744 [INFO] [Thread-201869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] client lang: <none>
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] server lang: <none>
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] kex follows: False
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:27:33.747 [DEBUG] [Thread-201869] [transport.py] [_log()] Compression: none
2026-02-15T09:27:33.748 [DEBUG] [Thread-201869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:27:33.764 [DEBUG] [Thread-201869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:27:33.765 [DEBUG] [Thread-201869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:27:33.765 [DEBUG] [Thread-201869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:27:33.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:27:33.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:27:33.768 [DEBUG] [Thread-201869] [transport.py] [_log()] userauth is OK
2026-02-15T09:27:33.768 [DEBUG] [Thread-201869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:27:33.768 [DEBUG] [Thread-201869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:27:33.768 [DEBUG] [Thread-201869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:27:33.768 [DEBUG] [Thread-201869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:27:33.787 [INFO] [Thread-201869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:27:33.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:27:34.450 [DEBUG] [Thread-201869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:27:34.450 [DEBUG] [Thread-201869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:27:34.450 [DEBUG] [Thread-201869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:27:34.490 [DEBUG] [Thread-201869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:27:34.490 [DEBUG] [Thread-201869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:27:34.494 [DEBUG] [Thread-201869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:27:34.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:27:34.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:27:34.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:27:34.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:27:34.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:27:34.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:27:34.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:27:34.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:27:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:27:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.310517 -999.00  +11.30  18.68     64   +4.80 1 1 1 1 1   888    0 7.59 69.84 ----- 18.7 18.7 135.7 28.2 17.0 -26.7 16.0 -26.2 14.5 -25.0 15.3 -27.1
2026-02-15T09:27:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:27:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:27:34.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.310517
2026-02-15T09:27:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:27:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:27:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:27:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:27:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:27:34.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:27:11', tmtdew=7.44, humidity=59.97, cloud=0.0, wind=28.44, temperature=10.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:27:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:27:34.517 [DEBUG] [Thread-201869] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:27:34.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:27:34.625 [DEBUG] [Thread-201872] [transport.py] [_log()] starting thread (client mode): 0xa575b250
2026-02-15T09:27:34.625 [DEBUG] [Thread-201872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:27:34.649 [DEBUG] [Thread-201872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:27:34.649 [INFO] [Thread-201872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:27:34.666 [DEBUG] [Thread-201872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:27:34.666 [DEBUG] [Thread-201872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:27:34.666 [DEBUG] [Thread-201872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:27:34.666 [DEBUG] [Thread-201872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:27:34.666 [DEBUG] [Thread-201872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:27:34.666 [DEBUG] [Thread-201872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] client lang: <none>
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] server lang: <none>
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] kex follows: False
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] Compression: none
2026-02-15T09:27:34.667 [DEBUG] [Thread-201872] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:27:34.733 [DEBUG] [Thread-201872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:27:34.734 [DEBUG] [Thread-201872] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:27:34.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:27:34.735 [DEBUG] [Thread-201872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:27:34.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:27:34.810 [DEBUG] [Thread-201872] [transport.py] [_log()] userauth is OK
2026-02-15T09:27:34.810 [DEBUG] [Thread-201872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:27:34.810 [DEBUG] [Thread-201872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:27:34.810 [DEBUG] [Thread-201872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:27:34.810 [DEBUG] [Thread-201872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:27:34.839 [INFO] [Thread-201872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:27:34.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:27:34.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:27:35.682 [DEBUG] [Thread-201872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:27:35.682 [DEBUG] [Thread-201872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:27:35.741 [DEBUG] [Thread-201872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:27:35.742 [DEBUG] [Thread-201872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:27:35.762 [DEBUG] [Thread-201872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:27:35.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:27:35.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:27:35.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:27:35.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:27:35.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:27:35.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:27:35.844 [DEBUG] [Thread-201872] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:27:36.624 [DEBUG] [Thread-201874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:27:39.809 [DEBUG] [Thread-201875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:27:51.675 [DEBUG] [Thread-201876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:27:58.598 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:27:58.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:28:05.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:28:05.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:28:06.712 [DEBUG] [Thread-201877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:07.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 27, 47), 7.28, 60.81, 0.0, 25.76, 10.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:28:07.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:27:47
2026-02-15T09:28:08.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:28:08.521 [DEBUG] [Thread-201878] [transport.py] [_log()] starting thread (client mode): 0xa57b3c40
2026-02-15T09:28:08.521 [DEBUG] [Thread-201878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:28:08.542 [DEBUG] [Thread-201878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:28:08.542 [INFO] [Thread-201878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:28:08.545 [DEBUG] [Thread-201878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:28:08.545 [DEBUG] [Thread-201878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] client lang: <none>
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] server lang: <none>
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] kex follows: False
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:28:08.546 [DEBUG] [Thread-201878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:28:08.547 [DEBUG] [Thread-201878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:28:08.547 [DEBUG] [Thread-201878] [transport.py] [_log()] Compression: none
2026-02-15T09:28:08.547 [DEBUG] [Thread-201878] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:28:08.567 [DEBUG] [Thread-201878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:28:08.567 [DEBUG] [Thread-201878] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:28:08.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:28:08.568 [DEBUG] [Thread-201878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:28:08.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:28:08.570 [DEBUG] [Thread-201878] [transport.py] [_log()] userauth is OK
2026-02-15T09:28:08.571 [DEBUG] [Thread-201878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:28:08.571 [DEBUG] [Thread-201878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:28:08.571 [DEBUG] [Thread-201878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:28:08.571 [DEBUG] [Thread-201878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:28:08.594 [INFO] [Thread-201878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:28:08.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:28:09.406 [DEBUG] [Thread-201878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:28:09.407 [DEBUG] [Thread-201878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:28:09.407 [DEBUG] [Thread-201878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:28:09.447 [DEBUG] [Thread-201878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:28:09.448 [DEBUG] [Thread-201878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:28:09.451 [DEBUG] [Thread-201878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:28:09.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:28:09.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:28:09.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:28:09.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:28:09.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:28:09.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:28:09.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:28:09.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:28:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:28:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.310865 -999.00  +11.10  20.04     63   +4.50 1 1 1 1 1   888    0 7.73 70.16 ----- 20.0 20.0 141.6 27.3 17.1 -27.4 16.1 -26.1 14.6 -25.1 15.4 -26.4
2026-02-15T09:28:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:28:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:28:09.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.310865
2026-02-15T09:28:09.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:28:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:28:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:28:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:28:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:28:09.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:27:47', tmtdew=7.28, humidity=60.81, cloud=0.0, wind=25.76, temperature=10.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:27:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:28:09.477 [DEBUG] [Thread-201878] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:28:09.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:28:09.581 [DEBUG] [Thread-201881] [transport.py] [_log()] starting thread (client mode): 0xa81d67a0
2026-02-15T09:28:09.581 [DEBUG] [Thread-201881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:28:09.606 [DEBUG] [Thread-201881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:28:09.607 [INFO] [Thread-201881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:28:09.625 [DEBUG] [Thread-201881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:28:09.625 [DEBUG] [Thread-201881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:28:09.625 [DEBUG] [Thread-201881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:28:09.625 [DEBUG] [Thread-201881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:09.625 [DEBUG] [Thread-201881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:09.625 [DEBUG] [Thread-201881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] client lang: <none>
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] server lang: <none>
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] kex follows: False
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] Compression: none
2026-02-15T09:28:09.626 [DEBUG] [Thread-201881] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:28:09.696 [DEBUG] [Thread-201881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:28:09.696 [DEBUG] [Thread-201881] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:28:09.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:28:09.697 [DEBUG] [Thread-201881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:28:09.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:28:09.775 [DEBUG] [Thread-201881] [transport.py] [_log()] userauth is OK
2026-02-15T09:28:09.775 [DEBUG] [Thread-201881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:28:09.775 [DEBUG] [Thread-201881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:28:09.775 [DEBUG] [Thread-201881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:28:09.776 [DEBUG] [Thread-201881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:28:09.804 [INFO] [Thread-201881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:28:09.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:28:09.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:28:10.634 [DEBUG] [Thread-201881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:28:10.634 [DEBUG] [Thread-201881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:28:10.693 [DEBUG] [Thread-201881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:28:10.693 [DEBUG] [Thread-201881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:28:10.714 [DEBUG] [Thread-201881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:28:10.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:28:10.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:28:10.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:28:10.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:28:10.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:28:10.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:28:10.796 [DEBUG] [Thread-201881] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:28:21.749 [DEBUG] [Thread-201883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:36.813 [DEBUG] [Thread-201884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:39.842 [DEBUG] [Thread-201885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:40.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:28:40.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:28:40.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:28:42.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 28, 22), 7.13, 61.44, 0.0, 26.2, 10.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:28:42.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:28:22
2026-02-15T09:28:43.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:28:43.168 [DEBUG] [Thread-201886] [transport.py] [_log()] starting thread (client mode): 0xa81d7b20
2026-02-15T09:28:43.168 [DEBUG] [Thread-201886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:28:43.190 [DEBUG] [Thread-201886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:28:43.190 [INFO] [Thread-201886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:28:43.193 [DEBUG] [Thread-201886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:28:43.193 [DEBUG] [Thread-201886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:28:43.193 [DEBUG] [Thread-201886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:28:43.193 [DEBUG] [Thread-201886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:43.193 [DEBUG] [Thread-201886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] client lang: <none>
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] server lang: <none>
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] kex follows: False
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] Compression: none
2026-02-15T09:28:43.194 [DEBUG] [Thread-201886] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:28:43.211 [DEBUG] [Thread-201886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:28:43.211 [DEBUG] [Thread-201886] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:28:43.212 [DEBUG] [Thread-201886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:28:43.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:28:43.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:28:43.214 [DEBUG] [Thread-201886] [transport.py] [_log()] userauth is OK
2026-02-15T09:28:43.214 [DEBUG] [Thread-201886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:28:43.214 [DEBUG] [Thread-201886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:28:43.214 [DEBUG] [Thread-201886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:28:43.214 [DEBUG] [Thread-201886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:28:43.238 [INFO] [Thread-201886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:28:43.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:28:43.918 [DEBUG] [Thread-201886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:28:43.918 [DEBUG] [Thread-201886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:28:43.919 [DEBUG] [Thread-201886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:28:43.960 [DEBUG] [Thread-201886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:28:43.960 [DEBUG] [Thread-201886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:28:43.963 [DEBUG] [Thread-201886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:28:43.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:28:43.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:28:43.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:28:43.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:28:43.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:28:43.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:28:43.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:28:43.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:28:43.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:28:43.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.311212 -999.00  +11.20  20.25     64   +4.60 1 1 1 1 1   888    0 7.68 71.48 ----- 20.2 20.2 162.2 26.4 17.1 -27.6 16.2 -27.1 14.7 -25.9 15.4 -26.6
2026-02-15T09:28:43.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:28:43.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:28:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.311212
2026-02-15T09:28:43.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:28:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:28:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:28:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:28:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:28:43.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:28:22', tmtdew=7.13, humidity=61.44, cloud=0.0, wind=26.2, temperature=10.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:28:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:28:43.991 [DEBUG] [Thread-201886] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:28:44.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:28:44.105 [DEBUG] [Thread-201889] [transport.py] [_log()] starting thread (client mode): 0xa2d02bf0
2026-02-15T09:28:44.105 [DEBUG] [Thread-201889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:28:44.136 [DEBUG] [Thread-201889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:28:44.136 [INFO] [Thread-201889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:28:44.160 [DEBUG] [Thread-201889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] client lang: <none>
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] server lang: <none>
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] kex follows: False
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:28:44.161 [DEBUG] [Thread-201889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:28:44.162 [DEBUG] [Thread-201889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:28:44.162 [DEBUG] [Thread-201889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:28:44.162 [DEBUG] [Thread-201889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:28:44.162 [DEBUG] [Thread-201889] [transport.py] [_log()] Compression: none
2026-02-15T09:28:44.162 [DEBUG] [Thread-201889] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:28:44.235 [DEBUG] [Thread-201889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:28:44.236 [DEBUG] [Thread-201889] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:28:44.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:28:44.237 [DEBUG] [Thread-201889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:28:44.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:28:44.328 [DEBUG] [Thread-201889] [transport.py] [_log()] userauth is OK
2026-02-15T09:28:44.328 [DEBUG] [Thread-201889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:28:44.328 [DEBUG] [Thread-201889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:28:44.328 [DEBUG] [Thread-201889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:28:44.329 [DEBUG] [Thread-201889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:28:44.364 [INFO] [Thread-201889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:28:44.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:28:44.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:28:45.151 [DEBUG] [Thread-201889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:28:45.151 [DEBUG] [Thread-201889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:28:45.217 [DEBUG] [Thread-201889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:28:45.218 [DEBUG] [Thread-201889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:28:45.244 [DEBUG] [Thread-201889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:28:45.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:28:45.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:28:45.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:28:45.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:28:45.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:28:45.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:28:45.351 [DEBUG] [Thread-201889] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:28:51.849 [DEBUG] [Thread-201891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:58.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:28:58.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:06.903 [DEBUG] [Thread-201892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:15.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:29:15.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:29:15.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:29:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 28, 57), 7.4, 60.36, 0.0, 26.57, 10.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:29:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:28:57
2026-02-15T09:29:17.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:29:17.665 [DEBUG] [Thread-201893] [transport.py] [_log()] starting thread (client mode): 0xa2dc2770
2026-02-15T09:29:17.665 [DEBUG] [Thread-201893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:29:17.685 [DEBUG] [Thread-201893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:29:17.685 [INFO] [Thread-201893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:17.688 [DEBUG] [Thread-201893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] client lang: <none>
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] server lang: <none>
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] kex follows: False
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] Compression: none
2026-02-15T09:29:17.689 [DEBUG] [Thread-201893] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:29:17.706 [DEBUG] [Thread-201893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:29:17.706 [DEBUG] [Thread-201893] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:29:17.707 [DEBUG] [Thread-201893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:29:17.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:29:17.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:29:17.709 [DEBUG] [Thread-201893] [transport.py] [_log()] userauth is OK
2026-02-15T09:29:17.709 [DEBUG] [Thread-201893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:29:17.709 [DEBUG] [Thread-201893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:29:17.709 [DEBUG] [Thread-201893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:29:17.709 [DEBUG] [Thread-201893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:29:17.746 [INFO] [Thread-201893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:29:17.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:29:18.403 [DEBUG] [Thread-201893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:29:18.403 [DEBUG] [Thread-201893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:29:18.404 [DEBUG] [Thread-201893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:29:18.445 [DEBUG] [Thread-201893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:29:18.445 [DEBUG] [Thread-201893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:29:18.449 [DEBUG] [Thread-201893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:29:18.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:29:18.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:29:18.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:29:18.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:29:18.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:29:18.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:29:18.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.311559 -999.00  +11.10  26.42     63   +4.50 1 1 1 1 1   888    0 7.99 76.01 ----- 26.4 26.4 170.6 29.9 17.1 -29.0 16.2 -26.1 14.7 -25.5 15.4 -27.1
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.311559
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:29:18.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:28:57', tmtdew=7.4, humidity=60.36, cloud=0.0, wind=26.57, temperature=10.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:28:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:29:18.472 [DEBUG] [Thread-201893] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:29:18.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:29:18.554 [DEBUG] [Thread-201896] [transport.py] [_log()] starting thread (client mode): 0xa57e0250
2026-02-15T09:29:18.554 [DEBUG] [Thread-201896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:29:18.568 [DEBUG] [Thread-201896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:29:18.569 [INFO] [Thread-201896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] client lang: <none>
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] server lang: <none>
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] kex follows: False
2026-02-15T09:29:18.576 [DEBUG] [Thread-201896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:29:18.577 [DEBUG] [Thread-201896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:29:18.577 [DEBUG] [Thread-201896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:29:18.577 [DEBUG] [Thread-201896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:29:18.577 [DEBUG] [Thread-201896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:29:18.577 [DEBUG] [Thread-201896] [transport.py] [_log()] Compression: none
2026-02-15T09:29:18.577 [DEBUG] [Thread-201896] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:29:18.634 [DEBUG] [Thread-201896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:29:18.634 [DEBUG] [Thread-201896] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:29:18.635 [DEBUG] [Thread-201896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:29:18.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:29:18.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:29:18.690 [DEBUG] [Thread-201896] [transport.py] [_log()] userauth is OK
2026-02-15T09:29:18.691 [DEBUG] [Thread-201896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:29:18.691 [DEBUG] [Thread-201896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:29:18.691 [DEBUG] [Thread-201896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:29:18.691 [DEBUG] [Thread-201896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:29:18.716 [INFO] [Thread-201896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:29:18.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:29:18.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:29:19.524 [DEBUG] [Thread-201896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:29:19.533 [DEBUG] [Thread-201896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:29:19.572 [DEBUG] [Thread-201896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:29:19.572 [DEBUG] [Thread-201896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:29:19.580 [DEBUG] [Thread-201896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:29:19.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:29:19.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:29:19.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:29:19.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:29:19.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:29:19.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:29:19.612 [DEBUG] [Thread-201896] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:29:21.939 [DEBUG] [Thread-201898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:36.997 [DEBUG] [Thread-201899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:39.870 [DEBUG] [Thread-201900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:29:49.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:29:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:29:51.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 29, 33), 8.18, 57.29, 0.0, 27.63, 12.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:29:51.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:29:33
2026-02-15T09:29:51.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:29:51.940 [DEBUG] [Thread-201901] [transport.py] [_log()] starting thread (client mode): 0xa2d03e20
2026-02-15T09:29:51.940 [DEBUG] [Thread-201901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:29:51.959 [DEBUG] [Thread-201901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:29:51.960 [INFO] [Thread-201901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:51.963 [DEBUG] [Thread-201901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] client lang: <none>
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] server lang: <none>
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] kex follows: False
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] Compression: none
2026-02-15T09:29:51.964 [DEBUG] [Thread-201901] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:29:51.981 [DEBUG] [Thread-201901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:29:51.981 [DEBUG] [Thread-201901] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:29:51.981 [DEBUG] [Thread-201901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:29:51.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:29:51.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:29:51.982 [DEBUG] [Thread-201901] [transport.py] [_log()] userauth is OK
2026-02-15T09:29:51.983 [DEBUG] [Thread-201901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:29:51.983 [DEBUG] [Thread-201901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:29:51.983 [DEBUG] [Thread-201901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:29:51.983 [DEBUG] [Thread-201901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:29:52.003 [INFO] [Thread-201901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:29:52.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:29:52.037 [DEBUG] [Thread-201903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:52.650 [DEBUG] [Thread-201901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:29:52.651 [DEBUG] [Thread-201901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:29:52.651 [DEBUG] [Thread-201901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:29:52.691 [DEBUG] [Thread-201901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:29:52.692 [DEBUG] [Thread-201901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:29:52.695 [DEBUG] [Thread-201901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:29:52.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:29:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:29:52.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:29:52.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:29:52.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:29:52.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:29:52.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:29:52.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:29:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:29:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.311906 -999.00  +11.00  18.51     64   +4.50 1 1 1 1 1   888    0 8.26 87.76 ----- 18.5 18.5 131.0 26.3 17.1 -27.0 16.2 -25.5 14.7 -25.9 15.5 -26.3
2026-02-15T09:29:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:29:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:29:52.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.311906
2026-02-15T09:29:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:29:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:29:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:29:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:29:52.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:29:52.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:29:33', tmtdew=8.18, humidity=57.29, cloud=0.0, wind=27.63, temperature=12.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:29:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:29:52.722 [DEBUG] [Thread-201901] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:29:52.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:29:52.817 [DEBUG] [Thread-201905] [transport.py] [_log()] starting thread (client mode): 0xa57e3310
2026-02-15T09:29:52.817 [DEBUG] [Thread-201905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:29:52.832 [DEBUG] [Thread-201905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:29:52.832 [INFO] [Thread-201905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] client lang: <none>
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] server lang: <none>
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] kex follows: False
2026-02-15T09:29:52.840 [DEBUG] [Thread-201905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:29:52.841 [DEBUG] [Thread-201905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:29:52.841 [DEBUG] [Thread-201905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:29:52.841 [DEBUG] [Thread-201905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:29:52.841 [DEBUG] [Thread-201905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:29:52.841 [DEBUG] [Thread-201905] [transport.py] [_log()] Compression: none
2026-02-15T09:29:52.841 [DEBUG] [Thread-201905] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:29:52.896 [DEBUG] [Thread-201905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:29:52.896 [DEBUG] [Thread-201905] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:29:52.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:29:52.897 [DEBUG] [Thread-201905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:29:52.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:29:52.954 [DEBUG] [Thread-201905] [transport.py] [_log()] userauth is OK
2026-02-15T09:29:52.954 [DEBUG] [Thread-201905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:29:52.954 [DEBUG] [Thread-201905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:29:52.954 [DEBUG] [Thread-201905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:29:52.954 [DEBUG] [Thread-201905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:29:52.975 [INFO] [Thread-201905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:29:52.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:29:52.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:29:53.776 [DEBUG] [Thread-201905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:29:53.776 [DEBUG] [Thread-201905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:29:53.824 [DEBUG] [Thread-201905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:29:53.825 [DEBUG] [Thread-201905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:29:53.834 [DEBUG] [Thread-201905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:29:53.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:29:53.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:29:53.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:29:53.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:29:53.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:29:53.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:29:53.870 [DEBUG] [Thread-201905] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:29:58.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:29:58.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:07.069 [DEBUG] [Thread-201907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:22.109 [DEBUG] [Thread-201908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:23.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:30:23.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:30:23.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:30:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 30, 8), 7.5, 60.23, 0.0, 26.94, 11.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:30:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:30:08
2026-02-15T09:30:26.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:30:26.252 [DEBUG] [Thread-201909] [transport.py] [_log()] starting thread (client mode): 0xa81d6b60
2026-02-15T09:30:26.252 [DEBUG] [Thread-201909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:30:26.271 [DEBUG] [Thread-201909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:30:26.272 [INFO] [Thread-201909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] client lang: <none>
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] server lang: <none>
2026-02-15T09:30:26.273 [DEBUG] [Thread-201909] [transport.py] [_log()] kex follows: False
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] Compression: none
2026-02-15T09:30:26.274 [DEBUG] [Thread-201909] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:30:26.282 [DEBUG] [Thread-201909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:30:26.282 [DEBUG] [Thread-201909] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:30:26.283 [DEBUG] [Thread-201909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:30:26.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:30:26.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:30:26.284 [DEBUG] [Thread-201909] [transport.py] [_log()] userauth is OK
2026-02-15T09:30:26.284 [DEBUG] [Thread-201909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:30:26.284 [DEBUG] [Thread-201909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:30:26.285 [DEBUG] [Thread-201909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:30:26.285 [DEBUG] [Thread-201909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:30:26.302 [INFO] [Thread-201909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:30:26.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:30:26.886 [DEBUG] [Thread-201909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:30:26.886 [DEBUG] [Thread-201909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:30:26.887 [DEBUG] [Thread-201909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:30:26.927 [DEBUG] [Thread-201909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:30:26.928 [DEBUG] [Thread-201909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:30:26.931 [DEBUG] [Thread-201909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:30:26.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:30:26.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:30:26.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:30:26.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:30:26.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:30:26.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:30:26.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.312254 -999.00  +11.00  26.04     64   +4.60 1 1 1 1 1   888    0 8.37 87.83 ----- 26.0 26.0 142.2 34.7 17.3 -26.7 16.3 -26.9 14.8 -25.9 15.6 -27.9
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.312254
2026-02-15T09:30:26.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:30:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:30:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:30:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:30:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:30:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:30:08', tmtdew=7.5, humidity=60.23, cloud=0.0, wind=26.94, temperature=11.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:29:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:30:26.953 [DEBUG] [Thread-201909] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:30:27.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:30:27.048 [DEBUG] [Thread-201912] [transport.py] [_log()] starting thread (client mode): 0xa57b3d60
2026-02-15T09:30:27.048 [DEBUG] [Thread-201912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:30:27.066 [DEBUG] [Thread-201912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:30:27.066 [INFO] [Thread-201912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:30:27.073 [DEBUG] [Thread-201912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] client lang: <none>
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] server lang: <none>
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] kex follows: False
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:30:27.074 [DEBUG] [Thread-201912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:30:27.075 [DEBUG] [Thread-201912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:30:27.075 [DEBUG] [Thread-201912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:30:27.075 [DEBUG] [Thread-201912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:30:27.075 [DEBUG] [Thread-201912] [transport.py] [_log()] Compression: none
2026-02-15T09:30:27.075 [DEBUG] [Thread-201912] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:30:27.136 [DEBUG] [Thread-201912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:30:27.137 [DEBUG] [Thread-201912] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:30:27.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:30:27.138 [DEBUG] [Thread-201912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:30:27.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:30:27.195 [DEBUG] [Thread-201912] [transport.py] [_log()] userauth is OK
2026-02-15T09:30:27.195 [DEBUG] [Thread-201912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:30:27.195 [DEBUG] [Thread-201912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:30:27.195 [DEBUG] [Thread-201912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:30:27.195 [DEBUG] [Thread-201912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:30:27.218 [INFO] [Thread-201912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:30:27.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:30:27.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:30:28.039 [DEBUG] [Thread-201912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:30:28.040 [DEBUG] [Thread-201912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:30:28.087 [DEBUG] [Thread-201912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:30:28.087 [DEBUG] [Thread-201912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:30:28.096 [DEBUG] [Thread-201912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:30:28.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:30:28.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:30:28.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:30:28.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:30:28.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:30:28.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:30:28.133 [DEBUG] [Thread-201912] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:30:37.146 [DEBUG] [Thread-201914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:39.903 [DEBUG] [Thread-201915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:52.201 [DEBUG] [Thread-201916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:30:58.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:30:58.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:30:59.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:30:59.023 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 30, 43), 7.57, 59.31, 0.0, 29.18, 11.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:31:00.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:30:43
2026-02-15T09:31:00.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:31:00.655 [DEBUG] [Thread-201917] [transport.py] [_log()] starting thread (client mode): 0xa57b37c0
2026-02-15T09:31:00.655 [DEBUG] [Thread-201917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:31:00.676 [DEBUG] [Thread-201917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:31:00.676 [INFO] [Thread-201917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:31:00.679 [DEBUG] [Thread-201917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:31:00.679 [DEBUG] [Thread-201917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:31:00.679 [DEBUG] [Thread-201917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] client lang: <none>
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] server lang: <none>
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] kex follows: False
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] Compression: none
2026-02-15T09:31:00.680 [DEBUG] [Thread-201917] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:31:00.698 [DEBUG] [Thread-201917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:31:00.699 [DEBUG] [Thread-201917] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:31:00.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:31:00.700 [DEBUG] [Thread-201917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:31:00.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:31:00.702 [DEBUG] [Thread-201917] [transport.py] [_log()] userauth is OK
2026-02-15T09:31:00.702 [DEBUG] [Thread-201917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:31:00.703 [DEBUG] [Thread-201917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:31:00.703 [DEBUG] [Thread-201917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:31:00.703 [DEBUG] [Thread-201917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:31:00.726 [INFO] [Thread-201917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:31:00.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:31:01.321 [DEBUG] [Thread-201917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:31:01.321 [DEBUG] [Thread-201917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:31:01.321 [DEBUG] [Thread-201917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:31:01.362 [DEBUG] [Thread-201917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:31:01.362 [DEBUG] [Thread-201917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:31:01.365 [DEBUG] [Thread-201917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:31:01.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:31:01.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:31:01.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:31:01.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:31:01.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:31:01.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:31:01.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:31:01.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:31:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:31:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.312948 -999.00  +10.50  21.10     66   +4.50 1 1 1 1 1   888    0 8.30 86.01 ----- 21.1 21.1 157.4 25.6 17.1 -29.3 16.1 -26.7 14.7 -26.1 15.4 -28.2
2026-02-15T09:31:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:31:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:31:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.312948
2026-02-15T09:31:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:31:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:31:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:31:01.390 [DEBUG] [Thread-201917] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:31:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:31:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:31:01.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:30:43', tmtdew=7.57, humidity=59.31, cloud=0.0, wind=29.18, temperature=11.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:30:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:31: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-02-15T09:31:01.484 [DEBUG] [Thread-201920] [transport.py] [_log()] starting thread (client mode): 0xa57b1d80
2026-02-15T09:31:01.484 [DEBUG] [Thread-201920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:31:01.498 [DEBUG] [Thread-201920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:31:01.499 [INFO] [Thread-201920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:31:01.506 [DEBUG] [Thread-201920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:31:01.506 [DEBUG] [Thread-201920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:31:01.506 [DEBUG] [Thread-201920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:31:01.506 [DEBUG] [Thread-201920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:01.506 [DEBUG] [Thread-201920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:01.506 [DEBUG] [Thread-201920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] client lang: <none>
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] server lang: <none>
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] kex follows: False
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] Compression: none
2026-02-15T09:31:01.507 [DEBUG] [Thread-201920] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:31:01.566 [DEBUG] [Thread-201920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:31:01.566 [DEBUG] [Thread-201920] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:31:01.567 [DEBUG] [Thread-201920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:31:01.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:31:01.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:31:01.622 [DEBUG] [Thread-201920] [transport.py] [_log()] userauth is OK
2026-02-15T09:31:01.623 [DEBUG] [Thread-201920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:31:01.623 [DEBUG] [Thread-201920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:31:01.623 [DEBUG] [Thread-201920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:31:01.623 [DEBUG] [Thread-201920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:31:01.641 [INFO] [Thread-201920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:31:01.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:31:01.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:31:02.491 [DEBUG] [Thread-201920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:31:02.491 [DEBUG] [Thread-201920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:31:02.558 [DEBUG] [Thread-201920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:31:02.558 [DEBUG] [Thread-201920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:31:02.586 [DEBUG] [Thread-201920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:31:02.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:31:02.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:31:02.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:31:02.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:31:02.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:31:02.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:31:02.694 [DEBUG] [Thread-201920] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:31:07.234 [DEBUG] [Thread-201922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:22.281 [DEBUG] [Thread-201923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:32.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:31:32.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:31:32.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:31:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 31, 19), 7.52, 59.46, 0.0, 28.57, 10.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:31:34.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:31:19
2026-02-15T09:31:34.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:31:35.017 [DEBUG] [Thread-201924] [transport.py] [_log()] starting thread (client mode): 0xa2d02590
2026-02-15T09:31:35.017 [DEBUG] [Thread-201924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:31:35.037 [DEBUG] [Thread-201924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:31:35.037 [INFO] [Thread-201924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] client lang: <none>
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] server lang: <none>
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] kex follows: False
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] Compression: none
2026-02-15T09:31:35.039 [DEBUG] [Thread-201924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:31:35.048 [DEBUG] [Thread-201924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:31:35.049 [DEBUG] [Thread-201924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:31:35.049 [DEBUG] [Thread-201924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:31:35.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:31:35.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:31:35.051 [DEBUG] [Thread-201924] [transport.py] [_log()] userauth is OK
2026-02-15T09:31:35.051 [DEBUG] [Thread-201924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:31:35.051 [DEBUG] [Thread-201924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:31:35.051 [DEBUG] [Thread-201924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:31:35.051 [DEBUG] [Thread-201924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:31:35.069 [INFO] [Thread-201924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:31:35.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:31:35.712 [DEBUG] [Thread-201924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:31:35.712 [DEBUG] [Thread-201924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:31:35.713 [DEBUG] [Thread-201924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:31:35.753 [DEBUG] [Thread-201924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:31:35.753 [DEBUG] [Thread-201924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:31:35.757 [DEBUG] [Thread-201924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:31:35.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:31:35.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:31:35.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:31:35.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:31:35.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:31:35.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:31:35.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:31:35.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:31:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:31:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.313295 -999.00  +10.60  15.70     65   +4.40 1 1 1 1 1   888    0 8.15 80.25 ----- 15.7 15.7 150.2 27.1 17.0 -28.8 16.1 -25.9 14.7 -26.5 15.5 -27.4
2026-02-15T09:31:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:31:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:31:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.313295
2026-02-15T09:31:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:31:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:31:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:31:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:31:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:31:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:31:19', tmtdew=7.52, humidity=59.46, cloud=0.0, wind=28.57, temperature=10.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:31:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:31:35.783 [DEBUG] [Thread-201924] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:31:35.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:31:35.876 [DEBUG] [Thread-201927] [transport.py] [_log()] starting thread (client mode): 0xa57e0fd0
2026-02-15T09:31:35.877 [DEBUG] [Thread-201927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:31:35.891 [DEBUG] [Thread-201927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:31:35.891 [INFO] [Thread-201927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:31:35.899 [DEBUG] [Thread-201927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:31:35.899 [DEBUG] [Thread-201927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] client lang: <none>
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] server lang: <none>
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] kex follows: False
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] Compression: none
2026-02-15T09:31:35.900 [DEBUG] [Thread-201927] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:31:35.957 [DEBUG] [Thread-201927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:31:35.958 [DEBUG] [Thread-201927] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:31:35.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:31:35.959 [DEBUG] [Thread-201927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:31:35.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:31:36.013 [DEBUG] [Thread-201927] [transport.py] [_log()] userauth is OK
2026-02-15T09:31:36.014 [DEBUG] [Thread-201927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:31:36.014 [DEBUG] [Thread-201927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:31:36.014 [DEBUG] [Thread-201927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:31:36.014 [DEBUG] [Thread-201927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:31:36.032 [INFO] [Thread-201927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:31:36.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:31:36.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:31:36.888 [DEBUG] [Thread-201927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:31:36.888 [DEBUG] [Thread-201927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:31:36.935 [DEBUG] [Thread-201927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:31:36.935 [DEBUG] [Thread-201927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:31:36.945 [DEBUG] [Thread-201927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:31:36.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:31:36.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:31:36.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:31:36.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:31:36.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:31:36.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:31:36.981 [DEBUG] [Thread-201927] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:31:37.319 [DEBUG] [Thread-201929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:39.948 [DEBUG] [Thread-201930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:52.371 [DEBUG] [Thread-201931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:59.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:31:59.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:07.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:32:07.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:32:07.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:32:07.404 [DEBUG] [Thread-201932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:08.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 31, 55), 7.31, 60.59, 0.0, 26.45, 10.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:32:08.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:31:55
2026-02-15T09:32:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:32:09.427 [DEBUG] [Thread-201933] [transport.py] [_log()] starting thread (client mode): 0xa57b1690
2026-02-15T09:32:09.427 [DEBUG] [Thread-201933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:32:09.442 [DEBUG] [Thread-201933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:32:09.442 [INFO] [Thread-201933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:32:09.445 [DEBUG] [Thread-201933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:32:09.445 [DEBUG] [Thread-201933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] client lang: <none>
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] server lang: <none>
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] kex follows: False
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] Compression: none
2026-02-15T09:32:09.446 [DEBUG] [Thread-201933] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:32:09.463 [DEBUG] [Thread-201933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:32:09.464 [DEBUG] [Thread-201933] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:32:09.464 [DEBUG] [Thread-201933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:32:09.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:32:09.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:32:09.466 [DEBUG] [Thread-201933] [transport.py] [_log()] userauth is OK
2026-02-15T09:32:09.467 [DEBUG] [Thread-201933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:32:09.467 [DEBUG] [Thread-201933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:32:09.467 [DEBUG] [Thread-201933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:32:09.467 [DEBUG] [Thread-201933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:32:09.485 [INFO] [Thread-201933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:32:09.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:32:10.134 [DEBUG] [Thread-201933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:32:10.134 [DEBUG] [Thread-201933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:32:10.134 [DEBUG] [Thread-201933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:32:10.175 [DEBUG] [Thread-201933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:32:10.175 [DEBUG] [Thread-201933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:32:10.178 [DEBUG] [Thread-201933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:32:10.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:32:10.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:32:10.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:32:10.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:32:10.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:32:10.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:32:10.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.313642 -999.00  +10.40  19.90     66   +4.40 1 1 1 1 1   888    0 7.95 68.99 ----- 19.9 19.9 145.2 31.2 17.1 -27.9 16.1 -26.5 14.7 -26.5 15.4 -27.3
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.313642
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:32:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:31:55', tmtdew=7.31, humidity=60.59, cloud=0.0, wind=26.45, temperature=10.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:31:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:32:10.198 [DEBUG] [Thread-201933] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:32:10.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:32:10.283 [DEBUG] [Thread-201936] [transport.py] [_log()] starting thread (client mode): 0xa57e2740
2026-02-15T09:32:10.284 [DEBUG] [Thread-201936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:32:10.302 [DEBUG] [Thread-201936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:32:10.302 [INFO] [Thread-201936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] client lang: <none>
2026-02-15T09:32:10.313 [DEBUG] [Thread-201936] [transport.py] [_log()] server lang: <none>
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] kex follows: False
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] Compression: none
2026-02-15T09:32:10.314 [DEBUG] [Thread-201936] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:32:10.376 [DEBUG] [Thread-201936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:32:10.376 [DEBUG] [Thread-201936] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:32:10.376 [DEBUG] [Thread-201936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:32:10.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:32:10.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:32:10.441 [DEBUG] [Thread-201936] [transport.py] [_log()] userauth is OK
2026-02-15T09:32:10.442 [DEBUG] [Thread-201936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:32:10.442 [DEBUG] [Thread-201936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:32:10.442 [DEBUG] [Thread-201936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:32:10.442 [DEBUG] [Thread-201936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:32:10.461 [INFO] [Thread-201936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:32:10.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:32:10.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:32:11.304 [DEBUG] [Thread-201936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:32:11.304 [DEBUG] [Thread-201936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:32:11.356 [DEBUG] [Thread-201936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:32:11.356 [DEBUG] [Thread-201936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:32:11.368 [DEBUG] [Thread-201936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:32:11.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:32:11.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:32:11.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:32:11.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:32:11.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:32:11.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:32:11.420 [DEBUG] [Thread-201936] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:32:22.442 [DEBUG] [Thread-201938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:37.495 [DEBUG] [Thread-201939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:39.994 [DEBUG] [Thread-201940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:41.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:32:41.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:32:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:32:43.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 32, 30), 7.3, 60.71, 0.0, 23.56, 10.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:32:43.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:32:30
2026-02-15T09:32:44.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:32:44.453 [DEBUG] [Thread-201941] [transport.py] [_log()] starting thread (client mode): 0xa2d02a70
2026-02-15T09:32:44.453 [DEBUG] [Thread-201941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:32:44.473 [DEBUG] [Thread-201941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:32:44.473 [INFO] [Thread-201941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] client lang: <none>
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] server lang: <none>
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] kex follows: False
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] Compression: none
2026-02-15T09:32:44.477 [DEBUG] [Thread-201941] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:32:44.495 [DEBUG] [Thread-201941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:32:44.495 [DEBUG] [Thread-201941] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:32:44.496 [DEBUG] [Thread-201941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:32:44.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:32:44.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:32:44.498 [DEBUG] [Thread-201941] [transport.py] [_log()] userauth is OK
2026-02-15T09:32:44.498 [DEBUG] [Thread-201941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:32:44.498 [DEBUG] [Thread-201941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:32:44.498 [DEBUG] [Thread-201941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:32:44.498 [DEBUG] [Thread-201941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:32:44.523 [INFO] [Thread-201941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:32:44.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:32:45.125 [DEBUG] [Thread-201941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:32:45.125 [DEBUG] [Thread-201941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:32:45.125 [DEBUG] [Thread-201941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:32:45.166 [DEBUG] [Thread-201941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:32:45.166 [DEBUG] [Thread-201941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:32:45.169 [DEBUG] [Thread-201941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:32:45.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:32:45.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:32:45.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:32:45.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:32:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:32:45.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:32:45.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:32:45.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:32:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:32:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.313990 -999.00  +10.60  20.30     66   +4.60 1 1 1 1 1   888    0 7.91 69.58 ----- 20.3 20.3 146.2 30.2 17.1 -28.7 16.1 -26.0 14.6 -27.1 15.5 -27.4
2026-02-15T09:32:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:32:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:32:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.313990
2026-02-15T09:32:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:32:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:32:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:32:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:32:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:32:45.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:32:30', tmtdew=7.3, humidity=60.71, cloud=0.0, wind=23.56, temperature=10.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:32:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:32:45.194 [DEBUG] [Thread-201941] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:32:45.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:32:45.300 [DEBUG] [Thread-201944] [transport.py] [_log()] starting thread (client mode): 0xa2d03fd0
2026-02-15T09:32:45.301 [DEBUG] [Thread-201944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:32:45.326 [DEBUG] [Thread-201944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:32:45.327 [INFO] [Thread-201944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:32:45.345 [DEBUG] [Thread-201944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] client lang: <none>
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] server lang: <none>
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] kex follows: False
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:32:45.346 [DEBUG] [Thread-201944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:32:45.347 [DEBUG] [Thread-201944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:32:45.347 [DEBUG] [Thread-201944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:32:45.347 [DEBUG] [Thread-201944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:32:45.347 [DEBUG] [Thread-201944] [transport.py] [_log()] Compression: none
2026-02-15T09:32:45.347 [DEBUG] [Thread-201944] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:32:45.416 [DEBUG] [Thread-201944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:32:45.417 [DEBUG] [Thread-201944] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:32:45.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:32:45.418 [DEBUG] [Thread-201944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:32:45.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:32:45.497 [DEBUG] [Thread-201944] [transport.py] [_log()] userauth is OK
2026-02-15T09:32:45.497 [DEBUG] [Thread-201944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:32:45.497 [DEBUG] [Thread-201944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:32:45.497 [DEBUG] [Thread-201944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:32:45.497 [DEBUG] [Thread-201944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:32:45.526 [INFO] [Thread-201944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:32:45.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:32:45.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:32:46.327 [DEBUG] [Thread-201944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:32:46.327 [DEBUG] [Thread-201944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:32:46.386 [DEBUG] [Thread-201944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:32:46.386 [DEBUG] [Thread-201944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:32:46.406 [DEBUG] [Thread-201944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:32:46.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:32:46.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:32:46.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:32:46.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:32:46.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:32:46.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:32:46.487 [DEBUG] [Thread-201944] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:32:52.535 [DEBUG] [Thread-201946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:59.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:32:59.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:07.585 [DEBUG] [Thread-201947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:16.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:33:16.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:33:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:33:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 33, 6), 7.53, 59.83, 0.0, 24.99, 11.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:33:18.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:33:06
2026-02-15T09:33:18.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:33:18.869 [DEBUG] [Thread-201948] [transport.py] [_log()] starting thread (client mode): 0xa57b2500
2026-02-15T09:33:18.869 [DEBUG] [Thread-201948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:33:18.885 [DEBUG] [Thread-201948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:33:18.885 [INFO] [Thread-201948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] client lang: <none>
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] server lang: <none>
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] kex follows: False
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:33:18.888 [DEBUG] [Thread-201948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:33:18.889 [DEBUG] [Thread-201948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:33:18.889 [DEBUG] [Thread-201948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:33:18.889 [DEBUG] [Thread-201948] [transport.py] [_log()] Compression: none
2026-02-15T09:33:18.889 [DEBUG] [Thread-201948] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:33:18.908 [DEBUG] [Thread-201948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:33:18.908 [DEBUG] [Thread-201948] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:33:18.909 [DEBUG] [Thread-201948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:33:18.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:33:18.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:33:18.910 [DEBUG] [Thread-201948] [transport.py] [_log()] userauth is OK
2026-02-15T09:33:18.911 [DEBUG] [Thread-201948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:33:18.911 [DEBUG] [Thread-201948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:33:18.911 [DEBUG] [Thread-201948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:33:18.911 [DEBUG] [Thread-201948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:33:18.933 [INFO] [Thread-201948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:33:18.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:33:19.711 [DEBUG] [Thread-201948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:33:19.711 [DEBUG] [Thread-201948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:33:19.711 [DEBUG] [Thread-201948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:33:19.752 [DEBUG] [Thread-201948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:33:19.753 [DEBUG] [Thread-201948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:33:19.757 [DEBUG] [Thread-201948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:33:19.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:33:19.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:33:19.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:33:19.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:33:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:33:19.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:33:19.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:33:19.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:33:19.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:33:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.314337 -999.00  +10.60  19.76     66   +4.50 1 1 1 1 1   888    0 7.75 62.21 ----- 19.8 19.8 152.8 25.9 17.0 -28.1 16.1 -26.5 14.7 -27.3 15.4 -27.4
2026-02-15T09:33:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:33:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:33:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.314337
2026-02-15T09:33:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:33:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:33:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:33:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:33:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:33:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:33:06', tmtdew=7.53, humidity=59.83, cloud=0.0, wind=24.99, temperature=11.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:32:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:33:19.783 [DEBUG] [Thread-201948] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:33:19.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:33:19.887 [DEBUG] [Thread-201951] [transport.py] [_log()] starting thread (client mode): 0xa57e1510
2026-02-15T09:33:19.887 [DEBUG] [Thread-201951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:33:19.910 [DEBUG] [Thread-201951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:33:19.910 [INFO] [Thread-201951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:33:19.925 [DEBUG] [Thread-201951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:33:19.925 [DEBUG] [Thread-201951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:33:19.925 [DEBUG] [Thread-201951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:33:19.925 [DEBUG] [Thread-201951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:19.925 [DEBUG] [Thread-201951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:19.925 [DEBUG] [Thread-201951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] client lang: <none>
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] server lang: <none>
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] kex follows: False
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] Compression: none
2026-02-15T09:33:19.926 [DEBUG] [Thread-201951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:33:19.992 [DEBUG] [Thread-201951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:33:19.992 [DEBUG] [Thread-201951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:33:19.993 [DEBUG] [Thread-201951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:33:19.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:33:19.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:33:20.064 [DEBUG] [Thread-201951] [transport.py] [_log()] userauth is OK
2026-02-15T09:33:20.064 [DEBUG] [Thread-201951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:33:20.064 [DEBUG] [Thread-201951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:33:20.064 [DEBUG] [Thread-201951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:33:20.064 [DEBUG] [Thread-201951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:33:20.094 [INFO] [Thread-201951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:33: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-02-15T09:33:20.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:33:20.913 [DEBUG] [Thread-201951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:33:20.913 [DEBUG] [Thread-201951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:33:20.961 [DEBUG] [Thread-201951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:33:20.961 [DEBUG] [Thread-201951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:33:20.970 [DEBUG] [Thread-201951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:33:20.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:33:20.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:33:20.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:33:20.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:33:20.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:33:20.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:33:21.005 [DEBUG] [Thread-201951] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:33:22.618 [DEBUG] [Thread-201953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:37.677 [DEBUG] [Thread-201954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:40.027 [DEBUG] [Thread-201955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:51.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:33:51.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:33:51.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:33:52.711 [DEBUG] [Thread-201956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 33, 41), 8.37, 56.62, 0.0, 23.99, 12.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:33:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:33:41
2026-02-15T09:33:53.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:33:53.376 [DEBUG] [Thread-201957] [transport.py] [_log()] starting thread (client mode): 0xa57e3dc0
2026-02-15T09:33:53.376 [DEBUG] [Thread-201957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:33:53.396 [DEBUG] [Thread-201957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:33:53.397 [INFO] [Thread-201957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:33:53.399 [DEBUG] [Thread-201957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] client lang: <none>
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] server lang: <none>
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] kex follows: False
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] Compression: none
2026-02-15T09:33:53.400 [DEBUG] [Thread-201957] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:33:53.417 [DEBUG] [Thread-201957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:33:53.418 [DEBUG] [Thread-201957] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:33:53.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:33:53.419 [DEBUG] [Thread-201957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:33:53.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:33:53.421 [DEBUG] [Thread-201957] [transport.py] [_log()] userauth is OK
2026-02-15T09:33:53.421 [DEBUG] [Thread-201957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:33:53.421 [DEBUG] [Thread-201957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:33:53.421 [DEBUG] [Thread-201957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:33:53.421 [DEBUG] [Thread-201957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:33:53.458 [INFO] [Thread-201957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:33:53.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:33:54.115 [DEBUG] [Thread-201957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:33:54.115 [DEBUG] [Thread-201957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:33:54.116 [DEBUG] [Thread-201957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:33:54.156 [DEBUG] [Thread-201957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:33:54.157 [DEBUG] [Thread-201957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:33:54.160 [DEBUG] [Thread-201957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:33:54.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:33:54.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:33:54.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:33:54.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:33:54.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:33:54.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:33:54.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:33:54.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:33:54.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:33:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.314684 -999.00  +10.50  16.53     66   +4.60 1 1 1 1 1   888    0 7.76 60.03 ----- 16.5 16.5 148.2 29.9 17.1 -27.3 16.1 -26.0 14.7 -26.6 15.5 -26.9
2026-02-15T09:33:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:33:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:33:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.314684
2026-02-15T09:33:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:33:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:33:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:33:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:33:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:33:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:33:41', tmtdew=8.37, humidity=56.62, cloud=0.0, wind=23.99, temperature=12.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:33:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:33:54.188 [DEBUG] [Thread-201957] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:33:54.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:33:54.281 [DEBUG] [Thread-201960] [transport.py] [_log()] starting thread (client mode): 0xa57b2860
2026-02-15T09:33:54.281 [DEBUG] [Thread-201960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:33:54.296 [DEBUG] [Thread-201960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:33:54.296 [INFO] [Thread-201960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] client lang: <none>
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] server lang: <none>
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] kex follows: False
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:33:54.304 [DEBUG] [Thread-201960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:33:54.305 [DEBUG] [Thread-201960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:33:54.305 [DEBUG] [Thread-201960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:33:54.305 [DEBUG] [Thread-201960] [transport.py] [_log()] Compression: none
2026-02-15T09:33:54.305 [DEBUG] [Thread-201960] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:33:54.361 [DEBUG] [Thread-201960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:33:54.361 [DEBUG] [Thread-201960] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:33:54.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:33:54.363 [DEBUG] [Thread-201960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:33:54.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:33:54.420 [DEBUG] [Thread-201960] [transport.py] [_log()] userauth is OK
2026-02-15T09:33:54.421 [DEBUG] [Thread-201960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:33:54.421 [DEBUG] [Thread-201960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:33:54.421 [DEBUG] [Thread-201960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:33:54.421 [DEBUG] [Thread-201960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:33:54.435 [INFO] [Thread-201960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:33:54.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:33:54.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:33:55.274 [DEBUG] [Thread-201960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:33:55.275 [DEBUG] [Thread-201960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:33:55.322 [DEBUG] [Thread-201960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:33:55.323 [DEBUG] [Thread-201960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:33:55.332 [DEBUG] [Thread-201960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:33:55.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:33:55.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:33:55.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:33:55.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:33:55.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:33:55.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:33:55.367 [DEBUG] [Thread-201960] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:33:59.451 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:33:59.452 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:07.746 [DEBUG] [Thread-201962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:22.802 [DEBUG] [Thread-201963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:25.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:34:25.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:34:25.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:34:27.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 34, 16), 7.64, 59.71, 0.0, 28.23, 11.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:34:27.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:34:16
2026-02-15T09:34:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:34:27.985 [DEBUG] [Thread-201964] [transport.py] [_log()] starting thread (client mode): 0xa57b2fe0
2026-02-15T09:34:27.986 [DEBUG] [Thread-201964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:34:28.007 [DEBUG] [Thread-201964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:34:28.007 [INFO] [Thread-201964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] client lang: <none>
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] server lang: <none>
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] kex follows: False
2026-02-15T09:34:28.011 [DEBUG] [Thread-201964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:34:28.012 [DEBUG] [Thread-201964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:34:28.012 [DEBUG] [Thread-201964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:34:28.012 [DEBUG] [Thread-201964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:34:28.012 [DEBUG] [Thread-201964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:34:28.012 [DEBUG] [Thread-201964] [transport.py] [_log()] Compression: none
2026-02-15T09:34:28.012 [DEBUG] [Thread-201964] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:34:28.030 [DEBUG] [Thread-201964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:34:28.030 [DEBUG] [Thread-201964] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:34:28.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:34:28.032 [DEBUG] [Thread-201964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:34:28.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:34:28.034 [DEBUG] [Thread-201964] [transport.py] [_log()] userauth is OK
2026-02-15T09:34:28.034 [DEBUG] [Thread-201964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:34:28.035 [DEBUG] [Thread-201964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:34:28.035 [DEBUG] [Thread-201964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:34:28.035 [DEBUG] [Thread-201964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:34:28.055 [INFO] [Thread-201964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:34:28.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:34:28.704 [DEBUG] [Thread-201964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:34:28.704 [DEBUG] [Thread-201964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:34:28.705 [DEBUG] [Thread-201964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:34:28.745 [DEBUG] [Thread-201964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:34:28.745 [DEBUG] [Thread-201964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:34:28.749 [DEBUG] [Thread-201964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:34:28.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:34:28.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:34:28.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:34:28.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:34:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:34:28.771 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:34:28.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:34:28.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:34:28.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:34:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.315031 -999.00  +10.60  20.36     66   +4.50 1 1 1 1 1   888    0 7.57 57.25 ----- 20.4 20.4 154.6 29.4 17.0 -28.7 16.1 -25.9 14.7 -26.3 15.5 -27.5
2026-02-15T09:34:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:34:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:34:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.315031
2026-02-15T09:34:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:34:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:34:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:34:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:34:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:34:28.774 [DEBUG] [Thread-201964] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:34:28.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:34:16', tmtdew=7.64, humidity=59.71, cloud=0.0, wind=28.23, temperature=11.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:33:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:34:28.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:34:28.877 [DEBUG] [Thread-201967] [transport.py] [_log()] starting thread (client mode): 0xa57c3220
2026-02-15T09:34:28.878 [DEBUG] [Thread-201967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:34:28.906 [DEBUG] [Thread-201967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:34:28.906 [INFO] [Thread-201967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:34:28.924 [DEBUG] [Thread-201967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:34:28.924 [DEBUG] [Thread-201967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] client lang: <none>
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] server lang: <none>
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] kex follows: False
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:34:28.925 [DEBUG] [Thread-201967] [transport.py] [_log()] Compression: none
2026-02-15T09:34:28.926 [DEBUG] [Thread-201967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:34:28.996 [DEBUG] [Thread-201967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:34:28.996 [DEBUG] [Thread-201967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:34:28.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:34:28.998 [DEBUG] [Thread-201967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:34:28.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:34:29.075 [DEBUG] [Thread-201967] [transport.py] [_log()] userauth is OK
2026-02-15T09:34:29.076 [DEBUG] [Thread-201967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:34:29.076 [DEBUG] [Thread-201967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:34:29.076 [DEBUG] [Thread-201967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:34:29.076 [DEBUG] [Thread-201967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:34:29.110 [INFO] [Thread-201967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:34:29.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:34:29.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:34:29.929 [DEBUG] [Thread-201967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:34:29.930 [DEBUG] [Thread-201967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:34:29.987 [DEBUG] [Thread-201967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:34:29.988 [DEBUG] [Thread-201967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:34:30.006 [DEBUG] [Thread-201967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:34:30.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:34:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:34:30.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:34:30.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:34:30.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:34:30.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:34:30.080 [DEBUG] [Thread-201967] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:34:37.837 [DEBUG] [Thread-201969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:40.060 [DEBUG] [Thread-201970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:52.890 [DEBUG] [Thread-201971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:59.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:34:59.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:00.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:35:00.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:35:00.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:35:02.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 34, 52), 7.93, 58.2, 0.0, 28.51, 11.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:35:02.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:34:52
2026-02-15T09:35:02.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:35:02.584 [DEBUG] [Thread-201972] [transport.py] [_log()] starting thread (client mode): 0xa57e00a0
2026-02-15T09:35:02.584 [DEBUG] [Thread-201972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:35:02.605 [DEBUG] [Thread-201972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:35:02.605 [INFO] [Thread-201972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:35:02.606 [DEBUG] [Thread-201972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] client lang: <none>
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] server lang: <none>
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] kex follows: False
2026-02-15T09:35:02.607 [DEBUG] [Thread-201972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:35:02.608 [DEBUG] [Thread-201972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:35:02.608 [DEBUG] [Thread-201972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:35:02.608 [DEBUG] [Thread-201972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:35:02.608 [DEBUG] [Thread-201972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:35:02.608 [DEBUG] [Thread-201972] [transport.py] [_log()] Compression: none
2026-02-15T09:35:02.608 [DEBUG] [Thread-201972] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:35:02.618 [DEBUG] [Thread-201972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:35:02.619 [DEBUG] [Thread-201972] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:35:02.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:35:02.621 [DEBUG] [Thread-201972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:35:02.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:35:02.623 [DEBUG] [Thread-201972] [transport.py] [_log()] userauth is OK
2026-02-15T09:35:02.623 [DEBUG] [Thread-201972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:35:02.624 [DEBUG] [Thread-201972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:35:02.624 [DEBUG] [Thread-201972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:35:02.624 [DEBUG] [Thread-201972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:35:02.646 [INFO] [Thread-201972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:35:02.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:35:06.188 [DEBUG] [Thread-201972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:35:06.189 [DEBUG] [Thread-201972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:35:06.189 [DEBUG] [Thread-201972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:35:06.229 [DEBUG] [Thread-201972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:35:06.229 [DEBUG] [Thread-201972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:35:06.233 [DEBUG] [Thread-201972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:35:06.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:35:06.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:35:06.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:35:06.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:35:06.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:35:06.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:35:06.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:35:06.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:35:06.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:35:06.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.315726 -999.00  +10.90  22.46     64   +4.40 1 1 1 1 1   888    0 7.55 56.87 ----- 22.5 22.5 158.0 30.6 17.2 -28.0 16.2 -26.5 14.8 -25.3 15.6 -27.1
2026-02-15T09:35:06.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:35:06.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:35:06.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.315726
2026-02-15T09:35:06.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:35:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:35:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:35:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:35:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:35:06.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:34:52', tmtdew=7.93, humidity=58.2, cloud=0.0, wind=28.51, temperature=11.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:34:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:35:06.350 [DEBUG] [Thread-201972] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:35:06.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:35:06.448 [DEBUG] [Thread-201975] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-15T09:35:06.448 [DEBUG] [Thread-201975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:35:06.463 [DEBUG] [Thread-201975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:35:06.463 [INFO] [Thread-201975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:35:06.472 [DEBUG] [Thread-201975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:35:06.472 [DEBUG] [Thread-201975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:35:06.472 [DEBUG] [Thread-201975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:35:06.472 [DEBUG] [Thread-201975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] client lang: <none>
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] server lang: <none>
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] kex follows: False
2026-02-15T09:35:06.473 [DEBUG] [Thread-201975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:35:06.474 [DEBUG] [Thread-201975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:35:06.474 [DEBUG] [Thread-201975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:35:06.474 [DEBUG] [Thread-201975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:35:06.474 [DEBUG] [Thread-201975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:35:06.474 [DEBUG] [Thread-201975] [transport.py] [_log()] Compression: none
2026-02-15T09:35:06.474 [DEBUG] [Thread-201975] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:35:06.529 [DEBUG] [Thread-201975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:35:06.530 [DEBUG] [Thread-201975] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:35:06.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:35:06.531 [DEBUG] [Thread-201975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:35:06.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:35:06.589 [DEBUG] [Thread-201975] [transport.py] [_log()] userauth is OK
2026-02-15T09:35:06.589 [DEBUG] [Thread-201975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:35:06.590 [DEBUG] [Thread-201975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:35:06.590 [DEBUG] [Thread-201975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:35:06.590 [DEBUG] [Thread-201975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:35:06.609 [INFO] [Thread-201975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:35:06.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:35:06.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:35:07.456 [DEBUG] [Thread-201975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:35:07.457 [DEBUG] [Thread-201975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:35:07.505 [DEBUG] [Thread-201975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:35:07.505 [DEBUG] [Thread-201975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:35:07.737 [DEBUG] [Thread-201975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:35:07.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:35:07.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:35:07.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:35:07.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:35:07.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:35:07.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:35:07.777 [DEBUG] [Thread-201975] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:35:07.925 [DEBUG] [Thread-201977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:22.985 [DEBUG] [Thread-201978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:35:37.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:35:37.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:35:38.021 [DEBUG] [Thread-201979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:39.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 35, 27), 7.69, 59.14, 0.0, 27.56, 11.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:35:39.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:35:27
2026-02-15T09:35:40.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:35:40.093 [DEBUG] [Thread-201980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:40.227 [DEBUG] [Thread-201981] [transport.py] [_log()] starting thread (client mode): 0xa57e32e0
2026-02-15T09:35:40.227 [DEBUG] [Thread-201981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:35:40.247 [DEBUG] [Thread-201981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:35:40.247 [INFO] [Thread-201981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] client lang: <none>
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] server lang: <none>
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] kex follows: False
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:35:40.250 [DEBUG] [Thread-201981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:35:40.251 [DEBUG] [Thread-201981] [transport.py] [_log()] Compression: none
2026-02-15T09:35:40.251 [DEBUG] [Thread-201981] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:35:40.270 [DEBUG] [Thread-201981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:35:40.270 [DEBUG] [Thread-201981] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:35:40.271 [DEBUG] [Thread-201981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:35:40.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:35:40.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:35:40.273 [DEBUG] [Thread-201981] [transport.py] [_log()] userauth is OK
2026-02-15T09:35:40.273 [DEBUG] [Thread-201981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:35:40.273 [DEBUG] [Thread-201981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:35:40.273 [DEBUG] [Thread-201981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:35:40.273 [DEBUG] [Thread-201981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:35:40.298 [INFO] [Thread-201981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:35:40.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:35:40.939 [DEBUG] [Thread-201981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:35:40.940 [DEBUG] [Thread-201981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:35:40.940 [DEBUG] [Thread-201981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:35:40.980 [DEBUG] [Thread-201981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:35:40.981 [DEBUG] [Thread-201981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:35:40.984 [DEBUG] [Thread-201981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:35:40.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:35:40.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:35:40.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:35:41.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:35:41.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:35:41.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:35:41.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:35:41.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:35:41.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:35:41.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.316072 -999.00  +11.00  18.78     64   +4.50 1 1 1 1 1   888    0 7.70 58.45 ----- 18.8 18.8 154.8 24.6 17.2 -27.2 16.2 -25.6 14.8 -25.8 15.7 -26.9
2026-02-15T09:35:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:35:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:35:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.316072
2026-02-15T09:35:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:35:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:35:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:35:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:35:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:35:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:35:27', tmtdew=7.69, humidity=59.14, cloud=0.0, wind=27.56, temperature=11.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:35:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:35:41.012 [DEBUG] [Thread-201981] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:35:41.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:35:41.107 [DEBUG] [Thread-201984] [transport.py] [_log()] starting thread (client mode): 0xa57e3dc0
2026-02-15T09:35:41.107 [DEBUG] [Thread-201984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:35:41.123 [DEBUG] [Thread-201984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:35:41.123 [INFO] [Thread-201984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:35:41.130 [DEBUG] [Thread-201984] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] client lang: <none>
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] server lang: <none>
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] kex follows: False
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:35:41.131 [DEBUG] [Thread-201984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:35:41.132 [DEBUG] [Thread-201984] [transport.py] [_log()] Compression: none
2026-02-15T09:35:41.132 [DEBUG] [Thread-201984] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:35:41.189 [DEBUG] [Thread-201984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:35:41.189 [DEBUG] [Thread-201984] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:35:41.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:35:41.191 [DEBUG] [Thread-201984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:35:41.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:35:41.245 [DEBUG] [Thread-201984] [transport.py] [_log()] userauth is OK
2026-02-15T09:35:41.245 [DEBUG] [Thread-201984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:35:41.246 [DEBUG] [Thread-201984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:35:41.246 [DEBUG] [Thread-201984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:35:41.246 [DEBUG] [Thread-201984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:35:41.265 [INFO] [Thread-201984] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:35:41.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:35:41.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:35:42.112 [DEBUG] [Thread-201984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:35:42.113 [DEBUG] [Thread-201984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:35:42.160 [DEBUG] [Thread-201984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:35:42.161 [DEBUG] [Thread-201984] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:35:42.170 [DEBUG] [Thread-201984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:35:42.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:35:42.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:35:42.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:35:42.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:35:42.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:35:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:35:42.207 [DEBUG] [Thread-201984] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:35:53.057 [DEBUG] [Thread-201986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:59.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:35:59.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:08.108 [DEBUG] [Thread-201987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:12.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:36:12.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:36:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:36:14.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 36, 2), 7.65, 59.34, 0.0, 28.23, 11.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:36:14.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:36:02
2026-02-15T09:36:14.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:36:14.609 [DEBUG] [Thread-201988] [transport.py] [_log()] starting thread (client mode): 0xa57b12a0
2026-02-15T09:36:14.610 [DEBUG] [Thread-201988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:36:14.630 [DEBUG] [Thread-201988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:36:14.630 [INFO] [Thread-201988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:36:14.633 [DEBUG] [Thread-201988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] client lang: <none>
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] server lang: <none>
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] kex follows: False
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] Compression: none
2026-02-15T09:36:14.634 [DEBUG] [Thread-201988] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:36:14.652 [DEBUG] [Thread-201988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:36:14.653 [DEBUG] [Thread-201988] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:36:14.653 [DEBUG] [Thread-201988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:36:14.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:36:14.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:36:14.655 [DEBUG] [Thread-201988] [transport.py] [_log()] userauth is OK
2026-02-15T09:36:14.656 [DEBUG] [Thread-201988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:36:14.656 [DEBUG] [Thread-201988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:36:14.656 [DEBUG] [Thread-201988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:36:14.656 [DEBUG] [Thread-201988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:36:14.689 [INFO] [Thread-201988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:36:14.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:36:15.495 [DEBUG] [Thread-201988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:36:15.496 [DEBUG] [Thread-201988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:36:15.496 [DEBUG] [Thread-201988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:36:15.536 [DEBUG] [Thread-201988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:36:15.536 [DEBUG] [Thread-201988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:36:15.539 [DEBUG] [Thread-201988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:36:15.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:36:15.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:36:15.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:36:15.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:36:15.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:36:15.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:36:15.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:36:15.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:36:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:36:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.316420 -999.00  +11.30  25.94     63   +4.70 1 1 1 1 1   888    0 7.56 54.39 ----- 25.9 25.9 142.4 30.7 17.4 -27.1 16.4 -26.8 14.9 -25.5 15.7 -27.7
2026-02-15T09:36:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:36:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:36:15.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.316420
2026-02-15T09:36:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:36:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:36:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:36:15.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:36:15.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:36:15.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:36:02', tmtdew=7.65, humidity=59.34, cloud=0.0, wind=28.23, temperature=11.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:35:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:36:15.566 [DEBUG] [Thread-201988] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:36:15.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:36:15.663 [DEBUG] [Thread-201991] [transport.py] [_log()] starting thread (client mode): 0xa57e2320
2026-02-15T09:36:15.663 [DEBUG] [Thread-201991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:36:15.678 [DEBUG] [Thread-201991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:36:15.678 [INFO] [Thread-201991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:36:15.686 [DEBUG] [Thread-201991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:36:15.686 [DEBUG] [Thread-201991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:36:15.686 [DEBUG] [Thread-201991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:36:15.686 [DEBUG] [Thread-201991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:36:15.686 [DEBUG] [Thread-201991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] client lang: <none>
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] server lang: <none>
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] kex follows: False
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] Compression: none
2026-02-15T09:36:15.687 [DEBUG] [Thread-201991] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:36:15.745 [DEBUG] [Thread-201991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:36:15.745 [DEBUG] [Thread-201991] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:36:15.746 [DEBUG] [Thread-201991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:36:15.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:36:15.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:36:15.800 [DEBUG] [Thread-201991] [transport.py] [_log()] userauth is OK
2026-02-15T09:36:15.800 [DEBUG] [Thread-201991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:36:15.800 [DEBUG] [Thread-201991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:36:15.801 [DEBUG] [Thread-201991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:36:15.801 [DEBUG] [Thread-201991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:36:15.819 [INFO] [Thread-201991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:36:15.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:36:15.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:36:16.631 [DEBUG] [Thread-201991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:36:16.631 [DEBUG] [Thread-201991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:36:16.679 [DEBUG] [Thread-201991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:36:16.680 [DEBUG] [Thread-201991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:36:16.689 [DEBUG] [Thread-201991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:36:16.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:36:16.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:36:16.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:36:16.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:36:16.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:36:16.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:36:16.725 [DEBUG] [Thread-201991] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:36:23.144 [DEBUG] [Thread-201993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:38.194 [DEBUG] [Thread-201994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:40.135 [DEBUG] [Thread-201995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:46.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:36:46.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:36:46.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:36:49.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 36, 38), 8.37, 56.59, 0.0, 28.19, 12.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:36:49.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:36:38
2026-02-15T09:36:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:36:49.661 [DEBUG] [Thread-201996] [transport.py] [_log()] starting thread (client mode): 0xa81d6740
2026-02-15T09:36:49.661 [DEBUG] [Thread-201996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:36:49.681 [DEBUG] [Thread-201996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:36:49.681 [INFO] [Thread-201996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:36:49.684 [DEBUG] [Thread-201996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] client lang: <none>
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] server lang: <none>
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] kex follows: False
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] Compression: none
2026-02-15T09:36:49.685 [DEBUG] [Thread-201996] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:36:49.701 [DEBUG] [Thread-201996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:36:49.701 [DEBUG] [Thread-201996] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:36:49.702 [DEBUG] [Thread-201996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:36:49.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:36:49.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:36:49.704 [DEBUG] [Thread-201996] [transport.py] [_log()] userauth is OK
2026-02-15T09:36:49.704 [DEBUG] [Thread-201996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:36:49.704 [DEBUG] [Thread-201996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:36:49.704 [DEBUG] [Thread-201996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:36:49.704 [DEBUG] [Thread-201996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:36:49.721 [INFO] [Thread-201996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:36:49.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:36:50.386 [DEBUG] [Thread-201996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:36:50.386 [DEBUG] [Thread-201996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:36:50.387 [DEBUG] [Thread-201996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:36:50.427 [DEBUG] [Thread-201996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:36:50.427 [DEBUG] [Thread-201996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:36:50.431 [DEBUG] [Thread-201996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:36:50.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:36:50.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:36:50.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:36:50.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:36:50.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:36:50.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:36:50.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:36:50.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:36:50.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:36:50.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.316767 -999.00  +11.10  25.96     64   +4.70 1 1 1 1 1   888    0 7.52 57.12 ----- 26.0 26.0 143.0 29.9 17.3 -28.1 16.4 -26.3 15.0 -26.3 15.7 -28.4
2026-02-15T09:36:50.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:36:50.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:36:50.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.316767
2026-02-15T09:36:50.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:36:50.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:36:50.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:36:50.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:36:50.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:36:50.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:36:38', tmtdew=8.37, humidity=56.59, cloud=0.0, wind=28.19, temperature=12.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:36:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:36:50.457 [DEBUG] [Thread-201996] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:36:50.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:36:53.229 [DEBUG] [Thread-201999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:59.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:36:59.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:37:08.280 [DEBUG] [Thread-202000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:37:23.317 [DEBUG] [Thread-202001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:37:38.355 [DEBUG] [Thread-202002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:37:40.178 [DEBUG] [Thread-202003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:37:53.390 [DEBUG] [Thread-202004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:00.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:00.023 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:08.430 [DEBUG] [Thread-202005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:23.464 [DEBUG] [Thread-202006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:38.499 [DEBUG] [Thread-202007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:40.223 [DEBUG] [Thread-202008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:38:53.531 [DEBUG] [Thread-202009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:00.163 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:00.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:02.584 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T09:39:08.569 [DEBUG] [Thread-202010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:23.605 [DEBUG] [Thread-202011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:32.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:39:32.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:39:32.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:39:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 39, 1), 7.71, 59.06, 0.0, 25.71, 11.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:39:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:39:01
2026-02-15T09:39:34.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:39:35.099 [DEBUG] [Thread-202012] [transport.py] [_log()] starting thread (client mode): 0xa81d73d0
2026-02-15T09:39:35.099 [DEBUG] [Thread-202012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:39:35.118 [DEBUG] [Thread-202012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:39:35.118 [INFO] [Thread-202012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] client lang: <none>
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] server lang: <none>
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] kex follows: False
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] Compression: none
2026-02-15T09:39:35.120 [DEBUG] [Thread-202012] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:39:35.130 [DEBUG] [Thread-202012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:39:35.130 [DEBUG] [Thread-202012] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:39:35.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:39:35.131 [DEBUG] [Thread-202012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:39:35.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:39:35.133 [DEBUG] [Thread-202012] [transport.py] [_log()] userauth is OK
2026-02-15T09:39:35.133 [DEBUG] [Thread-202012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:39:35.133 [DEBUG] [Thread-202012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:39:35.133 [DEBUG] [Thread-202012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:39:35.134 [DEBUG] [Thread-202012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:39:35.151 [INFO] [Thread-202012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:39:35.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:39:35.709 [DEBUG] [Thread-202012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:39:35.709 [DEBUG] [Thread-202012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:39:35.709 [DEBUG] [Thread-202012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:39:35.749 [DEBUG] [Thread-202012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:39:35.750 [DEBUG] [Thread-202012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:39:35.753 [DEBUG] [Thread-202012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:39:35.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:39:35.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:39:35.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:39:35.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:39:35.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:39:35.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:39:35.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:39:35.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:39:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:39:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.318851 -999.00  +11.10  22.84     65   +4.80 1 1 1 1 1   888    0 7.51 50.84 ----- 22.8 22.8 168.4 31.2 17.4 -28.8 16.5 -25.9 15.2 -26.7 15.9 -27.4
2026-02-15T09:39:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:39:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:39:35.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.318851
2026-02-15T09:39:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:39:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:39:35.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:39:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:39:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:39:35.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:39:01', tmtdew=7.71, humidity=59.06, cloud=0.0, wind=25.71, temperature=11.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:39:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:39:35.784 [DEBUG] [Thread-202012] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:39:35.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:39:35.888 [DEBUG] [Thread-202015] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-15T09:39:35.888 [DEBUG] [Thread-202015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:39:35.912 [DEBUG] [Thread-202015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:39:35.913 [INFO] [Thread-202015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:39:35.929 [DEBUG] [Thread-202015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:39:35.930 [DEBUG] [Thread-202015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:39:35.930 [DEBUG] [Thread-202015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:39:35.930 [DEBUG] [Thread-202015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:39:35.930 [DEBUG] [Thread-202015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:39:35.930 [DEBUG] [Thread-202015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:39:35.930 [DEBUG] [Thread-202015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] client lang: <none>
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] server lang: <none>
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] kex follows: False
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] Compression: none
2026-02-15T09:39:35.931 [DEBUG] [Thread-202015] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:39:36.001 [DEBUG] [Thread-202015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:39:36.002 [DEBUG] [Thread-202015] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:39:36.002 [DEBUG] [Thread-202015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:39:36.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:39:36.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:39:36.080 [DEBUG] [Thread-202015] [transport.py] [_log()] userauth is OK
2026-02-15T09:39:36.080 [DEBUG] [Thread-202015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:39:36.080 [DEBUG] [Thread-202015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:39:36.081 [DEBUG] [Thread-202015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:39:36.081 [DEBUG] [Thread-202015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:39:36.115 [INFO] [Thread-202015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:39:36.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:39:36.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:39:36.916 [DEBUG] [Thread-202015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:39:36.917 [DEBUG] [Thread-202015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:39:36.975 [DEBUG] [Thread-202015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:39:36.976 [DEBUG] [Thread-202015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:39:36.996 [DEBUG] [Thread-202015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:39:37.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:39:37.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:39:37.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:39:37.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:39:37.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:39:37.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:39:37.075 [DEBUG] [Thread-202015] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:39:38.644 [DEBUG] [Thread-202017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:40.267 [DEBUG] [Thread-202018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:39:53.695 [DEBUG] [Thread-202019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:00.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:00.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:07.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:40:07.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:40:07.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:40:08.733 [DEBUG] [Thread-202020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 39, 36), 8.22, 57.28, 0.0, 28.79, 12.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:40:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:39:36
2026-02-15T09:40:10.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:40:10.237 [DEBUG] [Thread-202021] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-15T09:40:10.237 [DEBUG] [Thread-202021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:40:10.255 [DEBUG] [Thread-202021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:40:10.255 [INFO] [Thread-202021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] client lang: <none>
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] server lang: <none>
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] kex follows: False
2026-02-15T09:40:10.258 [DEBUG] [Thread-202021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:40:10.259 [DEBUG] [Thread-202021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:40:10.259 [DEBUG] [Thread-202021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:40:10.259 [DEBUG] [Thread-202021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:40:10.259 [DEBUG] [Thread-202021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:40:10.259 [DEBUG] [Thread-202021] [transport.py] [_log()] Compression: none
2026-02-15T09:40:10.259 [DEBUG] [Thread-202021] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:40:10.277 [DEBUG] [Thread-202021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:40:10.277 [DEBUG] [Thread-202021] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:40:10.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:40:10.278 [DEBUG] [Thread-202021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:40:10.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:40:10.280 [DEBUG] [Thread-202021] [transport.py] [_log()] userauth is OK
2026-02-15T09:40:10.280 [DEBUG] [Thread-202021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:40:10.280 [DEBUG] [Thread-202021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:40:10.280 [DEBUG] [Thread-202021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:40:10.280 [DEBUG] [Thread-202021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:40:10.292 [INFO] [Thread-202021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:40:10.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:40:19.252 [DEBUG] [Thread-202021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:40:19.253 [DEBUG] [Thread-202021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:40:19.253 [DEBUG] [Thread-202021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:40:19.293 [DEBUG] [Thread-202021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:40:19.294 [DEBUG] [Thread-202021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:40:19.297 [DEBUG] [Thread-202021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:40:19.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:40:19.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:40:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:40:19.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:40:19.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:40:19.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:40:19.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:40:19.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:40:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:40:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.319198 -999.00  +11.20  20.10     65   +4.80 1 1 1 1 1   888    0 7.40 50.20 ----- 20.1 20.1 161.0 28.4 17.5 -27.3 16.6 -25.6 15.2 -26.0 16.0 -26.9
2026-02-15T09:40:19.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:40:19.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:40:19.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.319198
2026-02-15T09:40:19.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:40:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:40:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:40:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:40:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:40:19.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:39:36', tmtdew=8.22, humidity=57.28, cloud=0.0, wind=28.79, temperature=12.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:39:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:40:19.398 [DEBUG] [Thread-202021] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:40:19.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:40:19.507 [DEBUG] [Thread-202024] [transport.py] [_log()] starting thread (client mode): 0xa57b1690
2026-02-15T09:40:19.508 [DEBUG] [Thread-202024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:40:19.536 [DEBUG] [Thread-202024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:40:19.536 [INFO] [Thread-202024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:40:19.557 [DEBUG] [Thread-202024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] client lang: <none>
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] server lang: <none>
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] kex follows: False
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:40:19.558 [DEBUG] [Thread-202024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:40:19.559 [DEBUG] [Thread-202024] [transport.py] [_log()] Compression: none
2026-02-15T09:40:19.559 [DEBUG] [Thread-202024] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:40:19.633 [DEBUG] [Thread-202024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:40:19.633 [DEBUG] [Thread-202024] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:40:19.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:40:19.635 [DEBUG] [Thread-202024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:40:19.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:40:19.717 [DEBUG] [Thread-202024] [transport.py] [_log()] userauth is OK
2026-02-15T09:40:19.717 [DEBUG] [Thread-202024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:40:19.718 [DEBUG] [Thread-202024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:40:19.718 [DEBUG] [Thread-202024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:40:19.718 [DEBUG] [Thread-202024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:40:19.751 [INFO] [Thread-202024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:40:19.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:40:19.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:40:20.554 [DEBUG] [Thread-202024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:40:20.554 [DEBUG] [Thread-202024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:40:20.617 [DEBUG] [Thread-202024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:40:20.617 [DEBUG] [Thread-202024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:40:20.641 [DEBUG] [Thread-202024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:40:20.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:40:20.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:40:20.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:40:20.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:40:20.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:40:20.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:40:20.738 [DEBUG] [Thread-202024] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:40:23.774 [DEBUG] [Thread-202026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:38.830 [DEBUG] [Thread-202027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:40.317 [DEBUG] [Thread-202028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:50.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:40:50.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:40:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:40:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 40, 11), 8.12, 57.21, 0.0, 29.06, 11.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:40:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:40:11
2026-02-15T09:40:53.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:40:53.481 [DEBUG] [Thread-202029] [transport.py] [_log()] starting thread (client mode): 0xa2d02ad0
2026-02-15T09:40:53.481 [DEBUG] [Thread-202029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:40:53.501 [DEBUG] [Thread-202029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:40:53.502 [INFO] [Thread-202029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:40:53.504 [DEBUG] [Thread-202029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:40:53.504 [DEBUG] [Thread-202029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:40:53.504 [DEBUG] [Thread-202029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:40:53.504 [DEBUG] [Thread-202029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] client lang: <none>
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] server lang: <none>
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] kex follows: False
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] Compression: none
2026-02-15T09:40:53.505 [DEBUG] [Thread-202029] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:40:53.522 [DEBUG] [Thread-202029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:40:53.523 [DEBUG] [Thread-202029] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:40:53.523 [DEBUG] [Thread-202029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:40:53.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:40:53.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:40:53.526 [DEBUG] [Thread-202029] [transport.py] [_log()] userauth is OK
2026-02-15T09:40:53.526 [DEBUG] [Thread-202029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:40:53.526 [DEBUG] [Thread-202029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:40:53.526 [DEBUG] [Thread-202029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:40:53.526 [DEBUG] [Thread-202029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:40:53.551 [INFO] [Thread-202029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:40:53.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:40:53.870 [DEBUG] [Thread-202031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:40:54.201 [DEBUG] [Thread-202029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:40:54.201 [DEBUG] [Thread-202029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:40:54.202 [DEBUG] [Thread-202029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:40:54.242 [DEBUG] [Thread-202029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:40:54.242 [DEBUG] [Thread-202029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:40:54.246 [DEBUG] [Thread-202029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:40:54.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:40:54.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:40:54.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:40:54.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:40:54.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:40:54.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:40:54.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:40:54.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:40:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:40:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.319545 -999.00  +11.50  19.89     62   +4.60 1 1 1 1 1   888    0 7.53 47.64 ----- 19.9 19.9 161.4 27.9 17.6 -28.1 16.6 -26.6 -999.0 -999.0 16.0 -27.7
2026-02-15T09:40:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:40:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:40:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.319545
2026-02-15T09:40:54.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:40:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:40:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:40:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:40:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:40:54.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:40:11', tmtdew=8.12, humidity=57.21, cloud=0.0, wind=29.06, temperature=11.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:40:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:40:54.270 [DEBUG] [Thread-202029] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:40:54.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:40:54.365 [DEBUG] [Thread-202033] [transport.py] [_log()] starting thread (client mode): 0xa81d7ee0
2026-02-15T09:40:54.365 [DEBUG] [Thread-202033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:40:54.380 [DEBUG] [Thread-202033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:40:54.380 [INFO] [Thread-202033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:40:54.387 [DEBUG] [Thread-202033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] client lang: <none>
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] server lang: <none>
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] kex follows: False
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:40:54.388 [DEBUG] [Thread-202033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:40:54.389 [DEBUG] [Thread-202033] [transport.py] [_log()] Compression: none
2026-02-15T09:40:54.389 [DEBUG] [Thread-202033] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:40:54.448 [DEBUG] [Thread-202033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:40:54.449 [DEBUG] [Thread-202033] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:40:54.449 [DEBUG] [Thread-202033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:40:54.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:40:54.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:40:54.504 [DEBUG] [Thread-202033] [transport.py] [_log()] userauth is OK
2026-02-15T09:40:54.505 [DEBUG] [Thread-202033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:40:54.505 [DEBUG] [Thread-202033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:40:54.505 [DEBUG] [Thread-202033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:40:54.505 [DEBUG] [Thread-202033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:40:54.522 [INFO] [Thread-202033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:40:54.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:40:54.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:40:55.335 [DEBUG] [Thread-202033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:40:55.335 [DEBUG] [Thread-202033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:40:55.383 [DEBUG] [Thread-202033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:40:55.384 [DEBUG] [Thread-202033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:40:55.393 [DEBUG] [Thread-202033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:40:55.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:40:55.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:40:55.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:40:55.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:40:55.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:40:55.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:40:55.429 [DEBUG] [Thread-202033] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:41:00.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:41:00.447 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:41:08.910 [DEBUG] [Thread-202035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:41:23.970 [DEBUG] [Thread-202036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:41:25.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:41:25.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:41:25.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:41:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 40, 48), 8.13, 57.39, 0.0, 28.99, 11.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:41:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:40:48
2026-02-15T09:41:28.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:41:28.334 [DEBUG] [Thread-202037] [transport.py] [_log()] starting thread (client mode): 0xa57b1270
2026-02-15T09:41:28.334 [DEBUG] [Thread-202037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:41:28.356 [DEBUG] [Thread-202037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:41:28.356 [INFO] [Thread-202037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:41:28.359 [DEBUG] [Thread-202037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:41:28.359 [DEBUG] [Thread-202037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:41:28.359 [DEBUG] [Thread-202037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:41:28.359 [DEBUG] [Thread-202037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] client lang: <none>
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] server lang: <none>
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] kex follows: False
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] Compression: none
2026-02-15T09:41:28.360 [DEBUG] [Thread-202037] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:41:28.378 [DEBUG] [Thread-202037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:41:28.378 [DEBUG] [Thread-202037] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:41:28.379 [DEBUG] [Thread-202037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:41:28.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:41:28.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:41:28.381 [DEBUG] [Thread-202037] [transport.py] [_log()] userauth is OK
2026-02-15T09:41:28.381 [DEBUG] [Thread-202037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:41:28.381 [DEBUG] [Thread-202037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:41:28.381 [DEBUG] [Thread-202037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:41:28.381 [DEBUG] [Thread-202037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:41:28.417 [INFO] [Thread-202037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:41:28.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:41:29.062 [DEBUG] [Thread-202037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:41:29.062 [DEBUG] [Thread-202037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:41:29.063 [DEBUG] [Thread-202037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:41:29.103 [DEBUG] [Thread-202037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:41:29.104 [DEBUG] [Thread-202037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:41:29.107 [DEBUG] [Thread-202037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:41:29.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:41:29.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:41:29.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:41:29.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:41:29.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:41:29.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:41:29.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:41:29.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:41:29.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:41:29.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.319892 -999.00  +11.40  20.60     61   +4.20 1 1 1 1 1   888    0 7.71 52.25 ----- 20.6 20.6 161.2 28.1 17.6 -28.9 16.6 -25.8 15.2 -26.3 16.0 -27.4
2026-02-15T09:41:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:41:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:41:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.319892
2026-02-15T09:41:29.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:41:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:41:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:41:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:41:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:41:29.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:40:48', tmtdew=8.13, humidity=57.39, cloud=0.0, wind=28.99, temperature=11.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:40:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:41:29.136 [DEBUG] [Thread-202037] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:41:29.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:41:29.249 [DEBUG] [Thread-202040] [transport.py] [_log()] starting thread (client mode): 0xa81d6110
2026-02-15T09:41:29.250 [DEBUG] [Thread-202040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:41:29.264 [DEBUG] [Thread-202040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:41:29.265 [INFO] [Thread-202040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:41:29.272 [DEBUG] [Thread-202040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] client lang: <none>
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] server lang: <none>
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] kex follows: False
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:41:29.273 [DEBUG] [Thread-202040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:41:29.274 [DEBUG] [Thread-202040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:41:29.274 [DEBUG] [Thread-202040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:41:29.274 [DEBUG] [Thread-202040] [transport.py] [_log()] Compression: none
2026-02-15T09:41:29.274 [DEBUG] [Thread-202040] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:41:29.332 [DEBUG] [Thread-202040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:41:29.333 [DEBUG] [Thread-202040] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:41:29.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:41:29.334 [DEBUG] [Thread-202040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:41:29.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:41:29.407 [DEBUG] [Thread-202040] [transport.py] [_log()] userauth is OK
2026-02-15T09:41:29.408 [DEBUG] [Thread-202040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:41:29.408 [DEBUG] [Thread-202040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:41:29.408 [DEBUG] [Thread-202040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:41:29.408 [DEBUG] [Thread-202040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:41:29.429 [INFO] [Thread-202040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:41:29.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:41:29.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:41:30.267 [DEBUG] [Thread-202040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:41:30.267 [DEBUG] [Thread-202040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:41:30.341 [DEBUG] [Thread-202040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:41:30.341 [DEBUG] [Thread-202040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:41:30.375 [DEBUG] [Thread-202040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:41:30.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:41:30.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:41:30.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:41:30.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:41:30.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:41:30.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:41:30.416 [DEBUG] [Thread-202040] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:41:39.004 [DEBUG] [Thread-202042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:41:40.352 [DEBUG] [Thread-202043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:41:54.056 [DEBUG] [Thread-202044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:00.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:42:00.439 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:42:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:42:00.587 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:00.588 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:02.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 41, 24), 8.25, 56.96, 0.0, 28.83, 11.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:42:02.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:41:24
2026-02-15T09:42:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:42:03.505 [DEBUG] [Thread-202045] [transport.py] [_log()] starting thread (client mode): 0xa2d03fd0
2026-02-15T09:42:03.505 [DEBUG] [Thread-202045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:42:03.524 [DEBUG] [Thread-202045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:42:03.525 [INFO] [Thread-202045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] client lang: <none>
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] server lang: <none>
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] kex follows: False
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:42:03.528 [DEBUG] [Thread-202045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:42:03.529 [DEBUG] [Thread-202045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:42:03.529 [DEBUG] [Thread-202045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:42:03.529 [DEBUG] [Thread-202045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:42:03.529 [DEBUG] [Thread-202045] [transport.py] [_log()] Compression: none
2026-02-15T09:42:03.529 [DEBUG] [Thread-202045] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:42:03.545 [DEBUG] [Thread-202045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:42:03.546 [DEBUG] [Thread-202045] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:42:03.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:42:03.547 [DEBUG] [Thread-202045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:42:03.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:42:03.548 [DEBUG] [Thread-202045] [transport.py] [_log()] userauth is OK
2026-02-15T09:42:03.548 [DEBUG] [Thread-202045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:42:03.548 [DEBUG] [Thread-202045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:42:03.548 [DEBUG] [Thread-202045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:42:03.548 [DEBUG] [Thread-202045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:42:03.560 [INFO] [Thread-202045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:42:03.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:42:04.369 [DEBUG] [Thread-202045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:42:04.369 [DEBUG] [Thread-202045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:42:04.369 [DEBUG] [Thread-202045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:42:04.409 [DEBUG] [Thread-202045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:42:04.410 [DEBUG] [Thread-202045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:42:04.413 [DEBUG] [Thread-202045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:42:04.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:42:04.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:42:04.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:42:04.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:42:04.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:42:04.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:42:04.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:42:04.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:42:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:42:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.320239 -999.00  +11.20  19.60     64   +4.60 1 1 1 1 1   888    0 7.57 49.75 ----- 19.6 19.6 158.2 26.6 17.7 -26.9 16.6 -26.3 15.2 -25.9 16.1 -26.6
2026-02-15T09:42:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:42:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:42:04.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.320239
2026-02-15T09:42:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:42:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:42:04.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:42:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:42:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:42:04.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:41:24', tmtdew=8.25, humidity=56.96, cloud=0.0, wind=28.83, temperature=11.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:41:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:42:04.444 [DEBUG] [Thread-202045] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:42:04.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:42:04.539 [DEBUG] [Thread-202048] [transport.py] [_log()] starting thread (client mode): 0xa5759030
2026-02-15T09:42:04.539 [DEBUG] [Thread-202048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:42:04.554 [DEBUG] [Thread-202048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:42:04.554 [INFO] [Thread-202048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:42:04.562 [DEBUG] [Thread-202048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:42:04.562 [DEBUG] [Thread-202048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:42:04.562 [DEBUG] [Thread-202048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:42:04.562 [DEBUG] [Thread-202048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:04.562 [DEBUG] [Thread-202048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:04.562 [DEBUG] [Thread-202048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] client lang: <none>
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] server lang: <none>
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] kex follows: False
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:42:04.563 [DEBUG] [Thread-202048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:42:04.564 [DEBUG] [Thread-202048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:42:04.564 [DEBUG] [Thread-202048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:42:04.564 [DEBUG] [Thread-202048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:42:04.564 [DEBUG] [Thread-202048] [transport.py] [_log()] Compression: none
2026-02-15T09:42:04.564 [DEBUG] [Thread-202048] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:42:04.621 [DEBUG] [Thread-202048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:42:04.621 [DEBUG] [Thread-202048] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:42:04.622 [DEBUG] [Thread-202048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:42:04.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:42:04.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:42:04.676 [DEBUG] [Thread-202048] [transport.py] [_log()] userauth is OK
2026-02-15T09:42:04.677 [DEBUG] [Thread-202048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:42:04.677 [DEBUG] [Thread-202048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:42:04.677 [DEBUG] [Thread-202048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:42:04.677 [DEBUG] [Thread-202048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:42:04.696 [INFO] [Thread-202048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:42:04.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:42:04.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:42:05.507 [DEBUG] [Thread-202048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:42:05.508 [DEBUG] [Thread-202048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:42:05.556 [DEBUG] [Thread-202048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:42:05.556 [DEBUG] [Thread-202048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:42:05.564 [DEBUG] [Thread-202048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:42:05.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:42:05.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')
2026-02-15T09:42:05.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:42:05.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:42:05.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:42:05.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:42:05.598 [DEBUG] [Thread-202048] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:42:09.089 [DEBUG] [Thread-202050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:24.129 [DEBUG] [Thread-202051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:35.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:42:35.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:42:35.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:42:37.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 42), 8.14, 57.21, 0.0, 23.8, 11.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:42:37.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:42:00
2026-02-15T09:42:38.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:42:38.423 [DEBUG] [Thread-202052] [transport.py] [_log()] starting thread (client mode): 0xa2d005e0
2026-02-15T09:42:38.423 [DEBUG] [Thread-202052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:42:38.443 [DEBUG] [Thread-202052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:42:38.443 [INFO] [Thread-202052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] client lang: <none>
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] server lang: <none>
2026-02-15T09:42:38.447 [DEBUG] [Thread-202052] [transport.py] [_log()] kex follows: False
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] Compression: none
2026-02-15T09:42:38.448 [DEBUG] [Thread-202052] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:42:38.465 [DEBUG] [Thread-202052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:42:38.466 [DEBUG] [Thread-202052] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:42:38.466 [DEBUG] [Thread-202052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:42:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:42:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:42:38.509 [DEBUG] [Thread-202052] [transport.py] [_log()] userauth is OK
2026-02-15T09:42:38.509 [DEBUG] [Thread-202052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:42:38.509 [DEBUG] [Thread-202052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:42:38.509 [DEBUG] [Thread-202052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:42:38.509 [DEBUG] [Thread-202052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:42:38.541 [INFO] [Thread-202052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:42:38.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:42:39.162 [DEBUG] [Thread-202054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:39.179 [DEBUG] [Thread-202052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:42:39.179 [DEBUG] [Thread-202052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:42:39.179 [DEBUG] [Thread-202052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:42:39.220 [DEBUG] [Thread-202052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:42:39.220 [DEBUG] [Thread-202052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:42:39.222 [DEBUG] [Thread-202052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:42:39.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:42:39.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:42:39.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:42:39.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:42:39.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:42:39.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:42:39.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:42:39.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.320587 -999.00  +11.30  19.07     63   +4.70 1 1 1 1 1   888    0 7.54 49.26 ----- 19.1 19.1 165.6 31.7 17.7 -28.3 16.7 -25.8 15.2 -25.9 16.2 -27.7
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.320587
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:42:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:42:00', tmtdew=8.14, humidity=57.21, cloud=0.0, wind=23.8, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:41:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:42:39.241 [DEBUG] [Thread-202052] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:42:39.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:42:39.326 [DEBUG] [Thread-202056] [transport.py] [_log()] starting thread (client mode): 0xa81d5000
2026-02-15T09:42:39.326 [DEBUG] [Thread-202056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:42:39.340 [DEBUG] [Thread-202056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:42:39.340 [INFO] [Thread-202056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] client lang: <none>
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] server lang: <none>
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] kex follows: False
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:42:39.347 [DEBUG] [Thread-202056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:42:39.348 [DEBUG] [Thread-202056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:42:39.348 [DEBUG] [Thread-202056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:42:39.348 [DEBUG] [Thread-202056] [transport.py] [_log()] Compression: none
2026-02-15T09:42:39.348 [DEBUG] [Thread-202056] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:42:39.403 [DEBUG] [Thread-202056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:42:39.404 [DEBUG] [Thread-202056] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:42:39.404 [DEBUG] [Thread-202056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:42:39.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:42:39.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:42:39.461 [DEBUG] [Thread-202056] [transport.py] [_log()] userauth is OK
2026-02-15T09:42:39.461 [DEBUG] [Thread-202056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:42:39.461 [DEBUG] [Thread-202056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:42:39.461 [DEBUG] [Thread-202056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:42:39.461 [DEBUG] [Thread-202056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:42:39.479 [INFO] [Thread-202056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:42:39.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:42:39.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:42:40.303 [DEBUG] [Thread-202056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:42:40.303 [DEBUG] [Thread-202056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:42:40.352 [DEBUG] [Thread-202056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:42:40.352 [DEBUG] [Thread-202056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:42:40.361 [DEBUG] [Thread-202056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:42:40.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:42:40.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:42:40.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:42:40.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:42:40.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:42:40.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:42:40.394 [DEBUG] [Thread-202056] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:42:40.397 [DEBUG] [Thread-202058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:42:54.195 [DEBUG] [Thread-202059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:00.735 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:00.736 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:09.251 [DEBUG] [Thread-202060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:43:10.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:43:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:43:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 42, 36), 9.12, 53.8, 0.0, 29.74, 12.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:43:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:42:36
2026-02-15T09:43:12.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:43:12.853 [DEBUG] [Thread-202061] [transport.py] [_log()] starting thread (client mode): 0xa2d11960
2026-02-15T09:43:12.853 [DEBUG] [Thread-202061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:43:12.874 [DEBUG] [Thread-202061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:43:12.874 [INFO] [Thread-202061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:43:12.877 [DEBUG] [Thread-202061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:43:12.877 [DEBUG] [Thread-202061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:43:12.877 [DEBUG] [Thread-202061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:43:12.877 [DEBUG] [Thread-202061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:12.877 [DEBUG] [Thread-202061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:12.877 [DEBUG] [Thread-202061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] client lang: <none>
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] server lang: <none>
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] kex follows: False
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] Compression: none
2026-02-15T09:43:12.878 [DEBUG] [Thread-202061] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:43:12.894 [DEBUG] [Thread-202061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:43:12.894 [DEBUG] [Thread-202061] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:43:12.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:43:12.894 [DEBUG] [Thread-202061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:43:12.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:43:12.895 [DEBUG] [Thread-202061] [transport.py] [_log()] userauth is OK
2026-02-15T09:43:12.895 [DEBUG] [Thread-202061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:43:12.895 [DEBUG] [Thread-202061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:43:12.895 [DEBUG] [Thread-202061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:43:12.895 [DEBUG] [Thread-202061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:43:12.905 [INFO] [Thread-202061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:43:12.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:43:13.553 [DEBUG] [Thread-202061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:43:13.553 [DEBUG] [Thread-202061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:43:13.554 [DEBUG] [Thread-202061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:43:13.595 [DEBUG] [Thread-202061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:43:13.595 [DEBUG] [Thread-202061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:43:13.598 [DEBUG] [Thread-202061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:43:13.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:43:13.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:43:13.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:43:13.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:43:13.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:43:13.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:43:13.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:43:13.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:43:13.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:43:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.320934 -999.00  +11.50  23.70     63   +4.80 1 1 1 1 1   888    0 7.62 48.23 ----- 23.7 23.7 168.4 27.0 17.8 -26.8 16.8 -25.3 15.2 -24.8 16.2 -26.3
2026-02-15T09:43:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:43:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:43:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.320934
2026-02-15T09:43:13.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:43:13.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:43:13.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:43:13.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:43:13.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:43:13.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:42:36', tmtdew=9.12, humidity=53.8, cloud=0.0, wind=29.74, temperature=12.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:42:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:43:13.624 [DEBUG] [Thread-202061] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:43:13.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:43:13.723 [DEBUG] [Thread-202064] [transport.py] [_log()] starting thread (client mode): 0xa2d11e70
2026-02-15T09:43:13.723 [DEBUG] [Thread-202064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:43:13.737 [DEBUG] [Thread-202064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:43:13.738 [INFO] [Thread-202064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:43:13.745 [DEBUG] [Thread-202064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:43:13.746 [DEBUG] [Thread-202064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] client lang: <none>
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] server lang: <none>
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] kex follows: False
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:43:13.747 [DEBUG] [Thread-202064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:43:13.748 [DEBUG] [Thread-202064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:43:13.748 [DEBUG] [Thread-202064] [transport.py] [_log()] Compression: none
2026-02-15T09:43:13.748 [DEBUG] [Thread-202064] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:43:13.809 [DEBUG] [Thread-202064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:43:13.810 [DEBUG] [Thread-202064] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:43:13.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:43:13.811 [DEBUG] [Thread-202064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:43:13.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:43:13.870 [DEBUG] [Thread-202064] [transport.py] [_log()] userauth is OK
2026-02-15T09:43:13.871 [DEBUG] [Thread-202064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:43:13.871 [DEBUG] [Thread-202064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:43:13.871 [DEBUG] [Thread-202064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:43:13.871 [DEBUG] [Thread-202064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:43:13.893 [INFO] [Thread-202064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:43:13.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:43:13.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:43:14.732 [DEBUG] [Thread-202064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:43:14.732 [DEBUG] [Thread-202064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:43:14.781 [DEBUG] [Thread-202064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:43:14.781 [DEBUG] [Thread-202064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:43:14.791 [DEBUG] [Thread-202064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:43:14.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:43:14.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:43:14.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:43:14.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:43:14.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:43:14.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:43:14.832 [DEBUG] [Thread-202064] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:43:24.285 [DEBUG] [Thread-202066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:39.337 [DEBUG] [Thread-202067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:40.430 [DEBUG] [Thread-202068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:43:44.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:43:44.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:43:44.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:43:46.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 43, 12), 8.53, 55.6, 0.0, 25.6, 11.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:43:46.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:43:12
2026-02-15T09:43:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:43:47.241 [DEBUG] [Thread-202069] [transport.py] [_log()] starting thread (client mode): 0xa2dc3ca0
2026-02-15T09:43:47.241 [DEBUG] [Thread-202069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:43:47.260 [DEBUG] [Thread-202069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:43:47.260 [INFO] [Thread-202069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] client lang: <none>
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] server lang: <none>
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] kex follows: False
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] Compression: none
2026-02-15T09:43:47.263 [DEBUG] [Thread-202069] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:43:47.279 [DEBUG] [Thread-202069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:43:47.280 [DEBUG] [Thread-202069] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:43:47.280 [DEBUG] [Thread-202069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:43:47.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:43:47.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:43:47.282 [DEBUG] [Thread-202069] [transport.py] [_log()] userauth is OK
2026-02-15T09:43:47.283 [DEBUG] [Thread-202069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:43:47.283 [DEBUG] [Thread-202069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:43:47.283 [DEBUG] [Thread-202069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:43:47.283 [DEBUG] [Thread-202069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:43:47.308 [INFO] [Thread-202069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:43:47.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:43:47.877 [DEBUG] [Thread-202069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:43:47.878 [DEBUG] [Thread-202069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:43:47.878 [DEBUG] [Thread-202069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:43:47.918 [DEBUG] [Thread-202069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:43:47.919 [DEBUG] [Thread-202069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:43:47.922 [DEBUG] [Thread-202069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:43:47.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:43:47.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:43:47.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:43:47.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:43:47.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:43:47.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:43:47.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:43:47.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:43:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:43:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.321628 -999.00  +11.60  26.07     62   +4.70 1 1 1 1 1   888    0 7.74 52.21 ----- 26.1 26.1 170.4 30.4 17.8 -28.1 16.6 -27.3 15.4 -26.4 16.2 -27.2
2026-02-15T09:43:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:43:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:43:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.321628
2026-02-15T09:43:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:43:47.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:43:47.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:43:47.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:43:47.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:43:47.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:43:12', tmtdew=8.53, humidity=55.6, cloud=0.0, wind=25.6, temperature=11.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:43:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:43:47.947 [DEBUG] [Thread-202069] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:43:48.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:43:48.043 [DEBUG] [Thread-202072] [transport.py] [_log()] starting thread (client mode): 0xa2d02380
2026-02-15T09:43:48.043 [DEBUG] [Thread-202072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:43:48.061 [DEBUG] [Thread-202072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:43:48.061 [INFO] [Thread-202072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] client lang: <none>
2026-02-15T09:43:48.073 [DEBUG] [Thread-202072] [transport.py] [_log()] server lang: <none>
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] kex follows: False
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] Compression: none
2026-02-15T09:43:48.074 [DEBUG] [Thread-202072] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:43:48.136 [DEBUG] [Thread-202072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:43:48.137 [DEBUG] [Thread-202072] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:43:48.138 [DEBUG] [Thread-202072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:43:48.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:43:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:43:48.200 [DEBUG] [Thread-202072] [transport.py] [_log()] userauth is OK
2026-02-15T09:43:48.200 [DEBUG] [Thread-202072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:43:48.201 [DEBUG] [Thread-202072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:43:48.201 [DEBUG] [Thread-202072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:43:48.201 [DEBUG] [Thread-202072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:43:48.227 [INFO] [Thread-202072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:43:48.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:43:48.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:43:49.042 [DEBUG] [Thread-202072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:43:49.042 [DEBUG] [Thread-202072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:43:49.094 [DEBUG] [Thread-202072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:43:49.094 [DEBUG] [Thread-202072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:43:49.106 [DEBUG] [Thread-202072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:43:49.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:43:49.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:43:49.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:43:49.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:43:49.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:43:49.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:43:49.157 [DEBUG] [Thread-202072] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:43:54.373 [DEBUG] [Thread-202074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:00.877 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:00.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:09.425 [DEBUG] [Thread-202075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:19.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:44:19.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:44:19.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:44:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 43, 48), 8.61, 55.79, 0.0, 24.07, 11.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:44:20.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:43:48
2026-02-15T09:44:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:44:21.392 [DEBUG] [Thread-202076] [transport.py] [_log()] starting thread (client mode): 0xa575afb0
2026-02-15T09:44:21.393 [DEBUG] [Thread-202076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:44:21.413 [DEBUG] [Thread-202076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:44:21.413 [INFO] [Thread-202076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:44:21.416 [DEBUG] [Thread-202076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] client lang: <none>
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] server lang: <none>
2026-02-15T09:44:21.417 [DEBUG] [Thread-202076] [transport.py] [_log()] kex follows: False
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] Compression: none
2026-02-15T09:44:21.418 [DEBUG] [Thread-202076] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:44:21.435 [DEBUG] [Thread-202076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:44:21.436 [DEBUG] [Thread-202076] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:44:21.436 [DEBUG] [Thread-202076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:44:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:44:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:44:21.437 [DEBUG] [Thread-202076] [transport.py] [_log()] userauth is OK
2026-02-15T09:44:21.437 [DEBUG] [Thread-202076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:44:21.438 [DEBUG] [Thread-202076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:44:21.438 [DEBUG] [Thread-202076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:44:21.438 [DEBUG] [Thread-202076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:44:21.451 [INFO] [Thread-202076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:44:21.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:44:22.062 [DEBUG] [Thread-202076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:44:22.063 [DEBUG] [Thread-202076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:44:22.063 [DEBUG] [Thread-202076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:44:22.103 [DEBUG] [Thread-202076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:44:22.104 [DEBUG] [Thread-202076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:44:22.107 [DEBUG] [Thread-202076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:44:22.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:44:22.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:44:22.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:44:22.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:44:22.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:44:22.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:44:22.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:44:22.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:44:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:44:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.321976 -999.00  +11.60  18.01     62   +4.70 1 1 1 1 1   888    0 7.93 54.22 ----- 18.0 18.0 156.8 23.6 17.9 -27.1 16.8 -25.4 15.4 -25.4 16.3 -26.6
2026-02-15T09:44:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:44:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:44:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.321976
2026-02-15T09:44:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:44:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:44:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:44:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:44:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:44:22.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:43:48', tmtdew=8.61, humidity=55.79, cloud=0.0, wind=24.07, temperature=11.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:43:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:44:22.132 [DEBUG] [Thread-202076] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:44:22.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:44:22.225 [DEBUG] [Thread-202079] [transport.py] [_log()] starting thread (client mode): 0xa5759240
2026-02-15T09:44:22.225 [DEBUG] [Thread-202079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:44:22.239 [DEBUG] [Thread-202079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:44:22.239 [INFO] [Thread-202079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:44:22.246 [DEBUG] [Thread-202079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:44:22.246 [DEBUG] [Thread-202079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:44:22.246 [DEBUG] [Thread-202079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:44:22.246 [DEBUG] [Thread-202079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] client lang: <none>
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] server lang: <none>
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] kex follows: False
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] Compression: none
2026-02-15T09:44:22.247 [DEBUG] [Thread-202079] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:44:22.304 [DEBUG] [Thread-202079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:44:22.305 [DEBUG] [Thread-202079] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:44:22.305 [DEBUG] [Thread-202079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:44:22.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:44:22.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:44:22.360 [DEBUG] [Thread-202079] [transport.py] [_log()] userauth is OK
2026-02-15T09:44:22.361 [DEBUG] [Thread-202079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:44:22.361 [DEBUG] [Thread-202079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:44:22.361 [DEBUG] [Thread-202079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:44:22.361 [DEBUG] [Thread-202079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:44:22.380 [INFO] [Thread-202079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:44:22.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:44:22.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:44:23.211 [DEBUG] [Thread-202079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:44:23.211 [DEBUG] [Thread-202079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:44:23.274 [DEBUG] [Thread-202079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:44:23.274 [DEBUG] [Thread-202079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:44:23.298 [DEBUG] [Thread-202079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:44:23.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:44:23.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:44:23.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:44:23.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:44:23.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:44:23.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:44:23.393 [DEBUG] [Thread-202079] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:44:24.458 [DEBUG] [Thread-202081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:39.511 [DEBUG] [Thread-202082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:40.463 [DEBUG] [Thread-202083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:53.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:44:53.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:44:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:44:54.548 [DEBUG] [Thread-202084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:44:55.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 44, 23), 8.58, 55.92, 0.0, 23.31, 11.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:44:55.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:44:23
2026-02-15T09:44:55.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:44:55.753 [DEBUG] [Thread-202085] [transport.py] [_log()] starting thread (client mode): 0xa575ace0
2026-02-15T09:44:55.753 [DEBUG] [Thread-202085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:44:55.768 [DEBUG] [Thread-202085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:44:55.768 [INFO] [Thread-202085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] client lang: <none>
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] server lang: <none>
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] kex follows: False
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:44:55.771 [DEBUG] [Thread-202085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:44:55.772 [DEBUG] [Thread-202085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:44:55.772 [DEBUG] [Thread-202085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:44:55.772 [DEBUG] [Thread-202085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:44:55.772 [DEBUG] [Thread-202085] [transport.py] [_log()] Compression: none
2026-02-15T09:44:55.772 [DEBUG] [Thread-202085] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:44:55.788 [DEBUG] [Thread-202085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:44:55.789 [DEBUG] [Thread-202085] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:44:55.789 [DEBUG] [Thread-202085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:44:55.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:44:55.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:44:55.791 [DEBUG] [Thread-202085] [transport.py] [_log()] userauth is OK
2026-02-15T09:44:55.791 [DEBUG] [Thread-202085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:44:55.791 [DEBUG] [Thread-202085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:44:55.792 [DEBUG] [Thread-202085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:44:55.792 [DEBUG] [Thread-202085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:44:55.810 [INFO] [Thread-202085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:44:55.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:44:56.399 [DEBUG] [Thread-202085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:44:56.400 [DEBUG] [Thread-202085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:44:56.400 [DEBUG] [Thread-202085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:44:56.440 [DEBUG] [Thread-202085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:44:56.441 [DEBUG] [Thread-202085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:44:56.444 [DEBUG] [Thread-202085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:44:56.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:44:56.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:44:56.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:44:56.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:44:56.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:44:56.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:44:56.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:44:56.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:44:56.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:44:56.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.322670 -999.00  +11.60  21.56     63   +4.80 1 1 1 1 1   888    0 7.72 50.75 ----- 21.6 21.6 162.2 27.2 18.0 -27.3 17.0 -26.8 15.5 -26.1 16.4 -27.0
2026-02-15T09:44:56.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:44:56.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:44:56.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.322670
2026-02-15T09:44:56.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:44:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:44:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:44:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:44:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:44:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:44:23', tmtdew=8.58, humidity=55.92, cloud=0.0, wind=23.31, temperature=11.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:44:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:44:56.472 [DEBUG] [Thread-202085] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:44:56.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:44:56.573 [DEBUG] [Thread-202088] [transport.py] [_log()] starting thread (client mode): 0xa2dc0430
2026-02-15T09:44:56.573 [DEBUG] [Thread-202088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:44:56.593 [DEBUG] [Thread-202088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:44:56.594 [INFO] [Thread-202088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:44:56.605 [DEBUG] [Thread-202088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] client lang: <none>
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] server lang: <none>
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] kex follows: False
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:44:56.606 [DEBUG] [Thread-202088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:44:56.607 [DEBUG] [Thread-202088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:44:56.607 [DEBUG] [Thread-202088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:44:56.607 [DEBUG] [Thread-202088] [transport.py] [_log()] Compression: none
2026-02-15T09:44:56.607 [DEBUG] [Thread-202088] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:44:56.669 [DEBUG] [Thread-202088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:44:56.669 [DEBUG] [Thread-202088] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:44:56.669 [DEBUG] [Thread-202088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:44:56.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:44:56.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:44:56.738 [DEBUG] [Thread-202088] [transport.py] [_log()] userauth is OK
2026-02-15T09:44:56.739 [DEBUG] [Thread-202088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:44:56.739 [DEBUG] [Thread-202088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:44:56.739 [DEBUG] [Thread-202088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:44:56.739 [DEBUG] [Thread-202088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:44:56.763 [INFO] [Thread-202088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:44:56.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:44:56.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:44:57.797 [DEBUG] [Thread-202088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:44:57.797 [DEBUG] [Thread-202088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:44:57.855 [DEBUG] [Thread-202088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:44:57.855 [DEBUG] [Thread-202088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:44:57.873 [DEBUG] [Thread-202088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:44:57.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:44:57.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:44:57.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:44:57.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:44:57.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:44:57.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:44:57.952 [DEBUG] [Thread-202088] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:45:01.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:45:01.020 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:45:09.585 [DEBUG] [Thread-202090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:45:24.636 [DEBUG] [Thread-202091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:45:27.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:45:27.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:45:27.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:45:29.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 44, 58), 8.27, 56.63, 0.0, 27.91, 11.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:45:29.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:44:58
2026-02-15T09:45:30.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:45:30.387 [DEBUG] [Thread-202092] [transport.py] [_log()] starting thread (client mode): 0xa2dc0dc0
2026-02-15T09:45:30.388 [DEBUG] [Thread-202092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:45:30.407 [DEBUG] [Thread-202092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:45:30.408 [INFO] [Thread-202092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] client lang: <none>
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] server lang: <none>
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] kex follows: False
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] Compression: none
2026-02-15T09:45:30.411 [DEBUG] [Thread-202092] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:45:30.436 [DEBUG] [Thread-202092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:45:30.437 [DEBUG] [Thread-202092] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:45:30.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:45:30.438 [DEBUG] [Thread-202092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:45:30.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:45:30.440 [DEBUG] [Thread-202092] [transport.py] [_log()] userauth is OK
2026-02-15T09:45:30.440 [DEBUG] [Thread-202092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:45:30.440 [DEBUG] [Thread-202092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:45:30.441 [DEBUG] [Thread-202092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:45:30.441 [DEBUG] [Thread-202092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:45:30.460 [INFO] [Thread-202092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:45:30.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:45:31.036 [DEBUG] [Thread-202092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:45:31.036 [DEBUG] [Thread-202092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:45:31.036 [DEBUG] [Thread-202092] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:45:31.077 [DEBUG] [Thread-202092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:45:31.077 [DEBUG] [Thread-202092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:45:31.080 [DEBUG] [Thread-202092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:45:31.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:45:31.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:45:31.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:45:31.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:45:31.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:45:31.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:45:31.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:45:31.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:45:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:45:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.323017 -999.00  +11.70  24.43     62   +4.80 1 1 1 1 1   888    0 7.70 48.57 ----- 24.4 24.4 145.0 31.6 18.0 -28.3 17.1 -26.6 15.6 -26.0 16.4 -27.7
2026-02-15T09:45:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:45:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:45:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.323017
2026-02-15T09:45:31.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:45:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:45:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:45:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:45:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:45:31.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:44:58', tmtdew=8.27, humidity=56.63, cloud=0.0, wind=27.91, temperature=11.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:45:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:45:31.113 [DEBUG] [Thread-202092] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:45:31.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:45:31.208 [DEBUG] [Thread-202095] [transport.py] [_log()] starting thread (client mode): 0xa2dc0b20
2026-02-15T09:45:31.208 [DEBUG] [Thread-202095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:45:31.225 [DEBUG] [Thread-202095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:45:31.226 [INFO] [Thread-202095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:45:31.234 [DEBUG] [Thread-202095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:45:31.234 [DEBUG] [Thread-202095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:45:31.234 [DEBUG] [Thread-202095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] client lang: <none>
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] server lang: <none>
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] kex follows: False
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:45:31.235 [DEBUG] [Thread-202095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:45:31.236 [DEBUG] [Thread-202095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:45:31.236 [DEBUG] [Thread-202095] [transport.py] [_log()] Compression: none
2026-02-15T09:45:31.236 [DEBUG] [Thread-202095] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:45:31.297 [DEBUG] [Thread-202095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:45:31.298 [DEBUG] [Thread-202095] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:45:31.298 [DEBUG] [Thread-202095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:45:31.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:45:31.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:45:31.357 [DEBUG] [Thread-202095] [transport.py] [_log()] userauth is OK
2026-02-15T09:45:31.358 [DEBUG] [Thread-202095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:45:31.358 [DEBUG] [Thread-202095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:45:31.358 [DEBUG] [Thread-202095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:45:31.358 [DEBUG] [Thread-202095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:45:31.377 [INFO] [Thread-202095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:45:31.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:45:31.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:45:32.192 [DEBUG] [Thread-202095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:45:32.193 [DEBUG] [Thread-202095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:45:32.240 [DEBUG] [Thread-202095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:45:32.240 [DEBUG] [Thread-202095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:45:32.250 [DEBUG] [Thread-202095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:45:32.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:45:32.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:45:32.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-02-15T09:45:32.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:45:32.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:45:32.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:45:32.290 [DEBUG] [Thread-202095] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:45:39.673 [DEBUG] [Thread-202097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:45:40.497 [DEBUG] [Thread-202098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:45:54.727 [DEBUG] [Thread-202099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:01.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:01.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:46:02.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:46:02.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:46:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 45, 35), 8.41, 56.35, 0.0, 29.11, 12.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:46:04.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:45:35
2026-02-15T09:46:05.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:46:05.219 [DEBUG] [Thread-202100] [transport.py] [_log()] starting thread (client mode): 0xa2db6a40
2026-02-15T09:46:05.220 [DEBUG] [Thread-202100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:46:05.239 [DEBUG] [Thread-202100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:46:05.239 [INFO] [Thread-202100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:46:05.240 [DEBUG] [Thread-202100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] client lang: <none>
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] server lang: <none>
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] kex follows: False
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] Compression: none
2026-02-15T09:46:05.241 [DEBUG] [Thread-202100] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:46:05.250 [DEBUG] [Thread-202100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:46:05.250 [DEBUG] [Thread-202100] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:46:05.250 [DEBUG] [Thread-202100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:46:05.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:46:05.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:46:05.252 [DEBUG] [Thread-202100] [transport.py] [_log()] userauth is OK
2026-02-15T09:46:05.252 [DEBUG] [Thread-202100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:46:05.252 [DEBUG] [Thread-202100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:46:05.252 [DEBUG] [Thread-202100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:46:05.252 [DEBUG] [Thread-202100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:46:05.276 [INFO] [Thread-202100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:46:05.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:46:05.842 [DEBUG] [Thread-202100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:46:05.842 [DEBUG] [Thread-202100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:46:05.843 [DEBUG] [Thread-202100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:46:05.883 [DEBUG] [Thread-202100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:46:05.884 [DEBUG] [Thread-202100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:46:05.887 [DEBUG] [Thread-202100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:46:05.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:46:05.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:46:05.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:46:05.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:46:05.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:46:05.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:46:05.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:46:05.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:46:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:46:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.323364 -999.00  +11.50  19.73     62   +4.70 1 1 1 1 1   888    0 7.67 44.98 ----- 19.7 19.7 156.8 27.6 18.0 -28.2 17.1 -26.6 15.6 -26.6 16.5 -27.8
2026-02-15T09:46:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:46:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:46:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.323364
2026-02-15T09:46:05.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:46:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:46:05.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:46:05.912 [DEBUG] [Thread-202100] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:46:05.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:46:05.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:46:05.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:45:35', tmtdew=8.41, humidity=56.35, cloud=0.0, wind=29.11, temperature=12.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:45:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:46:05.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:46:06.008 [DEBUG] [Thread-202103] [transport.py] [_log()] starting thread (client mode): 0xa2d11a50
2026-02-15T09:46:06.008 [DEBUG] [Thread-202103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:46:06.023 [DEBUG] [Thread-202103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:46:06.023 [INFO] [Thread-202103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] client lang: <none>
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] server lang: <none>
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] kex follows: False
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:46:06.031 [DEBUG] [Thread-202103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:46:06.032 [DEBUG] [Thread-202103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:46:06.032 [DEBUG] [Thread-202103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:46:06.032 [DEBUG] [Thread-202103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:46:06.032 [DEBUG] [Thread-202103] [transport.py] [_log()] Compression: none
2026-02-15T09:46:06.032 [DEBUG] [Thread-202103] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:46:06.088 [DEBUG] [Thread-202103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:46:06.088 [DEBUG] [Thread-202103] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:46:06.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:46:06.090 [DEBUG] [Thread-202103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:46:06.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:46:06.144 [DEBUG] [Thread-202103] [transport.py] [_log()] userauth is OK
2026-02-15T09:46:06.145 [DEBUG] [Thread-202103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:46:06.145 [DEBUG] [Thread-202103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:46:06.145 [DEBUG] [Thread-202103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:46:06.145 [DEBUG] [Thread-202103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:46:06.164 [INFO] [Thread-202103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:46:06.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:46:06.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:46:06.989 [DEBUG] [Thread-202103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:46:06.989 [DEBUG] [Thread-202103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:46:07.054 [DEBUG] [Thread-202103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:46:07.055 [DEBUG] [Thread-202103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:46:07.080 [DEBUG] [Thread-202103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:46:07.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:46:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:46:07.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:46:07.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:46:07.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:46:07.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:46:07.143 [DEBUG] [Thread-202103] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:46:09.763 [DEBUG] [Thread-202105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:24.821 [DEBUG] [Thread-202106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:37.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:46:37.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:46:37.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:46:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 46, 10), 7.97, 57.79, 0.0, 26.77, 11.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:46:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:46:10
2026-02-15T09:46:39.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:46:39.718 [DEBUG] [Thread-202107] [transport.py] [_log()] starting thread (client mode): 0xa2db6590
2026-02-15T09:46:39.718 [DEBUG] [Thread-202107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:46:39.735 [DEBUG] [Thread-202107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:46:39.735 [INFO] [Thread-202107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:46:39.738 [DEBUG] [Thread-202107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] client lang: <none>
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] server lang: <none>
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] kex follows: False
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] Compression: none
2026-02-15T09:46:39.739 [DEBUG] [Thread-202107] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:46:39.757 [DEBUG] [Thread-202107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:46:39.758 [DEBUG] [Thread-202107] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:46:39.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:46:39.760 [DEBUG] [Thread-202107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:46:39.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:46:39.762 [DEBUG] [Thread-202107] [transport.py] [_log()] userauth is OK
2026-02-15T09:46:39.763 [DEBUG] [Thread-202107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:46:39.763 [DEBUG] [Thread-202107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:46:39.763 [DEBUG] [Thread-202107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:46:39.763 [DEBUG] [Thread-202107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:46:39.784 [INFO] [Thread-202107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:46:39.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:46:39.861 [DEBUG] [Thread-202109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:40.405 [DEBUG] [Thread-202107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:46:40.405 [DEBUG] [Thread-202107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:46:40.405 [DEBUG] [Thread-202107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:46:40.446 [DEBUG] [Thread-202107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:46:40.447 [DEBUG] [Thread-202107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:46:40.450 [DEBUG] [Thread-202107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:46:40.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:46:40.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:46:40.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:46:40.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:46:40.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:46:40.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:46:40.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:46:40.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:46:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:46:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.323712 -999.00  +11.30  21.82     62   +4.40 1 1 1 1 1   888    0 7.72 45.55 ----- 21.8 21.8 154.8 28.8 17.9 -30.1 17.0 -26.6 15.5 -27.9 16.4 -27.8
2026-02-15T09:46:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:46:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:46:40.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.323712
2026-02-15T09:46:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:46:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:46:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:46:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:46:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:46:40.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:46:10', tmtdew=7.97, humidity=57.79, cloud=0.0, wind=26.77, temperature=11.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:46:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:46:40.479 [DEBUG] [Thread-202107] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:46:40.525 [DEBUG] [Thread-202111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:46:40.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:46:40.577 [DEBUG] [Thread-202112] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ec0
2026-02-15T09:46:40.577 [DEBUG] [Thread-202112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:46:40.591 [DEBUG] [Thread-202112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:46:40.592 [INFO] [Thread-202112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:46:40.599 [DEBUG] [Thread-202112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:46:40.600 [DEBUG] [Thread-202112] [transport.py] [_log()] client lang: <none>
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] server lang: <none>
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] kex follows: False
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:46:40.601 [DEBUG] [Thread-202112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:46:40.602 [DEBUG] [Thread-202112] [transport.py] [_log()] Compression: none
2026-02-15T09:46:40.602 [DEBUG] [Thread-202112] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:46:40.661 [DEBUG] [Thread-202112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:46:40.661 [DEBUG] [Thread-202112] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:46:40.662 [DEBUG] [Thread-202112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:46:40.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:46:40.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:46:40.720 [DEBUG] [Thread-202112] [transport.py] [_log()] userauth is OK
2026-02-15T09:46:40.721 [DEBUG] [Thread-202112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:46:40.721 [DEBUG] [Thread-202112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:46:40.721 [DEBUG] [Thread-202112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:46:40.721 [DEBUG] [Thread-202112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:46:40.740 [INFO] [Thread-202112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:46:40.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:46:40.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:46:41.565 [DEBUG] [Thread-202112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:46:41.566 [DEBUG] [Thread-202112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:46:41.614 [DEBUG] [Thread-202112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:46:41.614 [DEBUG] [Thread-202112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:46:41.624 [DEBUG] [Thread-202112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:46:41.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:46:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:46:41.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:46:41.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:46:41.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:46:41.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:46:41.670 [DEBUG] [Thread-202112] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:46:54.901 [DEBUG] [Thread-202114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:01.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:01.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:09.954 [DEBUG] [Thread-202115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:11.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:47:11.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:47:11.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:47:13.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 46, 45), 8.01, 58.16, 0.0, 23.04, 11.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:47:13.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:46:45
2026-02-15T09:47:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:47:14.006 [DEBUG] [Thread-202116] [transport.py] [_log()] starting thread (client mode): 0xa2dc0850
2026-02-15T09:47:14.006 [DEBUG] [Thread-202116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:47:14.023 [DEBUG] [Thread-202116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:47:14.023 [INFO] [Thread-202116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:47:14.026 [DEBUG] [Thread-202116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:47:14.026 [DEBUG] [Thread-202116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:47:14.026 [DEBUG] [Thread-202116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] client lang: <none>
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] server lang: <none>
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] kex follows: False
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] Compression: none
2026-02-15T09:47:14.027 [DEBUG] [Thread-202116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:47:14.034 [DEBUG] [Thread-202116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:47:14.034 [DEBUG] [Thread-202116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:47:14.035 [DEBUG] [Thread-202116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:47:14.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:47:14.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:47:14.035 [DEBUG] [Thread-202116] [transport.py] [_log()] userauth is OK
2026-02-15T09:47:14.035 [DEBUG] [Thread-202116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:47:14.035 [DEBUG] [Thread-202116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:47:14.035 [DEBUG] [Thread-202116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:47:14.035 [DEBUG] [Thread-202116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:47:14.044 [INFO] [Thread-202116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:47:14.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:47:14.594 [DEBUG] [Thread-202116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:47:14.594 [DEBUG] [Thread-202116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:47:14.594 [DEBUG] [Thread-202116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:47:14.635 [DEBUG] [Thread-202116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:47:14.635 [DEBUG] [Thread-202116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:47:14.637 [DEBUG] [Thread-202116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:47:14.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:47:14.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:47:14.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:47:14.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:47:14.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:47:14.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:47:14.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:47:14.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:47:14.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:47:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.324059 -999.00  +11.60  22.56     63   +5.00 1 1 1 1 1   888    0 7.91 52.62 ----- 22.6 22.6 142.4 27.3 18.0 -27.5 17.0 -25.3 15.6 -25.8 16.5 -27.0
2026-02-15T09:47:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:47:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:47:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.324059
2026-02-15T09:47:14.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:47:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:47:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:47:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:47:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:47:14.665 [DEBUG] [Thread-202116] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:47:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:46:45', tmtdew=8.01, humidity=58.16, cloud=0.0, wind=23.04, temperature=11.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:46:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:47:14.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:47:14.764 [DEBUG] [Thread-202119] [transport.py] [_log()] starting thread (client mode): 0xa2dc0700
2026-02-15T09:47:14.765 [DEBUG] [Thread-202119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:47:14.782 [DEBUG] [Thread-202119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:47:14.782 [INFO] [Thread-202119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:47:14.793 [DEBUG] [Thread-202119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:47:14.793 [DEBUG] [Thread-202119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:47:14.793 [DEBUG] [Thread-202119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] client lang: <none>
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] server lang: <none>
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] kex follows: False
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:47:14.794 [DEBUG] [Thread-202119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:47:14.795 [DEBUG] [Thread-202119] [transport.py] [_log()] Compression: none
2026-02-15T09:47:14.795 [DEBUG] [Thread-202119] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:47:14.853 [DEBUG] [Thread-202119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:47:14.853 [DEBUG] [Thread-202119] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:47:14.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:47:14.855 [DEBUG] [Thread-202119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:47:14.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:47:14.912 [DEBUG] [Thread-202119] [transport.py] [_log()] userauth is OK
2026-02-15T09:47:14.912 [DEBUG] [Thread-202119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:47:14.912 [DEBUG] [Thread-202119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:47:14.912 [DEBUG] [Thread-202119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:47:14.913 [DEBUG] [Thread-202119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:47:14.933 [INFO] [Thread-202119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:47:14.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:47:14.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:47:15.744 [DEBUG] [Thread-202119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:47:15.745 [DEBUG] [Thread-202119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:47:15.792 [DEBUG] [Thread-202119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:47:15.793 [DEBUG] [Thread-202119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:47:15.802 [DEBUG] [Thread-202119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:47:15.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:47:15.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:47:15.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:47:15.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:47:15.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:47:15.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:47:15.839 [DEBUG] [Thread-202119] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:47:24.990 [DEBUG] [Thread-202121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:40.045 [DEBUG] [Thread-202122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:40.560 [DEBUG] [Thread-202123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:47:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:47:45.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:47:45.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:47:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 47, 20), 8.02, 58.14, 0.0, 24.74, 11.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:47:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:47:20
2026-02-15T09:47:48.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:47:48.274 [DEBUG] [Thread-202124] [transport.py] [_log()] starting thread (client mode): 0xa2db5300
2026-02-15T09:47:48.274 [DEBUG] [Thread-202124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:47:48.293 [DEBUG] [Thread-202124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:47:48.293 [INFO] [Thread-202124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:47:48.295 [DEBUG] [Thread-202124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:47:48.295 [DEBUG] [Thread-202124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:47:48.295 [DEBUG] [Thread-202124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:47:48.295 [DEBUG] [Thread-202124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:48.295 [DEBUG] [Thread-202124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] client lang: <none>
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] server lang: <none>
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] kex follows: False
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] Compression: none
2026-02-15T09:47:48.296 [DEBUG] [Thread-202124] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:47:48.313 [DEBUG] [Thread-202124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:47:48.313 [DEBUG] [Thread-202124] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:47:48.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:47:48.314 [DEBUG] [Thread-202124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:47:48.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:47:48.316 [DEBUG] [Thread-202124] [transport.py] [_log()] userauth is OK
2026-02-15T09:47:48.317 [DEBUG] [Thread-202124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:47:48.317 [DEBUG] [Thread-202124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:47:48.317 [DEBUG] [Thread-202124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:47:48.317 [DEBUG] [Thread-202124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:47:48.342 [INFO] [Thread-202124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:47:48.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:47:48.935 [DEBUG] [Thread-202124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:47:48.936 [DEBUG] [Thread-202124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:47:48.936 [DEBUG] [Thread-202124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:47:48.976 [DEBUG] [Thread-202124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:47:48.977 [DEBUG] [Thread-202124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:47:48.980 [DEBUG] [Thread-202124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:47:48.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:47:48.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:47:48.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:47:48.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:47:49.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:47:49.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:47:49.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:47:49.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:47:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:47:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.324753 -999.00  +11.70  22.32     62   +4.70 1 1 1 1 1   888    0 8.06 54.65 ----- 22.3 22.3 153.6 28.1 18.1 -29.1 17.0 -26.4 15.6 -26.1 16.5 -28.0
2026-02-15T09:47:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:47:49.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:47:49.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.324753
2026-02-15T09:47:49.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:47:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:47:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:47:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:47:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:47:49.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:47:20', tmtdew=8.02, humidity=58.14, cloud=0.0, wind=24.74, temperature=11.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:47:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:47:49.009 [DEBUG] [Thread-202124] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:47:49.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:47:49.107 [DEBUG] [Thread-202127] [transport.py] [_log()] starting thread (client mode): 0xa5759990
2026-02-15T09:47:49.107 [DEBUG] [Thread-202127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:47:49.123 [DEBUG] [Thread-202127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:47:49.123 [INFO] [Thread-202127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:47:49.131 [DEBUG] [Thread-202127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:47:49.131 [DEBUG] [Thread-202127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:47:49.131 [DEBUG] [Thread-202127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:47:49.131 [DEBUG] [Thread-202127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:49.131 [DEBUG] [Thread-202127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] client lang: <none>
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] server lang: <none>
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] kex follows: False
2026-02-15T09:47:49.132 [DEBUG] [Thread-202127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:47:49.133 [DEBUG] [Thread-202127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:47:49.133 [DEBUG] [Thread-202127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:47:49.133 [DEBUG] [Thread-202127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:47:49.133 [DEBUG] [Thread-202127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:47:49.133 [DEBUG] [Thread-202127] [transport.py] [_log()] Compression: none
2026-02-15T09:47:49.133 [DEBUG] [Thread-202127] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:47:49.192 [DEBUG] [Thread-202127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:47:49.193 [DEBUG] [Thread-202127] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:47:49.194 [DEBUG] [Thread-202127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:47:49.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:47:49.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:47:49.248 [DEBUG] [Thread-202127] [transport.py] [_log()] userauth is OK
2026-02-15T09:47:49.248 [DEBUG] [Thread-202127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:47:49.248 [DEBUG] [Thread-202127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:47:49.248 [DEBUG] [Thread-202127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:47:49.249 [DEBUG] [Thread-202127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:47:49.268 [INFO] [Thread-202127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:47:49.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:47:49.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:47:50.037 [DEBUG] [Thread-202127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:47:50.037 [DEBUG] [Thread-202127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:47:50.086 [DEBUG] [Thread-202127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:47:50.086 [DEBUG] [Thread-202127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:47:50.096 [DEBUG] [Thread-202127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:47:50.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:47:50.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:47:50.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:47:50.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:47:50.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:47:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:47:50.134 [DEBUG] [Thread-202127] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:47:55.082 [DEBUG] [Thread-202129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:01.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:01.441 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:10.137 [DEBUG] [Thread-202130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:20.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:48:20.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:48:20.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:48:22.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 47, 57), 8.27, 57.08, 0.0, 27.05, 11.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:48:22.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:47:57
2026-02-15T09:48:22.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:48:22.915 [DEBUG] [Thread-202131] [transport.py] [_log()] starting thread (client mode): 0xa575aa10
2026-02-15T09:48:22.916 [DEBUG] [Thread-202131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:48:22.931 [DEBUG] [Thread-202131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:48:22.931 [INFO] [Thread-202131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:22.932 [DEBUG] [Thread-202131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] client lang: <none>
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] server lang: <none>
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] kex follows: False
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] Compression: none
2026-02-15T09:48:22.933 [DEBUG] [Thread-202131] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:48:22.942 [DEBUG] [Thread-202131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:48:22.942 [DEBUG] [Thread-202131] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:48:22.942 [DEBUG] [Thread-202131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:48:22.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:48:22.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:48:22.943 [DEBUG] [Thread-202131] [transport.py] [_log()] userauth is OK
2026-02-15T09:48:22.943 [DEBUG] [Thread-202131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:48:22.943 [DEBUG] [Thread-202131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:48:22.943 [DEBUG] [Thread-202131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:48:22.943 [DEBUG] [Thread-202131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:48:22.954 [INFO] [Thread-202131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:48:22.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:48:23.600 [DEBUG] [Thread-202131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:48:23.600 [DEBUG] [Thread-202131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:48:23.601 [DEBUG] [Thread-202131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:48:23.641 [DEBUG] [Thread-202131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:48:23.642 [DEBUG] [Thread-202131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:48:23.645 [DEBUG] [Thread-202131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:48:23.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:48:23.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:48:23.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:48:23.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:48:23.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:48:23.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:48:23.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:48:23.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:48:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:48:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.325100 -999.00  +11.60  18.96     62   +4.60 1 1 1 1 1   888    0 7.96 54.45 ----- 19.0 19.0 161.8 25.1 18.1 -27.7 17.0 -26.7 15.7 -25.9 16.5 -28.3
2026-02-15T09:48:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:48:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:48:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.325100
2026-02-15T09:48:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:48:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:48:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:48:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:48:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:48:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:47:57', tmtdew=8.27, humidity=57.08, cloud=0.0, wind=27.05, temperature=11.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:48:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:48:23.670 [DEBUG] [Thread-202131] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:48:23.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:48:23.764 [DEBUG] [Thread-202134] [transport.py] [_log()] starting thread (client mode): 0xa2d129b0
2026-02-15T09:48:23.765 [DEBUG] [Thread-202134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:48:23.779 [DEBUG] [Thread-202134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:48:23.780 [INFO] [Thread-202134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:48:23.788 [DEBUG] [Thread-202134] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:48:23.788 [DEBUG] [Thread-202134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:48:23.788 [DEBUG] [Thread-202134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:48:23.788 [DEBUG] [Thread-202134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:23.788 [DEBUG] [Thread-202134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:23.788 [DEBUG] [Thread-202134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] client lang: <none>
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] server lang: <none>
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] kex follows: False
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:48:23.789 [DEBUG] [Thread-202134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:48:23.790 [DEBUG] [Thread-202134] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:48:23.790 [DEBUG] [Thread-202134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:48:23.790 [DEBUG] [Thread-202134] [transport.py] [_log()] Compression: none
2026-02-15T09:48:23.790 [DEBUG] [Thread-202134] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:48:23.846 [DEBUG] [Thread-202134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:48:23.846 [DEBUG] [Thread-202134] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:48:23.847 [DEBUG] [Thread-202134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:48:23.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:48:23.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:48:23.903 [DEBUG] [Thread-202134] [transport.py] [_log()] userauth is OK
2026-02-15T09:48:23.904 [DEBUG] [Thread-202134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:48:23.904 [DEBUG] [Thread-202134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:48:23.904 [DEBUG] [Thread-202134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:48:23.904 [DEBUG] [Thread-202134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:48:23.922 [INFO] [Thread-202134] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:48:23.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:48:23.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:48:24.772 [DEBUG] [Thread-202134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:48:24.772 [DEBUG] [Thread-202134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:48:24.820 [DEBUG] [Thread-202134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:48:24.821 [DEBUG] [Thread-202134] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:48:24.829 [DEBUG] [Thread-202134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:48:24.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:48:24.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:48:24.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:48:24.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:48:24.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:48:24.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:48:24.862 [DEBUG] [Thread-202134] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:48:25.171 [DEBUG] [Thread-202136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:40.210 [DEBUG] [Thread-202137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:40.594 [DEBUG] [Thread-202138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:54.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:48:54.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:48:54.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:48:55.248 [DEBUG] [Thread-202139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:48:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 48, 33), 9.22, 53.5, 0.0, 29.64, 13.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:48:56.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:48:33
2026-02-15T09:48:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:48:57.220 [DEBUG] [Thread-202140] [transport.py] [_log()] starting thread (client mode): 0xa2d134f0
2026-02-15T09:48:57.220 [DEBUG] [Thread-202140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:48:57.240 [DEBUG] [Thread-202140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:48:57.240 [INFO] [Thread-202140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] client lang: <none>
2026-02-15T09:48:57.244 [DEBUG] [Thread-202140] [transport.py] [_log()] server lang: <none>
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] kex follows: False
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] Compression: none
2026-02-15T09:48:57.245 [DEBUG] [Thread-202140] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:48:57.263 [DEBUG] [Thread-202140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:48:57.264 [DEBUG] [Thread-202140] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:48:57.264 [DEBUG] [Thread-202140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:48:57.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:48:57.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:48:57.266 [DEBUG] [Thread-202140] [transport.py] [_log()] userauth is OK
2026-02-15T09:48:57.266 [DEBUG] [Thread-202140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:48:57.266 [DEBUG] [Thread-202140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:48:57.267 [DEBUG] [Thread-202140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:48:57.267 [DEBUG] [Thread-202140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:48:57.292 [INFO] [Thread-202140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:48:57.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:48:57.925 [DEBUG] [Thread-202140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:48:57.925 [DEBUG] [Thread-202140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:48:57.925 [DEBUG] [Thread-202140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:48:57.965 [DEBUG] [Thread-202140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:48:57.965 [DEBUG] [Thread-202140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:48:57.969 [DEBUG] [Thread-202140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:48:57.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:48:57.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:48:57.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:48:57.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:48:57.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:48:57.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:48:57.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:48:57.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:48:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:48:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.325448 -999.00  +11.50  23.10     61   +4.50 1 1 1 1 1   888    0 8.18 56.25 ----- 23.1 23.1 156.7 29.6 18.0 -29.8 17.0 -26.0 15.7 -26.5 16.5 -27.5
2026-02-15T09:48:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:48:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:48:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.325448
2026-02-15T09:48:57.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:48:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:48:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:48:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:48:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:48:57.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:48:33', tmtdew=9.22, humidity=53.5, cloud=0.0, wind=29.64, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:48:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:48:57.996 [DEBUG] [Thread-202140] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:48:58.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:48:58.094 [DEBUG] [Thread-202143] [transport.py] [_log()] starting thread (client mode): 0xa57b2770
2026-02-15T09:48:58.095 [DEBUG] [Thread-202143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:48:58.109 [DEBUG] [Thread-202143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:48:58.109 [INFO] [Thread-202143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] client lang: <none>
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] server lang: <none>
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] kex follows: False
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:48:58.117 [DEBUG] [Thread-202143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:48:58.118 [DEBUG] [Thread-202143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:48:58.118 [DEBUG] [Thread-202143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:48:58.118 [DEBUG] [Thread-202143] [transport.py] [_log()] Compression: none
2026-02-15T09:48:58.118 [DEBUG] [Thread-202143] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:48:58.174 [DEBUG] [Thread-202143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:48:58.175 [DEBUG] [Thread-202143] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:48:58.176 [DEBUG] [Thread-202143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:48:58.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:48:58.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:48:58.232 [DEBUG] [Thread-202143] [transport.py] [_log()] userauth is OK
2026-02-15T09:48:58.232 [DEBUG] [Thread-202143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:48:58.232 [DEBUG] [Thread-202143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:48:58.232 [DEBUG] [Thread-202143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:48:58.232 [DEBUG] [Thread-202143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:48:58.253 [INFO] [Thread-202143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:48:58.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:48:58.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:48:59.081 [DEBUG] [Thread-202143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:48:59.081 [DEBUG] [Thread-202143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:48:59.129 [DEBUG] [Thread-202143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:48:59.129 [DEBUG] [Thread-202143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:48:59.138 [DEBUG] [Thread-202143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:48:59.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:48:59.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:48:59.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:48:59.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:48:59.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:48:59.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:48:59.172 [DEBUG] [Thread-202143] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:49:01.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:49:01.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:49:10.287 [DEBUG] [Thread-202145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:49:25.343 [DEBUG] [Thread-202146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:49:29.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:49:29.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:49:29.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:49:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 49, 9), 8.32, 56.53, 0.0, 25.32, 11.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:49:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:49:09
2026-02-15T09:49:31.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:49:31.608 [DEBUG] [Thread-202147] [transport.py] [_log()] starting thread (client mode): 0xa2db7b50
2026-02-15T09:49:31.608 [DEBUG] [Thread-202147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:49:31.627 [DEBUG] [Thread-202147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:49:31.628 [INFO] [Thread-202147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] client lang: <none>
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] server lang: <none>
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] kex follows: False
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:49:31.631 [DEBUG] [Thread-202147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:49:31.632 [DEBUG] [Thread-202147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:49:31.632 [DEBUG] [Thread-202147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:49:31.632 [DEBUG] [Thread-202147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:49:31.632 [DEBUG] [Thread-202147] [transport.py] [_log()] Compression: none
2026-02-15T09:49:31.632 [DEBUG] [Thread-202147] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:49:31.649 [DEBUG] [Thread-202147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:49:31.650 [DEBUG] [Thread-202147] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:49:31.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:49:31.651 [DEBUG] [Thread-202147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:49:31.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:49:31.654 [DEBUG] [Thread-202147] [transport.py] [_log()] userauth is OK
2026-02-15T09:49:31.654 [DEBUG] [Thread-202147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:49:31.654 [DEBUG] [Thread-202147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:49:31.654 [DEBUG] [Thread-202147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:49:31.654 [DEBUG] [Thread-202147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:49:31.670 [INFO] [Thread-202147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:49:31.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:49:32.305 [DEBUG] [Thread-202147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:49:32.305 [DEBUG] [Thread-202147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:49:32.306 [DEBUG] [Thread-202147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:49:32.347 [DEBUG] [Thread-202147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:49:32.347 [DEBUG] [Thread-202147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:49:32.350 [DEBUG] [Thread-202147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:49:32.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:49:32.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:49:32.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:49:32.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:49:32.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:49:32.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:49:32.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:49:32.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:49:32.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:49:32.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.325795 -999.00  +11.70  21.24     61   +4.60 1 1 1 1 1   888    0 8.16 57.23 ----- 21.2 21.2 151.4 27.0 18.1 -27.9 17.1 -26.1 15.7 -25.6 16.6 -28.2
2026-02-15T09:49:32.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:49:32.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:49:32.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.325795
2026-02-15T09:49:32.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:49:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:49:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:49:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:49:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:49:32.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:49:09', tmtdew=8.32, humidity=56.53, cloud=0.0, wind=25.32, temperature=11.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:49:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:49:32.377 [DEBUG] [Thread-202147] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:49:32.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:49:32.474 [DEBUG] [Thread-202150] [transport.py] [_log()] starting thread (client mode): 0xa2db45b0
2026-02-15T09:49:32.474 [DEBUG] [Thread-202150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:49:32.489 [DEBUG] [Thread-202150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:49:32.489 [INFO] [Thread-202150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:49:32.497 [DEBUG] [Thread-202150] [transport.py] [_log()] client lang: <none>
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] server lang: <none>
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] kex follows: False
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] Compression: none
2026-02-15T09:49:32.498 [DEBUG] [Thread-202150] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:49:32.556 [DEBUG] [Thread-202150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:49:32.556 [DEBUG] [Thread-202150] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:49:32.557 [DEBUG] [Thread-202150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:49:32.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:49:32.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:49:32.612 [DEBUG] [Thread-202150] [transport.py] [_log()] userauth is OK
2026-02-15T09:49:32.612 [DEBUG] [Thread-202150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:49:32.612 [DEBUG] [Thread-202150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:49:32.612 [DEBUG] [Thread-202150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:49:32.612 [DEBUG] [Thread-202150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:49:32.631 [INFO] [Thread-202150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:49:32.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:49:32.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:49:33.451 [DEBUG] [Thread-202150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:49:33.451 [DEBUG] [Thread-202150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:49:33.502 [DEBUG] [Thread-202150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:49:33.503 [DEBUG] [Thread-202150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:49:33.512 [DEBUG] [Thread-202150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:49:33.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:49:33.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:49:33.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:49:33.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:49:33.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:49:33.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:49:33.549 [DEBUG] [Thread-202150] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:49:40.382 [DEBUG] [Thread-202152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:49:40.644 [DEBUG] [Thread-202153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:49:55.436 [DEBUG] [Thread-202154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:01.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:01.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:03.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:50:03.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:50:03.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:50:06.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 49, 45), 8.76, 55.02, 0.0, 27.51, 11.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:50:06.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:49:45
2026-02-15T09:50:06.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:50:06.640 [DEBUG] [Thread-202155] [transport.py] [_log()] starting thread (client mode): 0xa5759e70
2026-02-15T09:50:06.640 [DEBUG] [Thread-202155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:50:06.662 [DEBUG] [Thread-202155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:50:06.662 [INFO] [Thread-202155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:06.665 [DEBUG] [Thread-202155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] client lang: <none>
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] server lang: <none>
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] kex follows: False
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] Compression: none
2026-02-15T09:50:06.666 [DEBUG] [Thread-202155] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:50:06.677 [DEBUG] [Thread-202155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:50:06.677 [DEBUG] [Thread-202155] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:50:06.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:50:06.678 [DEBUG] [Thread-202155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:50:06.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:50:06.680 [DEBUG] [Thread-202155] [transport.py] [_log()] userauth is OK
2026-02-15T09:50:06.681 [DEBUG] [Thread-202155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:50:06.681 [DEBUG] [Thread-202155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:50:06.681 [DEBUG] [Thread-202155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:50:06.681 [DEBUG] [Thread-202155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:50:06.701 [INFO] [Thread-202155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:50:06.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:50:07.566 [DEBUG] [Thread-202155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:50:07.566 [DEBUG] [Thread-202155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:50:07.566 [DEBUG] [Thread-202155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:50:07.608 [DEBUG] [Thread-202155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:50:07.608 [DEBUG] [Thread-202155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:50:07.611 [DEBUG] [Thread-202155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:50:07.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:50:07.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:50:07.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:50:07.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:50:07.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:50:07.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:50:07.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:50:07.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:50:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:50:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.326142 -999.00  +11.80  20.51     60   +4.50 1 1 1 1 1   888    0 7.93 51.16 ----- 20.5 20.5 143.0 23.1 18.2 -28.3 17.1 -26.6 15.8 -25.3 16.7 -27.5
2026-02-15T09:50:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:50:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:50:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.326142
2026-02-15T09:50:07.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:50:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:50:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:50:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:50:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:50:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:49:45', tmtdew=8.76, humidity=55.02, cloud=0.0, wind=27.51, temperature=11.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:49:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:50:07.640 [DEBUG] [Thread-202155] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:50:07.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:50:07.737 [DEBUG] [Thread-202158] [transport.py] [_log()] starting thread (client mode): 0xa2dc1330
2026-02-15T09:50:07.737 [DEBUG] [Thread-202158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:50:07.752 [DEBUG] [Thread-202158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:50:07.752 [INFO] [Thread-202158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] client lang: <none>
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] server lang: <none>
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] kex follows: False
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] Compression: none
2026-02-15T09:50:07.760 [DEBUG] [Thread-202158] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:50:07.819 [DEBUG] [Thread-202158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:50:07.819 [DEBUG] [Thread-202158] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:50:07.819 [DEBUG] [Thread-202158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:50:07.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:50:07.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:50:07.876 [DEBUG] [Thread-202158] [transport.py] [_log()] userauth is OK
2026-02-15T09:50:07.876 [DEBUG] [Thread-202158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:50:07.876 [DEBUG] [Thread-202158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:50:07.876 [DEBUG] [Thread-202158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:50:07.876 [DEBUG] [Thread-202158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:50:07.891 [INFO] [Thread-202158] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:50:07.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:50:07.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:50:08.764 [DEBUG] [Thread-202158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:50:08.764 [DEBUG] [Thread-202158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:50:08.813 [DEBUG] [Thread-202158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:50:08.813 [DEBUG] [Thread-202158] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:50:08.823 [DEBUG] [Thread-202158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:50:08.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:50:08.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:50:08.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:50:08.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:50:08.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:50:08.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:50:08.862 [DEBUG] [Thread-202158] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:50:10.476 [DEBUG] [Thread-202160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:25.528 [DEBUG] [Thread-202161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:38.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:50:38.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:50:38.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:50:40.560 [DEBUG] [Thread-202162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:40.682 [DEBUG] [Thread-202163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:50:41.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 50, 21), 8.73, 55.15, 0.0, 25.57, 12.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:50:41.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:50:21
2026-02-15T09:50:41.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:50:41.625 [DEBUG] [Thread-202164] [transport.py] [_log()] starting thread (client mode): 0xa2d123b0
2026-02-15T09:50:41.625 [DEBUG] [Thread-202164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:50:41.646 [DEBUG] [Thread-202164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:50:41.646 [INFO] [Thread-202164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] client lang: <none>
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] server lang: <none>
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] kex follows: False
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] Compression: none
2026-02-15T09:50:41.649 [DEBUG] [Thread-202164] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:50:41.667 [DEBUG] [Thread-202164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:50:41.667 [DEBUG] [Thread-202164] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:50:41.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:50:41.668 [DEBUG] [Thread-202164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:50:41.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:50:41.670 [DEBUG] [Thread-202164] [transport.py] [_log()] userauth is OK
2026-02-15T09:50:41.671 [DEBUG] [Thread-202164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:50:41.671 [DEBUG] [Thread-202164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:50:41.671 [DEBUG] [Thread-202164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:50:41.671 [DEBUG] [Thread-202164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:50:41.695 [INFO] [Thread-202164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:50:41.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:50:42.340 [DEBUG] [Thread-202164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:50:42.340 [DEBUG] [Thread-202164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:50:42.341 [DEBUG] [Thread-202164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:50:42.381 [DEBUG] [Thread-202164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:50:42.382 [DEBUG] [Thread-202164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:50:42.385 [DEBUG] [Thread-202164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:50:42.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:50:42.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:50:42.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:50:42.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:50:42.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:50:42.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:50:42.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:50:42.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:50:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:50:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.326489 -999.00  +11.90  13.44     60   +4.40 1 1 1 1 1   888    0 8.05 52.11 ----- 13.4 13.4 155.2 31.4 18.4 -27.6 17.2 -26.9 15.8 -25.5 16.8 -28.0
2026-02-15T09:50:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:50:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:50:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.326489
2026-02-15T09:50:42.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:50:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:50:42.414 [DEBUG] [Thread-202164] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:50:42.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:50:42.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:50:42.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:50:42.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:50:21', tmtdew=8.73, humidity=55.15, cloud=0.0, wind=25.57, temperature=12.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:50:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:50:42.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:50:42.511 [DEBUG] [Thread-202167] [transport.py] [_log()] starting thread (client mode): 0xa57c1300
2026-02-15T09:50:42.511 [DEBUG] [Thread-202167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:50:42.525 [DEBUG] [Thread-202167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:50:42.525 [INFO] [Thread-202167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:50:42.532 [DEBUG] [Thread-202167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:50:42.533 [DEBUG] [Thread-202167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] client lang: <none>
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] server lang: <none>
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] kex follows: False
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:50:42.534 [DEBUG] [Thread-202167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:50:42.535 [DEBUG] [Thread-202167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:50:42.535 [DEBUG] [Thread-202167] [transport.py] [_log()] Compression: none
2026-02-15T09:50:42.535 [DEBUG] [Thread-202167] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:50:42.591 [DEBUG] [Thread-202167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:50:42.591 [DEBUG] [Thread-202167] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:50:42.592 [DEBUG] [Thread-202167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:50:42.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:50:42.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:50:42.648 [DEBUG] [Thread-202167] [transport.py] [_log()] userauth is OK
2026-02-15T09:50:42.648 [DEBUG] [Thread-202167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:50:42.648 [DEBUG] [Thread-202167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:50:42.648 [DEBUG] [Thread-202167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:50:42.648 [DEBUG] [Thread-202167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:50:42.666 [INFO] [Thread-202167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:50:42.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:50:42.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:50:43.488 [DEBUG] [Thread-202167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:50:43.488 [DEBUG] [Thread-202167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:50:43.536 [DEBUG] [Thread-202167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:50:43.536 [DEBUG] [Thread-202167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:50:43.545 [DEBUG] [Thread-202167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:50:43.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:50:43.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:50:43.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:50:43.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:50:43.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:50:43.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:50:43.579 [DEBUG] [Thread-202167] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:50:55.594 [DEBUG] [Thread-202169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:01.891 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:01.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:10.649 [DEBUG] [Thread-202170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:13.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:51:13.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:51:13.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:51:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 50, 56), 9.06, 53.85, 0.0, 28.09, 12.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:51:15.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:50:56
2026-02-15T09:51:15.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:51:16.043 [DEBUG] [Thread-202171] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-15T09:51:16.043 [DEBUG] [Thread-202171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:51:16.058 [DEBUG] [Thread-202171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:51:16.058 [INFO] [Thread-202171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:51:16.061 [DEBUG] [Thread-202171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] client lang: <none>
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] server lang: <none>
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] kex follows: False
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] Compression: none
2026-02-15T09:51:16.062 [DEBUG] [Thread-202171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:51:16.079 [DEBUG] [Thread-202171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:51:16.079 [DEBUG] [Thread-202171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:51:16.080 [DEBUG] [Thread-202171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:51:16.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:51:16.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:51:16.082 [DEBUG] [Thread-202171] [transport.py] [_log()] userauth is OK
2026-02-15T09:51:16.082 [DEBUG] [Thread-202171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:51:16.082 [DEBUG] [Thread-202171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:51:16.082 [DEBUG] [Thread-202171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:51:16.082 [DEBUG] [Thread-202171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:51:16.101 [INFO] [Thread-202171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:51:16.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:51:16.738 [DEBUG] [Thread-202171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:51:16.739 [DEBUG] [Thread-202171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:51:16.739 [DEBUG] [Thread-202171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:51:16.779 [DEBUG] [Thread-202171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:51:16.780 [DEBUG] [Thread-202171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:51:16.783 [DEBUG] [Thread-202171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:51:16.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:51:16.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:51:16.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:51:16.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:51:16.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:51:16.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:51:16.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:51:16.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:51:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:51:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.326836 -999.00  +12.00  23.92     58   +4.20 1 1 1 1 1   888    0 8.22 55.86 ----- 23.9 23.9 144.8 28.5 18.2 -27.9 17.2 -25.6 15.8 -26.5 16.8 -27.3
2026-02-15T09:51:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:51:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:51:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.326836
2026-02-15T09:51:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:51:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:51:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:51:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:51:16.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:51:16.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:50:56', tmtdew=9.06, humidity=53.85, cloud=0.0, wind=28.09, temperature=12.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:50:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:51:16.811 [DEBUG] [Thread-202171] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:51:16.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:51:16.908 [DEBUG] [Thread-202174] [transport.py] [_log()] starting thread (client mode): 0xa57b2860
2026-02-15T09:51:16.908 [DEBUG] [Thread-202174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:51:16.925 [DEBUG] [Thread-202174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:51:16.925 [INFO] [Thread-202174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] client lang: <none>
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] server lang: <none>
2026-02-15T09:51:16.933 [DEBUG] [Thread-202174] [transport.py] [_log()] kex follows: False
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] Compression: none
2026-02-15T09:51:16.934 [DEBUG] [Thread-202174] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:51:16.991 [DEBUG] [Thread-202174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:51:16.992 [DEBUG] [Thread-202174] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:51:16.993 [DEBUG] [Thread-202174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:51:16.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:51:16.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:51:17.048 [DEBUG] [Thread-202174] [transport.py] [_log()] userauth is OK
2026-02-15T09:51:17.048 [DEBUG] [Thread-202174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:51:17.048 [DEBUG] [Thread-202174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:51:17.048 [DEBUG] [Thread-202174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:51:17.048 [DEBUG] [Thread-202174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:51:17.067 [INFO] [Thread-202174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:51:17.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:51:17.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:51:17.935 [DEBUG] [Thread-202174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:51:17.935 [DEBUG] [Thread-202174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:51:17.989 [DEBUG] [Thread-202174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:51:17.989 [DEBUG] [Thread-202174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:51:17.999 [DEBUG] [Thread-202174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:51:18.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:51:18.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:51:18.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:51:18.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:51:18.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:51:18.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:51:18.035 [DEBUG] [Thread-202174] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:51:25.683 [DEBUG] [Thread-202176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:40.715 [DEBUG] [Thread-202177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:40.727 [DEBUG] [Thread-202178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:51:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:51:48.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:51:48.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:51:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 51, 31), 9.16, 53.44, 0.0, 28.76, 11.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:51:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:51:31
2026-02-15T09:51:50.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:51:50.539 [DEBUG] [Thread-202179] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-15T09:51:50.540 [DEBUG] [Thread-202179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:51:50.556 [DEBUG] [Thread-202179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:51:50.556 [INFO] [Thread-202179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:51:50.559 [DEBUG] [Thread-202179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] client lang: <none>
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] server lang: <none>
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] kex follows: False
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:51:50.560 [DEBUG] [Thread-202179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:51:50.561 [DEBUG] [Thread-202179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:51:50.561 [DEBUG] [Thread-202179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:51:50.561 [DEBUG] [Thread-202179] [transport.py] [_log()] Compression: none
2026-02-15T09:51:50.561 [DEBUG] [Thread-202179] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:51:50.577 [DEBUG] [Thread-202179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:51:50.577 [DEBUG] [Thread-202179] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:51:50.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:51:50.578 [DEBUG] [Thread-202179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:51:50.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:51:50.580 [DEBUG] [Thread-202179] [transport.py] [_log()] userauth is OK
2026-02-15T09:51:50.581 [DEBUG] [Thread-202179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:51:50.581 [DEBUG] [Thread-202179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:51:50.581 [DEBUG] [Thread-202179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:51:50.581 [DEBUG] [Thread-202179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:51:50.601 [INFO] [Thread-202179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:51:50.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:51:51.257 [DEBUG] [Thread-202179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:51:51.257 [DEBUG] [Thread-202179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:51:51.258 [DEBUG] [Thread-202179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:51:51.299 [DEBUG] [Thread-202179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:51:51.299 [DEBUG] [Thread-202179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:51:51.302 [DEBUG] [Thread-202179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:51:51.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:51:51.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:51:51.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:51:51.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:51:51.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:51:51.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:51:51.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:51:51.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:51:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:51:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.327531 -999.00  +12.10  16.90     57   +4.10 1 1 1 1 1   888    0 8.53 63.06 ----- 16.9 16.9 160.6 26.9 18.4 -28.2 17.3 -25.8 15.9 -25.8 16.8 -27.4
2026-02-15T09:51:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:51:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:51:51.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.327531
2026-02-15T09:51:51.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:51:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:51:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:51:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:51:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:51:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:51:31', tmtdew=9.16, humidity=53.44, cloud=0.0, wind=28.76, temperature=11.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:51:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:51:51.330 [DEBUG] [Thread-202179] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:51:51.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:51:51.429 [DEBUG] [Thread-202182] [transport.py] [_log()] starting thread (client mode): 0xa2d112d0
2026-02-15T09:51:51.429 [DEBUG] [Thread-202182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:51:51.444 [DEBUG] [Thread-202182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:51:51.444 [INFO] [Thread-202182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] client lang: <none>
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] server lang: <none>
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] kex follows: False
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] Compression: none
2026-02-15T09:51:51.452 [DEBUG] [Thread-202182] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:51:51.510 [DEBUG] [Thread-202182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:51:51.510 [DEBUG] [Thread-202182] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:51:51.510 [DEBUG] [Thread-202182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:51:51.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:51:51.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:51:51.567 [DEBUG] [Thread-202182] [transport.py] [_log()] userauth is OK
2026-02-15T09:51:51.568 [DEBUG] [Thread-202182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:51:51.568 [DEBUG] [Thread-202182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:51:51.568 [DEBUG] [Thread-202182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:51:51.568 [DEBUG] [Thread-202182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:51:51.586 [INFO] [Thread-202182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:51:51.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:51:51.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:51:52.415 [DEBUG] [Thread-202182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:51:52.415 [DEBUG] [Thread-202182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:51:52.463 [DEBUG] [Thread-202182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:51:52.464 [DEBUG] [Thread-202182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:51:52.472 [DEBUG] [Thread-202182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:51:52.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:51:52.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:51:52.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:51:52.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:51:52.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:51:52.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:51:52.508 [DEBUG] [Thread-202182] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:51:55.761 [DEBUG] [Thread-202184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:02.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:02.037 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:10.817 [DEBUG] [Thread-202185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:22.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:52:22.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:52:22.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:52:24.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 52, 8), 9.12, 53.57, 0.0, 29.55, 11.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:52:24.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:52:08
2026-02-15T09:52:25.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:52:25.176 [DEBUG] [Thread-202186] [transport.py] [_log()] starting thread (client mode): 0xa5759ea0
2026-02-15T09:52:25.176 [DEBUG] [Thread-202186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:52:25.196 [DEBUG] [Thread-202186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:52:25.196 [INFO] [Thread-202186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] client lang: <none>
2026-02-15T09:52:25.199 [DEBUG] [Thread-202186] [transport.py] [_log()] server lang: <none>
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] kex follows: False
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] Compression: none
2026-02-15T09:52:25.200 [DEBUG] [Thread-202186] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:52:25.217 [DEBUG] [Thread-202186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:52:25.218 [DEBUG] [Thread-202186] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:52:25.218 [DEBUG] [Thread-202186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:52:25.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:52:25.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:52:25.221 [DEBUG] [Thread-202186] [transport.py] [_log()] userauth is OK
2026-02-15T09:52:25.221 [DEBUG] [Thread-202186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:52:25.221 [DEBUG] [Thread-202186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:52:25.221 [DEBUG] [Thread-202186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:52:25.221 [DEBUG] [Thread-202186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:52:25.244 [INFO] [Thread-202186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:52:25.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:52:25.855 [DEBUG] [Thread-202188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:25.884 [DEBUG] [Thread-202186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:52:25.885 [DEBUG] [Thread-202186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:52:25.885 [DEBUG] [Thread-202186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:52:25.925 [DEBUG] [Thread-202186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:52:25.926 [DEBUG] [Thread-202186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:52:25.929 [DEBUG] [Thread-202186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:52:25.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:52:25.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:52:25.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:52:25.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:52:25.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:52:25.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:52:25.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:52:25.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:52:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:52:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.327878 -999.00  +12.30  15.26     58   +4.40 1 1 1 1 1   888    0 8.81 71.80 ----- 15.3 15.3 144.0 24.6 18.5 -27.3 17.3 -25.0 16.0 -25.4 16.9 -26.4
2026-02-15T09:52:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:52:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:52:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.327878
2026-02-15T09:52:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:52:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:52:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:52:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:52:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:52:25.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:52:08', tmtdew=9.12, humidity=53.57, cloud=0.0, wind=29.55, temperature=11.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:52:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:52:25.956 [DEBUG] [Thread-202186] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:52:26.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:52:26.060 [DEBUG] [Thread-202190] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-15T09:52:26.060 [DEBUG] [Thread-202190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:52:26.075 [DEBUG] [Thread-202190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:52:26.075 [INFO] [Thread-202190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:52:26.083 [DEBUG] [Thread-202190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] client lang: <none>
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] server lang: <none>
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] kex follows: False
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:52:26.084 [DEBUG] [Thread-202190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:52:26.085 [DEBUG] [Thread-202190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:52:26.085 [DEBUG] [Thread-202190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:52:26.085 [DEBUG] [Thread-202190] [transport.py] [_log()] Compression: none
2026-02-15T09:52:26.085 [DEBUG] [Thread-202190] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:52:26.140 [DEBUG] [Thread-202190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:52:26.141 [DEBUG] [Thread-202190] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:52:26.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:52:26.142 [DEBUG] [Thread-202190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:52:26.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:52:26.200 [DEBUG] [Thread-202190] [transport.py] [_log()] userauth is OK
2026-02-15T09:52:26.200 [DEBUG] [Thread-202190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:52:26.200 [DEBUG] [Thread-202190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:52:26.201 [DEBUG] [Thread-202190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:52:26.201 [DEBUG] [Thread-202190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:52:26.220 [INFO] [Thread-202190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:52:26.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:52:26.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:52:27.088 [DEBUG] [Thread-202190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:52:27.089 [DEBUG] [Thread-202190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:52:27.136 [DEBUG] [Thread-202190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:52:27.137 [DEBUG] [Thread-202190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:52:27.146 [DEBUG] [Thread-202190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:52:27.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:52:27.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:52:27.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:52:27.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:52:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:52:27.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:52:27.183 [DEBUG] [Thread-202190] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:52:40.758 [DEBUG] [Thread-202192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:40.893 [DEBUG] [Thread-202193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:55.949 [DEBUG] [Thread-202194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:52:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:52:57.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:52:57.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:52:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 52, 43), 9.05, 53.63, 0.0, 27.01, 11.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:52:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:52:43
2026-02-15T09:52:59.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:52:59.622 [DEBUG] [Thread-202195] [transport.py] [_log()] starting thread (client mode): 0xa81d7310
2026-02-15T09:52:59.623 [DEBUG] [Thread-202195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:52:59.642 [DEBUG] [Thread-202195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:52:59.642 [INFO] [Thread-202195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:52:59.645 [DEBUG] [Thread-202195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] client lang: <none>
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] server lang: <none>
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] kex follows: False
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:52:59.646 [DEBUG] [Thread-202195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:52:59.647 [DEBUG] [Thread-202195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:52:59.647 [DEBUG] [Thread-202195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:52:59.647 [DEBUG] [Thread-202195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:52:59.647 [DEBUG] [Thread-202195] [transport.py] [_log()] Compression: none
2026-02-15T09:52:59.647 [DEBUG] [Thread-202195] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:52:59.665 [DEBUG] [Thread-202195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:52:59.666 [DEBUG] [Thread-202195] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:52:59.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:52:59.668 [DEBUG] [Thread-202195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:52:59.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:52:59.670 [DEBUG] [Thread-202195] [transport.py] [_log()] userauth is OK
2026-02-15T09:52:59.670 [DEBUG] [Thread-202195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:52:59.671 [DEBUG] [Thread-202195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:52:59.671 [DEBUG] [Thread-202195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:52:59.671 [DEBUG] [Thread-202195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:52:59.684 [INFO] [Thread-202195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:52:59.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:53:00.318 [DEBUG] [Thread-202195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:53:00.318 [DEBUG] [Thread-202195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:53:00.319 [DEBUG] [Thread-202195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:53:00.359 [DEBUG] [Thread-202195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:53:00.360 [DEBUG] [Thread-202195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:53:00.363 [DEBUG] [Thread-202195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:53:00.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:53:00.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:53:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:53:00.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:53:00.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:53:00.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:53:00.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:53:00.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:53:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.328225 -999.00  +12.20  22.53     58   +4.20 1 1 1 1 1   888    0 8.95 72.39 ----- 22.5 22.5 147.6 28.4 18.4 -28.5 17.4 -26.3 16.0 -27.4 16.9 -28.0
2026-02-15T09:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.328225
2026-02-15T09:53:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:53:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:53:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:53:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:53:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:53:00.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:52:43', tmtdew=9.05, humidity=53.63, cloud=0.0, wind=27.01, temperature=11.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:52:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:53:00.391 [DEBUG] [Thread-202195] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:53:00.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:53:00.503 [DEBUG] [Thread-202198] [transport.py] [_log()] starting thread (client mode): 0xa81d54e0
2026-02-15T09:53:00.503 [DEBUG] [Thread-202198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:53:00.517 [DEBUG] [Thread-202198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:53:00.518 [INFO] [Thread-202198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:53:00.526 [DEBUG] [Thread-202198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:53:00.526 [DEBUG] [Thread-202198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:53:00.526 [DEBUG] [Thread-202198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] client lang: <none>
2026-02-15T09:53:00.527 [DEBUG] [Thread-202198] [transport.py] [_log()] server lang: <none>
2026-02-15T09:53:00.528 [DEBUG] [Thread-202198] [transport.py] [_log()] kex follows: False
2026-02-15T09:53:00.528 [DEBUG] [Thread-202198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:53:00.528 [DEBUG] [Thread-202198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:53:00.528 [DEBUG] [Thread-202198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:53:00.529 [DEBUG] [Thread-202198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:53:00.529 [DEBUG] [Thread-202198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:53:00.529 [DEBUG] [Thread-202198] [transport.py] [_log()] Compression: none
2026-02-15T09:53:00.529 [DEBUG] [Thread-202198] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:53:00.583 [DEBUG] [Thread-202198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:53:00.584 [DEBUG] [Thread-202198] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:53:00.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:53:00.585 [DEBUG] [Thread-202198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:53:00.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:53:00.640 [DEBUG] [Thread-202198] [transport.py] [_log()] userauth is OK
2026-02-15T09:53:00.640 [DEBUG] [Thread-202198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:53:00.640 [DEBUG] [Thread-202198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:53:00.640 [DEBUG] [Thread-202198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:53:00.640 [DEBUG] [Thread-202198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:53:00.658 [INFO] [Thread-202198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:53:00.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:53:00.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:53:01.485 [DEBUG] [Thread-202198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:53:01.485 [DEBUG] [Thread-202198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:53:01.553 [DEBUG] [Thread-202198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:53:01.553 [DEBUG] [Thread-202198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:53:01.581 [DEBUG] [Thread-202198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:53:01.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:53:01.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:53:01.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:53:01.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:53:01.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:53:01.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:53:01.695 [DEBUG] [Thread-202198] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:53:02.179 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:53:02.180 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:53:10.988 [DEBUG] [Thread-202200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:53:26.042 [DEBUG] [Thread-202201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:53:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:53:31.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:53:31.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:53:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 53, 18), 8.88, 54.28, 0.0, 24.69, 11.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:53:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:53:18
2026-02-15T09:53:33.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:53:34.109 [DEBUG] [Thread-202202] [transport.py] [_log()] starting thread (client mode): 0xa2d106d0
2026-02-15T09:53:34.109 [DEBUG] [Thread-202202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:53:34.129 [DEBUG] [Thread-202202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:53:34.129 [INFO] [Thread-202202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:53:34.133 [DEBUG] [Thread-202202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] client lang: <none>
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] server lang: <none>
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] kex follows: False
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] Compression: none
2026-02-15T09:53:34.134 [DEBUG] [Thread-202202] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:53:34.151 [DEBUG] [Thread-202202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:53:34.151 [DEBUG] [Thread-202202] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:53:34.152 [DEBUG] [Thread-202202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:53:34.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:53:34.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:53:34.153 [DEBUG] [Thread-202202] [transport.py] [_log()] userauth is OK
2026-02-15T09:53:34.154 [DEBUG] [Thread-202202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:53:34.154 [DEBUG] [Thread-202202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:53:34.154 [DEBUG] [Thread-202202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:53:34.154 [DEBUG] [Thread-202202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:53:34.172 [INFO] [Thread-202202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:53:34.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:53:34.820 [DEBUG] [Thread-202202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:53:34.820 [DEBUG] [Thread-202202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:53:34.820 [DEBUG] [Thread-202202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:53:34.861 [DEBUG] [Thread-202202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:53:34.861 [DEBUG] [Thread-202202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:53:34.864 [DEBUG] [Thread-202202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:53:34.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:53:34.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:53:34.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:53:34.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:53:34.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:53:34.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:53:34.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:53:34.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:53:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:53:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.328572 -999.00  +12.10  21.45     57   +3.90 1 1 1 1 1   888    0 8.92 75.63 ----- 21.4 21.4 137.2 26.5 18.5 -27.0 17.5 -26.5 16.1 -25.6 17.0 -26.3
2026-02-15T09:53:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:53:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:53:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.328572
2026-02-15T09:53:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:53:34.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:53:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:53:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:53:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:53:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:53:18', tmtdew=8.88, humidity=54.28, cloud=0.0, wind=24.69, temperature=11.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:53:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:53:34.891 [DEBUG] [Thread-202202] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:53:34.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:53:34.982 [DEBUG] [Thread-202205] [transport.py] [_log()] starting thread (client mode): 0xa2d112d0
2026-02-15T09:53:34.982 [DEBUG] [Thread-202205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:53:35.000 [DEBUG] [Thread-202205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:53:35.000 [INFO] [Thread-202205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:53:35.008 [DEBUG] [Thread-202205] [transport.py] [_log()] client lang: <none>
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] server lang: <none>
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] kex follows: False
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] Compression: none
2026-02-15T09:53:35.009 [DEBUG] [Thread-202205] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:53:35.067 [DEBUG] [Thread-202205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:53:35.068 [DEBUG] [Thread-202205] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:53:35.068 [DEBUG] [Thread-202205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:53:35.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:53:35.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:53:35.123 [DEBUG] [Thread-202205] [transport.py] [_log()] userauth is OK
2026-02-15T09:53:35.123 [DEBUG] [Thread-202205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:53:35.123 [DEBUG] [Thread-202205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:53:35.123 [DEBUG] [Thread-202205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:53:35.123 [DEBUG] [Thread-202205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:53:35.142 [INFO] [Thread-202205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:53:35.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:53:35.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:53:35.961 [DEBUG] [Thread-202205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:53:35.962 [DEBUG] [Thread-202205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:53:36.009 [DEBUG] [Thread-202205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:53:36.010 [DEBUG] [Thread-202205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:53:36.019 [DEBUG] [Thread-202205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:53:36.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:53:36.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:53:36.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:53:36.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:53:36.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:53:36.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:53:36.055 [DEBUG] [Thread-202205] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:53:40.795 [DEBUG] [Thread-202207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:53:41.079 [DEBUG] [Thread-202208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:53:56.132 [DEBUG] [Thread-202209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:02.328 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:02.329 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:06.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:54:06.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:54:06.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:54:08.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 53, 54), 9.31, 52.82, 0.0, 23.48, 12.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:54:08.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:53:54
2026-02-15T09:54:08.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:54:08.544 [DEBUG] [Thread-202210] [transport.py] [_log()] starting thread (client mode): 0xa5759240
2026-02-15T09:54:08.544 [DEBUG] [Thread-202210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:54:08.565 [DEBUG] [Thread-202210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:54:08.565 [INFO] [Thread-202210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:54:08.568 [DEBUG] [Thread-202210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:54:08.568 [DEBUG] [Thread-202210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] client lang: <none>
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] server lang: <none>
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] kex follows: False
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] Compression: none
2026-02-15T09:54:08.569 [DEBUG] [Thread-202210] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:54:08.585 [DEBUG] [Thread-202210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:54:08.586 [DEBUG] [Thread-202210] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:54:08.586 [DEBUG] [Thread-202210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:54:08.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:54:08.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:54:08.588 [DEBUG] [Thread-202210] [transport.py] [_log()] userauth is OK
2026-02-15T09:54:08.588 [DEBUG] [Thread-202210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:54:08.588 [DEBUG] [Thread-202210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:54:08.588 [DEBUG] [Thread-202210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:54:08.588 [DEBUG] [Thread-202210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:54:08.609 [INFO] [Thread-202210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:54:08.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:54:09.265 [DEBUG] [Thread-202210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:54:09.266 [DEBUG] [Thread-202210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:54:09.266 [DEBUG] [Thread-202210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:54:09.306 [DEBUG] [Thread-202210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:54:09.307 [DEBUG] [Thread-202210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:54:09.310 [DEBUG] [Thread-202210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:54:09.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:54:09.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:54:09.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:54:09.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:54:09.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:54:09.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:54:09.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:54:09.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.328920 -999.00  +12.00  21.61     57   +4.00 1 1 1 1 1   888    0 9.46 87.38 ----- 21.6 21.6 128.2 29.6 18.6 -27.7 17.5 -26.2 16.1 -27.0 17.0 -26.9
2026-02-15T09:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.328920
2026-02-15T09:54:09.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:54:09.337 [DEBUG] [Thread-202210] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:54:09.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:54:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:54:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:54:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:54:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:53:54', tmtdew=9.31, humidity=52.82, cloud=0.0, wind=23.48, temperature=12.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:53:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:54:09.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:54:09.436 [DEBUG] [Thread-202213] [transport.py] [_log()] starting thread (client mode): 0xa2dc0df0
2026-02-15T09:54:09.436 [DEBUG] [Thread-202213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:54:09.451 [DEBUG] [Thread-202213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:54:09.451 [INFO] [Thread-202213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:54:09.459 [DEBUG] [Thread-202213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:54:09.459 [DEBUG] [Thread-202213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:54:09.459 [DEBUG] [Thread-202213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] client lang: <none>
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] server lang: <none>
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] kex follows: False
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] Compression: none
2026-02-15T09:54:09.460 [DEBUG] [Thread-202213] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:54:09.520 [DEBUG] [Thread-202213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:54:09.520 [DEBUG] [Thread-202213] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:54:09.521 [DEBUG] [Thread-202213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:54:09.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:54:09.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:54:09.575 [DEBUG] [Thread-202213] [transport.py] [_log()] userauth is OK
2026-02-15T09:54:09.575 [DEBUG] [Thread-202213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:54:09.575 [DEBUG] [Thread-202213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:54:09.575 [DEBUG] [Thread-202213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:54:09.575 [DEBUG] [Thread-202213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:54:09.589 [INFO] [Thread-202213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:54:09.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:54:09.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:54:10.430 [DEBUG] [Thread-202213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:54:10.430 [DEBUG] [Thread-202213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:54:10.479 [DEBUG] [Thread-202213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:54:10.479 [DEBUG] [Thread-202213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:54:10.488 [DEBUG] [Thread-202213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:54:10.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:54:10.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:54:10.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:54:10.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:54:10.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:54:10.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:54:10.524 [DEBUG] [Thread-202213] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:54:11.168 [DEBUG] [Thread-202215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:26.222 [DEBUG] [Thread-202216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:40.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:54:40.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:54:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:54:40.829 [DEBUG] [Thread-202217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:41.257 [DEBUG] [Thread-202218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:54:42.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 54, 30), 9.37, 52.6, 0.0, 22.67, 12.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:54:42.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:54:30
2026-02-15T09:54:43.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:54:43.432 [DEBUG] [Thread-202219] [transport.py] [_log()] starting thread (client mode): 0xa81d5300
2026-02-15T09:54:43.432 [DEBUG] [Thread-202219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:54:43.453 [DEBUG] [Thread-202219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:54:43.453 [INFO] [Thread-202219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:54:43.456 [DEBUG] [Thread-202219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] client lang: <none>
2026-02-15T09:54:43.457 [DEBUG] [Thread-202219] [transport.py] [_log()] server lang: <none>
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] kex follows: False
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] Compression: none
2026-02-15T09:54:43.458 [DEBUG] [Thread-202219] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:54:43.475 [DEBUG] [Thread-202219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:54:43.476 [DEBUG] [Thread-202219] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:54:43.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:54:43.477 [DEBUG] [Thread-202219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:54:43.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:54:43.479 [DEBUG] [Thread-202219] [transport.py] [_log()] userauth is OK
2026-02-15T09:54:43.479 [DEBUG] [Thread-202219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:54:43.479 [DEBUG] [Thread-202219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:54:43.480 [DEBUG] [Thread-202219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:54:43.480 [DEBUG] [Thread-202219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:54:43.503 [INFO] [Thread-202219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:54:43.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:54:44.162 [DEBUG] [Thread-202219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:54:44.162 [DEBUG] [Thread-202219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:54:44.163 [DEBUG] [Thread-202219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:54:44.203 [DEBUG] [Thread-202219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:54:44.204 [DEBUG] [Thread-202219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:54:44.207 [DEBUG] [Thread-202219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:54:44.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:54:44.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:54:44.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:54:44.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:54:44.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:54:44.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:54:44.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:54:44.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:54:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:54:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.329267 -999.00  +12.10  20.58     57   +4.00 1 1 1 1 1   888    0 9.29 80.99 ----- 20.6 20.6 123.2 25.2 18.6 -27.1 17.7 -26.0 16.2 -25.7 17.2 -27.3
2026-02-15T09:54:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:54:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:54:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.329267
2026-02-15T09:54:44.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:54:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:54:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:54:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:54:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:54:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:54:30', tmtdew=9.37, humidity=52.6, cloud=0.0, wind=22.67, temperature=12.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:54:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:54:44.234 [DEBUG] [Thread-202219] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:54:44.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:54:44.330 [DEBUG] [Thread-202222] [transport.py] [_log()] starting thread (client mode): 0xa575b7c0
2026-02-15T09:54:44.330 [DEBUG] [Thread-202222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:54:44.345 [DEBUG] [Thread-202222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:54:44.345 [INFO] [Thread-202222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] client lang: <none>
2026-02-15T09:54:44.352 [DEBUG] [Thread-202222] [transport.py] [_log()] server lang: <none>
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] kex follows: False
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] Compression: none
2026-02-15T09:54:44.353 [DEBUG] [Thread-202222] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:54:44.411 [DEBUG] [Thread-202222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:54:44.412 [DEBUG] [Thread-202222] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:54:44.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:54:44.413 [DEBUG] [Thread-202222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:54:44.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:54:44.468 [DEBUG] [Thread-202222] [transport.py] [_log()] userauth is OK
2026-02-15T09:54:44.468 [DEBUG] [Thread-202222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:54:44.468 [DEBUG] [Thread-202222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:54:44.469 [DEBUG] [Thread-202222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:54:44.469 [DEBUG] [Thread-202222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:54:44.488 [INFO] [Thread-202222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:54:44.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:54:44.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:54:45.298 [DEBUG] [Thread-202222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:54:45.298 [DEBUG] [Thread-202222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:54:45.347 [DEBUG] [Thread-202222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:54:45.347 [DEBUG] [Thread-202222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:54:45.357 [DEBUG] [Thread-202222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:54:45.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:54:45.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:54:45.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:54:45.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:54:45.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:54:45.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:54:45.402 [DEBUG] [Thread-202222] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:54:56.295 [DEBUG] [Thread-202224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:02.470 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:02.471 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:11.346 [DEBUG] [Thread-202225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:15.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:55:15.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:55:15.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:55:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 55, 5), 9.36, 52.65, 0.0, 24.03, 12.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:55:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:55:05
2026-02-15T09:55:17.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:55:17.777 [DEBUG] [Thread-202226] [transport.py] [_log()] starting thread (client mode): 0xa81d7310
2026-02-15T09:55:17.777 [DEBUG] [Thread-202226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:55:17.798 [DEBUG] [Thread-202226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:55:17.798 [INFO] [Thread-202226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:55:17.801 [DEBUG] [Thread-202226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:55:17.801 [DEBUG] [Thread-202226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:55:17.801 [DEBUG] [Thread-202226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] client lang: <none>
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] server lang: <none>
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] kex follows: False
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:55:17.802 [DEBUG] [Thread-202226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:55:17.803 [DEBUG] [Thread-202226] [transport.py] [_log()] Compression: none
2026-02-15T09:55:17.803 [DEBUG] [Thread-202226] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:55:17.821 [DEBUG] [Thread-202226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:55:17.822 [DEBUG] [Thread-202226] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:55:17.822 [DEBUG] [Thread-202226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:55:17.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:55:17.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:55:17.825 [DEBUG] [Thread-202226] [transport.py] [_log()] userauth is OK
2026-02-15T09:55:17.825 [DEBUG] [Thread-202226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:55:17.825 [DEBUG] [Thread-202226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:55:17.825 [DEBUG] [Thread-202226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:55:17.825 [DEBUG] [Thread-202226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:55:17.850 [INFO] [Thread-202226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:55:17.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:55:18.415 [DEBUG] [Thread-202226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:55:18.416 [DEBUG] [Thread-202226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:55:18.416 [DEBUG] [Thread-202226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:55:18.456 [DEBUG] [Thread-202226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:55:18.456 [DEBUG] [Thread-202226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:55:18.459 [DEBUG] [Thread-202226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:55:18.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:55:18.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:55:18.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:55:18.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:55:18.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:55:18.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:55:18.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:55:18.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:55:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:55:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.329614 -999.00  +12.20  28.68     58   +4.30 1 1 1 1 1   888    0 9.33 83.42 ----- 28.7 28.7 138.8 32.5 18.6 -27.8 17.7 -26.3 16.2 -25.8 17.1 -28.0
2026-02-15T09:55:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:55:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:55:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.329614
2026-02-15T09:55:18.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:55:18.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:55:18.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:55:18.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:55:18.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:55:18.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:55:05', tmtdew=9.36, humidity=52.65, cloud=0.0, wind=24.03, temperature=12.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:54:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:55:18.476 [DEBUG] [Thread-202226] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:55:18.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:55:18.571 [DEBUG] [Thread-202229] [transport.py] [_log()] starting thread (client mode): 0xa57e0dc0
2026-02-15T09:55:18.571 [DEBUG] [Thread-202229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:55:18.585 [DEBUG] [Thread-202229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:55:18.586 [INFO] [Thread-202229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:55:18.593 [DEBUG] [Thread-202229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:55:18.593 [DEBUG] [Thread-202229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] client lang: <none>
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] server lang: <none>
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] kex follows: False
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] Compression: none
2026-02-15T09:55:18.594 [DEBUG] [Thread-202229] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:55:18.652 [DEBUG] [Thread-202229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:55:18.652 [DEBUG] [Thread-202229] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:55:18.653 [DEBUG] [Thread-202229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:55:18.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:55:18.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:55:18.707 [DEBUG] [Thread-202229] [transport.py] [_log()] userauth is OK
2026-02-15T09:55:18.708 [DEBUG] [Thread-202229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:55:18.708 [DEBUG] [Thread-202229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:55:18.708 [DEBUG] [Thread-202229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:55:18.708 [DEBUG] [Thread-202229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:55:18.733 [INFO] [Thread-202229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:55:18.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:55:18.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:55:19.601 [DEBUG] [Thread-202229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:55:19.602 [DEBUG] [Thread-202229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:55:19.649 [DEBUG] [Thread-202229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:55:19.650 [DEBUG] [Thread-202229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:55:19.659 [DEBUG] [Thread-202229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:55:19.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:55:19.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:55:19.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:55:19.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:55:19.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:55:19.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:55:19.696 [DEBUG] [Thread-202229] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:55:26.385 [DEBUG] [Thread-202231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:40.861 [DEBUG] [Thread-202232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:41.448 [DEBUG] [Thread-202233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:55:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:55:49.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:55:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:55:51.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 55, 41), 9.79, 51.37, 0.0, 26.89, 13.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:55:51.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:55:41
2026-02-15T09:55:51.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:55:52.147 [DEBUG] [Thread-202234] [transport.py] [_log()] starting thread (client mode): 0xa57e2f50
2026-02-15T09:55:52.147 [DEBUG] [Thread-202234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:55:52.167 [DEBUG] [Thread-202234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:55:52.167 [INFO] [Thread-202234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:55:52.168 [DEBUG] [Thread-202234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:55:52.168 [DEBUG] [Thread-202234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:55:52.168 [DEBUG] [Thread-202234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] client lang: <none>
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] server lang: <none>
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] kex follows: False
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] Compression: none
2026-02-15T09:55:52.169 [DEBUG] [Thread-202234] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:55:52.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:55:52.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] userauth is OK
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:55:52.177 [DEBUG] [Thread-202234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:55:52.187 [INFO] [Thread-202234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:55:52.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:55:52.796 [DEBUG] [Thread-202234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:55:52.796 [DEBUG] [Thread-202234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:55:52.797 [DEBUG] [Thread-202234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:55:52.837 [DEBUG] [Thread-202234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:55:52.838 [DEBUG] [Thread-202234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:55:52.842 [DEBUG] [Thread-202234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:55:52.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:55:52.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:55:52.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:55:52.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:55:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:55:52.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:55:52.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:55:52.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:55:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:55:52.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.330308 -999.00  +12.10  26.77     58   +4.10 1 1 1 1 1   888    0 9.82 94.09 ----- 26.8 26.8 142.6 30.0 18.7 -28.6 17.7 -27.0 16.3 -25.7 17.1 -27.9
2026-02-15T09:55:52.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:55:52.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:55:52.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.330308
2026-02-15T09:55:52.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:55:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:55:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:55:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:55:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:55:52.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:55:41', tmtdew=9.79, humidity=51.37, cloud=0.0, wind=26.89, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:55:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:55:52.859 [DEBUG] [Thread-202234] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:55:52.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:55:52.961 [DEBUG] [Thread-202237] [transport.py] [_log()] starting thread (client mode): 0xa81d54e0
2026-02-15T09:55:52.961 [DEBUG] [Thread-202237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:55:52.976 [DEBUG] [Thread-202237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:55:52.976 [INFO] [Thread-202237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] client lang: <none>
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] server lang: <none>
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] kex follows: False
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] Compression: none
2026-02-15T09:55:52.984 [DEBUG] [Thread-202237] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:55:53.048 [DEBUG] [Thread-202237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:55:53.049 [DEBUG] [Thread-202237] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:55:53.050 [DEBUG] [Thread-202237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:55:53.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:55:53.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:55:53.111 [DEBUG] [Thread-202237] [transport.py] [_log()] userauth is OK
2026-02-15T09:55:53.111 [DEBUG] [Thread-202237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:55:53.112 [DEBUG] [Thread-202237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:55:53.112 [DEBUG] [Thread-202237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:55:53.112 [DEBUG] [Thread-202237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:55:53.130 [INFO] [Thread-202237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:55:53.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:55:53.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:55:53.948 [DEBUG] [Thread-202237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:55:53.949 [DEBUG] [Thread-202237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:55:53.996 [DEBUG] [Thread-202237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:55:53.997 [DEBUG] [Thread-202237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:55:54.006 [DEBUG] [Thread-202237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:55:54.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:55:54.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:55:54.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:55:54.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:55:54.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:55:54.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:55:54.042 [DEBUG] [Thread-202237] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:55:56.486 [DEBUG] [Thread-202239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:02.610 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:02.611 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:11.546 [DEBUG] [Thread-202240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:56:24.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:56:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:56:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 56, 17), 9.09, 53.7, 0.0, 23.13, 11.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:56:26.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:56:17
2026-02-15T09:56:26.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:56:26.590 [DEBUG] [Thread-202241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:26.631 [DEBUG] [Thread-202242] [transport.py] [_log()] starting thread (client mode): 0xa5741ae0
2026-02-15T09:56:26.631 [DEBUG] [Thread-202242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:56:26.644 [DEBUG] [Thread-202242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:56:26.644 [INFO] [Thread-202242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:56:26.645 [DEBUG] [Thread-202242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:56:26.645 [DEBUG] [Thread-202242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] client lang: <none>
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] server lang: <none>
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] kex follows: False
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] Compression: none
2026-02-15T09:56:26.646 [DEBUG] [Thread-202242] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:56:26.655 [DEBUG] [Thread-202242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:56:26.656 [DEBUG] [Thread-202242] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:56:26.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:56:26.657 [DEBUG] [Thread-202242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:56:26.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:56:26.658 [DEBUG] [Thread-202242] [transport.py] [_log()] userauth is OK
2026-02-15T09:56:26.658 [DEBUG] [Thread-202242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:56:26.659 [DEBUG] [Thread-202242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:56:26.659 [DEBUG] [Thread-202242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:56:26.659 [DEBUG] [Thread-202242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:56:26.687 [INFO] [Thread-202242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:56:26.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:56:27.273 [DEBUG] [Thread-202242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:56:27.274 [DEBUG] [Thread-202242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:56:27.274 [DEBUG] [Thread-202242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:56:27.314 [DEBUG] [Thread-202242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:56:27.315 [DEBUG] [Thread-202242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:56:27.318 [DEBUG] [Thread-202242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:56:27.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:56:27.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:56:27.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:56:27.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:56:27.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:56:27.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:56:27.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:56:27.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:56:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:56:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.330656 -999.00  +12.20  19.47     58   +4.20 1 1 1 1 1   888    0 9.82 96.29 ----- 19.5 19.5 139.2 26.2 18.8 -28.1 17.8 -26.3 16.4 -25.6 17.3 -26.9
2026-02-15T09:56:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:56:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:56:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.330656
2026-02-15T09:56:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:56:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:56:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:56:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:56:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:56:27.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:56:17', tmtdew=9.09, humidity=53.7, cloud=0.0, wind=23.13, temperature=11.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:56:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:56:27.339 [DEBUG] [Thread-202242] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:56:27.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:56:27.436 [DEBUG] [Thread-202245] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-15T09:56:27.436 [DEBUG] [Thread-202245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:56:27.451 [DEBUG] [Thread-202245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:56:27.451 [INFO] [Thread-202245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:56:27.458 [DEBUG] [Thread-202245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:56:27.459 [DEBUG] [Thread-202245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:56:27.459 [DEBUG] [Thread-202245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:56:27.459 [DEBUG] [Thread-202245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:56:27.459 [DEBUG] [Thread-202245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:56:27.459 [DEBUG] [Thread-202245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:56:27.459 [DEBUG] [Thread-202245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] client lang: <none>
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] server lang: <none>
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] kex follows: False
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:56:27.460 [DEBUG] [Thread-202245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:56:27.461 [DEBUG] [Thread-202245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:56:27.461 [DEBUG] [Thread-202245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:56:27.461 [DEBUG] [Thread-202245] [transport.py] [_log()] Compression: none
2026-02-15T09:56:27.461 [DEBUG] [Thread-202245] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:56:27.516 [DEBUG] [Thread-202245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:56:27.517 [DEBUG] [Thread-202245] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:56:27.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:56:27.519 [DEBUG] [Thread-202245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:56:27.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:56:27.576 [DEBUG] [Thread-202245] [transport.py] [_log()] userauth is OK
2026-02-15T09:56:27.576 [DEBUG] [Thread-202245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:56:27.577 [DEBUG] [Thread-202245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:56:27.577 [DEBUG] [Thread-202245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:56:27.577 [DEBUG] [Thread-202245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:56:27.598 [INFO] [Thread-202245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:56:27.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:56:27.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:56:28.409 [DEBUG] [Thread-202245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:56:28.409 [DEBUG] [Thread-202245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:56:28.457 [DEBUG] [Thread-202245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:56:28.457 [DEBUG] [Thread-202245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:56:28.467 [DEBUG] [Thread-202245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:56:28.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:56:28.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:56:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:56:28.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:56:28.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:56:28.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:56:28.503 [DEBUG] [Thread-202245] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:56:40.902 [DEBUG] [Thread-202247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:41.623 [DEBUG] [Thread-202248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:56.676 [DEBUG] [Thread-202249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:56:58.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:56:58.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:56:58.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:57:00.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 56, 52), 8.96, 54.13, 0.0, 22.21, 11.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:57:00.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:56:52
2026-02-15T09:57:00.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:57:00.806 [DEBUG] [Thread-202250] [transport.py] [_log()] starting thread (client mode): 0xa57400a0
2026-02-15T09:57:00.806 [DEBUG] [Thread-202250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:57:00.829 [DEBUG] [Thread-202250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:57:00.829 [INFO] [Thread-202250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:57:00.832 [DEBUG] [Thread-202250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] client lang: <none>
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] server lang: <none>
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] kex follows: False
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] Compression: none
2026-02-15T09:57:00.833 [DEBUG] [Thread-202250] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:57:00.850 [DEBUG] [Thread-202250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:57:00.851 [DEBUG] [Thread-202250] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:57:00.851 [DEBUG] [Thread-202250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:57:00.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:57:00.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:57:00.853 [DEBUG] [Thread-202250] [transport.py] [_log()] userauth is OK
2026-02-15T09:57:00.853 [DEBUG] [Thread-202250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:57:00.854 [DEBUG] [Thread-202250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:57:00.854 [DEBUG] [Thread-202250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:57:00.854 [DEBUG] [Thread-202250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:57:00.872 [INFO] [Thread-202250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:57:00.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:57:01.453 [DEBUG] [Thread-202250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:57:01.454 [DEBUG] [Thread-202250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:57:01.454 [DEBUG] [Thread-202250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:57:01.494 [DEBUG] [Thread-202250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:57:01.494 [DEBUG] [Thread-202250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:57:01.496 [DEBUG] [Thread-202250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:57:01.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:57:01.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:57:01.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:57:01.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:57:01.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:57:01.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:57:01.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:57:01.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:57:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:57:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.331003 -999.00  +12.20  17.31     57   +4.10 1 1 1 1 1   888    0 10.51 118.66 ----- 17.3 17.3 143.8 27.4 18.9 -28.0 17.9 -26.6 16.4 -25.0 17.2 -27.9
2026-02-15T09:57:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:57:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:57:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.331003
2026-02-15T09:57:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:57:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:57:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:57:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:57:01.516 [DEBUG] [Thread-202250] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:57:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:57:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:56:52', tmtdew=8.96, humidity=54.13, cloud=0.0, wind=22.21, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:56:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:57:01.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:57:01.610 [DEBUG] [Thread-202253] [transport.py] [_log()] starting thread (client mode): 0xa57436d0
2026-02-15T09:57:01.610 [DEBUG] [Thread-202253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:57:01.625 [DEBUG] [Thread-202253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:57:01.625 [INFO] [Thread-202253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:57:01.632 [DEBUG] [Thread-202253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:57:01.632 [DEBUG] [Thread-202253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:57:01.632 [DEBUG] [Thread-202253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:57:01.632 [DEBUG] [Thread-202253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:01.632 [DEBUG] [Thread-202253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] client lang: <none>
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] server lang: <none>
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] kex follows: False
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] Compression: none
2026-02-15T09:57:01.633 [DEBUG] [Thread-202253] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:57:01.691 [DEBUG] [Thread-202253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:57:01.691 [DEBUG] [Thread-202253] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:57:01.692 [DEBUG] [Thread-202253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:57:01.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:57:01.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:57:01.749 [DEBUG] [Thread-202253] [transport.py] [_log()] userauth is OK
2026-02-15T09:57:01.750 [DEBUG] [Thread-202253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:57:01.750 [DEBUG] [Thread-202253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:57:01.750 [DEBUG] [Thread-202253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:57:01.750 [DEBUG] [Thread-202253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:57:01.764 [INFO] [Thread-202253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:57:01.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:57:01.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:57:02.642 [DEBUG] [Thread-202253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:57:02.642 [DEBUG] [Thread-202253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:57:02.701 [DEBUG] [Thread-202253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:57:02.701 [DEBUG] [Thread-202253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:57:02.721 [DEBUG] [Thread-202253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:57:02.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:57:02.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:57:02.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:57:02.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:57:02.754 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:57:02.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:57:02.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:57:02.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:57:02.772 [DEBUG] [Thread-202253] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:57:11.706 [DEBUG] [Thread-202255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:57:26.766 [DEBUG] [Thread-202256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:57:32.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:57:32.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:57:32.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:57:34.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 56, 52), 8.96, 54.13, 0.0, 22.21, 11.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:57:34.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:56:52
2026-02-15T09:57:35.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:57:35.163 [DEBUG] [Thread-202257] [transport.py] [_log()] starting thread (client mode): 0xa57411b0
2026-02-15T09:57:35.163 [DEBUG] [Thread-202257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:57:35.179 [DEBUG] [Thread-202257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:57:35.179 [INFO] [Thread-202257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] client lang: <none>
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] server lang: <none>
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] kex follows: False
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] Compression: none
2026-02-15T09:57:35.182 [DEBUG] [Thread-202257] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:57:35.198 [DEBUG] [Thread-202257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:57:35.198 [DEBUG] [Thread-202257] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:57:35.198 [DEBUG] [Thread-202257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:57:35.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:57:35.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:57:35.199 [DEBUG] [Thread-202257] [transport.py] [_log()] userauth is OK
2026-02-15T09:57:35.199 [DEBUG] [Thread-202257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:57:35.199 [DEBUG] [Thread-202257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:57:35.199 [DEBUG] [Thread-202257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:57:35.199 [DEBUG] [Thread-202257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:57:35.213 [INFO] [Thread-202257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:57:35.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:57:35.771 [DEBUG] [Thread-202257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:57:35.771 [DEBUG] [Thread-202257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:57:35.771 [DEBUG] [Thread-202257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:57:35.812 [DEBUG] [Thread-202257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:57:35.812 [DEBUG] [Thread-202257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:57:35.814 [DEBUG] [Thread-202257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:57:35.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:57:35.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:57:35.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:57:35.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:57:35.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:57:35.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:57:35.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:57:35.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.331350 -999.00  +12.20  21.42     58   +4.40 1 1 1 1 1   888    0 10.89 127.20 ----- 21.4 21.4 143.8 24.8 18.9 -27.4 17.9 -26.3 16.5 -26.5 17.3 -27.8
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.331350
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:57:35.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:56:52', tmtdew=8.96, humidity=54.13, cloud=0.0, wind=22.21, temperature=11.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:57:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:57:35.836 [DEBUG] [Thread-202257] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:57:35.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:57:35.920 [DEBUG] [Thread-202260] [transport.py] [_log()] starting thread (client mode): 0xa57402b0
2026-02-15T09:57:35.920 [DEBUG] [Thread-202260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:57:35.935 [DEBUG] [Thread-202260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:57:35.935 [INFO] [Thread-202260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:57:35.943 [DEBUG] [Thread-202260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:57:35.943 [DEBUG] [Thread-202260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:57:35.943 [DEBUG] [Thread-202260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] client lang: <none>
2026-02-15T09:57:35.944 [DEBUG] [Thread-202260] [transport.py] [_log()] server lang: <none>
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] kex follows: False
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:57:35.945 [DEBUG] [Thread-202260] [transport.py] [_log()] Compression: none
2026-02-15T09:57:35.946 [DEBUG] [Thread-202260] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:57:36.001 [DEBUG] [Thread-202260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:57:36.002 [DEBUG] [Thread-202260] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:57:36.003 [DEBUG] [Thread-202260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:57:36.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:57:36.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:57:36.057 [DEBUG] [Thread-202260] [transport.py] [_log()] userauth is OK
2026-02-15T09:57:36.058 [DEBUG] [Thread-202260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:57:36.058 [DEBUG] [Thread-202260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:57:36.058 [DEBUG] [Thread-202260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:57:36.058 [DEBUG] [Thread-202260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:57:36.077 [INFO] [Thread-202260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:57:36.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:57:36.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:57:36.944 [DEBUG] [Thread-202260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:57:36.944 [DEBUG] [Thread-202260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:57:36.991 [DEBUG] [Thread-202260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:57:36.992 [DEBUG] [Thread-202260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:57:37.001 [DEBUG] [Thread-202260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:57:37.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:57:37.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:57:37.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:57:37.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:57:37.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:57:37.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:57:37.038 [DEBUG] [Thread-202260] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:57:40.935 [DEBUG] [Thread-202262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:57:41.799 [DEBUG] [Thread-202263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:57:56.838 [DEBUG] [Thread-202264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:02.894 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:02.895 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:07.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:58:07.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:58:07.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:58:09.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 57, 27), 9.03, 53.92, 0.0, 25.28, 11.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:58:09.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:57:27
2026-02-15T09:58:09.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:58:09.654 [DEBUG] [Thread-202265] [transport.py] [_log()] starting thread (client mode): 0xa2d11120
2026-02-15T09:58:09.654 [DEBUG] [Thread-202265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:58:09.677 [DEBUG] [Thread-202265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:58:09.678 [INFO] [Thread-202265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:58:09.679 [DEBUG] [Thread-202265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:58:09.679 [DEBUG] [Thread-202265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:58:09.679 [DEBUG] [Thread-202265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] client lang: <none>
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] server lang: <none>
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] kex follows: False
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:58:09.680 [DEBUG] [Thread-202265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:58:09.681 [DEBUG] [Thread-202265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:58:09.681 [DEBUG] [Thread-202265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:58:09.681 [DEBUG] [Thread-202265] [transport.py] [_log()] Compression: none
2026-02-15T09:58:09.681 [DEBUG] [Thread-202265] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:58:09.692 [DEBUG] [Thread-202265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:58:09.693 [DEBUG] [Thread-202265] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:58:09.694 [DEBUG] [Thread-202265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:58:09.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:58:09.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:58:09.697 [DEBUG] [Thread-202265] [transport.py] [_log()] userauth is OK
2026-02-15T09:58:09.697 [DEBUG] [Thread-202265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:58:09.697 [DEBUG] [Thread-202265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:58:09.697 [DEBUG] [Thread-202265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:58:09.697 [DEBUG] [Thread-202265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:58:09.714 [INFO] [Thread-202265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:58:09.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:58:10.322 [DEBUG] [Thread-202265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:58:10.322 [DEBUG] [Thread-202265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:58:10.322 [DEBUG] [Thread-202265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:58:10.362 [DEBUG] [Thread-202265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:58:10.363 [DEBUG] [Thread-202265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:58:10.366 [DEBUG] [Thread-202265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:58:10.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:58:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:58:10.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:58:10.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:58:10.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:58:10.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:58:10.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:58:10.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:58:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:58:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.331697 -999.00  +12.30  16.19     59   +4.50 1 1 1 1 1   888    0 11.42 147.19 ----- 16.2 16.2 152.9 23.4 18.9 -27.7 18.0 -25.3 16.5 -24.7 17.4 -26.3
2026-02-15T09:58:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:58:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:58:10.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.331697
2026-02-15T09:58:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:58:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:58:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:58:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:58:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:58:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:57:27', tmtdew=9.03, humidity=53.92, cloud=0.0, wind=25.28, temperature=11.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:57:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:58:10.385 [DEBUG] [Thread-202265] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:58:10.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:58:10.500 [DEBUG] [Thread-202268] [transport.py] [_log()] starting thread (client mode): 0xa2d119c0
2026-02-15T09:58:10.500 [DEBUG] [Thread-202268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:58:10.528 [DEBUG] [Thread-202268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:58:10.529 [INFO] [Thread-202268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:58:10.550 [DEBUG] [Thread-202268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:58:10.550 [DEBUG] [Thread-202268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] client lang: <none>
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] server lang: <none>
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] kex follows: False
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:58:10.551 [DEBUG] [Thread-202268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:58:10.552 [DEBUG] [Thread-202268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:58:10.552 [DEBUG] [Thread-202268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:58:10.552 [DEBUG] [Thread-202268] [transport.py] [_log()] Compression: none
2026-02-15T09:58:10.552 [DEBUG] [Thread-202268] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:58:10.622 [DEBUG] [Thread-202268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:58:10.623 [DEBUG] [Thread-202268] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:58:10.623 [DEBUG] [Thread-202268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:58:10.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:58:10.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:58:10.707 [DEBUG] [Thread-202268] [transport.py] [_log()] userauth is OK
2026-02-15T09:58:10.707 [DEBUG] [Thread-202268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:58:10.707 [DEBUG] [Thread-202268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:58:10.707 [DEBUG] [Thread-202268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:58:10.707 [DEBUG] [Thread-202268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:58:10.743 [INFO] [Thread-202268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:58:10.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:58:10.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:58:11.533 [DEBUG] [Thread-202268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:58:11.534 [DEBUG] [Thread-202268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:58:11.591 [DEBUG] [Thread-202268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:58:11.592 [DEBUG] [Thread-202268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:58:11.612 [DEBUG] [Thread-202268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:58:11.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:58:11.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:58:11.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:58:11.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:58:11.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:58:11.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:58:11.690 [DEBUG] [Thread-202268] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:58:11.875 [DEBUG] [Thread-202270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:26.928 [DEBUG] [Thread-202271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:40.987 [DEBUG] [Thread-202272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:41.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:58:41.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:58:41.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:58:41.964 [DEBUG] [Thread-202273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:58:44.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 58, 2), 9.2, 53.3, 0.0, 24.63, 11.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:58:44.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:58:02
2026-02-15T09:58:44.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:58:45.111 [DEBUG] [Thread-202274] [transport.py] [_log()] starting thread (client mode): 0xa2d12e90
2026-02-15T09:58:45.111 [DEBUG] [Thread-202274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:58:45.129 [DEBUG] [Thread-202274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:58:45.129 [INFO] [Thread-202274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] client lang: <none>
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] server lang: <none>
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] kex follows: False
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] Compression: none
2026-02-15T09:58:45.132 [DEBUG] [Thread-202274] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:58:45.145 [DEBUG] [Thread-202274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:58:45.145 [DEBUG] [Thread-202274] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:58:45.146 [DEBUG] [Thread-202274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:58:45.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:58:45.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:58:45.148 [DEBUG] [Thread-202274] [transport.py] [_log()] userauth is OK
2026-02-15T09:58:45.148 [DEBUG] [Thread-202274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:58:45.148 [DEBUG] [Thread-202274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:58:45.148 [DEBUG] [Thread-202274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:58:45.148 [DEBUG] [Thread-202274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:58:45.175 [INFO] [Thread-202274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:58:45.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:58:45.832 [DEBUG] [Thread-202274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:58:45.833 [DEBUG] [Thread-202274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:58:45.833 [DEBUG] [Thread-202274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:58:45.873 [DEBUG] [Thread-202274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:58:45.874 [DEBUG] [Thread-202274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:58:45.877 [DEBUG] [Thread-202274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:58:45.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:58:45.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:58:45.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:58:45.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:58:45.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:58:45.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:58:45.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:58:45.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:58:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:58:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.332045 -999.00  +12.50  19.43     58   +4.50 1 1 1 1 1   888    0 11.22 138.09 ----- 19.4 19.4 155.0 30.9 19.0 -26.7 18.0 -25.7 16.6 -25.8 17.4 -25.9
2026-02-15T09:58:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:58:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:58:45.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.332045
2026-02-15T09:58:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:58:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:58:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:58:45.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:58:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:58:45.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:58:02', tmtdew=9.2, humidity=53.3, cloud=0.0, wind=24.63, temperature=11.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:58:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:58:45.906 [DEBUG] [Thread-202274] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:58:45.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:58:45.995 [DEBUG] [Thread-202277] [transport.py] [_log()] starting thread (client mode): 0xa5741f00
2026-02-15T09:58:45.995 [DEBUG] [Thread-202277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:58:46.009 [DEBUG] [Thread-202277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:58:46.010 [INFO] [Thread-202277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:58:46.017 [DEBUG] [Thread-202277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] client lang: <none>
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] server lang: <none>
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] kex follows: False
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:58:46.018 [DEBUG] [Thread-202277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:58:46.019 [DEBUG] [Thread-202277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:58:46.019 [DEBUG] [Thread-202277] [transport.py] [_log()] Compression: none
2026-02-15T09:58:46.019 [DEBUG] [Thread-202277] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:58:46.078 [DEBUG] [Thread-202277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:58:46.078 [DEBUG] [Thread-202277] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:58:46.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:58:46.079 [DEBUG] [Thread-202277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:58:46.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:58:46.133 [DEBUG] [Thread-202277] [transport.py] [_log()] userauth is OK
2026-02-15T09:58:46.133 [DEBUG] [Thread-202277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:58:46.133 [DEBUG] [Thread-202277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:58:46.133 [DEBUG] [Thread-202277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:58:46.133 [DEBUG] [Thread-202277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:58:46.150 [INFO] [Thread-202277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:58:46.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:58:46.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:58:46.994 [DEBUG] [Thread-202277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:58:46.994 [DEBUG] [Thread-202277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:58:47.043 [DEBUG] [Thread-202277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:58:47.043 [DEBUG] [Thread-202277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:58:47.052 [DEBUG] [Thread-202277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:58:47.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:58:47.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:58:47.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:58:47.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:58:47.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:58:47.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:58:47.087 [DEBUG] [Thread-202277] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:58:57.002 [DEBUG] [Thread-202279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:03.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:03.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:12.056 [DEBUG] [Thread-202280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:17.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:59:17.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:59:17.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:59:19.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 58, 39), 9.62, 51.87, 0.0, 23.46, 12.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:59:19.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:58:39
2026-02-15T09:59:19.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:59:20.052 [DEBUG] [Thread-202281] [transport.py] [_log()] starting thread (client mode): 0xa57e0d90
2026-02-15T09:59:20.052 [DEBUG] [Thread-202281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:59:20.072 [DEBUG] [Thread-202281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:59:20.072 [INFO] [Thread-202281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:59:20.075 [DEBUG] [Thread-202281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:59:20.075 [DEBUG] [Thread-202281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:59:20.075 [DEBUG] [Thread-202281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:59:20.075 [DEBUG] [Thread-202281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:20.075 [DEBUG] [Thread-202281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] client lang: <none>
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] server lang: <none>
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] kex follows: False
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] Compression: none
2026-02-15T09:59:20.076 [DEBUG] [Thread-202281] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:59:20.097 [DEBUG] [Thread-202281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:59:20.097 [DEBUG] [Thread-202281] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:59:20.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:59:20.098 [DEBUG] [Thread-202281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:59:20.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:59:20.100 [DEBUG] [Thread-202281] [transport.py] [_log()] userauth is OK
2026-02-15T09:59:20.101 [DEBUG] [Thread-202281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:59:20.101 [DEBUG] [Thread-202281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:59:20.101 [DEBUG] [Thread-202281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:59:20.101 [DEBUG] [Thread-202281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:59:20.125 [INFO] [Thread-202281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:59:20.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:59:20.783 [DEBUG] [Thread-202281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:59:20.783 [DEBUG] [Thread-202281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:59:20.783 [DEBUG] [Thread-202281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:59:20.824 [DEBUG] [Thread-202281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:59:20.825 [DEBUG] [Thread-202281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:59:20.828 [DEBUG] [Thread-202281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:59:20.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:59:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:59:20.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:59:20.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:59:20.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:59:20.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:59:20.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:59:20.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:59:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:59:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.332739 -999.00  +12.10  18.50     58   +4.20 1 1 1 1 1   888    0 11.47 146.74 ----- 18.5 18.5 148.2 22.0 19.0 -27.7 18.0 -25.8 16.6 -25.3 17.4 -26.3
2026-02-15T09:59:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:59:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:59:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.332739
2026-02-15T09:59:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:59:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:59:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:59:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:59:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:59:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:58:39', tmtdew=9.62, humidity=51.87, cloud=0.0, wind=23.46, temperature=12.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:59:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:59:20.853 [DEBUG] [Thread-202281] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:59:20.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:59:20.948 [DEBUG] [Thread-202284] [transport.py] [_log()] starting thread (client mode): 0xa81d6230
2026-02-15T09:59:20.948 [DEBUG] [Thread-202284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:59:20.963 [DEBUG] [Thread-202284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:59:20.963 [INFO] [Thread-202284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:59:20.971 [DEBUG] [Thread-202284] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:59:20.971 [DEBUG] [Thread-202284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] client lang: <none>
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] server lang: <none>
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] kex follows: False
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:59:20.972 [DEBUG] [Thread-202284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:59:20.973 [DEBUG] [Thread-202284] [transport.py] [_log()] Compression: none
2026-02-15T09:59:20.973 [DEBUG] [Thread-202284] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:59:21.028 [DEBUG] [Thread-202284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:59:21.029 [DEBUG] [Thread-202284] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:59:21.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:59:21.030 [DEBUG] [Thread-202284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:59:21.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:59:21.084 [DEBUG] [Thread-202284] [transport.py] [_log()] userauth is OK
2026-02-15T09:59:21.085 [DEBUG] [Thread-202284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:59:21.085 [DEBUG] [Thread-202284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:59:21.085 [DEBUG] [Thread-202284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:59:21.085 [DEBUG] [Thread-202284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:59:21.105 [INFO] [Thread-202284] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:59:21.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:59:21.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:59:21.950 [DEBUG] [Thread-202284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:59:21.950 [DEBUG] [Thread-202284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:59:21.998 [DEBUG] [Thread-202284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:59:21.998 [DEBUG] [Thread-202284] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:59:22.008 [DEBUG] [Thread-202284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:59:22.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:59:22.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-02-15T09:59:22.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:59:22.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:59:22.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:59:22.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:59:22.044 [DEBUG] [Thread-202284] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:59:27.090 [DEBUG] [Thread-202286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:41.022 [DEBUG] [Thread-202287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:42.142 [DEBUG] [Thread-202288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T09:59:52.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T09:59:52.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T09:59:52.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T09:59:53.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 59, 16), 9.32, 52.97, 0.0, 26.56, 12.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T09:59:53.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:59:16
2026-02-15T09:59:54.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T09:59:54.486 [DEBUG] [Thread-202289] [transport.py] [_log()] starting thread (client mode): 0xa57e1f60
2026-02-15T09:59:54.487 [DEBUG] [Thread-202289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:59:54.507 [DEBUG] [Thread-202289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T09:59:54.507 [INFO] [Thread-202289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:54.511 [DEBUG] [Thread-202289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] client lang: <none>
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] server lang: <none>
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] kex follows: False
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:59:54.512 [DEBUG] [Thread-202289] [transport.py] [_log()] Compression: none
2026-02-15T09:59:54.513 [DEBUG] [Thread-202289] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:59:54.532 [DEBUG] [Thread-202289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:59:54.533 [DEBUG] [Thread-202289] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:59:54.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T09:59:54.534 [DEBUG] [Thread-202289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T09:59:54.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:59:54.536 [DEBUG] [Thread-202289] [transport.py] [_log()] userauth is OK
2026-02-15T09:59:54.536 [DEBUG] [Thread-202289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:59:54.537 [DEBUG] [Thread-202289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:59:54.537 [DEBUG] [Thread-202289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T09:59:54.537 [DEBUG] [Thread-202289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:59:54.562 [INFO] [Thread-202289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:59:54.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:59:55.152 [DEBUG] [Thread-202289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:59:55.152 [DEBUG] [Thread-202289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:59:55.152 [DEBUG] [Thread-202289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T09:59:55.193 [DEBUG] [Thread-202289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:59:55.194 [DEBUG] [Thread-202289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:59:55.197 [DEBUG] [Thread-202289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:59:55.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:59:55.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T09:59:55.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T09:59:55.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T09:59:55.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:59:55.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T09:59:55.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:59:55.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:59:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T09:59:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.333086 -999.00  +12.30  17.72     59   +4.60 1 1 1 1 1   888    0 11.97 156.05 ----- 17.7 17.7 142.6 25.4 19.1 -26.3 18.1 -26.1 16.7 -24.8 17.7 -26.9
2026-02-15T09:59:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T09:59:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T09:59:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.333086
2026-02-15T09:59:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T09:59:55.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T09:59:55.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T09:59:55.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T09:59:55.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T09:59:55.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:59:16', tmtdew=9.32, humidity=52.97, cloud=0.0, wind=26.56, temperature=12.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T07:59:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T09:59:55.225 [DEBUG] [Thread-202289] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:59:55.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T09:59:55.333 [DEBUG] [Thread-202292] [transport.py] [_log()] starting thread (client mode): 0xa57e38e0
2026-02-15T09:59:55.333 [DEBUG] [Thread-202292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T09:59:55.357 [DEBUG] [Thread-202292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T09:59:55.357 [INFO] [Thread-202292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T09:59:55.375 [DEBUG] [Thread-202292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T09:59:55.375 [DEBUG] [Thread-202292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T09:59:55.375 [DEBUG] [Thread-202292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] client lang: <none>
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] server lang: <none>
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] kex follows: False
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T09:59:55.376 [DEBUG] [Thread-202292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T09:59:55.377 [DEBUG] [Thread-202292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T09:59:55.377 [DEBUG] [Thread-202292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T09:59:55.377 [DEBUG] [Thread-202292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T09:59:55.377 [DEBUG] [Thread-202292] [transport.py] [_log()] Compression: none
2026-02-15T09:59:55.377 [DEBUG] [Thread-202292] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T09:59:55.446 [DEBUG] [Thread-202292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T09:59:55.447 [DEBUG] [Thread-202292] [transport.py] [_log()] Switch to new keys ...
2026-02-15T09:59:55.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T09:59:55.448 [DEBUG] [Thread-202292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T09:59:55.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T09:59:55.523 [DEBUG] [Thread-202292] [transport.py] [_log()] userauth is OK
2026-02-15T09:59:55.523 [DEBUG] [Thread-202292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T09:59:55.524 [DEBUG] [Thread-202292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T09:59:55.524 [DEBUG] [Thread-202292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T09:59:55.524 [DEBUG] [Thread-202292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T09:59:55.552 [INFO] [Thread-202292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T09:59:55.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T09:59:55.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T09:59:56.344 [DEBUG] [Thread-202292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T09:59:56.345 [DEBUG] [Thread-202292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T09:59:56.402 [DEBUG] [Thread-202292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T09:59:56.403 [DEBUG] [Thread-202292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T09:59:56.422 [DEBUG] [Thread-202292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T09:59:56.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T09:59:56.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T09:59:56.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T09:59:56.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T09:59:56.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T09:59:56.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T09:59:56.484 [DEBUG] [Thread-202292] [transport.py] [_log()] EOF in transport thread
2026-02-15T09:59:57.181 [DEBUG] [Thread-202294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:03.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:03.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:12.237 [DEBUG] [Thread-202295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:26.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:00:26.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:00:26.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:00:27.277 [DEBUG] [Thread-202296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:28.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 9, 59, 52), 9.09, 53.93, 0.0, 24.24, 12.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:00:28.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 09:59:52
2026-02-15T10:00:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:00:29.676 [DEBUG] [Thread-202297] [transport.py] [_log()] starting thread (client mode): 0xa81d6170
2026-02-15T10:00:29.676 [DEBUG] [Thread-202297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:00:29.696 [DEBUG] [Thread-202297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:00:29.696 [INFO] [Thread-202297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:00:29.699 [DEBUG] [Thread-202297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:00:29.699 [DEBUG] [Thread-202297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] client lang: <none>
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] server lang: <none>
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] kex follows: False
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] Compression: none
2026-02-15T10:00:29.700 [DEBUG] [Thread-202297] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:00:29.718 [DEBUG] [Thread-202297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:00:29.719 [DEBUG] [Thread-202297] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:00:29.719 [DEBUG] [Thread-202297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:00:29.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:00:29.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:00:29.721 [DEBUG] [Thread-202297] [transport.py] [_log()] userauth is OK
2026-02-15T10:00:29.722 [DEBUG] [Thread-202297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:00:29.722 [DEBUG] [Thread-202297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:00:29.722 [DEBUG] [Thread-202297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:00:29.722 [DEBUG] [Thread-202297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:00:29.747 [INFO] [Thread-202297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:00:29.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:00:30.346 [DEBUG] [Thread-202297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:00:30.347 [DEBUG] [Thread-202297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:00:30.347 [DEBUG] [Thread-202297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:00:30.387 [DEBUG] [Thread-202297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:00:30.388 [DEBUG] [Thread-202297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:00:30.391 [DEBUG] [Thread-202297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:00:30.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:00:30.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:00:30.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:00:30.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:00:30.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:00:30.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:00:30.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:00:30.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:00:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:00:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.333433 -999.00  +12.30  16.36     59   +4.50 1 1 1 1 1   888    0 11.74 146.83 ----- 16.4 16.4 156.8 21.5 19.3 -27.8 18.2 -25.8 16.8 -25.1 17.6 -26.6
2026-02-15T10:00:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:00:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:00:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.333433
2026-02-15T10:00:30.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:00:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:00:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:00:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:00:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:00:30.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T09:59:52', tmtdew=9.09, humidity=53.93, cloud=0.0, wind=24.24, temperature=12.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:00:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:00:30.417 [DEBUG] [Thread-202297] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:00:30.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:00:30.517 [DEBUG] [Thread-202300] [transport.py] [_log()] starting thread (client mode): 0xa57b3e50
2026-02-15T10:00:30.517 [DEBUG] [Thread-202300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:00:30.535 [DEBUG] [Thread-202300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:00:30.535 [INFO] [Thread-202300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:00:30.546 [DEBUG] [Thread-202300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] client lang: <none>
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] server lang: <none>
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] kex follows: False
2026-02-15T10:00:30.547 [DEBUG] [Thread-202300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:00:30.548 [DEBUG] [Thread-202300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:00:30.548 [DEBUG] [Thread-202300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:00:30.548 [DEBUG] [Thread-202300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:00:30.548 [DEBUG] [Thread-202300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:00:30.548 [DEBUG] [Thread-202300] [transport.py] [_log()] Compression: none
2026-02-15T10:00:30.548 [DEBUG] [Thread-202300] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:00:30.608 [DEBUG] [Thread-202300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:00:30.609 [DEBUG] [Thread-202300] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:00:30.609 [DEBUG] [Thread-202300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:00:30.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:00:30.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:00:30.673 [DEBUG] [Thread-202300] [transport.py] [_log()] userauth is OK
2026-02-15T10:00:30.673 [DEBUG] [Thread-202300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:00:30.673 [DEBUG] [Thread-202300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:00:30.673 [DEBUG] [Thread-202300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:00:30.673 [DEBUG] [Thread-202300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:00:30.695 [INFO] [Thread-202300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:00:30.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:00:30.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:00:31.514 [DEBUG] [Thread-202300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:00:31.515 [DEBUG] [Thread-202300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:00:31.565 [DEBUG] [Thread-202300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:00:31.566 [DEBUG] [Thread-202300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:00:31.578 [DEBUG] [Thread-202300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:00:31.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:00:31.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:00:31.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:00:31.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:00:31.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:00:31.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:00:31.624 [DEBUG] [Thread-202300] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:00:41.059 [DEBUG] [Thread-202302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:42.317 [DEBUG] [Thread-202303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:00:57.364 [DEBUG] [Thread-202304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:01.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:01:01.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:01:01.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:01:03.322 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:03.323 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 0, 27), 9.4, 52.86, 0.0, 25.39, 12.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:01:03.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:00:27
2026-02-15T10:01:03.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:01:04.118 [DEBUG] [Thread-202305] [transport.py] [_log()] starting thread (client mode): 0xa5740d60
2026-02-15T10:01:04.118 [DEBUG] [Thread-202305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:01:04.138 [DEBUG] [Thread-202305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:01:04.139 [INFO] [Thread-202305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] client lang: <none>
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] server lang: <none>
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] kex follows: False
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] Compression: none
2026-02-15T10:01:04.142 [DEBUG] [Thread-202305] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:01:04.159 [DEBUG] [Thread-202305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:01:04.160 [DEBUG] [Thread-202305] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:01:04.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:01:04.161 [DEBUG] [Thread-202305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:01:04.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:01:04.163 [DEBUG] [Thread-202305] [transport.py] [_log()] userauth is OK
2026-02-15T10:01:04.163 [DEBUG] [Thread-202305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:01:04.163 [DEBUG] [Thread-202305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:01:04.164 [DEBUG] [Thread-202305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:01:04.164 [DEBUG] [Thread-202305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:01:04.181 [INFO] [Thread-202305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:01:04.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:01:04.756 [DEBUG] [Thread-202305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:01:04.756 [DEBUG] [Thread-202305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:01:04.756 [DEBUG] [Thread-202305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:01:04.797 [DEBUG] [Thread-202305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:01:04.797 [DEBUG] [Thread-202305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:01:04.800 [DEBUG] [Thread-202305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:01:04.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:01:04.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:01:04.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:01:04.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:01:04.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:01:04.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:01:04.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:01:04.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:01:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:01:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.333780 -999.00  +12.50  11.34     58   +4.60 1 1 1 1 1   888    0 11.82 149.31 ----- 11.3 11.3 154.9 21.5 19.4 -26.5 18.3 -25.8 16.9 -24.9 17.8 -27.2
2026-02-15T10:01:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:01:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:01:04.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.333780
2026-02-15T10:01:04.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:01:04.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:01:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:01:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:01:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:01:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:00:27', tmtdew=9.4, humidity=52.86, cloud=0.0, wind=25.39, temperature=12.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:00:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:01:04.823 [DEBUG] [Thread-202305] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:01:04.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:01:04.919 [DEBUG] [Thread-202308] [transport.py] [_log()] starting thread (client mode): 0xa2d125f0
2026-02-15T10:01:04.919 [DEBUG] [Thread-202308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:01:04.938 [DEBUG] [Thread-202308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:01:04.938 [INFO] [Thread-202308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:01:04.946 [DEBUG] [Thread-202308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:01:04.946 [DEBUG] [Thread-202308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:01:04.946 [DEBUG] [Thread-202308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] client lang: <none>
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] server lang: <none>
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] kex follows: False
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] Compression: none
2026-02-15T10:01:04.947 [DEBUG] [Thread-202308] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:01:05.009 [DEBUG] [Thread-202308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:01:05.009 [DEBUG] [Thread-202308] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:01:05.010 [DEBUG] [Thread-202308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:01:05.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:01:05.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:01:05.072 [DEBUG] [Thread-202308] [transport.py] [_log()] userauth is OK
2026-02-15T10:01:05.072 [DEBUG] [Thread-202308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:01:05.072 [DEBUG] [Thread-202308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:01:05.072 [DEBUG] [Thread-202308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:01:05.072 [DEBUG] [Thread-202308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:01:05.095 [INFO] [Thread-202308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:01:05.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:01:05.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:01:05.929 [DEBUG] [Thread-202308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:01:05.929 [DEBUG] [Thread-202308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:01:05.977 [DEBUG] [Thread-202308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:01:05.977 [DEBUG] [Thread-202308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:01:05.986 [DEBUG] [Thread-202308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:01:05.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:01:05.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:01:06.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:01:06.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:01:06.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:01:06.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:01:06.019 [DEBUG] [Thread-202308] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:01:12.396 [DEBUG] [Thread-202310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:27.439 [DEBUG] [Thread-202311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:36.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:01:36.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:01:36.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:01:37.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 1, 4), 9.53, 52.41, 0.0, 23.08, 12.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:01:37.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:01:04
2026-02-15T10:01:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:01:38.510 [DEBUG] [Thread-202312] [transport.py] [_log()] starting thread (client mode): 0xa57e3730
2026-02-15T10:01:38.510 [DEBUG] [Thread-202312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:01:38.530 [DEBUG] [Thread-202312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:01:38.530 [INFO] [Thread-202312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:01:38.533 [DEBUG] [Thread-202312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:01:38.533 [DEBUG] [Thread-202312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:01:38.533 [DEBUG] [Thread-202312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:01:38.533 [DEBUG] [Thread-202312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:38.533 [DEBUG] [Thread-202312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] client lang: <none>
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] server lang: <none>
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] kex follows: False
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:01:38.534 [DEBUG] [Thread-202312] [transport.py] [_log()] Compression: none
2026-02-15T10:01:38.535 [DEBUG] [Thread-202312] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:01:38.552 [DEBUG] [Thread-202312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:01:38.553 [DEBUG] [Thread-202312] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:01:38.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:01:38.554 [DEBUG] [Thread-202312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:01:38.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:01:38.556 [DEBUG] [Thread-202312] [transport.py] [_log()] userauth is OK
2026-02-15T10:01:38.556 [DEBUG] [Thread-202312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:01:38.556 [DEBUG] [Thread-202312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:01:38.556 [DEBUG] [Thread-202312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:01:38.556 [DEBUG] [Thread-202312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:01:38.567 [INFO] [Thread-202312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:01:38.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:01:39.206 [DEBUG] [Thread-202312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:01:39.206 [DEBUG] [Thread-202312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:01:39.206 [DEBUG] [Thread-202312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:01:39.246 [DEBUG] [Thread-202312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:01:39.247 [DEBUG] [Thread-202312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:01:39.248 [DEBUG] [Thread-202312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:01:39.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:01:39.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:01:39.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:01:39.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:01:39.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:01:39.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:01:39.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.334128 -999.00  +12.90  24.16     56   +4.30 1 1 1 1 1   888    0 12.21 164.63 ----- 24.2 24.2 163.6 26.9 19.4 -28.3 18.3 -26.2 16.9 -25.9 17.8 -27.8
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.334128
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:01:39.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:01:04', tmtdew=9.53, humidity=52.41, cloud=0.0, wind=23.08, temperature=12.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:01:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:01:39.270 [DEBUG] [Thread-202312] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:01:39.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:01:39.355 [DEBUG] [Thread-202315] [transport.py] [_log()] starting thread (client mode): 0xa81d7af0
2026-02-15T10:01:39.355 [DEBUG] [Thread-202315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:01:39.369 [DEBUG] [Thread-202315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:01:39.369 [INFO] [Thread-202315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] client lang: <none>
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] server lang: <none>
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] kex follows: False
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] Compression: none
2026-02-15T10:01:39.377 [DEBUG] [Thread-202315] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:01:39.441 [DEBUG] [Thread-202315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:01:39.441 [DEBUG] [Thread-202315] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:01:39.442 [DEBUG] [Thread-202315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:01:39.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:01:39.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:01:39.499 [DEBUG] [Thread-202315] [transport.py] [_log()] userauth is OK
2026-02-15T10:01:39.499 [DEBUG] [Thread-202315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:01:39.499 [DEBUG] [Thread-202315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:01:39.499 [DEBUG] [Thread-202315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:01:39.499 [DEBUG] [Thread-202315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:01:39.512 [INFO] [Thread-202315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:01:39.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:01:39.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:01:40.365 [DEBUG] [Thread-202315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:01:40.365 [DEBUG] [Thread-202315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:01:40.413 [DEBUG] [Thread-202315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:01:40.413 [DEBUG] [Thread-202315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:01:40.422 [DEBUG] [Thread-202315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:01:40.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:01:40.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:01:40.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:01:40.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:01:40.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:01:40.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:01:40.455 [DEBUG] [Thread-202315] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:01:41.095 [DEBUG] [Thread-202317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:42.466 [DEBUG] [Thread-202318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:01:57.500 [DEBUG] [Thread-202319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:03.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:03.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:10.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:02:10.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:02:10.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:02:12.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 1, 39), 11.16, 46.79, 0.0, 24.7, 13.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:02:12.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:01:39
2026-02-15T10:02:12.529 [DEBUG] [Thread-202320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:13.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:02:13.476 [DEBUG] [Thread-202321] [transport.py] [_log()] starting thread (client mode): 0xa2d12080
2026-02-15T10:02:13.476 [DEBUG] [Thread-202321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:02:13.496 [DEBUG] [Thread-202321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:02:13.496 [INFO] [Thread-202321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:02:13.499 [DEBUG] [Thread-202321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:02:13.499 [DEBUG] [Thread-202321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] client lang: <none>
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] server lang: <none>
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] kex follows: False
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] Compression: none
2026-02-15T10:02:13.500 [DEBUG] [Thread-202321] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:02:13.520 [DEBUG] [Thread-202321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:02:13.521 [DEBUG] [Thread-202321] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:02:13.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:02:13.522 [DEBUG] [Thread-202321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:02:13.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:02:13.524 [DEBUG] [Thread-202321] [transport.py] [_log()] userauth is OK
2026-02-15T10:02:13.525 [DEBUG] [Thread-202321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:02:13.525 [DEBUG] [Thread-202321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:02:13.525 [DEBUG] [Thread-202321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:02:13.525 [DEBUG] [Thread-202321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:02:13.561 [INFO] [Thread-202321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:02:13.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:02:14.242 [DEBUG] [Thread-202321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:02:14.242 [DEBUG] [Thread-202321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:02:14.242 [DEBUG] [Thread-202321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:02:14.282 [DEBUG] [Thread-202321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:02:14.282 [DEBUG] [Thread-202321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:02:14.284 [DEBUG] [Thread-202321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:02:14.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:02:14.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:02:14.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:02:14.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:02:14.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:02:14.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:02:14.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.334475 -999.00  +12.90  22.59     54   +3.90 1 1 1 1 1   888    0 12.58 176.40 ----- 22.6 22.6 144.2 28.3 19.4 -28.9 18.3 -26.9 17.0 -25.3 17.9 -28.2
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.334475
2026-02-15T10:02:14.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:02:14.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:02:14.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:02:14.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:02:14.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:02:14.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:01:39', tmtdew=11.16, humidity=46.79, cloud=0.0, wind=24.7, temperature=13.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:01:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:02:14.302 [DEBUG] [Thread-202321] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:02:14.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:02:14.393 [DEBUG] [Thread-202324] [transport.py] [_log()] starting thread (client mode): 0xa2d03bb0
2026-02-15T10:02:14.393 [DEBUG] [Thread-202324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:02:14.416 [DEBUG] [Thread-202324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:02:14.416 [INFO] [Thread-202324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:02:14.432 [DEBUG] [Thread-202324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:02:14.432 [DEBUG] [Thread-202324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:02:14.432 [DEBUG] [Thread-202324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] client lang: <none>
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] server lang: <none>
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] kex follows: False
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:02:14.433 [DEBUG] [Thread-202324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:02:14.434 [DEBUG] [Thread-202324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:02:14.434 [DEBUG] [Thread-202324] [transport.py] [_log()] Compression: none
2026-02-15T10:02:14.434 [DEBUG] [Thread-202324] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:02:14.500 [DEBUG] [Thread-202324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:02:14.501 [DEBUG] [Thread-202324] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:02:14.501 [DEBUG] [Thread-202324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:02:14.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:02:14.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:02:14.577 [DEBUG] [Thread-202324] [transport.py] [_log()] userauth is OK
2026-02-15T10:02:14.577 [DEBUG] [Thread-202324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:02:14.577 [DEBUG] [Thread-202324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:02:14.577 [DEBUG] [Thread-202324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:02:14.577 [DEBUG] [Thread-202324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:02:14.604 [INFO] [Thread-202324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:02:14.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:02:14.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:02:15.426 [DEBUG] [Thread-202324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:02:15.426 [DEBUG] [Thread-202324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:02:15.475 [DEBUG] [Thread-202324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:02:15.476 [DEBUG] [Thread-202324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:02:15.487 [DEBUG] [Thread-202324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:02:15.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:02: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')
2026-02-15T10:02:15.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:02:15.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:02:15.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:02:15.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:02:15.540 [DEBUG] [Thread-202324] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:02:27.563 [DEBUG] [Thread-202326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:41.134 [DEBUG] [Thread-202327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:42.599 [DEBUG] [Thread-202328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:02:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:02:45.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:02:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:02:47.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 2, 15), 10.11, 49.9, 0.0, 27.76, 12.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:02:47.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:02:15
2026-02-15T10:02:47.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:02:48.019 [DEBUG] [Thread-202329] [transport.py] [_log()] starting thread (client mode): 0xa57e3a90
2026-02-15T10:02:48.019 [DEBUG] [Thread-202329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:02:48.040 [DEBUG] [Thread-202329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:02:48.040 [INFO] [Thread-202329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] client lang: <none>
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] server lang: <none>
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] kex follows: False
2026-02-15T10:02:48.043 [DEBUG] [Thread-202329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:02:48.044 [DEBUG] [Thread-202329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:02:48.044 [DEBUG] [Thread-202329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:02:48.044 [DEBUG] [Thread-202329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:02:48.044 [DEBUG] [Thread-202329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:02:48.044 [DEBUG] [Thread-202329] [transport.py] [_log()] Compression: none
2026-02-15T10:02:48.044 [DEBUG] [Thread-202329] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:02:48.059 [DEBUG] [Thread-202329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:02:48.060 [DEBUG] [Thread-202329] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:02:48.060 [DEBUG] [Thread-202329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:02:48.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:02:48.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:02:48.061 [DEBUG] [Thread-202329] [transport.py] [_log()] userauth is OK
2026-02-15T10:02:48.061 [DEBUG] [Thread-202329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:02:48.061 [DEBUG] [Thread-202329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:02:48.061 [DEBUG] [Thread-202329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:02:48.061 [DEBUG] [Thread-202329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:02:48.089 [INFO] [Thread-202329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:02:48.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:02:48.714 [DEBUG] [Thread-202329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:02:48.714 [DEBUG] [Thread-202329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:02:48.714 [DEBUG] [Thread-202329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:02:48.755 [DEBUG] [Thread-202329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:02:48.755 [DEBUG] [Thread-202329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:02:48.757 [DEBUG] [Thread-202329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:02:48.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:02:48.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:02:48.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:02:48.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:02:48.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:02:48.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:02:48.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.334822 -999.00  +12.90  22.34     53   +3.70 1 1 1 1 1   888    0 11.99 152.63 ----- 22.3 22.3 148.4 27.0 19.5 -28.0 18.4 -26.8 17.1 -25.7 17.8 -29.0
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.334822
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:02:48.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:02:15', tmtdew=10.11, humidity=49.9, cloud=0.0, wind=27.76, temperature=12.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:02:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:02:48.778 [DEBUG] [Thread-202329] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:02:48.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:02:48.864 [DEBUG] [Thread-202332] [transport.py] [_log()] starting thread (client mode): 0xa81d51e0
2026-02-15T10:02:48.864 [DEBUG] [Thread-202332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:02:48.879 [DEBUG] [Thread-202332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:02:48.879 [INFO] [Thread-202332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:02:48.886 [DEBUG] [Thread-202332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] client lang: <none>
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] server lang: <none>
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] kex follows: False
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] Compression: none
2026-02-15T10:02:48.887 [DEBUG] [Thread-202332] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:02:48.943 [DEBUG] [Thread-202332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:02:48.944 [DEBUG] [Thread-202332] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:02:48.944 [DEBUG] [Thread-202332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:02:48.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:02:48.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:02:49.001 [DEBUG] [Thread-202332] [transport.py] [_log()] userauth is OK
2026-02-15T10:02:49.001 [DEBUG] [Thread-202332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:02:49.001 [DEBUG] [Thread-202332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:02:49.001 [DEBUG] [Thread-202332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:02:49.001 [DEBUG] [Thread-202332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:02:49.019 [INFO] [Thread-202332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:02:49.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:02:49.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:02:49.862 [DEBUG] [Thread-202332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:02:49.863 [DEBUG] [Thread-202332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:02:49.911 [DEBUG] [Thread-202332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:02:49.911 [DEBUG] [Thread-202332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:02:49.919 [DEBUG] [Thread-202332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:02:49.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:02:49.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:02:49.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:02:49.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:02:49.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:02:49.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:02:49.951 [DEBUG] [Thread-202332] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:02:57.626 [DEBUG] [Thread-202334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:03.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:03.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:12.658 [DEBUG] [Thread-202335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:19.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:03:19.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:03:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:03:21.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 2, 51), 10.12, 50.43, 0.0, 23.59, 12.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:03:21.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:02:51
2026-02-15T10:03:22.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:03:22.515 [DEBUG] [Thread-202336] [transport.py] [_log()] starting thread (client mode): 0xa81d79d0
2026-02-15T10:03:22.515 [DEBUG] [Thread-202336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:03:22.537 [DEBUG] [Thread-202336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:03:22.537 [INFO] [Thread-202336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] client lang: <none>
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] server lang: <none>
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] kex follows: False
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] Compression: none
2026-02-15T10:03:22.540 [DEBUG] [Thread-202336] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:03:22.555 [DEBUG] [Thread-202336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:03:22.555 [DEBUG] [Thread-202336] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:03:22.555 [DEBUG] [Thread-202336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:03:22.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:03:22.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:03:22.556 [DEBUG] [Thread-202336] [transport.py] [_log()] userauth is OK
2026-02-15T10:03:22.556 [DEBUG] [Thread-202336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:03:22.556 [DEBUG] [Thread-202336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:03:22.556 [DEBUG] [Thread-202336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:03:22.556 [DEBUG] [Thread-202336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:03:22.565 [INFO] [Thread-202336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:03:22.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:03:23.190 [DEBUG] [Thread-202336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:03:23.190 [DEBUG] [Thread-202336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:03:23.190 [DEBUG] [Thread-202336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:03:23.231 [DEBUG] [Thread-202336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:03:23.231 [DEBUG] [Thread-202336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:03:23.233 [DEBUG] [Thread-202336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:03:23.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:03:23.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:03:23.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:03:23.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:03:23.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:03:23.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:03:23.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.335517 -999.00  +12.90  25.65     55   +4.10 1 1 1 1 1   888    0 12.73 171.93 ----- 25.6 25.6 155.2 30.4 19.4 -29.9 18.4 -28.9 17.1 -27.5 17.9 -28.7
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.335517
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:03:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:02:51', tmtdew=10.12, humidity=50.43, cloud=0.0, wind=23.59, temperature=12.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:03:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:03:23.252 [DEBUG] [Thread-202336] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:03:23.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:03:23.351 [DEBUG] [Thread-202339] [transport.py] [_log()] starting thread (client mode): 0xa57c1e10
2026-02-15T10:03:23.351 [DEBUG] [Thread-202339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:03:23.379 [DEBUG] [Thread-202339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:03:23.379 [INFO] [Thread-202339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:03:23.400 [DEBUG] [Thread-202339] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] client lang: <none>
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] server lang: <none>
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] kex follows: False
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:03:23.401 [DEBUG] [Thread-202339] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:03:23.402 [DEBUG] [Thread-202339] [transport.py] [_log()] Compression: none
2026-02-15T10:03:23.402 [DEBUG] [Thread-202339] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:03:23.473 [DEBUG] [Thread-202339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:03:23.474 [DEBUG] [Thread-202339] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:03:23.474 [DEBUG] [Thread-202339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:03:23.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:03:23.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:03:23.560 [DEBUG] [Thread-202339] [transport.py] [_log()] userauth is OK
2026-02-15T10:03:23.560 [DEBUG] [Thread-202339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:03:23.560 [DEBUG] [Thread-202339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:03:23.560 [DEBUG] [Thread-202339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:03:23.561 [DEBUG] [Thread-202339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:03:23.596 [INFO] [Thread-202339] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:03:23.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:03:23.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:03:24.410 [DEBUG] [Thread-202339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:03:24.411 [DEBUG] [Thread-202339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:03:24.475 [DEBUG] [Thread-202339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:03:24.475 [DEBUG] [Thread-202339] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:03:24.500 [DEBUG] [Thread-202339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:03:24.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:03:24.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:03:24.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:03:24.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:03:24.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:03:24.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:03:24.596 [DEBUG] [Thread-202339] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:03:27.685 [DEBUG] [Thread-202341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:41.203 [DEBUG] [Thread-202342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:42.717 [DEBUG] [Thread-202343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:54.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:03:54.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:03:54.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:03:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 3, 27), 9.87, 51.24, 0.0, 23.82, 12.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:03:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:03:27
2026-02-15T10:03:56.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:03:57.081 [DEBUG] [Thread-202344] [transport.py] [_log()] starting thread (client mode): 0xa57409a0
2026-02-15T10:03:57.081 [DEBUG] [Thread-202344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:03:57.102 [DEBUG] [Thread-202344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:03:57.102 [INFO] [Thread-202344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] client lang: <none>
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] server lang: <none>
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] kex follows: False
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:03:57.105 [DEBUG] [Thread-202344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:03:57.106 [DEBUG] [Thread-202344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:03:57.106 [DEBUG] [Thread-202344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:03:57.106 [DEBUG] [Thread-202344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:03:57.106 [DEBUG] [Thread-202344] [transport.py] [_log()] Compression: none
2026-02-15T10:03:57.106 [DEBUG] [Thread-202344] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:03:57.112 [DEBUG] [Thread-202344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:03:57.112 [DEBUG] [Thread-202344] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:03:57.113 [DEBUG] [Thread-202344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:03:57.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:03:57.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:03:57.113 [DEBUG] [Thread-202344] [transport.py] [_log()] userauth is OK
2026-02-15T10:03:57.113 [DEBUG] [Thread-202344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:03:57.113 [DEBUG] [Thread-202344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:03:57.113 [DEBUG] [Thread-202344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:03:57.113 [DEBUG] [Thread-202344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:03:57.122 [INFO] [Thread-202344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:03:57.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:03:57.740 [DEBUG] [Thread-202346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:03:57.755 [DEBUG] [Thread-202344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:03:57.755 [DEBUG] [Thread-202344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:03:57.755 [DEBUG] [Thread-202344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:03:57.797 [DEBUG] [Thread-202344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:03:57.797 [DEBUG] [Thread-202344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:03:57.799 [DEBUG] [Thread-202344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:03:57.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:03:57.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:03:57.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:03:57.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:03:57.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:03:57.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:03:57.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:03:57.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:03:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:03:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.335864 -999.00  +12.70  26.85     55   +4.10 1 1 1 1 1   888    0 12.75 175.77 ----- 26.9 26.9 147.0 30.3 19.4 -28.4 18.3 -27.0 17.0 -26.3 17.8 -28.0
2026-02-15T10:03:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:03:57.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.335864
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:03:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:03:27', tmtdew=9.87, humidity=51.24, cloud=0.0, wind=23.82, temperature=12.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:03:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:03:57.817 [DEBUG] [Thread-202344] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:03:57.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:03:57.904 [DEBUG] [Thread-202348] [transport.py] [_log()] starting thread (client mode): 0xa57b1d80
2026-02-15T10:03:57.904 [DEBUG] [Thread-202348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:03:57.919 [DEBUG] [Thread-202348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:03:57.919 [INFO] [Thread-202348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:03:57.926 [DEBUG] [Thread-202348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:03:57.926 [DEBUG] [Thread-202348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] client lang: <none>
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] server lang: <none>
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] kex follows: False
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] Compression: none
2026-02-15T10:03:57.927 [DEBUG] [Thread-202348] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:03:57.982 [DEBUG] [Thread-202348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:03:57.982 [DEBUG] [Thread-202348] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:03:57.982 [DEBUG] [Thread-202348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:03:57.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:03:57.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:03:58.039 [DEBUG] [Thread-202348] [transport.py] [_log()] userauth is OK
2026-02-15T10:03:58.039 [DEBUG] [Thread-202348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:03:58.039 [DEBUG] [Thread-202348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:03:58.039 [DEBUG] [Thread-202348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:03:58.039 [DEBUG] [Thread-202348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:03:58.056 [INFO] [Thread-202348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:03:58.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:03:58.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:03:58.880 [DEBUG] [Thread-202348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:03:58.880 [DEBUG] [Thread-202348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:03:58.928 [DEBUG] [Thread-202348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:03:58.928 [DEBUG] [Thread-202348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:03:58.936 [DEBUG] [Thread-202348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:03:58.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:03:58.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:03:58.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:03:58.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:03:58.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:03:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:03:58.967 [DEBUG] [Thread-202348] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:04:03.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:04:03.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:04:12.766 [DEBUG] [Thread-202350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:04:27.802 [DEBUG] [Thread-202351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:04:28.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:04:28.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:04:28.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:04:30.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 4, 2), 9.81, 51.52, 0.0, 26.1, 12.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:04:30.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:04:02
2026-02-15T10:04:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:04:31.518 [DEBUG] [Thread-202352] [transport.py] [_log()] starting thread (client mode): 0xa57b21a0
2026-02-15T10:04:31.519 [DEBUG] [Thread-202352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:04:31.539 [DEBUG] [Thread-202352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:04:31.539 [INFO] [Thread-202352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] client lang: <none>
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] server lang: <none>
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] kex follows: False
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] Compression: none
2026-02-15T10:04:31.542 [DEBUG] [Thread-202352] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:04:31.559 [DEBUG] [Thread-202352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:04:31.560 [DEBUG] [Thread-202352] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:04:31.569 [DEBUG] [Thread-202352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:04:31.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:04:31.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:04:31.571 [DEBUG] [Thread-202352] [transport.py] [_log()] userauth is OK
2026-02-15T10:04:31.572 [DEBUG] [Thread-202352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:04:31.572 [DEBUG] [Thread-202352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:04:31.572 [DEBUG] [Thread-202352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:04:31.572 [DEBUG] [Thread-202352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:04:31.595 [INFO] [Thread-202352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:04:31.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:04:32.230 [DEBUG] [Thread-202352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:04:32.230 [DEBUG] [Thread-202352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:04:32.231 [DEBUG] [Thread-202352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:04:32.272 [DEBUG] [Thread-202352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:04:32.272 [DEBUG] [Thread-202352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:04:32.274 [DEBUG] [Thread-202352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:04:32.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:04:32.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:04:32.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:04:32.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:04:32.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:04:32.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:04:32.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.336211 -999.00  +12.40  18.32     56   +4.00 1 1 1 1 1   888    0 12.84 173.20 ----- 18.3 18.3 131.6 24.8 19.4 -26.7 18.4 -25.5 17.0 -26.0 17.9 -26.2
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.336211
2026-02-15T10:04:32.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:04:32.295 [DEBUG] [Thread-202352] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:04:32.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:04:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:04:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:04:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:04:32.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:04:02', tmtdew=9.81, humidity=51.52, cloud=0.0, wind=26.1, temperature=12.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:04:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:04:32.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:04:32.387 [DEBUG] [Thread-202355] [transport.py] [_log()] starting thread (client mode): 0xa2d01ab0
2026-02-15T10:04:32.387 [DEBUG] [Thread-202355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:04:32.415 [DEBUG] [Thread-202355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:04:32.415 [INFO] [Thread-202355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] client lang: <none>
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] server lang: <none>
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] kex follows: False
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] Compression: none
2026-02-15T10:04:32.430 [DEBUG] [Thread-202355] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:04:32.496 [DEBUG] [Thread-202355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:04:32.496 [DEBUG] [Thread-202355] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:04:32.496 [DEBUG] [Thread-202355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:04:32.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:04:32.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:04:32.570 [DEBUG] [Thread-202355] [transport.py] [_log()] userauth is OK
2026-02-15T10:04:32.570 [DEBUG] [Thread-202355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:04:32.570 [DEBUG] [Thread-202355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:04:32.570 [DEBUG] [Thread-202355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:04:32.570 [DEBUG] [Thread-202355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:04:32.592 [INFO] [Thread-202355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:04:32.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:04:32.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:04:33.467 [DEBUG] [Thread-202355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:04:33.467 [DEBUG] [Thread-202355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:04:33.523 [DEBUG] [Thread-202355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:04:33.523 [DEBUG] [Thread-202355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:04:33.540 [DEBUG] [Thread-202355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:04:33.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:04:33.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:04:33.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:04:33.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:04:33.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:04:33.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:04:33.605 [DEBUG] [Thread-202355] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:04:41.232 [DEBUG] [Thread-202357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:04:42.828 [DEBUG] [Thread-202358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:04:57.863 [DEBUG] [Thread-202359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:03.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:05:03.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:05:03.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:05:03.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:03.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:05.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 4, 38), 10.59, 48.72, 0.0, 26.6, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:05:05.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:04:38
2026-02-15T10:05:06.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:05:06.186 [DEBUG] [Thread-202360] [transport.py] [_log()] starting thread (client mode): 0xa81d7a90
2026-02-15T10:05:06.186 [DEBUG] [Thread-202360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:05:06.205 [DEBUG] [Thread-202360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:05:06.205 [INFO] [Thread-202360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] client lang: <none>
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] server lang: <none>
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] kex follows: False
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] Compression: none
2026-02-15T10:05:06.208 [DEBUG] [Thread-202360] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:05:06.223 [DEBUG] [Thread-202360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:05:06.223 [DEBUG] [Thread-202360] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:05:06.223 [DEBUG] [Thread-202360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:05:06.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:05:06.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:05:06.224 [DEBUG] [Thread-202360] [transport.py] [_log()] userauth is OK
2026-02-15T10:05:06.224 [DEBUG] [Thread-202360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:05:06.224 [DEBUG] [Thread-202360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:05:06.224 [DEBUG] [Thread-202360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:05:06.224 [DEBUG] [Thread-202360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:05:06.233 [INFO] [Thread-202360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:05:06.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:05:12.888 [DEBUG] [Thread-202362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:18.803 [DEBUG] [Thread-202360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:05:18.804 [DEBUG] [Thread-202360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:05:18.804 [DEBUG] [Thread-202360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:05:18.845 [DEBUG] [Thread-202360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:05:18.845 [DEBUG] [Thread-202360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:05:18.847 [DEBUG] [Thread-202360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:05:18.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:05:18.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:05:18.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:05:18.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:05:18.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:05:18.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:05:18.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.336558 -999.00  +12.70  18.19     56   +4.20 1 1 1 1 1   888    0 12.41 159.11 ----- 18.2 18.2 138.2 28.4 19.5 -27.3 18.4 -25.8 17.1 -25.6 17.9 -26.8
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.336558
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:05:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:04:38', tmtdew=10.59, humidity=48.72, cloud=0.0, wind=26.6, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:04:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:05:18.960 [DEBUG] [Thread-202360] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:05:19.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:05:19.060 [DEBUG] [Thread-202364] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b20
2026-02-15T10:05:19.060 [DEBUG] [Thread-202364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:05:19.090 [DEBUG] [Thread-202364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:05:19.090 [INFO] [Thread-202364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] client lang: <none>
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] server lang: <none>
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] kex follows: False
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] Compression: none
2026-02-15T10:05:19.114 [DEBUG] [Thread-202364] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:05:19.186 [DEBUG] [Thread-202364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:05:19.187 [DEBUG] [Thread-202364] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:05:19.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:05:19.187 [DEBUG] [Thread-202364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:05:19.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:05:19.277 [DEBUG] [Thread-202364] [transport.py] [_log()] userauth is OK
2026-02-15T10:05:19.277 [DEBUG] [Thread-202364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:05:19.277 [DEBUG] [Thread-202364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:05:19.277 [DEBUG] [Thread-202364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:05:19.277 [DEBUG] [Thread-202364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:05:19.306 [INFO] [Thread-202364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:05:19.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:05:19.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:05:20.136 [DEBUG] [Thread-202364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:05:20.136 [DEBUG] [Thread-202364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:05:20.200 [DEBUG] [Thread-202364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:05:20.200 [DEBUG] [Thread-202364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:05:20.224 [DEBUG] [Thread-202364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:05:20.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:05:20.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:05:20.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:05:20.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:05:20.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:05:20.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:05:20.319 [DEBUG] [Thread-202364] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:05:27.914 [DEBUG] [Thread-202366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:41.263 [DEBUG] [Thread-202367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:42.955 [DEBUG] [Thread-202368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:05:50.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:05:50.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:05:50.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:05:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 5, 14), 9.99, 50.39, 0.0, 24.4, 12.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:05:52.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:05:14
2026-02-15T10:05:52.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:05:52.845 [DEBUG] [Thread-202369] [transport.py] [_log()] starting thread (client mode): 0xa5742110
2026-02-15T10:05:52.845 [DEBUG] [Thread-202369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:05:52.864 [DEBUG] [Thread-202369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:05:52.864 [INFO] [Thread-202369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] client lang: <none>
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] server lang: <none>
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] kex follows: False
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] Compression: none
2026-02-15T10:05:52.868 [DEBUG] [Thread-202369] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:05:52.883 [DEBUG] [Thread-202369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:05:52.883 [DEBUG] [Thread-202369] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:05:52.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:05:52.883 [DEBUG] [Thread-202369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:05:52.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:05:52.884 [DEBUG] [Thread-202369] [transport.py] [_log()] userauth is OK
2026-02-15T10:05:52.884 [DEBUG] [Thread-202369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:05:52.885 [DEBUG] [Thread-202369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:05:52.885 [DEBUG] [Thread-202369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:05:52.885 [DEBUG] [Thread-202369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:05:52.900 [INFO] [Thread-202369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:05:52.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:05:53.586 [DEBUG] [Thread-202369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:05:53.586 [DEBUG] [Thread-202369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:05:53.586 [DEBUG] [Thread-202369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:05:53.627 [DEBUG] [Thread-202369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:05:53.627 [DEBUG] [Thread-202369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:05:53.630 [DEBUG] [Thread-202369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:05:53.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:05:53.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:05:53.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:05:53.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:05:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:05:53.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:05:53.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:05:53.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:05:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:05:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.336905 -999.00  +12.60  22.44     56   +4.10 1 1 1 1 1   888    0 12.76 171.46 ----- 22.4 22.4 137.4 32.3 19.5 -27.3 18.6 -26.3 17.1 -25.5 17.9 -26.8
2026-02-15T10:05:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.336905
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:05:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:05:14', tmtdew=9.99, humidity=50.39, cloud=0.0, wind=24.4, temperature=12.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:05:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:05:53.648 [DEBUG] [Thread-202369] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:05:53.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:05:53.764 [DEBUG] [Thread-202372] [transport.py] [_log()] starting thread (client mode): 0xa81d6b60
2026-02-15T10:05:53.764 [DEBUG] [Thread-202372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:05:53.808 [DEBUG] [Thread-202372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:05:53.808 [INFO] [Thread-202372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] client lang: <none>
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] server lang: <none>
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] kex follows: False
2026-02-15T10:05:53.848 [DEBUG] [Thread-202372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:05:53.849 [DEBUG] [Thread-202372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:05:53.849 [DEBUG] [Thread-202372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:05:53.849 [DEBUG] [Thread-202372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:05:53.849 [DEBUG] [Thread-202372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:05:53.849 [DEBUG] [Thread-202372] [transport.py] [_log()] Compression: none
2026-02-15T10:05:53.849 [DEBUG] [Thread-202372] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:05:53.934 [DEBUG] [Thread-202372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:05:53.934 [DEBUG] [Thread-202372] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:05:53.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:05:53.935 [DEBUG] [Thread-202372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:05:53.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:05:54.056 [DEBUG] [Thread-202372] [transport.py] [_log()] userauth is OK
2026-02-15T10:05:54.056 [DEBUG] [Thread-202372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:05:54.056 [DEBUG] [Thread-202372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:05:54.056 [DEBUG] [Thread-202372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:05:54.056 [DEBUG] [Thread-202372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:05:54.102 [INFO] [Thread-202372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:05:54.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:05:54.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:05:54.958 [DEBUG] [Thread-202372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:05:54.958 [DEBUG] [Thread-202372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:05:55.038 [DEBUG] [Thread-202372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:05:55.038 [DEBUG] [Thread-202372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:05:55.078 [DEBUG] [Thread-202372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:05:55.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:05:55.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:05:55.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:05:55.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:05:55.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:05:55.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:05:55.234 [DEBUG] [Thread-202372] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:05:57.983 [DEBUG] [Thread-202374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:04.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:04.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:13.015 [DEBUG] [Thread-202375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:25.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:06:25.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:06:25.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:06:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 5, 49), 10.15, 50.14, 0.0, 21.16, 13.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:06:27.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:05:49
2026-02-15T10:06:28.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:06:28.040 [DEBUG] [Thread-202376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:28.181 [DEBUG] [Thread-202377] [transport.py] [_log()] starting thread (client mode): 0xa2db7700
2026-02-15T10:06:28.181 [DEBUG] [Thread-202377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:06:28.202 [DEBUG] [Thread-202377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:06:28.202 [INFO] [Thread-202377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:06:28.205 [DEBUG] [Thread-202377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:06:28.205 [DEBUG] [Thread-202377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] client lang: <none>
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] server lang: <none>
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] kex follows: False
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] Compression: none
2026-02-15T10:06:28.206 [DEBUG] [Thread-202377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:06:28.217 [DEBUG] [Thread-202377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:06:28.217 [DEBUG] [Thread-202377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:06:28.217 [DEBUG] [Thread-202377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:06:28.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:06:28.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:06:28.218 [DEBUG] [Thread-202377] [transport.py] [_log()] userauth is OK
2026-02-15T10:06:28.218 [DEBUG] [Thread-202377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:06:28.218 [DEBUG] [Thread-202377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:06:28.218 [DEBUG] [Thread-202377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:06:28.218 [DEBUG] [Thread-202377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:06:28.228 [INFO] [Thread-202377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:06:28.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:06:28.823 [DEBUG] [Thread-202377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:06:28.823 [DEBUG] [Thread-202377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:06:28.823 [DEBUG] [Thread-202377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:06:28.864 [DEBUG] [Thread-202377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:06:28.864 [DEBUG] [Thread-202377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:06:28.866 [DEBUG] [Thread-202377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:06:28.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:06:28.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:06:28.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:06:28.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:06:28.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:06:28.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.337253 -999.00  +12.50  19.22     55   +3.70 1 1 1 1 1   888    0 12.88 170.06 ----- 19.2 19.2 139.0 26.7 19.4 -27.4 18.6 -25.7 17.1 -26.2 18.0 -28.0
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:06:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.337253
2026-02-15T10:06:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:06:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:06:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:06:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:06:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:06:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:05:49', tmtdew=10.15, humidity=50.14, cloud=0.0, wind=21.16, temperature=13.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:05:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:06:28.887 [DEBUG] [Thread-202377] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:06:28.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:06:28.972 [DEBUG] [Thread-202380] [transport.py] [_log()] starting thread (client mode): 0xa2db6e90
2026-02-15T10:06:28.972 [DEBUG] [Thread-202380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:06:28.987 [DEBUG] [Thread-202380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:06:28.987 [INFO] [Thread-202380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] client lang: <none>
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] server lang: <none>
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] kex follows: False
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] Compression: none
2026-02-15T10:06:28.995 [DEBUG] [Thread-202380] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:06:29.050 [DEBUG] [Thread-202380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:06:29.050 [DEBUG] [Thread-202380] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:06:29.050 [DEBUG] [Thread-202380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:06:29.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:06:29.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:06:29.107 [DEBUG] [Thread-202380] [transport.py] [_log()] userauth is OK
2026-02-15T10:06:29.108 [DEBUG] [Thread-202380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:06:29.108 [DEBUG] [Thread-202380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:06:29.108 [DEBUG] [Thread-202380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:06:29.108 [DEBUG] [Thread-202380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:06:29.121 [INFO] [Thread-202380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:06:29.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:06:29.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:06:29.934 [DEBUG] [Thread-202380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:06:29.934 [DEBUG] [Thread-202380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:06:29.981 [DEBUG] [Thread-202380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:06:29.981 [DEBUG] [Thread-202380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:06:29.990 [DEBUG] [Thread-202380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:06:29.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:06:29.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:06:30.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:06:30.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:06:30.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:06:30.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:06:30.021 [DEBUG] [Thread-202380] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:06:41.314 [DEBUG] [Thread-202382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:43.066 [DEBUG] [Thread-202383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:06:58.096 [DEBUG] [Thread-202384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:00.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:07:00.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:07:00.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:07:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 6, 25), 10.01, 50.66, 0.0, 24.21, 13.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:07:02.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:06:25
2026-02-15T10:07:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:07:02.559 [DEBUG] [Thread-202385] [transport.py] [_log()] starting thread (client mode): 0xa2d03580
2026-02-15T10:07:02.560 [DEBUG] [Thread-202385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:07:02.576 [DEBUG] [Thread-202385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:07:02.576 [INFO] [Thread-202385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:07:02.578 [DEBUG] [Thread-202385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] client lang: <none>
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] server lang: <none>
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] kex follows: False
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] Compression: none
2026-02-15T10:07:02.579 [DEBUG] [Thread-202385] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:07:02.594 [DEBUG] [Thread-202385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:07:02.594 [DEBUG] [Thread-202385] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:07:02.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:07:02.594 [DEBUG] [Thread-202385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:07:02.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:07:02.595 [DEBUG] [Thread-202385] [transport.py] [_log()] userauth is OK
2026-02-15T10:07:02.595 [DEBUG] [Thread-202385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:07:02.595 [DEBUG] [Thread-202385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:07:02.595 [DEBUG] [Thread-202385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:07:02.595 [DEBUG] [Thread-202385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:07:02.621 [INFO] [Thread-202385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:07:02.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:07:03.247 [DEBUG] [Thread-202385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:07:03.248 [DEBUG] [Thread-202385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:07:03.248 [DEBUG] [Thread-202385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:07:03.289 [DEBUG] [Thread-202385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:07:03.289 [DEBUG] [Thread-202385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:07:03.291 [DEBUG] [Thread-202385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:07:03.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:07:03.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:07:03.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:07:03.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:07:03.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:07:03.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:07:03.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.337600 -999.00  +12.80  23.65     54   +3.80 1 1 1 1 1   888    0 12.37 152.06 ----- 23.6 23.6 139.2 32.1 19.6 -27.0 18.6 -26.1 17.2 -25.9 18.0 -27.1
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.337600
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:07:03.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:06:25', tmtdew=10.01, humidity=50.66, cloud=0.0, wind=24.21, temperature=13.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:06:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:07:03.306 [DEBUG] [Thread-202385] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:07:03.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:07:04.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:04.251 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:13.119 [DEBUG] [Thread-202388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:28.156 [DEBUG] [Thread-202389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:41.345 [DEBUG] [Thread-202390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:43.182 [DEBUG] [Thread-202391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:07:58.205 [DEBUG] [Thread-202392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:04.396 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:04.396 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:13.230 [DEBUG] [Thread-202393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:28.253 [DEBUG] [Thread-202394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:41.397 [DEBUG] [Thread-202395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:43.274 [DEBUG] [Thread-202396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:08:58.298 [DEBUG] [Thread-202397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:04.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:04.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:13.327 [DEBUG] [Thread-202398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:17.113 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T10:09:28.365 [DEBUG] [Thread-202399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:41.455 [DEBUG] [Thread-202400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:43.405 [DEBUG] [Thread-202401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:09:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:09:47.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:09:47.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:09:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 9, 24), 10.25, 49.84, 0.0, 25.25, 12.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:09:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:09:24
2026-02-15T10:09:49.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:09:49.519 [DEBUG] [Thread-202402] [transport.py] [_log()] starting thread (client mode): 0xa57c0100
2026-02-15T10:09:49.519 [DEBUG] [Thread-202402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:09:49.539 [DEBUG] [Thread-202402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:09:49.539 [INFO] [Thread-202402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] client lang: <none>
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] server lang: <none>
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] kex follows: False
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] Compression: none
2026-02-15T10:09:49.542 [DEBUG] [Thread-202402] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:09:49.560 [DEBUG] [Thread-202402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:09:49.561 [DEBUG] [Thread-202402] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:09:49.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:09:49.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:09:49.562 [DEBUG] [Thread-202402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:09:49.563 [DEBUG] [Thread-202402] [transport.py] [_log()] userauth is OK
2026-02-15T10:09:49.563 [DEBUG] [Thread-202402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:09:49.563 [DEBUG] [Thread-202402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:09:49.563 [DEBUG] [Thread-202402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:09:49.563 [DEBUG] [Thread-202402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:09:49.588 [INFO] [Thread-202402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:09:49.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:09:50.180 [DEBUG] [Thread-202402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:09:50.180 [DEBUG] [Thread-202402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:09:50.180 [DEBUG] [Thread-202402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:09:50.221 [DEBUG] [Thread-202402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:09:50.222 [DEBUG] [Thread-202402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:09:50.225 [DEBUG] [Thread-202402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:09:50.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:09:50.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:09:50.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:09:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:09:50.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:09:50.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:09:50.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:09:50.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:09:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:09:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.339683 -999.00  +12.90  19.13     53   +3.60 1 1 1 1 1   888    0 11.37 114.16 ----- 19.1 19.1 140.8 31.1 19.8 -27.7 18.9 -26.6 17.5 -27.1 18.4 -26.3
2026-02-15T10:09:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:09:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:09:50.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.339683
2026-02-15T10:09:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:09:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:09:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:09:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:09:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:09:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:09:24', tmtdew=10.25, humidity=49.84, cloud=0.0, wind=25.25, temperature=12.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:09:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:09:50.251 [DEBUG] [Thread-202402] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:09:50.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:09:50.348 [DEBUG] [Thread-202405] [transport.py] [_log()] starting thread (client mode): 0xa57c2c20
2026-02-15T10:09:50.348 [DEBUG] [Thread-202405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:09:50.365 [DEBUG] [Thread-202405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:09:50.366 [INFO] [Thread-202405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:09:50.375 [DEBUG] [Thread-202405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:09:50.375 [DEBUG] [Thread-202405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:09:50.375 [DEBUG] [Thread-202405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:09:50.375 [DEBUG] [Thread-202405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] client lang: <none>
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] server lang: <none>
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] kex follows: False
2026-02-15T10:09:50.376 [DEBUG] [Thread-202405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:09:50.377 [DEBUG] [Thread-202405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:09:50.377 [DEBUG] [Thread-202405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:09:50.377 [DEBUG] [Thread-202405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:09:50.377 [DEBUG] [Thread-202405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:09:50.377 [DEBUG] [Thread-202405] [transport.py] [_log()] Compression: none
2026-02-15T10:09:50.377 [DEBUG] [Thread-202405] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:09:50.437 [DEBUG] [Thread-202405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:09:50.438 [DEBUG] [Thread-202405] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:09:50.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:09:50.440 [DEBUG] [Thread-202405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:09:50.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:09:50.496 [DEBUG] [Thread-202405] [transport.py] [_log()] userauth is OK
2026-02-15T10:09:50.496 [DEBUG] [Thread-202405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:09:50.497 [DEBUG] [Thread-202405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:09:50.497 [DEBUG] [Thread-202405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:09:50.497 [DEBUG] [Thread-202405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:09:50.516 [INFO] [Thread-202405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:09:50.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:09:50.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:09:51.348 [DEBUG] [Thread-202405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:09:51.348 [DEBUG] [Thread-202405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:09:51.396 [DEBUG] [Thread-202405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:09:51.396 [DEBUG] [Thread-202405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:09:51.406 [DEBUG] [Thread-202405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:09:51.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:09:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:09:51.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:09:51.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:09:51.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:09:51.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:09:51.442 [DEBUG] [Thread-202405] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:09:58.441 [DEBUG] [Thread-202407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:04.715 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:04.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:13.492 [DEBUG] [Thread-202408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:21.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:10:21.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:10:21.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:10:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 9, 59), 10.29, 49.36, 0.0, 24.3, 12.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:10:23.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:09:59
2026-02-15T10:10:23.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:10:23.948 [DEBUG] [Thread-202409] [transport.py] [_log()] starting thread (client mode): 0xa2dc2e60
2026-02-15T10:10:23.949 [DEBUG] [Thread-202409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:10:23.968 [DEBUG] [Thread-202409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:10:23.968 [INFO] [Thread-202409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:10:23.971 [DEBUG] [Thread-202409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:10:23.971 [DEBUG] [Thread-202409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] client lang: <none>
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] server lang: <none>
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] kex follows: False
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] Compression: none
2026-02-15T10:10:23.972 [DEBUG] [Thread-202409] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:10:23.987 [DEBUG] [Thread-202409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:10:23.987 [DEBUG] [Thread-202409] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:10:23.987 [DEBUG] [Thread-202409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:10:23.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:10:23.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:10:23.988 [DEBUG] [Thread-202409] [transport.py] [_log()] userauth is OK
2026-02-15T10:10:23.988 [DEBUG] [Thread-202409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:10:23.988 [DEBUG] [Thread-202409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:10:23.988 [DEBUG] [Thread-202409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:10:23.988 [DEBUG] [Thread-202409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:10:23.999 [INFO] [Thread-202409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:10:23.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:10:24.633 [DEBUG] [Thread-202409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:10:24.633 [DEBUG] [Thread-202409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:10:24.633 [DEBUG] [Thread-202409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:10:24.674 [DEBUG] [Thread-202409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:10:24.674 [DEBUG] [Thread-202409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:10:24.677 [DEBUG] [Thread-202409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:10:24.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:10:24.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:10:24.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:10:24.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:10:24.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:10:24.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:10:24.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.340030 -999.00  +13.10  15.49     54   +4.10 1 1 1 1 1   888    0 11.47 115.59 ----- 15.5 15.5 156.3 23.1 19.8 -28.4 18.9 -26.8 17.6 -25.9 18.3 -27.2
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.340030
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:10:24.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:09:59', tmtdew=10.29, humidity=49.36, cloud=0.0, wind=24.3, temperature=12.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:09:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:10:24.702 [DEBUG] [Thread-202409] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:10:24.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:10:24.811 [DEBUG] [Thread-202412] [transport.py] [_log()] starting thread (client mode): 0xa2d03700
2026-02-15T10:10:24.811 [DEBUG] [Thread-202412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:10:24.853 [DEBUG] [Thread-202412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:10:24.853 [INFO] [Thread-202412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] client lang: <none>
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] server lang: <none>
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] kex follows: False
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] Compression: none
2026-02-15T10:10:24.884 [DEBUG] [Thread-202412] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:10:24.973 [DEBUG] [Thread-202412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:10:24.973 [DEBUG] [Thread-202412] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:10:24.973 [DEBUG] [Thread-202412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:10:24.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:10:24.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:10:25.083 [DEBUG] [Thread-202412] [transport.py] [_log()] userauth is OK
2026-02-15T10:10:25.083 [DEBUG] [Thread-202412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:10:25.083 [DEBUG] [Thread-202412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:10:25.083 [DEBUG] [Thread-202412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:10:25.083 [DEBUG] [Thread-202412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:10:25.124 [INFO] [Thread-202412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:10:25.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:10:25.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:10:26.018 [DEBUG] [Thread-202412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:10:26.027 [DEBUG] [Thread-202412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:10:26.097 [DEBUG] [Thread-202412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:10:26.097 [DEBUG] [Thread-202412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:10:26.134 [DEBUG] [Thread-202412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:10:26.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:10:26.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:10:26.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:10:26.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:10:26.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:10:26.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:10:26.290 [DEBUG] [Thread-202412] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:10:28.523 [DEBUG] [Thread-202414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:41.493 [DEBUG] [Thread-202415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:43.558 [DEBUG] [Thread-202416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:56.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:10:56.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:10:56.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:10:58.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 10, 35), 11.15, 47.02, 0.0, 27.91, 14.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:10:58.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:10:35
2026-02-15T10:10:58.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:10:58.584 [DEBUG] [Thread-202417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:10:58.679 [DEBUG] [Thread-202418] [transport.py] [_log()] starting thread (client mode): 0xa5758850
2026-02-15T10:10:58.679 [DEBUG] [Thread-202418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:10:58.699 [DEBUG] [Thread-202418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:10:58.699 [INFO] [Thread-202418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] client lang: <none>
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] server lang: <none>
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] kex follows: False
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] Compression: none
2026-02-15T10:10:58.702 [DEBUG] [Thread-202418] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:10:58.713 [DEBUG] [Thread-202418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:10:58.714 [DEBUG] [Thread-202418] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:10:58.714 [DEBUG] [Thread-202418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:10:58.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:10:58.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:10:58.715 [DEBUG] [Thread-202418] [transport.py] [_log()] userauth is OK
2026-02-15T10:10:58.715 [DEBUG] [Thread-202418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:10:58.715 [DEBUG] [Thread-202418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:10:58.715 [DEBUG] [Thread-202418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:10:58.715 [DEBUG] [Thread-202418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:10:58.724 [INFO] [Thread-202418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:10:58.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:10:59.363 [DEBUG] [Thread-202418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:10:59.363 [DEBUG] [Thread-202418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:10:59.363 [DEBUG] [Thread-202418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:10:59.404 [DEBUG] [Thread-202418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:10:59.404 [DEBUG] [Thread-202418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:10:59.406 [DEBUG] [Thread-202418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:10:59.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:10:59.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:10:59.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:10:59.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:10:59.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:10:59.436 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:10:59.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.340725 -999.00  +13.20  16.24     53   +3.90 1 1 1 1 1   888    0 11.22 107.89 ----- 16.2 16.2 147.2 21.3 20.0 -27.3 18.9 -26.0 17.6 -25.9 18.4 -27.8
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.340725
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:10:59.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:10:35', tmtdew=11.15, humidity=47.02, cloud=0.0, wind=27.91, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:10:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:10:59.437 [DEBUG] [Thread-202418] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:10:59.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:10:59.520 [DEBUG] [Thread-202421] [transport.py] [_log()] starting thread (client mode): 0xa575bcd0
2026-02-15T10:10:59.520 [DEBUG] [Thread-202421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:10:59.535 [DEBUG] [Thread-202421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:10:59.535 [INFO] [Thread-202421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] client lang: <none>
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] server lang: <none>
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] kex follows: False
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] Compression: none
2026-02-15T10:10:59.543 [DEBUG] [Thread-202421] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:10:59.597 [DEBUG] [Thread-202421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:10:59.598 [DEBUG] [Thread-202421] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:10:59.598 [DEBUG] [Thread-202421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:10:59.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:10:59.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:10:59.655 [DEBUG] [Thread-202421] [transport.py] [_log()] userauth is OK
2026-02-15T10:10:59.655 [DEBUG] [Thread-202421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:10:59.655 [DEBUG] [Thread-202421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:10:59.655 [DEBUG] [Thread-202421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:10:59.655 [DEBUG] [Thread-202421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:10:59.669 [INFO] [Thread-202421] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:10:59.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:10:59.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:11:00.477 [DEBUG] [Thread-202421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:11:00.477 [DEBUG] [Thread-202421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:11:00.530 [DEBUG] [Thread-202421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:11:00.530 [DEBUG] [Thread-202421] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:11:00.538 [DEBUG] [Thread-202421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:11:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:11:00.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:11:00.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:11:00.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:11:00.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:11:00.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:11:00.575 [DEBUG] [Thread-202421] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:11:04.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:11:04.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:11:13.614 [DEBUG] [Thread-202423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:11:28.655 [DEBUG] [Thread-202424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:11:30.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:11:30.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:11:30.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:11:32.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 11, 10), 11.09, 47.33, 0.0, 25.35, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:11:32.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:11:10
2026-02-15T10:11:32.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:11:32.957 [DEBUG] [Thread-202425] [transport.py] [_log()] starting thread (client mode): 0xa2db7ac0
2026-02-15T10:11:32.958 [DEBUG] [Thread-202425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:11:32.978 [DEBUG] [Thread-202425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:11:32.978 [INFO] [Thread-202425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:11:32.981 [DEBUG] [Thread-202425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] client lang: <none>
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] server lang: <none>
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] kex follows: False
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] Compression: none
2026-02-15T10:11:32.982 [DEBUG] [Thread-202425] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:11:33.000 [DEBUG] [Thread-202425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:11:33.001 [DEBUG] [Thread-202425] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:11:33.001 [DEBUG] [Thread-202425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:11:33.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:11:33.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:11:33.003 [DEBUG] [Thread-202425] [transport.py] [_log()] userauth is OK
2026-02-15T10:11:33.003 [DEBUG] [Thread-202425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:11:33.003 [DEBUG] [Thread-202425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:11:33.003 [DEBUG] [Thread-202425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:11:33.004 [DEBUG] [Thread-202425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:11:33.027 [INFO] [Thread-202425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:11:33.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:11:33.626 [DEBUG] [Thread-202425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:11:33.626 [DEBUG] [Thread-202425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:11:33.627 [DEBUG] [Thread-202425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:11:33.667 [DEBUG] [Thread-202425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:11:33.668 [DEBUG] [Thread-202425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:11:33.671 [DEBUG] [Thread-202425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:11:33.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:11:33.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:11:33.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:11:33.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:11:33.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:11:33.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:11:33.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:11:33.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:11:33.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:11:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.341072 -999.00  +13.40  26.67     53   +4.20 1 1 1 1 1   888    0 11.51 114.02 ----- 26.7 26.7 143.4 32.2 20.0 -28.4 19.0 -27.4 17.7 -25.5 18.5 -27.9
2026-02-15T10:11:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:11:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:11:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.341072
2026-02-15T10:11:33.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:11:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:11:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:11:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:11:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:11:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:11:10', tmtdew=11.09, humidity=47.33, cloud=0.0, wind=25.35, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:11:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:11:33.698 [DEBUG] [Thread-202425] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:11:33.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:11:33.799 [DEBUG] [Thread-202428] [transport.py] [_log()] starting thread (client mode): 0xa2db7b20
2026-02-15T10:11:33.799 [DEBUG] [Thread-202428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:11:33.813 [DEBUG] [Thread-202428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:11:33.813 [INFO] [Thread-202428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] client lang: <none>
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] server lang: <none>
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] kex follows: False
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:11:33.821 [DEBUG] [Thread-202428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:11:33.822 [DEBUG] [Thread-202428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:11:33.822 [DEBUG] [Thread-202428] [transport.py] [_log()] Compression: none
2026-02-15T10:11:33.822 [DEBUG] [Thread-202428] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:11:33.880 [DEBUG] [Thread-202428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:11:33.880 [DEBUG] [Thread-202428] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:11:33.881 [DEBUG] [Thread-202428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:11:33.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:11:33.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:11:33.935 [DEBUG] [Thread-202428] [transport.py] [_log()] userauth is OK
2026-02-15T10:11:33.935 [DEBUG] [Thread-202428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:11:33.935 [DEBUG] [Thread-202428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:11:33.935 [DEBUG] [Thread-202428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:11:33.935 [DEBUG] [Thread-202428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:11:33.949 [INFO] [Thread-202428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:11:33.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:11:33.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:11:34.748 [DEBUG] [Thread-202428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:11:34.749 [DEBUG] [Thread-202428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:11:34.796 [DEBUG] [Thread-202428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:11:34.797 [DEBUG] [Thread-202428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:11:34.806 [DEBUG] [Thread-202428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:11:34.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:11:34.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:11:34.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:11:34.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:11:34.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:11:34.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:11:34.842 [DEBUG] [Thread-202428] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:11:41.556 [DEBUG] [Thread-202430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:11:43.696 [DEBUG] [Thread-202431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:11:58.750 [DEBUG] [Thread-202432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:12:04.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:12:04.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:12:05.007 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:05.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:06.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 11, 45), 11.19, 46.65, 0.0, 25.36, 13.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:12:06.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:11:45
2026-02-15T10:12:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:12:07.455 [DEBUG] [Thread-202433] [transport.py] [_log()] starting thread (client mode): 0xa2db76d0
2026-02-15T10:12:07.455 [DEBUG] [Thread-202433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:12:07.475 [DEBUG] [Thread-202433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:12:07.475 [INFO] [Thread-202433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] client lang: <none>
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] server lang: <none>
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] kex follows: False
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] Compression: none
2026-02-15T10:12:07.478 [DEBUG] [Thread-202433] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:12:07.496 [DEBUG] [Thread-202433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:12:07.496 [DEBUG] [Thread-202433] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:12:07.497 [DEBUG] [Thread-202433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:12:07.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:12:07.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:12:07.541 [DEBUG] [Thread-202433] [transport.py] [_log()] userauth is OK
2026-02-15T10:12:07.541 [DEBUG] [Thread-202433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:12:07.541 [DEBUG] [Thread-202433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:12:07.542 [DEBUG] [Thread-202433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:12:07.542 [DEBUG] [Thread-202433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:12:07.576 [INFO] [Thread-202433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:12:07.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:12:08.514 [DEBUG] [Thread-202433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:12:08.514 [DEBUG] [Thread-202433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:12:08.515 [DEBUG] [Thread-202433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:12:08.555 [DEBUG] [Thread-202433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:12:08.556 [DEBUG] [Thread-202433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:12:08.559 [DEBUG] [Thread-202433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:12:08.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:12:08.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:12:08.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:12:08.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:12:08.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:12:08.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:12:08.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:12:08.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:12:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:12:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.341419 -999.00  +13.20  18.04     52   +3.80 1 1 1 1 1   888    0 11.66 118.41 ----- 18.0 18.0 135.2 29.1 20.0 -27.6 19.0 -26.6 17.7 -26.6 18.4 -29.3
2026-02-15T10:12:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:12:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:12:08.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.341419
2026-02-15T10:12:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:12:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:12:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:12:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:12:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:12:08.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:11:45', tmtdew=11.19, humidity=46.65, cloud=0.0, wind=25.36, temperature=13.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:11:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:12:08.590 [DEBUG] [Thread-202433] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:12:08.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:12:08.693 [DEBUG] [Thread-202436] [transport.py] [_log()] starting thread (client mode): 0xa2db4820
2026-02-15T10:12:08.693 [DEBUG] [Thread-202436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:12:08.708 [DEBUG] [Thread-202436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:12:08.708 [INFO] [Thread-202436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] client lang: <none>
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] server lang: <none>
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] kex follows: False
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:12:08.716 [DEBUG] [Thread-202436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:12:08.717 [DEBUG] [Thread-202436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:12:08.717 [DEBUG] [Thread-202436] [transport.py] [_log()] Compression: none
2026-02-15T10:12:08.717 [DEBUG] [Thread-202436] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:12:08.777 [DEBUG] [Thread-202436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:12:08.778 [DEBUG] [Thread-202436] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:12:08.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:12:08.779 [DEBUG] [Thread-202436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:12:08.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:12:08.835 [DEBUG] [Thread-202436] [transport.py] [_log()] userauth is OK
2026-02-15T10:12:08.835 [DEBUG] [Thread-202436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:12:08.835 [DEBUG] [Thread-202436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:12:08.835 [DEBUG] [Thread-202436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:12:08.835 [DEBUG] [Thread-202436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:12:08.854 [INFO] [Thread-202436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:12:08.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:12:08.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:12:09.688 [DEBUG] [Thread-202436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:12:09.688 [DEBUG] [Thread-202436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:12:09.737 [DEBUG] [Thread-202436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:12:09.737 [DEBUG] [Thread-202436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:12:09.746 [DEBUG] [Thread-202436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:12:09.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:12:09.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:12:09.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:12:09.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:12:09.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:12:09.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:12:09.780 [DEBUG] [Thread-202436] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:12:13.790 [DEBUG] [Thread-202438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:28.850 [DEBUG] [Thread-202439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:39.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:12:39.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:12:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:12:41.632 [DEBUG] [Thread-202440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:41.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 12, 21), 11.03, 47.11, 0.0, 25.2, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:12:41.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:12:21
2026-02-15T10:12:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:12:42.396 [DEBUG] [Thread-202441] [transport.py] [_log()] starting thread (client mode): 0xa2db4400
2026-02-15T10:12:42.397 [DEBUG] [Thread-202441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:12:42.416 [DEBUG] [Thread-202441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:12:42.417 [INFO] [Thread-202441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] client lang: <none>
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] server lang: <none>
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] kex follows: False
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] Compression: none
2026-02-15T10:12:42.420 [DEBUG] [Thread-202441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:12:42.437 [DEBUG] [Thread-202441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:12:42.438 [DEBUG] [Thread-202441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:12:42.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:12:42.439 [DEBUG] [Thread-202441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:12:42.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:12:42.441 [DEBUG] [Thread-202441] [transport.py] [_log()] userauth is OK
2026-02-15T10:12:42.442 [DEBUG] [Thread-202441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:12:42.442 [DEBUG] [Thread-202441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:12:42.442 [DEBUG] [Thread-202441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:12:42.442 [DEBUG] [Thread-202441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:12:42.464 [INFO] [Thread-202441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:12:42.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:12:43.121 [DEBUG] [Thread-202441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:12:43.121 [DEBUG] [Thread-202441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:12:43.122 [DEBUG] [Thread-202441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:12:43.162 [DEBUG] [Thread-202441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:12:43.162 [DEBUG] [Thread-202441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:12:43.165 [DEBUG] [Thread-202441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:12:43.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:12:43.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:12:43.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:12:43.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:12:43.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:12:43.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:12:43.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:12:43.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:12:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:12:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.341767 -999.00  +13.30  19.60     53   +4.00 1 1 1 1 1   888    0 11.47 109.67 ----- 19.6 19.6 159.8 27.4 19.9 -29.2 18.9 -26.6 17.7 -27.1 18.5 -27.8
2026-02-15T10:12:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:12:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:12:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.341767
2026-02-15T10:12:43.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:12:43.196 [DEBUG] [Thread-202441] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:12:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:12:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:12:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:12:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:12:43.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:12:21', tmtdew=11.03, humidity=47.11, cloud=0.0, wind=25.2, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:12:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:12:43.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:12:43.307 [DEBUG] [Thread-202444] [transport.py] [_log()] starting thread (client mode): 0xa2dc0df0
2026-02-15T10:12:43.307 [DEBUG] [Thread-202444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:12:43.323 [DEBUG] [Thread-202444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:12:43.324 [INFO] [Thread-202444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:12:43.334 [DEBUG] [Thread-202444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:12:43.334 [DEBUG] [Thread-202444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:12:43.334 [DEBUG] [Thread-202444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] client lang: <none>
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] server lang: <none>
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] kex follows: False
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] Compression: none
2026-02-15T10:12:43.335 [DEBUG] [Thread-202444] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:12:43.406 [DEBUG] [Thread-202444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:12:43.407 [DEBUG] [Thread-202444] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:12:43.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:12:43.409 [DEBUG] [Thread-202444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:12:43.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:12:43.468 [DEBUG] [Thread-202444] [transport.py] [_log()] userauth is OK
2026-02-15T10:12:43.469 [DEBUG] [Thread-202444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:12:43.469 [DEBUG] [Thread-202444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:12:43.469 [DEBUG] [Thread-202444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:12:43.469 [DEBUG] [Thread-202444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:12:43.491 [INFO] [Thread-202444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:12:43.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:12:43.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:12:43.896 [DEBUG] [Thread-202446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:12:44.326 [DEBUG] [Thread-202444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:12:44.327 [DEBUG] [Thread-202444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:12:44.377 [DEBUG] [Thread-202444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:12:44.377 [DEBUG] [Thread-202444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:12:44.389 [DEBUG] [Thread-202444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:12:44.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:12:44.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:12:44.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:12:44.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:12:44.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:12:44.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:12:44.435 [DEBUG] [Thread-202444] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:12:58.950 [DEBUG] [Thread-202447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:05.147 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:05.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:13.987 [DEBUG] [Thread-202448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:13:14.455 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:13:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:13:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 12, 56), 10.64, 48.13, 0.0, 22.27, 13.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:13:16.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:12:56
2026-02-15T10:13:16.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:13:16.846 [DEBUG] [Thread-202449] [transport.py] [_log()] starting thread (client mode): 0xa575b9d0
2026-02-15T10:13:16.846 [DEBUG] [Thread-202449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:13:16.861 [DEBUG] [Thread-202449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:13:16.861 [INFO] [Thread-202449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] client lang: <none>
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] server lang: <none>
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] kex follows: False
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:13:16.864 [DEBUG] [Thread-202449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:13:16.865 [DEBUG] [Thread-202449] [transport.py] [_log()] Compression: none
2026-02-15T10:13:16.865 [DEBUG] [Thread-202449] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:13:16.885 [DEBUG] [Thread-202449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:13:16.885 [DEBUG] [Thread-202449] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:13:16.886 [DEBUG] [Thread-202449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:13:16.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:13:16.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:13:16.888 [DEBUG] [Thread-202449] [transport.py] [_log()] userauth is OK
2026-02-15T10:13:16.888 [DEBUG] [Thread-202449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:13:16.888 [DEBUG] [Thread-202449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:13:16.888 [DEBUG] [Thread-202449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:13:16.888 [DEBUG] [Thread-202449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:13:16.907 [INFO] [Thread-202449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:13:16.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:13:17.724 [DEBUG] [Thread-202449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:13:17.725 [DEBUG] [Thread-202449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:13:17.725 [DEBUG] [Thread-202449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:13:17.765 [DEBUG] [Thread-202449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:13:17.766 [DEBUG] [Thread-202449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:13:17.770 [DEBUG] [Thread-202449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:13:17.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:13:17.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:13:17.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:13:17.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:13:17.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:13:17.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:13:17.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:13:17.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:13:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:13:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.342114 -999.00  +13.00  19.71     53   +3.80 1 1 1 1 1   888    0 11.84 116.60 ----- 19.7 19.7 164.4 28.8 20.0 -29.8 18.9 -26.9 17.6 -26.8 18.5 -28.1
2026-02-15T10:13:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:13:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:13:17.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.342114
2026-02-15T10:13:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:13:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:13:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:13:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:13:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:13:17.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:12:56', tmtdew=10.64, humidity=48.13, cloud=0.0, wind=22.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-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:12:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:13:17.797 [DEBUG] [Thread-202449] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:13:17.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:13:17.893 [DEBUG] [Thread-202452] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T10:13:17.894 [DEBUG] [Thread-202452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:13:17.911 [DEBUG] [Thread-202452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:13:17.912 [INFO] [Thread-202452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:13:17.922 [DEBUG] [Thread-202452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:13:17.922 [DEBUG] [Thread-202452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:13:17.922 [DEBUG] [Thread-202452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:13:17.922 [DEBUG] [Thread-202452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:17.922 [DEBUG] [Thread-202452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:17.922 [DEBUG] [Thread-202452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] client lang: <none>
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] server lang: <none>
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] kex follows: False
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:13:17.923 [DEBUG] [Thread-202452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:13:17.931 [DEBUG] [Thread-202452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:13:17.932 [DEBUG] [Thread-202452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:13:17.932 [DEBUG] [Thread-202452] [transport.py] [_log()] Compression: none
2026-02-15T10:13:17.932 [DEBUG] [Thread-202452] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:13:17.983 [DEBUG] [Thread-202452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:13:17.984 [DEBUG] [Thread-202452] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:13:17.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:13:17.985 [DEBUG] [Thread-202452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:13:17.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:13:18.046 [DEBUG] [Thread-202452] [transport.py] [_log()] userauth is OK
2026-02-15T10:13:18.047 [DEBUG] [Thread-202452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:13:18.047 [DEBUG] [Thread-202452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:13:18.047 [DEBUG] [Thread-202452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:13:18.047 [DEBUG] [Thread-202452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:13:18.067 [INFO] [Thread-202452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:13:18.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:13:18.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:13:18.910 [DEBUG] [Thread-202452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:13:18.911 [DEBUG] [Thread-202452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:13:18.961 [DEBUG] [Thread-202452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:13:18.961 [DEBUG] [Thread-202452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:13:18.972 [DEBUG] [Thread-202452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:13:18.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:13:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:13:18.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:13:19.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:13:19.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:13:19.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:13:19.018 [DEBUG] [Thread-202452] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:13:29.024 [DEBUG] [Thread-202454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:41.690 [DEBUG] [Thread-202455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:44.085 [DEBUG] [Thread-202456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:13:49.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:13:49.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:13:49.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:13:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 13, 31), 10.54, 48.43, 0.0, 25.95, 12.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:13:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:13:31
2026-02-15T10:13:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:13:51.355 [DEBUG] [Thread-202457] [transport.py] [_log()] starting thread (client mode): 0xa575bcd0
2026-02-15T10:13:51.355 [DEBUG] [Thread-202457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:13:51.375 [DEBUG] [Thread-202457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:13:51.375 [INFO] [Thread-202457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:13:51.378 [DEBUG] [Thread-202457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] client lang: <none>
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] server lang: <none>
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] kex follows: False
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] Compression: none
2026-02-15T10:13:51.379 [DEBUG] [Thread-202457] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:13:51.396 [DEBUG] [Thread-202457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:13:51.396 [DEBUG] [Thread-202457] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:13:51.396 [DEBUG] [Thread-202457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:13:51.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:13:51.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:13:51.440 [DEBUG] [Thread-202457] [transport.py] [_log()] userauth is OK
2026-02-15T10:13:51.440 [DEBUG] [Thread-202457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:13:51.440 [DEBUG] [Thread-202457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:13:51.440 [DEBUG] [Thread-202457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:13:51.440 [DEBUG] [Thread-202457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:13:51.455 [INFO] [Thread-202457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:13:51.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:13:52.098 [DEBUG] [Thread-202457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:13:52.098 [DEBUG] [Thread-202457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:13:52.098 [DEBUG] [Thread-202457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:13:52.139 [DEBUG] [Thread-202457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:13:52.139 [DEBUG] [Thread-202457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:13:52.141 [DEBUG] [Thread-202457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:13:52.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:13:52.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:13:52.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:13:52.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:13:52.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:13:52.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:13:52.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:13:52.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.342461 -999.00  +12.80  20.66     54   +3.80 1 1 1 1 1   888    0 11.80 116.59 ----- 20.7 20.7 164.2 28.7 19.9 -27.5 18.9 -25.8 17.6 -26.1 18.5 -27.5
2026-02-15T10:13:52.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.342461
2026-02-15T10:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:13:52.159 [DEBUG] [Thread-202457] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:13:52.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:13:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:13:52.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:13:31', tmtdew=10.54, humidity=48.43, cloud=0.0, wind=25.95, temperature=12.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:13:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:13:52.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:13:52.261 [DEBUG] [Thread-202460] [transport.py] [_log()] starting thread (client mode): 0xa57c0760
2026-02-15T10:13:52.262 [DEBUG] [Thread-202460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:13:52.277 [DEBUG] [Thread-202460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:13:52.278 [INFO] [Thread-202460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] client lang: <none>
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] server lang: <none>
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] kex follows: False
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:13:52.285 [DEBUG] [Thread-202460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:13:52.286 [DEBUG] [Thread-202460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:13:52.286 [DEBUG] [Thread-202460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:13:52.286 [DEBUG] [Thread-202460] [transport.py] [_log()] Compression: none
2026-02-15T10:13:52.286 [DEBUG] [Thread-202460] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:13:52.346 [DEBUG] [Thread-202460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:13:52.347 [DEBUG] [Thread-202460] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:13:52.348 [DEBUG] [Thread-202460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:13:52.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:13:52.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:13:52.402 [DEBUG] [Thread-202460] [transport.py] [_log()] userauth is OK
2026-02-15T10:13:52.402 [DEBUG] [Thread-202460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:13:52.402 [DEBUG] [Thread-202460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:13:52.402 [DEBUG] [Thread-202460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:13:52.402 [DEBUG] [Thread-202460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:13:52.421 [INFO] [Thread-202460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:13:52.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:13:52.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:13:53.307 [DEBUG] [Thread-202460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:13:53.308 [DEBUG] [Thread-202460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:13:53.355 [DEBUG] [Thread-202460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:13:53.355 [DEBUG] [Thread-202460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:13:53.364 [DEBUG] [Thread-202460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:13:53.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:13:53.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:13:53.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:13:53.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:13:53.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:13:53.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:13:53.400 [DEBUG] [Thread-202460] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:13:59.123 [DEBUG] [Thread-202462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:05.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:05.290 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:14.174 [DEBUG] [Thread-202463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:23.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:14:23.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:14:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:14:25.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 14, 7), 10.9, 47.3, 0.0, 25.0, 13.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:14:25.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:14:07
2026-02-15T10:14:25.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:14:25.741 [DEBUG] [Thread-202464] [transport.py] [_log()] starting thread (client mode): 0xa2db64a0
2026-02-15T10:14:25.742 [DEBUG] [Thread-202464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:14:25.762 [DEBUG] [Thread-202464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:14:25.762 [INFO] [Thread-202464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:14:25.765 [DEBUG] [Thread-202464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] client lang: <none>
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] server lang: <none>
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] kex follows: False
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] Compression: none
2026-02-15T10:14:25.766 [DEBUG] [Thread-202464] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:14:25.783 [DEBUG] [Thread-202464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:14:25.784 [DEBUG] [Thread-202464] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:14:25.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:14:25.785 [DEBUG] [Thread-202464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:14:25.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:14:25.788 [DEBUG] [Thread-202464] [transport.py] [_log()] userauth is OK
2026-02-15T10:14:25.788 [DEBUG] [Thread-202464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:14:25.788 [DEBUG] [Thread-202464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:14:25.788 [DEBUG] [Thread-202464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:14:25.789 [DEBUG] [Thread-202464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:14:25.812 [INFO] [Thread-202464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:14:25.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:14:26.552 [DEBUG] [Thread-202464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:14:26.553 [DEBUG] [Thread-202464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:14:26.553 [DEBUG] [Thread-202464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:14:26.594 [DEBUG] [Thread-202464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:14:26.594 [DEBUG] [Thread-202464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:14:26.597 [DEBUG] [Thread-202464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:14:26.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:14:26.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:14:26.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:14:26.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:14:26.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:14:26.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:14:26.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:14:26.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:14:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:14:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.342809 -999.00  +12.80  24.65     54   +3.80 1 1 1 1 1   888    0 11.80 116.38 ----- 24.6 24.6 145.2 29.0 19.9 -27.7 19.0 -26.2 17.7 -26.1 18.6 -27.5
2026-02-15T10:14:26.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:14:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:14:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.342809
2026-02-15T10:14:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:14:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:14:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:14:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:14:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:14:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:14:07', tmtdew=10.9, humidity=47.3, cloud=0.0, wind=25.0, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:13:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:14:26.628 [DEBUG] [Thread-202464] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:14:26.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:14:26.721 [DEBUG] [Thread-202467] [transport.py] [_log()] starting thread (client mode): 0xa2db7e80
2026-02-15T10:14:26.721 [DEBUG] [Thread-202467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:14:26.736 [DEBUG] [Thread-202467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:14:26.736 [INFO] [Thread-202467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:14:26.744 [DEBUG] [Thread-202467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] client lang: <none>
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] server lang: <none>
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] kex follows: False
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] Compression: none
2026-02-15T10:14:26.745 [DEBUG] [Thread-202467] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:14:26.802 [DEBUG] [Thread-202467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:14:26.802 [DEBUG] [Thread-202467] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:14:26.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:14:26.804 [DEBUG] [Thread-202467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:14:26.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:14:26.858 [DEBUG] [Thread-202467] [transport.py] [_log()] userauth is OK
2026-02-15T10:14:26.858 [DEBUG] [Thread-202467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:14:26.859 [DEBUG] [Thread-202467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:14:26.859 [DEBUG] [Thread-202467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:14:26.859 [DEBUG] [Thread-202467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:14:26.884 [INFO] [Thread-202467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:14:26.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:14:26.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:14:27.710 [DEBUG] [Thread-202467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:14:27.710 [DEBUG] [Thread-202467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:14:27.761 [DEBUG] [Thread-202467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:14:27.761 [DEBUG] [Thread-202467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:14:27.771 [DEBUG] [Thread-202467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:14:27.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:14:27.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:14:27.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:14:27.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:14:27.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:14:27.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:14:27.814 [DEBUG] [Thread-202467] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:14:29.212 [DEBUG] [Thread-202469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:41.750 [DEBUG] [Thread-202470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:44.268 [DEBUG] [Thread-202471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:57.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:14:57.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:14:57.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:14:59.303 [DEBUG] [Thread-202472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:14:59.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 14, 42), 11.03, 47.17, 0.0, 26.63, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:14:59.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:14:42
2026-02-15T10:15:00.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:15:00.352 [DEBUG] [Thread-202473] [transport.py] [_log()] starting thread (client mode): 0xa2dc0940
2026-02-15T10:15:00.352 [DEBUG] [Thread-202473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:15:00.371 [DEBUG] [Thread-202473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:15:00.371 [INFO] [Thread-202473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] client lang: <none>
2026-02-15T10:15:00.372 [DEBUG] [Thread-202473] [transport.py] [_log()] server lang: <none>
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] kex follows: False
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] Compression: none
2026-02-15T10:15:00.373 [DEBUG] [Thread-202473] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:15:00.390 [DEBUG] [Thread-202473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:15:00.390 [DEBUG] [Thread-202473] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:15:00.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:15:00.391 [DEBUG] [Thread-202473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:15:00.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:15:00.393 [DEBUG] [Thread-202473] [transport.py] [_log()] userauth is OK
2026-02-15T10:15:00.394 [DEBUG] [Thread-202473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:15:00.394 [DEBUG] [Thread-202473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:15:00.394 [DEBUG] [Thread-202473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:15:00.394 [DEBUG] [Thread-202473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:15:00.419 [INFO] [Thread-202473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:15:00.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:15:01.008 [DEBUG] [Thread-202473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:15:01.008 [DEBUG] [Thread-202473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:15:01.008 [DEBUG] [Thread-202473] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:15:01.049 [DEBUG] [Thread-202473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:15:01.049 [DEBUG] [Thread-202473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:15:01.051 [DEBUG] [Thread-202473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:15:01.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:15:01.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:15:01.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:15:01.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:15:01.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:15:01.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:15:01.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:15:01.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:15:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:15:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.343155 -999.00  +12.90  23.34     54   +3.80 1 1 1 1 1   888    0 11.88 115.59 ----- 23.3 23.3 147.6 27.2 20.0 -27.4 19.0 -26.6 17.7 -25.9 18.6 -27.5
2026-02-15T10:15:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:15:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:15:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.343155
2026-02-15T10:15:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:15:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:15:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:15:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:15:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:15:01.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:14:42', tmtdew=11.03, humidity=47.17, cloud=0.0, wind=26.63, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:14:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:15:01.075 [DEBUG] [Thread-202473] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:15: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-02-15T10:15:01.197 [DEBUG] [Thread-202476] [transport.py] [_log()] starting thread (client mode): 0xa575a200
2026-02-15T10:15:01.198 [DEBUG] [Thread-202476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:15:01.239 [DEBUG] [Thread-202476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:15:01.239 [INFO] [Thread-202476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:15:01.274 [DEBUG] [Thread-202476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:15:01.274 [DEBUG] [Thread-202476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:15:01.274 [DEBUG] [Thread-202476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:15:01.274 [DEBUG] [Thread-202476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:01.274 [DEBUG] [Thread-202476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:01.274 [DEBUG] [Thread-202476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] client lang: <none>
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] server lang: <none>
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] kex follows: False
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] Compression: none
2026-02-15T10:15:01.275 [DEBUG] [Thread-202476] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:15:01.358 [DEBUG] [Thread-202476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:15:01.359 [DEBUG] [Thread-202476] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:15:01.359 [DEBUG] [Thread-202476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:15:01.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:15:01.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:15:01.471 [DEBUG] [Thread-202476] [transport.py] [_log()] userauth is OK
2026-02-15T10:15:01.472 [DEBUG] [Thread-202476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:15:01.472 [DEBUG] [Thread-202476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:15:01.472 [DEBUG] [Thread-202476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:15:01.472 [DEBUG] [Thread-202476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:15:01.519 [INFO] [Thread-202476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:15:01.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:15:01.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:15:02.380 [DEBUG] [Thread-202476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:15:02.380 [DEBUG] [Thread-202476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:15:02.428 [DEBUG] [Thread-202476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:15:02.428 [DEBUG] [Thread-202476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:15:02.436 [DEBUG] [Thread-202476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:15:02.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:15:02.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:15:02.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:15:02.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:15:02.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:15:02.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:15:02.468 [DEBUG] [Thread-202476] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:15:05.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:15:05.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:15:14.339 [DEBUG] [Thread-202478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:15:29.402 [DEBUG] [Thread-202479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:15:32.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:15:32.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:15:32.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:15:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 15, 20), 10.87, 47.7, 0.0, 28.04, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:15:34.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:15:20
2026-02-15T10:15:34.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:15:34.855 [DEBUG] [Thread-202480] [transport.py] [_log()] starting thread (client mode): 0xa57c1750
2026-02-15T10:15:34.855 [DEBUG] [Thread-202480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:15:34.878 [DEBUG] [Thread-202480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:15:34.878 [INFO] [Thread-202480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:15:34.881 [DEBUG] [Thread-202480] [transport.py] [_log()] client lang: <none>
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] server lang: <none>
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] kex follows: False
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] Compression: none
2026-02-15T10:15:34.882 [DEBUG] [Thread-202480] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:15:34.899 [DEBUG] [Thread-202480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:15:34.899 [DEBUG] [Thread-202480] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:15:34.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:15:34.900 [DEBUG] [Thread-202480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:15:34.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:15:34.903 [DEBUG] [Thread-202480] [transport.py] [_log()] userauth is OK
2026-02-15T10:15:34.903 [DEBUG] [Thread-202480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:15:34.903 [DEBUG] [Thread-202480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:15:34.903 [DEBUG] [Thread-202480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:15:34.903 [DEBUG] [Thread-202480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:15:34.940 [INFO] [Thread-202480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:15:34.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:15:35.555 [DEBUG] [Thread-202480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:15:35.555 [DEBUG] [Thread-202480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:15:35.556 [DEBUG] [Thread-202480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:15:35.596 [DEBUG] [Thread-202480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:15:35.597 [DEBUG] [Thread-202480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:15:35.600 [DEBUG] [Thread-202480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:15:35.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:15:35.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:15:35.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:15:35.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:15:35.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:15:35.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:15:35.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:15:35.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:15:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:15:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.343849 -999.00  +13.20  20.03     53   +3.90 1 1 1 1 1   888    0 11.24 97.32 ----- 20.0 20.0 149.3 35.3 20.1 -28.0 19.0 -26.3 17.9 -26.7 18.7 -27.9
2026-02-15T10:15:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:15:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:15:35.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.343849
2026-02-15T10:15:35.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:15:35.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:15:35.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:15:35.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:15:35.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:15:35.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:15:20', tmtdew=10.87, humidity=47.7, cloud=0.0, wind=28.04, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:15:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:15:35.630 [DEBUG] [Thread-202480] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:15:35.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:15:35.736 [DEBUG] [Thread-202483] [transport.py] [_log()] starting thread (client mode): 0xa2d01330
2026-02-15T10:15:35.736 [DEBUG] [Thread-202483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:15:35.751 [DEBUG] [Thread-202483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:15:35.751 [INFO] [Thread-202483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] client lang: <none>
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] server lang: <none>
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] kex follows: False
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] Compression: none
2026-02-15T10:15:35.760 [DEBUG] [Thread-202483] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:15:35.817 [DEBUG] [Thread-202483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:15:35.817 [DEBUG] [Thread-202483] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:15:35.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:15:35.818 [DEBUG] [Thread-202483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:15:35.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:15:35.882 [DEBUG] [Thread-202483] [transport.py] [_log()] userauth is OK
2026-02-15T10:15:35.882 [DEBUG] [Thread-202483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:15:35.882 [DEBUG] [Thread-202483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:15:35.883 [DEBUG] [Thread-202483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:15:35.883 [DEBUG] [Thread-202483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:15:35.901 [INFO] [Thread-202483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:15:35.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:15:35.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:15:36.726 [DEBUG] [Thread-202483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:15:36.727 [DEBUG] [Thread-202483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:15:36.774 [DEBUG] [Thread-202483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:15:36.775 [DEBUG] [Thread-202483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:15:36.784 [DEBUG] [Thread-202483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:15:36.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:15:36.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:15:36.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:15:36.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:15:36.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:15:36.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:15:36.821 [DEBUG] [Thread-202483] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:15:41.804 [DEBUG] [Thread-202485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:15:44.438 [DEBUG] [Thread-202486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:15:59.493 [DEBUG] [Thread-202487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:05.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:05.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:06.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:16:06.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:16:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:16:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 15, 55), 11.22, 46.57, 0.0, 27.67, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:16:09.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:15:55
2026-02-15T10:16:09.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:16:09.764 [DEBUG] [Thread-202488] [transport.py] [_log()] starting thread (client mode): 0xa2dc0280
2026-02-15T10:16:09.764 [DEBUG] [Thread-202488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:16:09.784 [DEBUG] [Thread-202488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:16:09.784 [INFO] [Thread-202488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:16:09.785 [DEBUG] [Thread-202488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] client lang: <none>
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] server lang: <none>
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] kex follows: False
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:16:09.786 [DEBUG] [Thread-202488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:16:09.787 [DEBUG] [Thread-202488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:16:09.787 [DEBUG] [Thread-202488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:16:09.787 [DEBUG] [Thread-202488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:16:09.787 [DEBUG] [Thread-202488] [transport.py] [_log()] Compression: none
2026-02-15T10:16:09.787 [DEBUG] [Thread-202488] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:16:09.799 [DEBUG] [Thread-202488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:16:09.799 [DEBUG] [Thread-202488] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:16:09.800 [DEBUG] [Thread-202488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:16:09.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:16:09.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:16:09.802 [DEBUG] [Thread-202488] [transport.py] [_log()] userauth is OK
2026-02-15T10:16:09.802 [DEBUG] [Thread-202488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:16:09.802 [DEBUG] [Thread-202488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:16:09.802 [DEBUG] [Thread-202488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:16:09.802 [DEBUG] [Thread-202488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:16:09.822 [INFO] [Thread-202488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:16:09.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:16:10.843 [DEBUG] [Thread-202488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:16:10.843 [DEBUG] [Thread-202488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:16:10.843 [DEBUG] [Thread-202488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:16:10.884 [DEBUG] [Thread-202488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:16:10.885 [DEBUG] [Thread-202488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:16:10.888 [DEBUG] [Thread-202488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:16:10.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:16:10.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:16:10.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:16:10.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:16:10.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:16:10.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:16:10.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:16:10.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:16:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:16:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.344197 -999.00  +13.40  21.72     53   +4.10 1 1 1 1 1   888    0 11.37 103.52 ----- 21.7 21.7 130.8 29.4 20.2 -27.7 19.2 -26.4 17.9 -26.4 18.7 -27.6
2026-02-15T10:16:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:16:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:16:10.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.344197
2026-02-15T10:16:10.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:16:10.916 [DEBUG] [Thread-202488] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:16:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:16:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:16:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:16:10.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:16:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:15:55', tmtdew=11.22, humidity=46.57, cloud=0.0, wind=27.67, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:15:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:16:11.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:16:11.023 [DEBUG] [Thread-202491] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T10:16:11.023 [DEBUG] [Thread-202491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:16:11.038 [DEBUG] [Thread-202491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:16:11.038 [INFO] [Thread-202491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:16:11.045 [DEBUG] [Thread-202491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:16:11.045 [DEBUG] [Thread-202491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:16:11.045 [DEBUG] [Thread-202491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:16:11.045 [DEBUG] [Thread-202491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:11.045 [DEBUG] [Thread-202491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:11.045 [DEBUG] [Thread-202491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] client lang: <none>
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] server lang: <none>
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] kex follows: False
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] Compression: none
2026-02-15T10:16:11.046 [DEBUG] [Thread-202491] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:16:11.104 [DEBUG] [Thread-202491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:16:11.105 [DEBUG] [Thread-202491] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:16:11.105 [DEBUG] [Thread-202491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:16:11.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:16:11.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:16:11.160 [DEBUG] [Thread-202491] [transport.py] [_log()] userauth is OK
2026-02-15T10:16:11.161 [DEBUG] [Thread-202491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:16:11.161 [DEBUG] [Thread-202491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:16:11.161 [DEBUG] [Thread-202491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:16:11.161 [DEBUG] [Thread-202491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:16:11.180 [INFO] [Thread-202491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:16:11.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:16:11.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:16:11.995 [DEBUG] [Thread-202491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:16:11.995 [DEBUG] [Thread-202491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:16:12.043 [DEBUG] [Thread-202491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:16:12.044 [DEBUG] [Thread-202491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:16:12.053 [DEBUG] [Thread-202491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:16:12.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:16:12.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:16:12.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:16:12.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:16:12.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:16:12.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:16:12.089 [DEBUG] [Thread-202491] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:16:14.533 [DEBUG] [Thread-202493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:29.585 [DEBUG] [Thread-202494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:41.860 [DEBUG] [Thread-202495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:16:42.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:16:42.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:16:44.615 [DEBUG] [Thread-202496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:16:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 16, 32), 10.89, 47.58, 0.0, 27.7, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:16:44.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:16:32
2026-02-15T10:16:45.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:16:45.679 [DEBUG] [Thread-202497] [transport.py] [_log()] starting thread (client mode): 0xa2d03ac0
2026-02-15T10:16:45.679 [DEBUG] [Thread-202497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:16:45.699 [DEBUG] [Thread-202497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:16:45.699 [INFO] [Thread-202497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:16:45.701 [DEBUG] [Thread-202497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:16:45.701 [DEBUG] [Thread-202497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:16:45.701 [DEBUG] [Thread-202497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:16:45.701 [DEBUG] [Thread-202497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:45.701 [DEBUG] [Thread-202497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] client lang: <none>
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] server lang: <none>
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] kex follows: False
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] Compression: none
2026-02-15T10:16:45.702 [DEBUG] [Thread-202497] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:16:45.720 [DEBUG] [Thread-202497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:16:45.721 [DEBUG] [Thread-202497] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:16:45.721 [DEBUG] [Thread-202497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:16:45.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:16:45.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:16:45.723 [DEBUG] [Thread-202497] [transport.py] [_log()] userauth is OK
2026-02-15T10:16:45.723 [DEBUG] [Thread-202497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:16:45.723 [DEBUG] [Thread-202497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:16:45.723 [DEBUG] [Thread-202497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:16:45.723 [DEBUG] [Thread-202497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:16:45.748 [INFO] [Thread-202497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:16:45.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:16:46.400 [DEBUG] [Thread-202497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:16:46.401 [DEBUG] [Thread-202497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:16:46.401 [DEBUG] [Thread-202497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:16:46.441 [DEBUG] [Thread-202497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:16:46.441 [DEBUG] [Thread-202497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:16:46.444 [DEBUG] [Thread-202497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:16:46.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:16:46.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:16:46.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:16:46.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:16:46.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:16:46.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:16:46.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:16:46.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:16:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:16:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.344544 -999.00  +13.40  25.55     52   +3.80 1 1 1 1 1   888    0 11.53 105.97 ----- 25.6 25.6 146.6 30.5 20.1 -28.5 19.1 -27.7 17.9 -26.4 18.8 -27.3
2026-02-15T10:16:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:16:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:16:46.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.344544
2026-02-15T10:16:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:16:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:16:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:16:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:16:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:16:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:16:32', tmtdew=10.89, humidity=47.58, cloud=0.0, wind=27.7, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:16:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:16:46.468 [DEBUG] [Thread-202497] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:16:46.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:16:46.565 [DEBUG] [Thread-202500] [transport.py] [_log()] starting thread (client mode): 0xa2db4b50
2026-02-15T10:16:46.566 [DEBUG] [Thread-202500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:16:46.580 [DEBUG] [Thread-202500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:16:46.580 [INFO] [Thread-202500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:16:46.588 [DEBUG] [Thread-202500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:16:46.588 [DEBUG] [Thread-202500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:16:46.588 [DEBUG] [Thread-202500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:16:46.588 [DEBUG] [Thread-202500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:46.588 [DEBUG] [Thread-202500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:16:46.588 [DEBUG] [Thread-202500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] client lang: <none>
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] server lang: <none>
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] kex follows: False
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] Compression: none
2026-02-15T10:16:46.589 [DEBUG] [Thread-202500] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:16:46.647 [DEBUG] [Thread-202500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:16:46.648 [DEBUG] [Thread-202500] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:16:46.648 [DEBUG] [Thread-202500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:16:46.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:16:46.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:16:46.703 [DEBUG] [Thread-202500] [transport.py] [_log()] userauth is OK
2026-02-15T10:16:46.704 [DEBUG] [Thread-202500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:16:46.704 [DEBUG] [Thread-202500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:16:46.704 [DEBUG] [Thread-202500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:16:46.704 [DEBUG] [Thread-202500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:16:46.722 [INFO] [Thread-202500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:16:46.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:16:46.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:16:47.558 [DEBUG] [Thread-202500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:16:47.559 [DEBUG] [Thread-202500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:16:47.606 [DEBUG] [Thread-202500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:16:47.606 [DEBUG] [Thread-202500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:16:47.614 [DEBUG] [Thread-202500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:16:47.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:16:47.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')
2026-02-15T10:16:47.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:16:47.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:16:47.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:16:47.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:16:47.647 [DEBUG] [Thread-202500] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:16:59.649 [DEBUG] [Thread-202502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:05.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:05.720 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:14.704 [DEBUG] [Thread-202503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:17.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:17:17.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:17:17.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:17:19.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 17, 7), 10.92, 47.46, 0.0, 29.04, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:17:19.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:17:07
2026-02-15T10:17:19.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:17:20.036 [DEBUG] [Thread-202504] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a90
2026-02-15T10:17:20.036 [DEBUG] [Thread-202504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:17:20.056 [DEBUG] [Thread-202504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:17:20.057 [INFO] [Thread-202504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:17:20.060 [DEBUG] [Thread-202504] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:17:20.060 [DEBUG] [Thread-202504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:17:20.060 [DEBUG] [Thread-202504] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:17:20.060 [DEBUG] [Thread-202504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] client lang: <none>
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] server lang: <none>
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] kex follows: False
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:17:20.061 [DEBUG] [Thread-202504] [transport.py] [_log()] Compression: none
2026-02-15T10:17:20.062 [DEBUG] [Thread-202504] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:17:20.080 [DEBUG] [Thread-202504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:17:20.081 [DEBUG] [Thread-202504] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:17:20.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:17:20.083 [DEBUG] [Thread-202504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:17:20.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:17:20.085 [DEBUG] [Thread-202504] [transport.py] [_log()] userauth is OK
2026-02-15T10:17:20.086 [DEBUG] [Thread-202504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:17:20.086 [DEBUG] [Thread-202504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:17:20.086 [DEBUG] [Thread-202504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:17:20.086 [DEBUG] [Thread-202504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:17:20.108 [INFO] [Thread-202504] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:17:20.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:17:20.694 [DEBUG] [Thread-202504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:17:20.695 [DEBUG] [Thread-202504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:17:20.695 [DEBUG] [Thread-202504] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:17:20.735 [DEBUG] [Thread-202504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:17:20.736 [DEBUG] [Thread-202504] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:17:20.739 [DEBUG] [Thread-202504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:17:20.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:17:20.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:17:20.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:17:20.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:17:20.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:17:20.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:17:20.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:17:20.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:17:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:17:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.344891 -999.00  +13.50  15.57     52   +4.00 1 1 1 1 1   888    0 11.46 96.44 ----- 15.6 15.6 147.0 26.7 20.3 -28.5 19.3 -26.1 18.0 -26.2 18.8 -28.0
2026-02-15T10:17:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:17:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:17:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.344891
2026-02-15T10:17:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:17:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:17:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:17:20.767 [DEBUG] [Thread-202504] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:17:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:17:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:17:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:17:07', tmtdew=10.92, humidity=47.46, cloud=0.0, wind=29.04, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:16:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:17:20.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:17:20.863 [DEBUG] [Thread-202507] [transport.py] [_log()] starting thread (client mode): 0xa2d00be0
2026-02-15T10:17:20.864 [DEBUG] [Thread-202507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:17:20.878 [DEBUG] [Thread-202507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:17:20.878 [INFO] [Thread-202507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:17:20.886 [DEBUG] [Thread-202507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:17:20.886 [DEBUG] [Thread-202507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:17:20.886 [DEBUG] [Thread-202507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] client lang: <none>
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] server lang: <none>
2026-02-15T10:17:20.887 [DEBUG] [Thread-202507] [transport.py] [_log()] kex follows: False
2026-02-15T10:17:20.888 [DEBUG] [Thread-202507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:17:20.888 [DEBUG] [Thread-202507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:17:20.888 [DEBUG] [Thread-202507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:17:20.888 [DEBUG] [Thread-202507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:17:20.888 [DEBUG] [Thread-202507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:17:20.888 [DEBUG] [Thread-202507] [transport.py] [_log()] Compression: none
2026-02-15T10:17:20.889 [DEBUG] [Thread-202507] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:17:20.943 [DEBUG] [Thread-202507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:17:20.944 [DEBUG] [Thread-202507] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:17:20.944 [DEBUG] [Thread-202507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:17:20.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:17:20.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:17:21.000 [DEBUG] [Thread-202507] [transport.py] [_log()] userauth is OK
2026-02-15T10:17:21.000 [DEBUG] [Thread-202507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:17:21.000 [DEBUG] [Thread-202507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:17:21.000 [DEBUG] [Thread-202507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:17:21.000 [DEBUG] [Thread-202507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:17:21.018 [INFO] [Thread-202507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:17:21.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:17:21.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:17:21.832 [DEBUG] [Thread-202507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:17:21.832 [DEBUG] [Thread-202507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:17:21.879 [DEBUG] [Thread-202507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:17:21.879 [DEBUG] [Thread-202507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:17:21.888 [DEBUG] [Thread-202507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:17:21.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:17:21.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:17:21.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:17:21.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:17:21.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:17:21.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:17:21.921 [DEBUG] [Thread-202507] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:17:29.740 [DEBUG] [Thread-202509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:41.920 [DEBUG] [Thread-202510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:44.792 [DEBUG] [Thread-202511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:17:51.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:17:51.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:17: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
2026-02-15T10:17:53.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 17, 42), 11.23, 46.62, 0.0, 25.86, 13.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:17:53.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:17:42
2026-02-15T10:17:54.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:17:54.258 [DEBUG] [Thread-202512] [transport.py] [_log()] starting thread (client mode): 0xa81d7e20
2026-02-15T10:17:54.258 [DEBUG] [Thread-202512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:17:54.279 [DEBUG] [Thread-202512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:17:54.279 [INFO] [Thread-202512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:17:54.282 [DEBUG] [Thread-202512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] client lang: <none>
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] server lang: <none>
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] kex follows: False
2026-02-15T10:17:54.283 [DEBUG] [Thread-202512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:17:54.284 [DEBUG] [Thread-202512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:17:54.284 [DEBUG] [Thread-202512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:17:54.284 [DEBUG] [Thread-202512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:17:54.284 [DEBUG] [Thread-202512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:17:54.284 [DEBUG] [Thread-202512] [transport.py] [_log()] Compression: none
2026-02-15T10:17:54.284 [DEBUG] [Thread-202512] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:17:54.305 [DEBUG] [Thread-202512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:17:54.306 [DEBUG] [Thread-202512] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:17:54.306 [DEBUG] [Thread-202512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:17:54.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:17:54.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:17:54.308 [DEBUG] [Thread-202512] [transport.py] [_log()] userauth is OK
2026-02-15T10:17:54.308 [DEBUG] [Thread-202512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:17:54.308 [DEBUG] [Thread-202512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:17:54.308 [DEBUG] [Thread-202512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:17:54.309 [DEBUG] [Thread-202512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:17:54.331 [INFO] [Thread-202512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:17:54.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:17:55.167 [DEBUG] [Thread-202512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:17:55.168 [DEBUG] [Thread-202512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:17:55.168 [DEBUG] [Thread-202512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:17:55.208 [DEBUG] [Thread-202512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:17:55.209 [DEBUG] [Thread-202512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:17:55.212 [DEBUG] [Thread-202512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:17:55.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:17:55.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:17:55.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:17:55.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:17:55.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:17:55.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:17:55.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:17:55.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:17:55.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:17:55.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.345239 -999.00  +13.60  24.33     52   +3.90 1 1 1 1 1   888    0 11.55 96.17 ----- 24.3 24.3 160.3 29.6 20.2 -29.5 19.2 -27.2 17.9 -26.9 18.9 -28.5
2026-02-15T10:17:55.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:17:55.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:17:55.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.345239
2026-02-15T10:17:55.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:17:55.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:17:55.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:17:55.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:17:55.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:17:55.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:17:42', tmtdew=11.23, humidity=46.62, cloud=0.0, wind=25.86, temperature=13.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:17:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:17:55.238 [DEBUG] [Thread-202512] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:17:55.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:17:55.333 [DEBUG] [Thread-202515] [transport.py] [_log()] starting thread (client mode): 0xa81d7520
2026-02-15T10:17:55.333 [DEBUG] [Thread-202515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:17:55.347 [DEBUG] [Thread-202515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:17:55.348 [INFO] [Thread-202515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:17:55.355 [DEBUG] [Thread-202515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:17:55.356 [DEBUG] [Thread-202515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] client lang: <none>
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] server lang: <none>
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] kex follows: False
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:17:55.357 [DEBUG] [Thread-202515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:17:55.358 [DEBUG] [Thread-202515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:17:55.358 [DEBUG] [Thread-202515] [transport.py] [_log()] Compression: none
2026-02-15T10:17:55.358 [DEBUG] [Thread-202515] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:17:55.416 [DEBUG] [Thread-202515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:17:55.416 [DEBUG] [Thread-202515] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:17:55.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:17:55.418 [DEBUG] [Thread-202515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:17:55.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:17:55.475 [DEBUG] [Thread-202515] [transport.py] [_log()] userauth is OK
2026-02-15T10:17:55.476 [DEBUG] [Thread-202515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:17:55.476 [DEBUG] [Thread-202515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:17:55.476 [DEBUG] [Thread-202515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:17:55.476 [DEBUG] [Thread-202515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:17:55.495 [INFO] [Thread-202515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:17:55.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:17:55.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:17:56.342 [DEBUG] [Thread-202515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:17:56.343 [DEBUG] [Thread-202515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:17:56.390 [DEBUG] [Thread-202515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:17:56.391 [DEBUG] [Thread-202515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:17:56.400 [DEBUG] [Thread-202515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:17:56.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:17:56.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:17:56.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:17:56.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:17:56.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:17:56.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:17:56.437 [DEBUG] [Thread-202515] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:17:59.828 [DEBUG] [Thread-202517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:18:05.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:18:05.861 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:18:14.881 [DEBUG] [Thread-202518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:18:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:18:26.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:18:26.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:18:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 18, 17), 10.62, 48.64, 0.0, 22.64, 13.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:18:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:18:17
2026-02-15T10:18:29.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:18:29.231 [DEBUG] [Thread-202519] [transport.py] [_log()] starting thread (client mode): 0xa575a440
2026-02-15T10:18:29.231 [DEBUG] [Thread-202519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:18:29.251 [DEBUG] [Thread-202519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:18:29.251 [INFO] [Thread-202519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:18:29.254 [DEBUG] [Thread-202519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:18:29.254 [DEBUG] [Thread-202519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:18:29.254 [DEBUG] [Thread-202519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:18:29.254 [DEBUG] [Thread-202519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:18:29.254 [DEBUG] [Thread-202519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] client lang: <none>
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] server lang: <none>
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] kex follows: False
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:18:29.255 [DEBUG] [Thread-202519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:18:29.256 [DEBUG] [Thread-202519] [transport.py] [_log()] Compression: none
2026-02-15T10:18:29.256 [DEBUG] [Thread-202519] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:18:29.275 [DEBUG] [Thread-202519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:18:29.275 [DEBUG] [Thread-202519] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:18:29.276 [DEBUG] [Thread-202519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:18:29.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:18:29.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:18:29.317 [DEBUG] [Thread-202519] [transport.py] [_log()] userauth is OK
2026-02-15T10:18:29.317 [DEBUG] [Thread-202519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:18:29.317 [DEBUG] [Thread-202519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:18:29.317 [DEBUG] [Thread-202519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:18:29.317 [DEBUG] [Thread-202519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:18:29.344 [INFO] [Thread-202519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:18:29.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:18:29.916 [DEBUG] [Thread-202521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:18:29.958 [DEBUG] [Thread-202519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:18:29.958 [DEBUG] [Thread-202519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:18:29.959 [DEBUG] [Thread-202519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:18:29.999 [DEBUG] [Thread-202519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:18:30.000 [DEBUG] [Thread-202519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:18:30.003 [DEBUG] [Thread-202519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:18:30.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:18:30.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:18:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:18:30.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:18:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:18:30.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:18:30.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:18:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:18:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:18:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.345586 -999.00  +13.20  20.81     52   +3.70 1 1 1 1 1   888    0 11.56 103.08 ----- 20.8 20.8 150.2 30.2 20.2 -29.0 19.1 -26.2 17.9 -26.6 18.8 -28.0
2026-02-15T10:18:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:18:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:18:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.345586
2026-02-15T10:18:30.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:18:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:18:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:18:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:18:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:18:30.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:18:17', tmtdew=10.62, humidity=48.64, cloud=0.0, wind=22.64, temperature=13.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:17:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:18:30.030 [DEBUG] [Thread-202519] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:18:30.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:18:30.135 [DEBUG] [Thread-202523] [transport.py] [_log()] starting thread (client mode): 0xa2d11fc0
2026-02-15T10:18:30.135 [DEBUG] [Thread-202523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:18:30.149 [DEBUG] [Thread-202523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:18:30.150 [INFO] [Thread-202523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:18:30.158 [DEBUG] [Thread-202523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] client lang: <none>
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] server lang: <none>
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] kex follows: False
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] Compression: none
2026-02-15T10:18:30.159 [DEBUG] [Thread-202523] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:18:30.219 [DEBUG] [Thread-202523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:18:30.220 [DEBUG] [Thread-202523] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:18:30.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:18:30.221 [DEBUG] [Thread-202523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:18:30.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:18:30.276 [DEBUG] [Thread-202523] [transport.py] [_log()] userauth is OK
2026-02-15T10:18:30.276 [DEBUG] [Thread-202523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:18:30.276 [DEBUG] [Thread-202523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:18:30.276 [DEBUG] [Thread-202523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:18:30.276 [DEBUG] [Thread-202523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:18:30.299 [INFO] [Thread-202523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:18:30.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:18:30.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:18:31.102 [DEBUG] [Thread-202523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:18:31.103 [DEBUG] [Thread-202523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:18:31.150 [DEBUG] [Thread-202523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:18:31.150 [DEBUG] [Thread-202523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:18:31.159 [DEBUG] [Thread-202523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:18:31.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:18:31.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:18:31.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:18:31.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:18:31.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:18:31.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:18:31.192 [DEBUG] [Thread-202523] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:18:41.966 [DEBUG] [Thread-202525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:18:44.952 [DEBUG] [Thread-202526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:00.001 [DEBUG] [Thread-202527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:01.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:19:01.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:19:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:19:03.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 18, 54), 10.84, 48.13, 0.0, 23.22, 13.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:19:03.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:18:54
2026-02-15T10:19:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:19:03.652 [DEBUG] [Thread-202528] [transport.py] [_log()] starting thread (client mode): 0xa81d6500
2026-02-15T10:19:03.652 [DEBUG] [Thread-202528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:19:03.672 [DEBUG] [Thread-202528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:19:03.672 [INFO] [Thread-202528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] client lang: <none>
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] server lang: <none>
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] kex follows: False
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:19:03.674 [DEBUG] [Thread-202528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:19:03.675 [DEBUG] [Thread-202528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:19:03.675 [DEBUG] [Thread-202528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:19:03.675 [DEBUG] [Thread-202528] [transport.py] [_log()] Compression: none
2026-02-15T10:19:03.675 [DEBUG] [Thread-202528] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:19:03.686 [DEBUG] [Thread-202528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:19:03.686 [DEBUG] [Thread-202528] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:19:03.686 [DEBUG] [Thread-202528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:19:03.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:19:03.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:19:03.687 [DEBUG] [Thread-202528] [transport.py] [_log()] userauth is OK
2026-02-15T10:19:03.687 [DEBUG] [Thread-202528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:19:03.687 [DEBUG] [Thread-202528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:19:03.687 [DEBUG] [Thread-202528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:19:03.687 [DEBUG] [Thread-202528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:19:03.701 [INFO] [Thread-202528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:19:03.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:19:04.324 [DEBUG] [Thread-202528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:19:04.324 [DEBUG] [Thread-202528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:19:04.325 [DEBUG] [Thread-202528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:19:04.365 [DEBUG] [Thread-202528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:19:04.365 [DEBUG] [Thread-202528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:19:04.369 [DEBUG] [Thread-202528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:19:04.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:19:04.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:19:04.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:19:04.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:19:04.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:19:04.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:19:04.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:19:04.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:19:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:19:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.345933 -999.00  +13.10  15.39     53   +3.80 1 1 1 1 1   888    0 11.64 98.71 ----- 15.4 15.4 168.2 31.0 20.2 -28.7 19.2 -26.0 17.9 -25.6 18.9 -27.4
2026-02-15T10:19:04.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:19:04.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:19:04.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.345933
2026-02-15T10:19:04.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:19:04.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:19:04.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:19:04.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:19:04.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:19:04.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:18:54', tmtdew=10.84, humidity=48.13, cloud=0.0, wind=23.22, temperature=13.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:18:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:19:04.396 [DEBUG] [Thread-202528] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:19:04.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:19:04.488 [DEBUG] [Thread-202531] [transport.py] [_log()] starting thread (client mode): 0xa57c0fa0
2026-02-15T10:19:04.488 [DEBUG] [Thread-202531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:19:04.504 [DEBUG] [Thread-202531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:19:04.504 [INFO] [Thread-202531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:19:04.513 [DEBUG] [Thread-202531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] client lang: <none>
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] server lang: <none>
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] kex follows: False
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] Compression: none
2026-02-15T10:19:04.514 [DEBUG] [Thread-202531] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:19:04.570 [DEBUG] [Thread-202531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:19:04.571 [DEBUG] [Thread-202531] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:19:04.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:19:04.572 [DEBUG] [Thread-202531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:19:04.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:19:04.627 [DEBUG] [Thread-202531] [transport.py] [_log()] userauth is OK
2026-02-15T10:19:04.627 [DEBUG] [Thread-202531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:19:04.627 [DEBUG] [Thread-202531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:19:04.627 [DEBUG] [Thread-202531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:19:04.628 [DEBUG] [Thread-202531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:19:04.646 [INFO] [Thread-202531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:19:04.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:19:04.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:19:05.498 [DEBUG] [Thread-202531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:19:05.498 [DEBUG] [Thread-202531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:19:05.547 [DEBUG] [Thread-202531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:19:05.547 [DEBUG] [Thread-202531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:19:05.556 [DEBUG] [Thread-202531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:19:05.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:19:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:19:05.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:19:05.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:19:05.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:19:05.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:19:05.593 [DEBUG] [Thread-202531] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:19:06.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:06.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:15.037 [DEBUG] [Thread-202533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:30.092 [DEBUG] [Thread-202534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:19:35.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:19:35.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:19:37.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 19, 29), 11.2, 46.99, 0.0, 23.93, 13.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:19:37.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:19:29
2026-02-15T10:19:37.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:19:38.053 [DEBUG] [Thread-202535] [transport.py] [_log()] starting thread (client mode): 0xa81d62c0
2026-02-15T10:19:38.053 [DEBUG] [Thread-202535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:19:38.073 [DEBUG] [Thread-202535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:19:38.073 [INFO] [Thread-202535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:19:38.077 [DEBUG] [Thread-202535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:19:38.077 [DEBUG] [Thread-202535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:19:38.077 [DEBUG] [Thread-202535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:19:38.077 [DEBUG] [Thread-202535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] client lang: <none>
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] server lang: <none>
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] kex follows: False
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] Compression: none
2026-02-15T10:19:38.078 [DEBUG] [Thread-202535] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:19:38.094 [DEBUG] [Thread-202535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:19:38.095 [DEBUG] [Thread-202535] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:19:38.095 [DEBUG] [Thread-202535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:19:38.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:19:38.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:19:38.097 [DEBUG] [Thread-202535] [transport.py] [_log()] userauth is OK
2026-02-15T10:19:38.098 [DEBUG] [Thread-202535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:19:38.098 [DEBUG] [Thread-202535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:19:38.098 [DEBUG] [Thread-202535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:19:38.098 [DEBUG] [Thread-202535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:19:38.134 [INFO] [Thread-202535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:19:38.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:19:38.773 [DEBUG] [Thread-202535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:19:38.774 [DEBUG] [Thread-202535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:19:38.774 [DEBUG] [Thread-202535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:19:38.814 [DEBUG] [Thread-202535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:19:38.814 [DEBUG] [Thread-202535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:19:38.817 [DEBUG] [Thread-202535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:19:38.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:19:38.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:19:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:19:38.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:19:38.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:19:38.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:19:38.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:19:38.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:19:38.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:19:38.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.346628 -999.00  +13.50  32.35     52   +3.80 1 1 2 1 1   888    0 11.61 97.68 ----- 32.4 32.4 141.6 34.6 20.4 -28.7 19.3 -27.7 18.1 -25.9 18.9 -26.1
2026-02-15T10:19:38.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:19:38.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:19:38.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.346628
2026-02-15T10:19:38.850 [DEBUG] [Thread-202535] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:19:38.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:19:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:19:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:19:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:19:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:19:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:19:29', tmtdew=11.2, humidity=46.99, cloud=0.0, wind=23.93, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:19:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:19:38.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:19:38.948 [DEBUG] [Thread-202538] [transport.py] [_log()] starting thread (client mode): 0xa2dc2950
2026-02-15T10:19:38.948 [DEBUG] [Thread-202538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:19:38.962 [DEBUG] [Thread-202538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:19:38.962 [INFO] [Thread-202538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] client lang: <none>
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] server lang: <none>
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] kex follows: False
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:19:38.970 [DEBUG] [Thread-202538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:19:38.971 [DEBUG] [Thread-202538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:19:38.971 [DEBUG] [Thread-202538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:19:38.971 [DEBUG] [Thread-202538] [transport.py] [_log()] Compression: none
2026-02-15T10:19:38.971 [DEBUG] [Thread-202538] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:19:39.030 [DEBUG] [Thread-202538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:19:39.031 [DEBUG] [Thread-202538] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:19:39.032 [DEBUG] [Thread-202538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:19:39.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:19:39.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:19:39.086 [DEBUG] [Thread-202538] [transport.py] [_log()] userauth is OK
2026-02-15T10:19:39.087 [DEBUG] [Thread-202538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:19:39.087 [DEBUG] [Thread-202538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:19:39.087 [DEBUG] [Thread-202538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:19:39.087 [DEBUG] [Thread-202538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:19:39.106 [INFO] [Thread-202538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:19:39.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:19:39.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:19:39.918 [DEBUG] [Thread-202538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:19:39.918 [DEBUG] [Thread-202538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:19:39.965 [DEBUG] [Thread-202538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:19:39.966 [DEBUG] [Thread-202538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:19:39.975 [DEBUG] [Thread-202538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:19:39.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:19:39.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:19:39.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:19:40.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:19:40.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:19:40.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:19:40.012 [DEBUG] [Thread-202538] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:19:41.998 [DEBUG] [Thread-202540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:19:45.127 [DEBUG] [Thread-202541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:00.184 [DEBUG] [Thread-202542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:06.141 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:06.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:20:10.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:20:10.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:20:11.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 19, 29), 11.2, 46.99, 0.0, 23.93, 13.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:20:11.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:19:29
2026-02-15T10:20:12.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:20:12.364 [DEBUG] [Thread-202543] [transport.py] [_log()] starting thread (client mode): 0xa57c0820
2026-02-15T10:20:12.364 [DEBUG] [Thread-202543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:20:12.383 [DEBUG] [Thread-202543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:20:12.384 [INFO] [Thread-202543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] client lang: <none>
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] server lang: <none>
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] kex follows: False
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:20:12.387 [DEBUG] [Thread-202543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:20:12.388 [DEBUG] [Thread-202543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:20:12.388 [DEBUG] [Thread-202543] [transport.py] [_log()] Compression: none
2026-02-15T10:20:12.388 [DEBUG] [Thread-202543] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:20:12.406 [DEBUG] [Thread-202543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:20:12.407 [DEBUG] [Thread-202543] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:20:12.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:20:12.408 [DEBUG] [Thread-202543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:20:12.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:20:12.410 [DEBUG] [Thread-202543] [transport.py] [_log()] userauth is OK
2026-02-15T10:20:12.410 [DEBUG] [Thread-202543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:20:12.411 [DEBUG] [Thread-202543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:20:12.411 [DEBUG] [Thread-202543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:20:12.411 [DEBUG] [Thread-202543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:20:12.434 [INFO] [Thread-202543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:20:12.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:20:15.224 [DEBUG] [Thread-202545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:16.746 [DEBUG] [Thread-202543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:20:16.746 [DEBUG] [Thread-202543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:20:16.747 [DEBUG] [Thread-202543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:20:16.788 [DEBUG] [Thread-202543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:20:16.788 [DEBUG] [Thread-202543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:20:16.791 [DEBUG] [Thread-202543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:20:16.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:20:16.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:20:16.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:20:16.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:20:16.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:20:16.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:20:16.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:20:16.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.346975 -999.00  +13.60  15.23     50   +3.30 1 1 1 1 1   888    0 11.60 93.34 ----- 15.2 15.2 137.6 31.5 20.4 -26.8 19.4 -26.2 18.0 -25.7 18.8 -27.9
2026-02-15T10:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:20:16.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:20:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.346975
2026-02-15T10:20:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:20:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:20:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:20:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:20:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:20:16.841 [DEBUG] [Thread-202543] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:20:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:19:29', tmtdew=11.2, humidity=46.99, cloud=0.0, wind=23.93, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:19:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:20:16.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:20:16.937 [DEBUG] [Thread-202547] [transport.py] [_log()] starting thread (client mode): 0xa5758970
2026-02-15T10:20:16.938 [DEBUG] [Thread-202547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:20:16.952 [DEBUG] [Thread-202547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:20:16.952 [INFO] [Thread-202547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] client lang: <none>
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] server lang: <none>
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] kex follows: False
2026-02-15T10:20:16.960 [DEBUG] [Thread-202547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:20:16.961 [DEBUG] [Thread-202547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:20:16.961 [DEBUG] [Thread-202547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:20:16.961 [DEBUG] [Thread-202547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:20:16.961 [DEBUG] [Thread-202547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:20:16.961 [DEBUG] [Thread-202547] [transport.py] [_log()] Compression: none
2026-02-15T10:20:16.961 [DEBUG] [Thread-202547] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:20:17.018 [DEBUG] [Thread-202547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:20:17.018 [DEBUG] [Thread-202547] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:20:17.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:20:17.020 [DEBUG] [Thread-202547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:20:17.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:20:17.074 [DEBUG] [Thread-202547] [transport.py] [_log()] userauth is OK
2026-02-15T10:20:17.074 [DEBUG] [Thread-202547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:20:17.074 [DEBUG] [Thread-202547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:20:17.074 [DEBUG] [Thread-202547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:20:17.074 [DEBUG] [Thread-202547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:20:17.093 [INFO] [Thread-202547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:20:17.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:20:17.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:20:17.907 [DEBUG] [Thread-202547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:20:17.907 [DEBUG] [Thread-202547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:20:17.956 [DEBUG] [Thread-202547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:20:17.956 [DEBUG] [Thread-202547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:20:17.965 [DEBUG] [Thread-202547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:20:17.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:20:17.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:20:17.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:20:17.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:20:17.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:20:17.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:20:18.000 [DEBUG] [Thread-202547] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:20:30.263 [DEBUG] [Thread-202549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:42.055 [DEBUG] [Thread-202550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:45.315 [DEBUG] [Thread-202551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:20:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:20:48.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:20:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:20:49.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 20, 39), 12.74, 42.01, 0.0, 23.68, 14.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:20:49.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:20:39
2026-02-15T10:20:50.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:20:50.393 [DEBUG] [Thread-202552] [transport.py] [_log()] starting thread (client mode): 0xa57c2650
2026-02-15T10:20:50.394 [DEBUG] [Thread-202552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:20:50.414 [DEBUG] [Thread-202552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:20:50.415 [INFO] [Thread-202552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] client lang: <none>
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] server lang: <none>
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] kex follows: False
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] Compression: none
2026-02-15T10:20:50.418 [DEBUG] [Thread-202552] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:20:50.436 [DEBUG] [Thread-202552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:20:50.437 [DEBUG] [Thread-202552] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:20:50.437 [DEBUG] [Thread-202552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:20:50.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:20:50.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:20:50.439 [DEBUG] [Thread-202552] [transport.py] [_log()] userauth is OK
2026-02-15T10:20:50.440 [DEBUG] [Thread-202552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:20:50.440 [DEBUG] [Thread-202552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:20:50.440 [DEBUG] [Thread-202552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:20:50.440 [DEBUG] [Thread-202552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:20:50.465 [INFO] [Thread-202552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:20:50.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:20:51.116 [DEBUG] [Thread-202552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:20:51.117 [DEBUG] [Thread-202552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:20:51.117 [DEBUG] [Thread-202552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:20:51.157 [DEBUG] [Thread-202552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:20:51.158 [DEBUG] [Thread-202552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:20:51.161 [DEBUG] [Thread-202552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:20:51.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:20:51.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:20:51.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:20:51.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:20:51.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:20:51.185 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:20:51.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:20:51.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:20:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:20:51.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.347322 -999.00  +14.00  15.67     49   +3.50 1 1 1 1 1   888    0 11.41 95.64 ----- 15.7 15.7 140.8 22.2 20.5 -26.5 19.5 -26.0 18.2 -24.9 19.0 -27.9
2026-02-15T10:20:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:20:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:20:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.347322
2026-02-15T10:20:51.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:20:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:20:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:20:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:20:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:20:51.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:20:39', tmtdew=12.74, humidity=42.01, cloud=0.0, wind=23.68, temperature=14.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:20:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:20:51.188 [DEBUG] [Thread-202552] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:20:51.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:20:51.284 [DEBUG] [Thread-202555] [transport.py] [_log()] starting thread (client mode): 0xa2d10d90
2026-02-15T10:20:51.284 [DEBUG] [Thread-202555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:20:51.304 [DEBUG] [Thread-202555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:20:51.304 [INFO] [Thread-202555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:20:51.315 [DEBUG] [Thread-202555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:20:51.315 [DEBUG] [Thread-202555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] client lang: <none>
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] server lang: <none>
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] kex follows: False
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] Compression: none
2026-02-15T10:20:51.316 [DEBUG] [Thread-202555] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:20:51.370 [DEBUG] [Thread-202555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:20:51.370 [DEBUG] [Thread-202555] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:20:51.371 [DEBUG] [Thread-202555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:20:51.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:20:51.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:20:51.430 [DEBUG] [Thread-202555] [transport.py] [_log()] userauth is OK
2026-02-15T10:20:51.430 [DEBUG] [Thread-202555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:20:51.430 [DEBUG] [Thread-202555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:20:51.430 [DEBUG] [Thread-202555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:20:51.430 [DEBUG] [Thread-202555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:20:51.445 [INFO] [Thread-202555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:20:51.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:20:51.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:20:52.333 [DEBUG] [Thread-202555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:20:52.333 [DEBUG] [Thread-202555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:20:52.381 [DEBUG] [Thread-202555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:20:52.381 [DEBUG] [Thread-202555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:20:52.390 [DEBUG] [Thread-202555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:20:52.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:20:52.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:20:52.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:20:52.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:20:52.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:20:52.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:20:52.424 [DEBUG] [Thread-202555] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:21:00.348 [DEBUG] [Thread-202557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:06.282 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:06.284 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:15.398 [DEBUG] [Thread-202558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:21:22.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:21:22.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:21:24.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 21, 15), 11.89, 44.26, 0.0, 22.87, 13.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:21:24.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:21:15
2026-02-15T10:21:24.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:21:25.078 [DEBUG] [Thread-202559] [transport.py] [_log()] starting thread (client mode): 0xa2dc0eb0
2026-02-15T10:21:25.078 [DEBUG] [Thread-202559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:21:25.099 [DEBUG] [Thread-202559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:21:25.099 [INFO] [Thread-202559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] client lang: <none>
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] server lang: <none>
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] kex follows: False
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] Compression: none
2026-02-15T10:21:25.102 [DEBUG] [Thread-202559] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:21:25.122 [DEBUG] [Thread-202559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:21:25.122 [DEBUG] [Thread-202559] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:21:25.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:21:25.122 [DEBUG] [Thread-202559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:21:25.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:21:25.123 [DEBUG] [Thread-202559] [transport.py] [_log()] userauth is OK
2026-02-15T10:21:25.123 [DEBUG] [Thread-202559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:21:25.123 [DEBUG] [Thread-202559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:21:25.123 [DEBUG] [Thread-202559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:21:25.123 [DEBUG] [Thread-202559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:21:25.143 [INFO] [Thread-202559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:21:25.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:21:25.758 [DEBUG] [Thread-202559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:21:25.758 [DEBUG] [Thread-202559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:21:25.759 [DEBUG] [Thread-202559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:21:25.800 [DEBUG] [Thread-202559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:21:25.800 [DEBUG] [Thread-202559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:21:25.803 [DEBUG] [Thread-202559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:21:25.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:21:25.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:21:25.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:21:25.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:21:25.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:21:25.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:21:25.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:21:25.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:21:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:21:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.347669 -999.00  +14.10  21.60     49   +3.60 1 1 1 1 1   888    0 12.13 104.21 ----- 21.6 21.6 131.0 25.4 20.7 -27.2 19.6 -25.9 18.3 -25.5 19.1 -27.4
2026-02-15T10:21:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:21:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:21:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.347669
2026-02-15T10:21:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:21:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:21:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:21:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:21:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:21:25.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:21:15', tmtdew=11.89, humidity=44.26, cloud=0.0, wind=22.87, temperature=13.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:20:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:21:25.830 [DEBUG] [Thread-202559] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:21:25.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:21:25.924 [DEBUG] [Thread-202562] [transport.py] [_log()] starting thread (client mode): 0xa2dc1270
2026-02-15T10:21:25.925 [DEBUG] [Thread-202562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:21:25.939 [DEBUG] [Thread-202562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:21:25.939 [INFO] [Thread-202562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:21:25.946 [DEBUG] [Thread-202562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:21:25.947 [DEBUG] [Thread-202562] [transport.py] [_log()] client lang: <none>
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] server lang: <none>
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] kex follows: False
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:21:25.948 [DEBUG] [Thread-202562] [transport.py] [_log()] Compression: none
2026-02-15T10:21:25.949 [DEBUG] [Thread-202562] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:21:26.006 [DEBUG] [Thread-202562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:21:26.007 [DEBUG] [Thread-202562] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:21:26.007 [DEBUG] [Thread-202562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:21:26.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:21:26.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:21:26.067 [DEBUG] [Thread-202562] [transport.py] [_log()] userauth is OK
2026-02-15T10:21:26.067 [DEBUG] [Thread-202562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:21:26.067 [DEBUG] [Thread-202562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:21:26.067 [DEBUG] [Thread-202562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:21:26.067 [DEBUG] [Thread-202562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:21:26.086 [INFO] [Thread-202562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:21:26.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:21:26.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:21:26.909 [DEBUG] [Thread-202562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:21:26.909 [DEBUG] [Thread-202562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:21:26.957 [DEBUG] [Thread-202562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:21:26.958 [DEBUG] [Thread-202562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:21:26.967 [DEBUG] [Thread-202562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:21:26.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:21:26.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:21:26.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:21:26.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:21:26.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:21:26.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:21:27.003 [DEBUG] [Thread-202562] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:21:30.438 [DEBUG] [Thread-202564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:42.102 [DEBUG] [Thread-202565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:45.504 [DEBUG] [Thread-202566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:21:57.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:21:57.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:21:57.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:21:59.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 21, 51), 12.0, 44.39, 0.0, 20.26, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:21:59.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:21:51
2026-02-15T10:21:59.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:21:59.574 [DEBUG] [Thread-202567] [transport.py] [_log()] starting thread (client mode): 0xa57c0820
2026-02-15T10:21:59.574 [DEBUG] [Thread-202567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:21:59.596 [DEBUG] [Thread-202567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:21:59.596 [INFO] [Thread-202567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:21:59.599 [DEBUG] [Thread-202567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:21:59.599 [DEBUG] [Thread-202567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:21:59.599 [DEBUG] [Thread-202567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] client lang: <none>
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] server lang: <none>
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] kex follows: False
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] Compression: none
2026-02-15T10:21:59.600 [DEBUG] [Thread-202567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:21:59.616 [DEBUG] [Thread-202567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:21:59.617 [DEBUG] [Thread-202567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:21:59.617 [DEBUG] [Thread-202567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:21:59.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:21:59.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:21:59.619 [DEBUG] [Thread-202567] [transport.py] [_log()] userauth is OK
2026-02-15T10:21:59.620 [DEBUG] [Thread-202567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:21:59.620 [DEBUG] [Thread-202567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:21:59.620 [DEBUG] [Thread-202567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:21:59.620 [DEBUG] [Thread-202567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:21:59.635 [INFO] [Thread-202567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:21:59.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:22:00.268 [DEBUG] [Thread-202567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:22:00.268 [DEBUG] [Thread-202567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:22:00.269 [DEBUG] [Thread-202567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:22:00.309 [DEBUG] [Thread-202567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:22:00.310 [DEBUG] [Thread-202567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:22:00.313 [DEBUG] [Thread-202567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:22:00.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:22:00.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:22:00.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:22:00.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:22:00.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:22:00.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:22:00.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:22:00.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:22:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:22:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.348016 -999.00  +13.90  20.88     49   +3.50 1 1 1 1 1   888    0 12.13 105.00 ----- 20.9 20.9 128.8 29.0 20.7 -27.5 19.7 -26.3 18.4 -25.7 19.2 -26.1
2026-02-15T10:22:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:22:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:22:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.348016
2026-02-15T10:22:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:22:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:22:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:22:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:22:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:22:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:21:51', tmtdew=12.0, humidity=44.39, cloud=0.0, wind=20.26, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:21:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:22:00.341 [DEBUG] [Thread-202567] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:22:00.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:22:00.437 [DEBUG] [Thread-202570] [transport.py] [_log()] starting thread (client mode): 0xa2d13310
2026-02-15T10:22:00.437 [DEBUG] [Thread-202570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:22:00.454 [DEBUG] [Thread-202570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:22:00.454 [INFO] [Thread-202570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:22:00.462 [DEBUG] [Thread-202570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:22:00.462 [DEBUG] [Thread-202570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:22:00.462 [DEBUG] [Thread-202570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:22:00.462 [DEBUG] [Thread-202570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] client lang: <none>
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] server lang: <none>
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] kex follows: False
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] Compression: none
2026-02-15T10:22:00.463 [DEBUG] [Thread-202570] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:22:00.520 [DEBUG] [Thread-202570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:22:00.521 [DEBUG] [Thread-202570] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:22:00.521 [DEBUG] [Thread-202570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:22:00.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:22:00.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:22:00.543 [DEBUG] [Thread-202572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:22:00.577 [DEBUG] [Thread-202570] [transport.py] [_log()] userauth is OK
2026-02-15T10:22:00.578 [DEBUG] [Thread-202570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:22:00.578 [DEBUG] [Thread-202570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:22:00.578 [DEBUG] [Thread-202570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:22:00.578 [DEBUG] [Thread-202570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:22:00.597 [INFO] [Thread-202570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:22:00.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:22:00.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:22:01.416 [DEBUG] [Thread-202570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:22:01.417 [DEBUG] [Thread-202570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:22:01.465 [DEBUG] [Thread-202570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:22:01.465 [DEBUG] [Thread-202570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:22:01.475 [DEBUG] [Thread-202570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:22:01.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:22:01.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:22: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') -> 00000000
2026-02-15T10:22:01.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:22:01.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:22:01.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:22:01.512 [DEBUG] [Thread-202570] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:22:06.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:22:06.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:22:15.596 [DEBUG] [Thread-202573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:22:30.633 [DEBUG] [Thread-202574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:22:31.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:22:31.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:22:31.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:22:33.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 21, 51), 12.0, 44.39, 0.0, 20.26, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:22:33.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:21:51
2026-02-15T10:22:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:22:34.250 [DEBUG] [Thread-202575] [transport.py] [_log()] starting thread (client mode): 0xa2d020e0
2026-02-15T10:22:34.250 [DEBUG] [Thread-202575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:22:34.271 [DEBUG] [Thread-202575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:22:34.271 [INFO] [Thread-202575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] client lang: <none>
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] server lang: <none>
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] kex follows: False
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] Compression: none
2026-02-15T10:22:34.272 [DEBUG] [Thread-202575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:22:34.285 [DEBUG] [Thread-202575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:22:34.285 [DEBUG] [Thread-202575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:22:34.285 [DEBUG] [Thread-202575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:22:34.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:22:34.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:22:34.286 [DEBUG] [Thread-202575] [transport.py] [_log()] userauth is OK
2026-02-15T10:22:34.286 [DEBUG] [Thread-202575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:22:34.286 [DEBUG] [Thread-202575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:22:34.286 [DEBUG] [Thread-202575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:22:34.286 [DEBUG] [Thread-202575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:22:34.299 [INFO] [Thread-202575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:22:34.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:22:34.915 [DEBUG] [Thread-202575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:22:34.915 [DEBUG] [Thread-202575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:22:34.916 [DEBUG] [Thread-202575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:22:34.956 [DEBUG] [Thread-202575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:22:34.957 [DEBUG] [Thread-202575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:22:34.961 [DEBUG] [Thread-202575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:22:34.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:22:34.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:22:34.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:22:34.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:22:34.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:22:34.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:22:34.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:22:34.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:22:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:22:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.348363 -999.00  +13.80  23.96     49   +3.50 1 1 1 1 1   888    0 12.30 104.53 ----- 24.0 24.0 137.0 29.7 20.7 -27.6 19.8 -27.0 18.4 -26.2 19.2 -28.1
2026-02-15T10:22:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:22:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:22:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.348363
2026-02-15T10:22:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:22:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:22:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:22:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:22:34.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:22:34.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:21:51', tmtdew=12.0, humidity=44.39, cloud=0.0, wind=20.26, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:21:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:22:34.988 [DEBUG] [Thread-202575] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:22:35.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:22:35.085 [DEBUG] [Thread-202578] [transport.py] [_log()] starting thread (client mode): 0xa57b2950
2026-02-15T10:22:35.086 [DEBUG] [Thread-202578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:22:35.101 [DEBUG] [Thread-202578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:22:35.101 [INFO] [Thread-202578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] client lang: <none>
2026-02-15T10:22:35.110 [DEBUG] [Thread-202578] [transport.py] [_log()] server lang: <none>
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] kex follows: False
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] Compression: none
2026-02-15T10:22:35.111 [DEBUG] [Thread-202578] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:22:35.168 [DEBUG] [Thread-202578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:22:35.169 [DEBUG] [Thread-202578] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:22:35.170 [DEBUG] [Thread-202578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:22:35.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:22:35.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:22:35.228 [DEBUG] [Thread-202578] [transport.py] [_log()] userauth is OK
2026-02-15T10:22:35.229 [DEBUG] [Thread-202578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:22:35.229 [DEBUG] [Thread-202578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:22:35.229 [DEBUG] [Thread-202578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:22:35.229 [DEBUG] [Thread-202578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:22:35.247 [INFO] [Thread-202578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:22:35.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:22:35.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:22:36.060 [DEBUG] [Thread-202578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:22:36.060 [DEBUG] [Thread-202578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:22:36.108 [DEBUG] [Thread-202578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:22:36.108 [DEBUG] [Thread-202578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:22:36.116 [DEBUG] [Thread-202578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:22:36.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:22:36.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:22: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') -> 00000000
2026-02-15T10:22:36.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:22:36.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:22:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:22:36.148 [DEBUG] [Thread-202578] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:22:42.156 [DEBUG] [Thread-202580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:22:45.669 [DEBUG] [Thread-202581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:00.722 [DEBUG] [Thread-202582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:06.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:23:06.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:23:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:23:06.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:06.565 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 22, 26), 12.02, 44.34, 0.0, 18.0, 14.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:23:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:22:26
2026-02-15T10:23:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:23:09.509 [DEBUG] [Thread-202583] [transport.py] [_log()] starting thread (client mode): 0xa57e3a00
2026-02-15T10:23:09.509 [DEBUG] [Thread-202583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:23:09.529 [DEBUG] [Thread-202583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:23:09.529 [INFO] [Thread-202583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:23:09.531 [DEBUG] [Thread-202583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] client lang: <none>
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] server lang: <none>
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] kex follows: False
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] Compression: none
2026-02-15T10:23:09.532 [DEBUG] [Thread-202583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:23:09.544 [DEBUG] [Thread-202583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:23:09.545 [DEBUG] [Thread-202583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:23:09.545 [DEBUG] [Thread-202583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:23:09.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:23:09.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:23:09.547 [DEBUG] [Thread-202583] [transport.py] [_log()] userauth is OK
2026-02-15T10:23:09.547 [DEBUG] [Thread-202583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:23:09.547 [DEBUG] [Thread-202583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:23:09.547 [DEBUG] [Thread-202583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:23:09.547 [DEBUG] [Thread-202583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:23:09.563 [INFO] [Thread-202583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:23:09.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:23:10.191 [DEBUG] [Thread-202583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:23:10.191 [DEBUG] [Thread-202583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:23:10.191 [DEBUG] [Thread-202583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:23:10.232 [DEBUG] [Thread-202583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:23:10.232 [DEBUG] [Thread-202583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:23:10.235 [DEBUG] [Thread-202583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:23:10.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:23:10.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:23:10.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:23:10.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:23:10.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:23:10.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:23:10.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:23:10.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:23:10.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:23:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.348711 -999.00  +13.70  20.57     49   +3.20 1 1 1 1 1   888    0 12.00 104.05 ----- 20.6 20.6 129.8 26.4 20.8 -27.4 19.8 -26.3 18.4 -26.6 19.3 -28.0
2026-02-15T10:23:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:23:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:23:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.348711
2026-02-15T10:23:10.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:23:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:23:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:23:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:23:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:23:10.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:22:26', tmtdew=12.02, humidity=44.34, cloud=0.0, wind=18.0, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:22:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:23:10.259 [DEBUG] [Thread-202583] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:23:10.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:23:10.361 [DEBUG] [Thread-202586] [transport.py] [_log()] starting thread (client mode): 0xa57e3100
2026-02-15T10:23:10.361 [DEBUG] [Thread-202586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:23:10.379 [DEBUG] [Thread-202586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:23:10.380 [INFO] [Thread-202586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:23:10.387 [DEBUG] [Thread-202586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:23:10.387 [DEBUG] [Thread-202586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:23:10.387 [DEBUG] [Thread-202586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] client lang: <none>
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] server lang: <none>
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] kex follows: False
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] Compression: none
2026-02-15T10:23:10.388 [DEBUG] [Thread-202586] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:23:10.448 [DEBUG] [Thread-202586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:23:10.449 [DEBUG] [Thread-202586] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:23:10.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:23:10.450 [DEBUG] [Thread-202586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:23:10.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:23:10.556 [DEBUG] [Thread-202586] [transport.py] [_log()] userauth is OK
2026-02-15T10:23:10.556 [DEBUG] [Thread-202586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:23:10.556 [DEBUG] [Thread-202586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:23:10.556 [DEBUG] [Thread-202586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:23:10.556 [DEBUG] [Thread-202586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:23:10.607 [INFO] [Thread-202586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:23:10.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:23:10.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:23:11.413 [DEBUG] [Thread-202586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:23:11.413 [DEBUG] [Thread-202586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:23:11.488 [DEBUG] [Thread-202586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:23:11.488 [DEBUG] [Thread-202586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:23:11.523 [DEBUG] [Thread-202586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:23:11.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:23:11.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:23:11.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:23:11.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:23:11.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:23:11.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:23:11.564 [DEBUG] [Thread-202586] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:23:15.757 [DEBUG] [Thread-202588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:30.817 [DEBUG] [Thread-202589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:41.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:23:41.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:23:41.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:23:42.207 [DEBUG] [Thread-202590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:44.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 23, 2), 12.08, 44.17, 0.0, 21.01, 14.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:23:44.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:23:02
2026-02-15T10:23:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:23:44.817 [DEBUG] [Thread-202591] [transport.py] [_log()] starting thread (client mode): 0xa57b1870
2026-02-15T10:23:44.818 [DEBUG] [Thread-202591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:23:44.838 [DEBUG] [Thread-202591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:23:44.838 [INFO] [Thread-202591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:23:44.841 [DEBUG] [Thread-202591] [transport.py] [_log()] client lang: <none>
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] server lang: <none>
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] kex follows: False
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] Compression: none
2026-02-15T10:23:44.842 [DEBUG] [Thread-202591] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:23:44.861 [DEBUG] [Thread-202591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:23:44.862 [DEBUG] [Thread-202591] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:23:44.862 [DEBUG] [Thread-202591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:23:44.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:23:44.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:23:44.865 [DEBUG] [Thread-202591] [transport.py] [_log()] userauth is OK
2026-02-15T10:23:44.865 [DEBUG] [Thread-202591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:23:44.865 [DEBUG] [Thread-202591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:23:44.865 [DEBUG] [Thread-202591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:23:44.865 [DEBUG] [Thread-202591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:23:44.878 [INFO] [Thread-202591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:23:44.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:23:45.492 [DEBUG] [Thread-202591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:23:45.493 [DEBUG] [Thread-202591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:23:45.493 [DEBUG] [Thread-202591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:23:45.533 [DEBUG] [Thread-202591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:23:45.534 [DEBUG] [Thread-202591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:23:45.537 [DEBUG] [Thread-202591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:23:45.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:23:45.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:23:45.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:23:45.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:23:45.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:23:45.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:23:45.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:23:45.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:23:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:23:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.349058 -999.00  +14.10  18.92     48   +3.40 1 1 1 1 1   888    0 12.37 108.50 ----- 18.9 18.9 131.4 27.2 20.9 -27.5 19.9 -26.7 18.7 -25.2 19.3 -27.1
2026-02-15T10:23:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:23:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:23:45.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.349058
2026-02-15T10:23:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:23:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:23:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:23:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:23:45.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:23:45.559 [DEBUG] [Thread-202591] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:23:45.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:23:02', tmtdew=12.08, humidity=44.17, cloud=0.0, wind=21.01, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:22:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:23:45.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:23:45.655 [DEBUG] [Thread-202594] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-15T10:23:45.655 [DEBUG] [Thread-202594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:23:45.669 [DEBUG] [Thread-202594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:23:45.669 [INFO] [Thread-202594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:23:45.677 [DEBUG] [Thread-202594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:23:45.677 [DEBUG] [Thread-202594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:23:45.677 [DEBUG] [Thread-202594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:23:45.677 [DEBUG] [Thread-202594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:45.677 [DEBUG] [Thread-202594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:23:45.677 [DEBUG] [Thread-202594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:45.678 [DEBUG] [Thread-202594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:23:45.678 [DEBUG] [Thread-202594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:23:45.678 [DEBUG] [Thread-202594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:23:45.678 [DEBUG] [Thread-202594] [transport.py] [_log()] client lang: <none>
2026-02-15T10:23:45.678 [DEBUG] [Thread-202594] [transport.py] [_log()] server lang: <none>
2026-02-15T10:23:45.678 [DEBUG] [Thread-202594] [transport.py] [_log()] kex follows: False
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] Compression: none
2026-02-15T10:23:45.679 [DEBUG] [Thread-202594] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:23:45.736 [DEBUG] [Thread-202594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:23:45.737 [DEBUG] [Thread-202594] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:23:45.737 [DEBUG] [Thread-202594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:23:45.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:23:45.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:23:45.792 [DEBUG] [Thread-202594] [transport.py] [_log()] userauth is OK
2026-02-15T10:23:45.792 [DEBUG] [Thread-202594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:23:45.792 [DEBUG] [Thread-202594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:23:45.792 [DEBUG] [Thread-202594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:23:45.793 [DEBUG] [Thread-202594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:23:45.811 [INFO] [Thread-202594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:23:45.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:23:45.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:23:45.853 [DEBUG] [Thread-202596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:23:46.635 [DEBUG] [Thread-202594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:23:46.635 [DEBUG] [Thread-202594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:23:46.683 [DEBUG] [Thread-202594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:23:46.683 [DEBUG] [Thread-202594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:23:46.692 [DEBUG] [Thread-202594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:23:46.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:23:46.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:23:46.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:23:46.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:23:46.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:23:46.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:23:46.728 [DEBUG] [Thread-202594] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:24:00.912 [DEBUG] [Thread-202597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:06.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:06.713 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:15.949 [DEBUG] [Thread-202598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:16.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:24:16.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:24:16.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:24:18.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 23, 38), 13.48, 39.99, 0.0, 24.63, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:24:18.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:23:38
2026-02-15T10:24:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:24:19.537 [DEBUG] [Thread-202599] [transport.py] [_log()] starting thread (client mode): 0xa57b2890
2026-02-15T10:24:19.537 [DEBUG] [Thread-202599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:24:19.550 [DEBUG] [Thread-202599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:24:19.551 [INFO] [Thread-202599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:24:19.551 [DEBUG] [Thread-202599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:24:19.551 [DEBUG] [Thread-202599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] client lang: <none>
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] server lang: <none>
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] kex follows: False
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] Compression: none
2026-02-15T10:24:19.552 [DEBUG] [Thread-202599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:24:19.561 [DEBUG] [Thread-202599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:24:19.561 [DEBUG] [Thread-202599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:24:19.561 [DEBUG] [Thread-202599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:24:19.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:24:19.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:24:19.563 [DEBUG] [Thread-202599] [transport.py] [_log()] userauth is OK
2026-02-15T10:24:19.563 [DEBUG] [Thread-202599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:24:19.563 [DEBUG] [Thread-202599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:24:19.563 [DEBUG] [Thread-202599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:24:19.563 [DEBUG] [Thread-202599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:24:19.576 [INFO] [Thread-202599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:24:19.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:24:20.159 [DEBUG] [Thread-202599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:24:20.159 [DEBUG] [Thread-202599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:24:20.159 [DEBUG] [Thread-202599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:24:20.200 [DEBUG] [Thread-202599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:24:20.200 [DEBUG] [Thread-202599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:24:20.203 [DEBUG] [Thread-202599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:24:20.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:24:20.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:24:20.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:24:20.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:24:20.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:24:20.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:24:20.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:24:20.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:24:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:24:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.350100 -999.00  +13.80  23.59     48   +3.20 1 1 1 1 1   888    0 12.98 125.06 ----- 23.6 23.6 141.4 31.5 21.0 -28.4 20.1 -28.1 18.7 -27.6 19.5 -27.3
2026-02-15T10:24:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:24:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:24:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.350100
2026-02-15T10:24:20.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:24:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:24:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:24:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:24:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:24:20.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:23:38', tmtdew=13.48, humidity=39.99, cloud=0.0, wind=24.63, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:24:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:24:20.228 [DEBUG] [Thread-202599] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:24:20.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:24:20.322 [DEBUG] [Thread-202602] [transport.py] [_log()] starting thread (client mode): 0xa57e1f00
2026-02-15T10:24:20.322 [DEBUG] [Thread-202602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:24:20.337 [DEBUG] [Thread-202602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:24:20.338 [INFO] [Thread-202602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:24:20.345 [DEBUG] [Thread-202602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:24:20.346 [DEBUG] [Thread-202602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:24:20.346 [DEBUG] [Thread-202602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:24:20.346 [DEBUG] [Thread-202602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:20.346 [DEBUG] [Thread-202602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:20.346 [DEBUG] [Thread-202602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:20.346 [DEBUG] [Thread-202602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] client lang: <none>
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] server lang: <none>
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] kex follows: False
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:24:20.347 [DEBUG] [Thread-202602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:24:20.348 [DEBUG] [Thread-202602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:24:20.348 [DEBUG] [Thread-202602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:24:20.348 [DEBUG] [Thread-202602] [transport.py] [_log()] Compression: none
2026-02-15T10:24:20.348 [DEBUG] [Thread-202602] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:24:20.403 [DEBUG] [Thread-202602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:24:20.404 [DEBUG] [Thread-202602] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:24:20.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:24:20.405 [DEBUG] [Thread-202602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:24:20.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:24:20.459 [DEBUG] [Thread-202602] [transport.py] [_log()] userauth is OK
2026-02-15T10:24:20.460 [DEBUG] [Thread-202602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:24:20.460 [DEBUG] [Thread-202602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:24:20.460 [DEBUG] [Thread-202602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:24:20.460 [DEBUG] [Thread-202602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:24:20.479 [INFO] [Thread-202602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:24:20.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:24:20.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:24:21.281 [DEBUG] [Thread-202602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:24:21.281 [DEBUG] [Thread-202602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:24:21.329 [DEBUG] [Thread-202602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:24:21.330 [DEBUG] [Thread-202602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:24:21.339 [DEBUG] [Thread-202602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:24:21.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:24:21.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:24:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:24:21.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:24:21.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:24:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:24:21.377 [DEBUG] [Thread-202602] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:24:30.986 [DEBUG] [Thread-202604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:42.252 [DEBUG] [Thread-202605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:46.042 [DEBUG] [Thread-202606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:24:51.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:24:51.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:24:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:24:53.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 24, 14), 12.86, 41.86, 0.0, 24.93, 14.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:24:53.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:24:14
2026-02-15T10:24:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:24:54.110 [DEBUG] [Thread-202607] [transport.py] [_log()] starting thread (client mode): 0xa57b3880
2026-02-15T10:24:54.110 [DEBUG] [Thread-202607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:24:54.127 [DEBUG] [Thread-202607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:24:54.127 [INFO] [Thread-202607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:24:54.130 [DEBUG] [Thread-202607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:24:54.130 [DEBUG] [Thread-202607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:24:54.130 [DEBUG] [Thread-202607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:24:54.130 [DEBUG] [Thread-202607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:54.130 [DEBUG] [Thread-202607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] client lang: <none>
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] server lang: <none>
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] kex follows: False
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] Compression: none
2026-02-15T10:24:54.131 [DEBUG] [Thread-202607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:24:54.147 [DEBUG] [Thread-202607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:24:54.148 [DEBUG] [Thread-202607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:24:54.148 [DEBUG] [Thread-202607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:24:54.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:24:54.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:24:54.150 [DEBUG] [Thread-202607] [transport.py] [_log()] userauth is OK
2026-02-15T10:24:54.151 [DEBUG] [Thread-202607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:24:54.151 [DEBUG] [Thread-202607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:24:54.151 [DEBUG] [Thread-202607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:24:54.151 [DEBUG] [Thread-202607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:24:54.166 [INFO] [Thread-202607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:24:54.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:24:54.713 [DEBUG] [Thread-202607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:24:54.713 [DEBUG] [Thread-202607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:24:54.714 [DEBUG] [Thread-202607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:24:54.755 [DEBUG] [Thread-202607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:24:54.755 [DEBUG] [Thread-202607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:24:54.757 [DEBUG] [Thread-202607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:24:54.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:24:54.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:24:54.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:24:54.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:24:54.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:24:54.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:24:54.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:24:54.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:24:54.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:24:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.350447 -999.00  +13.80  27.52     48   +3.20 1 1 1 1 1   888    0 13.10 129.20 ----- 27.5 27.5 145.4 33.0 20.9 -29.0 20.0 -28.3 18.7 -27.3 19.6 -28.0
2026-02-15T10:24:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:24:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:24:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.350447
2026-02-15T10:24:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:24:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:24:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:24:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:24:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:24:54.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:24:14', tmtdew=12.86, humidity=41.86, cloud=0.0, wind=24.93, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:24:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:24:54.784 [DEBUG] [Thread-202607] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:24:54.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:24:54.902 [DEBUG] [Thread-202610] [transport.py] [_log()] starting thread (client mode): 0xa57e16c0
2026-02-15T10:24:54.903 [DEBUG] [Thread-202610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:24:54.939 [DEBUG] [Thread-202610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:24:54.939 [INFO] [Thread-202610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:24:54.970 [DEBUG] [Thread-202610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:24:54.970 [DEBUG] [Thread-202610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] client lang: <none>
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] server lang: <none>
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] kex follows: False
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] Compression: none
2026-02-15T10:24:54.971 [DEBUG] [Thread-202610] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:24:55.051 [DEBUG] [Thread-202610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:24:55.051 [DEBUG] [Thread-202610] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:24:55.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:24:55.052 [DEBUG] [Thread-202610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:24:55.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:24:55.156 [DEBUG] [Thread-202610] [transport.py] [_log()] userauth is OK
2026-02-15T10:24:55.156 [DEBUG] [Thread-202610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:24:55.156 [DEBUG] [Thread-202610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:24:55.156 [DEBUG] [Thread-202610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:24:55.156 [DEBUG] [Thread-202610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:24:55.205 [INFO] [Thread-202610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:24:55.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:24:55.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:24:55.994 [DEBUG] [Thread-202610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:24:55.995 [DEBUG] [Thread-202610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:24:56.042 [DEBUG] [Thread-202610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:24:56.043 [DEBUG] [Thread-202610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:24:56.053 [DEBUG] [Thread-202610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:24:56.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:24: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')
2026-02-15T10:24:56.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:24:56.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:24:56.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:24:56.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:24:56.088 [DEBUG] [Thread-202610] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:25:01.081 [DEBUG] [Thread-202612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:25:06.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:25:06.856 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:25:16.131 [DEBUG] [Thread-202613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:25:26.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:25:26.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:25:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:25:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 24, 49), 12.36, 43.06, 0.0, 23.84, 13.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:25:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:24:49
2026-02-15T10:25:28.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:25:29.156 [DEBUG] [Thread-202614] [transport.py] [_log()] starting thread (client mode): 0xa57430a0
2026-02-15T10:25:29.157 [DEBUG] [Thread-202614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:25:29.175 [DEBUG] [Thread-202614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:25:29.175 [INFO] [Thread-202614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:25:29.177 [DEBUG] [Thread-202614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:25:29.177 [DEBUG] [Thread-202614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:25:29.177 [DEBUG] [Thread-202614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:25:29.177 [DEBUG] [Thread-202614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] client lang: <none>
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] server lang: <none>
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] kex follows: False
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] Compression: none
2026-02-15T10:25:29.178 [DEBUG] [Thread-202614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:25:29.196 [DEBUG] [Thread-202614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:25:29.197 [DEBUG] [Thread-202614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:25:29.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:25:29.199 [DEBUG] [Thread-202614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:25:29.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:25:29.200 [DEBUG] [Thread-202614] [transport.py] [_log()] userauth is OK
2026-02-15T10:25:29.201 [DEBUG] [Thread-202614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:25:29.201 [DEBUG] [Thread-202614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:25:29.201 [DEBUG] [Thread-202614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:25:29.201 [DEBUG] [Thread-202614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:25:29.226 [INFO] [Thread-202614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:25:29.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:25:29.855 [DEBUG] [Thread-202614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:25:29.855 [DEBUG] [Thread-202614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:25:29.856 [DEBUG] [Thread-202614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:25:29.896 [DEBUG] [Thread-202614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:25:29.897 [DEBUG] [Thread-202614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:25:29.900 [DEBUG] [Thread-202614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:25:29.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:25:29.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:25:29.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:25:29.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:25:29.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:25:29.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:25:29.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:25:29.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:25:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:25:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.350794 -999.00  +13.60  19.90     49   +3.20 1 1 1 1 1   888    0 13.23 135.56 ----- 19.9 19.9 134.6 28.8 21.0 -27.2 20.0 -26.5 18.7 -26.6 19.5 -28.1
2026-02-15T10:25:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:25:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:25:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.350794
2026-02-15T10:25:29.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:25:29.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:25:29.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:25:29.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:25:29.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:25:29.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:24:49', tmtdew=12.36, humidity=43.06, cloud=0.0, wind=23.84, temperature=13.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:25:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:25:29.927 [DEBUG] [Thread-202614] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:25:30.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:25:30.022 [DEBUG] [Thread-202617] [transport.py] [_log()] starting thread (client mode): 0xa81d5540
2026-02-15T10:25:30.022 [DEBUG] [Thread-202617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:25:30.037 [DEBUG] [Thread-202617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:25:30.037 [INFO] [Thread-202617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:25:30.045 [DEBUG] [Thread-202617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:25:30.045 [DEBUG] [Thread-202617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:25:30.045 [DEBUG] [Thread-202617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:25:30.045 [DEBUG] [Thread-202617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:25:30.045 [DEBUG] [Thread-202617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] client lang: <none>
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] server lang: <none>
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] kex follows: False
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] Compression: none
2026-02-15T10:25:30.046 [DEBUG] [Thread-202617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:25:30.103 [DEBUG] [Thread-202617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:25:30.104 [DEBUG] [Thread-202617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:25:30.104 [DEBUG] [Thread-202617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:25:30.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:25:30.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:25:30.162 [DEBUG] [Thread-202617] [transport.py] [_log()] userauth is OK
2026-02-15T10:25:30.162 [DEBUG] [Thread-202617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:25:30.162 [DEBUG] [Thread-202617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:25:30.163 [DEBUG] [Thread-202617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:25:30.163 [DEBUG] [Thread-202617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:25:30.182 [INFO] [Thread-202617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:25:30.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:25:30.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:25:31.049 [DEBUG] [Thread-202617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:25:31.049 [DEBUG] [Thread-202617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:25:31.097 [DEBUG] [Thread-202617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:25:31.097 [DEBUG] [Thread-202617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:25:31.107 [DEBUG] [Thread-202617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:25:31.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:25:31.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:25:31.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:25:31.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:25:31.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:25:31.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:25:31.143 [DEBUG] [Thread-202617] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:25:31.165 [DEBUG] [Thread-202619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:25:42.310 [DEBUG] [Thread-202620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:25:46.216 [DEBUG] [Thread-202621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:01.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:26:01.166 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:26:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:26:01.256 [DEBUG] [Thread-202622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 25, 25), 12.49, 42.69, 0.0, 21.39, 13.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:26:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:25:25
2026-02-15T10:26:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:26:03.546 [DEBUG] [Thread-202623] [transport.py] [_log()] starting thread (client mode): 0xa81d7580
2026-02-15T10:26:03.546 [DEBUG] [Thread-202623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:26:03.561 [DEBUG] [Thread-202623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:26:03.561 [INFO] [Thread-202623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:03.564 [DEBUG] [Thread-202623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] client lang: <none>
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] server lang: <none>
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] kex follows: False
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] Compression: none
2026-02-15T10:26:03.565 [DEBUG] [Thread-202623] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:26:03.581 [DEBUG] [Thread-202623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:26:03.582 [DEBUG] [Thread-202623] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:26:03.582 [DEBUG] [Thread-202623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:26:03.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:26:03.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:26:03.585 [DEBUG] [Thread-202623] [transport.py] [_log()] userauth is OK
2026-02-15T10:26:03.585 [DEBUG] [Thread-202623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:26:03.585 [DEBUG] [Thread-202623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:26:03.585 [DEBUG] [Thread-202623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:26:03.585 [DEBUG] [Thread-202623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:26:03.610 [INFO] [Thread-202623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:26:03.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:26:04.217 [DEBUG] [Thread-202623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:26:04.217 [DEBUG] [Thread-202623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:26:04.217 [DEBUG] [Thread-202623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:26:04.258 [DEBUG] [Thread-202623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:26:04.259 [DEBUG] [Thread-202623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:26:04.262 [DEBUG] [Thread-202623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:26:04.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:26:04.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:26:04.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:26:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:26:04.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:26:04.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:26:04.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:26:04.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:26:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:26:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.351141 -999.00  +13.50  21.76     49   +3.10 1 1 1 1 1   888    0 14.46 159.62 ----- 21.8 21.8 138.6 27.8 21.0 -28.8 20.1 -27.8 18.8 -27.1 19.6 -27.3
2026-02-15T10:26:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:26:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:26:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.351141
2026-02-15T10:26:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:26:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:26:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:26:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:26:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:26:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:25:25', tmtdew=12.49, humidity=42.69, cloud=0.0, wind=21.39, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:25:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:26:04.291 [DEBUG] [Thread-202623] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:26:04.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:26:04.387 [DEBUG] [Thread-202626] [transport.py] [_log()] starting thread (client mode): 0xa5743610
2026-02-15T10:26:04.387 [DEBUG] [Thread-202626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:26:04.403 [DEBUG] [Thread-202626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:26:04.403 [INFO] [Thread-202626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:26:04.410 [DEBUG] [Thread-202626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] client lang: <none>
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] server lang: <none>
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] kex follows: False
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:26:04.411 [DEBUG] [Thread-202626] [transport.py] [_log()] Compression: none
2026-02-15T10:26:04.412 [DEBUG] [Thread-202626] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:26:04.471 [DEBUG] [Thread-202626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:26:04.471 [DEBUG] [Thread-202626] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:26:04.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:26:04.473 [DEBUG] [Thread-202626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:26:04.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:26:04.527 [DEBUG] [Thread-202626] [transport.py] [_log()] userauth is OK
2026-02-15T10:26:04.527 [DEBUG] [Thread-202626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:26:04.527 [DEBUG] [Thread-202626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:26:04.527 [DEBUG] [Thread-202626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:26:04.527 [DEBUG] [Thread-202626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:26:04.545 [INFO] [Thread-202626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:26:04.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:26:04.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:26:05.409 [DEBUG] [Thread-202626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:26:05.409 [DEBUG] [Thread-202626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:26:05.458 [DEBUG] [Thread-202626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:26:05.458 [DEBUG] [Thread-202626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:26:05.467 [DEBUG] [Thread-202626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:26:05.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:26:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:26:05.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:26:05.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:26:05.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:26:05.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:26:05.504 [DEBUG] [Thread-202626] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:26:06.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:06.997 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:16.301 [DEBUG] [Thread-202628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:31.355 [DEBUG] [Thread-202629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:35.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:26:35.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:26: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
2026-02-15T10:26:37.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 26, 1), 12.6, 42.38, 0.0, 22.5, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:26:37.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:26:01
2026-02-15T10:26:37.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:26:37.939 [DEBUG] [Thread-202630] [transport.py] [_log()] starting thread (client mode): 0xa57e0580
2026-02-15T10:26:37.939 [DEBUG] [Thread-202630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:26:37.960 [DEBUG] [Thread-202630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:26:37.961 [INFO] [Thread-202630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] client lang: <none>
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] server lang: <none>
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] kex follows: False
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:26:37.963 [DEBUG] [Thread-202630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:26:37.964 [DEBUG] [Thread-202630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:26:37.964 [DEBUG] [Thread-202630] [transport.py] [_log()] Compression: none
2026-02-15T10:26:37.964 [DEBUG] [Thread-202630] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:26:37.977 [DEBUG] [Thread-202630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:26:37.977 [DEBUG] [Thread-202630] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:26:37.978 [DEBUG] [Thread-202630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:26:37.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:26:37.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:26:37.981 [DEBUG] [Thread-202630] [transport.py] [_log()] userauth is OK
2026-02-15T10:26:37.981 [DEBUG] [Thread-202630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:26:37.981 [DEBUG] [Thread-202630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:26:37.981 [DEBUG] [Thread-202630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:26:37.981 [DEBUG] [Thread-202630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:26:38.002 [INFO] [Thread-202630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:26:38.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:26:38.568 [DEBUG] [Thread-202630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:26:38.568 [DEBUG] [Thread-202630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:26:38.568 [DEBUG] [Thread-202630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:26:38.609 [DEBUG] [Thread-202630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:26:38.610 [DEBUG] [Thread-202630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:26:38.613 [DEBUG] [Thread-202630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:26:38.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:26:38.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:26:38.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:26:38.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:26:38.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:26:38.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:26:38.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:26:38.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:26:38.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:26:38.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.351488 -999.00  +13.20  17.65     50   +3.10 1 1 1 1 1   888    0 13.38 139.06 ----- 17.6 17.6 130.8 26.4 21.0 -27.4 20.1 -26.8 18.8 -26.4 19.5 -27.5
2026-02-15T10:26:38.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:26:38.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:26:38.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.351488
2026-02-15T10:26:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:26:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:26:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:26:38.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:26:38.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:26:38.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:26:01', tmtdew=12.6, humidity=42.38, cloud=0.0, wind=22.5, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:26:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:26:38.639 [DEBUG] [Thread-202630] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:26:38.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:26:38.745 [DEBUG] [Thread-202633] [transport.py] [_log()] starting thread (client mode): 0xa57e3490
2026-02-15T10:26:38.745 [DEBUG] [Thread-202633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:26:38.758 [DEBUG] [Thread-202633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:26:38.758 [INFO] [Thread-202633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:26:38.766 [DEBUG] [Thread-202633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:26:38.766 [DEBUG] [Thread-202633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:26:38.766 [DEBUG] [Thread-202633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:26:38.766 [DEBUG] [Thread-202633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] client lang: <none>
2026-02-15T10:26:38.767 [DEBUG] [Thread-202633] [transport.py] [_log()] server lang: <none>
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] kex follows: False
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] Compression: none
2026-02-15T10:26:38.768 [DEBUG] [Thread-202633] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:26:38.827 [DEBUG] [Thread-202633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:26:38.828 [DEBUG] [Thread-202633] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:26:38.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:26:38.829 [DEBUG] [Thread-202633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:26:38.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:26:38.883 [DEBUG] [Thread-202633] [transport.py] [_log()] userauth is OK
2026-02-15T10:26:38.883 [DEBUG] [Thread-202633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:26:38.884 [DEBUG] [Thread-202633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:26:38.884 [DEBUG] [Thread-202633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:26:38.884 [DEBUG] [Thread-202633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:26:38.902 [INFO] [Thread-202633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:26:38.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:26:38.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:26:39.733 [DEBUG] [Thread-202633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:26:39.733 [DEBUG] [Thread-202633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:26:39.781 [DEBUG] [Thread-202633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:26:39.782 [DEBUG] [Thread-202633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:26:39.791 [DEBUG] [Thread-202633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:26:39.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:26:39.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:26:39.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:26:39.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:26:39.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:26:39.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:26:39.827 [DEBUG] [Thread-202633] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:26:42.363 [DEBUG] [Thread-202635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:26:46.392 [DEBUG] [Thread-202636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:01.454 [DEBUG] [Thread-202637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:07.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:07.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:09.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:27:09.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:27:09.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:27:11.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 26, 37), 13.69, 39.36, 0.0, 22.9, 14.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:27:11.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:26:37
2026-02-15T10:27:12.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:27:12.249 [DEBUG] [Thread-202638] [transport.py] [_log()] starting thread (client mode): 0xa2d13be0
2026-02-15T10:27:12.249 [DEBUG] [Thread-202638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:27:12.260 [DEBUG] [Thread-202638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:27:12.260 [INFO] [Thread-202638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] client lang: <none>
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] server lang: <none>
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] kex follows: False
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] Compression: none
2026-02-15T10:27:12.262 [DEBUG] [Thread-202638] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:27:12.270 [DEBUG] [Thread-202638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:27:12.271 [DEBUG] [Thread-202638] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:27:12.271 [DEBUG] [Thread-202638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:27:12.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:27:12.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:27:12.273 [DEBUG] [Thread-202638] [transport.py] [_log()] userauth is OK
2026-02-15T10:27:12.273 [DEBUG] [Thread-202638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:27:12.273 [DEBUG] [Thread-202638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:27:12.273 [DEBUG] [Thread-202638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:27:12.273 [DEBUG] [Thread-202638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:27:12.287 [INFO] [Thread-202638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:27:12.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:27:12.927 [DEBUG] [Thread-202638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:27:12.927 [DEBUG] [Thread-202638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:27:12.928 [DEBUG] [Thread-202638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:27:12.969 [DEBUG] [Thread-202638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:27:12.969 [DEBUG] [Thread-202638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:27:12.972 [DEBUG] [Thread-202638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:27:12.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:27:12.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:27:12.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:27:12.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:27:12.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:27:12.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:27:12.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:27:12.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.351836 -999.00  +13.50  11.76     50   +3.30 1 1 1 1 1   888    0 13.57 137.41 ----- 11.8 11.8 133.0 21.2 21.0 -27.4 20.2 -26.6 18.9 -25.9 19.6 -26.5
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.351836
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:27:12.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:27:12.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:27:12.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:26:37', tmtdew=13.69, humidity=39.36, cloud=0.0, wind=22.9, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:26:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:27:12.994 [DEBUG] [Thread-202638] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:27:13.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:27:13.094 [DEBUG] [Thread-202641] [transport.py] [_log()] starting thread (client mode): 0xa2d01b40
2026-02-15T10:27:13.094 [DEBUG] [Thread-202641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:27:13.109 [DEBUG] [Thread-202641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:27:13.110 [INFO] [Thread-202641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] client lang: <none>
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] server lang: <none>
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] kex follows: False
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:27:13.117 [DEBUG] [Thread-202641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:27:13.118 [DEBUG] [Thread-202641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:27:13.118 [DEBUG] [Thread-202641] [transport.py] [_log()] Compression: none
2026-02-15T10:27:13.118 [DEBUG] [Thread-202641] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:27:13.174 [DEBUG] [Thread-202641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:27:13.174 [DEBUG] [Thread-202641] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:27:13.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:27:13.175 [DEBUG] [Thread-202641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:27:13.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:27:13.230 [DEBUG] [Thread-202641] [transport.py] [_log()] userauth is OK
2026-02-15T10:27:13.230 [DEBUG] [Thread-202641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:27:13.230 [DEBUG] [Thread-202641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:27:13.231 [DEBUG] [Thread-202641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:27:13.231 [DEBUG] [Thread-202641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:27:13.249 [INFO] [Thread-202641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:27:13.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:27:13.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:27:14.119 [DEBUG] [Thread-202641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:27:14.120 [DEBUG] [Thread-202641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:27:14.167 [DEBUG] [Thread-202641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:27:14.167 [DEBUG] [Thread-202641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:27:14.177 [DEBUG] [Thread-202641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:27:14.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:27:14.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:27:14.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:27:14.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:27:14.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:27:14.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:27:14.213 [DEBUG] [Thread-202641] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:27:16.495 [DEBUG] [Thread-202643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:31.545 [DEBUG] [Thread-202644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:42.407 [DEBUG] [Thread-202645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:44.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:27:44.236 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:27:44.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:27:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 27, 12), 12.12, 43.76, 0.0, 18.23, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:27:46.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:27:12
2026-02-15T10:27:46.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:27:46.569 [DEBUG] [Thread-202646] [transport.py] [_log()] starting thread (client mode): 0xa57e1180
2026-02-15T10:27:46.569 [DEBUG] [Thread-202646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:27:46.580 [DEBUG] [Thread-202647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:27:46.588 [DEBUG] [Thread-202646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:27:46.588 [INFO] [Thread-202646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] client lang: <none>
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] server lang: <none>
2026-02-15T10:27:46.591 [DEBUG] [Thread-202646] [transport.py] [_log()] kex follows: False
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] Compression: none
2026-02-15T10:27:46.592 [DEBUG] [Thread-202646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:27:46.609 [DEBUG] [Thread-202646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:27:46.609 [DEBUG] [Thread-202646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:27:46.610 [DEBUG] [Thread-202646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:27:46.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:27:46.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:27:46.612 [DEBUG] [Thread-202646] [transport.py] [_log()] userauth is OK
2026-02-15T10:27:46.612 [DEBUG] [Thread-202646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:27:46.612 [DEBUG] [Thread-202646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:27:46.612 [DEBUG] [Thread-202646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:27:46.612 [DEBUG] [Thread-202646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:27:46.631 [INFO] [Thread-202646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:27:46.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:27:47.258 [DEBUG] [Thread-202646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:27:47.259 [DEBUG] [Thread-202646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:27:47.259 [DEBUG] [Thread-202646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:27:47.299 [DEBUG] [Thread-202646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:27:47.300 [DEBUG] [Thread-202646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:27:47.303 [DEBUG] [Thread-202646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:27:47.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:27:47.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:27:47.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:27:47.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:27:47.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:27:47.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:27:47.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:27:47.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:27:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:27:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.352183 -999.00  +13.80  18.76     49   +3.40 1 1 1 1 1   888    0 13.93 148.34 ----- 18.8 18.8 149.7 24.4 21.0 -27.3 20.1 -28.3 18.9 -27.0 19.7 -27.0
2026-02-15T10:27:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:27:47.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:27:47.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.352183
2026-02-15T10:27:47.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:27:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:27:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:27:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:27:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:27:47.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:27:12', tmtdew=12.12, humidity=43.76, cloud=0.0, wind=18.23, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:27:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:27:47.332 [DEBUG] [Thread-202646] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:27:47.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:27:47.430 [DEBUG] [Thread-202650] [transport.py] [_log()] starting thread (client mode): 0xa81d6f20
2026-02-15T10:27:47.430 [DEBUG] [Thread-202650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:27:47.445 [DEBUG] [Thread-202650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:27:47.445 [INFO] [Thread-202650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] client lang: <none>
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] server lang: <none>
2026-02-15T10:27:47.453 [DEBUG] [Thread-202650] [transport.py] [_log()] kex follows: False
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] Compression: none
2026-02-15T10:27:47.454 [DEBUG] [Thread-202650] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:27:47.510 [DEBUG] [Thread-202650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:27:47.511 [DEBUG] [Thread-202650] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:27:47.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:27:47.512 [DEBUG] [Thread-202650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:27:47.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:27:47.566 [DEBUG] [Thread-202650] [transport.py] [_log()] userauth is OK
2026-02-15T10:27:47.567 [DEBUG] [Thread-202650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:27:47.567 [DEBUG] [Thread-202650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:27:47.567 [DEBUG] [Thread-202650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:27:47.567 [DEBUG] [Thread-202650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:27:47.586 [INFO] [Thread-202650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:27:47.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:27:47.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:27:48.435 [DEBUG] [Thread-202650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:27:48.435 [DEBUG] [Thread-202650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:27:48.483 [DEBUG] [Thread-202650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:27:48.484 [DEBUG] [Thread-202650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:27:48.493 [DEBUG] [Thread-202650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:27:48.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:27:48.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:27:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:27:48.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:27:48.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:27:48.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:27:48.527 [DEBUG] [Thread-202650] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:28:01.615 [DEBUG] [Thread-202652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:07.283 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:07.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:16.666 [DEBUG] [Thread-202653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:28:18.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:28:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:28:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 27, 48), 12.54, 42.56, 0.0, 26.57, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:28:20.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:27:48
2026-02-15T10:28:20.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:28:21.068 [DEBUG] [Thread-202654] [transport.py] [_log()] starting thread (client mode): 0xa57e1d20
2026-02-15T10:28:21.069 [DEBUG] [Thread-202654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:28:21.089 [DEBUG] [Thread-202654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:28:21.090 [INFO] [Thread-202654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:28:21.093 [DEBUG] [Thread-202654] [transport.py] [_log()] client lang: <none>
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] server lang: <none>
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] kex follows: False
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] Compression: none
2026-02-15T10:28:21.094 [DEBUG] [Thread-202654] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:28:21.115 [DEBUG] [Thread-202654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:28:21.116 [DEBUG] [Thread-202654] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:28:21.117 [DEBUG] [Thread-202654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:28:21.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:28:21.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:28:21.119 [DEBUG] [Thread-202654] [transport.py] [_log()] userauth is OK
2026-02-15T10:28:21.119 [DEBUG] [Thread-202654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:28:21.119 [DEBUG] [Thread-202654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:28:21.119 [DEBUG] [Thread-202654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:28:21.119 [DEBUG] [Thread-202654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:28:21.155 [INFO] [Thread-202654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:28:21.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:28:21.810 [DEBUG] [Thread-202654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:28:21.811 [DEBUG] [Thread-202654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:28:21.811 [DEBUG] [Thread-202654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:28:21.851 [DEBUG] [Thread-202654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:28:21.852 [DEBUG] [Thread-202654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:28:21.855 [DEBUG] [Thread-202654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:28:21.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:28:21.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:28:21.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:28:21.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:28:21.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:28:21.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:28:21.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:28:21.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:28:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:28:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.352877 -999.00  +13.80  23.18     48   +3.00 1 1 1 1 1   888    0 13.59 135.36 ----- 23.2 23.2 136.8 27.3 21.1 -27.6 20.2 -28.1 18.9 -27.3 19.7 -28.8
2026-02-15T10:28:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:28:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:28:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.352877
2026-02-15T10:28:21.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:28:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:28:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:28:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:28:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:28:21.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:27:48', tmtdew=12.54, humidity=42.56, cloud=0.0, wind=26.57, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:28:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:28:21.885 [DEBUG] [Thread-202654] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:28:21.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:28:21.984 [DEBUG] [Thread-202657] [transport.py] [_log()] starting thread (client mode): 0xa57c14e0
2026-02-15T10:28:21.984 [DEBUG] [Thread-202657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:28:22.000 [DEBUG] [Thread-202657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:28:22.000 [INFO] [Thread-202657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:28:22.007 [DEBUG] [Thread-202657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:28:22.008 [DEBUG] [Thread-202657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:28:22.008 [DEBUG] [Thread-202657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:28:22.008 [DEBUG] [Thread-202657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:22.008 [DEBUG] [Thread-202657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] client lang: <none>
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] server lang: <none>
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] kex follows: False
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:28:22.009 [DEBUG] [Thread-202657] [transport.py] [_log()] Compression: none
2026-02-15T10:28:22.010 [DEBUG] [Thread-202657] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:28:22.066 [DEBUG] [Thread-202657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:28:22.066 [DEBUG] [Thread-202657] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:28:22.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:28:22.067 [DEBUG] [Thread-202657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:28:22.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:28:22.122 [DEBUG] [Thread-202657] [transport.py] [_log()] userauth is OK
2026-02-15T10:28:22.123 [DEBUG] [Thread-202657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:28:22.123 [DEBUG] [Thread-202657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:28:22.123 [DEBUG] [Thread-202657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:28:22.123 [DEBUG] [Thread-202657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:28:22.149 [INFO] [Thread-202657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:28:22.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:28:22.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:28:22.978 [DEBUG] [Thread-202657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:28:22.978 [DEBUG] [Thread-202657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:28:23.026 [DEBUG] [Thread-202657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:28:23.027 [DEBUG] [Thread-202657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:28:23.035 [DEBUG] [Thread-202657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:28:23.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:28:23.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:28:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:28:23.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:28:23.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:28:23.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:28:23.069 [DEBUG] [Thread-202657] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:28:31.703 [DEBUG] [Thread-202659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:42.456 [DEBUG] [Thread-202660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:46.756 [DEBUG] [Thread-202661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:28:53.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:28:53.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:28:53.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:28:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 28, 23), 12.49, 42.71, 0.0, 27.93, 14.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:28:55.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:28:23
2026-02-15T10:28:55.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:28:56.069 [DEBUG] [Thread-202662] [transport.py] [_log()] starting thread (client mode): 0xa57406d0
2026-02-15T10:28:56.069 [DEBUG] [Thread-202662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:28:56.089 [DEBUG] [Thread-202662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:28:56.089 [INFO] [Thread-202662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:28:56.092 [DEBUG] [Thread-202662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] client lang: <none>
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] server lang: <none>
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] kex follows: False
2026-02-15T10:28:56.093 [DEBUG] [Thread-202662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:28:56.094 [DEBUG] [Thread-202662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:28:56.094 [DEBUG] [Thread-202662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:28:56.094 [DEBUG] [Thread-202662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:28:56.094 [DEBUG] [Thread-202662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:28:56.094 [DEBUG] [Thread-202662] [transport.py] [_log()] Compression: none
2026-02-15T10:28:56.094 [DEBUG] [Thread-202662] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:28:56.109 [DEBUG] [Thread-202662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:28:56.110 [DEBUG] [Thread-202662] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:28:56.110 [DEBUG] [Thread-202662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:28:56.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:28:56.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:28:56.113 [DEBUG] [Thread-202662] [transport.py] [_log()] userauth is OK
2026-02-15T10:28:56.113 [DEBUG] [Thread-202662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:28:56.113 [DEBUG] [Thread-202662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:28:56.113 [DEBUG] [Thread-202662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:28:56.113 [DEBUG] [Thread-202662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:28:56.140 [INFO] [Thread-202662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:28:56.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:28:56.770 [DEBUG] [Thread-202662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:28:56.771 [DEBUG] [Thread-202662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:28:56.771 [DEBUG] [Thread-202662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:28:56.811 [DEBUG] [Thread-202662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:28:56.812 [DEBUG] [Thread-202662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:28:56.815 [DEBUG] [Thread-202662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:28:56.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:28:56.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:28:56.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:28:56.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:28:56.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:28:56.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:28:56.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:28:56.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:28:56.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:28:56.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.353224 -999.00  +14.20  13.72     47   +3.10 1 1 1 1 1   888    0 13.69 134.46 ----- 13.7 13.7 134.4 22.1 21.1 -27.5 20.3 -26.7 19.1 -26.8 19.8 -27.3
2026-02-15T10:28:56.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:28:56.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:28:56.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.353224
2026-02-15T10:28:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:28:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:28:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:28:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:28:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:28:56.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:28:23', tmtdew=12.49, humidity=42.71, cloud=0.0, wind=27.93, temperature=14.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:28:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:28:56.841 [DEBUG] [Thread-202662] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:28:56.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:28:56.939 [DEBUG] [Thread-202665] [transport.py] [_log()] starting thread (client mode): 0xa81d6140
2026-02-15T10:28:56.940 [DEBUG] [Thread-202665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:28:56.954 [DEBUG] [Thread-202665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:28:56.955 [INFO] [Thread-202665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:28:56.963 [DEBUG] [Thread-202665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:28:56.963 [DEBUG] [Thread-202665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:28:56.964 [DEBUG] [Thread-202665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] client lang: <none>
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] server lang: <none>
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] kex follows: False
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] Compression: none
2026-02-15T10:28:56.965 [DEBUG] [Thread-202665] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:28:57.021 [DEBUG] [Thread-202665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:28:57.022 [DEBUG] [Thread-202665] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:28:57.023 [DEBUG] [Thread-202665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:28:57.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:28:57.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:28:57.078 [DEBUG] [Thread-202665] [transport.py] [_log()] userauth is OK
2026-02-15T10:28:57.078 [DEBUG] [Thread-202665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:28:57.079 [DEBUG] [Thread-202665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:28:57.079 [DEBUG] [Thread-202665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:28:57.079 [DEBUG] [Thread-202665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:28:57.097 [INFO] [Thread-202665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:28:57.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:28:57.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:28:57.930 [DEBUG] [Thread-202665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:28:57.930 [DEBUG] [Thread-202665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:28:57.978 [DEBUG] [Thread-202665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:28:57.979 [DEBUG] [Thread-202665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:28:57.989 [DEBUG] [Thread-202665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:28:57.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:28:57.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:28: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') -> 00000000
2026-02-15T10:28:58.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:28:58.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:28:58.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:28:58.030 [DEBUG] [Thread-202665] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:29:01.793 [DEBUG] [Thread-202667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:29:07.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:29:07.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:29:16.846 [DEBUG] [Thread-202668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:29:28.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:29:28.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:29:28.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:29:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 28, 59), 12.73, 41.76, 0.0, 21.83, 14.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:29:30.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:28:59
2026-02-15T10:29:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:29:30.529 [DEBUG] [Thread-202669] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-15T10:29:30.529 [DEBUG] [Thread-202669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:29:30.548 [DEBUG] [Thread-202669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:29:30.548 [INFO] [Thread-202669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:29:30.551 [DEBUG] [Thread-202669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:29:30.551 [DEBUG] [Thread-202669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:29:30.551 [DEBUG] [Thread-202669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] client lang: <none>
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] server lang: <none>
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] kex follows: False
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:29:30.552 [DEBUG] [Thread-202669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:29:30.553 [DEBUG] [Thread-202669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:29:30.553 [DEBUG] [Thread-202669] [transport.py] [_log()] Compression: none
2026-02-15T10:29:30.553 [DEBUG] [Thread-202669] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:29:30.571 [DEBUG] [Thread-202669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:29:30.571 [DEBUG] [Thread-202669] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:29:30.572 [DEBUG] [Thread-202669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:29:30.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:29:30.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:29:30.573 [DEBUG] [Thread-202669] [transport.py] [_log()] userauth is OK
2026-02-15T10:29:30.574 [DEBUG] [Thread-202669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:29:30.574 [DEBUG] [Thread-202669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:29:30.574 [DEBUG] [Thread-202669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:29:30.574 [DEBUG] [Thread-202669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:29:30.598 [INFO] [Thread-202669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:29:30.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:29:31.233 [DEBUG] [Thread-202669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:29:31.233 [DEBUG] [Thread-202669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:29:31.233 [DEBUG] [Thread-202669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:29:31.274 [DEBUG] [Thread-202669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:29:31.274 [DEBUG] [Thread-202669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:29:31.277 [DEBUG] [Thread-202669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:29:31.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:29:31.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:29:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:29:31.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:29:31.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:29:31.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:29:31.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:29:31.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:29:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:29:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.353572 -999.00  +14.40  27.91     47   +3.40 1 1 1 1 1   888    0 13.56 130.00 ----- 27.9 27.9 136.8 30.1 21.3 -27.3 20.4 -27.8 19.1 -27.3 19.9 -26.9
2026-02-15T10:29:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:29:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:29:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.353572
2026-02-15T10:29:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:29:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:29:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:29:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:29:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:29:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:28:59', tmtdew=12.73, humidity=41.76, cloud=0.0, wind=21.83, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:29:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:29:31.302 [DEBUG] [Thread-202669] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:29:31.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:29:31.407 [DEBUG] [Thread-202672] [transport.py] [_log()] starting thread (client mode): 0xa2d01ba0
2026-02-15T10:29:31.407 [DEBUG] [Thread-202672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:29:31.424 [DEBUG] [Thread-202672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:29:31.425 [INFO] [Thread-202672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:29:31.434 [DEBUG] [Thread-202672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:29:31.434 [DEBUG] [Thread-202672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] client lang: <none>
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] server lang: <none>
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] kex follows: False
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] Compression: none
2026-02-15T10:29:31.435 [DEBUG] [Thread-202672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:29:31.494 [DEBUG] [Thread-202672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:29:31.494 [DEBUG] [Thread-202672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:29:31.495 [DEBUG] [Thread-202672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:29:31.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:29:31.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:29:31.554 [DEBUG] [Thread-202672] [transport.py] [_log()] userauth is OK
2026-02-15T10:29:31.555 [DEBUG] [Thread-202672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:29:31.555 [DEBUG] [Thread-202672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:29:31.555 [DEBUG] [Thread-202672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:29:31.555 [DEBUG] [Thread-202672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:29:31.576 [INFO] [Thread-202672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:29:31.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:29:31.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:29:31.882 [DEBUG] [Thread-202674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:29:32.427 [DEBUG] [Thread-202672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:29:32.427 [DEBUG] [Thread-202672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:29:32.478 [DEBUG] [Thread-202672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:29:32.478 [DEBUG] [Thread-202672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:29:32.490 [DEBUG] [Thread-202672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:29:32.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:29:32.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:29:32.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:29:32.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:29:32.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:29:32.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:29:32.536 [DEBUG] [Thread-202672] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:29:42.489 [DEBUG] [Thread-202675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:29:46.940 [DEBUG] [Thread-202676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:01.997 [DEBUG] [Thread-202677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:02.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:30:02.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:30:02.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:30:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 29, 35), 13.28, 40.52, 0.0, 26.29, 14.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:30:04.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:29:35
2026-02-15T10:30:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:30:05.519 [DEBUG] [Thread-202678] [transport.py] [_log()] starting thread (client mode): 0xa2d00df0
2026-02-15T10:30:05.519 [DEBUG] [Thread-202678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:30:05.539 [DEBUG] [Thread-202678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:30:05.540 [INFO] [Thread-202678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:30:05.541 [DEBUG] [Thread-202678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] client lang: <none>
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] server lang: <none>
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] kex follows: False
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] Compression: none
2026-02-15T10:30:05.542 [DEBUG] [Thread-202678] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:30:05.559 [DEBUG] [Thread-202678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:30:05.560 [DEBUG] [Thread-202678] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:30:05.560 [DEBUG] [Thread-202678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:30:05.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:30:05.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:30:05.562 [DEBUG] [Thread-202678] [transport.py] [_log()] userauth is OK
2026-02-15T10:30:05.563 [DEBUG] [Thread-202678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:30:05.563 [DEBUG] [Thread-202678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:30:05.563 [DEBUG] [Thread-202678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:30:05.563 [DEBUG] [Thread-202678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:30:05.587 [INFO] [Thread-202678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:30:05.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:30:07.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:07.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:16.891 [DEBUG] [Thread-202678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:30:16.891 [DEBUG] [Thread-202678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:30:16.892 [DEBUG] [Thread-202678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:30:16.932 [DEBUG] [Thread-202678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:30:16.932 [DEBUG] [Thread-202678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:30:16.936 [DEBUG] [Thread-202678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:30:16.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:30:16.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:30:16.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:30:16.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:30:17.035 [DEBUG] [Thread-202681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:17.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:30:17.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:30:17.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:30:17.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:30:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:30:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.353919 -999.00  +14.20  23.48     48   +3.50 1 1 1 1 1   888    0 13.45 124.94 ----- 23.5 23.5 137.0 28.2 21.2 -28.4 20.4 -27.8 19.1 -26.2 19.9 -27.9
2026-02-15T10:30:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:30:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:30:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.353919
2026-02-15T10:30:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:30:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:30:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:30:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:30:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:30:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:29:35', tmtdew=13.28, humidity=40.52, cloud=0.0, wind=26.29, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:29:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:30:17.057 [DEBUG] [Thread-202678] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:30:17.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:30:17.144 [DEBUG] [Thread-202682] [transport.py] [_log()] starting thread (client mode): 0xa5759030
2026-02-15T10:30:17.144 [DEBUG] [Thread-202682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:30:17.158 [DEBUG] [Thread-202682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:30:17.159 [INFO] [Thread-202682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:17.166 [DEBUG] [Thread-202682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] client lang: <none>
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] server lang: <none>
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] kex follows: False
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] Compression: none
2026-02-15T10:30:17.167 [DEBUG] [Thread-202682] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:30:17.225 [DEBUG] [Thread-202682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:30:17.226 [DEBUG] [Thread-202682] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:30:17.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:30:17.227 [DEBUG] [Thread-202682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:30:17.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:30:17.282 [DEBUG] [Thread-202682] [transport.py] [_log()] userauth is OK
2026-02-15T10:30:17.282 [DEBUG] [Thread-202682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:30:17.282 [DEBUG] [Thread-202682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:30:17.282 [DEBUG] [Thread-202682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:30:17.282 [DEBUG] [Thread-202682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:30:17.301 [INFO] [Thread-202682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:30:17.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:30:17.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:30:18.124 [DEBUG] [Thread-202682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:30:18.124 [DEBUG] [Thread-202682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:30:18.172 [DEBUG] [Thread-202682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:30:18.172 [DEBUG] [Thread-202682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:30:18.181 [DEBUG] [Thread-202682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:30:18.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:30:18.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:30:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:30:18.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:30:18.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:30:18.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:30:18.215 [DEBUG] [Thread-202682] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:30:32.073 [DEBUG] [Thread-202684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:42.547 [DEBUG] [Thread-202685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:47.134 [DEBUG] [Thread-202686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:30:48.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:30:48.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:30:48.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:30:50.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 30, 10), 12.66, 42.12, 0.0, 23.87, 14.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:30:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:30:10
2026-02-15T10:30:50.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:30:50.964 [DEBUG] [Thread-202687] [transport.py] [_log()] starting thread (client mode): 0xa5742290
2026-02-15T10:30:50.973 [DEBUG] [Thread-202687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:30:50.979 [DEBUG] [Thread-202687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:30:50.979 [INFO] [Thread-202687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] client lang: <none>
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] server lang: <none>
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] kex follows: False
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] Compression: none
2026-02-15T10:30:50.982 [DEBUG] [Thread-202687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:30:50.999 [DEBUG] [Thread-202687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:30:51.000 [DEBUG] [Thread-202687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:30:51.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:30:51.001 [DEBUG] [Thread-202687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:30:51.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:30:51.003 [DEBUG] [Thread-202687] [transport.py] [_log()] userauth is OK
2026-02-15T10:30:51.003 [DEBUG] [Thread-202687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:30:51.003 [DEBUG] [Thread-202687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:30:51.003 [DEBUG] [Thread-202687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:30:51.003 [DEBUG] [Thread-202687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:30:51.021 [INFO] [Thread-202687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:30:51.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:30:51.638 [DEBUG] [Thread-202687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:30:51.638 [DEBUG] [Thread-202687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:30:51.638 [DEBUG] [Thread-202687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:30:51.679 [DEBUG] [Thread-202687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:30:51.680 [DEBUG] [Thread-202687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:30:51.682 [DEBUG] [Thread-202687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:30:51.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:30:51.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:30:51.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:30:51.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:30:51.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:30:51.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:30:51.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:30:51.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:30:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:30:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.354266 -999.00  +14.00  20.31     48   +3.40 1 1 1 1 1   888    0 13.12 120.57 ----- 20.3 20.3 140.8 25.4 21.3 -28.6 20.5 -27.5 19.2 -26.7 19.9 -27.6
2026-02-15T10:30:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:30:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:30:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.354266
2026-02-15T10:30:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:30:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:30:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:30:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:30:51.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:30:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:30:10', tmtdew=12.66, humidity=42.12, cloud=0.0, wind=23.87, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:30:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:30:51.709 [DEBUG] [Thread-202687] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:30:51.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:30:51.808 [DEBUG] [Thread-202690] [transport.py] [_log()] starting thread (client mode): 0xa5743520
2026-02-15T10:30:51.808 [DEBUG] [Thread-202690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:30:51.827 [DEBUG] [Thread-202690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:30:51.828 [INFO] [Thread-202690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:30:51.837 [DEBUG] [Thread-202690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] client lang: <none>
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] server lang: <none>
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] kex follows: False
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:30:51.838 [DEBUG] [Thread-202690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:30:51.839 [DEBUG] [Thread-202690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:30:51.839 [DEBUG] [Thread-202690] [transport.py] [_log()] Compression: none
2026-02-15T10:30:51.839 [DEBUG] [Thread-202690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:30:51.897 [DEBUG] [Thread-202690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:30:51.898 [DEBUG] [Thread-202690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:30:51.898 [DEBUG] [Thread-202690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:30:51.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:30:51.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:30:51.961 [DEBUG] [Thread-202690] [transport.py] [_log()] userauth is OK
2026-02-15T10:30:51.961 [DEBUG] [Thread-202690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:30:51.962 [DEBUG] [Thread-202690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:30:51.962 [DEBUG] [Thread-202690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:30:51.962 [DEBUG] [Thread-202690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:30:51.988 [INFO] [Thread-202690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:30:51.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:30:51.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:30:52.815 [DEBUG] [Thread-202690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:30:52.815 [DEBUG] [Thread-202690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:30:52.871 [DEBUG] [Thread-202690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:30:52.871 [DEBUG] [Thread-202690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:30:52.887 [DEBUG] [Thread-202690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:30:52.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:30:52.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:30:52.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:30:52.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:30:52.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:30:52.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:30:52.941 [DEBUG] [Thread-202690] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:31:02.170 [DEBUG] [Thread-202692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:07.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:07.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:17.232 [DEBUG] [Thread-202693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:22.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:31:22.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:31:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:31:25.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 30, 45), 12.52, 42.81, 0.0, 22.89, 14.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:31:25.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:30:45
2026-02-15T10:31:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:31:26.185 [DEBUG] [Thread-202694] [transport.py] [_log()] starting thread (client mode): 0xa2d00760
2026-02-15T10:31:26.185 [DEBUG] [Thread-202694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:31:26.203 [DEBUG] [Thread-202694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:31:26.204 [INFO] [Thread-202694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] client lang: <none>
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] server lang: <none>
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] kex follows: False
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] Compression: none
2026-02-15T10:31:26.207 [DEBUG] [Thread-202694] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:31:26.224 [DEBUG] [Thread-202694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:31:26.224 [DEBUG] [Thread-202694] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:31:26.225 [DEBUG] [Thread-202694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:31:26.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:31:26.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:31:26.227 [DEBUG] [Thread-202694] [transport.py] [_log()] userauth is OK
2026-02-15T10:31:26.227 [DEBUG] [Thread-202694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:31:26.227 [DEBUG] [Thread-202694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:31:26.227 [DEBUG] [Thread-202694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:31:26.227 [DEBUG] [Thread-202694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:31:26.254 [INFO] [Thread-202694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:31:26.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:31:26.904 [DEBUG] [Thread-202694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:31:26.904 [DEBUG] [Thread-202694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:31:26.904 [DEBUG] [Thread-202694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:31:26.944 [DEBUG] [Thread-202694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:31:26.944 [DEBUG] [Thread-202694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:31:26.948 [DEBUG] [Thread-202694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:31:26.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:31:26.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:31:26.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:31:26.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:31:26.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:31:26.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:31:26.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:31:26.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:31:26.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:31:26.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.354613 -999.00  +14.10  20.20     47   +3.00 1 1 1 1 1   888    0 13.53 124.33 ----- 20.2 20.2 122.6 27.5 21.4 -27.9 20.6 -27.7 19.2 -27.2 20.0 -27.9
2026-02-15T10:31:26.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:31:26.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:31:26.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.354613
2026-02-15T10:31:26.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:31:26.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:31:26.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:31:26.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:31:26.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:31:26.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:30:45', tmtdew=12.52, humidity=42.81, cloud=0.0, wind=22.89, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:30:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:31:26.976 [DEBUG] [Thread-202694] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:31:27.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:31:27.073 [DEBUG] [Thread-202697] [transport.py] [_log()] starting thread (client mode): 0xa2db5150
2026-02-15T10:31:27.073 [DEBUG] [Thread-202697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:31:27.089 [DEBUG] [Thread-202697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:31:27.090 [INFO] [Thread-202697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:31:27.100 [DEBUG] [Thread-202697] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:31:27.100 [DEBUG] [Thread-202697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:31:27.100 [DEBUG] [Thread-202697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:31:27.100 [DEBUG] [Thread-202697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:31:27.100 [DEBUG] [Thread-202697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] client lang: <none>
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] server lang: <none>
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] kex follows: False
2026-02-15T10:31:27.101 [DEBUG] [Thread-202697] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:31:27.102 [DEBUG] [Thread-202697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:31:27.102 [DEBUG] [Thread-202697] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:31:27.102 [DEBUG] [Thread-202697] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:31:27.102 [DEBUG] [Thread-202697] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:31:27.102 [DEBUG] [Thread-202697] [transport.py] [_log()] Compression: none
2026-02-15T10:31:27.102 [DEBUG] [Thread-202697] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:31:27.164 [DEBUG] [Thread-202697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:31:27.165 [DEBUG] [Thread-202697] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:31:27.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:31:27.167 [DEBUG] [Thread-202697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:31:27.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:31:27.227 [DEBUG] [Thread-202697] [transport.py] [_log()] userauth is OK
2026-02-15T10:31:27.228 [DEBUG] [Thread-202697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:31:27.228 [DEBUG] [Thread-202697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:31:27.228 [DEBUG] [Thread-202697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:31:27.228 [DEBUG] [Thread-202697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:31:27.252 [INFO] [Thread-202697] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:31:27.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:31:27.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:31:28.074 [DEBUG] [Thread-202697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:31:28.074 [DEBUG] [Thread-202697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:31:28.125 [DEBUG] [Thread-202697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:31:28.125 [DEBUG] [Thread-202697] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:31:28.139 [DEBUG] [Thread-202697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:31:28.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:31:28.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:31:28.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:31:28.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:31:28.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:31:28.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:31:28.184 [DEBUG] [Thread-202697] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:31:32.269 [DEBUG] [Thread-202699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:42.601 [DEBUG] [Thread-202700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:47.315 [DEBUG] [Thread-202701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:31:58.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:31:58.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:31:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:32:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 31, 21), 12.69, 42.33, 0.0, 24.6, 14.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:32:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:31:21
2026-02-15T10:32:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:32:01.146 [DEBUG] [Thread-202702] [transport.py] [_log()] starting thread (client mode): 0xa57c0850
2026-02-15T10:32:01.146 [DEBUG] [Thread-202702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:32:01.165 [DEBUG] [Thread-202702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:32:01.165 [INFO] [Thread-202702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] client lang: <none>
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] server lang: <none>
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] kex follows: False
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] Compression: none
2026-02-15T10:32:01.167 [DEBUG] [Thread-202702] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:32:01.174 [DEBUG] [Thread-202702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:32:01.174 [DEBUG] [Thread-202702] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:32:01.174 [DEBUG] [Thread-202702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:32:01.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:32:01.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:32:01.175 [DEBUG] [Thread-202702] [transport.py] [_log()] userauth is OK
2026-02-15T10:32:01.175 [DEBUG] [Thread-202702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:32:01.175 [DEBUG] [Thread-202702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:32:01.175 [DEBUG] [Thread-202702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:32:01.175 [DEBUG] [Thread-202702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:32:01.185 [INFO] [Thread-202702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:32:01.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:32:01.774 [DEBUG] [Thread-202702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:32:01.774 [DEBUG] [Thread-202702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:32:01.774 [DEBUG] [Thread-202702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:32:01.815 [DEBUG] [Thread-202702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:32:01.815 [DEBUG] [Thread-202702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:32:01.817 [DEBUG] [Thread-202702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:32:01.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:32:01.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:32:01.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:32:01.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:32:01.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:32:01.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:32:01.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:32:01.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:32:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:32:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.354961 -999.00  +13.90  18.53     48   +3.10 1 1 1 1 1   888    0 13.40 112.74 ----- 18.5 18.5 128.0 22.7 21.3 -28.1 20.6 -27.2 19.3 -27.0 20.0 -27.6
2026-02-15T10:32:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:32:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:32:01.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.354961
2026-02-15T10:32:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:32:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:32:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:32:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:32:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:32:01.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:31:21', tmtdew=12.69, humidity=42.33, cloud=0.0, wind=24.6, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:31:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:32:01.836 [DEBUG] [Thread-202702] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:32:01.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:32:01.932 [DEBUG] [Thread-202705] [transport.py] [_log()] starting thread (client mode): 0xa57400d0
2026-02-15T10:32:01.932 [DEBUG] [Thread-202705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:32:01.953 [DEBUG] [Thread-202705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:32:01.953 [INFO] [Thread-202705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:32:01.968 [DEBUG] [Thread-202705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:32:01.968 [DEBUG] [Thread-202705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] client lang: <none>
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] server lang: <none>
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] kex follows: False
2026-02-15T10:32:01.969 [DEBUG] [Thread-202705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:32:01.970 [DEBUG] [Thread-202705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:32:01.970 [DEBUG] [Thread-202705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:32:01.970 [DEBUG] [Thread-202705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:32:01.970 [DEBUG] [Thread-202705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:32:01.970 [DEBUG] [Thread-202705] [transport.py] [_log()] Compression: none
2026-02-15T10:32:01.970 [DEBUG] [Thread-202705] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:32:02.035 [DEBUG] [Thread-202705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:32:02.036 [DEBUG] [Thread-202705] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:32:02.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:32:02.037 [DEBUG] [Thread-202705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:32:02.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:32:02.104 [DEBUG] [Thread-202705] [transport.py] [_log()] userauth is OK
2026-02-15T10:32:02.104 [DEBUG] [Thread-202705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:32:02.105 [DEBUG] [Thread-202705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:32:02.105 [DEBUG] [Thread-202705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:32:02.105 [DEBUG] [Thread-202705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:32:02.137 [INFO] [Thread-202705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:32:02.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:32:02.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:32:02.353 [DEBUG] [Thread-202707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:32:02.980 [DEBUG] [Thread-202705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:32:02.980 [DEBUG] [Thread-202705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:32:03.037 [DEBUG] [Thread-202705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:32:03.037 [DEBUG] [Thread-202705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:32:03.053 [DEBUG] [Thread-202705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:32:03.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:32:03.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:32:03.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:32:03.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:32:03.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:32:03.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:32:03.121 [DEBUG] [Thread-202705] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:32:07.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:32:07.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:32:17.417 [DEBUG] [Thread-202708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:32:32.457 [DEBUG] [Thread-202709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:32:33.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:32:33.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:32:33.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:32:35.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 31, 58), 12.71, 42.38, 0.0, 19.96, 14.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:32:35.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:31:58
2026-02-15T10:32:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:32:36.121 [DEBUG] [Thread-202710] [transport.py] [_log()] starting thread (client mode): 0xa57c28f0
2026-02-15T10:32:36.121 [DEBUG] [Thread-202710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:32:36.143 [DEBUG] [Thread-202710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:32:36.143 [INFO] [Thread-202710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:32:36.146 [DEBUG] [Thread-202710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] client lang: <none>
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] server lang: <none>
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] kex follows: False
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] Compression: none
2026-02-15T10:32:36.147 [DEBUG] [Thread-202710] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:32:36.164 [DEBUG] [Thread-202710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:32:36.165 [DEBUG] [Thread-202710] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:32:36.165 [DEBUG] [Thread-202710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:32:36.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:32:36.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:32:36.167 [DEBUG] [Thread-202710] [transport.py] [_log()] userauth is OK
2026-02-15T10:32:36.167 [DEBUG] [Thread-202710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:32:36.168 [DEBUG] [Thread-202710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:32:36.168 [DEBUG] [Thread-202710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:32:36.168 [DEBUG] [Thread-202710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:32:36.187 [INFO] [Thread-202710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:32:36.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:32:36.816 [DEBUG] [Thread-202710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:32:36.817 [DEBUG] [Thread-202710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:32:36.817 [DEBUG] [Thread-202710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:32:36.857 [DEBUG] [Thread-202710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:32:36.858 [DEBUG] [Thread-202710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:32:36.861 [DEBUG] [Thread-202710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:32:36.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:32:36.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:32:36.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:32:36.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:32:36.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:32:36.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:32:36.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:32:36.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:32:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:32:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.355655 -999.00  +14.30  16.91     48   +3.50 1 1 1 1 1   888    0 13.14 106.63 ----- 16.9 16.9 131.4 23.6 21.5 -27.5 20.7 -26.5 19.4 -25.6 20.1 -28.8
2026-02-15T10:32:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:32:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:32:36.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.355655
2026-02-15T10:32:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:32:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:32:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:32:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:32:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:32:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:31:58', tmtdew=12.71, humidity=42.38, cloud=0.0, wind=19.96, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:32:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:32:36.888 [DEBUG] [Thread-202710] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:32:36.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:32:36.983 [DEBUG] [Thread-202713] [transport.py] [_log()] starting thread (client mode): 0xa2d03fd0
2026-02-15T10:32:36.983 [DEBUG] [Thread-202713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:32:36.997 [DEBUG] [Thread-202713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:32:36.998 [INFO] [Thread-202713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:32:37.006 [DEBUG] [Thread-202713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:32:37.006 [DEBUG] [Thread-202713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:32:37.006 [DEBUG] [Thread-202713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:32:37.006 [DEBUG] [Thread-202713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] client lang: <none>
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] server lang: <none>
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] kex follows: False
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] Compression: none
2026-02-15T10:32:37.007 [DEBUG] [Thread-202713] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:32:37.063 [DEBUG] [Thread-202713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:32:37.064 [DEBUG] [Thread-202713] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:32:37.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:32:37.065 [DEBUG] [Thread-202713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:32:37.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:32:37.119 [DEBUG] [Thread-202713] [transport.py] [_log()] userauth is OK
2026-02-15T10:32:37.120 [DEBUG] [Thread-202713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:32:37.120 [DEBUG] [Thread-202713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:32:37.120 [DEBUG] [Thread-202713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:32:37.120 [DEBUG] [Thread-202713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:32:37.138 [INFO] [Thread-202713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:32:37.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:32:37.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:32:37.980 [DEBUG] [Thread-202713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:32:37.980 [DEBUG] [Thread-202713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:32:38.029 [DEBUG] [Thread-202713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:32:38.029 [DEBUG] [Thread-202713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:32:38.039 [DEBUG] [Thread-202713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:32:38.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:32: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-02-15T10:32:38.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:32:38.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:32:38.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:32:38.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:32:38.078 [DEBUG] [Thread-202713] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:32:42.646 [DEBUG] [Thread-202715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:32:47.494 [DEBUG] [Thread-202716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:02.548 [DEBUG] [Thread-202717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:08.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:08.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:08.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:33:08.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:33:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:33:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 32, 33), 13.58, 39.72, 0.0, 23.85, 15.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:33:10.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:32:33
2026-02-15T10:33:10.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:33:11.089 [DEBUG] [Thread-202718] [transport.py] [_log()] starting thread (client mode): 0xa81d5960
2026-02-15T10:33:11.089 [DEBUG] [Thread-202718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:33:11.111 [DEBUG] [Thread-202718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:33:11.111 [INFO] [Thread-202718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:33:11.114 [DEBUG] [Thread-202718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] client lang: <none>
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] server lang: <none>
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] kex follows: False
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] Compression: none
2026-02-15T10:33:11.115 [DEBUG] [Thread-202718] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:33:11.134 [DEBUG] [Thread-202718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:33:11.134 [DEBUG] [Thread-202718] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:33:11.144 [DEBUG] [Thread-202718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:33:11.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:33:11.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:33:11.147 [DEBUG] [Thread-202718] [transport.py] [_log()] userauth is OK
2026-02-15T10:33:11.147 [DEBUG] [Thread-202718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:33:11.147 [DEBUG] [Thread-202718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:33:11.147 [DEBUG] [Thread-202718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:33:11.147 [DEBUG] [Thread-202718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:33:11.172 [INFO] [Thread-202718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:33:11.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:33:11.796 [DEBUG] [Thread-202718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:33:11.797 [DEBUG] [Thread-202718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:33:11.797 [DEBUG] [Thread-202718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:33:11.837 [DEBUG] [Thread-202718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:33:11.838 [DEBUG] [Thread-202718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:33:11.841 [DEBUG] [Thread-202718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:33:11.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:33:11.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:33:11.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:33:11.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:33:11.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:33:11.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:33:11.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:33:11.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:33:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:33:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.356002 -999.00  +14.60  22.67     44   +2.50 1 1 1 1 1   888    0 13.40 111.40 ----- 22.7 22.7 130.8 29.6 21.6 -27.8 20.8 -27.9 19.4 -27.5 20.3 -27.0
2026-02-15T10:33:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:33:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:33:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.356002
2026-02-15T10:33:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:33:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:33:11.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:33:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:33:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:33:11.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:32:33', tmtdew=13.58, humidity=39.72, cloud=0.0, wind=23.85, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:32:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:33:11.864 [DEBUG] [Thread-202718] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:33:11.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:33:11.960 [DEBUG] [Thread-202721] [transport.py] [_log()] starting thread (client mode): 0xa2dc1810
2026-02-15T10:33:11.960 [DEBUG] [Thread-202721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:33:11.975 [DEBUG] [Thread-202721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:33:11.975 [INFO] [Thread-202721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:33:11.983 [DEBUG] [Thread-202721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:33:11.983 [DEBUG] [Thread-202721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] client lang: <none>
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] server lang: <none>
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] kex follows: False
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] Compression: none
2026-02-15T10:33:11.984 [DEBUG] [Thread-202721] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:33:12.040 [DEBUG] [Thread-202721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:33:12.041 [DEBUG] [Thread-202721] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:33:12.041 [DEBUG] [Thread-202721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:33:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:33:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:33:12.096 [DEBUG] [Thread-202721] [transport.py] [_log()] userauth is OK
2026-02-15T10:33:12.096 [DEBUG] [Thread-202721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:33:12.096 [DEBUG] [Thread-202721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:33:12.096 [DEBUG] [Thread-202721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:33:12.096 [DEBUG] [Thread-202721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:33:12.119 [INFO] [Thread-202721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:33:12.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:33:12.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:33:12.952 [DEBUG] [Thread-202721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:33:12.952 [DEBUG] [Thread-202721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:33:13.001 [DEBUG] [Thread-202721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:33:13.001 [DEBUG] [Thread-202721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:33:13.009 [DEBUG] [Thread-202721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:33:13.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:33:13.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:33:13.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:33:13.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:33:13.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:33:13.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:33:13.041 [DEBUG] [Thread-202721] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:33:17.586 [DEBUG] [Thread-202723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:32.649 [DEBUG] [Thread-202724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:42.679 [DEBUG] [Thread-202725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:33:43.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:33:43.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:33:44.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 33, 9), 13.0, 41.46, 0.0, 26.5, 14.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:33:44.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:33:09
2026-02-15T10:33:45.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:33:45.388 [DEBUG] [Thread-202726] [transport.py] [_log()] starting thread (client mode): 0xa2d02ad0
2026-02-15T10:33:45.388 [DEBUG] [Thread-202726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:33:45.402 [DEBUG] [Thread-202726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:33:45.402 [INFO] [Thread-202726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] client lang: <none>
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] server lang: <none>
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] kex follows: False
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] Compression: none
2026-02-15T10:33:45.405 [DEBUG] [Thread-202726] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:33:45.422 [DEBUG] [Thread-202726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:33:45.422 [DEBUG] [Thread-202726] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:33:45.422 [DEBUG] [Thread-202726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:33:45.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:33:45.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:33:45.423 [DEBUG] [Thread-202726] [transport.py] [_log()] userauth is OK
2026-02-15T10:33:45.423 [DEBUG] [Thread-202726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:33:45.423 [DEBUG] [Thread-202726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:33:45.423 [DEBUG] [Thread-202726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:33:45.423 [DEBUG] [Thread-202726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:33:45.433 [INFO] [Thread-202726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:33:45.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:33:46.073 [DEBUG] [Thread-202726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:33:46.074 [DEBUG] [Thread-202726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:33:46.074 [DEBUG] [Thread-202726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:33:46.114 [DEBUG] [Thread-202726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:33:46.115 [DEBUG] [Thread-202726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:33:46.118 [DEBUG] [Thread-202726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:33:46.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:33:46.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:33:46.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:33:46.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:33:46.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:33:46.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:33:46.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:33:46.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:33:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:33:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.356349 -999.00  +14.60  21.61     44   +2.70 1 1 1 1 1   888    0 13.84 117.82 ----- 21.6 21.6 128.4 26.3 21.5 -28.4 20.8 -28.3 19.5 -27.5 20.2 -27.2
2026-02-15T10:33:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:33:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:33:46.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.356349
2026-02-15T10:33:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:33:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:33:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:33:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:33:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:33:46.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:33:09', tmtdew=13.0, humidity=41.46, cloud=0.0, wind=26.5, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:33:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:33:46.143 [DEBUG] [Thread-202726] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:33:46.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:33:46.265 [DEBUG] [Thread-202729] [transport.py] [_log()] starting thread (client mode): 0xa57c0850
2026-02-15T10:33:46.266 [DEBUG] [Thread-202729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:33:46.306 [DEBUG] [Thread-202729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:33:46.306 [INFO] [Thread-202729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] client lang: <none>
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] server lang: <none>
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] kex follows: False
2026-02-15T10:33:46.341 [DEBUG] [Thread-202729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:33:46.342 [DEBUG] [Thread-202729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:33:46.342 [DEBUG] [Thread-202729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:33:46.342 [DEBUG] [Thread-202729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:33:46.342 [DEBUG] [Thread-202729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:33:46.342 [DEBUG] [Thread-202729] [transport.py] [_log()] Compression: none
2026-02-15T10:33:46.342 [DEBUG] [Thread-202729] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:33:46.429 [DEBUG] [Thread-202729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:33:46.429 [DEBUG] [Thread-202729] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:33:46.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:33:46.430 [DEBUG] [Thread-202729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:33:46.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:33:46.537 [DEBUG] [Thread-202729] [transport.py] [_log()] userauth is OK
2026-02-15T10:33:46.537 [DEBUG] [Thread-202729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:33:46.537 [DEBUG] [Thread-202729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:33:46.537 [DEBUG] [Thread-202729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:33:46.537 [DEBUG] [Thread-202729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:33:46.578 [INFO] [Thread-202729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:33:46.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:33:46.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:33:47.432 [DEBUG] [Thread-202729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:33:47.432 [DEBUG] [Thread-202729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:33:47.507 [DEBUG] [Thread-202729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:33:47.507 [DEBUG] [Thread-202729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:33:47.543 [DEBUG] [Thread-202729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:33:47.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:33:47.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:33:47.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:33:47.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:33:47.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:33:47.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:33:47.684 [DEBUG] [Thread-202731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:33:47.684 [DEBUG] [Thread-202729] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:34:02.729 [DEBUG] [Thread-202732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:08.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:08.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:17.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:34:17.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:34:17.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:34:17.762 [DEBUG] [Thread-202733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 33, 45), 13.5, 40.09, 0.0, 19.55, 14.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:34:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:33:45
2026-02-15T10:34:19.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:34:20.151 [DEBUG] [Thread-202734] [transport.py] [_log()] starting thread (client mode): 0xa57e0c70
2026-02-15T10:34:20.151 [DEBUG] [Thread-202734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:34:20.171 [DEBUG] [Thread-202734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:34:20.171 [INFO] [Thread-202734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] client lang: <none>
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] server lang: <none>
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] kex follows: False
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] Compression: none
2026-02-15T10:34:20.181 [DEBUG] [Thread-202734] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:34:20.200 [DEBUG] [Thread-202734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:34:20.201 [DEBUG] [Thread-202734] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:34:20.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:34:20.202 [DEBUG] [Thread-202734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:34:20.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:34:20.204 [DEBUG] [Thread-202734] [transport.py] [_log()] userauth is OK
2026-02-15T10:34:20.204 [DEBUG] [Thread-202734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:34:20.204 [DEBUG] [Thread-202734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:34:20.204 [DEBUG] [Thread-202734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:34:20.204 [DEBUG] [Thread-202734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:34:20.227 [INFO] [Thread-202734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:34:20.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:34:20.870 [DEBUG] [Thread-202734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:34:20.870 [DEBUG] [Thread-202734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:34:20.870 [DEBUG] [Thread-202734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:34:20.911 [DEBUG] [Thread-202734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:34:20.912 [DEBUG] [Thread-202734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:34:20.915 [DEBUG] [Thread-202734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:34:20.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:34:20.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:34:20.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:34:20.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:34:20.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:34:20.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:34:20.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:34:20.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:34:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:34:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.356697 -999.00  +14.60  22.21     45   +2.90 1 1 1 1 1   888    0 13.71 124.61 ----- 22.2 22.2 143.6 24.9 21.6 -32.8 20.8 -27.1 19.6 -27.5 20.3 -27.7
2026-02-15T10:34:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:34:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:34:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.356697
2026-02-15T10:34:20.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:34:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:34:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:34:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:34:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:34:20.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:33:45', tmtdew=13.5, humidity=40.09, cloud=0.0, wind=19.55, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:33:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:34:20.945 [DEBUG] [Thread-202734] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:34:21.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:34:21.051 [DEBUG] [Thread-202737] [transport.py] [_log()] starting thread (client mode): 0xa2dc0460
2026-02-15T10:34:21.052 [DEBUG] [Thread-202737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:34:21.078 [DEBUG] [Thread-202737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:34:21.078 [INFO] [Thread-202737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:34:21.098 [DEBUG] [Thread-202737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:34:21.098 [DEBUG] [Thread-202737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:34:21.099 [DEBUG] [Thread-202737] [transport.py] [_log()] client lang: <none>
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] server lang: <none>
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] kex follows: False
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:34:21.100 [DEBUG] [Thread-202737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:34:21.101 [DEBUG] [Thread-202737] [transport.py] [_log()] Compression: none
2026-02-15T10:34:21.101 [DEBUG] [Thread-202737] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:34:21.168 [DEBUG] [Thread-202737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:34:21.169 [DEBUG] [Thread-202737] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:34:21.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:34:21.170 [DEBUG] [Thread-202737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:34:21.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:34:21.249 [DEBUG] [Thread-202737] [transport.py] [_log()] userauth is OK
2026-02-15T10:34:21.249 [DEBUG] [Thread-202737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:34:21.249 [DEBUG] [Thread-202737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:34:21.249 [DEBUG] [Thread-202737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:34:21.250 [DEBUG] [Thread-202737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:34:21.286 [INFO] [Thread-202737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:34:21.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:34:21.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:34:22.127 [DEBUG] [Thread-202737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:34:22.127 [DEBUG] [Thread-202737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:34:22.189 [DEBUG] [Thread-202737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:34:22.189 [DEBUG] [Thread-202737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:34:22.211 [DEBUG] [Thread-202737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:34:22.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:34:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:34:22.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:34:22.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:34:22.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:34:22.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:34:22.298 [DEBUG] [Thread-202737] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:34:32.799 [DEBUG] [Thread-202739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:42.712 [DEBUG] [Thread-202740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:47.856 [DEBUG] [Thread-202741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:34:52.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:34:52.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:34:52.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:34:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 34, 20), 13.52, 40.03, 0.0, 20.56, 14.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:34:54.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:34:20
2026-02-15T10:34:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:34:54.711 [DEBUG] [Thread-202742] [transport.py] [_log()] starting thread (client mode): 0xa2db4610
2026-02-15T10:34:54.711 [DEBUG] [Thread-202742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:34:54.731 [DEBUG] [Thread-202742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:34:54.731 [INFO] [Thread-202742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:34:54.734 [DEBUG] [Thread-202742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:34:54.734 [DEBUG] [Thread-202742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] client lang: <none>
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] server lang: <none>
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] kex follows: False
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:34:54.735 [DEBUG] [Thread-202742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:34:54.736 [DEBUG] [Thread-202742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:34:54.736 [DEBUG] [Thread-202742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:34:54.736 [DEBUG] [Thread-202742] [transport.py] [_log()] Compression: none
2026-02-15T10:34:54.736 [DEBUG] [Thread-202742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:34:54.755 [DEBUG] [Thread-202742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:34:54.756 [DEBUG] [Thread-202742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:34:54.756 [DEBUG] [Thread-202742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:34:54.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:34:54.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:34:54.758 [DEBUG] [Thread-202742] [transport.py] [_log()] userauth is OK
2026-02-15T10:34:54.759 [DEBUG] [Thread-202742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:34:54.759 [DEBUG] [Thread-202742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:34:54.759 [DEBUG] [Thread-202742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:34:54.759 [DEBUG] [Thread-202742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:34:54.792 [INFO] [Thread-202742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:34:54.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:34:55.585 [DEBUG] [Thread-202742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:34:55.585 [DEBUG] [Thread-202742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:34:55.586 [DEBUG] [Thread-202742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:34:55.626 [DEBUG] [Thread-202742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:34:55.627 [DEBUG] [Thread-202742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:34:55.630 [DEBUG] [Thread-202742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:34:55.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:34:55.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:34:55.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:34:55.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:34:55.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:34:55.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:34:55.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:34:55.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:34:55.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:34:55.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.357044 -999.00  +14.30  17.83     44   +2.50 1 1 1 1 1   888    0 14.17 134.11 ----- 17.8 17.8 127.4 27.7 21.6 -28.5 20.9 -26.8 19.6 -26.2 20.3 -29.2
2026-02-15T10:34:55.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:34:55.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:34:55.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.357044
2026-02-15T10:34:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:34:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:34:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:34:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:34:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:34:55.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:34:20', tmtdew=13.52, humidity=40.03, cloud=0.0, wind=20.56, temperature=14.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:34:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:34:55.670 [DEBUG] [Thread-202742] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:34:55.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:34:55.766 [DEBUG] [Thread-202745] [transport.py] [_log()] starting thread (client mode): 0xa2db4d90
2026-02-15T10:34:55.767 [DEBUG] [Thread-202745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:34:55.782 [DEBUG] [Thread-202745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:34:55.782 [INFO] [Thread-202745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] client lang: <none>
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] server lang: <none>
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] kex follows: False
2026-02-15T10:34:55.790 [DEBUG] [Thread-202745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:34:55.791 [DEBUG] [Thread-202745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:34:55.791 [DEBUG] [Thread-202745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:34:55.791 [DEBUG] [Thread-202745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:34:55.791 [DEBUG] [Thread-202745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:34:55.791 [DEBUG] [Thread-202745] [transport.py] [_log()] Compression: none
2026-02-15T10:34:55.791 [DEBUG] [Thread-202745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:34:55.849 [DEBUG] [Thread-202745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:34:55.850 [DEBUG] [Thread-202745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:34:55.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:34:55.851 [DEBUG] [Thread-202745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:34:55.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:34:55.905 [DEBUG] [Thread-202745] [transport.py] [_log()] userauth is OK
2026-02-15T10:34:55.905 [DEBUG] [Thread-202745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:34:55.905 [DEBUG] [Thread-202745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:34:55.905 [DEBUG] [Thread-202745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:34:55.906 [DEBUG] [Thread-202745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:34:55.925 [INFO] [Thread-202745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:34:55.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:34:55.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:34:56.748 [DEBUG] [Thread-202745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:34:56.748 [DEBUG] [Thread-202745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:34:56.795 [DEBUG] [Thread-202745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:34:56.796 [DEBUG] [Thread-202745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:34:56.805 [DEBUG] [Thread-202745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:34:56.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:34:56.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:34:56.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:34:56.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:34:56.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:34:56.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:34:56.841 [DEBUG] [Thread-202745] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:35:02.893 [DEBUG] [Thread-202747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:35:08.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:35:08.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:35:17.939 [DEBUG] [Thread-202748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:35:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:35:26.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:35:26.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:35:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 34, 56), 13.24, 40.52, 0.0, 25.04, 14.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:35:29.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:34:56
2026-02-15T10:35:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:35:29.998 [DEBUG] [Thread-202749] [transport.py] [_log()] starting thread (client mode): 0xa575a980
2026-02-15T10:35:29.999 [DEBUG] [Thread-202749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:35:30.019 [DEBUG] [Thread-202749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:35:30.019 [INFO] [Thread-202749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:35:30.022 [DEBUG] [Thread-202749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] client lang: <none>
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] server lang: <none>
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] kex follows: False
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] Compression: none
2026-02-15T10:35:30.023 [DEBUG] [Thread-202749] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:35:30.039 [DEBUG] [Thread-202749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:35:30.040 [DEBUG] [Thread-202749] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:35:30.040 [DEBUG] [Thread-202749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:35:30.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:35:30.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:35:30.042 [DEBUG] [Thread-202749] [transport.py] [_log()] userauth is OK
2026-02-15T10:35:30.043 [DEBUG] [Thread-202749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:35:30.043 [DEBUG] [Thread-202749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:35:30.043 [DEBUG] [Thread-202749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:35:30.043 [DEBUG] [Thread-202749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:35:30.064 [INFO] [Thread-202749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:35:30.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:35:30.642 [DEBUG] [Thread-202749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:35:30.643 [DEBUG] [Thread-202749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:35:30.643 [DEBUG] [Thread-202749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:35:30.683 [DEBUG] [Thread-202749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:35:30.683 [DEBUG] [Thread-202749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:35:30.686 [DEBUG] [Thread-202749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:35:30.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:35:30.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:35:30.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:35:30.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:35:30.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:35:30.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:35:30.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:35:30.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.357391 -999.00  +14.50  16.21     45   +2.90 1 1 1 1 1   888    0 14.07 130.11 ----- 16.2 16.2 141.4 19.8 21.8 -28.0 20.9 -26.7 19.6 -26.3 20.4 -26.6
2026-02-15T10:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.357391
2026-02-15T10:35:30.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:35:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:35:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:35:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:35:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:35:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:34:56', tmtdew=13.24, humidity=40.52, cloud=0.0, wind=25.04, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:34:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:35:30.711 [DEBUG] [Thread-202749] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:35:30.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:35:30.808 [DEBUG] [Thread-202752] [transport.py] [_log()] starting thread (client mode): 0xa5759030
2026-02-15T10:35:30.809 [DEBUG] [Thread-202752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:35:30.827 [DEBUG] [Thread-202752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:35:30.827 [INFO] [Thread-202752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:35:30.834 [DEBUG] [Thread-202752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] client lang: <none>
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] server lang: <none>
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] kex follows: False
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:35:30.835 [DEBUG] [Thread-202752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:35:30.836 [DEBUG] [Thread-202752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:35:30.836 [DEBUG] [Thread-202752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:35:30.836 [DEBUG] [Thread-202752] [transport.py] [_log()] Compression: none
2026-02-15T10:35:30.836 [DEBUG] [Thread-202752] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:35:30.894 [DEBUG] [Thread-202752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:35:30.894 [DEBUG] [Thread-202752] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:35:30.895 [DEBUG] [Thread-202752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:35:30.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:35:30.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:35:30.950 [DEBUG] [Thread-202752] [transport.py] [_log()] userauth is OK
2026-02-15T10:35:30.950 [DEBUG] [Thread-202752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:35:30.950 [DEBUG] [Thread-202752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:35:30.951 [DEBUG] [Thread-202752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:35:30.951 [DEBUG] [Thread-202752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:35:30.969 [INFO] [Thread-202752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:35:30.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:35:30.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:35:31.820 [DEBUG] [Thread-202752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:35:31.820 [DEBUG] [Thread-202752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:35:31.869 [DEBUG] [Thread-202752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:35:31.869 [DEBUG] [Thread-202752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:35:31.878 [DEBUG] [Thread-202752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:35:31.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:35:31.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:35:31.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:35:31.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:35:31.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:35:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:35:31.917 [DEBUG] [Thread-202752] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:35:32.974 [DEBUG] [Thread-202754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:35:42.757 [DEBUG] [Thread-202755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:35:48.030 [DEBUG] [Thread-202756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:01.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:36:01.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:36:01.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:36:03.065 [DEBUG] [Thread-202757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:03.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 35, 31), 13.12, 40.89, 0.0, 22.67, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:36:03.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:35:31
2026-02-15T10:36:04.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:36:04.346 [DEBUG] [Thread-202758] [transport.py] [_log()] starting thread (client mode): 0xa575aa10
2026-02-15T10:36:04.346 [DEBUG] [Thread-202758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:36:04.367 [DEBUG] [Thread-202758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:36:04.367 [INFO] [Thread-202758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:36:04.370 [DEBUG] [Thread-202758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] client lang: <none>
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] server lang: <none>
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] kex follows: False
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] Compression: none
2026-02-15T10:36:04.371 [DEBUG] [Thread-202758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:36:04.389 [DEBUG] [Thread-202758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:36:04.390 [DEBUG] [Thread-202758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:36:04.391 [DEBUG] [Thread-202758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:36:04.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:36:04.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:36:04.393 [DEBUG] [Thread-202758] [transport.py] [_log()] userauth is OK
2026-02-15T10:36:04.393 [DEBUG] [Thread-202758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:36:04.393 [DEBUG] [Thread-202758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:36:04.393 [DEBUG] [Thread-202758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:36:04.394 [DEBUG] [Thread-202758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:36:04.408 [INFO] [Thread-202758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:36:04.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:36:05.219 [DEBUG] [Thread-202758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:36:05.219 [DEBUG] [Thread-202758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:36:05.220 [DEBUG] [Thread-202758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:36:05.260 [DEBUG] [Thread-202758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:36:05.260 [DEBUG] [Thread-202758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:36:05.264 [DEBUG] [Thread-202758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:36:05.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:36:05.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:36:05.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:36:05.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:36:05.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:36:05.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:36:05.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:36:05.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:36:05.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:36:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.358086 -999.00  +14.30  19.22     45   +2.80 1 1 1 1 1   888    0 14.09 131.92 ----- 19.2 19.2 139.8 26.0 21.9 -28.1 20.9 -27.2 19.7 -26.8 20.4 -28.8
2026-02-15T10:36:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:36:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:36:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.358086
2026-02-15T10:36:05.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:36:05.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:36:05.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:36:05.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:36:05.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:36:05.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:35:31', tmtdew=13.12, humidity=40.89, cloud=0.0, wind=22.67, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:35:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:36:05.287 [DEBUG] [Thread-202758] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:36:05.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:36:05.416 [DEBUG] [Thread-202761] [transport.py] [_log()] starting thread (client mode): 0xa57c1f00
2026-02-15T10:36:05.417 [DEBUG] [Thread-202761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:36:05.453 [DEBUG] [Thread-202761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:36:05.454 [INFO] [Thread-202761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:36:05.482 [DEBUG] [Thread-202761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] client lang: <none>
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] server lang: <none>
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] kex follows: False
2026-02-15T10:36:05.483 [DEBUG] [Thread-202761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:36:05.484 [DEBUG] [Thread-202761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:36:05.484 [DEBUG] [Thread-202761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:36:05.484 [DEBUG] [Thread-202761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:36:05.484 [DEBUG] [Thread-202761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:36:05.484 [DEBUG] [Thread-202761] [transport.py] [_log()] Compression: none
2026-02-15T10:36:05.484 [DEBUG] [Thread-202761] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:36:05.565 [DEBUG] [Thread-202761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:36:05.565 [DEBUG] [Thread-202761] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:36:05.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:36:05.566 [DEBUG] [Thread-202761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:36:05.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:36:05.666 [DEBUG] [Thread-202761] [transport.py] [_log()] userauth is OK
2026-02-15T10:36:05.666 [DEBUG] [Thread-202761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:36:05.666 [DEBUG] [Thread-202761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:36:05.666 [DEBUG] [Thread-202761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:36:05.666 [DEBUG] [Thread-202761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:36:05.708 [INFO] [Thread-202761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:36:05.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:36:05.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:36:06.550 [DEBUG] [Thread-202761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:36:06.551 [DEBUG] [Thread-202761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:36:06.622 [DEBUG] [Thread-202761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:36:06.622 [DEBUG] [Thread-202761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:36:06.655 [DEBUG] [Thread-202761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:36:06.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:36:06.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:36:06.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:36:06.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:36:06.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:36:06.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:36:06.787 [DEBUG] [Thread-202761] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:36:08.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:08.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:18.098 [DEBUG] [Thread-202763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:33.149 [DEBUG] [Thread-202764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:36.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:36:36.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:36:36.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:36:38.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 36, 7), 13.48, 39.89, 0.0, 22.97, 14.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:36:38.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:36:07
2026-02-15T10:36:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:36:39.185 [DEBUG] [Thread-202765] [transport.py] [_log()] starting thread (client mode): 0xa575b250
2026-02-15T10:36:39.185 [DEBUG] [Thread-202765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:36:39.205 [DEBUG] [Thread-202765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:36:39.205 [INFO] [Thread-202765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:36:39.208 [DEBUG] [Thread-202765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:36:39.208 [DEBUG] [Thread-202765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:36:39.208 [DEBUG] [Thread-202765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:36:39.208 [DEBUG] [Thread-202765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] client lang: <none>
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] server lang: <none>
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] kex follows: False
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:36:39.209 [DEBUG] [Thread-202765] [transport.py] [_log()] Compression: none
2026-02-15T10:36:39.210 [DEBUG] [Thread-202765] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:36:39.231 [DEBUG] [Thread-202765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:36:39.232 [DEBUG] [Thread-202765] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:36:39.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:36:39.233 [DEBUG] [Thread-202765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:36:39.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:36:39.235 [DEBUG] [Thread-202765] [transport.py] [_log()] userauth is OK
2026-02-15T10:36:39.235 [DEBUG] [Thread-202765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:36:39.235 [DEBUG] [Thread-202765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:36:39.235 [DEBUG] [Thread-202765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:36:39.235 [DEBUG] [Thread-202765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:36:39.272 [INFO] [Thread-202765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:36:39.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:36:39.901 [DEBUG] [Thread-202765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:36:39.901 [DEBUG] [Thread-202765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:36:39.901 [DEBUG] [Thread-202765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:36:39.942 [DEBUG] [Thread-202765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:36:39.943 [DEBUG] [Thread-202765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:36:39.946 [DEBUG] [Thread-202765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:36:39.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:36:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:36:39.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:36:39.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:36:39.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:36:39.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:36:39.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:36:39.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:36:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:36:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.358433 -999.00  +14.40  15.93     45   +2.80 1 1 1 1 1   888    0 14.46 135.93 ----- 15.9 15.9 146.0 24.2 21.9 -28.0 21.0 -27.3 19.8 -26.0 20.6 -28.0
2026-02-15T10:36:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:36:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:36:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.358433
2026-02-15T10:36:39.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:36:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:36:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:36:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:36:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:36:39.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:36:07', tmtdew=13.48, humidity=39.89, cloud=0.0, wind=22.97, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:36:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:36:39.975 [DEBUG] [Thread-202765] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:36:40.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:36:40.081 [DEBUG] [Thread-202768] [transport.py] [_log()] starting thread (client mode): 0xa5759510
2026-02-15T10:36:40.081 [DEBUG] [Thread-202768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:36:40.112 [DEBUG] [Thread-202768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:36:40.113 [INFO] [Thread-202768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:36:40.136 [DEBUG] [Thread-202768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:36:40.136 [DEBUG] [Thread-202768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:36:40.136 [DEBUG] [Thread-202768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:36:40.136 [DEBUG] [Thread-202768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] client lang: <none>
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] server lang: <none>
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] kex follows: False
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] Compression: none
2026-02-15T10:36:40.137 [DEBUG] [Thread-202768] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:36:40.211 [DEBUG] [Thread-202768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:36:40.211 [DEBUG] [Thread-202768] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:36:40.212 [DEBUG] [Thread-202768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:36:40.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:36:40.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:36:40.299 [DEBUG] [Thread-202768] [transport.py] [_log()] userauth is OK
2026-02-15T10:36:40.300 [DEBUG] [Thread-202768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:36:40.300 [DEBUG] [Thread-202768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:36:40.300 [DEBUG] [Thread-202768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:36:40.300 [DEBUG] [Thread-202768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:36:40.338 [INFO] [Thread-202768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:36:40.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:36:40.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:36:41.158 [DEBUG] [Thread-202768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:36:41.158 [DEBUG] [Thread-202768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:36:41.224 [DEBUG] [Thread-202768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:36:41.225 [DEBUG] [Thread-202768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:36:41.254 [DEBUG] [Thread-202768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:36:41.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:36:41.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:36:41.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:36:41.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:36:41.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:36:41.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:36:41.365 [DEBUG] [Thread-202768] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:36:42.816 [DEBUG] [Thread-202770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:36:48.183 [DEBUG] [Thread-202771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:03.233 [DEBUG] [Thread-202772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:08.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:08.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:11.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:37:11.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:37:11.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:37:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 36, 43), 13.26, 40.39, 0.0, 24.31, 14.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:37:13.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:36:43
2026-02-15T10:37:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:37:14.244 [DEBUG] [Thread-202773] [transport.py] [_log()] starting thread (client mode): 0xa575afb0
2026-02-15T10:37:14.244 [DEBUG] [Thread-202773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:37:14.264 [DEBUG] [Thread-202773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:37:14.264 [INFO] [Thread-202773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:37:14.267 [DEBUG] [Thread-202773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] client lang: <none>
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] server lang: <none>
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] kex follows: False
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] Compression: none
2026-02-15T10:37:14.268 [DEBUG] [Thread-202773] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:37:14.285 [DEBUG] [Thread-202773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:37:14.285 [DEBUG] [Thread-202773] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:37:14.286 [DEBUG] [Thread-202773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:37:14.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:37:14.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:37:14.288 [DEBUG] [Thread-202773] [transport.py] [_log()] userauth is OK
2026-02-15T10:37:14.288 [DEBUG] [Thread-202773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:37:14.288 [DEBUG] [Thread-202773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:37:14.289 [DEBUG] [Thread-202773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:37:14.289 [DEBUG] [Thread-202773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:37:14.308 [INFO] [Thread-202773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:37:14.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:37:14.949 [DEBUG] [Thread-202773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:37:14.949 [DEBUG] [Thread-202773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:37:14.950 [DEBUG] [Thread-202773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:37:14.990 [DEBUG] [Thread-202773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:37:14.990 [DEBUG] [Thread-202773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:37:14.993 [DEBUG] [Thread-202773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:37:15.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:37:15.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:37:15.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:37:15.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:37:15.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:37:15.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:37:15.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:37:15.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:37:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:37:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.358780 -999.00  +14.60  24.06     43   +2.40 1 1 1 1 1   888    0 14.80 144.23 ----- 24.1 24.1 140.2 30.3 21.9 -28.3 21.0 -26.4 19.8 -26.3 20.6 -28.1
2026-02-15T10:37:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:37:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:37:15.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.358780
2026-02-15T10:37:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:37:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:37:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:37:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:37:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:37:15.013 [DEBUG] [Thread-202773] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:37:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:36:43', tmtdew=13.26, humidity=40.39, cloud=0.0, wind=24.31, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:36:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:37:15.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:37:15.107 [DEBUG] [Thread-202776] [transport.py] [_log()] starting thread (client mode): 0xa2db5f30
2026-02-15T10:37:15.107 [DEBUG] [Thread-202776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:37:15.122 [DEBUG] [Thread-202776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:37:15.122 [INFO] [Thread-202776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] client lang: <none>
2026-02-15T10:37:15.129 [DEBUG] [Thread-202776] [transport.py] [_log()] server lang: <none>
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] kex follows: False
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] Compression: none
2026-02-15T10:37:15.130 [DEBUG] [Thread-202776] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:37:15.186 [DEBUG] [Thread-202776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:37:15.187 [DEBUG] [Thread-202776] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:37:15.187 [DEBUG] [Thread-202776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:37:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:37:15.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:37:15.243 [DEBUG] [Thread-202776] [transport.py] [_log()] userauth is OK
2026-02-15T10:37:15.243 [DEBUG] [Thread-202776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:37:15.243 [DEBUG] [Thread-202776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:37:15.243 [DEBUG] [Thread-202776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:37:15.244 [DEBUG] [Thread-202776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:37:15.262 [INFO] [Thread-202776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:37:15.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:37:15.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:37:16.050 [DEBUG] [Thread-202776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:37:16.050 [DEBUG] [Thread-202776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:37:16.098 [DEBUG] [Thread-202776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:37:16.099 [DEBUG] [Thread-202776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:37:16.108 [DEBUG] [Thread-202776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:37:16.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:37:16.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:37:16.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:37:16.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:37:16.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:37:16.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:37:16.145 [DEBUG] [Thread-202776] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:37:18.271 [DEBUG] [Thread-202778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:33.328 [DEBUG] [Thread-202779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:42.867 [DEBUG] [Thread-202780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:37:46.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:37:46.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:37:48.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 37, 19), 13.34, 40.23, 0.0, 25.18, 14.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:37:48.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:37:19
2026-02-15T10:37:48.367 [DEBUG] [Thread-202781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:37:48.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:37:48.562 [DEBUG] [Thread-202782] [transport.py] [_log()] starting thread (client mode): 0xa2d135e0
2026-02-15T10:37:48.562 [DEBUG] [Thread-202782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:37:48.576 [DEBUG] [Thread-202782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:37:48.576 [INFO] [Thread-202782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:48.578 [DEBUG] [Thread-202782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] client lang: <none>
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] server lang: <none>
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] kex follows: False
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] Compression: none
2026-02-15T10:37:48.579 [DEBUG] [Thread-202782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:37:48.592 [DEBUG] [Thread-202782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:37:48.593 [DEBUG] [Thread-202782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:37:48.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:37:48.594 [DEBUG] [Thread-202782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:37:48.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:37:48.597 [DEBUG] [Thread-202782] [transport.py] [_log()] userauth is OK
2026-02-15T10:37:48.597 [DEBUG] [Thread-202782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:37:48.597 [DEBUG] [Thread-202782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:37:48.598 [DEBUG] [Thread-202782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:37:48.598 [DEBUG] [Thread-202782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:37:48.619 [INFO] [Thread-202782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:37:48.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:37:49.271 [DEBUG] [Thread-202782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:37:49.271 [DEBUG] [Thread-202782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:37:49.272 [DEBUG] [Thread-202782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:37:49.312 [DEBUG] [Thread-202782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:37:49.312 [DEBUG] [Thread-202782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:37:49.314 [DEBUG] [Thread-202782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:37:49.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:37:49.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:37:49.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:37:49.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:37:49.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:37:49.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:37:49.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:37:49.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.359127 -999.00  +14.70  25.42     43   +2.30 1 1 1 1 1   888    0 14.83 144.88 ----- 25.4 25.4 142.6 29.5 22.0 -27.5 20.9 -27.9 19.8 -27.0 20.6 -27.8
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.359127
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:37:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:37:19', tmtdew=13.34, humidity=40.23, cloud=0.0, wind=25.18, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:37:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:37:49.335 [DEBUG] [Thread-202782] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:37:49.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:37:49.426 [DEBUG] [Thread-202785] [transport.py] [_log()] starting thread (client mode): 0xa575bd90
2026-02-15T10:37:49.426 [DEBUG] [Thread-202785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:37:49.455 [DEBUG] [Thread-202785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:37:49.455 [INFO] [Thread-202785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:37:49.480 [DEBUG] [Thread-202785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:37:49.481 [DEBUG] [Thread-202785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:37:49.481 [DEBUG] [Thread-202785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:37:49.481 [DEBUG] [Thread-202785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:49.481 [DEBUG] [Thread-202785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:37:49.481 [DEBUG] [Thread-202785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:49.481 [DEBUG] [Thread-202785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] client lang: <none>
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] server lang: <none>
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] kex follows: False
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:37:49.482 [DEBUG] [Thread-202785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:37:49.483 [DEBUG] [Thread-202785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:37:49.483 [DEBUG] [Thread-202785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:37:49.483 [DEBUG] [Thread-202785] [transport.py] [_log()] Compression: none
2026-02-15T10:37:49.483 [DEBUG] [Thread-202785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:37:49.559 [DEBUG] [Thread-202785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:37:49.559 [DEBUG] [Thread-202785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:37:49.560 [DEBUG] [Thread-202785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:37:49.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:37:49.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:37:49.651 [DEBUG] [Thread-202785] [transport.py] [_log()] userauth is OK
2026-02-15T10:37:49.651 [DEBUG] [Thread-202785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:37:49.652 [DEBUG] [Thread-202785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:37:49.652 [DEBUG] [Thread-202785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:37:49.652 [DEBUG] [Thread-202785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:37:49.698 [INFO] [Thread-202785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:37:49.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:37:49.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:37:50.572 [DEBUG] [Thread-202785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:37:50.573 [DEBUG] [Thread-202785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:37:50.639 [DEBUG] [Thread-202785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:37:50.639 [DEBUG] [Thread-202785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:37:50.667 [DEBUG] [Thread-202785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:37:50.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:37:50.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:37:50.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:37:50.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:37:50.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:37:50.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:37:50.777 [DEBUG] [Thread-202785] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:38:03.405 [DEBUG] [Thread-202787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:08.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:08.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:18.455 [DEBUG] [Thread-202788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:20.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:38:20.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:38:20.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:38:22.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 37, 54), 13.59, 39.63, 0.0, 23.84, 14.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:38:22.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:37:54
2026-02-15T10:38:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:38:23.195 [DEBUG] [Thread-202789] [transport.py] [_log()] starting thread (client mode): 0xa57c0a60
2026-02-15T10:38:23.195 [DEBUG] [Thread-202789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:38:23.216 [DEBUG] [Thread-202789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:38:23.216 [INFO] [Thread-202789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] client lang: <none>
2026-02-15T10:38:23.219 [DEBUG] [Thread-202789] [transport.py] [_log()] server lang: <none>
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] kex follows: False
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] Compression: none
2026-02-15T10:38:23.220 [DEBUG] [Thread-202789] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:38:23.236 [DEBUG] [Thread-202789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:38:23.237 [DEBUG] [Thread-202789] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:38:23.237 [DEBUG] [Thread-202789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:38:23.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:38:23.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:38:23.239 [DEBUG] [Thread-202789] [transport.py] [_log()] userauth is OK
2026-02-15T10:38:23.239 [DEBUG] [Thread-202789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:38:23.239 [DEBUG] [Thread-202789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:38:23.239 [DEBUG] [Thread-202789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:38:23.239 [DEBUG] [Thread-202789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:38:23.254 [INFO] [Thread-202789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:38:23.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:38:23.908 [DEBUG] [Thread-202789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:38:23.908 [DEBUG] [Thread-202789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:38:23.909 [DEBUG] [Thread-202789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:38:23.949 [DEBUG] [Thread-202789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:38:23.950 [DEBUG] [Thread-202789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:38:23.953 [DEBUG] [Thread-202789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:38:23.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:38:23.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:38:23.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:38:23.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:38:23.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:38:23.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:38:23.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:38:23.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:38:23.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:38:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.359474 -999.00  +14.80  20.64     44   +2.80 1 1 1 1 1   888    0 14.57 141.22 ----- 20.6 20.6 141.0 24.7 22.0 -29.0 21.0 -27.2 19.8 -26.9 20.6 -26.2
2026-02-15T10:38:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:38:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:38:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.359474
2026-02-15T10:38:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:38:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:38:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:38:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:38:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:38:23.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:37:54', tmtdew=13.59, humidity=39.63, cloud=0.0, wind=23.84, temperature=14.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:37:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:38:23.978 [DEBUG] [Thread-202789] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:38:24.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:38:24.075 [DEBUG] [Thread-202792] [transport.py] [_log()] starting thread (client mode): 0xa57c2950
2026-02-15T10:38:24.075 [DEBUG] [Thread-202792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:38:24.091 [DEBUG] [Thread-202792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:38:24.091 [INFO] [Thread-202792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:38:24.098 [DEBUG] [Thread-202792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:38:24.098 [DEBUG] [Thread-202792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] client lang: <none>
2026-02-15T10:38:24.099 [DEBUG] [Thread-202792] [transport.py] [_log()] server lang: <none>
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] kex follows: False
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] Compression: none
2026-02-15T10:38:24.100 [DEBUG] [Thread-202792] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:38:24.154 [DEBUG] [Thread-202792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:38:24.155 [DEBUG] [Thread-202792] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:38:24.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:38:24.156 [DEBUG] [Thread-202792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:38:24.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:38:24.211 [DEBUG] [Thread-202792] [transport.py] [_log()] userauth is OK
2026-02-15T10:38:24.211 [DEBUG] [Thread-202792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:38:24.211 [DEBUG] [Thread-202792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:38:24.211 [DEBUG] [Thread-202792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:38:24.211 [DEBUG] [Thread-202792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:38:24.230 [INFO] [Thread-202792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:38:24.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:38:24.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:38:25.060 [DEBUG] [Thread-202792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:38:25.060 [DEBUG] [Thread-202792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:38:25.108 [DEBUG] [Thread-202792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:38:25.108 [DEBUG] [Thread-202792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:38:25.116 [DEBUG] [Thread-202792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:38:25.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:38:25.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:38:25.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:38:25.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:38:25.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:38:25.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:38:25.147 [DEBUG] [Thread-202792] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:38:33.492 [DEBUG] [Thread-202794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:42.927 [DEBUG] [Thread-202795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:48.546 [DEBUG] [Thread-202796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:38:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:38:55.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:38: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
2026-02-15T10:38:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 38, 30), 13.92, 38.8, 0.0, 23.33, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:38:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:38:30
2026-02-15T10:38:57.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:38:57.622 [DEBUG] [Thread-202797] [transport.py] [_log()] starting thread (client mode): 0xa57c3370
2026-02-15T10:38:57.623 [DEBUG] [Thread-202797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:38:57.643 [DEBUG] [Thread-202797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:38:57.643 [INFO] [Thread-202797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:38:57.644 [DEBUG] [Thread-202797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:38:57.644 [DEBUG] [Thread-202797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:38:57.644 [DEBUG] [Thread-202797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] client lang: <none>
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] server lang: <none>
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] kex follows: False
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:38:57.645 [DEBUG] [Thread-202797] [transport.py] [_log()] Compression: none
2026-02-15T10:38:57.646 [DEBUG] [Thread-202797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:38:57.663 [DEBUG] [Thread-202797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:38:57.664 [DEBUG] [Thread-202797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:38:57.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:38:57.665 [DEBUG] [Thread-202797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:38:57.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:38:57.667 [DEBUG] [Thread-202797] [transport.py] [_log()] userauth is OK
2026-02-15T10:38:57.668 [DEBUG] [Thread-202797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:38:57.668 [DEBUG] [Thread-202797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:38:57.668 [DEBUG] [Thread-202797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:38:57.668 [DEBUG] [Thread-202797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:38:57.691 [INFO] [Thread-202797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:38:57.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:38:58.461 [DEBUG] [Thread-202797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:38:58.461 [DEBUG] [Thread-202797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:38:58.462 [DEBUG] [Thread-202797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:38:58.502 [DEBUG] [Thread-202797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:38:58.502 [DEBUG] [Thread-202797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:38:58.504 [DEBUG] [Thread-202797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:38:58.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:38:58.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:38:58.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:38:58.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:38:58.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:38:58.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:38:58.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:38:58.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.359822 -999.00  +14.70  16.83     45   +2.90 1 1 1 1 1   888    0 14.58 135.10 ----- 16.8 16.8 156.2 26.9 22.0 -28.3 21.0 -29.2 19.8 -27.0 20.6 -27.9
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.359822
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:38:58.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:38:30', tmtdew=13.92, humidity=38.8, cloud=0.0, wind=23.33, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:38:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:38:58.518 [DEBUG] [Thread-202797] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:38:58.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:38:58.606 [DEBUG] [Thread-202800] [transport.py] [_log()] starting thread (client mode): 0xa2db6f20
2026-02-15T10:38:58.606 [DEBUG] [Thread-202800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:38:58.622 [DEBUG] [Thread-202800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:38:58.622 [INFO] [Thread-202800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:38:58.630 [DEBUG] [Thread-202800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] client lang: <none>
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] server lang: <none>
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] kex follows: False
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] Compression: none
2026-02-15T10:38:58.631 [DEBUG] [Thread-202800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:38:58.688 [DEBUG] [Thread-202800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:38:58.688 [DEBUG] [Thread-202800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:38:58.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:38:58.689 [DEBUG] [Thread-202800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:38:58.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:38:58.744 [DEBUG] [Thread-202800] [transport.py] [_log()] userauth is OK
2026-02-15T10:38:58.744 [DEBUG] [Thread-202800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:38:58.745 [DEBUG] [Thread-202800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:38:58.745 [DEBUG] [Thread-202800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:38:58.745 [DEBUG] [Thread-202800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:38:58.764 [INFO] [Thread-202800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:38:58.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:38:58.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:38:59.593 [DEBUG] [Thread-202800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:38:59.594 [DEBUG] [Thread-202800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:38:59.641 [DEBUG] [Thread-202800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:38:59.642 [DEBUG] [Thread-202800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:38:59.652 [DEBUG] [Thread-202800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:38:59.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:38:59.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:38:59.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:38:59.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:38:59.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:38:59.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:38:59.689 [DEBUG] [Thread-202800] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:39:03.582 [DEBUG] [Thread-202802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:39:08.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:39:08.861 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:39:18.637 [DEBUG] [Thread-202803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:39:29.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:39:29.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:39:29.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:39:32.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 39, 6), 14.14, 38.22, 0.0, 27.54, 15.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:39:32.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:39:06
2026-02-15T10:39:32.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:39:32.850 [DEBUG] [Thread-202804] [transport.py] [_log()] starting thread (client mode): 0xa2d01060
2026-02-15T10:39:32.850 [DEBUG] [Thread-202804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:39:32.869 [DEBUG] [Thread-202804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:39:32.869 [INFO] [Thread-202804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:39:32.872 [DEBUG] [Thread-202804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:39:32.872 [DEBUG] [Thread-202804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:39:32.872 [DEBUG] [Thread-202804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:39:32.872 [DEBUG] [Thread-202804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] client lang: <none>
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] server lang: <none>
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] kex follows: False
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] Compression: none
2026-02-15T10:39:32.873 [DEBUG] [Thread-202804] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:39:32.890 [DEBUG] [Thread-202804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:39:32.890 [DEBUG] [Thread-202804] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:39:32.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:39:32.891 [DEBUG] [Thread-202804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:39:32.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:39:32.893 [DEBUG] [Thread-202804] [transport.py] [_log()] userauth is OK
2026-02-15T10:39:32.893 [DEBUG] [Thread-202804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:39:32.894 [DEBUG] [Thread-202804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:39:32.894 [DEBUG] [Thread-202804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:39:32.894 [DEBUG] [Thread-202804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:39:32.915 [INFO] [Thread-202804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:39:32.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:39:33.555 [DEBUG] [Thread-202804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:39:33.564 [DEBUG] [Thread-202804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:39:33.565 [DEBUG] [Thread-202804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:39:33.597 [DEBUG] [Thread-202804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:39:33.597 [DEBUG] [Thread-202804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:39:33.599 [DEBUG] [Thread-202804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:39:33.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:39:33.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:39:33.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:39:33.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:39:33.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:39:33.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:39:33.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:39:33.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:39:33.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.360169 -999.00  +14.70  15.27     44   +2.90 1 1 1 1 1   888    0 14.38 128.85 ----- 15.3 15.3 147.6 23.1 22.0 -28.0 21.1 -26.2 19.9 -25.8 20.7 -27.9
2026-02-15T10:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.360169
2026-02-15T10:39:33.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:39:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:39:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:39:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:39:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:39:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:39:06', tmtdew=14.14, humidity=38.22, cloud=0.0, wind=27.54, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:38:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:39:33.626 [DEBUG] [Thread-202804] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:39:33.675 [DEBUG] [Thread-202807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:39:33.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:39:33.757 [DEBUG] [Thread-202808] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-15T10:39:33.758 [DEBUG] [Thread-202808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:39:33.807 [DEBUG] [Thread-202808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:39:33.808 [INFO] [Thread-202808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:39:33.848 [DEBUG] [Thread-202808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] client lang: <none>
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] server lang: <none>
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] kex follows: False
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:39:33.849 [DEBUG] [Thread-202808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:39:33.850 [DEBUG] [Thread-202808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:39:33.850 [DEBUG] [Thread-202808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:39:33.850 [DEBUG] [Thread-202808] [transport.py] [_log()] Compression: none
2026-02-15T10:39:33.850 [DEBUG] [Thread-202808] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:39:33.943 [DEBUG] [Thread-202808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:39:33.944 [DEBUG] [Thread-202808] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:39:33.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:39:33.945 [DEBUG] [Thread-202808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:39:33.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:39:34.067 [DEBUG] [Thread-202808] [transport.py] [_log()] userauth is OK
2026-02-15T10:39:34.068 [DEBUG] [Thread-202808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:39:34.068 [DEBUG] [Thread-202808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:39:34.068 [DEBUG] [Thread-202808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:39:34.068 [DEBUG] [Thread-202808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:39:34.122 [INFO] [Thread-202808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:39:34.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:39:34.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:39:34.987 [DEBUG] [Thread-202808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:39:34.997 [DEBUG] [Thread-202808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:39:35.068 [DEBUG] [Thread-202808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:39:35.068 [DEBUG] [Thread-202808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:39:35.111 [DEBUG] [Thread-202808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:39:35.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:39:35.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:39:35.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:39:35.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:39:35.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:39:35.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:39:35.286 [DEBUG] [Thread-202808] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:39:42.963 [DEBUG] [Thread-202810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:39:48.720 [DEBUG] [Thread-202811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:03.759 [DEBUG] [Thread-202812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:05.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:40:05.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:40: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
2026-02-15T10:40:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 39, 41), 15.01, 36.21, 0.0, 27.35, 16.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:40:07.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:39:41
2026-02-15T10:40:07.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:40:07.785 [DEBUG] [Thread-202813] [transport.py] [_log()] starting thread (client mode): 0xa2dc2770
2026-02-15T10:40:07.785 [DEBUG] [Thread-202813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:40:07.804 [DEBUG] [Thread-202813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:40:07.804 [INFO] [Thread-202813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] client lang: <none>
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] server lang: <none>
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] kex follows: False
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] Compression: none
2026-02-15T10:40:07.807 [DEBUG] [Thread-202813] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:40:07.823 [DEBUG] [Thread-202813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:40:07.824 [DEBUG] [Thread-202813] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:40:07.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:40:07.825 [DEBUG] [Thread-202813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:40:07.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:40:07.827 [DEBUG] [Thread-202813] [transport.py] [_log()] userauth is OK
2026-02-15T10:40:07.827 [DEBUG] [Thread-202813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:40:07.827 [DEBUG] [Thread-202813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:40:07.827 [DEBUG] [Thread-202813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:40:07.827 [DEBUG] [Thread-202813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:40:07.845 [INFO] [Thread-202813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:40:07.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:40:09.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:09.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:16.399 [DEBUG] [Thread-202813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:40:16.399 [DEBUG] [Thread-202813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:40:16.400 [DEBUG] [Thread-202813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:40:16.440 [DEBUG] [Thread-202813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:40:16.441 [DEBUG] [Thread-202813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:40:16.444 [DEBUG] [Thread-202813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:40:16.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:40:16.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:40:16.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:40:16.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:40:16.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:40:16.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:40:16.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:40:16.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:40:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:40:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.360516 -999.00  +14.80  14.67     44   +2.90 1 1 1 1 1   888    0 15.10 142.41 ----- 14.7 14.7 152.6 16.7 22.1 -28.5 21.2 -26.6 20.0 -25.7 20.8 -26.9
2026-02-15T10:40:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:40:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:40:16.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.360516
2026-02-15T10:40:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:40:16.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:40:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:40:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:40:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:40:16.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:39:41', tmtdew=15.01, humidity=36.21, cloud=0.0, wind=27.35, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:39:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:40:16.540 [DEBUG] [Thread-202813] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:40:16.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:40:16.644 [DEBUG] [Thread-202816] [transport.py] [_log()] starting thread (client mode): 0xa81d5450
2026-02-15T10:40:16.645 [DEBUG] [Thread-202816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:40:16.673 [DEBUG] [Thread-202816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:40:16.674 [INFO] [Thread-202816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:16.696 [DEBUG] [Thread-202816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] client lang: <none>
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] server lang: <none>
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] kex follows: False
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] Compression: none
2026-02-15T10:40:16.697 [DEBUG] [Thread-202816] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:40:16.768 [DEBUG] [Thread-202816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:40:16.769 [DEBUG] [Thread-202816] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:40:16.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:40:16.770 [DEBUG] [Thread-202816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:40:16.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:40:16.843 [DEBUG] [Thread-202816] [transport.py] [_log()] userauth is OK
2026-02-15T10:40:16.843 [DEBUG] [Thread-202816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:40:16.843 [DEBUG] [Thread-202816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:40:16.843 [DEBUG] [Thread-202816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:40:16.843 [DEBUG] [Thread-202816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:40:16.857 [INFO] [Thread-202816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:40:16.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:40:16.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:40:17.697 [DEBUG] [Thread-202816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:40:17.697 [DEBUG] [Thread-202816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:40:17.760 [DEBUG] [Thread-202816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:40:17.761 [DEBUG] [Thread-202816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:40:17.785 [DEBUG] [Thread-202816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:40:17.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:40:17.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:40:17.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:40:17.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:40:17.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:40:17.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:40:17.883 [DEBUG] [Thread-202816] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:40:18.798 [DEBUG] [Thread-202818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:33.849 [DEBUG] [Thread-202819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:43.010 [DEBUG] [Thread-202820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:47.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:40:47.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:40:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:40:48.883 [DEBUG] [Thread-202821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:40:49.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 40, 16), 14.14, 38.2, 0.0, 19.04, 15.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:40:49.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:40:16
2026-02-15T10:40:50.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:40:50.448 [DEBUG] [Thread-202822] [transport.py] [_log()] starting thread (client mode): 0xa2d01330
2026-02-15T10:40:50.448 [DEBUG] [Thread-202822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:40:50.466 [DEBUG] [Thread-202822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:40:50.467 [INFO] [Thread-202822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:40:50.469 [DEBUG] [Thread-202822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] client lang: <none>
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] server lang: <none>
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] kex follows: False
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:40:50.470 [DEBUG] [Thread-202822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:40:50.471 [DEBUG] [Thread-202822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:40:50.471 [DEBUG] [Thread-202822] [transport.py] [_log()] Compression: none
2026-02-15T10:40:50.471 [DEBUG] [Thread-202822] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:40:50.485 [DEBUG] [Thread-202822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:40:50.486 [DEBUG] [Thread-202822] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:40:50.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:40:50.487 [DEBUG] [Thread-202822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:40:50.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:40:50.489 [DEBUG] [Thread-202822] [transport.py] [_log()] userauth is OK
2026-02-15T10:40:50.490 [DEBUG] [Thread-202822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:40:50.490 [DEBUG] [Thread-202822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:40:50.490 [DEBUG] [Thread-202822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:40:50.490 [DEBUG] [Thread-202822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:40:50.504 [INFO] [Thread-202822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:40:50.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:40:51.079 [DEBUG] [Thread-202822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:40:51.079 [DEBUG] [Thread-202822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:40:51.080 [DEBUG] [Thread-202822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:40:51.120 [DEBUG] [Thread-202822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:40:51.121 [DEBUG] [Thread-202822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:40:51.124 [DEBUG] [Thread-202822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:40:51.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:40:51.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:40:51.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:40:51.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:40:51.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:40:51.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:40:51.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:40:51.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:40:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:40:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.361558 -999.00  +15.10  16.42     40   +1.70 1 1 1 1 1   888    0 15.25 146.37 ----- 16.4 16.4 132.0 25.3 22.2 -29.4 21.4 -27.0 20.2 -26.8 21.0 -27.3
2026-02-15T10:40:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:40:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:40:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.361558
2026-02-15T10:40:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:40:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:40:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:40:51.152 [DEBUG] [Thread-202822] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:40:51.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:40:51.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:40:51.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:40:16', tmtdew=14.14, humidity=38.2, cloud=0.0, wind=19.04, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:40:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:40:51.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:40:51.271 [DEBUG] [Thread-202825] [transport.py] [_log()] starting thread (client mode): 0xa57b2950
2026-02-15T10:40:51.271 [DEBUG] [Thread-202825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:40:51.305 [DEBUG] [Thread-202825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:40:51.305 [INFO] [Thread-202825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:40:51.326 [DEBUG] [Thread-202825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] client lang: <none>
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] server lang: <none>
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] kex follows: False
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:40:51.327 [DEBUG] [Thread-202825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:40:51.328 [DEBUG] [Thread-202825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:40:51.328 [DEBUG] [Thread-202825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:40:51.328 [DEBUG] [Thread-202825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:40:51.328 [DEBUG] [Thread-202825] [transport.py] [_log()] Compression: none
2026-02-15T10:40:51.328 [DEBUG] [Thread-202825] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:40:51.411 [DEBUG] [Thread-202825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:40:51.411 [DEBUG] [Thread-202825] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:40:51.411 [DEBUG] [Thread-202825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:40:51.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:40:51.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:40:51.528 [DEBUG] [Thread-202825] [transport.py] [_log()] userauth is OK
2026-02-15T10:40:51.528 [DEBUG] [Thread-202825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:40:51.528 [DEBUG] [Thread-202825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:40:51.528 [DEBUG] [Thread-202825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:40:51.528 [DEBUG] [Thread-202825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:40:51.564 [INFO] [Thread-202825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:40:51.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:40:51.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:40:52.394 [DEBUG] [Thread-202825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:40:52.394 [DEBUG] [Thread-202825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:40:52.476 [DEBUG] [Thread-202825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:40:52.476 [DEBUG] [Thread-202825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:40:52.493 [DEBUG] [Thread-202825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:40:52.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:40:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:40:52.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:40:52.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:40:52.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:40:52.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:40:52.655 [DEBUG] [Thread-202825] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:41:03.920 [DEBUG] [Thread-202827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:09.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:09.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:18.983 [DEBUG] [Thread-202828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:22.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:41:22.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:41:22.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:41:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 40, 51), 14.45, 37.45, 0.0, 22.78, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:41:24.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:40:51
2026-02-15T10:41:24.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:41:24.986 [DEBUG] [Thread-202829] [transport.py] [_log()] starting thread (client mode): 0xa2dc2740
2026-02-15T10:41:24.986 [DEBUG] [Thread-202829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:41:25.008 [DEBUG] [Thread-202829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:41:25.008 [INFO] [Thread-202829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:41:25.011 [DEBUG] [Thread-202829] [transport.py] [_log()] client lang: <none>
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] server lang: <none>
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] kex follows: False
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] Compression: none
2026-02-15T10:41:25.012 [DEBUG] [Thread-202829] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:41:25.031 [DEBUG] [Thread-202829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:41:25.031 [DEBUG] [Thread-202829] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:41:25.032 [DEBUG] [Thread-202829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:41:25.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:41:25.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:41:25.034 [DEBUG] [Thread-202829] [transport.py] [_log()] userauth is OK
2026-02-15T10:41:25.034 [DEBUG] [Thread-202829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:41:25.034 [DEBUG] [Thread-202829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:41:25.034 [DEBUG] [Thread-202829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:41:25.034 [DEBUG] [Thread-202829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:41:25.068 [INFO] [Thread-202829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:41:25.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:41:25.667 [DEBUG] [Thread-202829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:41:25.668 [DEBUG] [Thread-202829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:41:25.668 [DEBUG] [Thread-202829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:41:25.709 [DEBUG] [Thread-202829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:41:25.709 [DEBUG] [Thread-202829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:41:25.712 [DEBUG] [Thread-202829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:41:25.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:41:25.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:41:25.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:41:25.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:41:25.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:41:25.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:41:25.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:41:25.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:41:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:41:25.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.361905 -999.00  +15.40  17.06     41   +2.20 1 1 1 1 1   888    0 15.30 146.25 ----- 17.1 17.1 131.4 21.6 22.3 -28.6 21.5 -27.2 20.2 -26.5 21.0 -28.0
2026-02-15T10:41:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:41:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:41:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.361905
2026-02-15T10:41:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:41:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:41:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:41:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:41:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:41:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:40:51', tmtdew=14.45, humidity=37.45, cloud=0.0, wind=22.78, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:41:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:41:25.736 [DEBUG] [Thread-202829] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:41:25.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:41:25.867 [DEBUG] [Thread-202832] [transport.py] [_log()] starting thread (client mode): 0xa2db7e80
2026-02-15T10:41:25.867 [DEBUG] [Thread-202832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:41:25.912 [DEBUG] [Thread-202832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:41:25.913 [INFO] [Thread-202832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:41:25.953 [DEBUG] [Thread-202832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] client lang: <none>
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] server lang: <none>
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] kex follows: False
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:41:25.954 [DEBUG] [Thread-202832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:41:25.955 [DEBUG] [Thread-202832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:41:25.955 [DEBUG] [Thread-202832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:41:25.955 [DEBUG] [Thread-202832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:41:25.955 [DEBUG] [Thread-202832] [transport.py] [_log()] Compression: none
2026-02-15T10:41:25.955 [DEBUG] [Thread-202832] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:41:26.045 [DEBUG] [Thread-202832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:41:26.046 [DEBUG] [Thread-202832] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:41:26.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:41:26.047 [DEBUG] [Thread-202832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:41:26.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:41:26.163 [DEBUG] [Thread-202832] [transport.py] [_log()] userauth is OK
2026-02-15T10:41:26.164 [DEBUG] [Thread-202832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:41:26.164 [DEBUG] [Thread-202832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:41:26.164 [DEBUG] [Thread-202832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:41:26.164 [DEBUG] [Thread-202832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:41:26.215 [INFO] [Thread-202832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:41:26.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:41:26.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:41:27.052 [DEBUG] [Thread-202832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:41:27.053 [DEBUG] [Thread-202832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:41:27.100 [DEBUG] [Thread-202832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:41:27.100 [DEBUG] [Thread-202832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:41:27.109 [DEBUG] [Thread-202832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:41:27.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:41:27.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:41:27.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:41:27.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:41:27.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:41:27.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:41:27.157 [DEBUG] [Thread-202832] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:41:34.022 [DEBUG] [Thread-202834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:43.045 [DEBUG] [Thread-202835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:49.083 [DEBUG] [Thread-202836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:41:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:41:57.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:41:57.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 41, 27), 14.62, 37.01, 0.0, 18.93, 15.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:41:59.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:41:27
2026-02-15T10:41:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:41:59.708 [DEBUG] [Thread-202837] [transport.py] [_log()] starting thread (client mode): 0xa2dc3af0
2026-02-15T10:41:59.708 [DEBUG] [Thread-202837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:41:59.728 [DEBUG] [Thread-202837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:41:59.728 [INFO] [Thread-202837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] client lang: <none>
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] server lang: <none>
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] kex follows: False
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:41:59.731 [DEBUG] [Thread-202837] [transport.py] [_log()] Compression: none
2026-02-15T10:41:59.732 [DEBUG] [Thread-202837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:41:59.749 [DEBUG] [Thread-202837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:41:59.749 [DEBUG] [Thread-202837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:41:59.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:41:59.750 [DEBUG] [Thread-202837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:41:59.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:41:59.752 [DEBUG] [Thread-202837] [transport.py] [_log()] userauth is OK
2026-02-15T10:41:59.752 [DEBUG] [Thread-202837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:41:59.752 [DEBUG] [Thread-202837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:41:59.753 [DEBUG] [Thread-202837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:41:59.753 [DEBUG] [Thread-202837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:41:59.776 [INFO] [Thread-202837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:41:59.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:42:00.387 [DEBUG] [Thread-202837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:42:00.387 [DEBUG] [Thread-202837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:42:00.388 [DEBUG] [Thread-202837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:42:00.428 [DEBUG] [Thread-202837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:42:00.429 [DEBUG] [Thread-202837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:42:00.433 [DEBUG] [Thread-202837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:42:00.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:42:00.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:42:00.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:42:00.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:42:00.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:42:00.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:42:00.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:42:00.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:42:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:42:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.362252 -999.00  +15.50  24.38     41   +2.30 1 1 1 1 1   888    0 15.60 157.76 ----- 24.4 24.4 153.6 32.1 22.5 -27.6 21.6 -28.3 20.2 -28.0 21.1 -26.9
2026-02-15T10:42:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:42:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:42:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.362252
2026-02-15T10:42:00.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:42:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:42:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:42:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:42:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:42:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:41:27', tmtdew=14.62, humidity=37.01, cloud=0.0, wind=18.93, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:41:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:42:00.467 [DEBUG] [Thread-202837] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:42:00.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:42:00.564 [DEBUG] [Thread-202840] [transport.py] [_log()] starting thread (client mode): 0xa57406d0
2026-02-15T10:42:00.565 [DEBUG] [Thread-202840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:42:00.579 [DEBUG] [Thread-202840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:42:00.579 [INFO] [Thread-202840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:42:00.589 [DEBUG] [Thread-202840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:42:00.590 [DEBUG] [Thread-202840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:42:00.590 [DEBUG] [Thread-202840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:42:00.590 [DEBUG] [Thread-202840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:42:00.590 [DEBUG] [Thread-202840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:42:00.590 [DEBUG] [Thread-202840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:42:00.590 [DEBUG] [Thread-202840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] client lang: <none>
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] server lang: <none>
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] kex follows: False
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:42:00.591 [DEBUG] [Thread-202840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:42:00.592 [DEBUG] [Thread-202840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:42:00.592 [DEBUG] [Thread-202840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:42:00.592 [DEBUG] [Thread-202840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:42:00.592 [DEBUG] [Thread-202840] [transport.py] [_log()] Compression: none
2026-02-15T10:42:00.592 [DEBUG] [Thread-202840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:42:00.652 [DEBUG] [Thread-202840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:42:00.653 [DEBUG] [Thread-202840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:42:00.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:42:00.654 [DEBUG] [Thread-202840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:42:00.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:42:00.709 [DEBUG] [Thread-202840] [transport.py] [_log()] userauth is OK
2026-02-15T10:42:00.709 [DEBUG] [Thread-202840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:42:00.709 [DEBUG] [Thread-202840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:42:00.709 [DEBUG] [Thread-202840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:42:00.709 [DEBUG] [Thread-202840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:42:00.724 [INFO] [Thread-202840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:42:00.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:42:00.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:42:01.530 [DEBUG] [Thread-202840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:42:01.530 [DEBUG] [Thread-202840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:42:01.587 [DEBUG] [Thread-202840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:42:01.587 [DEBUG] [Thread-202840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:42:01.599 [DEBUG] [Thread-202840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:42:01.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:42:01.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:42: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') -> 00000000
2026-02-15T10:42:01.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:42:01.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:42:01.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:42:01.679 [DEBUG] [Thread-202840] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:42:04.117 [DEBUG] [Thread-202842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:42:09.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:42:09.290 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:42:19.170 [DEBUG] [Thread-202843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:42:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:42:31.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:42:31.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:42:33.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 42, 2), 14.45, 37.42, 0.0, 19.25, 15.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:42:33.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:42:02
2026-02-15T10:42:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:42:34.153 [DEBUG] [Thread-202844] [transport.py] [_log()] starting thread (client mode): 0xa57595d0
2026-02-15T10:42:34.154 [DEBUG] [Thread-202844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:42:34.175 [DEBUG] [Thread-202844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:42:34.176 [INFO] [Thread-202844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:42:34.179 [DEBUG] [Thread-202844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] client lang: <none>
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] server lang: <none>
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] kex follows: False
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] Compression: none
2026-02-15T10:42:34.180 [DEBUG] [Thread-202844] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:42:34.199 [DEBUG] [Thread-202844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:42:34.199 [DEBUG] [Thread-202844] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:42:34.200 [DEBUG] [Thread-202844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:42:34.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:42:34.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:42:34.203 [DEBUG] [Thread-202844] [transport.py] [_log()] userauth is OK
2026-02-15T10:42:34.204 [DEBUG] [Thread-202844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:42:34.204 [DEBUG] [Thread-202844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:42:34.204 [DEBUG] [Thread-202844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:42:34.204 [DEBUG] [Thread-202844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:42:34.209 [DEBUG] [Thread-202846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:42:34.227 [INFO] [Thread-202844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:42:34.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:42:34.854 [DEBUG] [Thread-202844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:42:34.855 [DEBUG] [Thread-202844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:42:34.855 [DEBUG] [Thread-202844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:42:34.895 [DEBUG] [Thread-202844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:42:34.896 [DEBUG] [Thread-202844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:42:34.899 [DEBUG] [Thread-202844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:42:34.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:42:34.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:42:34.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:42:34.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:42:34.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:42:34.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:42:34.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:42:34.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:42:34.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:42:34.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.362599 -999.00  +15.10  17.58     40   +1.80 1 1 1 1 1   888    0 15.69 156.60 ----- 17.6 17.6 126.6 30.4 22.4 -28.4 21.6 -28.0 20.3 -27.1 21.1 -28.9
2026-02-15T10:42:34.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:42:34.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:42:34.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.362599
2026-02-15T10:42:34.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:42:34.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:42:34.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:42:34.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:42:34.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:42:34.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:42:02', tmtdew=14.45, humidity=37.42, cloud=0.0, wind=19.25, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:42:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:42:34.927 [DEBUG] [Thread-202844] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:42:35.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:42:35.022 [DEBUG] [Thread-202848] [transport.py] [_log()] starting thread (client mode): 0xa2dc30a0
2026-02-15T10:42:35.023 [DEBUG] [Thread-202848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:42:35.038 [DEBUG] [Thread-202848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:42:35.038 [INFO] [Thread-202848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:42:35.045 [DEBUG] [Thread-202848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:42:35.045 [DEBUG] [Thread-202848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:42:35.045 [DEBUG] [Thread-202848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:42:35.045 [DEBUG] [Thread-202848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] client lang: <none>
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] server lang: <none>
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] kex follows: False
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] Compression: none
2026-02-15T10:42:35.046 [DEBUG] [Thread-202848] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:42:35.104 [DEBUG] [Thread-202848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:42:35.105 [DEBUG] [Thread-202848] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:42:35.105 [DEBUG] [Thread-202848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:42:35.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:42:35.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:42:35.161 [DEBUG] [Thread-202848] [transport.py] [_log()] userauth is OK
2026-02-15T10:42:35.161 [DEBUG] [Thread-202848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:42:35.161 [DEBUG] [Thread-202848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:42:35.161 [DEBUG] [Thread-202848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:42:35.161 [DEBUG] [Thread-202848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:42:35.185 [INFO] [Thread-202848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:42:35.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:42:35.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:42:36.021 [DEBUG] [Thread-202848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:42:36.021 [DEBUG] [Thread-202848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:42:36.071 [DEBUG] [Thread-202848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:42:36.071 [DEBUG] [Thread-202848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:42:36.084 [DEBUG] [Thread-202848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:42:36.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:42:36.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:42:36.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:42:36.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:42:36.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:42:36.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:42:36.128 [DEBUG] [Thread-202848] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:42:43.097 [DEBUG] [Thread-202850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:42:49.242 [DEBUG] [Thread-202851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:04.294 [DEBUG] [Thread-202852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:06.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:43:06.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:43:06.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:43:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 42, 38), 14.6, 37.1, 0.0, 26.71, 15.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:43:08.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:42:38
2026-02-15T10:43:08.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:43:08.520 [DEBUG] [Thread-202853] [transport.py] [_log()] starting thread (client mode): 0xa575b7c0
2026-02-15T10:43:08.520 [DEBUG] [Thread-202853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:43:08.534 [DEBUG] [Thread-202853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:43:08.534 [INFO] [Thread-202853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:43:08.535 [DEBUG] [Thread-202853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:43:08.535 [DEBUG] [Thread-202853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] client lang: <none>
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] server lang: <none>
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] kex follows: False
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] Compression: none
2026-02-15T10:43:08.536 [DEBUG] [Thread-202853] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:43:08.545 [DEBUG] [Thread-202853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:43:08.546 [DEBUG] [Thread-202853] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:43:08.546 [DEBUG] [Thread-202853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:43:08.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:43:08.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:43:08.548 [DEBUG] [Thread-202853] [transport.py] [_log()] userauth is OK
2026-02-15T10:43:08.549 [DEBUG] [Thread-202853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:43:08.549 [DEBUG] [Thread-202853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:43:08.549 [DEBUG] [Thread-202853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:43:08.549 [DEBUG] [Thread-202853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:43:08.571 [INFO] [Thread-202853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:43:08.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:43:09.220 [DEBUG] [Thread-202853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:43:09.220 [DEBUG] [Thread-202853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:43:09.220 [DEBUG] [Thread-202853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:43:09.261 [DEBUG] [Thread-202853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:43:09.261 [DEBUG] [Thread-202853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:43:09.265 [DEBUG] [Thread-202853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:43:09.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:43:09.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:43:09.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:43:09.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:43:09.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:43:09.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:43:09.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:43:09.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:43:09.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:43:09.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.362946 -999.00  +15.10  19.42     42   +2.30 1 1 1 1 1   888    0 15.74 159.08 ----- 19.4 19.4 144.0 23.2 22.4 -27.6 21.6 -27.3 20.4 -26.4 21.2 -26.9
2026-02-15T10:43:09.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:43:09.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:43:09.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.362946
2026-02-15T10:43:09.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:43:09.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:43:09.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:43:09.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:43:09.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:43:09.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:42:38', tmtdew=14.6, humidity=37.1, cloud=0.0, wind=26.71, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:42:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:43:09.294 [DEBUG] [Thread-202853] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:43:09.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:43:09.386 [DEBUG] [Thread-202856] [transport.py] [_log()] starting thread (client mode): 0xa81d6140
2026-02-15T10:43:09.387 [DEBUG] [Thread-202856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:43:09.404 [DEBUG] [Thread-202856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:43:09.404 [INFO] [Thread-202856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:43:09.412 [DEBUG] [Thread-202856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:43:09.412 [DEBUG] [Thread-202856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:43:09.412 [DEBUG] [Thread-202856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:43:09.412 [DEBUG] [Thread-202856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:09.412 [DEBUG] [Thread-202856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] client lang: <none>
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] server lang: <none>
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] kex follows: False
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] Compression: none
2026-02-15T10:43:09.413 [DEBUG] [Thread-202856] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:43:09.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:09.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:09.478 [DEBUG] [Thread-202856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:43:09.479 [DEBUG] [Thread-202856] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:43:09.479 [DEBUG] [Thread-202856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:43:09.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:43:09.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:43:09.538 [DEBUG] [Thread-202856] [transport.py] [_log()] userauth is OK
2026-02-15T10:43:09.539 [DEBUG] [Thread-202856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:43:09.539 [DEBUG] [Thread-202856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:43:09.539 [DEBUG] [Thread-202856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:43:09.539 [DEBUG] [Thread-202856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:43:09.560 [INFO] [Thread-202856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:43:09.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:43:09.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:43:10.412 [DEBUG] [Thread-202856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:43:10.412 [DEBUG] [Thread-202856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:43:10.460 [DEBUG] [Thread-202856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:43:10.460 [DEBUG] [Thread-202856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:43:10.469 [DEBUG] [Thread-202856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:43:10.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:43:10.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:43:10.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:43:10.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:43:10.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:43:10.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:43:10.507 [DEBUG] [Thread-202856] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:43:19.333 [DEBUG] [Thread-202858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:34.394 [DEBUG] [Thread-202859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:40.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:43:40.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:43:40.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:43:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 43, 14), 14.43, 37.2, 0.0, 21.02, 14.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:43:42.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:43:14
2026-02-15T10:43:42.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:43:42.967 [DEBUG] [Thread-202860] [transport.py] [_log()] starting thread (client mode): 0xa57e2b00
2026-02-15T10:43:42.967 [DEBUG] [Thread-202860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:43:42.987 [DEBUG] [Thread-202860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:43:42.987 [INFO] [Thread-202860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:42.990 [DEBUG] [Thread-202860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] client lang: <none>
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] server lang: <none>
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] kex follows: False
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] Compression: none
2026-02-15T10:43:42.991 [DEBUG] [Thread-202860] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:43:43.010 [DEBUG] [Thread-202860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:43:43.010 [DEBUG] [Thread-202860] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:43:43.011 [DEBUG] [Thread-202860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:43:43.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:43:43.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:43:43.052 [DEBUG] [Thread-202860] [transport.py] [_log()] userauth is OK
2026-02-15T10:43:43.053 [DEBUG] [Thread-202860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:43:43.053 [DEBUG] [Thread-202860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:43:43.053 [DEBUG] [Thread-202860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:43:43.053 [DEBUG] [Thread-202860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:43:43.077 [INFO] [Thread-202860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:43:43.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:43:43.135 [DEBUG] [Thread-202862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:43:43.682 [DEBUG] [Thread-202860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:43:43.691 [DEBUG] [Thread-202860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:43:43.691 [DEBUG] [Thread-202860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:43:43.723 [DEBUG] [Thread-202860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:43:43.724 [DEBUG] [Thread-202860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:43:43.727 [DEBUG] [Thread-202860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:43:43.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:43:43.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:43:43.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:43:43.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:43:43.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:43:43.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:43:43.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:43:43.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:43:43.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:43:43.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.363294 -999.00  +14.90  15.88     42   +2.20 1 1 1 1 1   888    0 15.99 163.28 ----- 15.9 15.9 154.8 24.3 22.4 -28.8 21.6 -27.2 20.3 -27.6 21.1 -28.1
2026-02-15T10:43:43.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:43:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:43:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.363294
2026-02-15T10:43:43.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:43:43.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:43:43.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:43:43.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:43:43.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:43:43.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:43:14', tmtdew=14.43, humidity=37.2, cloud=0.0, wind=21.02, temperature=14.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:43:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:43:43.754 [DEBUG] [Thread-202860] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:43:43.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:43:43.857 [DEBUG] [Thread-202864] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-15T10:43:43.857 [DEBUG] [Thread-202864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:43:43.872 [DEBUG] [Thread-202864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:43:43.872 [INFO] [Thread-202864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:43:43.879 [DEBUG] [Thread-202864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] client lang: <none>
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] server lang: <none>
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] kex follows: False
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:43:43.880 [DEBUG] [Thread-202864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:43:43.881 [DEBUG] [Thread-202864] [transport.py] [_log()] Compression: none
2026-02-15T10:43:43.881 [DEBUG] [Thread-202864] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:43:43.937 [DEBUG] [Thread-202864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:43:43.938 [DEBUG] [Thread-202864] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:43:43.938 [DEBUG] [Thread-202864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:43:43.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:43:43.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:43:43.993 [DEBUG] [Thread-202864] [transport.py] [_log()] userauth is OK
2026-02-15T10:43:43.993 [DEBUG] [Thread-202864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:43:43.993 [DEBUG] [Thread-202864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:43:43.994 [DEBUG] [Thread-202864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:43:43.994 [DEBUG] [Thread-202864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:43:44.012 [INFO] [Thread-202864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:43:44.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:43:44.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:43:44.834 [DEBUG] [Thread-202864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:43:44.835 [DEBUG] [Thread-202864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:43:44.882 [DEBUG] [Thread-202864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:43:44.883 [DEBUG] [Thread-202864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:43:44.892 [DEBUG] [Thread-202864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:43:44.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:43:44.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:43:44.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:43:44.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:43:44.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:43:44.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:43:44.928 [DEBUG] [Thread-202864] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:43:49.429 [DEBUG] [Thread-202866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:04.480 [DEBUG] [Thread-202867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:09.573 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:09.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:14.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:44:14.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:44:14.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:44:16.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 43, 49), 14.21, 37.9, 0.0, 19.73, 14.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:44:16.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:43:49
2026-02-15T10:44:17.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:44:17.326 [DEBUG] [Thread-202868] [transport.py] [_log()] starting thread (client mode): 0xa57c1c30
2026-02-15T10:44:17.326 [DEBUG] [Thread-202868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:44:17.346 [DEBUG] [Thread-202868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:44:17.346 [INFO] [Thread-202868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] client lang: <none>
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] server lang: <none>
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] kex follows: False
2026-02-15T10:44:17.350 [DEBUG] [Thread-202868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:44:17.351 [DEBUG] [Thread-202868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:44:17.351 [DEBUG] [Thread-202868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:44:17.351 [DEBUG] [Thread-202868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:44:17.351 [DEBUG] [Thread-202868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:44:17.351 [DEBUG] [Thread-202868] [transport.py] [_log()] Compression: none
2026-02-15T10:44:17.351 [DEBUG] [Thread-202868] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:44:17.367 [DEBUG] [Thread-202868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:44:17.367 [DEBUG] [Thread-202868] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:44:17.368 [DEBUG] [Thread-202868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:44:17.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:44:17.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:44:17.370 [DEBUG] [Thread-202868] [transport.py] [_log()] userauth is OK
2026-02-15T10:44:17.370 [DEBUG] [Thread-202868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:44:17.370 [DEBUG] [Thread-202868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:44:17.370 [DEBUG] [Thread-202868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:44:17.371 [DEBUG] [Thread-202868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:44:17.388 [INFO] [Thread-202868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:44:17.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:44:18.003 [DEBUG] [Thread-202868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:44:18.004 [DEBUG] [Thread-202868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:44:18.004 [DEBUG] [Thread-202868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:44:18.044 [DEBUG] [Thread-202868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:44:18.045 [DEBUG] [Thread-202868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:44:18.048 [DEBUG] [Thread-202868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:44:18.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:44:18.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:44:18.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:44:18.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:44:18.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:44:18.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:44:18.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:44:18.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:44:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:44:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.363988 -999.00  +14.90  11.12     43   +2.50 1 1 1 1 1   888    0 16.27 168.00 ----- 11.1 11.1 133.9 22.8 22.5 -28.5 21.7 -26.4 20.5 -25.7 21.2 -28.2
2026-02-15T10:44:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:44:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:44:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.363988
2026-02-15T10:44:18.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:44:18.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:44:18.072 [DEBUG] [Thread-202868] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:44:18.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:44:18.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:44:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:44:18.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:43:49', tmtdew=14.21, humidity=37.9, cloud=0.0, wind=19.73, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:44:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:44:18.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:44:18.169 [DEBUG] [Thread-202871] [transport.py] [_log()] starting thread (client mode): 0xa57c0cd0
2026-02-15T10:44:18.170 [DEBUG] [Thread-202871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:44:18.184 [DEBUG] [Thread-202871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:44:18.184 [INFO] [Thread-202871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] client lang: <none>
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] server lang: <none>
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] kex follows: False
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:44:18.192 [DEBUG] [Thread-202871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:44:18.193 [DEBUG] [Thread-202871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:44:18.193 [DEBUG] [Thread-202871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:44:18.193 [DEBUG] [Thread-202871] [transport.py] [_log()] Compression: none
2026-02-15T10:44:18.193 [DEBUG] [Thread-202871] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:44:18.249 [DEBUG] [Thread-202871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:44:18.249 [DEBUG] [Thread-202871] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:44:18.250 [DEBUG] [Thread-202871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:44:18.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:44:18.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:44:18.304 [DEBUG] [Thread-202871] [transport.py] [_log()] userauth is OK
2026-02-15T10:44:18.304 [DEBUG] [Thread-202871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:44:18.304 [DEBUG] [Thread-202871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:44:18.304 [DEBUG] [Thread-202871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:44:18.304 [DEBUG] [Thread-202871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:44:18.321 [INFO] [Thread-202871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:44:18.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:44:18.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:44:19.191 [DEBUG] [Thread-202871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:44:19.192 [DEBUG] [Thread-202871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:44:19.239 [DEBUG] [Thread-202871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:44:19.240 [DEBUG] [Thread-202871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:44:19.248 [DEBUG] [Thread-202871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:44:19.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:44:19.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:44:19.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:44:19.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:44:19.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:44:19.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:44:19.284 [DEBUG] [Thread-202871] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:44:19.514 [DEBUG] [Thread-202873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:34.571 [DEBUG] [Thread-202874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:43.170 [DEBUG] [Thread-202875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:49.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:44:49.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:44:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:44:49.611 [DEBUG] [Thread-202876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:44:51.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 44, 24), 14.24, 37.83, 0.0, 20.33, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:44:51.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:44:24
2026-02-15T10:44:51.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:44:51.753 [DEBUG] [Thread-202877] [transport.py] [_log()] starting thread (client mode): 0xa5743550
2026-02-15T10:44:51.753 [DEBUG] [Thread-202877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:44:51.774 [DEBUG] [Thread-202877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:44:51.774 [INFO] [Thread-202877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:44:51.776 [DEBUG] [Thread-202877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] client lang: <none>
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] server lang: <none>
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] kex follows: False
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] Compression: none
2026-02-15T10:44:51.777 [DEBUG] [Thread-202877] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:44:51.794 [DEBUG] [Thread-202877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:44:51.794 [DEBUG] [Thread-202877] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:44:51.794 [DEBUG] [Thread-202877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:44:51.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:44:51.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:44:51.796 [DEBUG] [Thread-202877] [transport.py] [_log()] userauth is OK
2026-02-15T10:44:51.796 [DEBUG] [Thread-202877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:44:51.796 [DEBUG] [Thread-202877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:44:51.796 [DEBUG] [Thread-202877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:44:51.796 [DEBUG] [Thread-202877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:44:51.831 [INFO] [Thread-202877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:44:51.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:44:52.453 [DEBUG] [Thread-202877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:44:52.454 [DEBUG] [Thread-202877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:44:52.454 [DEBUG] [Thread-202877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:44:52.495 [DEBUG] [Thread-202877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:44:52.495 [DEBUG] [Thread-202877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:44:52.498 [DEBUG] [Thread-202877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:44:52.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:44:52.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:44:52.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:44:52.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:44:52.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:44:52.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:44:52.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:44:52.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:44:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:44:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.364335 -999.00  +15.10  16.62     42   +2.60 1 1 1 1 1   888    0 16.08 165.53 ----- 16.6 16.6 131.8 18.9 22.6 -27.5 21.8 -27.0 20.6 -26.6 21.3 -27.1
2026-02-15T10:44:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:44:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:44:52.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.364335
2026-02-15T10:44:52.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:44:52.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:44:52.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:44:52.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:44:52.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:44:52.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:44:24', tmtdew=14.24, humidity=37.83, cloud=0.0, wind=20.33, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:44:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:44:52.523 [DEBUG] [Thread-202877] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:44:52.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:44:52.623 [DEBUG] [Thread-202880] [transport.py] [_log()] starting thread (client mode): 0xa2dc26b0
2026-02-15T10:44:52.623 [DEBUG] [Thread-202880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:44:52.638 [DEBUG] [Thread-202880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:44:52.638 [INFO] [Thread-202880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:44:52.645 [DEBUG] [Thread-202880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:44:52.645 [DEBUG] [Thread-202880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] client lang: <none>
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] server lang: <none>
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] kex follows: False
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] Compression: none
2026-02-15T10:44:52.646 [DEBUG] [Thread-202880] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:44:52.704 [DEBUG] [Thread-202880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:44:52.705 [DEBUG] [Thread-202880] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:44:52.705 [DEBUG] [Thread-202880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:44:52.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:44:52.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:44:52.760 [DEBUG] [Thread-202880] [transport.py] [_log()] userauth is OK
2026-02-15T10:44:52.761 [DEBUG] [Thread-202880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:44:52.761 [DEBUG] [Thread-202880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:44:52.761 [DEBUG] [Thread-202880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:44:52.761 [DEBUG] [Thread-202880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:44:52.784 [INFO] [Thread-202880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:44:52.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:44:52.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:44:53.580 [DEBUG] [Thread-202880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:44:53.581 [DEBUG] [Thread-202880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:44:53.629 [DEBUG] [Thread-202880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:44:53.629 [DEBUG] [Thread-202880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:44:53.638 [DEBUG] [Thread-202880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:44:53.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:44:53.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:44:53.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:44:53.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:44:53.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:44:53.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:44:53.671 [DEBUG] [Thread-202880] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:45:04.646 [DEBUG] [Thread-202882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:09.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:09.725 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:19.708 [DEBUG] [Thread-202883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:23.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:45:23.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:45:23.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:45:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 44, 24), 14.09, 38.33, 0.0, 18.53, 14.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:45:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:44:24
2026-02-15T10:45:26.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:45:26.467 [DEBUG] [Thread-202884] [transport.py] [_log()] starting thread (client mode): 0xa57e0040
2026-02-15T10:45:26.467 [DEBUG] [Thread-202884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:45:26.487 [DEBUG] [Thread-202884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:45:26.488 [INFO] [Thread-202884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:45:26.490 [DEBUG] [Thread-202884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] client lang: <none>
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] server lang: <none>
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] kex follows: False
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] Compression: none
2026-02-15T10:45:26.491 [DEBUG] [Thread-202884] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:45:26.508 [DEBUG] [Thread-202884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:45:26.509 [DEBUG] [Thread-202884] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:45:26.509 [DEBUG] [Thread-202884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:45:26.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:45:26.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:45:26.554 [DEBUG] [Thread-202884] [transport.py] [_log()] userauth is OK
2026-02-15T10:45:26.555 [DEBUG] [Thread-202884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:45:26.555 [DEBUG] [Thread-202884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:45:26.555 [DEBUG] [Thread-202884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:45:26.555 [DEBUG] [Thread-202884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:45:26.592 [INFO] [Thread-202884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:45:26.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:45:27.197 [DEBUG] [Thread-202884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:45:27.197 [DEBUG] [Thread-202884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:45:27.198 [DEBUG] [Thread-202884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:45:27.238 [DEBUG] [Thread-202884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:45:27.239 [DEBUG] [Thread-202884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:45:27.242 [DEBUG] [Thread-202884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:45:27.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:45:27.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:45:27.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:45:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:45:27.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:45:27.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:45:27.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:45:27.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:45:27.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:45:27.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.364682 -999.00  +15.10  19.95     42   +2.30 1 1 1 1 1   888    0 17.00 179.14 ----- 19.9 19.9 132.0 24.3 22.7 -28.4 21.8 -28.1 20.6 -27.0 21.4 -27.5
2026-02-15T10:45:27.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:45:27.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:45:27.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.364682
2026-02-15T10:45:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:45:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:45:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:45:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:45:27.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:45:27.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:44:24', tmtdew=14.09, humidity=38.33, cloud=0.0, wind=18.53, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:45:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:45:27.271 [DEBUG] [Thread-202884] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:45:27.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:45:27.367 [DEBUG] [Thread-202887] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-15T10:45:27.367 [DEBUG] [Thread-202887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:45:27.382 [DEBUG] [Thread-202887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:45:27.382 [INFO] [Thread-202887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:45:27.390 [DEBUG] [Thread-202887] [transport.py] [_log()] client lang: <none>
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] server lang: <none>
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] kex follows: False
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] Compression: none
2026-02-15T10:45:27.391 [DEBUG] [Thread-202887] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:45:27.453 [DEBUG] [Thread-202887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:45:27.454 [DEBUG] [Thread-202887] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:45:27.455 [DEBUG] [Thread-202887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:45:27.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:45:27.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:45:27.515 [DEBUG] [Thread-202887] [transport.py] [_log()] userauth is OK
2026-02-15T10:45:27.515 [DEBUG] [Thread-202887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:45:27.515 [DEBUG] [Thread-202887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:45:27.515 [DEBUG] [Thread-202887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:45:27.515 [DEBUG] [Thread-202887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:45:27.538 [INFO] [Thread-202887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:45:27.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:45:27.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:45:28.368 [DEBUG] [Thread-202887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:45:28.368 [DEBUG] [Thread-202887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:45:28.416 [DEBUG] [Thread-202887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:45:28.417 [DEBUG] [Thread-202887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:45:28.426 [DEBUG] [Thread-202887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:45:28.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:45:28.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:45:28.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:45:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:45:28.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:45:28.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:45:28.463 [DEBUG] [Thread-202887] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:45:34.745 [DEBUG] [Thread-202889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:43.223 [DEBUG] [Thread-202890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:49.801 [DEBUG] [Thread-202891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:45:58.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:45:58.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:45:58.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:46:00.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 45, 35), 15.06, 35.94, 0.0, 28.26, 15.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:46:00.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:45:35
2026-02-15T10:46:01.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:46:01.223 [DEBUG] [Thread-202892] [transport.py] [_log()] starting thread (client mode): 0xa57e2230
2026-02-15T10:46:01.223 [DEBUG] [Thread-202892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:46:01.242 [DEBUG] [Thread-202892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:46:01.242 [INFO] [Thread-202892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] client lang: <none>
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] server lang: <none>
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] kex follows: False
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:46:01.245 [DEBUG] [Thread-202892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:46:01.246 [DEBUG] [Thread-202892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:46:01.246 [DEBUG] [Thread-202892] [transport.py] [_log()] Compression: none
2026-02-15T10:46:01.246 [DEBUG] [Thread-202892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:46:01.263 [DEBUG] [Thread-202892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:46:01.263 [DEBUG] [Thread-202892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:46:01.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:46:01.265 [DEBUG] [Thread-202892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:46:01.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:46:01.267 [DEBUG] [Thread-202892] [transport.py] [_log()] userauth is OK
2026-02-15T10:46:01.268 [DEBUG] [Thread-202892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:46:01.268 [DEBUG] [Thread-202892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:46:01.268 [DEBUG] [Thread-202892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:46:01.268 [DEBUG] [Thread-202892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:46:01.293 [INFO] [Thread-202892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:46:01.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:46:01.924 [DEBUG] [Thread-202892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:46:01.924 [DEBUG] [Thread-202892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:46:01.925 [DEBUG] [Thread-202892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:46:01.966 [DEBUG] [Thread-202892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:46:01.966 [DEBUG] [Thread-202892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:46:01.970 [DEBUG] [Thread-202892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:46:01.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:46:01.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:46:01.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:46:01.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:46:01.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:46:01.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:46:01.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:46:01.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:46:01.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:46:01.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.365030 -999.00  +15.10  20.46     42   +2.30 1 1 1 1 1   888    0 17.00 190.79 ----- 20.5 20.5 139.4 23.0 22.7 -28.7 21.8 -27.8 20.5 -27.3 21.4 -28.2
2026-02-15T10:46:01.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:46:01.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:46:01.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.365030
2026-02-15T10:46:01.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:46:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:46:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:46:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:46:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:46:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:45:35', tmtdew=15.06, humidity=35.94, cloud=0.0, wind=28.26, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:45:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:46:01.996 [DEBUG] [Thread-202892] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:46:02.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:46:02.107 [DEBUG] [Thread-202895] [transport.py] [_log()] starting thread (client mode): 0xa2d68640
2026-02-15T10:46:02.107 [DEBUG] [Thread-202895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:46:02.123 [DEBUG] [Thread-202895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:46:02.123 [INFO] [Thread-202895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:46:02.134 [DEBUG] [Thread-202895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] client lang: <none>
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] server lang: <none>
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] kex follows: False
2026-02-15T10:46:02.135 [DEBUG] [Thread-202895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:46:02.136 [DEBUG] [Thread-202895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:46:02.136 [DEBUG] [Thread-202895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:46:02.136 [DEBUG] [Thread-202895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:46:02.136 [DEBUG] [Thread-202895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:46:02.136 [DEBUG] [Thread-202895] [transport.py] [_log()] Compression: none
2026-02-15T10:46:02.136 [DEBUG] [Thread-202895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:46:02.190 [DEBUG] [Thread-202895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:46:02.190 [DEBUG] [Thread-202895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:46:02.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:46:02.192 [DEBUG] [Thread-202895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:46:02.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:46:02.249 [DEBUG] [Thread-202895] [transport.py] [_log()] userauth is OK
2026-02-15T10:46:02.250 [DEBUG] [Thread-202895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:46:02.250 [DEBUG] [Thread-202895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:46:02.250 [DEBUG] [Thread-202895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:46:02.250 [DEBUG] [Thread-202895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:46:02.269 [INFO] [Thread-202895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:46:02.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:46:02.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:46:03.077 [DEBUG] [Thread-202895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:46:03.077 [DEBUG] [Thread-202895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:46:03.127 [DEBUG] [Thread-202895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:46:03.128 [DEBUG] [Thread-202895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:46:03.137 [DEBUG] [Thread-202895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:46:03.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:46:03.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:46:03.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:46:03.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:46:03.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:46:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:46:03.178 [DEBUG] [Thread-202895] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:46:04.836 [DEBUG] [Thread-202897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:46:09.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:46:09.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:46:19.889 [DEBUG] [Thread-202898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:46:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:46:33.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:46:33.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:46:34.926 [DEBUG] [Thread-202899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:46:35.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 46, 10), 14.64, 36.74, 0.0, 22.8, 15.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:46:35.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:46:10
2026-02-15T10:46:35.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:46:35.561 [DEBUG] [Thread-202900] [transport.py] [_log()] starting thread (client mode): 0xa2d6a3e0
2026-02-15T10:46:35.561 [DEBUG] [Thread-202900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:46:35.582 [DEBUG] [Thread-202900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:46:35.582 [INFO] [Thread-202900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] client lang: <none>
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] server lang: <none>
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] kex follows: False
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:46:35.585 [DEBUG] [Thread-202900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:46:35.586 [DEBUG] [Thread-202900] [transport.py] [_log()] Compression: none
2026-02-15T10:46:35.586 [DEBUG] [Thread-202900] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:46:35.603 [DEBUG] [Thread-202900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:46:35.603 [DEBUG] [Thread-202900] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:46:35.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:46:35.604 [DEBUG] [Thread-202900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:46:35.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:46:35.606 [DEBUG] [Thread-202900] [transport.py] [_log()] userauth is OK
2026-02-15T10:46:35.607 [DEBUG] [Thread-202900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:46:35.607 [DEBUG] [Thread-202900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:46:35.607 [DEBUG] [Thread-202900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:46:35.607 [DEBUG] [Thread-202900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:46:35.632 [INFO] [Thread-202900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:46:35.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:46:36.226 [DEBUG] [Thread-202900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:46:36.226 [DEBUG] [Thread-202900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:46:36.227 [DEBUG] [Thread-202900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:46:36.267 [DEBUG] [Thread-202900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:46:36.267 [DEBUG] [Thread-202900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:46:36.271 [DEBUG] [Thread-202900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:46:36.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:46:36.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:46:36.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:46:36.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:46:36.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:46:36.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:46:36.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:46:36.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:46:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:46:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.365377 -999.00  +15.10  17.38     42   +2.50 1 1 1 1 1   888    0 17.51 191.13 ----- 17.4 17.4 133.4 21.4 22.8 -28.3 21.9 -27.7 20.6 -27.2 21.4 -27.8
2026-02-15T10:46:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:46:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:46:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.365377
2026-02-15T10:46:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:46:36.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:46:36.294 [DEBUG] [Thread-202900] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:46:36.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:46:36.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:46:36.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:46:36.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:46:10', tmtdew=14.64, humidity=36.74, cloud=0.0, wind=22.8, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:46:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:46:36.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:46:36.393 [DEBUG] [Thread-202903] [transport.py] [_log()] starting thread (client mode): 0xa2d6bf10
2026-02-15T10:46:36.393 [DEBUG] [Thread-202903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:46:36.410 [DEBUG] [Thread-202903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:46:36.410 [INFO] [Thread-202903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] client lang: <none>
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] server lang: <none>
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] kex follows: False
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:46:36.418 [DEBUG] [Thread-202903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:46:36.419 [DEBUG] [Thread-202903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:46:36.419 [DEBUG] [Thread-202903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:46:36.419 [DEBUG] [Thread-202903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:46:36.419 [DEBUG] [Thread-202903] [transport.py] [_log()] Compression: none
2026-02-15T10:46:36.419 [DEBUG] [Thread-202903] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:46:36.477 [DEBUG] [Thread-202903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:46:36.478 [DEBUG] [Thread-202903] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:46:36.479 [DEBUG] [Thread-202903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:46:36.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:46:36.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:46:36.533 [DEBUG] [Thread-202903] [transport.py] [_log()] userauth is OK
2026-02-15T10:46:36.534 [DEBUG] [Thread-202903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:46:36.534 [DEBUG] [Thread-202903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:46:36.534 [DEBUG] [Thread-202903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:46:36.534 [DEBUG] [Thread-202903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:46:36.553 [INFO] [Thread-202903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:46:36.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:46:36.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:46:37.449 [DEBUG] [Thread-202903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:46:37.449 [DEBUG] [Thread-202903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:46:37.497 [DEBUG] [Thread-202903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:46:37.498 [DEBUG] [Thread-202903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:46:37.507 [DEBUG] [Thread-202903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:46:37.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:46:37.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:46:37.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:46:37.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:46:37.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:46:37.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:46:37.544 [DEBUG] [Thread-202903] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:46:43.278 [DEBUG] [Thread-202905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:46:49.963 [DEBUG] [Thread-202906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:05.020 [DEBUG] [Thread-202907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:07.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:47:07.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:47:07.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:47:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 46, 45), 14.76, 36.82, 0.0, 23.47, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:47:09.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:46:45
2026-02-15T10:47:09.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:47:09.998 [DEBUG] [Thread-202908] [transport.py] [_log()] starting thread (client mode): 0xa2d682b0
2026-02-15T10:47:09.998 [DEBUG] [Thread-202908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:47:10.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:10.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:10.017 [DEBUG] [Thread-202908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:47:10.017 [INFO] [Thread-202908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] client lang: <none>
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] server lang: <none>
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] kex follows: False
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] Compression: none
2026-02-15T10:47:10.021 [DEBUG] [Thread-202908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:47:10.030 [DEBUG] [Thread-202908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:47:10.030 [DEBUG] [Thread-202908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:47:10.031 [DEBUG] [Thread-202908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:47:10.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:47:10.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:47:10.032 [DEBUG] [Thread-202908] [transport.py] [_log()] userauth is OK
2026-02-15T10:47:10.032 [DEBUG] [Thread-202908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:47:10.032 [DEBUG] [Thread-202908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:47:10.032 [DEBUG] [Thread-202908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:47:10.032 [DEBUG] [Thread-202908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:47:10.061 [INFO] [Thread-202908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:47:10.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:47:10.692 [DEBUG] [Thread-202908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:47:10.692 [DEBUG] [Thread-202908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:47:10.692 [DEBUG] [Thread-202908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:47:10.733 [DEBUG] [Thread-202908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:47:10.733 [DEBUG] [Thread-202908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:47:10.736 [DEBUG] [Thread-202908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:47:10.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:47:10.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:47:10.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:47:10.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:47:10.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:47:10.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:47:10.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:47:10.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:47:10.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:47:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.365724 -999.00  +15.40  16.50     42   +2.70 1 1 1 1 1   888    0 16.91 183.32 ----- 16.5 16.5 130.4 19.5 22.8 -27.6 22.0 -26.8 20.8 -26.1 21.5 -26.7
2026-02-15T10:47:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:47:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:47:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.365724
2026-02-15T10:47:10.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:47:10.767 [DEBUG] [Thread-202908] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:47:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:47:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:47:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:47:10.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:47:10.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:46:45', tmtdew=14.76, humidity=36.82, cloud=0.0, wind=23.47, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:46:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:47:10.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:47:10.873 [DEBUG] [Thread-202911] [transport.py] [_log()] starting thread (client mode): 0xa2d6a200
2026-02-15T10:47:10.874 [DEBUG] [Thread-202911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:47:10.888 [DEBUG] [Thread-202911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:47:10.889 [INFO] [Thread-202911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:47:10.898 [DEBUG] [Thread-202911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:47:10.898 [DEBUG] [Thread-202911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:47:10.898 [DEBUG] [Thread-202911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:47:10.899 [DEBUG] [Thread-202911] [transport.py] [_log()] client lang: <none>
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] server lang: <none>
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] kex follows: False
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] Compression: none
2026-02-15T10:47:10.900 [DEBUG] [Thread-202911] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:47:10.957 [DEBUG] [Thread-202911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:47:10.958 [DEBUG] [Thread-202911] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:47:10.959 [DEBUG] [Thread-202911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:47:10.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:47:10.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:47:11.014 [DEBUG] [Thread-202911] [transport.py] [_log()] userauth is OK
2026-02-15T10:47:11.014 [DEBUG] [Thread-202911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:47:11.014 [DEBUG] [Thread-202911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:47:11.014 [DEBUG] [Thread-202911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:47:11.014 [DEBUG] [Thread-202911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:47:11.037 [INFO] [Thread-202911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:47:11.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:47:11.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:47:11.915 [DEBUG] [Thread-202911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:47:11.915 [DEBUG] [Thread-202911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:47:11.965 [DEBUG] [Thread-202911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:47:11.965 [DEBUG] [Thread-202911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:47:11.979 [DEBUG] [Thread-202911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:47:11.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:47:11.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:47:11.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:47:12.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:47:12.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:47:12.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:47:12.016 [DEBUG] [Thread-202911] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:47:20.058 [DEBUG] [Thread-202913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:35.110 [DEBUG] [Thread-202914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:47:42.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:47:42.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
2026-02-15T10:47:43.322 [DEBUG] [Thread-202915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:47:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 47, 21), 14.78, 36.82, 0.0, 21.44, 15.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:47:44.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:47:21
2026-02-15T10:47:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:47:44.598 [DEBUG] [Thread-202916] [transport.py] [_log()] starting thread (client mode): 0xa57e2ec0
2026-02-15T10:47:44.598 [DEBUG] [Thread-202916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:47:44.620 [DEBUG] [Thread-202916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:47:44.620 [INFO] [Thread-202916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] client lang: <none>
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] server lang: <none>
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] kex follows: False
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] Compression: none
2026-02-15T10:47:44.622 [DEBUG] [Thread-202916] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:47:44.635 [DEBUG] [Thread-202916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:47:44.636 [DEBUG] [Thread-202916] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:47:44.636 [DEBUG] [Thread-202916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:47:44.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:47:44.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:47:44.639 [DEBUG] [Thread-202916] [transport.py] [_log()] userauth is OK
2026-02-15T10:47:44.639 [DEBUG] [Thread-202916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:47:44.639 [DEBUG] [Thread-202916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:47:44.639 [DEBUG] [Thread-202916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:47:44.639 [DEBUG] [Thread-202916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:47:44.658 [INFO] [Thread-202916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:47:44.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:47:45.309 [DEBUG] [Thread-202916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:47:45.309 [DEBUG] [Thread-202916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:47:45.309 [DEBUG] [Thread-202916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:47:45.350 [DEBUG] [Thread-202916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:47:45.351 [DEBUG] [Thread-202916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:47:45.354 [DEBUG] [Thread-202916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:47:45.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:47:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:47:45.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:47:45.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:47:45.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:47:45.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:47:45.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.366071 -999.00  +15.40  16.91     41   +2.40 1 1 1 1 1   888    0 17.58 196.28 ----- 16.9 16.9 152.0 23.3 23.0 -28.2 21.9 -28.2 20.8 -27.2 21.7 -27.9
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.366071
2026-02-15T10:47:45.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:47:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:47:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:47:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:47:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:47:45.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:47:21', tmtdew=14.78, humidity=36.82, cloud=0.0, wind=21.44, temperature=15.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:47:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:47:45.379 [DEBUG] [Thread-202916] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:47:45.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:47:45.465 [DEBUG] [Thread-202919] [transport.py] [_log()] starting thread (client mode): 0xa57e3fa0
2026-02-15T10:47:45.466 [DEBUG] [Thread-202919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:47:45.481 [DEBUG] [Thread-202919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:47:45.481 [INFO] [Thread-202919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] client lang: <none>
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] server lang: <none>
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] kex follows: False
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:47:45.489 [DEBUG] [Thread-202919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:47:45.490 [DEBUG] [Thread-202919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:47:45.490 [DEBUG] [Thread-202919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:47:45.490 [DEBUG] [Thread-202919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:47:45.490 [DEBUG] [Thread-202919] [transport.py] [_log()] Compression: none
2026-02-15T10:47:45.490 [DEBUG] [Thread-202919] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:47:45.551 [DEBUG] [Thread-202919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:47:45.551 [DEBUG] [Thread-202919] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:47:45.552 [DEBUG] [Thread-202919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:47:45.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:47:45.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:47:45.612 [DEBUG] [Thread-202919] [transport.py] [_log()] userauth is OK
2026-02-15T10:47:45.612 [DEBUG] [Thread-202919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:47:45.612 [DEBUG] [Thread-202919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:47:45.612 [DEBUG] [Thread-202919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:47:45.613 [DEBUG] [Thread-202919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:47:45.633 [INFO] [Thread-202919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:47:45.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:47:45.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:47:46.478 [DEBUG] [Thread-202919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:47:46.478 [DEBUG] [Thread-202919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:47:46.526 [DEBUG] [Thread-202919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:47:46.527 [DEBUG] [Thread-202919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:47:46.536 [DEBUG] [Thread-202919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:47:46.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:47:46.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:47:46.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:47:46.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:47:46.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:47:46.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:47:46.573 [DEBUG] [Thread-202919] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:47:50.145 [DEBUG] [Thread-202921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:05.186 [DEBUG] [Thread-202922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:10.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:10.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:16.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:48:16.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:48:16.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:48:18.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 47, 56), 14.61, 37.1, 0.0, 19.8, 15.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:48:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:47:56
2026-02-15T10:48:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:48:19.093 [DEBUG] [Thread-202923] [transport.py] [_log()] starting thread (client mode): 0xa57e2ef0
2026-02-15T10:48:19.093 [DEBUG] [Thread-202923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:48:19.114 [DEBUG] [Thread-202923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:48:19.115 [INFO] [Thread-202923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:19.118 [DEBUG] [Thread-202923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] client lang: <none>
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] server lang: <none>
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] kex follows: False
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] Compression: none
2026-02-15T10:48:19.119 [DEBUG] [Thread-202923] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:48:19.136 [DEBUG] [Thread-202923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:48:19.136 [DEBUG] [Thread-202923] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:48:19.137 [DEBUG] [Thread-202923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:48:19.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:48:19.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:48:19.139 [DEBUG] [Thread-202923] [transport.py] [_log()] userauth is OK
2026-02-15T10:48:19.139 [DEBUG] [Thread-202923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:48:19.139 [DEBUG] [Thread-202923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:48:19.139 [DEBUG] [Thread-202923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:48:19.139 [DEBUG] [Thread-202923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:48:19.162 [INFO] [Thread-202923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:48:19.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:48:19.813 [DEBUG] [Thread-202923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:48:19.814 [DEBUG] [Thread-202923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:48:19.814 [DEBUG] [Thread-202923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:48:19.855 [DEBUG] [Thread-202923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:48:19.855 [DEBUG] [Thread-202923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:48:19.858 [DEBUG] [Thread-202923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:48:19.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:48:19.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:48:19.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:48:19.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:48:19.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:48:19.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:48:19.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:48:19.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:48:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:48:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.366419 -999.00  +15.10  13.12     42   +2.50 1 1 1 1 1   888    0 17.13 185.50 ----- 13.1 13.1 136.4 22.1 23.0 -28.9 22.1 -26.6 20.9 -25.9 21.6 -27.9
2026-02-15T10:48:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:48:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:48:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.366419
2026-02-15T10:48:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:48:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:48:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:48:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:48:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:48:19.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:47:56', tmtdew=14.61, humidity=37.1, cloud=0.0, wind=19.8, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:47:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:48:19.885 [DEBUG] [Thread-202923] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:48:19.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:48:19.979 [DEBUG] [Thread-202926] [transport.py] [_log()] starting thread (client mode): 0xa2d69c30
2026-02-15T10:48:19.979 [DEBUG] [Thread-202926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:48:19.997 [DEBUG] [Thread-202926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:48:19.997 [INFO] [Thread-202926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] client lang: <none>
2026-02-15T10:48:20.005 [DEBUG] [Thread-202926] [transport.py] [_log()] server lang: <none>
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] kex follows: False
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] Compression: none
2026-02-15T10:48:20.006 [DEBUG] [Thread-202926] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:48:20.065 [DEBUG] [Thread-202926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:48:20.066 [DEBUG] [Thread-202926] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:48:20.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:48:20.067 [DEBUG] [Thread-202926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:48:20.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:48:20.122 [DEBUG] [Thread-202926] [transport.py] [_log()] userauth is OK
2026-02-15T10:48:20.122 [DEBUG] [Thread-202926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:48:20.122 [DEBUG] [Thread-202926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:48:20.122 [DEBUG] [Thread-202926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:48:20.122 [DEBUG] [Thread-202926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:48:20.147 [INFO] [Thread-202926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:48:20.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:48:20.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:48:20.225 [DEBUG] [Thread-202928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:20.982 [DEBUG] [Thread-202926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:48:20.982 [DEBUG] [Thread-202926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:48:21.029 [DEBUG] [Thread-202926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:48:21.030 [DEBUG] [Thread-202926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:48:21.039 [DEBUG] [Thread-202926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:48:21.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:48:21.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:48:21.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:48:21.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:48:21.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:48:21.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:48:21.076 [DEBUG] [Thread-202926] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:48:35.277 [DEBUG] [Thread-202929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:43.355 [DEBUG] [Thread-202930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:50.316 [DEBUG] [Thread-202931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:48:51.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:48:51.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:48:51.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:48:52.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 48, 31), 14.43, 37.49, 0.0, 15.78, 15.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:48:52.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:48:31
2026-02-15T10:48:53.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:48:53.427 [DEBUG] [Thread-202932] [transport.py] [_log()] starting thread (client mode): 0xa5741cc0
2026-02-15T10:48:53.427 [DEBUG] [Thread-202932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:48:53.446 [DEBUG] [Thread-202932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:48:53.455 [INFO] [Thread-202932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:48:53.456 [DEBUG] [Thread-202932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:48:53.456 [DEBUG] [Thread-202932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] client lang: <none>
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] server lang: <none>
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] kex follows: False
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] Compression: none
2026-02-15T10:48:53.457 [DEBUG] [Thread-202932] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:48:53.475 [DEBUG] [Thread-202932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:48:53.476 [DEBUG] [Thread-202932] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:48:53.476 [DEBUG] [Thread-202932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:48:53.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:48:53.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:48:53.478 [DEBUG] [Thread-202932] [transport.py] [_log()] userauth is OK
2026-02-15T10:48:53.479 [DEBUG] [Thread-202932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:48:53.479 [DEBUG] [Thread-202932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:48:53.479 [DEBUG] [Thread-202932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:48:53.479 [DEBUG] [Thread-202932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:48:53.501 [INFO] [Thread-202932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:48:53.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:48:54.131 [DEBUG] [Thread-202932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:48:54.131 [DEBUG] [Thread-202932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:48:54.132 [DEBUG] [Thread-202932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:48:54.172 [DEBUG] [Thread-202932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:48:54.173 [DEBUG] [Thread-202932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:48:54.176 [DEBUG] [Thread-202932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:48:54.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:48:54.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:48:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:48:54.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:48:54.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:48:54.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:48:54.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:48:54.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:48:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:48:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.367113 -999.00  +15.20  15.53     41   +2.30 1 1 1 1 1   888    0 17.23 180.16 ----- 15.5 15.5 149.0 18.4 23.1 -27.7 22.1 -27.5 20.9 -26.6 21.8 -27.2
2026-02-15T10:48:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:48:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:48:54.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.367113
2026-02-15T10:48:54.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:48:54.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:48:54.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:48:54.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:48:54.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:48:54.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:48:31', tmtdew=14.43, humidity=37.49, cloud=0.0, wind=15.78, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:48:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:48:54.204 [DEBUG] [Thread-202932] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:48:54.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:48:54.300 [DEBUG] [Thread-202935] [transport.py] [_log()] starting thread (client mode): 0xa5740670
2026-02-15T10:48:54.300 [DEBUG] [Thread-202935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:48:54.316 [DEBUG] [Thread-202935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:48:54.316 [INFO] [Thread-202935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:48:54.324 [DEBUG] [Thread-202935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] client lang: <none>
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] server lang: <none>
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] kex follows: False
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] Compression: none
2026-02-15T10:48:54.325 [DEBUG] [Thread-202935] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:48:54.381 [DEBUG] [Thread-202935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:48:54.382 [DEBUG] [Thread-202935] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:48:54.383 [DEBUG] [Thread-202935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:48:54.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:48:54.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:48:54.437 [DEBUG] [Thread-202935] [transport.py] [_log()] userauth is OK
2026-02-15T10:48:54.438 [DEBUG] [Thread-202935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:48:54.438 [DEBUG] [Thread-202935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:48:54.438 [DEBUG] [Thread-202935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:48:54.438 [DEBUG] [Thread-202935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:48:54.459 [INFO] [Thread-202935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:48:54.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:48:54.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:48:55.299 [DEBUG] [Thread-202935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:48:55.300 [DEBUG] [Thread-202935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:48:55.348 [DEBUG] [Thread-202935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:48:55.348 [DEBUG] [Thread-202935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:48:55.357 [DEBUG] [Thread-202935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:48:55.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:48:55.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:48:55.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:48:55.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:48:55.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:48:55.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:48:55.393 [DEBUG] [Thread-202935] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:49:05.352 [DEBUG] [Thread-202937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:10.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:10.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:20.411 [DEBUG] [Thread-202938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:25.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:49:25.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:49:25.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:49:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 49, 8), 14.33, 37.73, 0.0, 17.82, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:49:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:49:08
2026-02-15T10:49:27.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:49:27.846 [DEBUG] [Thread-202939] [transport.py] [_log()] starting thread (client mode): 0xa2d6a6b0
2026-02-15T10:49:27.846 [DEBUG] [Thread-202939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:49:27.866 [DEBUG] [Thread-202939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:49:27.866 [INFO] [Thread-202939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:49:27.869 [DEBUG] [Thread-202939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] client lang: <none>
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] server lang: <none>
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] kex follows: False
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] Compression: none
2026-02-15T10:49:27.870 [DEBUG] [Thread-202939] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:49:27.887 [DEBUG] [Thread-202939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:49:27.888 [DEBUG] [Thread-202939] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:49:27.889 [DEBUG] [Thread-202939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:49:27.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:49:27.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:49:27.891 [DEBUG] [Thread-202939] [transport.py] [_log()] userauth is OK
2026-02-15T10:49:27.891 [DEBUG] [Thread-202939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:49:27.891 [DEBUG] [Thread-202939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:49:27.891 [DEBUG] [Thread-202939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:49:27.891 [DEBUG] [Thread-202939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:49:27.912 [INFO] [Thread-202939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:49:27.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:49:28.516 [DEBUG] [Thread-202939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:49:28.516 [DEBUG] [Thread-202939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:49:28.516 [DEBUG] [Thread-202939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:49:28.557 [DEBUG] [Thread-202939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:49:28.558 [DEBUG] [Thread-202939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:49:28.561 [DEBUG] [Thread-202939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:49:28.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:49:28.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:49:28.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:49:28.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:49:28.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:49:28.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:49:28.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:49:28.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:49:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:49:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.367460 -999.00  +15.10  15.75     42   +2.40 1 1 1 1 1   888    0 17.34 180.74 ----- 15.8 15.8 125.4 20.8 23.2 -28.2 22.1 -26.2 21.0 -25.5 21.7 -28.0
2026-02-15T10:49:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:49:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:49:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.367460
2026-02-15T10:49:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:49:28.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:49:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:49:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:49:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:49:28.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:49:08', tmtdew=14.33, humidity=37.73, cloud=0.0, wind=17.82, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:49:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:49:28.586 [DEBUG] [Thread-202939] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:49:28.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:49:28.682 [DEBUG] [Thread-202942] [transport.py] [_log()] starting thread (client mode): 0xa2d6a1d0
2026-02-15T10:49:28.683 [DEBUG] [Thread-202942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:49:28.697 [DEBUG] [Thread-202942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:49:28.698 [INFO] [Thread-202942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:49:28.705 [DEBUG] [Thread-202942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:49:28.706 [DEBUG] [Thread-202942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] client lang: <none>
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] server lang: <none>
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] kex follows: False
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:49:28.707 [DEBUG] [Thread-202942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:49:28.708 [DEBUG] [Thread-202942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:49:28.708 [DEBUG] [Thread-202942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:49:28.708 [DEBUG] [Thread-202942] [transport.py] [_log()] Compression: none
2026-02-15T10:49:28.708 [DEBUG] [Thread-202942] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:49:28.766 [DEBUG] [Thread-202942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:49:28.767 [DEBUG] [Thread-202942] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:49:28.768 [DEBUG] [Thread-202942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:49:28.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:49:28.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:49:28.826 [DEBUG] [Thread-202942] [transport.py] [_log()] userauth is OK
2026-02-15T10:49:28.826 [DEBUG] [Thread-202942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:49:28.826 [DEBUG] [Thread-202942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:49:28.827 [DEBUG] [Thread-202942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:49:28.827 [DEBUG] [Thread-202942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:49:28.857 [INFO] [Thread-202942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:49:28.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:49:28.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:49:29.729 [DEBUG] [Thread-202942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:49:29.729 [DEBUG] [Thread-202942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:49:29.777 [DEBUG] [Thread-202942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:49:29.777 [DEBUG] [Thread-202942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:49:29.786 [DEBUG] [Thread-202942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:49:29.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:49:29.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:49:29.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:49:29.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:49:29.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:49:29.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:49:29.823 [DEBUG] [Thread-202942] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:49:35.448 [DEBUG] [Thread-202944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:43.405 [DEBUG] [Thread-202945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:50.507 [DEBUG] [Thread-202946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:49:59.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:49:59.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:49:59.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:50:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 49, 43), 14.8, 36.4, 0.0, 21.1, 15.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:50:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:49:43
2026-02-15T10:50:02.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:50:02.446 [DEBUG] [Thread-202947] [transport.py] [_log()] starting thread (client mode): 0xa57e3400
2026-02-15T10:50:02.446 [DEBUG] [Thread-202947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:50:02.466 [DEBUG] [Thread-202947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:50:02.466 [INFO] [Thread-202947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:50:02.469 [DEBUG] [Thread-202947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] client lang: <none>
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] server lang: <none>
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] kex follows: False
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:50:02.470 [DEBUG] [Thread-202947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:50:02.471 [DEBUG] [Thread-202947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:50:02.471 [DEBUG] [Thread-202947] [transport.py] [_log()] Compression: none
2026-02-15T10:50:02.471 [DEBUG] [Thread-202947] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:50:02.488 [DEBUG] [Thread-202947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:50:02.488 [DEBUG] [Thread-202947] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:50:02.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:50:02.489 [DEBUG] [Thread-202947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:50:02.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:50:02.491 [DEBUG] [Thread-202947] [transport.py] [_log()] userauth is OK
2026-02-15T10:50:02.491 [DEBUG] [Thread-202947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:50:02.491 [DEBUG] [Thread-202947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:50:02.491 [DEBUG] [Thread-202947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:50:02.491 [DEBUG] [Thread-202947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:50:02.508 [INFO] [Thread-202947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:50:02.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:50:05.546 [DEBUG] [Thread-202949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:50:07.174 [DEBUG] [Thread-202947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:50:07.175 [DEBUG] [Thread-202947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:50:07.175 [DEBUG] [Thread-202947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:50:07.215 [DEBUG] [Thread-202947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:50:07.216 [DEBUG] [Thread-202947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:50:07.219 [DEBUG] [Thread-202947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:50:07.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:50:07.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:50:07.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:50:07.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:50:07.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:50:07.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:50:07.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:50:07.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:50:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:50:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.367807 -999.00  +15.70  18.09     41   +2.60 1 1 1 1 1   888    0 17.17 182.30 ----- 18.1 18.1 150.9 26.6 23.2 -28.0 22.1 -27.6 20.9 -27.3 21.9 -27.5
2026-02-15T10:50:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:50:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:50:07.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.367807
2026-02-15T10:50:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:50:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:50:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:50:07.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:50:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:50:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:49:43', tmtdew=14.8, humidity=36.4, cloud=0.0, wind=21.1, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:49:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:50:07.386 [DEBUG] [Thread-202947] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:50:07.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:50:07.483 [DEBUG] [Thread-202951] [transport.py] [_log()] starting thread (client mode): 0xa2d6b730
2026-02-15T10:50:07.483 [DEBUG] [Thread-202951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:50:07.498 [DEBUG] [Thread-202951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:50:07.498 [INFO] [Thread-202951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:50:07.505 [DEBUG] [Thread-202951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] client lang: <none>
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] server lang: <none>
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] kex follows: False
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] Compression: none
2026-02-15T10:50:07.506 [DEBUG] [Thread-202951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:50:07.566 [DEBUG] [Thread-202951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:50:07.566 [DEBUG] [Thread-202951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:50:07.567 [DEBUG] [Thread-202951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:50:07.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:50:07.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:50:07.624 [DEBUG] [Thread-202951] [transport.py] [_log()] userauth is OK
2026-02-15T10:50:07.624 [DEBUG] [Thread-202951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:50:07.624 [DEBUG] [Thread-202951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:50:07.624 [DEBUG] [Thread-202951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:50:07.624 [DEBUG] [Thread-202951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:50:07.643 [INFO] [Thread-202951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:50:07.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:50:07.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:50:08.440 [DEBUG] [Thread-202951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:50:08.440 [DEBUG] [Thread-202951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:50:08.488 [DEBUG] [Thread-202951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:50:08.489 [DEBUG] [Thread-202951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:50:08.498 [DEBUG] [Thread-202951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:50:08.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:50:08.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:50:08.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:50:08.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:50:08.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:50:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:50:08.534 [DEBUG] [Thread-202951] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:50:10.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:50:10.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:50:20.585 [DEBUG] [Thread-202953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:50:35.649 [DEBUG] [Thread-202954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:50:38.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:50:38.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:50:38.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:50:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 50, 18), 15.02, 35.97, 0.0, 25.64, 15.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:50:40.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:50:18
2026-02-15T10:50:40.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:50:40.869 [DEBUG] [Thread-202955] [transport.py] [_log()] starting thread (client mode): 0xa2d69db0
2026-02-15T10:50:40.870 [DEBUG] [Thread-202955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:50:40.889 [DEBUG] [Thread-202955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:50:40.889 [INFO] [Thread-202955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:50:40.892 [DEBUG] [Thread-202955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:50:40.892 [DEBUG] [Thread-202955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] client lang: <none>
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] server lang: <none>
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] kex follows: False
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:50:40.893 [DEBUG] [Thread-202955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:50:40.894 [DEBUG] [Thread-202955] [transport.py] [_log()] Compression: none
2026-02-15T10:50:40.894 [DEBUG] [Thread-202955] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:50:40.912 [DEBUG] [Thread-202955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:50:40.912 [DEBUG] [Thread-202955] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:50:40.913 [DEBUG] [Thread-202955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:50:40.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:50:40.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:50:40.915 [DEBUG] [Thread-202955] [transport.py] [_log()] userauth is OK
2026-02-15T10:50:40.915 [DEBUG] [Thread-202955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:50:40.915 [DEBUG] [Thread-202955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:50:40.915 [DEBUG] [Thread-202955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:50:40.916 [DEBUG] [Thread-202955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:50:40.935 [INFO] [Thread-202955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:50:40.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:50:41.484 [DEBUG] [Thread-202955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:50:41.484 [DEBUG] [Thread-202955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:50:41.484 [DEBUG] [Thread-202955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:50:41.525 [DEBUG] [Thread-202955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:50:41.526 [DEBUG] [Thread-202955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:50:41.529 [DEBUG] [Thread-202955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:50:41.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:50:41.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:50:41.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:50:41.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:50:41.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:50:41.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:50:41.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:50:41.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:50:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:50:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.368154 -999.00  +15.80  14.80     40   +2.40 1 1 1 1 1   888    0 17.43 190.42 ----- 14.8 14.8 162.2 25.2 23.1 -29.8 22.1 -27.6 20.9 -26.5 21.8 -28.9
2026-02-15T10:50:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:50:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:50:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.368154
2026-02-15T10:50:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:50:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:50:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:50:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:50:41.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:50:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:50:18', tmtdew=15.02, humidity=35.97, cloud=0.0, wind=25.64, temperature=15.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:50:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:50:41.556 [DEBUG] [Thread-202955] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:50:41.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:50:41.652 [DEBUG] [Thread-202958] [transport.py] [_log()] starting thread (client mode): 0xa2dc2740
2026-02-15T10:50:41.653 [DEBUG] [Thread-202958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:50:41.667 [DEBUG] [Thread-202958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:50:41.667 [INFO] [Thread-202958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:50:41.677 [DEBUG] [Thread-202958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:50:41.677 [DEBUG] [Thread-202958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:50:41.678 [DEBUG] [Thread-202958] [transport.py] [_log()] client lang: <none>
2026-02-15T10:50:41.679 [DEBUG] [Thread-202958] [transport.py] [_log()] server lang: <none>
2026-02-15T10:50:41.679 [DEBUG] [Thread-202958] [transport.py] [_log()] kex follows: False
2026-02-15T10:50:41.679 [DEBUG] [Thread-202958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:50:41.679 [DEBUG] [Thread-202958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:50:41.679 [DEBUG] [Thread-202958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:50:41.679 [DEBUG] [Thread-202958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:50:41.680 [DEBUG] [Thread-202958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:50:41.680 [DEBUG] [Thread-202958] [transport.py] [_log()] Compression: none
2026-02-15T10:50:41.680 [DEBUG] [Thread-202958] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:50:41.741 [DEBUG] [Thread-202958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:50:41.741 [DEBUG] [Thread-202958] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:50:41.742 [DEBUG] [Thread-202958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:50:41.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:50:41.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:50:41.803 [DEBUG] [Thread-202958] [transport.py] [_log()] userauth is OK
2026-02-15T10:50:41.803 [DEBUG] [Thread-202958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:50:41.803 [DEBUG] [Thread-202958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:50:41.803 [DEBUG] [Thread-202958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:50:41.803 [DEBUG] [Thread-202958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:50:41.822 [INFO] [Thread-202958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:50:41.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:50:41.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:50:42.661 [DEBUG] [Thread-202958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:50:42.661 [DEBUG] [Thread-202958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:50:42.709 [DEBUG] [Thread-202958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:50:42.710 [DEBUG] [Thread-202958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:50:42.719 [DEBUG] [Thread-202958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:50:42.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:50:42.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:50:42.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:50:42.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:50:42.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:50:42.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:50:42.755 [DEBUG] [Thread-202958] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:50:43.449 [DEBUG] [Thread-202960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:50:50.691 [DEBUG] [Thread-202961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:05.744 [DEBUG] [Thread-202962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:10.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:10.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:12.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:51:12.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:51:12.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:51:14.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 50, 53), 15.11, 35.46, 0.0, 23.4, 15.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:51:14.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:50:53
2026-02-15T10:51:14.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:51:15.051 [DEBUG] [Thread-202963] [transport.py] [_log()] starting thread (client mode): 0xa81d6200
2026-02-15T10:51:15.051 [DEBUG] [Thread-202963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:51:15.067 [DEBUG] [Thread-202963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:51:15.067 [INFO] [Thread-202963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] client lang: <none>
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] server lang: <none>
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] kex follows: False
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:51:15.069 [DEBUG] [Thread-202963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:51:15.070 [DEBUG] [Thread-202963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:51:15.070 [DEBUG] [Thread-202963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:51:15.070 [DEBUG] [Thread-202963] [transport.py] [_log()] Compression: none
2026-02-15T10:51:15.070 [DEBUG] [Thread-202963] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:51:15.080 [DEBUG] [Thread-202963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:51:15.080 [DEBUG] [Thread-202963] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:51:15.081 [DEBUG] [Thread-202963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:51:15.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:51:15.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:51:15.082 [DEBUG] [Thread-202963] [transport.py] [_log()] userauth is OK
2026-02-15T10:51:15.082 [DEBUG] [Thread-202963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:51:15.082 [DEBUG] [Thread-202963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:51:15.082 [DEBUG] [Thread-202963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:51:15.082 [DEBUG] [Thread-202963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:51:15.096 [INFO] [Thread-202963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:51:15.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:51:15.717 [DEBUG] [Thread-202963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:51:15.717 [DEBUG] [Thread-202963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:51:15.718 [DEBUG] [Thread-202963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:51:15.758 [DEBUG] [Thread-202963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:51:15.758 [DEBUG] [Thread-202963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:51:15.761 [DEBUG] [Thread-202963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:51:15.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:51:15.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:51:15.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:51:15.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:51:15.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:51:15.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:51:15.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:51:15.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:51:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:51:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.368502 -999.00  +15.70  14.90     40   +2.20 1 1 1 1 1   888    0 17.73 190.93 ----- 14.9 14.9 161.4 21.1 23.1 -29.3 22.0 -27.1 20.9 -27.7 21.8 -28.7
2026-02-15T10:51:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:51:15.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:51:15.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.368502
2026-02-15T10:51:15.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:51:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:51:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:51:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:51:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:51:15.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:50:53', tmtdew=15.11, humidity=35.46, cloud=0.0, wind=23.4, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:50:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:51:15.780 [DEBUG] [Thread-202963] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:51:15.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:51:15.878 [DEBUG] [Thread-202966] [transport.py] [_log()] starting thread (client mode): 0xa5742a10
2026-02-15T10:51:15.878 [DEBUG] [Thread-202966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:51:15.895 [DEBUG] [Thread-202966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:51:15.895 [INFO] [Thread-202966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:15.903 [DEBUG] [Thread-202966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] client lang: <none>
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] server lang: <none>
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] kex follows: False
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] Compression: none
2026-02-15T10:51:15.904 [DEBUG] [Thread-202966] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:51:15.961 [DEBUG] [Thread-202966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:51:15.962 [DEBUG] [Thread-202966] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:51:15.963 [DEBUG] [Thread-202966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:51:15.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:51:15.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:51:16.018 [DEBUG] [Thread-202966] [transport.py] [_log()] userauth is OK
2026-02-15T10:51:16.018 [DEBUG] [Thread-202966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:51:16.019 [DEBUG] [Thread-202966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:51:16.019 [DEBUG] [Thread-202966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:51:16.019 [DEBUG] [Thread-202966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:51:16.039 [INFO] [Thread-202966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:51:16.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:51:16.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:51:16.879 [DEBUG] [Thread-202966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:51:16.879 [DEBUG] [Thread-202966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:51:16.927 [DEBUG] [Thread-202966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:51:16.927 [DEBUG] [Thread-202966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:51:16.936 [DEBUG] [Thread-202966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:51:16.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:51:16.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:51:16.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:51:16.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:51:16.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:51:16.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:51:16.970 [DEBUG] [Thread-202966] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:51:20.778 [DEBUG] [Thread-202968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:35.825 [DEBUG] [Thread-202969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:43.482 [DEBUG] [Thread-202970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:46.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:51:46.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:51:46.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:51:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 51, 28), 15.04, 35.64, 0.0, 19.36, 15.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:51:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:51:28
2026-02-15T10:51:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:51:49.373 [DEBUG] [Thread-202971] [transport.py] [_log()] starting thread (client mode): 0xa81d6620
2026-02-15T10:51:49.374 [DEBUG] [Thread-202971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:51:49.394 [DEBUG] [Thread-202971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:51:49.394 [INFO] [Thread-202971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] client lang: <none>
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] server lang: <none>
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] kex follows: False
2026-02-15T10:51:49.397 [DEBUG] [Thread-202971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:51:49.398 [DEBUG] [Thread-202971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:51:49.398 [DEBUG] [Thread-202971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:51:49.398 [DEBUG] [Thread-202971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:51:49.398 [DEBUG] [Thread-202971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:51:49.398 [DEBUG] [Thread-202971] [transport.py] [_log()] Compression: none
2026-02-15T10:51:49.398 [DEBUG] [Thread-202971] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:51:49.414 [DEBUG] [Thread-202971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:51:49.415 [DEBUG] [Thread-202971] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:51:49.416 [DEBUG] [Thread-202971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:51:49.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:51:49.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:51:49.417 [DEBUG] [Thread-202971] [transport.py] [_log()] userauth is OK
2026-02-15T10:51:49.418 [DEBUG] [Thread-202971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:51:49.418 [DEBUG] [Thread-202971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:51:49.418 [DEBUG] [Thread-202971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:51:49.418 [DEBUG] [Thread-202971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:51:49.434 [INFO] [Thread-202971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:51:49.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:51:50.040 [DEBUG] [Thread-202971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:51:50.041 [DEBUG] [Thread-202971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:51:50.041 [DEBUG] [Thread-202971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:51:50.081 [DEBUG] [Thread-202971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:51:50.081 [DEBUG] [Thread-202971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:51:50.085 [DEBUG] [Thread-202971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:51:50.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:51:50.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:51:50.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:51:50.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:51:50.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:51:50.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:51:50.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:51:50.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:51:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:51:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.368849 -999.00  +15.70  13.39     40   +2.30 1 1 1 1 1   888    0 17.13 177.85 ----- 13.4 13.4 150.0 22.8 23.1 -28.9 22.0 -26.9 20.9 -25.8 21.8 -28.3
2026-02-15T10:51:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:51:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:51:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.368849
2026-02-15T10:51:50.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:51:50.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:51:50.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:51:50.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:51:50.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:51:50.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:51:28', tmtdew=15.04, humidity=35.64, cloud=0.0, wind=19.36, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:51:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:51:50.110 [DEBUG] [Thread-202971] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:51:50.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:51:50.219 [DEBUG] [Thread-202974] [transport.py] [_log()] starting thread (client mode): 0xa57e0c40
2026-02-15T10:51:50.219 [DEBUG] [Thread-202974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:51:50.234 [DEBUG] [Thread-202974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:51:50.235 [INFO] [Thread-202974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:51:50.242 [DEBUG] [Thread-202974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:51:50.242 [DEBUG] [Thread-202974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:51:50.242 [DEBUG] [Thread-202974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] client lang: <none>
2026-02-15T10:51:50.243 [DEBUG] [Thread-202974] [transport.py] [_log()] server lang: <none>
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] kex follows: False
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] Compression: none
2026-02-15T10:51:50.244 [DEBUG] [Thread-202974] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:51:50.304 [DEBUG] [Thread-202974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:51:50.305 [DEBUG] [Thread-202974] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:51:50.305 [DEBUG] [Thread-202974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:51:50.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:51:50.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:51:50.361 [DEBUG] [Thread-202974] [transport.py] [_log()] userauth is OK
2026-02-15T10:51:50.361 [DEBUG] [Thread-202974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:51:50.361 [DEBUG] [Thread-202974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:51:50.361 [DEBUG] [Thread-202974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:51:50.361 [DEBUG] [Thread-202974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:51:50.380 [INFO] [Thread-202974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:51:50.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:51:50.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:51:50.859 [DEBUG] [Thread-202976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:51:51.207 [DEBUG] [Thread-202974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:51:51.207 [DEBUG] [Thread-202974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:51:51.255 [DEBUG] [Thread-202974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:51:51.256 [DEBUG] [Thread-202974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:51:51.268 [DEBUG] [Thread-202974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:51:51.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:51:51.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:51:51.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:51:51.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:51:51.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:51:51.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:51:51.314 [DEBUG] [Thread-202974] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:52:05.911 [DEBUG] [Thread-202977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:10.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:10.726 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:20.949 [DEBUG] [Thread-202978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:52:21.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:52:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:52:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 52, 4), 15.27, 35.14, 0.0, 22.41, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:52:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:52:04
2026-02-15T10:52:23.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:52:23.685 [DEBUG] [Thread-202979] [transport.py] [_log()] starting thread (client mode): 0xa2d6ba00
2026-02-15T10:52:23.685 [DEBUG] [Thread-202979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:52:23.705 [DEBUG] [Thread-202979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:52:23.705 [INFO] [Thread-202979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:52:23.708 [DEBUG] [Thread-202979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:52:23.708 [DEBUG] [Thread-202979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] client lang: <none>
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] server lang: <none>
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] kex follows: False
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:52:23.709 [DEBUG] [Thread-202979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:52:23.710 [DEBUG] [Thread-202979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:52:23.710 [DEBUG] [Thread-202979] [transport.py] [_log()] Compression: none
2026-02-15T10:52:23.710 [DEBUG] [Thread-202979] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:52:23.728 [DEBUG] [Thread-202979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:52:23.728 [DEBUG] [Thread-202979] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:52:23.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:52:23.729 [DEBUG] [Thread-202979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:52:23.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:52:23.731 [DEBUG] [Thread-202979] [transport.py] [_log()] userauth is OK
2026-02-15T10:52:23.732 [DEBUG] [Thread-202979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:52:23.732 [DEBUG] [Thread-202979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:52:23.732 [DEBUG] [Thread-202979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:52:23.732 [DEBUG] [Thread-202979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:52:23.752 [INFO] [Thread-202979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:52:23.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:52:24.359 [DEBUG] [Thread-202979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:52:24.359 [DEBUG] [Thread-202979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:52:24.359 [DEBUG] [Thread-202979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:52:24.400 [DEBUG] [Thread-202979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:52:24.400 [DEBUG] [Thread-202979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:52:24.403 [DEBUG] [Thread-202979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:52:24.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:52:24.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:52:24.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:52:24.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:52:24.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:52:24.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:52:24.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:52:24.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:52:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:52:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.369196 -999.00  +15.90  22.28     39   +2.00 1 1 1 1 1   888    0 17.99 188.34 ----- 22.3 22.3 166.4 27.4 23.2 -28.8 22.0 -27.3 20.9 -27.0 21.9 -28.2
2026-02-15T10:52:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:52:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:52:24.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.369196
2026-02-15T10:52:24.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:52:24.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:52:24.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:52:24.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:52:24.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:52:24.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:52:04', tmtdew=15.27, humidity=35.14, cloud=0.0, wind=22.41, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:51:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:52:24.430 [DEBUG] [Thread-202979] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:52:24.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:52:24.528 [DEBUG] [Thread-202982] [transport.py] [_log()] starting thread (client mode): 0xa81d4280
2026-02-15T10:52:24.528 [DEBUG] [Thread-202982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:52:24.547 [DEBUG] [Thread-202982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:52:24.548 [INFO] [Thread-202982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:52:24.560 [DEBUG] [Thread-202982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:52:24.560 [DEBUG] [Thread-202982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] client lang: <none>
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] server lang: <none>
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] kex follows: False
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] Compression: none
2026-02-15T10:52:24.561 [DEBUG] [Thread-202982] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:52:24.624 [DEBUG] [Thread-202982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:52:24.624 [DEBUG] [Thread-202982] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:52:24.625 [DEBUG] [Thread-202982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:52:24.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:52:24.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:52:24.692 [DEBUG] [Thread-202982] [transport.py] [_log()] userauth is OK
2026-02-15T10:52:24.692 [DEBUG] [Thread-202982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:52:24.692 [DEBUG] [Thread-202982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:52:24.692 [DEBUG] [Thread-202982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:52:24.692 [DEBUG] [Thread-202982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:52:24.717 [INFO] [Thread-202982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:52:24.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:52:24.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:52:25.640 [DEBUG] [Thread-202982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:52:25.640 [DEBUG] [Thread-202982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:52:25.688 [DEBUG] [Thread-202982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:52:25.689 [DEBUG] [Thread-202982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:52:25.698 [DEBUG] [Thread-202982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:52:25.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:52:25.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:52:25.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:52:25.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:52:25.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:52:25.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:52:25.734 [DEBUG] [Thread-202982] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:52:35.987 [DEBUG] [Thread-202984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:43.526 [DEBUG] [Thread-202985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:51.051 [DEBUG] [Thread-202986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:52:55.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:52:55.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:52:55.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:52:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 52, 40), 16.92, 31.69, 0.0, 20.82, 16.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:52:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:52:40
2026-02-15T10:52:58.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:52:58.232 [DEBUG] [Thread-202987] [transport.py] [_log()] starting thread (client mode): 0xa81d65c0
2026-02-15T10:52:58.232 [DEBUG] [Thread-202987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:52:58.254 [DEBUG] [Thread-202987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:52:58.255 [INFO] [Thread-202987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:52:58.257 [DEBUG] [Thread-202987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] client lang: <none>
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] server lang: <none>
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] kex follows: False
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] Compression: none
2026-02-15T10:52:58.258 [DEBUG] [Thread-202987] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:52:58.274 [DEBUG] [Thread-202987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:52:58.274 [DEBUG] [Thread-202987] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:52:58.275 [DEBUG] [Thread-202987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:52:58.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:52:58.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:52:58.277 [DEBUG] [Thread-202987] [transport.py] [_log()] userauth is OK
2026-02-15T10:52:58.277 [DEBUG] [Thread-202987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:52:58.277 [DEBUG] [Thread-202987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:52:58.277 [DEBUG] [Thread-202987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:52:58.277 [DEBUG] [Thread-202987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:52:58.302 [INFO] [Thread-202987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:52:58.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:52:58.913 [DEBUG] [Thread-202987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:52:58.913 [DEBUG] [Thread-202987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:52:58.914 [DEBUG] [Thread-202987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:52:58.954 [DEBUG] [Thread-202987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:52:58.954 [DEBUG] [Thread-202987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:52:58.957 [DEBUG] [Thread-202987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:52:58.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:52:58.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:52:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:52:58.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:52:58.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:52:58.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:52:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:52:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:52:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:52:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.369891 -999.00  +16.50  20.75     36   +1.40 1 1 1 1 1   888    0 17.98 200.05 ----- 20.8 20.8 137.0 24.3 23.4 -27.3 22.2 -27.7 21.1 -27.1 22.1 -27.5
2026-02-15T10:52:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:52:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:52:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.369891
2026-02-15T10:52:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:52:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:52:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:52:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:52:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:52:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:52:40', tmtdew=16.92, humidity=31.69, cloud=0.0, wind=20.82, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:52:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:52:58.984 [DEBUG] [Thread-202987] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:52:59.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:52:59.081 [DEBUG] [Thread-202990] [transport.py] [_log()] starting thread (client mode): 0xa5740880
2026-02-15T10:52:59.081 [DEBUG] [Thread-202990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:52:59.101 [DEBUG] [Thread-202990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:52:59.102 [INFO] [Thread-202990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:52:59.110 [DEBUG] [Thread-202990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:52:59.110 [DEBUG] [Thread-202990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:52:59.110 [DEBUG] [Thread-202990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:52:59.110 [DEBUG] [Thread-202990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:59.111 [DEBUG] [Thread-202990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:52:59.111 [DEBUG] [Thread-202990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:59.111 [DEBUG] [Thread-202990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:52:59.111 [DEBUG] [Thread-202990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] client lang: <none>
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] server lang: <none>
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] kex follows: False
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:52:59.112 [DEBUG] [Thread-202990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:52:59.113 [DEBUG] [Thread-202990] [transport.py] [_log()] Compression: none
2026-02-15T10:52:59.113 [DEBUG] [Thread-202990] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:52:59.167 [DEBUG] [Thread-202990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:52:59.167 [DEBUG] [Thread-202990] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:52:59.168 [DEBUG] [Thread-202990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:52:59.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:52:59.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:52:59.225 [DEBUG] [Thread-202990] [transport.py] [_log()] userauth is OK
2026-02-15T10:52:59.225 [DEBUG] [Thread-202990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:52:59.225 [DEBUG] [Thread-202990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:52:59.225 [DEBUG] [Thread-202990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:52:59.225 [DEBUG] [Thread-202990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:52:59.245 [INFO] [Thread-202990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:52:59.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:52:59.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:53:00.134 [DEBUG] [Thread-202990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:53:00.135 [DEBUG] [Thread-202990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:53:00.182 [DEBUG] [Thread-202990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:53:00.183 [DEBUG] [Thread-202990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:53:00.192 [DEBUG] [Thread-202990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:53:00.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:53:00.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:53:00.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:53:00.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:53:00.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:53:00.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:53:00.228 [DEBUG] [Thread-202990] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:53:06.091 [DEBUG] [Thread-202992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:53:10.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:53:10.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:53:21.149 [DEBUG] [Thread-202993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:53:30.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:53:30.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:53:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:53:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 53, 16), 16.09, 33.38, 0.0, 21.32, 15.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:53:32.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:53:16
2026-02-15T10:53:32.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:53:32.720 [DEBUG] [Thread-202994] [transport.py] [_log()] starting thread (client mode): 0xa2d00040
2026-02-15T10:53:32.721 [DEBUG] [Thread-202994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:53:32.741 [DEBUG] [Thread-202994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:53:32.741 [INFO] [Thread-202994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:53:32.744 [DEBUG] [Thread-202994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:53:32.744 [DEBUG] [Thread-202994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] client lang: <none>
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] server lang: <none>
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] kex follows: False
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] Compression: none
2026-02-15T10:53:32.745 [DEBUG] [Thread-202994] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:53:32.763 [DEBUG] [Thread-202994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:53:32.764 [DEBUG] [Thread-202994] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:53:32.764 [DEBUG] [Thread-202994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:53:32.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:53:32.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:53:32.767 [DEBUG] [Thread-202994] [transport.py] [_log()] userauth is OK
2026-02-15T10:53:32.767 [DEBUG] [Thread-202994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:53:32.767 [DEBUG] [Thread-202994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:53:32.767 [DEBUG] [Thread-202994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:53:32.767 [DEBUG] [Thread-202994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:53:32.804 [INFO] [Thread-202994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:53:32.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:53:33.435 [DEBUG] [Thread-202994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:53:33.435 [DEBUG] [Thread-202994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:53:33.435 [DEBUG] [Thread-202994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:53:33.476 [DEBUG] [Thread-202994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:53:33.477 [DEBUG] [Thread-202994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:53:33.480 [DEBUG] [Thread-202994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:53:33.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:53:33.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:53:33.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:53:33.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:53:33.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:53:33.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:53:33.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:53:33.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:53:33.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:53:33.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.370238 -999.00  +16.40  17.45     38   +2.00 1 1 1 1 1   888    0 17.99 198.21 ----- 17.4 17.4 127.8 28.3 23.4 -28.9 22.4 -26.5 21.2 -25.8 22.0 -27.2
2026-02-15T10:53:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:53:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:53:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.370238
2026-02-15T10:53:33.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:53:33.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:53:33.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:53:33.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:53:33.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:53:33.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:53:16', tmtdew=16.09, humidity=33.38, cloud=0.0, wind=21.32, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:53:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:53:33.509 [DEBUG] [Thread-202994] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:53:33.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:53:33.611 [DEBUG] [Thread-202997] [transport.py] [_log()] starting thread (client mode): 0xa2d137f0
2026-02-15T10:53:33.611 [DEBUG] [Thread-202997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:53:33.626 [DEBUG] [Thread-202997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:53:33.626 [INFO] [Thread-202997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:53:33.634 [DEBUG] [Thread-202997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] client lang: <none>
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] server lang: <none>
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] kex follows: False
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] Compression: none
2026-02-15T10:53:33.635 [DEBUG] [Thread-202997] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:53:33.694 [DEBUG] [Thread-202997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:53:33.695 [DEBUG] [Thread-202997] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:53:33.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:53:33.696 [DEBUG] [Thread-202997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:53:33.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:53:33.749 [DEBUG] [Thread-202997] [transport.py] [_log()] userauth is OK
2026-02-15T10:53:33.750 [DEBUG] [Thread-202997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:53:33.750 [DEBUG] [Thread-202997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:53:33.750 [DEBUG] [Thread-202997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:53:33.750 [DEBUG] [Thread-202997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:53:33.771 [INFO] [Thread-202997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:53:33.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:53:33.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:53:34.609 [DEBUG] [Thread-202997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:53:34.609 [DEBUG] [Thread-202997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:53:34.658 [DEBUG] [Thread-202997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:53:34.658 [DEBUG] [Thread-202997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:53:34.669 [DEBUG] [Thread-202997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:53:34.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:53:34.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:53:34.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:53:34.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:53:34.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:53:34.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:53:34.706 [DEBUG] [Thread-202997] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:53:36.185 [DEBUG] [Thread-202999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:53:43.590 [DEBUG] [Thread-203000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:53:51.249 [DEBUG] [Thread-203001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:04.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:54:04.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:54:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:54:06.290 [DEBUG] [Thread-203002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:06.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 53, 52), 16.16, 33.45, 0.0, 24.49, 15.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:54:06.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:53:52
2026-02-15T10:54:07.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:54:07.401 [DEBUG] [Thread-203003] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-15T10:54:07.402 [DEBUG] [Thread-203003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:54:07.421 [DEBUG] [Thread-203003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:54:07.421 [INFO] [Thread-203003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:54:07.421 [DEBUG] [Thread-203003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] client lang: <none>
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] server lang: <none>
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] kex follows: False
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] Compression: none
2026-02-15T10:54:07.422 [DEBUG] [Thread-203003] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:54:07.430 [DEBUG] [Thread-203003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:54:07.431 [DEBUG] [Thread-203003] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:54:07.431 [DEBUG] [Thread-203003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:54:07.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:54:07.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:54:07.432 [DEBUG] [Thread-203003] [transport.py] [_log()] userauth is OK
2026-02-15T10:54:07.433 [DEBUG] [Thread-203003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:54:07.433 [DEBUG] [Thread-203003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:54:07.433 [DEBUG] [Thread-203003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:54:07.433 [DEBUG] [Thread-203003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:54:07.444 [INFO] [Thread-203003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:54:07.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:54:08.035 [DEBUG] [Thread-203003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:54:08.036 [DEBUG] [Thread-203003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:54:08.036 [DEBUG] [Thread-203003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:54:08.076 [DEBUG] [Thread-203003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:54:08.077 [DEBUG] [Thread-203003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:54:08.080 [DEBUG] [Thread-203003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:54:08.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:54:08.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:54:08.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:54:08.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:54:08.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:54:08.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:54:08.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:54:08.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:54:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:54:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.370585 -999.00  +17.00  19.58     36   +1.90 1 1 1 1 1   888    0 18.39 202.71 ----- 19.6 19.6 122.0 26.0 23.5 -27.8 22.6 -26.7 21.4 -25.9 22.3 -25.9
2026-02-15T10:54:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:54:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:54:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.370585
2026-02-15T10:54:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:54:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:54:08.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:54:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:54:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:54:08.106 [DEBUG] [Thread-203003] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:54:08.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:53:52', tmtdew=16.16, humidity=33.45, cloud=0.0, wind=24.49, temperature=15.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:53:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:54:08.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:54:08.207 [DEBUG] [Thread-203006] [transport.py] [_log()] starting thread (client mode): 0xa5743190
2026-02-15T10:54:08.208 [DEBUG] [Thread-203006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:54:08.227 [DEBUG] [Thread-203006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:54:08.227 [INFO] [Thread-203006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:54:08.235 [DEBUG] [Thread-203006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] client lang: <none>
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] server lang: <none>
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] kex follows: False
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:54:08.236 [DEBUG] [Thread-203006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:54:08.237 [DEBUG] [Thread-203006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:54:08.237 [DEBUG] [Thread-203006] [transport.py] [_log()] Compression: none
2026-02-15T10:54:08.237 [DEBUG] [Thread-203006] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:54:08.298 [DEBUG] [Thread-203006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:54:08.298 [DEBUG] [Thread-203006] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:54:08.299 [DEBUG] [Thread-203006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:54:08.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:54:08.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:54:08.353 [DEBUG] [Thread-203006] [transport.py] [_log()] userauth is OK
2026-02-15T10:54:08.354 [DEBUG] [Thread-203006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:54:08.354 [DEBUG] [Thread-203006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:54:08.354 [DEBUG] [Thread-203006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:54:08.354 [DEBUG] [Thread-203006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:54:08.372 [INFO] [Thread-203006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:54:08.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:54:08.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:54:09.187 [DEBUG] [Thread-203006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:54:09.187 [DEBUG] [Thread-203006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:54:09.236 [DEBUG] [Thread-203006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:54:09.236 [DEBUG] [Thread-203006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:54:09.245 [DEBUG] [Thread-203006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:54:09.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:54:09.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:54:09.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:54:09.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:54:09.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:54:09.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:54:09.285 [DEBUG] [Thread-203006] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:54:11.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:11.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:21.328 [DEBUG] [Thread-203008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:36.385 [DEBUG] [Thread-203009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:39.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:54:39.303 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:54:39.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:54:41.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 54, 28), 16.08, 33.65, 0.0, 24.65, 15.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:54:41.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:54:28
2026-02-15T10:54:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:54:41.732 [DEBUG] [Thread-203010] [transport.py] [_log()] starting thread (client mode): 0xa57c2710
2026-02-15T10:54:41.732 [DEBUG] [Thread-203010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:54:41.752 [DEBUG] [Thread-203010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:54:41.752 [INFO] [Thread-203010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:41.755 [DEBUG] [Thread-203010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] client lang: <none>
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] server lang: <none>
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] kex follows: False
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] Compression: none
2026-02-15T10:54:41.756 [DEBUG] [Thread-203010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:54:41.775 [DEBUG] [Thread-203010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:54:41.776 [DEBUG] [Thread-203010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:54:41.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:54:41.777 [DEBUG] [Thread-203010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:54:41.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:54:41.817 [DEBUG] [Thread-203010] [transport.py] [_log()] userauth is OK
2026-02-15T10:54:41.818 [DEBUG] [Thread-203010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:54:41.818 [DEBUG] [Thread-203010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:54:41.818 [DEBUG] [Thread-203010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:54:41.818 [DEBUG] [Thread-203010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:54:41.839 [INFO] [Thread-203010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:54:41.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:54:42.453 [DEBUG] [Thread-203010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:54:42.453 [DEBUG] [Thread-203010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:54:42.453 [DEBUG] [Thread-203010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:54:42.494 [DEBUG] [Thread-203010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:54:42.495 [DEBUG] [Thread-203010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:54:42.498 [DEBUG] [Thread-203010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:54:42.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:54:42.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:54:42.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:54:42.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:54:42.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:54:42.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:54:42.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:54:42.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:54:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:54:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.370932 -999.00  +17.00  21.19     36   +2.20 1 1 1 1 1   888    0 18.10 199.20 ----- 21.2 21.2 131.2 24.8 23.7 -27.1 22.8 -27.4 21.6 -26.5 22.4 -25.9
2026-02-15T10:54:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:54:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:54:42.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.370932
2026-02-15T10:54:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:54:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:54:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:54:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:54:42.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:54:42.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:54:28', tmtdew=16.08, humidity=33.65, cloud=0.0, wind=24.65, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:54:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:54:42.524 [DEBUG] [Thread-203010] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:54:42.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:54:42.620 [DEBUG] [Thread-203013] [transport.py] [_log()] starting thread (client mode): 0xa57c28f0
2026-02-15T10:54:42.621 [DEBUG] [Thread-203013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:54:42.637 [DEBUG] [Thread-203013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:54:42.637 [INFO] [Thread-203013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:54:42.644 [DEBUG] [Thread-203013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] client lang: <none>
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] server lang: <none>
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] kex follows: False
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:54:42.645 [DEBUG] [Thread-203013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:54:42.646 [DEBUG] [Thread-203013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:54:42.646 [DEBUG] [Thread-203013] [transport.py] [_log()] Compression: none
2026-02-15T10:54:42.646 [DEBUG] [Thread-203013] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:54:42.700 [DEBUG] [Thread-203013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:54:42.700 [DEBUG] [Thread-203013] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:54:42.700 [DEBUG] [Thread-203013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:54:42.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:54:42.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:54:42.758 [DEBUG] [Thread-203013] [transport.py] [_log()] userauth is OK
2026-02-15T10:54:42.758 [DEBUG] [Thread-203013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:54:42.758 [DEBUG] [Thread-203013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:54:42.758 [DEBUG] [Thread-203013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:54:42.758 [DEBUG] [Thread-203013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:54:42.777 [INFO] [Thread-203013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:54:42.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:54:42.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:54:43.627 [DEBUG] [Thread-203013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:54:43.627 [DEBUG] [Thread-203013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:54:43.643 [DEBUG] [Thread-203015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:54:43.676 [DEBUG] [Thread-203013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:54:43.676 [DEBUG] [Thread-203013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:54:43.685 [DEBUG] [Thread-203013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:54:43.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:54:43.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:54:43.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:54:43.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:54:43.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:54:43.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:54:43.721 [DEBUG] [Thread-203013] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:54:51.420 [DEBUG] [Thread-203016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:06.469 [DEBUG] [Thread-203017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:11.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:11.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:55:13.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:55:13.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:55:15.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 55, 3), 16.22, 33.35, 0.0, 22.39, 15.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:55:15.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:55:03
2026-02-15T10:55:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:55:16.129 [DEBUG] [Thread-203018] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-15T10:55:16.129 [DEBUG] [Thread-203018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:55:16.150 [DEBUG] [Thread-203018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:55:16.150 [INFO] [Thread-203018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:16.153 [DEBUG] [Thread-203018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] client lang: <none>
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] server lang: <none>
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] kex follows: False
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] Compression: none
2026-02-15T10:55:16.154 [DEBUG] [Thread-203018] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:55:16.171 [DEBUG] [Thread-203018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:55:16.172 [DEBUG] [Thread-203018] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:55:16.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:55:16.173 [DEBUG] [Thread-203018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:55:16.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:55:16.175 [DEBUG] [Thread-203018] [transport.py] [_log()] userauth is OK
2026-02-15T10:55:16.175 [DEBUG] [Thread-203018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:55:16.175 [DEBUG] [Thread-203018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:55:16.175 [DEBUG] [Thread-203018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:55:16.175 [DEBUG] [Thread-203018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:55:16.201 [INFO] [Thread-203018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:55:16.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:55:19.467 [DEBUG] [Thread-203018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:55:19.468 [DEBUG] [Thread-203018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:55:19.468 [DEBUG] [Thread-203018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:55:19.508 [DEBUG] [Thread-203018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:55:19.509 [DEBUG] [Thread-203018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:55:19.512 [DEBUG] [Thread-203018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:55:19.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:55:19.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:55:19.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:55:19.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:55:19.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:55:19.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:55:19.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:55:19.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:55:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:55:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.371280 -999.00  +16.60  16.47     36   +1.70 1 1 1 1 1   888    0 18.75 205.55 ----- 16.5 16.5 126.8 21.2 23.8 -28.5 22.8 -27.3 21.6 -26.1 22.4 -27.4
2026-02-15T10:55:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:55:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:55:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.371280
2026-02-15T10:55:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:55:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:55:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:55:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:55:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:55:19.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:55:03', tmtdew=16.22, humidity=33.35, cloud=0.0, wind=22.39, temperature=15.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:54:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:55:19.551 [DEBUG] [Thread-203018] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:55:19.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:55:19.647 [DEBUG] [Thread-203021] [transport.py] [_log()] starting thread (client mode): 0xa2d03700
2026-02-15T10:55:19.647 [DEBUG] [Thread-203021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:55:19.662 [DEBUG] [Thread-203021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:55:19.662 [INFO] [Thread-203021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:55:19.669 [DEBUG] [Thread-203021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] client lang: <none>
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] server lang: <none>
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] kex follows: False
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] Compression: none
2026-02-15T10:55:19.670 [DEBUG] [Thread-203021] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:55:19.730 [DEBUG] [Thread-203021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:55:19.731 [DEBUG] [Thread-203021] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:55:19.731 [DEBUG] [Thread-203021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:55:19.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:55:19.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:55:19.786 [DEBUG] [Thread-203021] [transport.py] [_log()] userauth is OK
2026-02-15T10:55:19.786 [DEBUG] [Thread-203021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:55:19.786 [DEBUG] [Thread-203021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:55:19.786 [DEBUG] [Thread-203021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:55:19.786 [DEBUG] [Thread-203021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:55:19.805 [INFO] [Thread-203021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:55:19.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:55:19.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:55:20.659 [DEBUG] [Thread-203021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:55:20.660 [DEBUG] [Thread-203021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:55:20.707 [DEBUG] [Thread-203021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:55:20.708 [DEBUG] [Thread-203021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:55:20.717 [DEBUG] [Thread-203021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:55:20.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:55:20.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:55:20.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:55:20.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:55:20.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:55:20.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:55:20.753 [DEBUG] [Thread-203021] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:55:21.506 [DEBUG] [Thread-203023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:36.559 [DEBUG] [Thread-203024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:43.681 [DEBUG] [Thread-203025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:55:50.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:55:50.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:55:51.593 [DEBUG] [Thread-203026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:55:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 55, 39), 17.07, 31.3, 0.0, 19.9, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:55:53.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:55:39
2026-02-15T10:55:53.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:55:53.741 [DEBUG] [Thread-203027] [transport.py] [_log()] starting thread (client mode): 0xa57e0250
2026-02-15T10:55:53.741 [DEBUG] [Thread-203027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:55:53.761 [DEBUG] [Thread-203027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:55:53.761 [INFO] [Thread-203027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:55:53.765 [DEBUG] [Thread-203027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:55:53.765 [DEBUG] [Thread-203027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] client lang: <none>
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] server lang: <none>
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] kex follows: False
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] Compression: none
2026-02-15T10:55:53.766 [DEBUG] [Thread-203027] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:55:53.786 [DEBUG] [Thread-203027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:55:53.786 [DEBUG] [Thread-203027] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:55:53.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:55:53.788 [DEBUG] [Thread-203027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:55:53.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:55:53.789 [DEBUG] [Thread-203027] [transport.py] [_log()] userauth is OK
2026-02-15T10:55:53.790 [DEBUG] [Thread-203027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:55:53.790 [DEBUG] [Thread-203027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:55:53.790 [DEBUG] [Thread-203027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:55:53.790 [DEBUG] [Thread-203027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:55:53.808 [INFO] [Thread-203027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:55:53.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:55:54.426 [DEBUG] [Thread-203027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:55:54.426 [DEBUG] [Thread-203027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:55:54.426 [DEBUG] [Thread-203027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:55:54.467 [DEBUG] [Thread-203027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:55:54.467 [DEBUG] [Thread-203027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:55:54.471 [DEBUG] [Thread-203027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:55:54.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:55:54.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:55:54.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:55:54.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:55:54.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:55:54.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:55:54.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:55:54.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:55:54.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:55:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.371626 -999.00  +16.30  18.62     38   +2.00 1 1 1 1 1   888    0 18.32 192.31 ----- 18.6 18.6 130.8 29.6 23.9 -28.4 22.8 -27.5 21.6 -27.5 22.5 -28.1
2026-02-15T10:55:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:55:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:55:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.371626
2026-02-15T10:55:54.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:55:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:55:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:55:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:55:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:55:54.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:55:39', tmtdew=17.07, humidity=31.3, cloud=0.0, wind=19.9, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:55:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:55:54.499 [DEBUG] [Thread-203027] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:55:54.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:55:54.597 [DEBUG] [Thread-203030] [transport.py] [_log()] starting thread (client mode): 0xa2d10b50
2026-02-15T10:55:54.597 [DEBUG] [Thread-203030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:55:54.612 [DEBUG] [Thread-203030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:55:54.613 [INFO] [Thread-203030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:55:54.620 [DEBUG] [Thread-203030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:55:54.621 [DEBUG] [Thread-203030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] client lang: <none>
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] server lang: <none>
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] kex follows: False
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:55:54.622 [DEBUG] [Thread-203030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:55:54.623 [DEBUG] [Thread-203030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:55:54.623 [DEBUG] [Thread-203030] [transport.py] [_log()] Compression: none
2026-02-15T10:55:54.623 [DEBUG] [Thread-203030] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:55:54.679 [DEBUG] [Thread-203030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:55:54.680 [DEBUG] [Thread-203030] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:55:54.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:55:54.681 [DEBUG] [Thread-203030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:55:54.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:55:54.738 [DEBUG] [Thread-203030] [transport.py] [_log()] userauth is OK
2026-02-15T10:55:54.738 [DEBUG] [Thread-203030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:55:54.739 [DEBUG] [Thread-203030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:55:54.739 [DEBUG] [Thread-203030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:55:54.739 [DEBUG] [Thread-203030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:55:54.758 [INFO] [Thread-203030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:55:54.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:55:54.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:55:55.583 [DEBUG] [Thread-203030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:55:55.584 [DEBUG] [Thread-203030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:55:55.631 [DEBUG] [Thread-203030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:55:55.632 [DEBUG] [Thread-203030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:55:55.641 [DEBUG] [Thread-203030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:55:55.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:55:55.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:55:55.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:55:55.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:55:55.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:55:55.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:55:55.678 [DEBUG] [Thread-203030] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:56:06.626 [DEBUG] [Thread-203032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:56:11.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:56:11.294 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:56:21.680 [DEBUG] [Thread-203033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:56:25.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:56:25.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:56:25.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:56:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 56, 15), 16.63, 32.35, 0.0, 22.71, 16.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:56:27.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:56:15
2026-02-15T10:56:27.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:56:28.067 [DEBUG] [Thread-203034] [transport.py] [_log()] starting thread (client mode): 0xa575b7c0
2026-02-15T10:56:28.067 [DEBUG] [Thread-203034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:56:28.086 [DEBUG] [Thread-203034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:56:28.086 [INFO] [Thread-203034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:56:28.089 [DEBUG] [Thread-203034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] client lang: <none>
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] server lang: <none>
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] kex follows: False
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] Compression: none
2026-02-15T10:56:28.090 [DEBUG] [Thread-203034] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:56:28.098 [DEBUG] [Thread-203034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:56:28.098 [DEBUG] [Thread-203034] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:56:28.099 [DEBUG] [Thread-203034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:56:28.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:56:28.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:56:28.104 [DEBUG] [Thread-203034] [transport.py] [_log()] userauth is OK
2026-02-15T10:56:28.104 [DEBUG] [Thread-203034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:56:28.104 [DEBUG] [Thread-203034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:56:28.104 [DEBUG] [Thread-203034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:56:28.104 [DEBUG] [Thread-203034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:56:28.122 [INFO] [Thread-203034] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:56:28.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:56:28.763 [DEBUG] [Thread-203034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:56:28.764 [DEBUG] [Thread-203034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:56:28.764 [DEBUG] [Thread-203034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:56:28.804 [DEBUG] [Thread-203034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:56:28.804 [DEBUG] [Thread-203034] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:56:28.808 [DEBUG] [Thread-203034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:56:28.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:56:28.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:56:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:56:28.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:56:28.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:56:28.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:56:28.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:56:28.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:56:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:56:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.371974 -999.00  +16.00  18.78     39   +2.20 1 1 1 1 1   888    0 18.15 183.60 ----- 18.8 18.8 144.0 24.3 23.8 -28.3 22.8 -28.0 21.5 -27.6 22.4 -28.5
2026-02-15T10:56:28.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:56:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:56:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.371974
2026-02-15T10:56:28.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:56:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:56:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:56:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:56:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:56:28.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:56:15', tmtdew=16.63, humidity=32.35, cloud=0.0, wind=22.71, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:55:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:56:28.834 [DEBUG] [Thread-203034] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:56:28.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:56:28.929 [DEBUG] [Thread-203037] [transport.py] [_log()] starting thread (client mode): 0xa2db5180
2026-02-15T10:56:28.929 [DEBUG] [Thread-203037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:56:28.945 [DEBUG] [Thread-203037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:56:28.945 [INFO] [Thread-203037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:56:28.953 [DEBUG] [Thread-203037] [transport.py] [_log()] client lang: <none>
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] server lang: <none>
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] kex follows: False
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] Compression: none
2026-02-15T10:56:28.954 [DEBUG] [Thread-203037] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:56:29.018 [DEBUG] [Thread-203037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:56:29.018 [DEBUG] [Thread-203037] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:56:29.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:56:29.020 [DEBUG] [Thread-203037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:56:29.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:56:29.074 [DEBUG] [Thread-203037] [transport.py] [_log()] userauth is OK
2026-02-15T10:56:29.075 [DEBUG] [Thread-203037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:56:29.075 [DEBUG] [Thread-203037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:56:29.075 [DEBUG] [Thread-203037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:56:29.075 [DEBUG] [Thread-203037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:56:29.094 [INFO] [Thread-203037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:56:29.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:56:29.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:56:29.978 [DEBUG] [Thread-203037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:56:29.978 [DEBUG] [Thread-203037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:56:30.026 [DEBUG] [Thread-203037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:56:30.026 [DEBUG] [Thread-203037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:56:30.036 [DEBUG] [Thread-203037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:56:30.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:56:30.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:56:30.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:56:30.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:56:30.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:56:30.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:56:30.076 [DEBUG] [Thread-203037] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:56:36.715 [DEBUG] [Thread-203039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:56:43.714 [DEBUG] [Thread-203040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:56:51.774 [DEBUG] [Thread-203041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:57:00.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:57:00.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:57:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 56, 50), 15.68, 34.68, 0.0, 19.74, 16.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:57:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:56:50
2026-02-15T10:57:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:57:02.470 [DEBUG] [Thread-203042] [transport.py] [_log()] starting thread (client mode): 0xa57422c0
2026-02-15T10:57:02.470 [DEBUG] [Thread-203042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:57:02.481 [DEBUG] [Thread-203042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:57:02.481 [INFO] [Thread-203042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] client lang: <none>
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] server lang: <none>
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] kex follows: False
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] Compression: none
2026-02-15T10:57:02.482 [DEBUG] [Thread-203042] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:57:02.491 [DEBUG] [Thread-203042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:57:02.491 [DEBUG] [Thread-203042] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:57:02.491 [DEBUG] [Thread-203042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:57:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:57:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:57:02.491 [DEBUG] [Thread-203042] [transport.py] [_log()] userauth is OK
2026-02-15T10:57:02.491 [DEBUG] [Thread-203042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:57:02.492 [DEBUG] [Thread-203042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:57:02.492 [DEBUG] [Thread-203042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:57:02.492 [DEBUG] [Thread-203042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:57:02.500 [INFO] [Thread-203042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:57:02.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:57:03.231 [DEBUG] [Thread-203042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:57:03.231 [DEBUG] [Thread-203042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:57:03.232 [DEBUG] [Thread-203042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:57:03.273 [DEBUG] [Thread-203042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:57:03.273 [DEBUG] [Thread-203042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:57:03.276 [DEBUG] [Thread-203042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:57:03.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:57:03.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:57:03.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:57:03.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:57:03.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:57:03.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:57:03.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:57:03.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:57:03.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:57:03.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.372321 -999.00  +15.80  14.49     40   +2.40 1 1 1 1 1   888    0 18.21 181.59 ----- 14.5 14.5 126.6 23.1 23.8 -27.7 22.8 -27.2 21.6 -26.5 22.4 -26.8
2026-02-15T10:57:03.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:57:03.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:57:03.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.372321
2026-02-15T10:57:03.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:57:03.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:57:03.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:57:03.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:57:03.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:57:03.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:56:50', tmtdew=15.68, humidity=34.68, cloud=0.0, wind=19.74, temperature=16.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:56:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:57:03.302 [DEBUG] [Thread-203042] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:57:03.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:57:03.398 [DEBUG] [Thread-203045] [transport.py] [_log()] starting thread (client mode): 0xa5759d20
2026-02-15T10:57:03.399 [DEBUG] [Thread-203045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:57:03.415 [DEBUG] [Thread-203045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:57:03.415 [INFO] [Thread-203045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:57:03.432 [DEBUG] [Thread-203045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:57:03.432 [DEBUG] [Thread-203045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] client lang: <none>
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] server lang: <none>
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] kex follows: False
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:57:03.433 [DEBUG] [Thread-203045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:57:03.434 [DEBUG] [Thread-203045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:57:03.434 [DEBUG] [Thread-203045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:57:03.434 [DEBUG] [Thread-203045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:57:03.434 [DEBUG] [Thread-203045] [transport.py] [_log()] Compression: none
2026-02-15T10:57:03.434 [DEBUG] [Thread-203045] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:57:03.481 [DEBUG] [Thread-203045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:57:03.482 [DEBUG] [Thread-203045] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:57:03.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:57:03.483 [DEBUG] [Thread-203045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:57:03.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:57:03.538 [DEBUG] [Thread-203045] [transport.py] [_log()] userauth is OK
2026-02-15T10:57:03.538 [DEBUG] [Thread-203045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:57:03.538 [DEBUG] [Thread-203045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:57:03.538 [DEBUG] [Thread-203045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:57:03.538 [DEBUG] [Thread-203045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:57:03.557 [INFO] [Thread-203045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:57:03.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:57:03.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:57:04.430 [DEBUG] [Thread-203045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:57:04.430 [DEBUG] [Thread-203045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:57:04.478 [DEBUG] [Thread-203045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:57:04.479 [DEBUG] [Thread-203045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:57:04.488 [DEBUG] [Thread-203045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:57:04.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:57:04.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:57:04.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:57:04.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:57:04.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:57:04.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:57:04.524 [DEBUG] [Thread-203045] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:57:06.814 [DEBUG] [Thread-203047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:11.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:11.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:21.866 [DEBUG] [Thread-203048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:34.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:57:34.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:57:34.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:57:36.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 57, 25), 15.48, 35.11, 0.0, 18.58, 15.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:57:36.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:57:25
2026-02-15T10:57:36.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:57:36.860 [DEBUG] [Thread-203049] [transport.py] [_log()] starting thread (client mode): 0xa2d11600
2026-02-15T10:57:36.860 [DEBUG] [Thread-203049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:57:36.880 [DEBUG] [Thread-203049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:57:36.880 [INFO] [Thread-203049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] client lang: <none>
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] server lang: <none>
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] kex follows: False
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] Compression: none
2026-02-15T10:57:36.883 [DEBUG] [Thread-203049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:57:36.902 [DEBUG] [Thread-203051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:36.903 [DEBUG] [Thread-203049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:57:36.904 [DEBUG] [Thread-203049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:57:36.905 [DEBUG] [Thread-203049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:57:36.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:57:36.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:57:36.907 [DEBUG] [Thread-203049] [transport.py] [_log()] userauth is OK
2026-02-15T10:57:36.907 [DEBUG] [Thread-203049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:57:36.908 [DEBUG] [Thread-203049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:57:36.908 [DEBUG] [Thread-203049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:57:36.908 [DEBUG] [Thread-203049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:57:36.931 [INFO] [Thread-203049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:57:36.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:57:37.556 [DEBUG] [Thread-203049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:57:37.557 [DEBUG] [Thread-203049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:57:37.557 [DEBUG] [Thread-203049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:57:37.597 [DEBUG] [Thread-203049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:57:37.597 [DEBUG] [Thread-203049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:57:37.600 [DEBUG] [Thread-203049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:57:37.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:57:37.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:57:37.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:57:37.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:57:37.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:57:37.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:57:37.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:57:37.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:57:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:57:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.373016 -999.00  +16.10  27.22     40   +2.60 1 1 1 1 1   888    0 17.08 148.77 ----- 27.2 27.2 130.0 34.1 23.9 -28.5 22.8 -28.8 21.6 -27.8 22.5 -28.5
2026-02-15T10:57:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:57:37.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:57:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.373016
2026-02-15T10:57:37.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:57:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:57:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:57:37.629 [DEBUG] [Thread-203049] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:57:37.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:57:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:57:37.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:57:25', tmtdew=15.48, humidity=35.11, cloud=0.0, wind=18.58, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:57:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:57:37.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:57:37.726 [DEBUG] [Thread-203053] [transport.py] [_log()] starting thread (client mode): 0xa2db7d00
2026-02-15T10:57:37.726 [DEBUG] [Thread-203053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:57:37.740 [DEBUG] [Thread-203053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:57:37.740 [INFO] [Thread-203053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] client lang: <none>
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] server lang: <none>
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] kex follows: False
2026-02-15T10:57:37.748 [DEBUG] [Thread-203053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:57:37.749 [DEBUG] [Thread-203053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:57:37.749 [DEBUG] [Thread-203053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:57:37.749 [DEBUG] [Thread-203053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:57:37.749 [DEBUG] [Thread-203053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:57:37.749 [DEBUG] [Thread-203053] [transport.py] [_log()] Compression: none
2026-02-15T10:57:37.749 [DEBUG] [Thread-203053] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:57:37.805 [DEBUG] [Thread-203053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:57:37.806 [DEBUG] [Thread-203053] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:57:37.807 [DEBUG] [Thread-203053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:57:37.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:57:37.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:57:37.862 [DEBUG] [Thread-203053] [transport.py] [_log()] userauth is OK
2026-02-15T10:57:37.862 [DEBUG] [Thread-203053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:57:37.862 [DEBUG] [Thread-203053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:57:37.863 [DEBUG] [Thread-203053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:57:37.863 [DEBUG] [Thread-203053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:57:37.887 [INFO] [Thread-203053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:57:37.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:57:37.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:57:38.759 [DEBUG] [Thread-203053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:57:38.759 [DEBUG] [Thread-203053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:57:38.807 [DEBUG] [Thread-203053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:57:38.808 [DEBUG] [Thread-203053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:57:38.817 [DEBUG] [Thread-203053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:57:38.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:57: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')
2026-02-15T10:57:38.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:57:38.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:57:38.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:57:38.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:57:38.853 [DEBUG] [Thread-203053] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:57:43.747 [DEBUG] [Thread-203055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:57:51.935 [DEBUG] [Thread-203056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:06.984 [DEBUG] [Thread-203057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:08.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:58:08.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:58:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:58:11.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 58), 15.59, 34.89, 0.0, 24.63, 16.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:58:11.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:58:00
2026-02-15T10:58:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:58:11.576 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:11.578 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:11.597 [DEBUG] [Thread-203058] [transport.py] [_log()] starting thread (client mode): 0xa5759ab0
2026-02-15T10:58:11.597 [DEBUG] [Thread-203058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:58:11.612 [DEBUG] [Thread-203058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:58:11.612 [INFO] [Thread-203058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:58:11.614 [DEBUG] [Thread-203058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] client lang: <none>
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] server lang: <none>
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] kex follows: False
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] Compression: none
2026-02-15T10:58:11.615 [DEBUG] [Thread-203058] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:58:11.623 [DEBUG] [Thread-203058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:58:11.623 [DEBUG] [Thread-203058] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:58:11.623 [DEBUG] [Thread-203058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:58:11.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:58:11.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:58:11.624 [DEBUG] [Thread-203058] [transport.py] [_log()] userauth is OK
2026-02-15T10:58:11.625 [DEBUG] [Thread-203058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:58:11.625 [DEBUG] [Thread-203058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:58:11.625 [DEBUG] [Thread-203058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:58:11.625 [DEBUG] [Thread-203058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:58:11.639 [INFO] [Thread-203058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:58:11.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:58:12.284 [DEBUG] [Thread-203058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:58:12.284 [DEBUG] [Thread-203058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:58:12.284 [DEBUG] [Thread-203058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:58:12.324 [DEBUG] [Thread-203058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:58:12.324 [DEBUG] [Thread-203058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:58:12.328 [DEBUG] [Thread-203058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:58:12.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:58:12.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:58:12.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:58:12.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:58:12.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:58:12.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:58:12.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:58:12.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:58:12.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:58:12.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.373363 -999.00  +15.70  18.45     40   +2.30 1 1 1 1 1   888    0 17.35 149.21 ----- 18.4 18.4 127.2 25.9 23.7 -28.6 22.9 -27.2 21.8 -26.1 22.5 -28.1
2026-02-15T10:58:12.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:58:12.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:58:12.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.373363
2026-02-15T10:58:12.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:58:12.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:58:12.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:58:12.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:58:12.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:58:12.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:58:00', tmtdew=15.59, humidity=34.89, cloud=0.0, wind=24.63, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:57:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:58:12.356 [DEBUG] [Thread-203058] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:58:12.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:58:12.463 [DEBUG] [Thread-203061] [transport.py] [_log()] starting thread (client mode): 0xa5759240
2026-02-15T10:58:12.464 [DEBUG] [Thread-203061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:58:12.478 [DEBUG] [Thread-203061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T10:58:12.478 [INFO] [Thread-203061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T10:58:12.486 [DEBUG] [Thread-203061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:58:12.486 [DEBUG] [Thread-203061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T10:58:12.486 [DEBUG] [Thread-203061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:58:12.486 [DEBUG] [Thread-203061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:58:12.486 [DEBUG] [Thread-203061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:58:12.486 [DEBUG] [Thread-203061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] client lang: <none>
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] server lang: <none>
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] kex follows: False
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:58:12.487 [DEBUG] [Thread-203061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:58:12.488 [DEBUG] [Thread-203061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:58:12.488 [DEBUG] [Thread-203061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:58:12.488 [DEBUG] [Thread-203061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:58:12.488 [DEBUG] [Thread-203061] [transport.py] [_log()] Compression: none
2026-02-15T10:58:12.488 [DEBUG] [Thread-203061] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:58:12.546 [DEBUG] [Thread-203061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:58:12.547 [DEBUG] [Thread-203061] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:58:12.547 [DEBUG] [Thread-203061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T10:58:12.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T10:58:12.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:58:12.602 [DEBUG] [Thread-203061] [transport.py] [_log()] userauth is OK
2026-02-15T10:58:12.602 [DEBUG] [Thread-203061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:58:12.602 [DEBUG] [Thread-203061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:58:12.602 [DEBUG] [Thread-203061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T10:58:12.602 [DEBUG] [Thread-203061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:58:12.627 [INFO] [Thread-203061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:58:12.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T10:58:12.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:58:13.451 [DEBUG] [Thread-203061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:58:13.451 [DEBUG] [Thread-203061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:58:13.499 [DEBUG] [Thread-203061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:58:13.499 [DEBUG] [Thread-203061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:58:13.508 [DEBUG] [Thread-203061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:58:13.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:58:13.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T10:58:13.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T10:58:13.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:58:13.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:58:13.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:58:13.545 [DEBUG] [Thread-203061] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:58:22.018 [DEBUG] [Thread-203063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:37.063 [DEBUG] [Thread-203064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T10:58:43.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T10:58:43.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T10:58:43.790 [DEBUG] [Thread-203065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:58:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 10, 58, 36), 16.66, 32.36, 0.0, 27.06, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T10:58:45.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 10:58:36
2026-02-15T10:58:45.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T10:58:45.944 [DEBUG] [Thread-203066] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T10:58:45.944 [DEBUG] [Thread-203066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T10:58:45.964 [DEBUG] [Thread-203066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T10:58:45.965 [INFO] [Thread-203066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] client lang: <none>
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] server lang: <none>
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] kex follows: False
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] Compression: none
2026-02-15T10:58:45.967 [DEBUG] [Thread-203066] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T10:58:45.986 [DEBUG] [Thread-203066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T10:58:45.986 [DEBUG] [Thread-203066] [transport.py] [_log()] Switch to new keys ...
2026-02-15T10:58:45.987 [DEBUG] [Thread-203066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T10:58:45.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T10:58:45.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T10:58:46.029 [DEBUG] [Thread-203066] [transport.py] [_log()] userauth is OK
2026-02-15T10:58:46.030 [DEBUG] [Thread-203066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T10:58:46.030 [DEBUG] [Thread-203066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T10:58:46.030 [DEBUG] [Thread-203066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T10:58:46.030 [DEBUG] [Thread-203066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T10:58:46.050 [INFO] [Thread-203066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T10:58:46.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T10:58:46.634 [DEBUG] [Thread-203066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T10:58:46.634 [DEBUG] [Thread-203066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T10:58:46.634 [DEBUG] [Thread-203066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T10:58:46.674 [DEBUG] [Thread-203066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T10:58:46.675 [DEBUG] [Thread-203066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T10:58:46.678 [DEBUG] [Thread-203066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T10:58:46.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T10:58:46.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T10:58:46.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T10:58:46.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T10:58:46.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T10:58:46.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T10:58:46.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T10:58:46.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T10:58:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T10:58:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.373710 -999.00  +16.10  10.25     40   +2.50 1 1 1 1 1   888    0 16.80 136.82 ----- 10.2 10.2 150.6 25.5 23.9 -28.7 22.9 -27.4 21.8 -26.6 22.7 -28.8
2026-02-15T10:58:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T10:58:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T10:58:46.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.373710
2026-02-15T10:58:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T10:58:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T10:58:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T10:58:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T10:58:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T10:58:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T10:58:36', tmtdew=16.66, humidity=32.36, cloud=0.0, wind=27.06, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T08:58:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T10:58:46.706 [DEBUG] [Thread-203066] [transport.py] [_log()] EOF in transport thread
2026-02-15T10:58:46.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T10:58:52.100 [DEBUG] [Thread-203069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:07.154 [DEBUG] [Thread-203070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:11.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:11.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:22.194 [DEBUG] [Thread-203071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:37.232 [DEBUG] [Thread-203072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:43.851 [DEBUG] [Thread-203073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T10:59:52.267 [DEBUG] [Thread-203074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:07.302 [DEBUG] [Thread-203075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:11.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:11.884 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:22.339 [DEBUG] [Thread-203076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:37.375 [DEBUG] [Thread-203077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:43.907 [DEBUG] [Thread-203078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:00:52.415 [DEBUG] [Thread-203079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:01.879 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T11:01:07.452 [DEBUG] [Thread-203080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:12.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:12.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:22.490 [DEBUG] [Thread-203081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:31.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:01:31.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:01:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:01:34.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 1, 1), 16.56, 32.23, 0.0, 20.17, 16.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:01:34.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:01:01
2026-02-15T11:01:34.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:01:34.717 [DEBUG] [Thread-203082] [transport.py] [_log()] starting thread (client mode): 0xa2d13280
2026-02-15T11:01:34.718 [DEBUG] [Thread-203082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:01:34.732 [DEBUG] [Thread-203082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:01:34.732 [INFO] [Thread-203082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] client lang: <none>
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] server lang: <none>
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] kex follows: False
2026-02-15T11:01:34.736 [DEBUG] [Thread-203082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:01:34.737 [DEBUG] [Thread-203082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:01:34.737 [DEBUG] [Thread-203082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:01:34.737 [DEBUG] [Thread-203082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:01:34.737 [DEBUG] [Thread-203082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:01:34.737 [DEBUG] [Thread-203082] [transport.py] [_log()] Compression: none
2026-02-15T11:01:34.737 [DEBUG] [Thread-203082] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:01:34.755 [DEBUG] [Thread-203082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:01:34.755 [DEBUG] [Thread-203082] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:01:34.756 [DEBUG] [Thread-203082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:01:34.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:01:34.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:01:34.758 [DEBUG] [Thread-203082] [transport.py] [_log()] userauth is OK
2026-02-15T11:01:34.758 [DEBUG] [Thread-203082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:01:34.758 [DEBUG] [Thread-203082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:01:34.758 [DEBUG] [Thread-203082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:01:34.758 [DEBUG] [Thread-203082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:01:34.777 [INFO] [Thread-203082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:01:34.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:01:35.418 [DEBUG] [Thread-203082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:01:35.419 [DEBUG] [Thread-203082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:01:35.419 [DEBUG] [Thread-203082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:01:35.460 [DEBUG] [Thread-203082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:01:35.460 [DEBUG] [Thread-203082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:01:35.463 [DEBUG] [Thread-203082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:01:35.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:01:35.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:01:35.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:01:35.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:01:35.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:01:35.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:01:35.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:01:35.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:01:35.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:01:35.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.375793 -999.00  +16.30  17.86     37   +1.60 1 1 1 1 1   888    0 17.74 149.59 ----- 17.9 17.9 138.0 28.3 23.9 -29.3 22.9 -27.8 21.8 -28.3 22.7 -28.7
2026-02-15T11:01:35.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:01:35.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:01:35.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.375793
2026-02-15T11:01:35.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:01:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:01:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:01:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:01:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:01:35.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:01:01', tmtdew=16.56, humidity=32.23, cloud=0.0, wind=20.17, temperature=16.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:01:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:01:35.490 [DEBUG] [Thread-203082] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:01:35.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:01:35.593 [DEBUG] [Thread-203085] [transport.py] [_log()] starting thread (client mode): 0xa575b3a0
2026-02-15T11:01:35.593 [DEBUG] [Thread-203085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:01:35.616 [DEBUG] [Thread-203085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:01:35.616 [INFO] [Thread-203085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:01:35.628 [DEBUG] [Thread-203085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:01:35.628 [DEBUG] [Thread-203085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] client lang: <none>
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] server lang: <none>
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] kex follows: False
2026-02-15T11:01:35.629 [DEBUG] [Thread-203085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:01:35.630 [DEBUG] [Thread-203085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:01:35.630 [DEBUG] [Thread-203085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:01:35.630 [DEBUG] [Thread-203085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:01:35.630 [DEBUG] [Thread-203085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:01:35.630 [DEBUG] [Thread-203085] [transport.py] [_log()] Compression: none
2026-02-15T11:01:35.630 [DEBUG] [Thread-203085] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:01:35.695 [DEBUG] [Thread-203085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:01:35.696 [DEBUG] [Thread-203085] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:01:35.696 [DEBUG] [Thread-203085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:01:35.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:01:35.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:01:35.755 [DEBUG] [Thread-203085] [transport.py] [_log()] userauth is OK
2026-02-15T11:01:35.755 [DEBUG] [Thread-203085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:01:35.755 [DEBUG] [Thread-203085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:01:35.755 [DEBUG] [Thread-203085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:01:35.755 [DEBUG] [Thread-203085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:01:35.782 [INFO] [Thread-203085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:01:35.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:01:35.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:01:36.604 [DEBUG] [Thread-203085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:01:36.604 [DEBUG] [Thread-203085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:01:36.661 [DEBUG] [Thread-203085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:01:36.661 [DEBUG] [Thread-203085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:01:36.670 [DEBUG] [Thread-203085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:01:36.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:01:36.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:01:36.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:01:36.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:01:36.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:01:36.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:01:36.704 [DEBUG] [Thread-203085] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:01:37.526 [DEBUG] [Thread-203087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:43.943 [DEBUG] [Thread-203088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:01:52.580 [DEBUG] [Thread-203089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:02:06.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:02:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:02:07.616 [DEBUG] [Thread-203090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 1, 36), 17.95, 29.5, 0.0, 26.96, 17.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:02:09.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:01:36
2026-02-15T11:02:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:02:09.847 [DEBUG] [Thread-203091] [transport.py] [_log()] starting thread (client mode): 0xa2d12080
2026-02-15T11:02:09.847 [DEBUG] [Thread-203091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:02:09.870 [DEBUG] [Thread-203091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:02:09.870 [INFO] [Thread-203091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:02:09.872 [DEBUG] [Thread-203091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] client lang: <none>
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] server lang: <none>
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] kex follows: False
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] Compression: none
2026-02-15T11:02:09.873 [DEBUG] [Thread-203091] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:02:09.887 [DEBUG] [Thread-203091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:02:09.887 [DEBUG] [Thread-203091] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:02:09.888 [DEBUG] [Thread-203091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:02:09.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:02:09.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:02:09.890 [DEBUG] [Thread-203091] [transport.py] [_log()] userauth is OK
2026-02-15T11:02:09.890 [DEBUG] [Thread-203091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:02:09.890 [DEBUG] [Thread-203091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:02:09.890 [DEBUG] [Thread-203091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:02:09.890 [DEBUG] [Thread-203091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:02:09.910 [INFO] [Thread-203091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:02:09.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:02:10.708 [DEBUG] [Thread-203091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:02:10.708 [DEBUG] [Thread-203091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:02:10.709 [DEBUG] [Thread-203091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:02:10.750 [DEBUG] [Thread-203091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:02:10.750 [DEBUG] [Thread-203091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:02:10.754 [DEBUG] [Thread-203091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:02:10.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:02:10.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:02:10.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:02:10.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:02:10.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:02:10.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:02:10.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:02:10.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:02:10.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:02:10.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.376141 -999.00  +16.60  19.05     38   +2.20 1 1 1 1 1   888    0 17.35 141.99 ----- 19.1 19.1 130.2 22.3 24.1 -28.3 23.1 -28.5 21.9 -26.6 22.9 -27.6
2026-02-15T11:02:10.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:02:10.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:02:10.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.376141
2026-02-15T11:02:10.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:02:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:02:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:02:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:02:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:02:10.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:01:36', tmtdew=17.95, humidity=29.5, cloud=0.0, wind=26.96, temperature=17.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:01:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:02:10.782 [DEBUG] [Thread-203091] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:02:10.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:02:10.876 [DEBUG] [Thread-203094] [transport.py] [_log()] starting thread (client mode): 0xa575a710
2026-02-15T11:02:10.876 [DEBUG] [Thread-203094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:02:10.893 [DEBUG] [Thread-203094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:02:10.893 [INFO] [Thread-203094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:02:10.901 [DEBUG] [Thread-203094] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:02:10.901 [DEBUG] [Thread-203094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:02:10.901 [DEBUG] [Thread-203094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:02:10.901 [DEBUG] [Thread-203094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:10.901 [DEBUG] [Thread-203094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] client lang: <none>
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] server lang: <none>
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] kex follows: False
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] Compression: none
2026-02-15T11:02:10.902 [DEBUG] [Thread-203094] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:02:10.961 [DEBUG] [Thread-203094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:02:10.962 [DEBUG] [Thread-203094] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:02:10.962 [DEBUG] [Thread-203094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:02:10.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:02:10.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:02:11.020 [DEBUG] [Thread-203094] [transport.py] [_log()] userauth is OK
2026-02-15T11:02:11.021 [DEBUG] [Thread-203094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:02:11.021 [DEBUG] [Thread-203094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:02:11.021 [DEBUG] [Thread-203094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:02:11.021 [DEBUG] [Thread-203094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:02:11.042 [INFO] [Thread-203094] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:02:11.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:02:11.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:02:11.850 [DEBUG] [Thread-203094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:02:11.850 [DEBUG] [Thread-203094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:02:11.900 [DEBUG] [Thread-203094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:02:11.901 [DEBUG] [Thread-203094] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:02:11.913 [DEBUG] [Thread-203094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:02:11.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:02:11.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:02:11.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:02:11.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:02:11.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:02:11.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:02:11.959 [DEBUG] [Thread-203094] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:02:12.179 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:12.180 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:22.653 [DEBUG] [Thread-203096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:37.707 [DEBUG] [Thread-203097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:41.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:02:41.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:02:41.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:02:43.979 [DEBUG] [Thread-203098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:02:44.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 2, 12), 17.05, 31.3, 0.0, 23.87, 16.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:02:44.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:02:12
2026-02-15T11:02:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:02:44.551 [DEBUG] [Thread-203099] [transport.py] [_log()] starting thread (client mode): 0xa57c0040
2026-02-15T11:02:44.552 [DEBUG] [Thread-203099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:02:44.571 [DEBUG] [Thread-203099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:02:44.572 [INFO] [Thread-203099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:44.573 [DEBUG] [Thread-203099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] client lang: <none>
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] server lang: <none>
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] kex follows: False
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] Compression: none
2026-02-15T11:02:44.574 [DEBUG] [Thread-203099] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:02:44.587 [DEBUG] [Thread-203099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:02:44.587 [DEBUG] [Thread-203099] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:02:44.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:02:44.588 [DEBUG] [Thread-203099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:02:44.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:02:44.591 [DEBUG] [Thread-203099] [transport.py] [_log()] userauth is OK
2026-02-15T11:02:44.591 [DEBUG] [Thread-203099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:02:44.591 [DEBUG] [Thread-203099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:02:44.591 [DEBUG] [Thread-203099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:02:44.591 [DEBUG] [Thread-203099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:02:44.628 [INFO] [Thread-203099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:02:44.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:02:45.216 [DEBUG] [Thread-203099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:02:45.217 [DEBUG] [Thread-203099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:02:45.217 [DEBUG] [Thread-203099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:02:45.258 [DEBUG] [Thread-203099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:02:45.258 [DEBUG] [Thread-203099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:02:45.261 [DEBUG] [Thread-203099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:02:45.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:02:45.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:02:45.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:02:45.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:02:45.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:02:45.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:02:45.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:02:45.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:02:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:02:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.376488 -999.00  +16.40  17.71     38   +2.20 1 1 1 1 1   888    0 17.63 147.29 ----- 17.7 17.7 110.8 22.8 23.9 -29.8 23.1 -27.7 21.9 -27.6 22.9 -28.3
2026-02-15T11:02:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:02:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:02:45.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.376488
2026-02-15T11:02:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:02:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:02:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:02:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:02:45.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:02:45.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:02:12', tmtdew=17.05, humidity=31.3, cloud=0.0, wind=23.87, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:02:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:02:45.288 [DEBUG] [Thread-203099] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:02:45.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:02:45.383 [DEBUG] [Thread-203102] [transport.py] [_log()] starting thread (client mode): 0xa2db4b20
2026-02-15T11:02:45.384 [DEBUG] [Thread-203102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:02:45.401 [DEBUG] [Thread-203102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:02:45.401 [INFO] [Thread-203102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] client lang: <none>
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] server lang: <none>
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] kex follows: False
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:02:45.409 [DEBUG] [Thread-203102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:02:45.410 [DEBUG] [Thread-203102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:02:45.410 [DEBUG] [Thread-203102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:02:45.410 [DEBUG] [Thread-203102] [transport.py] [_log()] Compression: none
2026-02-15T11:02:45.410 [DEBUG] [Thread-203102] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:02:45.469 [DEBUG] [Thread-203102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:02:45.470 [DEBUG] [Thread-203102] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:02:45.470 [DEBUG] [Thread-203102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:02:45.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:02:45.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:02:45.529 [DEBUG] [Thread-203102] [transport.py] [_log()] userauth is OK
2026-02-15T11:02:45.530 [DEBUG] [Thread-203102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:02:45.530 [DEBUG] [Thread-203102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:02:45.530 [DEBUG] [Thread-203102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:02:45.530 [DEBUG] [Thread-203102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:02:45.548 [INFO] [Thread-203102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:02:45.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:02:45.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:02:46.472 [DEBUG] [Thread-203102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:02:46.472 [DEBUG] [Thread-203102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:02:46.520 [DEBUG] [Thread-203102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:02:46.520 [DEBUG] [Thread-203102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:02:46.530 [DEBUG] [Thread-203102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:02:46.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:02:46.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:02:46.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:02:46.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:02:46.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:02:46.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:02:46.571 [DEBUG] [Thread-203102] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:02:52.745 [DEBUG] [Thread-203104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:07.799 [DEBUG] [Thread-203105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:12.320 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:12.321 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:16.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:03:16.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:03:16.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:03:18.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 2, 48), 16.26, 33.01, 0.0, 19.55, 16.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:03:18.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:02:48
2026-02-15T11:03:18.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:03:18.905 [DEBUG] [Thread-203106] [transport.py] [_log()] starting thread (client mode): 0xa2db7b20
2026-02-15T11:03:18.905 [DEBUG] [Thread-203106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:03:18.925 [DEBUG] [Thread-203106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:03:18.925 [INFO] [Thread-203106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:18.928 [DEBUG] [Thread-203106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] client lang: <none>
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] server lang: <none>
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] kex follows: False
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] Compression: none
2026-02-15T11:03:18.929 [DEBUG] [Thread-203106] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:03:18.946 [DEBUG] [Thread-203106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:03:18.947 [DEBUG] [Thread-203106] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:03:18.947 [DEBUG] [Thread-203106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:03:18.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:03:18.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:03:18.950 [DEBUG] [Thread-203106] [transport.py] [_log()] userauth is OK
2026-02-15T11:03:18.950 [DEBUG] [Thread-203106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:03:18.950 [DEBUG] [Thread-203106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:03:18.950 [DEBUG] [Thread-203106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:03:18.950 [DEBUG] [Thread-203106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:03:18.969 [INFO] [Thread-203106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:03:18.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:03:19.588 [DEBUG] [Thread-203106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:03:19.588 [DEBUG] [Thread-203106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:03:19.589 [DEBUG] [Thread-203106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:03:19.630 [DEBUG] [Thread-203106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:03:19.630 [DEBUG] [Thread-203106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:03:19.634 [DEBUG] [Thread-203106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:03:19.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:03:19.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:03:19.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:03:19.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:03:19.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:03:19.660 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:03:19.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:03:19.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:03:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:03:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.376835 -999.00  +16.60  15.31     38   +2.30 1 1 1 1 1   888    0 17.52 135.04 ----- 15.3 15.3 128.2 19.8 23.9 -27.9 23.2 -28.0 22.0 -26.6 22.9 -27.0
2026-02-15T11:03:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:03:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:03:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.376835
2026-02-15T11:03:19.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:03:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:03:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:03:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:03:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:03:19.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:02:48', tmtdew=16.26, humidity=33.01, cloud=0.0, wind=19.55, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:02:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:03:19.663 [DEBUG] [Thread-203106] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:03:19.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:03:19.762 [DEBUG] [Thread-203109] [transport.py] [_log()] starting thread (client mode): 0xa2db4a90
2026-02-15T11:03:19.762 [DEBUG] [Thread-203109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:03:19.777 [DEBUG] [Thread-203109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:03:19.778 [INFO] [Thread-203109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:03:19.785 [DEBUG] [Thread-203109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:03:19.785 [DEBUG] [Thread-203109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] client lang: <none>
2026-02-15T11:03:19.786 [DEBUG] [Thread-203109] [transport.py] [_log()] server lang: <none>
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] kex follows: False
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:03:19.787 [DEBUG] [Thread-203109] [transport.py] [_log()] Compression: none
2026-02-15T11:03:19.788 [DEBUG] [Thread-203109] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:03:19.849 [DEBUG] [Thread-203109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:03:19.850 [DEBUG] [Thread-203109] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:03:19.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:03:19.851 [DEBUG] [Thread-203109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:03:19.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:03:19.905 [DEBUG] [Thread-203109] [transport.py] [_log()] userauth is OK
2026-02-15T11:03:19.906 [DEBUG] [Thread-203109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:03:19.906 [DEBUG] [Thread-203109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:03:19.906 [DEBUG] [Thread-203109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:03:19.906 [DEBUG] [Thread-203109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:03:19.927 [INFO] [Thread-203109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:03:19.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:03:19.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:03:20.788 [DEBUG] [Thread-203109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:03:20.789 [DEBUG] [Thread-203109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:03:20.836 [DEBUG] [Thread-203109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:03:20.836 [DEBUG] [Thread-203109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:03:20.845 [DEBUG] [Thread-203109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:03:20.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:03:20.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:03:20.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:03:20.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:03:20.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:03:20.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:03:20.889 [DEBUG] [Thread-203109] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:03:22.835 [DEBUG] [Thread-203111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:37.897 [DEBUG] [Thread-203112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:44.026 [DEBUG] [Thread-203113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:50.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:03:50.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:03:50.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:03:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 3, 23), 15.97, 33.68, 0.0, 17.22, 16.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:03:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:03:23
2026-02-15T11:03:52.933 [DEBUG] [Thread-203114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:03:53.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:03:53.326 [DEBUG] [Thread-203115] [transport.py] [_log()] starting thread (client mode): 0xa5758850
2026-02-15T11:03:53.326 [DEBUG] [Thread-203115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:03:53.350 [DEBUG] [Thread-203115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:03:53.350 [INFO] [Thread-203115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:03:53.353 [DEBUG] [Thread-203115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:03:53.353 [DEBUG] [Thread-203115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] client lang: <none>
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] server lang: <none>
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] kex follows: False
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] Compression: none
2026-02-15T11:03:53.354 [DEBUG] [Thread-203115] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:03:53.372 [DEBUG] [Thread-203115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:03:53.372 [DEBUG] [Thread-203115] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:03:53.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:03:53.373 [DEBUG] [Thread-203115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:03:53.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:03:53.375 [DEBUG] [Thread-203115] [transport.py] [_log()] userauth is OK
2026-02-15T11:03:53.376 [DEBUG] [Thread-203115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:03:53.376 [DEBUG] [Thread-203115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:03:53.376 [DEBUG] [Thread-203115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:03:53.376 [DEBUG] [Thread-203115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:03:53.398 [INFO] [Thread-203115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:03:53.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:03:54.066 [DEBUG] [Thread-203115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:03:54.066 [DEBUG] [Thread-203115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:03:54.067 [DEBUG] [Thread-203115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:03:54.107 [DEBUG] [Thread-203115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:03:54.107 [DEBUG] [Thread-203115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:03:54.110 [DEBUG] [Thread-203115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:03:54.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:03:54.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:03:54.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:03:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:03:54.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:03:54.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:03:54.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:03:54.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:03:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:03:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.377182 -999.00  +16.90  14.32     38   +2.50 1 1 1 1 1   888    0 17.43 131.50 ----- 14.3 14.3 159.0 22.5 24.1 -28.6 23.2 -27.1 22.1 -26.4 22.9 -28.0
2026-02-15T11:03:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:03:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:03:54.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.377182
2026-02-15T11:03:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:03:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:03:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:03:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:03:54.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:03:54.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:03:23', tmtdew=15.97, humidity=33.68, cloud=0.0, wind=17.22, temperature=16.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:03:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:03:54.139 [DEBUG] [Thread-203115] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:03:54.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:03:54.233 [DEBUG] [Thread-203118] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a60
2026-02-15T11:03:54.233 [DEBUG] [Thread-203118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:03:54.248 [DEBUG] [Thread-203118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:03:54.248 [INFO] [Thread-203118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:03:54.256 [DEBUG] [Thread-203118] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:03:54.256 [DEBUG] [Thread-203118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:03:54.256 [DEBUG] [Thread-203118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] client lang: <none>
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] server lang: <none>
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] kex follows: False
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] Compression: none
2026-02-15T11:03:54.257 [DEBUG] [Thread-203118] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:03:54.314 [DEBUG] [Thread-203118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:03:54.315 [DEBUG] [Thread-203118] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:03:54.316 [DEBUG] [Thread-203118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:03:54.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:03:54.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:03:54.373 [DEBUG] [Thread-203118] [transport.py] [_log()] userauth is OK
2026-02-15T11:03:54.373 [DEBUG] [Thread-203118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:03:54.374 [DEBUG] [Thread-203118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:03:54.374 [DEBUG] [Thread-203118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:03:54.374 [DEBUG] [Thread-203118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:03:54.395 [INFO] [Thread-203118] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:03:54.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:03:54.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:03:55.209 [DEBUG] [Thread-203118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:03:55.209 [DEBUG] [Thread-203118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:03:55.257 [DEBUG] [Thread-203118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:03:55.257 [DEBUG] [Thread-203118] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:03:55.266 [DEBUG] [Thread-203118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:03:55.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:03:55.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:03:55.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:03:55.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:03:55.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:03:55.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:03:55.303 [DEBUG] [Thread-203118] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:04:07.969 [DEBUG] [Thread-203120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:12.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:12.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:23.021 [DEBUG] [Thread-203121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:25.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:04:25.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:04:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:04:27.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 3, 59), 16.93, 31.8, 0.0, 20.93, 16.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:04:27.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:03:59
2026-02-15T11:04:27.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:04:27.678 [DEBUG] [Thread-203122] [transport.py] [_log()] starting thread (client mode): 0xa2d021a0
2026-02-15T11:04:27.679 [DEBUG] [Thread-203122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:04:27.698 [DEBUG] [Thread-203122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:04:27.698 [INFO] [Thread-203122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:04:27.701 [DEBUG] [Thread-203122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:04:27.701 [DEBUG] [Thread-203122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:04:27.701 [DEBUG] [Thread-203122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] client lang: <none>
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] server lang: <none>
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] kex follows: False
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:04:27.702 [DEBUG] [Thread-203122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:04:27.703 [DEBUG] [Thread-203122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:04:27.703 [DEBUG] [Thread-203122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:04:27.703 [DEBUG] [Thread-203122] [transport.py] [_log()] Compression: none
2026-02-15T11:04:27.703 [DEBUG] [Thread-203122] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:04:27.723 [DEBUG] [Thread-203122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:04:27.724 [DEBUG] [Thread-203122] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:04:27.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:04:27.725 [DEBUG] [Thread-203122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:04:27.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:04:27.727 [DEBUG] [Thread-203122] [transport.py] [_log()] userauth is OK
2026-02-15T11:04:27.727 [DEBUG] [Thread-203122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:04:27.727 [DEBUG] [Thread-203122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:04:27.728 [DEBUG] [Thread-203122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:04:27.728 [DEBUG] [Thread-203122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:04:27.752 [INFO] [Thread-203122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:04:27.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:04:28.393 [DEBUG] [Thread-203122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:04:28.393 [DEBUG] [Thread-203122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:04:28.394 [DEBUG] [Thread-203122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:04:28.434 [DEBUG] [Thread-203122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:04:28.435 [DEBUG] [Thread-203122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:04:28.438 [DEBUG] [Thread-203122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:04:28.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:04:28.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:04:28.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:04:28.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:04:28.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:04:28.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:04:28.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:04:28.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:04:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:04:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.377529 -999.00  +16.80  21.07     38   +2.40 1 1 1 1 1   888    0 16.95 124.98 ----- 21.1 21.1 132.8 27.1 24.2 -29.3 23.2 -28.5 22.1 -26.0 23.0 -29.2
2026-02-15T11:04:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:04:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:04:28.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.377529
2026-02-15T11:04:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:04:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:04:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:04:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:04:28.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:04:28.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:03:59', tmtdew=16.93, humidity=31.8, cloud=0.0, wind=20.93, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:03:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:04:28.464 [DEBUG] [Thread-203122] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:04:28.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:04:28.560 [DEBUG] [Thread-203125] [transport.py] [_log()] starting thread (client mode): 0xa2db4c10
2026-02-15T11:04:28.560 [DEBUG] [Thread-203125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:04:28.575 [DEBUG] [Thread-203125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:04:28.576 [INFO] [Thread-203125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:04:28.583 [DEBUG] [Thread-203125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:04:28.583 [DEBUG] [Thread-203125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:04:28.583 [DEBUG] [Thread-203125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:04:28.583 [DEBUG] [Thread-203125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:04:28.583 [DEBUG] [Thread-203125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:04:28.583 [DEBUG] [Thread-203125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] client lang: <none>
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] server lang: <none>
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] kex follows: False
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] Compression: none
2026-02-15T11:04:28.584 [DEBUG] [Thread-203125] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:04:28.641 [DEBUG] [Thread-203125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:04:28.642 [DEBUG] [Thread-203125] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:04:28.642 [DEBUG] [Thread-203125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:04:28.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:04:28.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:04:28.697 [DEBUG] [Thread-203125] [transport.py] [_log()] userauth is OK
2026-02-15T11:04:28.697 [DEBUG] [Thread-203125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:04:28.698 [DEBUG] [Thread-203125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:04:28.698 [DEBUG] [Thread-203125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:04:28.698 [DEBUG] [Thread-203125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:04:28.717 [INFO] [Thread-203125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:04:28.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:04:28.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:04:29.538 [DEBUG] [Thread-203125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:04:29.538 [DEBUG] [Thread-203125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:04:29.586 [DEBUG] [Thread-203125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:04:29.587 [DEBUG] [Thread-203125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:04:29.596 [DEBUG] [Thread-203125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:04:29.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:04:29.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:04:29.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:04:29.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:04:29.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:04:29.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:04:29.635 [DEBUG] [Thread-203125] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:04:38.059 [DEBUG] [Thread-203127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:44.060 [DEBUG] [Thread-203128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:53.117 [DEBUG] [Thread-203129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:04:59.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:04:59.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:04:59.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:05:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 4, 35), 16.95, 31.62, 0.0, 25.83, 16.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:05:01.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:04:35
2026-02-15T11:05:01.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:05:01.984 [DEBUG] [Thread-203130] [transport.py] [_log()] starting thread (client mode): 0xa575b310
2026-02-15T11:05:01.984 [DEBUG] [Thread-203130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:05:01.994 [DEBUG] [Thread-203130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:05:01.994 [INFO] [Thread-203130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] client lang: <none>
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] server lang: <none>
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] kex follows: False
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:05:01.995 [DEBUG] [Thread-203130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:05:01.996 [DEBUG] [Thread-203130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:05:01.996 [DEBUG] [Thread-203130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:05:01.996 [DEBUG] [Thread-203130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:05:01.996 [DEBUG] [Thread-203130] [transport.py] [_log()] Compression: none
2026-02-15T11:05:01.996 [DEBUG] [Thread-203130] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:05:02.004 [DEBUG] [Thread-203130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:05:02.004 [DEBUG] [Thread-203130] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:05:02.004 [DEBUG] [Thread-203130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:05:02.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:05:02.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:05:02.006 [DEBUG] [Thread-203130] [transport.py] [_log()] userauth is OK
2026-02-15T11:05:02.006 [DEBUG] [Thread-203130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:05:02.006 [DEBUG] [Thread-203130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:05:02.006 [DEBUG] [Thread-203130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:05:02.006 [DEBUG] [Thread-203130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:05:02.017 [INFO] [Thread-203130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:05:02.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:05:02.647 [DEBUG] [Thread-203130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:05:02.648 [DEBUG] [Thread-203130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:05:02.648 [DEBUG] [Thread-203130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:05:02.688 [DEBUG] [Thread-203130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:05:02.688 [DEBUG] [Thread-203130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:05:02.691 [DEBUG] [Thread-203130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:05:02.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:05:02.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:05:02.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:05:02.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:05:02.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:05:02.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:05:02.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:05:02.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:05:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:05:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.377877 -999.00  +16.90  13.95     38   +2.50 1 1 1 1 1   888    0 16.93 116.90 ----- 13.9 13.9 160.6 18.9 24.2 -28.3 23.0 -30.8 22.1 -27.9 23.1 -27.2
2026-02-15T11:05:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:05:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:05:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.377877
2026-02-15T11:05:02.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:05:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:05:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:05:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:05:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:05:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:04:35', tmtdew=16.95, humidity=31.62, cloud=0.0, wind=25.83, temperature=16.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:04:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:05:02.716 [DEBUG] [Thread-203130] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:05:02.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:05:02.809 [DEBUG] [Thread-203133] [transport.py] [_log()] starting thread (client mode): 0xa57c1ff0
2026-02-15T11:05:02.809 [DEBUG] [Thread-203133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:05:02.824 [DEBUG] [Thread-203133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:05:02.824 [INFO] [Thread-203133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:05:02.831 [DEBUG] [Thread-203133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] client lang: <none>
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] server lang: <none>
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] kex follows: False
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:05:02.832 [DEBUG] [Thread-203133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:05:02.833 [DEBUG] [Thread-203133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:05:02.833 [DEBUG] [Thread-203133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:05:02.833 [DEBUG] [Thread-203133] [transport.py] [_log()] Compression: none
2026-02-15T11:05:02.833 [DEBUG] [Thread-203133] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:05:02.889 [DEBUG] [Thread-203133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:05:02.889 [DEBUG] [Thread-203133] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:05:02.890 [DEBUG] [Thread-203133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:05:02.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:05:02.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:05:02.945 [DEBUG] [Thread-203133] [transport.py] [_log()] userauth is OK
2026-02-15T11:05:02.946 [DEBUG] [Thread-203133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:05:02.946 [DEBUG] [Thread-203133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:05:02.946 [DEBUG] [Thread-203133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:05:02.946 [DEBUG] [Thread-203133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:05:02.964 [INFO] [Thread-203133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:05:02.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:05:02.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:05:03.827 [DEBUG] [Thread-203133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:05:03.827 [DEBUG] [Thread-203133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:05:03.876 [DEBUG] [Thread-203133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:05:03.876 [DEBUG] [Thread-203133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:05:03.885 [DEBUG] [Thread-203133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:05:03.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:05:03.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:05:03.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:05:03.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:05:03.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:05:03.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:05:03.923 [DEBUG] [Thread-203133] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:05:08.157 [DEBUG] [Thread-203135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:05:12.607 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:05:12.608 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:05:23.209 [DEBUG] [Thread-203136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:05:33.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:05:33.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:05:33.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:05:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 5, 10), 16.68, 32.21, 0.0, 21.0, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:05:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:05:10
2026-02-15T11:05:36.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:05:36.414 [DEBUG] [Thread-203137] [transport.py] [_log()] starting thread (client mode): 0xa2db6020
2026-02-15T11:05:36.415 [DEBUG] [Thread-203137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:05:36.434 [DEBUG] [Thread-203137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:05:36.434 [INFO] [Thread-203137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:05:36.437 [DEBUG] [Thread-203137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] client lang: <none>
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] server lang: <none>
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] kex follows: False
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] Compression: none
2026-02-15T11:05:36.438 [DEBUG] [Thread-203137] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:05:36.450 [DEBUG] [Thread-203137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:05:36.451 [DEBUG] [Thread-203137] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:05:36.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:05:36.453 [DEBUG] [Thread-203137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:05:36.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:05:36.455 [DEBUG] [Thread-203137] [transport.py] [_log()] userauth is OK
2026-02-15T11:05:36.456 [DEBUG] [Thread-203137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:05:36.456 [DEBUG] [Thread-203137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:05:36.456 [DEBUG] [Thread-203137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:05:36.456 [DEBUG] [Thread-203137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:05:36.479 [INFO] [Thread-203137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:05:36.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:05:37.384 [DEBUG] [Thread-203137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:05:37.384 [DEBUG] [Thread-203137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:05:37.384 [DEBUG] [Thread-203137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:05:37.424 [DEBUG] [Thread-203137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:05:37.424 [DEBUG] [Thread-203137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:05:37.428 [DEBUG] [Thread-203137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:05:37.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:05:37.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:05:37.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:05:37.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:05:37.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:05:37.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:05:37.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:05:37.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:05:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:05:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.378571 -999.00  +16.70  26.27     37   +2.00 1 1 1 1 1   888    0 17.39 127.87 ----- 26.3 26.3 144.2 30.5 24.2 -29.5 23.1 -28.7 22.1 -27.2 23.0 -28.3
2026-02-15T11:05:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:05:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:05:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.378571
2026-02-15T11:05:37.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:05:37.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:05:37.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:05:37.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:05:37.453 [DEBUG] [Thread-203137] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:05:37.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:05:37.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:05:10', tmtdew=16.68, humidity=32.21, cloud=0.0, wind=21.0, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:05:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:05:37.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:05:37.549 [DEBUG] [Thread-203140] [transport.py] [_log()] starting thread (client mode): 0xa2d01ff0
2026-02-15T11:05:37.550 [DEBUG] [Thread-203140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:05:37.565 [DEBUG] [Thread-203140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:05:37.565 [INFO] [Thread-203140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:05:37.572 [DEBUG] [Thread-203140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:05:37.573 [DEBUG] [Thread-203140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] client lang: <none>
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] server lang: <none>
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] kex follows: False
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:05:37.574 [DEBUG] [Thread-203140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:05:37.575 [DEBUG] [Thread-203140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:05:37.575 [DEBUG] [Thread-203140] [transport.py] [_log()] Compression: none
2026-02-15T11:05:37.575 [DEBUG] [Thread-203140] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:05:37.632 [DEBUG] [Thread-203140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:05:37.632 [DEBUG] [Thread-203140] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:05:37.633 [DEBUG] [Thread-203140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:05:37.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:05:37.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:05:37.688 [DEBUG] [Thread-203140] [transport.py] [_log()] userauth is OK
2026-02-15T11:05:37.688 [DEBUG] [Thread-203140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:05:37.689 [DEBUG] [Thread-203140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:05:37.689 [DEBUG] [Thread-203140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:05:37.689 [DEBUG] [Thread-203140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:05:37.712 [INFO] [Thread-203140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:05:37.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:05:37.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:05:38.242 [DEBUG] [Thread-203142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:05:38.538 [DEBUG] [Thread-203140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:05:38.539 [DEBUG] [Thread-203140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:05:38.586 [DEBUG] [Thread-203140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:05:38.586 [DEBUG] [Thread-203140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:05:38.596 [DEBUG] [Thread-203140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:05:38.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:05:38.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:05:38.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:05:38.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:05:38.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:05:38.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:05:38.633 [DEBUG] [Thread-203140] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:05:44.094 [DEBUG] [Thread-203143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:05:53.295 [DEBUG] [Thread-203144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:08.333 [DEBUG] [Thread-203145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:08.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:06:08.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:06:08.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:06:10.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 5, 45), 16.64, 32.01, 0.0, 22.59, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:06:10.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:05:45
2026-02-15T11:06:10.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:06:10.963 [DEBUG] [Thread-203146] [transport.py] [_log()] starting thread (client mode): 0xa2dc0460
2026-02-15T11:06:10.963 [DEBUG] [Thread-203146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:06:10.983 [DEBUG] [Thread-203146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:06:10.983 [INFO] [Thread-203146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] client lang: <none>
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] server lang: <none>
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] kex follows: False
2026-02-15T11:06:10.987 [DEBUG] [Thread-203146] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:06:10.988 [DEBUG] [Thread-203146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:06:10.988 [DEBUG] [Thread-203146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:06:10.988 [DEBUG] [Thread-203146] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:06:10.988 [DEBUG] [Thread-203146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:06:10.988 [DEBUG] [Thread-203146] [transport.py] [_log()] Compression: none
2026-02-15T11:06:10.988 [DEBUG] [Thread-203146] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:06:11.006 [DEBUG] [Thread-203146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:06:11.007 [DEBUG] [Thread-203146] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:06:11.008 [DEBUG] [Thread-203146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:06:11.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:06:11.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:06:11.010 [DEBUG] [Thread-203146] [transport.py] [_log()] userauth is OK
2026-02-15T11:06:11.010 [DEBUG] [Thread-203146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:06:11.010 [DEBUG] [Thread-203146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:06:11.011 [DEBUG] [Thread-203146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:06:11.011 [DEBUG] [Thread-203146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:06:11.031 [INFO] [Thread-203146] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:06:11.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:06:11.668 [DEBUG] [Thread-203146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:06:11.668 [DEBUG] [Thread-203146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:06:11.668 [DEBUG] [Thread-203146] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:06:11.710 [DEBUG] [Thread-203146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:06:11.710 [DEBUG] [Thread-203146] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:06:11.713 [DEBUG] [Thread-203146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:06:11.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:06:11.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:06:11.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:06:11.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:06:11.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:06:11.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:06:11.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:06:11.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:06:11.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:06:11.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.378918 -999.00  +16.80  17.77     37   +2.10 1 1 1 1 1   888    0 17.39 124.43 ----- 17.8 17.8 140.2 23.1 24.2 -28.9 23.2 -28.6 22.1 -27.7 23.1 -29.0
2026-02-15T11:06:11.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:06:11.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:06:11.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.378918
2026-02-15T11:06:11.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:06:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:06:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:06:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:06:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:06:11.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:05:45', tmtdew=16.64, humidity=32.01, cloud=0.0, wind=22.59, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:05:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:06:11.740 [DEBUG] [Thread-203146] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:06:11.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:06:11.838 [DEBUG] [Thread-203149] [transport.py] [_log()] starting thread (client mode): 0xa2d007c0
2026-02-15T11:06:11.838 [DEBUG] [Thread-203149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:06:11.853 [DEBUG] [Thread-203149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:06:11.853 [INFO] [Thread-203149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:11.861 [DEBUG] [Thread-203149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] client lang: <none>
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] server lang: <none>
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] kex follows: False
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:06:11.862 [DEBUG] [Thread-203149] [transport.py] [_log()] Compression: none
2026-02-15T11:06:11.863 [DEBUG] [Thread-203149] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:06:11.920 [DEBUG] [Thread-203149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:06:11.920 [DEBUG] [Thread-203149] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:06:11.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:06:11.921 [DEBUG] [Thread-203149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:06:11.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:06:11.978 [DEBUG] [Thread-203149] [transport.py] [_log()] userauth is OK
2026-02-15T11:06:11.978 [DEBUG] [Thread-203149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:06:11.978 [DEBUG] [Thread-203149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:06:11.978 [DEBUG] [Thread-203149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:06:11.978 [DEBUG] [Thread-203149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:06:11.996 [INFO] [Thread-203149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:06:11.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:06:11.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:06:12.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:12.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:12.835 [DEBUG] [Thread-203149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:06:12.835 [DEBUG] [Thread-203149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:06:12.884 [DEBUG] [Thread-203149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:06:12.884 [DEBUG] [Thread-203149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:06:12.893 [DEBUG] [Thread-203149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:06:12.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:06:12.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:06:12.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
2026-02-15T11:06:12.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:06:12.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:06:12.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:06:12.926 [DEBUG] [Thread-203149] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:06:23.370 [DEBUG] [Thread-203151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:38.423 [DEBUG] [Thread-203152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:42.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:06:42.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:06:42.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-02-15T11:06:44.134 [DEBUG] [Thread-203153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:06:44.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 6, 20), 16.71, 31.85, 0.0, 22.97, 16.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:06:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:06:20
2026-02-15T11:06:45.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:06:45.516 [DEBUG] [Thread-203154] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-15T11:06:45.516 [DEBUG] [Thread-203154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:06:45.535 [DEBUG] [Thread-203154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:06:45.536 [INFO] [Thread-203154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] client lang: <none>
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] server lang: <none>
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] kex follows: False
2026-02-15T11:06:45.539 [DEBUG] [Thread-203154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:06:45.540 [DEBUG] [Thread-203154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:06:45.540 [DEBUG] [Thread-203154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:06:45.540 [DEBUG] [Thread-203154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:06:45.540 [DEBUG] [Thread-203154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:06:45.540 [DEBUG] [Thread-203154] [transport.py] [_log()] Compression: none
2026-02-15T11:06:45.540 [DEBUG] [Thread-203154] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:06:45.560 [DEBUG] [Thread-203154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:06:45.561 [DEBUG] [Thread-203154] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:06:45.561 [DEBUG] [Thread-203154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:06:45.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:06:45.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:06:45.564 [DEBUG] [Thread-203154] [transport.py] [_log()] userauth is OK
2026-02-15T11:06:45.564 [DEBUG] [Thread-203154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:06:45.564 [DEBUG] [Thread-203154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:06:45.564 [DEBUG] [Thread-203154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:06:45.564 [DEBUG] [Thread-203154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:06:45.590 [INFO] [Thread-203154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:06:45.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:06:46.202 [DEBUG] [Thread-203154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:06:46.203 [DEBUG] [Thread-203154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:06:46.203 [DEBUG] [Thread-203154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:06:46.243 [DEBUG] [Thread-203154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:06:46.244 [DEBUG] [Thread-203154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:06:46.247 [DEBUG] [Thread-203154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:06:46.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:06:46.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:06:46.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:06:46.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:06:46.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:06:46.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:06:46.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:06:46.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:06:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:06:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.379266 -999.00  +16.90  21.82     37   +2.20 1 1 1 1 1   888    0 17.30 117.28 ----- 21.8 21.8 132.8 25.1 24.2 -27.8 23.2 -28.6 22.2 -27.2 23.1 -27.9
2026-02-15T11:06:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:06:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:06:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.379266
2026-02-15T11:06:46.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:06:46.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:06:46.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:06:46.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:06:46.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:06:46.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:06:20', tmtdew=16.71, humidity=31.85, cloud=0.0, wind=22.97, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:06:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:06:46.274 [DEBUG] [Thread-203154] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:06:46.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:06:46.370 [DEBUG] [Thread-203157] [transport.py] [_log()] starting thread (client mode): 0xa2d13580
2026-02-15T11:06:46.370 [DEBUG] [Thread-203157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:06:46.385 [DEBUG] [Thread-203157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:06:46.385 [INFO] [Thread-203157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] client lang: <none>
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] server lang: <none>
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] kex follows: False
2026-02-15T11:06:46.394 [DEBUG] [Thread-203157] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:06:46.395 [DEBUG] [Thread-203157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:06:46.395 [DEBUG] [Thread-203157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:06:46.395 [DEBUG] [Thread-203157] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:06:46.395 [DEBUG] [Thread-203157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:06:46.395 [DEBUG] [Thread-203157] [transport.py] [_log()] Compression: none
2026-02-15T11:06:46.395 [DEBUG] [Thread-203157] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:06:46.457 [DEBUG] [Thread-203157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:06:46.457 [DEBUG] [Thread-203157] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:06:46.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:06:46.459 [DEBUG] [Thread-203157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:06:46.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:06:46.517 [DEBUG] [Thread-203157] [transport.py] [_log()] userauth is OK
2026-02-15T11:06:46.518 [DEBUG] [Thread-203157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:06:46.518 [DEBUG] [Thread-203157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:06:46.518 [DEBUG] [Thread-203157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:06:46.518 [DEBUG] [Thread-203157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:06:46.538 [INFO] [Thread-203157] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:06:46.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:06:46.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:06:47.414 [DEBUG] [Thread-203157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:06:47.415 [DEBUG] [Thread-203157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:06:47.462 [DEBUG] [Thread-203157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:06:47.462 [DEBUG] [Thread-203157] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:06:47.471 [DEBUG] [Thread-203157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:06:47.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:06:47.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:06:47.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:06:47.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:06:47.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:06:47.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:06:47.505 [DEBUG] [Thread-203157] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:06:53.457 [DEBUG] [Thread-203159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:08.507 [DEBUG] [Thread-203160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:12.886 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:12.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:17.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:07:17.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:07:17.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:07:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 6, 56), 16.87, 31.68, 0.0, 20.86, 16.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:07:19.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:06:56
2026-02-15T11:07:19.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:07:19.793 [DEBUG] [Thread-203161] [transport.py] [_log()] starting thread (client mode): 0xa81d5f90
2026-02-15T11:07:19.793 [DEBUG] [Thread-203161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:07:19.813 [DEBUG] [Thread-203161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:07:19.813 [INFO] [Thread-203161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:07:19.816 [DEBUG] [Thread-203161] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] client lang: <none>
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] server lang: <none>
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] kex follows: False
2026-02-15T11:07:19.817 [DEBUG] [Thread-203161] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:07:19.818 [DEBUG] [Thread-203161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:07:19.818 [DEBUG] [Thread-203161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:07:19.818 [DEBUG] [Thread-203161] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:07:19.818 [DEBUG] [Thread-203161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:07:19.818 [DEBUG] [Thread-203161] [transport.py] [_log()] Compression: none
2026-02-15T11:07:19.818 [DEBUG] [Thread-203161] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:07:19.837 [DEBUG] [Thread-203161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:07:19.838 [DEBUG] [Thread-203161] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:07:19.838 [DEBUG] [Thread-203161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:07:19.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:07:19.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:07:19.840 [DEBUG] [Thread-203161] [transport.py] [_log()] userauth is OK
2026-02-15T11:07:19.841 [DEBUG] [Thread-203161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:07:19.841 [DEBUG] [Thread-203161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:07:19.841 [DEBUG] [Thread-203161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:07:19.841 [DEBUG] [Thread-203161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:07:19.877 [INFO] [Thread-203161] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:07:19.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:07:20.477 [DEBUG] [Thread-203161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:07:20.477 [DEBUG] [Thread-203161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:07:20.478 [DEBUG] [Thread-203161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:07:20.518 [DEBUG] [Thread-203161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:07:20.518 [DEBUG] [Thread-203161] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:07:20.522 [DEBUG] [Thread-203161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:07:20.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:07:20.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:07:20.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:07:20.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:07:20.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:07:20.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:07:20.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:07:20.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:07:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:07:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.379613 -999.00  +16.70  14.23     37   +2.20 1 1 1 1 1   888    0 17.15 112.49 ----- 14.2 14.2 161.5 21.2 24.3 -28.4 23.4 -27.1 22.1 -27.7 23.1 -27.3
2026-02-15T11:07:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:07:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:07:20.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.379613
2026-02-15T11:07:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:07:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:07:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:07:20.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:07:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:07:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:06:56', tmtdew=16.87, humidity=31.68, cloud=0.0, wind=20.86, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:06:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:07:20.548 [DEBUG] [Thread-203161] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:07:20.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:07:20.640 [DEBUG] [Thread-203164] [transport.py] [_log()] starting thread (client mode): 0xa81d7940
2026-02-15T11:07:20.641 [DEBUG] [Thread-203164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:07:20.656 [DEBUG] [Thread-203164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:07:20.656 [INFO] [Thread-203164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:07:20.663 [DEBUG] [Thread-203164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] client lang: <none>
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] server lang: <none>
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] kex follows: False
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] Compression: none
2026-02-15T11:07:20.664 [DEBUG] [Thread-203164] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:07:20.723 [DEBUG] [Thread-203164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:07:20.723 [DEBUG] [Thread-203164] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:07:20.724 [DEBUG] [Thread-203164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:07:20.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:07:20.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:07:20.779 [DEBUG] [Thread-203164] [transport.py] [_log()] userauth is OK
2026-02-15T11:07:20.779 [DEBUG] [Thread-203164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:07:20.779 [DEBUG] [Thread-203164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:07:20.779 [DEBUG] [Thread-203164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:07:20.780 [DEBUG] [Thread-203164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:07:20.798 [INFO] [Thread-203164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:07:20.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:07:20.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:07:21.628 [DEBUG] [Thread-203164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:07:21.628 [DEBUG] [Thread-203164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:07:21.677 [DEBUG] [Thread-203164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:07:21.677 [DEBUG] [Thread-203164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:07:21.690 [DEBUG] [Thread-203164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:07:21.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:07:21.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:07:21.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:07:21.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:07:21.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:07:21.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:07:21.729 [DEBUG] [Thread-203164] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:07:23.543 [DEBUG] [Thread-203166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:38.597 [DEBUG] [Thread-203167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:44.170 [DEBUG] [Thread-203168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:51.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:07:51.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:07:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:07:53.635 [DEBUG] [Thread-203169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:07:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 7, 32), 16.69, 32.1, 0.0, 19.94, 16.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:07:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:07:32
2026-02-15T11:07:54.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:07:54.540 [DEBUG] [Thread-203170] [transport.py] [_log()] starting thread (client mode): 0xa2db4280
2026-02-15T11:07:54.540 [DEBUG] [Thread-203170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:07:54.561 [DEBUG] [Thread-203170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:07:54.561 [INFO] [Thread-203170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] client lang: <none>
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] server lang: <none>
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] kex follows: False
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:07:54.564 [DEBUG] [Thread-203170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:07:54.565 [DEBUG] [Thread-203170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:07:54.565 [DEBUG] [Thread-203170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:07:54.565 [DEBUG] [Thread-203170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:07:54.565 [DEBUG] [Thread-203170] [transport.py] [_log()] Compression: none
2026-02-15T11:07:54.565 [DEBUG] [Thread-203170] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:07:54.582 [DEBUG] [Thread-203170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:07:54.583 [DEBUG] [Thread-203170] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:07:54.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:07:54.584 [DEBUG] [Thread-203170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:07:54.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:07:54.586 [DEBUG] [Thread-203170] [transport.py] [_log()] userauth is OK
2026-02-15T11:07:54.586 [DEBUG] [Thread-203170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:07:54.587 [DEBUG] [Thread-203170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:07:54.587 [DEBUG] [Thread-203170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:07:54.587 [DEBUG] [Thread-203170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:07:54.611 [INFO] [Thread-203170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:07:54.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:07:55.242 [DEBUG] [Thread-203170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:07:55.243 [DEBUG] [Thread-203170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:07:55.243 [DEBUG] [Thread-203170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:07:55.283 [DEBUG] [Thread-203170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:07:55.284 [DEBUG] [Thread-203170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:07:55.287 [DEBUG] [Thread-203170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:07:55.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:07:55.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:07:55.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:07:55.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:07:55.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:07:55.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:07:55.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:07:55.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:07:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:07:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.379960 -999.00  +16.80  21.56     37   +2.10 1 1 1 1 1   888    0 16.88 109.35 ----- 21.6 21.6 136.0 25.4 24.4 -29.1 23.4 -28.7 22.3 -26.0 23.3 -27.8
2026-02-15T11:07:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:07:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:07:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.379960
2026-02-15T11:07:55.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:07:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:07:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:07:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:07:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:07:55.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:07:32', tmtdew=16.69, humidity=32.1, cloud=0.0, wind=19.94, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:07:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:07:55.320 [DEBUG] [Thread-203170] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:07:55.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:07:55.416 [DEBUG] [Thread-203173] [transport.py] [_log()] starting thread (client mode): 0xa2d01720
2026-02-15T11:07:55.416 [DEBUG] [Thread-203173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:07:55.431 [DEBUG] [Thread-203173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:07:55.432 [INFO] [Thread-203173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:07:55.439 [DEBUG] [Thread-203173] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:07:55.440 [DEBUG] [Thread-203173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] client lang: <none>
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] server lang: <none>
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] kex follows: False
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:07:55.441 [DEBUG] [Thread-203173] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:07:55.442 [DEBUG] [Thread-203173] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:07:55.442 [DEBUG] [Thread-203173] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:07:55.442 [DEBUG] [Thread-203173] [transport.py] [_log()] Compression: none
2026-02-15T11:07:55.442 [DEBUG] [Thread-203173] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:07:55.505 [DEBUG] [Thread-203173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:07:55.506 [DEBUG] [Thread-203173] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:07:55.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:07:55.507 [DEBUG] [Thread-203173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:07:55.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:07:55.560 [DEBUG] [Thread-203173] [transport.py] [_log()] userauth is OK
2026-02-15T11:07:55.561 [DEBUG] [Thread-203173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:07:55.561 [DEBUG] [Thread-203173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:07:55.561 [DEBUG] [Thread-203173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:07:55.561 [DEBUG] [Thread-203173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:07:55.581 [INFO] [Thread-203173] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:07:55.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:07:55.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:07:56.413 [DEBUG] [Thread-203173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:07:56.413 [DEBUG] [Thread-203173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:07:56.461 [DEBUG] [Thread-203173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:07:56.462 [DEBUG] [Thread-203173] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:07:56.471 [DEBUG] [Thread-203173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:07:56.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:07:56.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:07:56.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:07:56.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:07:56.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:07:56.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:07:56.508 [DEBUG] [Thread-203173] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:08:08.675 [DEBUG] [Thread-203175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:08:13.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:08:13.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:08:23.731 [DEBUG] [Thread-203176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:08:26.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:08:26.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:08:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 8, 7), 17.24, 30.97, 0.0, 20.59, 16.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:08:28.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:08:07
2026-02-15T11:08:28.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:08:28.998 [DEBUG] [Thread-203177] [transport.py] [_log()] starting thread (client mode): 0xa2db5a80
2026-02-15T11:08:28.999 [DEBUG] [Thread-203177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:08:29.018 [DEBUG] [Thread-203177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:08:29.018 [INFO] [Thread-203177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] client lang: <none>
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] server lang: <none>
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] kex follows: False
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] Compression: none
2026-02-15T11:08:29.021 [DEBUG] [Thread-203177] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:08:29.037 [DEBUG] [Thread-203177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:08:29.038 [DEBUG] [Thread-203177] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:08:29.039 [DEBUG] [Thread-203177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:08:29.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:08:29.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:08:29.040 [DEBUG] [Thread-203177] [transport.py] [_log()] userauth is OK
2026-02-15T11:08:29.041 [DEBUG] [Thread-203177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:08:29.041 [DEBUG] [Thread-203177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:08:29.041 [DEBUG] [Thread-203177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:08:29.041 [DEBUG] [Thread-203177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:08:29.057 [INFO] [Thread-203177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:08:29.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:08:29.808 [DEBUG] [Thread-203177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:08:29.808 [DEBUG] [Thread-203177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:08:29.809 [DEBUG] [Thread-203177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:08:29.849 [DEBUG] [Thread-203177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:08:29.849 [DEBUG] [Thread-203177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:08:29.852 [DEBUG] [Thread-203177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:08:29.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:08:29.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:08:29.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:08:29.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:08:29.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:08:29.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:08:29.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:08:29.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:08:29.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:08:29.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.380307 -999.00  +16.60  15.12     35   +1.20 1 1 1 1 1   888    0 16.88 112.21 ----- 15.1 15.1 146.6 22.1 24.4 -28.8 23.4 -27.5 22.3 -27.8 23.2 -27.9
2026-02-15T11:08:29.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:08:29.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:08:29.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.380307
2026-02-15T11:08:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:08:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:08:29.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:08:29.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:08:29.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:08:29.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:08:07', tmtdew=17.24, humidity=30.97, cloud=0.0, wind=20.59, temperature=16.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:07:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:08:29.880 [DEBUG] [Thread-203177] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:08:29.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:08:29.976 [DEBUG] [Thread-203180] [transport.py] [_log()] starting thread (client mode): 0xa2db4f70
2026-02-15T11:08:29.976 [DEBUG] [Thread-203180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:08:29.992 [DEBUG] [Thread-203180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:08:29.993 [INFO] [Thread-203180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:08:30.000 [DEBUG] [Thread-203180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:08:30.000 [DEBUG] [Thread-203180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] client lang: <none>
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] server lang: <none>
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] kex follows: False
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:08:30.001 [DEBUG] [Thread-203180] [transport.py] [_log()] Compression: none
2026-02-15T11:08:30.002 [DEBUG] [Thread-203180] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:08:30.058 [DEBUG] [Thread-203180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:08:30.059 [DEBUG] [Thread-203180] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:08:30.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:08:30.060 [DEBUG] [Thread-203180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:08:30.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:08:30.114 [DEBUG] [Thread-203180] [transport.py] [_log()] userauth is OK
2026-02-15T11:08:30.114 [DEBUG] [Thread-203180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:08:30.114 [DEBUG] [Thread-203180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:08:30.114 [DEBUG] [Thread-203180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:08:30.114 [DEBUG] [Thread-203180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:08:30.134 [INFO] [Thread-203180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:08:30.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:08:30.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:08:30.999 [DEBUG] [Thread-203180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:08:31.000 [DEBUG] [Thread-203180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:08:31.047 [DEBUG] [Thread-203180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:08:31.048 [DEBUG] [Thread-203180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:08:31.057 [DEBUG] [Thread-203180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:08:31.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:08:31.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:08:31.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:08:31.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:08:31.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:08:31.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:08:31.094 [DEBUG] [Thread-203180] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:08:38.768 [DEBUG] [Thread-203182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:08:44.216 [DEBUG] [Thread-203183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:08:53.823 [DEBUG] [Thread-203184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:01.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:09:01.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:09:01.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:09:03.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 8, 43), 17.4, 30.57, 0.0, 23.96, 16.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:09:03.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:08:43
2026-02-15T11:09:03.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:09:03.535 [DEBUG] [Thread-203185] [transport.py] [_log()] starting thread (client mode): 0xa81d6290
2026-02-15T11:09:03.535 [DEBUG] [Thread-203185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:09:03.556 [DEBUG] [Thread-203185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:09:03.556 [INFO] [Thread-203185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] client lang: <none>
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] server lang: <none>
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] kex follows: False
2026-02-15T11:09:03.559 [DEBUG] [Thread-203185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:09:03.560 [DEBUG] [Thread-203185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:09:03.560 [DEBUG] [Thread-203185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:09:03.560 [DEBUG] [Thread-203185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:09:03.560 [DEBUG] [Thread-203185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:09:03.560 [DEBUG] [Thread-203185] [transport.py] [_log()] Compression: none
2026-02-15T11:09:03.560 [DEBUG] [Thread-203185] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:09:03.582 [DEBUG] [Thread-203185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:09:03.582 [DEBUG] [Thread-203185] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:09:03.583 [DEBUG] [Thread-203185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:09:03.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:09:03.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:09:03.585 [DEBUG] [Thread-203185] [transport.py] [_log()] userauth is OK
2026-02-15T11:09:03.585 [DEBUG] [Thread-203185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:09:03.586 [DEBUG] [Thread-203185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:09:03.586 [DEBUG] [Thread-203185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:09:03.586 [DEBUG] [Thread-203185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:09:03.605 [INFO] [Thread-203185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:09:03.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:09:04.231 [DEBUG] [Thread-203185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:09:04.232 [DEBUG] [Thread-203185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:09:04.232 [DEBUG] [Thread-203185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:09:04.273 [DEBUG] [Thread-203185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:09:04.273 [DEBUG] [Thread-203185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:09:04.276 [DEBUG] [Thread-203185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:09:04.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:09:04.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:09:04.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:09:04.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:09:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:09:04.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:09:04.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:09:04.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:09:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:09:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.380654 -999.00  +16.80  19.58     37   +2.10 1 1 1 1 1   888    0 17.64 125.86 ----- 19.6 19.6 144.8 23.8 24.4 -28.4 23.4 -27.9 22.3 -26.6 23.3 -28.2
2026-02-15T11:09:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:09:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:09:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.380654
2026-02-15T11:09:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:09:04.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:09:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:09:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:09:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:09:04.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:08:43', tmtdew=17.4, humidity=30.57, cloud=0.0, wind=23.96, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:08:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:09:04.305 [DEBUG] [Thread-203185] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:09:04.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:09:08.860 [DEBUG] [Thread-203188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:13.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:13.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:23.914 [DEBUG] [Thread-203189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:38.950 [DEBUG] [Thread-203190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:44.258 [DEBUG] [Thread-203191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:09:53.987 [DEBUG] [Thread-203192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:09.025 [DEBUG] [Thread-203193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:13.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:13.320 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:24.061 [DEBUG] [Thread-203194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:39.090 [DEBUG] [Thread-203195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:44.293 [DEBUG] [Thread-203196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:10:54.123 [DEBUG] [Thread-203197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:09.159 [DEBUG] [Thread-203198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:13.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:13.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:16.280 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T11:11:24.196 [DEBUG] [Thread-203199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:39.234 [DEBUG] [Thread-203200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:44.332 [DEBUG] [Thread-203201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:11:46.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:11:46.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:11:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:11:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 11, 6), 17.28, 30.73, 0.0, 21.21, 16.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:11:48.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:11:06
2026-02-15T11:11:49.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:11:49.281 [DEBUG] [Thread-203202] [transport.py] [_log()] starting thread (client mode): 0xa81d5c60
2026-02-15T11:11:49.282 [DEBUG] [Thread-203202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:11:49.300 [DEBUG] [Thread-203202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:11:49.301 [INFO] [Thread-203202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] client lang: <none>
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] server lang: <none>
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] kex follows: False
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:11:49.304 [DEBUG] [Thread-203202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:11:49.305 [DEBUG] [Thread-203202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:11:49.305 [DEBUG] [Thread-203202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:11:49.305 [DEBUG] [Thread-203202] [transport.py] [_log()] Compression: none
2026-02-15T11:11:49.305 [DEBUG] [Thread-203202] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:11:49.320 [DEBUG] [Thread-203202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:11:49.321 [DEBUG] [Thread-203202] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:11:49.321 [DEBUG] [Thread-203202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:11:49.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:11:49.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:11:49.323 [DEBUG] [Thread-203202] [transport.py] [_log()] userauth is OK
2026-02-15T11:11:49.323 [DEBUG] [Thread-203202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:11:49.324 [DEBUG] [Thread-203202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:11:49.324 [DEBUG] [Thread-203202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:11:49.324 [DEBUG] [Thread-203202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:11:49.348 [INFO] [Thread-203202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:11:49.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:11:49.998 [DEBUG] [Thread-203202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:11:49.998 [DEBUG] [Thread-203202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:11:49.999 [DEBUG] [Thread-203202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:11:50.039 [DEBUG] [Thread-203202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:11:50.039 [DEBUG] [Thread-203202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:11:50.043 [DEBUG] [Thread-203202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:11:50.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:11:50.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:11:50.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:11:50.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:11:50.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:11:50.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:11:50.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:11:50.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:11:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:11:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.382738 -999.00  +16.90  14.52     35   +1.70 1 1 1 1 1   888    0 18.30 141.62 ----- 14.5 14.5 162.2 19.6 24.6 -28.2 23.6 -27.9 22.6 -27.2 23.5 -28.9
2026-02-15T11:11:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:11:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:11:50.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.382738
2026-02-15T11:11:50.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:11:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:11:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:11:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:11:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:11:50.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:11:06', tmtdew=17.28, humidity=30.73, cloud=0.0, wind=21.21, temperature=16.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:11:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:11:50.080 [DEBUG] [Thread-203202] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:11:50.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:11:50.176 [DEBUG] [Thread-203205] [transport.py] [_log()] starting thread (client mode): 0xa81d74f0
2026-02-15T11:11:50.176 [DEBUG] [Thread-203205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:11:50.191 [DEBUG] [Thread-203205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:11:50.191 [INFO] [Thread-203205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:11:50.198 [DEBUG] [Thread-203205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:11:50.198 [DEBUG] [Thread-203205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:11:50.198 [DEBUG] [Thread-203205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] client lang: <none>
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] server lang: <none>
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] kex follows: False
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] Compression: none
2026-02-15T11:11:50.199 [DEBUG] [Thread-203205] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:11:50.257 [DEBUG] [Thread-203205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:11:50.258 [DEBUG] [Thread-203205] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:11:50.259 [DEBUG] [Thread-203205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:11:50.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:11:50.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:11:50.320 [DEBUG] [Thread-203205] [transport.py] [_log()] userauth is OK
2026-02-15T11:11:50.320 [DEBUG] [Thread-203205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:11:50.321 [DEBUG] [Thread-203205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:11:50.321 [DEBUG] [Thread-203205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:11:50.321 [DEBUG] [Thread-203205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:11:50.339 [INFO] [Thread-203205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:11:50.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:11:50.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:11:51.199 [DEBUG] [Thread-203205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:11:51.199 [DEBUG] [Thread-203205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:11:51.247 [DEBUG] [Thread-203205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:11:51.247 [DEBUG] [Thread-203205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:11:51.257 [DEBUG] [Thread-203205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:11:51.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:11:51.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:11:51.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:11:51.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:11:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:11:51.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:11:51.293 [DEBUG] [Thread-203205] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:11:54.272 [DEBUG] [Thread-203207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:09.325 [DEBUG] [Thread-203208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:13.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:13.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:21.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:12:21.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:12:21.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:12:23.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 11, 42), 18.11, 29.37, 0.0, 17.26, 17.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:12:23.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:11:42
2026-02-15T11:12:23.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:12:24.037 [DEBUG] [Thread-203209] [transport.py] [_log()] starting thread (client mode): 0xa81d6890
2026-02-15T11:12:24.037 [DEBUG] [Thread-203209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:12:24.056 [DEBUG] [Thread-203209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:12:24.056 [INFO] [Thread-203209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] client lang: <none>
2026-02-15T11:12:24.059 [DEBUG] [Thread-203209] [transport.py] [_log()] server lang: <none>
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] kex follows: False
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] Compression: none
2026-02-15T11:12:24.060 [DEBUG] [Thread-203209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:12:24.076 [DEBUG] [Thread-203209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:12:24.077 [DEBUG] [Thread-203209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:12:24.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:12:24.078 [DEBUG] [Thread-203209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:12:24.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:12:24.080 [DEBUG] [Thread-203209] [transport.py] [_log()] userauth is OK
2026-02-15T11:12:24.080 [DEBUG] [Thread-203209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:12:24.080 [DEBUG] [Thread-203209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:12:24.080 [DEBUG] [Thread-203209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:12:24.080 [DEBUG] [Thread-203209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:12:24.099 [INFO] [Thread-203209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:12:24.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:12:24.360 [DEBUG] [Thread-203211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:24.731 [DEBUG] [Thread-203209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:12:24.731 [DEBUG] [Thread-203209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:12:24.732 [DEBUG] [Thread-203209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:12:24.772 [DEBUG] [Thread-203209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:12:24.772 [DEBUG] [Thread-203209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:12:24.775 [DEBUG] [Thread-203209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:12:24.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:12:24.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:12:24.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:12:24.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:12:24.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:12:24.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:12:24.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:12:24.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:12:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:12:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.383432 -999.00  +17.00  14.37     36   +1.80 1 1 1 1 1   888    0 19.08 154.47 ----- 14.4 14.4 160.4 18.7 24.7 -29.7 23.7 -27.8 22.6 -26.9 23.6 -28.6
2026-02-15T11:12:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:12:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:12:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.383432
2026-02-15T11:12:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:12:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:12:24.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:12:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:12:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:12:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:11:42', tmtdew=18.11, humidity=29.37, cloud=0.0, wind=17.26, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:12:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:12:24.800 [DEBUG] [Thread-203209] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:12:24.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:12:24.892 [DEBUG] [Thread-203213] [transport.py] [_log()] starting thread (client mode): 0xa81d5870
2026-02-15T11:12:24.893 [DEBUG] [Thread-203213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:12:24.907 [DEBUG] [Thread-203213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:12:24.907 [INFO] [Thread-203213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:12:24.914 [DEBUG] [Thread-203213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:12:24.914 [DEBUG] [Thread-203213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:12:24.914 [DEBUG] [Thread-203213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:12:24.914 [DEBUG] [Thread-203213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] client lang: <none>
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] server lang: <none>
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] kex follows: False
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] Compression: none
2026-02-15T11:12:24.915 [DEBUG] [Thread-203213] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:12:24.975 [DEBUG] [Thread-203213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:12:24.975 [DEBUG] [Thread-203213] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:12:24.976 [DEBUG] [Thread-203213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:12:24.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:12:24.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:12:25.031 [DEBUG] [Thread-203213] [transport.py] [_log()] userauth is OK
2026-02-15T11:12:25.031 [DEBUG] [Thread-203213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:12:25.031 [DEBUG] [Thread-203213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:12:25.031 [DEBUG] [Thread-203213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:12:25.031 [DEBUG] [Thread-203213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:12:25.050 [INFO] [Thread-203213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:12:25.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:12:25.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:12:25.867 [DEBUG] [Thread-203213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:12:25.867 [DEBUG] [Thread-203213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:12:25.915 [DEBUG] [Thread-203213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:12:25.916 [DEBUG] [Thread-203213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:12:25.926 [DEBUG] [Thread-203213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:12:25.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:12:25.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:12:25.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:12:25.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:12:25.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:12:25.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:12:25.968 [DEBUG] [Thread-203213] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:12:39.392 [DEBUG] [Thread-203215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:44.375 [DEBUG] [Thread-203216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:54.443 [DEBUG] [Thread-203217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:12:55.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:12:55.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:12:55.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:12:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 12, 18), 17.74, 29.97, 0.0, 21.01, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:12:58.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:12:18
2026-02-15T11:12:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:12:59.078 [DEBUG] [Thread-203218] [transport.py] [_log()] starting thread (client mode): 0xa2dc0eb0
2026-02-15T11:12:59.078 [DEBUG] [Thread-203218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:12:59.099 [DEBUG] [Thread-203218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:12:59.099 [INFO] [Thread-203218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] client lang: <none>
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] server lang: <none>
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] kex follows: False
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] Compression: none
2026-02-15T11:12:59.102 [DEBUG] [Thread-203218] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:12:59.121 [DEBUG] [Thread-203218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:12:59.121 [DEBUG] [Thread-203218] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:12:59.122 [DEBUG] [Thread-203218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:12:59.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:12:59.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:12:59.124 [DEBUG] [Thread-203218] [transport.py] [_log()] userauth is OK
2026-02-15T11:12:59.124 [DEBUG] [Thread-203218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:12:59.124 [DEBUG] [Thread-203218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:12:59.124 [DEBUG] [Thread-203218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:12:59.124 [DEBUG] [Thread-203218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:12:59.149 [INFO] [Thread-203218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:12:59.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:12:59.752 [DEBUG] [Thread-203218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:12:59.752 [DEBUG] [Thread-203218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:12:59.752 [DEBUG] [Thread-203218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:12:59.793 [DEBUG] [Thread-203218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:12:59.794 [DEBUG] [Thread-203218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:12:59.797 [DEBUG] [Thread-203218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:12:59.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:12:59.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:12:59.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:12:59.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:12:59.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:12:59.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:12:59.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:12:59.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:12:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:12:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.383779 -999.00  +16.90  17.08     35   +1.40 1 1 1 1 1   888    0 18.76 151.87 ----- 17.1 17.1 136.4 25.0 24.8 -28.9 23.6 -28.2 22.6 -28.4 23.6 -28.3
2026-02-15T11:12:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:12:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:12:59.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.383779
2026-02-15T11:12:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:12:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:12:59.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:12:59.823 [DEBUG] [Thread-203218] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:12:59.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:12:59.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:12:59.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:12:18', tmtdew=17.74, humidity=29.97, cloud=0.0, wind=21.01, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:12:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:12:59.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:12:59.920 [DEBUG] [Thread-203221] [transport.py] [_log()] starting thread (client mode): 0xa5743e20
2026-02-15T11:12:59.920 [DEBUG] [Thread-203221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:12:59.936 [DEBUG] [Thread-203221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:12:59.937 [INFO] [Thread-203221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:12:59.944 [DEBUG] [Thread-203221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] client lang: <none>
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] server lang: <none>
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] kex follows: False
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] Compression: none
2026-02-15T11:12:59.945 [DEBUG] [Thread-203221] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:13:00.004 [DEBUG] [Thread-203221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:13:00.005 [DEBUG] [Thread-203221] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:13:00.005 [DEBUG] [Thread-203221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:13:00.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:13:00.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:13:00.063 [DEBUG] [Thread-203221] [transport.py] [_log()] userauth is OK
2026-02-15T11:13:00.064 [DEBUG] [Thread-203221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:13:00.064 [DEBUG] [Thread-203221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:13:00.064 [DEBUG] [Thread-203221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:13:00.064 [DEBUG] [Thread-203221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:13:00.083 [INFO] [Thread-203221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:13:00.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:13:00.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:13:00.945 [DEBUG] [Thread-203221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:13:00.945 [DEBUG] [Thread-203221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:13:00.993 [DEBUG] [Thread-203221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:13:00.994 [DEBUG] [Thread-203221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:13:01.003 [DEBUG] [Thread-203221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:13:01.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:13:01.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:13:01.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:13:01.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:13:01.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:13:01.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:13:01.041 [DEBUG] [Thread-203221] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:13:09.482 [DEBUG] [Thread-203223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:13:13.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:13:13.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:13:24.535 [DEBUG] [Thread-203224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:13:31.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:13:31.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:13:31.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:13:33.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 12, 53), 17.58, 30.55, 0.0, 23.59, 16.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:13:33.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:12:53
2026-02-15T11:13:33.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:13:33.980 [DEBUG] [Thread-203225] [transport.py] [_log()] starting thread (client mode): 0xa2d03af0
2026-02-15T11:13:33.980 [DEBUG] [Thread-203225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:13:33.997 [DEBUG] [Thread-203225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:13:33.997 [INFO] [Thread-203225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] client lang: <none>
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] server lang: <none>
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] kex follows: False
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] Compression: none
2026-02-15T11:13:34.001 [DEBUG] [Thread-203225] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:13:34.020 [DEBUG] [Thread-203225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:13:34.020 [DEBUG] [Thread-203225] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:13:34.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:13:34.021 [DEBUG] [Thread-203225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:13:34.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:13:34.023 [DEBUG] [Thread-203225] [transport.py] [_log()] userauth is OK
2026-02-15T11:13:34.024 [DEBUG] [Thread-203225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:13:34.024 [DEBUG] [Thread-203225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:13:34.024 [DEBUG] [Thread-203225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:13:34.024 [DEBUG] [Thread-203225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:13:34.048 [INFO] [Thread-203225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:13:34.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:13:34.682 [DEBUG] [Thread-203225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:13:34.683 [DEBUG] [Thread-203225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:13:34.683 [DEBUG] [Thread-203225] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:13:34.723 [DEBUG] [Thread-203225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:13:34.723 [DEBUG] [Thread-203225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:13:34.727 [DEBUG] [Thread-203225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:13:34.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:13:34.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:13:34.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:13:34.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:13:34.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:13:34.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:13:34.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:13:34.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:13:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:13:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.384127 -999.00  +17.00  18.70     35   +1.50 1 1 1 1 1   888    0 18.89 155.10 ----- 18.7 18.7 140.2 21.4 24.7 -28.9 23.6 -27.8 22.6 -27.3 23.6 -27.9
2026-02-15T11:13:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:13:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:13:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.384127
2026-02-15T11:13:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:13:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:13:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:13:34.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:13:34.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:13:34.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:12:53', tmtdew=17.58, humidity=30.55, cloud=0.0, wind=23.59, temperature=16.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:13:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:13:34.752 [DEBUG] [Thread-203225] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:13:34.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:13:34.852 [DEBUG] [Thread-203228] [transport.py] [_log()] starting thread (client mode): 0xa57438b0
2026-02-15T11:13:34.852 [DEBUG] [Thread-203228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:13:34.866 [DEBUG] [Thread-203228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:13:34.867 [INFO] [Thread-203228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:13:34.875 [DEBUG] [Thread-203228] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:13:34.875 [DEBUG] [Thread-203228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:13:34.875 [DEBUG] [Thread-203228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:13:34.875 [DEBUG] [Thread-203228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:13:34.875 [DEBUG] [Thread-203228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] client lang: <none>
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] server lang: <none>
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] kex follows: False
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] Compression: none
2026-02-15T11:13:34.876 [DEBUG] [Thread-203228] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:13:34.935 [DEBUG] [Thread-203228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:13:34.936 [DEBUG] [Thread-203228] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:13:34.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:13:34.937 [DEBUG] [Thread-203228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:13:34.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:13:34.993 [DEBUG] [Thread-203228] [transport.py] [_log()] userauth is OK
2026-02-15T11:13:34.993 [DEBUG] [Thread-203228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:13:34.994 [DEBUG] [Thread-203228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:13:34.994 [DEBUG] [Thread-203228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:13:34.994 [DEBUG] [Thread-203228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:13:35.012 [INFO] [Thread-203228] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:13:35.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:13:35.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:13:35.830 [DEBUG] [Thread-203228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:13:35.830 [DEBUG] [Thread-203228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:13:35.880 [DEBUG] [Thread-203228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:13:35.880 [DEBUG] [Thread-203228] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:13:35.889 [DEBUG] [Thread-203228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:13:35.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:13:35.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:13:35.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:13:35.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:13:35.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:13:35.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:13:35.931 [DEBUG] [Thread-203228] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:13:39.574 [DEBUG] [Thread-203230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:13:44.417 [DEBUG] [Thread-203231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:13:54.624 [DEBUG] [Thread-203232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:05.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:14:05.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:14:05.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:14:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 13, 30), 17.31, 31.07, 0.0, 24.86, 16.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:14:07.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:13:30
2026-02-15T11:14:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:14:08.231 [DEBUG] [Thread-203233] [transport.py] [_log()] starting thread (client mode): 0xa57e1cc0
2026-02-15T11:14:08.231 [DEBUG] [Thread-203233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:14:08.250 [DEBUG] [Thread-203233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:14:08.250 [INFO] [Thread-203233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:08.253 [DEBUG] [Thread-203233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] client lang: <none>
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] server lang: <none>
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] kex follows: False
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] Compression: none
2026-02-15T11:14:08.254 [DEBUG] [Thread-203233] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:14:08.271 [DEBUG] [Thread-203233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:14:08.272 [DEBUG] [Thread-203233] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:14:08.272 [DEBUG] [Thread-203233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:14:08.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:14:08.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:14:08.274 [DEBUG] [Thread-203233] [transport.py] [_log()] userauth is OK
2026-02-15T11:14:08.274 [DEBUG] [Thread-203233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:14:08.275 [DEBUG] [Thread-203233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:14:08.275 [DEBUG] [Thread-203233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:14:08.275 [DEBUG] [Thread-203233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:14:08.299 [INFO] [Thread-203233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:14:08.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:14:08.925 [DEBUG] [Thread-203233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:14:08.926 [DEBUG] [Thread-203233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:14:08.926 [DEBUG] [Thread-203233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:14:08.966 [DEBUG] [Thread-203233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:14:08.966 [DEBUG] [Thread-203233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:14:08.970 [DEBUG] [Thread-203233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:14:08.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:14:08.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:14:08.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:14:08.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:14:08.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:14:08.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:14:08.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:14:08.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:14:08.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:14:08.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.384474 -999.00  +16.80  16.73     35   +1.50 1 1 1 1 1   888    0 19.18 167.27 ----- 16.7 16.7 162.4 20.6 24.8 -29.9 23.6 -28.8 22.7 -27.2 23.6 -29.0
2026-02-15T11:14:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:14:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:14:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.384474
2026-02-15T11:14:08.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:14:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:14:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:14:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:14:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:14:08.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:13:30', tmtdew=17.31, humidity=31.07, cloud=0.0, wind=24.86, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:13:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:14:08.995 [DEBUG] [Thread-203233] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:14:09.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:14:09.089 [DEBUG] [Thread-203236] [transport.py] [_log()] starting thread (client mode): 0xa2d106d0
2026-02-15T11:14:09.090 [DEBUG] [Thread-203236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:14:09.104 [DEBUG] [Thread-203236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:14:09.105 [INFO] [Thread-203236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:14:09.112 [DEBUG] [Thread-203236] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:14:09.112 [DEBUG] [Thread-203236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:14:09.112 [DEBUG] [Thread-203236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:14:09.112 [DEBUG] [Thread-203236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:09.112 [DEBUG] [Thread-203236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] client lang: <none>
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] server lang: <none>
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] kex follows: False
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:14:09.113 [DEBUG] [Thread-203236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:14:09.114 [DEBUG] [Thread-203236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:14:09.114 [DEBUG] [Thread-203236] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:14:09.114 [DEBUG] [Thread-203236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:14:09.114 [DEBUG] [Thread-203236] [transport.py] [_log()] Compression: none
2026-02-15T11:14:09.114 [DEBUG] [Thread-203236] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:14:09.170 [DEBUG] [Thread-203236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:14:09.171 [DEBUG] [Thread-203236] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:14:09.171 [DEBUG] [Thread-203236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:14:09.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:14:09.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:14:09.226 [DEBUG] [Thread-203236] [transport.py] [_log()] userauth is OK
2026-02-15T11:14:09.226 [DEBUG] [Thread-203236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:14:09.227 [DEBUG] [Thread-203236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:14:09.227 [DEBUG] [Thread-203236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:14:09.227 [DEBUG] [Thread-203236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:14:09.245 [INFO] [Thread-203236] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:14:09.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:14:09.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:14:09.661 [DEBUG] [Thread-203238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:10.078 [DEBUG] [Thread-203236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:14:10.078 [DEBUG] [Thread-203236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:14:10.127 [DEBUG] [Thread-203236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:14:10.127 [DEBUG] [Thread-203236] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:14:10.137 [DEBUG] [Thread-203236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:14:10.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:14:10.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:14:10.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:14:10.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:14:10.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:14:10.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:14:10.174 [DEBUG] [Thread-203236] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:14:13.893 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:13.894 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:24.724 [DEBUG] [Thread-203239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:39.761 [DEBUG] [Thread-203240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:40.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:14:40.197 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:14:40.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:14:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 14, 6), 17.38, 30.95, 0.0, 23.08, 16.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:14:42.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:14:06
2026-02-15T11:14:42.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:14:42.983 [DEBUG] [Thread-203241] [transport.py] [_log()] starting thread (client mode): 0xa2d6a290
2026-02-15T11:14:42.983 [DEBUG] [Thread-203241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:14:43.003 [DEBUG] [Thread-203241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:14:43.003 [INFO] [Thread-203241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:14:43.006 [DEBUG] [Thread-203241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] client lang: <none>
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] server lang: <none>
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] kex follows: False
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] Compression: none
2026-02-15T11:14:43.007 [DEBUG] [Thread-203241] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:14:43.024 [DEBUG] [Thread-203241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:14:43.024 [DEBUG] [Thread-203241] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:14:43.025 [DEBUG] [Thread-203241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:14:43.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:14:43.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:14:43.068 [DEBUG] [Thread-203241] [transport.py] [_log()] userauth is OK
2026-02-15T11:14:43.069 [DEBUG] [Thread-203241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:14:43.069 [DEBUG] [Thread-203241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:14:43.069 [DEBUG] [Thread-203241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:14:43.069 [DEBUG] [Thread-203241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:14:43.093 [INFO] [Thread-203241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:14:43.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:14:43.850 [DEBUG] [Thread-203241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:14:43.851 [DEBUG] [Thread-203241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:14:43.851 [DEBUG] [Thread-203241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:14:43.892 [DEBUG] [Thread-203241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:14:43.892 [DEBUG] [Thread-203241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:14:43.895 [DEBUG] [Thread-203241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:14:43.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:14:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:14:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:14:43.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:14:43.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:14:43.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:14:43.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:14:43.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:14:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:14:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.384821 -999.00  +16.60  17.94     35   +1.20 1 1 1 1 1   888    0 18.90 155.73 ----- 17.9 17.9 147.6 24.4 24.6 -31.3 23.6 -28.1 22.7 -27.4 23.6 -29.6
2026-02-15T11:14:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:14:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:14:43.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.384821
2026-02-15T11:14:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:14:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:14:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:14:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:14:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:14:43.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:14:06', tmtdew=17.38, humidity=30.95, cloud=0.0, wind=23.08, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:14:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:14:43.919 [DEBUG] [Thread-203241] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:14:44.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:14:44.014 [DEBUG] [Thread-203244] [transport.py] [_log()] starting thread (client mode): 0xa2d6ba90
2026-02-15T11:14:44.014 [DEBUG] [Thread-203244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:14:44.029 [DEBUG] [Thread-203244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:14:44.029 [INFO] [Thread-203244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:14:44.037 [DEBUG] [Thread-203244] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:14:44.037 [DEBUG] [Thread-203244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:14:44.037 [DEBUG] [Thread-203244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:14:44.037 [DEBUG] [Thread-203244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:44.037 [DEBUG] [Thread-203244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:14:44.037 [DEBUG] [Thread-203244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] client lang: <none>
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] server lang: <none>
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] kex follows: False
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] Compression: none
2026-02-15T11:14:44.038 [DEBUG] [Thread-203244] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:14:44.094 [DEBUG] [Thread-203244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:14:44.095 [DEBUG] [Thread-203244] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:14:44.095 [DEBUG] [Thread-203244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:14:44.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:14:44.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:14:44.154 [DEBUG] [Thread-203244] [transport.py] [_log()] userauth is OK
2026-02-15T11:14:44.154 [DEBUG] [Thread-203244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:14:44.155 [DEBUG] [Thread-203244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:14:44.155 [DEBUG] [Thread-203244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:14:44.155 [DEBUG] [Thread-203244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:14:44.173 [INFO] [Thread-203244] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:14:44.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:14:44.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:14:44.461 [DEBUG] [Thread-203246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:14:45.000 [DEBUG] [Thread-203244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:14:45.000 [DEBUG] [Thread-203244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:14:45.048 [DEBUG] [Thread-203244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:14:45.049 [DEBUG] [Thread-203244] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:14:45.057 [DEBUG] [Thread-203244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:14:45.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:14:45.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:14:45.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:14:45.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:14:45.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:14:45.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:14:45.091 [DEBUG] [Thread-203244] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:14:54.792 [DEBUG] [Thread-203247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:09.845 [DEBUG] [Thread-203248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:14.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:14.034 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:15.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:15:15.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:15:15.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:15:17.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 14, 41), 18.21, 29.17, 0.0, 19.51, 18.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:15:17.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:14:41
2026-02-15T11:15:17.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:15:18.009 [DEBUG] [Thread-203249] [transport.py] [_log()] starting thread (client mode): 0xa57e1300
2026-02-15T11:15:18.009 [DEBUG] [Thread-203249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:15:18.029 [DEBUG] [Thread-203249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:15:18.029 [INFO] [Thread-203249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] client lang: <none>
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] server lang: <none>
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] kex follows: False
2026-02-15T11:15:18.033 [DEBUG] [Thread-203249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:15:18.034 [DEBUG] [Thread-203249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:15:18.034 [DEBUG] [Thread-203249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:15:18.034 [DEBUG] [Thread-203249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:15:18.034 [DEBUG] [Thread-203249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:15:18.034 [DEBUG] [Thread-203249] [transport.py] [_log()] Compression: none
2026-02-15T11:15:18.034 [DEBUG] [Thread-203249] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:15:18.053 [DEBUG] [Thread-203249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:15:18.053 [DEBUG] [Thread-203249] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:15:18.053 [DEBUG] [Thread-203249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:15:18.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:15:18.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:15:18.055 [DEBUG] [Thread-203249] [transport.py] [_log()] userauth is OK
2026-02-15T11:15:18.056 [DEBUG] [Thread-203249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:15:18.056 [DEBUG] [Thread-203249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:15:18.056 [DEBUG] [Thread-203249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:15:18.056 [DEBUG] [Thread-203249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:15:18.080 [INFO] [Thread-203249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:15:18.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:15:18.725 [DEBUG] [Thread-203249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:15:18.726 [DEBUG] [Thread-203249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:15:18.726 [DEBUG] [Thread-203249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:15:18.766 [DEBUG] [Thread-203249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:15:18.767 [DEBUG] [Thread-203249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:15:18.770 [DEBUG] [Thread-203249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:15:18.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:15:18.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:15:18.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:15:18.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:15:18.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:15:18.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:15:18.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:15:18.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:15:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:15:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.385168 -999.00  +16.40  16.90     36   +1.60 1 1 1 1 1   888    0 18.16 130.30 ----- 16.9 16.9 141.4 21.1 24.7 -30.0 23.6 -27.5 22.6 -27.3 23.6 -28.8
2026-02-15T11:15:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:15:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:15:18.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.385168
2026-02-15T11:15:18.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:15:18.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:15:18.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:15:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:15:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:15:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:14:41', tmtdew=18.21, humidity=29.17, cloud=0.0, wind=19.51, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:14:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:15:18.796 [DEBUG] [Thread-203249] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:15:18.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:15:18.891 [DEBUG] [Thread-203252] [transport.py] [_log()] starting thread (client mode): 0xa57e0250
2026-02-15T11:15:18.891 [DEBUG] [Thread-203252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:15:18.905 [DEBUG] [Thread-203252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:15:18.906 [INFO] [Thread-203252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:15:18.913 [DEBUG] [Thread-203252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:15:18.913 [DEBUG] [Thread-203252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:15:18.913 [DEBUG] [Thread-203252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] client lang: <none>
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] server lang: <none>
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] kex follows: False
2026-02-15T11:15:18.914 [DEBUG] [Thread-203252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:15:18.915 [DEBUG] [Thread-203252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:15:18.915 [DEBUG] [Thread-203252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:15:18.915 [DEBUG] [Thread-203252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:15:18.915 [DEBUG] [Thread-203252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:15:18.915 [DEBUG] [Thread-203252] [transport.py] [_log()] Compression: none
2026-02-15T11:15:18.915 [DEBUG] [Thread-203252] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:15:18.973 [DEBUG] [Thread-203252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:15:18.973 [DEBUG] [Thread-203252] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:15:18.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:15:18.975 [DEBUG] [Thread-203252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:15:18.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:15:19.032 [DEBUG] [Thread-203252] [transport.py] [_log()] userauth is OK
2026-02-15T11:15:19.032 [DEBUG] [Thread-203252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:15:19.033 [DEBUG] [Thread-203252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:15:19.033 [DEBUG] [Thread-203252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:15:19.033 [DEBUG] [Thread-203252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:15:19.052 [INFO] [Thread-203252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:15:19.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:15:19.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:15:19.888 [DEBUG] [Thread-203252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:15:19.889 [DEBUG] [Thread-203252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:15:19.936 [DEBUG] [Thread-203252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:15:19.936 [DEBUG] [Thread-203252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:15:19.945 [DEBUG] [Thread-203252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:15:19.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:15:19.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:15:19.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:15:19.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:15:19.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:15:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:15:19.982 [DEBUG] [Thread-203252] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:15:24.881 [DEBUG] [Thread-203254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:39.932 [DEBUG] [Thread-203255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:44.495 [DEBUG] [Thread-203256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:15:50.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:15:50.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:15:50.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:15:51.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 15, 17), 17.69, 30.1, 0.0, 21.03, 16.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:15:51.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:15:17
2026-02-15T11:15:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:15:52.502 [DEBUG] [Thread-203257] [transport.py] [_log()] starting thread (client mode): 0xa2d6a9e0
2026-02-15T11:15:52.502 [DEBUG] [Thread-203257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:15:52.523 [DEBUG] [Thread-203257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:15:52.523 [INFO] [Thread-203257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:15:52.527 [DEBUG] [Thread-203257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] client lang: <none>
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] server lang: <none>
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] kex follows: False
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] Compression: none
2026-02-15T11:15:52.528 [DEBUG] [Thread-203257] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:15:52.547 [DEBUG] [Thread-203257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:15:52.548 [DEBUG] [Thread-203257] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:15:52.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:15:52.550 [DEBUG] [Thread-203257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:15:52.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:15:52.552 [DEBUG] [Thread-203257] [transport.py] [_log()] userauth is OK
2026-02-15T11:15:52.552 [DEBUG] [Thread-203257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:15:52.552 [DEBUG] [Thread-203257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:15:52.552 [DEBUG] [Thread-203257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:15:52.552 [DEBUG] [Thread-203257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:15:52.589 [INFO] [Thread-203257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:15:52.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:15:53.229 [DEBUG] [Thread-203257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:15:53.229 [DEBUG] [Thread-203257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:15:53.229 [DEBUG] [Thread-203257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:15:53.270 [DEBUG] [Thread-203257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:15:53.270 [DEBUG] [Thread-203257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:15:53.273 [DEBUG] [Thread-203257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:15:53.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:15:53.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:15:53.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:15:53.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:15:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:15:53.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:15:53.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:15:53.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:15:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:15:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.385515 -999.00  +16.70  13.27     36   +1.90 1 1 1 1 1   888    0 17.97 119.28 ----- 13.3 13.3 152.2 19.1 24.7 -31.0 23.6 -27.7 22.7 -26.7 23.7 -27.6
2026-02-15T11:15:53.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.385515
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:15:53.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:15:17', tmtdew=17.69, humidity=30.1, cloud=0.0, wind=21.03, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:15:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:15:53.296 [DEBUG] [Thread-203257] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:15:53.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:15:53.392 [DEBUG] [Thread-203260] [transport.py] [_log()] starting thread (client mode): 0xa2d68370
2026-02-15T11:15:53.392 [DEBUG] [Thread-203260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:15:53.406 [DEBUG] [Thread-203260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:15:53.406 [INFO] [Thread-203260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] client lang: <none>
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] server lang: <none>
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] kex follows: False
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:15:53.414 [DEBUG] [Thread-203260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:15:53.415 [DEBUG] [Thread-203260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:15:53.415 [DEBUG] [Thread-203260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:15:53.415 [DEBUG] [Thread-203260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:15:53.415 [DEBUG] [Thread-203260] [transport.py] [_log()] Compression: none
2026-02-15T11:15:53.415 [DEBUG] [Thread-203260] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:15:53.473 [DEBUG] [Thread-203260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:15:53.474 [DEBUG] [Thread-203260] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:15:53.474 [DEBUG] [Thread-203260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:15:53.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:15:53.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:15:53.529 [DEBUG] [Thread-203260] [transport.py] [_log()] userauth is OK
2026-02-15T11:15:53.529 [DEBUG] [Thread-203260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:15:53.529 [DEBUG] [Thread-203260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:15:53.529 [DEBUG] [Thread-203260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:15:53.530 [DEBUG] [Thread-203260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:15:53.548 [INFO] [Thread-203260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:15:53.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:15:53.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:15:54.390 [DEBUG] [Thread-203260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:15:54.390 [DEBUG] [Thread-203260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:15:54.438 [DEBUG] [Thread-203260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:15:54.438 [DEBUG] [Thread-203260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:15:54.446 [DEBUG] [Thread-203260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:15:54.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:15:54.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:15:54.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:15:54.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:15:54.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:15:54.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:15:54.481 [DEBUG] [Thread-203260] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:15:54.971 [DEBUG] [Thread-203262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:10.014 [DEBUG] [Thread-203263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:14.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:14.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:24.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:16:24.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:16:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:16:25.054 [DEBUG] [Thread-203264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 15, 54), 18.34, 28.56, 0.0, 25.37, 17.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:16:26.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:15:54
2026-02-15T11:16:26.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:16:26.899 [DEBUG] [Thread-203265] [transport.py] [_log()] starting thread (client mode): 0xa2d135e0
2026-02-15T11:16:26.899 [DEBUG] [Thread-203265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:16:26.918 [DEBUG] [Thread-203265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:16:26.919 [INFO] [Thread-203265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:16:26.922 [DEBUG] [Thread-203265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] client lang: <none>
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] server lang: <none>
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] kex follows: False
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] Compression: none
2026-02-15T11:16:26.923 [DEBUG] [Thread-203265] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:16:26.943 [DEBUG] [Thread-203265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:16:26.944 [DEBUG] [Thread-203265] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:16:26.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:16:26.946 [DEBUG] [Thread-203265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:16:26.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:16:26.948 [DEBUG] [Thread-203265] [transport.py] [_log()] userauth is OK
2026-02-15T11:16:26.948 [DEBUG] [Thread-203265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:16:26.948 [DEBUG] [Thread-203265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:16:26.949 [DEBUG] [Thread-203265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:16:26.949 [DEBUG] [Thread-203265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:16:26.973 [INFO] [Thread-203265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:16:26.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:16:27.589 [DEBUG] [Thread-203265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:16:27.590 [DEBUG] [Thread-203265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:16:27.590 [DEBUG] [Thread-203265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:16:27.630 [DEBUG] [Thread-203265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:16:27.631 [DEBUG] [Thread-203265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:16:27.634 [DEBUG] [Thread-203265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:16:27.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:16:27.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:16:27.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:16:27.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:16:27.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:16:27.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:16:27.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:16:27.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:16:27.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:16:27.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.386210 -999.00  +17.10  17.65     34   +1.30 1 1 1 1 1   888    0 17.69 107.37 ----- 17.6 17.6 140.2 22.9 24.8 -28.4 23.6 -27.9 22.8 -27.2 23.7 -27.9
2026-02-15T11:16:27.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:16:27.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:16:27.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.386210
2026-02-15T11:16:27.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:16:27.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:16:27.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:16:27.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:16:27.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:16:27.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:15:54', tmtdew=18.34, humidity=28.56, cloud=0.0, wind=25.37, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:16:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:16:27.662 [DEBUG] [Thread-203265] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:16:27.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:16:27.760 [DEBUG] [Thread-203268] [transport.py] [_log()] starting thread (client mode): 0xa2d69600
2026-02-15T11:16:27.761 [DEBUG] [Thread-203268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:16:27.775 [DEBUG] [Thread-203268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:16:27.775 [INFO] [Thread-203268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:16:27.782 [DEBUG] [Thread-203268] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:16:27.783 [DEBUG] [Thread-203268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:16:27.783 [DEBUG] [Thread-203268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:16:27.783 [DEBUG] [Thread-203268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:16:27.783 [DEBUG] [Thread-203268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:16:27.783 [DEBUG] [Thread-203268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:16:27.783 [DEBUG] [Thread-203268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] client lang: <none>
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] server lang: <none>
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] kex follows: False
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:16:27.784 [DEBUG] [Thread-203268] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:16:27.785 [DEBUG] [Thread-203268] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:16:27.785 [DEBUG] [Thread-203268] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:16:27.785 [DEBUG] [Thread-203268] [transport.py] [_log()] Compression: none
2026-02-15T11:16:27.785 [DEBUG] [Thread-203268] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:16:27.842 [DEBUG] [Thread-203268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:16:27.842 [DEBUG] [Thread-203268] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:16:27.843 [DEBUG] [Thread-203268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:16:27.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:16:27.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:16:27.897 [DEBUG] [Thread-203268] [transport.py] [_log()] userauth is OK
2026-02-15T11:16:27.898 [DEBUG] [Thread-203268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:16:27.898 [DEBUG] [Thread-203268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:16:27.898 [DEBUG] [Thread-203268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:16:27.898 [DEBUG] [Thread-203268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:16:27.923 [INFO] [Thread-203268] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:16:27.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:16:27.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:16:28.781 [DEBUG] [Thread-203268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:16:28.781 [DEBUG] [Thread-203268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:16:28.828 [DEBUG] [Thread-203268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:16:28.828 [DEBUG] [Thread-203268] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:16:28.837 [DEBUG] [Thread-203268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:16:28.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:16:28.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:16:28.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:16:28.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:16:28.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:16:28.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:16:28.876 [DEBUG] [Thread-203268] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:16:40.093 [DEBUG] [Thread-203270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:44.528 [DEBUG] [Thread-203271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:55.142 [DEBUG] [Thread-203272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:16:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:16:58.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:16:58.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:17:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 16, 29), 18.3, 28.64, 0.0, 24.61, 17.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:17:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:16:29
2026-02-15T11:17:01.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:17:01.801 [DEBUG] [Thread-203273] [transport.py] [_log()] starting thread (client mode): 0xa2d6b760
2026-02-15T11:17:01.801 [DEBUG] [Thread-203273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:17:01.822 [DEBUG] [Thread-203273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:17:01.822 [INFO] [Thread-203273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:01.824 [DEBUG] [Thread-203273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] client lang: <none>
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] server lang: <none>
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] kex follows: False
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] Compression: none
2026-02-15T11:17:01.825 [DEBUG] [Thread-203273] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:17:01.843 [DEBUG] [Thread-203273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:17:01.844 [DEBUG] [Thread-203273] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:17:01.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:17:01.845 [DEBUG] [Thread-203273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:17:01.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:17:01.846 [DEBUG] [Thread-203273] [transport.py] [_log()] userauth is OK
2026-02-15T11:17:01.847 [DEBUG] [Thread-203273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:17:01.847 [DEBUG] [Thread-203273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:17:01.847 [DEBUG] [Thread-203273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:17:01.847 [DEBUG] [Thread-203273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:17:01.871 [INFO] [Thread-203273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:17:01.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:17:02.507 [DEBUG] [Thread-203273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:17:02.507 [DEBUG] [Thread-203273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:17:02.508 [DEBUG] [Thread-203273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:17:02.548 [DEBUG] [Thread-203273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:17:02.549 [DEBUG] [Thread-203273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:17:02.552 [DEBUG] [Thread-203273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:17:02.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:17:02.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:17:02.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:17:02.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:17:02.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:17:02.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:17:02.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:17:02.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:17:02.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:17:02.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.386557 -999.00  +17.10  19.54     34   +1.20 1 1 1 1 1   888    0 17.95 113.12 ----- 19.5 19.5 125.4 22.7 24.8 -29.5 23.7 -27.6 22.8 -26.6 23.8 -28.9
2026-02-15T11:17:02.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:17:02.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:17:02.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.386557
2026-02-15T11:17:02.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:17:02.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:17:02.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:17:02.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:17:02.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:17:02.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:16:29', tmtdew=18.3, humidity=28.64, cloud=0.0, wind=24.61, temperature=17.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:16:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:17:02.579 [DEBUG] [Thread-203273] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:17:02.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:17:02.674 [DEBUG] [Thread-203276] [transport.py] [_log()] starting thread (client mode): 0xa5741420
2026-02-15T11:17:02.674 [DEBUG] [Thread-203276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:17:02.690 [DEBUG] [Thread-203276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:17:02.690 [INFO] [Thread-203276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:17:02.697 [DEBUG] [Thread-203276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] client lang: <none>
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] server lang: <none>
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] kex follows: False
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:17:02.698 [DEBUG] [Thread-203276] [transport.py] [_log()] Compression: none
2026-02-15T11:17:02.699 [DEBUG] [Thread-203276] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:17:02.758 [DEBUG] [Thread-203276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:17:02.758 [DEBUG] [Thread-203276] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:17:02.759 [DEBUG] [Thread-203276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:17:02.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:17:02.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:17:02.815 [DEBUG] [Thread-203276] [transport.py] [_log()] userauth is OK
2026-02-15T11:17:02.815 [DEBUG] [Thread-203276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:17:02.815 [DEBUG] [Thread-203276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:17:02.815 [DEBUG] [Thread-203276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:17:02.815 [DEBUG] [Thread-203276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:17:02.834 [INFO] [Thread-203276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:17:02.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:17:02.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:17:03.679 [DEBUG] [Thread-203276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:17:03.679 [DEBUG] [Thread-203276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:17:03.727 [DEBUG] [Thread-203276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:17:03.728 [DEBUG] [Thread-203276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:17:03.737 [DEBUG] [Thread-203276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:17:03.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:17:03.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:17:03.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:17:03.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:17:03.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:17:03.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:17:03.774 [DEBUG] [Thread-203276] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:17:10.178 [DEBUG] [Thread-203278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:17:14.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:17:14.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:17:25.239 [DEBUG] [Thread-203279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:17:33.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:17:33.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:17:33.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:17:35.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 17, 5), 19.09, 27.21, 0.0, 26.75, 17.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:17:35.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:17:05
2026-02-15T11:17:36.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:17:36.151 [DEBUG] [Thread-203280] [transport.py] [_log()] starting thread (client mode): 0xa2d129b0
2026-02-15T11:17:36.151 [DEBUG] [Thread-203280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:17:36.169 [DEBUG] [Thread-203280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:17:36.169 [INFO] [Thread-203280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] client lang: <none>
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] server lang: <none>
2026-02-15T11:17:36.171 [DEBUG] [Thread-203280] [transport.py] [_log()] kex follows: False
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] Compression: none
2026-02-15T11:17:36.172 [DEBUG] [Thread-203280] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:17:36.181 [DEBUG] [Thread-203280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:17:36.182 [DEBUG] [Thread-203280] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:17:36.182 [DEBUG] [Thread-203280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:17:36.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:17:36.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:17:36.184 [DEBUG] [Thread-203280] [transport.py] [_log()] userauth is OK
2026-02-15T11:17:36.184 [DEBUG] [Thread-203280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:17:36.184 [DEBUG] [Thread-203280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:17:36.184 [DEBUG] [Thread-203280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:17:36.184 [DEBUG] [Thread-203280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:17:36.202 [INFO] [Thread-203280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:17:36.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:17:36.800 [DEBUG] [Thread-203280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:17:36.801 [DEBUG] [Thread-203280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:17:36.801 [DEBUG] [Thread-203280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:17:36.842 [DEBUG] [Thread-203280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:17:36.842 [DEBUG] [Thread-203280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:17:36.846 [DEBUG] [Thread-203280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:17:36.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:17:36.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:17:36.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:17:36.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:17:36.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:17:36.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:17:36.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.386904 -999.00  +17.10  21.07     35   +1.50 1 1 1 1 1   888    0 18.03 114.66 ----- 21.1 21.1 126.4 27.2 24.8 -28.0 23.8 -28.6 22.8 -27.4 23.8 -27.6
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.386904
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:17:36.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:17:05', tmtdew=19.09, humidity=27.21, cloud=0.0, wind=26.75, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:17:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:17:36.857 [DEBUG] [Thread-203280] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:17:36.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:17:36.944 [DEBUG] [Thread-203283] [transport.py] [_log()] starting thread (client mode): 0xa57e3100
2026-02-15T11:17:36.944 [DEBUG] [Thread-203283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:17:36.961 [DEBUG] [Thread-203283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:17:36.961 [INFO] [Thread-203283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:17:36.969 [DEBUG] [Thread-203283] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:17:36.969 [DEBUG] [Thread-203283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:17:36.969 [DEBUG] [Thread-203283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:17:36.969 [DEBUG] [Thread-203283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:36.969 [DEBUG] [Thread-203283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:17:36.969 [DEBUG] [Thread-203283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] client lang: <none>
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] server lang: <none>
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] kex follows: False
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:17:36.970 [DEBUG] [Thread-203283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:17:36.971 [DEBUG] [Thread-203283] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:17:36.971 [DEBUG] [Thread-203283] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:17:36.971 [DEBUG] [Thread-203283] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:17:36.971 [DEBUG] [Thread-203283] [transport.py] [_log()] Compression: none
2026-02-15T11:17:36.971 [DEBUG] [Thread-203283] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:17:37.028 [DEBUG] [Thread-203283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:17:37.028 [DEBUG] [Thread-203283] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:17:37.029 [DEBUG] [Thread-203283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:17:37.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:17:37.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:17:37.087 [DEBUG] [Thread-203283] [transport.py] [_log()] userauth is OK
2026-02-15T11:17:37.087 [DEBUG] [Thread-203283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:17:37.087 [DEBUG] [Thread-203283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:17:37.087 [DEBUG] [Thread-203283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:17:37.087 [DEBUG] [Thread-203283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:17:37.106 [INFO] [Thread-203283] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:17:37.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:17:37.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:17:37.973 [DEBUG] [Thread-203283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:17:37.973 [DEBUG] [Thread-203283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:17:38.021 [DEBUG] [Thread-203283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:17:38.022 [DEBUG] [Thread-203283] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:17:38.031 [DEBUG] [Thread-203283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:17:38.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:17:38.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:17:38.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-02-15T11:17:38.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:17:38.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:17:38.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:17:38.064 [DEBUG] [Thread-203283] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:17:40.273 [DEBUG] [Thread-203285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:17:44.567 [DEBUG] [Thread-203286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:17:55.329 [DEBUG] [Thread-203287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:08.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:18:08.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:18:08.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:18:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 17, 40), 20.11, 25.46, 0.0, 22.37, 18.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:18:10.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:17:40
2026-02-15T11:18:10.367 [DEBUG] [Thread-203288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:10.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:18:10.743 [DEBUG] [Thread-203289] [transport.py] [_log()] starting thread (client mode): 0xa57e33a0
2026-02-15T11:18:10.743 [DEBUG] [Thread-203289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:18:10.763 [DEBUG] [Thread-203289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:18:10.763 [INFO] [Thread-203289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] client lang: <none>
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] server lang: <none>
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] kex follows: False
2026-02-15T11:18:10.766 [DEBUG] [Thread-203289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:18:10.767 [DEBUG] [Thread-203289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:18:10.767 [DEBUG] [Thread-203289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:18:10.767 [DEBUG] [Thread-203289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:18:10.767 [DEBUG] [Thread-203289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:18:10.767 [DEBUG] [Thread-203289] [transport.py] [_log()] Compression: none
2026-02-15T11:18:10.767 [DEBUG] [Thread-203289] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:18:10.784 [DEBUG] [Thread-203289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:18:10.784 [DEBUG] [Thread-203289] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:18:10.785 [DEBUG] [Thread-203289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:18:10.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:18:10.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:18:10.788 [DEBUG] [Thread-203289] [transport.py] [_log()] userauth is OK
2026-02-15T11:18:10.788 [DEBUG] [Thread-203289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:18:10.788 [DEBUG] [Thread-203289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:18:10.788 [DEBUG] [Thread-203289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:18:10.788 [DEBUG] [Thread-203289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:18:10.807 [INFO] [Thread-203289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:18:10.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:18:11.419 [DEBUG] [Thread-203289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:18:11.420 [DEBUG] [Thread-203289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:18:11.420 [DEBUG] [Thread-203289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:18:11.461 [DEBUG] [Thread-203289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:18:11.461 [DEBUG] [Thread-203289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:18:11.464 [DEBUG] [Thread-203289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:18:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:18:11.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:18:11.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:18:11.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:18:11.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:18:11.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:18:11.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:18:11.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:18:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:18:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.387251 -999.00  +17.10  10.62     35   +1.50 1 1 1 1 1   888    0 18.33 119.99 ----- 10.6 10.6 142.6 22.5 24.8 -29.2 23.8 -28.7 22.9 -28.9 23.8 -30.1
2026-02-15T11:18:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:18:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:18:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.387251
2026-02-15T11:18:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:18:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:18:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:18:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:18:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:18:11.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:17:40', tmtdew=20.11, humidity=25.46, cloud=0.0, wind=22.37, temperature=18.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:17:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:18:11.490 [DEBUG] [Thread-203289] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:18:11.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:18:11.594 [DEBUG] [Thread-203292] [transport.py] [_log()] starting thread (client mode): 0xa2d114b0
2026-02-15T11:18:11.594 [DEBUG] [Thread-203292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:18:11.612 [DEBUG] [Thread-203292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:18:11.613 [INFO] [Thread-203292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:18:11.620 [DEBUG] [Thread-203292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:18:11.620 [DEBUG] [Thread-203292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:18:11.620 [DEBUG] [Thread-203292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] client lang: <none>
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] server lang: <none>
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] kex follows: False
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] Compression: none
2026-02-15T11:18:11.621 [DEBUG] [Thread-203292] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:18:11.679 [DEBUG] [Thread-203292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:18:11.680 [DEBUG] [Thread-203292] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:18:11.680 [DEBUG] [Thread-203292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:18:11.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:18:11.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:18:11.747 [DEBUG] [Thread-203292] [transport.py] [_log()] userauth is OK
2026-02-15T11:18:11.747 [DEBUG] [Thread-203292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:18:11.747 [DEBUG] [Thread-203292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:18:11.747 [DEBUG] [Thread-203292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:18:11.747 [DEBUG] [Thread-203292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:18:11.766 [INFO] [Thread-203292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:18:11.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:18:11.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:18:12.628 [DEBUG] [Thread-203292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:18:12.629 [DEBUG] [Thread-203292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:18:12.677 [DEBUG] [Thread-203292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:18:12.677 [DEBUG] [Thread-203292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:18:12.687 [DEBUG] [Thread-203292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:18:12.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:18:12.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:18:12.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:18:12.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:18:12.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:18:12.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:18:12.723 [DEBUG] [Thread-203292] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:18:14.457 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:14.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:25.407 [DEBUG] [Thread-203294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:40.463 [DEBUG] [Thread-203295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:42.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:18:42.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:18:42.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:18:44.608 [DEBUG] [Thread-203296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:18:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 18, 17), 17.91, 29.32, 0.0, 21.76, 16.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:18:44.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:18:17
2026-02-15T11:18:45.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:18:45.259 [DEBUG] [Thread-203297] [transport.py] [_log()] starting thread (client mode): 0xa2d693c0
2026-02-15T11:18:45.259 [DEBUG] [Thread-203297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:18:45.280 [DEBUG] [Thread-203297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:18:45.280 [INFO] [Thread-203297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] client lang: <none>
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] server lang: <none>
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] kex follows: False
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] Compression: none
2026-02-15T11:18:45.283 [DEBUG] [Thread-203297] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:18:45.301 [DEBUG] [Thread-203297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:18:45.301 [DEBUG] [Thread-203297] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:18:45.301 [DEBUG] [Thread-203297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:18:45.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:18:45.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:18:45.302 [DEBUG] [Thread-203297] [transport.py] [_log()] userauth is OK
2026-02-15T11:18:45.302 [DEBUG] [Thread-203297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:18:45.302 [DEBUG] [Thread-203297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:18:45.302 [DEBUG] [Thread-203297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:18:45.302 [DEBUG] [Thread-203297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:18:45.311 [INFO] [Thread-203297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:18:45.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:18:45.913 [DEBUG] [Thread-203297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:18:45.913 [DEBUG] [Thread-203297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:18:45.914 [DEBUG] [Thread-203297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:18:45.954 [DEBUG] [Thread-203297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:18:45.955 [DEBUG] [Thread-203297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:18:45.959 [DEBUG] [Thread-203297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:18:45.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:18:45.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:18:45.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:18:45.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:18:45.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:18:45.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:18:45.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:18:45.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:18:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:18:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.387599 -999.00  +17.10  19.31     35   +1.60 1 1 1 1 1   888    0 17.73 109.15 ----- 19.3 19.3 162.2 23.5 24.8 -29.4 23.8 -27.9 22.8 -27.3 23.8 -28.1
2026-02-15T11:18:45.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:18:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:18:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.387599
2026-02-15T11:18:45.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:18:45.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:18:45.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:18:45.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:18:45.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:18:45.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:18:17', tmtdew=17.91, humidity=29.32, cloud=0.0, wind=21.76, temperature=16.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:18:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:18:45.987 [DEBUG] [Thread-203297] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:18:46.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:18:46.095 [DEBUG] [Thread-203300] [transport.py] [_log()] starting thread (client mode): 0xa5740460
2026-02-15T11:18:46.095 [DEBUG] [Thread-203300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:18:46.110 [DEBUG] [Thread-203300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:18:46.110 [INFO] [Thread-203300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:18:46.118 [DEBUG] [Thread-203300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] client lang: <none>
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] server lang: <none>
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] kex follows: False
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] Compression: none
2026-02-15T11:18:46.119 [DEBUG] [Thread-203300] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:18:46.176 [DEBUG] [Thread-203300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:18:46.177 [DEBUG] [Thread-203300] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:18:46.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:18:46.178 [DEBUG] [Thread-203300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:18:46.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:18:46.233 [DEBUG] [Thread-203300] [transport.py] [_log()] userauth is OK
2026-02-15T11:18:46.233 [DEBUG] [Thread-203300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:18:46.233 [DEBUG] [Thread-203300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:18:46.233 [DEBUG] [Thread-203300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:18:46.234 [DEBUG] [Thread-203300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:18:46.252 [INFO] [Thread-203300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:18:46.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:18:46.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:18:47.083 [DEBUG] [Thread-203300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:18:47.084 [DEBUG] [Thread-203300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:18:47.137 [DEBUG] [Thread-203300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:18:47.138 [DEBUG] [Thread-203300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:18:47.153 [DEBUG] [Thread-203300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:18:47.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:18:47.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:18:47.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:18:47.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:18:47.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:18:47.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:18:47.213 [DEBUG] [Thread-203300] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:18:55.505 [DEBUG] [Thread-203302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:10.556 [DEBUG] [Thread-203303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:14.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:14.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:19:17.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:19:17.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:19:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 18, 52), 18.02, 29.12, 0.0, 21.4, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:19:19.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:18:52
2026-02-15T11:19:19.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:19:19.770 [DEBUG] [Thread-203304] [transport.py] [_log()] starting thread (client mode): 0xa5742ef0
2026-02-15T11:19:19.770 [DEBUG] [Thread-203304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:19:19.789 [DEBUG] [Thread-203304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:19:19.789 [INFO] [Thread-203304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:19:19.792 [DEBUG] [Thread-203304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:19:19.792 [DEBUG] [Thread-203304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:19:19.792 [DEBUG] [Thread-203304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:19:19.792 [DEBUG] [Thread-203304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:19.792 [DEBUG] [Thread-203304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] client lang: <none>
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] server lang: <none>
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] kex follows: False
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] Compression: none
2026-02-15T11:19:19.793 [DEBUG] [Thread-203304] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:19:19.812 [DEBUG] [Thread-203304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:19:19.813 [DEBUG] [Thread-203304] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:19:19.814 [DEBUG] [Thread-203304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:19:19.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:19:19.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:19:19.816 [DEBUG] [Thread-203304] [transport.py] [_log()] userauth is OK
2026-02-15T11:19:19.816 [DEBUG] [Thread-203304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:19:19.817 [DEBUG] [Thread-203304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:19:19.817 [DEBUG] [Thread-203304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:19:19.817 [DEBUG] [Thread-203304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:19:19.853 [INFO] [Thread-203304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:19:19.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:19:20.489 [DEBUG] [Thread-203304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:19:20.489 [DEBUG] [Thread-203304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:19:20.490 [DEBUG] [Thread-203304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:19:20.530 [DEBUG] [Thread-203304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:19:20.531 [DEBUG] [Thread-203304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:19:20.534 [DEBUG] [Thread-203304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:19:20.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:19:20.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:19:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:19:20.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:19:20.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:19:20.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:19:20.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:19:20.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:19:20.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:19:20.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.387946 -999.00  +17.00  13.11     35   +1.60 1 1 1 1 1   888    0 17.84 107.37 ----- 13.1 13.1 159.5 21.2 24.9 -28.9 23.7 -27.9 22.8 -28.0 23.9 -27.5
2026-02-15T11:19:20.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:19:20.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:19:20.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.387946
2026-02-15T11:19:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:19:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:19:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:19:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:19:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:19:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:18:52', tmtdew=18.02, humidity=29.12, cloud=0.0, wind=21.4, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:18:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:19:20.563 [DEBUG] [Thread-203304] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:19:20.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:19:20.658 [DEBUG] [Thread-203307] [transport.py] [_log()] starting thread (client mode): 0xa2d690c0
2026-02-15T11:19:20.658 [DEBUG] [Thread-203307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:19:20.673 [DEBUG] [Thread-203307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:19:20.673 [INFO] [Thread-203307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:19:20.681 [DEBUG] [Thread-203307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:19:20.681 [DEBUG] [Thread-203307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:19:20.681 [DEBUG] [Thread-203307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:19:20.681 [DEBUG] [Thread-203307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] client lang: <none>
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] server lang: <none>
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] kex follows: False
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] Compression: none
2026-02-15T11:19:20.682 [DEBUG] [Thread-203307] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:19:20.741 [DEBUG] [Thread-203307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:19:20.741 [DEBUG] [Thread-203307] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:19:20.742 [DEBUG] [Thread-203307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:19:20.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:19:20.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:19:20.797 [DEBUG] [Thread-203307] [transport.py] [_log()] userauth is OK
2026-02-15T11:19:20.797 [DEBUG] [Thread-203307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:19:20.798 [DEBUG] [Thread-203307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:19:20.798 [DEBUG] [Thread-203307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:19:20.798 [DEBUG] [Thread-203307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:19:20.816 [INFO] [Thread-203307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:19:20.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:19:20.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:19:21.645 [DEBUG] [Thread-203307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:19:21.646 [DEBUG] [Thread-203307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:19:21.694 [DEBUG] [Thread-203307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:19:21.695 [DEBUG] [Thread-203307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:19:21.704 [DEBUG] [Thread-203307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:19:21.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:19:21.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:19:21.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:19:21.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:19:21.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:19:21.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:19:21.740 [DEBUG] [Thread-203307] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:19:25.592 [DEBUG] [Thread-203309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:40.644 [DEBUG] [Thread-203310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:44.659 [DEBUG] [Thread-203311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:51.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:19:51.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:19:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:19:53.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 19, 27), 17.96, 29.22, 0.0, 18.95, 17.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:19:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:19:27
2026-02-15T11:19:54.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:19:54.178 [DEBUG] [Thread-203312] [transport.py] [_log()] starting thread (client mode): 0xa81d4af0
2026-02-15T11:19:54.178 [DEBUG] [Thread-203312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:19:54.200 [DEBUG] [Thread-203312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:19:54.200 [INFO] [Thread-203312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:19:54.202 [DEBUG] [Thread-203312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:19:54.202 [DEBUG] [Thread-203312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:19:54.202 [DEBUG] [Thread-203312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:19:54.202 [DEBUG] [Thread-203312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:54.202 [DEBUG] [Thread-203312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:54.202 [DEBUG] [Thread-203312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] client lang: <none>
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] server lang: <none>
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] kex follows: False
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] Compression: none
2026-02-15T11:19:54.203 [DEBUG] [Thread-203312] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:19:54.220 [DEBUG] [Thread-203312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:19:54.221 [DEBUG] [Thread-203312] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:19:54.221 [DEBUG] [Thread-203312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:19:54.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:19:54.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:19:54.223 [DEBUG] [Thread-203312] [transport.py] [_log()] userauth is OK
2026-02-15T11:19:54.224 [DEBUG] [Thread-203312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:19:54.224 [DEBUG] [Thread-203312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:19:54.224 [DEBUG] [Thread-203312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:19:54.224 [DEBUG] [Thread-203312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:19:54.247 [INFO] [Thread-203312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:19:54.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:19:54.845 [DEBUG] [Thread-203312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:19:54.845 [DEBUG] [Thread-203312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:19:54.845 [DEBUG] [Thread-203312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:19:54.886 [DEBUG] [Thread-203312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:19:54.887 [DEBUG] [Thread-203312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:19:54.890 [DEBUG] [Thread-203312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:19:54.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:19:54.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:19:54.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:19:54.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:19:54.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:19:54.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:19:54.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:19:54.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:19:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:19:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.388293 -999.00  +17.00  14.86     35   +1.70 1 1 1 1 1   888    0 17.97 103.34 ----- 14.9 14.9 130.6 20.0 24.9 -28.7 23.7 -27.2 22.9 -26.0 23.9 -27.7
2026-02-15T11:19:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:19:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:19:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.388293
2026-02-15T11:19:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:19:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:19:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:19:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:19:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:19:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:19:27', tmtdew=17.96, humidity=29.22, cloud=0.0, wind=18.95, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:19:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:19:54.915 [DEBUG] [Thread-203312] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:19:54.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:19:55.010 [DEBUG] [Thread-203315] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d00
2026-02-15T11:19:55.010 [DEBUG] [Thread-203315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:19:55.025 [DEBUG] [Thread-203315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:19:55.025 [INFO] [Thread-203315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:19:55.032 [DEBUG] [Thread-203315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:19:55.032 [DEBUG] [Thread-203315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] client lang: <none>
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] server lang: <none>
2026-02-15T11:19:55.033 [DEBUG] [Thread-203315] [transport.py] [_log()] kex follows: False
2026-02-15T11:19:55.034 [DEBUG] [Thread-203315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:19:55.034 [DEBUG] [Thread-203315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:19:55.034 [DEBUG] [Thread-203315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:19:55.034 [DEBUG] [Thread-203315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:19:55.034 [DEBUG] [Thread-203315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:19:55.035 [DEBUG] [Thread-203315] [transport.py] [_log()] Compression: none
2026-02-15T11:19:55.035 [DEBUG] [Thread-203315] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:19:55.092 [DEBUG] [Thread-203315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:19:55.093 [DEBUG] [Thread-203315] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:19:55.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:19:55.094 [DEBUG] [Thread-203315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:19:55.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:19:55.149 [DEBUG] [Thread-203315] [transport.py] [_log()] userauth is OK
2026-02-15T11:19:55.150 [DEBUG] [Thread-203315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:19:55.150 [DEBUG] [Thread-203315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:19:55.150 [DEBUG] [Thread-203315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:19:55.150 [DEBUG] [Thread-203315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:19:55.169 [INFO] [Thread-203315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:19:55.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:19:55.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:19:55.681 [DEBUG] [Thread-203317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:19:56.057 [DEBUG] [Thread-203315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:19:56.057 [DEBUG] [Thread-203315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:19:56.105 [DEBUG] [Thread-203315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:19:56.106 [DEBUG] [Thread-203315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:19:56.115 [DEBUG] [Thread-203315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:19:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:19:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:19:56.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:19:56.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:19:56.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:19:56.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:19:56.151 [DEBUG] [Thread-203315] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:20:10.737 [DEBUG] [Thread-203318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:20:14.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:20:14.746 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:20:25.775 [DEBUG] [Thread-203319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:20:26.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:20:26.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:20:26.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:20:28.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 20, 2), 17.77, 29.57, 0.0, 17.54, 16.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:20:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:20:02
2026-02-15T11:20:28.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:20:28.617 [DEBUG] [Thread-203320] [transport.py] [_log()] starting thread (client mode): 0xa2dc0850
2026-02-15T11:20:28.618 [DEBUG] [Thread-203320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:20:28.638 [DEBUG] [Thread-203320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:20:28.638 [INFO] [Thread-203320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:20:28.641 [DEBUG] [Thread-203320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:20:28.641 [DEBUG] [Thread-203320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:20:28.641 [DEBUG] [Thread-203320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:20:28.641 [DEBUG] [Thread-203320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] client lang: <none>
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] server lang: <none>
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] kex follows: False
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] Compression: none
2026-02-15T11:20:28.642 [DEBUG] [Thread-203320] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:20:28.658 [DEBUG] [Thread-203320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:20:28.658 [DEBUG] [Thread-203320] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:20:28.659 [DEBUG] [Thread-203320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:20:28.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:20:28.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:20:28.661 [DEBUG] [Thread-203320] [transport.py] [_log()] userauth is OK
2026-02-15T11:20:28.661 [DEBUG] [Thread-203320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:20:28.661 [DEBUG] [Thread-203320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:20:28.661 [DEBUG] [Thread-203320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:20:28.661 [DEBUG] [Thread-203320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:20:28.679 [INFO] [Thread-203320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:20:28.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:20:29.516 [DEBUG] [Thread-203320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:20:29.516 [DEBUG] [Thread-203320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:20:29.516 [DEBUG] [Thread-203320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:20:29.557 [DEBUG] [Thread-203320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:20:29.557 [DEBUG] [Thread-203320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:20:29.560 [DEBUG] [Thread-203320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:20:29.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:20:29.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:20:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:20:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:20:29.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:20:29.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:20:29.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:20:29.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:20:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:20:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.388640 -999.00  +17.20  11.54     35   +1.90 1 1 1 1 1   888    0 17.71 97.21 ----- 11.5 11.5 157.6 15.7 25.1 -28.8 23.9 -27.0 23.0 -26.5 24.0 -26.9
2026-02-15T11:20:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:20:29.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:20:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.388640
2026-02-15T11:20:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:20:29.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:20:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:20:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:20:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:20:29.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:20:02', tmtdew=17.77, humidity=29.57, cloud=0.0, wind=17.54, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:19:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:20:29.588 [DEBUG] [Thread-203320] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:20: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-02-15T11:20:29.684 [DEBUG] [Thread-203323] [transport.py] [_log()] starting thread (client mode): 0xa81d4b80
2026-02-15T11:20:29.684 [DEBUG] [Thread-203323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:20:29.699 [DEBUG] [Thread-203323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:20:29.699 [INFO] [Thread-203323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:20:29.707 [DEBUG] [Thread-203323] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:20:29.707 [DEBUG] [Thread-203323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:20:29.707 [DEBUG] [Thread-203323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:20:29.707 [DEBUG] [Thread-203323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:20:29.707 [DEBUG] [Thread-203323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:20:29.707 [DEBUG] [Thread-203323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] client lang: <none>
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] server lang: <none>
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] kex follows: False
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] Compression: none
2026-02-15T11:20:29.708 [DEBUG] [Thread-203323] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:20:29.766 [DEBUG] [Thread-203323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:20:29.767 [DEBUG] [Thread-203323] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:20:29.767 [DEBUG] [Thread-203323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:20:29.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:20:29.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:20:29.822 [DEBUG] [Thread-203323] [transport.py] [_log()] userauth is OK
2026-02-15T11:20:29.822 [DEBUG] [Thread-203323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:20:29.822 [DEBUG] [Thread-203323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:20:29.823 [DEBUG] [Thread-203323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:20:29.823 [DEBUG] [Thread-203323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:20:29.842 [INFO] [Thread-203323] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:20: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-02-15T11:20:29.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:20:30.730 [DEBUG] [Thread-203323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:20:30.731 [DEBUG] [Thread-203323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:20:30.778 [DEBUG] [Thread-203323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:20:30.778 [DEBUG] [Thread-203323] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:20:30.788 [DEBUG] [Thread-203323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:20:30.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:20:30.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:20:30.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:20:30.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:20:30.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:20:30.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:20:30.824 [DEBUG] [Thread-203323] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:20:40.811 [DEBUG] [Thread-203325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:20:44.703 [DEBUG] [Thread-203326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:20:55.863 [DEBUG] [Thread-203327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:21:00.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:21:00.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:21:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 20, 37), 18.49, 28.51, 0.0, 18.91, 17.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:21:02.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:20:37
2026-02-15T11:21:03.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:21:03.463 [DEBUG] [Thread-203328] [transport.py] [_log()] starting thread (client mode): 0xa81d6140
2026-02-15T11:21:03.463 [DEBUG] [Thread-203328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:21:03.483 [DEBUG] [Thread-203328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:21:03.483 [INFO] [Thread-203328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] client lang: <none>
2026-02-15T11:21:03.486 [DEBUG] [Thread-203328] [transport.py] [_log()] server lang: <none>
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] kex follows: False
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] Compression: none
2026-02-15T11:21:03.487 [DEBUG] [Thread-203328] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:21:03.503 [DEBUG] [Thread-203328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:21:03.504 [DEBUG] [Thread-203328] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:21:03.504 [DEBUG] [Thread-203328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:21:03.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:21:03.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:21:03.549 [DEBUG] [Thread-203328] [transport.py] [_log()] userauth is OK
2026-02-15T11:21:03.549 [DEBUG] [Thread-203328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:21:03.549 [DEBUG] [Thread-203328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:21:03.549 [DEBUG] [Thread-203328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:21:03.549 [DEBUG] [Thread-203328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:21:03.581 [INFO] [Thread-203328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:21:03.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:21:04.220 [DEBUG] [Thread-203328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:21:04.220 [DEBUG] [Thread-203328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:21:04.221 [DEBUG] [Thread-203328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:21:04.262 [DEBUG] [Thread-203328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:21:04.262 [DEBUG] [Thread-203328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:21:04.265 [DEBUG] [Thread-203328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:21:04.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:21:04.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:21:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:21:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:21:04.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:21:04.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:21:04.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:21:04.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:21:04.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:21:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.389335 -999.00  +17.60  24.30     32   +0.70 1 1 1 1 1   888    0 17.94 99.88 ----- 24.3 24.3 147.6 27.7 25.0 -28.8 24.0 -27.6 23.0 -27.4 24.1 -28.4
2026-02-15T11:21:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:21:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:21:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.389335
2026-02-15T11:21:04.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:21:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:21:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:21:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:21:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:21:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:20:37', tmtdew=18.49, humidity=28.51, cloud=0.0, wind=18.91, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:20:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:21:04.293 [DEBUG] [Thread-203328] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:21:04.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:21:04.388 [DEBUG] [Thread-203331] [transport.py] [_log()] starting thread (client mode): 0xa2d01d50
2026-02-15T11:21:04.388 [DEBUG] [Thread-203331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:21:04.403 [DEBUG] [Thread-203331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:21:04.403 [INFO] [Thread-203331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] client lang: <none>
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] server lang: <none>
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] kex follows: False
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:21:04.411 [DEBUG] [Thread-203331] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:21:04.412 [DEBUG] [Thread-203331] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:21:04.412 [DEBUG] [Thread-203331] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:21:04.412 [DEBUG] [Thread-203331] [transport.py] [_log()] Compression: none
2026-02-15T11:21:04.412 [DEBUG] [Thread-203331] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:21:04.471 [DEBUG] [Thread-203331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:21:04.471 [DEBUG] [Thread-203331] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:21:04.472 [DEBUG] [Thread-203331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:21:04.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:21:04.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:21:04.526 [DEBUG] [Thread-203331] [transport.py] [_log()] userauth is OK
2026-02-15T11:21:04.527 [DEBUG] [Thread-203331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:21:04.527 [DEBUG] [Thread-203331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:21:04.527 [DEBUG] [Thread-203331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:21:04.527 [DEBUG] [Thread-203331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:21:04.547 [INFO] [Thread-203331] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:21:04.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:21:04.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:21:05.392 [DEBUG] [Thread-203331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:21:05.393 [DEBUG] [Thread-203331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:21:05.440 [DEBUG] [Thread-203331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:21:05.440 [DEBUG] [Thread-203331] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:21:05.449 [DEBUG] [Thread-203331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:21:05.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:21:05.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:21:05.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:21:05.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:21:05.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:21:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:21:05.484 [DEBUG] [Thread-203331] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:21:10.897 [DEBUG] [Thread-203333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:14.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:14.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:25.947 [DEBUG] [Thread-203334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:21:35.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:21:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:21:37.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 21, 13), 19.98, 25.4, 0.0, 23.11, 17.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:21:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:21:13
2026-02-15T11:21:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:21:37.888 [DEBUG] [Thread-203335] [transport.py] [_log()] starting thread (client mode): 0xa2d6a9e0
2026-02-15T11:21:37.888 [DEBUG] [Thread-203335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:21:37.903 [DEBUG] [Thread-203335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:21:37.903 [INFO] [Thread-203335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] client lang: <none>
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] server lang: <none>
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] kex follows: False
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] Compression: none
2026-02-15T11:21:37.907 [DEBUG] [Thread-203335] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:21:37.924 [DEBUG] [Thread-203335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:21:37.925 [DEBUG] [Thread-203335] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:21:37.925 [DEBUG] [Thread-203335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:21:37.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:21:37.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:21:37.928 [DEBUG] [Thread-203335] [transport.py] [_log()] userauth is OK
2026-02-15T11:21:37.928 [DEBUG] [Thread-203335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:21:37.928 [DEBUG] [Thread-203335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:21:37.928 [DEBUG] [Thread-203335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:21:37.928 [DEBUG] [Thread-203335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:21:37.943 [INFO] [Thread-203335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:21:37.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:21:38.553 [DEBUG] [Thread-203335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:21:38.554 [DEBUG] [Thread-203335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:21:38.554 [DEBUG] [Thread-203335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:21:38.594 [DEBUG] [Thread-203335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:21:38.595 [DEBUG] [Thread-203335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:21:38.598 [DEBUG] [Thread-203335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:21:38.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:21:38.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:21:38.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:21:38.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:21:38.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:21:38.622 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:21:38.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:21:38.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:21:38.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:21:38.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.389682 -999.00  +17.30  21.98     32   +0.70 1 1 1 1 1   888    0 18.19 108.25 ----- 22.0 22.0 149.4 27.6 25.1 -28.9 23.9 -28.4 23.1 -28.4 24.0 -28.5
2026-02-15T11:21:38.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:21:38.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:21:38.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.389682
2026-02-15T11:21:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:21:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:21:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:21:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:21:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:21:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:21:13', tmtdew=19.98, humidity=25.4, cloud=0.0, wind=23.11, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:21:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:21:38.625 [DEBUG] [Thread-203335] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:21:38.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:21:38.721 [DEBUG] [Thread-203338] [transport.py] [_log()] starting thread (client mode): 0xa2d6a050
2026-02-15T11:21:38.722 [DEBUG] [Thread-203338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:21:38.736 [DEBUG] [Thread-203338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:21:38.737 [INFO] [Thread-203338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:21:38.744 [DEBUG] [Thread-203338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:21:38.744 [DEBUG] [Thread-203338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:21:38.744 [DEBUG] [Thread-203338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:21:38.744 [DEBUG] [Thread-203338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] client lang: <none>
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] server lang: <none>
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] kex follows: False
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] Compression: none
2026-02-15T11:21:38.745 [DEBUG] [Thread-203338] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:21:38.809 [DEBUG] [Thread-203338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:21:38.809 [DEBUG] [Thread-203338] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:21:38.809 [DEBUG] [Thread-203338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:21:38.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:21:38.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:21:38.867 [DEBUG] [Thread-203338] [transport.py] [_log()] userauth is OK
2026-02-15T11:21:38.868 [DEBUG] [Thread-203338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:21:38.868 [DEBUG] [Thread-203338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:21:38.868 [DEBUG] [Thread-203338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:21:38.868 [DEBUG] [Thread-203338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:21:38.890 [INFO] [Thread-203338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:21:38.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:21:38.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:21:39.723 [DEBUG] [Thread-203338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:21:39.724 [DEBUG] [Thread-203338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:21:39.771 [DEBUG] [Thread-203338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:21:39.772 [DEBUG] [Thread-203338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:21:39.781 [DEBUG] [Thread-203338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:21:39.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:21:39.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:21:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:21:39.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:21:39.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:21:39.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:21:39.823 [DEBUG] [Thread-203338] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:21:40.989 [DEBUG] [Thread-203340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:44.758 [DEBUG] [Thread-203341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:21:56.049 [DEBUG] [Thread-203342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:09.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:22:09.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:22:09.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:22:11.088 [DEBUG] [Thread-203343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:11.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 21, 48), 19.24, 27.16, 0.0, 25.55, 17.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:22:11.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:21:48
2026-02-15T11:22:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:22:12.231 [DEBUG] [Thread-203344] [transport.py] [_log()] starting thread (client mode): 0xa57413c0
2026-02-15T11:22:12.231 [DEBUG] [Thread-203344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:22:12.250 [DEBUG] [Thread-203344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:22:12.250 [INFO] [Thread-203344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:12.253 [DEBUG] [Thread-203344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] client lang: <none>
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] server lang: <none>
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] kex follows: False
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] Compression: none
2026-02-15T11:22:12.254 [DEBUG] [Thread-203344] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:22:12.267 [DEBUG] [Thread-203344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:22:12.267 [DEBUG] [Thread-203344] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:22:12.267 [DEBUG] [Thread-203344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:22:12.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:22:12.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:22:12.269 [DEBUG] [Thread-203344] [transport.py] [_log()] userauth is OK
2026-02-15T11:22:12.270 [DEBUG] [Thread-203344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:22:12.270 [DEBUG] [Thread-203344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:22:12.270 [DEBUG] [Thread-203344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:22:12.270 [DEBUG] [Thread-203344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:22:12.293 [INFO] [Thread-203344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:22:12.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:22:12.924 [DEBUG] [Thread-203344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:22:12.924 [DEBUG] [Thread-203344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:22:12.924 [DEBUG] [Thread-203344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:22:12.965 [DEBUG] [Thread-203344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:22:12.965 [DEBUG] [Thread-203344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:22:12.968 [DEBUG] [Thread-203344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:22:12.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:22:12.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:22:12.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:22:12.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:22:12.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:22:12.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:22:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:22:12.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:22:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:22:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.390029 -999.00  +17.30  15.18     33   +1.00 1 1 1 1 1   888    0 18.54 115.71 ----- 15.2 15.2 160.0 30.3 24.9 -31.0 23.9 -28.8 23.1 -27.5 24.0 -29.7
2026-02-15T11:22:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:22:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:22:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.390029
2026-02-15T11:22:12.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:22:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:22:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:22:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:22:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:22:12.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:21:48', tmtdew=19.24, humidity=27.16, cloud=0.0, wind=25.55, temperature=17.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:21:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:22:12.985 [DEBUG] [Thread-203344] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:22:13.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:22:13.086 [DEBUG] [Thread-203347] [transport.py] [_log()] starting thread (client mode): 0xa2dc0dc0
2026-02-15T11:22:13.086 [DEBUG] [Thread-203347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:22:13.100 [DEBUG] [Thread-203347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:22:13.100 [INFO] [Thread-203347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:22:13.108 [DEBUG] [Thread-203347] [transport.py] [_log()] client lang: <none>
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] server lang: <none>
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] kex follows: False
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] Compression: none
2026-02-15T11:22:13.109 [DEBUG] [Thread-203347] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:22:13.167 [DEBUG] [Thread-203347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:22:13.168 [DEBUG] [Thread-203347] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:22:13.168 [DEBUG] [Thread-203347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:22:13.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:22:13.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:22:13.223 [DEBUG] [Thread-203347] [transport.py] [_log()] userauth is OK
2026-02-15T11:22:13.224 [DEBUG] [Thread-203347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:22:13.224 [DEBUG] [Thread-203347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:22:13.224 [DEBUG] [Thread-203347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:22:13.224 [DEBUG] [Thread-203347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:22:13.249 [INFO] [Thread-203347] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:22:13.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:22:13.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:22:14.059 [DEBUG] [Thread-203347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:22:14.059 [DEBUG] [Thread-203347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:22:14.106 [DEBUG] [Thread-203347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:22:14.107 [DEBUG] [Thread-203347] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:22:14.116 [DEBUG] [Thread-203347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:22:14.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:22:14.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:22:14.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:22:14.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:22:14.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:22:14.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:22:14.153 [DEBUG] [Thread-203347] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:22:15.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:15.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:26.130 [DEBUG] [Thread-203349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:41.185 [DEBUG] [Thread-203350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:44.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:22:44.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:22:44.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:22:44.797 [DEBUG] [Thread-203351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:22:46.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 22, 23), 19.25, 27.18, 0.0, 23.89, 17.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:22:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:22:23
2026-02-15T11:22:46.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:22:46.814 [DEBUG] [Thread-203352] [transport.py] [_log()] starting thread (client mode): 0xa2dc3640
2026-02-15T11:22:46.814 [DEBUG] [Thread-203352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:22:46.835 [DEBUG] [Thread-203352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:22:46.836 [INFO] [Thread-203352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:22:46.839 [DEBUG] [Thread-203352] [transport.py] [_log()] client lang: <none>
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] server lang: <none>
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] kex follows: False
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] Compression: none
2026-02-15T11:22:46.840 [DEBUG] [Thread-203352] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:22:46.857 [DEBUG] [Thread-203352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:22:46.858 [DEBUG] [Thread-203352] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:22:46.858 [DEBUG] [Thread-203352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:22:46.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:22:46.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:22:46.860 [DEBUG] [Thread-203352] [transport.py] [_log()] userauth is OK
2026-02-15T11:22:46.860 [DEBUG] [Thread-203352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:22:46.861 [DEBUG] [Thread-203352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:22:46.861 [DEBUG] [Thread-203352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:22:46.861 [DEBUG] [Thread-203352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:22:46.883 [INFO] [Thread-203352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:22:46.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:22:47.521 [DEBUG] [Thread-203352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:22:47.521 [DEBUG] [Thread-203352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:22:47.522 [DEBUG] [Thread-203352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:22:47.563 [DEBUG] [Thread-203352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:22:47.563 [DEBUG] [Thread-203352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:22:47.565 [DEBUG] [Thread-203352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:22:47.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:22:47.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:22:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:22:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:22:47.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:22:47.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:22:47.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.390376 -999.00  +17.40  13.96     33   +1.00 1 1 1 1 1   888    0 18.76 121.86 ----- 14.0 14.0 148.8 28.8 25.0 -29.0 23.9 -27.9 22.9 -27.3 24.1 -28.6
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.390376
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:22:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:22:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:22:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:22:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:22:47.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:22:23', tmtdew=19.25, humidity=27.18, cloud=0.0, wind=23.89, temperature=17.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:22:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:22:47.583 [DEBUG] [Thread-203352] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:22:47.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:22:47.674 [DEBUG] [Thread-203355] [transport.py] [_log()] starting thread (client mode): 0xa2db6410
2026-02-15T11:22:47.674 [DEBUG] [Thread-203355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:22:47.688 [DEBUG] [Thread-203355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:22:47.689 [INFO] [Thread-203355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] client lang: <none>
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] server lang: <none>
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] kex follows: False
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:22:47.696 [DEBUG] [Thread-203355] [transport.py] [_log()] Compression: none
2026-02-15T11:22:47.697 [DEBUG] [Thread-203355] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:22:47.756 [DEBUG] [Thread-203355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:22:47.757 [DEBUG] [Thread-203355] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:22:47.757 [DEBUG] [Thread-203355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:22:47.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:22:47.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:22:47.813 [DEBUG] [Thread-203355] [transport.py] [_log()] userauth is OK
2026-02-15T11:22:47.813 [DEBUG] [Thread-203355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:22:47.814 [DEBUG] [Thread-203355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:22:47.814 [DEBUG] [Thread-203355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:22:47.814 [DEBUG] [Thread-203355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:22:47.832 [INFO] [Thread-203355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:22:47.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:22:47.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:22:48.667 [DEBUG] [Thread-203355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:22:48.667 [DEBUG] [Thread-203355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:22:48.715 [DEBUG] [Thread-203355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:22:48.716 [DEBUG] [Thread-203355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:22:48.725 [DEBUG] [Thread-203355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:22:48.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:22:48.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:22:48.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:22:48.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:22:48.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:22:48.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:22:48.762 [DEBUG] [Thread-203355] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:22:56.221 [DEBUG] [Thread-203357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:11.269 [DEBUG] [Thread-203358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:15.168 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:15.169 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:18.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:23:18.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:23:18.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:23:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 22, 58), 19.5, 26.41, 0.0, 24.23, 17.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:23:20.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:22:58
2026-02-15T11:23:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:23:21.229 [DEBUG] [Thread-203359] [transport.py] [_log()] starting thread (client mode): 0xa81d5330
2026-02-15T11:23:21.230 [DEBUG] [Thread-203359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:23:21.250 [DEBUG] [Thread-203359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:23:21.250 [INFO] [Thread-203359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:21.253 [DEBUG] [Thread-203359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] client lang: <none>
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] server lang: <none>
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] kex follows: False
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] Compression: none
2026-02-15T11:23:21.254 [DEBUG] [Thread-203359] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:23:21.272 [DEBUG] [Thread-203359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:23:21.272 [DEBUG] [Thread-203359] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:23:21.273 [DEBUG] [Thread-203359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:23:21.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:23:21.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:23:21.275 [DEBUG] [Thread-203359] [transport.py] [_log()] userauth is OK
2026-02-15T11:23:21.275 [DEBUG] [Thread-203359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:23:21.275 [DEBUG] [Thread-203359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:23:21.275 [DEBUG] [Thread-203359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:23:21.275 [DEBUG] [Thread-203359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:23:21.299 [INFO] [Thread-203359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:23:21.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:23:22.074 [DEBUG] [Thread-203359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:23:22.074 [DEBUG] [Thread-203359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:23:22.075 [DEBUG] [Thread-203359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:23:22.115 [DEBUG] [Thread-203359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:23:22.115 [DEBUG] [Thread-203359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:23:22.118 [DEBUG] [Thread-203359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:23:22.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:23:22.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:23:22.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:23:22.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:23:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:23:22.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:23:22.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:23:22.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:23:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:23:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.390724 -999.00  +17.60  24.90     32   +0.80 1 1 1 1 1   888    0 19.05 126.63 ----- 24.9 24.9 136.6 32.6 25.1 -29.0 23.9 -27.7 23.1 -26.5 24.1 -28.6
2026-02-15T11:23:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:23:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:23:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.390724
2026-02-15T11:23:22.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:23:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:23:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:23:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:23:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:23:22.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:22:58', tmtdew=19.5, humidity=26.41, cloud=0.0, wind=24.23, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:22:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:23:22.143 [DEBUG] [Thread-203359] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:23:22.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:23:22.238 [DEBUG] [Thread-203362] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a60
2026-02-15T11:23:22.239 [DEBUG] [Thread-203362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:23:22.253 [DEBUG] [Thread-203362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:23:22.253 [INFO] [Thread-203362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:23:22.260 [DEBUG] [Thread-203362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:23:22.260 [DEBUG] [Thread-203362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:23:22.260 [DEBUG] [Thread-203362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] client lang: <none>
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] server lang: <none>
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] kex follows: False
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] Compression: none
2026-02-15T11:23:22.261 [DEBUG] [Thread-203362] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:23:22.320 [DEBUG] [Thread-203362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:23:22.321 [DEBUG] [Thread-203362] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:23:22.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:23:22.322 [DEBUG] [Thread-203362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:23:22.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:23:22.377 [DEBUG] [Thread-203362] [transport.py] [_log()] userauth is OK
2026-02-15T11:23:22.377 [DEBUG] [Thread-203362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:23:22.378 [DEBUG] [Thread-203362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:23:22.378 [DEBUG] [Thread-203362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:23:22.378 [DEBUG] [Thread-203362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:23:22.396 [INFO] [Thread-203362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:23:22.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:23:22.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:23:23.244 [DEBUG] [Thread-203362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:23:23.245 [DEBUG] [Thread-203362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:23:23.293 [DEBUG] [Thread-203362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:23:23.293 [DEBUG] [Thread-203362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:23:23.302 [DEBUG] [Thread-203362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:23:23.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:23:23.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:23:23.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:23:23.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:23:23.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:23:23.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:23:23.339 [DEBUG] [Thread-203362] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:23:26.305 [DEBUG] [Thread-203364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:41.356 [DEBUG] [Thread-203365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:44.830 [DEBUG] [Thread-203366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:53.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:23:53.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:23:53.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:23:55.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 23, 34), 20.25, 25.36, 0.0, 21.24, 18.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:23:55.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:23:34
2026-02-15T11:23:55.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:23:55.819 [DEBUG] [Thread-203367] [transport.py] [_log()] starting thread (client mode): 0xa2dc0940
2026-02-15T11:23:55.819 [DEBUG] [Thread-203367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:23:55.839 [DEBUG] [Thread-203367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:23:55.840 [INFO] [Thread-203367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:23:55.843 [DEBUG] [Thread-203367] [transport.py] [_log()] client lang: <none>
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] server lang: <none>
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] kex follows: False
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] Compression: none
2026-02-15T11:23:55.844 [DEBUG] [Thread-203367] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:23:55.864 [DEBUG] [Thread-203367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:23:55.865 [DEBUG] [Thread-203367] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:23:55.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:23:55.866 [DEBUG] [Thread-203367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:23:55.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:23:55.868 [DEBUG] [Thread-203367] [transport.py] [_log()] userauth is OK
2026-02-15T11:23:55.868 [DEBUG] [Thread-203367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:23:55.868 [DEBUG] [Thread-203367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:23:55.868 [DEBUG] [Thread-203367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:23:55.868 [DEBUG] [Thread-203367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:23:55.893 [INFO] [Thread-203367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:23:55.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:23:56.392 [DEBUG] [Thread-203369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:23:56.511 [DEBUG] [Thread-203367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:23:56.511 [DEBUG] [Thread-203367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:23:56.511 [DEBUG] [Thread-203367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:23:56.553 [DEBUG] [Thread-203367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:23:56.553 [DEBUG] [Thread-203367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:23:56.556 [DEBUG] [Thread-203367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:23:56.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:23:56.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:23:56.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:23:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:23:56.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:23:56.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:23:56.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:23:56.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:23:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:23:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.391071 -999.00  +17.40  14.23     31   +0.40 1 1 1 1 1   888    0 18.95 135.90 ----- 14.2 14.2 142.8 23.0 25.1 -29.0 23.9 -28.2 23.1 -26.8 24.1 -28.6
2026-02-15T11:23:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:23:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:23:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.391071
2026-02-15T11:23:56.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:23:56.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:23:56.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:23:56.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:23:56.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:23:56.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:23:34', tmtdew=20.25, humidity=25.36, cloud=0.0, wind=21.24, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:23:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:23:56.583 [DEBUG] [Thread-203367] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:23:56.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:23:56.679 [DEBUG] [Thread-203371] [transport.py] [_log()] starting thread (client mode): 0xa57c2650
2026-02-15T11:23:56.679 [DEBUG] [Thread-203371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:23:56.694 [DEBUG] [Thread-203371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:23:56.694 [INFO] [Thread-203371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:23:56.701 [DEBUG] [Thread-203371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:23:56.702 [DEBUG] [Thread-203371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:23:56.702 [DEBUG] [Thread-203371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:23:56.702 [DEBUG] [Thread-203371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:56.702 [DEBUG] [Thread-203371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:23:56.702 [DEBUG] [Thread-203371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:56.702 [DEBUG] [Thread-203371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] client lang: <none>
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] server lang: <none>
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] kex follows: False
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:23:56.703 [DEBUG] [Thread-203371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:23:56.704 [DEBUG] [Thread-203371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:23:56.704 [DEBUG] [Thread-203371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:23:56.704 [DEBUG] [Thread-203371] [transport.py] [_log()] Compression: none
2026-02-15T11:23:56.704 [DEBUG] [Thread-203371] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:23:56.762 [DEBUG] [Thread-203371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:23:56.763 [DEBUG] [Thread-203371] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:23:56.763 [DEBUG] [Thread-203371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:23:56.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:23:56.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:23:56.823 [DEBUG] [Thread-203371] [transport.py] [_log()] userauth is OK
2026-02-15T11:23:56.823 [DEBUG] [Thread-203371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:23:56.823 [DEBUG] [Thread-203371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:23:56.823 [DEBUG] [Thread-203371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:23:56.823 [DEBUG] [Thread-203371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:23:56.842 [INFO] [Thread-203371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:23:56.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:23:56.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:23:57.687 [DEBUG] [Thread-203371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:23:57.687 [DEBUG] [Thread-203371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:23:57.735 [DEBUG] [Thread-203371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:23:57.735 [DEBUG] [Thread-203371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:23:57.745 [DEBUG] [Thread-203371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:23:57.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:23:57.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:23:57.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:23:57.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:23:57.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:23:57.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:23:57.787 [DEBUG] [Thread-203371] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:24:11.431 [DEBUG] [Thread-203373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:24:15.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:24:15.310 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:24:26.487 [DEBUG] [Thread-203374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:24:27.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:24:27.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:24:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:24:29.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 24, 9), 19.49, 26.78, 0.0, 18.56, 17.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:24:29.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:24:09
2026-02-15T11:24:30.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:24:30.202 [DEBUG] [Thread-203375] [transport.py] [_log()] starting thread (client mode): 0xa57c36d0
2026-02-15T11:24:30.202 [DEBUG] [Thread-203375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:24:30.226 [DEBUG] [Thread-203375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:24:30.226 [INFO] [Thread-203375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] client lang: <none>
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] server lang: <none>
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] kex follows: False
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:24:30.230 [DEBUG] [Thread-203375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:24:30.231 [DEBUG] [Thread-203375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:24:30.231 [DEBUG] [Thread-203375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:24:30.231 [DEBUG] [Thread-203375] [transport.py] [_log()] Compression: none
2026-02-15T11:24:30.231 [DEBUG] [Thread-203375] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:24:30.248 [DEBUG] [Thread-203375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:24:30.249 [DEBUG] [Thread-203375] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:24:30.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:24:30.250 [DEBUG] [Thread-203375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:24:30.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:24:30.252 [DEBUG] [Thread-203375] [transport.py] [_log()] userauth is OK
2026-02-15T11:24:30.252 [DEBUG] [Thread-203375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:24:30.253 [DEBUG] [Thread-203375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:24:30.253 [DEBUG] [Thread-203375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:24:30.253 [DEBUG] [Thread-203375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:24:30.289 [INFO] [Thread-203375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:24:30.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:24:30.949 [DEBUG] [Thread-203375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:24:30.949 [DEBUG] [Thread-203375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:24:30.950 [DEBUG] [Thread-203375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:24:30.990 [DEBUG] [Thread-203375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:24:30.991 [DEBUG] [Thread-203375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:24:30.994 [DEBUG] [Thread-203375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:24:31.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:24:31.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:24:31.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:24:31.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:24:31.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:24:31.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:24:31.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:24:31.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:24:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:24:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.391418 -999.00  +17.10  14.67     33   +0.80 1 1 1 1 1   888    0 19.17 131.75 ----- 14.7 14.7 131.2 18.9 25.1 -28.1 23.9 -28.0 23.2 -27.3 24.1 -28.1
2026-02-15T11:24:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:24:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:24:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.391418
2026-02-15T11:24:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:24:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:24:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:24:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:24:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:24:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:24:09', tmtdew=19.49, humidity=26.78, cloud=0.0, wind=18.56, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:23:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:24:31.021 [DEBUG] [Thread-203375] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:24:31.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:24:31.116 [DEBUG] [Thread-203378] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd00
2026-02-15T11:24:31.117 [DEBUG] [Thread-203378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:24:31.133 [DEBUG] [Thread-203378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:24:31.134 [INFO] [Thread-203378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:24:31.141 [DEBUG] [Thread-203378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:24:31.142 [DEBUG] [Thread-203378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] client lang: <none>
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] server lang: <none>
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] kex follows: False
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:24:31.143 [DEBUG] [Thread-203378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:24:31.144 [DEBUG] [Thread-203378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:24:31.144 [DEBUG] [Thread-203378] [transport.py] [_log()] Compression: none
2026-02-15T11:24:31.144 [DEBUG] [Thread-203378] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:24:31.207 [DEBUG] [Thread-203378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:24:31.208 [DEBUG] [Thread-203378] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:24:31.208 [DEBUG] [Thread-203378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:24:31.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:24:31.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:24:31.270 [DEBUG] [Thread-203378] [transport.py] [_log()] userauth is OK
2026-02-15T11:24:31.270 [DEBUG] [Thread-203378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:24:31.270 [DEBUG] [Thread-203378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:24:31.270 [DEBUG] [Thread-203378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:24:31.271 [DEBUG] [Thread-203378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:24:31.290 [INFO] [Thread-203378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:24:31.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:24:31.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:24:32.180 [DEBUG] [Thread-203378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:24:32.180 [DEBUG] [Thread-203378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:24:32.228 [DEBUG] [Thread-203378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:24:32.229 [DEBUG] [Thread-203378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:24:32.238 [DEBUG] [Thread-203378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:24:32.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:24:32.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:24:32.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:24:32.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:24:32.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:24:32.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:24:32.276 [DEBUG] [Thread-203378] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:24:41.525 [DEBUG] [Thread-203380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:24:44.878 [DEBUG] [Thread-203381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:24:56.579 [DEBUG] [Thread-203382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:02.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:25:02.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:25:02.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:25:04.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 24, 46), 19.19, 27.13, 0.0, 18.4, 17.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:25:04.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:24:46
2026-02-15T11:25:04.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:25:04.910 [DEBUG] [Thread-203383] [transport.py] [_log()] starting thread (client mode): 0xa2d12e90
2026-02-15T11:25:04.910 [DEBUG] [Thread-203383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:25:04.930 [DEBUG] [Thread-203383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:25:04.931 [INFO] [Thread-203383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:04.933 [DEBUG] [Thread-203383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] client lang: <none>
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] server lang: <none>
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] kex follows: False
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] Compression: none
2026-02-15T11:25:04.934 [DEBUG] [Thread-203383] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:25:04.951 [DEBUG] [Thread-203383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:25:04.952 [DEBUG] [Thread-203383] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:25:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:25:04.953 [DEBUG] [Thread-203383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:25:04.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:25:04.955 [DEBUG] [Thread-203383] [transport.py] [_log()] userauth is OK
2026-02-15T11:25:04.955 [DEBUG] [Thread-203383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:25:04.955 [DEBUG] [Thread-203383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:25:04.955 [DEBUG] [Thread-203383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:25:04.955 [DEBUG] [Thread-203383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:25:04.980 [INFO] [Thread-203383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:25:04.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:25:08.344 [DEBUG] [Thread-203383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:25:08.345 [DEBUG] [Thread-203383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:25:08.345 [DEBUG] [Thread-203383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:25:08.385 [DEBUG] [Thread-203383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:25:08.385 [DEBUG] [Thread-203383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:25:08.389 [DEBUG] [Thread-203383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:25:08.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:25:08.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:25:08.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:25:08.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:25:08.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:25:08.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:25:08.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:25:08.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:25:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:25:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.392113 -999.00  +17.70  18.26     33   +1.50 1 1 1 1 1   888    0 19.62 135.00 ----- 18.3 18.3 128.2 21.9 25.2 -28.5 23.9 -27.1 23.3 -26.2 24.2 -27.7
2026-02-15T11:25:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:25:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:25:08.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.392113
2026-02-15T11:25:08.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:25:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:25:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:25:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:25:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:25:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:24:46', tmtdew=19.19, humidity=27.13, cloud=0.0, wind=18.4, temperature=17.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:24:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:25:08.417 [DEBUG] [Thread-203383] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:25:08.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:25:08.513 [DEBUG] [Thread-203386] [transport.py] [_log()] starting thread (client mode): 0xa2d6b220
2026-02-15T11:25:08.513 [DEBUG] [Thread-203386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:25:08.529 [DEBUG] [Thread-203386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:25:08.530 [INFO] [Thread-203386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:25:08.540 [DEBUG] [Thread-203386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:25:08.541 [DEBUG] [Thread-203386] [transport.py] [_log()] client lang: <none>
2026-02-15T11:25:08.542 [DEBUG] [Thread-203386] [transport.py] [_log()] server lang: <none>
2026-02-15T11:25:08.542 [DEBUG] [Thread-203386] [transport.py] [_log()] kex follows: False
2026-02-15T11:25:08.542 [DEBUG] [Thread-203386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:25:08.542 [DEBUG] [Thread-203386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:25:08.542 [DEBUG] [Thread-203386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:25:08.543 [DEBUG] [Thread-203386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:25:08.543 [DEBUG] [Thread-203386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:25:08.543 [DEBUG] [Thread-203386] [transport.py] [_log()] Compression: none
2026-02-15T11:25:08.543 [DEBUG] [Thread-203386] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:25:08.601 [DEBUG] [Thread-203386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:25:08.602 [DEBUG] [Thread-203386] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:25:08.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:25:08.603 [DEBUG] [Thread-203386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:25:08.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:25:08.658 [DEBUG] [Thread-203386] [transport.py] [_log()] userauth is OK
2026-02-15T11:25:08.658 [DEBUG] [Thread-203386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:25:08.659 [DEBUG] [Thread-203386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:25:08.659 [DEBUG] [Thread-203386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:25:08.659 [DEBUG] [Thread-203386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:25:08.678 [INFO] [Thread-203386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:25:08.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:25:08.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:25:09.528 [DEBUG] [Thread-203386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:25:09.528 [DEBUG] [Thread-203386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:25:09.575 [DEBUG] [Thread-203386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:25:09.576 [DEBUG] [Thread-203386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:25:09.585 [DEBUG] [Thread-203386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:25:09.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:25:09.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:25: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
2026-02-15T11:25:09.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:25:09.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:25:09.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:25:09.621 [DEBUG] [Thread-203386] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:25:11.618 [DEBUG] [Thread-203388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:15.457 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:15.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:26.678 [DEBUG] [Thread-203389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:39.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:25:39.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:25:39.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:25:41.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 25, 21), 18.92, 27.56, 0.0, 17.24, 17.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:25:41.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:25:21
2026-02-15T11:25:41.718 [DEBUG] [Thread-203390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:41.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:25:42.119 [DEBUG] [Thread-203391] [transport.py] [_log()] starting thread (client mode): 0xa575bd00
2026-02-15T11:25:42.119 [DEBUG] [Thread-203391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:25:42.140 [DEBUG] [Thread-203391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:25:42.140 [INFO] [Thread-203391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:25:42.141 [DEBUG] [Thread-203391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:25:42.141 [DEBUG] [Thread-203391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:25:42.141 [DEBUG] [Thread-203391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] client lang: <none>
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] server lang: <none>
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] kex follows: False
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:25:42.142 [DEBUG] [Thread-203391] [transport.py] [_log()] Compression: none
2026-02-15T11:25:42.143 [DEBUG] [Thread-203391] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:25:42.156 [DEBUG] [Thread-203391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:25:42.156 [DEBUG] [Thread-203391] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:25:42.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:25:42.158 [DEBUG] [Thread-203391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:25:42.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:25:42.160 [DEBUG] [Thread-203391] [transport.py] [_log()] userauth is OK
2026-02-15T11:25:42.160 [DEBUG] [Thread-203391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:25:42.161 [DEBUG] [Thread-203391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:25:42.161 [DEBUG] [Thread-203391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:25:42.161 [DEBUG] [Thread-203391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:25:42.184 [INFO] [Thread-203391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:25:42.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:25:42.771 [DEBUG] [Thread-203391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:25:42.772 [DEBUG] [Thread-203391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:25:42.772 [DEBUG] [Thread-203391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:25:42.812 [DEBUG] [Thread-203391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:25:42.813 [DEBUG] [Thread-203391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:25:42.816 [DEBUG] [Thread-203391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:25:42.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:25:42.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:25:42.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:25:42.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:25:42.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:25:42.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:25:42.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:25:42.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:25:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:25:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.392459 -999.00  +17.40  13.81     33   +1.10 1 1 1 1 1   888    0 19.26 127.46 ----- 13.8 13.8 118.6 22.2 25.3 -29.4 24.1 -26.9 23.4 -26.9 24.3 -28.5
2026-02-15T11:25:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:25:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:25:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.392459
2026-02-15T11:25:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:25:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:25:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:25:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:25:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:25:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:25:21', tmtdew=18.92, humidity=27.56, cloud=0.0, wind=17.24, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:25:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:25:42.844 [DEBUG] [Thread-203391] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:25:42.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:25:42.944 [DEBUG] [Thread-203394] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fe0
2026-02-15T11:25:42.944 [DEBUG] [Thread-203394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:25:42.961 [DEBUG] [Thread-203394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:25:42.961 [INFO] [Thread-203394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] client lang: <none>
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] server lang: <none>
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] kex follows: False
2026-02-15T11:25:42.968 [DEBUG] [Thread-203394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:25:42.969 [DEBUG] [Thread-203394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:25:42.969 [DEBUG] [Thread-203394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:25:42.969 [DEBUG] [Thread-203394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:25:42.969 [DEBUG] [Thread-203394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:25:42.969 [DEBUG] [Thread-203394] [transport.py] [_log()] Compression: none
2026-02-15T11:25:42.969 [DEBUG] [Thread-203394] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:25:43.025 [DEBUG] [Thread-203394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:25:43.026 [DEBUG] [Thread-203394] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:25:43.026 [DEBUG] [Thread-203394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:25:43.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:25:43.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:25:43.082 [DEBUG] [Thread-203394] [transport.py] [_log()] userauth is OK
2026-02-15T11:25:43.082 [DEBUG] [Thread-203394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:25:43.082 [DEBUG] [Thread-203394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:25:43.083 [DEBUG] [Thread-203394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:25:43.083 [DEBUG] [Thread-203394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:25:43.105 [INFO] [Thread-203394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:25:43.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:25:43.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:25:43.929 [DEBUG] [Thread-203394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:25:43.930 [DEBUG] [Thread-203394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:25:43.977 [DEBUG] [Thread-203394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:25:43.978 [DEBUG] [Thread-203394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:25:43.987 [DEBUG] [Thread-203394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:25:43.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:25:43.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:25:44.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:25:44.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:25:44.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:25:44.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:25:44.024 [DEBUG] [Thread-203394] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:25:44.912 [DEBUG] [Thread-203396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:25:56.755 [DEBUG] [Thread-203397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:11.808 [DEBUG] [Thread-203398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:14.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:26:14.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:26:14.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:26:15.598 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:15.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 25, 57), 18.68, 28.04, 0.0, 21.83, 18.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:26:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:25:57
2026-02-15T11:26:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:26:16.446 [DEBUG] [Thread-203399] [transport.py] [_log()] starting thread (client mode): 0xa575b6d0
2026-02-15T11:26:16.446 [DEBUG] [Thread-203399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:26:16.466 [DEBUG] [Thread-203399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:26:16.466 [INFO] [Thread-203399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:26:16.469 [DEBUG] [Thread-203399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:26:16.469 [DEBUG] [Thread-203399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:26:16.469 [DEBUG] [Thread-203399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:26:16.469 [DEBUG] [Thread-203399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] client lang: <none>
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] server lang: <none>
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] kex follows: False
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] Compression: none
2026-02-15T11:26:16.470 [DEBUG] [Thread-203399] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:26:16.489 [DEBUG] [Thread-203399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:26:16.489 [DEBUG] [Thread-203399] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:26:16.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:26:16.490 [DEBUG] [Thread-203399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:26:16.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:26:16.493 [DEBUG] [Thread-203399] [transport.py] [_log()] userauth is OK
2026-02-15T11:26:16.493 [DEBUG] [Thread-203399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:26:16.493 [DEBUG] [Thread-203399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:26:16.493 [DEBUG] [Thread-203399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:26:16.493 [DEBUG] [Thread-203399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:26:16.517 [INFO] [Thread-203399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:26:16.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:26:17.150 [DEBUG] [Thread-203399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:26:17.150 [DEBUG] [Thread-203399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:26:17.151 [DEBUG] [Thread-203399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:26:17.191 [DEBUG] [Thread-203399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:26:17.191 [DEBUG] [Thread-203399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:26:17.193 [DEBUG] [Thread-203399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:26:17.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:26:17.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:26:17.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:26:17.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:26:17.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:26:17.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:26:17.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:26:17.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:26:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:26:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.392807 -999.00  +17.30  19.07     34   +1.40 1 1 1 1 1   888    0 19.28 130.88 ----- 19.1 19.1 145.8 22.8 25.2 -29.1 24.3 -26.9 23.5 -27.7 24.3 -30.3
2026-02-15T11:26:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:26:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:26:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.392807
2026-02-15T11:26:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:26:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:26:17.215 [DEBUG] [Thread-203399] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:26:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:26:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:26:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:26:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:25:57', tmtdew=18.68, humidity=28.04, cloud=0.0, wind=21.83, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:25:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:26:17.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:26:17.328 [DEBUG] [Thread-203402] [transport.py] [_log()] starting thread (client mode): 0xa575a3e0
2026-02-15T11:26:17.328 [DEBUG] [Thread-203402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:26:17.343 [DEBUG] [Thread-203402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:26:17.343 [INFO] [Thread-203402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:26:17.350 [DEBUG] [Thread-203402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:26:17.350 [DEBUG] [Thread-203402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:26:17.350 [DEBUG] [Thread-203402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:26:17.350 [DEBUG] [Thread-203402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:17.350 [DEBUG] [Thread-203402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] client lang: <none>
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] server lang: <none>
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] kex follows: False
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] Compression: none
2026-02-15T11:26:17.351 [DEBUG] [Thread-203402] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:26:17.411 [DEBUG] [Thread-203402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:26:17.411 [DEBUG] [Thread-203402] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:26:17.412 [DEBUG] [Thread-203402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:26:17.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:26:17.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:26:17.467 [DEBUG] [Thread-203402] [transport.py] [_log()] userauth is OK
2026-02-15T11:26:17.467 [DEBUG] [Thread-203402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:26:17.467 [DEBUG] [Thread-203402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:26:17.467 [DEBUG] [Thread-203402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:26:17.467 [DEBUG] [Thread-203402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:26:17.486 [INFO] [Thread-203402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:26:17.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:26:17.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:26:18.331 [DEBUG] [Thread-203402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:26:18.331 [DEBUG] [Thread-203402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:26:18.379 [DEBUG] [Thread-203402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:26:18.380 [DEBUG] [Thread-203402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:26:18.389 [DEBUG] [Thread-203402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:26:18.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:26:18.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:26:18.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:26:18.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:26:18.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:26:18.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:26:18.426 [DEBUG] [Thread-203402] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:26:26.919 [DEBUG] [Thread-203404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:41.984 [DEBUG] [Thread-203405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:44.962 [DEBUG] [Thread-203406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:26:48.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:26:48.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:26:48.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:26:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 26, 33), 21.1, 23.83, 0.0, 27.28, 18.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:26:50.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:26:33
2026-02-15T11:26:51.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:26:51.485 [DEBUG] [Thread-203407] [transport.py] [_log()] starting thread (client mode): 0xa575a9b0
2026-02-15T11:26:51.485 [DEBUG] [Thread-203407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:26:51.505 [DEBUG] [Thread-203407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:26:51.505 [INFO] [Thread-203407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] client lang: <none>
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] server lang: <none>
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] kex follows: False
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] Compression: none
2026-02-15T11:26:51.508 [DEBUG] [Thread-203407] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:26:51.526 [DEBUG] [Thread-203407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:26:51.526 [DEBUG] [Thread-203407] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:26:51.527 [DEBUG] [Thread-203407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:26:51.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:26:51.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:26:51.527 [DEBUG] [Thread-203407] [transport.py] [_log()] userauth is OK
2026-02-15T11:26:51.527 [DEBUG] [Thread-203407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:26:51.527 [DEBUG] [Thread-203407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:26:51.527 [DEBUG] [Thread-203407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:26:51.527 [DEBUG] [Thread-203407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:26:51.537 [INFO] [Thread-203407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:26:51.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:26:52.151 [DEBUG] [Thread-203407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:26:52.152 [DEBUG] [Thread-203407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:26:52.152 [DEBUG] [Thread-203407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:26:52.192 [DEBUG] [Thread-203407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:26:52.192 [DEBUG] [Thread-203407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:26:52.195 [DEBUG] [Thread-203407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:26:52.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:26:52.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:26:52.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:26:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:26:52.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:26:52.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:26:52.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:26:52.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:26:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:26:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.393154 -999.00  +17.40  18.65     34   +1.40 1 1 1 1 1   888    0 18.98 124.09 ----- 18.6 18.6 169.2 23.3 25.2 -29.7 24.2 -27.6 23.4 -26.6 24.4 -27.7
2026-02-15T11:26:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:26:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:26:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.393154
2026-02-15T11:26:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:26:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:26:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:26:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:26:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:26:52.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:26:33', tmtdew=21.1, humidity=23.83, cloud=0.0, wind=27.28, temperature=18.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:26:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:26:52.220 [DEBUG] [Thread-203407] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:26:52.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:26:52.326 [DEBUG] [Thread-203410] [transport.py] [_log()] starting thread (client mode): 0xa57c29b0
2026-02-15T11:26:52.326 [DEBUG] [Thread-203410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:26:52.340 [DEBUG] [Thread-203410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:26:52.340 [INFO] [Thread-203410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:26:52.347 [DEBUG] [Thread-203410] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:26:52.347 [DEBUG] [Thread-203410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] client lang: <none>
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] server lang: <none>
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] kex follows: False
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] Compression: none
2026-02-15T11:26:52.348 [DEBUG] [Thread-203410] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:26:52.406 [DEBUG] [Thread-203410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:26:52.406 [DEBUG] [Thread-203410] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:26:52.407 [DEBUG] [Thread-203410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:26:52.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:26:52.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:26:52.463 [DEBUG] [Thread-203410] [transport.py] [_log()] userauth is OK
2026-02-15T11:26:52.463 [DEBUG] [Thread-203410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:26:52.464 [DEBUG] [Thread-203410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:26:52.464 [DEBUG] [Thread-203410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:26:52.464 [DEBUG] [Thread-203410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:26:52.488 [INFO] [Thread-203410] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:26:52.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:26:52.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:26:53.338 [DEBUG] [Thread-203410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:26:53.338 [DEBUG] [Thread-203410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:26:53.386 [DEBUG] [Thread-203410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:26:53.386 [DEBUG] [Thread-203410] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:26:53.394 [DEBUG] [Thread-203410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:26:53.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:26:53.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:26:53.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:26:53.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:26:53.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:26:53.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:26:53.427 [DEBUG] [Thread-203410] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:26:57.021 [DEBUG] [Thread-203412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:12.072 [DEBUG] [Thread-203413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:15.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:15.743 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:27:23.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:27:23.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:27:25.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 27, 8), 20.03, 25.38, 0.0, 29.2, 18.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:27:25.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:27:08
2026-02-15T11:27:26.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:27:26.299 [DEBUG] [Thread-203414] [transport.py] [_log()] starting thread (client mode): 0xa5758640
2026-02-15T11:27:26.299 [DEBUG] [Thread-203414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:27:26.320 [DEBUG] [Thread-203414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:27:26.320 [INFO] [Thread-203414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:27:26.323 [DEBUG] [Thread-203414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:27:26.323 [DEBUG] [Thread-203414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:27:26.323 [DEBUG] [Thread-203414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] client lang: <none>
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] server lang: <none>
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] kex follows: False
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:27:26.324 [DEBUG] [Thread-203414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:27:26.325 [DEBUG] [Thread-203414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:27:26.325 [DEBUG] [Thread-203414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:27:26.325 [DEBUG] [Thread-203414] [transport.py] [_log()] Compression: none
2026-02-15T11:27:26.325 [DEBUG] [Thread-203414] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:27:26.343 [DEBUG] [Thread-203414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:27:26.344 [DEBUG] [Thread-203414] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:27:26.345 [DEBUG] [Thread-203414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:27:26.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:27:26.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:27:26.347 [DEBUG] [Thread-203414] [transport.py] [_log()] userauth is OK
2026-02-15T11:27:26.347 [DEBUG] [Thread-203414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:27:26.347 [DEBUG] [Thread-203414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:27:26.347 [DEBUG] [Thread-203414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:27:26.347 [DEBUG] [Thread-203414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:27:26.371 [INFO] [Thread-203414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:27:26.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:27:26.997 [DEBUG] [Thread-203414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:27:26.997 [DEBUG] [Thread-203414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:27:26.997 [DEBUG] [Thread-203414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:27:27.038 [DEBUG] [Thread-203414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:27:27.039 [DEBUG] [Thread-203414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:27:27.042 [DEBUG] [Thread-203414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:27:27.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:27:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:27:27.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:27:27.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:27:27.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:27:27.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:27:27.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:27:27.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:27:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:27:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.393501 -999.00  +17.80  19.79     31   +0.80 1 1 1 1 1   888    0 18.76 115.04 ----- 19.8 19.8 125.6 26.3 25.3 -28.6 24.2 -28.9 23.4 -26.6 24.4 -27.5
2026-02-15T11:27:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:27:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:27:27.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.393501
2026-02-15T11:27:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:27:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:27:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:27:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:27:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:27:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:27:08', tmtdew=20.03, humidity=25.38, cloud=0.0, wind=29.2, temperature=18.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:26:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:27:27.069 [DEBUG] [Thread-203414] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:27:27.106 [DEBUG] [Thread-203417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:27.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:27:27.164 [DEBUG] [Thread-203418] [transport.py] [_log()] starting thread (client mode): 0xa57c0490
2026-02-15T11:27:27.164 [DEBUG] [Thread-203418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:27:27.178 [DEBUG] [Thread-203418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:27:27.178 [INFO] [Thread-203418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] client lang: <none>
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] server lang: <none>
2026-02-15T11:27:27.186 [DEBUG] [Thread-203418] [transport.py] [_log()] kex follows: False
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] Compression: none
2026-02-15T11:27:27.187 [DEBUG] [Thread-203418] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:27:27.243 [DEBUG] [Thread-203418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:27:27.243 [DEBUG] [Thread-203418] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:27:27.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:27:27.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:27:27.245 [DEBUG] [Thread-203418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:27:27.299 [DEBUG] [Thread-203418] [transport.py] [_log()] userauth is OK
2026-02-15T11:27:27.300 [DEBUG] [Thread-203418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:27:27.300 [DEBUG] [Thread-203418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:27:27.300 [DEBUG] [Thread-203418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:27:27.300 [DEBUG] [Thread-203418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:27:27.319 [INFO] [Thread-203418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:27:27.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:27:27.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:27:28.137 [DEBUG] [Thread-203418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:27:28.137 [DEBUG] [Thread-203418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:27:28.185 [DEBUG] [Thread-203418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:27:28.186 [DEBUG] [Thread-203418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:27:28.195 [DEBUG] [Thread-203418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:27:28.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:27:28.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:27:28.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:27:28.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:27:28.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:27:28.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:27:28.232 [DEBUG] [Thread-203418] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:27:42.145 [DEBUG] [Thread-203420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:45.030 [DEBUG] [Thread-203421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:57.183 [DEBUG] [Thread-203422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:27:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:27:58.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:27:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:28:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 27, 44), 19.64, 26.21, 0.0, 26.18, 18.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:28:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:27:44
2026-02-15T11:28:00.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:28:00.568 [DEBUG] [Thread-203423] [transport.py] [_log()] starting thread (client mode): 0xa5759870
2026-02-15T11:28:00.568 [DEBUG] [Thread-203423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:28:00.587 [DEBUG] [Thread-203423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:28:00.588 [INFO] [Thread-203423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] client lang: <none>
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] server lang: <none>
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] kex follows: False
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:28:00.590 [DEBUG] [Thread-203423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:28:00.591 [DEBUG] [Thread-203423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:28:00.591 [DEBUG] [Thread-203423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:28:00.591 [DEBUG] [Thread-203423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:28:00.591 [DEBUG] [Thread-203423] [transport.py] [_log()] Compression: none
2026-02-15T11:28:00.591 [DEBUG] [Thread-203423] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:28:00.604 [DEBUG] [Thread-203423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:28:00.604 [DEBUG] [Thread-203423] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:28:00.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:28:00.605 [DEBUG] [Thread-203423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:28:00.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:28:00.607 [DEBUG] [Thread-203423] [transport.py] [_log()] userauth is OK
2026-02-15T11:28:00.607 [DEBUG] [Thread-203423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:28:00.607 [DEBUG] [Thread-203423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:28:00.607 [DEBUG] [Thread-203423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:28:00.607 [DEBUG] [Thread-203423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:28:00.631 [INFO] [Thread-203423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:28:00.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:28:01.416 [DEBUG] [Thread-203423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:28:01.416 [DEBUG] [Thread-203423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:28:01.416 [DEBUG] [Thread-203423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:28:01.457 [DEBUG] [Thread-203423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:28:01.457 [DEBUG] [Thread-203423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:28:01.459 [DEBUG] [Thread-203423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:28:01.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:28:01.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:28:01.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:28:01.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:28:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:28:01.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:28:01.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:28:01.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:28:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:28:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.393849 -999.00  +18.00  20.79     31   +0.90 1 1 1 1 1   888    0 19.01 122.60 ----- 20.8 20.8 133.4 27.5 25.4 -28.5 24.4 -27.6 23.6 -26.3 24.5 -28.6
2026-02-15T11:28:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:28:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:28:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.393849
2026-02-15T11:28:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:28:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:28:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:28:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:28:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:28:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:27:44', tmtdew=19.64, humidity=26.21, cloud=0.0, wind=26.18, temperature=18.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:27:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:28:01.476 [DEBUG] [Thread-203423] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:28:01.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:28:01.562 [DEBUG] [Thread-203426] [transport.py] [_log()] starting thread (client mode): 0xa575a200
2026-02-15T11:28:01.562 [DEBUG] [Thread-203426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:28:01.577 [DEBUG] [Thread-203426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:28:01.577 [INFO] [Thread-203426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] client lang: <none>
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] server lang: <none>
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] kex follows: False
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:28:01.585 [DEBUG] [Thread-203426] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:28:01.586 [DEBUG] [Thread-203426] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:28:01.586 [DEBUG] [Thread-203426] [transport.py] [_log()] Compression: none
2026-02-15T11:28:01.586 [DEBUG] [Thread-203426] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:28:01.649 [DEBUG] [Thread-203426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:28:01.650 [DEBUG] [Thread-203426] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:28:01.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:28:01.651 [DEBUG] [Thread-203426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:28:01.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:28:01.710 [DEBUG] [Thread-203426] [transport.py] [_log()] userauth is OK
2026-02-15T11:28:01.711 [DEBUG] [Thread-203426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:28:01.711 [DEBUG] [Thread-203426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:28:01.711 [DEBUG] [Thread-203426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:28:01.711 [DEBUG] [Thread-203426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:28:01.730 [INFO] [Thread-203426] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:28:01.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:28:01.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:28:02.583 [DEBUG] [Thread-203426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:28:02.583 [DEBUG] [Thread-203426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:28:02.631 [DEBUG] [Thread-203426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:28:02.631 [DEBUG] [Thread-203426] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:28:02.640 [DEBUG] [Thread-203426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:28:02.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:28:02.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:28:02.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:28:02.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:28:02.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:28:02.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:28:02.676 [DEBUG] [Thread-203426] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:28:12.219 [DEBUG] [Thread-203428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:28:15.884 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:28:15.885 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:28:27.273 [DEBUG] [Thread-203429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:28:32.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:28:32.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:28:32.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:28:34.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 28, 19), 19.61, 26.31, 0.0, 24.1, 18.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:28:34.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:28:19
2026-02-15T11:28:34.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:28:35.096 [DEBUG] [Thread-203430] [transport.py] [_log()] starting thread (client mode): 0xa575beb0
2026-02-15T11:28:35.096 [DEBUG] [Thread-203430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:28:35.112 [DEBUG] [Thread-203430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:28:35.112 [INFO] [Thread-203430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] client lang: <none>
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] server lang: <none>
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] kex follows: False
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:28:35.115 [DEBUG] [Thread-203430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:28:35.116 [DEBUG] [Thread-203430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:28:35.116 [DEBUG] [Thread-203430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:28:35.116 [DEBUG] [Thread-203430] [transport.py] [_log()] Compression: none
2026-02-15T11:28:35.116 [DEBUG] [Thread-203430] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:28:35.130 [DEBUG] [Thread-203430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:28:35.131 [DEBUG] [Thread-203430] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:28:35.131 [DEBUG] [Thread-203430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:28:35.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:28:35.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:28:35.132 [DEBUG] [Thread-203430] [transport.py] [_log()] userauth is OK
2026-02-15T11:28:35.132 [DEBUG] [Thread-203430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:28:35.132 [DEBUG] [Thread-203430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:28:35.132 [DEBUG] [Thread-203430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:28:35.132 [DEBUG] [Thread-203430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:28:35.144 [INFO] [Thread-203430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:28:35.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:28:35.787 [DEBUG] [Thread-203430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:28:35.787 [DEBUG] [Thread-203430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:28:35.788 [DEBUG] [Thread-203430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:28:35.827 [DEBUG] [Thread-203430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:28:35.828 [DEBUG] [Thread-203430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:28:35.831 [DEBUG] [Thread-203430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:28:35.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:28:35.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:28:35.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:28:35.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:28:35.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:28:35.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:28:35.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:28:35.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.394196 -999.00  +17.70  19.81     33   +1.40 1 1 1 1 1   888    0 18.99 114.18 ----- 19.8 19.8 126.6 27.7 25.4 -30.0 24.4 -28.2 23.6 -27.2 24.5 -29.3
2026-02-15T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:28:35.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.394196
2026-02-15T11:28:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:28:35.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:28:35.857 [DEBUG] [Thread-203430] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:28:35.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:28:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:28:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:28:35.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:28:19', tmtdew=19.61, humidity=26.31, cloud=0.0, wind=24.1, temperature=18.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:27:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:28:35.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:28:35.953 [DEBUG] [Thread-203433] [transport.py] [_log()] starting thread (client mode): 0xa2dc3640
2026-02-15T11:28:35.953 [DEBUG] [Thread-203433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:28:35.969 [DEBUG] [Thread-203433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:28:35.970 [INFO] [Thread-203433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:28:35.977 [DEBUG] [Thread-203433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:28:35.978 [DEBUG] [Thread-203433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] client lang: <none>
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] server lang: <none>
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] kex follows: False
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:28:35.979 [DEBUG] [Thread-203433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:28:35.980 [DEBUG] [Thread-203433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:28:35.980 [DEBUG] [Thread-203433] [transport.py] [_log()] Compression: none
2026-02-15T11:28:35.980 [DEBUG] [Thread-203433] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:28:36.043 [DEBUG] [Thread-203433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:28:36.044 [DEBUG] [Thread-203433] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:28:36.044 [DEBUG] [Thread-203433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:28:36.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:28:36.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:28:36.103 [DEBUG] [Thread-203433] [transport.py] [_log()] userauth is OK
2026-02-15T11:28:36.103 [DEBUG] [Thread-203433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:28:36.103 [DEBUG] [Thread-203433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:28:36.103 [DEBUG] [Thread-203433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:28:36.104 [DEBUG] [Thread-203433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:28:36.122 [INFO] [Thread-203433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:28:36.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:28:36.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:28:36.937 [DEBUG] [Thread-203433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:28:36.937 [DEBUG] [Thread-203433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:28:36.985 [DEBUG] [Thread-203433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:28:36.986 [DEBUG] [Thread-203433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:28:36.995 [DEBUG] [Thread-203433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:28:37.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:28:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:28:37.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:28:37.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:28:37.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:28:37.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:28:37.031 [DEBUG] [Thread-203433] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:28:42.311 [DEBUG] [Thread-203435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:28:45.083 [DEBUG] [Thread-203436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:28:57.362 [DEBUG] [Thread-203437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:29:07.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:29:07.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:29:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 28, 55), 20.0, 25.7, 0.0, 20.4, 18.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:29:08.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:28:55
2026-02-15T11:29:09.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:29:09.532 [DEBUG] [Thread-203438] [transport.py] [_log()] starting thread (client mode): 0xa2db78b0
2026-02-15T11:29:09.532 [DEBUG] [Thread-203438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:29:09.552 [DEBUG] [Thread-203438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:29:09.552 [INFO] [Thread-203438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:09.555 [DEBUG] [Thread-203438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] client lang: <none>
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] server lang: <none>
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] kex follows: False
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] Compression: none
2026-02-15T11:29:09.556 [DEBUG] [Thread-203438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:29:09.573 [DEBUG] [Thread-203438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:29:09.573 [DEBUG] [Thread-203438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:29:09.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:29:09.574 [DEBUG] [Thread-203438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:29:09.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:29:09.576 [DEBUG] [Thread-203438] [transport.py] [_log()] userauth is OK
2026-02-15T11:29:09.576 [DEBUG] [Thread-203438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:29:09.577 [DEBUG] [Thread-203438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:29:09.577 [DEBUG] [Thread-203438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:29:09.577 [DEBUG] [Thread-203438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:29:09.612 [INFO] [Thread-203438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:29:09.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:29:10.231 [DEBUG] [Thread-203438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:29:10.231 [DEBUG] [Thread-203438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:29:10.232 [DEBUG] [Thread-203438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:29:10.272 [DEBUG] [Thread-203438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:29:10.273 [DEBUG] [Thread-203438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:29:10.276 [DEBUG] [Thread-203438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:29:10.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:29:10.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:29:10.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:29:10.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:29:10.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:29:10.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:29:10.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:29:10.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:29:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:29:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.394543 -999.00  +17.50  18.28     33   +1.40 1 1 1 1 1   888    0 18.56 104.21 ----- 18.3 18.3 120.2 26.9 25.3 -30.9 24.4 -28.3 23.6 -28.1 24.5 -28.5
2026-02-15T11:29:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:29:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:29:10.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.394543
2026-02-15T11:29:10.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:29:10.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:29:10.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:29:10.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:29:10.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:29:10.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:28:55', tmtdew=20.0, humidity=25.7, cloud=0.0, wind=20.4, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:28:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:29:10.302 [DEBUG] [Thread-203438] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:29:10.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:29:10.397 [DEBUG] [Thread-203441] [transport.py] [_log()] starting thread (client mode): 0xa2db59f0
2026-02-15T11:29:10.397 [DEBUG] [Thread-203441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:29:10.411 [DEBUG] [Thread-203441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:29:10.412 [INFO] [Thread-203441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:29:10.419 [DEBUG] [Thread-203441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] client lang: <none>
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] server lang: <none>
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] kex follows: False
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] Compression: none
2026-02-15T11:29:10.420 [DEBUG] [Thread-203441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:29:10.475 [DEBUG] [Thread-203441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:29:10.476 [DEBUG] [Thread-203441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:29:10.477 [DEBUG] [Thread-203441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:29:10.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:29:10.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:29:10.532 [DEBUG] [Thread-203441] [transport.py] [_log()] userauth is OK
2026-02-15T11:29:10.532 [DEBUG] [Thread-203441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:29:10.532 [DEBUG] [Thread-203441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:29:10.532 [DEBUG] [Thread-203441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:29:10.532 [DEBUG] [Thread-203441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:29:10.551 [INFO] [Thread-203441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:29:10.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:29:10.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:29:11.391 [DEBUG] [Thread-203441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:29:11.391 [DEBUG] [Thread-203441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:29:11.438 [DEBUG] [Thread-203441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:29:11.439 [DEBUG] [Thread-203441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:29:11.448 [DEBUG] [Thread-203441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:29:11.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:29:11.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:29:11.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:29:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:29:11.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:29:11.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:29:11.485 [DEBUG] [Thread-203441] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:29:12.398 [DEBUG] [Thread-203443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:16.027 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:16.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:27.456 [DEBUG] [Thread-203444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:41.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:29:41.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:29:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:29:42.492 [DEBUG] [Thread-203445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:43.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 29, 31), 19.65, 26.23, 0.0, 20.64, 18.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:29:43.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:29:31
2026-02-15T11:29:43.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:29:43.915 [DEBUG] [Thread-203446] [transport.py] [_log()] starting thread (client mode): 0xa5759870
2026-02-15T11:29:43.916 [DEBUG] [Thread-203446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:29:43.936 [DEBUG] [Thread-203446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:29:43.936 [INFO] [Thread-203446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] client lang: <none>
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] server lang: <none>
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] kex follows: False
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] Compression: none
2026-02-15T11:29:43.939 [DEBUG] [Thread-203446] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:29:43.956 [DEBUG] [Thread-203446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:29:43.957 [DEBUG] [Thread-203446] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:29:43.957 [DEBUG] [Thread-203446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:29:43.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:29:43.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:29:43.959 [DEBUG] [Thread-203446] [transport.py] [_log()] userauth is OK
2026-02-15T11:29:43.959 [DEBUG] [Thread-203446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:29:43.959 [DEBUG] [Thread-203446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:29:43.959 [DEBUG] [Thread-203446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:29:43.960 [DEBUG] [Thread-203446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:29:43.976 [INFO] [Thread-203446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:29:43.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:29:44.613 [DEBUG] [Thread-203446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:29:44.613 [DEBUG] [Thread-203446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:29:44.613 [DEBUG] [Thread-203446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:29:44.654 [DEBUG] [Thread-203446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:29:44.655 [DEBUG] [Thread-203446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:29:44.659 [DEBUG] [Thread-203446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:29:44.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:29:44.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:29:44.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:29:44.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:29:44.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:29:44.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:29:44.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:29:44.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:29:44.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:29:44.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.395237 -999.00  +17.90  13.62     33   +1.70 1 1 1 1 1   888    0 18.21 87.45 ----- 13.6 13.6 127.0 18.2 25.4 -28.2 24.6 -27.6 23.7 -26.1 24.6 -27.5
2026-02-15T11:29:44.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:29:44.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:29:44.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.395237
2026-02-15T11:29:44.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:29:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:29:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:29:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:29:44.685 [DEBUG] [Thread-203446] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:29:44.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:29:44.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:29:31', tmtdew=19.65, humidity=26.23, cloud=0.0, wind=20.64, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:29:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:29:44.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:29:44.782 [DEBUG] [Thread-203449] [transport.py] [_log()] starting thread (client mode): 0xa2d10b50
2026-02-15T11:29:44.782 [DEBUG] [Thread-203449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:29:44.797 [DEBUG] [Thread-203449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:29:44.797 [INFO] [Thread-203449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:29:44.805 [DEBUG] [Thread-203449] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:29:44.805 [DEBUG] [Thread-203449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:29:44.805 [DEBUG] [Thread-203449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:29:44.805 [DEBUG] [Thread-203449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] client lang: <none>
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] server lang: <none>
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] kex follows: False
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] Compression: none
2026-02-15T11:29:44.806 [DEBUG] [Thread-203449] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:29:44.868 [DEBUG] [Thread-203449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:29:44.869 [DEBUG] [Thread-203449] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:29:44.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:29:44.870 [DEBUG] [Thread-203449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:29:44.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:29:44.928 [DEBUG] [Thread-203449] [transport.py] [_log()] userauth is OK
2026-02-15T11:29:44.929 [DEBUG] [Thread-203449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:29:44.929 [DEBUG] [Thread-203449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:29:44.929 [DEBUG] [Thread-203449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:29:44.929 [DEBUG] [Thread-203449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:29:44.948 [INFO] [Thread-203449] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:29:44.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:29:44.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:29:45.117 [DEBUG] [Thread-203451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:29:45.770 [DEBUG] [Thread-203449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:29:45.770 [DEBUG] [Thread-203449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:29:45.818 [DEBUG] [Thread-203449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:29:45.818 [DEBUG] [Thread-203449] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:29:45.827 [DEBUG] [Thread-203449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:29:45.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:29:45.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:29:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:29:45.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:29:45.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:29:45.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:29:45.861 [DEBUG] [Thread-203449] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:29:57.530 [DEBUG] [Thread-203452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:12.584 [DEBUG] [Thread-203453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:15.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:30:15.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:30:15.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:30:16.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:16.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 30, 6), 19.55, 26.43, 0.0, 21.88, 18.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:30:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:30:06
2026-02-15T11:30:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:30:18.291 [DEBUG] [Thread-203454] [transport.py] [_log()] starting thread (client mode): 0xa2dc0670
2026-02-15T11:30:18.291 [DEBUG] [Thread-203454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:30:18.310 [DEBUG] [Thread-203454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:30:18.310 [INFO] [Thread-203454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:30:18.313 [DEBUG] [Thread-203454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] client lang: <none>
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] server lang: <none>
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] kex follows: False
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:30:18.314 [DEBUG] [Thread-203454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:30:18.315 [DEBUG] [Thread-203454] [transport.py] [_log()] Compression: none
2026-02-15T11:30:18.315 [DEBUG] [Thread-203454] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:30:18.330 [DEBUG] [Thread-203454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:30:18.331 [DEBUG] [Thread-203454] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:30:18.331 [DEBUG] [Thread-203454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:30:18.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:30:18.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:30:18.333 [DEBUG] [Thread-203454] [transport.py] [_log()] userauth is OK
2026-02-15T11:30:18.334 [DEBUG] [Thread-203454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:30:18.334 [DEBUG] [Thread-203454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:30:18.334 [DEBUG] [Thread-203454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:30:18.334 [DEBUG] [Thread-203454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:30:18.358 [INFO] [Thread-203454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:30:18.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:30:20.629 [DEBUG] [Thread-203454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:30:20.629 [DEBUG] [Thread-203454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:30:20.630 [DEBUG] [Thread-203454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:30:20.670 [DEBUG] [Thread-203454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:30:20.670 [DEBUG] [Thread-203454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:30:20.674 [DEBUG] [Thread-203454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:30:20.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:30:20.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:30:20.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:30:20.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:30:20.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:30:20.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:30:20.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:30:20.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:30:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:30:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.395585 -999.00  +17.80  18.40     33   +1.50 1 1 1 1 1   888    0 18.27 87.99 ----- 18.4 18.4 141.4 21.3 25.5 -28.0 -999.0 -999.0 23.8 -26.6 24.6 -29.4
2026-02-15T11:30:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:30:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:30:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.395585
2026-02-15T11:30:20.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:30:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:30:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:30:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:30:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:30:20.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:30:06', tmtdew=19.55, humidity=26.43, cloud=0.0, wind=21.88, temperature=18.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:29:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:30:20.700 [DEBUG] [Thread-203454] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:30:20.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:30:20.796 [DEBUG] [Thread-203457] [transport.py] [_log()] starting thread (client mode): 0xa2db7af0
2026-02-15T11:30:20.796 [DEBUG] [Thread-203457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:30:20.812 [DEBUG] [Thread-203457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:30:20.812 [INFO] [Thread-203457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:30:20.819 [DEBUG] [Thread-203457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] client lang: <none>
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] server lang: <none>
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] kex follows: False
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] Compression: none
2026-02-15T11:30:20.820 [DEBUG] [Thread-203457] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:30:20.877 [DEBUG] [Thread-203457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:30:20.878 [DEBUG] [Thread-203457] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:30:20.879 [DEBUG] [Thread-203457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:30:20.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:30:20.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:30:20.933 [DEBUG] [Thread-203457] [transport.py] [_log()] userauth is OK
2026-02-15T11:30:20.934 [DEBUG] [Thread-203457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:30:20.934 [DEBUG] [Thread-203457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:30:20.934 [DEBUG] [Thread-203457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:30:20.934 [DEBUG] [Thread-203457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:30:20.953 [INFO] [Thread-203457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:30:20.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:30:20.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:30:21.813 [DEBUG] [Thread-203457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:30:21.814 [DEBUG] [Thread-203457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:30:21.861 [DEBUG] [Thread-203457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:30:21.862 [DEBUG] [Thread-203457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:30:21.871 [DEBUG] [Thread-203457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:30:21.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:30:21.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:30: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') -> 00000000
2026-02-15T11:30:21.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:30:21.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:30:21.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:30:21.909 [DEBUG] [Thread-203457] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:30:27.623 [DEBUG] [Thread-203459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:42.677 [DEBUG] [Thread-203460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:45.144 [DEBUG] [Thread-203461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:30:51.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:30:51.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:30:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:30:54.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 30, 42), 19.88, 25.76, 0.0, 25.62, 18.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:30:54.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:30:42
2026-02-15T11:30:54.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:30:54.677 [DEBUG] [Thread-203462] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T11:30:54.677 [DEBUG] [Thread-203462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:30:54.697 [DEBUG] [Thread-203462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:30:54.697 [INFO] [Thread-203462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] client lang: <none>
2026-02-15T11:30:54.700 [DEBUG] [Thread-203462] [transport.py] [_log()] server lang: <none>
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] kex follows: False
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] Compression: none
2026-02-15T11:30:54.701 [DEBUG] [Thread-203462] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:30:54.719 [DEBUG] [Thread-203462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:30:54.719 [DEBUG] [Thread-203462] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:30:54.720 [DEBUG] [Thread-203462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:30:54.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:30:54.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:30:54.722 [DEBUG] [Thread-203462] [transport.py] [_log()] userauth is OK
2026-02-15T11:30:54.723 [DEBUG] [Thread-203462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:30:54.723 [DEBUG] [Thread-203462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:30:54.723 [DEBUG] [Thread-203462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:30:54.723 [DEBUG] [Thread-203462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:30:54.748 [INFO] [Thread-203462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:30:54.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:30:55.390 [DEBUG] [Thread-203462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:30:55.390 [DEBUG] [Thread-203462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:30:55.390 [DEBUG] [Thread-203462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:30:55.431 [DEBUG] [Thread-203462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:30:55.431 [DEBUG] [Thread-203462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:30:55.434 [DEBUG] [Thread-203462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:30:55.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:30:55.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:30:55.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:30:55.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:30:55.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:30:55.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:30:55.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:30:55.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:30:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:30:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.395931 -999.00  +18.00  19.76     33   +1.80 1 1 1 1 1   888    0 18.57 90.04 ----- 19.8 19.8 141.6 23.9 25.5 -27.5 24.7 -27.5 23.9 -25.6 24.8 -27.1
2026-02-15T11:30:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:30:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:30:55.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.395931
2026-02-15T11:30:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:30:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:30:55.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:30:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:30:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:30:55.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:30:42', tmtdew=19.88, humidity=25.76, cloud=0.0, wind=25.62, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:30:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:30:55.462 [DEBUG] [Thread-203462] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:30:55.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:30:55.569 [DEBUG] [Thread-203465] [transport.py] [_log()] starting thread (client mode): 0xa2db5240
2026-02-15T11:30:55.570 [DEBUG] [Thread-203465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:30:55.584 [DEBUG] [Thread-203465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:30:55.584 [INFO] [Thread-203465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:30:55.592 [DEBUG] [Thread-203465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:30:55.592 [DEBUG] [Thread-203465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:30:55.592 [DEBUG] [Thread-203465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:30:55.592 [DEBUG] [Thread-203465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:55.592 [DEBUG] [Thread-203465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:30:55.592 [DEBUG] [Thread-203465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] client lang: <none>
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] server lang: <none>
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] kex follows: False
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:30:55.593 [DEBUG] [Thread-203465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:30:55.594 [DEBUG] [Thread-203465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:30:55.594 [DEBUG] [Thread-203465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:30:55.594 [DEBUG] [Thread-203465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:30:55.594 [DEBUG] [Thread-203465] [transport.py] [_log()] Compression: none
2026-02-15T11:30:55.594 [DEBUG] [Thread-203465] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:30:55.650 [DEBUG] [Thread-203465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:30:55.651 [DEBUG] [Thread-203465] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:30:55.651 [DEBUG] [Thread-203465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:30:55.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:30:55.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:30:55.705 [DEBUG] [Thread-203465] [transport.py] [_log()] userauth is OK
2026-02-15T11:30:55.706 [DEBUG] [Thread-203465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:30:55.706 [DEBUG] [Thread-203465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:30:55.706 [DEBUG] [Thread-203465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:30:55.706 [DEBUG] [Thread-203465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:30:55.725 [INFO] [Thread-203465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:30:55.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:30:55.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:30:56.575 [DEBUG] [Thread-203465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:30:56.576 [DEBUG] [Thread-203465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:30:56.623 [DEBUG] [Thread-203465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:30:56.624 [DEBUG] [Thread-203465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:30:56.633 [DEBUG] [Thread-203465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:30:56.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:30:56.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:30:56.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:30:56.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:30:56.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:30:56.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:30:56.668 [DEBUG] [Thread-203465] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:30:57.710 [DEBUG] [Thread-203467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:12.761 [DEBUG] [Thread-203468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:16.315 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:16.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:26.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:31:26.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:31:26.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:31:27.799 [DEBUG] [Thread-203469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:28.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 31, 19), 20.54, 24.67, 0.0, 26.13, 18.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:31:28.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:31:19
2026-02-15T11:31:29.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:31:29.483 [DEBUG] [Thread-203470] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fa0
2026-02-15T11:31:29.484 [DEBUG] [Thread-203470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:31:29.504 [DEBUG] [Thread-203470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:31:29.504 [INFO] [Thread-203470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] client lang: <none>
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] server lang: <none>
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] kex follows: False
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:31:29.507 [DEBUG] [Thread-203470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:31:29.508 [DEBUG] [Thread-203470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:31:29.508 [DEBUG] [Thread-203470] [transport.py] [_log()] Compression: none
2026-02-15T11:31:29.508 [DEBUG] [Thread-203470] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:31:29.524 [DEBUG] [Thread-203470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:31:29.524 [DEBUG] [Thread-203470] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:31:29.525 [DEBUG] [Thread-203470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:31:29.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:31:29.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:31:29.569 [DEBUG] [Thread-203470] [transport.py] [_log()] userauth is OK
2026-02-15T11:31:29.570 [DEBUG] [Thread-203470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:31:29.570 [DEBUG] [Thread-203470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:31:29.570 [DEBUG] [Thread-203470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:31:29.570 [DEBUG] [Thread-203470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:31:29.608 [INFO] [Thread-203470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:31:29.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:31:30.250 [DEBUG] [Thread-203470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:31:30.250 [DEBUG] [Thread-203470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:31:30.251 [DEBUG] [Thread-203470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:31:30.290 [DEBUG] [Thread-203470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:31:30.290 [DEBUG] [Thread-203470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:31:30.293 [DEBUG] [Thread-203470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:31:30.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:31:30.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:31:30.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:31:30.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:31:30.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:31:30.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:31:30.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:31:30.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:31:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:31:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.396279 -999.00  +18.50  19.37     31   +1.20 1 1 1 1 1   888    0 18.59 91.43 ----- 19.4 19.4 129.4 23.5 25.7 -27.9 24.8 -27.1 23.9 -27.0 24.9 -27.6
2026-02-15T11:31:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:31:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:31:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.396279
2026-02-15T11:31:30.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:31:30.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:31:30.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:31:30.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:31:30.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:31:30.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:31:19', tmtdew=20.54, humidity=24.67, cloud=0.0, wind=26.13, temperature=18.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:30:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:31:30.317 [DEBUG] [Thread-203470] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:31:30.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:31:30.415 [DEBUG] [Thread-203473] [transport.py] [_log()] starting thread (client mode): 0xa2d03c10
2026-02-15T11:31:30.415 [DEBUG] [Thread-203473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:31:30.430 [DEBUG] [Thread-203473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:31:30.430 [INFO] [Thread-203473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:31:30.439 [DEBUG] [Thread-203473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:31:30.439 [DEBUG] [Thread-203473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:31:30.439 [DEBUG] [Thread-203473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:31:30.439 [DEBUG] [Thread-203473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] client lang: <none>
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] server lang: <none>
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] kex follows: False
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] Compression: none
2026-02-15T11:31:30.440 [DEBUG] [Thread-203473] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:31:30.498 [DEBUG] [Thread-203473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:31:30.499 [DEBUG] [Thread-203473] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:31:30.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:31:30.500 [DEBUG] [Thread-203473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:31:30.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:31:30.554 [DEBUG] [Thread-203473] [transport.py] [_log()] userauth is OK
2026-02-15T11:31:30.555 [DEBUG] [Thread-203473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:31:30.555 [DEBUG] [Thread-203473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:31:30.555 [DEBUG] [Thread-203473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:31:30.555 [DEBUG] [Thread-203473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:31:30.574 [INFO] [Thread-203473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:31:30.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:31:30.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:31:31.426 [DEBUG] [Thread-203473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:31:31.427 [DEBUG] [Thread-203473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:31:31.474 [DEBUG] [Thread-203473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:31:31.475 [DEBUG] [Thread-203473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:31:31.486 [DEBUG] [Thread-203473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:31:31.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:31:31.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:31:31.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:31:31.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:31:31.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:31:31.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:31:31.522 [DEBUG] [Thread-203473] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:31:42.836 [DEBUG] [Thread-203475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:45.199 [DEBUG] [Thread-203476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:31:57.894 [DEBUG] [Thread-203477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:01.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:32:01.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:32:01.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:32:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 31, 55), 20.58, 24.62, 0.0, 25.02, 18.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:32:03.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:31:55
2026-02-15T11:32:03.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:32:03.871 [DEBUG] [Thread-203478] [transport.py] [_log()] starting thread (client mode): 0xa575b880
2026-02-15T11:32:03.871 [DEBUG] [Thread-203478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:32:03.892 [DEBUG] [Thread-203478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:32:03.892 [INFO] [Thread-203478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] client lang: <none>
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] server lang: <none>
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] kex follows: False
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] Compression: none
2026-02-15T11:32:03.895 [DEBUG] [Thread-203478] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:32:03.914 [DEBUG] [Thread-203478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:32:03.915 [DEBUG] [Thread-203478] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:32:03.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:32:03.916 [DEBUG] [Thread-203478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:32:03.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:32:03.957 [DEBUG] [Thread-203478] [transport.py] [_log()] userauth is OK
2026-02-15T11:32:03.957 [DEBUG] [Thread-203478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:32:03.957 [DEBUG] [Thread-203478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:32:03.957 [DEBUG] [Thread-203478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:32:03.957 [DEBUG] [Thread-203478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:32:03.988 [INFO] [Thread-203478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:32:03.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:32:04.645 [DEBUG] [Thread-203478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:32:04.646 [DEBUG] [Thread-203478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:32:04.646 [DEBUG] [Thread-203478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:32:04.686 [DEBUG] [Thread-203478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:32:04.687 [DEBUG] [Thread-203478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:32:04.690 [DEBUG] [Thread-203478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:32:04.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:32:04.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:32:04.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:32:04.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:32:04.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:32:04.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:32:04.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:32:04.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:32:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:32:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.396626 -999.00  +18.30  15.89     29   +0.20 1 1 1 1 1   888    0 18.68 102.33 ----- 15.9 15.9 143.4 25.2 25.7 -29.1 24.8 -28.1 24.0 -28.8 24.8 -29.4
2026-02-15T11:32:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:32:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:32:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.396626
2026-02-15T11:32:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:32:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:32:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:32:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:32:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:32:04.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:31:55', tmtdew=20.58, humidity=24.62, cloud=0.0, wind=25.02, temperature=18.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:31:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:32:04.717 [DEBUG] [Thread-203478] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:32:04.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:32:04.812 [DEBUG] [Thread-203481] [transport.py] [_log()] starting thread (client mode): 0xa57c0460
2026-02-15T11:32:04.812 [DEBUG] [Thread-203481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:32:04.827 [DEBUG] [Thread-203481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:32:04.827 [INFO] [Thread-203481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:32:04.835 [DEBUG] [Thread-203481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:32:04.835 [DEBUG] [Thread-203481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:32:04.835 [DEBUG] [Thread-203481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:32:04.835 [DEBUG] [Thread-203481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:04.835 [DEBUG] [Thread-203481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] client lang: <none>
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] server lang: <none>
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] kex follows: False
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] Compression: none
2026-02-15T11:32:04.836 [DEBUG] [Thread-203481] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:32:04.898 [DEBUG] [Thread-203481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:32:04.899 [DEBUG] [Thread-203481] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:32:04.899 [DEBUG] [Thread-203481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:32:04.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:32:04.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:32:04.954 [DEBUG] [Thread-203481] [transport.py] [_log()] userauth is OK
2026-02-15T11:32:04.955 [DEBUG] [Thread-203481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:32:04.955 [DEBUG] [Thread-203481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:32:04.955 [DEBUG] [Thread-203481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:32:04.955 [DEBUG] [Thread-203481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:32:04.974 [INFO] [Thread-203481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:32:04.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:32:04.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:32:05.876 [DEBUG] [Thread-203481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:32:05.876 [DEBUG] [Thread-203481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:32:05.924 [DEBUG] [Thread-203481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:32:05.924 [DEBUG] [Thread-203481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:32:05.934 [DEBUG] [Thread-203481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:32:05.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:32:05.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:32:05.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:32:05.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:32:05.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:32:05.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:32:05.970 [DEBUG] [Thread-203481] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:32:12.930 [DEBUG] [Thread-203483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:16.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:16.457 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:27.975 [DEBUG] [Thread-203484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:35.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:32:35.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:32:35.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:32:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 31, 55), 20.58, 24.62, 0.0, 25.02, 18.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:32:37.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:31:55
2026-02-15T11:32:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:32:38.478 [DEBUG] [Thread-203485] [transport.py] [_log()] starting thread (client mode): 0xa5759a50
2026-02-15T11:32:38.478 [DEBUG] [Thread-203485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:32:38.498 [DEBUG] [Thread-203485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:32:38.498 [INFO] [Thread-203485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] client lang: <none>
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] server lang: <none>
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] kex follows: False
2026-02-15T11:32:38.501 [DEBUG] [Thread-203485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:32:38.502 [DEBUG] [Thread-203485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:32:38.502 [DEBUG] [Thread-203485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:32:38.502 [DEBUG] [Thread-203485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:32:38.502 [DEBUG] [Thread-203485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:32:38.502 [DEBUG] [Thread-203485] [transport.py] [_log()] Compression: none
2026-02-15T11:32:38.502 [DEBUG] [Thread-203485] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:32:38.521 [DEBUG] [Thread-203485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:32:38.522 [DEBUG] [Thread-203485] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:32:38.522 [DEBUG] [Thread-203485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:32:38.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:32:38.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:32:38.525 [DEBUG] [Thread-203485] [transport.py] [_log()] userauth is OK
2026-02-15T11:32:38.525 [DEBUG] [Thread-203485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:32:38.525 [DEBUG] [Thread-203485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:32:38.525 [DEBUG] [Thread-203485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:32:38.526 [DEBUG] [Thread-203485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:32:38.548 [INFO] [Thread-203485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:32:38.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:32:39.103 [DEBUG] [Thread-203485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:32:39.103 [DEBUG] [Thread-203485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:32:39.104 [DEBUG] [Thread-203485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:32:39.144 [DEBUG] [Thread-203485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:32:39.145 [DEBUG] [Thread-203485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:32:39.148 [DEBUG] [Thread-203485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:32:39.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:32:39.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:32:39.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:32:39.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:32:39.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:32:39.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:32:39.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:32:39.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:32:39.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:32:39.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.396974 -999.00  +18.50  17.45     30   +0.70 1 1 1 1 1   888    0 19.01 106.59 ----- 17.4 17.4 136.8 21.4 25.8 -28.0 24.8 -28.4 23.9 -26.7 24.9 -27.7
2026-02-15T11:32:39.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:32:39.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:32:39.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.396974
2026-02-15T11:32:39.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:32:39.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:32:39.174 [DEBUG] [Thread-203485] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:32:39.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:32:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:32:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:32:39.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:31:55', tmtdew=20.58, humidity=24.62, cloud=0.0, wind=25.02, temperature=18.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:31:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:32:39.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:32:39.277 [DEBUG] [Thread-203488] [transport.py] [_log()] starting thread (client mode): 0xa2d68b80
2026-02-15T11:32:39.277 [DEBUG] [Thread-203488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:32:39.292 [DEBUG] [Thread-203488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:32:39.292 [INFO] [Thread-203488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] client lang: <none>
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] server lang: <none>
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] kex follows: False
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:32:39.300 [DEBUG] [Thread-203488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:32:39.301 [DEBUG] [Thread-203488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:32:39.301 [DEBUG] [Thread-203488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:32:39.301 [DEBUG] [Thread-203488] [transport.py] [_log()] Compression: none
2026-02-15T11:32:39.301 [DEBUG] [Thread-203488] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:32:39.358 [DEBUG] [Thread-203488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:32:39.358 [DEBUG] [Thread-203488] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:32:39.358 [DEBUG] [Thread-203488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:32:39.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:32:39.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:32:39.419 [DEBUG] [Thread-203488] [transport.py] [_log()] userauth is OK
2026-02-15T11:32:39.419 [DEBUG] [Thread-203488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:32:39.419 [DEBUG] [Thread-203488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:32:39.419 [DEBUG] [Thread-203488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:32:39.420 [DEBUG] [Thread-203488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:32:39.445 [INFO] [Thread-203488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:32:39.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:32:39.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:32:40.286 [DEBUG] [Thread-203488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:32:40.286 [DEBUG] [Thread-203488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:32:40.334 [DEBUG] [Thread-203488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:32:40.334 [DEBUG] [Thread-203488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:32:40.343 [DEBUG] [Thread-203488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:32:40.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:32: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')
2026-02-15T11:32:40.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:32:40.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:32:40.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:32:40.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:32:40.375 [DEBUG] [Thread-203488] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:32:43.010 [DEBUG] [Thread-203490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:45.252 [DEBUG] [Thread-203491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:32:58.057 [DEBUG] [Thread-203492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:10.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:33:10.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:33:10.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:33:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 32, 30), 20.54, 24.68, 0.0, 25.41, 17.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:33:12.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:32:30
2026-02-15T11:33:12.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:33:13.025 [DEBUG] [Thread-203493] [transport.py] [_log()] starting thread (client mode): 0xa57c0d90
2026-02-15T11:33:13.025 [DEBUG] [Thread-203493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:33:13.044 [DEBUG] [Thread-203493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:33:13.044 [INFO] [Thread-203493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] client lang: <none>
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] server lang: <none>
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] kex follows: False
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] Compression: none
2026-02-15T11:33:13.046 [DEBUG] [Thread-203493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:33:13.058 [DEBUG] [Thread-203493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:33:13.059 [DEBUG] [Thread-203493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:33:13.059 [DEBUG] [Thread-203493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:33:13.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:33:13.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:33:13.060 [DEBUG] [Thread-203493] [transport.py] [_log()] userauth is OK
2026-02-15T11:33:13.061 [DEBUG] [Thread-203493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:33:13.061 [DEBUG] [Thread-203493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:33:13.061 [DEBUG] [Thread-203493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:33:13.061 [DEBUG] [Thread-203493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:33:13.084 [INFO] [Thread-203493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:33:13.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:33:13.092 [DEBUG] [Thread-203495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:13.721 [DEBUG] [Thread-203493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:33:13.722 [DEBUG] [Thread-203493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:33:13.722 [DEBUG] [Thread-203493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:33:13.763 [DEBUG] [Thread-203493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:33:13.763 [DEBUG] [Thread-203493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:33:13.769 [DEBUG] [Thread-203493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:33:13.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:33:13.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:33:13.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:33:13.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:33:13.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:33:13.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:33:13.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:33:13.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:33:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:33:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.398015 -999.00  +19.00  14.71     28   +0.30 1 1 1 1 1   888    0 19.40 117.82 ----- 14.7 14.7 159.0 22.0 25.9 -29.6 24.8 -28.2 24.1 -26.8 25.1 -28.1
2026-02-15T11:33:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:33:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:33:13.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.398015
2026-02-15T11:33:13.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:33:13.801 [DEBUG] [Thread-203493] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:33:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:33:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:33:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:33:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:33:13.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:32:30', tmtdew=20.54, humidity=24.68, cloud=0.0, wind=25.41, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:33:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:33:13.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:33:13.898 [DEBUG] [Thread-203497] [transport.py] [_log()] starting thread (client mode): 0xa57c1f00
2026-02-15T11:33:13.899 [DEBUG] [Thread-203497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:33:13.914 [DEBUG] [Thread-203497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:33:13.915 [INFO] [Thread-203497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:33:13.922 [DEBUG] [Thread-203497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] client lang: <none>
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] server lang: <none>
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] kex follows: False
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] Compression: none
2026-02-15T11:33:13.923 [DEBUG] [Thread-203497] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:33:13.983 [DEBUG] [Thread-203497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:33:13.983 [DEBUG] [Thread-203497] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:33:13.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:33:13.984 [DEBUG] [Thread-203497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:33:13.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:33:14.039 [DEBUG] [Thread-203497] [transport.py] [_log()] userauth is OK
2026-02-15T11:33:14.040 [DEBUG] [Thread-203497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:33:14.040 [DEBUG] [Thread-203497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:33:14.040 [DEBUG] [Thread-203497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:33:14.040 [DEBUG] [Thread-203497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:33:14.060 [INFO] [Thread-203497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:33:14.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:33:14.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:33:14.890 [DEBUG] [Thread-203497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:33:14.890 [DEBUG] [Thread-203497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:33:14.938 [DEBUG] [Thread-203497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:33:14.939 [DEBUG] [Thread-203497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:33:14.948 [DEBUG] [Thread-203497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:33:14.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:33:14.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:33:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:33:14.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:33:14.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:33:14.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:33:14.984 [DEBUG] [Thread-203497] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:33:16.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:16.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:28.129 [DEBUG] [Thread-203499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:43.192 [DEBUG] [Thread-203500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:44.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:33:44.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:33:45.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:33:45.297 [DEBUG] [Thread-203501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:33:46.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 33, 5), 20.48, 24.8, 0.0, 22.29, 17.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:33:46.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:33:05
2026-02-15T11:33:47.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:33:47.411 [DEBUG] [Thread-203502] [transport.py] [_log()] starting thread (client mode): 0xa57c3d60
2026-02-15T11:33:47.411 [DEBUG] [Thread-203502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:33:47.429 [DEBUG] [Thread-203502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:33:47.429 [INFO] [Thread-203502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] client lang: <none>
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] server lang: <none>
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] kex follows: False
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] Compression: none
2026-02-15T11:33:47.430 [DEBUG] [Thread-203502] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:33:47.442 [DEBUG] [Thread-203502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:33:47.443 [DEBUG] [Thread-203502] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:33:47.443 [DEBUG] [Thread-203502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:33:47.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:33:47.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:33:47.445 [DEBUG] [Thread-203502] [transport.py] [_log()] userauth is OK
2026-02-15T11:33:47.445 [DEBUG] [Thread-203502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:33:47.446 [DEBUG] [Thread-203502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:33:47.446 [DEBUG] [Thread-203502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:33:47.446 [DEBUG] [Thread-203502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:33:47.460 [INFO] [Thread-203502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:33:47.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:33:47.983 [DEBUG] [Thread-203502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:33:47.983 [DEBUG] [Thread-203502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:33:47.984 [DEBUG] [Thread-203502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:33:48.024 [DEBUG] [Thread-203502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:33:48.024 [DEBUG] [Thread-203502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:33:48.028 [DEBUG] [Thread-203502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:33:48.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:33:48.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:33:48.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:33:48.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:33:48.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:33:48.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:33:48.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:33:48.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:33:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:33:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.398362 -999.00  +18.80  25.98     28   +0.00 1 1 1 1 1   888    0 19.82 126.45 ----- 26.0 26.0 172.0 28.8 25.8 -30.9 24.9 -27.9 24.2 -26.8 25.0 -29.4
2026-02-15T11:33:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:33:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:33:48.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.398362
2026-02-15T11:33:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:33:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:33:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:33:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:33:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:33:48.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:33:05', tmtdew=20.48, humidity=24.8, cloud=0.0, wind=22.29, temperature=17.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:33:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:33:48.056 [DEBUG] [Thread-203502] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:33:48.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:33:48.148 [DEBUG] [Thread-203505] [transport.py] [_log()] starting thread (client mode): 0xa2db78e0
2026-02-15T11:33:48.149 [DEBUG] [Thread-203505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:33:48.163 [DEBUG] [Thread-203505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:33:48.164 [INFO] [Thread-203505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:33:48.172 [DEBUG] [Thread-203505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:33:48.172 [DEBUG] [Thread-203505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] client lang: <none>
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] server lang: <none>
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] kex follows: False
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:33:48.173 [DEBUG] [Thread-203505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:33:48.174 [DEBUG] [Thread-203505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:33:48.174 [DEBUG] [Thread-203505] [transport.py] [_log()] Compression: none
2026-02-15T11:33:48.174 [DEBUG] [Thread-203505] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:33:48.233 [DEBUG] [Thread-203505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:33:48.234 [DEBUG] [Thread-203505] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:33:48.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:33:48.235 [DEBUG] [Thread-203505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:33:48.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:33:48.291 [DEBUG] [Thread-203505] [transport.py] [_log()] userauth is OK
2026-02-15T11:33:48.291 [DEBUG] [Thread-203505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:33:48.291 [DEBUG] [Thread-203505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:33:48.291 [DEBUG] [Thread-203505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:33:48.292 [DEBUG] [Thread-203505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:33:48.312 [INFO] [Thread-203505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:33:48.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:33:48.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:33:49.156 [DEBUG] [Thread-203505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:33:49.156 [DEBUG] [Thread-203505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:33:49.205 [DEBUG] [Thread-203505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:33:49.205 [DEBUG] [Thread-203505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:33:49.214 [DEBUG] [Thread-203505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:33:49.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:33: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')
2026-02-15T11:33:49.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:33:49.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:33:49.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:33:49.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:33:49.251 [DEBUG] [Thread-203505] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:33:58.226 [DEBUG] [Thread-203507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:13.278 [DEBUG] [Thread-203508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:16.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:16.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:19.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:34:19.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:34:19.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:34:21.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 33, 41), 21.29, 23.6, 0.0, 23.39, 19.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:34:21.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:33:41
2026-02-15T11:34:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:34:21.888 [DEBUG] [Thread-203509] [transport.py] [_log()] starting thread (client mode): 0xa2d6bf40
2026-02-15T11:34:21.889 [DEBUG] [Thread-203509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:34:21.901 [DEBUG] [Thread-203509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:34:21.901 [INFO] [Thread-203509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:34:21.902 [DEBUG] [Thread-203509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:34:21.902 [DEBUG] [Thread-203509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:34:21.902 [DEBUG] [Thread-203509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:34:21.902 [DEBUG] [Thread-203509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:21.902 [DEBUG] [Thread-203509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] client lang: <none>
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] server lang: <none>
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] kex follows: False
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] Compression: none
2026-02-15T11:34:21.903 [DEBUG] [Thread-203509] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:34:21.914 [DEBUG] [Thread-203509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:34:21.914 [DEBUG] [Thread-203509] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:34:21.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:34:21.915 [DEBUG] [Thread-203509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:34:21.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:34:21.917 [DEBUG] [Thread-203509] [transport.py] [_log()] userauth is OK
2026-02-15T11:34:21.917 [DEBUG] [Thread-203509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:34:21.917 [DEBUG] [Thread-203509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:34:21.917 [DEBUG] [Thread-203509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:34:21.918 [DEBUG] [Thread-203509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:34:21.932 [INFO] [Thread-203509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:34:21.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:34:22.512 [DEBUG] [Thread-203509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:34:22.512 [DEBUG] [Thread-203509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:34:22.512 [DEBUG] [Thread-203509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:34:22.553 [DEBUG] [Thread-203509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:34:22.554 [DEBUG] [Thread-203509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:34:22.558 [DEBUG] [Thread-203509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:34:22.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:34:22.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:34:22.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:34:22.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:34:22.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:34:22.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:34:22.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:34:22.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:34:22.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:34:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.398710 -999.00  +18.40  21.17     29   +0.00 1 1 1 1 1   888    0 19.95 128.58 ----- 21.2 21.2 139.4 23.4 25.8 -29.0 24.6 -30.2 23.9 -27.3 25.1 -29.7
2026-02-15T11:34:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:34:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:34:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.398710
2026-02-15T11:34:22.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:34:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:34:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:34:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:34:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:34:22.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:33:41', tmtdew=21.29, humidity=23.6, cloud=0.0, wind=23.39, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:34:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:34:22.584 [DEBUG] [Thread-203509] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:34:22.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:34:22.690 [DEBUG] [Thread-203512] [transport.py] [_log()] starting thread (client mode): 0xa57e0910
2026-02-15T11:34:22.690 [DEBUG] [Thread-203512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:34:22.706 [DEBUG] [Thread-203512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:34:22.706 [INFO] [Thread-203512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:34:22.716 [DEBUG] [Thread-203512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:34:22.716 [DEBUG] [Thread-203512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:34:22.716 [DEBUG] [Thread-203512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] client lang: <none>
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] server lang: <none>
2026-02-15T11:34:22.717 [DEBUG] [Thread-203512] [transport.py] [_log()] kex follows: False
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] Compression: none
2026-02-15T11:34:22.718 [DEBUG] [Thread-203512] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:34:22.774 [DEBUG] [Thread-203512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:34:22.774 [DEBUG] [Thread-203512] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:34:22.774 [DEBUG] [Thread-203512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:34:22.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:34:22.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:34:22.838 [DEBUG] [Thread-203512] [transport.py] [_log()] userauth is OK
2026-02-15T11:34:22.838 [DEBUG] [Thread-203512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:34:22.838 [DEBUG] [Thread-203512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:34:22.838 [DEBUG] [Thread-203512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:34:22.838 [DEBUG] [Thread-203512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:34:22.854 [INFO] [Thread-203512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:34:22.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:34:22.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:34:23.748 [DEBUG] [Thread-203512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:34:23.748 [DEBUG] [Thread-203512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:34:23.796 [DEBUG] [Thread-203512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:34:23.797 [DEBUG] [Thread-203512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:34:23.806 [DEBUG] [Thread-203512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:34:23.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:34:23.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:34:23.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:34:23.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:34:23.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:34:23.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:34:23.844 [DEBUG] [Thread-203512] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:34:28.316 [DEBUG] [Thread-203514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:43.368 [DEBUG] [Thread-203515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:45.343 [DEBUG] [Thread-203516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:53.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:34:53.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:34:53.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:34:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 34, 16), 20.9, 24.07, 0.0, 22.23, 18.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:34:56.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:34:16
2026-02-15T11:34:56.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:34:56.887 [DEBUG] [Thread-203517] [transport.py] [_log()] starting thread (client mode): 0xa57c08e0
2026-02-15T11:34:56.888 [DEBUG] [Thread-203517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:34:56.908 [DEBUG] [Thread-203517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:34:56.908 [INFO] [Thread-203517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] client lang: <none>
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] server lang: <none>
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] kex follows: False
2026-02-15T11:34:56.909 [DEBUG] [Thread-203517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:34:56.910 [DEBUG] [Thread-203517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:34:56.910 [DEBUG] [Thread-203517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:34:56.910 [DEBUG] [Thread-203517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:34:56.910 [DEBUG] [Thread-203517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:34:56.910 [DEBUG] [Thread-203517] [transport.py] [_log()] Compression: none
2026-02-15T11:34:56.910 [DEBUG] [Thread-203517] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:34:56.919 [DEBUG] [Thread-203517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:34:56.920 [DEBUG] [Thread-203517] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:34:56.920 [DEBUG] [Thread-203517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:34:56.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:34:56.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:34:56.922 [DEBUG] [Thread-203517] [transport.py] [_log()] userauth is OK
2026-02-15T11:34:56.922 [DEBUG] [Thread-203517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:34:56.922 [DEBUG] [Thread-203517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:34:56.922 [DEBUG] [Thread-203517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:34:56.922 [DEBUG] [Thread-203517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:34:56.941 [INFO] [Thread-203517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:34:56.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:34:57.458 [DEBUG] [Thread-203517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:34:57.459 [DEBUG] [Thread-203517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:34:57.459 [DEBUG] [Thread-203517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:34:57.499 [DEBUG] [Thread-203517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:34:57.499 [DEBUG] [Thread-203517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:34:57.502 [DEBUG] [Thread-203517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:34:57.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:34:57.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:34:57.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:34:57.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:34:57.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:34:57.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:34:57.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:34:57.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:34:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:34:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.399057 -999.00  +18.40  15.82     30   +0.70 1 1 1 1 1   888    0 20.01 130.67 ----- 15.8 15.8 148.1 24.6 25.9 -28.2 24.7 -28.2 24.1 -26.5 25.1 -28.5
2026-02-15T11:34:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:34:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:34:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.399057
2026-02-15T11:34:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:34:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:34:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:34:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:34:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:34:57.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:34:16', tmtdew=20.9, humidity=24.07, cloud=0.0, wind=22.23, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:34:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:34:57.519 [DEBUG] [Thread-203517] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:34:57.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:34:57.616 [DEBUG] [Thread-203520] [transport.py] [_log()] starting thread (client mode): 0xa57c32e0
2026-02-15T11:34:57.616 [DEBUG] [Thread-203520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:34:57.630 [DEBUG] [Thread-203520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:34:57.630 [INFO] [Thread-203520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] client lang: <none>
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] server lang: <none>
2026-02-15T11:34:57.638 [DEBUG] [Thread-203520] [transport.py] [_log()] kex follows: False
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] Compression: none
2026-02-15T11:34:57.639 [DEBUG] [Thread-203520] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:34:57.695 [DEBUG] [Thread-203520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:34:57.695 [DEBUG] [Thread-203520] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:34:57.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:34:57.697 [DEBUG] [Thread-203520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:34:57.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:34:57.752 [DEBUG] [Thread-203520] [transport.py] [_log()] userauth is OK
2026-02-15T11:34:57.752 [DEBUG] [Thread-203520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:34:57.752 [DEBUG] [Thread-203520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:34:57.752 [DEBUG] [Thread-203520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:34:57.752 [DEBUG] [Thread-203520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:34:57.771 [INFO] [Thread-203520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:34:57.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:34:57.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:34:58.410 [DEBUG] [Thread-203522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:34:58.617 [DEBUG] [Thread-203520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:34:58.617 [DEBUG] [Thread-203520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:34:58.668 [DEBUG] [Thread-203520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:34:58.668 [DEBUG] [Thread-203520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:34:58.677 [DEBUG] [Thread-203520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:34:58.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:34:58.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:34:58.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:34:58.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:34:58.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:34:58.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:34:58.722 [DEBUG] [Thread-203520] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:35:13.467 [DEBUG] [Thread-203523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:35:16.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:35:16.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:35:28.504 [DEBUG] [Thread-203524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:35:28.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:35:28.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:35:28.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:35:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 34, 52), 20.93, 24.0, 0.0, 20.27, 18.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:35:30.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:34:52
2026-02-15T11:35:31.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:35:31.552 [DEBUG] [Thread-203525] [transport.py] [_log()] starting thread (client mode): 0xa2d6bf70
2026-02-15T11:35:31.552 [DEBUG] [Thread-203525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:35:31.572 [DEBUG] [Thread-203525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:35:31.572 [INFO] [Thread-203525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:35:31.575 [DEBUG] [Thread-203525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:35:31.575 [DEBUG] [Thread-203525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:35:31.575 [DEBUG] [Thread-203525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] client lang: <none>
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] server lang: <none>
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] kex follows: False
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] Compression: none
2026-02-15T11:35:31.576 [DEBUG] [Thread-203525] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:35:31.593 [DEBUG] [Thread-203525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:35:31.593 [DEBUG] [Thread-203525] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:35:31.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:35:31.595 [DEBUG] [Thread-203525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:35:31.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:35:31.596 [DEBUG] [Thread-203525] [transport.py] [_log()] userauth is OK
2026-02-15T11:35:31.596 [DEBUG] [Thread-203525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:35:31.597 [DEBUG] [Thread-203525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:35:31.597 [DEBUG] [Thread-203525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:35:31.597 [DEBUG] [Thread-203525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:35:31.633 [INFO] [Thread-203525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:35:31.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:35:32.242 [DEBUG] [Thread-203525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:35:32.242 [DEBUG] [Thread-203525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:35:32.242 [DEBUG] [Thread-203525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:35:32.283 [DEBUG] [Thread-203525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:35:32.283 [DEBUG] [Thread-203525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:35:32.286 [DEBUG] [Thread-203525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:35:32.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:35:32.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:35:32.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:35:32.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:35:32.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:35:32.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:35:32.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:35:32.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:35:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:35:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.399404 -999.00  +18.20  14.26     31   +1.00 1 1 1 1 1   888    0 20.22 125.01 ----- 14.3 14.3 143.9 23.8 25.9 -27.9 24.8 -27.9 24.1 -26.9 25.1 -27.6
2026-02-15T11:35:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:35:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:35:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.399404
2026-02-15T11:35:32.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:35:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:35:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:35:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:35:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:35:32.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:34:52', tmtdew=20.93, humidity=24.0, cloud=0.0, wind=20.27, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:35:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:35:32.327 [DEBUG] [Thread-203525] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:35:32.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:35:32.435 [DEBUG] [Thread-203528] [transport.py] [_log()] starting thread (client mode): 0xa81d7340
2026-02-15T11:35:32.435 [DEBUG] [Thread-203528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:35:32.452 [DEBUG] [Thread-203528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:35:32.453 [INFO] [Thread-203528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:35:32.460 [DEBUG] [Thread-203528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] client lang: <none>
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] server lang: <none>
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] kex follows: False
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:35:32.461 [DEBUG] [Thread-203528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:35:32.462 [DEBUG] [Thread-203528] [transport.py] [_log()] Compression: none
2026-02-15T11:35:32.462 [DEBUG] [Thread-203528] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:35:32.518 [DEBUG] [Thread-203528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:35:32.519 [DEBUG] [Thread-203528] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:35:32.519 [DEBUG] [Thread-203528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:35:32.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:35:32.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:35:32.577 [DEBUG] [Thread-203528] [transport.py] [_log()] userauth is OK
2026-02-15T11:35:32.577 [DEBUG] [Thread-203528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:35:32.577 [DEBUG] [Thread-203528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:35:32.577 [DEBUG] [Thread-203528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:35:32.577 [DEBUG] [Thread-203528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:35:32.598 [INFO] [Thread-203528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:35:32.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:35:32.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:35:33.415 [DEBUG] [Thread-203528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:35:33.415 [DEBUG] [Thread-203528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:35:33.463 [DEBUG] [Thread-203528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:35:33.463 [DEBUG] [Thread-203528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:35:33.473 [DEBUG] [Thread-203528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:35:33.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:35:33.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:35:33.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:35:33.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:35:33.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:35:33.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:35:33.510 [DEBUG] [Thread-203528] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:35:43.541 [DEBUG] [Thread-203530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:35:45.377 [DEBUG] [Thread-203531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:35:58.591 [DEBUG] [Thread-203532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:03.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:36:03.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:36:03.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 35, 28), 20.71, 24.35, 0.0, 20.61, 18.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:36:05.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:35:28
2026-02-15T11:36:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:36:05.991 [DEBUG] [Thread-203533] [transport.py] [_log()] starting thread (client mode): 0xa575bac0
2026-02-15T11:36:05.991 [DEBUG] [Thread-203533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:36:06.010 [DEBUG] [Thread-203533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:36:06.010 [INFO] [Thread-203533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] client lang: <none>
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] server lang: <none>
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] kex follows: False
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:36:06.013 [DEBUG] [Thread-203533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:36:06.014 [DEBUG] [Thread-203533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:36:06.014 [DEBUG] [Thread-203533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:36:06.014 [DEBUG] [Thread-203533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:36:06.014 [DEBUG] [Thread-203533] [transport.py] [_log()] Compression: none
2026-02-15T11:36:06.014 [DEBUG] [Thread-203533] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:36:06.026 [DEBUG] [Thread-203533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:36:06.027 [DEBUG] [Thread-203533] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:36:06.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:36:06.028 [DEBUG] [Thread-203533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:36:06.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:36:06.030 [DEBUG] [Thread-203533] [transport.py] [_log()] userauth is OK
2026-02-15T11:36:06.030 [DEBUG] [Thread-203533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:36:06.030 [DEBUG] [Thread-203533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:36:06.030 [DEBUG] [Thread-203533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:36:06.030 [DEBUG] [Thread-203533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:36:06.053 [INFO] [Thread-203533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:36:06.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:36:06.656 [DEBUG] [Thread-203533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:36:06.657 [DEBUG] [Thread-203533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:36:06.657 [DEBUG] [Thread-203533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:36:06.698 [DEBUG] [Thread-203533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:36:06.698 [DEBUG] [Thread-203533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:36:06.701 [DEBUG] [Thread-203533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:36:06.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:36:06.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:36:06.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:36:06.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:36:06.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:36:06.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:36:06.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:36:06.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:36:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:36:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.399751 -999.00  +18.30  15.70     30   +0.40 1 1 1 1 1   888    0 19.96 122.35 ----- 15.7 15.7 139.4 26.6 25.9 -28.7 24.8 -26.9 24.1 -27.5 25.1 -28.2
2026-02-15T11:36:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:36:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:36:06.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.399751
2026-02-15T11:36:06.725 [DEBUG] [Thread-203533] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:36:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:36:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:36:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:36:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:36:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:36:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:35:28', tmtdew=20.71, humidity=24.35, cloud=0.0, wind=20.61, temperature=18.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:35:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:36:06.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:36:06.823 [DEBUG] [Thread-203536] [transport.py] [_log()] starting thread (client mode): 0xa2db5f60
2026-02-15T11:36:06.823 [DEBUG] [Thread-203536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:36:06.838 [DEBUG] [Thread-203536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:36:06.838 [INFO] [Thread-203536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:36:06.845 [DEBUG] [Thread-203536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:36:06.845 [DEBUG] [Thread-203536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] client lang: <none>
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] server lang: <none>
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] kex follows: False
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] Compression: none
2026-02-15T11:36:06.846 [DEBUG] [Thread-203536] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:36:06.907 [DEBUG] [Thread-203536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:36:06.907 [DEBUG] [Thread-203536] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:36:06.908 [DEBUG] [Thread-203536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:36:06.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:36:06.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:36:06.963 [DEBUG] [Thread-203536] [transport.py] [_log()] userauth is OK
2026-02-15T11:36:06.964 [DEBUG] [Thread-203536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:36:06.964 [DEBUG] [Thread-203536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:36:06.964 [DEBUG] [Thread-203536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:36:06.964 [DEBUG] [Thread-203536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:36:06.985 [INFO] [Thread-203536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:36:06.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:36:06.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:36:07.826 [DEBUG] [Thread-203536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:36:07.827 [DEBUG] [Thread-203536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:36:07.875 [DEBUG] [Thread-203536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:36:07.875 [DEBUG] [Thread-203536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:36:07.884 [DEBUG] [Thread-203536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:36:07.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:36:07.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:36:07.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:36:07.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:36:07.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:36:07.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:36:07.920 [DEBUG] [Thread-203536] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:36:13.626 [DEBUG] [Thread-203538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:17.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:17.044 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:28.683 [DEBUG] [Thread-203539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:37.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:36:37.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:36:37.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:36:39.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 36, 4), 20.73, 24.33, 0.0, 22.32, 18.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:36:39.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:36:04
2026-02-15T11:36:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:36:40.232 [DEBUG] [Thread-203540] [transport.py] [_log()] starting thread (client mode): 0xa57e1030
2026-02-15T11:36:40.232 [DEBUG] [Thread-203540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:36:40.250 [DEBUG] [Thread-203540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:36:40.251 [INFO] [Thread-203540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:36:40.253 [DEBUG] [Thread-203540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:36:40.253 [DEBUG] [Thread-203540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] client lang: <none>
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] server lang: <none>
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] kex follows: False
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] Compression: none
2026-02-15T11:36:40.254 [DEBUG] [Thread-203540] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:36:40.271 [DEBUG] [Thread-203540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:36:40.271 [DEBUG] [Thread-203540] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:36:40.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:36:40.272 [DEBUG] [Thread-203540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:36:40.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:36:40.274 [DEBUG] [Thread-203540] [transport.py] [_log()] userauth is OK
2026-02-15T11:36:40.275 [DEBUG] [Thread-203540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:36:40.275 [DEBUG] [Thread-203540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:36:40.275 [DEBUG] [Thread-203540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:36:40.275 [DEBUG] [Thread-203540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:36:40.295 [INFO] [Thread-203540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:36:40.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:36:40.917 [DEBUG] [Thread-203540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:36:40.917 [DEBUG] [Thread-203540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:36:40.918 [DEBUG] [Thread-203540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:36:40.958 [DEBUG] [Thread-203540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:36:40.959 [DEBUG] [Thread-203540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:36:40.962 [DEBUG] [Thread-203540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:36:40.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:36:40.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:36:40.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:36:40.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:36:40.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:36:40.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:36:40.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:36:40.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:36:40.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:36:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.400098 -999.00  +18.20  15.36     30   +0.40 1 1 1 1 1   888    0 20.18 127.33 ----- 15.4 15.4 135.0 25.3 25.9 -27.8 24.9 -28.8 24.1 -27.9 25.1 -27.3
2026-02-15T11:36:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:36:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:36:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.400098
2026-02-15T11:36:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:36:40.989 [DEBUG] [Thread-203540] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:36:40.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:36:40.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:36:04', tmtdew=20.73, humidity=24.33, cloud=0.0, wind=22.32, temperature=18.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:36:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:36:41.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:36:41.092 [DEBUG] [Thread-203543] [transport.py] [_log()] starting thread (client mode): 0xa57e3fa0
2026-02-15T11:36:41.092 [DEBUG] [Thread-203543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:36:41.107 [DEBUG] [Thread-203543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:36:41.107 [INFO] [Thread-203543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:36:41.114 [DEBUG] [Thread-203543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:36:41.115 [DEBUG] [Thread-203543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:36:41.115 [DEBUG] [Thread-203543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:36:41.115 [DEBUG] [Thread-203543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] client lang: <none>
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] server lang: <none>
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] kex follows: False
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] Compression: none
2026-02-15T11:36:41.116 [DEBUG] [Thread-203543] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:36:41.173 [DEBUG] [Thread-203543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:36:41.173 [DEBUG] [Thread-203543] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:36:41.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:36:41.175 [DEBUG] [Thread-203543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:36:41.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:36:41.231 [DEBUG] [Thread-203543] [transport.py] [_log()] userauth is OK
2026-02-15T11:36:41.231 [DEBUG] [Thread-203543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:36:41.231 [DEBUG] [Thread-203543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:36:41.231 [DEBUG] [Thread-203543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:36:41.232 [DEBUG] [Thread-203543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:36:41.250 [INFO] [Thread-203543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:36:41.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:36:41.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:36:42.092 [DEBUG] [Thread-203543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:36:42.101 [DEBUG] [Thread-203543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:36:42.141 [DEBUG] [Thread-203543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:36:42.141 [DEBUG] [Thread-203543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:36:42.150 [DEBUG] [Thread-203543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:36:42.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:36:42.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:36:42.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:36:42.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:36:42.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:36:42.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:36:42.185 [DEBUG] [Thread-203543] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:36:43.721 [DEBUG] [Thread-203545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:45.421 [DEBUG] [Thread-203546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:36:58.773 [DEBUG] [Thread-203547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:12.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:37:12.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:37:12.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:37:13.810 [DEBUG] [Thread-203548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:14.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 36, 40), 21.51, 23.3, 0.0, 22.3, 19.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:37:14.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:36:40
2026-02-15T11:37:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:37:15.030 [DEBUG] [Thread-203549] [transport.py] [_log()] starting thread (client mode): 0xa57c3eb0
2026-02-15T11:37:15.030 [DEBUG] [Thread-203549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:37:15.051 [DEBUG] [Thread-203549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:37:15.051 [INFO] [Thread-203549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] client lang: <none>
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] server lang: <none>
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] kex follows: False
2026-02-15T11:37:15.054 [DEBUG] [Thread-203549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:37:15.055 [DEBUG] [Thread-203549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:37:15.055 [DEBUG] [Thread-203549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:37:15.055 [DEBUG] [Thread-203549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:37:15.055 [DEBUG] [Thread-203549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:37:15.055 [DEBUG] [Thread-203549] [transport.py] [_log()] Compression: none
2026-02-15T11:37:15.055 [DEBUG] [Thread-203549] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:37:15.072 [DEBUG] [Thread-203549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:37:15.073 [DEBUG] [Thread-203549] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:37:15.073 [DEBUG] [Thread-203549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:37:15.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:37:15.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:37:15.075 [DEBUG] [Thread-203549] [transport.py] [_log()] userauth is OK
2026-02-15T11:37:15.075 [DEBUG] [Thread-203549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:37:15.075 [DEBUG] [Thread-203549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:37:15.076 [DEBUG] [Thread-203549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:37:15.076 [DEBUG] [Thread-203549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:37:15.094 [INFO] [Thread-203549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:37:15.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:37:15.715 [DEBUG] [Thread-203549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:37:15.716 [DEBUG] [Thread-203549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:37:15.716 [DEBUG] [Thread-203549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:37:15.756 [DEBUG] [Thread-203549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:37:15.757 [DEBUG] [Thread-203549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:37:15.760 [DEBUG] [Thread-203549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:37:15.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:37:15.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:37:15.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:37:15.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:37:15.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:37:15.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:37:15.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:37:15.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:37:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:37:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.400446 -999.00  +18.20  14.11     30   +0.50 1 1 1 1 1   888    0 20.01 127.37 ----- 14.1 14.1 144.4 20.6 25.9 -28.1 24.9 -27.4 24.2 -26.6 25.3 -26.9
2026-02-15T11:37:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:37:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:37:15.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.400446
2026-02-15T11:37:15.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:37:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:37:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:37:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:37:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:37:15.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:36:40', tmtdew=21.51, humidity=23.3, cloud=0.0, wind=22.3, temperature=19.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:36:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:37:15.788 [DEBUG] [Thread-203549] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:37:15.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:37:15.883 [DEBUG] [Thread-203552] [transport.py] [_log()] starting thread (client mode): 0xa5741870
2026-02-15T11:37:15.883 [DEBUG] [Thread-203552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:37:15.899 [DEBUG] [Thread-203552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:37:15.899 [INFO] [Thread-203552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:37:15.906 [DEBUG] [Thread-203552] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:37:15.907 [DEBUG] [Thread-203552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:37:15.907 [DEBUG] [Thread-203552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:37:15.907 [DEBUG] [Thread-203552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:15.907 [DEBUG] [Thread-203552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:15.907 [DEBUG] [Thread-203552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:15.907 [DEBUG] [Thread-203552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] client lang: <none>
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] server lang: <none>
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] kex follows: False
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:37:15.908 [DEBUG] [Thread-203552] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:37:15.909 [DEBUG] [Thread-203552] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:37:15.909 [DEBUG] [Thread-203552] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:37:15.909 [DEBUG] [Thread-203552] [transport.py] [_log()] Compression: none
2026-02-15T11:37:15.909 [DEBUG] [Thread-203552] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:37:15.969 [DEBUG] [Thread-203552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:37:15.970 [DEBUG] [Thread-203552] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:37:15.970 [DEBUG] [Thread-203552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:37:15.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:37:15.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:37:16.025 [DEBUG] [Thread-203552] [transport.py] [_log()] userauth is OK
2026-02-15T11:37:16.025 [DEBUG] [Thread-203552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:37:16.025 [DEBUG] [Thread-203552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:37:16.025 [DEBUG] [Thread-203552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:37:16.025 [DEBUG] [Thread-203552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:37:16.045 [INFO] [Thread-203552] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:37:16.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:37:16.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:37:16.898 [DEBUG] [Thread-203552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:37:16.899 [DEBUG] [Thread-203552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:37:16.946 [DEBUG] [Thread-203552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:37:16.947 [DEBUG] [Thread-203552] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:37:16.956 [DEBUG] [Thread-203552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:37:16.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:37:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:37:16.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:37:16.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:37:16.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:37:16.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:37:16.993 [DEBUG] [Thread-203552] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:37:17.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:17.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:28.847 [DEBUG] [Thread-203554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:43.901 [DEBUG] [Thread-203555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:45.453 [DEBUG] [Thread-203556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:37:47.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:37:47.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:37:47.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:37:48.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 37, 15), 20.39, 24.86, 0.0, 18.81, 17.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:37:48.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:37:15
2026-02-15T11:37:49.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:37:49.470 [DEBUG] [Thread-203557] [transport.py] [_log()] starting thread (client mode): 0xa57408e0
2026-02-15T11:37:49.471 [DEBUG] [Thread-203557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:37:49.499 [DEBUG] [Thread-203557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:37:49.499 [INFO] [Thread-203557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:37:49.503 [DEBUG] [Thread-203557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:37:49.503 [DEBUG] [Thread-203557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:37:49.503 [DEBUG] [Thread-203557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:37:49.503 [DEBUG] [Thread-203557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] client lang: <none>
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] server lang: <none>
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] kex follows: False
2026-02-15T11:37:49.504 [DEBUG] [Thread-203557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:37:49.505 [DEBUG] [Thread-203557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:37:49.505 [DEBUG] [Thread-203557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:37:49.505 [DEBUG] [Thread-203557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:37:49.505 [DEBUG] [Thread-203557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:37:49.505 [DEBUG] [Thread-203557] [transport.py] [_log()] Compression: none
2026-02-15T11:37:49.505 [DEBUG] [Thread-203557] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:37:49.524 [DEBUG] [Thread-203557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:37:49.525 [DEBUG] [Thread-203557] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:37:49.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:37:49.526 [DEBUG] [Thread-203557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:37:49.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:37:49.529 [DEBUG] [Thread-203557] [transport.py] [_log()] userauth is OK
2026-02-15T11:37:49.529 [DEBUG] [Thread-203557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:37:49.529 [DEBUG] [Thread-203557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:37:49.529 [DEBUG] [Thread-203557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:37:49.529 [DEBUG] [Thread-203557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:37:49.554 [INFO] [Thread-203557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:37:49.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:37:50.176 [DEBUG] [Thread-203557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:37:50.176 [DEBUG] [Thread-203557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:37:50.177 [DEBUG] [Thread-203557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:37:50.217 [DEBUG] [Thread-203557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:37:50.218 [DEBUG] [Thread-203557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:37:50.221 [DEBUG] [Thread-203557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:37:50.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:37:50.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:37:50.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:37:50.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:37:50.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:37:50.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:37:50.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:37:50.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:37:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:37:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.401140 -999.00  +18.20  11.66     31   +0.80 1 1 1 1 1   888    0 20.17 126.50 ----- 11.7 11.7 160.8 24.0 26.0 -29.1 24.9 -27.7 24.3 -26.6 25.3 -27.9
2026-02-15T11:37:50.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:37:50.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:37:50.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.401140
2026-02-15T11:37:50.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:37:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:37:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:37:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:37:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:37:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:37:15', tmtdew=20.39, humidity=24.86, cloud=0.0, wind=18.81, temperature=17.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:37:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:37:50.246 [DEBUG] [Thread-203557] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:37:50.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:37:50.348 [DEBUG] [Thread-203560] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-15T11:37:50.349 [DEBUG] [Thread-203560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:37:50.365 [DEBUG] [Thread-203560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:37:50.366 [INFO] [Thread-203560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:37:50.373 [DEBUG] [Thread-203560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:37:50.374 [DEBUG] [Thread-203560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] client lang: <none>
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] server lang: <none>
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] kex follows: False
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:37:50.375 [DEBUG] [Thread-203560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:37:50.376 [DEBUG] [Thread-203560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:37:50.376 [DEBUG] [Thread-203560] [transport.py] [_log()] Compression: none
2026-02-15T11:37:50.376 [DEBUG] [Thread-203560] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:37:50.434 [DEBUG] [Thread-203560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:37:50.435 [DEBUG] [Thread-203560] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:37:50.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:37:50.437 [DEBUG] [Thread-203560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:37:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:37:50.501 [DEBUG] [Thread-203560] [transport.py] [_log()] userauth is OK
2026-02-15T11:37:50.501 [DEBUG] [Thread-203560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:37:50.502 [DEBUG] [Thread-203560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:37:50.502 [DEBUG] [Thread-203560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:37:50.502 [DEBUG] [Thread-203560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:37:50.523 [INFO] [Thread-203560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:37:50.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:37:50.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:37:51.404 [DEBUG] [Thread-203560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:37:51.404 [DEBUG] [Thread-203560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:37:51.452 [DEBUG] [Thread-203560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:37:51.453 [DEBUG] [Thread-203560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:37:51.461 [DEBUG] [Thread-203560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:37:51.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:37:51.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:37:51.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:37:51.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:37:51.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:37:51.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:37:51.493 [DEBUG] [Thread-203560] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:37:58.939 [DEBUG] [Thread-203562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:13.989 [DEBUG] [Thread-203563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:17.324 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:17.325 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:21.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:38:21.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:38:21.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:38:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 37, 51), 20.09, 25.38, 0.0, 20.47, 17.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:38:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:37:51
2026-02-15T11:38:23.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:38:23.966 [DEBUG] [Thread-203564] [transport.py] [_log()] starting thread (client mode): 0xa2d137f0
2026-02-15T11:38:23.967 [DEBUG] [Thread-203564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:38:23.990 [DEBUG] [Thread-203564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:38:23.990 [INFO] [Thread-203564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:38:23.994 [DEBUG] [Thread-203564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:38:23.994 [DEBUG] [Thread-203564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:38:23.994 [DEBUG] [Thread-203564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:38:23.994 [DEBUG] [Thread-203564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] client lang: <none>
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] server lang: <none>
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] kex follows: False
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] Compression: none
2026-02-15T11:38:23.995 [DEBUG] [Thread-203564] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:38:24.012 [DEBUG] [Thread-203564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:38:24.012 [DEBUG] [Thread-203564] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:38:24.013 [DEBUG] [Thread-203564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:38:24.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:38:24.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:38:24.015 [DEBUG] [Thread-203564] [transport.py] [_log()] userauth is OK
2026-02-15T11:38:24.015 [DEBUG] [Thread-203564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:38:24.015 [DEBUG] [Thread-203564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:38:24.015 [DEBUG] [Thread-203564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:38:24.015 [DEBUG] [Thread-203564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:38:24.039 [INFO] [Thread-203564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:38:24.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:38:24.670 [DEBUG] [Thread-203564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:38:24.670 [DEBUG] [Thread-203564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:38:24.671 [DEBUG] [Thread-203564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:38:24.711 [DEBUG] [Thread-203564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:38:24.711 [DEBUG] [Thread-203564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:38:24.714 [DEBUG] [Thread-203564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:38:24.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:38:24.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:38:24.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:38:24.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:38:24.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:38:24.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:38:24.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:38:24.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:38:24.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:38:24.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.401487 -999.00  +18.50  11.83     30   +1.00 1 1 1 1 1   888    0 20.10 122.81 ----- 11.8 11.8 160.7 18.2 26.1 -28.2 25.0 -27.5 24.3 -25.8 25.4 -27.5
2026-02-15T11:38:24.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:38:24.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:38:24.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.401487
2026-02-15T11:38:24.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:38:24.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:37:51', tmtdew=20.09, humidity=25.38, cloud=0.0, wind=20.47, temperature=17.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:38:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:38:24.739 [DEBUG] [Thread-203564] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:38:24.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:38:24.837 [DEBUG] [Thread-203567] [transport.py] [_log()] starting thread (client mode): 0xa57e3310
2026-02-15T11:38:24.837 [DEBUG] [Thread-203567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:38:24.856 [DEBUG] [Thread-203567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:38:24.856 [INFO] [Thread-203567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:38:24.863 [DEBUG] [Thread-203567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:38:24.863 [DEBUG] [Thread-203567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] client lang: <none>
2026-02-15T11:38:24.864 [DEBUG] [Thread-203567] [transport.py] [_log()] server lang: <none>
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] kex follows: False
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] Compression: none
2026-02-15T11:38:24.865 [DEBUG] [Thread-203567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:38:24.921 [DEBUG] [Thread-203567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:38:24.921 [DEBUG] [Thread-203567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:38:24.922 [DEBUG] [Thread-203567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:38:24.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:38:24.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:38:24.981 [DEBUG] [Thread-203567] [transport.py] [_log()] userauth is OK
2026-02-15T11:38:24.982 [DEBUG] [Thread-203567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:38:24.982 [DEBUG] [Thread-203567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:38:24.982 [DEBUG] [Thread-203567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:38:24.982 [DEBUG] [Thread-203567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:38:25.000 [INFO] [Thread-203567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:38:25.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:38:25.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:38:25.827 [DEBUG] [Thread-203567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:38:25.828 [DEBUG] [Thread-203567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:38:25.875 [DEBUG] [Thread-203567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:38:25.875 [DEBUG] [Thread-203567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:38:25.885 [DEBUG] [Thread-203567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:38:25.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:38:25.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:38:25.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:38:25.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:38:25.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:38:25.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:38:25.922 [DEBUG] [Thread-203567] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:38:29.024 [DEBUG] [Thread-203569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:44.087 [DEBUG] [Thread-203570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:45.489 [DEBUG] [Thread-203571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:55.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:38:55.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:38:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:38:58.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 38, 26), 20.68, 24.35, 0.0, 21.67, 17.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:38:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:38:26
2026-02-15T11:38:58.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:38:58.756 [DEBUG] [Thread-203572] [transport.py] [_log()] starting thread (client mode): 0xa57408e0
2026-02-15T11:38:58.756 [DEBUG] [Thread-203572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:38:58.777 [DEBUG] [Thread-203572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:38:58.777 [INFO] [Thread-203572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] client lang: <none>
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] server lang: <none>
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] kex follows: False
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:38:58.778 [DEBUG] [Thread-203572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:38:58.779 [DEBUG] [Thread-203572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:38:58.779 [DEBUG] [Thread-203572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:38:58.779 [DEBUG] [Thread-203572] [transport.py] [_log()] Compression: none
2026-02-15T11:38:58.779 [DEBUG] [Thread-203572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:38:58.786 [DEBUG] [Thread-203572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:38:58.787 [DEBUG] [Thread-203572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:38:58.787 [DEBUG] [Thread-203572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:38:58.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:38:58.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:38:58.788 [DEBUG] [Thread-203572] [transport.py] [_log()] userauth is OK
2026-02-15T11:38:58.788 [DEBUG] [Thread-203572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:38:58.789 [DEBUG] [Thread-203572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:38:58.789 [DEBUG] [Thread-203572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:38:58.789 [DEBUG] [Thread-203572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:38:58.806 [INFO] [Thread-203572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:38:58.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:38:59.125 [DEBUG] [Thread-203574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:38:59.436 [DEBUG] [Thread-203572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:38:59.436 [DEBUG] [Thread-203572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:38:59.437 [DEBUG] [Thread-203572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:38:59.477 [DEBUG] [Thread-203572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:38:59.478 [DEBUG] [Thread-203572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:38:59.481 [DEBUG] [Thread-203572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:38:59.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:38:59.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:38:59.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:38:59.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:38:59.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:38:59.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:38:59.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:38:59.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:38:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:38:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.401835 -999.00  +18.70  18.05     29   +0.70 1 1 1 1 1   888    0 20.17 121.69 ----- 18.1 18.1 153.6 26.4 26.2 -30.0 25.0 -28.1 24.4 -27.0 25.4 -28.5
2026-02-15T11:38:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:38:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:38:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.401835
2026-02-15T11:38:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:38:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:38:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:38:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:38:59.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:38:59.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:38:26', tmtdew=20.68, humidity=24.35, cloud=0.0, wind=21.67, temperature=17.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:38:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:38:59.505 [DEBUG] [Thread-203572] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:38:59.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:38:59.602 [DEBUG] [Thread-203576] [transport.py] [_log()] starting thread (client mode): 0xa5740bb0
2026-02-15T11:38:59.602 [DEBUG] [Thread-203576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:38:59.617 [DEBUG] [Thread-203576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:38:59.617 [INFO] [Thread-203576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] client lang: <none>
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] server lang: <none>
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] kex follows: False
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:38:59.625 [DEBUG] [Thread-203576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:38:59.626 [DEBUG] [Thread-203576] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:38:59.626 [DEBUG] [Thread-203576] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:38:59.626 [DEBUG] [Thread-203576] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:38:59.626 [DEBUG] [Thread-203576] [transport.py] [_log()] Compression: none
2026-02-15T11:38:59.626 [DEBUG] [Thread-203576] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:38:59.686 [DEBUG] [Thread-203576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:38:59.686 [DEBUG] [Thread-203576] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:38:59.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:38:59.687 [DEBUG] [Thread-203576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:38:59.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:38:59.742 [DEBUG] [Thread-203576] [transport.py] [_log()] userauth is OK
2026-02-15T11:38:59.742 [DEBUG] [Thread-203576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:38:59.742 [DEBUG] [Thread-203576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:38:59.742 [DEBUG] [Thread-203576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:38:59.742 [DEBUG] [Thread-203576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:38:59.761 [INFO] [Thread-203576] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:38:59.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:38:59.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:39:00.575 [DEBUG] [Thread-203576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:39:00.575 [DEBUG] [Thread-203576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:39:00.623 [DEBUG] [Thread-203576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:39:00.623 [DEBUG] [Thread-203576] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:39:00.632 [DEBUG] [Thread-203576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:39:00.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:39:00.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:39:00.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:39:00.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:39:00.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:39:00.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:39:00.669 [DEBUG] [Thread-203576] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:39:14.162 [DEBUG] [Thread-203578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:39:17.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:39:17.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:39:29.216 [DEBUG] [Thread-203579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:39:30.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:39:30.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:39:30.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:39:32.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 39, 1), 20.7, 24.32, 0.0, 21.61, 17.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:39:32.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:39:01
2026-02-15T11:39:33.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:39:33.440 [DEBUG] [Thread-203580] [transport.py] [_log()] starting thread (client mode): 0xa5740250
2026-02-15T11:39:33.440 [DEBUG] [Thread-203580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:39:33.463 [DEBUG] [Thread-203580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:39:33.463 [INFO] [Thread-203580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:39:33.464 [DEBUG] [Thread-203580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:39:33.464 [DEBUG] [Thread-203580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:39:33.464 [DEBUG] [Thread-203580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:39:33.464 [DEBUG] [Thread-203580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:39:33.464 [DEBUG] [Thread-203580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:39:33.464 [DEBUG] [Thread-203580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] client lang: <none>
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] server lang: <none>
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] kex follows: False
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:39:33.465 [DEBUG] [Thread-203580] [transport.py] [_log()] Compression: none
2026-02-15T11:39:33.466 [DEBUG] [Thread-203580] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:39:33.476 [DEBUG] [Thread-203580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:39:33.477 [DEBUG] [Thread-203580] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:39:33.478 [DEBUG] [Thread-203580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:39:33.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:39:33.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:39:33.480 [DEBUG] [Thread-203580] [transport.py] [_log()] userauth is OK
2026-02-15T11:39:33.481 [DEBUG] [Thread-203580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:39:33.481 [DEBUG] [Thread-203580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:39:33.481 [DEBUG] [Thread-203580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:39:33.481 [DEBUG] [Thread-203580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:39:33.507 [INFO] [Thread-203580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:39:33.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:39:34.143 [DEBUG] [Thread-203580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:39:34.143 [DEBUG] [Thread-203580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:39:34.144 [DEBUG] [Thread-203580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:39:34.184 [DEBUG] [Thread-203580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:39:34.185 [DEBUG] [Thread-203580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:39:34.188 [DEBUG] [Thread-203580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:39:34.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:39:34.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:39:34.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:39:34.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:39:34.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:39:34.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:39:34.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:39:34.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:39:34.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:39:34.215 [DEBUG] [Thread-203580] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:39:34.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.402182 -999.00  +18.40  18.91     29   +0.20 1 1 1 1 1   888    0 20.47 126.33 ----- 18.9 18.9 129.4 23.4 26.1 -29.6 25.1 -30.0 24.4 -28.0 25.4 -28.1
2026-02-15T11:39:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:39:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:39:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.402182
2026-02-15T11:39:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:39:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:39:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:39:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:39:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:39:34.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:39:01', tmtdew=20.7, humidity=24.32, cloud=0.0, wind=21.61, temperature=17.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:39:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:39:34.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:39:34.320 [DEBUG] [Thread-203583] [transport.py] [_log()] starting thread (client mode): 0xa5743a60
2026-02-15T11:39:34.320 [DEBUG] [Thread-203583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:39:34.335 [DEBUG] [Thread-203583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:39:34.335 [INFO] [Thread-203583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:39:34.342 [DEBUG] [Thread-203583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:39:34.342 [DEBUG] [Thread-203583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] client lang: <none>
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] server lang: <none>
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] kex follows: False
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] Compression: none
2026-02-15T11:39:34.343 [DEBUG] [Thread-203583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:39:34.403 [DEBUG] [Thread-203583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:39:34.403 [DEBUG] [Thread-203583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:39:34.404 [DEBUG] [Thread-203583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:39:34.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:39:34.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:39:34.462 [DEBUG] [Thread-203583] [transport.py] [_log()] userauth is OK
2026-02-15T11:39:34.462 [DEBUG] [Thread-203583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:39:34.462 [DEBUG] [Thread-203583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:39:34.463 [DEBUG] [Thread-203583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:39:34.463 [DEBUG] [Thread-203583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:39:34.485 [INFO] [Thread-203583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:39:34.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:39:34.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:39:35.291 [DEBUG] [Thread-203583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:39:35.291 [DEBUG] [Thread-203583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:39:35.339 [DEBUG] [Thread-203583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:39:35.340 [DEBUG] [Thread-203583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:39:35.349 [DEBUG] [Thread-203583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:39:35.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:39:35.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:39:35.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:39:35.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:39:35.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:39:35.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:39:35.386 [DEBUG] [Thread-203583] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:39:44.255 [DEBUG] [Thread-203585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:39:45.536 [DEBUG] [Thread-203586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:39:59.307 [DEBUG] [Thread-203587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:05.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:40:05.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:40:05.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:40:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 39, 37), 21.75, 22.8, 0.0, 20.92, 19.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:40:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:39:37
2026-02-15T11:40:08.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:40:08.246 [DEBUG] [Thread-203588] [transport.py] [_log()] starting thread (client mode): 0xa5740310
2026-02-15T11:40:08.246 [DEBUG] [Thread-203588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:40:08.269 [DEBUG] [Thread-203588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:40:08.269 [INFO] [Thread-203588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:40:08.273 [DEBUG] [Thread-203588] [transport.py] [_log()] client lang: <none>
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] server lang: <none>
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] kex follows: False
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] Compression: none
2026-02-15T11:40:08.274 [DEBUG] [Thread-203588] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:40:08.293 [DEBUG] [Thread-203588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:40:08.294 [DEBUG] [Thread-203588] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:40:08.294 [DEBUG] [Thread-203588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:40:08.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:40:08.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:40:08.297 [DEBUG] [Thread-203588] [transport.py] [_log()] userauth is OK
2026-02-15T11:40:08.297 [DEBUG] [Thread-203588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:40:08.297 [DEBUG] [Thread-203588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:40:08.297 [DEBUG] [Thread-203588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:40:08.297 [DEBUG] [Thread-203588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:40:08.322 [INFO] [Thread-203588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:40:08.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:40:09.841 [DEBUG] [Thread-203588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:40:09.841 [DEBUG] [Thread-203588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:40:09.842 [DEBUG] [Thread-203588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:40:09.882 [DEBUG] [Thread-203588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:40:09.883 [DEBUG] [Thread-203588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:40:09.886 [DEBUG] [Thread-203588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:40:09.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:40:09.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:40:09.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:40:09.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:40:09.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:40:09.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:40:09.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:40:09.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:40:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:40:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.402529 -999.00  +18.40  17.83     29   +0.30 1 1 1 1 1   888    0 20.39 127.39 ----- 17.8 17.8 139.3 28.9 26.0 -30.2 25.1 -28.2 24.4 -28.9 25.3 -28.5
2026-02-15T11:40:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:40:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:40:09.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.402529
2026-02-15T11:40:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:40:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:40:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:40:09.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:40:09.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:40:09.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:39:37', tmtdew=21.75, humidity=22.8, cloud=0.0, wind=20.92, temperature=19.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:39:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:40:09.915 [DEBUG] [Thread-203588] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:40:10.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:40:10.022 [DEBUG] [Thread-203591] [transport.py] [_log()] starting thread (client mode): 0xa2d6b190
2026-02-15T11:40:10.022 [DEBUG] [Thread-203591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:40:10.036 [DEBUG] [Thread-203591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:40:10.036 [INFO] [Thread-203591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] client lang: <none>
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] server lang: <none>
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] kex follows: False
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:40:10.044 [DEBUG] [Thread-203591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:40:10.045 [DEBUG] [Thread-203591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:40:10.045 [DEBUG] [Thread-203591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:40:10.045 [DEBUG] [Thread-203591] [transport.py] [_log()] Compression: none
2026-02-15T11:40:10.045 [DEBUG] [Thread-203591] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:40:10.106 [DEBUG] [Thread-203591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:40:10.107 [DEBUG] [Thread-203591] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:40:10.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:40:10.108 [DEBUG] [Thread-203591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:40:10.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:40:10.162 [DEBUG] [Thread-203591] [transport.py] [_log()] userauth is OK
2026-02-15T11:40:10.162 [DEBUG] [Thread-203591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:40:10.163 [DEBUG] [Thread-203591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:40:10.163 [DEBUG] [Thread-203591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:40:10.163 [DEBUG] [Thread-203591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:40:10.181 [INFO] [Thread-203591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:40:10.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:40:10.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:40:11.066 [DEBUG] [Thread-203591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:40:11.067 [DEBUG] [Thread-203591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:40:11.115 [DEBUG] [Thread-203591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:40:11.115 [DEBUG] [Thread-203591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:40:11.124 [DEBUG] [Thread-203591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:40:11.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:40:11.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:40:11.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:40:11.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:40:11.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:40:11.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:40:11.160 [DEBUG] [Thread-203591] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:40:14.347 [DEBUG] [Thread-203593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:17.607 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:17.608 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:29.396 [DEBUG] [Thread-203594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:41.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:40:41.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:40:41.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:40:43.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 40, 13), 20.74, 24.67, 0.0, 25.5, 18.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:40:43.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:40:13
2026-02-15T11:40:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:40:43.859 [DEBUG] [Thread-203595] [transport.py] [_log()] starting thread (client mode): 0xa57401f0
2026-02-15T11:40:43.859 [DEBUG] [Thread-203595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:40:43.879 [DEBUG] [Thread-203595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:40:43.879 [INFO] [Thread-203595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:40:43.882 [DEBUG] [Thread-203595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:40:43.882 [DEBUG] [Thread-203595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:40:43.882 [DEBUG] [Thread-203595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] client lang: <none>
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] server lang: <none>
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] kex follows: False
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] Compression: none
2026-02-15T11:40:43.883 [DEBUG] [Thread-203595] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:40:43.903 [DEBUG] [Thread-203595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:40:43.903 [DEBUG] [Thread-203595] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:40:43.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:40:43.904 [DEBUG] [Thread-203595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:40:43.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:40:43.906 [DEBUG] [Thread-203595] [transport.py] [_log()] userauth is OK
2026-02-15T11:40:43.907 [DEBUG] [Thread-203595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:40:43.907 [DEBUG] [Thread-203595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:40:43.907 [DEBUG] [Thread-203595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:40:43.907 [DEBUG] [Thread-203595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:40:43.932 [INFO] [Thread-203595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:40:43.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:40:44.433 [DEBUG] [Thread-203597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:44.557 [DEBUG] [Thread-203595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:40:44.558 [DEBUG] [Thread-203595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:40:44.558 [DEBUG] [Thread-203595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:40:44.598 [DEBUG] [Thread-203595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:40:44.598 [DEBUG] [Thread-203595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:40:44.602 [DEBUG] [Thread-203595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:40:44.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:40:44.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:40:44.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:40:44.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:40:44.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:40:44.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:40:44.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:40:44.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:40:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:40:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.402876 -999.00  +18.30  14.35     29   +0.20 1 1 1 1 1   888    0 20.69 132.01 ----- 14.3 14.3 119.6 24.5 26.1 -28.3 25.0 -28.9 24.4 -27.5 25.4 -27.6
2026-02-15T11:40:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:40:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:40:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.402876
2026-02-15T11:40:44.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:40:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:40:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:40:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:40:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:40:44.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:40:13', tmtdew=20.74, humidity=24.67, cloud=0.0, wind=25.5, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:40:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:40:44.627 [DEBUG] [Thread-203595] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:40:44.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:40:44.724 [DEBUG] [Thread-203599] [transport.py] [_log()] starting thread (client mode): 0xa57e1240
2026-02-15T11:40:44.725 [DEBUG] [Thread-203599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:40:44.742 [DEBUG] [Thread-203599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:40:44.742 [INFO] [Thread-203599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:40:44.750 [DEBUG] [Thread-203599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:40:44.750 [DEBUG] [Thread-203599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] client lang: <none>
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] server lang: <none>
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] kex follows: False
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:40:44.751 [DEBUG] [Thread-203599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:40:44.752 [DEBUG] [Thread-203599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:40:44.752 [DEBUG] [Thread-203599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:40:44.752 [DEBUG] [Thread-203599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:40:44.752 [DEBUG] [Thread-203599] [transport.py] [_log()] Compression: none
2026-02-15T11:40:44.752 [DEBUG] [Thread-203599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:40:44.810 [DEBUG] [Thread-203599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:40:44.811 [DEBUG] [Thread-203599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:40:44.811 [DEBUG] [Thread-203599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:40:44.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:40:44.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:40:44.866 [DEBUG] [Thread-203599] [transport.py] [_log()] userauth is OK
2026-02-15T11:40:44.866 [DEBUG] [Thread-203599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:40:44.866 [DEBUG] [Thread-203599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:40:44.866 [DEBUG] [Thread-203599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:40:44.866 [DEBUG] [Thread-203599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:40:44.880 [INFO] [Thread-203599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:40:44.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:40:44.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:40:45.575 [DEBUG] [Thread-203601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:40:45.673 [DEBUG] [Thread-203599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:40:45.673 [DEBUG] [Thread-203599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:40:45.721 [DEBUG] [Thread-203599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:40:45.721 [DEBUG] [Thread-203599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:40:45.730 [DEBUG] [Thread-203599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:40:45.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:40:45.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:40:45.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:40:45.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:40:45.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:40:45.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:40:45.764 [DEBUG] [Thread-203599] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:40:59.472 [DEBUG] [Thread-203602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:14.524 [DEBUG] [Thread-203603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:15.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:41:15.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:41:15.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
2026-02-15T11:41:17.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 40, 48), 21.06, 23.9, 0.0, 18.07, 18.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:41:17.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:40:48
2026-02-15T11:41:17.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:17.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:41:18.262 [DEBUG] [Thread-203604] [transport.py] [_log()] starting thread (client mode): 0xa5743d30
2026-02-15T11:41:18.262 [DEBUG] [Thread-203604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:41:18.281 [DEBUG] [Thread-203604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:41:18.281 [INFO] [Thread-203604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:18.285 [DEBUG] [Thread-203604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] client lang: <none>
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] server lang: <none>
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] kex follows: False
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:41:18.286 [DEBUG] [Thread-203604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:41:18.287 [DEBUG] [Thread-203604] [transport.py] [_log()] Compression: none
2026-02-15T11:41:18.287 [DEBUG] [Thread-203604] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:41:18.305 [DEBUG] [Thread-203604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:41:18.306 [DEBUG] [Thread-203604] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:41:18.306 [DEBUG] [Thread-203604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:41:18.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:41:18.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:41:18.309 [DEBUG] [Thread-203604] [transport.py] [_log()] userauth is OK
2026-02-15T11:41:18.309 [DEBUG] [Thread-203604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:41:18.309 [DEBUG] [Thread-203604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:41:18.309 [DEBUG] [Thread-203604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:41:18.310 [DEBUG] [Thread-203604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:41:18.334 [INFO] [Thread-203604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:41:18.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:41:18.959 [DEBUG] [Thread-203604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:41:18.959 [DEBUG] [Thread-203604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:41:18.959 [DEBUG] [Thread-203604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:41:18.999 [DEBUG] [Thread-203604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:41:19.000 [DEBUG] [Thread-203604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:41:19.003 [DEBUG] [Thread-203604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:41:19.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:41:19.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:41:19.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:41:19.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:41:19.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:41:19.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:41:19.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:41:19.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:41:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:41:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.403223 -999.00  +18.30  17.68     30   +0.70 1 1 1 1 1   888    0 20.60 127.83 ----- 17.7 17.7 163.6 27.0 26.1 -29.4 25.1 -28.6 24.4 -26.6 25.4 -27.8
2026-02-15T11:41:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:41:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:41:19.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.403223
2026-02-15T11:41:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:41:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:41:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:41:19.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:41:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:41:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:40:48', tmtdew=21.06, humidity=23.9, cloud=0.0, wind=18.07, temperature=18.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:40:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:41:19.031 [DEBUG] [Thread-203604] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:41:19.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:41:19.134 [DEBUG] [Thread-203607] [transport.py] [_log()] starting thread (client mode): 0xa57e0dc0
2026-02-15T11:41:19.135 [DEBUG] [Thread-203607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:41:19.149 [DEBUG] [Thread-203607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:41:19.149 [INFO] [Thread-203607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:41:19.157 [DEBUG] [Thread-203607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] client lang: <none>
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] server lang: <none>
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] kex follows: False
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] Compression: none
2026-02-15T11:41:19.158 [DEBUG] [Thread-203607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:41:19.215 [DEBUG] [Thread-203607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:41:19.215 [DEBUG] [Thread-203607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:41:19.216 [DEBUG] [Thread-203607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:41:19.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:41:19.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:41:19.271 [DEBUG] [Thread-203607] [transport.py] [_log()] userauth is OK
2026-02-15T11:41:19.271 [DEBUG] [Thread-203607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:41:19.271 [DEBUG] [Thread-203607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:41:19.271 [DEBUG] [Thread-203607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:41:19.271 [DEBUG] [Thread-203607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:41:19.291 [INFO] [Thread-203607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:41:19.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:41:19.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:41:20.114 [DEBUG] [Thread-203607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:41:20.114 [DEBUG] [Thread-203607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:41:20.162 [DEBUG] [Thread-203607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:41:20.163 [DEBUG] [Thread-203607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:41:20.172 [DEBUG] [Thread-203607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:41:20.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:41:20.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:41:20.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:41:20.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:41:20.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:41:20.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:41:20.211 [DEBUG] [Thread-203607] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:41:29.565 [DEBUG] [Thread-203609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:44.614 [DEBUG] [Thread-203610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:45.608 [DEBUG] [Thread-203611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:41:50.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:41:50.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:41:50.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:41:52.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 41, 25), 21.15, 23.73, 0.0, 18.81, 18.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:41:52.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:41:25
2026-02-15T11:41:52.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:41:52.665 [DEBUG] [Thread-203612] [transport.py] [_log()] starting thread (client mode): 0xa5743d00
2026-02-15T11:41:52.665 [DEBUG] [Thread-203612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:41:52.686 [DEBUG] [Thread-203612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:41:52.686 [INFO] [Thread-203612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:41:52.689 [DEBUG] [Thread-203612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:41:52.689 [DEBUG] [Thread-203612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:41:52.689 [DEBUG] [Thread-203612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:41:52.689 [DEBUG] [Thread-203612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:52.689 [DEBUG] [Thread-203612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] client lang: <none>
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] server lang: <none>
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] kex follows: False
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] Compression: none
2026-02-15T11:41:52.690 [DEBUG] [Thread-203612] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:41:52.711 [DEBUG] [Thread-203612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:41:52.712 [DEBUG] [Thread-203612] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:41:52.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:41:52.713 [DEBUG] [Thread-203612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:41:52.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:41:52.715 [DEBUG] [Thread-203612] [transport.py] [_log()] userauth is OK
2026-02-15T11:41:52.715 [DEBUG] [Thread-203612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:41:52.715 [DEBUG] [Thread-203612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:41:52.715 [DEBUG] [Thread-203612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:41:52.715 [DEBUG] [Thread-203612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:41:52.740 [INFO] [Thread-203612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:41:52.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:41:53.350 [DEBUG] [Thread-203612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:41:53.351 [DEBUG] [Thread-203612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:41:53.351 [DEBUG] [Thread-203612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:41:53.392 [DEBUG] [Thread-203612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:41:53.392 [DEBUG] [Thread-203612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:41:53.394 [DEBUG] [Thread-203612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:41:53.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:41:53.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:41:53.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:41:53.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:41:53.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:41:53.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:41:53.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:41:53.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:41:53.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:41:53.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.403918 -999.00  +18.30  10.06     29   +0.30 1 1 1 1 1   888    0 20.87 134.79 ----- 10.1 10.1 152.6 20.5 26.1 -28.6 25.0 -28.1 24.4 -27.6 25.4 -28.1
2026-02-15T11:41:53.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:41:53.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:41:53.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.403918
2026-02-15T11:41:53.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:41:53.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:41:53.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:41:53.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:41:53.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:41:53.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:41:25', tmtdew=21.15, humidity=23.73, cloud=0.0, wind=18.81, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:41:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:41:53.410 [DEBUG] [Thread-203612] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:41:53.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:41:53.507 [DEBUG] [Thread-203615] [transport.py] [_log()] starting thread (client mode): 0xa2d6bdf0
2026-02-15T11:41:53.507 [DEBUG] [Thread-203615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:41:53.522 [DEBUG] [Thread-203615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:41:53.522 [INFO] [Thread-203615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:41:53.530 [DEBUG] [Thread-203615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] client lang: <none>
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] server lang: <none>
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] kex follows: False
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] Compression: none
2026-02-15T11:41:53.531 [DEBUG] [Thread-203615] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:41:53.586 [DEBUG] [Thread-203615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:41:53.587 [DEBUG] [Thread-203615] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:41:53.588 [DEBUG] [Thread-203615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:41:53.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:41:53.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:41:53.648 [DEBUG] [Thread-203615] [transport.py] [_log()] userauth is OK
2026-02-15T11:41:53.649 [DEBUG] [Thread-203615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:41:53.649 [DEBUG] [Thread-203615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:41:53.649 [DEBUG] [Thread-203615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:41:53.649 [DEBUG] [Thread-203615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:41:53.668 [INFO] [Thread-203615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:41:53.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:41:53.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:41:54.529 [DEBUG] [Thread-203615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:41:54.530 [DEBUG] [Thread-203615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:41:54.577 [DEBUG] [Thread-203615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:41:54.578 [DEBUG] [Thread-203615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:41:54.587 [DEBUG] [Thread-203615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:41:54.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:41:54.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:41:54.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:41:54.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:41:54.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:41:54.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:41:54.623 [DEBUG] [Thread-203615] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:41:59.650 [DEBUG] [Thread-203617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:14.701 [DEBUG] [Thread-203618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:17.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:17.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:42:24.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:42:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:42:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 42), 20.81, 24.26, 0.0, 17.01, 18.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:42:26.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:42:00
2026-02-15T11:42:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:42:27.090 [DEBUG] [Thread-203619] [transport.py] [_log()] starting thread (client mode): 0xa2d69ea0
2026-02-15T11:42:27.090 [DEBUG] [Thread-203619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:42:27.109 [DEBUG] [Thread-203619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:42:27.110 [INFO] [Thread-203619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:42:27.113 [DEBUG] [Thread-203619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] client lang: <none>
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] server lang: <none>
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] kex follows: False
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:42:27.114 [DEBUG] [Thread-203619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:42:27.115 [DEBUG] [Thread-203619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:42:27.115 [DEBUG] [Thread-203619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:42:27.115 [DEBUG] [Thread-203619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:42:27.115 [DEBUG] [Thread-203619] [transport.py] [_log()] Compression: none
2026-02-15T11:42:27.115 [DEBUG] [Thread-203619] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:42:27.132 [DEBUG] [Thread-203619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:42:27.133 [DEBUG] [Thread-203619] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:42:27.134 [DEBUG] [Thread-203619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:42:27.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:42:27.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:42:27.135 [DEBUG] [Thread-203619] [transport.py] [_log()] userauth is OK
2026-02-15T11:42:27.135 [DEBUG] [Thread-203619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:42:27.135 [DEBUG] [Thread-203619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:42:27.135 [DEBUG] [Thread-203619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:42:27.135 [DEBUG] [Thread-203619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:42:27.158 [INFO] [Thread-203619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:42:27.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:42:27.771 [DEBUG] [Thread-203619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:42:27.772 [DEBUG] [Thread-203619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:42:27.772 [DEBUG] [Thread-203619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:42:27.813 [DEBUG] [Thread-203619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:42:27.813 [DEBUG] [Thread-203619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:42:27.816 [DEBUG] [Thread-203619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:42:27.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:42:27.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:42:27.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:42:27.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:42:27.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:42:27.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:42:27.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:42:27.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:42:27.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:42:27.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.404265 -999.00  +18.50   7.89     30   +0.70 1 1 1 1 1   888    0 21.04 133.34 ----- 7.9 7.9 165.2 14.4 26.2 -27.8 25.1 -27.2 24.6 -26.0 25.6 -27.0
2026-02-15T11:42:27.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:42:27.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:42:27.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.404265
2026-02-15T11:42:27.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:42:27.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:42:27.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:42:27.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:42:27.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:42:27.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:42:00', tmtdew=20.81, humidity=24.26, cloud=0.0, wind=17.01, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:42:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:42:27.835 [DEBUG] [Thread-203619] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:42:27.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:42:27.932 [DEBUG] [Thread-203622] [transport.py] [_log()] starting thread (client mode): 0xa5742440
2026-02-15T11:42:27.932 [DEBUG] [Thread-203622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:42:27.947 [DEBUG] [Thread-203622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:42:27.947 [INFO] [Thread-203622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:42:27.955 [DEBUG] [Thread-203622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] client lang: <none>
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] server lang: <none>
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] kex follows: False
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:42:27.956 [DEBUG] [Thread-203622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:42:27.957 [DEBUG] [Thread-203622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:42:27.957 [DEBUG] [Thread-203622] [transport.py] [_log()] Compression: none
2026-02-15T11:42:27.957 [DEBUG] [Thread-203622] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:42:28.015 [DEBUG] [Thread-203622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:42:28.015 [DEBUG] [Thread-203622] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:42:28.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:42:28.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:42:28.017 [DEBUG] [Thread-203622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:42:28.074 [DEBUG] [Thread-203622] [transport.py] [_log()] userauth is OK
2026-02-15T11:42:28.074 [DEBUG] [Thread-203622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:42:28.074 [DEBUG] [Thread-203622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:42:28.075 [DEBUG] [Thread-203622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:42:28.075 [DEBUG] [Thread-203622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:42:28.095 [INFO] [Thread-203622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:42:28.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:42:28.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:42:28.977 [DEBUG] [Thread-203622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:42:28.977 [DEBUG] [Thread-203622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:42:29.032 [DEBUG] [Thread-203622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:42:29.033 [DEBUG] [Thread-203622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:42:29.049 [DEBUG] [Thread-203622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:42:29.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:42:29.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:42: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') -> 00000000
2026-02-15T11:42:29.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:42:29.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:42:29.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:42:29.115 [DEBUG] [Thread-203622] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:42:29.736 [DEBUG] [Thread-203624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:44.786 [DEBUG] [Thread-203625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:45.643 [DEBUG] [Thread-203626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:42:59.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:42:59.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:42: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-02-15T11:42:59.823 [DEBUG] [Thread-203627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:43:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 42, 36), 21.23, 23.63, 0.0, 14.12, 19.03, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:43:01.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:42:36
2026-02-15T11:43:01.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:43:02.146 [DEBUG] [Thread-203628] [transport.py] [_log()] starting thread (client mode): 0xa81d7b20
2026-02-15T11:43:02.146 [DEBUG] [Thread-203628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:43:02.166 [DEBUG] [Thread-203628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:43:02.166 [INFO] [Thread-203628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:02.169 [DEBUG] [Thread-203628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] client lang: <none>
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] server lang: <none>
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] kex follows: False
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] Compression: none
2026-02-15T11:43:02.170 [DEBUG] [Thread-203628] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:43:02.187 [DEBUG] [Thread-203628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:43:02.188 [DEBUG] [Thread-203628] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:43:02.188 [DEBUG] [Thread-203628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:43:02.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:43:02.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:43:02.189 [DEBUG] [Thread-203628] [transport.py] [_log()] userauth is OK
2026-02-15T11:43:02.189 [DEBUG] [Thread-203628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:43:02.189 [DEBUG] [Thread-203628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:43:02.189 [DEBUG] [Thread-203628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:43:02.189 [DEBUG] [Thread-203628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:43:02.207 [INFO] [Thread-203628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:43:02.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:43:02.861 [DEBUG] [Thread-203628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:43:02.861 [DEBUG] [Thread-203628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:43:02.862 [DEBUG] [Thread-203628] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:43:02.902 [DEBUG] [Thread-203628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:43:02.902 [DEBUG] [Thread-203628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:43:02.905 [DEBUG] [Thread-203628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:43:02.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:43:02.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:43:02.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:43:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:43:02.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:43:02.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:43:02.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:43:02.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:43:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:43:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.404612 -999.00  +18.80   9.41     30   +1.00 1 1 1 1 1   888    0 20.90 127.07 ----- 9.4 9.4 172.2 12.2 26.4 -28.2 25.2 -27.2 24.6 -25.7 25.7 -27.4
2026-02-15T11:43:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:43:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:43:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.404612
2026-02-15T11:43:02.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:43:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:43:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:43:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:43:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:43:02.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:42:36', tmtdew=21.23, humidity=23.63, cloud=0.0, wind=14.12, temperature=19.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:42:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:43:02.925 [DEBUG] [Thread-203628] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:43:03.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:43:03.029 [DEBUG] [Thread-203631] [transport.py] [_log()] starting thread (client mode): 0xa2d02590
2026-02-15T11:43:03.029 [DEBUG] [Thread-203631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:43:03.043 [DEBUG] [Thread-203631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:43:03.044 [INFO] [Thread-203631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:43:03.051 [DEBUG] [Thread-203631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:43:03.051 [DEBUG] [Thread-203631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:43:03.051 [DEBUG] [Thread-203631] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] client lang: <none>
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] server lang: <none>
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] kex follows: False
2026-02-15T11:43:03.052 [DEBUG] [Thread-203631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:43:03.053 [DEBUG] [Thread-203631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:43:03.053 [DEBUG] [Thread-203631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:43:03.053 [DEBUG] [Thread-203631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:43:03.053 [DEBUG] [Thread-203631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:43:03.053 [DEBUG] [Thread-203631] [transport.py] [_log()] Compression: none
2026-02-15T11:43:03.053 [DEBUG] [Thread-203631] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:43:03.114 [DEBUG] [Thread-203631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:43:03.115 [DEBUG] [Thread-203631] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:43:03.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:43:03.116 [DEBUG] [Thread-203631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:43:03.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:43:03.171 [DEBUG] [Thread-203631] [transport.py] [_log()] userauth is OK
2026-02-15T11:43:03.171 [DEBUG] [Thread-203631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:43:03.171 [DEBUG] [Thread-203631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:43:03.172 [DEBUG] [Thread-203631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:43:03.172 [DEBUG] [Thread-203631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:43:03.191 [INFO] [Thread-203631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:43:03.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:43:03.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:43:04.023 [DEBUG] [Thread-203631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:43:04.023 [DEBUG] [Thread-203631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:43:04.072 [DEBUG] [Thread-203631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:43:04.072 [DEBUG] [Thread-203631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:43:04.081 [DEBUG] [Thread-203631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:43:04.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:43:04.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:43: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
2026-02-15T11:43:04.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:43:04.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:43:04.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:43:04.120 [DEBUG] [Thread-203631] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:43:14.860 [DEBUG] [Thread-203633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:43:18.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:43:18.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:43:29.914 [DEBUG] [Thread-203634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:43:34.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:43:34.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:43:34.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:43:36.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 43, 11), 20.09, 25.56, 0.0, 18.24, 18.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:43:36.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:43:11
2026-02-15T11:43:36.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:43:36.590 [DEBUG] [Thread-203635] [transport.py] [_log()] starting thread (client mode): 0xa2d68eb0
2026-02-15T11:43:36.590 [DEBUG] [Thread-203635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:43:36.610 [DEBUG] [Thread-203635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:43:36.611 [INFO] [Thread-203635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:36.613 [DEBUG] [Thread-203635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] client lang: <none>
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] server lang: <none>
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] kex follows: False
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] Compression: none
2026-02-15T11:43:36.614 [DEBUG] [Thread-203635] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:43:36.630 [DEBUG] [Thread-203635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:43:36.631 [DEBUG] [Thread-203635] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:43:36.631 [DEBUG] [Thread-203635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:43:36.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:43:36.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:43:36.633 [DEBUG] [Thread-203635] [transport.py] [_log()] userauth is OK
2026-02-15T11:43:36.633 [DEBUG] [Thread-203635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:43:36.633 [DEBUG] [Thread-203635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:43:36.633 [DEBUG] [Thread-203635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:43:36.634 [DEBUG] [Thread-203635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:43:36.648 [INFO] [Thread-203635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:43:36.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:43:37.231 [DEBUG] [Thread-203635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:43:37.231 [DEBUG] [Thread-203635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:43:37.231 [DEBUG] [Thread-203635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:43:37.272 [DEBUG] [Thread-203635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:43:37.273 [DEBUG] [Thread-203635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:43:37.276 [DEBUG] [Thread-203635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:43:37.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:43:37.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:43:37.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:43:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:43:37.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:43:37.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:43:37.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:43:37.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:43:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:43:37.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.404959 -999.00  +19.10  16.67     29   +1.00 1 1 1 1 1   888    0 20.71 128.26 ----- 16.7 16.7 177.2 20.7 26.5 -28.9 25.3 -26.4 24.7 -26.0 25.7 -28.5
2026-02-15T11:43:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:43:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:43:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.404959
2026-02-15T11:43:37.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:43:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:43:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:43:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:43:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:43:37.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:43:11', tmtdew=20.09, humidity=25.56, cloud=0.0, wind=18.24, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:43:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:43:37.303 [DEBUG] [Thread-203635] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:43:37.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:43:37.398 [DEBUG] [Thread-203638] [transport.py] [_log()] starting thread (client mode): 0xa81d7c10
2026-02-15T11:43:37.398 [DEBUG] [Thread-203638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:43:37.412 [DEBUG] [Thread-203638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:43:37.412 [INFO] [Thread-203638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:43:37.420 [DEBUG] [Thread-203638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] client lang: <none>
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] server lang: <none>
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] kex follows: False
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] Compression: none
2026-02-15T11:43:37.421 [DEBUG] [Thread-203638] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:43:37.484 [DEBUG] [Thread-203638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:43:37.485 [DEBUG] [Thread-203638] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:43:37.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:43:37.486 [DEBUG] [Thread-203638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:43:37.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:43:37.540 [DEBUG] [Thread-203638] [transport.py] [_log()] userauth is OK
2026-02-15T11:43:37.540 [DEBUG] [Thread-203638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:43:37.540 [DEBUG] [Thread-203638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:43:37.540 [DEBUG] [Thread-203638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:43:37.540 [DEBUG] [Thread-203638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:43:37.559 [INFO] [Thread-203638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:43:37.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:43:37.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:43:38.384 [DEBUG] [Thread-203638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:43:38.384 [DEBUG] [Thread-203638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:43:38.433 [DEBUG] [Thread-203638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:43:38.433 [DEBUG] [Thread-203638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:43:38.442 [DEBUG] [Thread-203638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:43:38.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:43:38.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:43:38.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:43:38.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:43:38.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:43:38.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:43:38.482 [DEBUG] [Thread-203638] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:43:44.949 [DEBUG] [Thread-203640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:43:45.697 [DEBUG] [Thread-203641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:00.004 [DEBUG] [Thread-203642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:08.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:44:08.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:44:08.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:44:10.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 43, 46), 21.03, 24.04, 0.0, 23.8, 18.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:44:10.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:43:46
2026-02-15T11:44:11.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:44:11.176 [DEBUG] [Thread-203643] [transport.py] [_log()] starting thread (client mode): 0xa575b460
2026-02-15T11:44:11.176 [DEBUG] [Thread-203643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:44:11.197 [DEBUG] [Thread-203643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:44:11.198 [INFO] [Thread-203643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:44:11.199 [DEBUG] [Thread-203643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:44:11.199 [DEBUG] [Thread-203643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:44:11.199 [DEBUG] [Thread-203643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:44:11.199 [DEBUG] [Thread-203643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:11.199 [DEBUG] [Thread-203643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] client lang: <none>
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] server lang: <none>
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] kex follows: False
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] Compression: none
2026-02-15T11:44:11.200 [DEBUG] [Thread-203643] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:44:11.209 [DEBUG] [Thread-203643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:44:11.210 [DEBUG] [Thread-203643] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:44:11.211 [DEBUG] [Thread-203643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:44:11.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:44:11.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:44:11.213 [DEBUG] [Thread-203643] [transport.py] [_log()] userauth is OK
2026-02-15T11:44:11.213 [DEBUG] [Thread-203643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:44:11.213 [DEBUG] [Thread-203643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:44:11.213 [DEBUG] [Thread-203643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:44:11.213 [DEBUG] [Thread-203643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:44:11.233 [INFO] [Thread-203643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:44:11.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:44:11.851 [DEBUG] [Thread-203643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:44:11.852 [DEBUG] [Thread-203643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:44:11.852 [DEBUG] [Thread-203643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:44:11.892 [DEBUG] [Thread-203643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:44:11.893 [DEBUG] [Thread-203643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:44:11.896 [DEBUG] [Thread-203643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:44:11.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:44:11.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:44:11.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:44:11.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:44:11.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:44:11.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:44:11.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:44:11.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:44:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:44:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.405307 -999.00  +19.00  20.46     29   +0.60 1 1 1 1 1   888    0 20.90 130.80 ----- 20.5 20.5 159.2 26.4 26.4 -29.6 25.0 -31.6 24.6 -27.2 25.6 -28.7
2026-02-15T11:44:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:44:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:44:11.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.405307
2026-02-15T11:44:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:44:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:44:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:44:11.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:44:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:44:11.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:43:46', tmtdew=21.03, humidity=24.04, cloud=0.0, wind=23.8, temperature=18.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:43:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:44:11.921 [DEBUG] [Thread-203643] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:44:12.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:44:12.015 [DEBUG] [Thread-203646] [transport.py] [_log()] starting thread (client mode): 0xa57594b0
2026-02-15T11:44:12.015 [DEBUG] [Thread-203646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:44:12.030 [DEBUG] [Thread-203646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:44:12.030 [INFO] [Thread-203646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:12.038 [DEBUG] [Thread-203646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] client lang: <none>
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] server lang: <none>
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] kex follows: False
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] Compression: none
2026-02-15T11:44:12.039 [DEBUG] [Thread-203646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:44:12.097 [DEBUG] [Thread-203646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:44:12.098 [DEBUG] [Thread-203646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:44:12.099 [DEBUG] [Thread-203646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:44:12.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:44:12.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:44:12.156 [DEBUG] [Thread-203646] [transport.py] [_log()] userauth is OK
2026-02-15T11:44:12.157 [DEBUG] [Thread-203646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:44:12.157 [DEBUG] [Thread-203646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:44:12.157 [DEBUG] [Thread-203646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:44:12.157 [DEBUG] [Thread-203646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:44:12.176 [INFO] [Thread-203646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:44:12.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:44:12.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:44:12.988 [DEBUG] [Thread-203646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:44:12.988 [DEBUG] [Thread-203646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:44:13.037 [DEBUG] [Thread-203646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:44:13.037 [DEBUG] [Thread-203646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:44:13.049 [DEBUG] [Thread-203646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:44:13.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:44:13.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:44:13.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:44:13.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:44:13.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:44:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:44:13.089 [DEBUG] [Thread-203646] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:44:15.038 [DEBUG] [Thread-203648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:18.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:18.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:30.099 [DEBUG] [Thread-203649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:43.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:44:43.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:44:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:44:45.132 [DEBUG] [Thread-203650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:45.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 44, 22), 21.22, 23.75, 0.0, 27.88, 18.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:44:45.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:44:22
2026-02-15T11:44:45.726 [DEBUG] [Thread-203651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:44:45.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:44:46.100 [DEBUG] [Thread-203652] [transport.py] [_log()] starting thread (client mode): 0xa57b1120
2026-02-15T11:44:46.100 [DEBUG] [Thread-203652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:44:46.120 [DEBUG] [Thread-203652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:44:46.120 [INFO] [Thread-203652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] client lang: <none>
2026-02-15T11:44:46.123 [DEBUG] [Thread-203652] [transport.py] [_log()] server lang: <none>
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] kex follows: False
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] Compression: none
2026-02-15T11:44:46.124 [DEBUG] [Thread-203652] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:44:46.134 [DEBUG] [Thread-203652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:44:46.135 [DEBUG] [Thread-203652] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:44:46.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:44:46.136 [DEBUG] [Thread-203652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:44:46.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:44:46.138 [DEBUG] [Thread-203652] [transport.py] [_log()] userauth is OK
2026-02-15T11:44:46.139 [DEBUG] [Thread-203652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:44:46.139 [DEBUG] [Thread-203652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:44:46.139 [DEBUG] [Thread-203652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:44:46.139 [DEBUG] [Thread-203652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:44:46.166 [INFO] [Thread-203652] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:44:46.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:44:46.812 [DEBUG] [Thread-203652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:44:46.812 [DEBUG] [Thread-203652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:44:46.812 [DEBUG] [Thread-203652] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:44:46.853 [DEBUG] [Thread-203652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:44:46.853 [DEBUG] [Thread-203652] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:44:46.857 [DEBUG] [Thread-203652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:44:46.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:44:46.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:44:46.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:44:46.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:44:46.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:44:46.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:44:46.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:44:46.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:44:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:44:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.405654 -999.00  +18.90  13.71     29   +0.80 1 1 1 1 1   888    0 21.06 136.13 ----- 13.7 13.7 159.4 20.3 26.4 -29.0 25.1 -27.3 24.5 -26.9 25.8 -27.5
2026-02-15T11:44:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:44:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:44:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.405654
2026-02-15T11:44:46.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:44:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:44:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:44:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:44:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:44:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:44:22', tmtdew=21.22, humidity=23.75, cloud=0.0, wind=27.88, temperature=18.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:44:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:44:46.886 [DEBUG] [Thread-203652] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:44:46.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:44:46.993 [DEBUG] [Thread-203655] [transport.py] [_log()] starting thread (client mode): 0xa575a890
2026-02-15T11:44:46.993 [DEBUG] [Thread-203655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:44:47.009 [DEBUG] [Thread-203655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:44:47.009 [INFO] [Thread-203655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:44:47.016 [DEBUG] [Thread-203655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] client lang: <none>
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] server lang: <none>
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] kex follows: False
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:44:47.017 [DEBUG] [Thread-203655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:44:47.018 [DEBUG] [Thread-203655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:44:47.018 [DEBUG] [Thread-203655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:44:47.018 [DEBUG] [Thread-203655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:44:47.018 [DEBUG] [Thread-203655] [transport.py] [_log()] Compression: none
2026-02-15T11:44:47.018 [DEBUG] [Thread-203655] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:44:47.076 [DEBUG] [Thread-203655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:44:47.076 [DEBUG] [Thread-203655] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:44:47.077 [DEBUG] [Thread-203655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:44:47.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:44:47.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:44:47.133 [DEBUG] [Thread-203655] [transport.py] [_log()] userauth is OK
2026-02-15T11:44:47.133 [DEBUG] [Thread-203655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:44:47.133 [DEBUG] [Thread-203655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:44:47.133 [DEBUG] [Thread-203655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:44:47.134 [DEBUG] [Thread-203655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:44:47.153 [INFO] [Thread-203655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:44:47.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:44:47.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:44:48.022 [DEBUG] [Thread-203655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:44:48.023 [DEBUG] [Thread-203655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:44:48.070 [DEBUG] [Thread-203655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:44:48.070 [DEBUG] [Thread-203655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:44:48.079 [DEBUG] [Thread-203655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:44:48.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:44:48.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:44:48.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:44:48.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:44:48.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:44:48.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:44:48.121 [DEBUG] [Thread-203655] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:45:00.171 [DEBUG] [Thread-203657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:15.224 [DEBUG] [Thread-203658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:45:18.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:45:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:45:18.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:18.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 44, 57), 21.35, 23.39, 0.0, 20.06, 18.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:45:20.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:44:57
2026-02-15T11:45:20.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:45:20.653 [DEBUG] [Thread-203659] [transport.py] [_log()] starting thread (client mode): 0xa57401f0
2026-02-15T11:45:20.653 [DEBUG] [Thread-203659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:45:20.672 [DEBUG] [Thread-203659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:45:20.672 [INFO] [Thread-203659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] client lang: <none>
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] server lang: <none>
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] kex follows: False
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:45:20.675 [DEBUG] [Thread-203659] [transport.py] [_log()] Compression: none
2026-02-15T11:45:20.676 [DEBUG] [Thread-203659] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:45:20.692 [DEBUG] [Thread-203659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:45:20.693 [DEBUG] [Thread-203659] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:45:20.694 [DEBUG] [Thread-203659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:45:20.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:45:20.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:45:20.696 [DEBUG] [Thread-203659] [transport.py] [_log()] userauth is OK
2026-02-15T11:45:20.696 [DEBUG] [Thread-203659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:45:20.696 [DEBUG] [Thread-203659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:45:20.696 [DEBUG] [Thread-203659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:45:20.696 [DEBUG] [Thread-203659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:45:20.721 [INFO] [Thread-203659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:45:20.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:45:21.312 [DEBUG] [Thread-203659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:45:21.312 [DEBUG] [Thread-203659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:45:21.312 [DEBUG] [Thread-203659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:45:21.352 [DEBUG] [Thread-203659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:45:21.352 [DEBUG] [Thread-203659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:45:21.355 [DEBUG] [Thread-203659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:45:21.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:45:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:45:21.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:45:21.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:45:21.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:45:21.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:45:21.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:45:21.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:45:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:45:21.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.406001 -999.00  +19.00  16.04     28   +0.40 1 1 1 1 1   888    0 21.30 131.19 ----- 16.0 16.0 141.6 22.3 26.4 -28.2 25.3 -26.8 24.6 -26.9 25.8 -27.3
2026-02-15T11:45:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:45:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:45:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.406001
2026-02-15T11:45:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:45:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:45:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:45:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:45:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:45:21.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:44:57', tmtdew=21.35, humidity=23.39, cloud=0.0, wind=20.06, temperature=18.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:44:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:45:21.384 [DEBUG] [Thread-203659] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:45:21.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:45:21.471 [DEBUG] [Thread-203662] [transport.py] [_log()] starting thread (client mode): 0xa2d02590
2026-02-15T11:45:21.471 [DEBUG] [Thread-203662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:45:21.485 [DEBUG] [Thread-203662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:45:21.486 [INFO] [Thread-203662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:45:21.495 [DEBUG] [Thread-203662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] client lang: <none>
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] server lang: <none>
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] kex follows: False
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] Compression: none
2026-02-15T11:45:21.496 [DEBUG] [Thread-203662] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:45:21.553 [DEBUG] [Thread-203662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:45:21.553 [DEBUG] [Thread-203662] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:45:21.554 [DEBUG] [Thread-203662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:45:21.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:45:21.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:45:21.608 [DEBUG] [Thread-203662] [transport.py] [_log()] userauth is OK
2026-02-15T11:45:21.608 [DEBUG] [Thread-203662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:45:21.609 [DEBUG] [Thread-203662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:45:21.609 [DEBUG] [Thread-203662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:45:21.609 [DEBUG] [Thread-203662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:45:21.627 [INFO] [Thread-203662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:45:21.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:45:21.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:45:22.457 [DEBUG] [Thread-203662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:45:22.457 [DEBUG] [Thread-203662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:45:22.506 [DEBUG] [Thread-203662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:45:22.506 [DEBUG] [Thread-203662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:45:22.517 [DEBUG] [Thread-203662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:45:22.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:45:22.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:45: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
2026-02-15T11:45:22.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:45:22.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:45:22.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:45:22.554 [DEBUG] [Thread-203662] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:45:30.261 [DEBUG] [Thread-203664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:45.320 [DEBUG] [Thread-203665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:45.762 [DEBUG] [Thread-203666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:45:52.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:45:52.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:45:52.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:45:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 45, 32), 21.12, 23.69, 0.0, 20.03, 18.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:45:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:45:32
2026-02-15T11:45:54.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:45:55.070 [DEBUG] [Thread-203667] [transport.py] [_log()] starting thread (client mode): 0xa5742bc0
2026-02-15T11:45:55.070 [DEBUG] [Thread-203667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:45:55.091 [DEBUG] [Thread-203667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:45:55.091 [INFO] [Thread-203667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:55.094 [DEBUG] [Thread-203667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] client lang: <none>
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] server lang: <none>
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] kex follows: False
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] Compression: none
2026-02-15T11:45:55.095 [DEBUG] [Thread-203667] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:45:55.112 [DEBUG] [Thread-203667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:45:55.113 [DEBUG] [Thread-203667] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:45:55.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:45:55.114 [DEBUG] [Thread-203667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:45:55.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:45:55.116 [DEBUG] [Thread-203667] [transport.py] [_log()] userauth is OK
2026-02-15T11:45:55.116 [DEBUG] [Thread-203667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:45:55.116 [DEBUG] [Thread-203667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:45:55.116 [DEBUG] [Thread-203667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:45:55.116 [DEBUG] [Thread-203667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:45:55.139 [INFO] [Thread-203667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:45:55.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:45:55.779 [DEBUG] [Thread-203667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:45:55.779 [DEBUG] [Thread-203667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:45:55.779 [DEBUG] [Thread-203667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:45:55.820 [DEBUG] [Thread-203667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:45:55.820 [DEBUG] [Thread-203667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:45:55.823 [DEBUG] [Thread-203667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:45:55.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:45:55.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:45:55.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:45:55.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:45:55.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:45:55.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:45:55.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.406696 -999.00  +19.50  17.14     27   +0.30 1 1 1 1 1   888    0 21.30 144.69 ----- 17.1 17.1 143.0 21.2 26.5 -28.8 25.4 -27.7 24.9 -25.7 25.8 -28.7
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.406696
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:45:55.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:45:32', tmtdew=21.12, humidity=23.69, cloud=0.0, wind=20.03, temperature=18.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:45:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:45:55.842 [DEBUG] [Thread-203667] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:45:55.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:45:55.925 [DEBUG] [Thread-203670] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a60
2026-02-15T11:45:55.925 [DEBUG] [Thread-203670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:45:55.940 [DEBUG] [Thread-203670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:45:55.940 [INFO] [Thread-203670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:45:55.947 [DEBUG] [Thread-203670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:45:55.947 [DEBUG] [Thread-203670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:45:55.947 [DEBUG] [Thread-203670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] client lang: <none>
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] server lang: <none>
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] kex follows: False
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] Compression: none
2026-02-15T11:45:55.948 [DEBUG] [Thread-203670] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:45:56.003 [DEBUG] [Thread-203670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:45:56.004 [DEBUG] [Thread-203670] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:45:56.004 [DEBUG] [Thread-203670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:45:56.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:45:56.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:45:56.060 [DEBUG] [Thread-203670] [transport.py] [_log()] userauth is OK
2026-02-15T11:45:56.060 [DEBUG] [Thread-203670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:45:56.060 [DEBUG] [Thread-203670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:45:56.060 [DEBUG] [Thread-203670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:45:56.060 [DEBUG] [Thread-203670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:45:56.080 [INFO] [Thread-203670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:45:56.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:45:56.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:45:56.882 [DEBUG] [Thread-203670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:45:56.882 [DEBUG] [Thread-203670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:45:56.931 [DEBUG] [Thread-203670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:45:56.931 [DEBUG] [Thread-203670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:45:56.940 [DEBUG] [Thread-203670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:45:56.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:45:56.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:45:56.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:45:56.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:45:56.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:45:56.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:45:56.976 [DEBUG] [Thread-203670] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:46:00.355 [DEBUG] [Thread-203672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:46:15.410 [DEBUG] [Thread-203673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:46:18.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:46:18.457 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:46:26.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:46:26.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:46:27.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:46:29.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 46, 8), 21.25, 23.51, 0.0, 13.99, 18.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:46:29.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:46:08
2026-02-15T11:46:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:46:29.589 [DEBUG] [Thread-203674] [transport.py] [_log()] starting thread (client mode): 0xa2d00490
2026-02-15T11:46:29.589 [DEBUG] [Thread-203674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:46:29.608 [DEBUG] [Thread-203674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:46:29.608 [INFO] [Thread-203674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:46:29.611 [DEBUG] [Thread-203674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] client lang: <none>
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] server lang: <none>
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] kex follows: False
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:46:29.612 [DEBUG] [Thread-203674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:46:29.613 [DEBUG] [Thread-203674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:46:29.613 [DEBUG] [Thread-203674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:46:29.613 [DEBUG] [Thread-203674] [transport.py] [_log()] Compression: none
2026-02-15T11:46:29.613 [DEBUG] [Thread-203674] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:46:29.634 [DEBUG] [Thread-203674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:46:29.635 [DEBUG] [Thread-203674] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:46:29.635 [DEBUG] [Thread-203674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:46:29.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:46:29.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:46:29.637 [DEBUG] [Thread-203674] [transport.py] [_log()] userauth is OK
2026-02-15T11:46:29.638 [DEBUG] [Thread-203674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:46:29.638 [DEBUG] [Thread-203674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:46:29.638 [DEBUG] [Thread-203674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:46:29.638 [DEBUG] [Thread-203674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:46:29.669 [INFO] [Thread-203674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:46:29.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:46:30.264 [DEBUG] [Thread-203674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:46:30.264 [DEBUG] [Thread-203674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:46:30.265 [DEBUG] [Thread-203674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:46:30.306 [DEBUG] [Thread-203674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:46:30.306 [DEBUG] [Thread-203674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:46:30.308 [DEBUG] [Thread-203674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:46:30.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:46:30.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:46:30.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:46:30.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:46:30.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:46:30.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:46:30.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:46:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:46:30.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.407043 -999.00  +19.20  14.26     26   -0.30 1 1 1 1 1   888    0 21.90 152.57 ----- 14.3 14.3 144.0 20.9 26.6 -27.9 25.5 -27.8 24.9 -27.9 25.9 -28.8
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.407043
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:46:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:46:08', tmtdew=21.25, humidity=23.51, cloud=0.0, wind=13.99, temperature=18.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:46:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:46:30.327 [DEBUG] [Thread-203674] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:46:30.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:46:30.410 [DEBUG] [Thread-203677] [transport.py] [_log()] starting thread (client mode): 0xa2d03cd0
2026-02-15T11:46:30.410 [DEBUG] [Thread-203677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:46:30.425 [DEBUG] [Thread-203677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:46:30.425 [INFO] [Thread-203677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] client lang: <none>
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] server lang: <none>
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] kex follows: False
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:46:30.434 [DEBUG] [Thread-203677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:46:30.435 [DEBUG] [Thread-203677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:46:30.435 [DEBUG] [Thread-203677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:46:30.435 [DEBUG] [Thread-203677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:46:30.435 [DEBUG] [Thread-203677] [transport.py] [_log()] Compression: none
2026-02-15T11:46:30.435 [DEBUG] [Thread-203677] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:46:30.446 [DEBUG] [Thread-203679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:46:30.492 [DEBUG] [Thread-203677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:46:30.492 [DEBUG] [Thread-203677] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:46:30.493 [DEBUG] [Thread-203677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:46:30.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:46:30.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:46:30.549 [DEBUG] [Thread-203677] [transport.py] [_log()] userauth is OK
2026-02-15T11:46:30.549 [DEBUG] [Thread-203677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:46:30.549 [DEBUG] [Thread-203677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:46:30.549 [DEBUG] [Thread-203677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:46:30.549 [DEBUG] [Thread-203677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:46:30.573 [INFO] [Thread-203677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:46:30.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:46:30.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:46:31.401 [DEBUG] [Thread-203677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:46:31.402 [DEBUG] [Thread-203677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:46:31.449 [DEBUG] [Thread-203677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:46:31.450 [DEBUG] [Thread-203677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:46:31.459 [DEBUG] [Thread-203677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:46:31.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:46:31.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:46:31.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:46:31.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:46:31.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:46:31.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:46:31.495 [DEBUG] [Thread-203677] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:46:45.505 [DEBUG] [Thread-203680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:46:45.804 [DEBUG] [Thread-203681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:00.541 [DEBUG] [Thread-203682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:47:01.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:47:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:47:03.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 46, 43), 21.98, 22.17, 0.0, 15.42, 18.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:47:03.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:46:43
2026-02-15T11:47:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:47:03.967 [DEBUG] [Thread-203683] [transport.py] [_log()] starting thread (client mode): 0xa575a3e0
2026-02-15T11:47:03.967 [DEBUG] [Thread-203683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:47:03.988 [DEBUG] [Thread-203683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:47:03.988 [INFO] [Thread-203683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:47:03.992 [DEBUG] [Thread-203683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] client lang: <none>
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] server lang: <none>
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] kex follows: False
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] Compression: none
2026-02-15T11:47:03.993 [DEBUG] [Thread-203683] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:47:04.006 [DEBUG] [Thread-203683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:47:04.007 [DEBUG] [Thread-203683] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:47:04.007 [DEBUG] [Thread-203683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:47:04.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:47:04.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:47:04.010 [DEBUG] [Thread-203683] [transport.py] [_log()] userauth is OK
2026-02-15T11:47:04.010 [DEBUG] [Thread-203683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:47:04.010 [DEBUG] [Thread-203683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:47:04.010 [DEBUG] [Thread-203683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:47:04.010 [DEBUG] [Thread-203683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:47:04.036 [INFO] [Thread-203683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:47:04.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:47:04.695 [DEBUG] [Thread-203683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:47:04.695 [DEBUG] [Thread-203683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:47:04.696 [DEBUG] [Thread-203683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:47:04.736 [DEBUG] [Thread-203683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:47:04.736 [DEBUG] [Thread-203683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:47:04.740 [DEBUG] [Thread-203683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:47:04.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:47:04.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:47:04.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:47:04.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:47:04.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:47:04.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:47:04.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:47:04.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:47:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:47:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.407390 -999.00  +18.90   9.64     27   -0.00 1 1 1 1 1   888    0 21.92 150.29 ----- 9.6 9.6 165.0 13.3 26.6 -29.0 25.6 -28.1 25.0 -26.0 26.0 -29.0
2026-02-15T11:47:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:47:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:47:04.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.407390
2026-02-15T11:47:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:47:04.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:47:04.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:47:04.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:47:04.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:47:04.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:46:43', tmtdew=21.98, humidity=22.17, cloud=0.0, wind=15.42, temperature=18.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:46:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:47:04.766 [DEBUG] [Thread-203683] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:47:04.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:47:04.861 [DEBUG] [Thread-203686] [transport.py] [_log()] starting thread (client mode): 0xa2d03b20
2026-02-15T11:47:04.862 [DEBUG] [Thread-203686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:47:04.881 [DEBUG] [Thread-203686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:47:04.882 [INFO] [Thread-203686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:47:04.892 [DEBUG] [Thread-203686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:47:04.893 [DEBUG] [Thread-203686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:47:04.893 [DEBUG] [Thread-203686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:47:04.893 [DEBUG] [Thread-203686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:04.893 [DEBUG] [Thread-203686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:04.893 [DEBUG] [Thread-203686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] client lang: <none>
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] server lang: <none>
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] kex follows: False
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] Compression: none
2026-02-15T11:47:04.894 [DEBUG] [Thread-203686] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:47:04.947 [DEBUG] [Thread-203686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:47:04.947 [DEBUG] [Thread-203686] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:47:04.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:47:04.948 [DEBUG] [Thread-203686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:47:04.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:47:05.005 [DEBUG] [Thread-203686] [transport.py] [_log()] userauth is OK
2026-02-15T11:47:05.005 [DEBUG] [Thread-203686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:47:05.005 [DEBUG] [Thread-203686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:47:05.005 [DEBUG] [Thread-203686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:47:05.005 [DEBUG] [Thread-203686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:47:05.028 [INFO] [Thread-203686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:47:05.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:47:05.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:47:05.879 [DEBUG] [Thread-203686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:47:05.880 [DEBUG] [Thread-203686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:47:05.927 [DEBUG] [Thread-203686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:47:05.928 [DEBUG] [Thread-203686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:47:05.937 [DEBUG] [Thread-203686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:47:05.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:47:05.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:47:05.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:47:05.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:47:05.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:47:05.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:47:05.973 [DEBUG] [Thread-203686] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:47:15.578 [DEBUG] [Thread-203688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:18.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:18.597 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:30.634 [DEBUG] [Thread-203689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:35.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:47:35.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:47:36.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:47:38.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 47, 19), 21.72, 22.55, 0.0, 14.28, 18.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:47:38.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:47:19
2026-02-15T11:47:38.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:47:39.002 [DEBUG] [Thread-203690] [transport.py] [_log()] starting thread (client mode): 0xa2d00fd0
2026-02-15T11:47:39.003 [DEBUG] [Thread-203690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:47:39.017 [DEBUG] [Thread-203690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:47:39.017 [INFO] [Thread-203690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:47:39.018 [DEBUG] [Thread-203690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] client lang: <none>
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] server lang: <none>
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] kex follows: False
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] Compression: none
2026-02-15T11:47:39.019 [DEBUG] [Thread-203690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:47:39.029 [DEBUG] [Thread-203690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:47:39.029 [DEBUG] [Thread-203690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:47:39.030 [DEBUG] [Thread-203690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:47:39.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:47:39.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:47:39.031 [DEBUG] [Thread-203690] [transport.py] [_log()] userauth is OK
2026-02-15T11:47:39.031 [DEBUG] [Thread-203690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:47:39.031 [DEBUG] [Thread-203690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:47:39.031 [DEBUG] [Thread-203690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:47:39.031 [DEBUG] [Thread-203690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:47:39.047 [INFO] [Thread-203690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:47:39.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:47:39.664 [DEBUG] [Thread-203690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:47:39.664 [DEBUG] [Thread-203690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:47:39.665 [DEBUG] [Thread-203690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:47:39.706 [DEBUG] [Thread-203690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:47:39.706 [DEBUG] [Thread-203690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:47:39.709 [DEBUG] [Thread-203690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:47:39.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:47:39.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:47:39.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:47:39.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:47:39.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:47:39.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:47:39.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:47:39.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:47:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:47:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.407737 -999.00  +19.00  18.81     28   +0.30 1 1 1 1 1   888    0 22.12 152.96 ----- 18.8 18.8 134.2 21.8 26.8 -29.2 25.6 -27.3 25.0 -26.8 26.1 -28.0
2026-02-15T11:47:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:47:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:47:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.407737
2026-02-15T11:47:39.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:47:39.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:47:39.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:47:39.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:47:39.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:47:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:47:19', tmtdew=21.72, humidity=22.55, cloud=0.0, wind=14.28, temperature=18.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:47:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:47:39.736 [DEBUG] [Thread-203690] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:47:39.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:47:39.832 [DEBUG] [Thread-203693] [transport.py] [_log()] starting thread (client mode): 0xa81d70a0
2026-02-15T11:47:39.832 [DEBUG] [Thread-203693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:47:39.851 [DEBUG] [Thread-203693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:47:39.851 [INFO] [Thread-203693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] client lang: <none>
2026-02-15T11:47:39.859 [DEBUG] [Thread-203693] [transport.py] [_log()] server lang: <none>
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] kex follows: False
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] Compression: none
2026-02-15T11:47:39.860 [DEBUG] [Thread-203693] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:47:39.919 [DEBUG] [Thread-203693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:47:39.919 [DEBUG] [Thread-203693] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:47:39.920 [DEBUG] [Thread-203693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:47:39.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:47:39.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:47:39.980 [DEBUG] [Thread-203693] [transport.py] [_log()] userauth is OK
2026-02-15T11:47:39.980 [DEBUG] [Thread-203693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:47:39.980 [DEBUG] [Thread-203693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:47:39.980 [DEBUG] [Thread-203693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:47:39.981 [DEBUG] [Thread-203693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:47:40.000 [INFO] [Thread-203693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:47:40.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:47:40.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:47:40.821 [DEBUG] [Thread-203693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:47:40.821 [DEBUG] [Thread-203693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:47:40.870 [DEBUG] [Thread-203693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:47:40.870 [DEBUG] [Thread-203693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:47:40.880 [DEBUG] [Thread-203693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:47:40.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:47:40.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:47:40.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:47:40.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:47:40.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:47:40.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:47:40.916 [DEBUG] [Thread-203693] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:47:45.673 [DEBUG] [Thread-203695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:47:45.836 [DEBUG] [Thread-203696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:00.736 [DEBUG] [Thread-203697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:10.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:48:10.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:48:10.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:48:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 47, 54), 21.46, 23.25, 0.0, 20.01, 18.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:48:12.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:47:54
2026-02-15T11:48:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:48:13.360 [DEBUG] [Thread-203698] [transport.py] [_log()] starting thread (client mode): 0xa2d01600
2026-02-15T11:48:13.360 [DEBUG] [Thread-203698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:48:13.381 [DEBUG] [Thread-203698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:48:13.381 [INFO] [Thread-203698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:48:13.384 [DEBUG] [Thread-203698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:48:13.384 [DEBUG] [Thread-203698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:48:13.384 [DEBUG] [Thread-203698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:48:13.384 [DEBUG] [Thread-203698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:13.384 [DEBUG] [Thread-203698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] client lang: <none>
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] server lang: <none>
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] kex follows: False
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] Compression: none
2026-02-15T11:48:13.385 [DEBUG] [Thread-203698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:48:13.403 [DEBUG] [Thread-203698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:48:13.403 [DEBUG] [Thread-203698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:48:13.404 [DEBUG] [Thread-203698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:48:13.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:48:13.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:48:13.406 [DEBUG] [Thread-203698] [transport.py] [_log()] userauth is OK
2026-02-15T11:48:13.406 [DEBUG] [Thread-203698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:48:13.406 [DEBUG] [Thread-203698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:48:13.407 [DEBUG] [Thread-203698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:48:13.407 [DEBUG] [Thread-203698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:48:13.442 [INFO] [Thread-203698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:48:13.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:48:14.083 [DEBUG] [Thread-203698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:48:14.084 [DEBUG] [Thread-203698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:48:14.084 [DEBUG] [Thread-203698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:48:14.124 [DEBUG] [Thread-203698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:48:14.125 [DEBUG] [Thread-203698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:48:14.128 [DEBUG] [Thread-203698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:48:14.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:48:14.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:48:14.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:48:14.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:48:14.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:48:14.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:48:14.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:48:14.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:48:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:48:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.408085 -999.00  +19.00  14.03     27   -0.10 1 1 1 1 1   888    0 22.52 159.31 ----- 14.0 14.0 171.8 21.4 26.6 -29.3 25.7 -27.4 25.0 -27.5 26.0 -28.7
2026-02-15T11:48:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:48:14.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:48:14.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.408085
2026-02-15T11:48:14.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:48:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:48:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:48:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:48:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:48:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:47:54', tmtdew=21.46, humidity=23.25, cloud=0.0, wind=20.01, temperature=18.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:47:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:48:14.153 [DEBUG] [Thread-203698] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:48:14.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:48:14.242 [DEBUG] [Thread-203701] [transport.py] [_log()] starting thread (client mode): 0xa2d01720
2026-02-15T11:48:14.243 [DEBUG] [Thread-203701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:48:14.259 [DEBUG] [Thread-203701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:48:14.259 [INFO] [Thread-203701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:48:14.270 [DEBUG] [Thread-203701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:48:14.270 [DEBUG] [Thread-203701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:48:14.270 [DEBUG] [Thread-203701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] client lang: <none>
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] server lang: <none>
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] kex follows: False
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] Compression: none
2026-02-15T11:48:14.271 [DEBUG] [Thread-203701] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:48:14.329 [DEBUG] [Thread-203701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:48:14.330 [DEBUG] [Thread-203701] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:48:14.330 [DEBUG] [Thread-203701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:48:14.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:48:14.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:48:14.387 [DEBUG] [Thread-203701] [transport.py] [_log()] userauth is OK
2026-02-15T11:48:14.387 [DEBUG] [Thread-203701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:48:14.387 [DEBUG] [Thread-203701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:48:14.388 [DEBUG] [Thread-203701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:48:14.388 [DEBUG] [Thread-203701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:48:14.408 [INFO] [Thread-203701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:48:14.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:48:14.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:48:15.247 [DEBUG] [Thread-203701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:48:15.247 [DEBUG] [Thread-203701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:48:15.295 [DEBUG] [Thread-203701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:48:15.295 [DEBUG] [Thread-203701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:48:15.304 [DEBUG] [Thread-203701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:48:15.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:48:15.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:48:15.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:48:15.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:48:15.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:48:15.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:48:15.340 [DEBUG] [Thread-203701] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:48:15.774 [DEBUG] [Thread-203703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:18.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:18.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:30.823 [DEBUG] [Thread-203704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:45.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:48:45.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:48:45.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:48:45.860 [DEBUG] [Thread-203705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:45.879 [DEBUG] [Thread-203706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:48:47.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 48, 31), 21.75, 22.89, 0.0, 27.0, 18.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:48:47.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:48:31
2026-02-15T11:48:47.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:48:47.633 [DEBUG] [Thread-203707] [transport.py] [_log()] starting thread (client mode): 0xa5759870
2026-02-15T11:48:47.634 [DEBUG] [Thread-203707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:48:47.655 [DEBUG] [Thread-203707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:48:47.655 [INFO] [Thread-203707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:48:47.667 [DEBUG] [Thread-203707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:48:47.667 [DEBUG] [Thread-203707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:48:47.667 [DEBUG] [Thread-203707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:48:47.668 [DEBUG] [Thread-203707] [transport.py] [_log()] client lang: <none>
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] server lang: <none>
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] kex follows: False
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] Compression: none
2026-02-15T11:48:47.669 [DEBUG] [Thread-203707] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:48:47.687 [DEBUG] [Thread-203707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:48:47.688 [DEBUG] [Thread-203707] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:48:47.689 [DEBUG] [Thread-203707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:48:47.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:48:47.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:48:47.690 [DEBUG] [Thread-203707] [transport.py] [_log()] userauth is OK
2026-02-15T11:48:47.691 [DEBUG] [Thread-203707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:48:47.691 [DEBUG] [Thread-203707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:48:47.691 [DEBUG] [Thread-203707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:48:47.691 [DEBUG] [Thread-203707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:48:47.714 [INFO] [Thread-203707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:48:47.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:48:48.358 [DEBUG] [Thread-203707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:48:48.359 [DEBUG] [Thread-203707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:48:48.359 [DEBUG] [Thread-203707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:48:48.400 [DEBUG] [Thread-203707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:48:48.400 [DEBUG] [Thread-203707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:48:48.403 [DEBUG] [Thread-203707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:48:48.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:48:48.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:48:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:48:48.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:48:48.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:48:48.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:48:48.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:48:48.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:48:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:48:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.408432 -999.00  +19.20  18.74     27   +0.10 1 1 1 1 1   888    0 22.82 160.06 ----- 18.7 18.7 154.6 21.5 26.7 -29.9 25.5 -29.7 25.1 -25.5 26.1 -29.5
2026-02-15T11:48:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:48:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:48:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.408432
2026-02-15T11:48:48.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:48:48.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:48:48.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:48:48.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:48:48.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:48:48.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:48:31', tmtdew=21.75, humidity=22.89, cloud=0.0, wind=27.0, temperature=18.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:48:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:48:48.426 [DEBUG] [Thread-203707] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:48:48.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:48:48.523 [DEBUG] [Thread-203710] [transport.py] [_log()] starting thread (client mode): 0xa2d7a320
2026-02-15T11:48:48.523 [DEBUG] [Thread-203710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:48:48.540 [DEBUG] [Thread-203710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:48:48.540 [INFO] [Thread-203710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:48:48.547 [DEBUG] [Thread-203710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:48:48.547 [DEBUG] [Thread-203710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:48:48.547 [DEBUG] [Thread-203710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] client lang: <none>
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] server lang: <none>
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] kex follows: False
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] Compression: none
2026-02-15T11:48:48.548 [DEBUG] [Thread-203710] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:48:48.608 [DEBUG] [Thread-203710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:48:48.608 [DEBUG] [Thread-203710] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:48:48.609 [DEBUG] [Thread-203710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:48:48.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:48:48.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:48:48.667 [DEBUG] [Thread-203710] [transport.py] [_log()] userauth is OK
2026-02-15T11:48:48.668 [DEBUG] [Thread-203710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:48:48.668 [DEBUG] [Thread-203710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:48:48.668 [DEBUG] [Thread-203710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:48:48.668 [DEBUG] [Thread-203710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:48:48.687 [INFO] [Thread-203710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:48:48.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:48:48.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:48:49.534 [DEBUG] [Thread-203710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:48:49.535 [DEBUG] [Thread-203710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:48:49.582 [DEBUG] [Thread-203710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:48:49.582 [DEBUG] [Thread-203710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:48:49.591 [DEBUG] [Thread-203710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:48:49.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:48:49.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:48:49.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:48:49.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:48:49.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:48:49.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:48:49.632 [DEBUG] [Thread-203710] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:49:00.892 [DEBUG] [Thread-203712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:15.941 [DEBUG] [Thread-203713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:18.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:18.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:19.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:49:19.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:49:19.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:49:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 49, 6), 21.97, 22.57, 0.0, 21.03, 18.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:49:21.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:49:06
2026-02-15T11:49:21.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:49:22.079 [DEBUG] [Thread-203714] [transport.py] [_log()] starting thread (client mode): 0xa2db59f0
2026-02-15T11:49:22.079 [DEBUG] [Thread-203714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:49:22.101 [DEBUG] [Thread-203714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:49:22.101 [INFO] [Thread-203714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:49:22.104 [DEBUG] [Thread-203714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:49:22.104 [DEBUG] [Thread-203714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:49:22.104 [DEBUG] [Thread-203714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] client lang: <none>
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] server lang: <none>
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] kex follows: False
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:49:22.105 [DEBUG] [Thread-203714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:49:22.106 [DEBUG] [Thread-203714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:49:22.106 [DEBUG] [Thread-203714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:49:22.106 [DEBUG] [Thread-203714] [transport.py] [_log()] Compression: none
2026-02-15T11:49:22.106 [DEBUG] [Thread-203714] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:49:22.126 [DEBUG] [Thread-203714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:49:22.127 [DEBUG] [Thread-203714] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:49:22.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:49:22.128 [DEBUG] [Thread-203714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:49:22.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:49:22.130 [DEBUG] [Thread-203714] [transport.py] [_log()] userauth is OK
2026-02-15T11:49:22.131 [DEBUG] [Thread-203714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:49:22.131 [DEBUG] [Thread-203714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:49:22.131 [DEBUG] [Thread-203714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:49:22.131 [DEBUG] [Thread-203714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:49:22.166 [INFO] [Thread-203714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:49:22.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:49:22.827 [DEBUG] [Thread-203714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:49:22.827 [DEBUG] [Thread-203714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:49:22.827 [DEBUG] [Thread-203714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:49:22.869 [DEBUG] [Thread-203714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:49:22.869 [DEBUG] [Thread-203714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:49:22.872 [DEBUG] [Thread-203714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:49:22.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:49:22.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:49:22.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:49:22.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:49:22.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:49:22.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:49:22.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.408779 -999.00  +19.20  18.89     26   -0.30 1 1 1 1 1   888    0 22.49 158.56 ----- 18.9 18.9 133.6 25.1 26.7 -28.4 25.6 -28.4 25.1 -27.0 26.1 -26.9
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.408779
2026-02-15T11:49:22.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:49:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:49:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:49:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:49:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:49:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:49:06', tmtdew=21.97, humidity=22.57, cloud=0.0, wind=21.03, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:48:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:49:22.888 [DEBUG] [Thread-203714] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:49:22.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:49:22.985 [DEBUG] [Thread-203717] [transport.py] [_log()] starting thread (client mode): 0xa2db6f20
2026-02-15T11:49:22.985 [DEBUG] [Thread-203717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:49:23.000 [DEBUG] [Thread-203717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:49:23.000 [INFO] [Thread-203717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:49:23.007 [DEBUG] [Thread-203717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:49:23.007 [DEBUG] [Thread-203717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:49:23.007 [DEBUG] [Thread-203717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] client lang: <none>
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] server lang: <none>
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] kex follows: False
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] Compression: none
2026-02-15T11:49:23.008 [DEBUG] [Thread-203717] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:49:23.065 [DEBUG] [Thread-203717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:49:23.065 [DEBUG] [Thread-203717] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:49:23.066 [DEBUG] [Thread-203717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:49:23.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:49:23.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:49:23.122 [DEBUG] [Thread-203717] [transport.py] [_log()] userauth is OK
2026-02-15T11:49:23.122 [DEBUG] [Thread-203717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:49:23.122 [DEBUG] [Thread-203717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:49:23.122 [DEBUG] [Thread-203717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:49:23.122 [DEBUG] [Thread-203717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:49:23.144 [INFO] [Thread-203717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:49:23.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:49:23.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:49:24.024 [DEBUG] [Thread-203717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:49:24.024 [DEBUG] [Thread-203717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:49:24.072 [DEBUG] [Thread-203717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:49:24.072 [DEBUG] [Thread-203717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:49:24.082 [DEBUG] [Thread-203717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:49:24.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:49:24.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:49:24.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:49:24.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:49:24.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:49:24.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:49:24.119 [DEBUG] [Thread-203717] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:49:30.978 [DEBUG] [Thread-203719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:45.912 [DEBUG] [Thread-203720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:46.030 [DEBUG] [Thread-203721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:49:54.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:49:54.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:49:54.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:49:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 49, 41), 22.87, 21.11, 0.0, 19.41, 19.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:49:55.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:49:41
2026-02-15T11:49:56.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:49:56.507 [DEBUG] [Thread-203722] [transport.py] [_log()] starting thread (client mode): 0xa2d7b2e0
2026-02-15T11:49:56.507 [DEBUG] [Thread-203722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:49:56.527 [DEBUG] [Thread-203722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:49:56.528 [INFO] [Thread-203722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] client lang: <none>
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] server lang: <none>
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] kex follows: False
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] Compression: none
2026-02-15T11:49:56.531 [DEBUG] [Thread-203722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:49:56.547 [DEBUG] [Thread-203722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:49:56.548 [DEBUG] [Thread-203722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:49:56.548 [DEBUG] [Thread-203722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:49:56.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:49:56.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:49:56.592 [DEBUG] [Thread-203722] [transport.py] [_log()] userauth is OK
2026-02-15T11:49:56.593 [DEBUG] [Thread-203722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:49:56.593 [DEBUG] [Thread-203722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:49:56.593 [DEBUG] [Thread-203722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:49:56.593 [DEBUG] [Thread-203722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:49:56.630 [INFO] [Thread-203722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:49:56.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:49:57.270 [DEBUG] [Thread-203722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:49:57.270 [DEBUG] [Thread-203722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:49:57.271 [DEBUG] [Thread-203722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:49:57.312 [DEBUG] [Thread-203722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:49:57.312 [DEBUG] [Thread-203722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:49:57.315 [DEBUG] [Thread-203722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:49:57.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:49:57.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:49:57.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:49:57.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:49:57.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:49:57.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:49:57.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:49:57.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:49:57.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:49:57.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.409126 -999.00  +19.20  14.66     27   +0.00 1 1 1 1 1   888    0 22.72 161.25 ----- 14.7 14.7 145.6 23.2 26.7 -29.2 25.6 -28.8 25.0 -26.8 26.1 -28.2
2026-02-15T11:49:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:49:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:49:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.409126
2026-02-15T11:49:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:49:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:49:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:49:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:49:57.340 [DEBUG] [Thread-203722] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:49:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:49:57.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:49:41', tmtdew=22.87, humidity=21.11, cloud=0.0, wind=19.41, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:49:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:49:57.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:49:57.438 [DEBUG] [Thread-203725] [transport.py] [_log()] starting thread (client mode): 0xa57c0af0
2026-02-15T11:49:57.438 [DEBUG] [Thread-203725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:49:57.452 [DEBUG] [Thread-203725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:49:57.452 [INFO] [Thread-203725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:49:57.460 [DEBUG] [Thread-203725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] client lang: <none>
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] server lang: <none>
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] kex follows: False
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] Compression: none
2026-02-15T11:49:57.461 [DEBUG] [Thread-203725] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:49:57.518 [DEBUG] [Thread-203725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:49:57.518 [DEBUG] [Thread-203725] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:49:57.519 [DEBUG] [Thread-203725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:49:57.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:49:57.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:49:57.575 [DEBUG] [Thread-203725] [transport.py] [_log()] userauth is OK
2026-02-15T11:49:57.575 [DEBUG] [Thread-203725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:49:57.575 [DEBUG] [Thread-203725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:49:57.575 [DEBUG] [Thread-203725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:49:57.575 [DEBUG] [Thread-203725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:49:57.594 [INFO] [Thread-203725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:49:57.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:49:57.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:49:58.398 [DEBUG] [Thread-203725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:49:58.398 [DEBUG] [Thread-203725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:49:58.446 [DEBUG] [Thread-203725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:49:58.447 [DEBUG] [Thread-203725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:49:58.456 [DEBUG] [Thread-203725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:49:58.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:49:58.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:49:58.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:49:58.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:49:58.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:49:58.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:49:58.492 [DEBUG] [Thread-203725] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:50:01.066 [DEBUG] [Thread-203727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:50:16.118 [DEBUG] [Thread-203728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:50:19.020 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:50:19.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:50:28.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:50:28.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:50:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:50:30.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 50, 16), 22.67, 21.26, 0.0, 17.43, 19.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:50:30.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:50:16
2026-02-15T11:50:30.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:50:30.828 [DEBUG] [Thread-203729] [transport.py] [_log()] starting thread (client mode): 0xa2db7040
2026-02-15T11:50:30.828 [DEBUG] [Thread-203729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:50:30.847 [DEBUG] [Thread-203729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:50:30.847 [INFO] [Thread-203729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:50:30.850 [DEBUG] [Thread-203729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:50:30.850 [DEBUG] [Thread-203729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:50:30.850 [DEBUG] [Thread-203729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:50:30.850 [DEBUG] [Thread-203729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:50:30.850 [DEBUG] [Thread-203729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:50:30.850 [DEBUG] [Thread-203729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] client lang: <none>
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] server lang: <none>
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] kex follows: False
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] Compression: none
2026-02-15T11:50:30.851 [DEBUG] [Thread-203729] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:50:30.871 [DEBUG] [Thread-203729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:50:30.872 [DEBUG] [Thread-203729] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:50:30.873 [DEBUG] [Thread-203729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:50:30.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:50:30.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:50:30.875 [DEBUG] [Thread-203729] [transport.py] [_log()] userauth is OK
2026-02-15T11:50:30.875 [DEBUG] [Thread-203729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:50:30.875 [DEBUG] [Thread-203729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:50:30.875 [DEBUG] [Thread-203729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:50:30.875 [DEBUG] [Thread-203729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:50:30.896 [INFO] [Thread-203729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:50:30.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:50:31.153 [DEBUG] [Thread-203731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:50:31.538 [DEBUG] [Thread-203729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:50:31.538 [DEBUG] [Thread-203729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:50:31.539 [DEBUG] [Thread-203729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:50:31.580 [DEBUG] [Thread-203729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:50:31.580 [DEBUG] [Thread-203729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:50:31.583 [DEBUG] [Thread-203729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:50:31.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:50:31.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:50:31.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:50:31.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:50:31.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:50:31.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:50:31.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:50:31.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:50:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:50:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.409820 -999.00  +18.80  18.99     26   -0.60 1 1 1 1 1   888    0 22.50 155.04 ----- 19.0 19.0 142.2 22.6 26.6 -29.1 25.7 -28.3 25.1 -27.8 25.9 -28.3
2026-02-15T11:50:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:50:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:50:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.409820
2026-02-15T11:50:31.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:50:31.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:50:31.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:50:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:50:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:50:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:50:16', tmtdew=22.67, humidity=21.26, cloud=0.0, wind=17.43, temperature=19.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:50:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:50:31.611 [DEBUG] [Thread-203729] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:50:31.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:50:31.696 [DEBUG] [Thread-203733] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4a0
2026-02-15T11:50:31.696 [DEBUG] [Thread-203733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:50:31.711 [DEBUG] [Thread-203733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:50:31.711 [INFO] [Thread-203733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:50:31.718 [DEBUG] [Thread-203733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] client lang: <none>
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] server lang: <none>
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] kex follows: False
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:50:31.719 [DEBUG] [Thread-203733] [transport.py] [_log()] Compression: none
2026-02-15T11:50:31.720 [DEBUG] [Thread-203733] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:50:31.779 [DEBUG] [Thread-203733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:50:31.780 [DEBUG] [Thread-203733] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:50:31.780 [DEBUG] [Thread-203733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:50:31.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:50:31.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:50:31.838 [DEBUG] [Thread-203733] [transport.py] [_log()] userauth is OK
2026-02-15T11:50:31.839 [DEBUG] [Thread-203733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:50:31.839 [DEBUG] [Thread-203733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:50:31.839 [DEBUG] [Thread-203733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:50:31.839 [DEBUG] [Thread-203733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:50:31.858 [INFO] [Thread-203733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:50:31.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:50:31.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:50:32.674 [DEBUG] [Thread-203733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:50:32.674 [DEBUG] [Thread-203733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:50:32.722 [DEBUG] [Thread-203733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:50:32.722 [DEBUG] [Thread-203733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:50:32.730 [DEBUG] [Thread-203733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:50:32.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:50:32.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:50:32.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:50:32.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:50:32.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:50:32.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:50:32.762 [DEBUG] [Thread-203733] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:50:45.963 [DEBUG] [Thread-203735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:50:46.193 [DEBUG] [Thread-203736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:01.243 [DEBUG] [Thread-203737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:02.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:51:02.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:51:02.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:51:04.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 50, 52), 22.95, 20.76, 0.0, 19.37, 19.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:51:04.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:50:52
2026-02-15T11:51:05.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:51:05.238 [DEBUG] [Thread-203738] [transport.py] [_log()] starting thread (client mode): 0xa2d11b10
2026-02-15T11:51:05.238 [DEBUG] [Thread-203738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:51:05.258 [DEBUG] [Thread-203738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:51:05.258 [INFO] [Thread-203738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:51:05.261 [DEBUG] [Thread-203738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:51:05.267 [DEBUG] [Thread-203738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:51:05.267 [DEBUG] [Thread-203738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:51:05.267 [DEBUG] [Thread-203738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] client lang: <none>
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] server lang: <none>
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] kex follows: False
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] Compression: none
2026-02-15T11:51:05.268 [DEBUG] [Thread-203738] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:51:05.288 [DEBUG] [Thread-203738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:51:05.289 [DEBUG] [Thread-203738] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:51:05.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:51:05.290 [DEBUG] [Thread-203738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:51:05.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:51:05.292 [DEBUG] [Thread-203738] [transport.py] [_log()] userauth is OK
2026-02-15T11:51:05.292 [DEBUG] [Thread-203738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:51:05.292 [DEBUG] [Thread-203738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:51:05.292 [DEBUG] [Thread-203738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:51:05.292 [DEBUG] [Thread-203738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:51:05.318 [INFO] [Thread-203738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:51:05.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:51:05.969 [DEBUG] [Thread-203738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:51:05.969 [DEBUG] [Thread-203738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:51:05.970 [DEBUG] [Thread-203738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:51:06.010 [DEBUG] [Thread-203738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:51:06.010 [DEBUG] [Thread-203738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:51:06.014 [DEBUG] [Thread-203738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:51:06.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:51:06.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:51:06.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:51:06.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:51:06.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:51:06.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:51:06.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:51:06.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:51:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:51:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.410168 -999.00  +18.80  14.08     27   -0.50 1 1 1 1 1   888    0 22.74 151.94 ----- 14.1 14.1 140.0 22.1 26.6 -29.0 25.7 -28.3 25.1 -27.3 25.9 -28.3
2026-02-15T11:51:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:51:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:51:06.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.410168
2026-02-15T11:51:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:51:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:51:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:51:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:51:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:51:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:50:52', tmtdew=22.95, humidity=20.76, cloud=0.0, wind=19.37, temperature=19.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:50:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:51:06.040 [DEBUG] [Thread-203738] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:51:06.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:51:06.136 [DEBUG] [Thread-203741] [transport.py] [_log()] starting thread (client mode): 0xa2db6470
2026-02-15T11:51:06.136 [DEBUG] [Thread-203741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:51:06.151 [DEBUG] [Thread-203741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:51:06.151 [INFO] [Thread-203741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:51:06.158 [DEBUG] [Thread-203741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] client lang: <none>
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] server lang: <none>
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] kex follows: False
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:51:06.159 [DEBUG] [Thread-203741] [transport.py] [_log()] Compression: none
2026-02-15T11:51:06.160 [DEBUG] [Thread-203741] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:51:06.222 [DEBUG] [Thread-203741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:51:06.223 [DEBUG] [Thread-203741] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:51:06.223 [DEBUG] [Thread-203741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:51:06.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:51:06.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:51:06.279 [DEBUG] [Thread-203741] [transport.py] [_log()] userauth is OK
2026-02-15T11:51:06.279 [DEBUG] [Thread-203741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:51:06.279 [DEBUG] [Thread-203741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:51:06.279 [DEBUG] [Thread-203741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:51:06.279 [DEBUG] [Thread-203741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:51:06.298 [INFO] [Thread-203741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:51:06.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:51:06.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:51:07.156 [DEBUG] [Thread-203741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:51:07.156 [DEBUG] [Thread-203741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:51:07.202 [DEBUG] [Thread-203741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:51:07.202 [DEBUG] [Thread-203741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:51:07.211 [DEBUG] [Thread-203741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:51:07.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:51:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:51:07.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:51:07.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:51:07.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:51:07.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:51:07.246 [DEBUG] [Thread-203741] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:51:16.281 [DEBUG] [Thread-203743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:19.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:19.162 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:31.330 [DEBUG] [Thread-203744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:37.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:51:37.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:51:37.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:51:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 51, 28), 22.7, 21.12, 0.0, 18.67, 19.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:51:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:51:28
2026-02-15T11:51:39.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:51:39.809 [DEBUG] [Thread-203745] [transport.py] [_log()] starting thread (client mode): 0xa2d13580
2026-02-15T11:51:39.809 [DEBUG] [Thread-203745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:51:39.830 [DEBUG] [Thread-203745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:51:39.831 [INFO] [Thread-203745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] client lang: <none>
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] server lang: <none>
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] kex follows: False
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] Compression: none
2026-02-15T11:51:39.834 [DEBUG] [Thread-203745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:51:39.852 [DEBUG] [Thread-203745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:51:39.852 [DEBUG] [Thread-203745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:51:39.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:51:39.853 [DEBUG] [Thread-203745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:51:39.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:51:39.855 [DEBUG] [Thread-203745] [transport.py] [_log()] userauth is OK
2026-02-15T11:51:39.855 [DEBUG] [Thread-203745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:51:39.855 [DEBUG] [Thread-203745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:51:39.855 [DEBUG] [Thread-203745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:51:39.855 [DEBUG] [Thread-203745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:51:39.865 [INFO] [Thread-203745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:51:39.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:51:40.487 [DEBUG] [Thread-203745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:51:40.487 [DEBUG] [Thread-203745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:51:40.488 [DEBUG] [Thread-203745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:51:40.529 [DEBUG] [Thread-203745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:51:40.529 [DEBUG] [Thread-203745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:51:40.533 [DEBUG] [Thread-203745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:51:40.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:51:40.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:51:40.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:51:40.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:51:40.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:51:40.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:51:40.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:51:40.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:51:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:51:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.410515 -999.00  +18.60   8.55     27   -0.40 1 1 1 1 1   888    0 22.83 162.85 ----- 8.6 8.6 163.2 20.2 26.7 -28.7 25.7 -28.3 25.1 -28.1 26.0 -28.1
2026-02-15T11:51:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:51:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:51:40.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.410515
2026-02-15T11:51:40.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:51:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:51:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:51:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:51:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:51:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:51:28', tmtdew=22.7, humidity=21.12, cloud=0.0, wind=18.67, temperature=19.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:51:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:51:40.559 [DEBUG] [Thread-203745] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:51:40.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:51:40.653 [DEBUG] [Thread-203748] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-15T11:51:40.653 [DEBUG] [Thread-203748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:51:40.667 [DEBUG] [Thread-203748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:51:40.667 [INFO] [Thread-203748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:51:40.675 [DEBUG] [Thread-203748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:51:40.675 [DEBUG] [Thread-203748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:51:40.675 [DEBUG] [Thread-203748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:51:40.675 [DEBUG] [Thread-203748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] client lang: <none>
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] server lang: <none>
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] kex follows: False
2026-02-15T11:51:40.676 [DEBUG] [Thread-203748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:51:40.677 [DEBUG] [Thread-203748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:51:40.677 [DEBUG] [Thread-203748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:51:40.677 [DEBUG] [Thread-203748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:51:40.677 [DEBUG] [Thread-203748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:51:40.677 [DEBUG] [Thread-203748] [transport.py] [_log()] Compression: none
2026-02-15T11:51:40.677 [DEBUG] [Thread-203748] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:51:40.734 [DEBUG] [Thread-203748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:51:40.735 [DEBUG] [Thread-203748] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:51:40.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:51:40.736 [DEBUG] [Thread-203748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:51:40.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:51:40.791 [DEBUG] [Thread-203748] [transport.py] [_log()] userauth is OK
2026-02-15T11:51:40.791 [DEBUG] [Thread-203748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:51:40.791 [DEBUG] [Thread-203748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:51:40.791 [DEBUG] [Thread-203748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:51:40.791 [DEBUG] [Thread-203748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:51:40.810 [INFO] [Thread-203748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:51:40.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:51:40.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:51:41.614 [DEBUG] [Thread-203748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:51:41.614 [DEBUG] [Thread-203748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:51:41.662 [DEBUG] [Thread-203748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:51:41.663 [DEBUG] [Thread-203748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:51:41.672 [DEBUG] [Thread-203748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:51:41.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:51:41.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:51:41.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:51:41.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:51:41.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:51:41.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:51:41.708 [DEBUG] [Thread-203748] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:51:45.993 [DEBUG] [Thread-203750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:51:46.367 [DEBUG] [Thread-203751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:01.416 [DEBUG] [Thread-203752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:11.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:52:11.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:52:11.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:52:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 52, 3), 23.09, 20.61, 0.0, 22.04, 19.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:52:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:52:03
2026-02-15T11:52:14.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:52:14.207 [DEBUG] [Thread-203753] [transport.py] [_log()] starting thread (client mode): 0xa2d11300
2026-02-15T11:52:14.207 [DEBUG] [Thread-203753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:52:14.227 [DEBUG] [Thread-203753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:52:14.227 [INFO] [Thread-203753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:52:14.230 [DEBUG] [Thread-203753] [transport.py] [_log()] client lang: <none>
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] server lang: <none>
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] kex follows: False
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] Compression: none
2026-02-15T11:52:14.231 [DEBUG] [Thread-203753] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:52:14.247 [DEBUG] [Thread-203753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:52:14.248 [DEBUG] [Thread-203753] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:52:14.249 [DEBUG] [Thread-203753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:52:14.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:52:14.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:52:14.293 [DEBUG] [Thread-203753] [transport.py] [_log()] userauth is OK
2026-02-15T11:52:14.293 [DEBUG] [Thread-203753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:52:14.293 [DEBUG] [Thread-203753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:52:14.293 [DEBUG] [Thread-203753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:52:14.294 [DEBUG] [Thread-203753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:52:14.326 [INFO] [Thread-203753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:52:14.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:52:14.879 [DEBUG] [Thread-203753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:52:14.879 [DEBUG] [Thread-203753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:52:14.879 [DEBUG] [Thread-203753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:52:14.919 [DEBUG] [Thread-203753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:52:14.919 [DEBUG] [Thread-203753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:52:14.923 [DEBUG] [Thread-203753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:52:14.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:52:14.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:52:14.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:52:14.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:52:14.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:52:14.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:52:14.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:52:14.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:52:14.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:52:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.410862 -999.00  +18.90  16.37     27   -0.00 1 1 1 1 1   888    0 22.70 162.24 ----- 16.4 16.4 128.5 21.7 26.7 -27.7 25.8 -27.3 25.1 -26.8 26.1 -27.9
2026-02-15T11:52:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:52:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:52:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.410862
2026-02-15T11:52:14.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:52:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:52:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:52:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:52:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:52:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:52:03', tmtdew=23.09, humidity=20.61, cloud=0.0, wind=22.04, temperature=19.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:51:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:52:14.947 [DEBUG] [Thread-203753] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:52:15.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:52:15.045 [DEBUG] [Thread-203756] [transport.py] [_log()] starting thread (client mode): 0xa2d13a00
2026-02-15T11:52:15.045 [DEBUG] [Thread-203756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:52:15.061 [DEBUG] [Thread-203756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:52:15.061 [INFO] [Thread-203756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:52:15.074 [DEBUG] [Thread-203756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:52:15.074 [DEBUG] [Thread-203756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:52:15.074 [DEBUG] [Thread-203756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] client lang: <none>
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] server lang: <none>
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] kex follows: False
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:52:15.075 [DEBUG] [Thread-203756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:52:15.076 [DEBUG] [Thread-203756] [transport.py] [_log()] Compression: none
2026-02-15T11:52:15.076 [DEBUG] [Thread-203756] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:52:15.137 [DEBUG] [Thread-203756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:52:15.137 [DEBUG] [Thread-203756] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:52:15.138 [DEBUG] [Thread-203756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:52:15.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:52:15.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:52:15.206 [DEBUG] [Thread-203756] [transport.py] [_log()] userauth is OK
2026-02-15T11:52:15.206 [DEBUG] [Thread-203756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:52:15.207 [DEBUG] [Thread-203756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:52:15.207 [DEBUG] [Thread-203756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:52:15.207 [DEBUG] [Thread-203756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:52:15.232 [INFO] [Thread-203756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:52:15.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:52:15.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:52:16.067 [DEBUG] [Thread-203756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:52:16.068 [DEBUG] [Thread-203756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:52:16.123 [DEBUG] [Thread-203756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:52:16.123 [DEBUG] [Thread-203756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:52:16.140 [DEBUG] [Thread-203756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:52:16.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:52:16.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:52:16.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:52:16.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:52:16.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:52:16.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:52:16.205 [DEBUG] [Thread-203756] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:52:16.452 [DEBUG] [Thread-203758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:19.305 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:19.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:31.503 [DEBUG] [Thread-203759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:46.033 [DEBUG] [Thread-203760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:46.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:52:46.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:52:46.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:52:46.543 [DEBUG] [Thread-203761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:52:48.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 52, 39), 24.03, 19.45, 0.0, 26.82, 20.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:52:48.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:52:39
2026-02-15T11:52:48.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:52:48.883 [DEBUG] [Thread-203762] [transport.py] [_log()] starting thread (client mode): 0xa5759330
2026-02-15T11:52:48.883 [DEBUG] [Thread-203762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:52:48.902 [DEBUG] [Thread-203762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:52:48.902 [INFO] [Thread-203762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] client lang: <none>
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] server lang: <none>
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] kex follows: False
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:52:48.905 [DEBUG] [Thread-203762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:52:48.906 [DEBUG] [Thread-203762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:52:48.906 [DEBUG] [Thread-203762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:52:48.906 [DEBUG] [Thread-203762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:52:48.906 [DEBUG] [Thread-203762] [transport.py] [_log()] Compression: none
2026-02-15T11:52:48.906 [DEBUG] [Thread-203762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:52:48.924 [DEBUG] [Thread-203762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:52:48.925 [DEBUG] [Thread-203762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:52:48.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:52:48.927 [DEBUG] [Thread-203762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:52:48.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:52:48.929 [DEBUG] [Thread-203762] [transport.py] [_log()] userauth is OK
2026-02-15T11:52:48.929 [DEBUG] [Thread-203762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:52:48.929 [DEBUG] [Thread-203762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:52:48.929 [DEBUG] [Thread-203762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:52:48.929 [DEBUG] [Thread-203762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:52:48.949 [INFO] [Thread-203762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:52:48.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:52:49.688 [DEBUG] [Thread-203762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:52:49.688 [DEBUG] [Thread-203762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:52:49.689 [DEBUG] [Thread-203762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:52:49.729 [DEBUG] [Thread-203762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:52:49.730 [DEBUG] [Thread-203762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:52:49.733 [DEBUG] [Thread-203762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:52:49.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:52:49.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:52:49.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:52:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:52:49.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:52:49.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:52:49.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:52:49.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:52:49.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.411209 -999.00  +19.30  17.32     28   +0.30 1 1 1 1 1   888    0 22.82 170.15 ----- 17.3 17.3 128.6 23.8 26.8 -28.4 25.8 -27.6 25.2 -26.7 26.1 -27.4
2026-02-15T11:52:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:52:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:52:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.411209
2026-02-15T11:52:49.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:52:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:52:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:52:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:52:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:52:49.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:52:39', tmtdew=24.03, humidity=19.45, cloud=0.0, wind=26.82, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:52:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:52:49.759 [DEBUG] [Thread-203762] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:52:49.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:52:49.857 [DEBUG] [Thread-203765] [transport.py] [_log()] starting thread (client mode): 0xa2d01ff0
2026-02-15T11:52:49.857 [DEBUG] [Thread-203765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:52:49.871 [DEBUG] [Thread-203765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:52:49.872 [INFO] [Thread-203765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:52:49.879 [DEBUG] [Thread-203765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:52:49.879 [DEBUG] [Thread-203765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] client lang: <none>
2026-02-15T11:52:49.880 [DEBUG] [Thread-203765] [transport.py] [_log()] server lang: <none>
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] kex follows: False
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:52:49.881 [DEBUG] [Thread-203765] [transport.py] [_log()] Compression: none
2026-02-15T11:52:49.882 [DEBUG] [Thread-203765] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:52:49.940 [DEBUG] [Thread-203765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:52:49.941 [DEBUG] [Thread-203765] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:52:49.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:52:49.942 [DEBUG] [Thread-203765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:52:49.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:52:49.999 [DEBUG] [Thread-203765] [transport.py] [_log()] userauth is OK
2026-02-15T11:52:49.999 [DEBUG] [Thread-203765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:52:49.999 [DEBUG] [Thread-203765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:52:49.999 [DEBUG] [Thread-203765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:52:49.999 [DEBUG] [Thread-203765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:52:50.015 [INFO] [Thread-203765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:52:50.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:52:50.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:52:50.853 [DEBUG] [Thread-203765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:52:50.853 [DEBUG] [Thread-203765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:52:50.901 [DEBUG] [Thread-203765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:52:50.902 [DEBUG] [Thread-203765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:52:50.911 [DEBUG] [Thread-203765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:52:50.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:52:50.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:52:50.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:52:50.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:52:50.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:52:50.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:52:50.946 [DEBUG] [Thread-203765] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:53:01.577 [DEBUG] [Thread-203767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:16.615 [DEBUG] [Thread-203768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:19.446 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:19.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:20.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:53:20.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:53:20.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:53:22.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 53, 14), 22.82, 21.28, 0.0, 13.66, 19.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:53:22.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:53:14
2026-02-15T11:53:23.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:53:23.347 [DEBUG] [Thread-203769] [transport.py] [_log()] starting thread (client mode): 0xa2db4a30
2026-02-15T11:53:23.347 [DEBUG] [Thread-203769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:53:23.367 [DEBUG] [Thread-203769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:53:23.367 [INFO] [Thread-203769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:53:23.370 [DEBUG] [Thread-203769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:23.371 [DEBUG] [Thread-203769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] client lang: <none>
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] server lang: <none>
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] kex follows: False
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] Compression: none
2026-02-15T11:53:23.372 [DEBUG] [Thread-203769] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:53:23.390 [DEBUG] [Thread-203769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:53:23.391 [DEBUG] [Thread-203769] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:53:23.391 [DEBUG] [Thread-203769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:53:23.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:53:23.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:53:23.432 [DEBUG] [Thread-203769] [transport.py] [_log()] userauth is OK
2026-02-15T11:53:23.432 [DEBUG] [Thread-203769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:53:23.433 [DEBUG] [Thread-203769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:53:23.433 [DEBUG] [Thread-203769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:53:23.433 [DEBUG] [Thread-203769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:53:23.452 [INFO] [Thread-203769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:53:23.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:53:24.094 [DEBUG] [Thread-203769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:53:24.095 [DEBUG] [Thread-203769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:53:24.095 [DEBUG] [Thread-203769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:53:24.135 [DEBUG] [Thread-203769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:53:24.135 [DEBUG] [Thread-203769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:53:24.138 [DEBUG] [Thread-203769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:53:24.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:53:24.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:53:24.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:53:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:53:24.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:53:24.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:53:24.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:53:24.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:53:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:53:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.411557 -999.00  +19.50  28.03     26   -0.00 1 1 1 1 1   888    0 23.31 177.59 ----- 28.0 28.0 133.4 32.1 26.8 -28.5 25.9 -27.2 25.3 -26.5 26.2 -27.8
2026-02-15T11:53:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:53:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:53:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.411557
2026-02-15T11:53:24.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:53:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:53:24.164 [DEBUG] [Thread-203769] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:53:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:53:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:53:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:53:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:53:14', tmtdew=22.82, humidity=21.28, cloud=0.0, wind=13.66, temperature=19.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:52:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:53:24.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:53:24.266 [DEBUG] [Thread-203772] [transport.py] [_log()] starting thread (client mode): 0xa57c3fd0
2026-02-15T11:53:24.266 [DEBUG] [Thread-203772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:53:24.288 [DEBUG] [Thread-203772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:53:24.288 [INFO] [Thread-203772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] client lang: <none>
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] server lang: <none>
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] kex follows: False
2026-02-15T11:53:24.305 [DEBUG] [Thread-203772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:53:24.306 [DEBUG] [Thread-203772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:53:24.306 [DEBUG] [Thread-203772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:53:24.306 [DEBUG] [Thread-203772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:53:24.306 [DEBUG] [Thread-203772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:53:24.306 [DEBUG] [Thread-203772] [transport.py] [_log()] Compression: none
2026-02-15T11:53:24.306 [DEBUG] [Thread-203772] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:53:24.371 [DEBUG] [Thread-203772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:53:24.371 [DEBUG] [Thread-203772] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:53:24.372 [DEBUG] [Thread-203772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:53:24.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:53:24.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:53:24.445 [DEBUG] [Thread-203772] [transport.py] [_log()] userauth is OK
2026-02-15T11:53:24.445 [DEBUG] [Thread-203772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:53:24.445 [DEBUG] [Thread-203772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:53:24.445 [DEBUG] [Thread-203772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:53:24.445 [DEBUG] [Thread-203772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:53:24.471 [INFO] [Thread-203772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:53:24.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:53:24.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:53:25.378 [DEBUG] [Thread-203772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:53:25.378 [DEBUG] [Thread-203772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:53:25.426 [DEBUG] [Thread-203772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:53:25.426 [DEBUG] [Thread-203772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:53:25.438 [DEBUG] [Thread-203772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:53:25.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:53:25.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:53:25.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:53:25.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:53:25.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:53:25.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:53:25.473 [DEBUG] [Thread-203772] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:53:31.653 [DEBUG] [Thread-203774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:46.061 [DEBUG] [Thread-203775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:46.704 [DEBUG] [Thread-203776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:53:55.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:53:55.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:53:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:53:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 53, 49), 23.5, 20.12, 0.0, 19.41, 19.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:53:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:53:49
2026-02-15T11:53:57.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:53:57.916 [DEBUG] [Thread-203777] [transport.py] [_log()] starting thread (client mode): 0xa2d11c60
2026-02-15T11:53:57.916 [DEBUG] [Thread-203777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:53:57.936 [DEBUG] [Thread-203777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:53:57.936 [INFO] [Thread-203777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:53:57.939 [DEBUG] [Thread-203777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] client lang: <none>
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] server lang: <none>
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] kex follows: False
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] Compression: none
2026-02-15T11:53:57.940 [DEBUG] [Thread-203777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:53:57.957 [DEBUG] [Thread-203777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:53:57.957 [DEBUG] [Thread-203777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:53:57.958 [DEBUG] [Thread-203777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:53:57.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:53:57.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:53:57.960 [DEBUG] [Thread-203777] [transport.py] [_log()] userauth is OK
2026-02-15T11:53:57.960 [DEBUG] [Thread-203777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:53:57.960 [DEBUG] [Thread-203777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:53:57.960 [DEBUG] [Thread-203777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:53:57.960 [DEBUG] [Thread-203777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:53:57.985 [INFO] [Thread-203777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:53:57.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:53:58.605 [DEBUG] [Thread-203777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:53:58.605 [DEBUG] [Thread-203777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:53:58.605 [DEBUG] [Thread-203777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:53:58.645 [DEBUG] [Thread-203777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:53:58.646 [DEBUG] [Thread-203777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:53:58.649 [DEBUG] [Thread-203777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:53:58.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:53:58.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:53:58.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:53:58.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:53:58.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:53:58.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:53:58.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:53:58.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:53:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:53:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.411904 -999.00  +19.80  18.96     24   -0.80 1 1 1 1 1   888    0 23.89 194.04 ----- 19.0 19.0 110.0 24.5 26.5 -31.0 25.9 -28.0 25.4 -26.7 26.2 -27.8
2026-02-15T11:53:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:53:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:53:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.411904
2026-02-15T11:53:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:53:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:53:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:53:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:53:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:53:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:53:49', tmtdew=23.5, humidity=20.12, cloud=0.0, wind=19.41, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:53:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:53:58.679 [DEBUG] [Thread-203777] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:53:58.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:53:58.775 [DEBUG] [Thread-203780] [transport.py] [_log()] starting thread (client mode): 0xa2dc3af0
2026-02-15T11:53:58.776 [DEBUG] [Thread-203780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:53:58.792 [DEBUG] [Thread-203780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:53:58.792 [INFO] [Thread-203780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:53:58.799 [DEBUG] [Thread-203780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] client lang: <none>
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] server lang: <none>
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] kex follows: False
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:53:58.800 [DEBUG] [Thread-203780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:53:58.801 [DEBUG] [Thread-203780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:53:58.801 [DEBUG] [Thread-203780] [transport.py] [_log()] Compression: none
2026-02-15T11:53:58.801 [DEBUG] [Thread-203780] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:53:58.860 [DEBUG] [Thread-203780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:53:58.861 [DEBUG] [Thread-203780] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:53:58.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:53:58.862 [DEBUG] [Thread-203780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:53:58.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:53:58.916 [DEBUG] [Thread-203780] [transport.py] [_log()] userauth is OK
2026-02-15T11:53:58.916 [DEBUG] [Thread-203780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:53:58.917 [DEBUG] [Thread-203780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:53:58.917 [DEBUG] [Thread-203780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:53:58.917 [DEBUG] [Thread-203780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:53:58.936 [INFO] [Thread-203780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:53:58.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:53:58.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:53:59.827 [DEBUG] [Thread-203780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:53:59.827 [DEBUG] [Thread-203780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:53:59.875 [DEBUG] [Thread-203780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:53:59.876 [DEBUG] [Thread-203780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:53:59.885 [DEBUG] [Thread-203780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:53:59.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:53:59.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:53:59.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:53:59.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:53:59.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:53:59.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:53:59.925 [DEBUG] [Thread-203780] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:54:01.746 [DEBUG] [Thread-203782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:54:16.803 [DEBUG] [Thread-203783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:54:19.587 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:54:19.588 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:54:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:54:29.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:54:29.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:54:31.842 [DEBUG] [Thread-203784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:54:31.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 53, 49), 23.5, 20.12, 0.0, 19.41, 19.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:54:31.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:53:49
2026-02-15T11:54:32.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:54:32.495 [DEBUG] [Thread-203785] [transport.py] [_log()] starting thread (client mode): 0xa5759780
2026-02-15T11:54:32.495 [DEBUG] [Thread-203785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:54:32.514 [DEBUG] [Thread-203785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:54:32.515 [INFO] [Thread-203785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] client lang: <none>
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] server lang: <none>
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] kex follows: False
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:54:32.518 [DEBUG] [Thread-203785] [transport.py] [_log()] Compression: none
2026-02-15T11:54:32.519 [DEBUG] [Thread-203785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:54:32.537 [DEBUG] [Thread-203785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:54:32.538 [DEBUG] [Thread-203785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:54:32.538 [DEBUG] [Thread-203785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:54:32.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:54:32.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:54:32.540 [DEBUG] [Thread-203785] [transport.py] [_log()] userauth is OK
2026-02-15T11:54:32.540 [DEBUG] [Thread-203785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:54:32.541 [DEBUG] [Thread-203785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:54:32.541 [DEBUG] [Thread-203785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:54:32.541 [DEBUG] [Thread-203785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:54:32.567 [INFO] [Thread-203785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:54:32.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:54:33.212 [DEBUG] [Thread-203785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:54:33.212 [DEBUG] [Thread-203785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:54:33.213 [DEBUG] [Thread-203785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:54:33.253 [DEBUG] [Thread-203785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:54:33.253 [DEBUG] [Thread-203785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:54:33.256 [DEBUG] [Thread-203785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:54:33.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:54:33.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:54:33.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:54:33.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:54:33.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:54:33.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:54:33.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:54:33.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:54:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:54:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.412598 -999.00  +19.50  16.91     26   -0.00 1 1 1 1 1   888    0 24.67 200.87 ----- 16.9 16.9 127.2 23.1 26.9 -27.5 26.0 -27.6 25.5 -26.2 26.4 -27.7
2026-02-15T11:54:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:54:33.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:54:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.412598
2026-02-15T11:54:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:54:33.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:54:33.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:54:33.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:54:33.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:54:33.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:53:49', tmtdew=23.5, humidity=20.12, cloud=0.0, wind=19.41, temperature=19.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:54:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:54:33.279 [DEBUG] [Thread-203785] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:54:33.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:54:33.385 [DEBUG] [Thread-203788] [transport.py] [_log()] starting thread (client mode): 0xa57c1ba0
2026-02-15T11:54:33.385 [DEBUG] [Thread-203788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:54:33.399 [DEBUG] [Thread-203788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:54:33.399 [INFO] [Thread-203788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] client lang: <none>
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] server lang: <none>
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] kex follows: False
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:54:33.407 [DEBUG] [Thread-203788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:54:33.408 [DEBUG] [Thread-203788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:54:33.408 [DEBUG] [Thread-203788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:54:33.408 [DEBUG] [Thread-203788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:54:33.408 [DEBUG] [Thread-203788] [transport.py] [_log()] Compression: none
2026-02-15T11:54:33.408 [DEBUG] [Thread-203788] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:54:33.464 [DEBUG] [Thread-203788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:54:33.465 [DEBUG] [Thread-203788] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:54:33.465 [DEBUG] [Thread-203788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:54:33.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:54:33.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:54:33.519 [DEBUG] [Thread-203788] [transport.py] [_log()] userauth is OK
2026-02-15T11:54:33.520 [DEBUG] [Thread-203788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:54:33.520 [DEBUG] [Thread-203788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:54:33.520 [DEBUG] [Thread-203788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:54:33.520 [DEBUG] [Thread-203788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:54:33.536 [INFO] [Thread-203788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:54:33.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:54:33.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:54:34.362 [DEBUG] [Thread-203788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:54:34.363 [DEBUG] [Thread-203788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:54:34.411 [DEBUG] [Thread-203788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:54:34.411 [DEBUG] [Thread-203788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:54:34.420 [DEBUG] [Thread-203788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:54:34.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:54:34.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:54:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:54:34.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:54:34.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:54:34.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:54:34.457 [DEBUG] [Thread-203788] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:54:46.095 [DEBUG] [Thread-203790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:54:46.883 [DEBUG] [Thread-203791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:01.935 [DEBUG] [Thread-203792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:04.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:55:04.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:55:04.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:55:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 54, 24), 23.86, 19.63, 0.0, 21.49, 19.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:55:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:54:24
2026-02-15T11:55:06.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:55:06.888 [DEBUG] [Thread-203793] [transport.py] [_log()] starting thread (client mode): 0xa2dc12a0
2026-02-15T11:55:06.888 [DEBUG] [Thread-203793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:55:06.906 [DEBUG] [Thread-203793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:55:06.906 [INFO] [Thread-203793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] client lang: <none>
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] server lang: <none>
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] kex follows: False
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:55:06.908 [DEBUG] [Thread-203793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:55:06.909 [DEBUG] [Thread-203793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:55:06.909 [DEBUG] [Thread-203793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:55:06.909 [DEBUG] [Thread-203793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:55:06.909 [DEBUG] [Thread-203793] [transport.py] [_log()] Compression: none
2026-02-15T11:55:06.909 [DEBUG] [Thread-203793] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:55:06.917 [DEBUG] [Thread-203793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:55:06.917 [DEBUG] [Thread-203793] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:55:06.917 [DEBUG] [Thread-203793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:55:06.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:55:06.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:55:06.919 [DEBUG] [Thread-203793] [transport.py] [_log()] userauth is OK
2026-02-15T11:55:06.919 [DEBUG] [Thread-203793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:55:06.919 [DEBUG] [Thread-203793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:55:06.919 [DEBUG] [Thread-203793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:55:06.919 [DEBUG] [Thread-203793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:55:06.935 [INFO] [Thread-203793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:55:06.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:55:11.449 [DEBUG] [Thread-203793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:55:11.449 [DEBUG] [Thread-203793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:55:11.450 [DEBUG] [Thread-203793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:55:11.490 [DEBUG] [Thread-203793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:55:11.490 [DEBUG] [Thread-203793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:55:11.493 [DEBUG] [Thread-203793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:55:11.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:55:11.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:55:11.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:55:11.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:55:11.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:55:11.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:55:11.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:55:11.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:55:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:55:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.412945 -999.00  +19.80  18.91     27   +0.30 1 1 1 1 1   888    0 23.72 189.30 ----- 18.9 18.9 117.0 28.7 26.9 -29.2 26.1 -29.2 25.5 -26.1 26.4 -28.9
2026-02-15T11:55:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:55:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:55:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.412945
2026-02-15T11:55:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:55:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:55:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:55:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:55:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:55:11.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:54:24', tmtdew=23.86, humidity=19.63, cloud=0.0, wind=21.49, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:54:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:55:11.555 [DEBUG] [Thread-203793] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:55:11.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:55:11.651 [DEBUG] [Thread-203796] [transport.py] [_log()] starting thread (client mode): 0xa57c0ac0
2026-02-15T11:55:11.651 [DEBUG] [Thread-203796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:55:11.667 [DEBUG] [Thread-203796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:55:11.667 [INFO] [Thread-203796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:55:11.674 [DEBUG] [Thread-203796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:55:11.674 [DEBUG] [Thread-203796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:55:11.674 [DEBUG] [Thread-203796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] client lang: <none>
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] server lang: <none>
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] kex follows: False
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] Compression: none
2026-02-15T11:55:11.675 [DEBUG] [Thread-203796] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:55:11.732 [DEBUG] [Thread-203796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:55:11.732 [DEBUG] [Thread-203796] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:55:11.732 [DEBUG] [Thread-203796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:55:11.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:55:11.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:55:11.788 [DEBUG] [Thread-203796] [transport.py] [_log()] userauth is OK
2026-02-15T11:55:11.788 [DEBUG] [Thread-203796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:55:11.789 [DEBUG] [Thread-203796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:55:11.789 [DEBUG] [Thread-203796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:55:11.789 [DEBUG] [Thread-203796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:55:11.810 [INFO] [Thread-203796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:55:11.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:55:11.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:55:12.635 [DEBUG] [Thread-203796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:55:12.635 [DEBUG] [Thread-203796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:55:12.683 [DEBUG] [Thread-203796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:55:12.683 [DEBUG] [Thread-203796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:55:12.692 [DEBUG] [Thread-203796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:55:12.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:55:12.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:55:12.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:55:12.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:55:12.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:55:12.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:55:12.733 [DEBUG] [Thread-203796] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:55:16.967 [DEBUG] [Thread-203798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:19.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:19.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:32.013 [DEBUG] [Thread-203799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:42.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:55:42.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:55:42.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:55:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 55, 35), 25.31, 17.79, 0.0, 19.69, 20.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:55:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:55:35
2026-02-15T11:55:44.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:55:45.151 [DEBUG] [Thread-203800] [transport.py] [_log()] starting thread (client mode): 0xa2d03e20
2026-02-15T11:55:45.151 [DEBUG] [Thread-203800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:55:45.170 [DEBUG] [Thread-203800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:55:45.170 [INFO] [Thread-203800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] client lang: <none>
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] server lang: <none>
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] kex follows: False
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:55:45.174 [DEBUG] [Thread-203800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:55:45.175 [DEBUG] [Thread-203800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:55:45.175 [DEBUG] [Thread-203800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:55:45.175 [DEBUG] [Thread-203800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:55:45.175 [DEBUG] [Thread-203800] [transport.py] [_log()] Compression: none
2026-02-15T11:55:45.175 [DEBUG] [Thread-203800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:55:45.191 [DEBUG] [Thread-203800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:55:45.192 [DEBUG] [Thread-203800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:55:45.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:55:45.193 [DEBUG] [Thread-203800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:55:45.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:55:45.236 [DEBUG] [Thread-203800] [transport.py] [_log()] userauth is OK
2026-02-15T11:55:45.236 [DEBUG] [Thread-203800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:55:45.236 [DEBUG] [Thread-203800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:55:45.236 [DEBUG] [Thread-203800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:55:45.236 [DEBUG] [Thread-203800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:55:45.268 [INFO] [Thread-203800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:55:45.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:55:45.925 [DEBUG] [Thread-203800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:55:45.926 [DEBUG] [Thread-203800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:55:45.926 [DEBUG] [Thread-203800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:55:45.966 [DEBUG] [Thread-203800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:55:45.966 [DEBUG] [Thread-203800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:55:45.969 [DEBUG] [Thread-203800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:55:45.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:55:45.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:55:45.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:55:45.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:55:45.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:55:45.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:55:45.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:55:45.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:55:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:55:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.413292 -999.00  +20.40  19.99     26   +0.40 1 1 1 1 1   888    0 23.97 192.31 ----- 20.0 20.0 125.8 21.7 27.1 -27.5 26.2 -27.3 25.6 -26.0 26.6 -27.3
2026-02-15T11:55:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:55:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:55:45.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.413292
2026-02-15T11:55:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:55:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:55:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:55:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:55:45.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:55:45.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:55:35', tmtdew=25.31, humidity=17.79, cloud=0.0, wind=19.69, temperature=20.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:55:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:55:45.994 [DEBUG] [Thread-203800] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:55:46.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:55:46.100 [DEBUG] [Thread-203803] [transport.py] [_log()] starting thread (client mode): 0xa2d031f0
2026-02-15T11:55:46.100 [DEBUG] [Thread-203803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:55:46.114 [DEBUG] [Thread-203803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:55:46.114 [INFO] [Thread-203803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] client lang: <none>
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] server lang: <none>
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] kex follows: False
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] Compression: none
2026-02-15T11:55:46.122 [DEBUG] [Thread-203803] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:55:46.126 [DEBUG] [Thread-203805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:46.181 [DEBUG] [Thread-203803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:55:46.182 [DEBUG] [Thread-203803] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:55:46.182 [DEBUG] [Thread-203803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:55:46.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:55:46.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:55:46.237 [DEBUG] [Thread-203803] [transport.py] [_log()] userauth is OK
2026-02-15T11:55:46.237 [DEBUG] [Thread-203803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:55:46.237 [DEBUG] [Thread-203803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:55:46.237 [DEBUG] [Thread-203803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:55:46.237 [DEBUG] [Thread-203803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:55:46.256 [INFO] [Thread-203803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:55:46.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:55:46.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:55:47.054 [DEBUG] [Thread-203806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:55:47.146 [DEBUG] [Thread-203803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:55:47.146 [DEBUG] [Thread-203803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:55:47.194 [DEBUG] [Thread-203803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:55:47.195 [DEBUG] [Thread-203803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:55:47.204 [DEBUG] [Thread-203803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:55:47.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:55:47.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:55:47.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:55:47.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:55:47.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:55:47.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:55:47.240 [DEBUG] [Thread-203803] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:56:02.116 [DEBUG] [Thread-203807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:17.157 [DEBUG] [Thread-203808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:17.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:56:17.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:56:17.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:56:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 56, 11), 23.71, 19.93, 0.0, 19.83, 20.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:56:19.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:56:11
2026-02-15T11:56:19.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:56:19.617 [DEBUG] [Thread-203809] [transport.py] [_log()] starting thread (client mode): 0xa2d01180
2026-02-15T11:56:19.617 [DEBUG] [Thread-203809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:56:19.637 [DEBUG] [Thread-203809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:56:19.638 [INFO] [Thread-203809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:56:19.641 [DEBUG] [Thread-203809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] client lang: <none>
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] server lang: <none>
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] kex follows: False
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] Compression: none
2026-02-15T11:56:19.642 [DEBUG] [Thread-203809] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:56:19.660 [DEBUG] [Thread-203809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:56:19.661 [DEBUG] [Thread-203809] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:56:19.661 [DEBUG] [Thread-203809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:56:19.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:56:19.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:56:19.663 [DEBUG] [Thread-203809] [transport.py] [_log()] userauth is OK
2026-02-15T11:56:19.663 [DEBUG] [Thread-203809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:56:19.663 [DEBUG] [Thread-203809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:56:19.664 [DEBUG] [Thread-203809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:56:19.664 [DEBUG] [Thread-203809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:56:19.701 [INFO] [Thread-203809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:56:19.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:56:19.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:19.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:20.355 [DEBUG] [Thread-203809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:56:20.355 [DEBUG] [Thread-203809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:56:20.355 [DEBUG] [Thread-203809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:56:20.396 [DEBUG] [Thread-203809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:56:20.397 [DEBUG] [Thread-203809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:56:20.400 [DEBUG] [Thread-203809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:56:20.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:56:20.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:56:20.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:56:20.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:56:20.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:56:20.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:56:20.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:56:20.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:56:20.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:56:20.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.413640 -999.00  +20.10  20.17     26   +0.10 1 1 1 1 1   888    0 25.11 206.21 ----- 20.2 20.2 136.8 23.2 27.0 -28.7 26.2 -28.2 25.7 -26.8 26.6 -27.1
2026-02-15T11:56:20.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:56:20.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:56:20.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.413640
2026-02-15T11:56:20.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:56:20.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:56:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:56:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:56:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:56:20.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:56:11', tmtdew=23.71, humidity=19.93, cloud=0.0, wind=19.83, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:55:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:56:20.427 [DEBUG] [Thread-203809] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:56:20.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:56:20.523 [DEBUG] [Thread-203812] [transport.py] [_log()] starting thread (client mode): 0xa81d6b60
2026-02-15T11:56:20.523 [DEBUG] [Thread-203812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:56:20.542 [DEBUG] [Thread-203812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:56:20.542 [INFO] [Thread-203812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:56:20.550 [DEBUG] [Thread-203812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] client lang: <none>
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] server lang: <none>
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] kex follows: False
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] Compression: none
2026-02-15T11:56:20.551 [DEBUG] [Thread-203812] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:56:20.609 [DEBUG] [Thread-203812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:56:20.609 [DEBUG] [Thread-203812] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:56:20.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:56:20.610 [DEBUG] [Thread-203812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:56:20.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:56:20.665 [DEBUG] [Thread-203812] [transport.py] [_log()] userauth is OK
2026-02-15T11:56:20.665 [DEBUG] [Thread-203812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:56:20.665 [DEBUG] [Thread-203812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:56:20.665 [DEBUG] [Thread-203812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:56:20.666 [DEBUG] [Thread-203812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:56:20.684 [INFO] [Thread-203812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:56:20.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:56:20.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:56:21.555 [DEBUG] [Thread-203812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:56:21.555 [DEBUG] [Thread-203812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:56:21.603 [DEBUG] [Thread-203812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:56:21.603 [DEBUG] [Thread-203812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:56:21.613 [DEBUG] [Thread-203812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:56:21.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:56:21.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:56:21.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:56:21.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:56:21.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:56:21.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:56:21.653 [DEBUG] [Thread-203812] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:56:32.193 [DEBUG] [Thread-203814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:46.159 [DEBUG] [Thread-203815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:47.246 [DEBUG] [Thread-203816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:56:51.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:56:51.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:56:51.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:56:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 56, 11), 23.71, 19.93, 0.0, 19.83, 20.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:56:53.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:56:11
2026-02-15T11:56:54.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:56:54.245 [DEBUG] [Thread-203817] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T11:56:54.245 [DEBUG] [Thread-203817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:56:54.265 [DEBUG] [Thread-203817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:56:54.265 [INFO] [Thread-203817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:54.268 [DEBUG] [Thread-203817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] client lang: <none>
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] server lang: <none>
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] kex follows: False
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] Compression: none
2026-02-15T11:56:54.269 [DEBUG] [Thread-203817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:56:54.286 [DEBUG] [Thread-203817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:56:54.287 [DEBUG] [Thread-203817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:56:54.288 [DEBUG] [Thread-203817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:56:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:56:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:56:54.289 [DEBUG] [Thread-203817] [transport.py] [_log()] userauth is OK
2026-02-15T11:56:54.289 [DEBUG] [Thread-203817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:56:54.290 [DEBUG] [Thread-203817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:56:54.290 [DEBUG] [Thread-203817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:56:54.290 [DEBUG] [Thread-203817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:56:54.314 [INFO] [Thread-203817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:56:54.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:56:54.945 [DEBUG] [Thread-203817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:56:54.945 [DEBUG] [Thread-203817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:56:54.946 [DEBUG] [Thread-203817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:56:54.986 [DEBUG] [Thread-203817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:56:54.986 [DEBUG] [Thread-203817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:56:54.989 [DEBUG] [Thread-203817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:56:55.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:56:55.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:56:55.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:56:55.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:56:55.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:56:55.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:56:55.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:56:55.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:56:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:56:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.413987 -999.00  +19.60  19.02     26   +0.00 1 1 1 1 1   888    0 24.84 204.62 ----- 19.0 19.0 128.0 23.2 27.1 -27.9 26.2 -28.9 25.5 -27.4 26.4 -28.2
2026-02-15T11:56:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:56:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:56:55.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.413987
2026-02-15T11:56:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:56:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:56:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:56:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:56:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:56:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:56:11', tmtdew=23.71, humidity=19.93, cloud=0.0, wind=19.83, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:56:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:56:55.014 [DEBUG] [Thread-203817] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:56:55.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:56:55.117 [DEBUG] [Thread-203820] [transport.py] [_log()] starting thread (client mode): 0xa57c2560
2026-02-15T11:56:55.117 [DEBUG] [Thread-203820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:56:55.136 [DEBUG] [Thread-203820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:56:55.136 [INFO] [Thread-203820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:56:55.145 [DEBUG] [Thread-203820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:56:55.145 [DEBUG] [Thread-203820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:56:55.145 [DEBUG] [Thread-203820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:56:55.145 [DEBUG] [Thread-203820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:55.145 [DEBUG] [Thread-203820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:56:55.145 [DEBUG] [Thread-203820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] client lang: <none>
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] server lang: <none>
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] kex follows: False
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:56:55.146 [DEBUG] [Thread-203820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:56:55.147 [DEBUG] [Thread-203820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:56:55.147 [DEBUG] [Thread-203820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:56:55.147 [DEBUG] [Thread-203820] [transport.py] [_log()] Compression: none
2026-02-15T11:56:55.147 [DEBUG] [Thread-203820] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:56:55.201 [DEBUG] [Thread-203820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:56:55.202 [DEBUG] [Thread-203820] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:56:55.202 [DEBUG] [Thread-203820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:56:55.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:56:55.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:56:55.257 [DEBUG] [Thread-203820] [transport.py] [_log()] userauth is OK
2026-02-15T11:56:55.257 [DEBUG] [Thread-203820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:56:55.258 [DEBUG] [Thread-203820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:56:55.258 [DEBUG] [Thread-203820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:56:55.258 [DEBUG] [Thread-203820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:56:55.276 [INFO] [Thread-203820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:56:55.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:56:55.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:56:56.101 [DEBUG] [Thread-203820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:56:56.102 [DEBUG] [Thread-203820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:56:56.151 [DEBUG] [Thread-203820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:56:56.151 [DEBUG] [Thread-203820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:56:56.160 [DEBUG] [Thread-203820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:56:56.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:56:56.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:56:56.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:56:56.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:56:56.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:56:56.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:56:56.197 [DEBUG] [Thread-203820] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:57:02.281 [DEBUG] [Thread-203822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:57:17.333 [DEBUG] [Thread-203823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:57:20.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:57:20.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:57:26.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:57:26.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:57:26.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:57:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 56, 46), 23.26, 20.79, 0.0, 18.46, 19.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:57:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:56:46
2026-02-15T11:57:28.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:57:28.648 [DEBUG] [Thread-203824] [transport.py] [_log()] starting thread (client mode): 0xa57596c0
2026-02-15T11:57:28.648 [DEBUG] [Thread-203824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:57:28.669 [DEBUG] [Thread-203824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:57:28.669 [INFO] [Thread-203824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:57:28.673 [DEBUG] [Thread-203824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] client lang: <none>
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] server lang: <none>
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] kex follows: False
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] Compression: none
2026-02-15T11:57:28.674 [DEBUG] [Thread-203824] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:57:28.693 [DEBUG] [Thread-203824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:57:28.694 [DEBUG] [Thread-203824] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:57:28.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:57:28.695 [DEBUG] [Thread-203824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:57:28.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:57:28.697 [DEBUG] [Thread-203824] [transport.py] [_log()] userauth is OK
2026-02-15T11:57:28.697 [DEBUG] [Thread-203824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:57:28.698 [DEBUG] [Thread-203824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:57:28.698 [DEBUG] [Thread-203824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:57:28.698 [DEBUG] [Thread-203824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:57:28.722 [INFO] [Thread-203824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:57:28.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:57:29.442 [DEBUG] [Thread-203824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:57:29.442 [DEBUG] [Thread-203824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:57:29.443 [DEBUG] [Thread-203824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:57:29.483 [DEBUG] [Thread-203824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:57:29.483 [DEBUG] [Thread-203824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:57:29.486 [DEBUG] [Thread-203824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:57:29.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:57:29.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:57:29.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:57:29.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:57:29.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:57:29.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:57:29.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:57:29.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:57:29.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:57:29.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.414334 -999.00  +19.80  21.41     26   +0.20 1 1 1 1 1   888    0 25.16 209.99 ----- 21.4 21.4 137.6 29.2 26.9 -28.6 26.2 -27.5 25.6 -28.0 26.4 -28.1
2026-02-15T11:57:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:57:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:57:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.414334
2026-02-15T11:57:29.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:57:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:57:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:57:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:57:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:57:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:56:46', tmtdew=23.26, humidity=20.79, cloud=0.0, wind=18.46, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:56:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:57:29.513 [DEBUG] [Thread-203824] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:57:29.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:57:29.608 [DEBUG] [Thread-203827] [transport.py] [_log()] starting thread (client mode): 0xa2d03d60
2026-02-15T11:57:29.609 [DEBUG] [Thread-203827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:57:29.626 [DEBUG] [Thread-203827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:57:29.626 [INFO] [Thread-203827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:57:29.633 [DEBUG] [Thread-203827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:57:29.634 [DEBUG] [Thread-203827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:57:29.634 [DEBUG] [Thread-203827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:57:29.634 [DEBUG] [Thread-203827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:57:29.634 [DEBUG] [Thread-203827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:57:29.634 [DEBUG] [Thread-203827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:57:29.634 [DEBUG] [Thread-203827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:57:29.635 [DEBUG] [Thread-203827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:57:29.635 [DEBUG] [Thread-203827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:57:29.635 [DEBUG] [Thread-203827] [transport.py] [_log()] client lang: <none>
2026-02-15T11:57:29.635 [DEBUG] [Thread-203827] [transport.py] [_log()] server lang: <none>
2026-02-15T11:57:29.635 [DEBUG] [Thread-203827] [transport.py] [_log()] kex follows: False
2026-02-15T11:57:29.635 [DEBUG] [Thread-203827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:57:29.636 [DEBUG] [Thread-203827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:57:29.636 [DEBUG] [Thread-203827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:57:29.636 [DEBUG] [Thread-203827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:57:29.636 [DEBUG] [Thread-203827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:57:29.636 [DEBUG] [Thread-203827] [transport.py] [_log()] Compression: none
2026-02-15T11:57:29.636 [DEBUG] [Thread-203827] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:57:29.694 [DEBUG] [Thread-203827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:57:29.694 [DEBUG] [Thread-203827] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:57:29.695 [DEBUG] [Thread-203827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:57:29.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:57:29.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:57:29.749 [DEBUG] [Thread-203827] [transport.py] [_log()] userauth is OK
2026-02-15T11:57:29.749 [DEBUG] [Thread-203827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:57:29.749 [DEBUG] [Thread-203827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:57:29.749 [DEBUG] [Thread-203827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:57:29.749 [DEBUG] [Thread-203827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:57:29.764 [INFO] [Thread-203827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:57:29.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:57:29.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:57:30.598 [DEBUG] [Thread-203827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:57:30.599 [DEBUG] [Thread-203827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:57:30.647 [DEBUG] [Thread-203827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:57:30.647 [DEBUG] [Thread-203827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:57:30.657 [DEBUG] [Thread-203827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:57:30.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:57:30.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:57:30.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:57:30.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:57:30.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:57:30.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:57:30.696 [DEBUG] [Thread-203827] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:57:32.369 [DEBUG] [Thread-203829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:57:46.203 [DEBUG] [Thread-203830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:57:47.424 [DEBUG] [Thread-203831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:58:00.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:58:00.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:58:02.463 [DEBUG] [Thread-203832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 57, 21), 23.1, 21.09, 0.0, 19.0, 20.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:58:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:57:21
2026-02-15T11:58:03.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:58:03.705 [DEBUG] [Thread-203833] [transport.py] [_log()] starting thread (client mode): 0xa2d7b3a0
2026-02-15T11:58:03.705 [DEBUG] [Thread-203833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:58:03.725 [DEBUG] [Thread-203833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:58:03.725 [INFO] [Thread-203833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:58:03.728 [DEBUG] [Thread-203833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] client lang: <none>
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] server lang: <none>
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] kex follows: False
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] Compression: none
2026-02-15T11:58:03.729 [DEBUG] [Thread-203833] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:58:03.746 [DEBUG] [Thread-203833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:58:03.747 [DEBUG] [Thread-203833] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:58:03.747 [DEBUG] [Thread-203833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:58:03.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:58:03.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:58:03.749 [DEBUG] [Thread-203833] [transport.py] [_log()] userauth is OK
2026-02-15T11:58:03.750 [DEBUG] [Thread-203833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:58:03.750 [DEBUG] [Thread-203833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:58:03.750 [DEBUG] [Thread-203833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:58:03.750 [DEBUG] [Thread-203833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:58:03.775 [INFO] [Thread-203833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:58:03.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:58:04.351 [DEBUG] [Thread-203833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:58:04.351 [DEBUG] [Thread-203833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:58:04.351 [DEBUG] [Thread-203833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:58:04.391 [DEBUG] [Thread-203833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:58:04.391 [DEBUG] [Thread-203833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:58:04.395 [DEBUG] [Thread-203833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:58:04.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:58:04.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:58:04.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:58:04.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:58:04.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:58:04.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:58:04.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:58:04.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:58:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:58:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.414682 -999.00  +19.60  22.67     26   -0.10 1 1 1 1 1   888    0 25.51 217.76 ----- 22.7 22.7 140.2 27.5 27.0 -28.9 26.2 -27.3 25.7 -28.3 26.5 -27.5
2026-02-15T11:58:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:58:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:58:04.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.414682
2026-02-15T11:58:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:58:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:58:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:58:04.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:58:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:58:04.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:57:21', tmtdew=23.1, humidity=21.09, cloud=0.0, wind=19.0, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:57:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:58:04.421 [DEBUG] [Thread-203833] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:58:04.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:58:04.516 [DEBUG] [Thread-203836] [transport.py] [_log()] starting thread (client mode): 0xa2db71c0
2026-02-15T11:58:04.516 [DEBUG] [Thread-203836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:58:04.530 [DEBUG] [Thread-203836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:58:04.531 [INFO] [Thread-203836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:58:04.538 [DEBUG] [Thread-203836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:58:04.538 [DEBUG] [Thread-203836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] client lang: <none>
2026-02-15T11:58:04.539 [DEBUG] [Thread-203836] [transport.py] [_log()] server lang: <none>
2026-02-15T11:58:04.540 [DEBUG] [Thread-203836] [transport.py] [_log()] kex follows: False
2026-02-15T11:58:04.540 [DEBUG] [Thread-203836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:58:04.540 [DEBUG] [Thread-203836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:58:04.540 [DEBUG] [Thread-203836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:58:04.540 [DEBUG] [Thread-203836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:58:04.541 [DEBUG] [Thread-203836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:58:04.541 [DEBUG] [Thread-203836] [transport.py] [_log()] Compression: none
2026-02-15T11:58:04.541 [DEBUG] [Thread-203836] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:58:04.598 [DEBUG] [Thread-203836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:58:04.599 [DEBUG] [Thread-203836] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:58:04.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:58:04.600 [DEBUG] [Thread-203836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:58:04.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:58:04.654 [DEBUG] [Thread-203836] [transport.py] [_log()] userauth is OK
2026-02-15T11:58:04.654 [DEBUG] [Thread-203836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:58:04.654 [DEBUG] [Thread-203836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:58:04.654 [DEBUG] [Thread-203836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:58:04.654 [DEBUG] [Thread-203836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:58:04.673 [INFO] [Thread-203836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:58:04.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:58:04.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:58:05.540 [DEBUG] [Thread-203836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:58:05.541 [DEBUG] [Thread-203836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:58:05.589 [DEBUG] [Thread-203836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:58:05.589 [DEBUG] [Thread-203836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:58:05.598 [DEBUG] [Thread-203836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:58:05.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:58:05.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:58:05.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:58:05.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:58:05.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:58:05.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:58:05.635 [DEBUG] [Thread-203836] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:58:17.503 [DEBUG] [Thread-203838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:20.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:20.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:32.556 [DEBUG] [Thread-203839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:35.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:58:35.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:58:35.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:58:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 57, 56), 23.22, 20.63, 0.0, 15.58, 19.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:58:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:57:56
2026-02-15T11:58:37.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:58:38.143 [DEBUG] [Thread-203840] [transport.py] [_log()] starting thread (client mode): 0xa5743370
2026-02-15T11:58:38.143 [DEBUG] [Thread-203840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:58:38.163 [DEBUG] [Thread-203840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:58:38.163 [INFO] [Thread-203840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] client lang: <none>
2026-02-15T11:58:38.166 [DEBUG] [Thread-203840] [transport.py] [_log()] server lang: <none>
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] kex follows: False
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] Compression: none
2026-02-15T11:58:38.167 [DEBUG] [Thread-203840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:58:38.182 [DEBUG] [Thread-203840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:58:38.183 [DEBUG] [Thread-203840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:58:38.183 [DEBUG] [Thread-203840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:58:38.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:58:38.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:58:38.225 [DEBUG] [Thread-203840] [transport.py] [_log()] userauth is OK
2026-02-15T11:58:38.225 [DEBUG] [Thread-203840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:58:38.225 [DEBUG] [Thread-203840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:58:38.226 [DEBUG] [Thread-203840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:58:38.226 [DEBUG] [Thread-203840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:58:38.250 [INFO] [Thread-203840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:58:38.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:58:38.905 [DEBUG] [Thread-203840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:58:38.905 [DEBUG] [Thread-203840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:58:38.905 [DEBUG] [Thread-203840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:58:38.946 [DEBUG] [Thread-203840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:58:38.946 [DEBUG] [Thread-203840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:58:38.950 [DEBUG] [Thread-203840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:58:38.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:58:38.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:58:38.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:58:38.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:58:38.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:58:38.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:58:38.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:58:38.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:58:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:58:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.415029 -999.00  +19.30  13.77     27   +0.00 1 1 1 1 1   888    0 23.76 185.99 ----- 13.8 13.8 121.8 23.3 26.9 -28.0 26.1 -27.9 25.6 -27.0 26.4 -28.6
2026-02-15T11:58:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:58:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:58:38.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.415029
2026-02-15T11:58:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:58:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:58:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:58:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:58:38.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:58:38.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:57:56', tmtdew=23.22, humidity=20.63, cloud=0.0, wind=15.58, temperature=19.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:57:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:58:38.978 [DEBUG] [Thread-203840] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:58:39.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:58:39.077 [DEBUG] [Thread-203843] [transport.py] [_log()] starting thread (client mode): 0xa57438e0
2026-02-15T11:58:39.077 [DEBUG] [Thread-203843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:58:39.094 [DEBUG] [Thread-203843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:58:39.095 [INFO] [Thread-203843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:58:39.104 [DEBUG] [Thread-203843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] client lang: <none>
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] server lang: <none>
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] kex follows: False
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:58:39.105 [DEBUG] [Thread-203843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:58:39.106 [DEBUG] [Thread-203843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:58:39.106 [DEBUG] [Thread-203843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:58:39.106 [DEBUG] [Thread-203843] [transport.py] [_log()] Compression: none
2026-02-15T11:58:39.106 [DEBUG] [Thread-203843] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:58:39.170 [DEBUG] [Thread-203843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:58:39.170 [DEBUG] [Thread-203843] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:58:39.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:58:39.172 [DEBUG] [Thread-203843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:58:39.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:58:39.226 [DEBUG] [Thread-203843] [transport.py] [_log()] userauth is OK
2026-02-15T11:58:39.226 [DEBUG] [Thread-203843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:58:39.226 [DEBUG] [Thread-203843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:58:39.226 [DEBUG] [Thread-203843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:58:39.226 [DEBUG] [Thread-203843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:58:39.245 [INFO] [Thread-203843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:58:39.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:58:39.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:58:40.092 [DEBUG] [Thread-203843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:58:40.092 [DEBUG] [Thread-203843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:58:40.140 [DEBUG] [Thread-203843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:58:40.140 [DEBUG] [Thread-203843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:58:40.150 [DEBUG] [Thread-203843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:58:40.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:58:40.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:58:40.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:58:40.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:58:40.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:58:40.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:58:40.187 [DEBUG] [Thread-203843] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:58:46.231 [DEBUG] [Thread-203845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:58:47.595 [DEBUG] [Thread-203846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:02.657 [DEBUG] [Thread-203847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:10.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:59:10.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:59:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:59:12.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 58, 33), 23.82, 20.01, 0.0, 20.4, 21.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:59:12.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:58:33
2026-02-15T11:59:12.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:59:12.984 [DEBUG] [Thread-203848] [transport.py] [_log()] starting thread (client mode): 0xa81d59c0
2026-02-15T11:59:12.984 [DEBUG] [Thread-203848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:59:12.995 [DEBUG] [Thread-203848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:59:12.995 [INFO] [Thread-203848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] client lang: <none>
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] server lang: <none>
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] kex follows: False
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] Compression: none
2026-02-15T11:59:12.997 [DEBUG] [Thread-203848] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:59:13.009 [DEBUG] [Thread-203848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:59:13.009 [DEBUG] [Thread-203848] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:59:13.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:59:13.010 [DEBUG] [Thread-203848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:59:13.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:59:13.011 [DEBUG] [Thread-203848] [transport.py] [_log()] userauth is OK
2026-02-15T11:59:13.011 [DEBUG] [Thread-203848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:59:13.011 [DEBUG] [Thread-203848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:59:13.011 [DEBUG] [Thread-203848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:59:13.011 [DEBUG] [Thread-203848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:59:13.030 [INFO] [Thread-203848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:59:13.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:59:13.798 [DEBUG] [Thread-203848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:59:13.799 [DEBUG] [Thread-203848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:59:13.799 [DEBUG] [Thread-203848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:59:13.839 [DEBUG] [Thread-203848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:59:13.840 [DEBUG] [Thread-203848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:59:13.843 [DEBUG] [Thread-203848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:59:13.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:59:13.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:59:13.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:59:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:59:13.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:59:13.866 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:59:13.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:59:13.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:59:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:59:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.415723 -999.00  +19.80  19.27     26   +0.10 1 1 1 1 1   888    0 23.84 170.05 ----- 19.3 19.3 155.4 21.9 27.1 -28.0 26.2 -27.2 25.8 -26.6 26.7 -27.4
2026-02-15T11:59:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:59:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:59:13.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.415723
2026-02-15T11:59:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:59:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:59:13.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:59:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:59:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:59:13.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:58:33', tmtdew=23.82, humidity=20.01, cloud=0.0, wind=20.4, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:58:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:59:13.869 [DEBUG] [Thread-203848] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:59:13.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T11:59:13.965 [DEBUG] [Thread-203851] [transport.py] [_log()] starting thread (client mode): 0xa2db5c60
2026-02-15T11:59:13.965 [DEBUG] [Thread-203851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:59:13.979 [DEBUG] [Thread-203851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T11:59:13.979 [INFO] [Thread-203851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] client lang: <none>
2026-02-15T11:59:13.987 [DEBUG] [Thread-203851] [transport.py] [_log()] server lang: <none>
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] kex follows: False
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] Compression: none
2026-02-15T11:59:13.988 [DEBUG] [Thread-203851] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:59:14.046 [DEBUG] [Thread-203851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:59:14.047 [DEBUG] [Thread-203851] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:59:14.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T11:59:14.048 [DEBUG] [Thread-203851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T11:59:14.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:59:14.107 [DEBUG] [Thread-203851] [transport.py] [_log()] userauth is OK
2026-02-15T11:59:14.107 [DEBUG] [Thread-203851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:59:14.107 [DEBUG] [Thread-203851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:59:14.107 [DEBUG] [Thread-203851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T11:59:14.107 [DEBUG] [Thread-203851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:59:14.126 [INFO] [Thread-203851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:59:14.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T11:59:14.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:59:14.944 [DEBUG] [Thread-203851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:59:14.945 [DEBUG] [Thread-203851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:59:14.992 [DEBUG] [Thread-203851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:59:14.993 [DEBUG] [Thread-203851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:59:15.002 [DEBUG] [Thread-203851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:59:15.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:59:15.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T11:59:15.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T11:59:15.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:59:15.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:59:15.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:59:15.038 [DEBUG] [Thread-203851] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:59:17.696 [DEBUG] [Thread-203853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:20.310 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:20.311 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:32.756 [DEBUG] [Thread-203854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:45.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T11:59:45.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T11:59:45.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T11:59:46.289 [DEBUG] [Thread-203855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:47.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 11, 59, 8), 23.72, 19.89, 0.0, 24.67, 20.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T11:59:47.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 11:59:08
2026-02-15T11:59:47.793 [DEBUG] [Thread-203856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T11:59:47.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T11:59:48.082 [DEBUG] [Thread-203857] [transport.py] [_log()] starting thread (client mode): 0xa81d73d0
2026-02-15T11:59:48.082 [DEBUG] [Thread-203857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T11:59:48.100 [DEBUG] [Thread-203857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T11:59:48.100 [INFO] [Thread-203857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T11:59:48.101 [DEBUG] [Thread-203857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T11:59:48.101 [DEBUG] [Thread-203857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T11:59:48.101 [DEBUG] [Thread-203857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T11:59:48.101 [DEBUG] [Thread-203857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:59:48.101 [DEBUG] [Thread-203857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T11:59:48.101 [DEBUG] [Thread-203857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] client lang: <none>
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] server lang: <none>
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] kex follows: False
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] Compression: none
2026-02-15T11:59:48.102 [DEBUG] [Thread-203857] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T11:59:48.119 [DEBUG] [Thread-203857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T11:59:48.119 [DEBUG] [Thread-203857] [transport.py] [_log()] Switch to new keys ...
2026-02-15T11:59:48.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T11:59:48.120 [DEBUG] [Thread-203857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T11:59:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T11:59:48.122 [DEBUG] [Thread-203857] [transport.py] [_log()] userauth is OK
2026-02-15T11:59:48.122 [DEBUG] [Thread-203857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T11:59:48.122 [DEBUG] [Thread-203857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T11:59:48.123 [DEBUG] [Thread-203857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T11:59:48.123 [DEBUG] [Thread-203857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T11:59:48.146 [INFO] [Thread-203857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T11:59:48.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T11:59:48.790 [DEBUG] [Thread-203857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T11:59:48.790 [DEBUG] [Thread-203857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T11:59:48.791 [DEBUG] [Thread-203857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T11:59:48.831 [DEBUG] [Thread-203857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T11:59:48.832 [DEBUG] [Thread-203857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T11:59:48.835 [DEBUG] [Thread-203857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T11:59:48.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T11:59:48.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T11:59:48.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T11:59:48.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T11:59:48.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T11:59:48.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T11:59:48.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T11:59:48.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T11:59:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T11:59:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.416070 -999.00  +19.80  25.01     26   +0.10 1 1 1 1 1   888    0 23.13 146.89 ----- 25.0 25.0 142.4 30.9 27.1 -31.1 26.2 -27.2 25.8 -27.3 26.6 -27.6
2026-02-15T11:59:48.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T11:59:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T11:59:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.416070
2026-02-15T11:59:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T11:59:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T11:59:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T11:59:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T11:59:48.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T11:59:48.864 [DEBUG] [Thread-203857] [transport.py] [_log()] EOF in transport thread
2026-02-15T11:59:48.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T11:59:08', tmtdew=23.72, humidity=19.89, cloud=0.0, wind=24.67, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T09:59:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T11:59:48.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:00:02.827 [DEBUG] [Thread-203860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:00:17.871 [DEBUG] [Thread-203861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:00:20.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:00:20.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:00:32.916 [DEBUG] [Thread-203862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:00:46.341 [DEBUG] [Thread-203863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:00:47.951 [DEBUG] [Thread-203864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:02.984 [DEBUG] [Thread-203865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:18.022 [DEBUG] [Thread-203866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:20.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:20.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:33.059 [DEBUG] [Thread-203867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:46.385 [DEBUG] [Thread-203868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:01:48.092 [DEBUG] [Thread-203869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:03.128 [DEBUG] [Thread-203870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:03.704 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T12:02:18.167 [DEBUG] [Thread-203871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:20.737 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:20.738 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:33.202 [DEBUG] [Thread-203872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:33.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:02:33.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:02:33.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:02:35.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 2, 7), 23.05, 21.01, 0.0, 19.85, 19.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:02:35.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:02:07
2026-02-15T12:02:36.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:02:36.400 [DEBUG] [Thread-203873] [transport.py] [_log()] starting thread (client mode): 0xa5759f60
2026-02-15T12:02:36.400 [DEBUG] [Thread-203873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:02:36.421 [DEBUG] [Thread-203873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:02:36.421 [INFO] [Thread-203873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:02:36.424 [DEBUG] [Thread-203873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:02:36.424 [DEBUG] [Thread-203873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:02:36.424 [DEBUG] [Thread-203873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:02:36.424 [DEBUG] [Thread-203873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:02:36.424 [DEBUG] [Thread-203873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] client lang: <none>
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] server lang: <none>
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] kex follows: False
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] Compression: none
2026-02-15T12:02:36.425 [DEBUG] [Thread-203873] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:02:36.443 [DEBUG] [Thread-203873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:02:36.443 [DEBUG] [Thread-203873] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:02:36.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:02:36.445 [DEBUG] [Thread-203873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:02:36.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:02:36.446 [DEBUG] [Thread-203873] [transport.py] [_log()] userauth is OK
2026-02-15T12:02:36.447 [DEBUG] [Thread-203873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:02:36.447 [DEBUG] [Thread-203873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:02:36.447 [DEBUG] [Thread-203873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:02:36.447 [DEBUG] [Thread-203873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:02:36.481 [INFO] [Thread-203873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:02:36.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:02:37.051 [DEBUG] [Thread-203873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:02:37.051 [DEBUG] [Thread-203873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:02:37.051 [DEBUG] [Thread-203873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:02:37.092 [DEBUG] [Thread-203873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:02:37.093 [DEBUG] [Thread-203873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:02:37.096 [DEBUG] [Thread-203873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:02:37.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:02:37.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:02:37.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:02:37.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:02:37.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:02:37.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:02:37.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:02:37.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:02:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:02:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.417807 -999.00  +20.20  21.54     26   +0.20 1 1 1 1 1   888    0 22.77 120.56 ----- 21.5 21.5 145.4 28.1 27.4 -29.7 26.6 -28.0 26.1 -27.2 27.0 -28.3
2026-02-15T12:02:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:02:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:02:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.417807
2026-02-15T12:02:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:02:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:02:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:02:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:02:37.133 [DEBUG] [Thread-203873] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:02:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:02:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:02:07', tmtdew=23.05, humidity=21.01, cloud=0.0, wind=19.85, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:01:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:02:37.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:02:37.229 [DEBUG] [Thread-203876] [transport.py] [_log()] starting thread (client mode): 0xa57c0ac0
2026-02-15T12:02:37.229 [DEBUG] [Thread-203876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:02:37.243 [DEBUG] [Thread-203876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:02:37.243 [INFO] [Thread-203876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:02:37.260 [DEBUG] [Thread-203876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:02:37.260 [DEBUG] [Thread-203876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:02:37.260 [DEBUG] [Thread-203876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] client lang: <none>
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] server lang: <none>
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] kex follows: False
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:02:37.261 [DEBUG] [Thread-203876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:02:37.262 [DEBUG] [Thread-203876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:02:37.262 [DEBUG] [Thread-203876] [transport.py] [_log()] Compression: none
2026-02-15T12:02:37.262 [DEBUG] [Thread-203876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:02:37.311 [DEBUG] [Thread-203876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:02:37.312 [DEBUG] [Thread-203876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:02:37.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:02:37.313 [DEBUG] [Thread-203876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:02:37.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:02:37.367 [DEBUG] [Thread-203876] [transport.py] [_log()] userauth is OK
2026-02-15T12:02:37.368 [DEBUG] [Thread-203876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:02:37.368 [DEBUG] [Thread-203876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:02:37.368 [DEBUG] [Thread-203876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:02:37.368 [DEBUG] [Thread-203876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:02:37.392 [INFO] [Thread-203876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:02:37.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:02:37.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:02:38.218 [DEBUG] [Thread-203876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:02:38.218 [DEBUG] [Thread-203876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:02:38.268 [DEBUG] [Thread-203876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:02:38.268 [DEBUG] [Thread-203876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:02:38.280 [DEBUG] [Thread-203876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:02:38.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:02:38.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:02:38.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:02:38.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:02:38.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:02:38.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:02:38.317 [DEBUG] [Thread-203876] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:02:46.429 [DEBUG] [Thread-203878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:02:48.241 [DEBUG] [Thread-203879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:03.297 [DEBUG] [Thread-203880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:08.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:03:08.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:03:08.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:03:10.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 2, 43), 22.89, 21.07, 0.0, 21.91, 19.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:03:10.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:02:43
2026-02-15T12:03:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:03:10.866 [DEBUG] [Thread-203881] [transport.py] [_log()] starting thread (client mode): 0xa2dc0c10
2026-02-15T12:03:10.866 [DEBUG] [Thread-203881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:03:10.885 [DEBUG] [Thread-203881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:03:10.885 [INFO] [Thread-203881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] client lang: <none>
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] server lang: <none>
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] kex follows: False
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] Compression: none
2026-02-15T12:03:10.889 [DEBUG] [Thread-203881] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:03:10.910 [DEBUG] [Thread-203881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:03:10.911 [DEBUG] [Thread-203881] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:03:10.911 [DEBUG] [Thread-203881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:03:10.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:03:10.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:03:10.913 [DEBUG] [Thread-203881] [transport.py] [_log()] userauth is OK
2026-02-15T12:03:10.914 [DEBUG] [Thread-203881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:03:10.914 [DEBUG] [Thread-203881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:03:10.914 [DEBUG] [Thread-203881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:03:10.914 [DEBUG] [Thread-203881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:03:10.938 [INFO] [Thread-203881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:03:10.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:03:11.566 [DEBUG] [Thread-203881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:03:11.567 [DEBUG] [Thread-203881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:03:11.567 [DEBUG] [Thread-203881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:03:11.607 [DEBUG] [Thread-203881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:03:11.607 [DEBUG] [Thread-203881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:03:11.610 [DEBUG] [Thread-203881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:03:11.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:03:11.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:03:11.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:03:11.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:03:11.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:03:11.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:03:11.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:03:11.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:03:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:03:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.418154 -999.00  +20.20  16.63     26   +0.30 1 1 1 1 1   888    0 22.76 127.73 ----- 16.6 16.6 163.8 20.4 27.4 -29.1 26.4 -29.4 26.0 -27.1 26.9 -28.9
2026-02-15T12:03:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:03:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:03:11.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.418154
2026-02-15T12:03:11.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:03:11.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:03:11.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:03:11.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:03:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:03:11.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:02:43', tmtdew=22.89, humidity=21.07, cloud=0.0, wind=21.91, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:02:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:03:11.637 [DEBUG] [Thread-203881] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:03:11.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:03:11.731 [DEBUG] [Thread-203884] [transport.py] [_log()] starting thread (client mode): 0xa2d6bf70
2026-02-15T12:03:11.731 [DEBUG] [Thread-203884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:03:11.747 [DEBUG] [Thread-203884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:03:11.748 [INFO] [Thread-203884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:03:11.755 [DEBUG] [Thread-203884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] client lang: <none>
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] server lang: <none>
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] kex follows: False
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] Compression: none
2026-02-15T12:03:11.756 [DEBUG] [Thread-203884] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:03:11.815 [DEBUG] [Thread-203884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:03:11.816 [DEBUG] [Thread-203884] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:03:11.816 [DEBUG] [Thread-203884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:03:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:03:11.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:03:11.875 [DEBUG] [Thread-203884] [transport.py] [_log()] userauth is OK
2026-02-15T12:03:11.875 [DEBUG] [Thread-203884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:03:11.876 [DEBUG] [Thread-203884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:03:11.876 [DEBUG] [Thread-203884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:03:11.876 [DEBUG] [Thread-203884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:03:11.896 [INFO] [Thread-203884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:03:11.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:03:11.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:03:12.724 [DEBUG] [Thread-203884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:03:12.724 [DEBUG] [Thread-203884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:03:12.772 [DEBUG] [Thread-203884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:03:12.773 [DEBUG] [Thread-203884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:03:12.783 [DEBUG] [Thread-203884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:03:12.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:03:12.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:03:12.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:03:12.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:03:12.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:03:12.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:03:12.820 [DEBUG] [Thread-203884] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:03:18.334 [DEBUG] [Thread-203886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:20.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:20.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:33.386 [DEBUG] [Thread-203887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:42.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:03:42.841 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:03:42.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:03:44.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 3, 18), 23.34, 20.44, 0.0, 24.61, 19.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:03:44.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:03:18
2026-02-15T12:03:45.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:03:45.348 [DEBUG] [Thread-203888] [transport.py] [_log()] starting thread (client mode): 0xa2d6e620
2026-02-15T12:03:45.348 [DEBUG] [Thread-203888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:03:45.371 [DEBUG] [Thread-203888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:03:45.371 [INFO] [Thread-203888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:03:45.375 [DEBUG] [Thread-203888] [transport.py] [_log()] client lang: <none>
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] server lang: <none>
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] kex follows: False
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] Compression: none
2026-02-15T12:03:45.376 [DEBUG] [Thread-203888] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:03:45.397 [DEBUG] [Thread-203888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:03:45.397 [DEBUG] [Thread-203888] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:03:45.397 [DEBUG] [Thread-203888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:03:45.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:03:45.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:03:45.399 [DEBUG] [Thread-203888] [transport.py] [_log()] userauth is OK
2026-02-15T12:03:45.399 [DEBUG] [Thread-203888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:03:45.400 [DEBUG] [Thread-203888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:03:45.400 [DEBUG] [Thread-203888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:03:45.400 [DEBUG] [Thread-203888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:03:45.435 [INFO] [Thread-203888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:03:45.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:03:46.072 [DEBUG] [Thread-203888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:03:46.073 [DEBUG] [Thread-203888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:03:46.073 [DEBUG] [Thread-203888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:03:46.113 [DEBUG] [Thread-203888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:03:46.113 [DEBUG] [Thread-203888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:03:46.116 [DEBUG] [Thread-203888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:03:46.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:03:46.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:03:46.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:03:46.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:03:46.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:03:46.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:03:46.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:03:46.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:03:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:03:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.418848 -999.00  +20.00  18.33     25   -0.30 1 1 1 1 1   888    0 23.44 133.93 ----- 18.3 18.3 125.2 22.8 27.3 -28.6 26.4 -27.6 26.0 -27.4 26.9 -27.9
2026-02-15T12:03:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:03:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:03:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.418848
2026-02-15T12:03:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:03:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:03:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:03:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:03:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:03:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:03:18', tmtdew=23.34, humidity=20.44, cloud=0.0, wind=24.61, temperature=19.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:03:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:03:46.140 [DEBUG] [Thread-203888] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:03:46.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:03:46.238 [DEBUG] [Thread-203891] [transport.py] [_log()] starting thread (client mode): 0xa57e17b0
2026-02-15T12:03:46.238 [DEBUG] [Thread-203891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:03:46.253 [DEBUG] [Thread-203891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:03:46.253 [INFO] [Thread-203891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:03:46.260 [DEBUG] [Thread-203891] [transport.py] [_log()] client lang: <none>
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] server lang: <none>
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] kex follows: False
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] Compression: none
2026-02-15T12:03:46.261 [DEBUG] [Thread-203891] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:03:46.319 [DEBUG] [Thread-203891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:03:46.319 [DEBUG] [Thread-203891] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:03:46.319 [DEBUG] [Thread-203891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:03:46.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:03:46.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:03:46.376 [DEBUG] [Thread-203891] [transport.py] [_log()] userauth is OK
2026-02-15T12:03:46.376 [DEBUG] [Thread-203891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:03:46.376 [DEBUG] [Thread-203891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:03:46.376 [DEBUG] [Thread-203891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:03:46.376 [DEBUG] [Thread-203891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:03:46.398 [INFO] [Thread-203891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:03:46.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:03:46.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:03:46.463 [DEBUG] [Thread-203893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:03:47.245 [DEBUG] [Thread-203891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:03:47.245 [DEBUG] [Thread-203891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:03:47.293 [DEBUG] [Thread-203891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:03:47.293 [DEBUG] [Thread-203891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:03:47.301 [DEBUG] [Thread-203891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:03:47.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:03:47.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:03:47.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:03:47.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:03:47.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:03:47.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:03:47.336 [DEBUG] [Thread-203891] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:03:48.418 [DEBUG] [Thread-203894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:03.479 [DEBUG] [Thread-203895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:17.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:04:17.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:04:17.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:04:18.517 [DEBUG] [Thread-203896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:19.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 3, 54), 23.19, 20.77, 0.0, 20.01, 19.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:04:19.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:03:54
2026-02-15T12:04:19.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:04:19.911 [DEBUG] [Thread-203897] [transport.py] [_log()] starting thread (client mode): 0xa57e1db0
2026-02-15T12:04:19.911 [DEBUG] [Thread-203897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:04:19.932 [DEBUG] [Thread-203897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:04:19.932 [INFO] [Thread-203897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:19.934 [DEBUG] [Thread-203897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] client lang: <none>
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] server lang: <none>
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] kex follows: False
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] Compression: none
2026-02-15T12:04:19.935 [DEBUG] [Thread-203897] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:04:19.952 [DEBUG] [Thread-203897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:04:19.952 [DEBUG] [Thread-203897] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:04:19.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:04:19.953 [DEBUG] [Thread-203897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:04:19.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:04:19.955 [DEBUG] [Thread-203897] [transport.py] [_log()] userauth is OK
2026-02-15T12:04:19.955 [DEBUG] [Thread-203897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:04:19.955 [DEBUG] [Thread-203897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:04:19.955 [DEBUG] [Thread-203897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:04:19.955 [DEBUG] [Thread-203897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:04:19.978 [INFO] [Thread-203897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:04:19.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:04:20.607 [DEBUG] [Thread-203897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:04:20.607 [DEBUG] [Thread-203897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:04:20.608 [DEBUG] [Thread-203897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:04:20.648 [DEBUG] [Thread-203897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:04:20.649 [DEBUG] [Thread-203897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:04:20.652 [DEBUG] [Thread-203897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:04:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:04:20.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:04:20.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:04:20.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:04:20.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:04:20.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:04:20.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:04:20.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:04:20.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:04:20.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.419195 -999.00  +19.80  15.13     26   +0.10 1 1 1 1 1   888    0 23.41 127.22 ----- 15.1 15.1 118.2 22.3 27.4 -28.0 26.4 -28.2 26.1 -26.7 26.9 -28.5
2026-02-15T12:04:20.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:04:20.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:04:20.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.419195
2026-02-15T12:04:20.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:04:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:04:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:04:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:04:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:04:20.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:03:54', tmtdew=23.19, humidity=20.77, cloud=0.0, wind=20.01, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:03:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:04:20.676 [DEBUG] [Thread-203897] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:04:20.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:04:20.773 [DEBUG] [Thread-203900] [transport.py] [_log()] starting thread (client mode): 0xa57e2260
2026-02-15T12:04:20.773 [DEBUG] [Thread-203900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:04:20.788 [DEBUG] [Thread-203900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:04:20.788 [INFO] [Thread-203900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] client lang: <none>
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] server lang: <none>
2026-02-15T12:04:20.796 [DEBUG] [Thread-203900] [transport.py] [_log()] kex follows: False
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] Compression: none
2026-02-15T12:04:20.797 [DEBUG] [Thread-203900] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:04:20.857 [DEBUG] [Thread-203900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:04:20.857 [DEBUG] [Thread-203900] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:04:20.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:04:20.858 [DEBUG] [Thread-203900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:04:20.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:04:20.912 [DEBUG] [Thread-203900] [transport.py] [_log()] userauth is OK
2026-02-15T12:04:20.913 [DEBUG] [Thread-203900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:04:20.913 [DEBUG] [Thread-203900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:04:20.913 [DEBUG] [Thread-203900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:04:20.913 [DEBUG] [Thread-203900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:04:20.931 [INFO] [Thread-203900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:04:20.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:04:20.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:04:21.027 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:21.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:21.772 [DEBUG] [Thread-203900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:04:21.773 [DEBUG] [Thread-203900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:04:21.820 [DEBUG] [Thread-203900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:04:21.821 [DEBUG] [Thread-203900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:04:21.830 [DEBUG] [Thread-203900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:04:21.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:04:21.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:04:21.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:04:21.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:04:21.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:04:21.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:04:21.866 [DEBUG] [Thread-203900] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:04:33.554 [DEBUG] [Thread-203902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:46.496 [DEBUG] [Thread-203903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:48.612 [DEBUG] [Thread-203904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:04:51.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:04:51.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:04:51.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
2026-02-15T12:04:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 4, 30), 23.15, 20.86, 0.0, 18.33, 19.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:04:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:04:30
2026-02-15T12:04:54.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:04:54.991 [DEBUG] [Thread-203905] [transport.py] [_log()] starting thread (client mode): 0xa2d69630
2026-02-15T12:04:54.991 [DEBUG] [Thread-203905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:04:55.010 [DEBUG] [Thread-203905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:04:55.010 [INFO] [Thread-203905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] client lang: <none>
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] server lang: <none>
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] kex follows: False
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] Compression: none
2026-02-15T12:04:55.014 [DEBUG] [Thread-203905] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:04:55.032 [DEBUG] [Thread-203905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:04:55.032 [DEBUG] [Thread-203905] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:04:55.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:04:55.033 [DEBUG] [Thread-203905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:04:55.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:04:55.036 [DEBUG] [Thread-203905] [transport.py] [_log()] userauth is OK
2026-02-15T12:04:55.036 [DEBUG] [Thread-203905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:04:55.036 [DEBUG] [Thread-203905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:04:55.036 [DEBUG] [Thread-203905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:04:55.036 [DEBUG] [Thread-203905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:04:55.061 [INFO] [Thread-203905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:04:55.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:04:55.695 [DEBUG] [Thread-203905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:04:55.695 [DEBUG] [Thread-203905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:04:55.696 [DEBUG] [Thread-203905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:04:55.736 [DEBUG] [Thread-203905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:04:55.737 [DEBUG] [Thread-203905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:04:55.740 [DEBUG] [Thread-203905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:04:55.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:04:55.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:04:55.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:04:55.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:04:55.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:04:55.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:04:55.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:04:55.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:04:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:04:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.419543 -999.00  +19.90  16.91     25   -0.20 1 1 1 1 1   888    0 23.08 122.25 ----- 16.9 16.9 125.8 24.5 27.3 -28.6 26.6 -28.3 26.1 -27.6 27.0 -28.5
2026-02-15T12:04:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:04:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:04:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.419543
2026-02-15T12:04:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:04:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:04:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:04:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:04:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:04:55.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:04:30', tmtdew=23.15, humidity=20.86, cloud=0.0, wind=18.33, temperature=19.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:04:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:04:55.766 [DEBUG] [Thread-203905] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:04:55.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:04:55.862 [DEBUG] [Thread-203908] [transport.py] [_log()] starting thread (client mode): 0xa5740070
2026-02-15T12:04:55.862 [DEBUG] [Thread-203908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:04:55.877 [DEBUG] [Thread-203908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:04:55.877 [INFO] [Thread-203908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:04:55.885 [DEBUG] [Thread-203908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] client lang: <none>
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] server lang: <none>
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] kex follows: False
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] Compression: none
2026-02-15T12:04:55.886 [DEBUG] [Thread-203908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:04:55.944 [DEBUG] [Thread-203908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:04:55.945 [DEBUG] [Thread-203908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:04:55.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:04:55.946 [DEBUG] [Thread-203908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:04:55.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:04:56.000 [DEBUG] [Thread-203908] [transport.py] [_log()] userauth is OK
2026-02-15T12:04:56.001 [DEBUG] [Thread-203908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:04:56.001 [DEBUG] [Thread-203908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:04:56.001 [DEBUG] [Thread-203908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:04:56.001 [DEBUG] [Thread-203908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:04:56.020 [INFO] [Thread-203908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:04:56.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:04:56.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:04:56.816 [DEBUG] [Thread-203908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:04:56.816 [DEBUG] [Thread-203908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:04:56.864 [DEBUG] [Thread-203908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:04:56.865 [DEBUG] [Thread-203908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:04:56.874 [DEBUG] [Thread-203908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:04:56.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:04:56.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:04:56.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:04:56.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:04:56.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:04:56.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:04:56.910 [DEBUG] [Thread-203908] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:05:03.649 [DEBUG] [Thread-203910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:05:18.705 [DEBUG] [Thread-203911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:05:21.169 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:05:21.170 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:05:26.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:05:26.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:05:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:05:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 5, 5), 23.29, 20.68, 0.0, 16.48, 19.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:05:28.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:05:05
2026-02-15T12:05:29.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:05:29.367 [DEBUG] [Thread-203912] [transport.py] [_log()] starting thread (client mode): 0xa5743370
2026-02-15T12:05:29.367 [DEBUG] [Thread-203912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:05:29.389 [DEBUG] [Thread-203912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:05:29.389 [INFO] [Thread-203912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:05:29.392 [DEBUG] [Thread-203912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:05:29.392 [DEBUG] [Thread-203912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:05:29.392 [DEBUG] [Thread-203912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] client lang: <none>
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] server lang: <none>
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] kex follows: False
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:05:29.393 [DEBUG] [Thread-203912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:05:29.394 [DEBUG] [Thread-203912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:05:29.394 [DEBUG] [Thread-203912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:05:29.394 [DEBUG] [Thread-203912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:05:29.394 [DEBUG] [Thread-203912] [transport.py] [_log()] Compression: none
2026-02-15T12:05:29.394 [DEBUG] [Thread-203912] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:05:29.415 [DEBUG] [Thread-203912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:05:29.416 [DEBUG] [Thread-203912] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:05:29.417 [DEBUG] [Thread-203912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:05:29.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:05:29.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:05:29.419 [DEBUG] [Thread-203912] [transport.py] [_log()] userauth is OK
2026-02-15T12:05:29.419 [DEBUG] [Thread-203912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:05:29.419 [DEBUG] [Thread-203912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:05:29.419 [DEBUG] [Thread-203912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:05:29.419 [DEBUG] [Thread-203912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:05:29.455 [INFO] [Thread-203912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:05:29.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:05:30.068 [DEBUG] [Thread-203912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:05:30.069 [DEBUG] [Thread-203912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:05:30.069 [DEBUG] [Thread-203912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:05:30.109 [DEBUG] [Thread-203912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:05:30.109 [DEBUG] [Thread-203912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:05:30.112 [DEBUG] [Thread-203912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:05:30.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:05:30.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:05:30.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:05:30.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:05:30.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:05:30.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:05:30.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:05:30.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:05:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:05:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.419890 -999.00  +19.50  10.42     26   -0.10 1 1 1 1 1   888    0 22.90 119.01 ----- 10.4 10.4 125.0 15.6 27.5 -27.8 26.6 -27.7 26.1 -26.6 26.9 -27.5
2026-02-15T12:05:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:05:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:05:30.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.419890
2026-02-15T12:05:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:05:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:05:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:05:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:05:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:05:30.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:05:05', tmtdew=23.29, humidity=20.68, cloud=0.0, wind=16.48, temperature=19.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:04:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:05:30.139 [DEBUG] [Thread-203912] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:05:30.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:05:30.236 [DEBUG] [Thread-203915] [transport.py] [_log()] starting thread (client mode): 0xa57e2ef0
2026-02-15T12:05:30.236 [DEBUG] [Thread-203915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:05:30.254 [DEBUG] [Thread-203915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:05:30.254 [INFO] [Thread-203915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:05:30.261 [DEBUG] [Thread-203915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] client lang: <none>
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] server lang: <none>
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] kex follows: False
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:05:30.262 [DEBUG] [Thread-203915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:05:30.263 [DEBUG] [Thread-203915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:05:30.263 [DEBUG] [Thread-203915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:05:30.263 [DEBUG] [Thread-203915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:05:30.263 [DEBUG] [Thread-203915] [transport.py] [_log()] Compression: none
2026-02-15T12:05:30.263 [DEBUG] [Thread-203915] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:05:30.325 [DEBUG] [Thread-203915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:05:30.325 [DEBUG] [Thread-203915] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:05:30.326 [DEBUG] [Thread-203915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:05:30.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:05:30.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:05:30.385 [DEBUG] [Thread-203915] [transport.py] [_log()] userauth is OK
2026-02-15T12:05:30.385 [DEBUG] [Thread-203915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:05:30.385 [DEBUG] [Thread-203915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:05:30.385 [DEBUG] [Thread-203915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:05:30.385 [DEBUG] [Thread-203915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:05:30.406 [INFO] [Thread-203915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:05:30.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:05:30.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:05:31.227 [DEBUG] [Thread-203915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:05:31.227 [DEBUG] [Thread-203915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:05:31.276 [DEBUG] [Thread-203915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:05:31.276 [DEBUG] [Thread-203915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:05:31.285 [DEBUG] [Thread-203915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:05:31.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:05:31.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:05: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') -> 00000000
2026-02-15T12:05:31.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:05:31.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:05:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:05:31.318 [DEBUG] [Thread-203915] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:05:33.742 [DEBUG] [Thread-203917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:05:46.526 [DEBUG] [Thread-203918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:05:48.794 [DEBUG] [Thread-203919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:01.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:06:01.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:06:01.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:06:03.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 5, 41), 23.79, 19.91, 0.0, 30.73, 20.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:06:03.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:05:41
2026-02-15T12:06:03.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:06:03.720 [DEBUG] [Thread-203920] [transport.py] [_log()] starting thread (client mode): 0xa2d6e620
2026-02-15T12:06:03.720 [DEBUG] [Thread-203920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:06:03.740 [DEBUG] [Thread-203920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:06:03.740 [INFO] [Thread-203920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] client lang: <none>
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] server lang: <none>
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] kex follows: False
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:06:03.743 [DEBUG] [Thread-203920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:06:03.744 [DEBUG] [Thread-203920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:06:03.744 [DEBUG] [Thread-203920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:06:03.744 [DEBUG] [Thread-203920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:06:03.744 [DEBUG] [Thread-203920] [transport.py] [_log()] Compression: none
2026-02-15T12:06:03.744 [DEBUG] [Thread-203920] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:06:03.760 [DEBUG] [Thread-203920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:06:03.761 [DEBUG] [Thread-203920] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:06:03.761 [DEBUG] [Thread-203920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:06:03.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:06:03.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:06:03.763 [DEBUG] [Thread-203920] [transport.py] [_log()] userauth is OK
2026-02-15T12:06:03.764 [DEBUG] [Thread-203920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:06:03.764 [DEBUG] [Thread-203920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:06:03.764 [DEBUG] [Thread-203920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:06:03.764 [DEBUG] [Thread-203920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:06:03.782 [INFO] [Thread-203920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:06:03.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:06:03.827 [DEBUG] [Thread-203922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:04.434 [DEBUG] [Thread-203920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:06:04.435 [DEBUG] [Thread-203920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:06:04.435 [DEBUG] [Thread-203920] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:06:04.475 [DEBUG] [Thread-203920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:06:04.476 [DEBUG] [Thread-203920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:06:04.479 [DEBUG] [Thread-203920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:06:04.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:06:04.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:06:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:06:04.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:06:04.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:06:04.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:06:04.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:06:04.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:06:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:06:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.420237 -999.00  +19.60   9.84     26   +0.10 1 1 1 1 1   888    0 22.61 115.76 ----- 9.8 9.8 141.5 14.8 27.6 -27.6 26.7 -27.3 26.2 -27.3 27.2 -27.0
2026-02-15T12:06:04.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:06:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:06:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.420237
2026-02-15T12:06:04.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:06:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:06:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:06:04.507 [DEBUG] [Thread-203920] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:06:04.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:06:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:06:04.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:05:41', tmtdew=23.79, humidity=19.91, cloud=0.0, wind=30.73, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:05:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:06:04.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:06:04.603 [DEBUG] [Thread-203924] [transport.py] [_log()] starting thread (client mode): 0xa57e3a90
2026-02-15T12:06:04.603 [DEBUG] [Thread-203924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:06:04.617 [DEBUG] [Thread-203924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:06:04.618 [INFO] [Thread-203924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] client lang: <none>
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] server lang: <none>
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] kex follows: False
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:06:04.626 [DEBUG] [Thread-203924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:06:04.627 [DEBUG] [Thread-203924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:06:04.627 [DEBUG] [Thread-203924] [transport.py] [_log()] Compression: none
2026-02-15T12:06:04.627 [DEBUG] [Thread-203924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:06:04.691 [DEBUG] [Thread-203924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:06:04.691 [DEBUG] [Thread-203924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:06:04.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:06:04.693 [DEBUG] [Thread-203924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:06:04.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:06:04.749 [DEBUG] [Thread-203924] [transport.py] [_log()] userauth is OK
2026-02-15T12:06:04.750 [DEBUG] [Thread-203924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:06:04.750 [DEBUG] [Thread-203924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:06:04.750 [DEBUG] [Thread-203924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:06:04.750 [DEBUG] [Thread-203924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:06:04.768 [INFO] [Thread-203924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:06:04.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:06:04.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:06:05.616 [DEBUG] [Thread-203924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:06:05.616 [DEBUG] [Thread-203924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:06:05.665 [DEBUG] [Thread-203924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:06:05.665 [DEBUG] [Thread-203924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:06:05.675 [DEBUG] [Thread-203924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:06:05.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:06:05.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:06:05.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:06:05.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:06:05.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:06:05.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:06:05.713 [DEBUG] [Thread-203924] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:06:18.865 [DEBUG] [Thread-203926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:21.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:21.313 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:33.920 [DEBUG] [Thread-203927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:35.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:06:35.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:06:35.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:06:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 6, 17), 22.47, 21.69, 0.0, 17.63, 19.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:06:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:06:17
2026-02-15T12:06:38.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:06:38.169 [DEBUG] [Thread-203928] [transport.py] [_log()] starting thread (client mode): 0xa2d6a200
2026-02-15T12:06:38.169 [DEBUG] [Thread-203928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:06:38.189 [DEBUG] [Thread-203928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:06:38.189 [INFO] [Thread-203928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:38.190 [DEBUG] [Thread-203928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] client lang: <none>
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] server lang: <none>
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] kex follows: False
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] Compression: none
2026-02-15T12:06:38.191 [DEBUG] [Thread-203928] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:06:38.204 [DEBUG] [Thread-203928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:06:38.205 [DEBUG] [Thread-203928] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:06:38.205 [DEBUG] [Thread-203928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:06:38.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:06:38.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:06:38.207 [DEBUG] [Thread-203928] [transport.py] [_log()] userauth is OK
2026-02-15T12:06:38.207 [DEBUG] [Thread-203928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:06:38.207 [DEBUG] [Thread-203928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:06:38.208 [DEBUG] [Thread-203928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:06:38.208 [DEBUG] [Thread-203928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:06:38.227 [INFO] [Thread-203928] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:06:38.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:06:39.005 [DEBUG] [Thread-203928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:06:39.005 [DEBUG] [Thread-203928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:06:39.006 [DEBUG] [Thread-203928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:06:39.046 [DEBUG] [Thread-203928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:06:39.047 [DEBUG] [Thread-203928] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:06:39.050 [DEBUG] [Thread-203928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:06:39.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:06:39.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:06:39.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:06:39.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:06:39.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:06:39.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:06:39.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:06:39.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:06:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:06:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.420584 -999.00  +20.00  23.05     26   +0.20 1 1 1 1 1   888    0 22.41 118.16 ----- 23.1 23.1 130.4 26.1 27.6 -28.8 26.7 -26.6 26.2 -28.2 27.2 -26.5
2026-02-15T12:06:39.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:06:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:06:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.420584
2026-02-15T12:06:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:06:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:06:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:06:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:06:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:06:39.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:06:17', tmtdew=22.47, humidity=21.69, cloud=0.0, wind=17.63, temperature=19.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:05:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:06:39.077 [DEBUG] [Thread-203928] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:06:39.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:06:39.173 [DEBUG] [Thread-203931] [transport.py] [_log()] starting thread (client mode): 0xa5740dc0
2026-02-15T12:06:39.173 [DEBUG] [Thread-203931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:06:39.189 [DEBUG] [Thread-203931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:06:39.189 [INFO] [Thread-203931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:06:39.197 [DEBUG] [Thread-203931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] client lang: <none>
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] server lang: <none>
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] kex follows: False
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] Compression: none
2026-02-15T12:06:39.198 [DEBUG] [Thread-203931] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:06:39.261 [DEBUG] [Thread-203931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:06:39.261 [DEBUG] [Thread-203931] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:06:39.262 [DEBUG] [Thread-203931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:06:39.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:06:39.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:06:39.320 [DEBUG] [Thread-203931] [transport.py] [_log()] userauth is OK
2026-02-15T12:06:39.320 [DEBUG] [Thread-203931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:06:39.321 [DEBUG] [Thread-203931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:06:39.321 [DEBUG] [Thread-203931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:06:39.321 [DEBUG] [Thread-203931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:06:39.339 [INFO] [Thread-203931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:06:39.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:06:39.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:06:40.174 [DEBUG] [Thread-203931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:06:40.174 [DEBUG] [Thread-203931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:06:40.222 [DEBUG] [Thread-203931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:06:40.222 [DEBUG] [Thread-203931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:06:40.232 [DEBUG] [Thread-203931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:06:40.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:06:40.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:06:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:06:40.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:06:40.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:06:40.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:06:40.274 [DEBUG] [Thread-203931] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:06:46.554 [DEBUG] [Thread-203933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:06:48.959 [DEBUG] [Thread-203934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:04.020 [DEBUG] [Thread-203935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:10.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:07:10.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:07:10.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:07:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 6, 52), 23.65, 20.13, 0.0, 17.86, 20.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:07:12.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:06:52
2026-02-15T12:07:12.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:07:12.773 [DEBUG] [Thread-203936] [transport.py] [_log()] starting thread (client mode): 0xa57410f0
2026-02-15T12:07:12.774 [DEBUG] [Thread-203936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:07:12.793 [DEBUG] [Thread-203936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:07:12.793 [INFO] [Thread-203936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:12.796 [DEBUG] [Thread-203936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] client lang: <none>
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] server lang: <none>
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] kex follows: False
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] Compression: none
2026-02-15T12:07:12.797 [DEBUG] [Thread-203936] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:07:12.813 [DEBUG] [Thread-203936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:07:12.814 [DEBUG] [Thread-203936] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:07:12.815 [DEBUG] [Thread-203936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:07:12.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:07:12.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:07:12.816 [DEBUG] [Thread-203936] [transport.py] [_log()] userauth is OK
2026-02-15T12:07:12.817 [DEBUG] [Thread-203936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:07:12.817 [DEBUG] [Thread-203936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:07:12.817 [DEBUG] [Thread-203936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:07:12.817 [DEBUG] [Thread-203936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:07:12.836 [INFO] [Thread-203936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:07:12.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:07:13.418 [DEBUG] [Thread-203936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:07:13.419 [DEBUG] [Thread-203936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:07:13.419 [DEBUG] [Thread-203936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:07:13.459 [DEBUG] [Thread-203936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:07:13.460 [DEBUG] [Thread-203936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:07:13.463 [DEBUG] [Thread-203936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:07:13.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:07:13.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:07:13.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:07:13.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:07:13.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:07:13.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:07:13.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:07:13.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:07:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:07:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.420931 -999.00  +20.00  18.05     26   +0.00 1 1 1 1 1   888    0 22.97 107.04 ----- 18.1 18.1 141.0 21.4 27.6 -28.8 26.7 -29.0 26.2 -26.8 27.1 -29.1
2026-02-15T12:07:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:07:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:07:13.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.420931
2026-02-15T12:07:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:07:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:07:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:07:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:07:13.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:07:13.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:06:52', tmtdew=23.65, humidity=20.13, cloud=0.0, wind=17.86, temperature=20.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:06:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:07:13.490 [DEBUG] [Thread-203936] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:07:13.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:07:13.586 [DEBUG] [Thread-203939] [transport.py] [_log()] starting thread (client mode): 0xa2d6a830
2026-02-15T12:07:13.586 [DEBUG] [Thread-203939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:07:13.603 [DEBUG] [Thread-203939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:07:13.603 [INFO] [Thread-203939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:07:13.613 [DEBUG] [Thread-203939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:07:13.613 [DEBUG] [Thread-203939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:07:13.614 [DEBUG] [Thread-203939] [transport.py] [_log()] client lang: <none>
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] server lang: <none>
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] kex follows: False
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:07:13.615 [DEBUG] [Thread-203939] [transport.py] [_log()] Compression: none
2026-02-15T12:07:13.616 [DEBUG] [Thread-203939] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:07:13.669 [DEBUG] [Thread-203939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:07:13.670 [DEBUG] [Thread-203939] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:07:13.670 [DEBUG] [Thread-203939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:07:13.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:07:13.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:07:13.725 [DEBUG] [Thread-203939] [transport.py] [_log()] userauth is OK
2026-02-15T12:07:13.726 [DEBUG] [Thread-203939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:07:13.726 [DEBUG] [Thread-203939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:07:13.726 [DEBUG] [Thread-203939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:07:13.726 [DEBUG] [Thread-203939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:07:13.746 [INFO] [Thread-203939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:07:13.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:07:13.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:07:14.578 [DEBUG] [Thread-203939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:07:14.579 [DEBUG] [Thread-203939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:07:14.627 [DEBUG] [Thread-203939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:07:14.627 [DEBUG] [Thread-203939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:07:14.639 [DEBUG] [Thread-203939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:07:14.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:07:14.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:07:14.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:07:14.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:07:14.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:07:14.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:07:14.675 [DEBUG] [Thread-203939] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:07:19.059 [DEBUG] [Thread-203941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:21.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:21.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:34.111 [DEBUG] [Thread-203942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:44.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:07:44.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:07:44.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:07:46.599 [DEBUG] [Thread-203943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:07:46.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 7, 27), 23.85, 19.83, 0.0, 15.56, 20.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:07:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:07:27
2026-02-15T12:07:46.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:07:47.142 [DEBUG] [Thread-203944] [transport.py] [_log()] starting thread (client mode): 0xa2d6aec0
2026-02-15T12:07:47.142 [DEBUG] [Thread-203944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:07:47.162 [DEBUG] [Thread-203944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:07:47.162 [INFO] [Thread-203944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:07:47.165 [DEBUG] [Thread-203944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] client lang: <none>
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] server lang: <none>
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] kex follows: False
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] Compression: none
2026-02-15T12:07:47.166 [DEBUG] [Thread-203944] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:07:47.184 [DEBUG] [Thread-203944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:07:47.185 [DEBUG] [Thread-203944] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:07:47.186 [DEBUG] [Thread-203944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:07:47.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:07:47.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:07:47.188 [DEBUG] [Thread-203944] [transport.py] [_log()] userauth is OK
2026-02-15T12:07:47.188 [DEBUG] [Thread-203944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:07:47.188 [DEBUG] [Thread-203944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:07:47.188 [DEBUG] [Thread-203944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:07:47.188 [DEBUG] [Thread-203944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:07:47.210 [INFO] [Thread-203944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:07:47.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:07:47.825 [DEBUG] [Thread-203944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:07:47.826 [DEBUG] [Thread-203944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:07:47.826 [DEBUG] [Thread-203944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:07:47.866 [DEBUG] [Thread-203944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:07:47.867 [DEBUG] [Thread-203944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:07:47.870 [DEBUG] [Thread-203944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:07:47.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:07:47.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:07:47.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:07:47.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:07:47.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:07:47.895 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:07:47.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:07:47.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:07:47.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:07:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.421626 -999.00  +19.80   9.68     26   +0.20 1 1 1 1 1   888    0 22.48 100.40 ----- 9.7 9.7 123.2 15.9 27.6 -28.6 26.7 -27.9 26.4 -26.1 27.1 -28.5
2026-02-15T12:07:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:07:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:07:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.421626
2026-02-15T12:07:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:07:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:07:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:07:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:07:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:07:47.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:07:27', tmtdew=23.85, humidity=19.83, cloud=0.0, wind=15.56, temperature=20.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:07:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:07:47.898 [DEBUG] [Thread-203944] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:07:47.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:07:47.994 [DEBUG] [Thread-203947] [transport.py] [_log()] starting thread (client mode): 0xa57e2620
2026-02-15T12:07:47.994 [DEBUG] [Thread-203947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:07:48.008 [DEBUG] [Thread-203947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:07:48.009 [INFO] [Thread-203947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:07:48.017 [DEBUG] [Thread-203947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:07:48.017 [DEBUG] [Thread-203947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:07:48.017 [DEBUG] [Thread-203947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] client lang: <none>
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] server lang: <none>
2026-02-15T12:07:48.018 [DEBUG] [Thread-203947] [transport.py] [_log()] kex follows: False
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] Compression: none
2026-02-15T12:07:48.019 [DEBUG] [Thread-203947] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:07:48.074 [DEBUG] [Thread-203947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:07:48.075 [DEBUG] [Thread-203947] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:07:48.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:07:48.076 [DEBUG] [Thread-203947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:07:48.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:07:48.133 [DEBUG] [Thread-203947] [transport.py] [_log()] userauth is OK
2026-02-15T12:07:48.133 [DEBUG] [Thread-203947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:07:48.134 [DEBUG] [Thread-203947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:07:48.134 [DEBUG] [Thread-203947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:07:48.134 [DEBUG] [Thread-203947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:07:48.152 [INFO] [Thread-203947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:07:48.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:07:48.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:07:48.980 [DEBUG] [Thread-203947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:07:48.980 [DEBUG] [Thread-203947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:07:49.029 [DEBUG] [Thread-203947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:07:49.029 [DEBUG] [Thread-203947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:07:49.039 [DEBUG] [Thread-203947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:07:49.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:07:49.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:07:49.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:07:49.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:07:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:07:49.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:07:49.076 [DEBUG] [Thread-203947] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:07:49.149 [DEBUG] [Thread-203949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:04.199 [DEBUG] [Thread-203950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:19.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:08:19.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:08:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:08:19.236 [DEBUG] [Thread-203951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:21.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 8, 3), 23.65, 20.08, 0.0, 18.97, 20.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:08:21.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:08:03
2026-02-15T12:08:21.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:08:21.597 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:21.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:21.759 [DEBUG] [Thread-203952] [transport.py] [_log()] starting thread (client mode): 0xa5741720
2026-02-15T12:08:21.759 [DEBUG] [Thread-203952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:08:21.778 [DEBUG] [Thread-203952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:08:21.778 [INFO] [Thread-203952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] client lang: <none>
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] server lang: <none>
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] kex follows: False
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:08:21.780 [DEBUG] [Thread-203952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:08:21.781 [DEBUG] [Thread-203952] [transport.py] [_log()] Compression: none
2026-02-15T12:08:21.781 [DEBUG] [Thread-203952] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:08:21.795 [DEBUG] [Thread-203952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:08:21.795 [DEBUG] [Thread-203952] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:08:21.796 [DEBUG] [Thread-203952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:08:21.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:08:21.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:08:21.797 [DEBUG] [Thread-203952] [transport.py] [_log()] userauth is OK
2026-02-15T12:08:21.798 [DEBUG] [Thread-203952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:08:21.798 [DEBUG] [Thread-203952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:08:21.798 [DEBUG] [Thread-203952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:08:21.798 [DEBUG] [Thread-203952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:08:21.825 [INFO] [Thread-203952] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:08:21.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:08:22.415 [DEBUG] [Thread-203952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:08:22.424 [DEBUG] [Thread-203952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:08:22.425 [DEBUG] [Thread-203952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:08:22.456 [DEBUG] [Thread-203952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:08:22.456 [DEBUG] [Thread-203952] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:08:22.460 [DEBUG] [Thread-203952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:08:22.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:08:22.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:08:22.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:08:22.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:08:22.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:08:22.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:08:22.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:08:22.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:08:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:08:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.422320 -999.00  +20.20  11.77     26   +0.20 1 1 1 1 1   888    0 22.30 92.20 ----- 11.8 11.8 156.2 16.2 27.9 -27.9 26.9 -27.5 26.5 -26.5 27.4 -27.2
2026-02-15T12:08:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:08:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:08:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.422320
2026-02-15T12:08:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:08:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:08:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:08:22.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:08:22.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:08:22.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:08:03', tmtdew=23.65, humidity=20.08, cloud=0.0, wind=18.97, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:08:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:08:22.485 [DEBUG] [Thread-203952] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:08:22.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:08:22.577 [DEBUG] [Thread-203955] [transport.py] [_log()] starting thread (client mode): 0xa81d5600
2026-02-15T12:08:22.577 [DEBUG] [Thread-203955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:08:22.594 [DEBUG] [Thread-203955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:08:22.594 [INFO] [Thread-203955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:08:22.602 [DEBUG] [Thread-203955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:08:22.602 [DEBUG] [Thread-203955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:08:22.602 [DEBUG] [Thread-203955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] client lang: <none>
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] server lang: <none>
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] kex follows: False
2026-02-15T12:08:22.603 [DEBUG] [Thread-203955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:08:22.604 [DEBUG] [Thread-203955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:08:22.604 [DEBUG] [Thread-203955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:08:22.604 [DEBUG] [Thread-203955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:08:22.604 [DEBUG] [Thread-203955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:08:22.604 [DEBUG] [Thread-203955] [transport.py] [_log()] Compression: none
2026-02-15T12:08:22.604 [DEBUG] [Thread-203955] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:08:22.662 [DEBUG] [Thread-203955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:08:22.663 [DEBUG] [Thread-203955] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:08:22.664 [DEBUG] [Thread-203955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:08:22.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:08:22.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:08:22.729 [DEBUG] [Thread-203955] [transport.py] [_log()] userauth is OK
2026-02-15T12:08:22.730 [DEBUG] [Thread-203955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:08:22.730 [DEBUG] [Thread-203955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:08:22.730 [DEBUG] [Thread-203955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:08:22.730 [DEBUG] [Thread-203955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:08:22.751 [INFO] [Thread-203955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:08:22.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:08:22.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:08:23.651 [DEBUG] [Thread-203955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:08:23.651 [DEBUG] [Thread-203955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:08:23.699 [DEBUG] [Thread-203955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:08:23.699 [DEBUG] [Thread-203955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:08:23.707 [DEBUG] [Thread-203955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:08:23.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:08:23.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:08:23.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:08:23.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:08:23.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:08:23.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:08:23.738 [DEBUG] [Thread-203955] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:08:34.275 [DEBUG] [Thread-203957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:46.646 [DEBUG] [Thread-203958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:49.330 [DEBUG] [Thread-203959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:08:53.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:08:53.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:08:53.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:08:55.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 8, 38), 24.14, 19.45, 0.0, 18.46, 20.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:08:55.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:08:38
2026-02-15T12:08:56.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:08:56.217 [DEBUG] [Thread-203960] [transport.py] [_log()] starting thread (client mode): 0xa81d6fb0
2026-02-15T12:08:56.217 [DEBUG] [Thread-203960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:08:56.236 [DEBUG] [Thread-203960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:08:56.236 [INFO] [Thread-203960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:08:56.238 [DEBUG] [Thread-203960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:08:56.238 [DEBUG] [Thread-203960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] client lang: <none>
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] server lang: <none>
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] kex follows: False
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] Compression: none
2026-02-15T12:08:56.239 [DEBUG] [Thread-203960] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:08:56.254 [DEBUG] [Thread-203960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:08:56.254 [DEBUG] [Thread-203960] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:08:56.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:08:56.256 [DEBUG] [Thread-203960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:08:56.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:08:56.259 [DEBUG] [Thread-203960] [transport.py] [_log()] userauth is OK
2026-02-15T12:08:56.260 [DEBUG] [Thread-203960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:08:56.260 [DEBUG] [Thread-203960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:08:56.260 [DEBUG] [Thread-203960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:08:56.260 [DEBUG] [Thread-203960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:08:56.280 [INFO] [Thread-203960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:08:56.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:08:56.867 [DEBUG] [Thread-203960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:08:56.867 [DEBUG] [Thread-203960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:08:56.867 [DEBUG] [Thread-203960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:08:56.908 [DEBUG] [Thread-203960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:08:56.909 [DEBUG] [Thread-203960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:08:56.911 [DEBUG] [Thread-203960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:08:56.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:08:56.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:08:56.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:08:56.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:08:56.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:08:56.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:08:56.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:08:56.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:08:56.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:08:56.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.422667 -999.00  +20.30  15.53     25   +0.10 1 1 1 1 1   888    0 21.89 83.94 ----- 15.5 15.5 129.8 20.6 27.9 -28.6 26.8 -27.4 26.5 -27.8 27.5 -26.8
2026-02-15T12:08:56.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:08:56.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:08:56.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.422667
2026-02-15T12:08:56.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:08:56.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:08:56.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:08:56.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:08:56.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:08:56.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:08:38', tmtdew=24.14, humidity=19.45, cloud=0.0, wind=18.46, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:08:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:08:56.930 [DEBUG] [Thread-203960] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:08:57.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:08:57.027 [DEBUG] [Thread-203963] [transport.py] [_log()] starting thread (client mode): 0xa2dc04c0
2026-02-15T12:08:57.027 [DEBUG] [Thread-203963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:08:57.042 [DEBUG] [Thread-203963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:08:57.042 [INFO] [Thread-203963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:08:57.049 [DEBUG] [Thread-203963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:08:57.049 [DEBUG] [Thread-203963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] client lang: <none>
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] server lang: <none>
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] kex follows: False
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] Compression: none
2026-02-15T12:08:57.050 [DEBUG] [Thread-203963] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:08:57.117 [DEBUG] [Thread-203963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:08:57.118 [DEBUG] [Thread-203963] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:08:57.118 [DEBUG] [Thread-203963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:08:57.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:08:57.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:08:57.174 [DEBUG] [Thread-203963] [transport.py] [_log()] userauth is OK
2026-02-15T12:08:57.174 [DEBUG] [Thread-203963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:08:57.174 [DEBUG] [Thread-203963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:08:57.174 [DEBUG] [Thread-203963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:08:57.174 [DEBUG] [Thread-203963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:08:57.192 [INFO] [Thread-203963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:08:57.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:08:57.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:08:58.068 [DEBUG] [Thread-203963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:08:58.068 [DEBUG] [Thread-203963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:08:58.116 [DEBUG] [Thread-203963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:08:58.117 [DEBUG] [Thread-203963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:08:58.126 [DEBUG] [Thread-203963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:08:58.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:08:58.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:08:58.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:08:58.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:08:58.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:08:58.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:08:58.162 [DEBUG] [Thread-203963] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:09:04.367 [DEBUG] [Thread-203965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:09:19.424 [DEBUG] [Thread-203966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:09:21.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:09:21.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:09:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:09:28.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:09:28.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:09:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 9, 13), 23.11, 20.99, 0.0, 24.16, 20.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:09:30.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:09:13
2026-02-15T12:09:31.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:09:31.611 [DEBUG] [Thread-203967] [transport.py] [_log()] starting thread (client mode): 0xa2dc2020
2026-02-15T12:09:31.611 [DEBUG] [Thread-203967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:09:31.631 [DEBUG] [Thread-203967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:09:31.631 [INFO] [Thread-203967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:09:31.633 [DEBUG] [Thread-203967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:09:31.633 [DEBUG] [Thread-203967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:09:31.633 [DEBUG] [Thread-203967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:09:31.633 [DEBUG] [Thread-203967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:09:31.633 [DEBUG] [Thread-203967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] client lang: <none>
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] server lang: <none>
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] kex follows: False
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] Compression: none
2026-02-15T12:09:31.634 [DEBUG] [Thread-203967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:09:31.650 [DEBUG] [Thread-203967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:09:31.651 [DEBUG] [Thread-203967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:09:31.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:09:31.652 [DEBUG] [Thread-203967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:09:31.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:09:31.654 [DEBUG] [Thread-203967] [transport.py] [_log()] userauth is OK
2026-02-15T12:09:31.654 [DEBUG] [Thread-203967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:09:31.654 [DEBUG] [Thread-203967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:09:31.654 [DEBUG] [Thread-203967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:09:31.654 [DEBUG] [Thread-203967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:09:31.678 [INFO] [Thread-203967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:09:31.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:09:32.282 [DEBUG] [Thread-203967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:09:32.282 [DEBUG] [Thread-203967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:09:32.283 [DEBUG] [Thread-203967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:09:32.323 [DEBUG] [Thread-203967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:09:32.323 [DEBUG] [Thread-203967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:09:32.326 [DEBUG] [Thread-203967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:09:32.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:09:32.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:09:32.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:09:32.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:09:32.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:09:32.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:09:32.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:09:32.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:09:32.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:09:32.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.423015 -999.00  +20.30  15.06     25   +0.00 1 1 1 1 1   888    0 21.71 80.91 ----- 15.1 15.1 143.7 24.1 27.9 -28.6 26.9 -27.4 26.5 -26.5 27.5 -27.5
2026-02-15T12:09:32.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:09:32.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:09:32.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.423015
2026-02-15T12:09:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:09:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:09:32.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:09:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:09:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:09:32.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:09:13', tmtdew=23.11, humidity=20.99, cloud=0.0, wind=24.16, temperature=20.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:09:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:09:32.351 [DEBUG] [Thread-203967] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:09:32.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:09:32.460 [DEBUG] [Thread-203970] [transport.py] [_log()] starting thread (client mode): 0xa2d69e10
2026-02-15T12:09:32.461 [DEBUG] [Thread-203970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:09:32.482 [DEBUG] [Thread-203970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:09:32.483 [INFO] [Thread-203970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:09:32.490 [DEBUG] [Thread-203970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] client lang: <none>
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] server lang: <none>
2026-02-15T12:09:32.491 [DEBUG] [Thread-203970] [transport.py] [_log()] kex follows: False
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] Compression: none
2026-02-15T12:09:32.492 [DEBUG] [Thread-203970] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:09:32.551 [DEBUG] [Thread-203970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:09:32.551 [DEBUG] [Thread-203970] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:09:32.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:09:32.553 [DEBUG] [Thread-203970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:09:32.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:09:32.611 [DEBUG] [Thread-203970] [transport.py] [_log()] userauth is OK
2026-02-15T12:09:32.611 [DEBUG] [Thread-203970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:09:32.611 [DEBUG] [Thread-203970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:09:32.611 [DEBUG] [Thread-203970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:09:32.611 [DEBUG] [Thread-203970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:09:32.630 [INFO] [Thread-203970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:09:32.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:09:32.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:09:33.462 [DEBUG] [Thread-203970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:09:33.462 [DEBUG] [Thread-203970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:09:33.511 [DEBUG] [Thread-203970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:09:33.511 [DEBUG] [Thread-203970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:09:33.520 [DEBUG] [Thread-203970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:09:33.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:09:33.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:09:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:09:33.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:09:33.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:09:33.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:09:33.559 [DEBUG] [Thread-203970] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:09:34.459 [DEBUG] [Thread-203972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:09:46.692 [DEBUG] [Thread-203973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:09:49.515 [DEBUG] [Thread-203974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:03.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:10:03.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:10:03.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:10:04.555 [DEBUG] [Thread-203975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:05.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 9, 49), 23.56, 20.04, 0.0, 22.25, 20.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:10:05.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:09:49
2026-02-15T12:10:05.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:10:06.119 [DEBUG] [Thread-203976] [transport.py] [_log()] starting thread (client mode): 0xa57e2d10
2026-02-15T12:10:06.119 [DEBUG] [Thread-203976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:10:06.136 [DEBUG] [Thread-203976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:10:06.136 [INFO] [Thread-203976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:10:06.139 [DEBUG] [Thread-203976] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:10:06.139 [DEBUG] [Thread-203976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] client lang: <none>
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] server lang: <none>
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] kex follows: False
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:10:06.140 [DEBUG] [Thread-203976] [transport.py] [_log()] Compression: none
2026-02-15T12:10:06.141 [DEBUG] [Thread-203976] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:10:06.158 [DEBUG] [Thread-203976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:10:06.158 [DEBUG] [Thread-203976] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:10:06.159 [DEBUG] [Thread-203976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:10:06.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:10:06.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:10:06.160 [DEBUG] [Thread-203976] [transport.py] [_log()] userauth is OK
2026-02-15T12:10:06.160 [DEBUG] [Thread-203976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:10:06.160 [DEBUG] [Thread-203976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:10:06.160 [DEBUG] [Thread-203976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:10:06.160 [DEBUG] [Thread-203976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:10:06.178 [INFO] [Thread-203976] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:10:06.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:10:06.922 [DEBUG] [Thread-203976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:10:06.922 [DEBUG] [Thread-203976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:10:06.923 [DEBUG] [Thread-203976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:10:06.963 [DEBUG] [Thread-203976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:10:06.963 [DEBUG] [Thread-203976] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:10:06.969 [DEBUG] [Thread-203976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:10:06.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:10:06.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:10:06.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:10:06.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:10:07.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:10:07.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:10:07.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:10:07.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:10:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:10:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.423362 -999.00  +20.50  24.51     25   +0.00 1 1 1 1 1   888    0 21.91 79.25 ----- 24.5 24.5 169.2 26.8 27.9 -29.1 26.8 -28.2 26.5 -27.0 27.5 -28.4
2026-02-15T12:10:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:10:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:10:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.423362
2026-02-15T12:10:07.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:10:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:10:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:10:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:10:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:10:07.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:09:49', tmtdew=23.56, humidity=20.04, cloud=0.0, wind=22.25, temperature=20.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:09:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:10:07.027 [DEBUG] [Thread-203976] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:10:07.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:10:07.119 [DEBUG] [Thread-203979] [transport.py] [_log()] starting thread (client mode): 0xa5740bb0
2026-02-15T12:10:07.119 [DEBUG] [Thread-203979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:10:07.134 [DEBUG] [Thread-203979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:10:07.134 [INFO] [Thread-203979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:10:07.146 [DEBUG] [Thread-203979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:10:07.146 [DEBUG] [Thread-203979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:10:07.146 [DEBUG] [Thread-203979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] client lang: <none>
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] server lang: <none>
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] kex follows: False
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] Compression: none
2026-02-15T12:10:07.147 [DEBUG] [Thread-203979] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:10:07.206 [DEBUG] [Thread-203979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:10:07.207 [DEBUG] [Thread-203979] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:10:07.207 [DEBUG] [Thread-203979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:10:07.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:10:07.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:10:07.262 [DEBUG] [Thread-203979] [transport.py] [_log()] userauth is OK
2026-02-15T12:10:07.262 [DEBUG] [Thread-203979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:10:07.262 [DEBUG] [Thread-203979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:10:07.262 [DEBUG] [Thread-203979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:10:07.262 [DEBUG] [Thread-203979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:10:07.289 [INFO] [Thread-203979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:10:07.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:10:07.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:10:08.183 [DEBUG] [Thread-203979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:10:08.183 [DEBUG] [Thread-203979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:10:08.231 [DEBUG] [Thread-203979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:10:08.231 [DEBUG] [Thread-203979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:10:08.240 [DEBUG] [Thread-203979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:10:08.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:10:08.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:10:08.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:10:08.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:10:08.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:10:08.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:10:08.278 [DEBUG] [Thread-203979] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:10:19.590 [DEBUG] [Thread-203981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:21.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:21.927 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:34.645 [DEBUG] [Thread-203982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:38.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:10:38.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:10:38.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:10:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 10, 25), 23.19, 20.56, 0.0, 22.46, 19.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:10:40.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:10:25
2026-02-15T12:10:40.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:10:40.963 [DEBUG] [Thread-203983] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-15T12:10:40.964 [DEBUG] [Thread-203983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:10:40.979 [DEBUG] [Thread-203983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:10:40.979 [INFO] [Thread-203983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] client lang: <none>
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] server lang: <none>
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] kex follows: False
2026-02-15T12:10:40.982 [DEBUG] [Thread-203983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:10:40.983 [DEBUG] [Thread-203983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:10:40.983 [DEBUG] [Thread-203983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:10:40.983 [DEBUG] [Thread-203983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:10:40.983 [DEBUG] [Thread-203983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:10:40.983 [DEBUG] [Thread-203983] [transport.py] [_log()] Compression: none
2026-02-15T12:10:40.983 [DEBUG] [Thread-203983] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:10:41.000 [DEBUG] [Thread-203983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:10:41.001 [DEBUG] [Thread-203983] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:10:41.001 [DEBUG] [Thread-203983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:10:41.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:10:41.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:10:41.003 [DEBUG] [Thread-203983] [transport.py] [_log()] userauth is OK
2026-02-15T12:10:41.003 [DEBUG] [Thread-203983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:10:41.003 [DEBUG] [Thread-203983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:10:41.003 [DEBUG] [Thread-203983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:10:41.003 [DEBUG] [Thread-203983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:10:41.021 [INFO] [Thread-203983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:10:41.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:10:41.654 [DEBUG] [Thread-203983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:10:41.654 [DEBUG] [Thread-203983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:10:41.655 [DEBUG] [Thread-203983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:10:41.695 [DEBUG] [Thread-203983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:10:41.695 [DEBUG] [Thread-203983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:10:41.698 [DEBUG] [Thread-203983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:10:41.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:10:41.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:10:41.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:10:41.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:10:41.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:10:41.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:10:41.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:10:41.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:10:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:10:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.423709 -999.00  +20.30  16.98     25   -0.00 1 1 1 1 1   888    0 21.78 74.59 ----- 17.0 17.0 147.6 26.1 27.8 -28.6 26.8 -28.1 26.4 -27.5 27.5 -28.8
2026-02-15T12:10:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:10:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:10:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.423709
2026-02-15T12:10:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:10:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:10:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:10:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:10:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:10:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:10:25', tmtdew=23.19, humidity=20.56, cloud=0.0, wind=22.46, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:10:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:10:41.723 [DEBUG] [Thread-203983] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:10:41.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:10:41.823 [DEBUG] [Thread-203986] [transport.py] [_log()] starting thread (client mode): 0xa2db4b20
2026-02-15T12:10:41.823 [DEBUG] [Thread-203986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:10:41.837 [DEBUG] [Thread-203986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:10:41.838 [INFO] [Thread-203986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:10:41.846 [DEBUG] [Thread-203986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:10:41.846 [DEBUG] [Thread-203986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:10:41.846 [DEBUG] [Thread-203986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:10:41.846 [DEBUG] [Thread-203986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:41.846 [DEBUG] [Thread-203986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:10:41.847 [DEBUG] [Thread-203986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:41.847 [DEBUG] [Thread-203986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:10:41.847 [DEBUG] [Thread-203986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:10:41.847 [DEBUG] [Thread-203986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:10:41.847 [DEBUG] [Thread-203986] [transport.py] [_log()] client lang: <none>
2026-02-15T12:10:41.847 [DEBUG] [Thread-203986] [transport.py] [_log()] server lang: <none>
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] kex follows: False
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] Compression: none
2026-02-15T12:10:41.848 [DEBUG] [Thread-203986] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:10:41.911 [DEBUG] [Thread-203986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:10:41.911 [DEBUG] [Thread-203986] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:10:41.911 [DEBUG] [Thread-203986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:10:41.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:10:41.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:10:41.975 [DEBUG] [Thread-203986] [transport.py] [_log()] userauth is OK
2026-02-15T12:10:41.975 [DEBUG] [Thread-203986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:10:41.975 [DEBUG] [Thread-203986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:10:41.975 [DEBUG] [Thread-203986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:10:41.976 [DEBUG] [Thread-203986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:10:42.000 [INFO] [Thread-203986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:10:42.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:10:42.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:10:42.815 [DEBUG] [Thread-203986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:10:42.815 [DEBUG] [Thread-203986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:10:42.863 [DEBUG] [Thread-203986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:10:42.863 [DEBUG] [Thread-203986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:10:42.873 [DEBUG] [Thread-203986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:10:42.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:10:42.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:10:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:10:42.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:10:42.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:10:42.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:10:42.909 [DEBUG] [Thread-203986] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:10:46.724 [DEBUG] [Thread-203988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:10:49.682 [DEBUG] [Thread-203989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:04.736 [DEBUG] [Thread-203990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:12.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:11:12.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:11:12.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:11:14.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 11), 23.22, 20.59, 0.0, 20.56, 19.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:11:14.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:11:00
2026-02-15T12:11:15.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:11:15.418 [DEBUG] [Thread-203991] [transport.py] [_log()] starting thread (client mode): 0xa5741720
2026-02-15T12:11:15.418 [DEBUG] [Thread-203991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:11:15.429 [DEBUG] [Thread-203991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:11:15.429 [INFO] [Thread-203991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] client lang: <none>
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] server lang: <none>
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] kex follows: False
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:11:15.430 [DEBUG] [Thread-203991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:11:15.431 [DEBUG] [Thread-203991] [transport.py] [_log()] Compression: none
2026-02-15T12:11:15.431 [DEBUG] [Thread-203991] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:11:15.439 [DEBUG] [Thread-203991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:11:15.439 [DEBUG] [Thread-203991] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:11:15.440 [DEBUG] [Thread-203991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:11:15.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:11:15.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:11:15.441 [DEBUG] [Thread-203991] [transport.py] [_log()] userauth is OK
2026-02-15T12:11:15.441 [DEBUG] [Thread-203991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:11:15.441 [DEBUG] [Thread-203991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:11:15.441 [DEBUG] [Thread-203991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:11:15.441 [DEBUG] [Thread-203991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:11:15.452 [INFO] [Thread-203991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:11:15.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:11:16.009 [DEBUG] [Thread-203991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:11:16.009 [DEBUG] [Thread-203991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:11:16.010 [DEBUG] [Thread-203991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:11:16.050 [DEBUG] [Thread-203991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:11:16.051 [DEBUG] [Thread-203991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:11:16.054 [DEBUG] [Thread-203991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:11:16.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:11:16.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:11:16.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:11:16.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:11:16.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:11:16.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:11:16.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:11:16.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:11:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:11:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.424056 -999.00  +20.20  12.87     25   -0.10 1 1 1 1 1   888    0 21.76 76.96 ----- 12.9 12.9 143.3 20.5 27.9 -29.6 26.8 -27.5 26.4 -26.5 27.4 -27.6
2026-02-15T12:11:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:11:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:11:16.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.424056
2026-02-15T12:11:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:11:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:11:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:11:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:11:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:11:16.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:11:00', tmtdew=23.22, humidity=20.59, cloud=0.0, wind=20.56, temperature=19.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:10:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:11:16.084 [DEBUG] [Thread-203991] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:11:16.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:11:16.181 [DEBUG] [Thread-203994] [transport.py] [_log()] starting thread (client mode): 0xa2d007f0
2026-02-15T12:11:16.181 [DEBUG] [Thread-203994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:11:16.196 [DEBUG] [Thread-203994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:11:16.197 [INFO] [Thread-203994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:11:16.204 [DEBUG] [Thread-203994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] client lang: <none>
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] server lang: <none>
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] kex follows: False
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] Compression: none
2026-02-15T12:11:16.205 [DEBUG] [Thread-203994] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:11:16.263 [DEBUG] [Thread-203994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:11:16.264 [DEBUG] [Thread-203994] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:11:16.264 [DEBUG] [Thread-203994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:11:16.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:11:16.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:11:16.325 [DEBUG] [Thread-203994] [transport.py] [_log()] userauth is OK
2026-02-15T12:11:16.325 [DEBUG] [Thread-203994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:11:16.325 [DEBUG] [Thread-203994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:11:16.326 [DEBUG] [Thread-203994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:11:16.326 [DEBUG] [Thread-203994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:11:16.353 [INFO] [Thread-203994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:11:16.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:11:16.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:11:17.178 [DEBUG] [Thread-203994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:11:17.178 [DEBUG] [Thread-203994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:11:17.226 [DEBUG] [Thread-203994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:11:17.227 [DEBUG] [Thread-203994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:11:17.236 [DEBUG] [Thread-203994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:11:17.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:11:17.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:11:17.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:11:17.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:11:17.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:11:17.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:11:17.273 [DEBUG] [Thread-203994] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:11:19.775 [DEBUG] [Thread-203996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:22.067 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:22.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:34.824 [DEBUG] [Thread-203997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:46.758 [DEBUG] [Thread-203998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:47.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:11:47.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:11:47.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:11:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 11, 36), 23.86, 19.81, 0.0, 15.99, 20.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:11:49.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:11:36
2026-02-15T12:11:49.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:11:49.735 [DEBUG] [Thread-203999] [transport.py] [_log()] starting thread (client mode): 0xa2d03d60
2026-02-15T12:11:49.735 [DEBUG] [Thread-203999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:11:49.751 [DEBUG] [Thread-203999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:11:49.752 [INFO] [Thread-203999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:11:49.753 [DEBUG] [Thread-203999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] client lang: <none>
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] server lang: <none>
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] kex follows: False
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] Compression: none
2026-02-15T12:11:49.754 [DEBUG] [Thread-203999] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:11:49.762 [DEBUG] [Thread-203999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:11:49.762 [DEBUG] [Thread-203999] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:11:49.763 [DEBUG] [Thread-203999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:11:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:11:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:11:49.764 [DEBUG] [Thread-203999] [transport.py] [_log()] userauth is OK
2026-02-15T12:11:49.764 [DEBUG] [Thread-203999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:11:49.764 [DEBUG] [Thread-203999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:11:49.764 [DEBUG] [Thread-203999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:11:49.764 [DEBUG] [Thread-203999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:11:49.783 [INFO] [Thread-203999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:11:49.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:11:49.860 [DEBUG] [Thread-204001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:11:50.438 [DEBUG] [Thread-203999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:11:50.438 [DEBUG] [Thread-203999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:11:50.439 [DEBUG] [Thread-203999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:11:50.479 [DEBUG] [Thread-203999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:11:50.480 [DEBUG] [Thread-203999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:11:50.483 [DEBUG] [Thread-203999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:11:50.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:11:50.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:11:50.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:11:50.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:11:50.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:11:50.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:11:50.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:11:50.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:11:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:11:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.424751 -999.00  +20.30  16.26     26   +0.40 1 1 1 1 1   888    0 21.78 73.34 ----- 16.3 16.3 118.4 21.8 28.0 -27.7 26.9 -27.6 26.6 -26.1 27.6 -28.0
2026-02-15T12:11:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:11:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:11:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.424751
2026-02-15T12:11:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:11:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:11:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:11:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:11:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:11:50.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:11:36', tmtdew=23.86, humidity=19.81, cloud=0.0, wind=15.99, temperature=20.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:11:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:11:50.509 [DEBUG] [Thread-203999] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:11:50.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:11:50.605 [DEBUG] [Thread-204003] [transport.py] [_log()] starting thread (client mode): 0xa5741a20
2026-02-15T12:11:50.605 [DEBUG] [Thread-204003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:11:50.620 [DEBUG] [Thread-204003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:11:50.620 [INFO] [Thread-204003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:11:50.627 [DEBUG] [Thread-204003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:11:50.627 [DEBUG] [Thread-204003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] client lang: <none>
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] server lang: <none>
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] kex follows: False
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] Compression: none
2026-02-15T12:11:50.628 [DEBUG] [Thread-204003] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:11:50.687 [DEBUG] [Thread-204003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:11:50.688 [DEBUG] [Thread-204003] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:11:50.688 [DEBUG] [Thread-204003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:11:50.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:11:50.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:11:50.743 [DEBUG] [Thread-204003] [transport.py] [_log()] userauth is OK
2026-02-15T12:11:50.744 [DEBUG] [Thread-204003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:11:50.744 [DEBUG] [Thread-204003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:11:50.744 [DEBUG] [Thread-204003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:11:50.744 [DEBUG] [Thread-204003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:11:50.762 [INFO] [Thread-204003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:11:50.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:11:50.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:11:51.599 [DEBUG] [Thread-204003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:11:51.599 [DEBUG] [Thread-204003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:11:51.648 [DEBUG] [Thread-204003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:11:51.648 [DEBUG] [Thread-204003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:11:51.656 [DEBUG] [Thread-204003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:11:51.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:11:51.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:11:51.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:11:51.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:11:51.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:11:51.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:11:51.687 [DEBUG] [Thread-204003] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:12:04.897 [DEBUG] [Thread-204005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:19.955 [DEBUG] [Thread-204006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:21.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:12:21.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:12:21.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:12:22.213 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:22.215 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:23.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 12, 12), 22.85, 21.37, 0.0, 12.86, 19.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:12:23.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:12:12
2026-02-15T12:12:24.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:12:24.574 [DEBUG] [Thread-204007] [transport.py] [_log()] starting thread (client mode): 0xa81d7ac0
2026-02-15T12:12:24.575 [DEBUG] [Thread-204007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:12:24.593 [DEBUG] [Thread-204007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:12:24.593 [INFO] [Thread-204007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:12:24.596 [DEBUG] [Thread-204007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:12:24.596 [DEBUG] [Thread-204007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:12:24.596 [DEBUG] [Thread-204007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:12:24.596 [DEBUG] [Thread-204007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] client lang: <none>
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] server lang: <none>
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] kex follows: False
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] Compression: none
2026-02-15T12:12:24.597 [DEBUG] [Thread-204007] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:12:24.616 [DEBUG] [Thread-204007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:12:24.617 [DEBUG] [Thread-204007] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:12:24.617 [DEBUG] [Thread-204007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:12:24.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:12:24.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:12:24.619 [DEBUG] [Thread-204007] [transport.py] [_log()] userauth is OK
2026-02-15T12:12:24.619 [DEBUG] [Thread-204007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:12:24.619 [DEBUG] [Thread-204007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:12:24.620 [DEBUG] [Thread-204007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:12:24.620 [DEBUG] [Thread-204007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:12:24.644 [INFO] [Thread-204007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:12:24.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:12:25.265 [DEBUG] [Thread-204007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:12:25.265 [DEBUG] [Thread-204007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:12:25.265 [DEBUG] [Thread-204007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:12:25.306 [DEBUG] [Thread-204007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:12:25.306 [DEBUG] [Thread-204007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:12:25.309 [DEBUG] [Thread-204007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:12:25.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:12:25.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:12:25.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:12:25.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:12:25.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:12:25.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:12:25.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:12:25.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:12:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:12:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.425098 -999.00  +20.20  11.10     26   +0.30 1 1 1 1 1   888    0 21.45 61.63 ----- 11.1 11.1 115.7 17.7 27.7 -32.8 26.9 -27.3 26.6 -25.8 27.6 -27.9
2026-02-15T12:12:25.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:12:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:12:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.425098
2026-02-15T12:12:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:12:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:12:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:12:25.334 [DEBUG] [Thread-204007] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:12:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:12:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:12:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:12:12', tmtdew=22.85, humidity=21.37, cloud=0.0, wind=12.86, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:12:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:12:25.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:12:25.432 [DEBUG] [Thread-204010] [transport.py] [_log()] starting thread (client mode): 0xa2d69d50
2026-02-15T12:12:25.432 [DEBUG] [Thread-204010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:12:25.447 [DEBUG] [Thread-204010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:12:25.447 [INFO] [Thread-204010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] client lang: <none>
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] server lang: <none>
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] kex follows: False
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] Compression: none
2026-02-15T12:12:25.458 [DEBUG] [Thread-204010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:12:25.515 [DEBUG] [Thread-204010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:12:25.515 [DEBUG] [Thread-204010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:12:25.516 [DEBUG] [Thread-204010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:12:25.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:12:25.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:12:25.578 [DEBUG] [Thread-204010] [transport.py] [_log()] userauth is OK
2026-02-15T12:12:25.578 [DEBUG] [Thread-204010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:12:25.578 [DEBUG] [Thread-204010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:12:25.578 [DEBUG] [Thread-204010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:12:25.579 [DEBUG] [Thread-204010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:12:25.599 [INFO] [Thread-204010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:12:25.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:12:25.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:12:26.417 [DEBUG] [Thread-204010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:12:26.417 [DEBUG] [Thread-204010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:12:26.470 [DEBUG] [Thread-204010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:12:26.470 [DEBUG] [Thread-204010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:12:26.482 [DEBUG] [Thread-204010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:12:26.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:12:26.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:12:26.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:12:26.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:12:26.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:12:26.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:12:26.526 [DEBUG] [Thread-204010] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:12:34.990 [DEBUG] [Thread-204012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:46.795 [DEBUG] [Thread-204013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:50.043 [DEBUG] [Thread-204014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:12:56.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:12:56.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:12:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:12:58.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 12, 47), 22.84, 21.22, 0.0, 19.64, 20.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:12:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:12:47
2026-02-15T12:12:58.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:12:58.971 [DEBUG] [Thread-204015] [transport.py] [_log()] starting thread (client mode): 0xa2db42b0
2026-02-15T12:12:58.971 [DEBUG] [Thread-204015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:12:58.990 [DEBUG] [Thread-204015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:12:58.990 [INFO] [Thread-204015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:12:58.993 [DEBUG] [Thread-204015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:12:58.993 [DEBUG] [Thread-204015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] client lang: <none>
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] server lang: <none>
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] kex follows: False
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] Compression: none
2026-02-15T12:12:58.994 [DEBUG] [Thread-204015] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:12:59.013 [DEBUG] [Thread-204015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:12:59.013 [DEBUG] [Thread-204015] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:12:59.014 [DEBUG] [Thread-204015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:12:59.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:12:59.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:12:59.016 [DEBUG] [Thread-204015] [transport.py] [_log()] userauth is OK
2026-02-15T12:12:59.016 [DEBUG] [Thread-204015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:12:59.016 [DEBUG] [Thread-204015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:12:59.016 [DEBUG] [Thread-204015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:12:59.016 [DEBUG] [Thread-204015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:12:59.040 [INFO] [Thread-204015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:12:59.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:12:59.640 [DEBUG] [Thread-204015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:12:59.640 [DEBUG] [Thread-204015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:12:59.640 [DEBUG] [Thread-204015] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:12:59.680 [DEBUG] [Thread-204015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:12:59.681 [DEBUG] [Thread-204015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:12:59.684 [DEBUG] [Thread-204015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:12:59.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:12:59.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:12:59.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:12:59.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:12:59.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:12:59.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:12:59.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:12:59.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:12:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:12:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.425445 -999.00  +20.60  21.73     26   +0.50 1 1 1 1 1   888    0 21.55 55.52 ----- 21.7 21.7 146.7 28.8 27.9 -27.7 27.1 -27.0 26.6 -26.6 27.7 -27.6
2026-02-15T12:12:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:12:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:12:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.425445
2026-02-15T12:12:59.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:12:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:12:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:12:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:12:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:12:59.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:12:47', tmtdew=22.84, humidity=21.22, cloud=0.0, wind=19.64, temperature=20.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:12:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:12:59.712 [DEBUG] [Thread-204015] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:12:59.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:12:59.809 [DEBUG] [Thread-204018] [transport.py] [_log()] starting thread (client mode): 0xa2dc0790
2026-02-15T12:12:59.809 [DEBUG] [Thread-204018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:12:59.823 [DEBUG] [Thread-204018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:12:59.824 [INFO] [Thread-204018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:12:59.831 [DEBUG] [Thread-204018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] client lang: <none>
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] server lang: <none>
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] kex follows: False
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:12:59.832 [DEBUG] [Thread-204018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:12:59.833 [DEBUG] [Thread-204018] [transport.py] [_log()] Compression: none
2026-02-15T12:12:59.833 [DEBUG] [Thread-204018] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:12:59.892 [DEBUG] [Thread-204018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:12:59.893 [DEBUG] [Thread-204018] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:12:59.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:12:59.894 [DEBUG] [Thread-204018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:12:59.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:12:59.948 [DEBUG] [Thread-204018] [transport.py] [_log()] userauth is OK
2026-02-15T12:12:59.949 [DEBUG] [Thread-204018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:12:59.949 [DEBUG] [Thread-204018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:12:59.949 [DEBUG] [Thread-204018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:12:59.949 [DEBUG] [Thread-204018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:12:59.967 [INFO] [Thread-204018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:12:59.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:12:59.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:13:00.773 [DEBUG] [Thread-204018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:13:00.774 [DEBUG] [Thread-204018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:13:00.821 [DEBUG] [Thread-204018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:13:00.822 [DEBUG] [Thread-204018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:13:00.831 [DEBUG] [Thread-204018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:13:00.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:13:00.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:13:00.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:13:00.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:13:00.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:13:00.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:13:00.874 [DEBUG] [Thread-204018] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:13:05.084 [DEBUG] [Thread-204020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:13:20.134 [DEBUG] [Thread-204021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:13:22.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:13:22.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:13:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:13:30.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:13:30.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
2026-02-15T12:13:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 13, 24), 23.02, 20.97, 0.0, 17.29, 20.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:13:33.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:13:24
2026-02-15T12:13:33.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:13:33.598 [DEBUG] [Thread-204022] [transport.py] [_log()] starting thread (client mode): 0xa57c2230
2026-02-15T12:13:33.598 [DEBUG] [Thread-204022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:13:33.618 [DEBUG] [Thread-204022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:13:33.618 [INFO] [Thread-204022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] client lang: <none>
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] server lang: <none>
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] kex follows: False
2026-02-15T12:13:33.621 [DEBUG] [Thread-204022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:13:33.622 [DEBUG] [Thread-204022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:13:33.622 [DEBUG] [Thread-204022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:13:33.622 [DEBUG] [Thread-204022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:13:33.622 [DEBUG] [Thread-204022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:13:33.622 [DEBUG] [Thread-204022] [transport.py] [_log()] Compression: none
2026-02-15T12:13:33.622 [DEBUG] [Thread-204022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:13:33.638 [DEBUG] [Thread-204022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:13:33.639 [DEBUG] [Thread-204022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:13:33.639 [DEBUG] [Thread-204022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:13:33.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:13:33.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:13:33.640 [DEBUG] [Thread-204022] [transport.py] [_log()] userauth is OK
2026-02-15T12:13:33.641 [DEBUG] [Thread-204022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:13:33.641 [DEBUG] [Thread-204022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:13:33.641 [DEBUG] [Thread-204022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:13:33.641 [DEBUG] [Thread-204022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:13:33.673 [INFO] [Thread-204022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:13:33.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:13:34.253 [DEBUG] [Thread-204022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:13:34.253 [DEBUG] [Thread-204022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:13:34.253 [DEBUG] [Thread-204022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:13:34.295 [DEBUG] [Thread-204022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:13:34.295 [DEBUG] [Thread-204022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:13:34.298 [DEBUG] [Thread-204022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:13:34.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:13:34.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:13:34.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:13:34.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:13:34.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:13:34.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:13:34.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:13:34.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:13:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:13:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.425793 -999.00  +20.20  14.25     24   -0.40 1 1 1 1 1   888    0 20.87 50.25 ----- 14.2 14.2 170.8 27.2 27.9 -29.4 26.9 -28.5 26.6 -27.2 27.5 -29.7
2026-02-15T12:13:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:13:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:13:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.425793
2026-02-15T12:13:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:13:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:13:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:13:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:13:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:13:34.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:13:24', tmtdew=23.02, humidity=20.97, cloud=0.0, wind=17.29, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:13:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:13:34.318 [DEBUG] [Thread-204022] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:13:34.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:13:34.419 [DEBUG] [Thread-204025] [transport.py] [_log()] starting thread (client mode): 0xa5741720
2026-02-15T12:13:34.420 [DEBUG] [Thread-204025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:13:34.435 [DEBUG] [Thread-204025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:13:34.435 [INFO] [Thread-204025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:13:34.443 [DEBUG] [Thread-204025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:13:34.443 [DEBUG] [Thread-204025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:13:34.443 [DEBUG] [Thread-204025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] client lang: <none>
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] server lang: <none>
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] kex follows: False
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] Compression: none
2026-02-15T12:13:34.444 [DEBUG] [Thread-204025] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:13:34.501 [DEBUG] [Thread-204025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:13:34.502 [DEBUG] [Thread-204025] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:13:34.503 [DEBUG] [Thread-204025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:13:34.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:13:34.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:13:34.561 [DEBUG] [Thread-204025] [transport.py] [_log()] userauth is OK
2026-02-15T12:13:34.561 [DEBUG] [Thread-204025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:13:34.562 [DEBUG] [Thread-204025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:13:34.562 [DEBUG] [Thread-204025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:13:34.562 [DEBUG] [Thread-204025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:13:34.581 [INFO] [Thread-204025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:13:34.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:13:34.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:13:35.169 [DEBUG] [Thread-204027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:13:35.382 [DEBUG] [Thread-204025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:13:35.383 [DEBUG] [Thread-204025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:13:35.430 [DEBUG] [Thread-204025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:13:35.431 [DEBUG] [Thread-204025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:13:35.440 [DEBUG] [Thread-204025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:13:35.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:13:35.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:13:35.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:13:35.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:13:35.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:13:35.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:13:35.476 [DEBUG] [Thread-204025] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:13:46.832 [DEBUG] [Thread-204028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:13:50.224 [DEBUG] [Thread-204029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:05.260 [DEBUG] [Thread-204030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:05.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:14:05.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:14:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:14:07.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 13, 24), 23.02, 20.97, 0.0, 17.29, 20.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:14:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:13:24
2026-02-15T12:14:07.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:14:08.037 [DEBUG] [Thread-204031] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T12:14:08.037 [DEBUG] [Thread-204031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:14:08.053 [DEBUG] [Thread-204031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:14:08.053 [INFO] [Thread-204031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] client lang: <none>
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] server lang: <none>
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] kex follows: False
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] Compression: none
2026-02-15T12:14:08.057 [DEBUG] [Thread-204031] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:14:08.072 [DEBUG] [Thread-204031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:14:08.073 [DEBUG] [Thread-204031] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:14:08.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:14:08.073 [DEBUG] [Thread-204031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:14:08.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:14:08.074 [DEBUG] [Thread-204031] [transport.py] [_log()] userauth is OK
2026-02-15T12:14:08.074 [DEBUG] [Thread-204031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:14:08.074 [DEBUG] [Thread-204031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:14:08.074 [DEBUG] [Thread-204031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:14:08.074 [DEBUG] [Thread-204031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:14:08.083 [INFO] [Thread-204031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:14:08.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:14:08.763 [DEBUG] [Thread-204031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:14:08.773 [DEBUG] [Thread-204031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:14:08.773 [DEBUG] [Thread-204031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:14:08.804 [DEBUG] [Thread-204031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:14:08.804 [DEBUG] [Thread-204031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:14:08.806 [DEBUG] [Thread-204031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:14:08.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:14:08.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:14:08.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:14:08.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:14:08.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:14:08.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:14:08.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:14:08.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:14:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:14:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.426140 -999.00  +20.40  20.44     25   +0.10 1 1 1 1 1   888    0 21.17 47.12 ----- 20.4 20.4 136.4 26.1 27.9 -27.8 26.8 -28.0 26.6 -26.1 27.5 -28.1
2026-02-15T12:14:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:14:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:14:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.426140
2026-02-15T12:14:08.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:14:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:14:08.830 [DEBUG] [Thread-204031] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:14:08.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:14:08.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:14:08.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:14:08.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:13:24', tmtdew=23.02, humidity=20.97, cloud=0.0, wind=17.29, temperature=20.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:13:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:14:08.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:14:08.932 [DEBUG] [Thread-204034] [transport.py] [_log()] starting thread (client mode): 0xa57c3220
2026-02-15T12:14:08.933 [DEBUG] [Thread-204034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:14:08.947 [DEBUG] [Thread-204034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:14:08.948 [INFO] [Thread-204034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] client lang: <none>
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] server lang: <none>
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] kex follows: False
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] Compression: none
2026-02-15T12:14:08.955 [DEBUG] [Thread-204034] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:14:09.014 [DEBUG] [Thread-204034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:14:09.014 [DEBUG] [Thread-204034] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:14:09.015 [DEBUG] [Thread-204034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:14:09.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:14:09.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:14:09.074 [DEBUG] [Thread-204034] [transport.py] [_log()] userauth is OK
2026-02-15T12:14:09.074 [DEBUG] [Thread-204034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:14:09.074 [DEBUG] [Thread-204034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:14:09.074 [DEBUG] [Thread-204034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:14:09.075 [DEBUG] [Thread-204034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:14:09.099 [INFO] [Thread-204034] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:14:09.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:14:09.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:14:09.953 [DEBUG] [Thread-204034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:14:09.953 [DEBUG] [Thread-204034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:14:10.001 [DEBUG] [Thread-204034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:14:10.002 [DEBUG] [Thread-204034] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:14:10.011 [DEBUG] [Thread-204034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:14:10.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:14:10.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:14:10.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:14:10.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:14:10.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:14:10.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:14:10.047 [DEBUG] [Thread-204034] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:14:20.297 [DEBUG] [Thread-204036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:22.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:22.497 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:35.343 [DEBUG] [Thread-204037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:40.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:14:40.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:14:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:14:42.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 13, 59), 23.97, 19.44, 0.0, 19.89, 20.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:14:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:13:59
2026-02-15T12:14:42.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:14:42.618 [DEBUG] [Thread-204038] [transport.py] [_log()] starting thread (client mode): 0xa57c2c20
2026-02-15T12:14:42.618 [DEBUG] [Thread-204038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:14:42.641 [DEBUG] [Thread-204038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:14:42.641 [INFO] [Thread-204038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] client lang: <none>
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] server lang: <none>
2026-02-15T12:14:42.644 [DEBUG] [Thread-204038] [transport.py] [_log()] kex follows: False
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] Compression: none
2026-02-15T12:14:42.645 [DEBUG] [Thread-204038] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:14:42.663 [DEBUG] [Thread-204038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:14:42.664 [DEBUG] [Thread-204038] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:14:42.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:14:42.665 [DEBUG] [Thread-204038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:14:42.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:14:42.670 [DEBUG] [Thread-204038] [transport.py] [_log()] userauth is OK
2026-02-15T12:14:42.670 [DEBUG] [Thread-204038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:14:42.670 [DEBUG] [Thread-204038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:14:42.670 [DEBUG] [Thread-204038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:14:42.671 [DEBUG] [Thread-204038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:14:42.709 [INFO] [Thread-204038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:14:42.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:14:43.347 [DEBUG] [Thread-204038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:14:43.347 [DEBUG] [Thread-204038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:14:43.347 [DEBUG] [Thread-204038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:14:43.388 [DEBUG] [Thread-204038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:14:43.388 [DEBUG] [Thread-204038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:14:43.391 [DEBUG] [Thread-204038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:14:43.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:14:43.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:14:43.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:14:43.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:14:43.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:14:43.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:14:43.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:14:43.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:14:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:14:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.426487 -999.00  +20.70  16.92     25   +0.30 1 1 1 1 1   888    0 20.90 44.38 ----- 16.9 16.9 156.4 23.7 27.9 -27.8 26.9 -27.2 26.6 -25.8 27.6 -29.0
2026-02-15T12:14:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:14:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:14:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.426487
2026-02-15T12:14:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:14:43.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:14:43.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:14:43.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:14:43.413 [DEBUG] [Thread-204038] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:14:43.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:14:43.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:13:59', tmtdew=23.97, humidity=19.44, cloud=0.0, wind=19.89, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:14:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:14:43.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:14:43.510 [DEBUG] [Thread-204041] [transport.py] [_log()] starting thread (client mode): 0xa575baf0
2026-02-15T12:14:43.510 [DEBUG] [Thread-204041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:14:43.525 [DEBUG] [Thread-204041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:14:43.525 [INFO] [Thread-204041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] client lang: <none>
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] server lang: <none>
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] kex follows: False
2026-02-15T12:14:43.533 [DEBUG] [Thread-204041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:14:43.534 [DEBUG] [Thread-204041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:14:43.534 [DEBUG] [Thread-204041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:14:43.534 [DEBUG] [Thread-204041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:14:43.534 [DEBUG] [Thread-204041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:14:43.534 [DEBUG] [Thread-204041] [transport.py] [_log()] Compression: none
2026-02-15T12:14:43.534 [DEBUG] [Thread-204041] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:14:43.593 [DEBUG] [Thread-204041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:14:43.594 [DEBUG] [Thread-204041] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:14:43.595 [DEBUG] [Thread-204041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:14:43.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:14:43.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:14:43.650 [DEBUG] [Thread-204041] [transport.py] [_log()] userauth is OK
2026-02-15T12:14:43.650 [DEBUG] [Thread-204041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:14:43.650 [DEBUG] [Thread-204041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:14:43.650 [DEBUG] [Thread-204041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:14:43.650 [DEBUG] [Thread-204041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:14:43.669 [INFO] [Thread-204041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:14:43.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:14:43.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:14:44.491 [DEBUG] [Thread-204041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:14:44.491 [DEBUG] [Thread-204041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:14:44.539 [DEBUG] [Thread-204041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:14:44.540 [DEBUG] [Thread-204041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:14:44.549 [DEBUG] [Thread-204041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:14:44.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:14:44.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:14:44.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:14:44.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:14:44.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:14:44.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:14:44.586 [DEBUG] [Thread-204041] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:14:46.877 [DEBUG] [Thread-204043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:14:50.380 [DEBUG] [Thread-204044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:05.419 [DEBUG] [Thread-204045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:14.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:15:14.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:15:14.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:15:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 14, 35), 25.13, 18.22, 0.0, 21.81, 21.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:15:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:14:35
2026-02-15T12:15:16.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:15:17.158 [DEBUG] [Thread-204046] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-15T12:15:17.158 [DEBUG] [Thread-204046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:15:17.169 [DEBUG] [Thread-204046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:15:17.169 [INFO] [Thread-204046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:15:17.170 [DEBUG] [Thread-204046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] client lang: <none>
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] server lang: <none>
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] kex follows: False
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] Compression: none
2026-02-15T12:15:17.171 [DEBUG] [Thread-204046] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:15:17.182 [DEBUG] [Thread-204046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:15:17.183 [DEBUG] [Thread-204046] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:15:17.183 [DEBUG] [Thread-204046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:15:17.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:15:17.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:15:17.184 [DEBUG] [Thread-204046] [transport.py] [_log()] userauth is OK
2026-02-15T12:15:17.184 [DEBUG] [Thread-204046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:15:17.184 [DEBUG] [Thread-204046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:15:17.184 [DEBUG] [Thread-204046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:15:17.184 [DEBUG] [Thread-204046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:15:17.200 [INFO] [Thread-204046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:15:17.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:15:17.732 [DEBUG] [Thread-204046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:15:17.732 [DEBUG] [Thread-204046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:15:17.732 [DEBUG] [Thread-204046] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:15:17.773 [DEBUG] [Thread-204046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:15:17.773 [DEBUG] [Thread-204046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:15:17.776 [DEBUG] [Thread-204046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:15:17.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:15:17.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:15:17.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:15:17.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:15:17.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:15:17.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:15:17.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:15:17.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:15:17.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:15:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.426834 -999.00  +20.70  20.75     25   +0.40 1 1 1 1 1   888    0 20.74 39.93 ----- 20.8 20.8 146.6 24.4 27.9 -29.1 26.9 -28.0 26.7 -25.8 27.7 -27.4
2026-02-15T12:15:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:15:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:15:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.426834
2026-02-15T12:15:17.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:15:17.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:15:17.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:15:17.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:15:17.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:15:17.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:14:35', tmtdew=25.13, humidity=18.22, cloud=0.0, wind=21.81, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:14:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:15:17.806 [DEBUG] [Thread-204046] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:15:17.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:15:17.904 [DEBUG] [Thread-204049] [transport.py] [_log()] starting thread (client mode): 0xa57c2380
2026-02-15T12:15:17.904 [DEBUG] [Thread-204049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:15:17.919 [DEBUG] [Thread-204049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:15:17.919 [INFO] [Thread-204049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:15:17.927 [DEBUG] [Thread-204049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:15:17.927 [DEBUG] [Thread-204049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:15:17.927 [DEBUG] [Thread-204049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] client lang: <none>
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] server lang: <none>
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] kex follows: False
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] Compression: none
2026-02-15T12:15:17.928 [DEBUG] [Thread-204049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:15:17.990 [DEBUG] [Thread-204049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:15:17.991 [DEBUG] [Thread-204049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:15:17.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:15:17.992 [DEBUG] [Thread-204049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:15:17.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:15:18.046 [DEBUG] [Thread-204049] [transport.py] [_log()] userauth is OK
2026-02-15T12:15:18.047 [DEBUG] [Thread-204049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:15:18.047 [DEBUG] [Thread-204049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:15:18.047 [DEBUG] [Thread-204049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:15:18.047 [DEBUG] [Thread-204049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:15:18.066 [INFO] [Thread-204049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:15:18.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:15:18.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:15:18.901 [DEBUG] [Thread-204049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:15:18.902 [DEBUG] [Thread-204049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:15:18.957 [DEBUG] [Thread-204049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:15:18.958 [DEBUG] [Thread-204049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:15:18.966 [DEBUG] [Thread-204049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:15:18.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:15:18.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:15:18.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:15:18.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:15:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:15:18.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:15:19.002 [DEBUG] [Thread-204049] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:15:20.459 [DEBUG] [Thread-204051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:22.640 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:22.641 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:35.512 [DEBUG] [Thread-204052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:46.905 [DEBUG] [Thread-204053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:49.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:15:49.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:15:49.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:15:50.547 [DEBUG] [Thread-204054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:15:50.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 15, 10), 23.64, 20.03, 0.0, 22.85, 20.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:15:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:15:10
2026-02-15T12:15:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:15:51.513 [DEBUG] [Thread-204055] [transport.py] [_log()] starting thread (client mode): 0xa2d7b940
2026-02-15T12:15:51.513 [DEBUG] [Thread-204055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:15:51.528 [DEBUG] [Thread-204055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:15:51.528 [INFO] [Thread-204055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] client lang: <none>
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] server lang: <none>
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] kex follows: False
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] Compression: none
2026-02-15T12:15:51.531 [DEBUG] [Thread-204055] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:15:51.543 [DEBUG] [Thread-204055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:15:51.543 [DEBUG] [Thread-204055] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:15:51.544 [DEBUG] [Thread-204055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:15:51.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:15:51.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:15:51.544 [DEBUG] [Thread-204055] [transport.py] [_log()] userauth is OK
2026-02-15T12:15:51.544 [DEBUG] [Thread-204055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:15:51.544 [DEBUG] [Thread-204055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:15:51.544 [DEBUG] [Thread-204055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:15:51.544 [DEBUG] [Thread-204055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:15:51.553 [INFO] [Thread-204055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:15:51.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:15:52.155 [DEBUG] [Thread-204055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:15:52.156 [DEBUG] [Thread-204055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:15:52.156 [DEBUG] [Thread-204055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:15:52.197 [DEBUG] [Thread-204055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:15:52.197 [DEBUG] [Thread-204055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:15:52.200 [DEBUG] [Thread-204055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:15:52.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:15:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:15:52.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:15:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:15:52.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:15:52.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:15:52.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.427529 -999.00  +20.40  16.14     25   +0.20 1 1 1 1 1   888    0 21.03 39.97 ----- 16.1 16.1 138.8 21.5 28.1 -28.0 27.1 -27.2 26.8 -27.1 27.7 -28.1
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.427529
2026-02-15T12:15:52.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:15:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:15:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:15:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:15:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:15:52.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:15:10', tmtdew=23.64, humidity=20.03, cloud=0.0, wind=22.85, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:15:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:15:52.219 [DEBUG] [Thread-204055] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:15:52.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:15:52.319 [DEBUG] [Thread-204058] [transport.py] [_log()] starting thread (client mode): 0xa2dc10c0
2026-02-15T12:15:52.319 [DEBUG] [Thread-204058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:15:52.336 [DEBUG] [Thread-204058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:15:52.336 [INFO] [Thread-204058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] client lang: <none>
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] server lang: <none>
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] kex follows: False
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] Compression: none
2026-02-15T12:15:52.344 [DEBUG] [Thread-204058] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:15:52.404 [DEBUG] [Thread-204058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:15:52.404 [DEBUG] [Thread-204058] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:15:52.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:15:52.405 [DEBUG] [Thread-204058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:15:52.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:15:52.464 [DEBUG] [Thread-204058] [transport.py] [_log()] userauth is OK
2026-02-15T12:15:52.464 [DEBUG] [Thread-204058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:15:52.464 [DEBUG] [Thread-204058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:15:52.464 [DEBUG] [Thread-204058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:15:52.464 [DEBUG] [Thread-204058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:15:52.480 [INFO] [Thread-204058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:15:52.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:15:52.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:15:53.323 [DEBUG] [Thread-204058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:15:53.324 [DEBUG] [Thread-204058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:15:53.371 [DEBUG] [Thread-204058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:15:53.371 [DEBUG] [Thread-204058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:15:53.382 [DEBUG] [Thread-204058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:15:53.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:15:53.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:15:53.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:15:53.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:15:53.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:15:53.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:15:53.419 [DEBUG] [Thread-204058] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:16:05.587 [DEBUG] [Thread-204060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:20.651 [DEBUG] [Thread-204061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:22.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:22.783 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:23.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:16:23.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:16:23.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:16:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 15, 45), 24.39, 19.12, 0.0, 21.3, 20.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:16:25.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:15:45
2026-02-15T12:16:25.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:16:25.866 [DEBUG] [Thread-204062] [transport.py] [_log()] starting thread (client mode): 0xa575a9e0
2026-02-15T12:16:25.866 [DEBUG] [Thread-204062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:16:25.887 [DEBUG] [Thread-204062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:16:25.888 [INFO] [Thread-204062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] client lang: <none>
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] server lang: <none>
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] kex follows: False
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:16:25.891 [DEBUG] [Thread-204062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:16:25.892 [DEBUG] [Thread-204062] [transport.py] [_log()] Compression: none
2026-02-15T12:16:25.892 [DEBUG] [Thread-204062] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:16:25.909 [DEBUG] [Thread-204062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:16:25.910 [DEBUG] [Thread-204062] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:16:25.910 [DEBUG] [Thread-204062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:16:25.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:16:25.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:16:25.913 [DEBUG] [Thread-204062] [transport.py] [_log()] userauth is OK
2026-02-15T12:16:25.913 [DEBUG] [Thread-204062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:16:25.913 [DEBUG] [Thread-204062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:16:25.914 [DEBUG] [Thread-204062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:16:25.914 [DEBUG] [Thread-204062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:16:25.928 [INFO] [Thread-204062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:16:25.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:16:26.496 [DEBUG] [Thread-204062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:16:26.497 [DEBUG] [Thread-204062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:16:26.497 [DEBUG] [Thread-204062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:16:26.537 [DEBUG] [Thread-204062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:16:26.538 [DEBUG] [Thread-204062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:16:26.541 [DEBUG] [Thread-204062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:16:26.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:16:26.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:16:26.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:16:26.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:16:26.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:16:26.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:16:26.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:16:26.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:16:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:16:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.427876 -999.00  +20.00  13.14     26   +0.10 1 1 1 1 1   888    0 20.93 38.84 ----- 13.1 13.1 152.0 17.1 28.0 -28.2 27.1 -27.3 26.8 -26.3 27.6 -28.5
2026-02-15T12:16:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:16:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:16:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.427876
2026-02-15T12:16:26.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:16:26.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:16:26.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:16:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:16:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:16:26.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:15:45', tmtdew=24.39, humidity=19.12, cloud=0.0, wind=21.3, temperature=20.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:16:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:16:26.568 [DEBUG] [Thread-204062] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:16:26.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:16:26.693 [DEBUG] [Thread-204065] [transport.py] [_log()] starting thread (client mode): 0xa575a260
2026-02-15T12:16:26.694 [DEBUG] [Thread-204065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:16:26.708 [DEBUG] [Thread-204065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:16:26.708 [INFO] [Thread-204065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:16:26.715 [DEBUG] [Thread-204065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] client lang: <none>
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] server lang: <none>
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] kex follows: False
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:16:26.716 [DEBUG] [Thread-204065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:16:26.717 [DEBUG] [Thread-204065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:16:26.717 [DEBUG] [Thread-204065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:16:26.717 [DEBUG] [Thread-204065] [transport.py] [_log()] Compression: none
2026-02-15T12:16:26.717 [DEBUG] [Thread-204065] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:16:26.777 [DEBUG] [Thread-204065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:16:26.777 [DEBUG] [Thread-204065] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:16:26.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:16:26.779 [DEBUG] [Thread-204065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:16:26.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:16:26.835 [DEBUG] [Thread-204065] [transport.py] [_log()] userauth is OK
2026-02-15T12:16:26.835 [DEBUG] [Thread-204065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:16:26.835 [DEBUG] [Thread-204065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:16:26.836 [DEBUG] [Thread-204065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:16:26.836 [DEBUG] [Thread-204065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:16:26.860 [INFO] [Thread-204065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:16:26.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:16:26.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:16:27.705 [DEBUG] [Thread-204065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:16:27.705 [DEBUG] [Thread-204065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:16:27.753 [DEBUG] [Thread-204065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:16:27.754 [DEBUG] [Thread-204065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:16:27.763 [DEBUG] [Thread-204065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:16:27.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:16:27.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:16:27.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:16:27.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:16:27.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:16:27.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:16:27.800 [DEBUG] [Thread-204065] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:16:35.683 [DEBUG] [Thread-204067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:46.940 [DEBUG] [Thread-204068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:50.734 [DEBUG] [Thread-204069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:16:57.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:16:57.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:16:57.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:16:59.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 16, 21), 24.29, 19.23, 0.0, 15.97, 20.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:16:59.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:16:21
2026-02-15T12:17:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:17:00.417 [DEBUG] [Thread-204070] [transport.py] [_log()] starting thread (client mode): 0xa57c3d60
2026-02-15T12:17:00.417 [DEBUG] [Thread-204070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:17:00.437 [DEBUG] [Thread-204070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:17:00.437 [INFO] [Thread-204070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:17:00.439 [DEBUG] [Thread-204070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] client lang: <none>
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] server lang: <none>
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] kex follows: False
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] Compression: none
2026-02-15T12:17:00.440 [DEBUG] [Thread-204070] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:17:00.463 [DEBUG] [Thread-204070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:17:00.463 [DEBUG] [Thread-204070] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:17:00.464 [DEBUG] [Thread-204070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:17:00.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:17:00.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:17:00.465 [DEBUG] [Thread-204070] [transport.py] [_log()] userauth is OK
2026-02-15T12:17:00.466 [DEBUG] [Thread-204070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:17:00.466 [DEBUG] [Thread-204070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:17:00.466 [DEBUG] [Thread-204070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:17:00.466 [DEBUG] [Thread-204070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:17:00.490 [INFO] [Thread-204070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:17:00.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:17:01.088 [DEBUG] [Thread-204070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:17:01.088 [DEBUG] [Thread-204070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:17:01.088 [DEBUG] [Thread-204070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:17:01.129 [DEBUG] [Thread-204070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:17:01.129 [DEBUG] [Thread-204070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:17:01.132 [DEBUG] [Thread-204070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:17:01.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:17:01.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:17:01.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:17:01.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:17:01.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:17:01.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:17:01.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:17:01.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:17:01.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:17:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.428223 -999.00  +20.20  12.28     26   +0.30 1 1 1 1 1   888    0 21.13 38.79 ----- 12.3 12.3 172.3 23.1 27.9 -29.7 26.7 -31.5 26.7 -26.8 27.6 -28.4
2026-02-15T12:17:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:17:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:17:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.428223
2026-02-15T12:17:01.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:17:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:17:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:17:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:17:01.153 [DEBUG] [Thread-204070] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:17:01.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:17:01.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:16:21', tmtdew=24.29, humidity=19.23, cloud=0.0, wind=15.97, temperature=20.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:16:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:17:01.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:17:01.249 [DEBUG] [Thread-204073] [transport.py] [_log()] starting thread (client mode): 0xa2db7700
2026-02-15T12:17:01.249 [DEBUG] [Thread-204073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:17:01.264 [DEBUG] [Thread-204073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:17:01.264 [INFO] [Thread-204073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:17:01.271 [DEBUG] [Thread-204073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] client lang: <none>
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] server lang: <none>
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] kex follows: False
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:17:01.272 [DEBUG] [Thread-204073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:17:01.273 [DEBUG] [Thread-204073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:17:01.273 [DEBUG] [Thread-204073] [transport.py] [_log()] Compression: none
2026-02-15T12:17:01.273 [DEBUG] [Thread-204073] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:17:01.330 [DEBUG] [Thread-204073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:17:01.331 [DEBUG] [Thread-204073] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:17:01.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:17:01.332 [DEBUG] [Thread-204073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:17:01.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:17:01.390 [DEBUG] [Thread-204073] [transport.py] [_log()] userauth is OK
2026-02-15T12:17:01.390 [DEBUG] [Thread-204073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:17:01.390 [DEBUG] [Thread-204073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:17:01.390 [DEBUG] [Thread-204073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:17:01.391 [DEBUG] [Thread-204073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:17:01.410 [INFO] [Thread-204073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:17:01.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:17:01.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:17:02.283 [DEBUG] [Thread-204073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:17:02.283 [DEBUG] [Thread-204073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:17:02.331 [DEBUG] [Thread-204073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:17:02.331 [DEBUG] [Thread-204073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:17:02.341 [DEBUG] [Thread-204073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:17:02.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:17:02.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:17:02.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:17:02.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:17:02.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:17:02.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:17:02.378 [DEBUG] [Thread-204073] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:17:05.773 [DEBUG] [Thread-204075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:17:20.826 [DEBUG] [Thread-204076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:17:22.923 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:17:22.924 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:17:32.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:17:32.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:17:32.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:17:34.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 16, 56), 23.48, 20.44, 0.0, 18.92, 20.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:17:34.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:16:56
2026-02-15T12:17:34.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:17:34.961 [DEBUG] [Thread-204077] [transport.py] [_log()] starting thread (client mode): 0xa2db6230
2026-02-15T12:17:34.961 [DEBUG] [Thread-204077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:17:34.978 [DEBUG] [Thread-204077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:17:34.978 [INFO] [Thread-204077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] client lang: <none>
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] server lang: <none>
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] kex follows: False
2026-02-15T12:17:34.980 [DEBUG] [Thread-204077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:17:34.981 [DEBUG] [Thread-204077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:17:34.981 [DEBUG] [Thread-204077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:17:34.981 [DEBUG] [Thread-204077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:17:34.981 [DEBUG] [Thread-204077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:17:34.981 [DEBUG] [Thread-204077] [transport.py] [_log()] Compression: none
2026-02-15T12:17:34.981 [DEBUG] [Thread-204077] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:17:34.992 [DEBUG] [Thread-204077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:17:34.993 [DEBUG] [Thread-204077] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:17:34.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:17:34.994 [DEBUG] [Thread-204077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:17:34.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:17:34.997 [DEBUG] [Thread-204077] [transport.py] [_log()] userauth is OK
2026-02-15T12:17:34.997 [DEBUG] [Thread-204077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:17:34.997 [DEBUG] [Thread-204077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:17:34.997 [DEBUG] [Thread-204077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:17:34.997 [DEBUG] [Thread-204077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:17:35.022 [INFO] [Thread-204077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:17:35.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:17:35.635 [DEBUG] [Thread-204077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:17:35.636 [DEBUG] [Thread-204077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:17:35.636 [DEBUG] [Thread-204077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:17:35.676 [DEBUG] [Thread-204077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:17:35.677 [DEBUG] [Thread-204077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:17:35.680 [DEBUG] [Thread-204077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:17:35.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:17:35.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:17:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:17:35.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:17:35.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:17:35.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:17:35.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:17:35.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:17:35.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:17:35.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.428570 -999.00  +20.30  17.19     26   +0.50 1 1 1 1 1   888    0 21.08 35.66 ----- 17.2 17.2 181.2 23.0 28.0 -28.7 26.7 -31.7 26.6 -26.2 27.7 -28.4
2026-02-15T12:17:35.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:17:35.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:17:35.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.428570
2026-02-15T12:17:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:17:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:17:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:17:35.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:17:35.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:17:35.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:16:56', tmtdew=23.48, humidity=20.44, cloud=0.0, wind=18.92, temperature=20.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:17:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:17:35.709 [DEBUG] [Thread-204077] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:17:35.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:17:35.804 [DEBUG] [Thread-204080] [transport.py] [_log()] starting thread (client mode): 0xa2d025f0
2026-02-15T12:17:35.804 [DEBUG] [Thread-204080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:17:35.819 [DEBUG] [Thread-204080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:17:35.819 [INFO] [Thread-204080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:17:35.826 [DEBUG] [Thread-204080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:17:35.826 [DEBUG] [Thread-204080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:17:35.826 [DEBUG] [Thread-204080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:17:35.826 [DEBUG] [Thread-204080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:35.826 [DEBUG] [Thread-204080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:17:35.826 [DEBUG] [Thread-204080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] client lang: <none>
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] server lang: <none>
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] kex follows: False
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] Compression: none
2026-02-15T12:17:35.827 [DEBUG] [Thread-204080] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:17:35.862 [DEBUG] [Thread-204082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:17:35.887 [DEBUG] [Thread-204080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:17:35.887 [DEBUG] [Thread-204080] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:17:35.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:17:35.888 [DEBUG] [Thread-204080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:17:35.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:17:35.944 [DEBUG] [Thread-204080] [transport.py] [_log()] userauth is OK
2026-02-15T12:17:35.944 [DEBUG] [Thread-204080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:17:35.944 [DEBUG] [Thread-204080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:17:35.944 [DEBUG] [Thread-204080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:17:35.944 [DEBUG] [Thread-204080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:17:35.963 [INFO] [Thread-204080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:17:35.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:17:35.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:17:36.786 [DEBUG] [Thread-204080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:17:36.786 [DEBUG] [Thread-204080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:17:36.833 [DEBUG] [Thread-204080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:17:36.833 [DEBUG] [Thread-204080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:17:36.843 [DEBUG] [Thread-204080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:17:36.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:17:36.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:17:36.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:17:36.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:17:36.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:17:36.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:17:36.884 [DEBUG] [Thread-204080] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:17:46.978 [DEBUG] [Thread-204083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:17:50.916 [DEBUG] [Thread-204084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:05.952 [DEBUG] [Thread-204085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:06.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:18:06.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:18:06.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:18:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 17, 32), 23.5, 20.41, 0.0, 17.75, 20.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:18:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:17:32
2026-02-15T12:18:09.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:18:09.575 [DEBUG] [Thread-204086] [transport.py] [_log()] starting thread (client mode): 0xa2db4b50
2026-02-15T12:18:09.575 [DEBUG] [Thread-204086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:18:09.592 [DEBUG] [Thread-204086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:18:09.592 [INFO] [Thread-204086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:18:09.595 [DEBUG] [Thread-204086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] client lang: <none>
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] server lang: <none>
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] kex follows: False
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] Compression: none
2026-02-15T12:18:09.596 [DEBUG] [Thread-204086] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:18:09.614 [DEBUG] [Thread-204086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:18:09.614 [DEBUG] [Thread-204086] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:18:09.615 [DEBUG] [Thread-204086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:18:09.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:18:09.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:18:09.617 [DEBUG] [Thread-204086] [transport.py] [_log()] userauth is OK
2026-02-15T12:18:09.617 [DEBUG] [Thread-204086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:18:09.617 [DEBUG] [Thread-204086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:18:09.617 [DEBUG] [Thread-204086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:18:09.618 [DEBUG] [Thread-204086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:18:09.636 [INFO] [Thread-204086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:18:09.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:18:10.303 [DEBUG] [Thread-204086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:18:10.303 [DEBUG] [Thread-204086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:18:10.304 [DEBUG] [Thread-204086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:18:10.344 [DEBUG] [Thread-204086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:18:10.345 [DEBUG] [Thread-204086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:18:10.348 [DEBUG] [Thread-204086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:18:10.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:18:10.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:18:10.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:18:10.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:18:10.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:18:10.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:18:10.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:18:10.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:18:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:18:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.428917 -999.00  +20.50  17.53     26   +0.30 1 1 1 1 1   888    0 20.84 34.77 ----- 17.5 17.5 139.2 25.4 27.9 -28.5 26.5 -32.4 26.6 -27.0 27.6 -28.5
2026-02-15T12:18:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:18:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:18:10.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.428917
2026-02-15T12:18:10.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:18:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:18:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:18:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:18:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:18:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:17:32', tmtdew=23.5, humidity=20.41, cloud=0.0, wind=17.75, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:17:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:18:10.373 [DEBUG] [Thread-204086] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:18:10.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:18:10.467 [DEBUG] [Thread-204089] [transport.py] [_log()] starting thread (client mode): 0xa2db7d60
2026-02-15T12:18:10.468 [DEBUG] [Thread-204089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:18:10.483 [DEBUG] [Thread-204089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:18:10.483 [INFO] [Thread-204089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:18:10.491 [DEBUG] [Thread-204089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:18:10.491 [DEBUG] [Thread-204089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] client lang: <none>
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] server lang: <none>
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] kex follows: False
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] Compression: none
2026-02-15T12:18:10.492 [DEBUG] [Thread-204089] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:18:10.550 [DEBUG] [Thread-204089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:18:10.550 [DEBUG] [Thread-204089] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:18:10.551 [DEBUG] [Thread-204089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:18:10.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:18:10.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:18:10.609 [DEBUG] [Thread-204089] [transport.py] [_log()] userauth is OK
2026-02-15T12:18:10.609 [DEBUG] [Thread-204089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:18:10.609 [DEBUG] [Thread-204089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:18:10.609 [DEBUG] [Thread-204089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:18:10.610 [DEBUG] [Thread-204089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:18:10.628 [INFO] [Thread-204089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:18:10.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:18:10.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:18:11.449 [DEBUG] [Thread-204089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:18:11.450 [DEBUG] [Thread-204089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:18:11.497 [DEBUG] [Thread-204089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:18:11.497 [DEBUG] [Thread-204089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:18:11.506 [DEBUG] [Thread-204089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:18:11.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:18:11.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:18:11.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:18:11.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:18:11.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:18:11.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:18:11.544 [DEBUG] [Thread-204089] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:18:20.990 [DEBUG] [Thread-204091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:23.065 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:23.066 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:36.044 [DEBUG] [Thread-204092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:18:41.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:18:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:18:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 18, 7), 25.22, 18.29, 0.0, 19.57, 20.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:18:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:18:07
2026-02-15T12:18:43.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:18:43.987 [DEBUG] [Thread-204093] [transport.py] [_log()] starting thread (client mode): 0xa575ae60
2026-02-15T12:18:43.987 [DEBUG] [Thread-204093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:18:44.005 [DEBUG] [Thread-204093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:18:44.005 [INFO] [Thread-204093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:18:44.008 [DEBUG] [Thread-204093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:18:44.008 [DEBUG] [Thread-204093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:18:44.008 [DEBUG] [Thread-204093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:18:44.008 [DEBUG] [Thread-204093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:44.008 [DEBUG] [Thread-204093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] client lang: <none>
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] server lang: <none>
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] kex follows: False
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] Compression: none
2026-02-15T12:18:44.009 [DEBUG] [Thread-204093] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:18:44.027 [DEBUG] [Thread-204093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:18:44.027 [DEBUG] [Thread-204093] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:18:44.028 [DEBUG] [Thread-204093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:18:44.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:18:44.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:18:44.029 [DEBUG] [Thread-204093] [transport.py] [_log()] userauth is OK
2026-02-15T12:18:44.029 [DEBUG] [Thread-204093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:18:44.030 [DEBUG] [Thread-204093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:18:44.030 [DEBUG] [Thread-204093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:18:44.030 [DEBUG] [Thread-204093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:18:44.054 [INFO] [Thread-204093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:18:44.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:18:44.641 [DEBUG] [Thread-204093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:18:44.641 [DEBUG] [Thread-204093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:18:44.642 [DEBUG] [Thread-204093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:18:44.682 [DEBUG] [Thread-204093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:18:44.683 [DEBUG] [Thread-204093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:18:44.685 [DEBUG] [Thread-204093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:18:44.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:18:44.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:18:44.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:18:44.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:18:44.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:18:44.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:18:44.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:18:44.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:18:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:18:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.429265 -999.00  +20.70  19.67     25   +0.30 1 1 1 1 1   888    0 20.91 33.29 ----- 19.7 19.7 142.6 22.3 27.9 -27.6 26.8 -26.2 26.7 -27.2 27.6 -26.5
2026-02-15T12:18:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:18:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:18:44.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.429265
2026-02-15T12:18:44.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:18:44.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:18:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:18:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:18:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:18:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:18:07', tmtdew=25.22, humidity=18.29, cloud=0.0, wind=19.57, temperature=20.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:18:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:18:44.711 [DEBUG] [Thread-204093] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:18:44.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:18:44.809 [DEBUG] [Thread-204096] [transport.py] [_log()] starting thread (client mode): 0xa57c1060
2026-02-15T12:18:44.809 [DEBUG] [Thread-204096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:18:44.823 [DEBUG] [Thread-204096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:18:44.823 [INFO] [Thread-204096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:18:44.831 [DEBUG] [Thread-204096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:18:44.831 [DEBUG] [Thread-204096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:18:44.831 [DEBUG] [Thread-204096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:18:44.831 [DEBUG] [Thread-204096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] client lang: <none>
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] server lang: <none>
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] kex follows: False
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] Compression: none
2026-02-15T12:18:44.832 [DEBUG] [Thread-204096] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:18:44.889 [DEBUG] [Thread-204096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:18:44.890 [DEBUG] [Thread-204096] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:18:44.890 [DEBUG] [Thread-204096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:18:44.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:18:44.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:18:44.946 [DEBUG] [Thread-204096] [transport.py] [_log()] userauth is OK
2026-02-15T12:18:44.946 [DEBUG] [Thread-204096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:18:44.947 [DEBUG] [Thread-204096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:18:44.947 [DEBUG] [Thread-204096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:18:44.947 [DEBUG] [Thread-204096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:18:44.969 [INFO] [Thread-204096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:18:44.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:18:44.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:18:45.835 [DEBUG] [Thread-204096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:18:45.836 [DEBUG] [Thread-204096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:18:45.883 [DEBUG] [Thread-204096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:18:45.884 [DEBUG] [Thread-204096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:18:45.893 [DEBUG] [Thread-204096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:18:45.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:18:45.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:18:45.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:18:45.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:18:45.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:18:45.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:18:45.929 [DEBUG] [Thread-204096] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:18:47.023 [DEBUG] [Thread-204098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:18:51.078 [DEBUG] [Thread-204099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:06.126 [DEBUG] [Thread-204100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:19:15.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:19:15.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:19:17.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 18, 43), 26.04, 17.17, 0.0, 27.74, 21.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:19:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:18:43
2026-02-15T12:19:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:19:18.363 [DEBUG] [Thread-204101] [transport.py] [_log()] starting thread (client mode): 0xa57c08b0
2026-02-15T12:19:18.363 [DEBUG] [Thread-204101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:19:18.383 [DEBUG] [Thread-204101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:19:18.383 [INFO] [Thread-204101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] client lang: <none>
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] server lang: <none>
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] kex follows: False
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] Compression: none
2026-02-15T12:19:18.387 [DEBUG] [Thread-204101] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:19:18.403 [DEBUG] [Thread-204101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:19:18.404 [DEBUG] [Thread-204101] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:19:18.404 [DEBUG] [Thread-204101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:19:18.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:19:18.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:19:18.449 [DEBUG] [Thread-204101] [transport.py] [_log()] userauth is OK
2026-02-15T12:19:18.449 [DEBUG] [Thread-204101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:19:18.449 [DEBUG] [Thread-204101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:19:18.449 [DEBUG] [Thread-204101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:19:18.449 [DEBUG] [Thread-204101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:19:18.469 [INFO] [Thread-204101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:19:18.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:19:19.101 [DEBUG] [Thread-204101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:19:19.101 [DEBUG] [Thread-204101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:19:19.101 [DEBUG] [Thread-204101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:19:19.142 [DEBUG] [Thread-204101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:19:19.143 [DEBUG] [Thread-204101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:19:19.146 [DEBUG] [Thread-204101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:19:19.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:19:19.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:19:19.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:19:19.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:19:19.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:19:19.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:19:19.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:19:19.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:19:19.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:19:19.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.429959 -999.00  +21.20  14.68     20   -2.00 1 1 1 1 1   888    0 21.17 42.75 ----- 14.7 14.7 75.1 23.5 28.0 -28.0 26.9 -27.8 26.7 -27.6 27.8 -27.4
2026-02-15T12:19:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:19:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:19:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.429959
2026-02-15T12:19:19.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:19:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:19:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:19:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:19:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:19:19.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:18:43', tmtdew=26.04, humidity=17.17, cloud=0.0, wind=27.74, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:19:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:19:19.174 [DEBUG] [Thread-204101] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:19:19.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:19:19.269 [DEBUG] [Thread-204104] [transport.py] [_log()] starting thread (client mode): 0xa2dc29e0
2026-02-15T12:19:19.269 [DEBUG] [Thread-204104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:19:19.284 [DEBUG] [Thread-204104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:19:19.284 [INFO] [Thread-204104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:19:19.292 [DEBUG] [Thread-204104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:19:19.292 [DEBUG] [Thread-204104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:19:19.292 [DEBUG] [Thread-204104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:19:19.292 [DEBUG] [Thread-204104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:19.292 [DEBUG] [Thread-204104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] client lang: <none>
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] server lang: <none>
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] kex follows: False
2026-02-15T12:19:19.293 [DEBUG] [Thread-204104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:19:19.294 [DEBUG] [Thread-204104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:19:19.294 [DEBUG] [Thread-204104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:19:19.294 [DEBUG] [Thread-204104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:19:19.294 [DEBUG] [Thread-204104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:19:19.294 [DEBUG] [Thread-204104] [transport.py] [_log()] Compression: none
2026-02-15T12:19:19.294 [DEBUG] [Thread-204104] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:19:19.360 [DEBUG] [Thread-204104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:19:19.361 [DEBUG] [Thread-204104] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:19:19.361 [DEBUG] [Thread-204104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:19:19.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:19:19.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:19:19.421 [DEBUG] [Thread-204104] [transport.py] [_log()] userauth is OK
2026-02-15T12:19:19.421 [DEBUG] [Thread-204104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:19:19.421 [DEBUG] [Thread-204104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:19:19.421 [DEBUG] [Thread-204104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:19:19.421 [DEBUG] [Thread-204104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:19:19.440 [INFO] [Thread-204104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:19:19.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:19:19.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:19:20.275 [DEBUG] [Thread-204104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:19:20.275 [DEBUG] [Thread-204104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:19:20.323 [DEBUG] [Thread-204104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:19:20.323 [DEBUG] [Thread-204104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:19:20.332 [DEBUG] [Thread-204104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:19:20.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:19:20.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:19:20.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:19:20.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:19:20.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:19:20.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:19:20.369 [DEBUG] [Thread-204104] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:19:21.162 [DEBUG] [Thread-204106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:23.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:23.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:36.217 [DEBUG] [Thread-204107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:47.072 [DEBUG] [Thread-204108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:50.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:19:50.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:19:50.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:19:51.256 [DEBUG] [Thread-204109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:19:52.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 19, 18), 26.29, 16.91, 0.0, 22.57, 21.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:19:52.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:19:18
2026-02-15T12:19:52.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:19:52.838 [DEBUG] [Thread-204110] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fe0
2026-02-15T12:19:52.838 [DEBUG] [Thread-204110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:19:52.858 [DEBUG] [Thread-204110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:19:52.858 [INFO] [Thread-204110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] client lang: <none>
2026-02-15T12:19:52.861 [DEBUG] [Thread-204110] [transport.py] [_log()] server lang: <none>
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] kex follows: False
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] Compression: none
2026-02-15T12:19:52.862 [DEBUG] [Thread-204110] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:19:52.879 [DEBUG] [Thread-204110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:19:52.879 [DEBUG] [Thread-204110] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:19:52.880 [DEBUG] [Thread-204110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:19:52.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:19:52.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:19:52.882 [DEBUG] [Thread-204110] [transport.py] [_log()] userauth is OK
2026-02-15T12:19:52.882 [DEBUG] [Thread-204110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:19:52.882 [DEBUG] [Thread-204110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:19:52.882 [DEBUG] [Thread-204110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:19:52.882 [DEBUG] [Thread-204110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:19:52.917 [INFO] [Thread-204110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:19:52.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:19:53.545 [DEBUG] [Thread-204110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:19:53.546 [DEBUG] [Thread-204110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:19:53.546 [DEBUG] [Thread-204110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:19:53.587 [DEBUG] [Thread-204110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:19:53.587 [DEBUG] [Thread-204110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:19:53.590 [DEBUG] [Thread-204110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:19:53.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:19:53.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:19:53.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:19:53.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:19:53.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:19:53.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:19:53.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:19:53.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:19:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:19:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.430306 -999.00  +21.30  18.59     20   -2.10 1 1 1 1 1   888    0 21.56 54.99 ----- 18.6 18.6 118.8 24.3 27.9 -29.0 27.1 -27.9 26.8 -26.2 27.9 -28.2
2026-02-15T12:19:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:19:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:19:53.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.430306
2026-02-15T12:19:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:19:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:19:53.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:19:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:19:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:19:53.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:19:18', tmtdew=26.29, humidity=16.91, cloud=0.0, wind=22.57, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:19:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:19:53.622 [DEBUG] [Thread-204110] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:19:53.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:19:53.720 [DEBUG] [Thread-204113] [transport.py] [_log()] starting thread (client mode): 0xa57c05b0
2026-02-15T12:19:53.720 [DEBUG] [Thread-204113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:19:53.735 [DEBUG] [Thread-204113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:19:53.736 [INFO] [Thread-204113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:19:53.743 [DEBUG] [Thread-204113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] client lang: <none>
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] server lang: <none>
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] kex follows: False
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:19:53.744 [DEBUG] [Thread-204113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:19:53.745 [DEBUG] [Thread-204113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:19:53.745 [DEBUG] [Thread-204113] [transport.py] [_log()] Compression: none
2026-02-15T12:19:53.745 [DEBUG] [Thread-204113] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:19:53.802 [DEBUG] [Thread-204113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:19:53.802 [DEBUG] [Thread-204113] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:19:53.803 [DEBUG] [Thread-204113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:19:53.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:19:53.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:19:53.861 [DEBUG] [Thread-204113] [transport.py] [_log()] userauth is OK
2026-02-15T12:19:53.861 [DEBUG] [Thread-204113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:19:53.861 [DEBUG] [Thread-204113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:19:53.861 [DEBUG] [Thread-204113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:19:53.861 [DEBUG] [Thread-204113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:19:53.880 [INFO] [Thread-204113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:19:53.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:19:53.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:19:54.764 [DEBUG] [Thread-204113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:19:54.764 [DEBUG] [Thread-204113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:19:54.811 [DEBUG] [Thread-204113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:19:54.812 [DEBUG] [Thread-204113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:19:54.821 [DEBUG] [Thread-204113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:19:54.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:19:54.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:19:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:19:54.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:19:54.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:19:54.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:19:54.858 [DEBUG] [Thread-204113] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:20:06.296 [DEBUG] [Thread-204115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:21.346 [DEBUG] [Thread-204116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:23.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:23.356 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:20:24.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:20:24.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:20:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 19, 53), 26.97, 15.92, 0.0, 15.42, 21.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:20:26.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:19:53
2026-02-15T12:20:27.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:20:27.422 [DEBUG] [Thread-204117] [transport.py] [_log()] starting thread (client mode): 0xa81d5a20
2026-02-15T12:20:27.422 [DEBUG] [Thread-204117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:20:27.444 [DEBUG] [Thread-204117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:20:27.444 [INFO] [Thread-204117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:20:27.448 [DEBUG] [Thread-204117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:20:27.448 [DEBUG] [Thread-204117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:20:27.448 [DEBUG] [Thread-204117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:20:27.448 [DEBUG] [Thread-204117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:20:27.448 [DEBUG] [Thread-204117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] client lang: <none>
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] server lang: <none>
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] kex follows: False
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] Compression: none
2026-02-15T12:20:27.449 [DEBUG] [Thread-204117] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:20:27.467 [DEBUG] [Thread-204117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:20:27.468 [DEBUG] [Thread-204117] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:20:27.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:20:27.469 [DEBUG] [Thread-204117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:20:27.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:20:27.471 [DEBUG] [Thread-204117] [transport.py] [_log()] userauth is OK
2026-02-15T12:20:27.471 [DEBUG] [Thread-204117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:20:27.471 [DEBUG] [Thread-204117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:20:27.471 [DEBUG] [Thread-204117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:20:27.472 [DEBUG] [Thread-204117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:20:27.494 [INFO] [Thread-204117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:20:27.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:20:28.123 [DEBUG] [Thread-204117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:20:28.124 [DEBUG] [Thread-204117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:20:28.124 [DEBUG] [Thread-204117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:20:28.165 [DEBUG] [Thread-204117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:20:28.165 [DEBUG] [Thread-204117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:20:28.169 [DEBUG] [Thread-204117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:20:28.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:20:28.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:20:28.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:20:28.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:20:28.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:20:28.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:20:28.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:20:28.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:20:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:20:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.430653 -999.00  +21.20  13.40     20   -2.50 1 1 1 1 1   888    0 22.08 66.36 ----- 13.4 13.4 114.7 20.2 27.9 -28.9 27.1 -27.9 26.8 -28.6 27.9 -27.6
2026-02-15T12:20:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:20:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:20:28.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.430653
2026-02-15T12:20:28.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:20:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:20:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:20:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:20:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:20:28.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:19:53', tmtdew=26.97, humidity=15.92, cloud=0.0, wind=15.42, temperature=21.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:20:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:20:28.196 [DEBUG] [Thread-204117] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:20:28.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:20:28.304 [DEBUG] [Thread-204120] [transport.py] [_log()] starting thread (client mode): 0xa2d11b70
2026-02-15T12:20:28.304 [DEBUG] [Thread-204120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:20:28.319 [DEBUG] [Thread-204120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:20:28.319 [INFO] [Thread-204120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] client lang: <none>
2026-02-15T12:20:28.327 [DEBUG] [Thread-204120] [transport.py] [_log()] server lang: <none>
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] kex follows: False
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] Compression: none
2026-02-15T12:20:28.328 [DEBUG] [Thread-204120] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:20:28.385 [DEBUG] [Thread-204120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:20:28.386 [DEBUG] [Thread-204120] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:20:28.386 [DEBUG] [Thread-204120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:20:28.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:20:28.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:20:28.445 [DEBUG] [Thread-204120] [transport.py] [_log()] userauth is OK
2026-02-15T12:20:28.445 [DEBUG] [Thread-204120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:20:28.445 [DEBUG] [Thread-204120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:20:28.445 [DEBUG] [Thread-204120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:20:28.446 [DEBUG] [Thread-204120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:20:28.466 [INFO] [Thread-204120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:20:28.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:20:28.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:20:29.343 [DEBUG] [Thread-204120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:20:29.343 [DEBUG] [Thread-204120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:20:29.393 [DEBUG] [Thread-204120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:20:29.393 [DEBUG] [Thread-204120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:20:29.402 [DEBUG] [Thread-204120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:20:29.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:20:29.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:20:29.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:20:29.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:20:29.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:20:29.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:20:29.438 [DEBUG] [Thread-204120] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:20:36.394 [DEBUG] [Thread-204122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:47.114 [DEBUG] [Thread-204123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:51.445 [DEBUG] [Thread-204124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:20:59.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:20:59.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:20:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:21:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 20, 28), 27.08, 15.84, 0.0, 20.04, 21.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:21:01.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:20:28
2026-02-15T12:21:01.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:21:01.981 [DEBUG] [Thread-204125] [transport.py] [_log()] starting thread (client mode): 0xa2db6c20
2026-02-15T12:21:01.981 [DEBUG] [Thread-204125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:21:02.001 [DEBUG] [Thread-204125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:21:02.001 [INFO] [Thread-204125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:21:02.004 [DEBUG] [Thread-204125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:21:02.004 [DEBUG] [Thread-204125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:21:02.004 [DEBUG] [Thread-204125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] client lang: <none>
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] server lang: <none>
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] kex follows: False
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] Compression: none
2026-02-15T12:21:02.005 [DEBUG] [Thread-204125] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:21:02.023 [DEBUG] [Thread-204125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:21:02.024 [DEBUG] [Thread-204125] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:21:02.024 [DEBUG] [Thread-204125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:21:02.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:21:02.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:21:02.026 [DEBUG] [Thread-204125] [transport.py] [_log()] userauth is OK
2026-02-15T12:21:02.027 [DEBUG] [Thread-204125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:21:02.027 [DEBUG] [Thread-204125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:21:02.027 [DEBUG] [Thread-204125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:21:02.027 [DEBUG] [Thread-204125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:21:02.063 [INFO] [Thread-204125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:21:02.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:21:02.720 [DEBUG] [Thread-204125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:21:02.720 [DEBUG] [Thread-204125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:21:02.721 [DEBUG] [Thread-204125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:21:02.761 [DEBUG] [Thread-204125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:21:02.762 [DEBUG] [Thread-204125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:21:02.765 [DEBUG] [Thread-204125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:21:02.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:21:02.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:21:02.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:21:02.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:21:02.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:21:02.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:21:02.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:21:02.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:21:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:21:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.431001 -999.00  +21.10  15.56     20   -2.30 1 1 1 1 1   888    0 22.45 79.78 ----- 15.6 15.6 101.4 25.7 27.6 -31.3 27.1 -27.9 26.9 -26.2 27.8 -27.5
2026-02-15T12:21:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:21:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:21:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.431001
2026-02-15T12:21:02.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:21:02.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:21:02.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:21:02.791 [DEBUG] [Thread-204125] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:21:02.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:21:02.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:21:02.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:20:28', tmtdew=27.08, humidity=15.84, cloud=0.0, wind=20.04, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:20:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:21:02.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:21:02.886 [DEBUG] [Thread-204128] [transport.py] [_log()] starting thread (client mode): 0xa2d00580
2026-02-15T12:21:02.887 [DEBUG] [Thread-204128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:21:02.901 [DEBUG] [Thread-204128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:21:02.901 [INFO] [Thread-204128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:21:02.908 [DEBUG] [Thread-204128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:21:02.908 [DEBUG] [Thread-204128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:21:02.908 [DEBUG] [Thread-204128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] client lang: <none>
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] server lang: <none>
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] kex follows: False
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:21:02.909 [DEBUG] [Thread-204128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:21:02.910 [DEBUG] [Thread-204128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:21:02.910 [DEBUG] [Thread-204128] [transport.py] [_log()] Compression: none
2026-02-15T12:21:02.910 [DEBUG] [Thread-204128] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:21:02.965 [DEBUG] [Thread-204128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:21:02.966 [DEBUG] [Thread-204128] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:21:02.966 [DEBUG] [Thread-204128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:21:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:21:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:21:03.022 [DEBUG] [Thread-204128] [transport.py] [_log()] userauth is OK
2026-02-15T12:21:03.022 [DEBUG] [Thread-204128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:21:03.022 [DEBUG] [Thread-204128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:21:03.023 [DEBUG] [Thread-204128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:21:03.023 [DEBUG] [Thread-204128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:21:03.042 [INFO] [Thread-204128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:21:03.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:21:03.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:21:03.929 [DEBUG] [Thread-204128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:21:03.929 [DEBUG] [Thread-204128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:21:03.978 [DEBUG] [Thread-204128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:21:03.978 [DEBUG] [Thread-204128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:21:03.988 [DEBUG] [Thread-204128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:21:03.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:21:03.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:21:04.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:21:04.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:21:04.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:21:04.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:21:04.032 [DEBUG] [Thread-204128] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:21:06.481 [DEBUG] [Thread-204130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:21:21.536 [DEBUG] [Thread-204131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:21:23.497 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:21:23.498 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:21:34.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:21:34.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:21:34.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:21:35.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 21, 4), 27.29, 15.63, 0.0, 15.33, 21.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:21:35.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:21:04
2026-02-15T12:21:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:21:36.476 [DEBUG] [Thread-204132] [transport.py] [_log()] starting thread (client mode): 0xa57c1720
2026-02-15T12:21:36.476 [DEBUG] [Thread-204132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:21:36.496 [DEBUG] [Thread-204132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:21:36.497 [INFO] [Thread-204132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] client lang: <none>
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] server lang: <none>
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] kex follows: False
2026-02-15T12:21:36.498 [DEBUG] [Thread-204132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:21:36.499 [DEBUG] [Thread-204132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:21:36.499 [DEBUG] [Thread-204132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:21:36.499 [DEBUG] [Thread-204132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:21:36.499 [DEBUG] [Thread-204132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:21:36.499 [DEBUG] [Thread-204132] [transport.py] [_log()] Compression: none
2026-02-15T12:21:36.499 [DEBUG] [Thread-204132] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:21:36.519 [DEBUG] [Thread-204132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:21:36.520 [DEBUG] [Thread-204132] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:21:36.520 [DEBUG] [Thread-204132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:21:36.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:21:36.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:21:36.522 [DEBUG] [Thread-204132] [transport.py] [_log()] userauth is OK
2026-02-15T12:21:36.523 [DEBUG] [Thread-204132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:21:36.523 [DEBUG] [Thread-204132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:21:36.523 [DEBUG] [Thread-204132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:21:36.523 [DEBUG] [Thread-204132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:21:36.548 [INFO] [Thread-204132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:21:36.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:21:36.573 [DEBUG] [Thread-204134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:21:37.136 [DEBUG] [Thread-204132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:21:37.136 [DEBUG] [Thread-204132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:21:37.136 [DEBUG] [Thread-204132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:21:37.176 [DEBUG] [Thread-204132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:21:37.177 [DEBUG] [Thread-204132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:21:37.180 [DEBUG] [Thread-204132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:21:37.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:21:37.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:21:37.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:21:37.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:21:37.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:21:37.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:21:37.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:21:37.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:21:37.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:21:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.431348 -999.00  +21.30  12.49     20   -2.40 1 1 1 1 1   888    0 23.26 100.07 ----- 12.5 12.5 113.6 19.3 27.9 -28.4 27.3 -27.8 26.9 -28.0 27.9 -27.7
2026-02-15T12:21:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:21:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:21:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.431348
2026-02-15T12:21:37.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:21:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:21:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:21:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:21:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:21:37.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:21:04', tmtdew=27.29, humidity=15.63, cloud=0.0, wind=15.33, temperature=21.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:21:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:21:37.207 [DEBUG] [Thread-204132] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:21:37.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:21:37.303 [DEBUG] [Thread-204136] [transport.py] [_log()] starting thread (client mode): 0xa81d7070
2026-02-15T12:21:37.304 [DEBUG] [Thread-204136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:21:37.321 [DEBUG] [Thread-204136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:21:37.321 [INFO] [Thread-204136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:21:37.329 [DEBUG] [Thread-204136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:21:37.329 [DEBUG] [Thread-204136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:21:37.329 [DEBUG] [Thread-204136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:21:37.329 [DEBUG] [Thread-204136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:37.329 [DEBUG] [Thread-204136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:21:37.329 [DEBUG] [Thread-204136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] client lang: <none>
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] server lang: <none>
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] kex follows: False
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:21:37.330 [DEBUG] [Thread-204136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:21:37.331 [DEBUG] [Thread-204136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:21:37.331 [DEBUG] [Thread-204136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:21:37.331 [DEBUG] [Thread-204136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:21:37.331 [DEBUG] [Thread-204136] [transport.py] [_log()] Compression: none
2026-02-15T12:21:37.331 [DEBUG] [Thread-204136] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:21:37.394 [DEBUG] [Thread-204136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:21:37.395 [DEBUG] [Thread-204136] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:21:37.396 [DEBUG] [Thread-204136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:21:37.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:21:37.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:21:37.453 [DEBUG] [Thread-204136] [transport.py] [_log()] userauth is OK
2026-02-15T12:21:37.454 [DEBUG] [Thread-204136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:21:37.454 [DEBUG] [Thread-204136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:21:37.454 [DEBUG] [Thread-204136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:21:37.454 [DEBUG] [Thread-204136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:21:37.474 [INFO] [Thread-204136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:21:37.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:21:37.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:21:38.325 [DEBUG] [Thread-204136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:21:38.325 [DEBUG] [Thread-204136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:21:38.373 [DEBUG] [Thread-204136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:21:38.373 [DEBUG] [Thread-204136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:21:38.383 [DEBUG] [Thread-204136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:21:38.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:21:38.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:21:38.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:21:38.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:21:38.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:21:38.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:21:38.419 [DEBUG] [Thread-204136] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:21:47.162 [DEBUG] [Thread-204138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:21:51.608 [DEBUG] [Thread-204139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:06.650 [DEBUG] [Thread-204140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:08.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:22:08.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:22:08.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:22:10.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 21, 40), 29.09, 13.68, 0.0, 23.64, 22.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:22:10.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:21:40
2026-02-15T12:22:10.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:22:10.909 [DEBUG] [Thread-204141] [transport.py] [_log()] starting thread (client mode): 0xa2d12d70
2026-02-15T12:22:10.909 [DEBUG] [Thread-204141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:22:10.927 [DEBUG] [Thread-204141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:22:10.927 [INFO] [Thread-204141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:22:10.930 [DEBUG] [Thread-204141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:22:10.930 [DEBUG] [Thread-204141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] client lang: <none>
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] server lang: <none>
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] kex follows: False
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] Compression: none
2026-02-15T12:22:10.931 [DEBUG] [Thread-204141] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:22:10.949 [DEBUG] [Thread-204141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:22:10.949 [DEBUG] [Thread-204141] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:22:10.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:22:10.950 [DEBUG] [Thread-204141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:22:10.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:22:10.952 [DEBUG] [Thread-204141] [transport.py] [_log()] userauth is OK
2026-02-15T12:22:10.952 [DEBUG] [Thread-204141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:22:10.952 [DEBUG] [Thread-204141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:22:10.952 [DEBUG] [Thread-204141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:22:10.953 [DEBUG] [Thread-204141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:22:10.971 [INFO] [Thread-204141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:22:10.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:22:11.609 [DEBUG] [Thread-204141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:22:11.609 [DEBUG] [Thread-204141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:22:11.610 [DEBUG] [Thread-204141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:22:11.650 [DEBUG] [Thread-204141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:22:11.651 [DEBUG] [Thread-204141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:22:11.653 [DEBUG] [Thread-204141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:22:11.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:22:11.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:22:11.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:22:11.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:22:11.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:22:11.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:22:11.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:22:11.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:22:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:22:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.431695 -999.00  +21.10  21.70     20   -2.50 1 1 1 1 1   888    0 23.64 110.68 ----- 21.7 21.7 107.2 24.3 27.8 -28.1 27.2 -27.8 26.9 -28.0 27.9 -27.6
2026-02-15T12:22:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:22:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:22:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.431695
2026-02-15T12:22:11.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:22:11.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:22:11.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:22:11.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:22:11.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:22:11.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:21:40', tmtdew=29.09, humidity=13.68, cloud=0.0, wind=23.64, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:21:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:22:11.682 [DEBUG] [Thread-204141] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:22:11.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:22:11.777 [DEBUG] [Thread-204144] [transport.py] [_log()] starting thread (client mode): 0xa5743550
2026-02-15T12:22:11.778 [DEBUG] [Thread-204144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:22:11.792 [DEBUG] [Thread-204144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:22:11.792 [INFO] [Thread-204144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:22:11.800 [DEBUG] [Thread-204144] [transport.py] [_log()] client lang: <none>
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] server lang: <none>
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] kex follows: False
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] Compression: none
2026-02-15T12:22:11.801 [DEBUG] [Thread-204144] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:22:11.860 [DEBUG] [Thread-204144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:22:11.860 [DEBUG] [Thread-204144] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:22:11.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:22:11.861 [DEBUG] [Thread-204144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:22:11.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:22:11.915 [DEBUG] [Thread-204144] [transport.py] [_log()] userauth is OK
2026-02-15T12:22:11.916 [DEBUG] [Thread-204144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:22:11.916 [DEBUG] [Thread-204144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:22:11.916 [DEBUG] [Thread-204144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:22:11.916 [DEBUG] [Thread-204144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:22:11.935 [INFO] [Thread-204144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:22:11.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:22:11.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:22:12.764 [DEBUG] [Thread-204144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:22:12.764 [DEBUG] [Thread-204144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:22:12.812 [DEBUG] [Thread-204144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:22:12.813 [DEBUG] [Thread-204144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:22:12.823 [DEBUG] [Thread-204144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:22:12.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:22:12.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:22:12.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:22:12.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:22:12.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:22:12.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:22:12.867 [DEBUG] [Thread-204144] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:22:21.687 [DEBUG] [Thread-204146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:23.638 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:23.639 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:36.739 [DEBUG] [Thread-204147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:42.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:22:42.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:22:42.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:22:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 22, 15), 27.81, 15.09, 0.0, 19.51, 21.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:22:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:22:15
2026-02-15T12:22:45.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:22:45.552 [DEBUG] [Thread-204148] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-15T12:22:45.553 [DEBUG] [Thread-204148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:22:45.573 [DEBUG] [Thread-204148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:22:45.574 [INFO] [Thread-204148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:22:45.576 [DEBUG] [Thread-204148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] client lang: <none>
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] server lang: <none>
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] kex follows: False
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] Compression: none
2026-02-15T12:22:45.577 [DEBUG] [Thread-204148] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:22:45.593 [DEBUG] [Thread-204148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:22:45.593 [DEBUG] [Thread-204148] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:22:45.594 [DEBUG] [Thread-204148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:22:45.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:22:45.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:22:45.596 [DEBUG] [Thread-204148] [transport.py] [_log()] userauth is OK
2026-02-15T12:22:45.596 [DEBUG] [Thread-204148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:22:45.596 [DEBUG] [Thread-204148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:22:45.596 [DEBUG] [Thread-204148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:22:45.596 [DEBUG] [Thread-204148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:22:45.621 [INFO] [Thread-204148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:22:45.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:22:46.273 [DEBUG] [Thread-204148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:22:46.273 [DEBUG] [Thread-204148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:22:46.273 [DEBUG] [Thread-204148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:22:46.314 [DEBUG] [Thread-204148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:22:46.314 [DEBUG] [Thread-204148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:22:46.318 [DEBUG] [Thread-204148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:22:46.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:22:46.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:22:46.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:22:46.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:22:46.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:22:46.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:22:46.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:22:46.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:22:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:22:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.432042 -999.00  +21.20  12.70     19   -2.70 1 1 1 1 1   888    0 24.70 134.72 ----- 12.7 12.7 83.4 28.0 27.8 -29.2 27.3 -28.1 27.0 -27.6 27.9 -28.0
2026-02-15T12:22:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:22:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:22:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.432042
2026-02-15T12:22:46.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:22:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:22:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:22:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:22:46.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:22:46.344 [DEBUG] [Thread-204148] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:22:46.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:22:15', tmtdew=27.81, humidity=15.09, cloud=0.0, wind=19.51, temperature=21.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:22:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:22:46.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:22:46.440 [DEBUG] [Thread-204151] [transport.py] [_log()] starting thread (client mode): 0xa575b880
2026-02-15T12:22:46.441 [DEBUG] [Thread-204151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:22:46.455 [DEBUG] [Thread-204151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:22:46.455 [INFO] [Thread-204151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] client lang: <none>
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] server lang: <none>
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] kex follows: False
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:22:46.463 [DEBUG] [Thread-204151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:22:46.464 [DEBUG] [Thread-204151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:22:46.464 [DEBUG] [Thread-204151] [transport.py] [_log()] Compression: none
2026-02-15T12:22:46.464 [DEBUG] [Thread-204151] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:22:46.522 [DEBUG] [Thread-204151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:22:46.522 [DEBUG] [Thread-204151] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:22:46.523 [DEBUG] [Thread-204151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:22:46.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:22:46.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:22:46.578 [DEBUG] [Thread-204151] [transport.py] [_log()] userauth is OK
2026-02-15T12:22:46.578 [DEBUG] [Thread-204151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:22:46.578 [DEBUG] [Thread-204151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:22:46.579 [DEBUG] [Thread-204151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:22:46.579 [DEBUG] [Thread-204151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:22:46.601 [INFO] [Thread-204151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:22:46.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:22:46.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:22:47.195 [DEBUG] [Thread-204153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:22:47.445 [DEBUG] [Thread-204151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:22:47.445 [DEBUG] [Thread-204151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:22:47.493 [DEBUG] [Thread-204151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:22:47.493 [DEBUG] [Thread-204151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:22:47.502 [DEBUG] [Thread-204151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:22:47.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:22:47.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:22:47.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:22:47.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:22:47.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:22:47.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:22:47.538 [DEBUG] [Thread-204151] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:22:51.778 [DEBUG] [Thread-204154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:06.830 [DEBUG] [Thread-204155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:17.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:23:17.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:23:17.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:23:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 22, 51), 26.91, 16.1, 0.0, 18.91, 21.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:23:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:22:51
2026-02-15T12:23:19.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:23:20.044 [DEBUG] [Thread-204156] [transport.py] [_log()] starting thread (client mode): 0xa2d11b70
2026-02-15T12:23:20.044 [DEBUG] [Thread-204156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:23:20.064 [DEBUG] [Thread-204156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:23:20.064 [INFO] [Thread-204156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] client lang: <none>
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] server lang: <none>
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] kex follows: False
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] Compression: none
2026-02-15T12:23:20.067 [DEBUG] [Thread-204156] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:23:20.085 [DEBUG] [Thread-204156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:23:20.086 [DEBUG] [Thread-204156] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:23:20.087 [DEBUG] [Thread-204156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:23:20.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:23:20.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:23:20.089 [DEBUG] [Thread-204156] [transport.py] [_log()] userauth is OK
2026-02-15T12:23:20.089 [DEBUG] [Thread-204156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:23:20.090 [DEBUG] [Thread-204156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:23:20.090 [DEBUG] [Thread-204156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:23:20.090 [DEBUG] [Thread-204156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:23:20.110 [INFO] [Thread-204156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:23:20.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:23:20.710 [DEBUG] [Thread-204156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:23:20.710 [DEBUG] [Thread-204156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:23:20.711 [DEBUG] [Thread-204156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:23:20.751 [DEBUG] [Thread-204156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:23:20.752 [DEBUG] [Thread-204156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:23:20.755 [DEBUG] [Thread-204156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:23:20.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:23:20.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:23:20.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:23:20.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:23:20.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:23:20.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:23:20.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:23:20.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:23:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:23:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.432390 -999.00  +21.30  13.23     21   -1.80 1 1 1 1 1   888    0 25.07 147.85 ----- 13.2 13.2 105.5 20.5 27.7 -29.1 27.3 -27.6 27.1 -25.9 27.9 -26.3
2026-02-15T12:23:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:23:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:23:20.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.432390
2026-02-15T12:23:20.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:23:20.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:23:20.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:23:20.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:23:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:23:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:22:51', tmtdew=26.91, humidity=16.1, cloud=0.0, wind=18.91, temperature=21.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:22:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:23:20.783 [DEBUG] [Thread-204156] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:23:20.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:23:20.876 [DEBUG] [Thread-204159] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-15T12:23:20.876 [DEBUG] [Thread-204159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:23:20.890 [DEBUG] [Thread-204159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:23:20.891 [INFO] [Thread-204159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:23:20.898 [DEBUG] [Thread-204159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:23:20.898 [DEBUG] [Thread-204159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:23:20.898 [DEBUG] [Thread-204159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] client lang: <none>
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] server lang: <none>
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] kex follows: False
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] Compression: none
2026-02-15T12:23:20.899 [DEBUG] [Thread-204159] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:23:20.956 [DEBUG] [Thread-204159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:23:20.957 [DEBUG] [Thread-204159] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:23:20.957 [DEBUG] [Thread-204159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:23:20.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:23:20.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:23:21.013 [DEBUG] [Thread-204159] [transport.py] [_log()] userauth is OK
2026-02-15T12:23:21.013 [DEBUG] [Thread-204159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:23:21.013 [DEBUG] [Thread-204159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:23:21.013 [DEBUG] [Thread-204159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:23:21.013 [DEBUG] [Thread-204159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:23:21.031 [INFO] [Thread-204159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:23:21.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:23:21.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:23:21.848 [DEBUG] [Thread-204159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:23:21.849 [DEBUG] [Thread-204159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:23:21.866 [DEBUG] [Thread-204161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:21.896 [DEBUG] [Thread-204159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:23:21.896 [DEBUG] [Thread-204159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:23:21.905 [DEBUG] [Thread-204159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:23:21.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:23:21.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:23:21.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:23:21.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:23:21.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:23:21.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:23:21.939 [DEBUG] [Thread-204159] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:23:23.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:23.782 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:36.916 [DEBUG] [Thread-204162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:47.237 [DEBUG] [Thread-204163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:51.956 [DEBUG] [Thread-204164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:23:51.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:23:51.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:23:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:23:53.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 23, 27), 26.63, 16.48, 0.0, 20.71, 21.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:23:53.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:23:27
2026-02-15T12:23:54.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:23:54.451 [DEBUG] [Thread-204165] [transport.py] [_log()] starting thread (client mode): 0xa2d11720
2026-02-15T12:23:54.452 [DEBUG] [Thread-204165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:23:54.471 [DEBUG] [Thread-204165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:23:54.472 [INFO] [Thread-204165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] client lang: <none>
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] server lang: <none>
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] kex follows: False
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:23:54.474 [DEBUG] [Thread-204165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:23:54.475 [DEBUG] [Thread-204165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:23:54.475 [DEBUG] [Thread-204165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:23:54.475 [DEBUG] [Thread-204165] [transport.py] [_log()] Compression: none
2026-02-15T12:23:54.475 [DEBUG] [Thread-204165] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:23:54.493 [DEBUG] [Thread-204165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:23:54.494 [DEBUG] [Thread-204165] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:23:54.494 [DEBUG] [Thread-204165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:23:54.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:23:54.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:23:54.496 [DEBUG] [Thread-204165] [transport.py] [_log()] userauth is OK
2026-02-15T12:23:54.496 [DEBUG] [Thread-204165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:23:54.497 [DEBUG] [Thread-204165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:23:54.497 [DEBUG] [Thread-204165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:23:54.497 [DEBUG] [Thread-204165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:23:54.515 [INFO] [Thread-204165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:23:54.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:23:55.118 [DEBUG] [Thread-204165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:23:55.118 [DEBUG] [Thread-204165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:23:55.118 [DEBUG] [Thread-204165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:23:55.159 [DEBUG] [Thread-204165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:23:55.160 [DEBUG] [Thread-204165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:23:55.163 [DEBUG] [Thread-204165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:23:55.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:23:55.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:23:55.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:23:55.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:23:55.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:23:55.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:23:55.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:23:55.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:23:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:23:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.433084 -999.00  +21.20  18.09     24   +0.20 1 1 1 1 1   888    0 25.30 167.16 ----- 18.1 18.1 130.4 25.6 27.9 -27.7 27.4 -27.4 27.0 -27.8 27.9 -29.2
2026-02-15T12:23:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:23:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:23:55.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.433084
2026-02-15T12:23:55.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:23:55.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:23:55.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:23:55.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:23:55.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:23:55.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:23:27', tmtdew=26.63, humidity=16.48, cloud=0.0, wind=20.71, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:23:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:23:55.191 [DEBUG] [Thread-204165] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:23:55.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:23:55.288 [DEBUG] [Thread-204168] [transport.py] [_log()] starting thread (client mode): 0xa57401c0
2026-02-15T12:23:55.288 [DEBUG] [Thread-204168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:23:55.303 [DEBUG] [Thread-204168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:23:55.303 [INFO] [Thread-204168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:23:55.310 [DEBUG] [Thread-204168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] client lang: <none>
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] server lang: <none>
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] kex follows: False
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:23:55.311 [DEBUG] [Thread-204168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:23:55.312 [DEBUG] [Thread-204168] [transport.py] [_log()] Compression: none
2026-02-15T12:23:55.312 [DEBUG] [Thread-204168] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:23:55.371 [DEBUG] [Thread-204168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:23:55.372 [DEBUG] [Thread-204168] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:23:55.372 [DEBUG] [Thread-204168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:23:55.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:23:55.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:23:55.427 [DEBUG] [Thread-204168] [transport.py] [_log()] userauth is OK
2026-02-15T12:23:55.428 [DEBUG] [Thread-204168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:23:55.428 [DEBUG] [Thread-204168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:23:55.428 [DEBUG] [Thread-204168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:23:55.428 [DEBUG] [Thread-204168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:23:55.446 [INFO] [Thread-204168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:23:55.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:23:55.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:23:56.257 [DEBUG] [Thread-204168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:23:56.258 [DEBUG] [Thread-204168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:23:56.305 [DEBUG] [Thread-204168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:23:56.306 [DEBUG] [Thread-204168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:23:56.315 [DEBUG] [Thread-204168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:23:56.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:23:56.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:23:56.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:23:56.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:23:56.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:23:56.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:23:56.352 [DEBUG] [Thread-204168] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:24:06.994 [DEBUG] [Thread-204170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:24:22.052 [DEBUG] [Thread-204171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:24:23.924 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:24:23.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:24:26.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:24:26.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:24:26.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:24:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 24, 3), 26.47, 16.66, 0.0, 19.32, 21.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:24:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:24:03
2026-02-15T12:24:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:24:28.920 [DEBUG] [Thread-204172] [transport.py] [_log()] starting thread (client mode): 0xa57c04f0
2026-02-15T12:24:28.920 [DEBUG] [Thread-204172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:24:28.942 [DEBUG] [Thread-204172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:24:28.942 [INFO] [Thread-204172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:24:28.952 [DEBUG] [Thread-204172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:24:28.952 [DEBUG] [Thread-204172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:24:28.952 [DEBUG] [Thread-204172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:24:28.952 [DEBUG] [Thread-204172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:24:28.952 [DEBUG] [Thread-204172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:24:28.952 [DEBUG] [Thread-204172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] client lang: <none>
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] server lang: <none>
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] kex follows: False
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] Compression: none
2026-02-15T12:24:28.953 [DEBUG] [Thread-204172] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:24:28.973 [DEBUG] [Thread-204172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:24:28.973 [DEBUG] [Thread-204172] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:24:28.974 [DEBUG] [Thread-204172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:24:28.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:24:28.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:24:28.976 [DEBUG] [Thread-204172] [transport.py] [_log()] userauth is OK
2026-02-15T12:24:28.976 [DEBUG] [Thread-204172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:24:28.976 [DEBUG] [Thread-204172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:24:28.976 [DEBUG] [Thread-204172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:24:28.976 [DEBUG] [Thread-204172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:24:29.012 [INFO] [Thread-204172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:24:29.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:24:29.666 [DEBUG] [Thread-204172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:24:29.666 [DEBUG] [Thread-204172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:24:29.667 [DEBUG] [Thread-204172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:24:29.708 [DEBUG] [Thread-204172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:24:29.708 [DEBUG] [Thread-204172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:24:29.711 [DEBUG] [Thread-204172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:24:29.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:24:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:24:29.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:24:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:24:29.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:24:29.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:24:29.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:24:29.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.433431 -999.00  +21.00  20.69     24   +0.10 1 1 1 1 1   888    0 25.09 174.01 ----- 20.7 20.7 150.6 24.8 28.0 -30.0 27.2 -27.4 26.9 -27.6 27.9 -27.9
2026-02-15T12:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.433431
2026-02-15T12:24:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:24:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:24:03', tmtdew=26.47, humidity=16.66, cloud=0.0, wind=19.32, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:24:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:24:29.740 [DEBUG] [Thread-204172] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:24:29.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:24:29.833 [DEBUG] [Thread-204175] [transport.py] [_log()] starting thread (client mode): 0xa5743d60
2026-02-15T12:24:29.833 [DEBUG] [Thread-204175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:24:29.848 [DEBUG] [Thread-204175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:24:29.848 [INFO] [Thread-204175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] client lang: <none>
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] server lang: <none>
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] kex follows: False
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:24:29.856 [DEBUG] [Thread-204175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:24:29.857 [DEBUG] [Thread-204175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:24:29.857 [DEBUG] [Thread-204175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:24:29.857 [DEBUG] [Thread-204175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:24:29.857 [DEBUG] [Thread-204175] [transport.py] [_log()] Compression: none
2026-02-15T12:24:29.857 [DEBUG] [Thread-204175] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:24:29.914 [DEBUG] [Thread-204175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:24:29.915 [DEBUG] [Thread-204175] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:24:29.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:24:29.916 [DEBUG] [Thread-204175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:24:29.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:24:29.970 [DEBUG] [Thread-204175] [transport.py] [_log()] userauth is OK
2026-02-15T12:24:29.970 [DEBUG] [Thread-204175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:24:29.971 [DEBUG] [Thread-204175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:24:29.971 [DEBUG] [Thread-204175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:24:29.971 [DEBUG] [Thread-204175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:24:29.990 [INFO] [Thread-204175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:24:29.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:24:29.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:24:30.844 [DEBUG] [Thread-204175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:24:30.845 [DEBUG] [Thread-204175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:24:30.892 [DEBUG] [Thread-204175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:24:30.892 [DEBUG] [Thread-204175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:24:30.901 [DEBUG] [Thread-204175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:24:30.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:24:30.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:24:30.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:24:30.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:24:30.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:24:30.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:24:30.938 [DEBUG] [Thread-204175] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:24:37.089 [DEBUG] [Thread-204177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:24:47.283 [DEBUG] [Thread-204178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:24:52.149 [DEBUG] [Thread-204179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:25:00.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:25:00.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:25:02.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 24, 39), 25.52, 17.89, 0.0, 17.93, 22.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:25:02.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:24:39
2026-02-15T12:25:03.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:25:03.535 [DEBUG] [Thread-204180] [transport.py] [_log()] starting thread (client mode): 0xa2d10820
2026-02-15T12:25:03.536 [DEBUG] [Thread-204180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:25:03.555 [DEBUG] [Thread-204180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:25:03.555 [INFO] [Thread-204180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:25:03.556 [DEBUG] [Thread-204180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] client lang: <none>
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] server lang: <none>
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] kex follows: False
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] Compression: none
2026-02-15T12:25:03.557 [DEBUG] [Thread-204180] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:25:03.565 [DEBUG] [Thread-204180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:25:03.565 [DEBUG] [Thread-204180] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:25:03.565 [DEBUG] [Thread-204180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:25:03.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:25:03.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:25:03.566 [DEBUG] [Thread-204180] [transport.py] [_log()] userauth is OK
2026-02-15T12:25:03.567 [DEBUG] [Thread-204180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:25:03.567 [DEBUG] [Thread-204180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:25:03.567 [DEBUG] [Thread-204180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:25:03.567 [DEBUG] [Thread-204180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:25:03.583 [INFO] [Thread-204180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:25:03.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:25:04.979 [DEBUG] [Thread-204180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:25:04.979 [DEBUG] [Thread-204180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:25:04.980 [DEBUG] [Thread-204180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:25:05.020 [DEBUG] [Thread-204180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:25:05.020 [DEBUG] [Thread-204180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:25:05.023 [DEBUG] [Thread-204180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:25:05.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:25:05.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:25:05.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:25:05.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:25:05.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:25:05.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:25:05.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:25:05.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:25:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:25:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.433778 -999.00  +20.70  13.91     25   +0.10 1 1 1 1 1   888    0 25.54 174.99 ----- 13.9 13.9 163.4 23.1 27.9 -29.1 27.1 -29.7 26.8 -26.4 27.9 -28.6
2026-02-15T12:25:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:25:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:25:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.433778
2026-02-15T12:25:05.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:25:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:25:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:25:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:25:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:25:05.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:24:39', tmtdew=25.52, humidity=17.89, cloud=0.0, wind=17.93, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:24:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:25:05.081 [DEBUG] [Thread-204180] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:25:05.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:25:05.183 [DEBUG] [Thread-204183] [transport.py] [_log()] starting thread (client mode): 0xa2d104f0
2026-02-15T12:25:05.183 [DEBUG] [Thread-204183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:25:05.198 [DEBUG] [Thread-204183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:25:05.198 [INFO] [Thread-204183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:25:05.205 [DEBUG] [Thread-204183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:25:05.205 [DEBUG] [Thread-204183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:25:05.205 [DEBUG] [Thread-204183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] client lang: <none>
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] server lang: <none>
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] kex follows: False
2026-02-15T12:25:05.206 [DEBUG] [Thread-204183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:25:05.207 [DEBUG] [Thread-204183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:25:05.207 [DEBUG] [Thread-204183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:25:05.207 [DEBUG] [Thread-204183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:25:05.207 [DEBUG] [Thread-204183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:25:05.207 [DEBUG] [Thread-204183] [transport.py] [_log()] Compression: none
2026-02-15T12:25:05.207 [DEBUG] [Thread-204183] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:25:05.265 [DEBUG] [Thread-204183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:25:05.266 [DEBUG] [Thread-204183] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:25:05.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:25:05.267 [DEBUG] [Thread-204183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:25:05.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:25:05.324 [DEBUG] [Thread-204183] [transport.py] [_log()] userauth is OK
2026-02-15T12:25:05.324 [DEBUG] [Thread-204183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:25:05.324 [DEBUG] [Thread-204183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:25:05.324 [DEBUG] [Thread-204183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:25:05.324 [DEBUG] [Thread-204183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:25:05.347 [INFO] [Thread-204183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:25:05.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:25:05.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:25:06.159 [DEBUG] [Thread-204183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:25:06.159 [DEBUG] [Thread-204183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:25:06.207 [DEBUG] [Thread-204183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:25:06.207 [DEBUG] [Thread-204183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:25:06.216 [DEBUG] [Thread-204183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:25:06.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:25:06.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:25:06.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:25:06.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:25:06.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:25:06.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:25:06.258 [DEBUG] [Thread-204183] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:25:07.181 [DEBUG] [Thread-204185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:22.240 [DEBUG] [Thread-204186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:24.077 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:24.078 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:36.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:25:36.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:25:36.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:25:37.279 [DEBUG] [Thread-204187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 25, 14), 24.73, 18.83, 0.0, 26.78, 20.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:25:38.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:25:14
2026-02-15T12:25:38.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:25:38.697 [DEBUG] [Thread-204188] [transport.py] [_log()] starting thread (client mode): 0xa57596c0
2026-02-15T12:25:38.697 [DEBUG] [Thread-204188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:25:38.718 [DEBUG] [Thread-204188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:25:38.718 [INFO] [Thread-204188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] client lang: <none>
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] server lang: <none>
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] kex follows: False
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:25:38.721 [DEBUG] [Thread-204188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:25:38.722 [DEBUG] [Thread-204188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:25:38.722 [DEBUG] [Thread-204188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:25:38.722 [DEBUG] [Thread-204188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:25:38.722 [DEBUG] [Thread-204188] [transport.py] [_log()] Compression: none
2026-02-15T12:25:38.722 [DEBUG] [Thread-204188] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:25:38.738 [DEBUG] [Thread-204188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:25:38.738 [DEBUG] [Thread-204188] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:25:38.739 [DEBUG] [Thread-204188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:25:38.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:25:38.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:25:38.741 [DEBUG] [Thread-204188] [transport.py] [_log()] userauth is OK
2026-02-15T12:25:38.741 [DEBUG] [Thread-204188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:25:38.741 [DEBUG] [Thread-204188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:25:38.741 [DEBUG] [Thread-204188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:25:38.741 [DEBUG] [Thread-204188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:25:38.760 [INFO] [Thread-204188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:25:38.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:25:39.368 [DEBUG] [Thread-204188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:25:39.368 [DEBUG] [Thread-204188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:25:39.369 [DEBUG] [Thread-204188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:25:39.409 [DEBUG] [Thread-204188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:25:39.410 [DEBUG] [Thread-204188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:25:39.413 [DEBUG] [Thread-204188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:25:39.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:25:39.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:25:39.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:25:39.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:25:39.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:25:39.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:25:39.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:25:39.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:25:39.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:25:39.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.434125 -999.00  +20.60  22.69     25   +0.00 1 1 1 1 1   888    0 25.26 153.36 ----- 22.7 22.7 143.4 25.6 28.0 -27.5 27.0 -26.4 26.8 -26.8 27.9 -29.1
2026-02-15T12:25:39.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:25:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:25:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.434125
2026-02-15T12:25:39.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:25:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:25:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:25:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:25:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:25:39.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:25:14', tmtdew=24.73, humidity=18.83, cloud=0.0, wind=26.78, temperature=20.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:25:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:25:39.441 [DEBUG] [Thread-204188] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:25:39.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:25:39.538 [DEBUG] [Thread-204191] [transport.py] [_log()] starting thread (client mode): 0xa2dc1420
2026-02-15T12:25:39.538 [DEBUG] [Thread-204191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:25:39.552 [DEBUG] [Thread-204191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:25:39.553 [INFO] [Thread-204191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:25:39.560 [DEBUG] [Thread-204191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] client lang: <none>
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] server lang: <none>
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] kex follows: False
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:25:39.561 [DEBUG] [Thread-204191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:25:39.562 [DEBUG] [Thread-204191] [transport.py] [_log()] Compression: none
2026-02-15T12:25:39.562 [DEBUG] [Thread-204191] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:25:39.620 [DEBUG] [Thread-204191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:25:39.621 [DEBUG] [Thread-204191] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:25:39.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:25:39.622 [DEBUG] [Thread-204191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:25:39.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:25:39.683 [DEBUG] [Thread-204191] [transport.py] [_log()] userauth is OK
2026-02-15T12:25:39.683 [DEBUG] [Thread-204191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:25:39.683 [DEBUG] [Thread-204191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:25:39.683 [DEBUG] [Thread-204191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:25:39.683 [DEBUG] [Thread-204191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:25:39.712 [INFO] [Thread-204191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:25:39.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:25:39.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:25:40.522 [DEBUG] [Thread-204191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:25:40.522 [DEBUG] [Thread-204191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:25:40.570 [DEBUG] [Thread-204191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:25:40.571 [DEBUG] [Thread-204191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:25:40.579 [DEBUG] [Thread-204191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:25:40.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:25:40.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:25:40.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:25:40.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:25:40.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:25:40.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:25:40.617 [DEBUG] [Thread-204191] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:25:47.317 [DEBUG] [Thread-204193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:25:52.313 [DEBUG] [Thread-204194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:07.371 [DEBUG] [Thread-204195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:10.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:26:10.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:26:10.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:26:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 25, 51), 25.31, 17.99, 0.0, 20.2, 20.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:26:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:25:51
2026-02-15T12:26:13.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:26:13.927 [DEBUG] [Thread-204196] [transport.py] [_log()] starting thread (client mode): 0xa57e23b0
2026-02-15T12:26:13.927 [DEBUG] [Thread-204196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:26:13.941 [DEBUG] [Thread-204196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:26:13.941 [INFO] [Thread-204196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:26:13.944 [DEBUG] [Thread-204196] [transport.py] [_log()] client lang: <none>
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] server lang: <none>
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] kex follows: False
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] Compression: none
2026-02-15T12:26:13.945 [DEBUG] [Thread-204196] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:26:13.961 [DEBUG] [Thread-204196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:26:13.961 [DEBUG] [Thread-204196] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:26:13.961 [DEBUG] [Thread-204196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:26:13.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:26:13.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:26:13.962 [DEBUG] [Thread-204196] [transport.py] [_log()] userauth is OK
2026-02-15T12:26:13.962 [DEBUG] [Thread-204196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:26:13.962 [DEBUG] [Thread-204196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:26:13.962 [DEBUG] [Thread-204196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:26:13.962 [DEBUG] [Thread-204196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:26:13.978 [INFO] [Thread-204196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:26:13.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:26:14.615 [DEBUG] [Thread-204196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:26:14.615 [DEBUG] [Thread-204196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:26:14.615 [DEBUG] [Thread-204196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:26:14.657 [DEBUG] [Thread-204196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:26:14.657 [DEBUG] [Thread-204196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:26:14.660 [DEBUG] [Thread-204196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:26:14.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:26:14.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:26:14.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:26:14.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:26:14.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:26:14.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:26:14.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:26:14.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:26:14.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:26:14.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.434473 -999.00  +20.40  20.97     25   +0.20 1 1 1 1 1   888    0 26.05 169.90 ----- 21.0 21.0 129.6 25.1 28.0 -28.5 27.0 -27.6 26.9 -25.8 27.8 -28.0
2026-02-15T12:26:14.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:26:14.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:26:14.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.434473
2026-02-15T12:26:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:26:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:26:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:26:14.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:26:14.686 [DEBUG] [Thread-204196] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:26:14.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:26:14.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:25:51', tmtdew=25.31, humidity=17.99, cloud=0.0, wind=20.2, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:25:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:26:14.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:26:14.784 [DEBUG] [Thread-204199] [transport.py] [_log()] starting thread (client mode): 0xa57e26e0
2026-02-15T12:26:14.784 [DEBUG] [Thread-204199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:26:14.800 [DEBUG] [Thread-204199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:26:14.800 [INFO] [Thread-204199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] client lang: <none>
2026-02-15T12:26:14.808 [DEBUG] [Thread-204199] [transport.py] [_log()] server lang: <none>
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] kex follows: False
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] Compression: none
2026-02-15T12:26:14.809 [DEBUG] [Thread-204199] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:26:14.866 [DEBUG] [Thread-204199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:26:14.867 [DEBUG] [Thread-204199] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:26:14.867 [DEBUG] [Thread-204199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:26:14.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:26:14.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:26:14.923 [DEBUG] [Thread-204199] [transport.py] [_log()] userauth is OK
2026-02-15T12:26:14.923 [DEBUG] [Thread-204199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:26:14.924 [DEBUG] [Thread-204199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:26:14.924 [DEBUG] [Thread-204199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:26:14.924 [DEBUG] [Thread-204199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:26:14.949 [INFO] [Thread-204199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:26:14.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:26:14.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:26:15.784 [DEBUG] [Thread-204199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:26:15.784 [DEBUG] [Thread-204199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:26:15.832 [DEBUG] [Thread-204199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:26:15.833 [DEBUG] [Thread-204199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:26:15.842 [DEBUG] [Thread-204199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:26:15.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:26:15.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:26:15.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:26:15.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:26:15.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:26:15.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:26:15.879 [DEBUG] [Thread-204199] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:26:22.413 [DEBUG] [Thread-204201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:24.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:24.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:37.466 [DEBUG] [Thread-204202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:45.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:26:45.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:26:45.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:26:47.356 [DEBUG] [Thread-204203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:26:47.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 26, 26), 25.49, 17.82, 0.0, 20.77, 20.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:26:47.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:26:26
2026-02-15T12:26:48.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:26:48.373 [DEBUG] [Thread-204204] [transport.py] [_log()] starting thread (client mode): 0xa57e0f70
2026-02-15T12:26:48.373 [DEBUG] [Thread-204204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:26:48.395 [DEBUG] [Thread-204204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:26:48.396 [INFO] [Thread-204204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:26:48.398 [DEBUG] [Thread-204204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] client lang: <none>
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] server lang: <none>
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] kex follows: False
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] Compression: none
2026-02-15T12:26:48.399 [DEBUG] [Thread-204204] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:26:48.416 [DEBUG] [Thread-204204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:26:48.417 [DEBUG] [Thread-204204] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:26:48.417 [DEBUG] [Thread-204204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:26:48.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:26:48.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:26:48.419 [DEBUG] [Thread-204204] [transport.py] [_log()] userauth is OK
2026-02-15T12:26:48.420 [DEBUG] [Thread-204204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:26:48.420 [DEBUG] [Thread-204204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:26:48.420 [DEBUG] [Thread-204204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:26:48.420 [DEBUG] [Thread-204204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:26:48.434 [INFO] [Thread-204204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:26:48.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:26:49.056 [DEBUG] [Thread-204204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:26:49.056 [DEBUG] [Thread-204204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:26:49.056 [DEBUG] [Thread-204204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:26:49.097 [DEBUG] [Thread-204204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:26:49.097 [DEBUG] [Thread-204204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:26:49.100 [DEBUG] [Thread-204204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:26:49.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:26:49.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:26:49.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:26:49.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:26:49.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:26:49.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:26:49.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:26:49.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:26:49.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:26:49.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.434820 -999.00  +20.70  16.86     26   +0.50 1 1 1 1 1   888    0 25.16 148.11 ----- 16.9 16.9 145.2 21.2 27.9 -27.8 27.1 -27.2 26.9 -26.2 27.9 -27.6
2026-02-15T12:26:49.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:26:49.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:26:49.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.434820
2026-02-15T12:26:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:26:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:26:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:26:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:26:49.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:26:49.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:26:26', tmtdew=25.49, humidity=17.82, cloud=0.0, wind=20.77, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:26:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:26:49.128 [DEBUG] [Thread-204204] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:26:49.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:26:49.237 [DEBUG] [Thread-204207] [transport.py] [_log()] starting thread (client mode): 0xa57e1300
2026-02-15T12:26:49.237 [DEBUG] [Thread-204207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:26:49.252 [DEBUG] [Thread-204207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:26:49.252 [INFO] [Thread-204207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:26:49.259 [DEBUG] [Thread-204207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:26:49.259 [DEBUG] [Thread-204207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] client lang: <none>
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] server lang: <none>
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] kex follows: False
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] Compression: none
2026-02-15T12:26:49.260 [DEBUG] [Thread-204207] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:26:49.326 [DEBUG] [Thread-204207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:26:49.326 [DEBUG] [Thread-204207] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:26:49.327 [DEBUG] [Thread-204207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:26:49.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:26:49.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:26:49.385 [DEBUG] [Thread-204207] [transport.py] [_log()] userauth is OK
2026-02-15T12:26:49.385 [DEBUG] [Thread-204207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:26:49.386 [DEBUG] [Thread-204207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:26:49.386 [DEBUG] [Thread-204207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:26:49.386 [DEBUG] [Thread-204207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:26:49.404 [INFO] [Thread-204207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:26:49.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:26:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:26:50.249 [DEBUG] [Thread-204207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:26:50.249 [DEBUG] [Thread-204207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:26:50.297 [DEBUG] [Thread-204207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:26:50.297 [DEBUG] [Thread-204207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:26:50.306 [DEBUG] [Thread-204207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:26:50.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:26:50.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:26:50.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:26:50.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:26:50.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:26:50.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:26:50.343 [DEBUG] [Thread-204207] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:26:52.503 [DEBUG] [Thread-204209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:07.555 [DEBUG] [Thread-204210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:20.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:27:20.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:27:20.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:27:22.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 27, 2), 25.43, 17.89, 0.0, 19.34, 20.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:27:22.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:27:02
2026-02-15T12:27:22.588 [DEBUG] [Thread-204211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:22.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:27:22.763 [DEBUG] [Thread-204212] [transport.py] [_log()] starting thread (client mode): 0xa2d13be0
2026-02-15T12:27:22.763 [DEBUG] [Thread-204212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:27:22.783 [DEBUG] [Thread-204212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:27:22.783 [INFO] [Thread-204212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:27:22.786 [DEBUG] [Thread-204212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:27:22.786 [DEBUG] [Thread-204212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:27:22.786 [DEBUG] [Thread-204212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:27:22.786 [DEBUG] [Thread-204212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:22.786 [DEBUG] [Thread-204212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:22.786 [DEBUG] [Thread-204212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] client lang: <none>
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] server lang: <none>
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] kex follows: False
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] Compression: none
2026-02-15T12:27:22.787 [DEBUG] [Thread-204212] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:27:22.806 [DEBUG] [Thread-204212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:27:22.806 [DEBUG] [Thread-204212] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:27:22.807 [DEBUG] [Thread-204212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:27:22.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:27:22.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:27:22.809 [DEBUG] [Thread-204212] [transport.py] [_log()] userauth is OK
2026-02-15T12:27:22.810 [DEBUG] [Thread-204212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:27:22.810 [DEBUG] [Thread-204212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:27:22.810 [DEBUG] [Thread-204212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:27:22.810 [DEBUG] [Thread-204212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:27:22.835 [INFO] [Thread-204212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:27:22.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:27:23.576 [DEBUG] [Thread-204212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:27:23.576 [DEBUG] [Thread-204212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:27:23.576 [DEBUG] [Thread-204212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:27:23.616 [DEBUG] [Thread-204212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:27:23.617 [DEBUG] [Thread-204212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:27:23.620 [DEBUG] [Thread-204212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:27:23.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:27:23.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:27:23.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:27:23.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:27:23.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:27:23.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:27:23.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:27:23.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:27:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:27:23.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.435168 -999.00  +21.20  23.75     25   +0.70 1 1 1 1 1   888    0 25.06 148.86 ----- 23.8 23.8 133.4 39.0 28.1 -27.7 27.2 -26.3 27.1 -24.5 27.9 -26.0
2026-02-15T12:27:23.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:27:23.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:27:23.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.435168
2026-02-15T12:27:23.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:27:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:27:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:27:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:27:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:27:23.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:27:02', tmtdew=25.43, humidity=17.89, cloud=0.0, wind=19.34, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:26:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:27:23.646 [DEBUG] [Thread-204212] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:27:23.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:27:23.744 [DEBUG] [Thread-204215] [transport.py] [_log()] starting thread (client mode): 0xa57e14e0
2026-02-15T12:27:23.744 [DEBUG] [Thread-204215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:27:23.758 [DEBUG] [Thread-204215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:27:23.759 [INFO] [Thread-204215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:27:23.766 [DEBUG] [Thread-204215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:27:23.766 [DEBUG] [Thread-204215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:27:23.766 [DEBUG] [Thread-204215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:27:23.766 [DEBUG] [Thread-204215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:23.766 [DEBUG] [Thread-204215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:23.766 [DEBUG] [Thread-204215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] client lang: <none>
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] server lang: <none>
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] kex follows: False
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] Compression: none
2026-02-15T12:27:23.767 [DEBUG] [Thread-204215] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:27:23.824 [DEBUG] [Thread-204215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:27:23.825 [DEBUG] [Thread-204215] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:27:23.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:27:23.826 [DEBUG] [Thread-204215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:27:23.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:27:23.883 [DEBUG] [Thread-204215] [transport.py] [_log()] userauth is OK
2026-02-15T12:27:23.883 [DEBUG] [Thread-204215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:27:23.883 [DEBUG] [Thread-204215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:27:23.883 [DEBUG] [Thread-204215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:27:23.884 [DEBUG] [Thread-204215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:27:23.897 [INFO] [Thread-204215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:27:23.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:27:23.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:27:24.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:24.362 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:24.701 [DEBUG] [Thread-204215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:27:24.701 [DEBUG] [Thread-204215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:27:24.749 [DEBUG] [Thread-204215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:27:24.749 [DEBUG] [Thread-204215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:27:24.758 [DEBUG] [Thread-204215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:27:24.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:27:24.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:27:24.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:27:24.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:27:24.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:27:24.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:27:24.792 [DEBUG] [Thread-204215] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:27:37.624 [DEBUG] [Thread-204217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:47.391 [DEBUG] [Thread-204218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:52.674 [DEBUG] [Thread-204219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:27:54.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:27:54.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:27:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:27:56.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 27, 38), 28.21, 14.61, 0.0, 31.65, 22.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:27:56.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:27:38
2026-02-15T12:27:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:27:57.458 [DEBUG] [Thread-204220] [transport.py] [_log()] starting thread (client mode): 0xa5740190
2026-02-15T12:27:57.458 [DEBUG] [Thread-204220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:27:57.478 [DEBUG] [Thread-204220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:27:57.479 [INFO] [Thread-204220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:27:57.482 [DEBUG] [Thread-204220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:27:57.482 [DEBUG] [Thread-204220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] client lang: <none>
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] server lang: <none>
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] kex follows: False
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] Compression: none
2026-02-15T12:27:57.483 [DEBUG] [Thread-204220] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:27:57.498 [DEBUG] [Thread-204220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:27:57.499 [DEBUG] [Thread-204220] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:27:57.500 [DEBUG] [Thread-204220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:27:57.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:27:57.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:27:57.502 [DEBUG] [Thread-204220] [transport.py] [_log()] userauth is OK
2026-02-15T12:27:57.502 [DEBUG] [Thread-204220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:27:57.502 [DEBUG] [Thread-204220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:27:57.502 [DEBUG] [Thread-204220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:27:57.502 [DEBUG] [Thread-204220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:27:57.539 [INFO] [Thread-204220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:27:57.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:27:58.139 [DEBUG] [Thread-204220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:27:58.139 [DEBUG] [Thread-204220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:27:58.140 [DEBUG] [Thread-204220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:27:58.180 [DEBUG] [Thread-204220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:27:58.180 [DEBUG] [Thread-204220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:27:58.183 [DEBUG] [Thread-204220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:27:58.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:27:58.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:27:58.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:27:58.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:27:58.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:27:58.203 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:27:58.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:27:58.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:27:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:27:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.435515 -999.00  +21.40  15.47     21   -1.60 1 1 1 1 1   888    0 25.23 135.54 ----- 15.5 15.5 105.2 20.6 27.9 -30.6 27.2 -26.8 27.0 -26.7 28.0 -27.3
2026-02-15T12:27:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:27:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:27:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.435515
2026-02-15T12:27:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:27:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:27:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:27:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:27:58.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:27:58.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:27:38', tmtdew=28.21, humidity=14.61, cloud=0.0, wind=31.65, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:27:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:27:58.206 [DEBUG] [Thread-204220] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:27:58.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:27:58.302 [DEBUG] [Thread-204223] [transport.py] [_log()] starting thread (client mode): 0xa81d72e0
2026-02-15T12:27:58.302 [DEBUG] [Thread-204223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:27:58.317 [DEBUG] [Thread-204223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:27:58.317 [INFO] [Thread-204223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:27:58.324 [DEBUG] [Thread-204223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] client lang: <none>
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] server lang: <none>
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] kex follows: False
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] Compression: none
2026-02-15T12:27:58.325 [DEBUG] [Thread-204223] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:27:58.389 [DEBUG] [Thread-204223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:27:58.390 [DEBUG] [Thread-204223] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:27:58.390 [DEBUG] [Thread-204223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:27:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:27:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:27:58.447 [DEBUG] [Thread-204223] [transport.py] [_log()] userauth is OK
2026-02-15T12:27:58.447 [DEBUG] [Thread-204223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:27:58.447 [DEBUG] [Thread-204223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:27:58.447 [DEBUG] [Thread-204223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:27:58.447 [DEBUG] [Thread-204223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:27:58.466 [INFO] [Thread-204223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:27:58.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:27:58.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:27:59.303 [DEBUG] [Thread-204223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:27:59.303 [DEBUG] [Thread-204223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:27:59.350 [DEBUG] [Thread-204223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:27:59.351 [DEBUG] [Thread-204223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:27:59.360 [DEBUG] [Thread-204223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:27:59.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:27:59.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:27:59.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:27:59.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:27:59.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:27:59.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:27:59.397 [DEBUG] [Thread-204223] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:28:07.708 [DEBUG] [Thread-204225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:28:22.762 [DEBUG] [Thread-204226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:28:24.505 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:28:24.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:28:29.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:28:29.415 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:28:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:28:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 28, 13), 26.37, 17.06, 0.0, 23.27, 21.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:28:31.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:28:13
2026-02-15T12:28:31.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:28:31.868 [DEBUG] [Thread-204227] [transport.py] [_log()] starting thread (client mode): 0xa5740880
2026-02-15T12:28:31.868 [DEBUG] [Thread-204227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:28:31.887 [DEBUG] [Thread-204227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:28:31.887 [INFO] [Thread-204227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:28:31.890 [DEBUG] [Thread-204227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:28:31.890 [DEBUG] [Thread-204227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:28:31.890 [DEBUG] [Thread-204227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] client lang: <none>
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] server lang: <none>
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] kex follows: False
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] Compression: none
2026-02-15T12:28:31.891 [DEBUG] [Thread-204227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:28:31.908 [DEBUG] [Thread-204227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:28:31.909 [DEBUG] [Thread-204227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:28:31.909 [DEBUG] [Thread-204227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:28:31.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:28:31.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:28:31.911 [DEBUG] [Thread-204227] [transport.py] [_log()] userauth is OK
2026-02-15T12:28:31.912 [DEBUG] [Thread-204227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:28:31.912 [DEBUG] [Thread-204227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:28:31.912 [DEBUG] [Thread-204227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:28:31.912 [DEBUG] [Thread-204227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:28:31.931 [INFO] [Thread-204227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:28:31.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:28:32.508 [DEBUG] [Thread-204227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:28:32.508 [DEBUG] [Thread-204227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:28:32.508 [DEBUG] [Thread-204227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:28:32.548 [DEBUG] [Thread-204227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:28:32.548 [DEBUG] [Thread-204227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:28:32.552 [DEBUG] [Thread-204227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:28:32.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:28:32.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:28:32.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:28:32.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:28:32.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:28:32.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:28:32.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:28:32.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:28:32.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:28:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.436209 -999.00  +21.60  19.03     22   -0.50 1 1 1 1 1   888    0 24.40 136.35 ----- 19.0 19.0 119.4 22.4 28.1 -28.9 27.4 -26.7 27.2 -26.3 28.2 -26.9
2026-02-15T12:28:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:28:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:28:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.436209
2026-02-15T12:28:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:28:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:28:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:28:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:28:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:28:32.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:28:13', tmtdew=26.37, humidity=17.06, cloud=0.0, wind=23.27, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:28:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:28:32.580 [DEBUG] [Thread-204227] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:28:32.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:28:32.676 [DEBUG] [Thread-204230] [transport.py] [_log()] starting thread (client mode): 0xa5743f40
2026-02-15T12:28:32.676 [DEBUG] [Thread-204230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:28:32.690 [DEBUG] [Thread-204230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:28:32.690 [INFO] [Thread-204230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:28:32.698 [DEBUG] [Thread-204230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:28:32.698 [DEBUG] [Thread-204230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:28:32.698 [DEBUG] [Thread-204230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:28:32.698 [DEBUG] [Thread-204230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:28:32.698 [DEBUG] [Thread-204230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] client lang: <none>
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] server lang: <none>
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] kex follows: False
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:28:32.699 [DEBUG] [Thread-204230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:28:32.700 [DEBUG] [Thread-204230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:28:32.700 [DEBUG] [Thread-204230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:28:32.700 [DEBUG] [Thread-204230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:28:32.700 [DEBUG] [Thread-204230] [transport.py] [_log()] Compression: none
2026-02-15T12:28:32.700 [DEBUG] [Thread-204230] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:28:32.759 [DEBUG] [Thread-204230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:28:32.760 [DEBUG] [Thread-204230] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:28:32.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:28:32.762 [DEBUG] [Thread-204230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:28:32.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:28:32.827 [DEBUG] [Thread-204230] [transport.py] [_log()] userauth is OK
2026-02-15T12:28:32.827 [DEBUG] [Thread-204230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:28:32.827 [DEBUG] [Thread-204230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:28:32.827 [DEBUG] [Thread-204230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:28:32.827 [DEBUG] [Thread-204230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:28:32.847 [INFO] [Thread-204230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:28:32.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:28:32.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:28:33.680 [DEBUG] [Thread-204230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:28:33.680 [DEBUG] [Thread-204230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:28:33.727 [DEBUG] [Thread-204230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:28:33.728 [DEBUG] [Thread-204230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:28:33.737 [DEBUG] [Thread-204230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:28:33.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:28:33.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:28:33.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:28:33.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:28:33.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:28:33.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:28:33.772 [DEBUG] [Thread-204230] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:28:37.798 [DEBUG] [Thread-204232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:28:47.434 [DEBUG] [Thread-204233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:28:52.851 [DEBUG] [Thread-204234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:29:03.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:29:03.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:29:05.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 28, 49), 26.56, 16.99, 0.0, 10.85, 22.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:29:05.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:28:49
2026-02-15T12:29:06.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:29:06.302 [DEBUG] [Thread-204235] [transport.py] [_log()] starting thread (client mode): 0xa5743700
2026-02-15T12:29:06.302 [DEBUG] [Thread-204235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:29:06.325 [DEBUG] [Thread-204235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:29:06.325 [INFO] [Thread-204235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:29:06.327 [DEBUG] [Thread-204235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] client lang: <none>
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] server lang: <none>
2026-02-15T12:29:06.328 [DEBUG] [Thread-204235] [transport.py] [_log()] kex follows: False
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] Compression: none
2026-02-15T12:29:06.329 [DEBUG] [Thread-204235] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:29:06.349 [DEBUG] [Thread-204235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:29:06.350 [DEBUG] [Thread-204235] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:29:06.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:29:06.351 [DEBUG] [Thread-204235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:29:06.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:29:06.353 [DEBUG] [Thread-204235] [transport.py] [_log()] userauth is OK
2026-02-15T12:29:06.353 [DEBUG] [Thread-204235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:29:06.353 [DEBUG] [Thread-204235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:29:06.354 [DEBUG] [Thread-204235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:29:06.354 [DEBUG] [Thread-204235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:29:06.377 [INFO] [Thread-204235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:29:06.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:29:07.044 [DEBUG] [Thread-204235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:29:07.045 [DEBUG] [Thread-204235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:29:07.045 [DEBUG] [Thread-204235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:29:07.086 [DEBUG] [Thread-204235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:29:07.086 [DEBUG] [Thread-204235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:29:07.090 [DEBUG] [Thread-204235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:29:07.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:29:07.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:29:07.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:29:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:29:07.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:29:07.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:29:07.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:29:07.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:29:07.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:29:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.436556 -999.00  +21.30  14.06     20   -2.00 1 1 1 1 1   888    0 24.97 148.63 ----- 14.1 14.1 93.5 24.6 27.8 -32.6 27.4 -28.8 27.2 -26.4 28.1 -28.4
2026-02-15T12:29:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:29:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:29:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.436556
2026-02-15T12:29:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:29:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:29:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:29:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:29:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:29:07.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:28:49', tmtdew=26.56, humidity=16.99, cloud=0.0, wind=10.85, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:28:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:29:07.115 [DEBUG] [Thread-204235] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:29:07.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:29:07.211 [DEBUG] [Thread-204238] [transport.py] [_log()] starting thread (client mode): 0xa57e1f30
2026-02-15T12:29:07.211 [DEBUG] [Thread-204238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:29:07.226 [DEBUG] [Thread-204238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:29:07.227 [INFO] [Thread-204238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:29:07.234 [DEBUG] [Thread-204238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:29:07.234 [DEBUG] [Thread-204238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] client lang: <none>
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] server lang: <none>
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] kex follows: False
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] Compression: none
2026-02-15T12:29:07.235 [DEBUG] [Thread-204238] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:29:07.293 [DEBUG] [Thread-204238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:29:07.293 [DEBUG] [Thread-204238] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:29:07.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:29:07.294 [DEBUG] [Thread-204238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:29:07.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:29:07.349 [DEBUG] [Thread-204238] [transport.py] [_log()] userauth is OK
2026-02-15T12:29:07.349 [DEBUG] [Thread-204238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:29:07.349 [DEBUG] [Thread-204238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:29:07.349 [DEBUG] [Thread-204238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:29:07.349 [DEBUG] [Thread-204238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:29:07.368 [INFO] [Thread-204238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:29:07.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:29:07.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:29:07.889 [DEBUG] [Thread-204240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:08.192 [DEBUG] [Thread-204238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:29:08.193 [DEBUG] [Thread-204238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:29:08.240 [DEBUG] [Thread-204238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:29:08.240 [DEBUG] [Thread-204238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:29:08.249 [DEBUG] [Thread-204238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:29:08.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:29:08.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:29:08.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:29:08.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:29:08.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:29:08.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:29:08.285 [DEBUG] [Thread-204238] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:29:22.941 [DEBUG] [Thread-204241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:24.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:24.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:37.976 [DEBUG] [Thread-204242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:38.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:29:38.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:29:38.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:29:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 29, 24), 26.52, 17.04, 0.0, 13.23, 22.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:29:40.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:29:24
2026-02-15T12:29:40.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:29:40.667 [DEBUG] [Thread-204243] [transport.py] [_log()] starting thread (client mode): 0xa5743dc0
2026-02-15T12:29:40.668 [DEBUG] [Thread-204243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:29:40.686 [DEBUG] [Thread-204243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:29:40.687 [INFO] [Thread-204243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:29:40.690 [DEBUG] [Thread-204243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:29:40.690 [DEBUG] [Thread-204243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] client lang: <none>
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] server lang: <none>
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] kex follows: False
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] Compression: none
2026-02-15T12:29:40.691 [DEBUG] [Thread-204243] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:29:40.708 [DEBUG] [Thread-204243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:29:40.709 [DEBUG] [Thread-204243] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:29:40.710 [DEBUG] [Thread-204243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:29:40.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:29:40.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:29:40.712 [DEBUG] [Thread-204243] [transport.py] [_log()] userauth is OK
2026-02-15T12:29:40.712 [DEBUG] [Thread-204243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:29:40.713 [DEBUG] [Thread-204243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:29:40.713 [DEBUG] [Thread-204243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:29:40.713 [DEBUG] [Thread-204243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:29:40.731 [INFO] [Thread-204243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:29:40.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:29:41.330 [DEBUG] [Thread-204243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:29:41.330 [DEBUG] [Thread-204243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:29:41.331 [DEBUG] [Thread-204243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:29:41.371 [DEBUG] [Thread-204243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:29:41.371 [DEBUG] [Thread-204243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:29:41.375 [DEBUG] [Thread-204243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:29:41.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:29:41.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:29:41.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:29:41.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:29:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:29:41.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:29:41.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:29:41.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:29:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:29:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.436903 -999.00  +21.10  17.75     20   -2.10 1 1 1 1 1   888    0 25.61 156.69 ----- 17.8 17.8 116.4 19.1 28.0 -29.7 27.4 -27.6 27.2 -26.4 28.1 -27.5
2026-02-15T12:29:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:29:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:29:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.436903
2026-02-15T12:29:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:29:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:29:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:29:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:29:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:29:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:29:24', tmtdew=26.52, humidity=17.04, cloud=0.0, wind=13.23, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:29:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:29:41.401 [DEBUG] [Thread-204243] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:29:41.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:29:41.498 [DEBUG] [Thread-204246] [transport.py] [_log()] starting thread (client mode): 0xa81d51e0
2026-02-15T12:29:41.498 [DEBUG] [Thread-204246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:29:41.513 [DEBUG] [Thread-204246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:29:41.513 [INFO] [Thread-204246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] client lang: <none>
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] server lang: <none>
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] kex follows: False
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:29:41.521 [DEBUG] [Thread-204246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:29:41.522 [DEBUG] [Thread-204246] [transport.py] [_log()] Compression: none
2026-02-15T12:29:41.522 [DEBUG] [Thread-204246] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:29:41.581 [DEBUG] [Thread-204246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:29:41.581 [DEBUG] [Thread-204246] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:29:41.582 [DEBUG] [Thread-204246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:29:41.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:29:41.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:29:41.636 [DEBUG] [Thread-204246] [transport.py] [_log()] userauth is OK
2026-02-15T12:29:41.636 [DEBUG] [Thread-204246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:29:41.636 [DEBUG] [Thread-204246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:29:41.636 [DEBUG] [Thread-204246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:29:41.637 [DEBUG] [Thread-204246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:29:41.655 [INFO] [Thread-204246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:29:41.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:29:41.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:29:42.475 [DEBUG] [Thread-204246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:29:42.475 [DEBUG] [Thread-204246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:29:42.525 [DEBUG] [Thread-204246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:29:42.525 [DEBUG] [Thread-204246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:29:42.534 [DEBUG] [Thread-204246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:29:42.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:29:42.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:29:42.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:29:42.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:29:42.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:29:42.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:29:42.578 [DEBUG] [Thread-204246] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:29:47.479 [DEBUG] [Thread-204248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:29:53.012 [DEBUG] [Thread-204249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:08.060 [DEBUG] [Thread-204250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:12.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:30:12.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:30:12.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:30:14.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 30), 27.96, 14.91, 0.0, 17.84, 22.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:30:14.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:30:00
2026-02-15T12:30:15.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:30:15.378 [DEBUG] [Thread-204251] [transport.py] [_log()] starting thread (client mode): 0xa81d7d60
2026-02-15T12:30:15.378 [DEBUG] [Thread-204251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:30:15.398 [DEBUG] [Thread-204251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:30:15.399 [INFO] [Thread-204251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] client lang: <none>
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] server lang: <none>
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] kex follows: False
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:30:15.402 [DEBUG] [Thread-204251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:30:15.403 [DEBUG] [Thread-204251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:30:15.403 [DEBUG] [Thread-204251] [transport.py] [_log()] Compression: none
2026-02-15T12:30:15.403 [DEBUG] [Thread-204251] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:30:15.420 [DEBUG] [Thread-204251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:30:15.420 [DEBUG] [Thread-204251] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:30:15.421 [DEBUG] [Thread-204251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:30:15.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:30:15.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:30:15.423 [DEBUG] [Thread-204251] [transport.py] [_log()] userauth is OK
2026-02-15T12:30:15.423 [DEBUG] [Thread-204251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:30:15.423 [DEBUG] [Thread-204251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:30:15.423 [DEBUG] [Thread-204251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:30:15.423 [DEBUG] [Thread-204251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:30:15.447 [INFO] [Thread-204251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:30:15.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:30:18.492 [DEBUG] [Thread-204251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:30:18.492 [DEBUG] [Thread-204251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:30:18.493 [DEBUG] [Thread-204251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:30:18.533 [DEBUG] [Thread-204251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:30:18.533 [DEBUG] [Thread-204251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:30:18.537 [DEBUG] [Thread-204251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:30:18.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:30:18.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:30:18.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:30:18.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:30:18.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:30:18.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:30:18.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:30:18.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:30:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:30:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.437251 -999.00  +21.10  14.02     22   -1.00 1 1 1 1 1   888    0 25.01 151.89 ----- 14.0 14.0 146.8 19.1 27.9 -27.0 27.4 -26.3 27.3 -25.2 28.1 -26.2
2026-02-15T12:30:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:30:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:30:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.437251
2026-02-15T12:30:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:30:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:30:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:30:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:30:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:30:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:30:00', tmtdew=27.96, humidity=14.91, cloud=0.0, wind=17.84, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:29:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:30:18.562 [DEBUG] [Thread-204251] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:30:18.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:30:18.657 [DEBUG] [Thread-204254] [transport.py] [_log()] starting thread (client mode): 0xa57408e0
2026-02-15T12:30:18.657 [DEBUG] [Thread-204254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:30:18.672 [DEBUG] [Thread-204254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:30:18.672 [INFO] [Thread-204254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:30:18.679 [DEBUG] [Thread-204254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:30:18.679 [DEBUG] [Thread-204254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:30:18.679 [DEBUG] [Thread-204254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] client lang: <none>
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] server lang: <none>
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] kex follows: False
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] Compression: none
2026-02-15T12:30:18.680 [DEBUG] [Thread-204254] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:30:18.739 [DEBUG] [Thread-204254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:30:18.740 [DEBUG] [Thread-204254] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:30:18.741 [DEBUG] [Thread-204254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:30:18.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:30:18.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:30:18.796 [DEBUG] [Thread-204254] [transport.py] [_log()] userauth is OK
2026-02-15T12:30:18.796 [DEBUG] [Thread-204254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:30:18.796 [DEBUG] [Thread-204254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:30:18.796 [DEBUG] [Thread-204254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:30:18.796 [DEBUG] [Thread-204254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:30:18.815 [INFO] [Thread-204254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:30:18.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:30:18.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:30:19.651 [DEBUG] [Thread-204254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:30:19.651 [DEBUG] [Thread-204254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:30:19.699 [DEBUG] [Thread-204254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:30:19.700 [DEBUG] [Thread-204254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:30:19.708 [DEBUG] [Thread-204254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:30:19.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:30:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:30:19.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:30:19.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:30:19.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:30:19.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:30:19.744 [DEBUG] [Thread-204254] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:30:23.098 [DEBUG] [Thread-204256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:24.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:24.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:38.157 [DEBUG] [Thread-204257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:47.531 [DEBUG] [Thread-204258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:49.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:30:49.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:30:49.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:30:51.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 30, 36), 28.53, 14.38, 0.0, 18.63, 22.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:30:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:30:36
2026-02-15T12:30:51.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:30:51.975 [DEBUG] [Thread-204259] [transport.py] [_log()] starting thread (client mode): 0xa57406a0
2026-02-15T12:30:51.975 [DEBUG] [Thread-204259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:30:51.996 [DEBUG] [Thread-204259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:30:51.996 [INFO] [Thread-204259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:51.999 [DEBUG] [Thread-204259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] client lang: <none>
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] server lang: <none>
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] kex follows: False
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] Compression: none
2026-02-15T12:30:52.000 [DEBUG] [Thread-204259] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:30:52.021 [DEBUG] [Thread-204259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:30:52.022 [DEBUG] [Thread-204259] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:30:52.022 [DEBUG] [Thread-204259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:30:52.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:30:52.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:30:52.024 [DEBUG] [Thread-204259] [transport.py] [_log()] userauth is OK
2026-02-15T12:30:52.024 [DEBUG] [Thread-204259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:30:52.024 [DEBUG] [Thread-204259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:30:52.025 [DEBUG] [Thread-204259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:30:52.025 [DEBUG] [Thread-204259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:30:52.042 [INFO] [Thread-204259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:30:52.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:30:52.676 [DEBUG] [Thread-204259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:30:52.676 [DEBUG] [Thread-204259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:30:52.676 [DEBUG] [Thread-204259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:30:52.717 [DEBUG] [Thread-204259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:30:52.718 [DEBUG] [Thread-204259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:30:52.721 [DEBUG] [Thread-204259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:30:52.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:30:52.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:30:52.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:30:52.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:30:52.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:30:52.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:30:52.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:30:52.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:30:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:30:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.437597 -999.00  +21.50  16.20     24   +0.60 1 1 1 1 1   888    0 25.73 155.30 ----- 16.2 16.2 123.0 21.7 28.1 -29.5 27.5 -27.3 27.4 -24.8 28.2 -26.2
2026-02-15T12:30:52.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:30:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:30:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.437597
2026-02-15T12:30:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:30:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:30:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:30:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:30:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:30:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:30:36', tmtdew=28.53, humidity=14.38, cloud=0.0, wind=18.63, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:30:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:30:52.749 [DEBUG] [Thread-204259] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:30:52.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:30:52.846 [DEBUG] [Thread-204262] [transport.py] [_log()] starting thread (client mode): 0xa2dc1420
2026-02-15T12:30:52.846 [DEBUG] [Thread-204262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:30:52.860 [DEBUG] [Thread-204262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:30:52.860 [INFO] [Thread-204262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] client lang: <none>
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] server lang: <none>
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] kex follows: False
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] Compression: none
2026-02-15T12:30:52.868 [DEBUG] [Thread-204262] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:30:52.926 [DEBUG] [Thread-204262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:30:52.926 [DEBUG] [Thread-204262] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:30:52.927 [DEBUG] [Thread-204262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:30:52.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:30:52.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:30:52.983 [DEBUG] [Thread-204262] [transport.py] [_log()] userauth is OK
2026-02-15T12:30:52.983 [DEBUG] [Thread-204262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:30:52.983 [DEBUG] [Thread-204262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:30:52.983 [DEBUG] [Thread-204262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:30:52.983 [DEBUG] [Thread-204262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:30:53.003 [INFO] [Thread-204262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:30:53.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:30:53.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:30:53.193 [DEBUG] [Thread-204264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:30:53.874 [DEBUG] [Thread-204262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:30:53.874 [DEBUG] [Thread-204262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:30:53.921 [DEBUG] [Thread-204262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:30:53.922 [DEBUG] [Thread-204262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:30:53.931 [DEBUG] [Thread-204262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:30:53.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:30:53.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:30:53.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:30:53.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:30:53.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:30:53.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:30:53.968 [DEBUG] [Thread-204262] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:31:08.240 [DEBUG] [Thread-204265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:23.276 [DEBUG] [Thread-204266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:23.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:31:23.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:31:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:31:24.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:24.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:26.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 31, 11), 25.88, 17.38, 0.0, 22.87, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:31:26.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:31:11
2026-02-15T12:31:26.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:31:26.620 [DEBUG] [Thread-204267] [transport.py] [_log()] starting thread (client mode): 0xa2d12620
2026-02-15T12:31:26.620 [DEBUG] [Thread-204267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:31:26.640 [DEBUG] [Thread-204267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:31:26.640 [INFO] [Thread-204267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:31:26.643 [DEBUG] [Thread-204267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:31:26.643 [DEBUG] [Thread-204267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:31:26.643 [DEBUG] [Thread-204267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:31:26.643 [DEBUG] [Thread-204267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:31:26.643 [DEBUG] [Thread-204267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] client lang: <none>
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] server lang: <none>
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] kex follows: False
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] Compression: none
2026-02-15T12:31:26.644 [DEBUG] [Thread-204267] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:31:26.663 [DEBUG] [Thread-204267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:31:26.663 [DEBUG] [Thread-204267] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:31:26.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:31:26.664 [DEBUG] [Thread-204267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:31:26.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:31:26.666 [DEBUG] [Thread-204267] [transport.py] [_log()] userauth is OK
2026-02-15T12:31:26.666 [DEBUG] [Thread-204267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:31:26.666 [DEBUG] [Thread-204267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:31:26.667 [DEBUG] [Thread-204267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:31:26.667 [DEBUG] [Thread-204267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:31:26.684 [INFO] [Thread-204267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:31:26.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:31:27.326 [DEBUG] [Thread-204267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:31:27.326 [DEBUG] [Thread-204267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:31:27.327 [DEBUG] [Thread-204267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:31:27.367 [DEBUG] [Thread-204267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:31:27.367 [DEBUG] [Thread-204267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:31:27.370 [DEBUG] [Thread-204267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:31:27.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:31:27.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:31:27.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:31:27.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:31:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:31:27.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:31:27.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:31:27.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:31:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:31:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.437945 -999.00  +22.30  17.89     24   +0.70 1 1 1 1 1   888    0 25.63 154.11 ----- 17.9 17.9 121.8 27.1 28.3 -27.2 27.7 -26.7 27.6 -26.8 28.4 -26.3
2026-02-15T12:31:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:31:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:31:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.437945
2026-02-15T12:31:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:31:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:31:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:31:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:31:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:31:27.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:31:11', tmtdew=25.88, humidity=17.38, cloud=0.0, wind=22.87, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:30:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:31:27.395 [DEBUG] [Thread-204267] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:31:27.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:31:27.500 [DEBUG] [Thread-204270] [transport.py] [_log()] starting thread (client mode): 0xa2db4a00
2026-02-15T12:31:27.500 [DEBUG] [Thread-204270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:31:27.515 [DEBUG] [Thread-204270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:31:27.515 [INFO] [Thread-204270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:31:27.522 [DEBUG] [Thread-204270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:31:27.523 [DEBUG] [Thread-204270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:31:27.523 [DEBUG] [Thread-204270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:31:27.523 [DEBUG] [Thread-204270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:31:27.523 [DEBUG] [Thread-204270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:31:27.523 [DEBUG] [Thread-204270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] client lang: <none>
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] server lang: <none>
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] kex follows: False
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] Compression: none
2026-02-15T12:31:27.524 [DEBUG] [Thread-204270] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:31:27.580 [DEBUG] [Thread-204270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:31:27.580 [DEBUG] [Thread-204270] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:31:27.580 [DEBUG] [Thread-204270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:31:27.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:31:27.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:31:27.637 [DEBUG] [Thread-204270] [transport.py] [_log()] userauth is OK
2026-02-15T12:31:27.637 [DEBUG] [Thread-204270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:31:27.637 [DEBUG] [Thread-204270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:31:27.637 [DEBUG] [Thread-204270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:31:27.638 [DEBUG] [Thread-204270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:31:27.660 [INFO] [Thread-204270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:31:27.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:31:27.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:31:28.515 [DEBUG] [Thread-204270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:31:28.515 [DEBUG] [Thread-204270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:31:28.563 [DEBUG] [Thread-204270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:31:28.563 [DEBUG] [Thread-204270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:31:28.575 [DEBUG] [Thread-204270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:31:28.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:31:28.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:31:28.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:31:28.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:31:28.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:31:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:31:28.612 [DEBUG] [Thread-204270] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:31:38.308 [DEBUG] [Thread-204272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:47.570 [DEBUG] [Thread-204273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:53.358 [DEBUG] [Thread-204274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:31:58.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:31:58.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:31:58.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:32:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 31, 46), 25.78, 17.63, 0.0, 22.28, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:32:00.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:31:46
2026-02-15T12:32:01.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:32:01.213 [DEBUG] [Thread-204275] [transport.py] [_log()] starting thread (client mode): 0xa2d6a080
2026-02-15T12:32:01.213 [DEBUG] [Thread-204275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:32:01.232 [DEBUG] [Thread-204275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:32:01.233 [INFO] [Thread-204275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:32:01.236 [DEBUG] [Thread-204275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:32:01.236 [DEBUG] [Thread-204275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:32:01.236 [DEBUG] [Thread-204275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] client lang: <none>
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] server lang: <none>
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] kex follows: False
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:32:01.237 [DEBUG] [Thread-204275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:32:01.238 [DEBUG] [Thread-204275] [transport.py] [_log()] Compression: none
2026-02-15T12:32:01.238 [DEBUG] [Thread-204275] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:32:01.257 [DEBUG] [Thread-204275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:32:01.257 [DEBUG] [Thread-204275] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:32:01.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:32:01.259 [DEBUG] [Thread-204275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:32:01.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:32:01.261 [DEBUG] [Thread-204275] [transport.py] [_log()] userauth is OK
2026-02-15T12:32:01.261 [DEBUG] [Thread-204275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:32:01.261 [DEBUG] [Thread-204275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:32:01.262 [DEBUG] [Thread-204275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:32:01.262 [DEBUG] [Thread-204275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:32:01.281 [INFO] [Thread-204275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:32:01.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:32:01.822 [DEBUG] [Thread-204275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:32:01.822 [DEBUG] [Thread-204275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:32:01.822 [DEBUG] [Thread-204275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:32:01.863 [DEBUG] [Thread-204275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:32:01.863 [DEBUG] [Thread-204275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:32:01.865 [DEBUG] [Thread-204275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:32:01.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:32:01.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:32:01.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:32:01.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:32:01.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:32:01.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:32:01.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:32:01.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:32:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:32:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.438292 -999.00  +21.90  16.46     23   +0.40 1 1 1 1 1   888    0 25.57 143.88 ----- 16.5 16.5 113.8 24.6 -999.0 -999.0 27.7 -27.7 27.6 -26.5 28.4 -26.4
2026-02-15T12:32:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:32:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:32:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.438292
2026-02-15T12:32:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:32:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:32:01.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:32:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:32:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:32:01.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:31:46', tmtdew=25.78, humidity=17.63, cloud=0.0, wind=22.28, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:31:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:32:01.889 [DEBUG] [Thread-204275] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:32:01.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:32:01.980 [DEBUG] [Thread-204278] [transport.py] [_log()] starting thread (client mode): 0xa2d68d00
2026-02-15T12:32:01.980 [DEBUG] [Thread-204278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:32:01.994 [DEBUG] [Thread-204278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:32:01.995 [INFO] [Thread-204278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:32:02.002 [DEBUG] [Thread-204278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:32:02.002 [DEBUG] [Thread-204278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:32:02.002 [DEBUG] [Thread-204278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:32:02.002 [DEBUG] [Thread-204278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:02.002 [DEBUG] [Thread-204278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:02.002 [DEBUG] [Thread-204278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] client lang: <none>
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] server lang: <none>
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] kex follows: False
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] Compression: none
2026-02-15T12:32:02.003 [DEBUG] [Thread-204278] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:32:02.065 [DEBUG] [Thread-204278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:32:02.066 [DEBUG] [Thread-204278] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:32:02.066 [DEBUG] [Thread-204278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:32:02.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:32:02.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:32:02.121 [DEBUG] [Thread-204278] [transport.py] [_log()] userauth is OK
2026-02-15T12:32:02.122 [DEBUG] [Thread-204278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:32:02.122 [DEBUG] [Thread-204278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:32:02.122 [DEBUG] [Thread-204278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:32:02.122 [DEBUG] [Thread-204278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:32:02.141 [INFO] [Thread-204278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:32:02.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:32:02.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:32:02.963 [DEBUG] [Thread-204278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:32:02.963 [DEBUG] [Thread-204278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:32:03.012 [DEBUG] [Thread-204278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:32:03.012 [DEBUG] [Thread-204278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:32:03.021 [DEBUG] [Thread-204278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:32:03.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:32:03.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:32:03.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:32:03.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:32:03.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:32:03.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:32:03.055 [DEBUG] [Thread-204278] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:32:08.398 [DEBUG] [Thread-204280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:32:23.459 [DEBUG] [Thread-204281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:32:25.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:32:25.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:32:33.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:32:33.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:32:33.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:32:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 32, 22), 25.62, 17.82, 0.0, 19.13, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:32:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:32:22
2026-02-15T12:32:35.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:32:35.616 [DEBUG] [Thread-204282] [transport.py] [_log()] starting thread (client mode): 0xa5743d00
2026-02-15T12:32:35.617 [DEBUG] [Thread-204282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:32:35.637 [DEBUG] [Thread-204282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:32:35.637 [INFO] [Thread-204282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:32:35.638 [DEBUG] [Thread-204282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:32:35.638 [DEBUG] [Thread-204282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:32:35.638 [DEBUG] [Thread-204282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:32:35.638 [DEBUG] [Thread-204282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:35.638 [DEBUG] [Thread-204282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:35.638 [DEBUG] [Thread-204282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] client lang: <none>
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] server lang: <none>
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] kex follows: False
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] Compression: none
2026-02-15T12:32:35.639 [DEBUG] [Thread-204282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:32:35.646 [DEBUG] [Thread-204282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:32:35.647 [DEBUG] [Thread-204282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:32:35.647 [DEBUG] [Thread-204282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:32:35.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:32:35.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:32:35.649 [DEBUG] [Thread-204282] [transport.py] [_log()] userauth is OK
2026-02-15T12:32:35.649 [DEBUG] [Thread-204282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:32:35.649 [DEBUG] [Thread-204282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:32:35.649 [DEBUG] [Thread-204282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:32:35.649 [DEBUG] [Thread-204282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:32:35.669 [INFO] [Thread-204282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:32:35.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:32:36.279 [DEBUG] [Thread-204282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:32:36.279 [DEBUG] [Thread-204282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:32:36.279 [DEBUG] [Thread-204282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:32:36.320 [DEBUG] [Thread-204282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:32:36.321 [DEBUG] [Thread-204282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:32:36.324 [DEBUG] [Thread-204282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:32:36.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:32:36.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:32:36.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:32:36.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:32:36.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:32:36.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:32:36.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:32:36.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:32:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:32:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.438987 -999.00  +22.50  22.31     23   +0.80 1 1 1 1 1   888    0 25.20 124.99 ----- 22.3 22.3 126.6 24.6 28.7 -27.1 27.9 -26.7 27.8 -25.7 28.7 -26.9
2026-02-15T12:32:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:32:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:32:36.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.438987
2026-02-15T12:32:36.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:32:36.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:32:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:32:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:32:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:32:36.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:32:22', tmtdew=25.62, humidity=17.82, cloud=0.0, wind=19.13, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:32:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:32:36.351 [DEBUG] [Thread-204282] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:32:36.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:32:36.448 [DEBUG] [Thread-204285] [transport.py] [_log()] starting thread (client mode): 0xa81d6170
2026-02-15T12:32:36.448 [DEBUG] [Thread-204285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:32:36.464 [DEBUG] [Thread-204285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:32:36.464 [INFO] [Thread-204285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:32:36.471 [DEBUG] [Thread-204285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] client lang: <none>
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] server lang: <none>
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] kex follows: False
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:32:36.472 [DEBUG] [Thread-204285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:32:36.473 [DEBUG] [Thread-204285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:32:36.473 [DEBUG] [Thread-204285] [transport.py] [_log()] Compression: none
2026-02-15T12:32:36.473 [DEBUG] [Thread-204285] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:32:36.535 [DEBUG] [Thread-204285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:32:36.536 [DEBUG] [Thread-204285] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:32:36.536 [DEBUG] [Thread-204285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:32:36.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:32:36.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:32:36.592 [DEBUG] [Thread-204285] [transport.py] [_log()] userauth is OK
2026-02-15T12:32:36.593 [DEBUG] [Thread-204285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:32:36.593 [DEBUG] [Thread-204285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:32:36.593 [DEBUG] [Thread-204285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:32:36.593 [DEBUG] [Thread-204285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:32:36.612 [INFO] [Thread-204285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:32:36.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:32:36.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:32:37.461 [DEBUG] [Thread-204285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:32:37.461 [DEBUG] [Thread-204285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:32:37.509 [DEBUG] [Thread-204285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:32:37.509 [DEBUG] [Thread-204285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:32:37.518 [DEBUG] [Thread-204285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:32:37.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:32:37.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:32:37.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:32:37.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:32:37.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:32:37.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:32:37.554 [DEBUG] [Thread-204285] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:32:38.498 [DEBUG] [Thread-204287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:32:47.604 [DEBUG] [Thread-204288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:32:53.560 [DEBUG] [Thread-204289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:07.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:33:07.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:33:07.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:33:08.597 [DEBUG] [Thread-204290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:09.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 32, 57), 25.9, 17.43, 0.0, 23.87, 21.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:33:09.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:32:57
2026-02-15T12:33:09.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:33:09.944 [DEBUG] [Thread-204291] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-15T12:33:09.944 [DEBUG] [Thread-204291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:33:09.960 [DEBUG] [Thread-204291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:33:09.960 [INFO] [Thread-204291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:33:09.963 [DEBUG] [Thread-204291] [transport.py] [_log()] client lang: <none>
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] server lang: <none>
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] kex follows: False
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] Compression: none
2026-02-15T12:33:09.964 [DEBUG] [Thread-204291] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:33:09.981 [DEBUG] [Thread-204291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:33:09.982 [DEBUG] [Thread-204291] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:33:09.983 [DEBUG] [Thread-204291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:33:09.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:33:09.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:33:09.984 [DEBUG] [Thread-204291] [transport.py] [_log()] userauth is OK
2026-02-15T12:33:09.985 [DEBUG] [Thread-204291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:33:09.985 [DEBUG] [Thread-204291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:33:09.985 [DEBUG] [Thread-204291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:33:09.985 [DEBUG] [Thread-204291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:33:10.009 [INFO] [Thread-204291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:33:10.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:33:10.780 [DEBUG] [Thread-204291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:33:10.780 [DEBUG] [Thread-204291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:33:10.781 [DEBUG] [Thread-204291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:33:10.821 [DEBUG] [Thread-204291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:33:10.822 [DEBUG] [Thread-204291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:33:10.825 [DEBUG] [Thread-204291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:33:10.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:33:10.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:33:10.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:33:10.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:33:10.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:33:10.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:33:10.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:33:10.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:33:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:33:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.439334 -999.00  +22.40  16.28     23   +0.60 1 1 1 1 1   888    0 24.89 132.34 ----- 16.3 16.3 121.6 25.6 28.7 -28.6 28.0 -27.5 27.8 -26.8 28.7 -27.2
2026-02-15T12:33:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:33:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:33:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.439334
2026-02-15T12:33:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:33:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:33:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:33:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:33:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:33:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:32:57', tmtdew=25.9, humidity=17.43, cloud=0.0, wind=23.87, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:32:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:33:10.849 [DEBUG] [Thread-204291] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:33:10.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:33:10.945 [DEBUG] [Thread-204294] [transport.py] [_log()] starting thread (client mode): 0xa81d6290
2026-02-15T12:33:10.945 [DEBUG] [Thread-204294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:33:10.960 [DEBUG] [Thread-204294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:33:10.960 [INFO] [Thread-204294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:33:10.968 [DEBUG] [Thread-204294] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:33:10.968 [DEBUG] [Thread-204294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:33:10.968 [DEBUG] [Thread-204294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:33:10.968 [DEBUG] [Thread-204294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] client lang: <none>
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] server lang: <none>
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] kex follows: False
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] Compression: none
2026-02-15T12:33:10.969 [DEBUG] [Thread-204294] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:33:11.027 [DEBUG] [Thread-204294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:33:11.028 [DEBUG] [Thread-204294] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:33:11.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:33:11.029 [DEBUG] [Thread-204294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:33:11.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:33:11.084 [DEBUG] [Thread-204294] [transport.py] [_log()] userauth is OK
2026-02-15T12:33:11.084 [DEBUG] [Thread-204294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:33:11.084 [DEBUG] [Thread-204294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:33:11.085 [DEBUG] [Thread-204294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:33:11.085 [DEBUG] [Thread-204294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:33:11.109 [INFO] [Thread-204294] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:33:11.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:33:11.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:33:11.947 [DEBUG] [Thread-204294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:33:11.947 [DEBUG] [Thread-204294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:33:11.995 [DEBUG] [Thread-204294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:33:11.996 [DEBUG] [Thread-204294] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:33:12.005 [DEBUG] [Thread-204294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:33:12.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:33:12.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:33:12.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:33:12.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:33:12.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:33:12.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:33:12.042 [DEBUG] [Thread-204294] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:33:23.638 [DEBUG] [Thread-204296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:25.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:25.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:38.691 [DEBUG] [Thread-204297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:42.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:33:42.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:33:42.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:33:43.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 33, 32), 24.99, 18.49, 0.0, 18.21, 21.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:33:43.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:33:32
2026-02-15T12:33:44.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:33:44.396 [DEBUG] [Thread-204298] [transport.py] [_log()] starting thread (client mode): 0xa2db4760
2026-02-15T12:33:44.396 [DEBUG] [Thread-204298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:33:44.417 [DEBUG] [Thread-204298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:33:44.417 [INFO] [Thread-204298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] client lang: <none>
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] server lang: <none>
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] kex follows: False
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] Compression: none
2026-02-15T12:33:44.420 [DEBUG] [Thread-204298] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:33:44.438 [DEBUG] [Thread-204298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:33:44.438 [DEBUG] [Thread-204298] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:33:44.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:33:44.439 [DEBUG] [Thread-204298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:33:44.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:33:44.442 [DEBUG] [Thread-204298] [transport.py] [_log()] userauth is OK
2026-02-15T12:33:44.442 [DEBUG] [Thread-204298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:33:44.442 [DEBUG] [Thread-204298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:33:44.443 [DEBUG] [Thread-204298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:33:44.443 [DEBUG] [Thread-204298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:33:44.466 [INFO] [Thread-204298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:33:44.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:33:45.066 [DEBUG] [Thread-204298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:33:45.066 [DEBUG] [Thread-204298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:33:45.066 [DEBUG] [Thread-204298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:33:45.106 [DEBUG] [Thread-204298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:33:45.107 [DEBUG] [Thread-204298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:33:45.109 [DEBUG] [Thread-204298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:33:45.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:33:45.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:33:45.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:33:45.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:33:45.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:33:45.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:33:45.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:33:45.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:33:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:33:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.439681 -999.00  +22.00  19.56     23   +0.40 1 1 1 1 1   888    0 25.37 134.25 ----- 19.6 19.6 129.8 23.4 28.7 -27.8 28.1 -27.9 27.8 -26.4 28.7 -28.1
2026-02-15T12:33:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:33:45.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:33:45.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.439681
2026-02-15T12:33:45.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:33:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:33:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:33:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:33:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:33:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:33:32', tmtdew=24.99, humidity=18.49, cloud=0.0, wind=18.21, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:33:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:33:45.137 [DEBUG] [Thread-204298] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:33:45.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:33:45.232 [DEBUG] [Thread-204301] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fe0
2026-02-15T12:33:45.232 [DEBUG] [Thread-204301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:33:45.247 [DEBUG] [Thread-204301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:33:45.247 [INFO] [Thread-204301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:33:45.254 [DEBUG] [Thread-204301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] client lang: <none>
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] server lang: <none>
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] kex follows: False
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:33:45.255 [DEBUG] [Thread-204301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:33:45.256 [DEBUG] [Thread-204301] [transport.py] [_log()] Compression: none
2026-02-15T12:33:45.256 [DEBUG] [Thread-204301] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:33:45.315 [DEBUG] [Thread-204301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:33:45.316 [DEBUG] [Thread-204301] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:33:45.317 [DEBUG] [Thread-204301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:33:45.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:33:45.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:33:45.371 [DEBUG] [Thread-204301] [transport.py] [_log()] userauth is OK
2026-02-15T12:33:45.371 [DEBUG] [Thread-204301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:33:45.372 [DEBUG] [Thread-204301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:33:45.372 [DEBUG] [Thread-204301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:33:45.372 [DEBUG] [Thread-204301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:33:45.390 [INFO] [Thread-204301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:33:45.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:33:45.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:33:46.210 [DEBUG] [Thread-204301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:33:46.210 [DEBUG] [Thread-204301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:33:46.258 [DEBUG] [Thread-204301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:33:46.259 [DEBUG] [Thread-204301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:33:46.268 [DEBUG] [Thread-204301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:33:46.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:33:46.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:33:46.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:33:46.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:33:46.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:33:46.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:33:46.304 [DEBUG] [Thread-204301] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:33:47.640 [DEBUG] [Thread-204303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:33:53.727 [DEBUG] [Thread-204304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:08.773 [DEBUG] [Thread-204305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:16.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:34:16.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:34:16.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:34:18.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 34, 8), 24.74, 18.93, 0.0, 21.46, 21.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:34:18.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:34:08
2026-02-15T12:34:18.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:34:18.874 [DEBUG] [Thread-204306] [transport.py] [_log()] starting thread (client mode): 0xa2d03430
2026-02-15T12:34:18.874 [DEBUG] [Thread-204306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:34:18.895 [DEBUG] [Thread-204306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:34:18.895 [INFO] [Thread-204306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] client lang: <none>
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] server lang: <none>
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] kex follows: False
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] Compression: none
2026-02-15T12:34:18.899 [DEBUG] [Thread-204306] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:34:18.917 [DEBUG] [Thread-204306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:34:18.917 [DEBUG] [Thread-204306] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:34:18.917 [DEBUG] [Thread-204306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:34:18.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:34:18.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:34:18.918 [DEBUG] [Thread-204306] [transport.py] [_log()] userauth is OK
2026-02-15T12:34:18.918 [DEBUG] [Thread-204306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:34:18.918 [DEBUG] [Thread-204306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:34:18.918 [DEBUG] [Thread-204306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:34:18.918 [DEBUG] [Thread-204306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:34:18.943 [INFO] [Thread-204306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:34:18.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:34:19.587 [DEBUG] [Thread-204306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:34:19.587 [DEBUG] [Thread-204306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:34:19.588 [DEBUG] [Thread-204306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:34:19.628 [DEBUG] [Thread-204306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:34:19.629 [DEBUG] [Thread-204306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:34:19.632 [DEBUG] [Thread-204306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:34:19.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:34:19.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:34:19.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:34:19.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:34:19.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:34:19.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:34:19.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:34:19.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:34:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:34:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.440028 -999.00  +21.90  14.37     24   +0.70 1 1 1 1 1   888    0 25.04 130.15 ----- 14.4 14.4 142.0 26.6 28.7 -28.2 28.0 -27.4 27.8 -25.8 28.6 -28.8
2026-02-15T12:34:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:34:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:34:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.440028
2026-02-15T12:34:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:34:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:34:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:34:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:34:19.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:34:19.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:34:08', tmtdew=24.74, humidity=18.93, cloud=0.0, wind=21.46, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:33:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:34:19.658 [DEBUG] [Thread-204306] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:34:19.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:34:19.755 [DEBUG] [Thread-204309] [transport.py] [_log()] starting thread (client mode): 0xa2db6410
2026-02-15T12:34:19.755 [DEBUG] [Thread-204309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:34:19.770 [DEBUG] [Thread-204309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:34:19.770 [INFO] [Thread-204309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] client lang: <none>
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] server lang: <none>
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] kex follows: False
2026-02-15T12:34:19.778 [DEBUG] [Thread-204309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:34:19.779 [DEBUG] [Thread-204309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:34:19.779 [DEBUG] [Thread-204309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:34:19.779 [DEBUG] [Thread-204309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:34:19.779 [DEBUG] [Thread-204309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:34:19.779 [DEBUG] [Thread-204309] [transport.py] [_log()] Compression: none
2026-02-15T12:34:19.779 [DEBUG] [Thread-204309] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:34:19.839 [DEBUG] [Thread-204309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:34:19.839 [DEBUG] [Thread-204309] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:34:19.840 [DEBUG] [Thread-204309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:34:19.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:34:19.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:34:19.895 [DEBUG] [Thread-204309] [transport.py] [_log()] userauth is OK
2026-02-15T12:34:19.895 [DEBUG] [Thread-204309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:34:19.895 [DEBUG] [Thread-204309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:34:19.895 [DEBUG] [Thread-204309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:34:19.895 [DEBUG] [Thread-204309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:34:19.914 [INFO] [Thread-204309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:34:19.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:34:19.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:34:20.727 [DEBUG] [Thread-204309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:34:20.727 [DEBUG] [Thread-204309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:34:20.778 [DEBUG] [Thread-204309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:34:20.778 [DEBUG] [Thread-204309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:34:20.791 [DEBUG] [Thread-204309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:34:20.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:34:20.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:34:20.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:34:20.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:34:20.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:34:20.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:34:20.835 [DEBUG] [Thread-204309] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:34:23.809 [DEBUG] [Thread-204311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:25.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:25.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:38.862 [DEBUG] [Thread-204312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:47.701 [DEBUG] [Thread-204313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:50.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:34:50.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:34:50.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:34:52.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 34, 44), 26.05, 16.9, 0.0, 26.91, 21.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:34:52.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:34:44
2026-02-15T12:34:53.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:34:53.196 [DEBUG] [Thread-204314] [transport.py] [_log()] starting thread (client mode): 0xa57e0f40
2026-02-15T12:34:53.196 [DEBUG] [Thread-204314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:34:53.217 [DEBUG] [Thread-204314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:34:53.217 [INFO] [Thread-204314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] client lang: <none>
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] server lang: <none>
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] kex follows: False
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:34:53.219 [DEBUG] [Thread-204314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:34:53.220 [DEBUG] [Thread-204314] [transport.py] [_log()] Compression: none
2026-02-15T12:34:53.220 [DEBUG] [Thread-204314] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:34:53.236 [DEBUG] [Thread-204314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:34:53.236 [DEBUG] [Thread-204314] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:34:53.237 [DEBUG] [Thread-204314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:34:53.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:34:53.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:34:53.239 [DEBUG] [Thread-204314] [transport.py] [_log()] userauth is OK
2026-02-15T12:34:53.239 [DEBUG] [Thread-204314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:34:53.239 [DEBUG] [Thread-204314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:34:53.239 [DEBUG] [Thread-204314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:34:53.239 [DEBUG] [Thread-204314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:34:53.263 [INFO] [Thread-204314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:34:53.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:34:53.877 [DEBUG] [Thread-204314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:34:53.877 [DEBUG] [Thread-204314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:34:53.877 [DEBUG] [Thread-204314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:34:53.898 [DEBUG] [Thread-204316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:34:53.918 [DEBUG] [Thread-204314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:34:53.919 [DEBUG] [Thread-204314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:34:53.922 [DEBUG] [Thread-204314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:34:53.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:34:53.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:34:53.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:34:53.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:34:53.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:34:53.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:34:53.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:34:53.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:34:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:34:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.440376 -999.00  +21.80  23.26     23   +0.10 1 1 1 1 1   888    0 24.37 112.47 ----- 23.3 23.3 139.0 28.6 28.8 -28.1 28.0 -26.9 27.8 -26.4 28.8 -28.3
2026-02-15T12:34:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:34:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:34:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.440376
2026-02-15T12:34:53.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:34:53.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:34:53.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:34:53.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:34:53.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:34:53.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:34:44', tmtdew=26.05, humidity=16.9, cloud=0.0, wind=26.91, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:34:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:34:53.949 [DEBUG] [Thread-204314] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:34:54.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:34:54.045 [DEBUG] [Thread-204318] [transport.py] [_log()] starting thread (client mode): 0xa57c2680
2026-02-15T12:34:54.045 [DEBUG] [Thread-204318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:34:54.059 [DEBUG] [Thread-204318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:34:54.060 [INFO] [Thread-204318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:34:54.067 [DEBUG] [Thread-204318] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:34:54.067 [DEBUG] [Thread-204318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:34:54.067 [DEBUG] [Thread-204318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:34:54.067 [DEBUG] [Thread-204318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] client lang: <none>
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] server lang: <none>
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] kex follows: False
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] Compression: none
2026-02-15T12:34:54.068 [DEBUG] [Thread-204318] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:34:54.127 [DEBUG] [Thread-204318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:34:54.128 [DEBUG] [Thread-204318] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:34:54.128 [DEBUG] [Thread-204318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:34:54.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:34:54.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:34:54.186 [DEBUG] [Thread-204318] [transport.py] [_log()] userauth is OK
2026-02-15T12:34:54.186 [DEBUG] [Thread-204318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:34:54.186 [DEBUG] [Thread-204318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:34:54.186 [DEBUG] [Thread-204318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:34:54.187 [DEBUG] [Thread-204318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:34:54.205 [INFO] [Thread-204318] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:34:54.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:34:54.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:34:55.035 [DEBUG] [Thread-204318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:34:55.035 [DEBUG] [Thread-204318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:34:55.083 [DEBUG] [Thread-204318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:34:55.083 [DEBUG] [Thread-204318] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:34:55.092 [DEBUG] [Thread-204318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:34:55.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:34:55.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:34:55.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:34:55.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:34:55.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:34:55.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:34:55.126 [DEBUG] [Thread-204318] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:35:08.935 [DEBUG] [Thread-204320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:23.987 [DEBUG] [Thread-204321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:25.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:35:25.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:35:25.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:35:25.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:25.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 34, 44), 26.05, 16.9, 0.0, 26.91, 21.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:35:27.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:34:44
2026-02-15T12:35:27.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:35:27.849 [DEBUG] [Thread-204322] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-15T12:35:27.849 [DEBUG] [Thread-204322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:35:27.877 [DEBUG] [Thread-204322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:35:27.877 [INFO] [Thread-204322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] client lang: <none>
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] server lang: <none>
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] kex follows: False
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:35:27.880 [DEBUG] [Thread-204322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:35:27.881 [DEBUG] [Thread-204322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:35:27.881 [DEBUG] [Thread-204322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:35:27.881 [DEBUG] [Thread-204322] [transport.py] [_log()] Compression: none
2026-02-15T12:35:27.881 [DEBUG] [Thread-204322] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:35:27.893 [DEBUG] [Thread-204322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:35:27.894 [DEBUG] [Thread-204322] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:35:27.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:35:27.895 [DEBUG] [Thread-204322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:35:27.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:35:27.897 [DEBUG] [Thread-204322] [transport.py] [_log()] userauth is OK
2026-02-15T12:35:27.898 [DEBUG] [Thread-204322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:35:27.898 [DEBUG] [Thread-204322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:35:27.898 [DEBUG] [Thread-204322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:35:27.898 [DEBUG] [Thread-204322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:35:27.923 [INFO] [Thread-204322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:35:27.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:35:28.577 [DEBUG] [Thread-204322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:35:28.577 [DEBUG] [Thread-204322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:35:28.577 [DEBUG] [Thread-204322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:35:28.617 [DEBUG] [Thread-204322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:35:28.618 [DEBUG] [Thread-204322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:35:28.621 [DEBUG] [Thread-204322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:35:28.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:35:28.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:35:28.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:35:28.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:35:28.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:35:28.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:35:28.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:35:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:35:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:35:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.440723 -999.00  +21.80  14.83     23   -0.10 1 1 1 1 1   888    0 24.82 124.71 ----- 14.8 14.8 112.1 27.5 28.7 -28.3 27.9 -27.6 27.8 -25.2 28.6 -27.2
2026-02-15T12:35:28.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:35:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:35:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.440723
2026-02-15T12:35:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:35:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:35:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:35:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:35:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:35:28.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:34:44', tmtdew=26.05, humidity=16.9, cloud=0.0, wind=26.91, temperature=21.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:34:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:35:28.646 [DEBUG] [Thread-204322] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:35:28.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:35:28.747 [DEBUG] [Thread-204325] [transport.py] [_log()] starting thread (client mode): 0xa81d7c10
2026-02-15T12:35:28.747 [DEBUG] [Thread-204325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:35:28.761 [DEBUG] [Thread-204325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:35:28.761 [INFO] [Thread-204325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:35:28.769 [DEBUG] [Thread-204325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:35:28.769 [DEBUG] [Thread-204325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] client lang: <none>
2026-02-15T12:35:28.770 [DEBUG] [Thread-204325] [transport.py] [_log()] server lang: <none>
2026-02-15T12:35:28.771 [DEBUG] [Thread-204325] [transport.py] [_log()] kex follows: False
2026-02-15T12:35:28.771 [DEBUG] [Thread-204325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:35:28.771 [DEBUG] [Thread-204325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:35:28.771 [DEBUG] [Thread-204325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:35:28.771 [DEBUG] [Thread-204325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:35:28.771 [DEBUG] [Thread-204325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:35:28.772 [DEBUG] [Thread-204325] [transport.py] [_log()] Compression: none
2026-02-15T12:35:28.772 [DEBUG] [Thread-204325] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:35:28.830 [DEBUG] [Thread-204325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:35:28.831 [DEBUG] [Thread-204325] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:35:28.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:35:28.832 [DEBUG] [Thread-204325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:35:28.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:35:28.889 [DEBUG] [Thread-204325] [transport.py] [_log()] userauth is OK
2026-02-15T12:35:28.890 [DEBUG] [Thread-204325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:35:28.890 [DEBUG] [Thread-204325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:35:28.890 [DEBUG] [Thread-204325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:35:28.890 [DEBUG] [Thread-204325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:35:28.909 [INFO] [Thread-204325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:35:28.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:35:28.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:35:29.723 [DEBUG] [Thread-204325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:35:29.723 [DEBUG] [Thread-204325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:35:29.770 [DEBUG] [Thread-204325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:35:29.771 [DEBUG] [Thread-204325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:35:29.780 [DEBUG] [Thread-204325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:35:29.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:35:29.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:35:29.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:35:29.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:35:29.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:35:29.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:35:29.816 [DEBUG] [Thread-204325] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:35:39.022 [DEBUG] [Thread-204327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:47.739 [DEBUG] [Thread-204328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:54.071 [DEBUG] [Thread-204329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:35:59.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:35:59.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:35:59.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:36:01.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 35, 20), 26.76, 16.09, 0.0, 29.04, 21.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:36:01.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:35:20
2026-02-15T12:36:02.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:36:02.340 [DEBUG] [Thread-204330] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-15T12:36:02.340 [DEBUG] [Thread-204330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:36:02.361 [DEBUG] [Thread-204330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:36:02.361 [INFO] [Thread-204330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:36:02.363 [DEBUG] [Thread-204330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] client lang: <none>
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] server lang: <none>
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] kex follows: False
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] Compression: none
2026-02-15T12:36:02.364 [DEBUG] [Thread-204330] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:36:02.382 [DEBUG] [Thread-204330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:36:02.382 [DEBUG] [Thread-204330] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:36:02.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:36:02.384 [DEBUG] [Thread-204330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:36:02.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:36:02.385 [DEBUG] [Thread-204330] [transport.py] [_log()] userauth is OK
2026-02-15T12:36:02.386 [DEBUG] [Thread-204330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:36:02.386 [DEBUG] [Thread-204330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:36:02.386 [DEBUG] [Thread-204330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:36:02.386 [DEBUG] [Thread-204330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:36:02.410 [INFO] [Thread-204330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:36:02.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:36:03.186 [DEBUG] [Thread-204330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:36:03.186 [DEBUG] [Thread-204330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:36:03.187 [DEBUG] [Thread-204330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:36:03.228 [DEBUG] [Thread-204330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:36:03.228 [DEBUG] [Thread-204330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:36:03.231 [DEBUG] [Thread-204330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:36:03.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:36:03.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:36:03.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:36:03.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:36:03.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:36:03.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:36:03.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.441070 -999.00  +22.30  18.48     22   -0.30 1 1 1 1 1   888    0 24.85 124.48 ----- 18.5 18.5 112.8 25.3 28.7 -32.1 28.0 -27.2 27.9 -25.5 28.8 -26.6
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.441070
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:36:03.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:35:20', tmtdew=26.76, humidity=16.09, cloud=0.0, wind=29.04, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:35:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:36:03.253 [DEBUG] [Thread-204330] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:36:03.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:36:03.350 [DEBUG] [Thread-204333] [transport.py] [_log()] starting thread (client mode): 0xa2db7f70
2026-02-15T12:36:03.350 [DEBUG] [Thread-204333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:36:03.364 [DEBUG] [Thread-204333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:36:03.364 [INFO] [Thread-204333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] client lang: <none>
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] server lang: <none>
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] kex follows: False
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] Compression: none
2026-02-15T12:36:03.372 [DEBUG] [Thread-204333] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:36:03.430 [DEBUG] [Thread-204333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:36:03.431 [DEBUG] [Thread-204333] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:36:03.431 [DEBUG] [Thread-204333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:36:03.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:36:03.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:36:03.489 [DEBUG] [Thread-204333] [transport.py] [_log()] userauth is OK
2026-02-15T12:36:03.489 [DEBUG] [Thread-204333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:36:03.489 [DEBUG] [Thread-204333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:36:03.489 [DEBUG] [Thread-204333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:36:03.489 [DEBUG] [Thread-204333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:36:03.508 [INFO] [Thread-204333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:36:03.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:36:03.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:36:04.334 [DEBUG] [Thread-204333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:36:04.334 [DEBUG] [Thread-204333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:36:04.386 [DEBUG] [Thread-204333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:36:04.386 [DEBUG] [Thread-204333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:36:04.402 [DEBUG] [Thread-204333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:36:04.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:36:04.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:36:04.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:36:04.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:36:04.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:36:04.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:36:04.436 [DEBUG] [Thread-204333] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:36:09.107 [DEBUG] [Thread-204335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:36:24.169 [DEBUG] [Thread-204336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:36:25.638 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:36:25.639 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:36:34.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:36:34.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:36: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
2026-02-15T12:36:36.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 35, 55), 26.97, 16.31, 0.0, 30.6, 22.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:36:36.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:35:55
2026-02-15T12:36:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:36:37.337 [DEBUG] [Thread-204337] [transport.py] [_log()] starting thread (client mode): 0xa2d01000
2026-02-15T12:36:37.337 [DEBUG] [Thread-204337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:36:37.357 [DEBUG] [Thread-204337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:36:37.357 [INFO] [Thread-204337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] client lang: <none>
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] server lang: <none>
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] kex follows: False
2026-02-15T12:36:37.360 [DEBUG] [Thread-204337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:36:37.361 [DEBUG] [Thread-204337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:36:37.361 [DEBUG] [Thread-204337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:36:37.361 [DEBUG] [Thread-204337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:36:37.361 [DEBUG] [Thread-204337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:36:37.361 [DEBUG] [Thread-204337] [transport.py] [_log()] Compression: none
2026-02-15T12:36:37.361 [DEBUG] [Thread-204337] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:36:37.379 [DEBUG] [Thread-204337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:36:37.380 [DEBUG] [Thread-204337] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:36:37.380 [DEBUG] [Thread-204337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:36:37.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:36:37.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:36:37.382 [DEBUG] [Thread-204337] [transport.py] [_log()] userauth is OK
2026-02-15T12:36:37.383 [DEBUG] [Thread-204337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:36:37.383 [DEBUG] [Thread-204337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:36:37.383 [DEBUG] [Thread-204337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:36:37.383 [DEBUG] [Thread-204337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:36:37.408 [INFO] [Thread-204337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:36:37.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:36:38.043 [DEBUG] [Thread-204337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:36:38.043 [DEBUG] [Thread-204337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:36:38.044 [DEBUG] [Thread-204337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:36:38.084 [DEBUG] [Thread-204337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:36:38.084 [DEBUG] [Thread-204337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:36:38.087 [DEBUG] [Thread-204337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:36:38.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:36:38.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:36:38.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:36:38.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:36:38.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:36:38.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:36:38.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:36:38.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:36:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:36:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.441764 -999.00  +22.70  12.51     20   -1.00 1 1 1 1 1   888    0 26.40 151.23 ----- 12.5 12.5 78.8 26.9 28.9 -28.0 28.2 -28.1 28.1 -26.1 29.0 -27.8
2026-02-15T12:36:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:36:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:36:38.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.441764
2026-02-15T12:36:38.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:36:38.114 [DEBUG] [Thread-204337] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:36:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:36:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:36:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:36:38.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:36:38.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:35:55', tmtdew=26.97, humidity=16.31, cloud=0.0, wind=30.6, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:36:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:36:38.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:36:38.214 [DEBUG] [Thread-204340] [transport.py] [_log()] starting thread (client mode): 0xa2d10dc0
2026-02-15T12:36:38.214 [DEBUG] [Thread-204340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:36:38.229 [DEBUG] [Thread-204340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:36:38.229 [INFO] [Thread-204340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:36:38.236 [DEBUG] [Thread-204340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:36:38.236 [DEBUG] [Thread-204340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:36:38.236 [DEBUG] [Thread-204340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:36:38.236 [DEBUG] [Thread-204340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:38.236 [DEBUG] [Thread-204340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] client lang: <none>
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] server lang: <none>
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] kex follows: False
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] Compression: none
2026-02-15T12:36:38.237 [DEBUG] [Thread-204340] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:36:38.296 [DEBUG] [Thread-204340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:36:38.297 [DEBUG] [Thread-204340] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:36:38.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:36:38.298 [DEBUG] [Thread-204340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:36:38.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:36:38.352 [DEBUG] [Thread-204340] [transport.py] [_log()] userauth is OK
2026-02-15T12:36:38.352 [DEBUG] [Thread-204340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:36:38.353 [DEBUG] [Thread-204340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:36:38.353 [DEBUG] [Thread-204340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:36:38.353 [DEBUG] [Thread-204340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:36:38.375 [INFO] [Thread-204340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:36:38.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:36:38.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:36:39.202 [DEBUG] [Thread-204340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:36:39.202 [DEBUG] [Thread-204340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:36:39.208 [DEBUG] [Thread-204342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:36:39.250 [DEBUG] [Thread-204340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:36:39.250 [DEBUG] [Thread-204340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:36:39.260 [DEBUG] [Thread-204340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:36:39.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:36:39.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:36:39.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:36:39.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:36:39.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:36:39.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:36:39.296 [DEBUG] [Thread-204340] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:36:47.786 [DEBUG] [Thread-204343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:36:54.259 [DEBUG] [Thread-204344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:09.294 [DEBUG] [Thread-204345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:09.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:37:09.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:37:09.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:37:11.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 36, 31), 27.19, 16.11, 0.0, 30.82, 22.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:37:11.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:36:31
2026-02-15T12:37:11.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:37:11.996 [DEBUG] [Thread-204346] [transport.py] [_log()] starting thread (client mode): 0xa57c2710
2026-02-15T12:37:11.996 [DEBUG] [Thread-204346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:37:12.018 [DEBUG] [Thread-204346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:37:12.018 [INFO] [Thread-204346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:12.021 [DEBUG] [Thread-204346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] client lang: <none>
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] server lang: <none>
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] kex follows: False
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] Compression: none
2026-02-15T12:37:12.022 [DEBUG] [Thread-204346] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:37:12.040 [DEBUG] [Thread-204346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:37:12.040 [DEBUG] [Thread-204346] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:37:12.041 [DEBUG] [Thread-204346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:37:12.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:37:12.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:37:12.043 [DEBUG] [Thread-204346] [transport.py] [_log()] userauth is OK
2026-02-15T12:37:12.043 [DEBUG] [Thread-204346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:37:12.043 [DEBUG] [Thread-204346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:37:12.043 [DEBUG] [Thread-204346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:37:12.044 [DEBUG] [Thread-204346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:37:12.068 [INFO] [Thread-204346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:37:12.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:37:12.684 [DEBUG] [Thread-204346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:37:12.684 [DEBUG] [Thread-204346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:37:12.685 [DEBUG] [Thread-204346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:37:12.726 [DEBUG] [Thread-204346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:37:12.726 [DEBUG] [Thread-204346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:37:12.729 [DEBUG] [Thread-204346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:37:12.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:37:12.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:37:12.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:37:12.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:37:12.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:37:12.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:37:12.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:37:12.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:37:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:37:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.442112 -999.00  +22.50  16.70     20   -1.40 1 1 1 1 1   888    0 26.01 147.70 ----- 16.7 16.7 101.7 28.3 28.8 -28.6 28.2 -27.5 28.1 -26.7 29.1 -27.7
2026-02-15T12:37:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:37:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:37:12.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.442112
2026-02-15T12:37:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:37:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:37:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:37:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:37:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:37:12.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:36:31', tmtdew=27.19, humidity=16.11, cloud=0.0, wind=30.82, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:36:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:37:12.755 [DEBUG] [Thread-204346] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:37:12.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:37:12.861 [DEBUG] [Thread-204349] [transport.py] [_log()] starting thread (client mode): 0xa57c2f50
2026-02-15T12:37:12.861 [DEBUG] [Thread-204349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:37:12.876 [DEBUG] [Thread-204349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:37:12.876 [INFO] [Thread-204349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:37:12.883 [DEBUG] [Thread-204349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:37:12.883 [DEBUG] [Thread-204349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:37:12.883 [DEBUG] [Thread-204349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:37:12.883 [DEBUG] [Thread-204349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:12.883 [DEBUG] [Thread-204349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] client lang: <none>
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] server lang: <none>
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] kex follows: False
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] Compression: none
2026-02-15T12:37:12.884 [DEBUG] [Thread-204349] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:37:12.943 [DEBUG] [Thread-204349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:37:12.944 [DEBUG] [Thread-204349] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:37:12.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:37:12.945 [DEBUG] [Thread-204349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:37:12.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:37:12.999 [DEBUG] [Thread-204349] [transport.py] [_log()] userauth is OK
2026-02-15T12:37:12.999 [DEBUG] [Thread-204349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:37:12.999 [DEBUG] [Thread-204349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:37:12.999 [DEBUG] [Thread-204349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:37:13.000 [DEBUG] [Thread-204349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:37:13.019 [INFO] [Thread-204349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:37:13.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:37:13.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:37:13.856 [DEBUG] [Thread-204349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:37:13.857 [DEBUG] [Thread-204349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:37:13.904 [DEBUG] [Thread-204349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:37:13.905 [DEBUG] [Thread-204349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:37:13.914 [DEBUG] [Thread-204349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:37:13.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:37:13.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:37:13.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:37:13.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:37:13.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:37:13.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:37:13.950 [DEBUG] [Thread-204349] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:37:24.331 [DEBUG] [Thread-204351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:25.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:25.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:39.382 [DEBUG] [Thread-204352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:43.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:37:43.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:37:43.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:37:46.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 37, 7), 27.2, 16.11, 0.0, 24.42, 22.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:37:46.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:37:07
2026-02-15T12:37:46.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:37:46.964 [DEBUG] [Thread-204353] [transport.py] [_log()] starting thread (client mode): 0xa57c06a0
2026-02-15T12:37:46.964 [DEBUG] [Thread-204353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:37:46.977 [DEBUG] [Thread-204353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:37:46.977 [INFO] [Thread-204353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] client lang: <none>
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] server lang: <none>
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] kex follows: False
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:37:46.981 [DEBUG] [Thread-204353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:37:46.982 [DEBUG] [Thread-204353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:37:46.982 [DEBUG] [Thread-204353] [transport.py] [_log()] Compression: none
2026-02-15T12:37:46.982 [DEBUG] [Thread-204353] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:37:47.000 [DEBUG] [Thread-204353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:37:47.000 [DEBUG] [Thread-204353] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:37:47.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:37:47.001 [DEBUG] [Thread-204353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:37:47.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:37:47.003 [DEBUG] [Thread-204353] [transport.py] [_log()] userauth is OK
2026-02-15T12:37:47.004 [DEBUG] [Thread-204353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:37:47.004 [DEBUG] [Thread-204353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:37:47.004 [DEBUG] [Thread-204353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:37:47.004 [DEBUG] [Thread-204353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:37:47.039 [INFO] [Thread-204353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:37:47.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:37:47.669 [DEBUG] [Thread-204353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:37:47.670 [DEBUG] [Thread-204353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:37:47.670 [DEBUG] [Thread-204353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:37:47.710 [DEBUG] [Thread-204353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:37:47.710 [DEBUG] [Thread-204353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:37:47.713 [DEBUG] [Thread-204353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:37:47.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:37:47.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:37:47.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:37:47.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:37:47.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:37:47.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:37:47.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:37:47.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:37:47.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:37:47.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.442459 -999.00  +22.30  14.62     20   -1.60 1 1 1 1 1   888    0 26.58 162.44 ----- 14.6 14.6 95.6 25.7 28.6 -32.6 28.2 -28.5 28.0 -26.4 29.0 -28.5
2026-02-15T12:37:47.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:37:47.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:37:47.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.442459
2026-02-15T12:37:47.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:37:47.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:37:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:37:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:37:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:37:47.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:37:07', tmtdew=27.2, humidity=16.11, cloud=0.0, wind=24.42, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:37:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:37:47.737 [DEBUG] [Thread-204353] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:37:47.814 [DEBUG] [Thread-204356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:37:47.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:37:47.843 [DEBUG] [Thread-204357] [transport.py] [_log()] starting thread (client mode): 0xa2d786d0
2026-02-15T12:37:47.843 [DEBUG] [Thread-204357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:37:47.858 [DEBUG] [Thread-204357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:37:47.858 [INFO] [Thread-204357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:37:47.866 [DEBUG] [Thread-204357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:37:47.866 [DEBUG] [Thread-204357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:37:47.866 [DEBUG] [Thread-204357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] client lang: <none>
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] server lang: <none>
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] kex follows: False
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] Compression: none
2026-02-15T12:37:47.867 [DEBUG] [Thread-204357] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:37:47.926 [DEBUG] [Thread-204357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:37:47.926 [DEBUG] [Thread-204357] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:37:47.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:37:47.927 [DEBUG] [Thread-204357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:37:47.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:37:47.982 [DEBUG] [Thread-204357] [transport.py] [_log()] userauth is OK
2026-02-15T12:37:47.982 [DEBUG] [Thread-204357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:37:47.983 [DEBUG] [Thread-204357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:37:47.983 [DEBUG] [Thread-204357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:37:47.983 [DEBUG] [Thread-204357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:37:48.001 [INFO] [Thread-204357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:37:48.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:37:48.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:37:48.927 [DEBUG] [Thread-204357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:37:48.928 [DEBUG] [Thread-204357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:37:48.975 [DEBUG] [Thread-204357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:37:48.975 [DEBUG] [Thread-204357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:37:48.984 [DEBUG] [Thread-204357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:37:48.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:37:48.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:37:49.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:37:49.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:37:49.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:37:49.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:37:49.018 [DEBUG] [Thread-204357] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:37:54.417 [DEBUG] [Thread-204359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:09.469 [DEBUG] [Thread-204360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:19.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:38:19.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:38:19.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:38:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 37, 42), 28.64, 14.53, 0.0, 18.23, 22.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:38:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:37:42
2026-02-15T12:38:21.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:38:21.609 [DEBUG] [Thread-204361] [transport.py] [_log()] starting thread (client mode): 0xa2d19ba0
2026-02-15T12:38:21.609 [DEBUG] [Thread-204361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:38:21.631 [DEBUG] [Thread-204361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:38:21.631 [INFO] [Thread-204361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:38:21.635 [DEBUG] [Thread-204361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] client lang: <none>
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] server lang: <none>
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] kex follows: False
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] Compression: none
2026-02-15T12:38:21.636 [DEBUG] [Thread-204361] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:38:21.652 [DEBUG] [Thread-204361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:38:21.653 [DEBUG] [Thread-204361] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:38:21.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:38:21.654 [DEBUG] [Thread-204361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:38:21.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:38:21.656 [DEBUG] [Thread-204361] [transport.py] [_log()] userauth is OK
2026-02-15T12:38:21.656 [DEBUG] [Thread-204361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:38:21.656 [DEBUG] [Thread-204361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:38:21.656 [DEBUG] [Thread-204361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:38:21.656 [DEBUG] [Thread-204361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:38:21.680 [INFO] [Thread-204361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:38:21.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:38:22.299 [DEBUG] [Thread-204361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:38:22.300 [DEBUG] [Thread-204361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:38:22.300 [DEBUG] [Thread-204361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:38:22.340 [DEBUG] [Thread-204361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:38:22.340 [DEBUG] [Thread-204361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:38:22.343 [DEBUG] [Thread-204361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:38:22.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:38:22.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:38:22.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:38:22.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:38:22.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:38:22.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:38:22.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:38:22.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:38:22.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:38:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.442806 -999.00  +22.30  16.83     20   -1.20 1 1 1 1 1   888    0 26.68 166.90 ----- 16.8 16.8 127.6 22.1 29.0 -28.1 28.3 -28.0 28.2 -26.7 29.1 -28.0
2026-02-15T12:38:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:38:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:38:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.442806
2026-02-15T12:38:22.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:38:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:38:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:38:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:38:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:38:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:37:42', tmtdew=28.64, humidity=14.53, cloud=0.0, wind=18.23, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:37:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:38:22.368 [DEBUG] [Thread-204361] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:38:22.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:38:22.475 [DEBUG] [Thread-204364] [transport.py] [_log()] starting thread (client mode): 0xa2d194e0
2026-02-15T12:38:22.475 [DEBUG] [Thread-204364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:38:22.489 [DEBUG] [Thread-204364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:38:22.490 [INFO] [Thread-204364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:38:22.497 [DEBUG] [Thread-204364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:38:22.498 [DEBUG] [Thread-204364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] client lang: <none>
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] server lang: <none>
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] kex follows: False
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:38:22.499 [DEBUG] [Thread-204364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:38:22.500 [DEBUG] [Thread-204364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:38:22.500 [DEBUG] [Thread-204364] [transport.py] [_log()] Compression: none
2026-02-15T12:38:22.500 [DEBUG] [Thread-204364] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:38:22.555 [DEBUG] [Thread-204364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:38:22.556 [DEBUG] [Thread-204364] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:38:22.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:38:22.557 [DEBUG] [Thread-204364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:38:22.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:38:22.612 [DEBUG] [Thread-204364] [transport.py] [_log()] userauth is OK
2026-02-15T12:38:22.613 [DEBUG] [Thread-204364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:38:22.613 [DEBUG] [Thread-204364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:38:22.613 [DEBUG] [Thread-204364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:38:22.613 [DEBUG] [Thread-204364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:38:22.632 [INFO] [Thread-204364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:38:22.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:38:22.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:38:23.446 [DEBUG] [Thread-204364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:38:23.447 [DEBUG] [Thread-204364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:38:23.494 [DEBUG] [Thread-204364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:38:23.494 [DEBUG] [Thread-204364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:38:23.503 [DEBUG] [Thread-204364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:38:23.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:38:23.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:38:23.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:38:23.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:38:23.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:38:23.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:38:23.540 [DEBUG] [Thread-204364] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:38:24.504 [DEBUG] [Thread-204366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:25.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:25.922 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:39.557 [DEBUG] [Thread-204367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:47.862 [DEBUG] [Thread-204368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:53.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:38:53.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:38:53.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:38:54.593 [DEBUG] [Thread-204369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:38:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 38, 18), 28.41, 14.74, 0.0, 18.3, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:38:55.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:38:18
2026-02-15T12:38:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:38:56.047 [DEBUG] [Thread-204370] [transport.py] [_log()] starting thread (client mode): 0xa2d18700
2026-02-15T12:38:56.047 [DEBUG] [Thread-204370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:38:56.069 [DEBUG] [Thread-204370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:38:56.069 [INFO] [Thread-204370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] client lang: <none>
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] server lang: <none>
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] kex follows: False
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] Compression: none
2026-02-15T12:38:56.072 [DEBUG] [Thread-204370] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:38:56.086 [DEBUG] [Thread-204370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:38:56.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:38:56.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] userauth is OK
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:38:56.087 [DEBUG] [Thread-204370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:38:56.096 [INFO] [Thread-204370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:38:56.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:38:56.807 [DEBUG] [Thread-204370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:38:56.807 [DEBUG] [Thread-204370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:38:56.808 [DEBUG] [Thread-204370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:38:56.848 [DEBUG] [Thread-204370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:38:56.849 [DEBUG] [Thread-204370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:38:56.853 [DEBUG] [Thread-204370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:38:56.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:38:56.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:38:56.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:38:56.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:38:56.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:38:56.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:38:56.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:38:56.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:38:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:38:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.443153 -999.00  +22.20  18.41     20   -1.10 1 1 1 1 1   888    0 26.62 160.55 ----- 18.4 18.4 127.6 24.3 29.0 -29.1 28.3 -28.2 28.1 -27.1 29.0 -29.0
2026-02-15T12:38:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:38:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:38:56.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.443153
2026-02-15T12:38:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:38:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:38:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:38:56.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:38:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:38:56.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:38:18', tmtdew=28.41, humidity=14.74, cloud=0.0, wind=18.3, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:38:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:38:56.881 [DEBUG] [Thread-204370] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:38:56.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:38:56.975 [DEBUG] [Thread-204373] [transport.py] [_log()] starting thread (client mode): 0xa2d1a6b0
2026-02-15T12:38:56.976 [DEBUG] [Thread-204373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:38:56.991 [DEBUG] [Thread-204373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:38:56.991 [INFO] [Thread-204373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:38:56.998 [DEBUG] [Thread-204373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] client lang: <none>
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] server lang: <none>
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] kex follows: False
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:38:56.999 [DEBUG] [Thread-204373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:38:57.000 [DEBUG] [Thread-204373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:38:57.000 [DEBUG] [Thread-204373] [transport.py] [_log()] Compression: none
2026-02-15T12:38:57.000 [DEBUG] [Thread-204373] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:38:57.058 [DEBUG] [Thread-204373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:38:57.059 [DEBUG] [Thread-204373] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:38:57.059 [DEBUG] [Thread-204373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:38:57.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:38:57.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:38:57.114 [DEBUG] [Thread-204373] [transport.py] [_log()] userauth is OK
2026-02-15T12:38:57.114 [DEBUG] [Thread-204373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:38:57.114 [DEBUG] [Thread-204373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:38:57.114 [DEBUG] [Thread-204373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:38:57.115 [DEBUG] [Thread-204373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:38:57.134 [INFO] [Thread-204373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:38:57.134 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:38:57.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:38:57.977 [DEBUG] [Thread-204373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:38:57.977 [DEBUG] [Thread-204373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:38:58.025 [DEBUG] [Thread-204373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:38:58.025 [DEBUG] [Thread-204373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:38:58.034 [DEBUG] [Thread-204373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:38:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:38:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:38:58.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:38:58.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:38:58.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:38:58.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:38:58.070 [DEBUG] [Thread-204373] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:39:09.630 [DEBUG] [Thread-204375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:39:24.684 [DEBUG] [Thread-204376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:39:26.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:39:26.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:39:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:39:28.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:39:28.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:39:29.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 38, 54), 27.42, 15.24, 0.0, 19.9, 21.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:39:29.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:38:54
2026-02-15T12:39:30.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:39:30.493 [DEBUG] [Thread-204377] [transport.py] [_log()] starting thread (client mode): 0xa57c25c0
2026-02-15T12:39:30.493 [DEBUG] [Thread-204377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:39:30.513 [DEBUG] [Thread-204377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:39:30.514 [INFO] [Thread-204377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:39:30.516 [DEBUG] [Thread-204377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:39:30.516 [DEBUG] [Thread-204377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] client lang: <none>
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] server lang: <none>
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] kex follows: False
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:39:30.517 [DEBUG] [Thread-204377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:39:30.518 [DEBUG] [Thread-204377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:39:30.518 [DEBUG] [Thread-204377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:39:30.518 [DEBUG] [Thread-204377] [transport.py] [_log()] Compression: none
2026-02-15T12:39:30.518 [DEBUG] [Thread-204377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:39:30.537 [DEBUG] [Thread-204377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:39:30.538 [DEBUG] [Thread-204377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:39:30.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:39:30.539 [DEBUG] [Thread-204377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:39:30.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:39:30.542 [DEBUG] [Thread-204377] [transport.py] [_log()] userauth is OK
2026-02-15T12:39:30.542 [DEBUG] [Thread-204377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:39:30.542 [DEBUG] [Thread-204377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:39:30.542 [DEBUG] [Thread-204377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:39:30.543 [DEBUG] [Thread-204377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:39:30.568 [INFO] [Thread-204377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:39:30.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:39:31.217 [DEBUG] [Thread-204377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:39:31.217 [DEBUG] [Thread-204377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:39:31.218 [DEBUG] [Thread-204377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:39:31.258 [DEBUG] [Thread-204377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:39:31.259 [DEBUG] [Thread-204377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:39:31.262 [DEBUG] [Thread-204377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:39:31.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:39:31.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:39:31.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:39:31.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:39:31.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:39:31.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:39:31.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:39:31.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:39:31.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:39:31.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.443501 -999.00  +22.10  17.67     21   -1.10 1 1 1 1 1   888    0 26.61 159.10 ----- 17.7 17.7 156.8 22.2 29.0 -28.9 28.3 -27.5 28.1 -27.7 29.1 -28.0
2026-02-15T12:39:31.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:39:31.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:39:31.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.443501
2026-02-15T12:39:31.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:39:31.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:39:31.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:39:31.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:39:31.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:39:31.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:38:54', tmtdew=27.42, humidity=15.24, cloud=0.0, wind=19.9, temperature=21.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:38:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:39:31.289 [DEBUG] [Thread-204377] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:39:31.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:39:31.387 [DEBUG] [Thread-204380] [transport.py] [_log()] starting thread (client mode): 0xa2d007f0
2026-02-15T12:39:31.387 [DEBUG] [Thread-204380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:39:31.403 [DEBUG] [Thread-204380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:39:31.403 [INFO] [Thread-204380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:39:31.411 [DEBUG] [Thread-204380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:39:31.411 [DEBUG] [Thread-204380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:39:31.411 [DEBUG] [Thread-204380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] client lang: <none>
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] server lang: <none>
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] kex follows: False
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:39:31.412 [DEBUG] [Thread-204380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:39:31.413 [DEBUG] [Thread-204380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:39:31.413 [DEBUG] [Thread-204380] [transport.py] [_log()] Compression: none
2026-02-15T12:39:31.413 [DEBUG] [Thread-204380] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:39:31.470 [DEBUG] [Thread-204380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:39:31.470 [DEBUG] [Thread-204380] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:39:31.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:39:31.471 [DEBUG] [Thread-204380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:39:31.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:39:31.526 [DEBUG] [Thread-204380] [transport.py] [_log()] userauth is OK
2026-02-15T12:39:31.526 [DEBUG] [Thread-204380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:39:31.527 [DEBUG] [Thread-204380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:39:31.527 [DEBUG] [Thread-204380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:39:31.527 [DEBUG] [Thread-204380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:39:31.545 [INFO] [Thread-204380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:39:31.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:39:31.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:39:32.369 [DEBUG] [Thread-204380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:39:32.369 [DEBUG] [Thread-204380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:39:32.417 [DEBUG] [Thread-204380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:39:32.417 [DEBUG] [Thread-204380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:39:32.426 [DEBUG] [Thread-204380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:39:32.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:39:32.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:39:32.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:39:32.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:39:32.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:39:32.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:39:32.461 [DEBUG] [Thread-204380] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:39:39.720 [DEBUG] [Thread-204382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:39:47.906 [DEBUG] [Thread-204383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:39:54.775 [DEBUG] [Thread-204384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:02.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:40:02.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:40:02.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:40:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 39, 29), 27.0, 15.67, 0.0, 21.93, 21.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:40:04.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:39:29
2026-02-15T12:40:05.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:40:05.371 [DEBUG] [Thread-204385] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-15T12:40:05.371 [DEBUG] [Thread-204385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:40:05.391 [DEBUG] [Thread-204385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:40:05.391 [INFO] [Thread-204385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:40:05.394 [DEBUG] [Thread-204385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:40:05.394 [DEBUG] [Thread-204385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] client lang: <none>
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] server lang: <none>
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] kex follows: False
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:40:05.395 [DEBUG] [Thread-204385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:40:05.396 [DEBUG] [Thread-204385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:40:05.396 [DEBUG] [Thread-204385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:40:05.396 [DEBUG] [Thread-204385] [transport.py] [_log()] Compression: none
2026-02-15T12:40:05.396 [DEBUG] [Thread-204385] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:40:05.413 [DEBUG] [Thread-204385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:40:05.414 [DEBUG] [Thread-204385] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:40:05.414 [DEBUG] [Thread-204385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:40:05.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:40:05.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:40:05.416 [DEBUG] [Thread-204385] [transport.py] [_log()] userauth is OK
2026-02-15T12:40:05.417 [DEBUG] [Thread-204385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:40:05.417 [DEBUG] [Thread-204385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:40:05.417 [DEBUG] [Thread-204385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:40:05.417 [DEBUG] [Thread-204385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:40:05.433 [INFO] [Thread-204385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:40:05.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:40:06.782 [DEBUG] [Thread-204385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:40:06.783 [DEBUG] [Thread-204385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:40:06.783 [DEBUG] [Thread-204385] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:40:06.824 [DEBUG] [Thread-204385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:40:06.824 [DEBUG] [Thread-204385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:40:06.827 [DEBUG] [Thread-204385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:40:06.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:40:06.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:40:06.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:40:06.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:40:06.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:40:06.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:40:06.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:40:06.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:40:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:40:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.443848 -999.00  +22.10  22.64     21   -0.90 1 1 1 1 1   888    0 26.77 163.94 ----- 22.6 22.6 127.4 29.0 29.1 -28.6 28.4 -27.8 28.2 -26.7 29.1 -29.3
2026-02-15T12:40:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:40:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:40:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.443848
2026-02-15T12:40:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:40:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:40:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:40:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:40:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:40:06.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:39:29', tmtdew=27.0, humidity=15.67, cloud=0.0, wind=21.93, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:39:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:40:06.853 [DEBUG] [Thread-204385] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:40:06.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:40:06.950 [DEBUG] [Thread-204388] [transport.py] [_log()] starting thread (client mode): 0xa57c1060
2026-02-15T12:40:06.950 [DEBUG] [Thread-204388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:40:06.964 [DEBUG] [Thread-204388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:40:06.965 [INFO] [Thread-204388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:40:06.972 [DEBUG] [Thread-204388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] client lang: <none>
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] server lang: <none>
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] kex follows: False
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:40:06.973 [DEBUG] [Thread-204388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:40:06.974 [DEBUG] [Thread-204388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:40:06.974 [DEBUG] [Thread-204388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:40:06.974 [DEBUG] [Thread-204388] [transport.py] [_log()] Compression: none
2026-02-15T12:40:06.974 [DEBUG] [Thread-204388] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:40:07.037 [DEBUG] [Thread-204388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:40:07.037 [DEBUG] [Thread-204388] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:40:07.038 [DEBUG] [Thread-204388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:40:07.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:40:07.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:40:07.092 [DEBUG] [Thread-204388] [transport.py] [_log()] userauth is OK
2026-02-15T12:40:07.093 [DEBUG] [Thread-204388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:40:07.093 [DEBUG] [Thread-204388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:40:07.093 [DEBUG] [Thread-204388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:40:07.093 [DEBUG] [Thread-204388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:40:07.122 [INFO] [Thread-204388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:40:07.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:40:07.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:40:07.969 [DEBUG] [Thread-204388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:40:07.970 [DEBUG] [Thread-204388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:40:08.019 [DEBUG] [Thread-204388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:40:08.019 [DEBUG] [Thread-204388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:40:08.029 [DEBUG] [Thread-204388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:40:08.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:40:08.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:40:08.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:40:08.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:40:08.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:40:08.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:40:08.074 [DEBUG] [Thread-204388] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:40:09.809 [DEBUG] [Thread-204390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:24.861 [DEBUG] [Thread-204391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:26.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:26.207 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:38.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:40:38.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:40:38.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:40:39.899 [DEBUG] [Thread-204392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 40, 5), 26.97, 15.7, 0.0, 21.54, 21.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:40:40.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:40:05
2026-02-15T12:40:40.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:40:40.630 [DEBUG] [Thread-204393] [transport.py] [_log()] starting thread (client mode): 0xa57c0100
2026-02-15T12:40:40.631 [DEBUG] [Thread-204393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:40:40.651 [DEBUG] [Thread-204393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:40:40.651 [INFO] [Thread-204393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] client lang: <none>
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] server lang: <none>
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] kex follows: False
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:40:40.654 [DEBUG] [Thread-204393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:40:40.655 [DEBUG] [Thread-204393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:40:40.655 [DEBUG] [Thread-204393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:40:40.655 [DEBUG] [Thread-204393] [transport.py] [_log()] Compression: none
2026-02-15T12:40:40.655 [DEBUG] [Thread-204393] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:40:40.678 [DEBUG] [Thread-204393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:40:40.679 [DEBUG] [Thread-204393] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:40:40.679 [DEBUG] [Thread-204393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:40:40.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:40:40.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:40:40.681 [DEBUG] [Thread-204393] [transport.py] [_log()] userauth is OK
2026-02-15T12:40:40.682 [DEBUG] [Thread-204393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:40:40.682 [DEBUG] [Thread-204393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:40:40.682 [DEBUG] [Thread-204393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:40:40.682 [DEBUG] [Thread-204393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:40:40.720 [INFO] [Thread-204393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:40:40.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:40:41.355 [DEBUG] [Thread-204393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:40:41.355 [DEBUG] [Thread-204393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:40:41.356 [DEBUG] [Thread-204393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:40:41.396 [DEBUG] [Thread-204393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:40:41.396 [DEBUG] [Thread-204393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:40:41.399 [DEBUG] [Thread-204393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:40:41.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:40:41.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:40:41.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:40:41.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:40:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:40:41.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:40:41.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:40:41.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:40:41.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:40:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.444195 -999.00  +22.10  14.21     21   -0.90 1 1 1 1 1   888    0 26.64 156.99 ----- 14.2 14.2 135.4 25.0 29.0 -28.7 28.2 -28.1 28.1 -26.8 29.0 -29.3
2026-02-15T12:40:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:40:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:40:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.444195
2026-02-15T12:40:41.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:40:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:40:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:40:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:40:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:40:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:40:05', tmtdew=26.97, humidity=15.7, cloud=0.0, wind=21.54, temperature=21.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:39:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:40:41.425 [DEBUG] [Thread-204393] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:40:41.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:40:41.521 [DEBUG] [Thread-204396] [transport.py] [_log()] starting thread (client mode): 0xa2d1b970
2026-02-15T12:40:41.521 [DEBUG] [Thread-204396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:40:41.535 [DEBUG] [Thread-204396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:40:41.536 [INFO] [Thread-204396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] client lang: <none>
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] server lang: <none>
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] kex follows: False
2026-02-15T12:40:41.544 [DEBUG] [Thread-204396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:40:41.545 [DEBUG] [Thread-204396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:40:41.545 [DEBUG] [Thread-204396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:40:41.545 [DEBUG] [Thread-204396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:40:41.545 [DEBUG] [Thread-204396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:40:41.545 [DEBUG] [Thread-204396] [transport.py] [_log()] Compression: none
2026-02-15T12:40:41.545 [DEBUG] [Thread-204396] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:40:41.600 [DEBUG] [Thread-204396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:40:41.600 [DEBUG] [Thread-204396] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:40:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:40:41.602 [DEBUG] [Thread-204396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:40:41.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:40:41.656 [DEBUG] [Thread-204396] [transport.py] [_log()] userauth is OK
2026-02-15T12:40:41.657 [DEBUG] [Thread-204396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:40:41.657 [DEBUG] [Thread-204396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:40:41.657 [DEBUG] [Thread-204396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:40:41.657 [DEBUG] [Thread-204396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:40:41.675 [INFO] [Thread-204396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:40:41.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:40:41.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:40:42.493 [DEBUG] [Thread-204396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:40:42.493 [DEBUG] [Thread-204396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:40:42.542 [DEBUG] [Thread-204396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:40:42.542 [DEBUG] [Thread-204396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:40:42.551 [DEBUG] [Thread-204396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:40:42.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:40:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:40:42.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:40:42.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:40:42.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:40:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:40:42.584 [DEBUG] [Thread-204396] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:40:47.937 [DEBUG] [Thread-204398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:40:54.933 [DEBUG] [Thread-204399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:09.988 [DEBUG] [Thread-204400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:12.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:41:12.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:41:12.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:41:14.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 40, 41), 26.74, 16.26, 0.0, 15.0, 21.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:41:14.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:40:41
2026-02-15T12:41:14.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:41:15.073 [DEBUG] [Thread-204401] [transport.py] [_log()] starting thread (client mode): 0xa57c0490
2026-02-15T12:41:15.073 [DEBUG] [Thread-204401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:41:15.094 [DEBUG] [Thread-204401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:41:15.094 [INFO] [Thread-204401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] client lang: <none>
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] server lang: <none>
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] kex follows: False
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] Compression: none
2026-02-15T12:41:15.098 [DEBUG] [Thread-204401] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:41:15.116 [DEBUG] [Thread-204401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:41:15.116 [DEBUG] [Thread-204401] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:41:15.117 [DEBUG] [Thread-204401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:41:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:41:15.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:41:15.118 [DEBUG] [Thread-204401] [transport.py] [_log()] userauth is OK
2026-02-15T12:41:15.118 [DEBUG] [Thread-204401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:41:15.118 [DEBUG] [Thread-204401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:41:15.118 [DEBUG] [Thread-204401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:41:15.118 [DEBUG] [Thread-204401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:41:15.138 [INFO] [Thread-204401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:41:15.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:41:15.773 [DEBUG] [Thread-204401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:41:15.773 [DEBUG] [Thread-204401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:41:15.774 [DEBUG] [Thread-204401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:41:15.814 [DEBUG] [Thread-204401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:41:15.815 [DEBUG] [Thread-204401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:41:15.818 [DEBUG] [Thread-204401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:41:15.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:41:15.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:41:15.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:41:15.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:41:15.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:41:15.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:41:15.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:41:15.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:41:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:41:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.444889 -999.00  +22.10  15.09     22   -0.40 1 1 1 1 1   888    0 27.10 168.41 ----- 15.1 15.1 136.4 27.1 29.0 -29.1 28.2 -28.7 28.1 -27.0 29.0 -29.5
2026-02-15T12:41:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:41:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:41:15.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.444889
2026-02-15T12:41:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:41:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:41:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:41:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:41:15.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:41:15.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:40:41', tmtdew=26.74, humidity=16.26, cloud=0.0, wind=15.0, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:40:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:41:15.846 [DEBUG] [Thread-204401] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:41:15.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:41:15.941 [DEBUG] [Thread-204404] [transport.py] [_log()] starting thread (client mode): 0xa2d01360
2026-02-15T12:41:15.941 [DEBUG] [Thread-204404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:41:15.956 [DEBUG] [Thread-204404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:41:15.956 [INFO] [Thread-204404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:41:15.963 [DEBUG] [Thread-204404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:41:15.963 [DEBUG] [Thread-204404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:41:15.963 [DEBUG] [Thread-204404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:41:15.963 [DEBUG] [Thread-204404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:15.963 [DEBUG] [Thread-204404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] client lang: <none>
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] server lang: <none>
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] kex follows: False
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] Compression: none
2026-02-15T12:41:15.964 [DEBUG] [Thread-204404] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:41:16.021 [DEBUG] [Thread-204404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:41:16.021 [DEBUG] [Thread-204404] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:41:16.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:41:16.023 [DEBUG] [Thread-204404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:41:16.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:41:16.088 [DEBUG] [Thread-204404] [transport.py] [_log()] userauth is OK
2026-02-15T12:41:16.088 [DEBUG] [Thread-204404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:41:16.088 [DEBUG] [Thread-204404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:41:16.089 [DEBUG] [Thread-204404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:41:16.089 [DEBUG] [Thread-204404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:41:16.108 [INFO] [Thread-204404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:41:16.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:41:16.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:41:16.929 [DEBUG] [Thread-204404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:41:16.929 [DEBUG] [Thread-204404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:41:16.976 [DEBUG] [Thread-204404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:41:16.977 [DEBUG] [Thread-204404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:41:16.986 [DEBUG] [Thread-204404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:41:16.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:41:16.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:41:17.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:41:17.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:41:17.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:41:17.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:41:17.023 [DEBUG] [Thread-204404] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:41:25.025 [DEBUG] [Thread-204406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:26.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:26.350 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:40.088 [DEBUG] [Thread-204407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:47.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:41:47.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:41:47.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:41:47.992 [DEBUG] [Thread-204408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:41:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 41, 16), 26.01, 17.17, 0.0, 26.13, 21.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:41:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:41:16
2026-02-15T12:41:49.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:41:49.566 [DEBUG] [Thread-204409] [transport.py] [_log()] starting thread (client mode): 0xa2d69e10
2026-02-15T12:41:49.566 [DEBUG] [Thread-204409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:41:49.585 [DEBUG] [Thread-204409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:41:49.586 [INFO] [Thread-204409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:41:49.588 [DEBUG] [Thread-204409] [transport.py] [_log()] client lang: <none>
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] server lang: <none>
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] kex follows: False
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] Compression: none
2026-02-15T12:41:49.589 [DEBUG] [Thread-204409] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:41:49.606 [DEBUG] [Thread-204409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:41:49.607 [DEBUG] [Thread-204409] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:41:49.607 [DEBUG] [Thread-204409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:41:49.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:41:49.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:41:49.609 [DEBUG] [Thread-204409] [transport.py] [_log()] userauth is OK
2026-02-15T12:41:49.609 [DEBUG] [Thread-204409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:41:49.610 [DEBUG] [Thread-204409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:41:49.610 [DEBUG] [Thread-204409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:41:49.610 [DEBUG] [Thread-204409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:41:49.645 [INFO] [Thread-204409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:41:49.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:41:50.436 [DEBUG] [Thread-204409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:41:50.437 [DEBUG] [Thread-204409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:41:50.437 [DEBUG] [Thread-204409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:41:50.477 [DEBUG] [Thread-204409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:41:50.478 [DEBUG] [Thread-204409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:41:50.481 [DEBUG] [Thread-204409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:41:50.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:41:50.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:41:50.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:41:50.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:41:50.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:41:50.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:41:50.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:41:50.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:41:50.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:41:50.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.445237 -999.00  +21.80  11.56     22   -0.70 1 1 1 1 1   888    0 26.69 171.52 ----- 11.6 11.6 149.4 26.2 29.0 -29.5 28.1 -29.5 28.1 -26.1 28.9 -30.4
2026-02-15T12:41:50.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:41:50.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:41:50.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.445237
2026-02-15T12:41:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:41:50.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:41:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:41:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:41:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:41:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:41:16', tmtdew=26.01, humidity=17.17, cloud=0.0, wind=26.13, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:41:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:41:50.508 [DEBUG] [Thread-204409] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:41:50.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:41:50.607 [DEBUG] [Thread-204412] [transport.py] [_log()] starting thread (client mode): 0xa2d00a60
2026-02-15T12:41:50.607 [DEBUG] [Thread-204412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:41:50.621 [DEBUG] [Thread-204412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:41:50.622 [INFO] [Thread-204412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:41:50.629 [DEBUG] [Thread-204412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:41:50.629 [DEBUG] [Thread-204412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] client lang: <none>
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] server lang: <none>
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] kex follows: False
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] Compression: none
2026-02-15T12:41:50.630 [DEBUG] [Thread-204412] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:41:50.687 [DEBUG] [Thread-204412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:41:50.688 [DEBUG] [Thread-204412] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:41:50.689 [DEBUG] [Thread-204412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:41:50.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:41:50.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:41:50.744 [DEBUG] [Thread-204412] [transport.py] [_log()] userauth is OK
2026-02-15T12:41:50.744 [DEBUG] [Thread-204412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:41:50.744 [DEBUG] [Thread-204412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:41:50.744 [DEBUG] [Thread-204412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:41:50.744 [DEBUG] [Thread-204412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:41:50.763 [INFO] [Thread-204412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:41:50.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:41:50.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:41:51.560 [DEBUG] [Thread-204412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:41:51.560 [DEBUG] [Thread-204412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:41:51.608 [DEBUG] [Thread-204412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:41:51.608 [DEBUG] [Thread-204412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:41:51.616 [DEBUG] [Thread-204412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:41:51.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:41:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:41:51.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:41:51.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:41:51.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:41:51.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:41:51.648 [DEBUG] [Thread-204412] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:41:55.123 [DEBUG] [Thread-204414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:10.171 [DEBUG] [Thread-204415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:42:21.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:42:21.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:42:23.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 41, 51), 25.64, 17.35, 0.0, 20.64, 21.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:42:23.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:41:51
2026-02-15T12:42:24.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:42:24.244 [DEBUG] [Thread-204416] [transport.py] [_log()] starting thread (client mode): 0xa2d18670
2026-02-15T12:42:24.244 [DEBUG] [Thread-204416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:42:24.263 [DEBUG] [Thread-204416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:42:24.264 [INFO] [Thread-204416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:42:24.267 [DEBUG] [Thread-204416] [transport.py] [_log()] client lang: <none>
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] server lang: <none>
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] kex follows: False
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] Compression: none
2026-02-15T12:42:24.268 [DEBUG] [Thread-204416] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:42:24.286 [DEBUG] [Thread-204416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:42:24.287 [DEBUG] [Thread-204416] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:42:24.287 [DEBUG] [Thread-204416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:42:24.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:42:24.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:42:24.290 [DEBUG] [Thread-204416] [transport.py] [_log()] userauth is OK
2026-02-15T12:42:24.290 [DEBUG] [Thread-204416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:42:24.291 [DEBUG] [Thread-204416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:42:24.291 [DEBUG] [Thread-204416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:42:24.291 [DEBUG] [Thread-204416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:42:24.315 [INFO] [Thread-204416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:42:24.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:42:24.918 [DEBUG] [Thread-204416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:42:24.919 [DEBUG] [Thread-204416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:42:24.919 [DEBUG] [Thread-204416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:42:24.959 [DEBUG] [Thread-204416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:42:24.959 [DEBUG] [Thread-204416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:42:24.962 [DEBUG] [Thread-204416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:42:24.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:42:24.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:42:24.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:42:24.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:42:24.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:42:24.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:42:24.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:42:24.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:42:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:42:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.445584 -999.00  +21.80  19.60     23   -0.20 1 1 1 1 1   888    0 26.80 159.46 ----- 19.6 19.6 140.4 24.9 29.1 -27.8 28.1 -27.7 28.1 -27.4 29.1 -29.7
2026-02-15T12:42:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:42:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:42:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.445584
2026-02-15T12:42:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:42:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:42:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:42:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:42:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:42:24.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:41:51', tmtdew=25.64, humidity=17.35, cloud=0.0, wind=20.64, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:41:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:42:24.988 [DEBUG] [Thread-204416] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:42:25.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:42:25.082 [DEBUG] [Thread-204419] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-15T12:42:25.082 [DEBUG] [Thread-204419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:42:25.097 [DEBUG] [Thread-204419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:42:25.097 [INFO] [Thread-204419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] client lang: <none>
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] server lang: <none>
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] kex follows: False
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] Compression: none
2026-02-15T12:42:25.104 [DEBUG] [Thread-204419] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:42:25.162 [DEBUG] [Thread-204419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:42:25.162 [DEBUG] [Thread-204419] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:42:25.162 [DEBUG] [Thread-204419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:42:25.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:42:25.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:42:25.206 [DEBUG] [Thread-204421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:25.219 [DEBUG] [Thread-204419] [transport.py] [_log()] userauth is OK
2026-02-15T12:42:25.219 [DEBUG] [Thread-204419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:42:25.219 [DEBUG] [Thread-204419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:42:25.219 [DEBUG] [Thread-204419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:42:25.219 [DEBUG] [Thread-204419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:42:25.232 [INFO] [Thread-204419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:42:25.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:42:25.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:42:26.042 [DEBUG] [Thread-204419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:42:26.042 [DEBUG] [Thread-204419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:42:26.094 [DEBUG] [Thread-204419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:42:26.094 [DEBUG] [Thread-204419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:42:26.103 [DEBUG] [Thread-204419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:42:26.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:42:26.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:42:26.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:42:26.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:42:26.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:42:26.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:42:26.138 [DEBUG] [Thread-204419] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:42:26.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:26.501 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:40.250 [DEBUG] [Thread-204422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:48.030 [DEBUG] [Thread-204423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:55.286 [DEBUG] [Thread-204424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:42:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:42:56.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:42:56.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:42:58.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 42, 27), 25.49, 17.48, 0.0, 21.35, 21.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:42:58.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:42:27
2026-02-15T12:42:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:42:58.599 [DEBUG] [Thread-204425] [transport.py] [_log()] starting thread (client mode): 0xa2d6a290
2026-02-15T12:42:58.599 [DEBUG] [Thread-204425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:42:58.621 [DEBUG] [Thread-204425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:42:58.621 [INFO] [Thread-204425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:42:58.624 [DEBUG] [Thread-204425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] client lang: <none>
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] server lang: <none>
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] kex follows: False
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] Compression: none
2026-02-15T12:42:58.625 [DEBUG] [Thread-204425] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:42:58.643 [DEBUG] [Thread-204425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:42:58.643 [DEBUG] [Thread-204425] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:42:58.644 [DEBUG] [Thread-204425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:42:58.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:42:58.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:42:58.646 [DEBUG] [Thread-204425] [transport.py] [_log()] userauth is OK
2026-02-15T12:42:58.646 [DEBUG] [Thread-204425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:42:58.647 [DEBUG] [Thread-204425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:42:58.647 [DEBUG] [Thread-204425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:42:58.647 [DEBUG] [Thread-204425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:42:58.670 [INFO] [Thread-204425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:42:58.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:42:59.301 [DEBUG] [Thread-204425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:42:59.301 [DEBUG] [Thread-204425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:42:59.301 [DEBUG] [Thread-204425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:42:59.342 [DEBUG] [Thread-204425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:42:59.343 [DEBUG] [Thread-204425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:42:59.346 [DEBUG] [Thread-204425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:42:59.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:42:59.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:42:59.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:42:59.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:42:59.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:42:59.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:42:59.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:42:59.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:42:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:42:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.445931 -999.00  +21.40  15.72     23   -0.10 1 1 1 1 1   888    0 25.87 119.47 ----- 15.7 15.7 111.4 23.6 28.9 -29.3 28.1 -27.8 28.1 -26.3 29.0 -28.1
2026-02-15T12:42:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:42:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:42:59.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.445931
2026-02-15T12:42:59.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:42:59.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:42:59.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:42:59.376 [DEBUG] [Thread-204425] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:42:59.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:42:59.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:42:59.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:42:27', tmtdew=25.49, humidity=17.48, cloud=0.0, wind=21.35, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:42:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:42:59.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:42:59.472 [DEBUG] [Thread-204428] [transport.py] [_log()] starting thread (client mode): 0xa2d01720
2026-02-15T12:42:59.472 [DEBUG] [Thread-204428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:42:59.486 [DEBUG] [Thread-204428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:42:59.486 [INFO] [Thread-204428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:42:59.494 [DEBUG] [Thread-204428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:42:59.494 [DEBUG] [Thread-204428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] client lang: <none>
2026-02-15T12:42:59.495 [DEBUG] [Thread-204428] [transport.py] [_log()] server lang: <none>
2026-02-15T12:42:59.496 [DEBUG] [Thread-204428] [transport.py] [_log()] kex follows: False
2026-02-15T12:42:59.496 [DEBUG] [Thread-204428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:42:59.496 [DEBUG] [Thread-204428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:42:59.496 [DEBUG] [Thread-204428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:42:59.496 [DEBUG] [Thread-204428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:42:59.497 [DEBUG] [Thread-204428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:42:59.497 [DEBUG] [Thread-204428] [transport.py] [_log()] Compression: none
2026-02-15T12:42:59.497 [DEBUG] [Thread-204428] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:42:59.555 [DEBUG] [Thread-204428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:42:59.555 [DEBUG] [Thread-204428] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:42:59.556 [DEBUG] [Thread-204428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:42:59.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:42:59.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:42:59.611 [DEBUG] [Thread-204428] [transport.py] [_log()] userauth is OK
2026-02-15T12:42:59.612 [DEBUG] [Thread-204428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:42:59.612 [DEBUG] [Thread-204428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:42:59.612 [DEBUG] [Thread-204428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:42:59.612 [DEBUG] [Thread-204428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:42:59.632 [INFO] [Thread-204428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:42:59.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:42:59.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:43:00.462 [DEBUG] [Thread-204428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:43:00.462 [DEBUG] [Thread-204428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:43:00.511 [DEBUG] [Thread-204428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:43:00.511 [DEBUG] [Thread-204428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:43:00.520 [DEBUG] [Thread-204428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:43:00.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:43:00.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:43:00.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:43:00.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:43:00.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:43:00.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:43:00.558 [DEBUG] [Thread-204428] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:43:10.325 [DEBUG] [Thread-204430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:43:25.367 [DEBUG] [Thread-204431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:43:26.640 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:43:26.641 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:43:30.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:43:30.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:43:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:43:32.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 43, 3), 25.19, 17.86, 0.0, 23.22, 21.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:43:32.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:43:03
2026-02-15T12:43:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:43:32.985 [DEBUG] [Thread-204432] [transport.py] [_log()] starting thread (client mode): 0xa2db5e40
2026-02-15T12:43:32.985 [DEBUG] [Thread-204432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:43:33.006 [DEBUG] [Thread-204432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:43:33.007 [INFO] [Thread-204432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] client lang: <none>
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] server lang: <none>
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] kex follows: False
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] Compression: none
2026-02-15T12:43:33.010 [DEBUG] [Thread-204432] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:43:33.027 [DEBUG] [Thread-204432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:43:33.027 [DEBUG] [Thread-204432] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:43:33.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:43:33.028 [DEBUG] [Thread-204432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:43:33.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:43:33.030 [DEBUG] [Thread-204432] [transport.py] [_log()] userauth is OK
2026-02-15T12:43:33.030 [DEBUG] [Thread-204432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:43:33.030 [DEBUG] [Thread-204432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:43:33.031 [DEBUG] [Thread-204432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:43:33.031 [DEBUG] [Thread-204432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:43:33.051 [INFO] [Thread-204432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:43:33.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:43:33.680 [DEBUG] [Thread-204432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:43:33.681 [DEBUG] [Thread-204432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:43:33.681 [DEBUG] [Thread-204432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:43:33.721 [DEBUG] [Thread-204432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:43:33.722 [DEBUG] [Thread-204432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:43:33.725 [DEBUG] [Thread-204432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:43:33.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:43:33.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:43:33.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:43:33.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:43:33.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:43:33.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:43:33.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:43:33.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:43:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:43:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.446278 -999.00  +21.60  10.50     23   +0.10 1 1 1 1 1   888    0 24.70 110.23 ----- 10.5 10.5 161.4 19.0 28.9 -28.6 28.2 -27.4 28.1 -27.1 29.2 -26.9
2026-02-15T12:43:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:43:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:43:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.446278
2026-02-15T12:43:33.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:43:33.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:43:33.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:43:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:43:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:43:33.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:43:03', tmtdew=25.19, humidity=17.86, cloud=0.0, wind=23.22, temperature=21.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:42:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:43:33.754 [DEBUG] [Thread-204432] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:43:33.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:43:33.850 [DEBUG] [Thread-204435] [transport.py] [_log()] starting thread (client mode): 0xa2db7130
2026-02-15T12:43:33.850 [DEBUG] [Thread-204435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:43:33.865 [DEBUG] [Thread-204435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:43:33.865 [INFO] [Thread-204435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:43:33.872 [DEBUG] [Thread-204435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] client lang: <none>
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] server lang: <none>
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] kex follows: False
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] Compression: none
2026-02-15T12:43:33.873 [DEBUG] [Thread-204435] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:43:33.930 [DEBUG] [Thread-204435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:43:33.931 [DEBUG] [Thread-204435] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:43:33.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:43:33.932 [DEBUG] [Thread-204435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:43:33.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:43:33.986 [DEBUG] [Thread-204435] [transport.py] [_log()] userauth is OK
2026-02-15T12:43:33.987 [DEBUG] [Thread-204435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:43:33.987 [DEBUG] [Thread-204435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:43:33.987 [DEBUG] [Thread-204435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:43:33.987 [DEBUG] [Thread-204435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:43:34.012 [INFO] [Thread-204435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:43:34.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:43:34.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:43:34.837 [DEBUG] [Thread-204435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:43:34.838 [DEBUG] [Thread-204435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:43:34.885 [DEBUG] [Thread-204435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:43:34.886 [DEBUG] [Thread-204435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:43:34.895 [DEBUG] [Thread-204435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:43:34.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:43:34.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:43:34.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:43:34.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:43:34.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:43:34.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:43:34.932 [DEBUG] [Thread-204435] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:43:40.406 [DEBUG] [Thread-204437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:43:48.072 [DEBUG] [Thread-204438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:43:55.460 [DEBUG] [Thread-204439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:04.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:44:04.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:44:04.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:44:07.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 43, 38), 24.58, 19.11, 0.0, 24.7, 21.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:44:07.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:43:38
2026-02-15T12:44:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:44:07.630 [DEBUG] [Thread-204440] [transport.py] [_log()] starting thread (client mode): 0xa2d1a920
2026-02-15T12:44:07.630 [DEBUG] [Thread-204440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:44:07.652 [DEBUG] [Thread-204440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:44:07.652 [INFO] [Thread-204440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:07.655 [DEBUG] [Thread-204440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] client lang: <none>
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] server lang: <none>
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] kex follows: False
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] Compression: none
2026-02-15T12:44:07.656 [DEBUG] [Thread-204440] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:44:07.672 [DEBUG] [Thread-204440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:44:07.672 [DEBUG] [Thread-204440] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:44:07.673 [DEBUG] [Thread-204440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:44:07.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:44:07.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:44:07.674 [DEBUG] [Thread-204440] [transport.py] [_log()] userauth is OK
2026-02-15T12:44:07.675 [DEBUG] [Thread-204440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:44:07.675 [DEBUG] [Thread-204440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:44:07.675 [DEBUG] [Thread-204440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:44:07.675 [DEBUG] [Thread-204440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:44:07.689 [INFO] [Thread-204440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:44:07.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:44:08.269 [DEBUG] [Thread-204440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:44:08.269 [DEBUG] [Thread-204440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:44:08.270 [DEBUG] [Thread-204440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:44:08.310 [DEBUG] [Thread-204440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:44:08.311 [DEBUG] [Thread-204440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:44:08.314 [DEBUG] [Thread-204440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:44:08.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:44:08.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:44:08.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:44:08.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:44:08.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:44:08.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:44:08.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:44:08.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:44:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:44:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.446625 -999.00  +21.40  18.73     24   +0.40 1 1 1 1 1   888    0 25.55 101.22 ----- 18.7 18.7 144.8 29.6 28.9 -29.2 28.1 -29.3 28.0 -27.6 29.0 -29.8
2026-02-15T12:44:08.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:44:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:44:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.446625
2026-02-15T12:44:08.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:44:08.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:44:08.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:44:08.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:44:08.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:44:08.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:43:38', tmtdew=24.58, humidity=19.11, cloud=0.0, wind=24.7, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:43:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:44:08.339 [DEBUG] [Thread-204440] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:44:08.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:44:08.443 [DEBUG] [Thread-204443] [transport.py] [_log()] starting thread (client mode): 0xa2d69540
2026-02-15T12:44:08.443 [DEBUG] [Thread-204443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:44:08.458 [DEBUG] [Thread-204443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:44:08.458 [INFO] [Thread-204443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:44:08.466 [DEBUG] [Thread-204443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:44:08.466 [DEBUG] [Thread-204443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:44:08.466 [DEBUG] [Thread-204443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] client lang: <none>
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] server lang: <none>
2026-02-15T12:44:08.467 [DEBUG] [Thread-204443] [transport.py] [_log()] kex follows: False
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] Compression: none
2026-02-15T12:44:08.468 [DEBUG] [Thread-204443] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:44:08.529 [DEBUG] [Thread-204443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:44:08.530 [DEBUG] [Thread-204443] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:44:08.530 [DEBUG] [Thread-204443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:44:08.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:44:08.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:44:08.586 [DEBUG] [Thread-204443] [transport.py] [_log()] userauth is OK
2026-02-15T12:44:08.586 [DEBUG] [Thread-204443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:44:08.586 [DEBUG] [Thread-204443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:44:08.586 [DEBUG] [Thread-204443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:44:08.586 [DEBUG] [Thread-204443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:44:08.606 [INFO] [Thread-204443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:44:08.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:44:08.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:44:09.437 [DEBUG] [Thread-204443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:44:09.437 [DEBUG] [Thread-204443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:44:09.485 [DEBUG] [Thread-204443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:44:09.486 [DEBUG] [Thread-204443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:44:09.494 [DEBUG] [Thread-204443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:44:09.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:44:09.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:44:09.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:44:09.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:44:09.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:44:09.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:44:09.532 [DEBUG] [Thread-204443] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:44:10.500 [DEBUG] [Thread-204445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:25.559 [DEBUG] [Thread-204446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:26.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:26.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:44:39.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:44:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:44:40.597 [DEBUG] [Thread-204447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 44, 13), 24.47, 19.24, 0.0, 26.98, 21.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:44:41.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:44:13
2026-02-15T12:44:42.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:44:42.407 [DEBUG] [Thread-204448] [transport.py] [_log()] starting thread (client mode): 0xa2d1aec0
2026-02-15T12:44:42.407 [DEBUG] [Thread-204448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:44:42.427 [DEBUG] [Thread-204448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:44:42.427 [INFO] [Thread-204448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] client lang: <none>
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] server lang: <none>
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] kex follows: False
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:44:42.430 [DEBUG] [Thread-204448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:44:42.431 [DEBUG] [Thread-204448] [transport.py] [_log()] Compression: none
2026-02-15T12:44:42.431 [DEBUG] [Thread-204448] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:44:42.445 [DEBUG] [Thread-204448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:44:42.445 [DEBUG] [Thread-204448] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:44:42.445 [DEBUG] [Thread-204448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:44:42.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:44:42.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:44:42.489 [DEBUG] [Thread-204448] [transport.py] [_log()] userauth is OK
2026-02-15T12:44:42.489 [DEBUG] [Thread-204448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:44:42.489 [DEBUG] [Thread-204448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:44:42.489 [DEBUG] [Thread-204448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:44:42.489 [DEBUG] [Thread-204448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:44:42.514 [INFO] [Thread-204448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:44:42.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:44:43.100 [DEBUG] [Thread-204448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:44:43.100 [DEBUG] [Thread-204448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:44:43.100 [DEBUG] [Thread-204448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:44:43.141 [DEBUG] [Thread-204448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:44:43.141 [DEBUG] [Thread-204448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:44:43.144 [DEBUG] [Thread-204448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:44:43.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:44:43.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:44:43.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:44:43.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:44:43.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:44:43.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:44:43.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:44:43.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.447320 -999.00  +21.20  17.50     25   +0.70 1 1 1 1 1   888    0 24.75 69.34 ----- 17.5 17.5 172.6 24.2 28.8 -29.0 28.1 -28.3 28.0 -26.4 28.9 -29.7
2026-02-15T12:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.447320
2026-02-15T12:44:43.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:44:43.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:44:43.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:44:43.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:44:43.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:44:43.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:44:13', tmtdew=24.47, humidity=19.24, cloud=0.0, wind=26.98, temperature=21.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:44:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:44:43.170 [DEBUG] [Thread-204448] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:44:43.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:44:43.280 [DEBUG] [Thread-204451] [transport.py] [_log()] starting thread (client mode): 0xa2dc1e70
2026-02-15T12:44:43.281 [DEBUG] [Thread-204451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:44:43.299 [DEBUG] [Thread-204451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:44:43.300 [INFO] [Thread-204451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:44:43.311 [DEBUG] [Thread-204451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] client lang: <none>
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] server lang: <none>
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] kex follows: False
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:44:43.312 [DEBUG] [Thread-204451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:44:43.313 [DEBUG] [Thread-204451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:44:43.313 [DEBUG] [Thread-204451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:44:43.313 [DEBUG] [Thread-204451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:44:43.313 [DEBUG] [Thread-204451] [transport.py] [_log()] Compression: none
2026-02-15T12:44:43.313 [DEBUG] [Thread-204451] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:44:43.366 [DEBUG] [Thread-204451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:44:43.366 [DEBUG] [Thread-204451] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:44:43.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:44:43.367 [DEBUG] [Thread-204451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:44:43.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:44:43.422 [DEBUG] [Thread-204451] [transport.py] [_log()] userauth is OK
2026-02-15T12:44:43.422 [DEBUG] [Thread-204451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:44:43.422 [DEBUG] [Thread-204451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:44:43.422 [DEBUG] [Thread-204451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:44:43.422 [DEBUG] [Thread-204451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:44:43.442 [INFO] [Thread-204451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:44:43.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:44:43.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:44:44.271 [DEBUG] [Thread-204451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:44:44.271 [DEBUG] [Thread-204451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:44:44.319 [DEBUG] [Thread-204451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:44:44.320 [DEBUG] [Thread-204451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:44:44.329 [DEBUG] [Thread-204451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:44:44.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:44:44.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:44:44.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:44:44.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:44:44.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:44:44.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:44:44.366 [DEBUG] [Thread-204451] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:44:48.106 [DEBUG] [Thread-204453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:44:55.632 [DEBUG] [Thread-204454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:10.685 [DEBUG] [Thread-204455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:45:14.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:45:14.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:45:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 44, 49), 24.44, 19.11, 0.0, 21.4, 21.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:45:16.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:44:49
2026-02-15T12:45:16.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:45:16.837 [DEBUG] [Thread-204456] [transport.py] [_log()] starting thread (client mode): 0xa2d6b190
2026-02-15T12:45:16.837 [DEBUG] [Thread-204456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:45:16.857 [DEBUG] [Thread-204456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:45:16.857 [INFO] [Thread-204456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] client lang: <none>
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] server lang: <none>
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] kex follows: False
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] Compression: none
2026-02-15T12:45:16.860 [DEBUG] [Thread-204456] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:45:16.869 [DEBUG] [Thread-204456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:45:16.869 [DEBUG] [Thread-204456] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:45:16.870 [DEBUG] [Thread-204456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:45:16.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:45:16.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:45:16.871 [DEBUG] [Thread-204456] [transport.py] [_log()] userauth is OK
2026-02-15T12:45:16.872 [DEBUG] [Thread-204456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:45:16.872 [DEBUG] [Thread-204456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:45:16.872 [DEBUG] [Thread-204456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:45:16.872 [DEBUG] [Thread-204456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:45:16.890 [INFO] [Thread-204456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:45:16.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:45:17.522 [DEBUG] [Thread-204456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:45:17.523 [DEBUG] [Thread-204456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:45:17.523 [DEBUG] [Thread-204456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:45:17.563 [DEBUG] [Thread-204456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:45:17.563 [DEBUG] [Thread-204456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:45:17.565 [DEBUG] [Thread-204456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:45:17.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:45:17.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:45:17.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:45:17.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:45:17.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:45:17.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:45:17.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:45:17.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:45:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:45:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.448014 -999.00  +21.30  16.91     25   +0.80 1 1 1 1 1   888    0 23.74 41.75 ----- 16.9 16.9 149.8 26.5 28.8 -29.2 27.9 -27.4 27.9 -26.7 28.9 -27.9
2026-02-15T12:45:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:45:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:45:17.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.448014
2026-02-15T12:45:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:45:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:45:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:45:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:45:17.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:45:17.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:44:49', tmtdew=24.44, humidity=19.11, cloud=0.0, wind=21.4, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:45:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:45:17.584 [DEBUG] [Thread-204456] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:45:17.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:45:17.685 [DEBUG] [Thread-204459] [transport.py] [_log()] starting thread (client mode): 0xa81d4f40
2026-02-15T12:45:17.685 [DEBUG] [Thread-204459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:45:17.699 [DEBUG] [Thread-204459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:45:17.699 [INFO] [Thread-204459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] client lang: <none>
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] server lang: <none>
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] kex follows: False
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:45:17.707 [DEBUG] [Thread-204459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:45:17.708 [DEBUG] [Thread-204459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:45:17.708 [DEBUG] [Thread-204459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:45:17.708 [DEBUG] [Thread-204459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:45:17.708 [DEBUG] [Thread-204459] [transport.py] [_log()] Compression: none
2026-02-15T12:45:17.708 [DEBUG] [Thread-204459] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:45:17.764 [DEBUG] [Thread-204459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:45:17.765 [DEBUG] [Thread-204459] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:45:17.766 [DEBUG] [Thread-204459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:45:17.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:45:17.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:45:17.821 [DEBUG] [Thread-204459] [transport.py] [_log()] userauth is OK
2026-02-15T12:45:17.821 [DEBUG] [Thread-204459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:45:17.821 [DEBUG] [Thread-204459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:45:17.821 [DEBUG] [Thread-204459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:45:17.821 [DEBUG] [Thread-204459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:45:17.840 [INFO] [Thread-204459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:45:17.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:45:17.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:45:18.671 [DEBUG] [Thread-204459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:45:18.671 [DEBUG] [Thread-204459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:45:18.722 [DEBUG] [Thread-204459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:45:18.723 [DEBUG] [Thread-204459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:45:18.732 [DEBUG] [Thread-204459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:45:18.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:45:18.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:45:18.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:45:18.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:45:18.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:45:18.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:45:18.773 [DEBUG] [Thread-204459] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:45:25.723 [DEBUG] [Thread-204461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:26.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:26.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:40.775 [DEBUG] [Thread-204462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:48.154 [DEBUG] [Thread-204463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:45:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:45:48.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:45:48.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:45:50.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 45, 25), 24.43, 19.11, 0.0, 24.6, 21.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:45:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:45:25
2026-02-15T12:45:51.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:45:51.556 [DEBUG] [Thread-204464] [transport.py] [_log()] starting thread (client mode): 0xa2d1a7d0
2026-02-15T12:45:51.556 [DEBUG] [Thread-204464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:45:51.573 [DEBUG] [Thread-204464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:45:51.573 [INFO] [Thread-204464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] client lang: <none>
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] server lang: <none>
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] kex follows: False
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] Compression: none
2026-02-15T12:45:51.576 [DEBUG] [Thread-204464] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:45:51.586 [DEBUG] [Thread-204464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:45:51.586 [DEBUG] [Thread-204464] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:45:51.586 [DEBUG] [Thread-204464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:45:51.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:45:51.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:45:51.587 [DEBUG] [Thread-204464] [transport.py] [_log()] userauth is OK
2026-02-15T12:45:51.587 [DEBUG] [Thread-204464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:45:51.587 [DEBUG] [Thread-204464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:45:51.587 [DEBUG] [Thread-204464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:45:51.587 [DEBUG] [Thread-204464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:45:51.596 [INFO] [Thread-204464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:45:51.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:45:52.162 [DEBUG] [Thread-204464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:45:52.162 [DEBUG] [Thread-204464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:45:52.163 [DEBUG] [Thread-204464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:45:52.203 [DEBUG] [Thread-204464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:45:52.204 [DEBUG] [Thread-204464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:45:52.207 [DEBUG] [Thread-204464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:45:52.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:45:52.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:45:52.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:45:52.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:45:52.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:45:52.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:45:52.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:45:52.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:45:52.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:45:52.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.448362 -999.00  +21.30  24.79     26   +1.10 1 1 1 1 1   888    0 22.80 27.20 ----- 24.8 24.8 136.2 31.6 28.7 -28.6 27.9 -28.2 27.9 -27.3 28.8 -29.1
2026-02-15T12:45:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:45:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:45:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.448362
2026-02-15T12:45:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:45:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:45:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:45:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:45:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:45:52.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:45:25', tmtdew=24.43, humidity=19.11, cloud=0.0, wind=24.6, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:45:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:45:52.228 [DEBUG] [Thread-204464] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:45:52.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:45:52.335 [DEBUG] [Thread-204467] [transport.py] [_log()] starting thread (client mode): 0xa2dc3640
2026-02-15T12:45:52.336 [DEBUG] [Thread-204467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:45:52.350 [DEBUG] [Thread-204467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:45:52.350 [INFO] [Thread-204467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] client lang: <none>
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] server lang: <none>
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] kex follows: False
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] Compression: none
2026-02-15T12:45:52.358 [DEBUG] [Thread-204467] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:45:52.415 [DEBUG] [Thread-204467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:45:52.415 [DEBUG] [Thread-204467] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:45:52.415 [DEBUG] [Thread-204467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:45:52.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:45:52.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:45:52.472 [DEBUG] [Thread-204467] [transport.py] [_log()] userauth is OK
2026-02-15T12:45:52.472 [DEBUG] [Thread-204467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:45:52.472 [DEBUG] [Thread-204467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:45:52.472 [DEBUG] [Thread-204467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:45:52.472 [DEBUG] [Thread-204467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:45:52.487 [INFO] [Thread-204467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:45:52.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:45:52.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:45:53.297 [DEBUG] [Thread-204467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:45:53.297 [DEBUG] [Thread-204467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:45:53.346 [DEBUG] [Thread-204467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:45:53.346 [DEBUG] [Thread-204467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:45:53.355 [DEBUG] [Thread-204467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:45:53.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:45:53.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:45:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:45:53.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:45:53.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:45:53.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:45:53.388 [DEBUG] [Thread-204467] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:45:55.812 [DEBUG] [Thread-204469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:10.871 [DEBUG] [Thread-204470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:23.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:46:23.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:46:23.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:46:25.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 46), 23.49, 20.74, 0.0, 27.61, 21.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:46:25.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:46:00
2026-02-15T12:46:25.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:46:25.875 [DEBUG] [Thread-204471] [transport.py] [_log()] starting thread (client mode): 0xa2db7d00
2026-02-15T12:46:25.875 [DEBUG] [Thread-204471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:46:25.892 [DEBUG] [Thread-204471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:46:25.892 [INFO] [Thread-204471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] client lang: <none>
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] server lang: <none>
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] kex follows: False
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] Compression: none
2026-02-15T12:46:25.894 [DEBUG] [Thread-204471] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:46:25.901 [DEBUG] [Thread-204473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:25.905 [DEBUG] [Thread-204471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:46:25.905 [DEBUG] [Thread-204471] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:46:25.906 [DEBUG] [Thread-204471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:46:25.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:46:25.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:46:25.907 [DEBUG] [Thread-204471] [transport.py] [_log()] userauth is OK
2026-02-15T12:46:25.907 [DEBUG] [Thread-204471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:46:25.907 [DEBUG] [Thread-204471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:46:25.907 [DEBUG] [Thread-204471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:46:25.907 [DEBUG] [Thread-204471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:46:25.921 [INFO] [Thread-204471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:46:25.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:46:26.554 [DEBUG] [Thread-204471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:46:26.555 [DEBUG] [Thread-204471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:46:26.555 [DEBUG] [Thread-204471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:46:26.596 [DEBUG] [Thread-204471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:46:26.596 [DEBUG] [Thread-204471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:46:26.600 [DEBUG] [Thread-204471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:46:26.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:46:26.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:46:26.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:46:26.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:46:26.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:46:26.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:46:26.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:46:26.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:46:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:46:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.448709 -999.00  +21.30  25.40     26   +1.10 1 1 1 1 1   888    0 21.94 7.49 ----- 25.4 25.4 132.8 27.7 28.6 -28.5 27.8 -28.4 27.9 -26.9 28.8 -27.8
2026-02-15T12:46:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:46:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:46:26.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.448709
2026-02-15T12:46:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:46:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:46:26.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:46:26.627 [DEBUG] [Thread-204471] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:46:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:46:26.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:46:26.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:46:00', tmtdew=23.49, humidity=20.74, cloud=0.0, wind=27.61, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:46:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:46:26.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:46:26.724 [DEBUG] [Thread-204475] [transport.py] [_log()] starting thread (client mode): 0xa5742650
2026-02-15T12:46:26.724 [DEBUG] [Thread-204475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:46:26.741 [DEBUG] [Thread-204475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:46:26.742 [INFO] [Thread-204475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:46:26.751 [DEBUG] [Thread-204475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:46:26.751 [DEBUG] [Thread-204475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:46:26.751 [DEBUG] [Thread-204475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:46:26.751 [DEBUG] [Thread-204475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:46:26.751 [DEBUG] [Thread-204475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:46:26.751 [DEBUG] [Thread-204475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] client lang: <none>
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] server lang: <none>
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] kex follows: False
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:46:26.752 [DEBUG] [Thread-204475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:46:26.753 [DEBUG] [Thread-204475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:46:26.753 [DEBUG] [Thread-204475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:46:26.753 [DEBUG] [Thread-204475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:46:26.753 [DEBUG] [Thread-204475] [transport.py] [_log()] Compression: none
2026-02-15T12:46:26.753 [DEBUG] [Thread-204475] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:46:26.809 [DEBUG] [Thread-204475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:46:26.810 [DEBUG] [Thread-204475] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:46:26.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:46:26.811 [DEBUG] [Thread-204475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:46:26.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:46:26.868 [DEBUG] [Thread-204475] [transport.py] [_log()] userauth is OK
2026-02-15T12:46:26.869 [DEBUG] [Thread-204475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:46:26.869 [DEBUG] [Thread-204475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:46:26.869 [DEBUG] [Thread-204475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:46:26.869 [DEBUG] [Thread-204475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:46:26.887 [INFO] [Thread-204475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:46:26.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:46:26.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:46:27.072 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:27.074 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:27.709 [DEBUG] [Thread-204475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:46:27.710 [DEBUG] [Thread-204475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:46:27.758 [DEBUG] [Thread-204475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:46:27.759 [DEBUG] [Thread-204475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:46:27.768 [DEBUG] [Thread-204475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:46:27.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:46: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')
2026-02-15T12:46:27.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:46:27.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:46:27.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:46:27.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:46:27.804 [DEBUG] [Thread-204475] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:46:40.939 [DEBUG] [Thread-204477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:48.198 [DEBUG] [Thread-204478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:55.991 [DEBUG] [Thread-204479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:46:57.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:46:57.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:46:57.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:46:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 46, 36), 25.0, 18.75, 0.0, 27.91, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:46:59.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:46:36
2026-02-15T12:47:00.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:47:00.214 [DEBUG] [Thread-204480] [transport.py] [_log()] starting thread (client mode): 0xa2dc2740
2026-02-15T12:47:00.215 [DEBUG] [Thread-204480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:47:00.231 [DEBUG] [Thread-204480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:47:00.231 [INFO] [Thread-204480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] client lang: <none>
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] server lang: <none>
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] kex follows: False
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:47:00.234 [DEBUG] [Thread-204480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:47:00.235 [DEBUG] [Thread-204480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:47:00.235 [DEBUG] [Thread-204480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:47:00.235 [DEBUG] [Thread-204480] [transport.py] [_log()] Compression: none
2026-02-15T12:47:00.235 [DEBUG] [Thread-204480] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:47:00.251 [DEBUG] [Thread-204480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:47:00.252 [DEBUG] [Thread-204480] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:47:00.252 [DEBUG] [Thread-204480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:47:00.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:47:00.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:47:00.254 [DEBUG] [Thread-204480] [transport.py] [_log()] userauth is OK
2026-02-15T12:47:00.254 [DEBUG] [Thread-204480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:47:00.254 [DEBUG] [Thread-204480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:47:00.254 [DEBUG] [Thread-204480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:47:00.254 [DEBUG] [Thread-204480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:47:00.278 [INFO] [Thread-204480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:47:00.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:47:00.876 [DEBUG] [Thread-204480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:47:00.876 [DEBUG] [Thread-204480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:47:00.877 [DEBUG] [Thread-204480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:47:00.918 [DEBUG] [Thread-204480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:47:00.918 [DEBUG] [Thread-204480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:47:00.920 [DEBUG] [Thread-204480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:47:00.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:47:00.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:47:00.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:47:00.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:47:00.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:47:00.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:47:00.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:47:00.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:47:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:47:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.449056 -999.00  +21.10  17.53     26   +0.90 1 1 1 1 1   888    0 21.54 -12.42 ----- 17.5 17.5 119.4 23.2 28.7 -28.1 27.9 -27.5 27.9 -26.7 28.8 -28.8
2026-02-15T12:47:00.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:47:00.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:47:00.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.449056
2026-02-15T12:47:00.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:47:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:47:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:47:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:47:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:47:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:46:36', tmtdew=25.0, humidity=18.75, cloud=0.0, wind=27.91, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:46:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:47:00.948 [DEBUG] [Thread-204480] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:47:01.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:47:01.048 [DEBUG] [Thread-204483] [transport.py] [_log()] starting thread (client mode): 0xa57c1060
2026-02-15T12:47:01.048 [DEBUG] [Thread-204483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:47:01.063 [DEBUG] [Thread-204483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:47:01.063 [INFO] [Thread-204483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:47:01.072 [DEBUG] [Thread-204483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:47:01.073 [DEBUG] [Thread-204483] [transport.py] [_log()] client lang: <none>
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] server lang: <none>
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] kex follows: False
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:47:01.074 [DEBUG] [Thread-204483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:47:01.075 [DEBUG] [Thread-204483] [transport.py] [_log()] Compression: none
2026-02-15T12:47:01.075 [DEBUG] [Thread-204483] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:47:01.132 [DEBUG] [Thread-204483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:47:01.132 [DEBUG] [Thread-204483] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:47:01.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:47:01.134 [DEBUG] [Thread-204483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:47:01.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:47:01.188 [DEBUG] [Thread-204483] [transport.py] [_log()] userauth is OK
2026-02-15T12:47:01.188 [DEBUG] [Thread-204483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:47:01.188 [DEBUG] [Thread-204483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:47:01.188 [DEBUG] [Thread-204483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:47:01.188 [DEBUG] [Thread-204483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:47:01.207 [INFO] [Thread-204483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:47:01.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:47:01.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:47:02.044 [DEBUG] [Thread-204483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:47:02.044 [DEBUG] [Thread-204483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:47:02.093 [DEBUG] [Thread-204483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:47:02.093 [DEBUG] [Thread-204483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:47:02.105 [DEBUG] [Thread-204483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:47:02.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:47: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')
2026-02-15T12:47:02.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:47:02.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:47:02.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:47:02.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:47:02.140 [DEBUG] [Thread-204483] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:47:11.027 [DEBUG] [Thread-204485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:47:26.080 [DEBUG] [Thread-204486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:47:27.214 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:47:27.215 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:47:32.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:47:32.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:47:32.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:47:34.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 47, 11), 23.59, 20.56, 0.0, 24.08, 21.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:47:34.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:47:11
2026-02-15T12:47:34.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:47:34.741 [DEBUG] [Thread-204487] [transport.py] [_log()] starting thread (client mode): 0xa2d19db0
2026-02-15T12:47:34.741 [DEBUG] [Thread-204487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:47:34.759 [DEBUG] [Thread-204487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:47:34.759 [INFO] [Thread-204487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] client lang: <none>
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] server lang: <none>
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] kex follows: False
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] Compression: none
2026-02-15T12:47:34.760 [DEBUG] [Thread-204487] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:47:34.768 [DEBUG] [Thread-204487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:47:34.768 [DEBUG] [Thread-204487] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:47:34.768 [DEBUG] [Thread-204487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:47:34.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:47:34.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:47:34.769 [DEBUG] [Thread-204487] [transport.py] [_log()] userauth is OK
2026-02-15T12:47:34.769 [DEBUG] [Thread-204487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:47:34.769 [DEBUG] [Thread-204487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:47:34.769 [DEBUG] [Thread-204487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:47:34.769 [DEBUG] [Thread-204487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:47:34.780 [INFO] [Thread-204487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:47:34.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:47:35.388 [DEBUG] [Thread-204487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:47:35.389 [DEBUG] [Thread-204487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:47:35.389 [DEBUG] [Thread-204487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:47:35.429 [DEBUG] [Thread-204487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:47:35.429 [DEBUG] [Thread-204487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:47:35.433 [DEBUG] [Thread-204487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:47:35.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:47:35.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:47:35.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:47:35.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:47:35.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:47:35.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:47:35.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:47:35.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:47:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:47:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.449403 -999.00  +21.10  17.51     26   +0.80 1 1 1 1 1   888    0 20.55 -32.62 ----- 17.5 17.5 133.6 23.8 28.6 -28.6 27.9 -27.7 27.9 -26.7 28.8 -27.7
2026-02-15T12:47:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:47:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:47:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.449403
2026-02-15T12:47:35.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:47:35.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:47:35.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:47:35.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:47:35.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:47:35.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:47:11', tmtdew=23.59, humidity=20.56, cloud=0.0, wind=24.08, temperature=21.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:47:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:47:35.459 [DEBUG] [Thread-204487] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:47:35.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:47:35.556 [DEBUG] [Thread-204490] [transport.py] [_log()] starting thread (client mode): 0xa57c27a0
2026-02-15T12:47:35.557 [DEBUG] [Thread-204490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:47:35.571 [DEBUG] [Thread-204490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:47:35.571 [INFO] [Thread-204490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:35.579 [DEBUG] [Thread-204490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] client lang: <none>
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] server lang: <none>
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] kex follows: False
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] Compression: none
2026-02-15T12:47:35.580 [DEBUG] [Thread-204490] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:47:35.636 [DEBUG] [Thread-204490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:47:35.636 [DEBUG] [Thread-204490] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:47:35.637 [DEBUG] [Thread-204490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:47:35.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:47:35.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:47:35.692 [DEBUG] [Thread-204490] [transport.py] [_log()] userauth is OK
2026-02-15T12:47:35.693 [DEBUG] [Thread-204490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:47:35.693 [DEBUG] [Thread-204490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:47:35.693 [DEBUG] [Thread-204490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:47:35.693 [DEBUG] [Thread-204490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:47:35.712 [INFO] [Thread-204490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:47:35.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:47:35.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:47:36.538 [DEBUG] [Thread-204490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:47:36.538 [DEBUG] [Thread-204490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:47:36.586 [DEBUG] [Thread-204490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:47:36.586 [DEBUG] [Thread-204490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:47:36.596 [DEBUG] [Thread-204490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:47:36.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:47:36.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:47:36.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:47:36.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:47:36.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:47:36.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:47:36.630 [DEBUG] [Thread-204490] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:47:41.117 [DEBUG] [Thread-204492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:47:48.227 [DEBUG] [Thread-204493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:47:56.170 [DEBUG] [Thread-204494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:06.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:48:06.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:48:06.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:48:08.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 47, 47), 23.28, 20.66, 0.0, 17.7, 20.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:48:08.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:47:47
2026-02-15T12:48:09.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:48:09.229 [DEBUG] [Thread-204495] [transport.py] [_log()] starting thread (client mode): 0xa5742440
2026-02-15T12:48:09.229 [DEBUG] [Thread-204495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:48:09.251 [DEBUG] [Thread-204495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:48:09.251 [INFO] [Thread-204495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] client lang: <none>
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] server lang: <none>
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] kex follows: False
2026-02-15T12:48:09.254 [DEBUG] [Thread-204495] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:48:09.255 [DEBUG] [Thread-204495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:48:09.255 [DEBUG] [Thread-204495] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:48:09.255 [DEBUG] [Thread-204495] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:48:09.255 [DEBUG] [Thread-204495] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:48:09.255 [DEBUG] [Thread-204495] [transport.py] [_log()] Compression: none
2026-02-15T12:48:09.255 [DEBUG] [Thread-204495] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:48:09.268 [DEBUG] [Thread-204495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:48:09.268 [DEBUG] [Thread-204495] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:48:09.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:48:09.269 [DEBUG] [Thread-204495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:48:09.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:48:09.270 [DEBUG] [Thread-204495] [transport.py] [_log()] userauth is OK
2026-02-15T12:48:09.270 [DEBUG] [Thread-204495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:48:09.270 [DEBUG] [Thread-204495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:48:09.270 [DEBUG] [Thread-204495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:48:09.270 [DEBUG] [Thread-204495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:48:09.290 [INFO] [Thread-204495] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:48:09.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:48:09.962 [DEBUG] [Thread-204495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:48:09.962 [DEBUG] [Thread-204495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:48:09.963 [DEBUG] [Thread-204495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:48:10.004 [DEBUG] [Thread-204495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:48:10.004 [DEBUG] [Thread-204495] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:48:10.008 [DEBUG] [Thread-204495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:48:10.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:48:10.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:48:10.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:48:10.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:48:10.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:48:10.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:48:10.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:48:10.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.449750 -999.00  +21.10  13.17     26   +1.00 1 1 1 1 1   888    0 20.42 -48.46 ----- 13.2 13.2 150.5 18.8 28.6 -27.6 28.0 -27.3 28.0 -27.9 28.9 -26.9
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.449750
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:48:10.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:47:47', tmtdew=23.28, humidity=20.66, cloud=0.0, wind=17.7, temperature=20.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:47:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:48:10.030 [DEBUG] [Thread-204495] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:48:10.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:48:10.134 [DEBUG] [Thread-204498] [transport.py] [_log()] starting thread (client mode): 0xa57e3f40
2026-02-15T12:48:10.134 [DEBUG] [Thread-204498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:48:10.148 [DEBUG] [Thread-204498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:48:10.149 [INFO] [Thread-204498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:48:10.157 [DEBUG] [Thread-204498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:48:10.157 [DEBUG] [Thread-204498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:48:10.157 [DEBUG] [Thread-204498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] client lang: <none>
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] server lang: <none>
2026-02-15T12:48:10.158 [DEBUG] [Thread-204498] [transport.py] [_log()] kex follows: False
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] Compression: none
2026-02-15T12:48:10.159 [DEBUG] [Thread-204498] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:48:10.217 [DEBUG] [Thread-204498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:48:10.218 [DEBUG] [Thread-204498] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:48:10.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:48:10.219 [DEBUG] [Thread-204498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:48:10.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:48:10.276 [DEBUG] [Thread-204498] [transport.py] [_log()] userauth is OK
2026-02-15T12:48:10.277 [DEBUG] [Thread-204498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:48:10.277 [DEBUG] [Thread-204498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:48:10.277 [DEBUG] [Thread-204498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:48:10.277 [DEBUG] [Thread-204498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:48:10.296 [INFO] [Thread-204498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:48:10.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:48:10.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:48:11.148 [DEBUG] [Thread-204498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:48:11.148 [DEBUG] [Thread-204498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:48:11.200 [DEBUG] [Thread-204498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:48:11.200 [DEBUG] [Thread-204498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:48:11.207 [DEBUG] [Thread-204500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:11.213 [DEBUG] [Thread-204498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:48:11.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:48:11.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:48:11.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:48:11.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:48:11.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:48:11.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:48:11.247 [DEBUG] [Thread-204498] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:48:26.256 [DEBUG] [Thread-204501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:27.358 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:27.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:48:41.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:48:41.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:48:41.289 [DEBUG] [Thread-204502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 48, 22), 23.13, 20.84, 0.0, 17.26, 20.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:48:43.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:48:22
2026-02-15T12:48:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:48:43.753 [DEBUG] [Thread-204503] [transport.py] [_log()] starting thread (client mode): 0xa2d1a7d0
2026-02-15T12:48:43.754 [DEBUG] [Thread-204503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:48:43.775 [DEBUG] [Thread-204503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:48:43.775 [INFO] [Thread-204503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:48:43.778 [DEBUG] [Thread-204503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] client lang: <none>
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] server lang: <none>
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] kex follows: False
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] Compression: none
2026-02-15T12:48:43.779 [DEBUG] [Thread-204503] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:48:43.796 [DEBUG] [Thread-204503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:48:43.797 [DEBUG] [Thread-204503] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:48:43.798 [DEBUG] [Thread-204503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:48:43.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:48:43.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:48:43.800 [DEBUG] [Thread-204503] [transport.py] [_log()] userauth is OK
2026-02-15T12:48:43.800 [DEBUG] [Thread-204503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:48:43.800 [DEBUG] [Thread-204503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:48:43.800 [DEBUG] [Thread-204503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:48:43.800 [DEBUG] [Thread-204503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:48:43.818 [INFO] [Thread-204503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:48:43.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:48:44.447 [DEBUG] [Thread-204503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:48:44.447 [DEBUG] [Thread-204503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:48:44.447 [DEBUG] [Thread-204503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:48:44.488 [DEBUG] [Thread-204503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:48:44.489 [DEBUG] [Thread-204503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:48:44.492 [DEBUG] [Thread-204503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:48:44.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:48:44.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:48:44.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:48:44.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:48:44.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:48:44.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:48:44.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:48:44.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:48:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:48:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.450098 -999.00  +21.10  15.28     26   +1.10 1 1 1 1 1   888    0 19.89 -60.35 ----- 15.3 15.3 131.8 19.9 28.7 -28.1 27.9 -27.2 28.0 -25.9 28.9 -27.9
2026-02-15T12:48:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:48:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:48:44.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.450098
2026-02-15T12:48:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:48:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:48:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:48:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:48:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:48:44.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:48:22', tmtdew=23.13, humidity=20.84, cloud=0.0, wind=17.26, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:48:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:48:44.521 [DEBUG] [Thread-204503] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:48:44.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:48:44.623 [DEBUG] [Thread-204506] [transport.py] [_log()] starting thread (client mode): 0xa57c3820
2026-02-15T12:48:44.623 [DEBUG] [Thread-204506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:48:44.638 [DEBUG] [Thread-204506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:48:44.638 [INFO] [Thread-204506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:48:44.654 [DEBUG] [Thread-204506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] client lang: <none>
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] server lang: <none>
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] kex follows: False
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:48:44.655 [DEBUG] [Thread-204506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:48:44.656 [DEBUG] [Thread-204506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:48:44.656 [DEBUG] [Thread-204506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:48:44.656 [DEBUG] [Thread-204506] [transport.py] [_log()] Compression: none
2026-02-15T12:48:44.656 [DEBUG] [Thread-204506] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:48:44.706 [DEBUG] [Thread-204506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:48:44.707 [DEBUG] [Thread-204506] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:48:44.707 [DEBUG] [Thread-204506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:48:44.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:48:44.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:48:44.762 [DEBUG] [Thread-204506] [transport.py] [_log()] userauth is OK
2026-02-15T12:48:44.763 [DEBUG] [Thread-204506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:48:44.763 [DEBUG] [Thread-204506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:48:44.763 [DEBUG] [Thread-204506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:48:44.763 [DEBUG] [Thread-204506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:48:44.782 [INFO] [Thread-204506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:48:44.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:48:44.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:48:45.597 [DEBUG] [Thread-204506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:48:45.597 [DEBUG] [Thread-204506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:48:45.645 [DEBUG] [Thread-204506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:48:45.645 [DEBUG] [Thread-204506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:48:45.654 [DEBUG] [Thread-204506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:48:45.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:48:45.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:48:45.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:48:45.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:48:45.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:48:45.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:48:45.691 [DEBUG] [Thread-204506] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:48:48.261 [DEBUG] [Thread-204508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:48:56.326 [DEBUG] [Thread-204509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:11.387 [DEBUG] [Thread-204510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:15.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:49:15.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:49:15.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:49:17.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 48, 57), 23.08, 20.9, 0.0, 19.41, 20.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:49:17.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:48:57
2026-02-15T12:49:18.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:49:18.233 [DEBUG] [Thread-204511] [transport.py] [_log()] starting thread (client mode): 0xa57c2590
2026-02-15T12:49:18.233 [DEBUG] [Thread-204511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:49:18.252 [DEBUG] [Thread-204511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:49:18.252 [INFO] [Thread-204511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:49:18.255 [DEBUG] [Thread-204511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] client lang: <none>
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] server lang: <none>
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] kex follows: False
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:49:18.256 [DEBUG] [Thread-204511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:49:18.257 [DEBUG] [Thread-204511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:49:18.257 [DEBUG] [Thread-204511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:49:18.257 [DEBUG] [Thread-204511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:49:18.257 [DEBUG] [Thread-204511] [transport.py] [_log()] Compression: none
2026-02-15T12:49:18.257 [DEBUG] [Thread-204511] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:49:18.272 [DEBUG] [Thread-204511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:49:18.273 [DEBUG] [Thread-204511] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:49:18.274 [DEBUG] [Thread-204511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:49:18.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:49:18.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:49:18.276 [DEBUG] [Thread-204511] [transport.py] [_log()] userauth is OK
2026-02-15T12:49:18.276 [DEBUG] [Thread-204511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:49:18.276 [DEBUG] [Thread-204511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:49:18.276 [DEBUG] [Thread-204511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:49:18.276 [DEBUG] [Thread-204511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:49:18.301 [INFO] [Thread-204511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:49:18.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:49:18.889 [DEBUG] [Thread-204511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:49:18.890 [DEBUG] [Thread-204511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:49:18.890 [DEBUG] [Thread-204511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:49:18.930 [DEBUG] [Thread-204511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:49:18.931 [DEBUG] [Thread-204511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:49:18.934 [DEBUG] [Thread-204511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:49:18.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:49:18.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:49:18.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:49:18.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:49:18.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:49:18.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:49:18.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:49:18.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:49:18.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:49:18.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.450792 -999.00  +21.30  21.85     26   +1.50 1 1 1 1 1   888    0 18.80 -85.64 ----- 21.9 21.9 116.2 30.1 28.4 -30.2 28.0 -27.8 28.1 -24.7 28.9 -27.1
2026-02-15T12:49:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:49:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:49:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.450792
2026-02-15T12:49:18.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:49:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:49:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:49:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:49:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:49:18.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:48:57', tmtdew=23.08, humidity=20.9, cloud=0.0, wind=19.41, temperature=20.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:49:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:49:18.963 [DEBUG] [Thread-204511] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:49:19.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:49:19.060 [DEBUG] [Thread-204514] [transport.py] [_log()] starting thread (client mode): 0xa57e3eb0
2026-02-15T12:49:19.060 [DEBUG] [Thread-204514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:49:19.074 [DEBUG] [Thread-204514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:49:19.075 [INFO] [Thread-204514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:19.082 [DEBUG] [Thread-204514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] client lang: <none>
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] server lang: <none>
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] kex follows: False
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] Compression: none
2026-02-15T12:49:19.083 [DEBUG] [Thread-204514] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:49:19.143 [DEBUG] [Thread-204514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:49:19.144 [DEBUG] [Thread-204514] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:49:19.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:49:19.145 [DEBUG] [Thread-204514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:49:19.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:49:19.199 [DEBUG] [Thread-204514] [transport.py] [_log()] userauth is OK
2026-02-15T12:49:19.199 [DEBUG] [Thread-204514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:49:19.199 [DEBUG] [Thread-204514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:49:19.199 [DEBUG] [Thread-204514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:49:19.199 [DEBUG] [Thread-204514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:49:19.218 [INFO] [Thread-204514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:49:19.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:49:19.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:49:20.095 [DEBUG] [Thread-204514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:49:20.095 [DEBUG] [Thread-204514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:49:20.143 [DEBUG] [Thread-204514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:49:20.144 [DEBUG] [Thread-204514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:49:20.153 [DEBUG] [Thread-204514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:49:20.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:49:20.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:49:20.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:49:20.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:49:20.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:49:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:49:20.190 [DEBUG] [Thread-204514] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:49:26.424 [DEBUG] [Thread-204516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:27.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:27.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:41.478 [DEBUG] [Thread-204517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:48.299 [DEBUG] [Thread-204518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:49:50.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:49:50.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:49:50.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:49:52.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 49, 32), 23.91, 20.11, 0.0, 22.97, 22.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:49:52.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:49:32
2026-02-15T12:49:52.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:49:52.580 [DEBUG] [Thread-204519] [transport.py] [_log()] starting thread (client mode): 0xa57400d0
2026-02-15T12:49:52.580 [DEBUG] [Thread-204519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:49:52.596 [DEBUG] [Thread-204519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:49:52.596 [INFO] [Thread-204519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:52.600 [DEBUG] [Thread-204519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] client lang: <none>
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] server lang: <none>
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] kex follows: False
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] Compression: none
2026-02-15T12:49:52.601 [DEBUG] [Thread-204519] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:49:52.621 [DEBUG] [Thread-204519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:49:52.621 [DEBUG] [Thread-204519] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:49:52.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:49:52.623 [DEBUG] [Thread-204519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:49:52.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:49:52.625 [DEBUG] [Thread-204519] [transport.py] [_log()] userauth is OK
2026-02-15T12:49:52.625 [DEBUG] [Thread-204519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:49:52.625 [DEBUG] [Thread-204519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:49:52.625 [DEBUG] [Thread-204519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:49:52.625 [DEBUG] [Thread-204519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:49:52.660 [INFO] [Thread-204519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:49:52.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:49:53.309 [DEBUG] [Thread-204519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:49:53.310 [DEBUG] [Thread-204519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:49:53.310 [DEBUG] [Thread-204519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:49:53.350 [DEBUG] [Thread-204519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:49:53.350 [DEBUG] [Thread-204519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:49:53.353 [DEBUG] [Thread-204519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:49:53.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:49:53.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:49:53.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:49:53.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:49:53.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:49:53.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:49:53.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:49:53.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:49:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:49:53.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.451139 -999.00  +21.60  17.35     26   +1.40 1 1 1 1 1   888    0 19.27 -83.25 ----- 17.4 17.4 114.6 26.3 28.7 -28.7 28.1 -26.8 28.1 -26.9 29.0 -26.2
2026-02-15T12:49:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:49:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:49:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.451139
2026-02-15T12:49:53.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:49:32', tmtdew=23.91, humidity=20.11, cloud=0.0, wind=22.97, temperature=22.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:49:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:49:53.379 [DEBUG] [Thread-204519] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:49:53.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:49:53.476 [DEBUG] [Thread-204522] [transport.py] [_log()] starting thread (client mode): 0xa5743b20
2026-02-15T12:49:53.476 [DEBUG] [Thread-204522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:49:53.491 [DEBUG] [Thread-204522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:49:53.491 [INFO] [Thread-204522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] client lang: <none>
2026-02-15T12:49:53.499 [DEBUG] [Thread-204522] [transport.py] [_log()] server lang: <none>
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] kex follows: False
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] Compression: none
2026-02-15T12:49:53.500 [DEBUG] [Thread-204522] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:49:53.555 [DEBUG] [Thread-204522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:49:53.556 [DEBUG] [Thread-204522] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:49:53.556 [DEBUG] [Thread-204522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:49:53.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:49:53.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:49:53.612 [DEBUG] [Thread-204522] [transport.py] [_log()] userauth is OK
2026-02-15T12:49:53.612 [DEBUG] [Thread-204522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:49:53.612 [DEBUG] [Thread-204522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:49:53.612 [DEBUG] [Thread-204522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:49:53.612 [DEBUG] [Thread-204522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:49:53.638 [INFO] [Thread-204522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:49:53.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:49:53.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:49:54.476 [DEBUG] [Thread-204522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:49:54.476 [DEBUG] [Thread-204522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:49:54.524 [DEBUG] [Thread-204522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:49:54.524 [DEBUG] [Thread-204522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:49:54.533 [DEBUG] [Thread-204522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:49:54.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:49:54.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:49:54.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:49:54.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:49:54.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:49:54.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:49:54.570 [DEBUG] [Thread-204522] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:49:56.518 [DEBUG] [Thread-204524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:11.570 [DEBUG] [Thread-204525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:24.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:50:24.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:50:24.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:50:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 50, 8), 23.35, 20.75, 0.0, 24.16, 21.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:50:26.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:50:08
2026-02-15T12:50:26.608 [DEBUG] [Thread-204526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:26.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:50:27.055 [DEBUG] [Thread-204527] [transport.py] [_log()] starting thread (client mode): 0xa5742710
2026-02-15T12:50:27.055 [DEBUG] [Thread-204527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:50:27.076 [DEBUG] [Thread-204527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:50:27.076 [INFO] [Thread-204527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:50:27.079 [DEBUG] [Thread-204527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:50:27.079 [DEBUG] [Thread-204527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:50:27.079 [DEBUG] [Thread-204527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:50:27.079 [DEBUG] [Thread-204527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:50:27.079 [DEBUG] [Thread-204527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] client lang: <none>
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] server lang: <none>
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] kex follows: False
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:50:27.080 [DEBUG] [Thread-204527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:50:27.081 [DEBUG] [Thread-204527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:50:27.081 [DEBUG] [Thread-204527] [transport.py] [_log()] Compression: none
2026-02-15T12:50:27.081 [DEBUG] [Thread-204527] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:50:27.099 [DEBUG] [Thread-204527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:50:27.099 [DEBUG] [Thread-204527] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:50:27.100 [DEBUG] [Thread-204527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:50:27.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:50:27.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:50:27.101 [DEBUG] [Thread-204527] [transport.py] [_log()] userauth is OK
2026-02-15T12:50:27.101 [DEBUG] [Thread-204527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:50:27.102 [DEBUG] [Thread-204527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:50:27.102 [DEBUG] [Thread-204527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:50:27.102 [DEBUG] [Thread-204527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:50:27.125 [INFO] [Thread-204527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:50:27.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:50:27.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:27.649 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:27.752 [DEBUG] [Thread-204527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:50:27.753 [DEBUG] [Thread-204527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:50:27.753 [DEBUG] [Thread-204527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:50:27.793 [DEBUG] [Thread-204527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:50:27.794 [DEBUG] [Thread-204527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:50:27.797 [DEBUG] [Thread-204527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:50:27.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:50:27.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:50:27.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:50:27.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:50:27.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:50:27.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:50:27.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:50:27.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:50:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:50:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.451486 -999.00  +21.50  11.46     26   +1.30 1 1 1 1 1   888    0 19.24 -82.86 ----- 11.5 11.5 128.0 19.8 28.8 -26.7 28.1 -26.8 28.2 -25.4 29.1 -26.5
2026-02-15T12:50:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:50:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:50:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.451486
2026-02-15T12:50:27.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:50:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:50:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:50:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:50:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:50:27.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:50:08', tmtdew=23.35, humidity=20.75, cloud=0.0, wind=24.16, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:50:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:50:27.824 [DEBUG] [Thread-204527] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:50:27.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:50:27.921 [DEBUG] [Thread-204530] [transport.py] [_log()] starting thread (client mode): 0xa5740c10
2026-02-15T12:50:27.921 [DEBUG] [Thread-204530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:50:27.938 [DEBUG] [Thread-204530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:50:27.938 [INFO] [Thread-204530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:50:27.946 [DEBUG] [Thread-204530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:50:27.946 [DEBUG] [Thread-204530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:50:27.946 [DEBUG] [Thread-204530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:50:27.946 [DEBUG] [Thread-204530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:50:27.946 [DEBUG] [Thread-204530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:50:27.946 [DEBUG] [Thread-204530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] client lang: <none>
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] server lang: <none>
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] kex follows: False
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:50:27.947 [DEBUG] [Thread-204530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:50:27.948 [DEBUG] [Thread-204530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:50:27.948 [DEBUG] [Thread-204530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:50:27.948 [DEBUG] [Thread-204530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:50:27.948 [DEBUG] [Thread-204530] [transport.py] [_log()] Compression: none
2026-02-15T12:50:27.948 [DEBUG] [Thread-204530] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:50:28.005 [DEBUG] [Thread-204530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:50:28.006 [DEBUG] [Thread-204530] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:50:28.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:50:28.007 [DEBUG] [Thread-204530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:50:28.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:50:28.069 [DEBUG] [Thread-204530] [transport.py] [_log()] userauth is OK
2026-02-15T12:50:28.069 [DEBUG] [Thread-204530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:50:28.069 [DEBUG] [Thread-204530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:50:28.069 [DEBUG] [Thread-204530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:50:28.070 [DEBUG] [Thread-204530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:50:28.088 [INFO] [Thread-204530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:50:28.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:50:28.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:50:28.977 [DEBUG] [Thread-204530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:50:28.978 [DEBUG] [Thread-204530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:50:29.026 [DEBUG] [Thread-204530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:50:29.026 [DEBUG] [Thread-204530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:50:29.040 [DEBUG] [Thread-204530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:50:29.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:50:29.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:50:29.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:50:29.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:50:29.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:50:29.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:50:29.079 [DEBUG] [Thread-204530] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:50:41.639 [DEBUG] [Thread-204532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:48.332 [DEBUG] [Thread-204533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:56.682 [DEBUG] [Thread-204534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:50:59.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:50:59.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:50:59.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:51:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 50, 43), 23.31, 20.79, 0.0, 24.81, 21.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:51:01.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:50:43
2026-02-15T12:51:01.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:51:01.516 [DEBUG] [Thread-204535] [transport.py] [_log()] starting thread (client mode): 0xa81d6350
2026-02-15T12:51:01.516 [DEBUG] [Thread-204535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:51:01.531 [DEBUG] [Thread-204535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:51:01.531 [INFO] [Thread-204535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:51:01.534 [DEBUG] [Thread-204535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] client lang: <none>
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] server lang: <none>
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] kex follows: False
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] Compression: none
2026-02-15T12:51:01.535 [DEBUG] [Thread-204535] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:51:01.553 [DEBUG] [Thread-204535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:51:01.554 [DEBUG] [Thread-204535] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:51:01.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:51:01.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:51:01.556 [DEBUG] [Thread-204535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:51:01.558 [DEBUG] [Thread-204535] [transport.py] [_log()] userauth is OK
2026-02-15T12:51:01.558 [DEBUG] [Thread-204535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:51:01.558 [DEBUG] [Thread-204535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:51:01.558 [DEBUG] [Thread-204535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:51:01.558 [DEBUG] [Thread-204535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:51:01.585 [INFO] [Thread-204535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:51:01.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:51:02.194 [DEBUG] [Thread-204535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:51:02.194 [DEBUG] [Thread-204535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:51:02.194 [DEBUG] [Thread-204535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:51:02.235 [DEBUG] [Thread-204535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:51:02.235 [DEBUG] [Thread-204535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:51:02.237 [DEBUG] [Thread-204535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:51:02.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:51:02.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:51:02.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:51:02.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:51:02.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:51:02.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:51:02.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.451834 -999.00  +22.00  24.88     26   +1.60 1 1 1 1 1   888    0 19.18 -80.85 ----- 24.9 24.9 138.6 28.2 28.9 -27.6 28.3 -26.8 28.2 -27.8 29.1 -26.9
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.451834
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:51:02.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:50:43', tmtdew=23.31, humidity=20.79, cloud=0.0, wind=24.81, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:50:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:51:02.257 [DEBUG] [Thread-204535] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:51:02.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:51:02.339 [DEBUG] [Thread-204538] [transport.py] [_log()] starting thread (client mode): 0xa81d76d0
2026-02-15T12:51:02.339 [DEBUG] [Thread-204538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:51:02.353 [DEBUG] [Thread-204538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:51:02.353 [INFO] [Thread-204538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] client lang: <none>
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] server lang: <none>
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] kex follows: False
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] Compression: none
2026-02-15T12:51:02.361 [DEBUG] [Thread-204538] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:51:02.420 [DEBUG] [Thread-204538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:51:02.421 [DEBUG] [Thread-204538] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:51:02.421 [DEBUG] [Thread-204538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:51:02.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:51:02.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:51:02.477 [DEBUG] [Thread-204538] [transport.py] [_log()] userauth is OK
2026-02-15T12:51:02.478 [DEBUG] [Thread-204538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:51:02.478 [DEBUG] [Thread-204538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:51:02.478 [DEBUG] [Thread-204538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:51:02.478 [DEBUG] [Thread-204538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:51:02.496 [INFO] [Thread-204538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:51:02.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:51:02.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:51:03.341 [DEBUG] [Thread-204538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:51:03.341 [DEBUG] [Thread-204538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:51:03.389 [DEBUG] [Thread-204538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:51:03.390 [DEBUG] [Thread-204538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:51:03.399 [DEBUG] [Thread-204538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:51:03.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:51:03.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:51: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-02-15T12:51:03.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:51:03.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:51:03.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:51:03.438 [DEBUG] [Thread-204538] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:51:11.719 [DEBUG] [Thread-204540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:51:26.774 [DEBUG] [Thread-204541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:51:27.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:51:27.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:51:33.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:51:33.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:51:33.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:51:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 51, 18), 23.42, 20.64, 0.0, 24.86, 21.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:51:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:51:18
2026-02-15T12:51:35.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:51:35.811 [DEBUG] [Thread-204542] [transport.py] [_log()] starting thread (client mode): 0xa57e3be0
2026-02-15T12:51:35.811 [DEBUG] [Thread-204542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:51:35.832 [DEBUG] [Thread-204542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:51:35.832 [INFO] [Thread-204542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] client lang: <none>
2026-02-15T12:51:35.835 [DEBUG] [Thread-204542] [transport.py] [_log()] server lang: <none>
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] kex follows: False
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] Compression: none
2026-02-15T12:51:35.836 [DEBUG] [Thread-204542] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:51:35.853 [DEBUG] [Thread-204542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:51:35.853 [DEBUG] [Thread-204542] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:51:35.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:51:35.854 [DEBUG] [Thread-204542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:51:35.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:51:35.856 [DEBUG] [Thread-204542] [transport.py] [_log()] userauth is OK
2026-02-15T12:51:35.857 [DEBUG] [Thread-204542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:51:35.857 [DEBUG] [Thread-204542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:51:35.857 [DEBUG] [Thread-204542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:51:35.857 [DEBUG] [Thread-204542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:51:35.880 [INFO] [Thread-204542] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:51:35.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:51:36.509 [DEBUG] [Thread-204542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:51:36.509 [DEBUG] [Thread-204542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:51:36.510 [DEBUG] [Thread-204542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:51:36.550 [DEBUG] [Thread-204542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:51:36.550 [DEBUG] [Thread-204542] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:51:36.553 [DEBUG] [Thread-204542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:51:36.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:51:36.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:51:36.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:51:36.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:51:36.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:51:36.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:51:36.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:51:36.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:51:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:51:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.452181 -999.00  +21.50  25.26     26   +1.30 1 1 1 1 1   888    0 19.64 -78.44 ----- 25.3 25.3 145.8 32.4 28.7 -29.9 28.1 -27.9 28.1 -27.1 28.9 -28.6
2026-02-15T12:51:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:51:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:51:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.452181
2026-02-15T12:51:36.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:51:36.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:51:36.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:51:36.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:51:36.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:51:36.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:51:18', tmtdew=23.42, humidity=20.64, cloud=0.0, wind=24.86, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:51:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:51:36.575 [DEBUG] [Thread-204542] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:51:36.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:51:36.673 [DEBUG] [Thread-204545] [transport.py] [_log()] starting thread (client mode): 0xa57e2b00
2026-02-15T12:51:36.673 [DEBUG] [Thread-204545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:51:36.687 [DEBUG] [Thread-204545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:51:36.688 [INFO] [Thread-204545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:51:36.695 [DEBUG] [Thread-204545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:51:36.696 [DEBUG] [Thread-204545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:51:36.696 [DEBUG] [Thread-204545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:51:36.696 [DEBUG] [Thread-204545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:36.696 [DEBUG] [Thread-204545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:51:36.696 [DEBUG] [Thread-204545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:36.696 [DEBUG] [Thread-204545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] client lang: <none>
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] server lang: <none>
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] kex follows: False
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] Compression: none
2026-02-15T12:51:36.697 [DEBUG] [Thread-204545] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:51:36.756 [DEBUG] [Thread-204545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:51:36.756 [DEBUG] [Thread-204545] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:51:36.757 [DEBUG] [Thread-204545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:51:36.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:51:36.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:51:36.814 [DEBUG] [Thread-204545] [transport.py] [_log()] userauth is OK
2026-02-15T12:51:36.814 [DEBUG] [Thread-204545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:51:36.815 [DEBUG] [Thread-204545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:51:36.815 [DEBUG] [Thread-204545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:51:36.815 [DEBUG] [Thread-204545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:51:36.833 [INFO] [Thread-204545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:51:36.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:51:36.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:51:37.653 [DEBUG] [Thread-204545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:51:37.653 [DEBUG] [Thread-204545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:51:37.705 [DEBUG] [Thread-204545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:51:37.705 [DEBUG] [Thread-204545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:51:37.714 [DEBUG] [Thread-204545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:51:37.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:51:37.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:51:37.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:51:37.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:51:37.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:51:37.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:51:37.755 [DEBUG] [Thread-204545] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:51:41.812 [DEBUG] [Thread-204547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:51:48.369 [DEBUG] [Thread-204548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:51:56.865 [DEBUG] [Thread-204549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:07.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:52:07.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:52:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:52:09.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 51, 53), 23.3, 20.89, 0.0, 28.36, 21.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:52:09.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:51:53
2026-02-15T12:52:10.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:52:10.355 [DEBUG] [Thread-204550] [transport.py] [_log()] starting thread (client mode): 0xa81d52a0
2026-02-15T12:52:10.355 [DEBUG] [Thread-204550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:52:10.375 [DEBUG] [Thread-204550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:52:10.375 [INFO] [Thread-204550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] client lang: <none>
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] server lang: <none>
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] kex follows: False
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] Compression: none
2026-02-15T12:52:10.378 [DEBUG] [Thread-204550] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:52:10.390 [DEBUG] [Thread-204550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:52:10.391 [DEBUG] [Thread-204550] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:52:10.391 [DEBUG] [Thread-204550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:52:10.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:52:10.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:52:10.393 [DEBUG] [Thread-204550] [transport.py] [_log()] userauth is OK
2026-02-15T12:52:10.393 [DEBUG] [Thread-204550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:52:10.393 [DEBUG] [Thread-204550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:52:10.393 [DEBUG] [Thread-204550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:52:10.393 [DEBUG] [Thread-204550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:52:10.418 [INFO] [Thread-204550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:52:10.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:52:11.054 [DEBUG] [Thread-204550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:52:11.054 [DEBUG] [Thread-204550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:52:11.054 [DEBUG] [Thread-204550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:52:11.095 [DEBUG] [Thread-204550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:52:11.095 [DEBUG] [Thread-204550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:52:11.099 [DEBUG] [Thread-204550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:52:11.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:52:11.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:52:11.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:52:11.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:52:11.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:52:11.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:52:11.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:52:11.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:52:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:52:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.452528 -999.00  +21.40  16.57     26   +1.30 1 1 1 1 1   888    0 19.28 -76.04 ----- 16.6 16.6 140.3 30.4 28.7 -28.5 27.9 -27.7 28.0 -26.2 28.9 -28.4
2026-02-15T12:52:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:52:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:52:11.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.452528
2026-02-15T12:52:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:52:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:52:11.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:52:11.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:52:11.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:52:11.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:51:53', tmtdew=23.3, humidity=20.89, cloud=0.0, wind=28.36, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:51:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:52:11.120 [DEBUG] [Thread-204550] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:52:11.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:52:11.216 [DEBUG] [Thread-204553] [transport.py] [_log()] starting thread (client mode): 0xa2db6800
2026-02-15T12:52:11.216 [DEBUG] [Thread-204553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:52:11.230 [DEBUG] [Thread-204553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:52:11.230 [INFO] [Thread-204553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:52:11.238 [DEBUG] [Thread-204553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:52:11.238 [DEBUG] [Thread-204553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] client lang: <none>
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] server lang: <none>
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] kex follows: False
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:52:11.239 [DEBUG] [Thread-204553] [transport.py] [_log()] Compression: none
2026-02-15T12:52:11.240 [DEBUG] [Thread-204553] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:52:11.298 [DEBUG] [Thread-204553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:52:11.299 [DEBUG] [Thread-204553] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:52:11.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:52:11.300 [DEBUG] [Thread-204553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:52:11.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:52:11.356 [DEBUG] [Thread-204553] [transport.py] [_log()] userauth is OK
2026-02-15T12:52:11.356 [DEBUG] [Thread-204553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:52:11.356 [DEBUG] [Thread-204553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:52:11.356 [DEBUG] [Thread-204553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:52:11.356 [DEBUG] [Thread-204553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:52:11.376 [INFO] [Thread-204553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:52:11.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:52:11.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:52:11.903 [DEBUG] [Thread-204555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:12.247 [DEBUG] [Thread-204553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:52:12.247 [DEBUG] [Thread-204553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:52:12.297 [DEBUG] [Thread-204553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:52:12.297 [DEBUG] [Thread-204553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:52:12.310 [DEBUG] [Thread-204553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:52:12.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:52:12.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:52:12.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:52:12.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:52:12.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:52:12.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:52:12.351 [DEBUG] [Thread-204553] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:52:26.968 [DEBUG] [Thread-204556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:27.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:27.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:42.004 [DEBUG] [Thread-204557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:42.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:52:42.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:52:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:52:44.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 52, 29), 23.11, 21.14, 0.0, 28.6, 21.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:52:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:52:29
2026-02-15T12:52:44.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:52:44.745 [DEBUG] [Thread-204558] [transport.py] [_log()] starting thread (client mode): 0xa57417e0
2026-02-15T12:52:44.745 [DEBUG] [Thread-204558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:52:44.765 [DEBUG] [Thread-204558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:52:44.765 [INFO] [Thread-204558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:52:44.768 [DEBUG] [Thread-204558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] client lang: <none>
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] server lang: <none>
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] kex follows: False
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:52:44.769 [DEBUG] [Thread-204558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:52:44.770 [DEBUG] [Thread-204558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:52:44.770 [DEBUG] [Thread-204558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:52:44.770 [DEBUG] [Thread-204558] [transport.py] [_log()] Compression: none
2026-02-15T12:52:44.770 [DEBUG] [Thread-204558] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:52:44.786 [DEBUG] [Thread-204558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:52:44.787 [DEBUG] [Thread-204558] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:52:44.787 [DEBUG] [Thread-204558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:52:44.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:52:44.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:52:44.789 [DEBUG] [Thread-204558] [transport.py] [_log()] userauth is OK
2026-02-15T12:52:44.789 [DEBUG] [Thread-204558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:52:44.789 [DEBUG] [Thread-204558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:52:44.789 [DEBUG] [Thread-204558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:52:44.789 [DEBUG] [Thread-204558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:52:44.813 [INFO] [Thread-204558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:52:44.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:52:45.439 [DEBUG] [Thread-204558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:52:45.439 [DEBUG] [Thread-204558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:52:45.439 [DEBUG] [Thread-204558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:52:45.480 [DEBUG] [Thread-204558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:52:45.480 [DEBUG] [Thread-204558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:52:45.483 [DEBUG] [Thread-204558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:52:45.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:52:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:52:45.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:52:45.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:52:45.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:52:45.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:52:45.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:52:45.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:52:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:52:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.452875 -999.00  +21.20  17.52     26   +1.10 1 1 1 1 1   888    0 19.29 -75.32 ----- 17.5 17.5 150.9 29.2 28.6 -31.2 28.0 -28.1 28.0 -27.3 28.8 -29.2
2026-02-15T12:52:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:52:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:52:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.452875
2026-02-15T12:52:45.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:52:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:52:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:52:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:52:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:52:45.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:52:29', tmtdew=23.11, humidity=21.14, cloud=0.0, wind=28.6, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:52:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:52:45.506 [DEBUG] [Thread-204558] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:52:45.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:52:45.601 [DEBUG] [Thread-204561] [transport.py] [_log()] starting thread (client mode): 0xa5742110
2026-02-15T12:52:45.601 [DEBUG] [Thread-204561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:52:45.616 [DEBUG] [Thread-204561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:52:45.616 [INFO] [Thread-204561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:52:45.623 [DEBUG] [Thread-204561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:52:45.623 [DEBUG] [Thread-204561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:52:45.623 [DEBUG] [Thread-204561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:52:45.623 [DEBUG] [Thread-204561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] client lang: <none>
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] server lang: <none>
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] kex follows: False
2026-02-15T12:52:45.624 [DEBUG] [Thread-204561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:52:45.625 [DEBUG] [Thread-204561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:52:45.625 [DEBUG] [Thread-204561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:52:45.625 [DEBUG] [Thread-204561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:52:45.625 [DEBUG] [Thread-204561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:52:45.625 [DEBUG] [Thread-204561] [transport.py] [_log()] Compression: none
2026-02-15T12:52:45.625 [DEBUG] [Thread-204561] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:52:45.682 [DEBUG] [Thread-204561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:52:45.682 [DEBUG] [Thread-204561] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:52:45.683 [DEBUG] [Thread-204561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:52:45.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:52:45.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:52:45.738 [DEBUG] [Thread-204561] [transport.py] [_log()] userauth is OK
2026-02-15T12:52:45.738 [DEBUG] [Thread-204561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:52:45.739 [DEBUG] [Thread-204561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:52:45.739 [DEBUG] [Thread-204561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:52:45.739 [DEBUG] [Thread-204561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:52:45.757 [INFO] [Thread-204561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:52:45.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:52:45.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:52:46.593 [DEBUG] [Thread-204561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:52:46.594 [DEBUG] [Thread-204561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:52:46.643 [DEBUG] [Thread-204561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:52:46.643 [DEBUG] [Thread-204561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:52:46.652 [DEBUG] [Thread-204561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:52:46.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:52:46.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:52:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:52:46.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:52:46.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:52:46.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:52:46.686 [DEBUG] [Thread-204561] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:52:48.408 [DEBUG] [Thread-204563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:52:57.040 [DEBUG] [Thread-204564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:12.100 [DEBUG] [Thread-204565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:53:16.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:53:16.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:53:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 53, 4), 23.29, 20.92, 0.0, 25.87, 21.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:53:19.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:53:04
2026-02-15T12:53:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:53:19.666 [DEBUG] [Thread-204566] [transport.py] [_log()] starting thread (client mode): 0xa57e0d60
2026-02-15T12:53:19.667 [DEBUG] [Thread-204566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:53:19.687 [DEBUG] [Thread-204566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:53:19.687 [INFO] [Thread-204566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:53:19.690 [DEBUG] [Thread-204566] [transport.py] [_log()] client lang: <none>
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] server lang: <none>
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] kex follows: False
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] Compression: none
2026-02-15T12:53:19.691 [DEBUG] [Thread-204566] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:53:19.708 [DEBUG] [Thread-204566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:53:19.708 [DEBUG] [Thread-204566] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:53:19.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:53:19.709 [DEBUG] [Thread-204566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:53:19.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:53:19.711 [DEBUG] [Thread-204566] [transport.py] [_log()] userauth is OK
2026-02-15T12:53:19.711 [DEBUG] [Thread-204566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:53:19.711 [DEBUG] [Thread-204566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:53:19.711 [DEBUG] [Thread-204566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:53:19.712 [DEBUG] [Thread-204566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:53:19.726 [INFO] [Thread-204566] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:53:19.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:53:20.373 [DEBUG] [Thread-204566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:53:20.373 [DEBUG] [Thread-204566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:53:20.374 [DEBUG] [Thread-204566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:53:20.414 [DEBUG] [Thread-204566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:53:20.415 [DEBUG] [Thread-204566] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:53:20.418 [DEBUG] [Thread-204566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:53:20.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:53:20.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:53:20.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:53:20.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:53:20.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:53:20.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:53:20.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:53:20.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:53:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:53:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.453223 -999.00  +21.20  18.62     26   +1.20 1 1 1 1 1   888    0 19.63 -70.26 ----- 18.6 18.6 143.8 26.4 28.6 -30.5 28.0 -27.4 28.0 -26.4 28.8 -29.0
2026-02-15T12:53:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:53:20.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:53:20.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.453223
2026-02-15T12:53:20.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:53:20.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:53:20.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:53:20.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:53:20.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:53:20.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:53:04', tmtdew=23.29, humidity=20.92, cloud=0.0, wind=25.87, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:52:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:53:20.447 [DEBUG] [Thread-204566] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:53:20.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:53:20.544 [DEBUG] [Thread-204569] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-15T12:53:20.544 [DEBUG] [Thread-204569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:53:20.558 [DEBUG] [Thread-204569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:53:20.559 [INFO] [Thread-204569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:53:20.566 [DEBUG] [Thread-204569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:53:20.566 [DEBUG] [Thread-204569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:53:20.566 [DEBUG] [Thread-204569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:53:20.566 [DEBUG] [Thread-204569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] client lang: <none>
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] server lang: <none>
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] kex follows: False
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] Compression: none
2026-02-15T12:53:20.567 [DEBUG] [Thread-204569] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:53:20.623 [DEBUG] [Thread-204569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:53:20.624 [DEBUG] [Thread-204569] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:53:20.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:53:20.625 [DEBUG] [Thread-204569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:53:20.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:53:20.679 [DEBUG] [Thread-204569] [transport.py] [_log()] userauth is OK
2026-02-15T12:53:20.680 [DEBUG] [Thread-204569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:53:20.680 [DEBUG] [Thread-204569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:53:20.680 [DEBUG] [Thread-204569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:53:20.680 [DEBUG] [Thread-204569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:53:20.698 [INFO] [Thread-204569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:53:20.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:53:20.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:53:21.522 [DEBUG] [Thread-204569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:53:21.522 [DEBUG] [Thread-204569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:53:21.570 [DEBUG] [Thread-204569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:53:21.571 [DEBUG] [Thread-204569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:53:21.580 [DEBUG] [Thread-204569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:53:21.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:53:21.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:53:21.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:53:21.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:53:21.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:53:21.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:53:21.615 [DEBUG] [Thread-204569] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:53:27.140 [DEBUG] [Thread-204571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:28.074 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:28.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:42.193 [DEBUG] [Thread-204572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:48.455 [DEBUG] [Thread-204573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:53:51.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:53:51.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:53:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:53:54.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 53, 41), 24.31, 19.61, 0.0, 22.97, 22.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:53:54.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:53:41
2026-02-15T12:53:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:53:54.920 [DEBUG] [Thread-204574] [transport.py] [_log()] starting thread (client mode): 0xa2db4820
2026-02-15T12:53:54.920 [DEBUG] [Thread-204574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:53:54.942 [DEBUG] [Thread-204574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:53:54.942 [INFO] [Thread-204574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] client lang: <none>
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] server lang: <none>
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] kex follows: False
2026-02-15T12:53:54.945 [DEBUG] [Thread-204574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:53:54.946 [DEBUG] [Thread-204574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:53:54.946 [DEBUG] [Thread-204574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:53:54.946 [DEBUG] [Thread-204574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:53:54.946 [DEBUG] [Thread-204574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:53:54.946 [DEBUG] [Thread-204574] [transport.py] [_log()] Compression: none
2026-02-15T12:53:54.946 [DEBUG] [Thread-204574] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:53:54.963 [DEBUG] [Thread-204574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:53:54.964 [DEBUG] [Thread-204574] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:53:54.965 [DEBUG] [Thread-204574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:53:54.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:53:54.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:53:54.967 [DEBUG] [Thread-204574] [transport.py] [_log()] userauth is OK
2026-02-15T12:53:54.967 [DEBUG] [Thread-204574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:53:54.967 [DEBUG] [Thread-204574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:53:54.967 [DEBUG] [Thread-204574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:53:54.967 [DEBUG] [Thread-204574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:53:54.992 [INFO] [Thread-204574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:53:54.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:53:55.629 [DEBUG] [Thread-204574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:53:55.630 [DEBUG] [Thread-204574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:53:55.630 [DEBUG] [Thread-204574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:53:55.670 [DEBUG] [Thread-204574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:53:55.671 [DEBUG] [Thread-204574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:53:55.674 [DEBUG] [Thread-204574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:53:55.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:53:55.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:53:55.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:53:55.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:53:55.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:53:55.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:53:55.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:53:55.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:53:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:53:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.453917 -999.00  +21.50  24.00     26   +1.40 1 1 1 1 1   888    0 19.07 -73.80 ----- 24.0 24.0 165.2 28.4 28.7 -27.0 27.9 -26.9 27.9 -27.3 29.0 -27.9
2026-02-15T12:53:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:53:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:53:55.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.453917
2026-02-15T12:53:55.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:53:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:53:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:53:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:53:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:53:55.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:53:41', tmtdew=24.31, humidity=19.61, cloud=0.0, wind=22.97, temperature=22.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:53:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:53:55.702 [DEBUG] [Thread-204574] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:53:55.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:53:55.798 [DEBUG] [Thread-204577] [transport.py] [_log()] starting thread (client mode): 0xa2d6ae00
2026-02-15T12:53:55.799 [DEBUG] [Thread-204577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:53:55.813 [DEBUG] [Thread-204577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:53:55.813 [INFO] [Thread-204577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:55.821 [DEBUG] [Thread-204577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] client lang: <none>
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] server lang: <none>
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] kex follows: False
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] Compression: none
2026-02-15T12:53:55.822 [DEBUG] [Thread-204577] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:53:55.879 [DEBUG] [Thread-204577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:53:55.880 [DEBUG] [Thread-204577] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:53:55.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:53:55.881 [DEBUG] [Thread-204577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:53:55.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:53:55.936 [DEBUG] [Thread-204577] [transport.py] [_log()] userauth is OK
2026-02-15T12:53:55.936 [DEBUG] [Thread-204577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:53:55.936 [DEBUG] [Thread-204577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:53:55.936 [DEBUG] [Thread-204577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:53:55.936 [DEBUG] [Thread-204577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:53:55.954 [INFO] [Thread-204577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:53:55.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:53:55.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:53:56.751 [DEBUG] [Thread-204577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:53:56.752 [DEBUG] [Thread-204577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:53:56.799 [DEBUG] [Thread-204577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:53:56.800 [DEBUG] [Thread-204577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:53:56.809 [DEBUG] [Thread-204577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:53:56.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:53:56.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:53:56.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:53:56.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:53:56.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:53:56.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:53:56.845 [DEBUG] [Thread-204577] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:53:57.231 [DEBUG] [Thread-204579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:12.300 [DEBUG] [Thread-204580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:54:26.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:54:26.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:54:27.343 [DEBUG] [Thread-204581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:28.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:28.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 54, 16), 23.01, 21.2, 0.0, 23.94, 21.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:54:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:54:16
2026-02-15T12:54:29.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:54:29.337 [DEBUG] [Thread-204582] [transport.py] [_log()] starting thread (client mode): 0xa2dc30d0
2026-02-15T12:54:29.337 [DEBUG] [Thread-204582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:54:29.356 [DEBUG] [Thread-204582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:54:29.357 [INFO] [Thread-204582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:54:29.360 [DEBUG] [Thread-204582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] client lang: <none>
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] server lang: <none>
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] kex follows: False
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] Compression: none
2026-02-15T12:54:29.361 [DEBUG] [Thread-204582] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:54:29.380 [DEBUG] [Thread-204582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:54:29.381 [DEBUG] [Thread-204582] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:54:29.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:54:29.382 [DEBUG] [Thread-204582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:54:29.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:54:29.384 [DEBUG] [Thread-204582] [transport.py] [_log()] userauth is OK
2026-02-15T12:54:29.384 [DEBUG] [Thread-204582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:54:29.384 [DEBUG] [Thread-204582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:54:29.384 [DEBUG] [Thread-204582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:54:29.384 [DEBUG] [Thread-204582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:54:29.409 [INFO] [Thread-204582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:54:29.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:54:30.061 [DEBUG] [Thread-204582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:54:30.061 [DEBUG] [Thread-204582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:54:30.061 [DEBUG] [Thread-204582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:54:30.102 [DEBUG] [Thread-204582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:54:30.102 [DEBUG] [Thread-204582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:54:30.105 [DEBUG] [Thread-204582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:54:30.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:54:30.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:54:30.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:54:30.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:54:30.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:54:30.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:54:30.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:54:30.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454264 -999.00  +21.50  26.06     26   +1.40 1 1 1 1 1   888    0 18.97 -83.19 ----- 26.1 26.1 148.8 29.4 28.6 -30.1 27.8 -27.9 27.8 -28.3 28.8 -27.9
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454264
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:54:30.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:54:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:54:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:54:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:54:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:54:16', tmtdew=23.01, humidity=21.2, cloud=0.0, wind=23.94, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:54:30.129 [DEBUG] [Thread-204582] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:54:30.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:54:30.217 [DEBUG] [Thread-204585] [transport.py] [_log()] starting thread (client mode): 0xa2d69990
2026-02-15T12:54:30.217 [DEBUG] [Thread-204585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:54:30.236 [DEBUG] [Thread-204585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:54:30.236 [INFO] [Thread-204585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:54:30.243 [DEBUG] [Thread-204585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:54:30.244 [DEBUG] [Thread-204585] [transport.py] [_log()] client lang: <none>
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] server lang: <none>
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] kex follows: False
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] Compression: none
2026-02-15T12:54:30.245 [DEBUG] [Thread-204585] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:54:30.305 [DEBUG] [Thread-204585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:54:30.306 [DEBUG] [Thread-204585] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:54:30.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:54:30.307 [DEBUG] [Thread-204585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:54:30.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:54:30.364 [DEBUG] [Thread-204585] [transport.py] [_log()] userauth is OK
2026-02-15T12:54:30.365 [DEBUG] [Thread-204585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:54:30.365 [DEBUG] [Thread-204585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:54:30.365 [DEBUG] [Thread-204585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:54:30.365 [DEBUG] [Thread-204585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:54:30.390 [INFO] [Thread-204585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:54:30.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:54:30.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:54:31.209 [DEBUG] [Thread-204585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:54:31.210 [DEBUG] [Thread-204585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:54:31.257 [DEBUG] [Thread-204585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:54:31.258 [DEBUG] [Thread-204585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:54:31.267 [DEBUG] [Thread-204585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:54:31.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:54:31.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:54:31.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:54:31.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:54:31.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:54:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:54:31.304 [DEBUG] [Thread-204585] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:54:42.385 [DEBUG] [Thread-204587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:48.498 [DEBUG] [Thread-204588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:54:57.438 [DEBUG] [Thread-204589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:01.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:55:01.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:55:01.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:55:03.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 54, 52), 22.92, 21.45, 0.0, 19.73, 21.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:55:03.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:54:52
2026-02-15T12:55:03.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:55:03.777 [DEBUG] [Thread-204590] [transport.py] [_log()] starting thread (client mode): 0xa5740940
2026-02-15T12:55:03.777 [DEBUG] [Thread-204590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:55:03.798 [DEBUG] [Thread-204590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:55:03.798 [INFO] [Thread-204590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:55:03.799 [DEBUG] [Thread-204590] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] client lang: <none>
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] server lang: <none>
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] kex follows: False
2026-02-15T12:55:03.800 [DEBUG] [Thread-204590] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:55:03.801 [DEBUG] [Thread-204590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:55:03.801 [DEBUG] [Thread-204590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:55:03.801 [DEBUG] [Thread-204590] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:55:03.801 [DEBUG] [Thread-204590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:55:03.801 [DEBUG] [Thread-204590] [transport.py] [_log()] Compression: none
2026-02-15T12:55:03.801 [DEBUG] [Thread-204590] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:55:03.816 [DEBUG] [Thread-204590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:55:03.817 [DEBUG] [Thread-204590] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:55:03.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:55:03.818 [DEBUG] [Thread-204590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:55:03.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:55:03.820 [DEBUG] [Thread-204590] [transport.py] [_log()] userauth is OK
2026-02-15T12:55:03.821 [DEBUG] [Thread-204590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:55:03.821 [DEBUG] [Thread-204590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:55:03.821 [DEBUG] [Thread-204590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:55:03.821 [DEBUG] [Thread-204590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:55:03.847 [INFO] [Thread-204590] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:55:03.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:55:12.480 [DEBUG] [Thread-204592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:13.835 [DEBUG] [Thread-204590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:55:13.836 [DEBUG] [Thread-204590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:55:13.836 [DEBUG] [Thread-204590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:55:13.876 [DEBUG] [Thread-204590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:55:13.876 [DEBUG] [Thread-204590] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:55:13.879 [DEBUG] [Thread-204590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:55:13.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:55:13.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:55:13.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:55:13.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:55:13.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:55:13.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:55:13.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:55:13.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:55:13.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:55:13.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:55:13.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:55:13.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:55:13.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:55:13.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:55:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:55:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:55:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:55:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:55:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:54:52', tmtdew=22.92, humidity=21.45, cloud=0.0, wind=19.73, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:55:13.941 [DEBUG] [Thread-204590] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:55:14.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:55:14.037 [DEBUG] [Thread-204594] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-15T12:55:14.037 [DEBUG] [Thread-204594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:55:14.051 [DEBUG] [Thread-204594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:55:14.052 [INFO] [Thread-204594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:55:14.059 [DEBUG] [Thread-204594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] client lang: <none>
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] server lang: <none>
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] kex follows: False
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:55:14.060 [DEBUG] [Thread-204594] [transport.py] [_log()] Compression: none
2026-02-15T12:55:14.061 [DEBUG] [Thread-204594] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:55:14.117 [DEBUG] [Thread-204594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:55:14.118 [DEBUG] [Thread-204594] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:55:14.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:55:14.119 [DEBUG] [Thread-204594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:55:14.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:55:14.173 [DEBUG] [Thread-204594] [transport.py] [_log()] userauth is OK
2026-02-15T12:55:14.173 [DEBUG] [Thread-204594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:55:14.174 [DEBUG] [Thread-204594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:55:14.174 [DEBUG] [Thread-204594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:55:14.174 [DEBUG] [Thread-204594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:55:14.193 [INFO] [Thread-204594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:55:14.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:55:14.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:55:15.044 [DEBUG] [Thread-204594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:55:15.044 [DEBUG] [Thread-204594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:55:15.091 [DEBUG] [Thread-204594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:55:15.091 [DEBUG] [Thread-204594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:55:15.101 [DEBUG] [Thread-204594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:55:15.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:55:15.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:55:15.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:55:15.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:55:15.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:55:15.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:55:15.135 [DEBUG] [Thread-204594] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:55:27.520 [DEBUG] [Thread-204596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:28.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:28.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:42.571 [DEBUG] [Thread-204597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:45.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:55:45.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:55:45.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:55:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 55, 27), 23.22, 21.06, 0.0, 25.97, 21.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:55:47.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:55:27
2026-02-15T12:55:47.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:55:47.557 [DEBUG] [Thread-204598] [transport.py] [_log()] starting thread (client mode): 0xa81d4fd0
2026-02-15T12:55:47.557 [DEBUG] [Thread-204598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:55:47.584 [DEBUG] [Thread-204598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:55:47.585 [INFO] [Thread-204598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:55:47.588 [DEBUG] [Thread-204598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:47.589 [DEBUG] [Thread-204598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] client lang: <none>
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] server lang: <none>
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] kex follows: False
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:55:47.590 [DEBUG] [Thread-204598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:55:47.591 [DEBUG] [Thread-204598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:55:47.591 [DEBUG] [Thread-204598] [transport.py] [_log()] Compression: none
2026-02-15T12:55:47.591 [DEBUG] [Thread-204598] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:55:47.612 [DEBUG] [Thread-204598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:55:47.613 [DEBUG] [Thread-204598] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:55:47.613 [DEBUG] [Thread-204598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:55:47.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:55:47.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:55:47.615 [DEBUG] [Thread-204598] [transport.py] [_log()] userauth is OK
2026-02-15T12:55:47.615 [DEBUG] [Thread-204598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:55:47.616 [DEBUG] [Thread-204598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:55:47.616 [DEBUG] [Thread-204598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:55:47.616 [DEBUG] [Thread-204598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:55:47.639 [INFO] [Thread-204598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:55:47.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:55:48.299 [DEBUG] [Thread-204598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:55:48.299 [DEBUG] [Thread-204598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:55:48.299 [DEBUG] [Thread-204598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:55:48.340 [DEBUG] [Thread-204598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:55:48.341 [DEBUG] [Thread-204598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:55:48.344 [DEBUG] [Thread-204598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:55:48.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:55:48.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:55:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:55:48.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:55:48.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:55:48.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:55:48.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:55:48.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:55:48.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:55:48.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:55:48.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:55:48.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:55:48.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:55:48.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:55:48.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:55:48.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:55:48.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:55:48.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:55:48.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:55:27', tmtdew=23.22, humidity=21.06, cloud=0.0, wind=25.97, temperature=21.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:55:48.370 [DEBUG] [Thread-204598] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:55:48.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:55:48.464 [DEBUG] [Thread-204601] [transport.py] [_log()] starting thread (client mode): 0xa2d005e0
2026-02-15T12:55:48.464 [DEBUG] [Thread-204601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:55:48.479 [DEBUG] [Thread-204601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:55:48.479 [INFO] [Thread-204601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] client lang: <none>
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] server lang: <none>
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] kex follows: False
2026-02-15T12:55:48.487 [DEBUG] [Thread-204601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:55:48.488 [DEBUG] [Thread-204601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:55:48.488 [DEBUG] [Thread-204601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:55:48.488 [DEBUG] [Thread-204601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:55:48.488 [DEBUG] [Thread-204601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:55:48.488 [DEBUG] [Thread-204601] [transport.py] [_log()] Compression: none
2026-02-15T12:55:48.488 [DEBUG] [Thread-204601] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:55:48.543 [DEBUG] [Thread-204601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:55:48.543 [DEBUG] [Thread-204601] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:55:48.544 [DEBUG] [Thread-204601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:55:48.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:55:48.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:55:48.551 [DEBUG] [Thread-204603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:55:48.601 [DEBUG] [Thread-204601] [transport.py] [_log()] userauth is OK
2026-02-15T12:55:48.601 [DEBUG] [Thread-204601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:55:48.601 [DEBUG] [Thread-204601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:55:48.601 [DEBUG] [Thread-204601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:55:48.602 [DEBUG] [Thread-204601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:55:48.620 [INFO] [Thread-204601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:55:48.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:55:48.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:55:49.453 [DEBUG] [Thread-204601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:55:49.453 [DEBUG] [Thread-204601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:55:49.501 [DEBUG] [Thread-204601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:55:49.501 [DEBUG] [Thread-204601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:55:49.510 [DEBUG] [Thread-204601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:55:49.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:55: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')
2026-02-15T12:55:49.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:55:49.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:55:49.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:55:49.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:55:49.547 [DEBUG] [Thread-204601] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:55:57.605 [DEBUG] [Thread-204604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:12.659 [DEBUG] [Thread-204605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:56:19.549 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:56:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:56:21.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 56, 3), 23.46, 20.72, 0.0, 27.91, 21.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:56:21.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:56:03
2026-02-15T12:56:21.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:56:21.890 [DEBUG] [Thread-204606] [transport.py] [_log()] starting thread (client mode): 0xa81d7430
2026-02-15T12:56:21.890 [DEBUG] [Thread-204606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:56:21.906 [DEBUG] [Thread-204606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:56:21.906 [INFO] [Thread-204606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] client lang: <none>
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] server lang: <none>
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] kex follows: False
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] Compression: none
2026-02-15T12:56:21.908 [DEBUG] [Thread-204606] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:56:21.916 [DEBUG] [Thread-204606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:56:21.916 [DEBUG] [Thread-204606] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:56:21.916 [DEBUG] [Thread-204606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:56:21.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:56:21.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:56:21.917 [DEBUG] [Thread-204606] [transport.py] [_log()] userauth is OK
2026-02-15T12:56:21.917 [DEBUG] [Thread-204606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:56:21.917 [DEBUG] [Thread-204606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:56:21.917 [DEBUG] [Thread-204606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:56:21.917 [DEBUG] [Thread-204606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:56:21.928 [INFO] [Thread-204606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:56:21.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:56:22.515 [DEBUG] [Thread-204606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:56:22.515 [DEBUG] [Thread-204606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:56:22.516 [DEBUG] [Thread-204606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:56:22.556 [DEBUG] [Thread-204606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:56:22.556 [DEBUG] [Thread-204606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:56:22.560 [DEBUG] [Thread-204606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:56:22.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:56:22.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:56:22.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:56:22.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:56:22.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:56:22.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:56:22.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:56:22.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:56:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:56:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:56:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:56:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:56:22.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:56:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:56:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:56:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:56:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:56:22.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:56:22.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:56:03', tmtdew=23.46, humidity=20.72, cloud=0.0, wind=27.91, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:56:22.586 [DEBUG] [Thread-204606] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:56:22.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:56:22.688 [DEBUG] [Thread-204609] [transport.py] [_log()] starting thread (client mode): 0xa2d68970
2026-02-15T12:56:22.688 [DEBUG] [Thread-204609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:56:22.710 [DEBUG] [Thread-204609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:56:22.711 [INFO] [Thread-204609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:56:22.726 [DEBUG] [Thread-204609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:56:22.726 [DEBUG] [Thread-204609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:56:22.726 [DEBUG] [Thread-204609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] client lang: <none>
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] server lang: <none>
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] kex follows: False
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] Compression: none
2026-02-15T12:56:22.727 [DEBUG] [Thread-204609] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:56:22.793 [DEBUG] [Thread-204609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:56:22.793 [DEBUG] [Thread-204609] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:56:22.794 [DEBUG] [Thread-204609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:56:22.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:56:22.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:56:22.854 [DEBUG] [Thread-204609] [transport.py] [_log()] userauth is OK
2026-02-15T12:56:22.855 [DEBUG] [Thread-204609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:56:22.855 [DEBUG] [Thread-204609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:56:22.855 [DEBUG] [Thread-204609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:56:22.855 [DEBUG] [Thread-204609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:56:22.880 [INFO] [Thread-204609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:56:22.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:56:22.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:56:23.696 [DEBUG] [Thread-204609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:56:23.696 [DEBUG] [Thread-204609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:56:23.744 [DEBUG] [Thread-204609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:56:23.744 [DEBUG] [Thread-204609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:56:23.754 [DEBUG] [Thread-204609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:56:23.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:56:23.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:56:23.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:56:23.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:56:23.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:56:23.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:56:23.792 [DEBUG] [Thread-204609] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:56:27.699 [DEBUG] [Thread-204611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:28.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:28.505 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:42.749 [DEBUG] [Thread-204612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:48.586 [DEBUG] [Thread-204613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:53.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:56:53.815 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:56:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:56:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 56, 38), 25.71, 17.79, 0.0, 25.93, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:56:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:56:38
2026-02-15T12:56:56.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:56:56.237 [DEBUG] [Thread-204614] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-15T12:56:56.238 [DEBUG] [Thread-204614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:56:56.257 [DEBUG] [Thread-204614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:56:56.257 [INFO] [Thread-204614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:56:56.260 [DEBUG] [Thread-204614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] client lang: <none>
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] server lang: <none>
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] kex follows: False
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] Compression: none
2026-02-15T12:56:56.261 [DEBUG] [Thread-204614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:56:56.277 [DEBUG] [Thread-204614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:56:56.278 [DEBUG] [Thread-204614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:56:56.278 [DEBUG] [Thread-204614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:56:56.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:56:56.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:56:56.280 [DEBUG] [Thread-204614] [transport.py] [_log()] userauth is OK
2026-02-15T12:56:56.280 [DEBUG] [Thread-204614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:56:56.280 [DEBUG] [Thread-204614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:56:56.281 [DEBUG] [Thread-204614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:56:56.281 [DEBUG] [Thread-204614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:56:56.304 [INFO] [Thread-204614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:56:56.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:56:56.980 [DEBUG] [Thread-204614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:56:56.981 [DEBUG] [Thread-204614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:56:56.981 [DEBUG] [Thread-204614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:56:57.021 [DEBUG] [Thread-204614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:56:57.022 [DEBUG] [Thread-204614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:56:57.025 [DEBUG] [Thread-204614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:56:57.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:56:57.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:56:57.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:56:57.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:56:57.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:56:57.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:56:57.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:56:57.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:56:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:56:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:56:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:56:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:56:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:56:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:56:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:56:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:56:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:56:57.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:56:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:56:38', tmtdew=25.71, humidity=17.79, cloud=0.0, wind=25.93, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:56:57.052 [DEBUG] [Thread-204614] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:56:57.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:56:57.146 [DEBUG] [Thread-204617] [transport.py] [_log()] starting thread (client mode): 0xa57c1ba0
2026-02-15T12:56:57.147 [DEBUG] [Thread-204617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:56:57.161 [DEBUG] [Thread-204617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:56:57.162 [INFO] [Thread-204617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:56:57.169 [DEBUG] [Thread-204617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] client lang: <none>
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] server lang: <none>
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] kex follows: False
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:56:57.170 [DEBUG] [Thread-204617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:56:57.171 [DEBUG] [Thread-204617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:56:57.171 [DEBUG] [Thread-204617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:56:57.171 [DEBUG] [Thread-204617] [transport.py] [_log()] Compression: none
2026-02-15T12:56:57.171 [DEBUG] [Thread-204617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:56:57.229 [DEBUG] [Thread-204617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:56:57.230 [DEBUG] [Thread-204617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:56:57.230 [DEBUG] [Thread-204617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:56:57.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:56:57.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:56:57.285 [DEBUG] [Thread-204617] [transport.py] [_log()] userauth is OK
2026-02-15T12:56:57.285 [DEBUG] [Thread-204617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:56:57.285 [DEBUG] [Thread-204617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:56:57.286 [DEBUG] [Thread-204617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:56:57.286 [DEBUG] [Thread-204617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:56:57.310 [INFO] [Thread-204617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:56:57.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:56:57.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:56:57.782 [DEBUG] [Thread-204619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:56:58.147 [DEBUG] [Thread-204617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:56:58.147 [DEBUG] [Thread-204617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:56:58.195 [DEBUG] [Thread-204617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:56:58.195 [DEBUG] [Thread-204617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:56:58.204 [DEBUG] [Thread-204617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:56:58.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:56:58.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:56:58.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:56:58.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:56:58.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:56:58.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:56:58.237 [DEBUG] [Thread-204617] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:57:12.838 [DEBUG] [Thread-204620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:57:27.874 [DEBUG] [Thread-204621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:57:28.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:57:28.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:57:28.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:57:28.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:57:28.648 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:57:30.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 57, 13), 23.98, 19.89, 0.0, 25.96, 21.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:57:30.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:57:13
2026-02-15T12:57:30.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:57:30.688 [DEBUG] [Thread-204622] [transport.py] [_log()] starting thread (client mode): 0xa57c14e0
2026-02-15T12:57:30.688 [DEBUG] [Thread-204622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:57:30.708 [DEBUG] [Thread-204622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:57:30.709 [INFO] [Thread-204622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] client lang: <none>
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] server lang: <none>
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] kex follows: False
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] Compression: none
2026-02-15T12:57:30.712 [DEBUG] [Thread-204622] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:57:30.729 [DEBUG] [Thread-204622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:57:30.729 [DEBUG] [Thread-204622] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:57:30.730 [DEBUG] [Thread-204622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:57:30.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:57:30.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:57:30.732 [DEBUG] [Thread-204622] [transport.py] [_log()] userauth is OK
2026-02-15T12:57:30.732 [DEBUG] [Thread-204622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:57:30.732 [DEBUG] [Thread-204622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:57:30.732 [DEBUG] [Thread-204622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:57:30.732 [DEBUG] [Thread-204622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:57:30.752 [INFO] [Thread-204622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:57:30.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:57:31.369 [DEBUG] [Thread-204622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:57:31.369 [DEBUG] [Thread-204622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:57:31.369 [DEBUG] [Thread-204622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:57:31.409 [DEBUG] [Thread-204622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:57:31.410 [DEBUG] [Thread-204622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:57:31.413 [DEBUG] [Thread-204622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:57:31.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:57:31.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:57:31.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:57:31.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:57:31.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:57:31.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:57:31.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:57:31.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:57:31.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:57:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:57:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:57:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:57:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:57:31.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:57:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:57:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:57:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:57:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:57:31.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:57:13', tmtdew=23.98, humidity=19.89, cloud=0.0, wind=25.96, temperature=21.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:57:31.441 [DEBUG] [Thread-204622] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:57:31.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:57:31.548 [DEBUG] [Thread-204625] [transport.py] [_log()] starting thread (client mode): 0xa2d69540
2026-02-15T12:57:31.548 [DEBUG] [Thread-204625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:57:31.563 [DEBUG] [Thread-204625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:57:31.563 [INFO] [Thread-204625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:57:31.572 [DEBUG] [Thread-204625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] client lang: <none>
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] server lang: <none>
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] kex follows: False
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:57:31.573 [DEBUG] [Thread-204625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:57:31.574 [DEBUG] [Thread-204625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:57:31.574 [DEBUG] [Thread-204625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:57:31.574 [DEBUG] [Thread-204625] [transport.py] [_log()] Compression: none
2026-02-15T12:57:31.574 [DEBUG] [Thread-204625] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:57:31.634 [DEBUG] [Thread-204625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:57:31.634 [DEBUG] [Thread-204625] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:57:31.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:57:31.635 [DEBUG] [Thread-204625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:57:31.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:57:31.690 [DEBUG] [Thread-204625] [transport.py] [_log()] userauth is OK
2026-02-15T12:57:31.690 [DEBUG] [Thread-204625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:57:31.690 [DEBUG] [Thread-204625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:57:31.690 [DEBUG] [Thread-204625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:57:31.690 [DEBUG] [Thread-204625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:57:31.710 [INFO] [Thread-204625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:57:31.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:57:31.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:57:32.547 [DEBUG] [Thread-204625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:57:32.547 [DEBUG] [Thread-204625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:57:32.595 [DEBUG] [Thread-204625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:57:32.595 [DEBUG] [Thread-204625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:57:32.604 [DEBUG] [Thread-204625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:57:32.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:57:32.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:57: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') -> 00000000
2026-02-15T12:57:32.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:57:32.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:57:32.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:57:32.640 [DEBUG] [Thread-204625] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:57:42.914 [DEBUG] [Thread-204627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:57:48.630 [DEBUG] [Thread-204628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:57:57.964 [DEBUG] [Thread-204629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:58:02.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:58:02.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:58:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 57, 49), 24.45, 19.53, 0.0, 24.3, 22.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:58:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:57:49
2026-02-15T12:58:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:58:05.605 [DEBUG] [Thread-204630] [transport.py] [_log()] starting thread (client mode): 0xa2db7160
2026-02-15T12:58:05.605 [DEBUG] [Thread-204630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:58:05.625 [DEBUG] [Thread-204630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:58:05.625 [INFO] [Thread-204630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:58:05.627 [DEBUG] [Thread-204630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:58:05.627 [DEBUG] [Thread-204630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] client lang: <none>
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] server lang: <none>
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] kex follows: False
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] Compression: none
2026-02-15T12:58:05.628 [DEBUG] [Thread-204630] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:58:05.641 [DEBUG] [Thread-204630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:58:05.641 [DEBUG] [Thread-204630] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:58:05.642 [DEBUG] [Thread-204630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:58:05.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:58:05.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:58:05.647 [DEBUG] [Thread-204630] [transport.py] [_log()] userauth is OK
2026-02-15T12:58:05.647 [DEBUG] [Thread-204630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:58:05.647 [DEBUG] [Thread-204630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:58:05.647 [DEBUG] [Thread-204630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:58:05.647 [DEBUG] [Thread-204630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:58:05.666 [INFO] [Thread-204630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:58:05.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:58:06.459 [DEBUG] [Thread-204630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:58:06.459 [DEBUG] [Thread-204630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:58:06.459 [DEBUG] [Thread-204630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:58:06.500 [DEBUG] [Thread-204630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:58:06.500 [DEBUG] [Thread-204630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:58:06.504 [DEBUG] [Thread-204630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:58:06.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:58:06.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:58:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:58:06.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:58:06.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:58:06.527 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:58:06.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:58:06.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:58:06.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:57:49', tmtdew=24.45, humidity=19.53, cloud=0.0, wind=24.3, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:58:06.529 [DEBUG] [Thread-204630] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:58:06.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:58:06.612 [DEBUG] [Thread-204633] [transport.py] [_log()] starting thread (client mode): 0xa81d4b80
2026-02-15T12:58:06.612 [DEBUG] [Thread-204633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:58:06.629 [DEBUG] [Thread-204633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:58:06.629 [INFO] [Thread-204633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] client lang: <none>
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] server lang: <none>
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] kex follows: False
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] Compression: none
2026-02-15T12:58:06.637 [DEBUG] [Thread-204633] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:58:06.692 [DEBUG] [Thread-204633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:58:06.692 [DEBUG] [Thread-204633] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:58:06.692 [DEBUG] [Thread-204633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:58:06.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:58:06.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:58:06.750 [DEBUG] [Thread-204633] [transport.py] [_log()] userauth is OK
2026-02-15T12:58:06.750 [DEBUG] [Thread-204633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:58:06.750 [DEBUG] [Thread-204633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:58:06.750 [DEBUG] [Thread-204633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:58:06.750 [DEBUG] [Thread-204633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:58:06.764 [INFO] [Thread-204633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:58:06.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:58:06.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:58:07.645 [DEBUG] [Thread-204633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:58:07.645 [DEBUG] [Thread-204633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:58:07.692 [DEBUG] [Thread-204633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:58:07.693 [DEBUG] [Thread-204633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:58:07.702 [DEBUG] [Thread-204633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:58:07.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:58:07.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:58:07.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:58:07.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:58:07.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:58:07.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:58:07.739 [DEBUG] [Thread-204633] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:58:13.000 [DEBUG] [Thread-204635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:28.063 [DEBUG] [Thread-204636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:28.792 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:28.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:37.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:58:37.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:58:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:58:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 58, 26), 24.04, 19.94, 0.0, 20.54, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:58:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:58:26
2026-02-15T12:58:40.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:58:40.320 [DEBUG] [Thread-204637] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-15T12:58:40.320 [DEBUG] [Thread-204637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:58:40.340 [DEBUG] [Thread-204637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:58:40.340 [INFO] [Thread-204637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:58:40.344 [DEBUG] [Thread-204637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] client lang: <none>
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] server lang: <none>
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] kex follows: False
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] Compression: none
2026-02-15T12:58:40.345 [DEBUG] [Thread-204637] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:58:40.364 [DEBUG] [Thread-204637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:58:40.365 [DEBUG] [Thread-204637] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:58:40.365 [DEBUG] [Thread-204637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:58:40.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:58:40.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:58:40.367 [DEBUG] [Thread-204637] [transport.py] [_log()] userauth is OK
2026-02-15T12:58:40.367 [DEBUG] [Thread-204637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:58:40.367 [DEBUG] [Thread-204637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:58:40.367 [DEBUG] [Thread-204637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:58:40.367 [DEBUG] [Thread-204637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:58:40.392 [INFO] [Thread-204637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:58:40.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:58:41.020 [DEBUG] [Thread-204637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:58:41.020 [DEBUG] [Thread-204637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:58:41.021 [DEBUG] [Thread-204637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:58:41.062 [DEBUG] [Thread-204637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:58:41.062 [DEBUG] [Thread-204637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:58:41.065 [DEBUG] [Thread-204637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:58:41.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:58:41.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:58:41.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:58:41.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:58:41.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:58:41.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:58:41.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:58:41.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:58:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:58:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:58:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:58:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:58:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:58:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:58:41.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:58:41.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:58:41.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:58:41.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:58:41.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:58:26', tmtdew=24.04, humidity=19.94, cloud=0.0, wind=20.54, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:58:41.092 [DEBUG] [Thread-204637] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:58:41.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:58:41.187 [DEBUG] [Thread-204640] [transport.py] [_log()] starting thread (client mode): 0xa2d695a0
2026-02-15T12:58:41.187 [DEBUG] [Thread-204640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:58:41.202 [DEBUG] [Thread-204640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:58:41.202 [INFO] [Thread-204640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] client lang: <none>
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] server lang: <none>
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] kex follows: False
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:58:41.210 [DEBUG] [Thread-204640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:58:41.211 [DEBUG] [Thread-204640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:58:41.211 [DEBUG] [Thread-204640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:58:41.211 [DEBUG] [Thread-204640] [transport.py] [_log()] Compression: none
2026-02-15T12:58:41.211 [DEBUG] [Thread-204640] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:58:41.270 [DEBUG] [Thread-204640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:58:41.271 [DEBUG] [Thread-204640] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:58:41.271 [DEBUG] [Thread-204640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:58:41.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:58:41.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:58:41.327 [DEBUG] [Thread-204640] [transport.py] [_log()] userauth is OK
2026-02-15T12:58:41.327 [DEBUG] [Thread-204640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:58:41.327 [DEBUG] [Thread-204640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:58:41.327 [DEBUG] [Thread-204640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:58:41.327 [DEBUG] [Thread-204640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:58:41.354 [INFO] [Thread-204640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:58:41.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:58:41.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:58:42.180 [DEBUG] [Thread-204640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:58:42.180 [DEBUG] [Thread-204640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:58:42.228 [DEBUG] [Thread-204640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:58:42.229 [DEBUG] [Thread-204640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:58:42.238 [DEBUG] [Thread-204640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:58:42.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:58:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:58:42.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:58:42.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:58:42.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:58:42.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:58:42.274 [DEBUG] [Thread-204640] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:58:43.100 [DEBUG] [Thread-204642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:48.669 [DEBUG] [Thread-204643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:58:58.157 [DEBUG] [Thread-204644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:12.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:59:12.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:59:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:59:13.187 [DEBUG] [Thread-204645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 59, 1), 23.49, 20.69, 0.0, 24.6, 21.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:59:14.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:59:01
2026-02-15T12:59:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:59:14.754 [DEBUG] [Thread-204646] [transport.py] [_log()] starting thread (client mode): 0xa2d6a530
2026-02-15T12:59:14.754 [DEBUG] [Thread-204646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:59:14.774 [DEBUG] [Thread-204646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:59:14.775 [INFO] [Thread-204646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] client lang: <none>
2026-02-15T12:59:14.778 [DEBUG] [Thread-204646] [transport.py] [_log()] server lang: <none>
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] kex follows: False
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] Compression: none
2026-02-15T12:59:14.779 [DEBUG] [Thread-204646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:59:14.798 [DEBUG] [Thread-204646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:59:14.799 [DEBUG] [Thread-204646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:59:14.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:59:14.801 [DEBUG] [Thread-204646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:59:14.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:59:14.803 [DEBUG] [Thread-204646] [transport.py] [_log()] userauth is OK
2026-02-15T12:59:14.803 [DEBUG] [Thread-204646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:59:14.804 [DEBUG] [Thread-204646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:59:14.804 [DEBUG] [Thread-204646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:59:14.804 [DEBUG] [Thread-204646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:59:14.824 [INFO] [Thread-204646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:59:14.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:59:15.553 [DEBUG] [Thread-204646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:59:15.554 [DEBUG] [Thread-204646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:59:15.554 [DEBUG] [Thread-204646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:59:15.594 [DEBUG] [Thread-204646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:59:15.595 [DEBUG] [Thread-204646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:59:15.598 [DEBUG] [Thread-204646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:59:15.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:59:15.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:59:15.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:59:15.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:59:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:59:15.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:59:15.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:59:15.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:59:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:59:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:59:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:59:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:59:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:59:15.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:59:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:59:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:59:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:59:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:59:15.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:59:01', tmtdew=23.49, humidity=20.69, cloud=0.0, wind=24.6, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:59:15.624 [DEBUG] [Thread-204646] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:59:15.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:59:15.717 [DEBUG] [Thread-204649] [transport.py] [_log()] starting thread (client mode): 0xa57c2680
2026-02-15T12:59:15.717 [DEBUG] [Thread-204649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:59:15.731 [DEBUG] [Thread-204649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:59:15.732 [INFO] [Thread-204649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:59:15.739 [DEBUG] [Thread-204649] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:59:15.739 [DEBUG] [Thread-204649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] client lang: <none>
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] server lang: <none>
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] kex follows: False
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] Compression: none
2026-02-15T12:59:15.740 [DEBUG] [Thread-204649] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:59:15.799 [DEBUG] [Thread-204649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:59:15.799 [DEBUG] [Thread-204649] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:59:15.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:59:15.800 [DEBUG] [Thread-204649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:59:15.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:59:15.855 [DEBUG] [Thread-204649] [transport.py] [_log()] userauth is OK
2026-02-15T12:59:15.855 [DEBUG] [Thread-204649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:59:15.855 [DEBUG] [Thread-204649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:59:15.855 [DEBUG] [Thread-204649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:59:15.856 [DEBUG] [Thread-204649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:59:15.874 [INFO] [Thread-204649] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:59:15.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:59:15.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:59:16.699 [DEBUG] [Thread-204649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:59:16.700 [DEBUG] [Thread-204649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:59:16.747 [DEBUG] [Thread-204649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:59:16.748 [DEBUG] [Thread-204649] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:59:16.757 [DEBUG] [Thread-204649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:59:16.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:59: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')
2026-02-15T12:59:16.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:59:16.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:59:16.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:59:16.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:59:16.794 [DEBUG] [Thread-204649] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:59:28.225 [DEBUG] [Thread-204651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:28.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:28.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:43.280 [DEBUG] [Thread-204652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:46.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T12:59:46.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T12:59:46.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T12:59:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 12, 59, 37), 25.02, 18.68, 0.0, 25.58, 22.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T12:59:48.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 12:59:37
2026-02-15T12:59:48.702 [DEBUG] [Thread-204653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T12:59:49.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T12:59:49.170 [DEBUG] [Thread-204654] [transport.py] [_log()] starting thread (client mode): 0xa57c1ba0
2026-02-15T12:59:49.170 [DEBUG] [Thread-204654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:59:49.190 [DEBUG] [Thread-204654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T12:59:49.190 [INFO] [Thread-204654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] client lang: <none>
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] server lang: <none>
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] kex follows: False
2026-02-15T12:59:49.193 [DEBUG] [Thread-204654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:59:49.194 [DEBUG] [Thread-204654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:59:49.194 [DEBUG] [Thread-204654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:59:49.194 [DEBUG] [Thread-204654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:59:49.194 [DEBUG] [Thread-204654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:59:49.194 [DEBUG] [Thread-204654] [transport.py] [_log()] Compression: none
2026-02-15T12:59:49.194 [DEBUG] [Thread-204654] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:59:49.211 [DEBUG] [Thread-204654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:59:49.211 [DEBUG] [Thread-204654] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:59:49.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T12:59:49.213 [DEBUG] [Thread-204654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T12:59:49.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:59:49.215 [DEBUG] [Thread-204654] [transport.py] [_log()] userauth is OK
2026-02-15T12:59:49.215 [DEBUG] [Thread-204654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:59:49.215 [DEBUG] [Thread-204654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:59:49.215 [DEBUG] [Thread-204654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T12:59:49.215 [DEBUG] [Thread-204654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:59:49.252 [INFO] [Thread-204654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:59:49.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:59:49.920 [DEBUG] [Thread-204654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:59:49.920 [DEBUG] [Thread-204654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:59:49.920 [DEBUG] [Thread-204654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T12:59:49.961 [DEBUG] [Thread-204654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:59:49.961 [DEBUG] [Thread-204654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:59:49.963 [DEBUG] [Thread-204654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:59:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:59:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T12:59:49.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T12:59:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T12:59:49.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:59:49.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T12:59:49.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:59:49.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:59:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T12:59:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T12:59:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T12:59:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T12:59:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T12:59:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T12:59:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T12:59:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T12:59:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T12:59:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T12:59:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T12:59:37', tmtdew=25.02, humidity=18.68, cloud=0.0, wind=25.58, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T12:59:49.986 [DEBUG] [Thread-204654] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:59:50.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T12:59:50.076 [DEBUG] [Thread-204657] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-15T12:59:50.076 [DEBUG] [Thread-204657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T12:59:50.096 [DEBUG] [Thread-204657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T12:59:50.097 [INFO] [Thread-204657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T12:59:50.111 [DEBUG] [Thread-204657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] client lang: <none>
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] server lang: <none>
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] kex follows: False
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T12:59:50.112 [DEBUG] [Thread-204657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T12:59:50.113 [DEBUG] [Thread-204657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T12:59:50.113 [DEBUG] [Thread-204657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T12:59:50.113 [DEBUG] [Thread-204657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T12:59:50.113 [DEBUG] [Thread-204657] [transport.py] [_log()] Compression: none
2026-02-15T12:59:50.113 [DEBUG] [Thread-204657] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T12:59:50.176 [DEBUG] [Thread-204657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T12:59:50.177 [DEBUG] [Thread-204657] [transport.py] [_log()] Switch to new keys ...
2026-02-15T12:59:50.178 [DEBUG] [Thread-204657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T12:59:50.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T12:59:50.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T12:59:50.247 [DEBUG] [Thread-204657] [transport.py] [_log()] userauth is OK
2026-02-15T12:59:50.247 [DEBUG] [Thread-204657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T12:59:50.247 [DEBUG] [Thread-204657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T12:59:50.247 [DEBUG] [Thread-204657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T12:59:50.247 [DEBUG] [Thread-204657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T12:59:50.269 [INFO] [Thread-204657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T12:59:50.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T12:59:50.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T12:59:51.134 [DEBUG] [Thread-204657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T12:59:51.135 [DEBUG] [Thread-204657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T12:59:51.189 [DEBUG] [Thread-204657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T12:59:51.189 [DEBUG] [Thread-204657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T12:59:51.204 [DEBUG] [Thread-204657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T12:59:51.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T12:59:51.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T12:59:51.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T12:59:51.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T12:59:51.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T12:59:51.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T12:59:51.266 [DEBUG] [Thread-204657] [transport.py] [_log()] EOF in transport thread
2026-02-15T12:59:58.316 [DEBUG] [Thread-204659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:13.375 [DEBUG] [Thread-204660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:21.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:00:21.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:00:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:00:23.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 0, 12), 23.49, 20.54, 0.0, 22.23, 21.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:00:23.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:00:12
2026-02-15T13:00:23.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:00:23.892 [DEBUG] [Thread-204661] [transport.py] [_log()] starting thread (client mode): 0xa5742bf0
2026-02-15T13:00:23.893 [DEBUG] [Thread-204661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:00:23.914 [DEBUG] [Thread-204661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:00:23.914 [INFO] [Thread-204661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:00:23.917 [DEBUG] [Thread-204661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] client lang: <none>
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] server lang: <none>
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] kex follows: False
2026-02-15T13:00:23.918 [DEBUG] [Thread-204661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:00:23.919 [DEBUG] [Thread-204661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:00:23.919 [DEBUG] [Thread-204661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:00:23.919 [DEBUG] [Thread-204661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:00:23.919 [DEBUG] [Thread-204661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:00:23.919 [DEBUG] [Thread-204661] [transport.py] [_log()] Compression: none
2026-02-15T13:00:23.919 [DEBUG] [Thread-204661] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:00:23.938 [DEBUG] [Thread-204661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:00:23.938 [DEBUG] [Thread-204661] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:00:23.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:00:23.940 [DEBUG] [Thread-204661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:00:23.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:00:23.941 [DEBUG] [Thread-204661] [transport.py] [_log()] userauth is OK
2026-02-15T13:00:23.942 [DEBUG] [Thread-204661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:00:23.942 [DEBUG] [Thread-204661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:00:23.942 [DEBUG] [Thread-204661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:00:23.942 [DEBUG] [Thread-204661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:00:23.966 [INFO] [Thread-204661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:00:23.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:00:24.745 [DEBUG] [Thread-204661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:00:24.746 [DEBUG] [Thread-204661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:00:24.746 [DEBUG] [Thread-204661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:00:24.786 [DEBUG] [Thread-204661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:00:24.786 [DEBUG] [Thread-204661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:00:24.789 [DEBUG] [Thread-204661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:00:24.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:00:24.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:00:24.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:00:24.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:00:24.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:00:24.811 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:00:24.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:00:24.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:00:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:00:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.454611 -999.00  +21.00  15.29     26   +1.20 1 1 1 1 1   888    0 18.20 -93.86 ----- 15.3 15.3 165.2 24.4 28.5 -28.7 27.7 -28.1 27.8 -26.5 28.7 -29.7
2026-02-15T13:00:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:00:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:00:24.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.454611
2026-02-15T13:00:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:00:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:00:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:00:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:00:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:00:24.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:00:12', tmtdew=23.49, humidity=20.54, cloud=0.0, wind=22.23, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T10:54:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:00:24.814 [DEBUG] [Thread-204661] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:00:24.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:00:24.907 [DEBUG] [Thread-204664] [transport.py] [_log()] starting thread (client mode): 0xa2db7d60
2026-02-15T13:00:24.907 [DEBUG] [Thread-204664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:00:24.921 [DEBUG] [Thread-204664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:00:24.921 [INFO] [Thread-204664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] client lang: <none>
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] server lang: <none>
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] kex follows: False
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:00:24.929 [DEBUG] [Thread-204664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:00:24.930 [DEBUG] [Thread-204664] [transport.py] [_log()] Compression: none
2026-02-15T13:00:24.930 [DEBUG] [Thread-204664] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:00:24.988 [DEBUG] [Thread-204664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:00:24.988 [DEBUG] [Thread-204664] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:00:24.989 [DEBUG] [Thread-204664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:00:24.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:00:24.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:00:25.047 [DEBUG] [Thread-204664] [transport.py] [_log()] userauth is OK
2026-02-15T13:00:25.047 [DEBUG] [Thread-204664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:00:25.047 [DEBUG] [Thread-204664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:00:25.047 [DEBUG] [Thread-204664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:00:25.047 [DEBUG] [Thread-204664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:00:25.068 [INFO] [Thread-204664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:00:25.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:00:25.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:00:25.873 [DEBUG] [Thread-204664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:00:25.874 [DEBUG] [Thread-204664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:00:25.922 [DEBUG] [Thread-204664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:00:25.923 [DEBUG] [Thread-204664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:00:25.937 [DEBUG] [Thread-204664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:00:25.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:00:25.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:00:25.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:00:25.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:00:25.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:00:25.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:00:25.974 [DEBUG] [Thread-204664] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:00:28.411 [DEBUG] [Thread-204666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:29.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:29.076 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:43.474 [DEBUG] [Thread-204667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:48.749 [DEBUG] [Thread-204668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:55.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:00:55.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:00:55.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:00:57.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 0, 47), 24.45, 19.43, 0.0, 28.02, 22.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:00:57.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:00:47
2026-02-15T13:00:58.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:00:58.393 [DEBUG] [Thread-204669] [transport.py] [_log()] starting thread (client mode): 0xa2d1aa40
2026-02-15T13:00:58.393 [DEBUG] [Thread-204669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:00:58.413 [DEBUG] [Thread-204669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:00:58.413 [INFO] [Thread-204669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] client lang: <none>
2026-02-15T13:00:58.415 [DEBUG] [Thread-204669] [transport.py] [_log()] server lang: <none>
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] kex follows: False
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] Compression: none
2026-02-15T13:00:58.416 [DEBUG] [Thread-204669] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:00:58.438 [DEBUG] [Thread-204669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:00:58.439 [DEBUG] [Thread-204669] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:00:58.439 [DEBUG] [Thread-204669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:00:58.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:00:58.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:00:58.442 [DEBUG] [Thread-204669] [transport.py] [_log()] userauth is OK
2026-02-15T13:00:58.442 [DEBUG] [Thread-204669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:00:58.442 [DEBUG] [Thread-204669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:00:58.443 [DEBUG] [Thread-204669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:00:58.443 [DEBUG] [Thread-204669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:00:58.461 [INFO] [Thread-204669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:00:58.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:00:58.513 [DEBUG] [Thread-204671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:00:59.052 [DEBUG] [Thread-204669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:00:59.052 [DEBUG] [Thread-204669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:00:59.053 [DEBUG] [Thread-204669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:00:59.093 [DEBUG] [Thread-204669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:00:59.093 [DEBUG] [Thread-204669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:00:59.097 [DEBUG] [Thread-204669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:00:59.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:00:59.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:00:59.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:00:59.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:00:59.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:00:59.120 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:00:59.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:00:59.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:00:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:00:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.458778 -999.00  +21.90  21.69     24   +0.70 1 1 1 1 1   888    0 16.74 -147.20 NA 21.7 21.7 127.4 29.4 28.8 -28.3 28.0 -27.1 28.1 -25.7 29.1 -29.2
2026-02-15T13:00:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:00:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:00:59.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.458778
2026-02-15T13:00:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:00:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:00:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:00:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:00:59.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:00:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:00:47', tmtdew=24.45, humidity=19.43, cloud=0.0, wind=28.02, temperature=22.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:00:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:00:59.123 [DEBUG] [Thread-204669] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:00:59.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:00:59.219 [DEBUG] [Thread-204673] [transport.py] [_log()] starting thread (client mode): 0xa2d1b6d0
2026-02-15T13:00:59.219 [DEBUG] [Thread-204673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:00:59.233 [DEBUG] [Thread-204673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:00:59.233 [INFO] [Thread-204673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:00:59.241 [DEBUG] [Thread-204673] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:00:59.241 [DEBUG] [Thread-204673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:00:59.241 [DEBUG] [Thread-204673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] client lang: <none>
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] server lang: <none>
2026-02-15T13:00:59.242 [DEBUG] [Thread-204673] [transport.py] [_log()] kex follows: False
2026-02-15T13:00:59.243 [DEBUG] [Thread-204673] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:00:59.243 [DEBUG] [Thread-204673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:00:59.243 [DEBUG] [Thread-204673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:00:59.243 [DEBUG] [Thread-204673] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:00:59.243 [DEBUG] [Thread-204673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:00:59.244 [DEBUG] [Thread-204673] [transport.py] [_log()] Compression: none
2026-02-15T13:00:59.244 [DEBUG] [Thread-204673] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:00:59.300 [DEBUG] [Thread-204673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:00:59.301 [DEBUG] [Thread-204673] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:00:59.301 [DEBUG] [Thread-204673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:00:59.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:00:59.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:00:59.359 [DEBUG] [Thread-204673] [transport.py] [_log()] userauth is OK
2026-02-15T13:00:59.359 [DEBUG] [Thread-204673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:00:59.359 [DEBUG] [Thread-204673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:00:59.359 [DEBUG] [Thread-204673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:00:59.360 [DEBUG] [Thread-204673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:00:59.379 [INFO] [Thread-204673] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:00:59.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:00:59.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:01:00.188 [DEBUG] [Thread-204673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:01:00.188 [DEBUG] [Thread-204673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:01:00.237 [DEBUG] [Thread-204673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:01:00.238 [DEBUG] [Thread-204673] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:01:00.249 [DEBUG] [Thread-204673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:01:00.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:01:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:01:00.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:01:00.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:01:00.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:01:00.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:01:00.291 [DEBUG] [Thread-204673] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:01:13.554 [DEBUG] [Thread-204675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:01:28.606 [DEBUG] [Thread-204676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:01:29.224 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:01:29.225 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:01:30.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:01:30.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:01:30.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:01:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 1, 22), 24.37, 19.53, 0.0, 28.46, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:01:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:01:22
2026-02-15T13:01:32.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:01:32.764 [DEBUG] [Thread-204677] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae30
2026-02-15T13:01:32.764 [DEBUG] [Thread-204677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:01:32.785 [DEBUG] [Thread-204677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:01:32.785 [INFO] [Thread-204677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] client lang: <none>
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] server lang: <none>
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] kex follows: False
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:01:32.786 [DEBUG] [Thread-204677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:01:32.787 [DEBUG] [Thread-204677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:01:32.787 [DEBUG] [Thread-204677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:01:32.787 [DEBUG] [Thread-204677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:01:32.787 [DEBUG] [Thread-204677] [transport.py] [_log()] Compression: none
2026-02-15T13:01:32.787 [DEBUG] [Thread-204677] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:01:32.796 [DEBUG] [Thread-204677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:01:32.797 [DEBUG] [Thread-204677] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:01:32.798 [DEBUG] [Thread-204677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:01:32.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:01:32.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:01:32.800 [DEBUG] [Thread-204677] [transport.py] [_log()] userauth is OK
2026-02-15T13:01:32.801 [DEBUG] [Thread-204677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:01:32.801 [DEBUG] [Thread-204677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:01:32.801 [DEBUG] [Thread-204677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:01:32.801 [DEBUG] [Thread-204677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:01:32.815 [INFO] [Thread-204677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:01:32.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:01:33.392 [DEBUG] [Thread-204677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:01:33.392 [DEBUG] [Thread-204677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:01:33.393 [DEBUG] [Thread-204677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:01:33.433 [DEBUG] [Thread-204677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:01:33.434 [DEBUG] [Thread-204677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:01:33.437 [DEBUG] [Thread-204677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:01:33.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:01:33.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:01:33.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:01:33.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:01:33.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:01:33.473 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:01:33.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:01:33.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:01:33.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:01:33.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.459125 -999.00  +21.90  28.95     24   +0.60 1 1 1 1 1   888    0 16.55 -148.29 ----- 28.9 28.9 129.6 34.6 28.8 -28.9 28.1 -27.9 28.1 -27.1 28.9 -28.5
2026-02-15T13:01:33.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:01:33.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:01:33.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.459125
2026-02-15T13:01:33.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:01:33.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:01:33.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:01:33.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:01:33.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:01:33.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:01:22', tmtdew=24.37, humidity=19.53, cloud=0.0, wind=28.46, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:01:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:01:33.477 [DEBUG] [Thread-204677] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:01:33.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:01:33.573 [DEBUG] [Thread-204680] [transport.py] [_log()] starting thread (client mode): 0xa57c1810
2026-02-15T13:01:33.573 [DEBUG] [Thread-204680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:01:33.588 [DEBUG] [Thread-204680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:01:33.588 [INFO] [Thread-204680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:01:33.595 [DEBUG] [Thread-204680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:01:33.595 [DEBUG] [Thread-204680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] client lang: <none>
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] server lang: <none>
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] kex follows: False
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] Compression: none
2026-02-15T13:01:33.596 [DEBUG] [Thread-204680] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:01:33.656 [DEBUG] [Thread-204680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:01:33.656 [DEBUG] [Thread-204680] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:01:33.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:01:33.658 [DEBUG] [Thread-204680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:01:33.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:01:33.712 [DEBUG] [Thread-204680] [transport.py] [_log()] userauth is OK
2026-02-15T13:01:33.712 [DEBUG] [Thread-204680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:01:33.712 [DEBUG] [Thread-204680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:01:33.712 [DEBUG] [Thread-204680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:01:33.712 [DEBUG] [Thread-204680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:01:33.736 [INFO] [Thread-204680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:01:33.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:01:33.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:01:34.528 [DEBUG] [Thread-204680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:01:34.528 [DEBUG] [Thread-204680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:01:34.577 [DEBUG] [Thread-204680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:01:34.577 [DEBUG] [Thread-204680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:01:34.586 [DEBUG] [Thread-204680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:01:34.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:01:34.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:01:34.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:01:34.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:01:34.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:01:34.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:01:34.622 [DEBUG] [Thread-204680] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:01:43.647 [DEBUG] [Thread-204682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:01:48.779 [DEBUG] [Thread-204683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:01:58.696 [DEBUG] [Thread-204684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:04.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:02:04.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:02: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-02-15T13:02:06.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 1, 57), 24.9, 18.64, 0.0, 27.42, 22.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:02:06.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:01:57
2026-02-15T13:02:06.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:02:06.999 [DEBUG] [Thread-204685] [transport.py] [_log()] starting thread (client mode): 0xa57c0fd0
2026-02-15T13:02:06.999 [DEBUG] [Thread-204685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:02:07.019 [DEBUG] [Thread-204685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:02:07.019 [INFO] [Thread-204685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] client lang: <none>
2026-02-15T13:02:07.022 [DEBUG] [Thread-204685] [transport.py] [_log()] server lang: <none>
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] kex follows: False
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] Compression: none
2026-02-15T13:02:07.023 [DEBUG] [Thread-204685] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:02:07.047 [DEBUG] [Thread-204685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:02:07.048 [DEBUG] [Thread-204685] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:02:07.049 [DEBUG] [Thread-204685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:02:07.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:02:07.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:02:07.093 [DEBUG] [Thread-204685] [transport.py] [_log()] userauth is OK
2026-02-15T13:02:07.093 [DEBUG] [Thread-204685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:02:07.093 [DEBUG] [Thread-204685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:02:07.093 [DEBUG] [Thread-204685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:02:07.093 [DEBUG] [Thread-204685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:02:07.129 [INFO] [Thread-204685] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:02:07.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:02:07.782 [DEBUG] [Thread-204685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:02:07.782 [DEBUG] [Thread-204685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:02:07.782 [DEBUG] [Thread-204685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:02:07.822 [DEBUG] [Thread-204685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:02:07.823 [DEBUG] [Thread-204685] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:02:07.826 [DEBUG] [Thread-204685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:02:07.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:02:07.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:02:07.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:02:07.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:02:07.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:02:07.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:02:07.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:02:07.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:02:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:02:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.459473 -999.00  +21.70  26.14     24   +0.80 1 1 1 1 1   888    0 16.79 -143.56 ----- 26.1 26.1 132.0 33.7 28.6 -28.2 28.0 -27.8 28.1 -27.3 29.0 -27.9
2026-02-15T13:02:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:02:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:02:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.459473
2026-02-15T13:02:07.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:02:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:02:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:02:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:02:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:02:07.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:01:57', tmtdew=24.9, humidity=18.64, cloud=0.0, wind=27.42, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:01:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:02:07.851 [DEBUG] [Thread-204685] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:02:07.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:02:07.945 [DEBUG] [Thread-204688] [transport.py] [_log()] starting thread (client mode): 0xa57c10c0
2026-02-15T13:02:07.945 [DEBUG] [Thread-204688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:02:07.961 [DEBUG] [Thread-204688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:02:07.962 [INFO] [Thread-204688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:02:07.969 [DEBUG] [Thread-204688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] client lang: <none>
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] server lang: <none>
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] kex follows: False
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] Compression: none
2026-02-15T13:02:07.970 [DEBUG] [Thread-204688] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:02:08.028 [DEBUG] [Thread-204688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:02:08.028 [DEBUG] [Thread-204688] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:02:08.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:02:08.029 [DEBUG] [Thread-204688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:02:08.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:02:08.090 [DEBUG] [Thread-204688] [transport.py] [_log()] userauth is OK
2026-02-15T13:02:08.090 [DEBUG] [Thread-204688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:02:08.090 [DEBUG] [Thread-204688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:02:08.090 [DEBUG] [Thread-204688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:02:08.090 [DEBUG] [Thread-204688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:02:08.114 [INFO] [Thread-204688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:02:08.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:02:08.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:02:08.920 [DEBUG] [Thread-204688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:02:08.920 [DEBUG] [Thread-204688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:02:08.968 [DEBUG] [Thread-204688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:02:08.969 [DEBUG] [Thread-204688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:02:08.978 [DEBUG] [Thread-204688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:02:08.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:02:08.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:02:08.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:02:09.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:02:09.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:02:09.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:02:09.015 [DEBUG] [Thread-204688] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:02:13.734 [DEBUG] [Thread-204690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:28.788 [DEBUG] [Thread-204691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:29.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:29.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:39.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:02:39.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:02:39.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:02:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 1, 57), 24.9, 18.64, 0.0, 27.42, 22.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:02:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:01:57
2026-02-15T13:02:41.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:02:41.671 [DEBUG] [Thread-204692] [transport.py] [_log()] starting thread (client mode): 0xa57c2f80
2026-02-15T13:02:41.671 [DEBUG] [Thread-204692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:02:41.691 [DEBUG] [Thread-204692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:02:41.691 [INFO] [Thread-204692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] client lang: <none>
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] server lang: <none>
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] kex follows: False
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:02:41.694 [DEBUG] [Thread-204692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:02:41.695 [DEBUG] [Thread-204692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:02:41.695 [DEBUG] [Thread-204692] [transport.py] [_log()] Compression: none
2026-02-15T13:02:41.695 [DEBUG] [Thread-204692] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:02:41.714 [DEBUG] [Thread-204692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:02:41.714 [DEBUG] [Thread-204692] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:02:41.715 [DEBUG] [Thread-204692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:02:41.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:02:41.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:02:41.717 [DEBUG] [Thread-204692] [transport.py] [_log()] userauth is OK
2026-02-15T13:02:41.717 [DEBUG] [Thread-204692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:02:41.717 [DEBUG] [Thread-204692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:02:41.717 [DEBUG] [Thread-204692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:02:41.717 [DEBUG] [Thread-204692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:02:41.742 [INFO] [Thread-204692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:02:41.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:02:42.397 [DEBUG] [Thread-204692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:02:42.398 [DEBUG] [Thread-204692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:02:42.398 [DEBUG] [Thread-204692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:02:42.438 [DEBUG] [Thread-204692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:02:42.438 [DEBUG] [Thread-204692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:02:42.442 [DEBUG] [Thread-204692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:02:42.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:02:42.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:02:42.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:02:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:02:42.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:02:42.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:02:42.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:02:42.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:02:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:02:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.459820 -999.00  +21.20  23.62     25   +0.80 1 1 1 1 1   888    0 16.79 -140.02 ----- 23.6 23.6 147.0 28.3 28.4 -28.5 28.0 -27.8 28.1 -26.8 28.9 -27.4
2026-02-15T13:02:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:02:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:02:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.459820
2026-02-15T13:02:42.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:02:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:02:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:02:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:02:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:02:42.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:01:57', tmtdew=24.9, humidity=18.64, cloud=0.0, wind=27.42, temperature=22.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:02:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:02:42.470 [DEBUG] [Thread-204692] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:02:42.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:02:42.579 [DEBUG] [Thread-204695] [transport.py] [_log()] starting thread (client mode): 0xa2d00df0
2026-02-15T13:02:42.580 [DEBUG] [Thread-204695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:02:42.594 [DEBUG] [Thread-204695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:02:42.594 [INFO] [Thread-204695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:02:42.602 [DEBUG] [Thread-204695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:02:42.602 [DEBUG] [Thread-204695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] client lang: <none>
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] server lang: <none>
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] kex follows: False
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] Compression: none
2026-02-15T13:02:42.603 [DEBUG] [Thread-204695] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:02:42.665 [DEBUG] [Thread-204695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:02:42.666 [DEBUG] [Thread-204695] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:02:42.666 [DEBUG] [Thread-204695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:02:42.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:02:42.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:02:42.724 [DEBUG] [Thread-204695] [transport.py] [_log()] userauth is OK
2026-02-15T13:02:42.724 [DEBUG] [Thread-204695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:02:42.725 [DEBUG] [Thread-204695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:02:42.725 [DEBUG] [Thread-204695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:02:42.725 [DEBUG] [Thread-204695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:02:42.744 [INFO] [Thread-204695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:02:42.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:02:42.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:02:43.564 [DEBUG] [Thread-204695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:02:43.565 [DEBUG] [Thread-204695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:02:43.612 [DEBUG] [Thread-204695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:02:43.612 [DEBUG] [Thread-204695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:02:43.621 [DEBUG] [Thread-204695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:02:43.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:02: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')
2026-02-15T13:02:43.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:02:43.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:02:43.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:02:43.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:02:43.658 [DEBUG] [Thread-204695] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:02:43.826 [DEBUG] [Thread-204697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:48.813 [DEBUG] [Thread-204698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:02:58.873 [DEBUG] [Thread-204699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:13.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:03:13.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:03:13.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:03:13.905 [DEBUG] [Thread-204700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:16.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 2, 32), 24.87, 18.88, 0.0, 26.75, 22.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:03:16.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:02:32
2026-02-15T13:03:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:03:16.696 [DEBUG] [Thread-204701] [transport.py] [_log()] starting thread (client mode): 0xa2d013c0
2026-02-15T13:03:16.696 [DEBUG] [Thread-204701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:03:16.718 [DEBUG] [Thread-204701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:03:16.718 [INFO] [Thread-204701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] client lang: <none>
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] server lang: <none>
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] kex follows: False
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] Compression: none
2026-02-15T13:03:16.722 [DEBUG] [Thread-204701] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:03:16.740 [DEBUG] [Thread-204701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:03:16.741 [DEBUG] [Thread-204701] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:03:16.742 [DEBUG] [Thread-204701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:03:16.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:03:16.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:03:16.744 [DEBUG] [Thread-204701] [transport.py] [_log()] userauth is OK
2026-02-15T13:03:16.744 [DEBUG] [Thread-204701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:03:16.744 [DEBUG] [Thread-204701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:03:16.745 [DEBUG] [Thread-204701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:03:16.745 [DEBUG] [Thread-204701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:03:16.769 [INFO] [Thread-204701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:03:16.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:03:17.417 [DEBUG] [Thread-204701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:03:17.418 [DEBUG] [Thread-204701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:03:17.418 [DEBUG] [Thread-204701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:03:17.459 [DEBUG] [Thread-204701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:03:17.459 [DEBUG] [Thread-204701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:03:17.463 [DEBUG] [Thread-204701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:03:17.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:03:17.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:03:17.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:03:17.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:03:17.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:03:17.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:03:17.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:03:17.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:03:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:03:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.460167 -999.00  +21.50  23.15     26   +1.30 1 1 1 1 1   888    0 16.82 -141.03 ----- 23.1 23.1 139.2 26.9 28.6 -28.3 28.1 -27.4 28.1 -27.1 29.0 -28.6
2026-02-15T13:03:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:03:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:03:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.460167
2026-02-15T13:03:17.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:03:17.487 [DEBUG] [Thread-204701] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:03:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:03:17.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:03:17.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:03:17.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:03:17.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:02:32', tmtdew=24.87, humidity=18.88, cloud=0.0, wind=26.75, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:02:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:03:17.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:03:17.585 [DEBUG] [Thread-204704] [transport.py] [_log()] starting thread (client mode): 0xa57c21a0
2026-02-15T13:03:17.586 [DEBUG] [Thread-204704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:03:17.601 [DEBUG] [Thread-204704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:03:17.601 [INFO] [Thread-204704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:03:17.608 [DEBUG] [Thread-204704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:03:17.609 [DEBUG] [Thread-204704] [transport.py] [_log()] client lang: <none>
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] server lang: <none>
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] kex follows: False
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:03:17.610 [DEBUG] [Thread-204704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:03:17.611 [DEBUG] [Thread-204704] [transport.py] [_log()] Compression: none
2026-02-15T13:03:17.611 [DEBUG] [Thread-204704] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:03:17.673 [DEBUG] [Thread-204704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:03:17.674 [DEBUG] [Thread-204704] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:03:17.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:03:17.676 [DEBUG] [Thread-204704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:03:17.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:03:17.732 [DEBUG] [Thread-204704] [transport.py] [_log()] userauth is OK
2026-02-15T13:03:17.732 [DEBUG] [Thread-204704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:03:17.733 [DEBUG] [Thread-204704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:03:17.733 [DEBUG] [Thread-204704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:03:17.733 [DEBUG] [Thread-204704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:03:17.761 [INFO] [Thread-204704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:03:17.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:03:17.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:03:18.593 [DEBUG] [Thread-204704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:03:18.593 [DEBUG] [Thread-204704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:03:18.641 [DEBUG] [Thread-204704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:03:18.642 [DEBUG] [Thread-204704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:03:18.654 [DEBUG] [Thread-204704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:03:18.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:03:18.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:03:18.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:03:18.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:03:18.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:03:18.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:03:18.691 [DEBUG] [Thread-204704] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:03:28.939 [DEBUG] [Thread-204706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:29.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:29.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:44.000 [DEBUG] [Thread-204707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:48.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:03:48.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:03:48.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:03:48.846 [DEBUG] [Thread-204708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:03:51.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 3, 9), 24.32, 19.17, 0.0, 18.76, 21.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:03:51.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:03:09
2026-02-15T13:03:51.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:03:51.498 [DEBUG] [Thread-204709] [transport.py] [_log()] starting thread (client mode): 0xa57c2950
2026-02-15T13:03:51.499 [DEBUG] [Thread-204709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:03:51.518 [DEBUG] [Thread-204709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:03:51.518 [INFO] [Thread-204709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] client lang: <none>
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] server lang: <none>
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] kex follows: False
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] Compression: none
2026-02-15T13:03:51.521 [DEBUG] [Thread-204709] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:03:51.535 [DEBUG] [Thread-204709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:03:51.536 [DEBUG] [Thread-204709] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:03:51.536 [DEBUG] [Thread-204709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:03:51.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:03:51.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:03:51.536 [DEBUG] [Thread-204709] [transport.py] [_log()] userauth is OK
2026-02-15T13:03:51.536 [DEBUG] [Thread-204709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:03:51.536 [DEBUG] [Thread-204709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:03:51.537 [DEBUG] [Thread-204709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:03:51.537 [DEBUG] [Thread-204709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:03:51.551 [INFO] [Thread-204709] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:03:51.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:03:52.134 [DEBUG] [Thread-204709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:03:52.135 [DEBUG] [Thread-204709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:03:52.135 [DEBUG] [Thread-204709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:03:52.175 [DEBUG] [Thread-204709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:03:52.176 [DEBUG] [Thread-204709] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:03:52.179 [DEBUG] [Thread-204709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:03:52.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:03:52.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:03:52.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:03:52.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:03:52.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:03:52.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:03:52.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:03:52.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:03:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:03:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.460861 -999.00  +22.20  24.83     26   +1.80 1 1 1 1 1   888    0 15.91 -151.01 ----- 24.8 24.8 128.4 30.1 28.9 -27.5 28.2 -26.3 28.4 -25.2 29.2 -28.3
2026-02-15T13:03:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:03:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:03:52.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.460861
2026-02-15T13:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:03:52.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:03:52.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:03:09', tmtdew=24.32, humidity=19.17, cloud=0.0, wind=18.76, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:03:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:03:52.205 [DEBUG] [Thread-204709] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:03:52.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:03:52.304 [DEBUG] [Thread-204712] [transport.py] [_log()] starting thread (client mode): 0xa57c0cd0
2026-02-15T13:03:52.305 [DEBUG] [Thread-204712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:03:52.320 [DEBUG] [Thread-204712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:03:52.320 [INFO] [Thread-204712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] client lang: <none>
2026-02-15T13:03:52.327 [DEBUG] [Thread-204712] [transport.py] [_log()] server lang: <none>
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] kex follows: False
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] Compression: none
2026-02-15T13:03:52.328 [DEBUG] [Thread-204712] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:03:52.387 [DEBUG] [Thread-204712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:03:52.387 [DEBUG] [Thread-204712] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:03:52.387 [DEBUG] [Thread-204712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:03:52.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:03:52.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:03:52.443 [DEBUG] [Thread-204712] [transport.py] [_log()] userauth is OK
2026-02-15T13:03:52.443 [DEBUG] [Thread-204712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:03:52.444 [DEBUG] [Thread-204712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:03:52.444 [DEBUG] [Thread-204712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:03:52.444 [DEBUG] [Thread-204712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:03:52.466 [INFO] [Thread-204712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:03:52.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:03:52.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:03:53.302 [DEBUG] [Thread-204712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:03:53.302 [DEBUG] [Thread-204712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:03:53.353 [DEBUG] [Thread-204712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:03:53.354 [DEBUG] [Thread-204712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:03:53.362 [DEBUG] [Thread-204712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:03:53.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:03:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:03:53.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:03:53.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:03:53.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:03:53.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:03:53.396 [DEBUG] [Thread-204712] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:03:59.038 [DEBUG] [Thread-204714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:14.096 [DEBUG] [Thread-204715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:23.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:04:23.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:04:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:04:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 3, 44), 23.79, 20.46, 0.0, 23.82, 21.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:04:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:03:44
2026-02-15T13:04:26.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:04:26.709 [DEBUG] [Thread-204716] [transport.py] [_log()] starting thread (client mode): 0xa2d1b2e0
2026-02-15T13:04:26.710 [DEBUG] [Thread-204716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:04:26.730 [DEBUG] [Thread-204716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:04:26.730 [INFO] [Thread-204716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:04:26.733 [DEBUG] [Thread-204716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:04:26.733 [DEBUG] [Thread-204716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] client lang: <none>
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] server lang: <none>
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] kex follows: False
2026-02-15T13:04:26.734 [DEBUG] [Thread-204716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:04:26.735 [DEBUG] [Thread-204716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:04:26.735 [DEBUG] [Thread-204716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:04:26.735 [DEBUG] [Thread-204716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:04:26.735 [DEBUG] [Thread-204716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:04:26.735 [DEBUG] [Thread-204716] [transport.py] [_log()] Compression: none
2026-02-15T13:04:26.735 [DEBUG] [Thread-204716] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:04:26.752 [DEBUG] [Thread-204716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:04:26.753 [DEBUG] [Thread-204716] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:04:26.754 [DEBUG] [Thread-204716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:04:26.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:04:26.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:04:26.756 [DEBUG] [Thread-204716] [transport.py] [_log()] userauth is OK
2026-02-15T13:04:26.756 [DEBUG] [Thread-204716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:04:26.756 [DEBUG] [Thread-204716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:04:26.756 [DEBUG] [Thread-204716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:04:26.756 [DEBUG] [Thread-204716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:04:26.784 [INFO] [Thread-204716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:04:26.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:04:27.410 [DEBUG] [Thread-204716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:04:27.411 [DEBUG] [Thread-204716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:04:27.411 [DEBUG] [Thread-204716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:04:27.451 [DEBUG] [Thread-204716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:04:27.452 [DEBUG] [Thread-204716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:04:27.455 [DEBUG] [Thread-204716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:04:27.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:04:27.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:04:27.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:04:27.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:04:27.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:04:27.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:04:27.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:04:27.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:04:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:04:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.461209 -999.00  +21.70  18.73     26   +1.70 1 1 1 1 1   888    0 16.27 -147.94 ----- 18.7 18.7 139.6 23.4 28.8 -29.1 28.2 -28.1 28.3 -26.9 29.1 -28.8
2026-02-15T13:04:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:04:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:04:27.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.461209
2026-02-15T13:04:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:04:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:04:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:04:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:04:27.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:04:27.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:03:44', tmtdew=23.79, humidity=20.46, cloud=0.0, wind=23.82, temperature=21.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:04:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:04:27.479 [DEBUG] [Thread-204716] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:04:27.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:04:27.575 [DEBUG] [Thread-204719] [transport.py] [_log()] starting thread (client mode): 0xa2d02140
2026-02-15T13:04:27.575 [DEBUG] [Thread-204719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:04:27.589 [DEBUG] [Thread-204719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:04:27.589 [INFO] [Thread-204719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] client lang: <none>
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] server lang: <none>
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] kex follows: False
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:04:27.597 [DEBUG] [Thread-204719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:04:27.598 [DEBUG] [Thread-204719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:04:27.598 [DEBUG] [Thread-204719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:04:27.598 [DEBUG] [Thread-204719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:04:27.598 [DEBUG] [Thread-204719] [transport.py] [_log()] Compression: none
2026-02-15T13:04:27.598 [DEBUG] [Thread-204719] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:04:27.662 [DEBUG] [Thread-204719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:04:27.663 [DEBUG] [Thread-204719] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:04:27.663 [DEBUG] [Thread-204719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:04:27.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:04:27.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:04:27.721 [DEBUG] [Thread-204719] [transport.py] [_log()] userauth is OK
2026-02-15T13:04:27.721 [DEBUG] [Thread-204719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:04:27.721 [DEBUG] [Thread-204719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:04:27.721 [DEBUG] [Thread-204719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:04:27.722 [DEBUG] [Thread-204719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:04:27.741 [INFO] [Thread-204719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:04:27.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:04:27.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:04:28.553 [DEBUG] [Thread-204719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:04:28.553 [DEBUG] [Thread-204719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:04:28.601 [DEBUG] [Thread-204719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:04:28.602 [DEBUG] [Thread-204719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:04:28.610 [DEBUG] [Thread-204719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:04:28.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:04:28.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:04:28.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:04:28.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:04:28.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:04:28.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:04:28.647 [DEBUG] [Thread-204719] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:04:29.132 [DEBUG] [Thread-204721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:29.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:29.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:44.183 [DEBUG] [Thread-204722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:48.878 [DEBUG] [Thread-204723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:04:58.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:04:58.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:04:58.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:04:59.218 [DEBUG] [Thread-204724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 4, 20), 23.35, 21.14, 0.0, 26.48, 21.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:05:01.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:04:20
2026-02-15T13:05:01.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:05:01.773 [DEBUG] [Thread-204725] [transport.py] [_log()] starting thread (client mode): 0xa2d01180
2026-02-15T13:05:01.773 [DEBUG] [Thread-204725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:05:01.784 [DEBUG] [Thread-204725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:05:01.784 [INFO] [Thread-204725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:05:01.785 [DEBUG] [Thread-204725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] client lang: <none>
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] server lang: <none>
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] kex follows: False
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] Compression: none
2026-02-15T13:05:01.786 [DEBUG] [Thread-204725] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:05:01.794 [DEBUG] [Thread-204725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:05:01.794 [DEBUG] [Thread-204725] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:05:01.794 [DEBUG] [Thread-204725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:05:01.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:05:01.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:05:01.795 [DEBUG] [Thread-204725] [transport.py] [_log()] userauth is OK
2026-02-15T13:05:01.795 [DEBUG] [Thread-204725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:05:01.795 [DEBUG] [Thread-204725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:05:01.795 [DEBUG] [Thread-204725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:05:01.795 [DEBUG] [Thread-204725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:05:01.809 [INFO] [Thread-204725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:05:01.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:05:02.456 [DEBUG] [Thread-204725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:05:02.456 [DEBUG] [Thread-204725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:05:02.456 [DEBUG] [Thread-204725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:05:02.497 [DEBUG] [Thread-204725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:05:02.498 [DEBUG] [Thread-204725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:05:02.501 [DEBUG] [Thread-204725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:05:02.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:05:02.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:05:02.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:05:02.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:05:02.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:05:02.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:05:02.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:05:02.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:05:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:05:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.461556 -999.00  +21.50  12.29     27   +1.90 1 1 1 1 1   888    0 16.91 -137.49 ----- 12.3 12.3 134.9 22.3 28.8 -29.1 28.2 -27.1 28.2 -26.5 29.2 -28.1
2026-02-15T13:05:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:05:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:05:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.461556
2026-02-15T13:05:02.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:05:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:05:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:05:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:05:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:05:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:04:20', tmtdew=23.35, humidity=21.14, cloud=0.0, wind=26.48, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:04:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:05:02.528 [DEBUG] [Thread-204725] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:05:02.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:05:02.624 [DEBUG] [Thread-204728] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-15T13:05:02.624 [DEBUG] [Thread-204728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:05:02.638 [DEBUG] [Thread-204728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:05:02.638 [INFO] [Thread-204728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] client lang: <none>
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] server lang: <none>
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] kex follows: False
2026-02-15T13:05:02.646 [DEBUG] [Thread-204728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:05:02.647 [DEBUG] [Thread-204728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:05:02.647 [DEBUG] [Thread-204728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:05:02.647 [DEBUG] [Thread-204728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:05:02.647 [DEBUG] [Thread-204728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:05:02.647 [DEBUG] [Thread-204728] [transport.py] [_log()] Compression: none
2026-02-15T13:05:02.647 [DEBUG] [Thread-204728] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:05:02.704 [DEBUG] [Thread-204728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:05:02.704 [DEBUG] [Thread-204728] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:05:02.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:05:02.706 [DEBUG] [Thread-204728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:05:02.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:05:02.763 [DEBUG] [Thread-204728] [transport.py] [_log()] userauth is OK
2026-02-15T13:05:02.764 [DEBUG] [Thread-204728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:05:02.764 [DEBUG] [Thread-204728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:05:02.764 [DEBUG] [Thread-204728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:05:02.764 [DEBUG] [Thread-204728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:05:02.783 [INFO] [Thread-204728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:05:02.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:05:02.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:05:03.590 [DEBUG] [Thread-204728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:05:03.591 [DEBUG] [Thread-204728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:05:03.638 [DEBUG] [Thread-204728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:05:03.639 [DEBUG] [Thread-204728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:05:03.647 [DEBUG] [Thread-204728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:05:03.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:05:03.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:05:03.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:05:03.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:05:03.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:05:03.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:05:03.681 [DEBUG] [Thread-204728] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:05:14.256 [DEBUG] [Thread-204730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:29.315 [DEBUG] [Thread-204731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:29.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:29.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:33.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:05:33.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:05:33.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:05:35.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 4, 57), 23.09, 21.2, 0.0, 18.28, 21.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:05:35.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:04:57
2026-02-15T13:05:36.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:05:36.626 [DEBUG] [Thread-204732] [transport.py] [_log()] starting thread (client mode): 0xa2d1b6d0
2026-02-15T13:05:36.626 [DEBUG] [Thread-204732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:05:36.647 [DEBUG] [Thread-204732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:05:36.647 [INFO] [Thread-204732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] client lang: <none>
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] server lang: <none>
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] kex follows: False
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] Compression: none
2026-02-15T13:05:36.649 [DEBUG] [Thread-204732] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:05:36.658 [DEBUG] [Thread-204732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:05:36.658 [DEBUG] [Thread-204732] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:05:36.658 [DEBUG] [Thread-204732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:05:36.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:05:36.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:05:36.660 [DEBUG] [Thread-204732] [transport.py] [_log()] userauth is OK
2026-02-15T13:05:36.660 [DEBUG] [Thread-204732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:05:36.661 [DEBUG] [Thread-204732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:05:36.661 [DEBUG] [Thread-204732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:05:36.661 [DEBUG] [Thread-204732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:05:36.679 [INFO] [Thread-204732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:05:36.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:05:37.288 [DEBUG] [Thread-204732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:05:37.288 [DEBUG] [Thread-204732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:05:37.289 [DEBUG] [Thread-204732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:05:37.330 [DEBUG] [Thread-204732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:05:37.330 [DEBUG] [Thread-204732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:05:37.333 [DEBUG] [Thread-204732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:05:37.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:05:37.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:05:37.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:05:37.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:05:37.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:05:37.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:05:37.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:05:37.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:05:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:05:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.461903 -999.00  +21.80  16.84     27   +2.00 1 1 1 1 1   888    0 16.78 -134.21 ----- 16.8 16.8 139.8 25.7 28.9 -28.2 28.2 -27.1 28.3 -26.8 29.3 -27.5
2026-02-15T13:05:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:05:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:05:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.461903
2026-02-15T13:05:37.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:05:37.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:04:57', tmtdew=23.09, humidity=21.2, cloud=0.0, wind=18.28, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:05:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:05:37.359 [DEBUG] [Thread-204732] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:05:37.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:05:37.453 [DEBUG] [Thread-204735] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-15T13:05:37.453 [DEBUG] [Thread-204735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:05:37.468 [DEBUG] [Thread-204735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:05:37.468 [INFO] [Thread-204735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:05:37.475 [DEBUG] [Thread-204735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:05:37.476 [DEBUG] [Thread-204735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] client lang: <none>
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] server lang: <none>
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] kex follows: False
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:05:37.477 [DEBUG] [Thread-204735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:05:37.478 [DEBUG] [Thread-204735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:05:37.478 [DEBUG] [Thread-204735] [transport.py] [_log()] Compression: none
2026-02-15T13:05:37.478 [DEBUG] [Thread-204735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:05:37.536 [DEBUG] [Thread-204735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:05:37.537 [DEBUG] [Thread-204735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:05:37.538 [DEBUG] [Thread-204735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:05:37.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:05:37.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:05:37.592 [DEBUG] [Thread-204735] [transport.py] [_log()] userauth is OK
2026-02-15T13:05:37.593 [DEBUG] [Thread-204735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:05:37.593 [DEBUG] [Thread-204735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:05:37.593 [DEBUG] [Thread-204735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:05:37.593 [DEBUG] [Thread-204735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:05:37.618 [INFO] [Thread-204735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:05:37.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:05:37.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:05:38.477 [DEBUG] [Thread-204735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:05:38.477 [DEBUG] [Thread-204735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:05:38.527 [DEBUG] [Thread-204735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:05:38.527 [DEBUG] [Thread-204735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:05:38.538 [DEBUG] [Thread-204735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:05:38.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:05:38.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:05: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
2026-02-15T13:05:38.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:05:38.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:05:38.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:05:38.583 [DEBUG] [Thread-204735] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:05:44.350 [DEBUG] [Thread-204737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:48.913 [DEBUG] [Thread-204738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:05:59.414 [DEBUG] [Thread-204739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:06:08.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:06:08.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:06:10.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 5, 33), 23.27, 21.1, 0.0, 10.76, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:06:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:05:33
2026-02-15T13:06:10.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:06:11.073 [DEBUG] [Thread-204740] [transport.py] [_log()] starting thread (client mode): 0xa81d6200
2026-02-15T13:06:11.073 [DEBUG] [Thread-204740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:06:11.093 [DEBUG] [Thread-204740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:06:11.093 [INFO] [Thread-204740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:06:11.096 [DEBUG] [Thread-204740] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] client lang: <none>
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] server lang: <none>
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] kex follows: False
2026-02-15T13:06:11.097 [DEBUG] [Thread-204740] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:06:11.098 [DEBUG] [Thread-204740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:06:11.098 [DEBUG] [Thread-204740] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:06:11.098 [DEBUG] [Thread-204740] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:06:11.098 [DEBUG] [Thread-204740] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:06:11.098 [DEBUG] [Thread-204740] [transport.py] [_log()] Compression: none
2026-02-15T13:06:11.098 [DEBUG] [Thread-204740] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:06:11.116 [DEBUG] [Thread-204740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:06:11.116 [DEBUG] [Thread-204740] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:06:11.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:06:11.118 [DEBUG] [Thread-204740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:06:11.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:06:11.120 [DEBUG] [Thread-204740] [transport.py] [_log()] userauth is OK
2026-02-15T13:06:11.120 [DEBUG] [Thread-204740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:06:11.120 [DEBUG] [Thread-204740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:06:11.120 [DEBUG] [Thread-204740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:06:11.120 [DEBUG] [Thread-204740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:06:11.153 [INFO] [Thread-204740] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:06:11.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:06:11.838 [DEBUG] [Thread-204740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:06:11.839 [DEBUG] [Thread-204740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:06:11.839 [DEBUG] [Thread-204740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:06:11.880 [DEBUG] [Thread-204740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:06:11.881 [DEBUG] [Thread-204740] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:06:11.884 [DEBUG] [Thread-204740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:06:11.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:06:11.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:06:11.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:06:11.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:06:11.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:06:11.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:06:11.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:06:11.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:06:11.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:06:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.462250 -999.00  +22.00  11.14     26   +1.90 1 1 1 1 1   888    0 16.47 -132.37 ----- 11.1 11.1 162.8 19.6 29.0 -28.8 28.3 -27.4 28.4 -25.6 29.4 -27.7
2026-02-15T13:06:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:06:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:06:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.462250
2026-02-15T13:06:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:06:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:06:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:06:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:06:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:06:11.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:05:33', tmtdew=23.27, humidity=21.1, cloud=0.0, wind=10.76, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:05:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:06:11.914 [DEBUG] [Thread-204740] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:06:11.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:06:12.010 [DEBUG] [Thread-204743] [transport.py] [_log()] starting thread (client mode): 0xa2d033a0
2026-02-15T13:06:12.010 [DEBUG] [Thread-204743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:06:12.024 [DEBUG] [Thread-204743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:06:12.024 [INFO] [Thread-204743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:06:12.032 [DEBUG] [Thread-204743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:06:12.032 [DEBUG] [Thread-204743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:06:12.032 [DEBUG] [Thread-204743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] client lang: <none>
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] server lang: <none>
2026-02-15T13:06:12.033 [DEBUG] [Thread-204743] [transport.py] [_log()] kex follows: False
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] Compression: none
2026-02-15T13:06:12.034 [DEBUG] [Thread-204743] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:06:12.092 [DEBUG] [Thread-204743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:06:12.093 [DEBUG] [Thread-204743] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:06:12.094 [DEBUG] [Thread-204743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:06:12.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:06:12.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:06:12.160 [DEBUG] [Thread-204743] [transport.py] [_log()] userauth is OK
2026-02-15T13:06:12.161 [DEBUG] [Thread-204743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:06:12.161 [DEBUG] [Thread-204743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:06:12.161 [DEBUG] [Thread-204743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:06:12.161 [DEBUG] [Thread-204743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:06:12.179 [INFO] [Thread-204743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:06:12.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:06:12.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:06:12.982 [DEBUG] [Thread-204743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:06:12.982 [DEBUG] [Thread-204743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:06:13.035 [DEBUG] [Thread-204743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:06:13.035 [DEBUG] [Thread-204743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:06:13.044 [DEBUG] [Thread-204743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:06:13.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:06:13.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:06:13.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:06:13.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:06:13.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:06:13.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:06:13.079 [DEBUG] [Thread-204743] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:06:14.451 [DEBUG] [Thread-204745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:29.509 [DEBUG] [Thread-204746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:29.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:29.946 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:43.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:06:43.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:06:43.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:06:44.551 [DEBUG] [Thread-204747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 6, 9), 22.63, 21.98, 0.0, 17.26, 21.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:06:45.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:06:09
2026-02-15T13:06:45.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:06:45.526 [DEBUG] [Thread-204748] [transport.py] [_log()] starting thread (client mode): 0xa2d00310
2026-02-15T13:06:45.526 [DEBUG] [Thread-204748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:06:45.546 [DEBUG] [Thread-204748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:06:45.546 [INFO] [Thread-204748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:06:45.549 [DEBUG] [Thread-204748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:06:45.549 [DEBUG] [Thread-204748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:06:45.549 [DEBUG] [Thread-204748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:06:45.549 [DEBUG] [Thread-204748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:45.549 [DEBUG] [Thread-204748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:45.549 [DEBUG] [Thread-204748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] client lang: <none>
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] server lang: <none>
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] kex follows: False
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] Compression: none
2026-02-15T13:06:45.550 [DEBUG] [Thread-204748] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:06:45.566 [DEBUG] [Thread-204748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:06:45.567 [DEBUG] [Thread-204748] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:06:45.567 [DEBUG] [Thread-204748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:06:45.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:06:45.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:06:45.569 [DEBUG] [Thread-204748] [transport.py] [_log()] userauth is OK
2026-02-15T13:06:45.569 [DEBUG] [Thread-204748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:06:45.569 [DEBUG] [Thread-204748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:06:45.570 [DEBUG] [Thread-204748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:06:45.570 [DEBUG] [Thread-204748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:06:45.585 [INFO] [Thread-204748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:06:45.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:06:46.405 [DEBUG] [Thread-204748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:06:46.405 [DEBUG] [Thread-204748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:06:46.405 [DEBUG] [Thread-204748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:06:46.446 [DEBUG] [Thread-204748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:06:46.446 [DEBUG] [Thread-204748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:06:46.449 [DEBUG] [Thread-204748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:06:46.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:06:46.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:06:46.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:06:46.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:06:46.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:06:46.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:06:46.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:06:46.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:06:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:06:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.462598 -999.00  +22.20  15.42     26   +2.00 1 1 1 1 1   888    0 16.71 -120.03 ----- 15.4 15.4 146.5 20.8 29.1 -27.5 28.2 -29.1 28.4 -25.8 29.4 -27.1
2026-02-15T13:06:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:06:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:06:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.462598
2026-02-15T13:06:46.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:06:46.470 [DEBUG] [Thread-204748] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:06:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:06:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:06:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:06:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:06:46.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:06:09', tmtdew=22.63, humidity=21.98, cloud=0.0, wind=17.26, temperature=21.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:06:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:06:46.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:06:46.570 [DEBUG] [Thread-204751] [transport.py] [_log()] starting thread (client mode): 0xa2d1b7c0
2026-02-15T13:06:46.570 [DEBUG] [Thread-204751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:06:46.585 [DEBUG] [Thread-204751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:06:46.585 [INFO] [Thread-204751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:06:46.592 [DEBUG] [Thread-204751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:06:46.592 [DEBUG] [Thread-204751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:06:46.592 [DEBUG] [Thread-204751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:06:46.592 [DEBUG] [Thread-204751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:46.592 [DEBUG] [Thread-204751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] client lang: <none>
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] server lang: <none>
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] kex follows: False
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] Compression: none
2026-02-15T13:06:46.593 [DEBUG] [Thread-204751] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:06:46.652 [DEBUG] [Thread-204751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:06:46.653 [DEBUG] [Thread-204751] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:06:46.653 [DEBUG] [Thread-204751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:06:46.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:06:46.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:06:46.716 [DEBUG] [Thread-204751] [transport.py] [_log()] userauth is OK
2026-02-15T13:06:46.717 [DEBUG] [Thread-204751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:06:46.717 [DEBUG] [Thread-204751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:06:46.717 [DEBUG] [Thread-204751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:06:46.717 [DEBUG] [Thread-204751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:06:46.738 [INFO] [Thread-204751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:06:46.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:06:46.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:06:47.612 [DEBUG] [Thread-204751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:06:47.612 [DEBUG] [Thread-204751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:06:47.660 [DEBUG] [Thread-204751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:06:47.660 [DEBUG] [Thread-204751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:06:47.669 [DEBUG] [Thread-204751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:06:47.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:06:47.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:06:47.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:06:47.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:06:47.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:06:47.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:06:47.704 [DEBUG] [Thread-204751] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:06:48.960 [DEBUG] [Thread-204753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:06:59.590 [DEBUG] [Thread-204754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:14.644 [DEBUG] [Thread-204755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:17.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:07:17.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:07:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:07:19.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 6, 45), 22.88, 21.77, 0.0, 26.78, 21.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:07:19.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:06:45
2026-02-15T13:07:20.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:07:20.506 [DEBUG] [Thread-204756] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-15T13:07:20.507 [DEBUG] [Thread-204756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:07:20.528 [DEBUG] [Thread-204756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:07:20.528 [INFO] [Thread-204756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:07:20.531 [DEBUG] [Thread-204756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:07:20.531 [DEBUG] [Thread-204756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:07:20.531 [DEBUG] [Thread-204756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:07:20.531 [DEBUG] [Thread-204756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] client lang: <none>
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] server lang: <none>
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] kex follows: False
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:07:20.532 [DEBUG] [Thread-204756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:07:20.533 [DEBUG] [Thread-204756] [transport.py] [_log()] Compression: none
2026-02-15T13:07:20.533 [DEBUG] [Thread-204756] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:07:20.551 [DEBUG] [Thread-204756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:07:20.552 [DEBUG] [Thread-204756] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:07:20.552 [DEBUG] [Thread-204756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:07:20.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:07:20.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:07:20.554 [DEBUG] [Thread-204756] [transport.py] [_log()] userauth is OK
2026-02-15T13:07:20.554 [DEBUG] [Thread-204756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:07:20.555 [DEBUG] [Thread-204756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:07:20.555 [DEBUG] [Thread-204756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:07:20.555 [DEBUG] [Thread-204756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:07:20.592 [INFO] [Thread-204756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:07:20.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:07:21.208 [DEBUG] [Thread-204756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:07:21.208 [DEBUG] [Thread-204756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:07:21.209 [DEBUG] [Thread-204756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:07:21.249 [DEBUG] [Thread-204756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:07:21.250 [DEBUG] [Thread-204756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:07:21.253 [DEBUG] [Thread-204756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:07:21.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:07:21.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:07:21.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:07:21.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:07:21.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:07:21.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:07:21.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:07:21.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:07:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:07:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.462945 -999.00  +22.30  20.82     25   +1.70 1 1 1 1 1   888    0 17.24 -109.57 ----- 20.8 20.8 164.2 24.7 29.1 -29.6 28.4 -30.2 28.6 -26.4 29.4 -28.6
2026-02-15T13:07:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:07:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:07:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.462945
2026-02-15T13:07:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:07:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:07:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:07:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:07:21.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:07:21.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:06:45', tmtdew=22.88, humidity=21.77, cloud=0.0, wind=26.78, temperature=21.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:06:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:07:21.280 [DEBUG] [Thread-204756] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:07:21.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:07:21.375 [DEBUG] [Thread-204759] [transport.py] [_log()] starting thread (client mode): 0xa81d72e0
2026-02-15T13:07:21.376 [DEBUG] [Thread-204759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:07:21.393 [DEBUG] [Thread-204759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:07:21.394 [INFO] [Thread-204759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:07:21.402 [DEBUG] [Thread-204759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:07:21.402 [DEBUG] [Thread-204759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:07:21.402 [DEBUG] [Thread-204759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:07:21.402 [DEBUG] [Thread-204759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] client lang: <none>
2026-02-15T13:07:21.403 [DEBUG] [Thread-204759] [transport.py] [_log()] server lang: <none>
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] kex follows: False
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:07:21.404 [DEBUG] [Thread-204759] [transport.py] [_log()] Compression: none
2026-02-15T13:07:21.405 [DEBUG] [Thread-204759] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:07:21.464 [DEBUG] [Thread-204759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:07:21.464 [DEBUG] [Thread-204759] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:07:21.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:07:21.466 [DEBUG] [Thread-204759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:07:21.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:07:21.520 [DEBUG] [Thread-204759] [transport.py] [_log()] userauth is OK
2026-02-15T13:07:21.520 [DEBUG] [Thread-204759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:07:21.520 [DEBUG] [Thread-204759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:07:21.520 [DEBUG] [Thread-204759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:07:21.521 [DEBUG] [Thread-204759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:07:21.539 [INFO] [Thread-204759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:07:21.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:07:21.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:07:22.367 [DEBUG] [Thread-204759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:07:22.368 [DEBUG] [Thread-204759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:07:22.415 [DEBUG] [Thread-204759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:07:22.416 [DEBUG] [Thread-204759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:07:22.425 [DEBUG] [Thread-204759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:07:22.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:07:22.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:07:22.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:07:22.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:07:22.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:07:22.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:07:22.463 [DEBUG] [Thread-204759] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:07:29.682 [DEBUG] [Thread-204761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:30.086 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:30.087 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:44.739 [DEBUG] [Thread-204762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:49.013 [DEBUG] [Thread-204763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:07:52.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:07:52.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:07:52.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:07:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 7, 20), 23.12, 21.42, 0.0, 23.42, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:07:54.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:07:20
2026-02-15T13:07:54.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:07:55.144 [DEBUG] [Thread-204764] [transport.py] [_log()] starting thread (client mode): 0xa57e1900
2026-02-15T13:07:55.144 [DEBUG] [Thread-204764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:07:55.164 [DEBUG] [Thread-204764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:07:55.164 [INFO] [Thread-204764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:07:55.167 [DEBUG] [Thread-204764] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:07:55.167 [DEBUG] [Thread-204764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:07:55.167 [DEBUG] [Thread-204764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] client lang: <none>
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] server lang: <none>
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] kex follows: False
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] Compression: none
2026-02-15T13:07:55.168 [DEBUG] [Thread-204764] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:07:55.185 [DEBUG] [Thread-204764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:07:55.186 [DEBUG] [Thread-204764] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:07:55.186 [DEBUG] [Thread-204764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:07:55.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:07:55.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:07:55.189 [DEBUG] [Thread-204764] [transport.py] [_log()] userauth is OK
2026-02-15T13:07:55.189 [DEBUG] [Thread-204764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:07:55.190 [DEBUG] [Thread-204764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:07:55.190 [DEBUG] [Thread-204764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:07:55.190 [DEBUG] [Thread-204764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:07:55.206 [INFO] [Thread-204764] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:07:55.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:07:55.855 [DEBUG] [Thread-204764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:07:55.856 [DEBUG] [Thread-204764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:07:55.856 [DEBUG] [Thread-204764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:07:55.896 [DEBUG] [Thread-204764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:07:55.897 [DEBUG] [Thread-204764] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:07:55.900 [DEBUG] [Thread-204764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:07:55.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:07:55.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:07:55.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:07:55.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:07:55.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:07:55.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:07:55.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:07:55.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:07:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:07:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.463292 -999.00  +21.80  12.97     26   +1.60 1 1 1 1 1   888    0 17.37 -104.86 ----- 13.0 13.0 146.2 26.0 29.0 -28.2 28.1 -27.6 28.4 -27.1 29.3 -28.3
2026-02-15T13:07:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:07:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:07:55.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.463292
2026-02-15T13:07:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:07:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:07:55.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:07:55.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:07:55.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:07:55.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:07:20', tmtdew=23.12, humidity=21.42, cloud=0.0, wind=23.42, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:07:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:07:55.928 [DEBUG] [Thread-204764] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:07:56.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:07:56.036 [DEBUG] [Thread-204767] [transport.py] [_log()] starting thread (client mode): 0xa81d5330
2026-02-15T13:07:56.036 [DEBUG] [Thread-204767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:07:56.051 [DEBUG] [Thread-204767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:07:56.052 [INFO] [Thread-204767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:07:56.059 [DEBUG] [Thread-204767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:07:56.060 [DEBUG] [Thread-204767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:07:56.060 [DEBUG] [Thread-204767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:07:56.060 [DEBUG] [Thread-204767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:56.060 [DEBUG] [Thread-204767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] client lang: <none>
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] server lang: <none>
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] kex follows: False
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] Compression: none
2026-02-15T13:07:56.061 [DEBUG] [Thread-204767] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:07:56.124 [DEBUG] [Thread-204767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:07:56.124 [DEBUG] [Thread-204767] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:07:56.125 [DEBUG] [Thread-204767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:07:56.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:07:56.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:07:56.180 [DEBUG] [Thread-204767] [transport.py] [_log()] userauth is OK
2026-02-15T13:07:56.180 [DEBUG] [Thread-204767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:07:56.180 [DEBUG] [Thread-204767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:07:56.180 [DEBUG] [Thread-204767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:07:56.181 [DEBUG] [Thread-204767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:07:56.199 [INFO] [Thread-204767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:07:56.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:07:56.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:07:57.032 [DEBUG] [Thread-204767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:07:57.032 [DEBUG] [Thread-204767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:07:57.081 [DEBUG] [Thread-204767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:07:57.081 [DEBUG] [Thread-204767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:07:57.091 [DEBUG] [Thread-204767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:07:57.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:07:57.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:07:57.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:07:57.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:07:57.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:07:57.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:07:57.128 [DEBUG] [Thread-204767] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:07:59.779 [DEBUG] [Thread-204769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:14.831 [DEBUG] [Thread-204770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:27.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:08:27.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:08:27.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:08:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 7, 56), 23.2, 20.77, 0.0, 15.85, 21.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:08:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:07:56
2026-02-15T13:08:29.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:08:29.870 [DEBUG] [Thread-204771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:30.023 [DEBUG] [Thread-204772] [transport.py] [_log()] starting thread (client mode): 0xa81d5ff0
2026-02-15T13:08:30.023 [DEBUG] [Thread-204772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:08:30.043 [DEBUG] [Thread-204772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:08:30.043 [INFO] [Thread-204772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] client lang: <none>
2026-02-15T13:08:30.047 [DEBUG] [Thread-204772] [transport.py] [_log()] server lang: <none>
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] kex follows: False
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] Compression: none
2026-02-15T13:08:30.048 [DEBUG] [Thread-204772] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:08:30.067 [DEBUG] [Thread-204772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:08:30.067 [DEBUG] [Thread-204772] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:08:30.068 [DEBUG] [Thread-204772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:08:30.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:08:30.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:08:30.069 [DEBUG] [Thread-204772] [transport.py] [_log()] userauth is OK
2026-02-15T13:08:30.069 [DEBUG] [Thread-204772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:08:30.069 [DEBUG] [Thread-204772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:08:30.069 [DEBUG] [Thread-204772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:08:30.070 [DEBUG] [Thread-204772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:08:30.089 [INFO] [Thread-204772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:08:30.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:08:30.227 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:30.229 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:30.739 [DEBUG] [Thread-204772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:08:30.739 [DEBUG] [Thread-204772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:08:30.739 [DEBUG] [Thread-204772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:08:30.780 [DEBUG] [Thread-204772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:08:30.780 [DEBUG] [Thread-204772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:08:30.783 [DEBUG] [Thread-204772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:08:30.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:08:30.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:08:30.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:08:30.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:08:30.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:08:30.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:08:30.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:08:30.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:08:30.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:08:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.463639 -999.00  +21.80  15.59     26   +1.70 1 1 1 1 1   888    0 17.96 -97.37 ----- 15.6 15.6 108.6 20.4 29.0 -28.8 28.1 -26.8 28.4 -26.3 29.3 -26.9
2026-02-15T13:08:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:08:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:08:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.463639
2026-02-15T13:08:30.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:08:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:08:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:08:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:08:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:08:30.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:07:56', tmtdew=23.2, humidity=20.77, cloud=0.0, wind=15.85, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:07:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:08:30.809 [DEBUG] [Thread-204772] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:08:30.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:08:30.904 [DEBUG] [Thread-204775] [transport.py] [_log()] starting thread (client mode): 0xa2d00be0
2026-02-15T13:08:30.904 [DEBUG] [Thread-204775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:08:30.919 [DEBUG] [Thread-204775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:08:30.919 [INFO] [Thread-204775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] client lang: <none>
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] server lang: <none>
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] kex follows: False
2026-02-15T13:08:30.927 [DEBUG] [Thread-204775] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:08:30.928 [DEBUG] [Thread-204775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:08:30.928 [DEBUG] [Thread-204775] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:08:30.928 [DEBUG] [Thread-204775] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:08:30.928 [DEBUG] [Thread-204775] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:08:30.928 [DEBUG] [Thread-204775] [transport.py] [_log()] Compression: none
2026-02-15T13:08:30.928 [DEBUG] [Thread-204775] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:08:30.985 [DEBUG] [Thread-204775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:08:30.985 [DEBUG] [Thread-204775] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:08:30.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:08:30.987 [DEBUG] [Thread-204775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:08:30.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:08:31.044 [DEBUG] [Thread-204775] [transport.py] [_log()] userauth is OK
2026-02-15T13:08:31.044 [DEBUG] [Thread-204775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:08:31.044 [DEBUG] [Thread-204775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:08:31.044 [DEBUG] [Thread-204775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:08:31.044 [DEBUG] [Thread-204775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:08:31.065 [INFO] [Thread-204775] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:08:31.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:08:31.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:08:31.892 [DEBUG] [Thread-204775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:08:31.892 [DEBUG] [Thread-204775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:08:31.941 [DEBUG] [Thread-204775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:08:31.941 [DEBUG] [Thread-204775] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:08:31.950 [DEBUG] [Thread-204775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:08:31.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:08:31.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:08:31.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:08:31.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:08:31.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:08:31.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:08:31.987 [DEBUG] [Thread-204775] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:08:44.904 [DEBUG] [Thread-204777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:49.043 [DEBUG] [Thread-204778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:08:59.957 [DEBUG] [Thread-204779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:09:02.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:09:02.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:09:02.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:09:03.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 8, 31), 23.27, 20.72, 0.0, 20.47, 21.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:09:03.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:08:31
2026-02-15T13:09:04.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:09:04.402 [DEBUG] [Thread-204780] [transport.py] [_log()] starting thread (client mode): 0xa2db7970
2026-02-15T13:09:04.402 [DEBUG] [Thread-204780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:09:04.421 [DEBUG] [Thread-204780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:09:04.421 [INFO] [Thread-204780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] client lang: <none>
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] server lang: <none>
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] kex follows: False
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] Compression: none
2026-02-15T13:09:04.425 [DEBUG] [Thread-204780] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:09:04.444 [DEBUG] [Thread-204780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:09:04.444 [DEBUG] [Thread-204780] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:09:04.445 [DEBUG] [Thread-204780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:09:04.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:09:04.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:09:04.447 [DEBUG] [Thread-204780] [transport.py] [_log()] userauth is OK
2026-02-15T13:09:04.447 [DEBUG] [Thread-204780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:09:04.447 [DEBUG] [Thread-204780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:09:04.447 [DEBUG] [Thread-204780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:09:04.447 [DEBUG] [Thread-204780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:09:04.472 [INFO] [Thread-204780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:09:04.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:09:05.112 [DEBUG] [Thread-204780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:09:05.113 [DEBUG] [Thread-204780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:09:05.113 [DEBUG] [Thread-204780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:09:05.154 [DEBUG] [Thread-204780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:09:05.154 [DEBUG] [Thread-204780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:09:05.157 [DEBUG] [Thread-204780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:09:05.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:09:05.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:09:05.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:09:05.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:09:05.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:09:05.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:09:05.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:09:05.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:09:05.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:09:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.463986 -999.00  +22.20  18.32     25   +1.60 1 1 1 1 1   888    0 18.01 -87.85 ----- 18.3 18.3 160.6 23.3 29.1 -28.3 28.2 -26.9 28.4 -25.4 29.5 -28.6
2026-02-15T13:09:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:09:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:09:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.463986
2026-02-15T13:09:05.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:09:05.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:08:31', tmtdew=23.27, humidity=20.72, cloud=0.0, wind=20.47, temperature=21.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:08:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:09:05.182 [DEBUG] [Thread-204780] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:09:05.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:09:05.275 [DEBUG] [Thread-204783] [transport.py] [_log()] starting thread (client mode): 0xa2db5420
2026-02-15T13:09:05.275 [DEBUG] [Thread-204783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:09:05.292 [DEBUG] [Thread-204783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:09:05.292 [INFO] [Thread-204783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:09:05.299 [DEBUG] [Thread-204783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:09:05.300 [DEBUG] [Thread-204783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:09:05.300 [DEBUG] [Thread-204783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:09:05.300 [DEBUG] [Thread-204783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:05.300 [DEBUG] [Thread-204783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:05.300 [DEBUG] [Thread-204783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:05.300 [DEBUG] [Thread-204783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] client lang: <none>
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] server lang: <none>
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] kex follows: False
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] Compression: none
2026-02-15T13:09:05.301 [DEBUG] [Thread-204783] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:09:05.359 [DEBUG] [Thread-204783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:09:05.359 [DEBUG] [Thread-204783] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:09:05.360 [DEBUG] [Thread-204783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:09:05.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:09:05.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:09:05.415 [DEBUG] [Thread-204783] [transport.py] [_log()] userauth is OK
2026-02-15T13:09:05.416 [DEBUG] [Thread-204783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:09:05.416 [DEBUG] [Thread-204783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:09:05.416 [DEBUG] [Thread-204783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:09:05.416 [DEBUG] [Thread-204783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:09:05.436 [INFO] [Thread-204783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:09:05.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:09:05.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:09:06.305 [DEBUG] [Thread-204783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:09:06.305 [DEBUG] [Thread-204783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:09:06.353 [DEBUG] [Thread-204783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:09:06.353 [DEBUG] [Thread-204783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:09:06.361 [DEBUG] [Thread-204783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:09:06.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:09:06.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:09:06.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:09:06.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:09:06.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:09:06.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:09:06.396 [DEBUG] [Thread-204783] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:09:14.994 [DEBUG] [Thread-204785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:09:30.046 [DEBUG] [Thread-204786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:09:30.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:09:30.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:09:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:09:36.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:09:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:09:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 9, 8), 23.39, 20.61, 0.0, 18.3, 21.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:09:38.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:09:08
2026-02-15T13:09:38.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:09:38.658 [DEBUG] [Thread-204787] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-15T13:09:38.658 [DEBUG] [Thread-204787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:09:38.678 [DEBUG] [Thread-204787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:09:38.678 [INFO] [Thread-204787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] client lang: <none>
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] server lang: <none>
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] kex follows: False
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] Compression: none
2026-02-15T13:09:38.679 [DEBUG] [Thread-204787] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:09:38.693 [DEBUG] [Thread-204787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:09:38.693 [DEBUG] [Thread-204787] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:09:38.694 [DEBUG] [Thread-204787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:09:38.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:09:38.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:09:38.696 [DEBUG] [Thread-204787] [transport.py] [_log()] userauth is OK
2026-02-15T13:09:38.696 [DEBUG] [Thread-204787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:09:38.696 [DEBUG] [Thread-204787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:09:38.696 [DEBUG] [Thread-204787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:09:38.696 [DEBUG] [Thread-204787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:09:38.715 [INFO] [Thread-204787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:09:38.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:09:39.429 [DEBUG] [Thread-204787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:09:39.429 [DEBUG] [Thread-204787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:09:39.430 [DEBUG] [Thread-204787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:09:39.470 [DEBUG] [Thread-204787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:09:39.471 [DEBUG] [Thread-204787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:09:39.474 [DEBUG] [Thread-204787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:09:39.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:09:39.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:09:39.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:09:39.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:09:39.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:09:39.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:09:39.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:09:39.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:09:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:09:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.464681 -999.00  +22.20  22.29     25   +1.70 1 1 1 1 1   888    0 17.93 -69.51 ----- 22.3 22.3 144.2 26.8 29.1 -29.2 28.2 -27.4 28.5 -26.7 29.4 -30.6
2026-02-15T13:09:39.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:09:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:09:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.464681
2026-02-15T13:09:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:09:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:09:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:09:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:09:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:09:39.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:09:08', tmtdew=23.39, humidity=20.61, cloud=0.0, wind=18.3, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:09:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:09:39.501 [DEBUG] [Thread-204787] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:09:39.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:09:39.597 [DEBUG] [Thread-204790] [transport.py] [_log()] starting thread (client mode): 0xa5743d00
2026-02-15T13:09:39.597 [DEBUG] [Thread-204790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:09:39.615 [DEBUG] [Thread-204790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:09:39.615 [INFO] [Thread-204790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] client lang: <none>
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] server lang: <none>
2026-02-15T13:09:39.623 [DEBUG] [Thread-204790] [transport.py] [_log()] kex follows: False
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] Compression: none
2026-02-15T13:09:39.624 [DEBUG] [Thread-204790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:09:39.684 [DEBUG] [Thread-204790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:09:39.685 [DEBUG] [Thread-204790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:09:39.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:09:39.686 [DEBUG] [Thread-204790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:09:39.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:09:39.740 [DEBUG] [Thread-204790] [transport.py] [_log()] userauth is OK
2026-02-15T13:09:39.740 [DEBUG] [Thread-204790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:09:39.740 [DEBUG] [Thread-204790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:09:39.740 [DEBUG] [Thread-204790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:09:39.741 [DEBUG] [Thread-204790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:09:39.762 [INFO] [Thread-204790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:09:39.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:09:39.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:09:40.587 [DEBUG] [Thread-204790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:09:40.587 [DEBUG] [Thread-204790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:09:40.634 [DEBUG] [Thread-204790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:09:40.635 [DEBUG] [Thread-204790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:09:40.645 [DEBUG] [Thread-204790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:09:40.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:09:40.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:09:40.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-02-15T13:09:40.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:09:40.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:09:40.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:09:40.682 [DEBUG] [Thread-204790] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:09:45.079 [DEBUG] [Thread-204792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:09:49.085 [DEBUG] [Thread-204793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:00.127 [DEBUG] [Thread-204794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:10:10.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:10:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:10:12.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 9, 43), 24.67, 19.18, 0.0, 31.97, 22.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:10:12.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:09:43
2026-02-15T13:10:13.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:10:13.207 [DEBUG] [Thread-204795] [transport.py] [_log()] starting thread (client mode): 0xa2db4e20
2026-02-15T13:10:13.207 [DEBUG] [Thread-204795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:10:13.227 [DEBUG] [Thread-204795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:10:13.227 [INFO] [Thread-204795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:10:13.230 [DEBUG] [Thread-204795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] client lang: <none>
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] server lang: <none>
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] kex follows: False
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:10:13.231 [DEBUG] [Thread-204795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:10:13.232 [DEBUG] [Thread-204795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:10:13.232 [DEBUG] [Thread-204795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:10:13.232 [DEBUG] [Thread-204795] [transport.py] [_log()] Compression: none
2026-02-15T13:10:13.232 [DEBUG] [Thread-204795] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:10:13.249 [DEBUG] [Thread-204795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:10:13.249 [DEBUG] [Thread-204795] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:10:13.250 [DEBUG] [Thread-204795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:10:13.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:10:13.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:10:13.293 [DEBUG] [Thread-204795] [transport.py] [_log()] userauth is OK
2026-02-15T13:10:13.293 [DEBUG] [Thread-204795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:10:13.293 [DEBUG] [Thread-204795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:10:13.293 [DEBUG] [Thread-204795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:10:13.293 [DEBUG] [Thread-204795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:10:13.325 [INFO] [Thread-204795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:10:13.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:10:14.386 [DEBUG] [Thread-204795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:10:14.386 [DEBUG] [Thread-204795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:10:14.387 [DEBUG] [Thread-204795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:10:14.427 [DEBUG] [Thread-204795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:10:14.428 [DEBUG] [Thread-204795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:10:14.431 [DEBUG] [Thread-204795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:10:14.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:10:14.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:10:14.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:10:14.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:10:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:10:14.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:10:14.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:10:14.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:10:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:10:14.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.465028 -999.00  +22.20  19.56     25   +1.60 1 1 1 1 1   888    0 18.93 -58.07 ----- 19.6 19.6 134.4 32.3 29.0 -27.8 28.2 -28.1 28.3 -26.8 29.4 -27.4
2026-02-15T13:10:14.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:10:14.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:10:14.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.465028
2026-02-15T13:10:14.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:10:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:10:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:10:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:10:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:10:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:09:43', tmtdew=24.67, humidity=19.18, cloud=0.0, wind=31.97, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:09:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:10:14.459 [DEBUG] [Thread-204795] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:10:14.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:10:14.558 [DEBUG] [Thread-204798] [transport.py] [_log()] starting thread (client mode): 0xa2db4430
2026-02-15T13:10:14.558 [DEBUG] [Thread-204798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:10:14.577 [DEBUG] [Thread-204798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:10:14.577 [INFO] [Thread-204798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:10:14.587 [DEBUG] [Thread-204798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] client lang: <none>
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] server lang: <none>
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] kex follows: False
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:10:14.588 [DEBUG] [Thread-204798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:10:14.589 [DEBUG] [Thread-204798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:10:14.589 [DEBUG] [Thread-204798] [transport.py] [_log()] Compression: none
2026-02-15T13:10:14.589 [DEBUG] [Thread-204798] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:10:14.648 [DEBUG] [Thread-204798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:10:14.649 [DEBUG] [Thread-204798] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:10:14.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:10:14.650 [DEBUG] [Thread-204798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:10:14.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:10:14.708 [DEBUG] [Thread-204798] [transport.py] [_log()] userauth is OK
2026-02-15T13:10:14.708 [DEBUG] [Thread-204798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:10:14.708 [DEBUG] [Thread-204798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:10:14.709 [DEBUG] [Thread-204798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:10:14.709 [DEBUG] [Thread-204798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:10:14.727 [INFO] [Thread-204798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:10:14.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:10:14.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:10:15.163 [DEBUG] [Thread-204800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:15.565 [DEBUG] [Thread-204798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:10:15.566 [DEBUG] [Thread-204798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:10:15.614 [DEBUG] [Thread-204798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:10:15.614 [DEBUG] [Thread-204798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:10:15.624 [DEBUG] [Thread-204798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:10:15.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:10:15.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:10:15.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:10:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:10:15.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:10:15.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:10:15.662 [DEBUG] [Thread-204798] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:10:30.211 [DEBUG] [Thread-204801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:30.508 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:30.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:45.248 [DEBUG] [Thread-204802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:45.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:10:45.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:10:45.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:10:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 10, 18), 24.25, 19.81, 0.0, 28.34, 22.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:10:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:10:18
2026-02-15T13:10:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:10:48.085 [DEBUG] [Thread-204803] [transport.py] [_log()] starting thread (client mode): 0xa81d4fd0
2026-02-15T13:10:48.085 [DEBUG] [Thread-204803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:10:48.105 [DEBUG] [Thread-204803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:10:48.105 [INFO] [Thread-204803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:10:48.106 [DEBUG] [Thread-204803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] client lang: <none>
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] server lang: <none>
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] kex follows: False
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] Compression: none
2026-02-15T13:10:48.107 [DEBUG] [Thread-204803] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:10:48.118 [DEBUG] [Thread-204803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:10:48.118 [DEBUG] [Thread-204803] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:10:48.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:10:48.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:10:48.119 [DEBUG] [Thread-204803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:10:48.119 [DEBUG] [Thread-204803] [transport.py] [_log()] userauth is OK
2026-02-15T13:10:48.120 [DEBUG] [Thread-204803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:10:48.120 [DEBUG] [Thread-204803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:10:48.120 [DEBUG] [Thread-204803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:10:48.120 [DEBUG] [Thread-204803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:10:48.134 [INFO] [Thread-204803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:10:48.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:10:48.757 [DEBUG] [Thread-204803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:10:48.757 [DEBUG] [Thread-204803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:10:48.758 [DEBUG] [Thread-204803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:10:48.798 [DEBUG] [Thread-204803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:10:48.799 [DEBUG] [Thread-204803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:10:48.802 [DEBUG] [Thread-204803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:10:48.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:10:48.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:10:48.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:10:48.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:10:48.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:10:48.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:10:48.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:10:48.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:10:48.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:10:48.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.465375 -999.00  +22.40  26.33     25   +1.50 1 1 1 1 1   888    0 18.61 -43.19 ----- 26.3 26.3 142.8 35.2 29.1 -28.5 28.3 -27.6 28.5 -26.6 29.4 -30.2
2026-02-15T13:10:48.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:10:48.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:10:48.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.465375
2026-02-15T13:10:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:10:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:10:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:10:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:10:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:10:48.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:10:18', tmtdew=24.25, humidity=19.81, cloud=0.0, wind=28.34, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:10:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:10:48.831 [DEBUG] [Thread-204803] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:10:48.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:10:48.928 [DEBUG] [Thread-204806] [transport.py] [_log()] starting thread (client mode): 0xa57c0790
2026-02-15T13:10:48.929 [DEBUG] [Thread-204806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:10:48.943 [DEBUG] [Thread-204806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:10:48.943 [INFO] [Thread-204806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:10:48.951 [DEBUG] [Thread-204806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:10:48.951 [DEBUG] [Thread-204806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:10:48.951 [DEBUG] [Thread-204806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:10:48.951 [DEBUG] [Thread-204806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] client lang: <none>
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] server lang: <none>
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] kex follows: False
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] Compression: none
2026-02-15T13:10:48.952 [DEBUG] [Thread-204806] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:10:49.012 [DEBUG] [Thread-204806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:10:49.012 [DEBUG] [Thread-204806] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:10:49.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:10:49.013 [DEBUG] [Thread-204806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:10:49.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:10:49.068 [DEBUG] [Thread-204806] [transport.py] [_log()] userauth is OK
2026-02-15T13:10:49.068 [DEBUG] [Thread-204806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:10:49.068 [DEBUG] [Thread-204806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:10:49.069 [DEBUG] [Thread-204806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:10:49.069 [DEBUG] [Thread-204806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:10:49.087 [INFO] [Thread-204806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:10:49.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:10:49.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:10:49.130 [DEBUG] [Thread-204808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:10:49.899 [DEBUG] [Thread-204806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:10:49.899 [DEBUG] [Thread-204806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:10:49.947 [DEBUG] [Thread-204806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:10:49.948 [DEBUG] [Thread-204806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:10:49.957 [DEBUG] [Thread-204806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:10:49.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:10:49.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:10:49.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:10:49.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:10:49.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:10:49.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:10:49.994 [DEBUG] [Thread-204806] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:11:00.283 [DEBUG] [Thread-204809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:15.337 [DEBUG] [Thread-204810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:20.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:11:20.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:11: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
2026-02-15T13:11:22.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 10, 53), 24.26, 19.59, 0.0, 28.71, 21.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:11:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:10:53
2026-02-15T13:11:22.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:11:22.643 [DEBUG] [Thread-204811] [transport.py] [_log()] starting thread (client mode): 0xa2d03460
2026-02-15T13:11:22.643 [DEBUG] [Thread-204811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:11:22.664 [DEBUG] [Thread-204811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:11:22.664 [INFO] [Thread-204811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] client lang: <none>
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] server lang: <none>
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] kex follows: False
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:11:22.667 [DEBUG] [Thread-204811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:11:22.668 [DEBUG] [Thread-204811] [transport.py] [_log()] Compression: none
2026-02-15T13:11:22.668 [DEBUG] [Thread-204811] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:11:22.687 [DEBUG] [Thread-204811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:11:22.688 [DEBUG] [Thread-204811] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:11:22.688 [DEBUG] [Thread-204811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:11:22.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:11:22.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:11:22.729 [DEBUG] [Thread-204811] [transport.py] [_log()] userauth is OK
2026-02-15T13:11:22.730 [DEBUG] [Thread-204811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:11:22.730 [DEBUG] [Thread-204811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:11:22.730 [DEBUG] [Thread-204811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:11:22.730 [DEBUG] [Thread-204811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:11:22.750 [INFO] [Thread-204811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:11:22.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:11:23.370 [DEBUG] [Thread-204811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:11:23.370 [DEBUG] [Thread-204811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:11:23.371 [DEBUG] [Thread-204811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:11:23.411 [DEBUG] [Thread-204811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:11:23.411 [DEBUG] [Thread-204811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:11:23.414 [DEBUG] [Thread-204811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:11:23.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:11:23.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:11:23.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:11:23.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:11:23.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:11:23.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:11:23.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:11:23.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:11:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:11:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.465723 -999.00  +21.60  22.10     26   +1.40 1 1 1 1 1   888    0 19.40 -31.43 ----- 22.1 22.1 138.0 37.4 28.8 -28.8 28.2 -28.9 28.4 -27.3 29.2 -29.7
2026-02-15T13:11:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:11:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:11:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.465723
2026-02-15T13:11:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:11:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:11:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:11:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:11:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:11:23.439 [DEBUG] [Thread-204811] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:11:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:10:53', tmtdew=24.26, humidity=19.59, cloud=0.0, wind=28.71, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:10:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:11:23.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:11:23.534 [DEBUG] [Thread-204814] [transport.py] [_log()] starting thread (client mode): 0xa2d6ae00
2026-02-15T13:11:23.534 [DEBUG] [Thread-204814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:11:23.548 [DEBUG] [Thread-204814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:11:23.548 [INFO] [Thread-204814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:11:23.556 [DEBUG] [Thread-204814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] client lang: <none>
2026-02-15T13:11:23.557 [DEBUG] [Thread-204814] [transport.py] [_log()] server lang: <none>
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] kex follows: False
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:11:23.558 [DEBUG] [Thread-204814] [transport.py] [_log()] Compression: none
2026-02-15T13:11:23.559 [DEBUG] [Thread-204814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:11:23.619 [DEBUG] [Thread-204814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:11:23.620 [DEBUG] [Thread-204814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:11:23.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:11:23.621 [DEBUG] [Thread-204814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:11:23.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:11:23.676 [DEBUG] [Thread-204814] [transport.py] [_log()] userauth is OK
2026-02-15T13:11:23.677 [DEBUG] [Thread-204814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:11:23.677 [DEBUG] [Thread-204814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:11:23.677 [DEBUG] [Thread-204814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:11:23.677 [DEBUG] [Thread-204814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:11:23.700 [INFO] [Thread-204814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:11:23.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:11:23.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:11:24.514 [DEBUG] [Thread-204814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:11:24.514 [DEBUG] [Thread-204814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:11:24.563 [DEBUG] [Thread-204814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:11:24.564 [DEBUG] [Thread-204814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:11:24.573 [DEBUG] [Thread-204814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:11:24.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:11: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')
2026-02-15T13:11:24.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:11:24.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:11:24.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:11:24.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:11:24.607 [DEBUG] [Thread-204814] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:11:30.377 [DEBUG] [Thread-204816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:30.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:30.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:45.431 [DEBUG] [Thread-204817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:49.173 [DEBUG] [Thread-204818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:11:54.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:11:54.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:11:54.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:11:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 11, 30), 23.72, 20.25, 0.0, 25.07, 21.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:11:56.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:11:30
2026-02-15T13:11:57.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:11:57.227 [DEBUG] [Thread-204819] [transport.py] [_log()] starting thread (client mode): 0xa5743a60
2026-02-15T13:11:57.227 [DEBUG] [Thread-204819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:11:57.246 [DEBUG] [Thread-204819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:11:57.246 [INFO] [Thread-204819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:11:57.248 [DEBUG] [Thread-204819] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:11:57.248 [DEBUG] [Thread-204819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:11:57.248 [DEBUG] [Thread-204819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:11:57.248 [DEBUG] [Thread-204819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] client lang: <none>
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] server lang: <none>
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] kex follows: False
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] Compression: none
2026-02-15T13:11:57.249 [DEBUG] [Thread-204819] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:11:57.265 [DEBUG] [Thread-204819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:11:57.265 [DEBUG] [Thread-204819] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:11:57.266 [DEBUG] [Thread-204819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:11:57.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:11:57.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:11:57.268 [DEBUG] [Thread-204819] [transport.py] [_log()] userauth is OK
2026-02-15T13:11:57.268 [DEBUG] [Thread-204819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:11:57.268 [DEBUG] [Thread-204819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:11:57.268 [DEBUG] [Thread-204819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:11:57.268 [DEBUG] [Thread-204819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:11:57.293 [INFO] [Thread-204819] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:11:57.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:11:57.895 [DEBUG] [Thread-204819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:11:57.895 [DEBUG] [Thread-204819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:11:57.896 [DEBUG] [Thread-204819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:11:57.936 [DEBUG] [Thread-204819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:11:57.936 [DEBUG] [Thread-204819] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:11:57.939 [DEBUG] [Thread-204819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:11:57.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:11:57.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:11:57.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:11:57.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:11:57.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:11:57.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:11:57.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:11:57.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:11:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:11:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.466070 -999.00  +21.20  16.57     26   +1.20 1 1 1 1 1   888    0 19.92 -20.98 ----- 16.6 16.6 115.4 26.6 28.8 -28.1 28.1 -28.5 28.3 -26.7 29.2 -28.2
2026-02-15T13:11:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:11:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:11:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.466070
2026-02-15T13:11:57.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:11:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:11:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:11:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:11:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:11:57.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:11:30', tmtdew=23.72, humidity=20.25, cloud=0.0, wind=25.07, temperature=21.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:11:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:11:57.963 [DEBUG] [Thread-204819] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:11:58.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:11:58.061 [DEBUG] [Thread-204822] [transport.py] [_log()] starting thread (client mode): 0xa2db4940
2026-02-15T13:11:58.062 [DEBUG] [Thread-204822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:11:58.078 [DEBUG] [Thread-204822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:11:58.078 [INFO] [Thread-204822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:58.086 [DEBUG] [Thread-204822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] client lang: <none>
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] server lang: <none>
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] kex follows: False
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:11:58.087 [DEBUG] [Thread-204822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:11:58.088 [DEBUG] [Thread-204822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:11:58.088 [DEBUG] [Thread-204822] [transport.py] [_log()] Compression: none
2026-02-15T13:11:58.088 [DEBUG] [Thread-204822] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:11:58.145 [DEBUG] [Thread-204822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:11:58.146 [DEBUG] [Thread-204822] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:11:58.146 [DEBUG] [Thread-204822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:11:58.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:11:58.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:11:58.203 [DEBUG] [Thread-204822] [transport.py] [_log()] userauth is OK
2026-02-15T13:11:58.203 [DEBUG] [Thread-204822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:11:58.203 [DEBUG] [Thread-204822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:11:58.203 [DEBUG] [Thread-204822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:11:58.204 [DEBUG] [Thread-204822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:11:58.225 [INFO] [Thread-204822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:11:58.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:11:58.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:11:59.035 [DEBUG] [Thread-204822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:11:59.035 [DEBUG] [Thread-204822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:11:59.084 [DEBUG] [Thread-204822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:11:59.085 [DEBUG] [Thread-204822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:11:59.096 [DEBUG] [Thread-204822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:11:59.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:11:59.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:11:59.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:11:59.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:11:59.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:11:59.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:11:59.129 [DEBUG] [Thread-204822] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:12:00.468 [DEBUG] [Thread-204824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:12:15.528 [DEBUG] [Thread-204825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:12:29.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:12:29.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:12:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:12:30.565 [DEBUG] [Thread-204826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:12:30.793 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:12:30.794 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:12:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 12, 5), 24.13, 19.74, 0.0, 23.42, 21.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:12:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:12:05
2026-02-15T13:12:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:12:31.488 [DEBUG] [Thread-204827] [transport.py] [_log()] starting thread (client mode): 0xa57423b0
2026-02-15T13:12:31.488 [DEBUG] [Thread-204827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:12:31.507 [DEBUG] [Thread-204827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:12:31.507 [INFO] [Thread-204827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:12:31.512 [DEBUG] [Thread-204827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] client lang: <none>
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] server lang: <none>
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] kex follows: False
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] Compression: none
2026-02-15T13:12:31.513 [DEBUG] [Thread-204827] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:12:31.534 [DEBUG] [Thread-204827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:12:31.534 [DEBUG] [Thread-204827] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:12:31.535 [DEBUG] [Thread-204827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:12:31.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:12:31.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:12:31.540 [DEBUG] [Thread-204827] [transport.py] [_log()] userauth is OK
2026-02-15T13:12:31.541 [DEBUG] [Thread-204827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:12:31.541 [DEBUG] [Thread-204827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:12:31.541 [DEBUG] [Thread-204827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:12:31.541 [DEBUG] [Thread-204827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:12:31.565 [INFO] [Thread-204827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:12:31.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:12:32.175 [DEBUG] [Thread-204827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:12:32.176 [DEBUG] [Thread-204827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:12:32.176 [DEBUG] [Thread-204827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:12:32.217 [DEBUG] [Thread-204827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:12:32.217 [DEBUG] [Thread-204827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:12:32.221 [DEBUG] [Thread-204827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:12:32.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:12:32.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:12:32.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:12:32.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:12:32.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:12:32.246 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:12:32.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:12:32.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:12:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:12:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.466417 -999.00  +21.20  20.48     27   +1.50 1 1 1 1 1   888    0 19.91 -16.33 ----- 20.5 20.5 152.4 26.1 28.8 -28.1 28.2 -27.9 28.4 -26.4 29.3 -28.6
2026-02-15T13:12:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:12:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:12:32.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.466417
2026-02-15T13:12:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:12:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:12:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:12:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:12:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:12:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:12:05', tmtdew=24.13, humidity=19.74, cloud=0.0, wind=23.42, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:11:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:12:32.251 [DEBUG] [Thread-204827] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:12:32.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:12:32.345 [DEBUG] [Thread-204830] [transport.py] [_log()] starting thread (client mode): 0xa57406a0
2026-02-15T13:12:32.346 [DEBUG] [Thread-204830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:12:32.363 [DEBUG] [Thread-204830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:12:32.363 [INFO] [Thread-204830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:12:32.377 [DEBUG] [Thread-204830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] client lang: <none>
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] server lang: <none>
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] kex follows: False
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] Compression: none
2026-02-15T13:12:32.378 [DEBUG] [Thread-204830] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:12:32.434 [DEBUG] [Thread-204830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:12:32.434 [DEBUG] [Thread-204830] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:12:32.435 [DEBUG] [Thread-204830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:12:32.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:12:32.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:12:32.491 [DEBUG] [Thread-204830] [transport.py] [_log()] userauth is OK
2026-02-15T13:12:32.492 [DEBUG] [Thread-204830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:12:32.492 [DEBUG] [Thread-204830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:12:32.492 [DEBUG] [Thread-204830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:12:32.492 [DEBUG] [Thread-204830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:12:32.511 [INFO] [Thread-204830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:12:32.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:12:32.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:12:33.304 [DEBUG] [Thread-204830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:12:33.305 [DEBUG] [Thread-204830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:12:33.353 [DEBUG] [Thread-204830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:12:33.353 [DEBUG] [Thread-204830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:12:33.361 [DEBUG] [Thread-204830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:12:33.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:12:33.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:12:33.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:12:33.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:12:33.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:12:33.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:12:33.395 [DEBUG] [Thread-204830] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:12:45.603 [DEBUG] [Thread-204832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:12:49.218 [DEBUG] [Thread-204833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:00.654 [DEBUG] [Thread-204834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:03.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:13:03.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:13:03.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:13:05.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 12, 40), 24.96, 18.71, 0.0, 19.34, 22.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:13:05.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:12:40
2026-02-15T13:13:05.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:13:05.845 [DEBUG] [Thread-204835] [transport.py] [_log()] starting thread (client mode): 0xa2db78e0
2026-02-15T13:13:05.845 [DEBUG] [Thread-204835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:13:05.867 [DEBUG] [Thread-204835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:13:05.867 [INFO] [Thread-204835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:13:05.870 [DEBUG] [Thread-204835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:13:05.870 [DEBUG] [Thread-204835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:13:05.870 [DEBUG] [Thread-204835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:13:05.870 [DEBUG] [Thread-204835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:05.870 [DEBUG] [Thread-204835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:05.870 [DEBUG] [Thread-204835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] client lang: <none>
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] server lang: <none>
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] kex follows: False
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] Compression: none
2026-02-15T13:13:05.871 [DEBUG] [Thread-204835] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:13:05.888 [DEBUG] [Thread-204835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:13:05.888 [DEBUG] [Thread-204835] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:13:05.889 [DEBUG] [Thread-204835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:13:05.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:13:05.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:13:05.894 [DEBUG] [Thread-204835] [transport.py] [_log()] userauth is OK
2026-02-15T13:13:05.895 [DEBUG] [Thread-204835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:13:05.895 [DEBUG] [Thread-204835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:13:05.895 [DEBUG] [Thread-204835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:13:05.895 [DEBUG] [Thread-204835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:13:05.920 [INFO] [Thread-204835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:13:05.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:13:06.540 [DEBUG] [Thread-204835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:13:06.541 [DEBUG] [Thread-204835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:13:06.541 [DEBUG] [Thread-204835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:13:06.581 [DEBUG] [Thread-204835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:13:06.582 [DEBUG] [Thread-204835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:13:06.585 [DEBUG] [Thread-204835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:13:06.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:13:06.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:13:06.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:13:06.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:13:06.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:13:06.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:13:06.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:13:06.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:13:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:13:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.466764 -999.00  +21.40  20.94     26   +1.20 1 1 1 1 1   888    0 20.24 -10.13 ----- 20.9 20.9 143.2 30.5 28.8 -29.0 28.1 -28.3 28.3 -27.4 29.2 -27.4
2026-02-15T13:13:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:13:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:13:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.466764
2026-02-15T13:13:06.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:13:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:13:06.611 [DEBUG] [Thread-204835] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:13:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:13:06.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:13:06.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:13:06.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:12:40', tmtdew=24.96, humidity=18.71, cloud=0.0, wind=19.34, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:12:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:13:06.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:13:06.705 [DEBUG] [Thread-204838] [transport.py] [_log()] starting thread (client mode): 0xa2db6890
2026-02-15T13:13:06.705 [DEBUG] [Thread-204838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:13:06.720 [DEBUG] [Thread-204838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:13:06.720 [INFO] [Thread-204838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:06.728 [DEBUG] [Thread-204838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] client lang: <none>
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] server lang: <none>
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] kex follows: False
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] Compression: none
2026-02-15T13:13:06.729 [DEBUG] [Thread-204838] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:13:06.787 [DEBUG] [Thread-204838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:13:06.788 [DEBUG] [Thread-204838] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:13:06.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:13:06.789 [DEBUG] [Thread-204838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:13:06.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:13:06.844 [DEBUG] [Thread-204838] [transport.py] [_log()] userauth is OK
2026-02-15T13:13:06.844 [DEBUG] [Thread-204838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:13:06.844 [DEBUG] [Thread-204838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:13:06.844 [DEBUG] [Thread-204838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:13:06.844 [DEBUG] [Thread-204838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:13:06.864 [INFO] [Thread-204838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:13:06.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:13:06.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:13:07.708 [DEBUG] [Thread-204838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:13:07.709 [DEBUG] [Thread-204838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:13:07.761 [DEBUG] [Thread-204838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:13:07.762 [DEBUG] [Thread-204838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:13:07.772 [DEBUG] [Thread-204838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:13:07.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:13:07.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:13:07.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:13:07.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:13:07.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:13:07.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:13:07.813 [DEBUG] [Thread-204838] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:13:15.692 [DEBUG] [Thread-204840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:30.746 [DEBUG] [Thread-204841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:30.937 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:30.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:37.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:13:37.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:13:37.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:13:39.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 13, 15), 23.55, 20.51, 0.0, 18.21, 21.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:13:39.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:13:15
2026-02-15T13:13:40.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:13:40.169 [DEBUG] [Thread-204842] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-15T13:13:40.169 [DEBUG] [Thread-204842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:13:40.189 [DEBUG] [Thread-204842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:13:40.189 [INFO] [Thread-204842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] client lang: <none>
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] server lang: <none>
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] kex follows: False
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] Compression: none
2026-02-15T13:13:40.193 [DEBUG] [Thread-204842] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:13:40.212 [DEBUG] [Thread-204842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:13:40.212 [DEBUG] [Thread-204842] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:13:40.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:13:40.213 [DEBUG] [Thread-204842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:13:40.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:13:40.215 [DEBUG] [Thread-204842] [transport.py] [_log()] userauth is OK
2026-02-15T13:13:40.216 [DEBUG] [Thread-204842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:13:40.216 [DEBUG] [Thread-204842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:13:40.216 [DEBUG] [Thread-204842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:13:40.216 [DEBUG] [Thread-204842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:13:40.241 [INFO] [Thread-204842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:13:40.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:13:41.004 [DEBUG] [Thread-204842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:13:41.004 [DEBUG] [Thread-204842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:13:41.004 [DEBUG] [Thread-204842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:13:41.045 [DEBUG] [Thread-204842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:13:41.046 [DEBUG] [Thread-204842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:13:41.048 [DEBUG] [Thread-204842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:13:41.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:13:41.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:13:41.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:13:41.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:13:41.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:13:41.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:13:41.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:13:41.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:13:41.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:13:41.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.467111 -999.00  +21.20  17.63     25   +0.80 1 1 1 1 1   888    0 19.89 -4.15 ----- 17.6 17.6 156.6 24.6 28.8 -28.5 28.1 -28.7 28.3 -27.4 29.2 -29.4
2026-02-15T13:13:41.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:13:41.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:13:41.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.467111
2026-02-15T13:13:41.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:13:41.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:13:41.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:13:41.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:13:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:13:41.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:13:15', tmtdew=23.55, humidity=20.51, cloud=0.0, wind=18.21, temperature=21.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:12:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:13:41.067 [DEBUG] [Thread-204842] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:13:41.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:13:41.161 [DEBUG] [Thread-204845] [transport.py] [_log()] starting thread (client mode): 0xa2db4c40
2026-02-15T13:13:41.162 [DEBUG] [Thread-204845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:13:41.180 [DEBUG] [Thread-204845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:13:41.180 [INFO] [Thread-204845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:13:41.188 [DEBUG] [Thread-204845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:13:41.189 [DEBUG] [Thread-204845] [transport.py] [_log()] client lang: <none>
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] server lang: <none>
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] kex follows: False
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:13:41.190 [DEBUG] [Thread-204845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:13:41.191 [DEBUG] [Thread-204845] [transport.py] [_log()] Compression: none
2026-02-15T13:13:41.191 [DEBUG] [Thread-204845] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:13:41.248 [DEBUG] [Thread-204845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:13:41.249 [DEBUG] [Thread-204845] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:13:41.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:13:41.250 [DEBUG] [Thread-204845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:13:41.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:13:41.307 [DEBUG] [Thread-204845] [transport.py] [_log()] userauth is OK
2026-02-15T13:13:41.307 [DEBUG] [Thread-204845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:13:41.308 [DEBUG] [Thread-204845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:13:41.308 [DEBUG] [Thread-204845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:13:41.308 [DEBUG] [Thread-204845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:13:41.327 [INFO] [Thread-204845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:13:41.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:13:41.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:13:42.105 [DEBUG] [Thread-204845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:13:42.105 [DEBUG] [Thread-204845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:13:42.153 [DEBUG] [Thread-204845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:13:42.153 [DEBUG] [Thread-204845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:13:42.163 [DEBUG] [Thread-204845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:13:42.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:13:42.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:13:42.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:13:42.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:13:42.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:13:42.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:13:42.201 [DEBUG] [Thread-204845] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:13:45.785 [DEBUG] [Thread-204847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:13:49.263 [DEBUG] [Thread-204848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:00.843 [DEBUG] [Thread-204849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:14:12.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:14:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:14:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 13, 51), 23.2, 20.92, 0.0, 14.52, 21.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:14:14.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:13:51
2026-02-15T13:14:14.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:14:15.038 [DEBUG] [Thread-204850] [transport.py] [_log()] starting thread (client mode): 0xa2db6020
2026-02-15T13:14:15.038 [DEBUG] [Thread-204850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:14:15.058 [DEBUG] [Thread-204850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:14:15.058 [INFO] [Thread-204850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] client lang: <none>
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] server lang: <none>
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] kex follows: False
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:14:15.060 [DEBUG] [Thread-204850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:14:15.061 [DEBUG] [Thread-204850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:14:15.061 [DEBUG] [Thread-204850] [transport.py] [_log()] Compression: none
2026-02-15T13:14:15.061 [DEBUG] [Thread-204850] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:14:15.074 [DEBUG] [Thread-204850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:14:15.074 [DEBUG] [Thread-204850] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:14:15.075 [DEBUG] [Thread-204850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:14:15.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:14:15.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:14:15.077 [DEBUG] [Thread-204850] [transport.py] [_log()] userauth is OK
2026-02-15T13:14:15.077 [DEBUG] [Thread-204850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:14:15.077 [DEBUG] [Thread-204850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:14:15.077 [DEBUG] [Thread-204850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:14:15.077 [DEBUG] [Thread-204850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:14:15.102 [INFO] [Thread-204850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:14:15.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:14:15.701 [DEBUG] [Thread-204850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:14:15.701 [DEBUG] [Thread-204850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:14:15.701 [DEBUG] [Thread-204850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:14:15.742 [DEBUG] [Thread-204850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:14:15.742 [DEBUG] [Thread-204850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:14:15.745 [DEBUG] [Thread-204850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:14:15.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:14:15.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:14:15.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:14:15.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:14:15.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:14:15.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:14:15.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:14:15.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:14:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:14:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.468153 -999.00  +21.40  13.91     26   +1.10 1 1 1 1 1   888    0 20.47 3.52 ----- 13.9 13.9 148.2 25.5 28.9 -29.1 28.2 -27.9 28.5 -27.0 29.3 -27.9
2026-02-15T13:14:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:14:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:14:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.468153
2026-02-15T13:14:15.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:14:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:14:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:14:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:14:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:14:15.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:13:51', tmtdew=23.2, humidity=20.92, cloud=0.0, wind=14.52, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:14:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:14:15.772 [DEBUG] [Thread-204850] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:14:15.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:14:15.870 [DEBUG] [Thread-204853] [transport.py] [_log()] starting thread (client mode): 0xa2dc0df0
2026-02-15T13:14:15.870 [DEBUG] [Thread-204853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:14:15.873 [DEBUG] [Thread-204854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:15.886 [DEBUG] [Thread-204853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:14:15.886 [INFO] [Thread-204853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:14:15.894 [DEBUG] [Thread-204853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] client lang: <none>
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] server lang: <none>
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] kex follows: False
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:14:15.895 [DEBUG] [Thread-204853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:14:15.896 [DEBUG] [Thread-204853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:14:15.896 [DEBUG] [Thread-204853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:14:15.896 [DEBUG] [Thread-204853] [transport.py] [_log()] Compression: none
2026-02-15T13:14:15.896 [DEBUG] [Thread-204853] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:14:15.957 [DEBUG] [Thread-204853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:14:15.957 [DEBUG] [Thread-204853] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:14:15.958 [DEBUG] [Thread-204853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:14:15.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:14:15.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:14:16.016 [DEBUG] [Thread-204853] [transport.py] [_log()] userauth is OK
2026-02-15T13:14:16.016 [DEBUG] [Thread-204853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:14:16.016 [DEBUG] [Thread-204853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:14:16.016 [DEBUG] [Thread-204853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:14:16.016 [DEBUG] [Thread-204853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:14:16.034 [INFO] [Thread-204853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:14:16.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:14:16.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:14:16.890 [DEBUG] [Thread-204853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:14:16.890 [DEBUG] [Thread-204853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:14:16.937 [DEBUG] [Thread-204853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:14:16.938 [DEBUG] [Thread-204853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:14:16.947 [DEBUG] [Thread-204853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:14:16.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:14:16.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:14:16.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:14:16.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:14:16.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:14:16.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:14:16.985 [DEBUG] [Thread-204853] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:14:30.919 [DEBUG] [Thread-204856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:31.079 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:31.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:45.957 [DEBUG] [Thread-204857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:47.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:14:47.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:14:47.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:14:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 14, 27), 23.16, 21.0, 0.0, 19.28, 21.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:14:48.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:14:27
2026-02-15T13:14:49.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:14:49.308 [DEBUG] [Thread-204858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:14:49.442 [DEBUG] [Thread-204859] [transport.py] [_log()] starting thread (client mode): 0xa5740c40
2026-02-15T13:14:49.442 [DEBUG] [Thread-204859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:14:49.463 [DEBUG] [Thread-204859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:14:49.463 [INFO] [Thread-204859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] client lang: <none>
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] server lang: <none>
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] kex follows: False
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] Compression: none
2026-02-15T13:14:49.465 [DEBUG] [Thread-204859] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:14:49.474 [DEBUG] [Thread-204859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:14:49.474 [DEBUG] [Thread-204859] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:14:49.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:14:49.475 [DEBUG] [Thread-204859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:14:49.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:14:49.475 [DEBUG] [Thread-204859] [transport.py] [_log()] userauth is OK
2026-02-15T13:14:49.475 [DEBUG] [Thread-204859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:14:49.475 [DEBUG] [Thread-204859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:14:49.475 [DEBUG] [Thread-204859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:14:49.476 [DEBUG] [Thread-204859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:14:49.489 [INFO] [Thread-204859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:14:49.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:14:50.112 [DEBUG] [Thread-204859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:14:50.113 [DEBUG] [Thread-204859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:14:50.113 [DEBUG] [Thread-204859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:14:50.153 [DEBUG] [Thread-204859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:14:50.154 [DEBUG] [Thread-204859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:14:50.157 [DEBUG] [Thread-204859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:14:50.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:14:50.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:14:50.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:14:50.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:14:50.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:14:50.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:14:50.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:14:50.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:14:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:14:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.468500 -999.00  +21.50  19.16     26   +1.20 1 1 1 1 1   888    0 20.37 5.37 ----- 19.2 19.2 132.8 30.5 28.9 -28.7 28.2 -28.2 28.5 -26.0 29.3 -27.5
2026-02-15T13:14:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:14:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:14:50.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.468500
2026-02-15T13:14:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:14:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:14:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:14:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:14:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:14:50.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:14:27', tmtdew=23.16, humidity=21.0, cloud=0.0, wind=19.28, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:14:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:14:50.182 [DEBUG] [Thread-204859] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:14:50.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:14:50.274 [DEBUG] [Thread-204862] [transport.py] [_log()] starting thread (client mode): 0xa5742da0
2026-02-15T13:14:50.275 [DEBUG] [Thread-204862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:14:50.289 [DEBUG] [Thread-204862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:14:50.290 [INFO] [Thread-204862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:14:50.297 [DEBUG] [Thread-204862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:14:50.297 [DEBUG] [Thread-204862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:14:50.297 [DEBUG] [Thread-204862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] client lang: <none>
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] server lang: <none>
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] kex follows: False
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] Compression: none
2026-02-15T13:14:50.298 [DEBUG] [Thread-204862] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:14:50.359 [DEBUG] [Thread-204862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:14:50.360 [DEBUG] [Thread-204862] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:14:50.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:14:50.361 [DEBUG] [Thread-204862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:14:50.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:14:50.421 [DEBUG] [Thread-204862] [transport.py] [_log()] userauth is OK
2026-02-15T13:14:50.421 [DEBUG] [Thread-204862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:14:50.421 [DEBUG] [Thread-204862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:14:50.421 [DEBUG] [Thread-204862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:14:50.422 [DEBUG] [Thread-204862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:14:50.440 [INFO] [Thread-204862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:14:50.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:14:50.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:14:51.285 [DEBUG] [Thread-204862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:14:51.285 [DEBUG] [Thread-204862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:14:51.333 [DEBUG] [Thread-204862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:14:51.334 [DEBUG] [Thread-204862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:14:51.343 [DEBUG] [Thread-204862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:14:51.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:14:51.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:14:51.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:14:51.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:14:51.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:14:51.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:14:51.385 [DEBUG] [Thread-204862] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:15:00.993 [DEBUG] [Thread-204864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:16.047 [DEBUG] [Thread-204865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:21.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:15:21.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:15:21.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:15:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 15, 3), 23.15, 21.02, 0.0, 17.49, 21.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:15:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:15:03
2026-02-15T13:15:23.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:15:23.784 [DEBUG] [Thread-204866] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-15T13:15:23.784 [DEBUG] [Thread-204866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:15:23.803 [DEBUG] [Thread-204866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:15:23.804 [INFO] [Thread-204866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:15:23.806 [DEBUG] [Thread-204866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] client lang: <none>
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] server lang: <none>
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] kex follows: False
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] Compression: none
2026-02-15T13:15:23.807 [DEBUG] [Thread-204866] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:15:23.824 [DEBUG] [Thread-204866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:15:23.825 [DEBUG] [Thread-204866] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:15:23.825 [DEBUG] [Thread-204866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:15:23.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:15:23.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:15:23.827 [DEBUG] [Thread-204866] [transport.py] [_log()] userauth is OK
2026-02-15T13:15:23.828 [DEBUG] [Thread-204866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:15:23.828 [DEBUG] [Thread-204866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:15:23.828 [DEBUG] [Thread-204866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:15:23.828 [DEBUG] [Thread-204866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:15:23.852 [INFO] [Thread-204866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:15:23.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:15:26.598 [DEBUG] [Thread-204866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:15:26.598 [DEBUG] [Thread-204866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:15:26.599 [DEBUG] [Thread-204866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:15:26.639 [DEBUG] [Thread-204866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:15:26.640 [DEBUG] [Thread-204866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:15:26.643 [DEBUG] [Thread-204866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:15:26.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:15:26.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:15:26.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:15:26.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:15:26.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:15:26.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:15:26.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:15:26.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:15:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:15:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.468500 -999.00  +21.50  19.16     26   +1.20 1 1 1 1 1   888    0 20.37 5.37 ----- 19.2 19.2 132.8 30.5 28.9 -28.7 28.2 -28.2 28.5 -26.0 29.3 -27.5
2026-02-15T13:15:26.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:15:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:15:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.468500
2026-02-15T13:15:26.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:15:26.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:15:26.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:15:26.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:15:26.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:15:26.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:15:03', tmtdew=23.15, humidity=21.02, cloud=0.0, wind=17.49, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:14:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:15:26.742 [DEBUG] [Thread-204866] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:15:26.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:15:26.840 [DEBUG] [Thread-204869] [transport.py] [_log()] starting thread (client mode): 0xa2db63b0
2026-02-15T13:15:26.840 [DEBUG] [Thread-204869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:15:26.855 [DEBUG] [Thread-204869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:15:26.855 [INFO] [Thread-204869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:15:26.862 [DEBUG] [Thread-204869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] client lang: <none>
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] server lang: <none>
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] kex follows: False
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:15:26.863 [DEBUG] [Thread-204869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:15:26.864 [DEBUG] [Thread-204869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:15:26.864 [DEBUG] [Thread-204869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:15:26.864 [DEBUG] [Thread-204869] [transport.py] [_log()] Compression: none
2026-02-15T13:15:26.864 [DEBUG] [Thread-204869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:15:26.923 [DEBUG] [Thread-204869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:15:26.924 [DEBUG] [Thread-204869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:15:26.924 [DEBUG] [Thread-204869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:15:26.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:15:26.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:15:26.981 [DEBUG] [Thread-204869] [transport.py] [_log()] userauth is OK
2026-02-15T13:15:26.981 [DEBUG] [Thread-204869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:15:26.981 [DEBUG] [Thread-204869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:15:26.981 [DEBUG] [Thread-204869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:15:26.981 [DEBUG] [Thread-204869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:15:27.000 [INFO] [Thread-204869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:15:27.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:15:27.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:15:27.874 [DEBUG] [Thread-204869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:15:27.874 [DEBUG] [Thread-204869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:15:27.926 [DEBUG] [Thread-204869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:15:27.926 [DEBUG] [Thread-204869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:15:27.936 [DEBUG] [Thread-204869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:15:27.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:15:27.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:15:27.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:15:27.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:15:27.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:15:27.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:15:27.974 [DEBUG] [Thread-204869] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:15:31.082 [DEBUG] [Thread-204871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:31.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:31.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:46.128 [DEBUG] [Thread-204872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:49.336 [DEBUG] [Thread-204873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:15:57.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:15:57.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:15:58.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:16:00.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 15, 39), 23.68, 20.47, 0.0, 19.97, 22.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:16:00.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:15:39
2026-02-15T13:16:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:16:00.659 [DEBUG] [Thread-204874] [transport.py] [_log()] starting thread (client mode): 0xa5741600
2026-02-15T13:16:00.659 [DEBUG] [Thread-204874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:16:00.672 [DEBUG] [Thread-204874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:16:00.672 [INFO] [Thread-204874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] client lang: <none>
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] server lang: <none>
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] kex follows: False
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] Compression: none
2026-02-15T13:16:00.675 [DEBUG] [Thread-204874] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:16:00.683 [DEBUG] [Thread-204874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:16:00.684 [DEBUG] [Thread-204874] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:16:00.684 [DEBUG] [Thread-204874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:16:00.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:16:00.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:16:00.685 [DEBUG] [Thread-204874] [transport.py] [_log()] userauth is OK
2026-02-15T13:16:00.686 [DEBUG] [Thread-204874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:16:00.686 [DEBUG] [Thread-204874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:16:00.686 [DEBUG] [Thread-204874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:16:00.686 [DEBUG] [Thread-204874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:16:00.702 [INFO] [Thread-204874] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:16:00.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:16:01.165 [DEBUG] [Thread-204876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:16:01.254 [DEBUG] [Thread-204874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:16:01.254 [DEBUG] [Thread-204874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:16:01.254 [DEBUG] [Thread-204874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:16:01.294 [DEBUG] [Thread-204874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:16:01.294 [DEBUG] [Thread-204874] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:16:01.297 [DEBUG] [Thread-204874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:16:01.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:16:01.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:16:01.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:16:01.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:16:01.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:16:01.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:16:01.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:16:01.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:16:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:16:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.469195 -999.00  +20.90  14.98     27   +1.30 1 1 1 1 1   888    0 20.33 6.89 ----- 15.0 15.0 112.0 21.5 28.6 -29.8 28.2 -28.0 28.4 -27.1 29.4 -28.4
2026-02-15T13:16:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:16:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:16:01.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.469195
2026-02-15T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:16:01.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:16:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:15:39', tmtdew=23.68, humidity=20.47, cloud=0.0, wind=19.97, temperature=22.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:15:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:16:01.322 [DEBUG] [Thread-204874] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:16:01.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:16:01.424 [DEBUG] [Thread-204878] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-15T13:16:01.424 [DEBUG] [Thread-204878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:16:01.441 [DEBUG] [Thread-204878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:16:01.442 [INFO] [Thread-204878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:16:01.453 [DEBUG] [Thread-204878] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:16:01.453 [DEBUG] [Thread-204878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:16:01.453 [DEBUG] [Thread-204878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:16:01.454 [DEBUG] [Thread-204878] [transport.py] [_log()] client lang: <none>
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] server lang: <none>
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] kex follows: False
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:16:01.455 [DEBUG] [Thread-204878] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:16:01.456 [DEBUG] [Thread-204878] [transport.py] [_log()] Compression: none
2026-02-15T13:16:01.456 [DEBUG] [Thread-204878] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:16:01.513 [DEBUG] [Thread-204878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:16:01.513 [DEBUG] [Thread-204878] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:16:01.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:16:01.513 [DEBUG] [Thread-204878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:16:01.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:16:01.580 [DEBUG] [Thread-204878] [transport.py] [_log()] userauth is OK
2026-02-15T13:16:01.580 [DEBUG] [Thread-204878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:16:01.580 [DEBUG] [Thread-204878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:16:01.580 [DEBUG] [Thread-204878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:16:01.580 [DEBUG] [Thread-204878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:16:01.612 [INFO] [Thread-204878] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:16:01.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:16:01.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:16:02.464 [DEBUG] [Thread-204878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:16:02.464 [DEBUG] [Thread-204878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:16:02.516 [DEBUG] [Thread-204878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:16:02.517 [DEBUG] [Thread-204878] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:16:02.534 [DEBUG] [Thread-204878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:16:02.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:16:02.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:16:02.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:16:02.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:16:02.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:16:02.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:16:02.603 [DEBUG] [Thread-204878] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:16:16.204 [DEBUG] [Thread-204880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:16:31.258 [DEBUG] [Thread-204881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:16:31.363 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:16:31.364 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:16:32.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:16:32.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:16: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
2026-02-15T13:16:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 16, 15), 23.24, 20.8, 0.0, 17.08, 21.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:16:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:16:15
2026-02-15T13:16:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:16:35.852 [DEBUG] [Thread-204882] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T13:16:35.852 [DEBUG] [Thread-204882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:16:35.872 [DEBUG] [Thread-204882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:16:35.872 [INFO] [Thread-204882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] client lang: <none>
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] server lang: <none>
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] kex follows: False
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] Compression: none
2026-02-15T13:16:35.874 [DEBUG] [Thread-204882] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:16:35.882 [DEBUG] [Thread-204882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:16:35.883 [DEBUG] [Thread-204882] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:16:35.883 [DEBUG] [Thread-204882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:16:35.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:16:35.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:16:35.884 [DEBUG] [Thread-204882] [transport.py] [_log()] userauth is OK
2026-02-15T13:16:35.885 [DEBUG] [Thread-204882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:16:35.885 [DEBUG] [Thread-204882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:16:35.885 [DEBUG] [Thread-204882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:16:35.885 [DEBUG] [Thread-204882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:16:35.903 [INFO] [Thread-204882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:16:35.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:16:36.553 [DEBUG] [Thread-204882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:16:36.554 [DEBUG] [Thread-204882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:16:36.554 [DEBUG] [Thread-204882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:16:36.594 [DEBUG] [Thread-204882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:16:36.595 [DEBUG] [Thread-204882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:16:36.598 [DEBUG] [Thread-204882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:16:36.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:16:36.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:16:36.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:16:36.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:16:36.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:16:36.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:16:36.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:16:36.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:16:36.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:16:36.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.469542 -999.00  +21.20  12.70     27   +1.50 1 1 1 1 1   888    0 20.37 4.88 ----- 12.7 12.7 135.8 15.4 28.8 -27.6 28.3 -27.6 28.6 -27.1 29.4 -27.3
2026-02-15T13:16:36.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:16:36.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:16:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.469542
2026-02-15T13:16:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:16:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:16:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:16:36.626 [DEBUG] [Thread-204882] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:16:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:16:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:16:36.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:16:15', tmtdew=23.24, humidity=20.8, cloud=0.0, wind=17.08, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:16:08.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:16:36.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:16:36.722 [DEBUG] [Thread-204885] [transport.py] [_log()] starting thread (client mode): 0xa57405e0
2026-02-15T13:16:36.722 [DEBUG] [Thread-204885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:16:36.741 [DEBUG] [Thread-204885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:16:36.742 [INFO] [Thread-204885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:16:36.749 [DEBUG] [Thread-204885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] client lang: <none>
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] server lang: <none>
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] kex follows: False
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:16:36.750 [DEBUG] [Thread-204885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:16:36.751 [DEBUG] [Thread-204885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:16:36.751 [DEBUG] [Thread-204885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:16:36.751 [DEBUG] [Thread-204885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:16:36.751 [DEBUG] [Thread-204885] [transport.py] [_log()] Compression: none
2026-02-15T13:16:36.751 [DEBUG] [Thread-204885] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:16:36.809 [DEBUG] [Thread-204885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:16:36.810 [DEBUG] [Thread-204885] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:16:36.810 [DEBUG] [Thread-204885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:16:36.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:16:36.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:16:36.867 [DEBUG] [Thread-204885] [transport.py] [_log()] userauth is OK
2026-02-15T13:16:36.867 [DEBUG] [Thread-204885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:16:36.868 [DEBUG] [Thread-204885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:16:36.868 [DEBUG] [Thread-204885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:16:36.868 [DEBUG] [Thread-204885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:16:36.887 [INFO] [Thread-204885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:16:36.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:16:36.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:16:37.699 [DEBUG] [Thread-204885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:16:37.699 [DEBUG] [Thread-204885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:16:37.747 [DEBUG] [Thread-204885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:16:37.747 [DEBUG] [Thread-204885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:16:37.757 [DEBUG] [Thread-204885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:16:37.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:16:37.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:16:37.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:16:37.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:16:37.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:16:37.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:16:37.793 [DEBUG] [Thread-204885] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:16:46.294 [DEBUG] [Thread-204887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:16:49.383 [DEBUG] [Thread-204888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:01.346 [DEBUG] [Thread-204889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:07.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:17:07.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:17:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:17:09.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 16, 50), 23.01, 21.27, 0.0, 21.35, 21.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:17:09.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:16:50
2026-02-15T13:17:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:17:10.183 [DEBUG] [Thread-204890] [transport.py] [_log()] starting thread (client mode): 0xa81d6740
2026-02-15T13:17:10.183 [DEBUG] [Thread-204890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:17:10.202 [DEBUG] [Thread-204890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:17:10.202 [INFO] [Thread-204890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:17:10.206 [DEBUG] [Thread-204890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] client lang: <none>
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] server lang: <none>
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] kex follows: False
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] Compression: none
2026-02-15T13:17:10.207 [DEBUG] [Thread-204890] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:17:10.225 [DEBUG] [Thread-204890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:17:10.226 [DEBUG] [Thread-204890] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:17:10.226 [DEBUG] [Thread-204890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:17:10.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:17:10.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:17:10.228 [DEBUG] [Thread-204890] [transport.py] [_log()] userauth is OK
2026-02-15T13:17:10.228 [DEBUG] [Thread-204890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:17:10.229 [DEBUG] [Thread-204890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:17:10.229 [DEBUG] [Thread-204890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:17:10.229 [DEBUG] [Thread-204890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:17:10.246 [INFO] [Thread-204890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:17:10.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:17:10.915 [DEBUG] [Thread-204890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:17:10.915 [DEBUG] [Thread-204890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:17:10.916 [DEBUG] [Thread-204890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:17:10.956 [DEBUG] [Thread-204890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:17:10.956 [DEBUG] [Thread-204890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:17:10.959 [DEBUG] [Thread-204890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:17:10.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:17:10.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:17:10.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:17:10.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:17:10.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:17:10.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:17:10.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:17:10.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:17:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:17:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.469889 -999.00  +21.30  13.75     26   +1.40 1 1 1 1 1   888    0 20.17 4.27 ----- 13.8 13.8 142.8 24.9 28.9 -27.2 28.3 -27.3 28.6 -27.2 29.6 -28.2
2026-02-15T13:17:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:17:10.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:17:10.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.469889
2026-02-15T13:17:10.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:17:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:17:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:17:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:17:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:17:10.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:16:50', tmtdew=23.01, humidity=21.27, cloud=0.0, wind=21.35, temperature=21.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:16:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:17:10.983 [DEBUG] [Thread-204890] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:17:11.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:17:11.076 [DEBUG] [Thread-204893] [transport.py] [_log()] starting thread (client mode): 0xa2d69b40
2026-02-15T13:17:11.076 [DEBUG] [Thread-204893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:17:11.090 [DEBUG] [Thread-204893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:17:11.090 [INFO] [Thread-204893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:17:11.103 [DEBUG] [Thread-204893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:17:11.103 [DEBUG] [Thread-204893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:17:11.103 [DEBUG] [Thread-204893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:17:11.103 [DEBUG] [Thread-204893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] client lang: <none>
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] server lang: <none>
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] kex follows: False
2026-02-15T13:17:11.104 [DEBUG] [Thread-204893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:17:11.105 [DEBUG] [Thread-204893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:17:11.105 [DEBUG] [Thread-204893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:17:11.105 [DEBUG] [Thread-204893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:17:11.105 [DEBUG] [Thread-204893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:17:11.105 [DEBUG] [Thread-204893] [transport.py] [_log()] Compression: none
2026-02-15T13:17:11.105 [DEBUG] [Thread-204893] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:17:11.163 [DEBUG] [Thread-204893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:17:11.164 [DEBUG] [Thread-204893] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:17:11.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:17:11.165 [DEBUG] [Thread-204893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:17:11.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:17:11.223 [DEBUG] [Thread-204893] [transport.py] [_log()] userauth is OK
2026-02-15T13:17:11.223 [DEBUG] [Thread-204893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:17:11.224 [DEBUG] [Thread-204893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:17:11.224 [DEBUG] [Thread-204893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:17:11.224 [DEBUG] [Thread-204893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:17:11.243 [INFO] [Thread-204893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:17:11.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:17:11.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:17:12.062 [DEBUG] [Thread-204893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:17:12.063 [DEBUG] [Thread-204893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:17:12.111 [DEBUG] [Thread-204893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:17:12.111 [DEBUG] [Thread-204893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:17:12.122 [DEBUG] [Thread-204893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:17:12.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:17:12.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:17: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') -> 00000000
2026-02-15T13:17:12.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:17:12.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:17:12.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:17:12.171 [DEBUG] [Thread-204893] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:17:16.386 [DEBUG] [Thread-204895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:31.438 [DEBUG] [Thread-204896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:31.509 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:31.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:42.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:17:42.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:17:42.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:17:44.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 17, 25), 23.24, 20.95, 0.0, 21.58, 21.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:17:44.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:17:25
2026-02-15T13:17:44.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:17:44.561 [DEBUG] [Thread-204897] [transport.py] [_log()] starting thread (client mode): 0xa2d6a0b0
2026-02-15T13:17:44.561 [DEBUG] [Thread-204897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:17:44.583 [DEBUG] [Thread-204897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:17:44.583 [INFO] [Thread-204897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:17:44.586 [DEBUG] [Thread-204897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:17:44.586 [DEBUG] [Thread-204897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:17:44.586 [DEBUG] [Thread-204897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:17:44.586 [DEBUG] [Thread-204897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] client lang: <none>
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] server lang: <none>
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] kex follows: False
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] Compression: none
2026-02-15T13:17:44.587 [DEBUG] [Thread-204897] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:17:44.604 [DEBUG] [Thread-204897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:17:44.604 [DEBUG] [Thread-204897] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:17:44.605 [DEBUG] [Thread-204897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:17:44.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:17:44.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:17:44.607 [DEBUG] [Thread-204897] [transport.py] [_log()] userauth is OK
2026-02-15T13:17:44.607 [DEBUG] [Thread-204897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:17:44.607 [DEBUG] [Thread-204897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:17:44.607 [DEBUG] [Thread-204897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:17:44.607 [DEBUG] [Thread-204897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:17:44.633 [INFO] [Thread-204897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:17:44.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:17:45.263 [DEBUG] [Thread-204897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:17:45.264 [DEBUG] [Thread-204897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:17:45.264 [DEBUG] [Thread-204897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:17:45.304 [DEBUG] [Thread-204897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:17:45.304 [DEBUG] [Thread-204897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:17:45.308 [DEBUG] [Thread-204897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:17:45.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:17:45.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:17:45.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:17:45.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:17:45.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:17:45.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:17:45.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:17:45.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:17:45.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:17:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.470236 -999.00  +21.70  15.97     26   +1.70 1 1 1 1 1   888    0 20.17 3.14 ----- 16.0 16.0 140.6 19.3 29.1 -27.8 28.3 -26.3 28.7 -25.9 29.6 -27.0
2026-02-15T13:17:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:17:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:17:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.470236
2026-02-15T13:17:45.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:17:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:17:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:17:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:17:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:17:45.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:17:25', tmtdew=23.24, humidity=20.95, cloud=0.0, wind=21.58, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:17:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:17:45.335 [DEBUG] [Thread-204897] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:17:45.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:17:45.435 [DEBUG] [Thread-204900] [transport.py] [_log()] starting thread (client mode): 0xa81d7130
2026-02-15T13:17:45.435 [DEBUG] [Thread-204900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:17:45.451 [DEBUG] [Thread-204900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:17:45.451 [INFO] [Thread-204900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:17:45.461 [DEBUG] [Thread-204900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:17:45.461 [DEBUG] [Thread-204900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] client lang: <none>
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] server lang: <none>
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] kex follows: False
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:17:45.462 [DEBUG] [Thread-204900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:17:45.463 [DEBUG] [Thread-204900] [transport.py] [_log()] Compression: none
2026-02-15T13:17:45.463 [DEBUG] [Thread-204900] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:17:45.526 [DEBUG] [Thread-204900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:17:45.527 [DEBUG] [Thread-204900] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:17:45.527 [DEBUG] [Thread-204900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:17:45.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:17:45.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:17:45.583 [DEBUG] [Thread-204900] [transport.py] [_log()] userauth is OK
2026-02-15T13:17:45.583 [DEBUG] [Thread-204900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:17:45.583 [DEBUG] [Thread-204900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:17:45.583 [DEBUG] [Thread-204900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:17:45.583 [DEBUG] [Thread-204900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:17:45.602 [INFO] [Thread-204900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:17:45.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:17:45.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:17:46.451 [DEBUG] [Thread-204900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:17:46.452 [DEBUG] [Thread-204900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:17:46.477 [DEBUG] [Thread-204902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:17:46.499 [DEBUG] [Thread-204900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:17:46.499 [DEBUG] [Thread-204900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:17:46.508 [DEBUG] [Thread-204900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:17:46.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:17:46.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:17:46.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:17:46.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:17:46.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:17:46.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:17:46.550 [DEBUG] [Thread-204900] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:17:49.417 [DEBUG] [Thread-204903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:01.529 [DEBUG] [Thread-204904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:16.569 [DEBUG] [Thread-204905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:18:16.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:18:16.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 18, 2), 23.41, 20.75, 0.0, 21.35, 21.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:18:18.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:18:02
2026-02-15T13:18:18.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:18:19.160 [DEBUG] [Thread-204906] [transport.py] [_log()] starting thread (client mode): 0xa57e05b0
2026-02-15T13:18:19.160 [DEBUG] [Thread-204906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:18:19.176 [DEBUG] [Thread-204906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:18:19.176 [INFO] [Thread-204906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] client lang: <none>
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] server lang: <none>
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] kex follows: False
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] Compression: none
2026-02-15T13:18:19.179 [DEBUG] [Thread-204906] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:18:19.195 [DEBUG] [Thread-204906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:18:19.196 [DEBUG] [Thread-204906] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:18:19.196 [DEBUG] [Thread-204906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:18:19.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:18:19.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:18:19.198 [DEBUG] [Thread-204906] [transport.py] [_log()] userauth is OK
2026-02-15T13:18:19.198 [DEBUG] [Thread-204906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:18:19.198 [DEBUG] [Thread-204906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:18:19.198 [DEBUG] [Thread-204906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:18:19.198 [DEBUG] [Thread-204906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:18:19.216 [INFO] [Thread-204906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:18:19.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:18:19.816 [DEBUG] [Thread-204906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:18:19.816 [DEBUG] [Thread-204906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:18:19.817 [DEBUG] [Thread-204906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:18:19.857 [DEBUG] [Thread-204906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:18:19.857 [DEBUG] [Thread-204906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:18:19.860 [DEBUG] [Thread-204906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:18:19.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:18:19.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:18:19.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:18:19.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:18:19.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:18:19.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:18:19.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:18:19.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:18:19.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:18:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.470583 -999.00  +21.80  13.51     25   +1.40 1 1 1 1 1   888    0 20.15 3.66 ----- 13.5 13.5 149.7 32.8 29.0 -28.7 28.2 -29.3 28.7 -26.7 29.5 -28.7
2026-02-15T13:18:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:18:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:18:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.470583
2026-02-15T13:18:19.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:18:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:18:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:18:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:18:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:18:19.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:18:02', tmtdew=23.41, humidity=20.75, cloud=0.0, wind=21.35, temperature=21.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:17:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:18:19.884 [DEBUG] [Thread-204906] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:18:19.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:18:19.980 [DEBUG] [Thread-204909] [transport.py] [_log()] starting thread (client mode): 0xa2d03f70
2026-02-15T13:18:19.980 [DEBUG] [Thread-204909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:18:19.995 [DEBUG] [Thread-204909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:18:19.995 [INFO] [Thread-204909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:18:20.002 [DEBUG] [Thread-204909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:18:20.002 [DEBUG] [Thread-204909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] client lang: <none>
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] server lang: <none>
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] kex follows: False
2026-02-15T13:18:20.003 [DEBUG] [Thread-204909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:18:20.004 [DEBUG] [Thread-204909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:18:20.004 [DEBUG] [Thread-204909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:18:20.004 [DEBUG] [Thread-204909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:18:20.004 [DEBUG] [Thread-204909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:18:20.004 [DEBUG] [Thread-204909] [transport.py] [_log()] Compression: none
2026-02-15T13:18:20.004 [DEBUG] [Thread-204909] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:18:20.062 [DEBUG] [Thread-204909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:18:20.062 [DEBUG] [Thread-204909] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:18:20.063 [DEBUG] [Thread-204909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:18:20.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:18:20.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:18:20.118 [DEBUG] [Thread-204909] [transport.py] [_log()] userauth is OK
2026-02-15T13:18:20.118 [DEBUG] [Thread-204909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:18:20.119 [DEBUG] [Thread-204909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:18:20.119 [DEBUG] [Thread-204909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:18:20.119 [DEBUG] [Thread-204909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:18:20.142 [INFO] [Thread-204909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:18:20.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:18:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:18:20.966 [DEBUG] [Thread-204909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:18:20.966 [DEBUG] [Thread-204909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:18:21.014 [DEBUG] [Thread-204909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:18:21.014 [DEBUG] [Thread-204909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:18:21.023 [DEBUG] [Thread-204909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:18:21.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:18:21.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:18: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
2026-02-15T13:18:21.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:18:21.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:18:21.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:18:21.056 [DEBUG] [Thread-204909] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:18:31.601 [DEBUG] [Thread-204911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:31.655 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:31.657 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:46.660 [DEBUG] [Thread-204912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:49.462 [DEBUG] [Thread-204913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:18:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:18:51.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:18:51.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:18:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 18, 37), 24.38, 19.64, 0.0, 27.95, 22.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:18:52.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:18:37
2026-02-15T13:18:53.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:18:53.533 [DEBUG] [Thread-204914] [transport.py] [_log()] starting thread (client mode): 0xa5743a60
2026-02-15T13:18:53.533 [DEBUG] [Thread-204914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:18:53.554 [DEBUG] [Thread-204914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:18:53.554 [INFO] [Thread-204914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:18:53.559 [DEBUG] [Thread-204914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:18:53.559 [DEBUG] [Thread-204914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:18:53.559 [DEBUG] [Thread-204914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:18:53.559 [DEBUG] [Thread-204914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] client lang: <none>
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] server lang: <none>
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] kex follows: False
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:18:53.560 [DEBUG] [Thread-204914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:18:53.561 [DEBUG] [Thread-204914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:18:53.561 [DEBUG] [Thread-204914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:18:53.561 [DEBUG] [Thread-204914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:18:53.561 [DEBUG] [Thread-204914] [transport.py] [_log()] Compression: none
2026-02-15T13:18:53.561 [DEBUG] [Thread-204914] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:18:53.579 [DEBUG] [Thread-204914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:18:53.580 [DEBUG] [Thread-204914] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:18:53.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:18:53.582 [DEBUG] [Thread-204914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:18:53.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:18:53.584 [DEBUG] [Thread-204914] [transport.py] [_log()] userauth is OK
2026-02-15T13:18:53.584 [DEBUG] [Thread-204914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:18:53.584 [DEBUG] [Thread-204914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:18:53.584 [DEBUG] [Thread-204914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:18:53.584 [DEBUG] [Thread-204914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:18:53.608 [INFO] [Thread-204914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:18:53.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:18:54.232 [DEBUG] [Thread-204914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:18:54.233 [DEBUG] [Thread-204914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:18:54.233 [DEBUG] [Thread-204914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:18:54.273 [DEBUG] [Thread-204914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:18:54.273 [DEBUG] [Thread-204914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:18:54.277 [DEBUG] [Thread-204914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:18:54.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:18:54.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:18:54.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:18:54.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:18:54.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:18:54.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:18:54.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:18:54.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:18:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:18:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.471278 -999.00  +21.80  22.01     26   +1.60 1 1 1 1 1   888    0 20.42 5.58 ----- 22.0 22.0 141.6 25.9 29.0 -28.8 28.3 -27.8 28.6 -26.4 29.4 -28.2
2026-02-15T13:18:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:18:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:18:54.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.471278
2026-02-15T13:18:54.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:18:54.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:18:54.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:18:54.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:18:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:18:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:18:37', tmtdew=24.38, humidity=19.64, cloud=0.0, wind=27.95, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:18:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:18:54.305 [DEBUG] [Thread-204914] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:18:54.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:18:54.403 [DEBUG] [Thread-204917] [transport.py] [_log()] starting thread (client mode): 0xa5741780
2026-02-15T13:18:54.403 [DEBUG] [Thread-204917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:18:54.418 [DEBUG] [Thread-204917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:18:54.418 [INFO] [Thread-204917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] client lang: <none>
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] server lang: <none>
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] kex follows: False
2026-02-15T13:18:54.426 [DEBUG] [Thread-204917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:18:54.427 [DEBUG] [Thread-204917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:18:54.427 [DEBUG] [Thread-204917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:18:54.427 [DEBUG] [Thread-204917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:18:54.427 [DEBUG] [Thread-204917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:18:54.427 [DEBUG] [Thread-204917] [transport.py] [_log()] Compression: none
2026-02-15T13:18:54.427 [DEBUG] [Thread-204917] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:18:54.483 [DEBUG] [Thread-204917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:18:54.483 [DEBUG] [Thread-204917] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:18:54.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:18:54.484 [DEBUG] [Thread-204917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:18:54.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:18:54.540 [DEBUG] [Thread-204917] [transport.py] [_log()] userauth is OK
2026-02-15T13:18:54.540 [DEBUG] [Thread-204917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:18:54.540 [DEBUG] [Thread-204917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:18:54.540 [DEBUG] [Thread-204917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:18:54.540 [DEBUG] [Thread-204917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:18:54.561 [INFO] [Thread-204917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:18:54.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:18:54.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:18:55.367 [DEBUG] [Thread-204917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:18:55.367 [DEBUG] [Thread-204917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:18:55.415 [DEBUG] [Thread-204917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:18:55.416 [DEBUG] [Thread-204917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:18:55.427 [DEBUG] [Thread-204917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:18:55.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:18:55.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:18:55.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:18:55.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:18:55.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:18:55.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:18:55.478 [DEBUG] [Thread-204917] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:19:01.694 [DEBUG] [Thread-204919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:16.739 [DEBUG] [Thread-204920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:19:25.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:19:25.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:19:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 19, 13), 23.6, 20.69, 0.0, 21.12, 21.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:19:27.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:19:13
2026-02-15T13:19:27.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:19:27.945 [DEBUG] [Thread-204921] [transport.py] [_log()] starting thread (client mode): 0xa2dc0940
2026-02-15T13:19:27.945 [DEBUG] [Thread-204921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:19:27.966 [DEBUG] [Thread-204921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:19:27.966 [INFO] [Thread-204921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] client lang: <none>
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] server lang: <none>
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] kex follows: False
2026-02-15T13:19:27.969 [DEBUG] [Thread-204921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:19:27.970 [DEBUG] [Thread-204921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:19:27.970 [DEBUG] [Thread-204921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:19:27.970 [DEBUG] [Thread-204921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:19:27.970 [DEBUG] [Thread-204921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:19:27.970 [DEBUG] [Thread-204921] [transport.py] [_log()] Compression: none
2026-02-15T13:19:27.970 [DEBUG] [Thread-204921] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:19:27.988 [DEBUG] [Thread-204921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:19:27.989 [DEBUG] [Thread-204921] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:19:27.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:19:27.990 [DEBUG] [Thread-204921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:19:27.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:19:27.992 [DEBUG] [Thread-204921] [transport.py] [_log()] userauth is OK
2026-02-15T13:19:27.992 [DEBUG] [Thread-204921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:19:27.992 [DEBUG] [Thread-204921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:19:27.992 [DEBUG] [Thread-204921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:19:27.993 [DEBUG] [Thread-204921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:19:28.012 [INFO] [Thread-204921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:19:28.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:19:28.638 [DEBUG] [Thread-204921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:19:28.638 [DEBUG] [Thread-204921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:19:28.638 [DEBUG] [Thread-204921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:19:28.679 [DEBUG] [Thread-204921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:19:28.680 [DEBUG] [Thread-204921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:19:28.683 [DEBUG] [Thread-204921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:19:28.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:19:28.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:19:28.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:19:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:19:28.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:19:28.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:19:28.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:19:28.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:19:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:19:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.471625 -999.00  +22.10  20.31     26   +1.70 1 1 1 1 1   888    0 20.30 5.20 ----- 20.3 20.3 135.0 27.3 29.0 -29.3 28.3 -28.3 28.6 -25.5 29.5 -28.7
2026-02-15T13:19:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:19:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:19:28.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.471625
2026-02-15T13:19:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:19:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:19:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:19:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:19:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:19:28.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:19:13', tmtdew=23.6, humidity=20.69, cloud=0.0, wind=21.12, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:19:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:19:28.709 [DEBUG] [Thread-204921] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:19:28.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:19:28.806 [DEBUG] [Thread-204924] [transport.py] [_log()] starting thread (client mode): 0xa5743370
2026-02-15T13:19:28.806 [DEBUG] [Thread-204924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:19:28.821 [DEBUG] [Thread-204924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:19:28.821 [INFO] [Thread-204924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:19:28.829 [DEBUG] [Thread-204924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:19:28.829 [DEBUG] [Thread-204924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:19:28.829 [DEBUG] [Thread-204924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:19:28.829 [DEBUG] [Thread-204924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:19:28.829 [DEBUG] [Thread-204924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:19:28.829 [DEBUG] [Thread-204924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] client lang: <none>
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] server lang: <none>
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] kex follows: False
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] Compression: none
2026-02-15T13:19:28.830 [DEBUG] [Thread-204924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:19:28.887 [DEBUG] [Thread-204924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:19:28.888 [DEBUG] [Thread-204924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:19:28.889 [DEBUG] [Thread-204924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:19:28.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:19:28.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:19:28.951 [DEBUG] [Thread-204924] [transport.py] [_log()] userauth is OK
2026-02-15T13:19:28.951 [DEBUG] [Thread-204924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:19:28.951 [DEBUG] [Thread-204924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:19:28.951 [DEBUG] [Thread-204924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:19:28.951 [DEBUG] [Thread-204924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:19:28.970 [INFO] [Thread-204924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:19:28.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:19:28.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:19:29.832 [DEBUG] [Thread-204924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:19:29.833 [DEBUG] [Thread-204924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:19:29.880 [DEBUG] [Thread-204924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:19:29.881 [DEBUG] [Thread-204924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:19:29.890 [DEBUG] [Thread-204924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:19:29.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:19:29.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:19:29.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:19:29.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:19:29.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:19:29.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:19:29.928 [DEBUG] [Thread-204924] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:19:31.775 [DEBUG] [Thread-204926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:31.805 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:31.806 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:46.828 [DEBUG] [Thread-204927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:49.507 [DEBUG] [Thread-204928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:19:59.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:19:59.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:19:59.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:20:01.863 [DEBUG] [Thread-204929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:20:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 19, 49), 22.92, 21.43, 0.0, 24.08, 21.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:20:02.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:19:49
2026-02-15T13:20:02.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:20:02.722 [DEBUG] [Thread-204930] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d60
2026-02-15T13:20:02.722 [DEBUG] [Thread-204930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:20:02.743 [DEBUG] [Thread-204930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:20:02.743 [INFO] [Thread-204930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] client lang: <none>
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] server lang: <none>
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] kex follows: False
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:20:02.746 [DEBUG] [Thread-204930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:20:02.747 [DEBUG] [Thread-204930] [transport.py] [_log()] Compression: none
2026-02-15T13:20:02.747 [DEBUG] [Thread-204930] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:20:02.760 [DEBUG] [Thread-204930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:20:02.760 [DEBUG] [Thread-204930] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:20:02.760 [DEBUG] [Thread-204930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:20:02.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:20:02.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:20:02.761 [DEBUG] [Thread-204930] [transport.py] [_log()] userauth is OK
2026-02-15T13:20:02.761 [DEBUG] [Thread-204930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:20:02.761 [DEBUG] [Thread-204930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:20:02.761 [DEBUG] [Thread-204930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:20:02.761 [DEBUG] [Thread-204930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:20:02.776 [INFO] [Thread-204930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:20:02.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:20:03.603 [DEBUG] [Thread-204930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:20:03.604 [DEBUG] [Thread-204930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:20:03.604 [DEBUG] [Thread-204930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:20:03.644 [DEBUG] [Thread-204930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:20:03.645 [DEBUG] [Thread-204930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:20:03.647 [DEBUG] [Thread-204930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:20:03.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:20:03.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:20:03.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:20:03.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:20:03.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:20:03.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:20:03.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:20:03.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:20:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:20:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.471972 -999.00  +22.00  27.01     26   +1.70 1 1 1 1 1   888    0 20.33 5.62 ----- 27.0 27.0 148.0 32.1 29.0 -29.8 28.3 -27.7 28.6 -26.3 29.4 -31.7
2026-02-15T13:20:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:20:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:20:03.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.471972
2026-02-15T13:20:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:20:03.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:20:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:20:03.676 [DEBUG] [Thread-204930] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:20:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:20:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:20:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:19:49', tmtdew=22.92, humidity=21.43, cloud=0.0, wind=24.08, temperature=21.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:19:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:20:03.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:20:03.778 [DEBUG] [Thread-204933] [transport.py] [_log()] starting thread (client mode): 0xa2d184f0
2026-02-15T13:20:03.778 [DEBUG] [Thread-204933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:20:03.795 [DEBUG] [Thread-204933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:20:03.795 [INFO] [Thread-204933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:03.805 [DEBUG] [Thread-204933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] client lang: <none>
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] server lang: <none>
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] kex follows: False
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] Compression: none
2026-02-15T13:20:03.806 [DEBUG] [Thread-204933] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:20:03.868 [DEBUG] [Thread-204933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:20:03.868 [DEBUG] [Thread-204933] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:20:03.869 [DEBUG] [Thread-204933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:20:03.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:20:03.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:20:03.935 [DEBUG] [Thread-204933] [transport.py] [_log()] userauth is OK
2026-02-15T13:20:03.935 [DEBUG] [Thread-204933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:20:03.936 [DEBUG] [Thread-204933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:20:03.936 [DEBUG] [Thread-204933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:20:03.936 [DEBUG] [Thread-204933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:20:03.957 [INFO] [Thread-204933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:20:03.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:20:03.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:20:04.814 [DEBUG] [Thread-204933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:20:04.814 [DEBUG] [Thread-204933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:20:04.862 [DEBUG] [Thread-204933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:20:04.863 [DEBUG] [Thread-204933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:20:04.872 [DEBUG] [Thread-204933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:20:04.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:20:04.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:20:04.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:20:04.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:20:04.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:20:04.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:20:04.925 [DEBUG] [Thread-204933] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:20:16.898 [DEBUG] [Thread-204935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:20:31.946 [DEBUG] [Thread-204936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:20:31.947 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:20:31.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:20:34.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:20:34.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:20:34.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:20:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 20, 25), 22.97, 21.38, 0.0, 24.56, 21.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:20:37.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:20:25
2026-02-15T13:20:37.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:20:37.839 [DEBUG] [Thread-204937] [transport.py] [_log()] starting thread (client mode): 0xa5741900
2026-02-15T13:20:37.839 [DEBUG] [Thread-204937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:20:37.859 [DEBUG] [Thread-204937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:20:37.860 [INFO] [Thread-204937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] client lang: <none>
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] server lang: <none>
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] kex follows: False
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:20:37.863 [DEBUG] [Thread-204937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:20:37.864 [DEBUG] [Thread-204937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:20:37.864 [DEBUG] [Thread-204937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:20:37.864 [DEBUG] [Thread-204937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:20:37.864 [DEBUG] [Thread-204937] [transport.py] [_log()] Compression: none
2026-02-15T13:20:37.864 [DEBUG] [Thread-204937] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:20:37.883 [DEBUG] [Thread-204937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:20:37.883 [DEBUG] [Thread-204937] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:20:37.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:20:37.884 [DEBUG] [Thread-204937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:20:37.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:20:37.887 [DEBUG] [Thread-204937] [transport.py] [_log()] userauth is OK
2026-02-15T13:20:37.887 [DEBUG] [Thread-204937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:20:37.887 [DEBUG] [Thread-204937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:20:37.887 [DEBUG] [Thread-204937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:20:37.887 [DEBUG] [Thread-204937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:20:37.911 [INFO] [Thread-204937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:20:37.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:20:38.557 [DEBUG] [Thread-204937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:20:38.557 [DEBUG] [Thread-204937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:20:38.558 [DEBUG] [Thread-204937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:20:38.598 [DEBUG] [Thread-204937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:20:38.598 [DEBUG] [Thread-204937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:20:38.602 [DEBUG] [Thread-204937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:20:38.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:20:38.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:20:38.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:20:38.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:20:38.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:20:38.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:20:38.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:20:38.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:20:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:20:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.472319 -999.00  +21.40  16.60     27   +1.80 1 1 1 1 1   888    0 19.86 5.22 ----- 16.6 16.6 142.0 31.5 29.0 -28.5 28.2 -27.6 28.5 -28.0 29.5 -27.6
2026-02-15T13:20:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:20:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:20:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.472319
2026-02-15T13:20:38.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:20:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:20:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:20:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:20:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:20:38.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:20:25', tmtdew=22.97, humidity=21.38, cloud=0.0, wind=24.56, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:20:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:20:38.630 [DEBUG] [Thread-204937] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:20:38.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:20:38.720 [DEBUG] [Thread-204940] [transport.py] [_log()] starting thread (client mode): 0xa5740d60
2026-02-15T13:20:38.720 [DEBUG] [Thread-204940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:20:38.736 [DEBUG] [Thread-204940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:20:38.737 [INFO] [Thread-204940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:20:38.744 [DEBUG] [Thread-204940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:20:38.744 [DEBUG] [Thread-204940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:20:38.744 [DEBUG] [Thread-204940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] client lang: <none>
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] server lang: <none>
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] kex follows: False
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] Compression: none
2026-02-15T13:20:38.745 [DEBUG] [Thread-204940] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:20:38.804 [DEBUG] [Thread-204940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:20:38.805 [DEBUG] [Thread-204940] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:20:38.805 [DEBUG] [Thread-204940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:20:38.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:20:38.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:20:38.863 [DEBUG] [Thread-204940] [transport.py] [_log()] userauth is OK
2026-02-15T13:20:38.863 [DEBUG] [Thread-204940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:20:38.863 [DEBUG] [Thread-204940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:20:38.863 [DEBUG] [Thread-204940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:20:38.863 [DEBUG] [Thread-204940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:20:38.882 [INFO] [Thread-204940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:20:38.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:20:38.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:20:39.717 [DEBUG] [Thread-204940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:20:39.717 [DEBUG] [Thread-204940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:20:39.766 [DEBUG] [Thread-204940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:20:39.766 [DEBUG] [Thread-204940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:20:39.775 [DEBUG] [Thread-204940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:20:39.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:20:39.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:20:39.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:20:39.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:20:39.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:20:39.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:20:39.822 [DEBUG] [Thread-204940] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:20:46.984 [DEBUG] [Thread-204942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:20:49.542 [DEBUG] [Thread-204943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:02.037 [DEBUG] [Thread-204944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:21:09.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:21:09.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:21:11.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 20, 25), 22.82, 21.88, 0.0, 22.76, 21.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:21:11.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:20:25
2026-02-15T13:21:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:21:12.312 [DEBUG] [Thread-204945] [transport.py] [_log()] starting thread (client mode): 0xa5742a10
2026-02-15T13:21:12.312 [DEBUG] [Thread-204945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:21:12.331 [DEBUG] [Thread-204945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:21:12.331 [INFO] [Thread-204945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:21:12.334 [DEBUG] [Thread-204945] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] client lang: <none>
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] server lang: <none>
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] kex follows: False
2026-02-15T13:21:12.335 [DEBUG] [Thread-204945] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:21:12.336 [DEBUG] [Thread-204945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:21:12.336 [DEBUG] [Thread-204945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:21:12.336 [DEBUG] [Thread-204945] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:21:12.336 [DEBUG] [Thread-204945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:21:12.336 [DEBUG] [Thread-204945] [transport.py] [_log()] Compression: none
2026-02-15T13:21:12.336 [DEBUG] [Thread-204945] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:21:12.352 [DEBUG] [Thread-204945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:21:12.353 [DEBUG] [Thread-204945] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:21:12.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:21:12.353 [DEBUG] [Thread-204945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:21:12.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:21:12.355 [DEBUG] [Thread-204945] [transport.py] [_log()] userauth is OK
2026-02-15T13:21:12.355 [DEBUG] [Thread-204945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:21:12.356 [DEBUG] [Thread-204945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:21:12.356 [DEBUG] [Thread-204945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:21:12.356 [DEBUG] [Thread-204945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:21:12.380 [INFO] [Thread-204945] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:21:12.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:21:12.990 [DEBUG] [Thread-204945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:21:12.991 [DEBUG] [Thread-204945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:21:12.991 [DEBUG] [Thread-204945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:21:13.032 [DEBUG] [Thread-204945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:21:13.032 [DEBUG] [Thread-204945] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:21:13.037 [DEBUG] [Thread-204945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:21:13.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:21:13.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:21:13.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:21:13.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:21:13.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:21:13.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:21:13.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:21:13.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:21:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:21:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.472667 -999.00  +21.70  16.42     27   +2.20 1 1 1 1 1   888    0 19.84 2.66 ----- 16.4 16.4 181.6 21.9 29.1 -29.2 28.3 -28.0 28.7 -27.2 29.6 -30.2
2026-02-15T13:21:13.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:21:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:21:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.472667
2026-02-15T13:21:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:21:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:21:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:21:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:21:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:21:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:20:25', tmtdew=22.82, humidity=21.88, cloud=0.0, wind=22.76, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:20:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:21:13.060 [DEBUG] [Thread-204945] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:21:13.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:21:13.158 [DEBUG] [Thread-204948] [transport.py] [_log()] starting thread (client mode): 0xa57c2050
2026-02-15T13:21:13.158 [DEBUG] [Thread-204948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:21:13.172 [DEBUG] [Thread-204948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:21:13.173 [INFO] [Thread-204948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:21:13.180 [DEBUG] [Thread-204948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:21:13.180 [DEBUG] [Thread-204948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:21:13.180 [DEBUG] [Thread-204948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:21:13.180 [DEBUG] [Thread-204948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] client lang: <none>
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] server lang: <none>
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] kex follows: False
2026-02-15T13:21:13.181 [DEBUG] [Thread-204948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:21:13.182 [DEBUG] [Thread-204948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:21:13.182 [DEBUG] [Thread-204948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:21:13.182 [DEBUG] [Thread-204948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:21:13.182 [DEBUG] [Thread-204948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:21:13.182 [DEBUG] [Thread-204948] [transport.py] [_log()] Compression: none
2026-02-15T13:21:13.182 [DEBUG] [Thread-204948] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:21:13.241 [DEBUG] [Thread-204948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:21:13.241 [DEBUG] [Thread-204948] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:21:13.242 [DEBUG] [Thread-204948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:21:13.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:21:13.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:21:13.298 [DEBUG] [Thread-204948] [transport.py] [_log()] userauth is OK
2026-02-15T13:21:13.299 [DEBUG] [Thread-204948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:21:13.299 [DEBUG] [Thread-204948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:21:13.299 [DEBUG] [Thread-204948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:21:13.299 [DEBUG] [Thread-204948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:21:13.317 [INFO] [Thread-204948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:21:13.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:21:13.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:21:14.141 [DEBUG] [Thread-204948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:21:14.142 [DEBUG] [Thread-204948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:21:14.190 [DEBUG] [Thread-204948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:21:14.190 [DEBUG] [Thread-204948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:21:14.199 [DEBUG] [Thread-204948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:21:14.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:21:14.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:21:14.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:21:14.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:21:14.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:21:14.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:21:14.242 [DEBUG] [Thread-204948] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:21:17.077 [DEBUG] [Thread-204950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:32.088 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:32.089 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:32.137 [DEBUG] [Thread-204951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:21:44.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:21:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:21:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 21, 35), 25.29, 18.45, 0.0, 14.96, 23.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:21:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:21:35
2026-02-15T13:21:46.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:21:46.643 [DEBUG] [Thread-204952] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa40
2026-02-15T13:21:46.643 [DEBUG] [Thread-204952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:21:46.662 [DEBUG] [Thread-204952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:21:46.662 [INFO] [Thread-204952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:21:46.665 [DEBUG] [Thread-204952] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] client lang: <none>
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] server lang: <none>
2026-02-15T13:21:46.666 [DEBUG] [Thread-204952] [transport.py] [_log()] kex follows: False
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] Compression: none
2026-02-15T13:21:46.667 [DEBUG] [Thread-204952] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:21:46.682 [DEBUG] [Thread-204952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:21:46.683 [DEBUG] [Thread-204952] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:21:46.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:21:46.684 [DEBUG] [Thread-204952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:21:46.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:21:46.686 [DEBUG] [Thread-204952] [transport.py] [_log()] userauth is OK
2026-02-15T13:21:46.686 [DEBUG] [Thread-204952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:21:46.686 [DEBUG] [Thread-204952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:21:46.686 [DEBUG] [Thread-204952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:21:46.687 [DEBUG] [Thread-204952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:21:46.710 [INFO] [Thread-204952] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:21:46.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:21:47.174 [DEBUG] [Thread-204954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:21:47.317 [DEBUG] [Thread-204952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:21:47.317 [DEBUG] [Thread-204952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:21:47.318 [DEBUG] [Thread-204952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:21:47.358 [DEBUG] [Thread-204952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:21:47.359 [DEBUG] [Thread-204952] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:21:47.362 [DEBUG] [Thread-204952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:21:47.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:21:47.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:21:47.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:21:47.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:21:47.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:21:47.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:21:47.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:21:47.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:21:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:21:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.473014 -999.00  +21.80  22.84     26   +1.90 1 1 1 1 1   888    0 20.10 1.54 ----- 22.8 22.8 151.0 37.4 29.0 -29.8 28.0 -32.2 28.6 -25.9 29.5 -29.5
2026-02-15T13:21:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:21:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:21:47.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.473014
2026-02-15T13:21:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:21:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:21:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:21:47.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:21:47.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:21:47.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:21:35', tmtdew=25.29, humidity=18.45, cloud=0.0, wind=14.96, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:21:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:21:47.388 [DEBUG] [Thread-204952] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:21:47.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:21:47.485 [DEBUG] [Thread-204956] [transport.py] [_log()] starting thread (client mode): 0xa2d00e80
2026-02-15T13:21:47.485 [DEBUG] [Thread-204956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:21:47.503 [DEBUG] [Thread-204956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:21:47.503 [INFO] [Thread-204956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:21:47.511 [DEBUG] [Thread-204956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] client lang: <none>
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] server lang: <none>
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] kex follows: False
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] Compression: none
2026-02-15T13:21:47.512 [DEBUG] [Thread-204956] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:21:47.570 [DEBUG] [Thread-204956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:21:47.571 [DEBUG] [Thread-204956] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:21:47.572 [DEBUG] [Thread-204956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:21:47.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:21:47.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:21:47.629 [DEBUG] [Thread-204956] [transport.py] [_log()] userauth is OK
2026-02-15T13:21:47.629 [DEBUG] [Thread-204956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:21:47.629 [DEBUG] [Thread-204956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:21:47.629 [DEBUG] [Thread-204956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:21:47.630 [DEBUG] [Thread-204956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:21:47.649 [INFO] [Thread-204956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:21:47.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:21:47.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:21:48.492 [DEBUG] [Thread-204956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:21:48.493 [DEBUG] [Thread-204956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:21:48.540 [DEBUG] [Thread-204956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:21:48.541 [DEBUG] [Thread-204956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:21:48.550 [DEBUG] [Thread-204956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:21:48.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:21:48.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:21:48.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:21:48.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:21:48.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:21:48.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:21:48.590 [DEBUG] [Thread-204956] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:21:49.574 [DEBUG] [Thread-204958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:02.212 [DEBUG] [Thread-204959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:17.266 [DEBUG] [Thread-204960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:18.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:22:18.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:22:18.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:22:20.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 22, 10), 23.7, 20.54, 0.0, 18.3, 21.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:22:20.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:22:10
2026-02-15T13:22:21.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:22:21.444 [DEBUG] [Thread-204961] [transport.py] [_log()] starting thread (client mode): 0xa2d18f10
2026-02-15T13:22:21.445 [DEBUG] [Thread-204961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:22:21.466 [DEBUG] [Thread-204961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:22:21.466 [INFO] [Thread-204961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:22:21.469 [DEBUG] [Thread-204961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] client lang: <none>
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] server lang: <none>
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] kex follows: False
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] Compression: none
2026-02-15T13:22:21.470 [DEBUG] [Thread-204961] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:22:21.487 [DEBUG] [Thread-204961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:22:21.487 [DEBUG] [Thread-204961] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:22:21.488 [DEBUG] [Thread-204961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:22:21.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:22:21.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:22:21.490 [DEBUG] [Thread-204961] [transport.py] [_log()] userauth is OK
2026-02-15T13:22:21.490 [DEBUG] [Thread-204961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:22:21.490 [DEBUG] [Thread-204961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:22:21.490 [DEBUG] [Thread-204961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:22:21.490 [DEBUG] [Thread-204961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:22:21.516 [INFO] [Thread-204961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:22:21.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:22:22.145 [DEBUG] [Thread-204961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:22:22.145 [DEBUG] [Thread-204961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:22:22.146 [DEBUG] [Thread-204961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:22:22.186 [DEBUG] [Thread-204961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:22:22.186 [DEBUG] [Thread-204961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:22:22.189 [DEBUG] [Thread-204961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:22:22.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:22:22.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:22:22.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:22:22.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:22:22.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:22:22.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:22:22.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:22:22.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:22:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:22:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.473361 -999.00  +21.60  13.67     27   +1.90 1 1 1 1 1   888    0 20.11 -0.77 ----- 13.7 13.7 172.0 16.6 29.0 -28.4 28.1 -27.0 28.5 -27.2 29.6 -27.9
2026-02-15T13:22:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:22:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:22:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.473361
2026-02-15T13:22:22.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:22:22.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:22:22.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:22:22.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:22:22.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:22:22.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:22:10', tmtdew=23.7, humidity=20.54, cloud=0.0, wind=18.3, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:21:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:22:22.214 [DEBUG] [Thread-204961] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:22:22.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:22:22.309 [DEBUG] [Thread-204964] [transport.py] [_log()] starting thread (client mode): 0xa81d53f0
2026-02-15T13:22:22.310 [DEBUG] [Thread-204964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:22:22.323 [DEBUG] [Thread-204964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:22:22.323 [INFO] [Thread-204964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:22:22.331 [DEBUG] [Thread-204964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:22:22.331 [DEBUG] [Thread-204964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] client lang: <none>
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] server lang: <none>
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] kex follows: False
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] Compression: none
2026-02-15T13:22:22.332 [DEBUG] [Thread-204964] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:22:22.392 [DEBUG] [Thread-204964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:22:22.393 [DEBUG] [Thread-204964] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:22:22.393 [DEBUG] [Thread-204964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:22:22.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:22:22.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:22:22.452 [DEBUG] [Thread-204964] [transport.py] [_log()] userauth is OK
2026-02-15T13:22:22.452 [DEBUG] [Thread-204964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:22:22.452 [DEBUG] [Thread-204964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:22:22.453 [DEBUG] [Thread-204964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:22:22.453 [DEBUG] [Thread-204964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:22:22.475 [INFO] [Thread-204964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:22:22.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:22:22.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:22:23.269 [DEBUG] [Thread-204964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:22:23.269 [DEBUG] [Thread-204964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:22:23.319 [DEBUG] [Thread-204964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:22:23.319 [DEBUG] [Thread-204964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:22:23.328 [DEBUG] [Thread-204964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:22:23.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:22:23.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:22:23.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:22:23.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:22:23.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:22:23.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:22:23.363 [DEBUG] [Thread-204964] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:22:32.236 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:32.238 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:32.300 [DEBUG] [Thread-204966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:47.349 [DEBUG] [Thread-204967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:49.619 [DEBUG] [Thread-204968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:22:53.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:22:53.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:22:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:22:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 22, 45), 23.55, 20.79, 0.0, 15.95, 21.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:22:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:22:45
2026-02-15T13:22:55.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:22:55.734 [DEBUG] [Thread-204969] [transport.py] [_log()] starting thread (client mode): 0xa5741930
2026-02-15T13:22:55.734 [DEBUG] [Thread-204969] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:22:55.754 [DEBUG] [Thread-204969] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:22:55.754 [INFO] [Thread-204969] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:22:55.757 [DEBUG] [Thread-204969] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:22:55.757 [DEBUG] [Thread-204969] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:22:55.757 [DEBUG] [Thread-204969] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:22:55.757 [DEBUG] [Thread-204969] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:55.757 [DEBUG] [Thread-204969] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:55.757 [DEBUG] [Thread-204969] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] client lang: <none>
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] server lang: <none>
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] kex follows: False
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] Compression: none
2026-02-15T13:22:55.758 [DEBUG] [Thread-204969] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:22:55.775 [DEBUG] [Thread-204969] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:22:55.775 [DEBUG] [Thread-204969] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:22:55.776 [DEBUG] [Thread-204969] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:22:55.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:22:55.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:22:55.778 [DEBUG] [Thread-204969] [transport.py] [_log()] userauth is OK
2026-02-15T13:22:55.778 [DEBUG] [Thread-204969] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:22:55.778 [DEBUG] [Thread-204969] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:22:55.778 [DEBUG] [Thread-204969] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:22:55.778 [DEBUG] [Thread-204969] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:22:55.815 [INFO] [Thread-204969] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:22:55.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:22:56.450 [DEBUG] [Thread-204969] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:22:56.450 [DEBUG] [Thread-204969] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:22:56.450 [DEBUG] [Thread-204969] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:22:56.491 [DEBUG] [Thread-204969] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:22:56.492 [DEBUG] [Thread-204969] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:22:56.495 [DEBUG] [Thread-204969] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:22:56.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:22:56.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:22:56.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:22:56.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:22:56.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:22:56.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:22:56.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:22:56.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:22:56.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:22:56.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.473708 -999.00  +21.60  10.86     27   +2.10 1 1 1 1 1   888    0 20.25 -4.41 ----- 10.9 10.9 148.0 15.6 29.1 -27.9 28.1 -28.4 28.6 -26.3 29.7 -27.2
2026-02-15T13:22:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:22:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:22:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.473708
2026-02-15T13:22:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:22:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:22:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:22:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:22:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:22:56.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:22:45', tmtdew=23.55, humidity=20.79, cloud=0.0, wind=15.95, temperature=21.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:22:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:22:56.523 [DEBUG] [Thread-204969] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:22:56.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:22:56.620 [DEBUG] [Thread-204972] [transport.py] [_log()] starting thread (client mode): 0xa5742fe0
2026-02-15T13:22:56.621 [DEBUG] [Thread-204972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:22:56.635 [DEBUG] [Thread-204972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:22:56.635 [INFO] [Thread-204972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:22:56.642 [DEBUG] [Thread-204972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] client lang: <none>
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] server lang: <none>
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] kex follows: False
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:22:56.643 [DEBUG] [Thread-204972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:22:56.644 [DEBUG] [Thread-204972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:22:56.644 [DEBUG] [Thread-204972] [transport.py] [_log()] Compression: none
2026-02-15T13:22:56.644 [DEBUG] [Thread-204972] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:22:56.703 [DEBUG] [Thread-204972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:22:56.704 [DEBUG] [Thread-204972] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:22:56.704 [DEBUG] [Thread-204972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:22:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:22:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:22:56.759 [DEBUG] [Thread-204972] [transport.py] [_log()] userauth is OK
2026-02-15T13:22:56.760 [DEBUG] [Thread-204972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:22:56.760 [DEBUG] [Thread-204972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:22:56.760 [DEBUG] [Thread-204972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:22:56.760 [DEBUG] [Thread-204972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:22:56.778 [INFO] [Thread-204972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:22:56.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:22:56.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:22:57.604 [DEBUG] [Thread-204972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:22:57.605 [DEBUG] [Thread-204972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:22:57.653 [DEBUG] [Thread-204972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:22:57.653 [DEBUG] [Thread-204972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:22:57.663 [DEBUG] [Thread-204972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:22:57.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:22:57.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:22:57.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:22:57.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:22:57.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:22:57.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:22:57.699 [DEBUG] [Thread-204972] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:23:02.384 [DEBUG] [Thread-204974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:23:17.433 [DEBUG] [Thread-204975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:23:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:23:27.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:23:27.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:23:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 23, 20), 23.23, 21.2, 0.0, 18.69, 21.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:23:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:23:20
2026-02-15T13:23:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:23:30.038 [DEBUG] [Thread-204976] [transport.py] [_log()] starting thread (client mode): 0xa2d1acb0
2026-02-15T13:23:30.039 [DEBUG] [Thread-204976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:23:30.061 [DEBUG] [Thread-204976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:23:30.061 [INFO] [Thread-204976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:23:30.065 [DEBUG] [Thread-204976] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:23:30.065 [DEBUG] [Thread-204976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:23:30.065 [DEBUG] [Thread-204976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:23:30.065 [DEBUG] [Thread-204976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:23:30.065 [DEBUG] [Thread-204976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:23:30.065 [DEBUG] [Thread-204976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] client lang: <none>
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] server lang: <none>
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] kex follows: False
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:23:30.066 [DEBUG] [Thread-204976] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:23:30.067 [DEBUG] [Thread-204976] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:23:30.067 [DEBUG] [Thread-204976] [transport.py] [_log()] Compression: none
2026-02-15T13:23:30.067 [DEBUG] [Thread-204976] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:23:30.084 [DEBUG] [Thread-204976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:23:30.084 [DEBUG] [Thread-204976] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:23:30.085 [DEBUG] [Thread-204976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:23:30.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:23:30.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:23:30.087 [DEBUG] [Thread-204976] [transport.py] [_log()] userauth is OK
2026-02-15T13:23:30.087 [DEBUG] [Thread-204976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:23:30.087 [DEBUG] [Thread-204976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:23:30.087 [DEBUG] [Thread-204976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:23:30.087 [DEBUG] [Thread-204976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:23:30.121 [INFO] [Thread-204976] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:23:30.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:23:30.776 [DEBUG] [Thread-204976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:23:30.776 [DEBUG] [Thread-204976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:23:30.776 [DEBUG] [Thread-204976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:23:30.817 [DEBUG] [Thread-204976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:23:30.817 [DEBUG] [Thread-204976] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:23:30.820 [DEBUG] [Thread-204976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:23:30.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:23:30.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:23:30.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:23:30.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:23:30.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:23:30.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:23:30.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:23:30.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:23:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:23:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.474056 -999.00  +21.80  18.85     27   +2.40 1 1 1 1 1   888    0 20.47 -8.69 ----- 18.9 18.9 141.8 27.4 29.2 -27.0 28.2 -27.6 28.7 -25.1 29.8 -27.8
2026-02-15T13:23:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:23:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:23:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.474056
2026-02-15T13:23:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:23:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:23:30.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:23:30.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:23:30.844 [DEBUG] [Thread-204976] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:23:30.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:23:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:23:20', tmtdew=23.23, humidity=21.2, cloud=0.0, wind=18.69, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:22:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:23:30.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:23:30.939 [DEBUG] [Thread-204979] [transport.py] [_log()] starting thread (client mode): 0xa57c07c0
2026-02-15T13:23:30.939 [DEBUG] [Thread-204979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:23:30.954 [DEBUG] [Thread-204979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:23:30.954 [INFO] [Thread-204979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] client lang: <none>
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] server lang: <none>
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] kex follows: False
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:23:30.962 [DEBUG] [Thread-204979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:23:30.963 [DEBUG] [Thread-204979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:23:30.963 [DEBUG] [Thread-204979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:23:30.963 [DEBUG] [Thread-204979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:23:30.963 [DEBUG] [Thread-204979] [transport.py] [_log()] Compression: none
2026-02-15T13:23:30.963 [DEBUG] [Thread-204979] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:23:31.023 [DEBUG] [Thread-204979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:23:31.024 [DEBUG] [Thread-204979] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:23:31.025 [DEBUG] [Thread-204979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:23:31.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:23:31.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:23:31.079 [DEBUG] [Thread-204979] [transport.py] [_log()] userauth is OK
2026-02-15T13:23:31.080 [DEBUG] [Thread-204979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:23:31.080 [DEBUG] [Thread-204979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:23:31.080 [DEBUG] [Thread-204979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:23:31.080 [DEBUG] [Thread-204979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:23:31.099 [INFO] [Thread-204979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:23:31.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:23:31.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:23:31.906 [DEBUG] [Thread-204979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:23:31.907 [DEBUG] [Thread-204979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:23:31.955 [DEBUG] [Thread-204979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:23:31.956 [DEBUG] [Thread-204979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:23:31.968 [DEBUG] [Thread-204979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:23:31.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:23:31.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:23:31.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:23:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:23:32.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:23:32.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:23:32.015 [DEBUG] [Thread-204979] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:23:32.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:23:32.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:23:32.471 [DEBUG] [Thread-204981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:23:47.527 [DEBUG] [Thread-204982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:23:49.670 [DEBUG] [Thread-204983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:02.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:24:02.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:24: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
2026-02-15T13:24:02.565 [DEBUG] [Thread-204984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 23, 20), 23.23, 21.2, 0.0, 18.69, 21.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:24:03.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:23:20
2026-02-15T13:24:04.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:24:04.514 [DEBUG] [Thread-204985] [transport.py] [_log()] starting thread (client mode): 0xa2d69900
2026-02-15T13:24:04.515 [DEBUG] [Thread-204985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:24:04.534 [DEBUG] [Thread-204985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:24:04.535 [INFO] [Thread-204985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:24:04.537 [DEBUG] [Thread-204985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] client lang: <none>
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] server lang: <none>
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] kex follows: False
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] Compression: none
2026-02-15T13:24:04.538 [DEBUG] [Thread-204985] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:24:04.555 [DEBUG] [Thread-204985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:24:04.555 [DEBUG] [Thread-204985] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:24:04.556 [DEBUG] [Thread-204985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:24:04.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:24:04.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:24:04.558 [DEBUG] [Thread-204985] [transport.py] [_log()] userauth is OK
2026-02-15T13:24:04.558 [DEBUG] [Thread-204985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:24:04.559 [DEBUG] [Thread-204985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:24:04.559 [DEBUG] [Thread-204985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:24:04.559 [DEBUG] [Thread-204985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:24:04.580 [INFO] [Thread-204985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:24:04.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:24:05.325 [DEBUG] [Thread-204985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:24:05.325 [DEBUG] [Thread-204985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:24:05.326 [DEBUG] [Thread-204985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:24:05.366 [DEBUG] [Thread-204985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:24:05.366 [DEBUG] [Thread-204985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:24:05.369 [DEBUG] [Thread-204985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:24:05.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:24:05.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:24:05.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:24:05.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:24:05.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:24:05.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:24:05.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:24:05.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:24:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:24:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.474750 -999.00  +21.40  18.42     27   +1.90 1 1 1 1 1   888    0 19.33 -16.37 ----- 18.4 18.4 134.4 28.9 29.0 -28.1 28.1 -28.4 28.4 -29.1 29.5 -29.5
2026-02-15T13:24:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:24:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:24:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.474750
2026-02-15T13:24:05.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:24:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:24:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:24:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:24:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:24:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:23:20', tmtdew=23.23, humidity=21.2, cloud=0.0, wind=18.69, temperature=21.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:23:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:24:05.393 [DEBUG] [Thread-204985] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:24:05.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:24:05.494 [DEBUG] [Thread-204988] [transport.py] [_log()] starting thread (client mode): 0xa57c3220
2026-02-15T13:24:05.494 [DEBUG] [Thread-204988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:24:05.508 [DEBUG] [Thread-204988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:24:05.508 [INFO] [Thread-204988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] client lang: <none>
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] server lang: <none>
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] kex follows: False
2026-02-15T13:24:05.516 [DEBUG] [Thread-204988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:24:05.517 [DEBUG] [Thread-204988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:24:05.517 [DEBUG] [Thread-204988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:24:05.517 [DEBUG] [Thread-204988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:24:05.517 [DEBUG] [Thread-204988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:24:05.517 [DEBUG] [Thread-204988] [transport.py] [_log()] Compression: none
2026-02-15T13:24:05.517 [DEBUG] [Thread-204988] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:24:05.575 [DEBUG] [Thread-204988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:24:05.575 [DEBUG] [Thread-204988] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:24:05.576 [DEBUG] [Thread-204988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:24:05.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:24:05.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:24:05.632 [DEBUG] [Thread-204988] [transport.py] [_log()] userauth is OK
2026-02-15T13:24:05.632 [DEBUG] [Thread-204988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:24:05.632 [DEBUG] [Thread-204988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:24:05.632 [DEBUG] [Thread-204988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:24:05.633 [DEBUG] [Thread-204988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:24:05.652 [INFO] [Thread-204988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:24:05.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:24:05.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:24:06.495 [DEBUG] [Thread-204988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:24:06.495 [DEBUG] [Thread-204988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:24:06.543 [DEBUG] [Thread-204988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:24:06.543 [DEBUG] [Thread-204988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:24:06.552 [DEBUG] [Thread-204988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:24:06.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:24:06.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:24:06.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:24:06.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:24:06.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:24:06.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:24:06.586 [DEBUG] [Thread-204988] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:24:17.603 [DEBUG] [Thread-204990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:32.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:32.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:32.658 [DEBUG] [Thread-204991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:36.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:24:36.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:24:36.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:24:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 23, 56), 23.28, 21.05, 0.0, 23.57, 22.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:24:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:23:56
2026-02-15T13:24:39.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:24:39.515 [DEBUG] [Thread-204992] [transport.py] [_log()] starting thread (client mode): 0xa2d1b880
2026-02-15T13:24:39.515 [DEBUG] [Thread-204992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:24:39.536 [DEBUG] [Thread-204992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:24:39.536 [INFO] [Thread-204992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:39.539 [DEBUG] [Thread-204992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] client lang: <none>
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] server lang: <none>
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] kex follows: False
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:24:39.540 [DEBUG] [Thread-204992] [transport.py] [_log()] Compression: none
2026-02-15T13:24:39.541 [DEBUG] [Thread-204992] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:24:39.561 [DEBUG] [Thread-204992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:24:39.562 [DEBUG] [Thread-204992] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:24:39.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:24:39.563 [DEBUG] [Thread-204992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:24:39.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:24:39.605 [DEBUG] [Thread-204992] [transport.py] [_log()] userauth is OK
2026-02-15T13:24:39.605 [DEBUG] [Thread-204992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:24:39.605 [DEBUG] [Thread-204992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:24:39.605 [DEBUG] [Thread-204992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:24:39.605 [DEBUG] [Thread-204992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:24:39.627 [INFO] [Thread-204992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:24:39.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:24:40.250 [DEBUG] [Thread-204992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:24:40.250 [DEBUG] [Thread-204992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:24:40.250 [DEBUG] [Thread-204992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:24:40.292 [DEBUG] [Thread-204992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:24:40.292 [DEBUG] [Thread-204992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:24:40.295 [DEBUG] [Thread-204992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:24:40.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:24:40.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:24:40.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:24:40.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:24:40.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:24:40.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:24:40.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:24:40.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:24:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:24:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.475097 -999.00  +21.60  18.40     27   +2.10 1 1 1 1 1   888    0 19.45 -19.81 ----- 18.4 18.4 165.4 22.7 29.0 -28.6 28.2 -28.0 28.6 -26.2 29.6 -29.4
2026-02-15T13:24:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:24:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:24:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.475097
2026-02-15T13:24:40.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:24:40.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:24:40.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:24:40.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:24:40.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:24:40.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:23:56', tmtdew=23.28, humidity=21.05, cloud=0.0, wind=23.57, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:24:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:24:40.318 [DEBUG] [Thread-204992] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:24:40.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:24:40.418 [DEBUG] [Thread-204995] [transport.py] [_log()] starting thread (client mode): 0xa2d19e10
2026-02-15T13:24:40.419 [DEBUG] [Thread-204995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:24:40.435 [DEBUG] [Thread-204995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:24:40.435 [INFO] [Thread-204995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:24:40.444 [DEBUG] [Thread-204995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:24:40.444 [DEBUG] [Thread-204995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] client lang: <none>
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] server lang: <none>
2026-02-15T13:24:40.445 [DEBUG] [Thread-204995] [transport.py] [_log()] kex follows: False
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] Compression: none
2026-02-15T13:24:40.446 [DEBUG] [Thread-204995] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:24:40.504 [DEBUG] [Thread-204995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:24:40.505 [DEBUG] [Thread-204995] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:24:40.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:24:40.506 [DEBUG] [Thread-204995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:24:40.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:24:40.565 [DEBUG] [Thread-204995] [transport.py] [_log()] userauth is OK
2026-02-15T13:24:40.565 [DEBUG] [Thread-204995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:24:40.565 [DEBUG] [Thread-204995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:24:40.565 [DEBUG] [Thread-204995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:24:40.566 [DEBUG] [Thread-204995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:24:40.586 [INFO] [Thread-204995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:24:40.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:24:40.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:24:41.380 [DEBUG] [Thread-204995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:24:41.381 [DEBUG] [Thread-204995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:24:41.428 [DEBUG] [Thread-204995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:24:41.428 [DEBUG] [Thread-204995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:24:41.437 [DEBUG] [Thread-204995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:24:41.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:24:41.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:24:41.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:24:41.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:24:41.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:24:41.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:24:41.478 [DEBUG] [Thread-204995] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:24:47.694 [DEBUG] [Thread-204997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:24:49.702 [DEBUG] [Thread-204998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:02.757 [DEBUG] [Thread-204999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:11.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:25:11.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:25:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:25:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 24, 32), 23.07, 21.33, 0.0, 24.7, 22.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:25:13.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:24:32
2026-02-15T13:25:14.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:25:14.303 [DEBUG] [Thread-205000] [transport.py] [_log()] starting thread (client mode): 0xa2d19180
2026-02-15T13:25:14.303 [DEBUG] [Thread-205000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:25:14.322 [DEBUG] [Thread-205000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:25:14.322 [INFO] [Thread-205000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:25:14.325 [DEBUG] [Thread-205000] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:25:14.325 [DEBUG] [Thread-205000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] client lang: <none>
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] server lang: <none>
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] kex follows: False
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:25:14.326 [DEBUG] [Thread-205000] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:25:14.327 [DEBUG] [Thread-205000] [transport.py] [_log()] Compression: none
2026-02-15T13:25:14.327 [DEBUG] [Thread-205000] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:25:14.344 [DEBUG] [Thread-205000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:25:14.345 [DEBUG] [Thread-205000] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:25:14.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:25:14.346 [DEBUG] [Thread-205000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:25:14.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:25:14.349 [DEBUG] [Thread-205000] [transport.py] [_log()] userauth is OK
2026-02-15T13:25:14.349 [DEBUG] [Thread-205000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:25:14.349 [DEBUG] [Thread-205000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:25:14.349 [DEBUG] [Thread-205000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:25:14.349 [DEBUG] [Thread-205000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:25:14.365 [INFO] [Thread-205000] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:25:14.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:25:17.550 [DEBUG] [Thread-205000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:25:17.550 [DEBUG] [Thread-205000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:25:17.551 [DEBUG] [Thread-205000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:25:17.591 [DEBUG] [Thread-205000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:25:17.592 [DEBUG] [Thread-205000] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:25:17.595 [DEBUG] [Thread-205000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:25:17.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:25:17.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:25:17.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:25:17.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:25:17.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:25:17.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:25:17.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:25:17.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:25:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:25:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.475444 -999.00  +21.50  18.30     27   +1.90 1 1 1 1 1   888    0 19.38 -22.41 ----- 18.3 18.3 137.8 25.7 29.0 -28.9 28.1 -28.1 28.6 -27.0 29.6 -28.2
2026-02-15T13:25:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:25:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:25:17.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.475444
2026-02-15T13:25:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:25:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:25:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:25:17.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:25:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:25:17.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:24:32', tmtdew=23.07, humidity=21.33, cloud=0.0, wind=24.7, temperature=22.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:24:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:25:17.669 [DEBUG] [Thread-205000] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:25:17.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:25:17.765 [DEBUG] [Thread-205003] [transport.py] [_log()] starting thread (client mode): 0xa57c2650
2026-02-15T13:25:17.765 [DEBUG] [Thread-205003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:25:17.780 [DEBUG] [Thread-205003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:25:17.780 [INFO] [Thread-205003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:25:17.788 [DEBUG] [Thread-205003] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:25:17.788 [DEBUG] [Thread-205003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:25:17.788 [DEBUG] [Thread-205003] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] client lang: <none>
2026-02-15T13:25:17.789 [DEBUG] [Thread-205003] [transport.py] [_log()] server lang: <none>
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] kex follows: False
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] Compression: none
2026-02-15T13:25:17.790 [DEBUG] [Thread-205003] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:25:17.797 [DEBUG] [Thread-205005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:17.854 [DEBUG] [Thread-205003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:25:17.854 [DEBUG] [Thread-205003] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:25:17.855 [DEBUG] [Thread-205003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:25:17.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:25:17.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:25:17.912 [DEBUG] [Thread-205003] [transport.py] [_log()] userauth is OK
2026-02-15T13:25:17.912 [DEBUG] [Thread-205003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:25:17.913 [DEBUG] [Thread-205003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:25:17.913 [DEBUG] [Thread-205003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:25:17.913 [DEBUG] [Thread-205003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:25:17.932 [INFO] [Thread-205003] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:25:17.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:25:17.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:25:18.771 [DEBUG] [Thread-205003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:25:18.772 [DEBUG] [Thread-205003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:25:18.821 [DEBUG] [Thread-205003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:25:18.821 [DEBUG] [Thread-205003] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:25:18.833 [DEBUG] [Thread-205003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:25:18.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:25:18.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:25:18.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:25:18.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:25:18.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:25:18.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:25:18.881 [DEBUG] [Thread-205003] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:25:32.680 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:32.682 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:32.849 [DEBUG] [Thread-205006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:47.885 [DEBUG] [Thread-205007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:48.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:25:48.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:25:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:25:49.737 [DEBUG] [Thread-205008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:25:51.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 25, 9), 23.31, 21.02, 0.0, 25.65, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:25:51.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:25:09
2026-02-15T13:25:51.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:25:51.567 [DEBUG] [Thread-205009] [transport.py] [_log()] starting thread (client mode): 0xa2d00cd0
2026-02-15T13:25:51.567 [DEBUG] [Thread-205009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:25:51.587 [DEBUG] [Thread-205009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:25:51.587 [INFO] [Thread-205009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:25:51.590 [DEBUG] [Thread-205009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:25:51.590 [DEBUG] [Thread-205009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:25:51.590 [DEBUG] [Thread-205009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:25:51.590 [DEBUG] [Thread-205009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:51.590 [DEBUG] [Thread-205009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:51.590 [DEBUG] [Thread-205009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] client lang: <none>
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] server lang: <none>
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] kex follows: False
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] Compression: none
2026-02-15T13:25:51.591 [DEBUG] [Thread-205009] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:25:51.607 [DEBUG] [Thread-205009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:25:51.607 [DEBUG] [Thread-205009] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:25:51.607 [DEBUG] [Thread-205009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:25:51.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:25:51.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:25:51.608 [DEBUG] [Thread-205009] [transport.py] [_log()] userauth is OK
2026-02-15T13:25:51.608 [DEBUG] [Thread-205009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:25:51.608 [DEBUG] [Thread-205009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:25:51.608 [DEBUG] [Thread-205009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:25:51.608 [DEBUG] [Thread-205009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:25:51.627 [INFO] [Thread-205009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:25:51.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:25:52.228 [DEBUG] [Thread-205009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:25:52.229 [DEBUG] [Thread-205009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:25:52.229 [DEBUG] [Thread-205009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:25:52.269 [DEBUG] [Thread-205009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:25:52.269 [DEBUG] [Thread-205009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:25:52.271 [DEBUG] [Thread-205009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:25:52.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:25:52.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:25:52.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:25:52.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:25:52.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:25:52.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:25:52.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:25:52.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:25:52.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.475791 -999.00  +21.70  16.70     27   +2.10 1 1 1 1 1   888    0 19.06 -24.58 ----- 16.7 16.7 149.8 21.7 29.1 -28.3 28.2 -26.8 28.6 -26.2 29.6 -28.8
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.475791
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:25:52.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:25:09', tmtdew=23.31, humidity=21.02, cloud=0.0, wind=25.65, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:25:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:25:52.289 [DEBUG] [Thread-205009] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:25:52.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:25:52.378 [DEBUG] [Thread-205012] [transport.py] [_log()] starting thread (client mode): 0xa2d69bd0
2026-02-15T13:25:52.378 [DEBUG] [Thread-205012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:25:52.392 [DEBUG] [Thread-205012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:25:52.392 [INFO] [Thread-205012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:25:52.400 [DEBUG] [Thread-205012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:25:52.400 [DEBUG] [Thread-205012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:25:52.400 [DEBUG] [Thread-205012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] client lang: <none>
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] server lang: <none>
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] kex follows: False
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] Compression: none
2026-02-15T13:25:52.401 [DEBUG] [Thread-205012] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:25:52.456 [DEBUG] [Thread-205012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:25:52.456 [DEBUG] [Thread-205012] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:25:52.456 [DEBUG] [Thread-205012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:25:52.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:25:52.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:25:52.513 [DEBUG] [Thread-205012] [transport.py] [_log()] userauth is OK
2026-02-15T13:25:52.513 [DEBUG] [Thread-205012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:25:52.513 [DEBUG] [Thread-205012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:25:52.513 [DEBUG] [Thread-205012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:25:52.513 [DEBUG] [Thread-205012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:25:52.532 [INFO] [Thread-205012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:25:52.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:25:52.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:25:53.358 [DEBUG] [Thread-205012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:25:53.358 [DEBUG] [Thread-205012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:25:53.406 [DEBUG] [Thread-205012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:25:53.407 [DEBUG] [Thread-205012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:25:53.416 [DEBUG] [Thread-205012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:25:53.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:25:53.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:25:53.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:25:53.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:25:53.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:25:53.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:25:53.452 [DEBUG] [Thread-205012] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:26:02.925 [DEBUG] [Thread-205014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:17.975 [DEBUG] [Thread-205015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:23.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:26:23.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:26:23.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:26:26.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 25, 45), 23.04, 21.49, 0.0, 20.27, 21.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:26:26.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:25:45
2026-02-15T13:26:26.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:26:26.718 [DEBUG] [Thread-205016] [transport.py] [_log()] starting thread (client mode): 0xa2d1b760
2026-02-15T13:26:26.718 [DEBUG] [Thread-205016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:26:26.739 [DEBUG] [Thread-205016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:26:26.739 [INFO] [Thread-205016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:26:26.742 [DEBUG] [Thread-205016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:26:26.742 [DEBUG] [Thread-205016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:26:26.742 [DEBUG] [Thread-205016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] client lang: <none>
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] server lang: <none>
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] kex follows: False
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] Compression: none
2026-02-15T13:26:26.743 [DEBUG] [Thread-205016] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:26:26.760 [DEBUG] [Thread-205016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:26:26.761 [DEBUG] [Thread-205016] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:26:26.761 [DEBUG] [Thread-205016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:26:26.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:26:26.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:26:26.763 [DEBUG] [Thread-205016] [transport.py] [_log()] userauth is OK
2026-02-15T13:26:26.763 [DEBUG] [Thread-205016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:26:26.763 [DEBUG] [Thread-205016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:26:26.764 [DEBUG] [Thread-205016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:26:26.764 [DEBUG] [Thread-205016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:26:26.789 [INFO] [Thread-205016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:26:26.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:26:27.414 [DEBUG] [Thread-205016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:26:27.414 [DEBUG] [Thread-205016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:26:27.414 [DEBUG] [Thread-205016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:26:27.455 [DEBUG] [Thread-205016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:26:27.456 [DEBUG] [Thread-205016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:26:27.458 [DEBUG] [Thread-205016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:26:27.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:26:27.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:26:27.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:26:27.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:26:27.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:26:27.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:26:27.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:26:27.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:26:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:26:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.476139 -999.00  +22.10  19.43     27   +2.40 1 1 1 1 1   888    0 18.74 -30.40 ----- 19.4 19.4 131.8 22.6 29.2 -28.4 28.4 -26.4 28.6 -25.7 29.9 -27.7
2026-02-15T13:26:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:26:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:26:27.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.476139
2026-02-15T13:26:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:26:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:26:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:26:27.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:26:27.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:26:27.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:25:45', tmtdew=23.04, humidity=21.49, cloud=0.0, wind=20.27, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:25:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:26:27.484 [DEBUG] [Thread-205016] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:26:27.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:26:27.578 [DEBUG] [Thread-205019] [transport.py] [_log()] starting thread (client mode): 0xa2d00e20
2026-02-15T13:26:27.578 [DEBUG] [Thread-205019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:26:27.593 [DEBUG] [Thread-205019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:26:27.593 [INFO] [Thread-205019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] client lang: <none>
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] server lang: <none>
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] kex follows: False
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:26:27.601 [DEBUG] [Thread-205019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:26:27.602 [DEBUG] [Thread-205019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:26:27.602 [DEBUG] [Thread-205019] [transport.py] [_log()] Compression: none
2026-02-15T13:26:27.602 [DEBUG] [Thread-205019] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:26:27.661 [DEBUG] [Thread-205019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:26:27.662 [DEBUG] [Thread-205019] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:26:27.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:26:27.663 [DEBUG] [Thread-205019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:26:27.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:26:27.723 [DEBUG] [Thread-205019] [transport.py] [_log()] userauth is OK
2026-02-15T13:26:27.723 [DEBUG] [Thread-205019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:26:27.723 [DEBUG] [Thread-205019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:26:27.723 [DEBUG] [Thread-205019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:26:27.723 [DEBUG] [Thread-205019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:26:27.741 [INFO] [Thread-205019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:26:27.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:26:27.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:26:28.553 [DEBUG] [Thread-205019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:26:28.553 [DEBUG] [Thread-205019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:26:28.601 [DEBUG] [Thread-205019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:26:28.602 [DEBUG] [Thread-205019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:26:28.611 [DEBUG] [Thread-205019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:26:28.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:26:28.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:26:28.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:26:28.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:26:28.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:26:28.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:26:28.648 [DEBUG] [Thread-205019] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:26:32.825 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:32.826 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:33.013 [DEBUG] [Thread-205021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:48.070 [DEBUG] [Thread-205022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:49.779 [DEBUG] [Thread-205023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:26:58.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:26:58.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:26:58.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:27:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 26, 20), 23.23, 21.22, 0.0, 20.24, 21.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:27:00.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:26:20
2026-02-15T13:27:01.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:27:01.583 [DEBUG] [Thread-205024] [transport.py] [_log()] starting thread (client mode): 0xa2d6b520
2026-02-15T13:27:01.583 [DEBUG] [Thread-205024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:27:01.602 [DEBUG] [Thread-205024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:27:01.602 [INFO] [Thread-205024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:27:01.605 [DEBUG] [Thread-205024] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] client lang: <none>
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] server lang: <none>
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] kex follows: False
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:27:01.606 [DEBUG] [Thread-205024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:27:01.607 [DEBUG] [Thread-205024] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:27:01.607 [DEBUG] [Thread-205024] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:27:01.607 [DEBUG] [Thread-205024] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:27:01.607 [DEBUG] [Thread-205024] [transport.py] [_log()] Compression: none
2026-02-15T13:27:01.607 [DEBUG] [Thread-205024] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:27:01.626 [DEBUG] [Thread-205024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:27:01.626 [DEBUG] [Thread-205024] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:27:01.627 [DEBUG] [Thread-205024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:27:01.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:27:01.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:27:01.629 [DEBUG] [Thread-205024] [transport.py] [_log()] userauth is OK
2026-02-15T13:27:01.629 [DEBUG] [Thread-205024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:27:01.629 [DEBUG] [Thread-205024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:27:01.629 [DEBUG] [Thread-205024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:27:01.630 [DEBUG] [Thread-205024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:27:01.654 [INFO] [Thread-205024] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:27:01.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:27:02.411 [DEBUG] [Thread-205024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:27:02.412 [DEBUG] [Thread-205024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:27:02.412 [DEBUG] [Thread-205024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:27:02.452 [DEBUG] [Thread-205024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:27:02.453 [DEBUG] [Thread-205024] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:27:02.455 [DEBUG] [Thread-205024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:27:02.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:27:02.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:27:02.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:27:02.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:27:02.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:27:02.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:27:02.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:27:02.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:27:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:27:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.476486 -999.00  +22.40  18.27     26   +2.40 1 1 1 1 1   888    0 18.79 -32.12 ----- 18.3 18.3 136.4 23.2 29.3 -27.7 28.5 -27.4 28.8 -25.5 29.9 -29.2
2026-02-15T13:27:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:27:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:27:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.476486
2026-02-15T13:27:02.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:27:02.477 [DEBUG] [Thread-205024] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:27:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:27:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:27:02.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:27:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:27:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:26:20', tmtdew=23.23, humidity=21.22, cloud=0.0, wind=20.24, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:26:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:27:02.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:27:02.566 [DEBUG] [Thread-205027] [transport.py] [_log()] starting thread (client mode): 0xa2d032b0
2026-02-15T13:27:02.566 [DEBUG] [Thread-205027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:27:02.581 [DEBUG] [Thread-205027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:27:02.581 [INFO] [Thread-205027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:27:02.588 [DEBUG] [Thread-205027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:02.589 [DEBUG] [Thread-205027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] client lang: <none>
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] server lang: <none>
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] kex follows: False
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:27:02.590 [DEBUG] [Thread-205027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:27:02.591 [DEBUG] [Thread-205027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:27:02.591 [DEBUG] [Thread-205027] [transport.py] [_log()] Compression: none
2026-02-15T13:27:02.591 [DEBUG] [Thread-205027] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:27:02.649 [DEBUG] [Thread-205027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:27:02.650 [DEBUG] [Thread-205027] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:27:02.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:27:02.651 [DEBUG] [Thread-205027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:27:02.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:27:02.705 [DEBUG] [Thread-205027] [transport.py] [_log()] userauth is OK
2026-02-15T13:27:02.705 [DEBUG] [Thread-205027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:27:02.706 [DEBUG] [Thread-205027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:27:02.706 [DEBUG] [Thread-205027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:27:02.706 [DEBUG] [Thread-205027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:27:02.725 [INFO] [Thread-205027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:27:02.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:27:02.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:27:03.103 [DEBUG] [Thread-205029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:27:03.552 [DEBUG] [Thread-205027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:27:03.553 [DEBUG] [Thread-205027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:27:03.600 [DEBUG] [Thread-205027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:27:03.601 [DEBUG] [Thread-205027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:27:03.610 [DEBUG] [Thread-205027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:27:03.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:27:03.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:27:03.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:27:03.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:27:03.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:27:03.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:27:03.649 [DEBUG] [Thread-205027] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:27:18.151 [DEBUG] [Thread-205030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:27:32.966 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:27:32.967 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:27:33.187 [DEBUG] [Thread-205031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:27:33.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:27:33.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:27:33.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:27:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 26, 57), 23.36, 21.22, 0.0, 20.89, 22.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:27:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:26:57
2026-02-15T13:27:36.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:27:36.235 [DEBUG] [Thread-205032] [transport.py] [_log()] starting thread (client mode): 0xa2d18dc0
2026-02-15T13:27:36.236 [DEBUG] [Thread-205032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:27:36.255 [DEBUG] [Thread-205032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:27:36.255 [INFO] [Thread-205032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] client lang: <none>
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] server lang: <none>
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] kex follows: False
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] Compression: none
2026-02-15T13:27:36.258 [DEBUG] [Thread-205032] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:27:36.266 [DEBUG] [Thread-205032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:27:36.267 [DEBUG] [Thread-205032] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:27:36.267 [DEBUG] [Thread-205032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:27:36.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:27:36.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:27:36.268 [DEBUG] [Thread-205032] [transport.py] [_log()] userauth is OK
2026-02-15T13:27:36.269 [DEBUG] [Thread-205032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:27:36.269 [DEBUG] [Thread-205032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:27:36.269 [DEBUG] [Thread-205032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:27:36.269 [DEBUG] [Thread-205032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:27:36.285 [INFO] [Thread-205032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:27:36.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:27:36.885 [DEBUG] [Thread-205032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:27:36.885 [DEBUG] [Thread-205032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:27:36.886 [DEBUG] [Thread-205032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:27:36.927 [DEBUG] [Thread-205032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:27:36.927 [DEBUG] [Thread-205032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:27:36.930 [DEBUG] [Thread-205032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:27:36.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:27:36.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:27:36.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:27:36.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:27:36.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:27:36.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:27:36.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:27:36.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:27:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:27:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.477181 -999.00  +22.90  14.40     25   +2.10 1 1 1 1 1   888    0 19.38 -25.09 ----- 14.4 14.4 141.4 16.3 29.4 -29.0 28.6 -28.1 29.0 -26.3 30.0 -28.1
2026-02-15T13:27:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:27:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:27:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.477181
2026-02-15T13:27:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:27:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:27:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:27:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:27:36.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:27:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:26:57', tmtdew=23.36, humidity=21.22, cloud=0.0, wind=20.89, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:27:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:27:36.959 [DEBUG] [Thread-205032] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:27:37.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:27:37.055 [DEBUG] [Thread-205035] [transport.py] [_log()] starting thread (client mode): 0xa2d19180
2026-02-15T13:27:37.056 [DEBUG] [Thread-205035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:27:37.072 [DEBUG] [Thread-205035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:27:37.072 [INFO] [Thread-205035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:27:37.080 [DEBUG] [Thread-205035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:27:37.080 [DEBUG] [Thread-205035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:27:37.080 [DEBUG] [Thread-205035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:27:37.080 [DEBUG] [Thread-205035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:37.080 [DEBUG] [Thread-205035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:27:37.080 [DEBUG] [Thread-205035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] client lang: <none>
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] server lang: <none>
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] kex follows: False
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] Compression: none
2026-02-15T13:27:37.081 [DEBUG] [Thread-205035] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:27:37.145 [DEBUG] [Thread-205035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:27:37.146 [DEBUG] [Thread-205035] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:27:37.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:27:37.147 [DEBUG] [Thread-205035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:27:37.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:27:37.201 [DEBUG] [Thread-205035] [transport.py] [_log()] userauth is OK
2026-02-15T13:27:37.202 [DEBUG] [Thread-205035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:27:37.202 [DEBUG] [Thread-205035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:27:37.202 [DEBUG] [Thread-205035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:27:37.202 [DEBUG] [Thread-205035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:27:37.226 [INFO] [Thread-205035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:27:37.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:27:37.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:27:38.040 [DEBUG] [Thread-205035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:27:38.040 [DEBUG] [Thread-205035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:27:38.087 [DEBUG] [Thread-205035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:27:38.088 [DEBUG] [Thread-205035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:27:38.097 [DEBUG] [Thread-205035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:27:38.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:27:38.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:27: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') -> 00000000
2026-02-15T13:27:38.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:27:38.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:27:38.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:27:38.133 [DEBUG] [Thread-205035] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:27:48.223 [DEBUG] [Thread-205037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:27:49.822 [DEBUG] [Thread-205038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:03.275 [DEBUG] [Thread-205039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:08.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:28:08.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:28:08.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:28:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 27, 33), 25.25, 18.38, 0.0, 16.69, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:28:10.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:27:33
2026-02-15T13:28:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:28:10.583 [DEBUG] [Thread-205040] [transport.py] [_log()] starting thread (client mode): 0xa57c0c10
2026-02-15T13:28:10.583 [DEBUG] [Thread-205040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:28:10.602 [DEBUG] [Thread-205040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:28:10.602 [INFO] [Thread-205040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:28:10.603 [DEBUG] [Thread-205040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] client lang: <none>
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] server lang: <none>
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] kex follows: False
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] Compression: none
2026-02-15T13:28:10.604 [DEBUG] [Thread-205040] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:28:10.616 [DEBUG] [Thread-205040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:28:10.616 [DEBUG] [Thread-205040] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:28:10.616 [DEBUG] [Thread-205040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:28:10.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:28:10.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:28:10.618 [DEBUG] [Thread-205040] [transport.py] [_log()] userauth is OK
2026-02-15T13:28:10.618 [DEBUG] [Thread-205040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:28:10.618 [DEBUG] [Thread-205040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:28:10.618 [DEBUG] [Thread-205040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:28:10.619 [DEBUG] [Thread-205040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:28:10.636 [INFO] [Thread-205040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:28:10.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:28:11.310 [DEBUG] [Thread-205040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:28:11.310 [DEBUG] [Thread-205040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:28:11.310 [DEBUG] [Thread-205040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:28:11.351 [DEBUG] [Thread-205040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:28:11.351 [DEBUG] [Thread-205040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:28:11.354 [DEBUG] [Thread-205040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:28:11.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:28:11.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:28:11.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:28:11.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:28:11.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:28:11.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:28:11.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:28:11.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:28:11.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:28:11.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.477528 -999.00  +22.60  18.80     25   +1.90 1 1 1 1 1   888    0 19.29 -22.89 ----- 18.8 18.8 159.9 28.0 29.4 -30.3 28.6 -28.1 29.0 -27.4 29.9 -29.4
2026-02-15T13:28:11.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:28:11.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:28:11.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.477528
2026-02-15T13:28:11.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:28:11.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:28:11.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:28:11.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:28:11.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:28:11.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:27:33', tmtdew=25.25, humidity=18.38, cloud=0.0, wind=16.69, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:27:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:28:11.377 [DEBUG] [Thread-205040] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:28:11.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:28:11.485 [DEBUG] [Thread-205043] [transport.py] [_log()] starting thread (client mode): 0xa2d6aaa0
2026-02-15T13:28:11.485 [DEBUG] [Thread-205043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:28:11.503 [DEBUG] [Thread-205043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:28:11.503 [INFO] [Thread-205043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:28:11.511 [DEBUG] [Thread-205043] [transport.py] [_log()] client lang: <none>
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] server lang: <none>
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] kex follows: False
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] Compression: none
2026-02-15T13:28:11.512 [DEBUG] [Thread-205043] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:28:11.572 [DEBUG] [Thread-205043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:28:11.572 [DEBUG] [Thread-205043] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:28:11.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:28:11.574 [DEBUG] [Thread-205043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:28:11.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:28:11.629 [DEBUG] [Thread-205043] [transport.py] [_log()] userauth is OK
2026-02-15T13:28:11.629 [DEBUG] [Thread-205043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:28:11.629 [DEBUG] [Thread-205043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:28:11.630 [DEBUG] [Thread-205043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:28:11.630 [DEBUG] [Thread-205043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:28:11.653 [INFO] [Thread-205043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:28:11.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:28:11.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:28:12.442 [DEBUG] [Thread-205043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:28:12.442 [DEBUG] [Thread-205043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:28:12.490 [DEBUG] [Thread-205043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:28:12.490 [DEBUG] [Thread-205043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:28:12.500 [DEBUG] [Thread-205043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:28:12.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:28:12.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:28:12.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:28:12.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:28:12.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:28:12.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:28:12.547 [DEBUG] [Thread-205043] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:28:18.313 [DEBUG] [Thread-205045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:33.108 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:33.109 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:33.365 [DEBUG] [Thread-205046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:42.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:28:42.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:28:42.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:28:44.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 28, 8), 23.35, 21.15, 0.0, 23.03, 21.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:28:44.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:28:08
2026-02-15T13:28:44.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:28:44.971 [DEBUG] [Thread-205047] [transport.py] [_log()] starting thread (client mode): 0xa2d01120
2026-02-15T13:28:44.971 [DEBUG] [Thread-205047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:28:44.990 [DEBUG] [Thread-205047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:28:44.990 [INFO] [Thread-205047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] client lang: <none>
2026-02-15T13:28:44.993 [DEBUG] [Thread-205047] [transport.py] [_log()] server lang: <none>
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] kex follows: False
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] Compression: none
2026-02-15T13:28:44.994 [DEBUG] [Thread-205047] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:28:45.012 [DEBUG] [Thread-205047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:28:45.012 [DEBUG] [Thread-205047] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:28:45.013 [DEBUG] [Thread-205047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:28:45.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:28:45.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:28:45.014 [DEBUG] [Thread-205047] [transport.py] [_log()] userauth is OK
2026-02-15T13:28:45.015 [DEBUG] [Thread-205047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:28:45.015 [DEBUG] [Thread-205047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:28:45.015 [DEBUG] [Thread-205047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:28:45.015 [DEBUG] [Thread-205047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:28:45.051 [INFO] [Thread-205047] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:28:45.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:28:45.705 [DEBUG] [Thread-205047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:28:45.706 [DEBUG] [Thread-205047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:28:45.706 [DEBUG] [Thread-205047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:28:45.746 [DEBUG] [Thread-205047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:28:45.747 [DEBUG] [Thread-205047] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:28:45.750 [DEBUG] [Thread-205047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:28:45.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:28:45.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:28:45.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:28:45.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:28:45.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:28:45.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:28:45.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:28:45.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:28:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:28:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.477875 -999.00  +22.30  14.77     25   +1.80 1 1 1 1 1   888    0 19.50 -21.25 ----- 14.8 14.8 163.6 22.9 29.4 -29.1 28.5 -27.6 28.9 -28.6 30.0 -28.9
2026-02-15T13:28:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:28:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:28:45.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.477875
2026-02-15T13:28:45.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:28:45.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:28:45.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:28:45.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:28:45.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:28:45.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:28:08', tmtdew=23.35, humidity=21.15, cloud=0.0, wind=23.03, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:28:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:28:45.776 [DEBUG] [Thread-205047] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:28:45.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:28:45.871 [DEBUG] [Thread-205050] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-15T13:28:45.872 [DEBUG] [Thread-205050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:28:45.886 [DEBUG] [Thread-205050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:28:45.886 [INFO] [Thread-205050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:28:45.894 [DEBUG] [Thread-205050] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:28:45.894 [DEBUG] [Thread-205050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:28:45.894 [DEBUG] [Thread-205050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:28:45.894 [DEBUG] [Thread-205050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] client lang: <none>
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] server lang: <none>
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] kex follows: False
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] Compression: none
2026-02-15T13:28:45.895 [DEBUG] [Thread-205050] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:28:45.952 [DEBUG] [Thread-205050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:28:45.952 [DEBUG] [Thread-205050] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:28:45.952 [DEBUG] [Thread-205050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:28:45.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:28:45.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:28:46.010 [DEBUG] [Thread-205050] [transport.py] [_log()] userauth is OK
2026-02-15T13:28:46.010 [DEBUG] [Thread-205050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:28:46.010 [DEBUG] [Thread-205050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:28:46.010 [DEBUG] [Thread-205050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:28:46.011 [DEBUG] [Thread-205050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:28:46.030 [INFO] [Thread-205050] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:28:46.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:28:46.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:28:46.887 [DEBUG] [Thread-205050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:28:46.887 [DEBUG] [Thread-205050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:28:46.936 [DEBUG] [Thread-205050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:28:46.936 [DEBUG] [Thread-205050] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:28:46.948 [DEBUG] [Thread-205050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:28:46.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:28:46.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:28:46.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:28:46.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:28:46.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:28:46.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:28:46.988 [DEBUG] [Thread-205050] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:28:48.408 [DEBUG] [Thread-205052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:28:49.855 [DEBUG] [Thread-205053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:03.459 [DEBUG] [Thread-205054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:16.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:29:16.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:29:16.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:29:18.497 [DEBUG] [Thread-205055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:18.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 28, 43), 23.08, 21.28, 0.0, 17.65, 21.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:29:18.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:28:43
2026-02-15T13:29:19.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:29:19.409 [DEBUG] [Thread-205056] [transport.py] [_log()] starting thread (client mode): 0xa57e2410
2026-02-15T13:29:19.409 [DEBUG] [Thread-205056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:29:19.431 [DEBUG] [Thread-205056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:29:19.431 [INFO] [Thread-205056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] client lang: <none>
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] server lang: <none>
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] kex follows: False
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:29:19.434 [DEBUG] [Thread-205056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:29:19.435 [DEBUG] [Thread-205056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:29:19.435 [DEBUG] [Thread-205056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:29:19.435 [DEBUG] [Thread-205056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:29:19.435 [DEBUG] [Thread-205056] [transport.py] [_log()] Compression: none
2026-02-15T13:29:19.435 [DEBUG] [Thread-205056] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:29:19.452 [DEBUG] [Thread-205056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:29:19.452 [DEBUG] [Thread-205056] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:29:19.453 [DEBUG] [Thread-205056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:29:19.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:29:19.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:29:19.456 [DEBUG] [Thread-205056] [transport.py] [_log()] userauth is OK
2026-02-15T13:29:19.456 [DEBUG] [Thread-205056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:29:19.456 [DEBUG] [Thread-205056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:29:19.456 [DEBUG] [Thread-205056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:29:19.456 [DEBUG] [Thread-205056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:29:19.481 [INFO] [Thread-205056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:29:19.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:29:20.083 [DEBUG] [Thread-205056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:29:20.083 [DEBUG] [Thread-205056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:29:20.084 [DEBUG] [Thread-205056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:29:20.124 [DEBUG] [Thread-205056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:29:20.124 [DEBUG] [Thread-205056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:29:20.128 [DEBUG] [Thread-205056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:29:20.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:29:20.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:29:20.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:29:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:29:20.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:29:20.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:29:20.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:29:20.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:29:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:29:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.478569 -999.00  +22.30  13.82     26   +2.00 1 1 1 1 1   888    0 19.56 -18.51 ----- 13.8 13.8 168.2 21.0 29.5 -29.2 28.5 -27.7 29.0 -25.8 30.1 -29.3
2026-02-15T13:29:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:29:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:29:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.478569
2026-02-15T13:29:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:29:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:29:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:29:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:29:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:29:20.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:28:43', tmtdew=23.08, humidity=21.28, cloud=0.0, wind=17.65, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:29:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:29:20.157 [DEBUG] [Thread-205056] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:29:20.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:29:20.251 [DEBUG] [Thread-205059] [transport.py] [_log()] starting thread (client mode): 0xa2d1a110
2026-02-15T13:29:20.251 [DEBUG] [Thread-205059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:29:20.266 [DEBUG] [Thread-205059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:29:20.266 [INFO] [Thread-205059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] client lang: <none>
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] server lang: <none>
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] kex follows: False
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:29:20.275 [DEBUG] [Thread-205059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:29:20.276 [DEBUG] [Thread-205059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:29:20.276 [DEBUG] [Thread-205059] [transport.py] [_log()] Compression: none
2026-02-15T13:29:20.276 [DEBUG] [Thread-205059] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:29:20.334 [DEBUG] [Thread-205059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:29:20.334 [DEBUG] [Thread-205059] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:29:20.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:29:20.335 [DEBUG] [Thread-205059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:29:20.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:29:20.394 [DEBUG] [Thread-205059] [transport.py] [_log()] userauth is OK
2026-02-15T13:29:20.394 [DEBUG] [Thread-205059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:29:20.394 [DEBUG] [Thread-205059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:29:20.394 [DEBUG] [Thread-205059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:29:20.394 [DEBUG] [Thread-205059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:29:20.413 [INFO] [Thread-205059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:29:20.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:29:20.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:29:21.260 [DEBUG] [Thread-205059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:29:21.260 [DEBUG] [Thread-205059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:29:21.310 [DEBUG] [Thread-205059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:29:21.310 [DEBUG] [Thread-205059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:29:21.322 [DEBUG] [Thread-205059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:29:21.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:29:21.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:29:21.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:29:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:29:21.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:29:21.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:29:21.373 [DEBUG] [Thread-205059] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:29:33.250 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:33.251 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:33.536 [DEBUG] [Thread-205061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:48.589 [DEBUG] [Thread-205062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:49.886 [DEBUG] [Thread-205063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:29:51.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:29:51.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:29:51.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:29:53.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 29, 20), 23.43, 20.84, 0.0, 22.3, 21.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:29:53.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:29:20
2026-02-15T13:29:54.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:29:54.489 [DEBUG] [Thread-205064] [transport.py] [_log()] starting thread (client mode): 0xa81d6c80
2026-02-15T13:29:54.489 [DEBUG] [Thread-205064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:29:54.510 [DEBUG] [Thread-205064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:29:54.510 [INFO] [Thread-205064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:29:54.513 [DEBUG] [Thread-205064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] client lang: <none>
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] server lang: <none>
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] kex follows: False
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] Compression: none
2026-02-15T13:29:54.514 [DEBUG] [Thread-205064] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:29:54.531 [DEBUG] [Thread-205064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:29:54.532 [DEBUG] [Thread-205064] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:29:54.532 [DEBUG] [Thread-205064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:29:54.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:29:54.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:29:54.534 [DEBUG] [Thread-205064] [transport.py] [_log()] userauth is OK
2026-02-15T13:29:54.535 [DEBUG] [Thread-205064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:29:54.535 [DEBUG] [Thread-205064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:29:54.535 [DEBUG] [Thread-205064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:29:54.535 [DEBUG] [Thread-205064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:29:54.554 [INFO] [Thread-205064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:29:54.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:29:55.164 [DEBUG] [Thread-205064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:29:55.164 [DEBUG] [Thread-205064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:29:55.165 [DEBUG] [Thread-205064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:29:55.205 [DEBUG] [Thread-205064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:29:55.205 [DEBUG] [Thread-205064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:29:55.208 [DEBUG] [Thread-205064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:29:55.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:29:55.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:29:55.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:29:55.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:29:55.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:29:55.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:29:55.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:29:55.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:29:55.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:29:55.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.478917 -999.00  +22.40  15.58     25   +1.80 1 1 1 1 1   888    0 19.70 -17.64 ----- 15.6 15.6 134.8 22.5 29.4 -28.2 28.6 -28.4 29.0 -26.7 30.0 -29.3
2026-02-15T13:29:55.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:29:55.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:29:55.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.478917
2026-02-15T13:29:55.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:29:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:29:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:29:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:29:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:29:55.233 [DEBUG] [Thread-205064] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:29:55.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:29:20', tmtdew=23.43, humidity=20.84, cloud=0.0, wind=22.3, temperature=21.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:29:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:29:55.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:29:55.337 [DEBUG] [Thread-205067] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-15T13:29:55.337 [DEBUG] [Thread-205067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:29:55.353 [DEBUG] [Thread-205067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:29:55.353 [INFO] [Thread-205067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] client lang: <none>
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] server lang: <none>
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] kex follows: False
2026-02-15T13:29:55.361 [DEBUG] [Thread-205067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:29:55.362 [DEBUG] [Thread-205067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:29:55.362 [DEBUG] [Thread-205067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:29:55.362 [DEBUG] [Thread-205067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:29:55.362 [DEBUG] [Thread-205067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:29:55.362 [DEBUG] [Thread-205067] [transport.py] [_log()] Compression: none
2026-02-15T13:29:55.362 [DEBUG] [Thread-205067] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:29:55.422 [DEBUG] [Thread-205067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:29:55.422 [DEBUG] [Thread-205067] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:29:55.423 [DEBUG] [Thread-205067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:29:55.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:29:55.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:29:55.478 [DEBUG] [Thread-205067] [transport.py] [_log()] userauth is OK
2026-02-15T13:29:55.478 [DEBUG] [Thread-205067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:29:55.478 [DEBUG] [Thread-205067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:29:55.478 [DEBUG] [Thread-205067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:29:55.478 [DEBUG] [Thread-205067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:29:55.497 [INFO] [Thread-205067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:29:55.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:29:55.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:29:56.379 [DEBUG] [Thread-205067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:29:56.379 [DEBUG] [Thread-205067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:29:56.427 [DEBUG] [Thread-205067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:29:56.427 [DEBUG] [Thread-205067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:29:56.436 [DEBUG] [Thread-205067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:29:56.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:29:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:29:56.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:29:56.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:29:56.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:29:56.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:29:56.470 [DEBUG] [Thread-205067] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:30:03.621 [DEBUG] [Thread-205069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:30:18.664 [DEBUG] [Thread-205070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:30:26.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:30:26.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:30:26.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:30:28.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 29, 55), 23.57, 20.47, 0.0, 21.14, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:30:28.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:29:55
2026-02-15T13:30:28.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:30:28.886 [DEBUG] [Thread-205071] [transport.py] [_log()] starting thread (client mode): 0xa81d6110
2026-02-15T13:30:28.886 [DEBUG] [Thread-205071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:30:28.905 [DEBUG] [Thread-205071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:30:28.905 [INFO] [Thread-205071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:30:28.907 [DEBUG] [Thread-205071] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:30:28.907 [DEBUG] [Thread-205071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] client lang: <none>
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] server lang: <none>
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] kex follows: False
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:30:28.908 [DEBUG] [Thread-205071] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:30:28.909 [DEBUG] [Thread-205071] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:30:28.909 [DEBUG] [Thread-205071] [transport.py] [_log()] Compression: none
2026-02-15T13:30:28.909 [DEBUG] [Thread-205071] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:30:28.923 [DEBUG] [Thread-205071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:30:28.924 [DEBUG] [Thread-205071] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:30:28.925 [DEBUG] [Thread-205071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:30:28.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:30:28.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:30:28.927 [DEBUG] [Thread-205071] [transport.py] [_log()] userauth is OK
2026-02-15T13:30:28.928 [DEBUG] [Thread-205071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:30:28.928 [DEBUG] [Thread-205071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:30:28.928 [DEBUG] [Thread-205071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:30:28.928 [DEBUG] [Thread-205071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:30:28.949 [INFO] [Thread-205071] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:30:28.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:30:29.580 [DEBUG] [Thread-205071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:30:29.580 [DEBUG] [Thread-205071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:30:29.581 [DEBUG] [Thread-205071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:30:29.621 [DEBUG] [Thread-205071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:30:29.621 [DEBUG] [Thread-205071] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:30:29.624 [DEBUG] [Thread-205071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:30:29.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:30:29.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:30:29.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:30:29.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:30:29.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:30:29.650 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:30:29.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:30:29.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:30:29.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:30:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.479263 -999.00  +22.40  13.51     25   +1.70 1 1 1 1 1   888    0 19.45 -15.48 ----- 13.5 13.5 143.4 18.9 29.5 -28.7 28.6 -27.7 29.0 -26.5 30.0 -29.0
2026-02-15T13:30:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:30:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:30:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.479263
2026-02-15T13:30:29.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:30:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:30:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:30:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:30:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:30:29.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:29:55', tmtdew=23.57, humidity=20.47, cloud=0.0, wind=21.14, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:30:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:30:29.653 [DEBUG] [Thread-205071] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:30:29.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:30:29.759 [DEBUG] [Thread-205074] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa70
2026-02-15T13:30:29.759 [DEBUG] [Thread-205074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:30:29.775 [DEBUG] [Thread-205074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:30:29.775 [INFO] [Thread-205074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] client lang: <none>
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] server lang: <none>
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] kex follows: False
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:30:29.784 [DEBUG] [Thread-205074] [transport.py] [_log()] Compression: none
2026-02-15T13:30:29.785 [DEBUG] [Thread-205074] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:30:29.845 [DEBUG] [Thread-205074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:30:29.846 [DEBUG] [Thread-205074] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:30:29.846 [DEBUG] [Thread-205074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:30:29.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:30:29.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:30:29.908 [DEBUG] [Thread-205074] [transport.py] [_log()] userauth is OK
2026-02-15T13:30:29.909 [DEBUG] [Thread-205074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:30:29.909 [DEBUG] [Thread-205074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:30:29.909 [DEBUG] [Thread-205074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:30:29.909 [DEBUG] [Thread-205074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:30:29.933 [INFO] [Thread-205074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:30:29.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:30:29.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:30:30.778 [DEBUG] [Thread-205074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:30:30.779 [DEBUG] [Thread-205074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:30:30.827 [DEBUG] [Thread-205074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:30:30.827 [DEBUG] [Thread-205074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:30:30.836 [DEBUG] [Thread-205074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:30:30.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:30:30.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:30:30.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:30:30.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:30:30.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:30:30.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:30:30.874 [DEBUG] [Thread-205074] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:30:33.392 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:30:33.393 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:30:33.702 [DEBUG] [Thread-205076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:30:48.754 [DEBUG] [Thread-205077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:30:49.941 [DEBUG] [Thread-205078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:00.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:31:00.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:31:00.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:31:02.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 30, 30), 23.56, 20.45, 0.0, 18.7, 21.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:31:02.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:30:30
2026-02-15T13:31:03.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:31:03.452 [DEBUG] [Thread-205079] [transport.py] [_log()] starting thread (client mode): 0xa57e0f40
2026-02-15T13:31:03.452 [DEBUG] [Thread-205079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:31:03.472 [DEBUG] [Thread-205079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:31:03.472 [INFO] [Thread-205079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] client lang: <none>
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] server lang: <none>
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] kex follows: False
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] Compression: none
2026-02-15T13:31:03.476 [DEBUG] [Thread-205079] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:31:03.485 [DEBUG] [Thread-205079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:31:03.485 [DEBUG] [Thread-205079] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:31:03.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:31:03.486 [DEBUG] [Thread-205079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:31:03.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:31:03.488 [DEBUG] [Thread-205079] [transport.py] [_log()] userauth is OK
2026-02-15T13:31:03.488 [DEBUG] [Thread-205079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:31:03.488 [DEBUG] [Thread-205079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:31:03.489 [DEBUG] [Thread-205079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:31:03.489 [DEBUG] [Thread-205079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:31:03.506 [INFO] [Thread-205079] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:31:03.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:31:03.794 [DEBUG] [Thread-205081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:04.092 [DEBUG] [Thread-205079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:31:04.092 [DEBUG] [Thread-205079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:31:04.092 [DEBUG] [Thread-205079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:31:04.133 [DEBUG] [Thread-205079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:31:04.133 [DEBUG] [Thread-205079] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:31:04.136 [DEBUG] [Thread-205079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:31:04.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:31:04.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:31:04.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:31:04.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:31:04.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:31:04.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:31:04.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:31:04.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:31:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:31:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.479611 -999.00  +22.30   7.41     25   +1.60 1 1 1 1 1   888    0 19.64 -12.34 ----- 7.4 7.4 163.0 11.2 29.6 -28.9 28.7 -27.8 29.1 -27.1 30.2 -28.2
2026-02-15T13:31:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:31:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:31:04.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.479611
2026-02-15T13:31:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:31:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:31:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:31:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:31:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:31:04.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:30:30', tmtdew=23.56, humidity=20.45, cloud=0.0, wind=18.7, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:30:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:31:04.163 [DEBUG] [Thread-205079] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:31:04.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:31:04.260 [DEBUG] [Thread-205083] [transport.py] [_log()] starting thread (client mode): 0xa57e3b50
2026-02-15T13:31:04.260 [DEBUG] [Thread-205083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:31:04.274 [DEBUG] [Thread-205083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:31:04.275 [INFO] [Thread-205083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:31:04.282 [DEBUG] [Thread-205083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:31:04.282 [DEBUG] [Thread-205083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] client lang: <none>
2026-02-15T13:31:04.283 [DEBUG] [Thread-205083] [transport.py] [_log()] server lang: <none>
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] kex follows: False
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] Compression: none
2026-02-15T13:31:04.284 [DEBUG] [Thread-205083] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:31:04.342 [DEBUG] [Thread-205083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:31:04.343 [DEBUG] [Thread-205083] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:31:04.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:31:04.344 [DEBUG] [Thread-205083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:31:04.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:31:04.404 [DEBUG] [Thread-205083] [transport.py] [_log()] userauth is OK
2026-02-15T13:31:04.405 [DEBUG] [Thread-205083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:31:04.405 [DEBUG] [Thread-205083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:31:04.405 [DEBUG] [Thread-205083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:31:04.405 [DEBUG] [Thread-205083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:31:04.427 [INFO] [Thread-205083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:31:04.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:31:04.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:31:05.247 [DEBUG] [Thread-205083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:31:05.247 [DEBUG] [Thread-205083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:31:05.295 [DEBUG] [Thread-205083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:31:05.295 [DEBUG] [Thread-205083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:31:05.303 [DEBUG] [Thread-205083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:31:05.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:31:05.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:31:05.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:31:05.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:31:05.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:31:05.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:31:05.337 [DEBUG] [Thread-205083] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:31:18.831 [DEBUG] [Thread-205085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:33.536 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:33.537 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:33.882 [DEBUG] [Thread-205086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:35.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:31:35.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:31: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-02-15T13:31:37.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 31, 6), 23.45, 20.62, 0.0, 19.64, 21.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:31:37.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:31:06
2026-02-15T13:31:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:31:37.735 [DEBUG] [Thread-205087] [transport.py] [_log()] starting thread (client mode): 0xa5743d90
2026-02-15T13:31:37.735 [DEBUG] [Thread-205087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:31:37.753 [DEBUG] [Thread-205087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:31:37.753 [INFO] [Thread-205087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:31:37.756 [DEBUG] [Thread-205087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:31:37.756 [DEBUG] [Thread-205087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] client lang: <none>
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] server lang: <none>
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] kex follows: False
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:31:37.757 [DEBUG] [Thread-205087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:31:37.758 [DEBUG] [Thread-205087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:31:37.758 [DEBUG] [Thread-205087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:31:37.758 [DEBUG] [Thread-205087] [transport.py] [_log()] Compression: none
2026-02-15T13:31:37.758 [DEBUG] [Thread-205087] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:31:37.769 [DEBUG] [Thread-205087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:31:37.770 [DEBUG] [Thread-205087] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:31:37.770 [DEBUG] [Thread-205087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:31:37.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:31:37.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:31:37.772 [DEBUG] [Thread-205087] [transport.py] [_log()] userauth is OK
2026-02-15T13:31:37.772 [DEBUG] [Thread-205087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:31:37.772 [DEBUG] [Thread-205087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:31:37.773 [DEBUG] [Thread-205087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:31:37.773 [DEBUG] [Thread-205087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:31:37.796 [INFO] [Thread-205087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:31:37.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:31:38.419 [DEBUG] [Thread-205087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:31:38.419 [DEBUG] [Thread-205087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:31:38.420 [DEBUG] [Thread-205087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:31:38.460 [DEBUG] [Thread-205087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:31:38.461 [DEBUG] [Thread-205087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:31:38.463 [DEBUG] [Thread-205087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:31:38.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:31:38.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:31:38.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:31:38.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:31:38.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:31:38.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:31:38.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:31:38.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:31:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:31:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.479958 -999.00  +22.20  12.23     25   +1.60 1 1 1 1 1   888    0 19.48 -5.96 ----- 12.2 12.2 152.4 17.6 29.7 -28.5 28.8 -27.2 29.1 -27.5 30.4 -28.7
2026-02-15T13:31:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:31:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:31:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.479958
2026-02-15T13:31:38.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:31:38.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:31:38.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:31:38.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:31:38.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:31:38.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:31:06', tmtdew=23.45, humidity=20.62, cloud=0.0, wind=19.64, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:31:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:31:38.489 [DEBUG] [Thread-205087] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:31:38.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:31:38.585 [DEBUG] [Thread-205090] [transport.py] [_log()] starting thread (client mode): 0xa2db6b30
2026-02-15T13:31:38.585 [DEBUG] [Thread-205090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:31:38.599 [DEBUG] [Thread-205090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:31:38.600 [INFO] [Thread-205090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:31:38.607 [DEBUG] [Thread-205090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] client lang: <none>
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] server lang: <none>
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] kex follows: False
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:31:38.608 [DEBUG] [Thread-205090] [transport.py] [_log()] Compression: none
2026-02-15T13:31:38.609 [DEBUG] [Thread-205090] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:31:38.666 [DEBUG] [Thread-205090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:31:38.667 [DEBUG] [Thread-205090] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:31:38.667 [DEBUG] [Thread-205090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:31:38.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:31:38.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:31:38.722 [DEBUG] [Thread-205090] [transport.py] [_log()] userauth is OK
2026-02-15T13:31:38.723 [DEBUG] [Thread-205090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:31:38.723 [DEBUG] [Thread-205090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:31:38.723 [DEBUG] [Thread-205090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:31:38.723 [DEBUG] [Thread-205090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:31:38.741 [INFO] [Thread-205090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:31:38.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:31:38.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:31:39.584 [DEBUG] [Thread-205090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:31:39.585 [DEBUG] [Thread-205090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:31:39.632 [DEBUG] [Thread-205090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:31:39.633 [DEBUG] [Thread-205090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:31:39.641 [DEBUG] [Thread-205090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:31:39.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:31:39.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:31:39.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:31:39.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:31:39.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:31:39.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:31:39.677 [DEBUG] [Thread-205090] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:31:48.919 [DEBUG] [Thread-205092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:31:49.974 [DEBUG] [Thread-205093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:03.969 [DEBUG] [Thread-205094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:32:09.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:32:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:32:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 31, 43), 23.3, 20.9, 0.0, 21.93, 21.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:32:12.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:31:43
2026-02-15T13:32:12.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:32:12.810 [DEBUG] [Thread-205095] [transport.py] [_log()] starting thread (client mode): 0xa5741630
2026-02-15T13:32:12.810 [DEBUG] [Thread-205095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:32:12.831 [DEBUG] [Thread-205095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:32:12.831 [INFO] [Thread-205095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:32:12.834 [DEBUG] [Thread-205095] [transport.py] [_log()] client lang: <none>
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] server lang: <none>
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] kex follows: False
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] Compression: none
2026-02-15T13:32:12.835 [DEBUG] [Thread-205095] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:32:12.855 [DEBUG] [Thread-205095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:32:12.855 [DEBUG] [Thread-205095] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:32:12.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:32:12.857 [DEBUG] [Thread-205095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:32:12.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:32:12.859 [DEBUG] [Thread-205095] [transport.py] [_log()] userauth is OK
2026-02-15T13:32:12.859 [DEBUG] [Thread-205095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:32:12.859 [DEBUG] [Thread-205095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:32:12.860 [DEBUG] [Thread-205095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:32:12.860 [DEBUG] [Thread-205095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:32:12.882 [INFO] [Thread-205095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:32:12.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:32:13.490 [DEBUG] [Thread-205095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:32:13.491 [DEBUG] [Thread-205095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:32:13.491 [DEBUG] [Thread-205095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:32:13.532 [DEBUG] [Thread-205095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:32:13.532 [DEBUG] [Thread-205095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:32:13.536 [DEBUG] [Thread-205095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:32:13.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:32:13.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:32:13.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:32:13.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:32:13.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:32:13.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:32:13.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:32:13.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:32:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:32:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.480306 -999.00  +22.00  11.81     25   +1.60 1 1 1 1 1   888    0 20.47 0.65 ----- 11.8 11.8 169.0 31.6 29.5 -29.3 28.7 -28.7 29.1 -28.8 30.2 -30.6
2026-02-15T13:32:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:32:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:32:13.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.480306
2026-02-15T13:32:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:32:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:32:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:32:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:32:13.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:32:13.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:31:43', tmtdew=23.3, humidity=20.9, cloud=0.0, wind=21.93, temperature=21.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:31:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:32:13.566 [DEBUG] [Thread-205095] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:32:13.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:32:13.664 [DEBUG] [Thread-205098] [transport.py] [_log()] starting thread (client mode): 0xa2d03ac0
2026-02-15T13:32:13.664 [DEBUG] [Thread-205098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:32:13.686 [DEBUG] [Thread-205098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:32:13.686 [INFO] [Thread-205098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:32:13.693 [DEBUG] [Thread-205098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] client lang: <none>
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] server lang: <none>
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] kex follows: False
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:32:13.694 [DEBUG] [Thread-205098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:32:13.695 [DEBUG] [Thread-205098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:32:13.695 [DEBUG] [Thread-205098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:32:13.695 [DEBUG] [Thread-205098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:32:13.695 [DEBUG] [Thread-205098] [transport.py] [_log()] Compression: none
2026-02-15T13:32:13.695 [DEBUG] [Thread-205098] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:32:13.754 [DEBUG] [Thread-205098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:32:13.755 [DEBUG] [Thread-205098] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:32:13.756 [DEBUG] [Thread-205098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:32:13.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:32:13.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:32:13.811 [DEBUG] [Thread-205098] [transport.py] [_log()] userauth is OK
2026-02-15T13:32:13.811 [DEBUG] [Thread-205098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:32:13.811 [DEBUG] [Thread-205098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:32:13.811 [DEBUG] [Thread-205098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:32:13.811 [DEBUG] [Thread-205098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:32:13.833 [INFO] [Thread-205098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:32:13.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:32:13.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:32:14.656 [DEBUG] [Thread-205098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:32:14.657 [DEBUG] [Thread-205098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:32:14.704 [DEBUG] [Thread-205098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:32:14.705 [DEBUG] [Thread-205098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:32:14.714 [DEBUG] [Thread-205098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:32:14.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:32:14.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:32:14.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:32:14.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:32:14.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:32:14.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:32:14.752 [DEBUG] [Thread-205098] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:32:19.006 [DEBUG] [Thread-205100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:33.680 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:33.681 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:34.055 [DEBUG] [Thread-205101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:44.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:32:44.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:32:44.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:32:46.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 32, 18), 23.01, 21.3, 0.0, 23.57, 21.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:32:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:32:18
2026-02-15T13:32:47.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:32:47.231 [DEBUG] [Thread-205102] [transport.py] [_log()] starting thread (client mode): 0xa2db47c0
2026-02-15T13:32:47.231 [DEBUG] [Thread-205102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:32:47.250 [DEBUG] [Thread-205102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:32:47.251 [INFO] [Thread-205102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:32:47.254 [DEBUG] [Thread-205102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:32:47.254 [DEBUG] [Thread-205102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:32:47.254 [DEBUG] [Thread-205102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:32:47.254 [DEBUG] [Thread-205102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:47.254 [DEBUG] [Thread-205102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:47.254 [DEBUG] [Thread-205102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] client lang: <none>
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] server lang: <none>
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] kex follows: False
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] Compression: none
2026-02-15T13:32:47.255 [DEBUG] [Thread-205102] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:32:47.273 [DEBUG] [Thread-205102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:32:47.274 [DEBUG] [Thread-205102] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:32:47.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:32:47.275 [DEBUG] [Thread-205102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:32:47.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:32:47.277 [DEBUG] [Thread-205102] [transport.py] [_log()] userauth is OK
2026-02-15T13:32:47.277 [DEBUG] [Thread-205102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:32:47.278 [DEBUG] [Thread-205102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:32:47.278 [DEBUG] [Thread-205102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:32:47.278 [DEBUG] [Thread-205102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:32:47.314 [INFO] [Thread-205102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:32:47.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:32:47.938 [DEBUG] [Thread-205102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:32:47.939 [DEBUG] [Thread-205102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:32:47.939 [DEBUG] [Thread-205102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:32:47.979 [DEBUG] [Thread-205102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:32:47.980 [DEBUG] [Thread-205102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:32:47.983 [DEBUG] [Thread-205102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:32:47.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:32:47.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:32:47.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:32:47.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:32:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:32:48.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:32:48.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:32:48.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:32:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:32:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.480653 -999.00  +22.00  16.68     26   +1.60 1 1 1 1 1   888    0 19.76 4.54 ----- 16.7 16.7 169.2 25.1 29.5 -29.5 28.4 -28.5 29.1 -28.1 30.2 -29.1
2026-02-15T13:32:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:32:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:32:48.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.480653
2026-02-15T13:32:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:32:48.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:32:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:32:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:32:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:32:48.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:32:18', tmtdew=23.01, humidity=21.3, cloud=0.0, wind=23.57, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:32:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:32:48.009 [DEBUG] [Thread-205102] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:32:48.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:32:48.105 [DEBUG] [Thread-205105] [transport.py] [_log()] starting thread (client mode): 0xa5742ef0
2026-02-15T13:32:48.105 [DEBUG] [Thread-205105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:32:48.120 [DEBUG] [Thread-205105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:32:48.120 [INFO] [Thread-205105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] client lang: <none>
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] server lang: <none>
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] kex follows: False
2026-02-15T13:32:48.128 [DEBUG] [Thread-205105] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:32:48.129 [DEBUG] [Thread-205105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:32:48.129 [DEBUG] [Thread-205105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:32:48.129 [DEBUG] [Thread-205105] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:32:48.129 [DEBUG] [Thread-205105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:32:48.129 [DEBUG] [Thread-205105] [transport.py] [_log()] Compression: none
2026-02-15T13:32:48.129 [DEBUG] [Thread-205105] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:32:48.186 [DEBUG] [Thread-205105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:32:48.187 [DEBUG] [Thread-205105] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:32:48.188 [DEBUG] [Thread-205105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:32:48.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:32:48.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:32:48.242 [DEBUG] [Thread-205105] [transport.py] [_log()] userauth is OK
2026-02-15T13:32:48.242 [DEBUG] [Thread-205105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:32:48.242 [DEBUG] [Thread-205105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:32:48.242 [DEBUG] [Thread-205105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:32:48.242 [DEBUG] [Thread-205105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:32:48.265 [INFO] [Thread-205105] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:32:48.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:32:48.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:32:49.092 [DEBUG] [Thread-205107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:32:49.138 [DEBUG] [Thread-205105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:32:49.138 [DEBUG] [Thread-205105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:32:49.189 [DEBUG] [Thread-205105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:32:49.189 [DEBUG] [Thread-205105] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:32:49.199 [DEBUG] [Thread-205105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:32:49.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:32:49.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:32:49.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:32:49.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:32:49.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:32:49.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:32:49.237 [DEBUG] [Thread-205105] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:32:50.025 [DEBUG] [Thread-205108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:04.155 [DEBUG] [Thread-205109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:19.191 [DEBUG] [Thread-205110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:19.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:33:19.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:33:19.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:33:21.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 32, 53), 23.12, 21.4, 0.0, 18.32, 21.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:33:21.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:32:53
2026-02-15T13:33:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:33:21.611 [DEBUG] [Thread-205111] [transport.py] [_log()] starting thread (client mode): 0xa2d6ba90
2026-02-15T13:33:21.611 [DEBUG] [Thread-205111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:33:21.632 [DEBUG] [Thread-205111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:33:21.632 [INFO] [Thread-205111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:33:21.635 [DEBUG] [Thread-205111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:33:21.635 [DEBUG] [Thread-205111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] client lang: <none>
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] server lang: <none>
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] kex follows: False
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] Compression: none
2026-02-15T13:33:21.636 [DEBUG] [Thread-205111] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:33:21.653 [DEBUG] [Thread-205111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:33:21.653 [DEBUG] [Thread-205111] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:33:21.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:33:21.654 [DEBUG] [Thread-205111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:33:21.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:33:21.697 [DEBUG] [Thread-205111] [transport.py] [_log()] userauth is OK
2026-02-15T13:33:21.697 [DEBUG] [Thread-205111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:33:21.697 [DEBUG] [Thread-205111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:33:21.697 [DEBUG] [Thread-205111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:33:21.697 [DEBUG] [Thread-205111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:33:21.718 [INFO] [Thread-205111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:33:21.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:33:22.377 [DEBUG] [Thread-205111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:33:22.378 [DEBUG] [Thread-205111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:33:22.378 [DEBUG] [Thread-205111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:33:22.419 [DEBUG] [Thread-205111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:33:22.419 [DEBUG] [Thread-205111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:33:22.422 [DEBUG] [Thread-205111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:33:22.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:33:22.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:33:22.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:33:22.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:33:22.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:33:22.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:33:22.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:33:22.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:33:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:33:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.481000 -999.00  +21.80  19.17     26   +1.40 1 1 1 1 1   888    0 20.39 6.57 ----- 19.2 19.2 144.8 23.0 29.5 -29.4 28.6 -27.7 29.1 -27.5 30.2 -28.4
2026-02-15T13:33:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:33:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:33:22.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.481000
2026-02-15T13:33:22.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:33:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:33:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:33:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:33:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:33:22.451 [DEBUG] [Thread-205111] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:33:22.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:32:53', tmtdew=23.12, humidity=21.4, cloud=0.0, wind=18.32, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:32:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:33:22.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:33:22.551 [DEBUG] [Thread-205114] [transport.py] [_log()] starting thread (client mode): 0xa2d03910
2026-02-15T13:33:22.552 [DEBUG] [Thread-205114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:33:22.566 [DEBUG] [Thread-205114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:33:22.567 [INFO] [Thread-205114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:33:22.574 [DEBUG] [Thread-205114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:33:22.574 [DEBUG] [Thread-205114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:33:22.574 [DEBUG] [Thread-205114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:33:22.574 [DEBUG] [Thread-205114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:22.574 [DEBUG] [Thread-205114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] client lang: <none>
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] server lang: <none>
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] kex follows: False
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] Compression: none
2026-02-15T13:33:22.575 [DEBUG] [Thread-205114] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:33:22.634 [DEBUG] [Thread-205114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:33:22.635 [DEBUG] [Thread-205114] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:33:22.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:33:22.636 [DEBUG] [Thread-205114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:33:22.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:33:22.690 [DEBUG] [Thread-205114] [transport.py] [_log()] userauth is OK
2026-02-15T13:33:22.691 [DEBUG] [Thread-205114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:33:22.691 [DEBUG] [Thread-205114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:33:22.691 [DEBUG] [Thread-205114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:33:22.691 [DEBUG] [Thread-205114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:33:22.711 [INFO] [Thread-205114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:33:22.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:33:22.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:33:23.580 [DEBUG] [Thread-205114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:33:23.580 [DEBUG] [Thread-205114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:33:23.628 [DEBUG] [Thread-205114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:33:23.629 [DEBUG] [Thread-205114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:33:23.638 [DEBUG] [Thread-205114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:33:23.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:33: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')
2026-02-15T13:33: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
2026-02-15T13:33:23.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:33:23.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:33:23.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:33:23.675 [DEBUG] [Thread-205114] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:33:33.821 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:33.822 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:34.228 [DEBUG] [Thread-205116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:49.281 [DEBUG] [Thread-205117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:50.079 [DEBUG] [Thread-205118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:33:53.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:33:53.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:33:53.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:33:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 33, 29), 23.36, 21.09, 0.0, 20.5, 21.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:33:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:33:29
2026-02-15T13:33:56.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:33:56.477 [DEBUG] [Thread-205119] [transport.py] [_log()] starting thread (client mode): 0xa2d037f0
2026-02-15T13:33:56.477 [DEBUG] [Thread-205119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:33:56.496 [DEBUG] [Thread-205119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:33:56.496 [INFO] [Thread-205119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] client lang: <none>
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] server lang: <none>
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] kex follows: False
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:33:56.499 [DEBUG] [Thread-205119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:33:56.500 [DEBUG] [Thread-205119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:33:56.500 [DEBUG] [Thread-205119] [transport.py] [_log()] Compression: none
2026-02-15T13:33:56.500 [DEBUG] [Thread-205119] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:33:56.516 [DEBUG] [Thread-205119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:33:56.517 [DEBUG] [Thread-205119] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:33:56.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:33:56.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:33:56.519 [DEBUG] [Thread-205119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:33:56.520 [DEBUG] [Thread-205119] [transport.py] [_log()] userauth is OK
2026-02-15T13:33:56.520 [DEBUG] [Thread-205119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:33:56.520 [DEBUG] [Thread-205119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:33:56.520 [DEBUG] [Thread-205119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:33:56.520 [DEBUG] [Thread-205119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:33:56.539 [INFO] [Thread-205119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:33:56.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:33:57.323 [DEBUG] [Thread-205119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:33:57.323 [DEBUG] [Thread-205119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:33:57.323 [DEBUG] [Thread-205119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:33:57.363 [DEBUG] [Thread-205119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:33:57.363 [DEBUG] [Thread-205119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:33:57.367 [DEBUG] [Thread-205119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:33:57.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:33:57.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:33:57.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:33:57.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:33:57.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:33:57.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:33:57.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:33:57.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:33:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:33:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.481347 -999.00  +21.70  17.82     26   +1.50 1 1 1 1 1   888    0 20.38 6.49 ----- 17.8 17.8 120.0 21.9 29.5 -31.4 28.6 -27.8 29.1 -27.6 30.2 -28.7
2026-02-15T13:33:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:33:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:33:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.481347
2026-02-15T13:33:57.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:33:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:33:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:33:57.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:33:57.390 [DEBUG] [Thread-205119] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:33:57.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:33:57.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:33:29', tmtdew=23.36, humidity=21.09, cloud=0.0, wind=20.5, temperature=21.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:33:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:33:57.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:33:57.489 [DEBUG] [Thread-205122] [transport.py] [_log()] starting thread (client mode): 0xa2db6a40
2026-02-15T13:33:57.489 [DEBUG] [Thread-205122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:33:57.504 [DEBUG] [Thread-205122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:33:57.504 [INFO] [Thread-205122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:33:57.511 [DEBUG] [Thread-205122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:33:57.512 [DEBUG] [Thread-205122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:33:57.512 [DEBUG] [Thread-205122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:33:57.512 [DEBUG] [Thread-205122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:57.512 [DEBUG] [Thread-205122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] client lang: <none>
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] server lang: <none>
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] kex follows: False
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] Compression: none
2026-02-15T13:33:57.513 [DEBUG] [Thread-205122] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:33:57.570 [DEBUG] [Thread-205122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:33:57.571 [DEBUG] [Thread-205122] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:33:57.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:33:57.572 [DEBUG] [Thread-205122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:33:57.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:33:57.627 [DEBUG] [Thread-205122] [transport.py] [_log()] userauth is OK
2026-02-15T13:33:57.627 [DEBUG] [Thread-205122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:33:57.627 [DEBUG] [Thread-205122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:33:57.627 [DEBUG] [Thread-205122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:33:57.627 [DEBUG] [Thread-205122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:33:57.646 [INFO] [Thread-205122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:33:57.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:33:57.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:33:58.488 [DEBUG] [Thread-205122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:33:58.488 [DEBUG] [Thread-205122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:33:58.545 [DEBUG] [Thread-205122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:33:58.545 [DEBUG] [Thread-205122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:33:58.563 [DEBUG] [Thread-205122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:33:58.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:33:58.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:33:58.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:33:58.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:33:58.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:33:58.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:33:58.630 [DEBUG] [Thread-205122] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:34:04.318 [DEBUG] [Thread-205124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:34:19.370 [DEBUG] [Thread-205125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:34:28.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:34:28.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:34:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:34:30.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 34, 4), 23.33, 21.12, 0.0, 17.36, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:34:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:34:04
2026-02-15T13:34:31.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:34:31.625 [DEBUG] [Thread-205126] [transport.py] [_log()] starting thread (client mode): 0xa81d7b50
2026-02-15T13:34:31.625 [DEBUG] [Thread-205126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:34:31.647 [DEBUG] [Thread-205126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:34:31.647 [INFO] [Thread-205126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] client lang: <none>
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] server lang: <none>
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] kex follows: False
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] Compression: none
2026-02-15T13:34:31.650 [DEBUG] [Thread-205126] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:34:31.666 [DEBUG] [Thread-205126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:34:31.667 [DEBUG] [Thread-205126] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:34:31.667 [DEBUG] [Thread-205126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:34:31.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:34:31.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:34:31.669 [DEBUG] [Thread-205126] [transport.py] [_log()] userauth is OK
2026-02-15T13:34:31.669 [DEBUG] [Thread-205126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:34:31.670 [DEBUG] [Thread-205126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:34:31.670 [DEBUG] [Thread-205126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:34:31.670 [DEBUG] [Thread-205126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:34:31.694 [INFO] [Thread-205126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:34:31.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:34:32.298 [DEBUG] [Thread-205126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:34:32.298 [DEBUG] [Thread-205126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:34:32.298 [DEBUG] [Thread-205126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:34:32.338 [DEBUG] [Thread-205126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:34:32.339 [DEBUG] [Thread-205126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:34:32.342 [DEBUG] [Thread-205126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:34:32.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:34:32.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:34:32.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:34:32.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:34:32.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:34:32.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:34:32.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:34:32.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:34:32.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:34:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.481694 -999.00  +21.70  13.98     26   +1.60 1 1 1 1 1   888    0 20.34 6.79 ----- 14.0 14.0 142.8 21.2 29.5 -29.0 28.8 -28.5 29.2 -27.4 30.2 -29.2
2026-02-15T13:34:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:34:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:34:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.481694
2026-02-15T13:34:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:34:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:34:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:34:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:34:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:34:32.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:34:04', tmtdew=23.33, humidity=21.12, 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='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:33:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:34:32.371 [DEBUG] [Thread-205126] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:34:32.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:34:32.472 [DEBUG] [Thread-205129] [transport.py] [_log()] starting thread (client mode): 0xa2d03d30
2026-02-15T13:34:32.472 [DEBUG] [Thread-205129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:34:32.487 [DEBUG] [Thread-205129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:34:32.487 [INFO] [Thread-205129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:34:32.495 [DEBUG] [Thread-205129] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:34:32.495 [DEBUG] [Thread-205129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:34:32.495 [DEBUG] [Thread-205129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:34:32.495 [DEBUG] [Thread-205129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:34:32.495 [DEBUG] [Thread-205129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:34:32.495 [DEBUG] [Thread-205129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] client lang: <none>
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] server lang: <none>
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] kex follows: False
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] Compression: none
2026-02-15T13:34:32.496 [DEBUG] [Thread-205129] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:34:32.558 [DEBUG] [Thread-205129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:34:32.558 [DEBUG] [Thread-205129] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:34:32.559 [DEBUG] [Thread-205129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:34:32.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:34:32.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:34:32.621 [DEBUG] [Thread-205129] [transport.py] [_log()] userauth is OK
2026-02-15T13:34:32.621 [DEBUG] [Thread-205129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:34:32.621 [DEBUG] [Thread-205129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:34:32.621 [DEBUG] [Thread-205129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:34:32.621 [DEBUG] [Thread-205129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:34:32.644 [INFO] [Thread-205129] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:34:32.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:34:32.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:34:33.461 [DEBUG] [Thread-205129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:34:33.461 [DEBUG] [Thread-205129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:34:33.508 [DEBUG] [Thread-205129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:34:33.509 [DEBUG] [Thread-205129] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:34:33.518 [DEBUG] [Thread-205129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:34:33.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:34:33.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:34:33.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:34:33.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:34:33.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:34:33.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:34:33.555 [DEBUG] [Thread-205129] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:34:33.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:34:33.965 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:34:34.406 [DEBUG] [Thread-205131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:34:49.462 [DEBUG] [Thread-205132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:34:50.112 [DEBUG] [Thread-205133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:03.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:35:03.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:35:03.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:35:04.504 [DEBUG] [Thread-205134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 34, 39), 24.57, 19.37, 0.0, 16.41, 22.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:35:05.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:34:39
2026-02-15T13:35:05.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:35:05.931 [DEBUG] [Thread-205135] [transport.py] [_log()] starting thread (client mode): 0xa2d02170
2026-02-15T13:35:05.932 [DEBUG] [Thread-205135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:35:05.950 [DEBUG] [Thread-205135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:35:05.951 [INFO] [Thread-205135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] client lang: <none>
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] server lang: <none>
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] kex follows: False
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:35:05.954 [DEBUG] [Thread-205135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:35:05.955 [DEBUG] [Thread-205135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:35:05.955 [DEBUG] [Thread-205135] [transport.py] [_log()] Compression: none
2026-02-15T13:35:05.955 [DEBUG] [Thread-205135] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:35:05.971 [DEBUG] [Thread-205135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:35:05.972 [DEBUG] [Thread-205135] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:35:05.972 [DEBUG] [Thread-205135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:35:05.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:35:05.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:35:05.974 [DEBUG] [Thread-205135] [transport.py] [_log()] userauth is OK
2026-02-15T13:35:05.975 [DEBUG] [Thread-205135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:35:05.975 [DEBUG] [Thread-205135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:35:05.975 [DEBUG] [Thread-205135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:35:05.975 [DEBUG] [Thread-205135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:35:05.994 [INFO] [Thread-205135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:35:05.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:35:07.316 [DEBUG] [Thread-205135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:35:07.316 [DEBUG] [Thread-205135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:35:07.317 [DEBUG] [Thread-205135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:35:07.357 [DEBUG] [Thread-205135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:35:07.358 [DEBUG] [Thread-205135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:35:07.361 [DEBUG] [Thread-205135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:35:07.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:35:07.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:35:07.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:35:07.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:35:07.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:35:07.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:35:07.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:35:07.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:35:07.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:35:07.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.482389 -999.00  +21.50  18.55     26   +1.60 1 1 1 1 1   888    0 20.23 5.68 ----- 18.6 18.6 140.6 22.7 29.4 -28.4 28.7 -28.0 29.1 -27.5 30.2 -29.0
2026-02-15T13:35:07.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:35:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:35:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.482389
2026-02-15T13:35:07.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:35:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:35:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:35:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:35:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:35:07.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:34:39', tmtdew=24.57, humidity=19.37, cloud=0.0, wind=16.41, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:34:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:35:07.423 [DEBUG] [Thread-205135] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:35:07.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:35:07.523 [DEBUG] [Thread-205138] [transport.py] [_log()] starting thread (client mode): 0xa2db7d60
2026-02-15T13:35:07.523 [DEBUG] [Thread-205138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:35:07.543 [DEBUG] [Thread-205138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:35:07.543 [INFO] [Thread-205138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:35:07.551 [DEBUG] [Thread-205138] [transport.py] [_log()] client lang: <none>
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] server lang: <none>
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] kex follows: False
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] Compression: none
2026-02-15T13:35:07.552 [DEBUG] [Thread-205138] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:35:07.612 [DEBUG] [Thread-205138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:35:07.612 [DEBUG] [Thread-205138] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:35:07.613 [DEBUG] [Thread-205138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:35:07.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:35:07.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:35:07.670 [DEBUG] [Thread-205138] [transport.py] [_log()] userauth is OK
2026-02-15T13:35:07.671 [DEBUG] [Thread-205138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:35:07.671 [DEBUG] [Thread-205138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:35:07.671 [DEBUG] [Thread-205138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:35:07.671 [DEBUG] [Thread-205138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:35:07.690 [INFO] [Thread-205138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:35:07.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:35:07.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:35:08.528 [DEBUG] [Thread-205138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:35:08.528 [DEBUG] [Thread-205138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:35:08.576 [DEBUG] [Thread-205138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:35:08.577 [DEBUG] [Thread-205138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:35:08.586 [DEBUG] [Thread-205138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:35:08.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:35:08.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')
2026-02-15T13:35:08.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:35:08.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:35:08.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:35:08.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:35:08.623 [DEBUG] [Thread-205138] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:35:19.540 [DEBUG] [Thread-205140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:34.110 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:34.112 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:34.588 [DEBUG] [Thread-205141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:35:38.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:35:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 35, 15), 23.65, 20.48, 0.0, 20.45, 22.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:35:40.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:35:15
2026-02-15T13:35:40.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:35:41.005 [DEBUG] [Thread-205142] [transport.py] [_log()] starting thread (client mode): 0xa2d4f910
2026-02-15T13:35:41.006 [DEBUG] [Thread-205142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:35:41.025 [DEBUG] [Thread-205142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:35:41.026 [INFO] [Thread-205142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:35:41.028 [DEBUG] [Thread-205142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] client lang: <none>
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] server lang: <none>
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] kex follows: False
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:35:41.029 [DEBUG] [Thread-205142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:35:41.030 [DEBUG] [Thread-205142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:35:41.030 [DEBUG] [Thread-205142] [transport.py] [_log()] Compression: none
2026-02-15T13:35:41.030 [DEBUG] [Thread-205142] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:35:41.049 [DEBUG] [Thread-205142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:35:41.049 [DEBUG] [Thread-205142] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:35:41.050 [DEBUG] [Thread-205142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:35:41.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:35:41.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:35:41.052 [DEBUG] [Thread-205142] [transport.py] [_log()] userauth is OK
2026-02-15T13:35:41.052 [DEBUG] [Thread-205142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:35:41.052 [DEBUG] [Thread-205142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:35:41.053 [DEBUG] [Thread-205142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:35:41.053 [DEBUG] [Thread-205142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:35:41.071 [INFO] [Thread-205142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:35:41.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:35:41.718 [DEBUG] [Thread-205142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:35:41.718 [DEBUG] [Thread-205142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:35:41.719 [DEBUG] [Thread-205142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:35:41.759 [DEBUG] [Thread-205142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:35:41.760 [DEBUG] [Thread-205142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:35:41.763 [DEBUG] [Thread-205142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:35:41.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:35:41.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:35:41.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:35:41.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:35:41.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:35:41.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:35:41.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:35:41.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:35:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:35:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.482736 -999.00  +21.60  14.38     26   +1.60 1 1 1 1 1   888    0 20.08 2.39 ----- 14.4 14.4 155.2 22.4 29.4 -28.2 28.6 -27.8 29.1 -28.5 30.2 -27.2
2026-02-15T13:35:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:35:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:35:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.482736
2026-02-15T13:35:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:35:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:35:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:35:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:35:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:35:41.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:35:15', tmtdew=23.65, humidity=20.48, cloud=0.0, wind=20.45, temperature=22.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:35:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:35:41.792 [DEBUG] [Thread-205142] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:35:41.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:35:41.887 [DEBUG] [Thread-205145] [transport.py] [_log()] starting thread (client mode): 0xa2d4e0b0
2026-02-15T13:35:41.888 [DEBUG] [Thread-205145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:35:41.902 [DEBUG] [Thread-205145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:35:41.902 [INFO] [Thread-205145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:35:41.909 [DEBUG] [Thread-205145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:35:41.909 [DEBUG] [Thread-205145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] client lang: <none>
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] server lang: <none>
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] kex follows: False
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] Compression: none
2026-02-15T13:35:41.910 [DEBUG] [Thread-205145] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:35:41.970 [DEBUG] [Thread-205145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:35:41.971 [DEBUG] [Thread-205145] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:35:41.972 [DEBUG] [Thread-205145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:35:41.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:35:41.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:35:42.028 [DEBUG] [Thread-205145] [transport.py] [_log()] userauth is OK
2026-02-15T13:35:42.028 [DEBUG] [Thread-205145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:35:42.028 [DEBUG] [Thread-205145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:35:42.028 [DEBUG] [Thread-205145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:35:42.028 [DEBUG] [Thread-205145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:35:42.047 [INFO] [Thread-205145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:35:42.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:35:42.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:35:42.860 [DEBUG] [Thread-205145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:35:42.860 [DEBUG] [Thread-205145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:35:42.908 [DEBUG] [Thread-205145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:35:42.908 [DEBUG] [Thread-205145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:35:42.917 [DEBUG] [Thread-205145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:35:42.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:35: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-02-15T13:35:42.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:35:42.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:35:42.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:35:42.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:35:42.950 [DEBUG] [Thread-205145] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:35:49.626 [DEBUG] [Thread-205147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:35:50.148 [DEBUG] [Thread-205148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:04.678 [DEBUG] [Thread-205149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:36:12.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:36:12.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:36:15.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 35, 51), 23.3, 20.89, 0.0, 23.31, 21.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:36:15.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:35:51
2026-02-15T13:36:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:36:15.799 [DEBUG] [Thread-205150] [transport.py] [_log()] starting thread (client mode): 0xa2d4f0d0
2026-02-15T13:36:15.799 [DEBUG] [Thread-205150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:36:15.819 [DEBUG] [Thread-205150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:36:15.819 [INFO] [Thread-205150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:36:15.822 [DEBUG] [Thread-205150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:36:15.822 [DEBUG] [Thread-205150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] client lang: <none>
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] server lang: <none>
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] kex follows: False
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:36:15.823 [DEBUG] [Thread-205150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:36:15.824 [DEBUG] [Thread-205150] [transport.py] [_log()] Compression: none
2026-02-15T13:36:15.824 [DEBUG] [Thread-205150] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:36:15.842 [DEBUG] [Thread-205150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:36:15.842 [DEBUG] [Thread-205150] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:36:15.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:36:15.843 [DEBUG] [Thread-205150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:36:15.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:36:15.885 [DEBUG] [Thread-205150] [transport.py] [_log()] userauth is OK
2026-02-15T13:36:15.886 [DEBUG] [Thread-205150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:36:15.886 [DEBUG] [Thread-205150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:36:15.886 [DEBUG] [Thread-205150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:36:15.886 [DEBUG] [Thread-205150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:36:15.912 [INFO] [Thread-205150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:36:15.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:36:16.493 [DEBUG] [Thread-205150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:36:16.494 [DEBUG] [Thread-205150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:36:16.494 [DEBUG] [Thread-205150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:36:16.535 [DEBUG] [Thread-205150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:36:16.535 [DEBUG] [Thread-205150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:36:16.539 [DEBUG] [Thread-205150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:36:16.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:36:16.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:36:16.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:36:16.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:36:16.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:36:16.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:36:16.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:36:16.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:36:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:36:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.483083 -999.00  +22.10  15.68     26   +1.80 1 1 1 1 1   888    0 20.45 0.53 ----- 15.7 15.7 165.7 20.2 29.6 -28.4 28.8 -27.2 29.3 -26.0 30.2 -29.2
2026-02-15T13:36:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:36:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:36:16.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.483083
2026-02-15T13:36:16.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:36:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:36:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:36:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:36:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:36:16.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:35:51', tmtdew=23.3, humidity=20.89, cloud=0.0, wind=23.31, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:35:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:36:16.567 [DEBUG] [Thread-205150] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:36:16.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:36:16.663 [DEBUG] [Thread-205153] [transport.py] [_log()] starting thread (client mode): 0xa2d4d390
2026-02-15T13:36:16.663 [DEBUG] [Thread-205153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:36:16.678 [DEBUG] [Thread-205153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:36:16.678 [INFO] [Thread-205153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:36:16.686 [DEBUG] [Thread-205153] [transport.py] [_log()] client lang: <none>
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] server lang: <none>
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] kex follows: False
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] Compression: none
2026-02-15T13:36:16.687 [DEBUG] [Thread-205153] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:36:16.747 [DEBUG] [Thread-205153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:36:16.747 [DEBUG] [Thread-205153] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:36:16.748 [DEBUG] [Thread-205153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:36:16.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:36:16.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:36:16.806 [DEBUG] [Thread-205153] [transport.py] [_log()] userauth is OK
2026-02-15T13:36:16.806 [DEBUG] [Thread-205153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:36:16.806 [DEBUG] [Thread-205153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:36:16.806 [DEBUG] [Thread-205153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:36:16.807 [DEBUG] [Thread-205153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:36:16.825 [INFO] [Thread-205153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:36:16.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:36:16.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:36:17.660 [DEBUG] [Thread-205153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:36:17.661 [DEBUG] [Thread-205153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:36:17.708 [DEBUG] [Thread-205153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:36:17.709 [DEBUG] [Thread-205153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:36:17.718 [DEBUG] [Thread-205153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:36:17.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:36:17.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:36:17.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:36:17.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:36:17.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:36:17.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:36:17.757 [DEBUG] [Thread-205153] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:36:19.712 [DEBUG] [Thread-205155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:34.253 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:34.254 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:34.754 [DEBUG] [Thread-205156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:47.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:36:47.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:36: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
2026-02-15T13:36:49.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 36, 26), 23.22, 20.95, 0.0, 20.17, 21.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:36:49.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:36:26
2026-02-15T13:36:49.791 [DEBUG] [Thread-205157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:50.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:36:50.175 [DEBUG] [Thread-205158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:36:50.210 [DEBUG] [Thread-205159] [transport.py] [_log()] starting thread (client mode): 0xa2d4e320
2026-02-15T13:36:50.210 [DEBUG] [Thread-205159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:36:50.229 [DEBUG] [Thread-205159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:36:50.229 [INFO] [Thread-205159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] client lang: <none>
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] server lang: <none>
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] kex follows: False
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] Compression: none
2026-02-15T13:36:50.232 [DEBUG] [Thread-205159] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:36:50.249 [DEBUG] [Thread-205159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:36:50.249 [DEBUG] [Thread-205159] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:36:50.250 [DEBUG] [Thread-205159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:36:50.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:36:50.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:36:50.251 [DEBUG] [Thread-205159] [transport.py] [_log()] userauth is OK
2026-02-15T13:36:50.251 [DEBUG] [Thread-205159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:36:50.252 [DEBUG] [Thread-205159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:36:50.252 [DEBUG] [Thread-205159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:36:50.252 [DEBUG] [Thread-205159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:36:50.284 [INFO] [Thread-205159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:36:50.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:36:50.918 [DEBUG] [Thread-205159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:36:50.918 [DEBUG] [Thread-205159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:36:50.918 [DEBUG] [Thread-205159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:36:50.959 [DEBUG] [Thread-205159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:36:50.960 [DEBUG] [Thread-205159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:36:50.963 [DEBUG] [Thread-205159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:36:50.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:36:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:36:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:36:50.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:36:50.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:36:50.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:36:50.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:36:50.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:36:50.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:36:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.483430 -999.00  +21.90  14.13     26   +1.70 1 1 1 1 1   888    0 19.98 1.27 ----- 14.1 14.1 175.2 21.1 29.4 -28.0 28.5 -27.9 29.2 -27.6 30.2 -27.3
2026-02-15T13:36:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:36:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:36:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.483430
2026-02-15T13:36:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:36:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:36:50.992 [DEBUG] [Thread-205159] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:36:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:36:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:36:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:36:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:36:26', tmtdew=23.22, humidity=20.95, cloud=0.0, wind=20.17, temperature=21.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:36:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:36:51.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:36:51.089 [DEBUG] [Thread-205162] [transport.py] [_log()] starting thread (client mode): 0xa2d4dc00
2026-02-15T13:36:51.089 [DEBUG] [Thread-205162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:36:51.104 [DEBUG] [Thread-205162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:36:51.104 [INFO] [Thread-205162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:36:51.111 [DEBUG] [Thread-205162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:36:51.111 [DEBUG] [Thread-205162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] client lang: <none>
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] server lang: <none>
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] kex follows: False
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] Compression: none
2026-02-15T13:36:51.112 [DEBUG] [Thread-205162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:36:51.170 [DEBUG] [Thread-205162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:36:51.170 [DEBUG] [Thread-205162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:36:51.171 [DEBUG] [Thread-205162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:36:51.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:36:51.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:36:51.226 [DEBUG] [Thread-205162] [transport.py] [_log()] userauth is OK
2026-02-15T13:36:51.227 [DEBUG] [Thread-205162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:36:51.227 [DEBUG] [Thread-205162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:36:51.227 [DEBUG] [Thread-205162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:36:51.227 [DEBUG] [Thread-205162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:36:51.248 [INFO] [Thread-205162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:36:51.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:36:51.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:36:52.090 [DEBUG] [Thread-205162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:36:52.090 [DEBUG] [Thread-205162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:36:52.138 [DEBUG] [Thread-205162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:36:52.138 [DEBUG] [Thread-205162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:36:52.147 [DEBUG] [Thread-205162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:36:52.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:36:52.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:36:52.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:36:52.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:36:52.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:36:52.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:36:52.184 [DEBUG] [Thread-205162] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:37:04.827 [DEBUG] [Thread-205164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:19.881 [DEBUG] [Thread-205165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:22.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:37:22.204 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:37:22.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:37:24.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 37, 3), 23.13, 21.08, 0.0, 22.43, 21.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:37:24.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:37:03
2026-02-15T13:37:24.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:37:24.588 [DEBUG] [Thread-205166] [transport.py] [_log()] starting thread (client mode): 0xa2d4d5d0
2026-02-15T13:37:24.588 [DEBUG] [Thread-205166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:37:24.611 [DEBUG] [Thread-205166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:37:24.611 [INFO] [Thread-205166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:37:24.614 [DEBUG] [Thread-205166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] client lang: <none>
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] server lang: <none>
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] kex follows: False
2026-02-15T13:37:24.615 [DEBUG] [Thread-205166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:37:24.616 [DEBUG] [Thread-205166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:37:24.616 [DEBUG] [Thread-205166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:37:24.616 [DEBUG] [Thread-205166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:37:24.616 [DEBUG] [Thread-205166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:37:24.616 [DEBUG] [Thread-205166] [transport.py] [_log()] Compression: none
2026-02-15T13:37:24.616 [DEBUG] [Thread-205166] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:37:24.633 [DEBUG] [Thread-205166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:37:24.634 [DEBUG] [Thread-205166] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:37:24.634 [DEBUG] [Thread-205166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:37:24.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:37:24.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:37:24.636 [DEBUG] [Thread-205166] [transport.py] [_log()] userauth is OK
2026-02-15T13:37:24.637 [DEBUG] [Thread-205166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:37:24.637 [DEBUG] [Thread-205166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:37:24.637 [DEBUG] [Thread-205166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:37:24.637 [DEBUG] [Thread-205166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:37:24.669 [INFO] [Thread-205166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:37:24.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:37:25.324 [DEBUG] [Thread-205166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:37:25.324 [DEBUG] [Thread-205166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:37:25.324 [DEBUG] [Thread-205166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:37:25.365 [DEBUG] [Thread-205166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:37:25.365 [DEBUG] [Thread-205166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:37:25.367 [DEBUG] [Thread-205166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:37:25.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:37:25.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:37:25.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:37:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:37:25.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:37:25.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:37:25.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:37:25.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:37:25.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:37:25.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.483778 -999.00  +22.30  11.78     26   +1.90 1 1 1 1 1   888    0 19.96 3.10 ----- 11.8 11.8 176.8 15.5 29.6 -28.4 28.6 -28.2 29.3 -25.4 30.3 -28.7
2026-02-15T13:37:25.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:37:25.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:37:25.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.483778
2026-02-15T13:37:25.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:37:25.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:37:25.391 [DEBUG] [Thread-205166] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:37:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:37:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:37:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:37:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:37:03', tmtdew=23.13, humidity=21.08, cloud=0.0, wind=22.43, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:36:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:37:25.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:37:25.479 [DEBUG] [Thread-205169] [transport.py] [_log()] starting thread (client mode): 0xa2db70d0
2026-02-15T13:37:25.480 [DEBUG] [Thread-205169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:37:25.495 [DEBUG] [Thread-205169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:37:25.495 [INFO] [Thread-205169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:37:25.503 [DEBUG] [Thread-205169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] client lang: <none>
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] server lang: <none>
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] kex follows: False
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:37:25.504 [DEBUG] [Thread-205169] [transport.py] [_log()] Compression: none
2026-02-15T13:37:25.505 [DEBUG] [Thread-205169] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:37:25.562 [DEBUG] [Thread-205169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:37:25.562 [DEBUG] [Thread-205169] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:37:25.563 [DEBUG] [Thread-205169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:37:25.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:37:25.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:37:25.620 [DEBUG] [Thread-205169] [transport.py] [_log()] userauth is OK
2026-02-15T13:37:25.620 [DEBUG] [Thread-205169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:37:25.620 [DEBUG] [Thread-205169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:37:25.620 [DEBUG] [Thread-205169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:37:25.620 [DEBUG] [Thread-205169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:37:25.639 [INFO] [Thread-205169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:37:25.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:37:25.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:37:26.476 [DEBUG] [Thread-205169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:37:26.476 [DEBUG] [Thread-205169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:37:26.524 [DEBUG] [Thread-205169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:37:26.524 [DEBUG] [Thread-205169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:37:26.532 [DEBUG] [Thread-205169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:37:26.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:37:26.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:37:26.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:37:26.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:37:26.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:37:26.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:37:26.564 [DEBUG] [Thread-205169] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:37:34.393 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:34.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:34.912 [DEBUG] [Thread-205171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:49.965 [DEBUG] [Thread-205172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:50.239 [DEBUG] [Thread-205173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:37:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:37:56.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:37:56.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:37:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 37, 39), 24.17, 19.87, 0.0, 15.56, 22.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:37:58.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:37:39
2026-02-15T13:37:58.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:37:59.128 [DEBUG] [Thread-205174] [transport.py] [_log()] starting thread (client mode): 0xa2db4b20
2026-02-15T13:37:59.128 [DEBUG] [Thread-205174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:37:59.147 [DEBUG] [Thread-205174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:37:59.148 [INFO] [Thread-205174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] client lang: <none>
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] server lang: <none>
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] kex follows: False
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] Compression: none
2026-02-15T13:37:59.151 [DEBUG] [Thread-205174] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:37:59.168 [DEBUG] [Thread-205174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:37:59.169 [DEBUG] [Thread-205174] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:37:59.169 [DEBUG] [Thread-205174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:37:59.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:37:59.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:37:59.171 [DEBUG] [Thread-205174] [transport.py] [_log()] userauth is OK
2026-02-15T13:37:59.171 [DEBUG] [Thread-205174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:37:59.172 [DEBUG] [Thread-205174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:37:59.172 [DEBUG] [Thread-205174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:37:59.172 [DEBUG] [Thread-205174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:37:59.187 [INFO] [Thread-205174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:37:59.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:37:59.947 [DEBUG] [Thread-205174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:37:59.947 [DEBUG] [Thread-205174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:37:59.948 [DEBUG] [Thread-205174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:37:59.988 [DEBUG] [Thread-205174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:37:59.989 [DEBUG] [Thread-205174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:37:59.992 [DEBUG] [Thread-205174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:38:00.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:38:00.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:38:00.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:38:00.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:38:00.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:38:00.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:38:00.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:38:00.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:38:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:38:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.484125 -999.00  +22.30  14.67     25   +1.80 1 1 1 1 1   888    0 20.77 6.72 ----- 14.7 14.7 171.5 17.5 29.7 -28.1 28.2 -32.0 29.2 -27.1 30.3 -28.7
2026-02-15T13:38:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:38:00.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:38:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.484125
2026-02-15T13:38:00.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:38:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:38:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:38:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:38:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:38:00.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:37:39', tmtdew=24.17, humidity=19.87, cloud=0.0, wind=15.56, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:37:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:38:00.019 [DEBUG] [Thread-205174] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:38:00.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:38:00.116 [DEBUG] [Thread-205177] [transport.py] [_log()] starting thread (client mode): 0xa2db61d0
2026-02-15T13:38:00.116 [DEBUG] [Thread-205177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:38:00.131 [DEBUG] [Thread-205177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:38:00.131 [INFO] [Thread-205177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:38:00.139 [DEBUG] [Thread-205177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:38:00.139 [DEBUG] [Thread-205177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:38:00.139 [DEBUG] [Thread-205177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:38:00.139 [DEBUG] [Thread-205177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:38:00.139 [DEBUG] [Thread-205177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] client lang: <none>
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] server lang: <none>
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] kex follows: False
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:38:00.140 [DEBUG] [Thread-205177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:38:00.141 [DEBUG] [Thread-205177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:38:00.141 [DEBUG] [Thread-205177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:38:00.141 [DEBUG] [Thread-205177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:38:00.141 [DEBUG] [Thread-205177] [transport.py] [_log()] Compression: none
2026-02-15T13:38:00.141 [DEBUG] [Thread-205177] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:38:00.196 [DEBUG] [Thread-205177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:38:00.201 [DEBUG] [Thread-205177] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:38:00.202 [DEBUG] [Thread-205177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:38:00.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:38:00.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:38:00.254 [DEBUG] [Thread-205177] [transport.py] [_log()] userauth is OK
2026-02-15T13:38:00.255 [DEBUG] [Thread-205177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:38:00.255 [DEBUG] [Thread-205177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:38:00.255 [DEBUG] [Thread-205177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:38:00.255 [DEBUG] [Thread-205177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:38:00.279 [INFO] [Thread-205177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:38:00.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:38:00.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:38:01.090 [DEBUG] [Thread-205177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:38:01.091 [DEBUG] [Thread-205177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:38:01.139 [DEBUG] [Thread-205177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:38:01.139 [DEBUG] [Thread-205177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:38:01.147 [DEBUG] [Thread-205177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:38:01.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:38:01.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:38:01.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:38:01.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:38:01.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:38:01.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:38:01.181 [DEBUG] [Thread-205177] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:38:05.001 [DEBUG] [Thread-205179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:38:20.062 [DEBUG] [Thread-205180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:38:31.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:38:31.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:38:31.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:38:33.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 38, 15), 22.88, 21.58, 0.0, 16.39, 21.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:38:33.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:38:15
2026-02-15T13:38:33.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:38:34.015 [DEBUG] [Thread-205181] [transport.py] [_log()] starting thread (client mode): 0xa2d4cee0
2026-02-15T13:38:34.015 [DEBUG] [Thread-205181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:38:34.035 [DEBUG] [Thread-205181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:38:34.035 [INFO] [Thread-205181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:38:34.038 [DEBUG] [Thread-205181] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:38:34.039 [DEBUG] [Thread-205181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] client lang: <none>
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] server lang: <none>
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] kex follows: False
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] Compression: none
2026-02-15T13:38:34.040 [DEBUG] [Thread-205181] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:38:34.057 [DEBUG] [Thread-205181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:38:34.057 [DEBUG] [Thread-205181] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:38:34.058 [DEBUG] [Thread-205181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:38:34.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:38:34.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:38:34.101 [DEBUG] [Thread-205181] [transport.py] [_log()] userauth is OK
2026-02-15T13:38:34.101 [DEBUG] [Thread-205181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:38:34.101 [DEBUG] [Thread-205181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:38:34.101 [DEBUG] [Thread-205181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:38:34.101 [DEBUG] [Thread-205181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:38:34.122 [INFO] [Thread-205181] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:38:34.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:38:34.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:38:34.546 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:38:34.749 [DEBUG] [Thread-205181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:38:34.749 [DEBUG] [Thread-205181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:38:34.750 [DEBUG] [Thread-205181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:38:34.790 [DEBUG] [Thread-205181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:38:34.791 [DEBUG] [Thread-205181] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:38:34.794 [DEBUG] [Thread-205181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:38:34.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:38:34.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:38:34.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:38:34.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:38:34.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:38:34.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:38:34.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:38:34.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:38:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:38:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.484472 -999.00  +22.20  13.20     25   +1.50 1 1 1 1 1   888    0 19.86 9.81 ----- 13.2 13.2 138.6 24.1 29.7 -28.3 28.7 -27.7 29.4 -27.1 30.4 -27.1
2026-02-15T13:38:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:38:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:38:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.484472
2026-02-15T13:38:34.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:38:34.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:38:34.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:38:34.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:38:34.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:38:34.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:38:15', tmtdew=22.88, humidity=21.58, cloud=0.0, wind=16.39, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:37:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:38:34.823 [DEBUG] [Thread-205181] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:38:34.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:38:34.923 [DEBUG] [Thread-205184] [transport.py] [_log()] starting thread (client mode): 0xa57406d0
2026-02-15T13:38:34.923 [DEBUG] [Thread-205184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:38:34.937 [DEBUG] [Thread-205184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:38:34.937 [INFO] [Thread-205184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:38:34.945 [DEBUG] [Thread-205184] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:38:34.945 [DEBUG] [Thread-205184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:38:34.945 [DEBUG] [Thread-205184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:38:34.945 [DEBUG] [Thread-205184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:38:34.945 [DEBUG] [Thread-205184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:38:34.945 [DEBUG] [Thread-205184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] client lang: <none>
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] server lang: <none>
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] kex follows: False
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] Compression: none
2026-02-15T13:38:34.946 [DEBUG] [Thread-205184] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:38:35.002 [DEBUG] [Thread-205184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:38:35.003 [DEBUG] [Thread-205184] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:38:35.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:38:35.004 [DEBUG] [Thread-205184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:38:35.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:38:35.058 [DEBUG] [Thread-205184] [transport.py] [_log()] userauth is OK
2026-02-15T13:38:35.059 [DEBUG] [Thread-205184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:38:35.059 [DEBUG] [Thread-205184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:38:35.059 [DEBUG] [Thread-205184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:38:35.059 [DEBUG] [Thread-205184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:38:35.078 [INFO] [Thread-205184] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:38:35.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:38:35.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:38:35.098 [DEBUG] [Thread-205186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:38:35.894 [DEBUG] [Thread-205184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:38:35.894 [DEBUG] [Thread-205184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:38:35.943 [DEBUG] [Thread-205184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:38:35.943 [DEBUG] [Thread-205184] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:38:35.952 [DEBUG] [Thread-205184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:38:35.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:38:35.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:38:35.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:38:35.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:38:35.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:38:35.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:38:35.990 [DEBUG] [Thread-205184] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:38:50.148 [DEBUG] [Thread-205187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:38:50.284 [DEBUG] [Thread-205188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:05.186 [DEBUG] [Thread-205189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:06.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:39:06.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:39:06.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:39:07.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 38, 50), 23.57, 20.92, 0.0, 14.95, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:39:07.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:38:50
2026-02-15T13:39:08.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:39:08.440 [DEBUG] [Thread-205190] [transport.py] [_log()] starting thread (client mode): 0xa2d4dcc0
2026-02-15T13:39:08.440 [DEBUG] [Thread-205190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:39:08.463 [DEBUG] [Thread-205190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:39:08.463 [INFO] [Thread-205190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:39:08.466 [DEBUG] [Thread-205190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] client lang: <none>
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] server lang: <none>
2026-02-15T13:39:08.467 [DEBUG] [Thread-205190] [transport.py] [_log()] kex follows: False
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] Compression: none
2026-02-15T13:39:08.468 [DEBUG] [Thread-205190] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:39:08.487 [DEBUG] [Thread-205190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:39:08.488 [DEBUG] [Thread-205190] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:39:08.488 [DEBUG] [Thread-205190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:39:08.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:39:08.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:39:08.490 [DEBUG] [Thread-205190] [transport.py] [_log()] userauth is OK
2026-02-15T13:39:08.490 [DEBUG] [Thread-205190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:39:08.490 [DEBUG] [Thread-205190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:39:08.490 [DEBUG] [Thread-205190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:39:08.491 [DEBUG] [Thread-205190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:39:08.506 [INFO] [Thread-205190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:39:08.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:39:09.121 [DEBUG] [Thread-205190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:39:09.121 [DEBUG] [Thread-205190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:39:09.122 [DEBUG] [Thread-205190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:39:09.162 [DEBUG] [Thread-205190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:39:09.162 [DEBUG] [Thread-205190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:39:09.166 [DEBUG] [Thread-205190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:39:09.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:39:09.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:39:09.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:39:09.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:39:09.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:39:09.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:39:09.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:39:09.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:39:09.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:39:09.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.484819 -999.00  +22.20   7.10     25   +1.70 1 1 1 1 1   888    0 20.28 14.05 ----- 7.1 7.1 136.5 15.6 29.8 -27.7 28.8 -27.0 29.3 -26.7 30.4 -28.9
2026-02-15T13:39:09.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:39:09.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:39:09.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.484819
2026-02-15T13:39:09.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:39:09.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:39:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:39:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:39:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:39:09.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:38:50', tmtdew=23.57, humidity=20.92, cloud=0.0, wind=14.95, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:38:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:39:09.190 [DEBUG] [Thread-205190] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:39:09.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:39:09.301 [DEBUG] [Thread-205193] [transport.py] [_log()] starting thread (client mode): 0xa2d4e4a0
2026-02-15T13:39:09.301 [DEBUG] [Thread-205193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:39:09.318 [DEBUG] [Thread-205193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:39:09.318 [INFO] [Thread-205193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:39:09.327 [DEBUG] [Thread-205193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:39:09.327 [DEBUG] [Thread-205193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:39:09.327 [DEBUG] [Thread-205193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:39:09.327 [DEBUG] [Thread-205193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:09.327 [DEBUG] [Thread-205193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] client lang: <none>
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] server lang: <none>
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] kex follows: False
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:39:09.328 [DEBUG] [Thread-205193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:39:09.329 [DEBUG] [Thread-205193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:39:09.329 [DEBUG] [Thread-205193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:39:09.329 [DEBUG] [Thread-205193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:39:09.329 [DEBUG] [Thread-205193] [transport.py] [_log()] Compression: none
2026-02-15T13:39:09.329 [DEBUG] [Thread-205193] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:39:09.390 [DEBUG] [Thread-205193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:39:09.390 [DEBUG] [Thread-205193] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:39:09.391 [DEBUG] [Thread-205193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:39:09.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:39:09.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:39:09.453 [DEBUG] [Thread-205193] [transport.py] [_log()] userauth is OK
2026-02-15T13:39:09.454 [DEBUG] [Thread-205193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:39:09.454 [DEBUG] [Thread-205193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:39:09.454 [DEBUG] [Thread-205193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:39:09.454 [DEBUG] [Thread-205193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:39:09.476 [INFO] [Thread-205193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:39:09.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:39:09.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:39:10.295 [DEBUG] [Thread-205193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:39:10.295 [DEBUG] [Thread-205193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:39:10.343 [DEBUG] [Thread-205193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:39:10.343 [DEBUG] [Thread-205193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:39:10.352 [DEBUG] [Thread-205193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:39:10.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:39:10.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:39:10.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:39:10.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:39:10.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:39:10.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:39:10.389 [DEBUG] [Thread-205193] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:39:20.224 [DEBUG] [Thread-205195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:34.686 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:34.687 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:35.281 [DEBUG] [Thread-205196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:40.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:39:40.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:39:40.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:39:42.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 39, 25), 23.72, 20.7, 0.0, 15.72, 22.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:39:42.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:39:25
2026-02-15T13:39:42.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:39:42.760 [DEBUG] [Thread-205197] [transport.py] [_log()] starting thread (client mode): 0xa2db6380
2026-02-15T13:39:42.760 [DEBUG] [Thread-205197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:39:42.781 [DEBUG] [Thread-205197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:39:42.781 [INFO] [Thread-205197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:39:42.784 [DEBUG] [Thread-205197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:39:42.784 [DEBUG] [Thread-205197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] client lang: <none>
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] server lang: <none>
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] kex follows: False
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:39:42.785 [DEBUG] [Thread-205197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:39:42.786 [DEBUG] [Thread-205197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:39:42.786 [DEBUG] [Thread-205197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:39:42.786 [DEBUG] [Thread-205197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:39:42.786 [DEBUG] [Thread-205197] [transport.py] [_log()] Compression: none
2026-02-15T13:39:42.786 [DEBUG] [Thread-205197] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:39:42.802 [DEBUG] [Thread-205197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:39:42.803 [DEBUG] [Thread-205197] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:39:42.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:39:42.804 [DEBUG] [Thread-205197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:39:42.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:39:42.806 [DEBUG] [Thread-205197] [transport.py] [_log()] userauth is OK
2026-02-15T13:39:42.806 [DEBUG] [Thread-205197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:39:42.806 [DEBUG] [Thread-205197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:39:42.806 [DEBUG] [Thread-205197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:39:42.806 [DEBUG] [Thread-205197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:39:42.826 [INFO] [Thread-205197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:39:42.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:39:43.451 [DEBUG] [Thread-205197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:39:43.451 [DEBUG] [Thread-205197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:39:43.452 [DEBUG] [Thread-205197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:39:43.493 [DEBUG] [Thread-205197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:39:43.493 [DEBUG] [Thread-205197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:39:43.496 [DEBUG] [Thread-205197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:39:43.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:39:43.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:39:43.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:39:43.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:39:43.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:39:43.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:39:43.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:39:43.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:39:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:39:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.485167 -999.00  +22.40  14.45     25   +1.80 1 1 1 1 1   888    0 20.75 17.15 ----- 14.4 14.4 177.6 19.6 29.8 -28.1 28.9 -29.9 29.5 -25.4 30.5 -27.2
2026-02-15T13:39:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:39:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:39:43.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.485167
2026-02-15T13:39:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:39:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:39:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:39:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:39:43.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:39:43.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:39:25', tmtdew=23.72, humidity=20.7, cloud=0.0, wind=15.72, temperature=22.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:38:38.429', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:39:43.523 [DEBUG] [Thread-205197] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:39:43.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:39:43.620 [DEBUG] [Thread-205200] [transport.py] [_log()] starting thread (client mode): 0xa2d4e410
2026-02-15T13:39:43.620 [DEBUG] [Thread-205200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:39:43.635 [DEBUG] [Thread-205200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:39:43.635 [INFO] [Thread-205200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:39:43.642 [DEBUG] [Thread-205200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] client lang: <none>
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] server lang: <none>
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] kex follows: False
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] Compression: none
2026-02-15T13:39:43.643 [DEBUG] [Thread-205200] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:39:43.703 [DEBUG] [Thread-205200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:39:43.704 [DEBUG] [Thread-205200] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:39:43.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:39:43.705 [DEBUG] [Thread-205200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:39:43.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:39:43.762 [DEBUG] [Thread-205200] [transport.py] [_log()] userauth is OK
2026-02-15T13:39:43.762 [DEBUG] [Thread-205200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:39:43.762 [DEBUG] [Thread-205200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:39:43.762 [DEBUG] [Thread-205200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:39:43.762 [DEBUG] [Thread-205200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:39:43.776 [INFO] [Thread-205200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:39:43.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:39:43.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:39:44.602 [DEBUG] [Thread-205200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:39:44.602 [DEBUG] [Thread-205200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:39:44.651 [DEBUG] [Thread-205200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:39:44.651 [DEBUG] [Thread-205200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:39:44.661 [DEBUG] [Thread-205200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:39:44.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:39:44.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:39:44.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:39:44.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:39:44.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:39:44.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:39:44.699 [DEBUG] [Thread-205200] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:39:50.313 [DEBUG] [Thread-205202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:39:50.317 [DEBUG] [Thread-205203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:05.353 [DEBUG] [Thread-205204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:14.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:40:14.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:40:14.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:40:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 40, 1), 24.15, 20.19, 0.0, 19.23, 22.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:40:17.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:40:01
2026-02-15T13:40:17.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:40:17.528 [DEBUG] [Thread-205205] [transport.py] [_log()] starting thread (client mode): 0xa57e19f0
2026-02-15T13:40:17.528 [DEBUG] [Thread-205205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:40:17.548 [DEBUG] [Thread-205205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:40:17.548 [INFO] [Thread-205205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] client lang: <none>
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] server lang: <none>
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] kex follows: False
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] Compression: none
2026-02-15T13:40:17.550 [DEBUG] [Thread-205205] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:40:17.561 [DEBUG] [Thread-205205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:40:17.561 [DEBUG] [Thread-205205] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:40:17.562 [DEBUG] [Thread-205205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:40:17.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:40:17.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:40:17.564 [DEBUG] [Thread-205205] [transport.py] [_log()] userauth is OK
2026-02-15T13:40:17.564 [DEBUG] [Thread-205205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:40:17.564 [DEBUG] [Thread-205205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:40:17.564 [DEBUG] [Thread-205205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:40:17.564 [DEBUG] [Thread-205205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:40:17.582 [INFO] [Thread-205205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:40:17.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:40:20.389 [DEBUG] [Thread-205207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:20.849 [DEBUG] [Thread-205205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:40:20.849 [DEBUG] [Thread-205205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:40:20.850 [DEBUG] [Thread-205205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:40:20.890 [DEBUG] [Thread-205205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:40:20.890 [DEBUG] [Thread-205205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:40:20.894 [DEBUG] [Thread-205205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:40:20.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:40:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:40:20.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:40:20.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:40:20.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:40:20.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:40:20.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:40:20.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:40:20.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:40:20.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.485861 -999.00  +22.40  14.64     24   +1.30 1 1 1 1 1   888    0 20.94 25.55 ----- 14.6 14.6 160.8 26.8 29.8 -27.9 28.9 -28.1 29.4 -27.9 30.6 -29.1
2026-02-15T13:40:20.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:40:20.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:40:20.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.485861
2026-02-15T13:40:20.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:40:20.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:40:20.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:40:20.954 [DEBUG] [Thread-205205] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:40:20.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:40:20.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:40:20.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:40:01', tmtdew=24.15, humidity=20.19, cloud=0.0, wind=19.23, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:39:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:40:21.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:40:21.049 [DEBUG] [Thread-205209] [transport.py] [_log()] starting thread (client mode): 0xa57e1480
2026-02-15T13:40:21.049 [DEBUG] [Thread-205209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:40:21.064 [DEBUG] [Thread-205209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:40:21.064 [INFO] [Thread-205209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:40:21.072 [DEBUG] [Thread-205209] [transport.py] [_log()] client lang: <none>
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] server lang: <none>
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] kex follows: False
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] Compression: none
2026-02-15T13:40:21.073 [DEBUG] [Thread-205209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:40:21.130 [DEBUG] [Thread-205209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:40:21.131 [DEBUG] [Thread-205209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:40:21.131 [DEBUG] [Thread-205209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:40:21.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:40:21.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:40:21.186 [DEBUG] [Thread-205209] [transport.py] [_log()] userauth is OK
2026-02-15T13:40:21.187 [DEBUG] [Thread-205209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:40:21.187 [DEBUG] [Thread-205209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:40:21.187 [DEBUG] [Thread-205209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:40:21.187 [DEBUG] [Thread-205209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:40:21.206 [INFO] [Thread-205209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:40:21.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:40:21.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:40:22.004 [DEBUG] [Thread-205209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:40:22.004 [DEBUG] [Thread-205209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:40:22.051 [DEBUG] [Thread-205209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:40:22.052 [DEBUG] [Thread-205209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:40:22.061 [DEBUG] [Thread-205209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:40:22.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:40:22.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:40:22.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:40:22.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:40:22.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:40:22.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:40:22.097 [DEBUG] [Thread-205209] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:40:34.827 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:34.828 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:35.429 [DEBUG] [Thread-205211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:50.351 [DEBUG] [Thread-205212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:50.484 [DEBUG] [Thread-205213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:40:52.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:40:52.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:40:52.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:40:54.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 40, 37), 25.15, 18.58, 0.0, 15.74, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:40:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:40:37
2026-02-15T13:40:54.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:40:54.595 [DEBUG] [Thread-205214] [transport.py] [_log()] starting thread (client mode): 0xa2db4eb0
2026-02-15T13:40:54.595 [DEBUG] [Thread-205214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:40:54.614 [DEBUG] [Thread-205214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:40:54.615 [INFO] [Thread-205214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:40:54.617 [DEBUG] [Thread-205214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] client lang: <none>
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] server lang: <none>
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] kex follows: False
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:40:54.618 [DEBUG] [Thread-205214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:40:54.619 [DEBUG] [Thread-205214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:40:54.619 [DEBUG] [Thread-205214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:40:54.619 [DEBUG] [Thread-205214] [transport.py] [_log()] Compression: none
2026-02-15T13:40:54.619 [DEBUG] [Thread-205214] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:40:54.636 [DEBUG] [Thread-205214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:40:54.637 [DEBUG] [Thread-205214] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:40:54.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:40:54.638 [DEBUG] [Thread-205214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:40:54.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:40:54.640 [DEBUG] [Thread-205214] [transport.py] [_log()] userauth is OK
2026-02-15T13:40:54.640 [DEBUG] [Thread-205214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:40:54.640 [DEBUG] [Thread-205214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:40:54.641 [DEBUG] [Thread-205214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:40:54.641 [DEBUG] [Thread-205214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:40:54.659 [INFO] [Thread-205214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:40:54.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:40:55.253 [DEBUG] [Thread-205214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:40:55.254 [DEBUG] [Thread-205214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:40:55.254 [DEBUG] [Thread-205214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:40:55.294 [DEBUG] [Thread-205214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:40:55.295 [DEBUG] [Thread-205214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:40:55.297 [DEBUG] [Thread-205214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:40:55.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:40:55.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:40:55.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:40:55.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:40:55.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:40:55.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:40:55.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:40:55.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:40:55.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:40:55.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.486556 -999.00  +22.30  14.67     25   +1.60 1 1 1 1 1   888    0 21.43 39.41 ----- 14.7 14.7 143.6 22.2 29.9 -27.9 28.9 -27.4 29.5 -26.9 30.6 -28.8
2026-02-15T13:40:55.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:40:55.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:40:55.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.486556
2026-02-15T13:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:40:55.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:40:55.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:40:37', tmtdew=25.15, humidity=18.58, cloud=0.0, wind=15.74, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:40:38.438', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:40:55.325 [DEBUG] [Thread-205214] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:40:55.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:40:55.422 [DEBUG] [Thread-205217] [transport.py] [_log()] starting thread (client mode): 0xa5740310
2026-02-15T13:40:55.422 [DEBUG] [Thread-205217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:40:55.436 [DEBUG] [Thread-205217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:40:55.437 [INFO] [Thread-205217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:40:55.444 [DEBUG] [Thread-205217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:40:55.444 [DEBUG] [Thread-205217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:40:55.445 [DEBUG] [Thread-205217] [transport.py] [_log()] client lang: <none>
2026-02-15T13:40:55.446 [DEBUG] [Thread-205217] [transport.py] [_log()] server lang: <none>
2026-02-15T13:40:55.446 [DEBUG] [Thread-205217] [transport.py] [_log()] kex follows: False
2026-02-15T13:40:55.446 [DEBUG] [Thread-205217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:40:55.446 [DEBUG] [Thread-205217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:40:55.446 [DEBUG] [Thread-205217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:40:55.446 [DEBUG] [Thread-205217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:40:55.447 [DEBUG] [Thread-205217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:40:55.447 [DEBUG] [Thread-205217] [transport.py] [_log()] Compression: none
2026-02-15T13:40:55.447 [DEBUG] [Thread-205217] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:40:55.503 [DEBUG] [Thread-205217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:40:55.504 [DEBUG] [Thread-205217] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:40:55.504 [DEBUG] [Thread-205217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:40:55.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:40:55.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:40:55.559 [DEBUG] [Thread-205217] [transport.py] [_log()] userauth is OK
2026-02-15T13:40:55.559 [DEBUG] [Thread-205217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:40:55.559 [DEBUG] [Thread-205217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:40:55.559 [DEBUG] [Thread-205217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:40:55.559 [DEBUG] [Thread-205217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:40:55.579 [INFO] [Thread-205217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:40:55.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:40:55.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:40:56.380 [DEBUG] [Thread-205217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:40:56.381 [DEBUG] [Thread-205217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:40:56.428 [DEBUG] [Thread-205217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:40:56.429 [DEBUG] [Thread-205217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:40:56.438 [DEBUG] [Thread-205217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:40:56.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:40:56.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:40:56.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:40:56.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:40:56.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:40:56.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:40:56.475 [DEBUG] [Thread-205217] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:41:05.524 [DEBUG] [Thread-205219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:41:20.577 [DEBUG] [Thread-205220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:41:26.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:41:26.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:41:26.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:41:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 41, 13), 24.43, 19.19, 0.0, 19.39, 22.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:41:28.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:41:13
2026-02-15T13:41:28.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:41:28.965 [DEBUG] [Thread-205221] [transport.py] [_log()] starting thread (client mode): 0xa57e3a90
2026-02-15T13:41:28.965 [DEBUG] [Thread-205221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:41:28.985 [DEBUG] [Thread-205221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:41:28.986 [INFO] [Thread-205221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:41:28.988 [DEBUG] [Thread-205221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] client lang: <none>
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] server lang: <none>
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] kex follows: False
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] Compression: none
2026-02-15T13:41:28.989 [DEBUG] [Thread-205221] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:41:29.006 [DEBUG] [Thread-205221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:41:29.007 [DEBUG] [Thread-205221] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:41:29.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:41:29.009 [DEBUG] [Thread-205221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:41:29.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:41:29.011 [DEBUG] [Thread-205221] [transport.py] [_log()] userauth is OK
2026-02-15T13:41:29.012 [DEBUG] [Thread-205221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:41:29.012 [DEBUG] [Thread-205221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:41:29.012 [DEBUG] [Thread-205221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:41:29.013 [DEBUG] [Thread-205221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:41:29.036 [INFO] [Thread-205221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:41:29.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:41:29.645 [DEBUG] [Thread-205221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:41:29.645 [DEBUG] [Thread-205221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:41:29.646 [DEBUG] [Thread-205221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:41:29.687 [DEBUG] [Thread-205221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:41:29.687 [DEBUG] [Thread-205221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:41:29.690 [DEBUG] [Thread-205221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:41:29.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:41:29.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:41:29.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:41:29.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:41:29.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:41:29.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:41:29.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:41:29.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:41:29.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:41:29.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.486903 -999.00  +22.50  14.66     24   +1.30 1 1 1 1 1   888    0 21.69 39.26 ----- 14.7 14.7 162.6 28.1 29.9 -28.7 29.0 -27.6 29.6 -26.7 30.8 -27.5
2026-02-15T13:41:29.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:41:29.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:41:29.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.486903
2026-02-15T13:41:29.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:41:29.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:41:29.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:41:29.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:41:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:41:29.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:41:13', tmtdew=24.43, humidity=19.19, cloud=0.0, wind=19.39, temperature=22.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:41:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:41:29.715 [DEBUG] [Thread-205221] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:41:29.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:41:29.811 [DEBUG] [Thread-205224] [transport.py] [_log()] starting thread (client mode): 0xa81d7e80
2026-02-15T13:41:29.811 [DEBUG] [Thread-205224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:41:29.825 [DEBUG] [Thread-205224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:41:29.826 [INFO] [Thread-205224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:41:29.833 [DEBUG] [Thread-205224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] client lang: <none>
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] server lang: <none>
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] kex follows: False
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] Compression: none
2026-02-15T13:41:29.834 [DEBUG] [Thread-205224] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:41:29.891 [DEBUG] [Thread-205224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:41:29.892 [DEBUG] [Thread-205224] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:41:29.893 [DEBUG] [Thread-205224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:41:29.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:41:29.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:41:29.954 [DEBUG] [Thread-205224] [transport.py] [_log()] userauth is OK
2026-02-15T13:41:29.954 [DEBUG] [Thread-205224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:41:29.955 [DEBUG] [Thread-205224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:41:29.955 [DEBUG] [Thread-205224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:41:29.955 [DEBUG] [Thread-205224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:41:29.974 [INFO] [Thread-205224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:41:29.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:41:29.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:41:30.784 [DEBUG] [Thread-205224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:41:30.784 [DEBUG] [Thread-205224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:41:30.832 [DEBUG] [Thread-205224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:41:30.833 [DEBUG] [Thread-205224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:41:30.842 [DEBUG] [Thread-205224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:41:30.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:41:30.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:41:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:41:30.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:41:30.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:41:30.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:41:30.879 [DEBUG] [Thread-205224] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:41:34.973 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:41:34.974 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:41:35.612 [DEBUG] [Thread-205226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:41:50.398 [DEBUG] [Thread-205227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:41:50.666 [DEBUG] [Thread-205228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:00.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:42:00.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:42:00.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:42:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 41, 48), 25.05, 18.63, 0.0, 24.03, 22.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:42:03.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:41:48
2026-02-15T13:42:03.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:42:03.695 [DEBUG] [Thread-205229] [transport.py] [_log()] starting thread (client mode): 0xa5741d80
2026-02-15T13:42:03.695 [DEBUG] [Thread-205229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:42:03.714 [DEBUG] [Thread-205229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:42:03.714 [INFO] [Thread-205229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:42:03.717 [DEBUG] [Thread-205229] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:42:03.717 [DEBUG] [Thread-205229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] client lang: <none>
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] server lang: <none>
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] kex follows: False
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] Compression: none
2026-02-15T13:42:03.718 [DEBUG] [Thread-205229] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:42:03.735 [DEBUG] [Thread-205229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:42:03.736 [DEBUG] [Thread-205229] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:42:03.736 [DEBUG] [Thread-205229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:42:03.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:42:03.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:42:03.738 [DEBUG] [Thread-205229] [transport.py] [_log()] userauth is OK
2026-02-15T13:42:03.739 [DEBUG] [Thread-205229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:42:03.739 [DEBUG] [Thread-205229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:42:03.739 [DEBUG] [Thread-205229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:42:03.739 [DEBUG] [Thread-205229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:42:03.757 [INFO] [Thread-205229] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:42:03.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:42:04.397 [DEBUG] [Thread-205229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:42:04.397 [DEBUG] [Thread-205229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:42:04.397 [DEBUG] [Thread-205229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:42:04.437 [DEBUG] [Thread-205229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:42:04.438 [DEBUG] [Thread-205229] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:42:04.441 [DEBUG] [Thread-205229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:42:04.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:42:04.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:42:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:42:04.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:42:04.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:42:04.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:42:04.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:42:04.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:42:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:42:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.487250 -999.00  +22.50  10.87     24   +1.30 1 1 1 1 1   888    0 21.08 41.86 ----- 10.9 10.9 135.4 18.9 30.0 -27.4 29.1 -28.0 29.6 -27.3 30.7 -29.4
2026-02-15T13:42:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:42:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:42:04.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.487250
2026-02-15T13:42:04.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:42:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:42:04.470 [DEBUG] [Thread-205229] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:42:04.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:42:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:42:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:42:04.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:41:48', tmtdew=25.05, humidity=18.63, cloud=0.0, wind=24.03, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:41:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:42:04.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:42:04.560 [DEBUG] [Thread-205232] [transport.py] [_log()] starting thread (client mode): 0xa5743a60
2026-02-15T13:42:04.560 [DEBUG] [Thread-205232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:42:04.575 [DEBUG] [Thread-205232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:42:04.575 [INFO] [Thread-205232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:42:04.583 [DEBUG] [Thread-205232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:42:04.583 [DEBUG] [Thread-205232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:42:04.583 [DEBUG] [Thread-205232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:42:04.583 [DEBUG] [Thread-205232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:04.583 [DEBUG] [Thread-205232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] client lang: <none>
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] server lang: <none>
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] kex follows: False
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:42:04.584 [DEBUG] [Thread-205232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:42:04.585 [DEBUG] [Thread-205232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:42:04.585 [DEBUG] [Thread-205232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:42:04.585 [DEBUG] [Thread-205232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:42:04.585 [DEBUG] [Thread-205232] [transport.py] [_log()] Compression: none
2026-02-15T13:42:04.585 [DEBUG] [Thread-205232] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:42:04.645 [DEBUG] [Thread-205232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:42:04.646 [DEBUG] [Thread-205232] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:42:04.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:42:04.647 [DEBUG] [Thread-205232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:42:04.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:42:04.703 [DEBUG] [Thread-205232] [transport.py] [_log()] userauth is OK
2026-02-15T13:42:04.703 [DEBUG] [Thread-205232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:42:04.703 [DEBUG] [Thread-205232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:42:04.703 [DEBUG] [Thread-205232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:42:04.703 [DEBUG] [Thread-205232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:42:04.721 [INFO] [Thread-205232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:42:04.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:42:04.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:42:05.581 [DEBUG] [Thread-205232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:42:05.581 [DEBUG] [Thread-205232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:42:05.630 [DEBUG] [Thread-205232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:42:05.630 [DEBUG] [Thread-205232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:42:05.639 [DEBUG] [Thread-205232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:42:05.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:42:05.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:42:05.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:42:05.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:42:05.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:42:05.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:42:05.678 [DEBUG] [Thread-205232] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:42:05.698 [DEBUG] [Thread-205234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:20.753 [DEBUG] [Thread-205235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:35.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:35.119 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:35.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:42:35.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:42:35.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:42:35.791 [DEBUG] [Thread-205236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 42, 24), 25.36, 18.26, 0.0, 22.9, 22.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:42:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:42:24
2026-02-15T13:42:38.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:42:38.230 [DEBUG] [Thread-205237] [transport.py] [_log()] starting thread (client mode): 0xa57c1c30
2026-02-15T13:42:38.230 [DEBUG] [Thread-205237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:42:38.250 [DEBUG] [Thread-205237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:42:38.250 [INFO] [Thread-205237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:42:38.253 [DEBUG] [Thread-205237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:42:38.253 [DEBUG] [Thread-205237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:42:38.253 [DEBUG] [Thread-205237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:42:38.253 [DEBUG] [Thread-205237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:38.253 [DEBUG] [Thread-205237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:38.253 [DEBUG] [Thread-205237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] client lang: <none>
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] server lang: <none>
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] kex follows: False
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] Compression: none
2026-02-15T13:42:38.254 [DEBUG] [Thread-205237] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:42:38.273 [DEBUG] [Thread-205237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:42:38.273 [DEBUG] [Thread-205237] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:42:38.274 [DEBUG] [Thread-205237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:42:38.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:42:38.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:42:38.276 [DEBUG] [Thread-205237] [transport.py] [_log()] userauth is OK
2026-02-15T13:42:38.276 [DEBUG] [Thread-205237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:42:38.276 [DEBUG] [Thread-205237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:42:38.276 [DEBUG] [Thread-205237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:42:38.276 [DEBUG] [Thread-205237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:42:38.312 [INFO] [Thread-205237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:42:38.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:42:38.929 [DEBUG] [Thread-205237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:42:38.930 [DEBUG] [Thread-205237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:42:38.930 [DEBUG] [Thread-205237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:42:38.970 [DEBUG] [Thread-205237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:42:38.971 [DEBUG] [Thread-205237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:42:38.974 [DEBUG] [Thread-205237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:42:38.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:42:38.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:42:38.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:42:38.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:42:38.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:42:39.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:42:39.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:42:39.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:42:39.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:42:39.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.487597 -999.00  +22.90  16.11     24   +1.50 1 1 1 1 1   888    0 21.23 42.38 ----- 16.1 16.1 154.8 26.4 30.1 -28.9 29.2 -27.2 29.7 -25.9 30.8 -28.5
2026-02-15T13:42:39.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:42:39.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:42:39.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.487597
2026-02-15T13:42:39.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:42:39.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:42:39.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:42:39.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:42:39.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:42:39.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:42:24', tmtdew=25.36, humidity=18.26, cloud=0.0, wind=22.9, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:42:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:42:39.004 [DEBUG] [Thread-205237] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:42:39.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:42:39.102 [DEBUG] [Thread-205240] [transport.py] [_log()] starting thread (client mode): 0xa57e3dc0
2026-02-15T13:42:39.102 [DEBUG] [Thread-205240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:42:39.116 [DEBUG] [Thread-205240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:42:39.117 [INFO] [Thread-205240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:42:39.124 [DEBUG] [Thread-205240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:42:39.125 [DEBUG] [Thread-205240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:42:39.125 [DEBUG] [Thread-205240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:42:39.125 [DEBUG] [Thread-205240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] client lang: <none>
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] server lang: <none>
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] kex follows: False
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:42:39.126 [DEBUG] [Thread-205240] [transport.py] [_log()] Compression: none
2026-02-15T13:42:39.127 [DEBUG] [Thread-205240] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:42:39.182 [DEBUG] [Thread-205240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:42:39.183 [DEBUG] [Thread-205240] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:42:39.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:42:39.184 [DEBUG] [Thread-205240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:42:39.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:42:39.239 [DEBUG] [Thread-205240] [transport.py] [_log()] userauth is OK
2026-02-15T13:42:39.239 [DEBUG] [Thread-205240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:42:39.239 [DEBUG] [Thread-205240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:42:39.239 [DEBUG] [Thread-205240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:42:39.240 [DEBUG] [Thread-205240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:42:39.259 [INFO] [Thread-205240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:42:39.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:42:39.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:42:40.123 [DEBUG] [Thread-205240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:42:40.123 [DEBUG] [Thread-205240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:42:40.171 [DEBUG] [Thread-205240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:42:40.171 [DEBUG] [Thread-205240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:42:40.180 [DEBUG] [Thread-205240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:42:40.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:42:40.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:42:40.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:42:40.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:42:40.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:42:40.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:42:40.215 [DEBUG] [Thread-205240] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:42:50.452 [DEBUG] [Thread-205242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:42:50.831 [DEBUG] [Thread-205243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:05.885 [DEBUG] [Thread-205244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:10.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:43:10.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:43:10.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
2026-02-15T13:43:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 42, 24), 25.56, 17.76, 0.0, 22.9, 22.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:43:12.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:42:24
2026-02-15T13:43:12.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:43:12.730 [DEBUG] [Thread-205245] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-15T13:43:12.730 [DEBUG] [Thread-205245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:43:12.751 [DEBUG] [Thread-205245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:43:12.751 [INFO] [Thread-205245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:43:12.754 [DEBUG] [Thread-205245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:43:12.754 [DEBUG] [Thread-205245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:43:12.754 [DEBUG] [Thread-205245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:43:12.754 [DEBUG] [Thread-205245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:12.754 [DEBUG] [Thread-205245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:12.754 [DEBUG] [Thread-205245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] client lang: <none>
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] server lang: <none>
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] kex follows: False
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] Compression: none
2026-02-15T13:43:12.755 [DEBUG] [Thread-205245] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:43:12.778 [DEBUG] [Thread-205245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:43:12.779 [DEBUG] [Thread-205245] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:43:12.780 [DEBUG] [Thread-205245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:43:12.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:43:12.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:43:12.782 [DEBUG] [Thread-205245] [transport.py] [_log()] userauth is OK
2026-02-15T13:43:12.782 [DEBUG] [Thread-205245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:43:12.782 [DEBUG] [Thread-205245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:43:12.782 [DEBUG] [Thread-205245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:43:12.782 [DEBUG] [Thread-205245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:43:12.807 [INFO] [Thread-205245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:43:12.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:43:13.435 [DEBUG] [Thread-205245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:43:13.436 [DEBUG] [Thread-205245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:43:13.436 [DEBUG] [Thread-205245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:43:13.476 [DEBUG] [Thread-205245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:43:13.477 [DEBUG] [Thread-205245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:43:13.480 [DEBUG] [Thread-205245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:43:13.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:43:13.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:43:13.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:43:13.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:43:13.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:43:13.506 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:43:13.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:43:13.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:43:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:43:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.487944 -999.00  +23.50  15.44     23   +1.10 1 1 1 1 1   888    0 21.97 51.83 ----- 15.4 15.4 131.2 20.9 30.3 -27.9 29.3 -27.6 29.9 -25.8 30.9 -27.3
2026-02-15T13:43:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:43:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:43:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.487944
2026-02-15T13:43:13.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:43:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:43:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:43:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:43:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:43:13.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:42:24', tmtdew=25.56, humidity=17.76, cloud=0.0, wind=22.9, temperature=22.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:42:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:43:13.508 [DEBUG] [Thread-205245] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:43:13.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:43:13.606 [DEBUG] [Thread-205248] [transport.py] [_log()] starting thread (client mode): 0xa2d6ae00
2026-02-15T13:43:13.606 [DEBUG] [Thread-205248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:43:13.625 [DEBUG] [Thread-205248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:43:13.625 [INFO] [Thread-205248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:43:13.633 [DEBUG] [Thread-205248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:43:13.633 [DEBUG] [Thread-205248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:43:13.634 [DEBUG] [Thread-205248] [transport.py] [_log()] client lang: <none>
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] server lang: <none>
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] kex follows: False
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:43:13.635 [DEBUG] [Thread-205248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:43:13.636 [DEBUG] [Thread-205248] [transport.py] [_log()] Compression: none
2026-02-15T13:43:13.636 [DEBUG] [Thread-205248] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:43:13.700 [DEBUG] [Thread-205248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:43:13.701 [DEBUG] [Thread-205248] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:43:13.701 [DEBUG] [Thread-205248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:43:13.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:43:13.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:43:13.763 [DEBUG] [Thread-205248] [transport.py] [_log()] userauth is OK
2026-02-15T13:43:13.763 [DEBUG] [Thread-205248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:43:13.763 [DEBUG] [Thread-205248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:43:13.763 [DEBUG] [Thread-205248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:43:13.763 [DEBUG] [Thread-205248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:43:13.786 [INFO] [Thread-205248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:43:13.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:43:13.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:43:14.622 [DEBUG] [Thread-205248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:43:14.622 [DEBUG] [Thread-205248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:43:14.672 [DEBUG] [Thread-205248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:43:14.673 [DEBUG] [Thread-205248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:43:14.683 [DEBUG] [Thread-205248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:43:14.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:43: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')
2026-02-15T13:43:14.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:43:14.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:43:14.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:43:14.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:43:14.722 [DEBUG] [Thread-205248] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:43:20.923 [DEBUG] [Thread-205250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:35.263 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:35.264 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:35.975 [DEBUG] [Thread-205251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:44.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:43:44.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:43:44.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:43:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 43, 35), 27.43, 15.83, 0.0, 16.09, 23.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:43:46.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:43:35
2026-02-15T13:43:47.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:43:47.232 [DEBUG] [Thread-205252] [transport.py] [_log()] starting thread (client mode): 0xa57e17b0
2026-02-15T13:43:47.232 [DEBUG] [Thread-205252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:43:47.254 [DEBUG] [Thread-205252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:43:47.254 [INFO] [Thread-205252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:43:47.257 [DEBUG] [Thread-205252] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] client lang: <none>
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] server lang: <none>
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] kex follows: False
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] Compression: none
2026-02-15T13:43:47.258 [DEBUG] [Thread-205252] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:43:47.275 [DEBUG] [Thread-205252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:43:47.275 [DEBUG] [Thread-205252] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:43:47.276 [DEBUG] [Thread-205252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:43:47.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:43:47.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:43:47.278 [DEBUG] [Thread-205252] [transport.py] [_log()] userauth is OK
2026-02-15T13:43:47.279 [DEBUG] [Thread-205252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:43:47.279 [DEBUG] [Thread-205252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:43:47.279 [DEBUG] [Thread-205252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:43:47.279 [DEBUG] [Thread-205252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:43:47.303 [INFO] [Thread-205252] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:43:47.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:43:47.946 [DEBUG] [Thread-205252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:43:47.947 [DEBUG] [Thread-205252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:43:47.947 [DEBUG] [Thread-205252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:43:47.987 [DEBUG] [Thread-205252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:43:47.987 [DEBUG] [Thread-205252] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:43:47.990 [DEBUG] [Thread-205252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:43:48.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:43:48.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:43:48.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:43:48.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:43:48.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:43:48.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:43:48.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:43:48.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:43:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:43:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.488291 -999.00  +23.90  10.87     22   +1.00 1 1 1 1 1   888    0 21.98 61.85 ----- 10.9 10.9 121.6 18.1 30.4 -27.4 29.5 -27.2 30.0 -26.0 31.1 -26.9
2026-02-15T13:43:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:43:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:43:48.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.488291
2026-02-15T13:43:48.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:43:48.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:43:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:43:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:43:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:43:48.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:43:35', tmtdew=27.43, humidity=15.83, cloud=0.0, wind=16.09, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:43:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:43:48.018 [DEBUG] [Thread-205252] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:43:48.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:43:48.115 [DEBUG] [Thread-205255] [transport.py] [_log()] starting thread (client mode): 0xa81d6200
2026-02-15T13:43:48.116 [DEBUG] [Thread-205255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:43:48.131 [DEBUG] [Thread-205255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:43:48.131 [INFO] [Thread-205255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:43:48.138 [DEBUG] [Thread-205255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:43:48.139 [DEBUG] [Thread-205255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:43:48.139 [DEBUG] [Thread-205255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:43:48.139 [DEBUG] [Thread-205255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] client lang: <none>
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] server lang: <none>
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] kex follows: False
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] Compression: none
2026-02-15T13:43:48.140 [DEBUG] [Thread-205255] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:43:48.203 [DEBUG] [Thread-205255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:43:48.203 [DEBUG] [Thread-205255] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:43:48.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:43:48.204 [DEBUG] [Thread-205255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:43:48.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:43:48.260 [DEBUG] [Thread-205255] [transport.py] [_log()] userauth is OK
2026-02-15T13:43:48.260 [DEBUG] [Thread-205255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:43:48.260 [DEBUG] [Thread-205255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:43:48.260 [DEBUG] [Thread-205255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:43:48.260 [DEBUG] [Thread-205255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:43:48.278 [INFO] [Thread-205255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:43:48.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:43:48.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:43:49.114 [DEBUG] [Thread-205255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:43:49.114 [DEBUG] [Thread-205255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:43:49.162 [DEBUG] [Thread-205255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:43:49.162 [DEBUG] [Thread-205255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:43:49.172 [DEBUG] [Thread-205255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:43:49.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:43:49.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:43:49.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:43:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:43:49.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:43:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:43:49.209 [DEBUG] [Thread-205255] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:43:50.485 [DEBUG] [Thread-205257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:43:51.013 [DEBUG] [Thread-205258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:06.062 [DEBUG] [Thread-205259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:44:19.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:44:19.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:44:21.099 [DEBUG] [Thread-205260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 44, 10), 25.31, 18.13, 0.0, 22.25, 22.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:44:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:44:10
2026-02-15T13:44:21.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:44:21.911 [DEBUG] [Thread-205261] [transport.py] [_log()] starting thread (client mode): 0xa5741780
2026-02-15T13:44:21.911 [DEBUG] [Thread-205261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:44:21.930 [DEBUG] [Thread-205261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:44:21.931 [INFO] [Thread-205261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] client lang: <none>
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] server lang: <none>
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] kex follows: False
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] Compression: none
2026-02-15T13:44:21.932 [DEBUG] [Thread-205261] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:44:21.948 [DEBUG] [Thread-205261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:44:21.949 [DEBUG] [Thread-205261] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:44:21.949 [DEBUG] [Thread-205261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:44:21.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:44:21.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:44:21.950 [DEBUG] [Thread-205261] [transport.py] [_log()] userauth is OK
2026-02-15T13:44:21.950 [DEBUG] [Thread-205261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:44:21.950 [DEBUG] [Thread-205261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:44:21.950 [DEBUG] [Thread-205261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:44:21.950 [DEBUG] [Thread-205261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:44:21.963 [INFO] [Thread-205261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:44:21.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:44:22.601 [DEBUG] [Thread-205261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:44:22.601 [DEBUG] [Thread-205261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:44:22.601 [DEBUG] [Thread-205261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:44:22.642 [DEBUG] [Thread-205261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:44:22.642 [DEBUG] [Thread-205261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:44:22.646 [DEBUG] [Thread-205261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:44:22.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:44:22.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:44:22.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:44:22.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:44:22.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:44:22.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:44:22.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:44:22.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:44:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:44:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.488639 -999.00  +23.80  13.00     22   +1.20 1 1 1 1 1   888    0 22.81 74.59 ----- 13.0 13.0 131.8 26.7 30.5 -28.3 29.7 -28.3 30.2 -25.2 31.3 -26.9
2026-02-15T13:44:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:44:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:44:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.488639
2026-02-15T13:44:22.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:44:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:44:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:44:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:44:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:44:22.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:44:10', tmtdew=25.31, humidity=18.13, cloud=0.0, wind=22.25, temperature=22.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:43:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:44:22.674 [DEBUG] [Thread-205261] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:44:22.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:44:22.769 [DEBUG] [Thread-205264] [transport.py] [_log()] starting thread (client mode): 0xa2d02980
2026-02-15T13:44:22.769 [DEBUG] [Thread-205264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:44:22.783 [DEBUG] [Thread-205264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:44:22.784 [INFO] [Thread-205264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:44:22.791 [DEBUG] [Thread-205264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:44:22.791 [DEBUG] [Thread-205264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:44:22.791 [DEBUG] [Thread-205264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:44:22.791 [DEBUG] [Thread-205264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] client lang: <none>
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] server lang: <none>
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] kex follows: False
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] Compression: none
2026-02-15T13:44:22.792 [DEBUG] [Thread-205264] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:44:22.850 [DEBUG] [Thread-205264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:44:22.851 [DEBUG] [Thread-205264] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:44:22.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:44:22.852 [DEBUG] [Thread-205264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:44:22.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:44:22.905 [DEBUG] [Thread-205264] [transport.py] [_log()] userauth is OK
2026-02-15T13:44:22.906 [DEBUG] [Thread-205264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:44:22.906 [DEBUG] [Thread-205264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:44:22.906 [DEBUG] [Thread-205264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:44:22.906 [DEBUG] [Thread-205264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:44:22.927 [INFO] [Thread-205264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:44:22.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:44:22.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:44:23.742 [DEBUG] [Thread-205264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:44:23.742 [DEBUG] [Thread-205264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:44:23.790 [DEBUG] [Thread-205264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:44:23.790 [DEBUG] [Thread-205264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:44:23.799 [DEBUG] [Thread-205264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:44:23.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:44:23.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:44:23.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:44:23.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:44:23.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:44:23.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:44:23.836 [DEBUG] [Thread-205264] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:44:35.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:35.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:36.133 [DEBUG] [Thread-205266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:50.518 [DEBUG] [Thread-205267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:51.199 [DEBUG] [Thread-205268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:44:53.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:44:53.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:44:53.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:44:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 44, 46), 25.48, 17.92, 0.0, 28.44, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:44:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:44:46
2026-02-15T13:44:56.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:44:56.221 [DEBUG] [Thread-205269] [transport.py] [_log()] starting thread (client mode): 0xa81d7190
2026-02-15T13:44:56.221 [DEBUG] [Thread-205269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:44:56.241 [DEBUG] [Thread-205269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:44:56.241 [INFO] [Thread-205269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:44:56.244 [DEBUG] [Thread-205269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:44:56.244 [DEBUG] [Thread-205269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:44:56.244 [DEBUG] [Thread-205269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:44:56.244 [DEBUG] [Thread-205269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:56.244 [DEBUG] [Thread-205269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] client lang: <none>
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] server lang: <none>
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] kex follows: False
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:44:56.245 [DEBUG] [Thread-205269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:44:56.246 [DEBUG] [Thread-205269] [transport.py] [_log()] Compression: none
2026-02-15T13:44:56.246 [DEBUG] [Thread-205269] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:44:56.265 [DEBUG] [Thread-205269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:44:56.266 [DEBUG] [Thread-205269] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:44:56.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:44:56.268 [DEBUG] [Thread-205269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:44:56.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:44:56.270 [DEBUG] [Thread-205269] [transport.py] [_log()] userauth is OK
2026-02-15T13:44:56.270 [DEBUG] [Thread-205269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:44:56.271 [DEBUG] [Thread-205269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:44:56.271 [DEBUG] [Thread-205269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:44:56.271 [DEBUG] [Thread-205269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:44:56.306 [INFO] [Thread-205269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:44:56.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:44:56.907 [DEBUG] [Thread-205269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:44:56.907 [DEBUG] [Thread-205269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:44:56.907 [DEBUG] [Thread-205269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:44:56.948 [DEBUG] [Thread-205269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:44:56.948 [DEBUG] [Thread-205269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:44:56.952 [DEBUG] [Thread-205269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:44:56.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:44:56.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:44:56.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:44:56.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:44:56.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:44:56.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:44:56.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:44:56.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:44:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:44:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.489333 -999.00  +23.80  17.28     22   +1.40 1 1 1 1 1   888    0 23.04 87.69 ----- 17.3 17.3 136.4 28.4 30.4 -29.6 29.8 -28.8 30.3 -26.7 31.3 -28.7
2026-02-15T13:44:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:44:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:44:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.489333
2026-02-15T13:44:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:44:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:44:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:44:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:44:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:44:56.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:44:46', tmtdew=25.48, humidity=17.92, cloud=0.0, wind=28.44, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:44:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:44:56.979 [DEBUG] [Thread-205269] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:44:57.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:44:57.076 [DEBUG] [Thread-205272] [transport.py] [_log()] starting thread (client mode): 0xa2db7eb0
2026-02-15T13:44:57.076 [DEBUG] [Thread-205272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:44:57.094 [DEBUG] [Thread-205272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:44:57.094 [INFO] [Thread-205272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:44:57.103 [DEBUG] [Thread-205272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:44:57.103 [DEBUG] [Thread-205272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:44:57.103 [DEBUG] [Thread-205272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:44:57.103 [DEBUG] [Thread-205272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] client lang: <none>
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] server lang: <none>
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] kex follows: False
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] Compression: none
2026-02-15T13:44:57.104 [DEBUG] [Thread-205272] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:44:57.158 [DEBUG] [Thread-205272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:44:57.159 [DEBUG] [Thread-205272] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:44:57.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:44:57.160 [DEBUG] [Thread-205272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:44:57.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:44:57.214 [DEBUG] [Thread-205272] [transport.py] [_log()] userauth is OK
2026-02-15T13:44:57.215 [DEBUG] [Thread-205272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:44:57.215 [DEBUG] [Thread-205272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:44:57.215 [DEBUG] [Thread-205272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:44:57.215 [DEBUG] [Thread-205272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:44:57.234 [INFO] [Thread-205272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:44:57.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:44:57.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:44:58.059 [DEBUG] [Thread-205272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:44:58.060 [DEBUG] [Thread-205272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:44:58.108 [DEBUG] [Thread-205272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:44:58.108 [DEBUG] [Thread-205272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:44:58.116 [DEBUG] [Thread-205272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:44:58.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:44:58.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:44:58.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:44:58.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:44:58.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:44:58.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:44:58.149 [DEBUG] [Thread-205272] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:45:06.234 [DEBUG] [Thread-205274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:45:21.287 [DEBUG] [Thread-205275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:45:28.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:45:28.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:45:28.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:45:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 45, 21), 25.48, 17.92, 0.0, 28.9, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:45:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:45:21
2026-02-15T13:45:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:45:30.532 [DEBUG] [Thread-205276] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa40
2026-02-15T13:45:30.532 [DEBUG] [Thread-205276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:45:30.553 [DEBUG] [Thread-205276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:45:30.553 [INFO] [Thread-205276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:45:30.556 [DEBUG] [Thread-205276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] client lang: <none>
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] server lang: <none>
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] kex follows: False
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] Compression: none
2026-02-15T13:45:30.557 [DEBUG] [Thread-205276] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:45:30.578 [DEBUG] [Thread-205276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:45:30.579 [DEBUG] [Thread-205276] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:45:30.579 [DEBUG] [Thread-205276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:45:30.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:45:30.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:45:30.581 [DEBUG] [Thread-205276] [transport.py] [_log()] userauth is OK
2026-02-15T13:45:30.582 [DEBUG] [Thread-205276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:45:30.582 [DEBUG] [Thread-205276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:45:30.582 [DEBUG] [Thread-205276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:45:30.582 [DEBUG] [Thread-205276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:45:30.607 [INFO] [Thread-205276] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:45:30.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:45:31.230 [DEBUG] [Thread-205276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:45:31.230 [DEBUG] [Thread-205276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:45:31.231 [DEBUG] [Thread-205276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:45:31.271 [DEBUG] [Thread-205276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:45:31.271 [DEBUG] [Thread-205276] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:45:31.274 [DEBUG] [Thread-205276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:45:31.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:45:31.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:45:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:45:31.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:45:31.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:45:31.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:45:31.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:45:31.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:45:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:45:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.489680 -999.00  +23.60  22.52     22   +1.10 1 1 1 1 1   888    0 23.19 94.74 ----- 22.5 22.5 138.2 25.3 30.4 -29.8 29.8 -28.3 30.2 -27.4 31.2 -28.9
2026-02-15T13:45:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:45:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:45:31.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.489680
2026-02-15T13:45:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:45:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:45:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:45:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:45:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:45:31.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:45:21', tmtdew=25.48, humidity=17.92, cloud=0.0, wind=28.9, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:45:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:45:31.301 [DEBUG] [Thread-205276] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:45:31.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:45:31.397 [DEBUG] [Thread-205279] [transport.py] [_log()] starting thread (client mode): 0xa2db6ec0
2026-02-15T13:45:31.397 [DEBUG] [Thread-205279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:45:31.412 [DEBUG] [Thread-205279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:45:31.412 [INFO] [Thread-205279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:45:31.420 [DEBUG] [Thread-205279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] client lang: <none>
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] server lang: <none>
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] kex follows: False
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] Compression: none
2026-02-15T13:45:31.421 [DEBUG] [Thread-205279] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:45:31.478 [DEBUG] [Thread-205279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:45:31.479 [DEBUG] [Thread-205279] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:45:31.479 [DEBUG] [Thread-205279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:45:31.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:45:31.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:45:31.534 [DEBUG] [Thread-205279] [transport.py] [_log()] userauth is OK
2026-02-15T13:45:31.534 [DEBUG] [Thread-205279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:45:31.535 [DEBUG] [Thread-205279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:45:31.535 [DEBUG] [Thread-205279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:45:31.535 [DEBUG] [Thread-205279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:45:31.552 [INFO] [Thread-205279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:45:31.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:45:31.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:45:32.420 [DEBUG] [Thread-205279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:45:32.421 [DEBUG] [Thread-205279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:45:32.468 [DEBUG] [Thread-205279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:45:32.469 [DEBUG] [Thread-205279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:45:32.477 [DEBUG] [Thread-205279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:45:32.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:45:32.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:45:32.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:45:32.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:45:32.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:45:32.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:45:32.517 [DEBUG] [Thread-205279] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:45:35.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:45:35.547 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:45:36.323 [DEBUG] [Thread-205281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:45:50.557 [DEBUG] [Thread-205282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:45:51.385 [DEBUG] [Thread-205283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:46:02.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:46:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:46:05.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 45, 21), 25.48, 17.92, 0.0, 28.9, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:46:05.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:45:21
2026-02-15T13:46:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:46:05.652 [DEBUG] [Thread-205284] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fa0
2026-02-15T13:46:05.652 [DEBUG] [Thread-205284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:46:05.671 [DEBUG] [Thread-205284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:46:05.671 [INFO] [Thread-205284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:46:05.674 [DEBUG] [Thread-205284] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] client lang: <none>
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] server lang: <none>
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] kex follows: False
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:46:05.675 [DEBUG] [Thread-205284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:46:05.676 [DEBUG] [Thread-205284] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:46:05.676 [DEBUG] [Thread-205284] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:46:05.676 [DEBUG] [Thread-205284] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:46:05.676 [DEBUG] [Thread-205284] [transport.py] [_log()] Compression: none
2026-02-15T13:46:05.676 [DEBUG] [Thread-205284] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:46:05.695 [DEBUG] [Thread-205284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:46:05.696 [DEBUG] [Thread-205284] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:46:05.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:46:05.697 [DEBUG] [Thread-205284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:46:05.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:46:05.698 [DEBUG] [Thread-205284] [transport.py] [_log()] userauth is OK
2026-02-15T13:46:05.699 [DEBUG] [Thread-205284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:46:05.699 [DEBUG] [Thread-205284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:46:05.699 [DEBUG] [Thread-205284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:46:05.699 [DEBUG] [Thread-205284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:46:05.721 [INFO] [Thread-205284] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:46:05.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:46:06.339 [DEBUG] [Thread-205284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:46:06.339 [DEBUG] [Thread-205284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:46:06.339 [DEBUG] [Thread-205284] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:46:06.380 [DEBUG] [Thread-205284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:46:06.380 [DEBUG] [Thread-205284] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:46:06.382 [DEBUG] [Thread-205284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:46:06.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:46:06.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:46:06.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:46:06.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:46:06.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:46:06.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:46:06.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:46:06.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.490028 -999.00  +22.90  16.14     23   +1.00 1 1 1 1 1   888    0 23.53 101.39 ----- 16.1 16.1 154.8 27.3 30.3 -30.3 29.6 -30.0 30.1 -28.7 31.1 -29.1
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.490028
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:46:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:45:21', tmtdew=25.48, humidity=17.92, cloud=0.0, wind=28.9, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:45:38.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:46:06.401 [DEBUG] [Thread-205284] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:46:06.419 [DEBUG] [Thread-205287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:06.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:46:06.484 [DEBUG] [Thread-205288] [transport.py] [_log()] starting thread (client mode): 0xa57c1e10
2026-02-15T13:46:06.484 [DEBUG] [Thread-205288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:46:06.499 [DEBUG] [Thread-205288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:46:06.499 [INFO] [Thread-205288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] client lang: <none>
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] server lang: <none>
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] kex follows: False
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:46:06.507 [DEBUG] [Thread-205288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:46:06.508 [DEBUG] [Thread-205288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:46:06.508 [DEBUG] [Thread-205288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:46:06.508 [DEBUG] [Thread-205288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:46:06.508 [DEBUG] [Thread-205288] [transport.py] [_log()] Compression: none
2026-02-15T13:46:06.508 [DEBUG] [Thread-205288] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:46:06.565 [DEBUG] [Thread-205288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:46:06.566 [DEBUG] [Thread-205288] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:46:06.566 [DEBUG] [Thread-205288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:46:06.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:46:06.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:46:06.622 [DEBUG] [Thread-205288] [transport.py] [_log()] userauth is OK
2026-02-15T13:46:06.622 [DEBUG] [Thread-205288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:46:06.622 [DEBUG] [Thread-205288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:46:06.622 [DEBUG] [Thread-205288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:46:06.622 [DEBUG] [Thread-205288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:46:06.641 [INFO] [Thread-205288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:46:06.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:46:06.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:46:07.551 [DEBUG] [Thread-205288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:46:07.551 [DEBUG] [Thread-205288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:46:07.599 [DEBUG] [Thread-205288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:46:07.600 [DEBUG] [Thread-205288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:46:07.609 [DEBUG] [Thread-205288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:46:07.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:46:07.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:46:07.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:46:07.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:46:07.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:46:07.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:46:07.642 [DEBUG] [Thread-205288] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:46:21.459 [DEBUG] [Thread-205290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:35.689 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:35.690 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:36.495 [DEBUG] [Thread-205291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:37.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:46:37.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:46:37.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:46:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 45, 56), 25.72, 17.83, 0.0, 26.5, 22.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:46:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:45:56
2026-02-15T13:46:40.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:46:40.250 [DEBUG] [Thread-205292] [transport.py] [_log()] starting thread (client mode): 0xa2db70d0
2026-02-15T13:46:40.251 [DEBUG] [Thread-205292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:46:40.269 [DEBUG] [Thread-205292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:46:40.270 [INFO] [Thread-205292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:46:40.273 [DEBUG] [Thread-205292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] client lang: <none>
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] server lang: <none>
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] kex follows: False
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:46:40.274 [DEBUG] [Thread-205292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:46:40.275 [DEBUG] [Thread-205292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:46:40.275 [DEBUG] [Thread-205292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:46:40.275 [DEBUG] [Thread-205292] [transport.py] [_log()] Compression: none
2026-02-15T13:46:40.275 [DEBUG] [Thread-205292] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:46:40.293 [DEBUG] [Thread-205292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:46:40.293 [DEBUG] [Thread-205292] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:46:40.294 [DEBUG] [Thread-205292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:46:40.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:46:40.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:46:40.297 [DEBUG] [Thread-205292] [transport.py] [_log()] userauth is OK
2026-02-15T13:46:40.297 [DEBUG] [Thread-205292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:46:40.297 [DEBUG] [Thread-205292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:46:40.297 [DEBUG] [Thread-205292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:46:40.297 [DEBUG] [Thread-205292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:46:40.316 [INFO] [Thread-205292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:46:40.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:46:40.938 [DEBUG] [Thread-205292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:46:40.938 [DEBUG] [Thread-205292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:46:40.939 [DEBUG] [Thread-205292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:46:40.980 [DEBUG] [Thread-205292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:46:40.980 [DEBUG] [Thread-205292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:46:40.983 [DEBUG] [Thread-205292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:46:40.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:46:40.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:46:40.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:46:40.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:46:41.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:46:41.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:46:41.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:46:41.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:46:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:46:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.490375 -999.00  +22.50  28.36     24   +1.20 1 1 1 1 1   888    0 23.89 106.04 ----- 28.4 28.4 142.2 36.2 30.2 -28.9 29.5 -29.8 30.2 -27.7 31.1 -29.2
2026-02-15T13:46:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:46:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:46:41.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.490375
2026-02-15T13:46:41.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:46:41.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:46:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:46:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:46:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:46:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:45:56', tmtdew=25.72, humidity=17.83, cloud=0.0, wind=26.5, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:46:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:46:41.010 [DEBUG] [Thread-205292] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:46:41.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:46:41.117 [DEBUG] [Thread-205295] [transport.py] [_log()] starting thread (client mode): 0xa2d682e0
2026-02-15T13:46:41.117 [DEBUG] [Thread-205295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:46:41.132 [DEBUG] [Thread-205295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:46:41.132 [INFO] [Thread-205295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] client lang: <none>
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] server lang: <none>
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] kex follows: False
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:46:41.140 [DEBUG] [Thread-205295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:46:41.141 [DEBUG] [Thread-205295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:46:41.141 [DEBUG] [Thread-205295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:46:41.141 [DEBUG] [Thread-205295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:46:41.141 [DEBUG] [Thread-205295] [transport.py] [_log()] Compression: none
2026-02-15T13:46:41.141 [DEBUG] [Thread-205295] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:46:41.198 [DEBUG] [Thread-205295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:46:41.198 [DEBUG] [Thread-205295] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:46:41.199 [DEBUG] [Thread-205295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:46:41.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:46:41.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:46:41.254 [DEBUG] [Thread-205295] [transport.py] [_log()] userauth is OK
2026-02-15T13:46:41.254 [DEBUG] [Thread-205295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:46:41.255 [DEBUG] [Thread-205295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:46:41.255 [DEBUG] [Thread-205295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:46:41.255 [DEBUG] [Thread-205295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:46:41.274 [INFO] [Thread-205295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:46:41.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:46:41.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:46:42.092 [DEBUG] [Thread-205295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:46:42.092 [DEBUG] [Thread-205295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:46:42.140 [DEBUG] [Thread-205295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:46:42.141 [DEBUG] [Thread-205295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:46:42.150 [DEBUG] [Thread-205295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:46:42.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:46:42.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:46:42.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:46:42.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:46:42.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:46:42.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:46:42.187 [DEBUG] [Thread-205295] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:46:50.600 [DEBUG] [Thread-205297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:46:51.528 [DEBUG] [Thread-205298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:06.581 [DEBUG] [Thread-205299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:12.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:47:12.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:47:12.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:47:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 46, 33), 28.53, 14.77, 0.0, 31.4, 24.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:47:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:46:33
2026-02-15T13:47:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:47:14.858 [DEBUG] [Thread-205300] [transport.py] [_log()] starting thread (client mode): 0xa2d1b1f0
2026-02-15T13:47:14.858 [DEBUG] [Thread-205300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:47:14.879 [DEBUG] [Thread-205300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:47:14.879 [INFO] [Thread-205300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] client lang: <none>
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] server lang: <none>
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] kex follows: False
2026-02-15T13:47:14.883 [DEBUG] [Thread-205300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:47:14.884 [DEBUG] [Thread-205300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:47:14.884 [DEBUG] [Thread-205300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:47:14.884 [DEBUG] [Thread-205300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:47:14.884 [DEBUG] [Thread-205300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:47:14.884 [DEBUG] [Thread-205300] [transport.py] [_log()] Compression: none
2026-02-15T13:47:14.884 [DEBUG] [Thread-205300] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:47:14.903 [DEBUG] [Thread-205300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:47:14.904 [DEBUG] [Thread-205300] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:47:14.904 [DEBUG] [Thread-205300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:47:14.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:47:14.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:47:14.907 [DEBUG] [Thread-205300] [transport.py] [_log()] userauth is OK
2026-02-15T13:47:14.907 [DEBUG] [Thread-205300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:47:14.907 [DEBUG] [Thread-205300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:47:14.907 [DEBUG] [Thread-205300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:47:14.907 [DEBUG] [Thread-205300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:47:14.938 [INFO] [Thread-205300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:47:14.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:47:15.732 [DEBUG] [Thread-205300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:47:15.732 [DEBUG] [Thread-205300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:47:15.733 [DEBUG] [Thread-205300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:47:15.773 [DEBUG] [Thread-205300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:47:15.774 [DEBUG] [Thread-205300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:47:15.777 [DEBUG] [Thread-205300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:47:15.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:47:15.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:47:15.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:47:15.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:47:15.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:47:15.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:47:15.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:47:15.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:47:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:47:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.490722 -999.00  +22.90  20.75     23   +1.00 1 1 1 1 1   888    0 23.91 100.93 ----- 20.8 20.8 113.4 28.0 30.2 -29.5 29.5 -27.5 30.0 -26.9 31.0 -29.6
2026-02-15T13:47:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:47:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:47:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.490722
2026-02-15T13:47:15.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:47:15.797 [DEBUG] [Thread-205300] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:47:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:47:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:47:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:47:15.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:47:15.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:46:33', tmtdew=28.53, humidity=14.77, cloud=0.0, wind=31.4, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:46:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:47:15.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:47:15.896 [DEBUG] [Thread-205303] [transport.py] [_log()] starting thread (client mode): 0xa2d182b0
2026-02-15T13:47:15.896 [DEBUG] [Thread-205303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:47:15.911 [DEBUG] [Thread-205303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:47:15.912 [INFO] [Thread-205303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] client lang: <none>
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] server lang: <none>
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] kex follows: False
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:47:15.920 [DEBUG] [Thread-205303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:47:15.921 [DEBUG] [Thread-205303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:47:15.921 [DEBUG] [Thread-205303] [transport.py] [_log()] Compression: none
2026-02-15T13:47:15.921 [DEBUG] [Thread-205303] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:47:15.978 [DEBUG] [Thread-205303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:47:15.979 [DEBUG] [Thread-205303] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:47:15.980 [DEBUG] [Thread-205303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:47:15.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:47:15.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:47:16.034 [DEBUG] [Thread-205303] [transport.py] [_log()] userauth is OK
2026-02-15T13:47:16.034 [DEBUG] [Thread-205303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:47:16.034 [DEBUG] [Thread-205303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:47:16.035 [DEBUG] [Thread-205303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:47:16.035 [DEBUG] [Thread-205303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:47:16.060 [INFO] [Thread-205303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:47:16.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:47:16.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:47:16.886 [DEBUG] [Thread-205303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:47:16.886 [DEBUG] [Thread-205303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:47:16.934 [DEBUG] [Thread-205303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:47:16.935 [DEBUG] [Thread-205303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:47:16.944 [DEBUG] [Thread-205303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:47:16.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:47:16.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:47:16.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:47:16.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:47:16.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:47:16.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:47:16.980 [DEBUG] [Thread-205303] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:47:21.618 [DEBUG] [Thread-205305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:35.845 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:35.846 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:36.668 [DEBUG] [Thread-205306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:47:47.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:47:47.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:47:49.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 47, 8), 26.78, 16.92, 0.0, 17.27, 23.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:47:49.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:47:08
2026-02-15T13:47:49.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:47:49.582 [DEBUG] [Thread-205307] [transport.py] [_log()] starting thread (client mode): 0xa2d00bb0
2026-02-15T13:47:49.583 [DEBUG] [Thread-205307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:47:49.603 [DEBUG] [Thread-205307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:47:49.603 [INFO] [Thread-205307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:47:49.606 [DEBUG] [Thread-205307] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] client lang: <none>
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] server lang: <none>
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] kex follows: False
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:47:49.607 [DEBUG] [Thread-205307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:47:49.608 [DEBUG] [Thread-205307] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:47:49.608 [DEBUG] [Thread-205307] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:47:49.608 [DEBUG] [Thread-205307] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:47:49.608 [DEBUG] [Thread-205307] [transport.py] [_log()] Compression: none
2026-02-15T13:47:49.608 [DEBUG] [Thread-205307] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:47:49.626 [DEBUG] [Thread-205307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:47:49.627 [DEBUG] [Thread-205307] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:47:49.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:47:49.628 [DEBUG] [Thread-205307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:47:49.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:47:49.630 [DEBUG] [Thread-205307] [transport.py] [_log()] userauth is OK
2026-02-15T13:47:49.631 [DEBUG] [Thread-205307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:47:49.631 [DEBUG] [Thread-205307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:47:49.631 [DEBUG] [Thread-205307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:47:49.631 [DEBUG] [Thread-205307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:47:49.655 [INFO] [Thread-205307] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:47:49.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:47:50.298 [DEBUG] [Thread-205307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:47:50.298 [DEBUG] [Thread-205307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:47:50.299 [DEBUG] [Thread-205307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:47:50.339 [DEBUG] [Thread-205307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:47:50.340 [DEBUG] [Thread-205307] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:47:50.343 [DEBUG] [Thread-205307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:47:50.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:47:50.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:47:50.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:47:50.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:47:50.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:47:50.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:47:50.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:47:50.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:47:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:47:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.491069 -999.00  +23.80  13.49     21   +0.70 1 1 1 1 1   888    0 24.59 107.75 ----- 13.5 13.5 124.4 24.2 30.3 -28.3 29.7 -28.0 30.2 -26.4 31.1 -28.6
2026-02-15T13:47:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:47:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:47:50.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.491069
2026-02-15T13:47:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:47:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:47:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:47:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:47:50.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:47:50.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:47:08', tmtdew=26.78, humidity=16.92, cloud=0.0, wind=17.27, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:47:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:47:50.369 [DEBUG] [Thread-205307] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:47:50.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:47:50.466 [DEBUG] [Thread-205310] [transport.py] [_log()] starting thread (client mode): 0xa2d02ef0
2026-02-15T13:47:50.466 [DEBUG] [Thread-205310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:47:50.482 [DEBUG] [Thread-205310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:47:50.482 [INFO] [Thread-205310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:47:50.491 [DEBUG] [Thread-205310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:47:50.491 [DEBUG] [Thread-205310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:47:50.491 [DEBUG] [Thread-205310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:47:50.491 [DEBUG] [Thread-205310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] client lang: <none>
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] server lang: <none>
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] kex follows: False
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] Compression: none
2026-02-15T13:47:50.492 [DEBUG] [Thread-205310] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:47:50.552 [DEBUG] [Thread-205310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:47:50.552 [DEBUG] [Thread-205310] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:47:50.553 [DEBUG] [Thread-205310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:47:50.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:47:50.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:47:50.610 [DEBUG] [Thread-205310] [transport.py] [_log()] userauth is OK
2026-02-15T13:47:50.610 [DEBUG] [Thread-205310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:47:50.610 [DEBUG] [Thread-205310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:47:50.611 [DEBUG] [Thread-205310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:47:50.611 [DEBUG] [Thread-205310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:47:50.625 [INFO] [Thread-205310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:47:50.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:47:50.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:47:50.635 [DEBUG] [Thread-205312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:47:51.483 [DEBUG] [Thread-205310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:47:51.484 [DEBUG] [Thread-205310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:47:51.531 [DEBUG] [Thread-205310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:47:51.532 [DEBUG] [Thread-205310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:47:51.541 [DEBUG] [Thread-205310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:47:51.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:47:51.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:47:51.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:47:51.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:47:51.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:47:51.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:47:51.579 [DEBUG] [Thread-205310] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:47:51.705 [DEBUG] [Thread-205313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:06.748 [DEBUG] [Thread-205314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:21.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:48:21.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:48:21.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:48:21.782 [DEBUG] [Thread-205315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:23.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 47, 44), 26.58, 16.72, 0.0, 20.89, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:48:23.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:47:44
2026-02-15T13:48:23.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:48:23.981 [DEBUG] [Thread-205316] [transport.py] [_log()] starting thread (client mode): 0xa2d68490
2026-02-15T13:48:23.982 [DEBUG] [Thread-205316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:48:24.002 [DEBUG] [Thread-205316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:48:24.002 [INFO] [Thread-205316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:48:24.005 [DEBUG] [Thread-205316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:48:24.005 [DEBUG] [Thread-205316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:48:24.005 [DEBUG] [Thread-205316] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:48:24.005 [DEBUG] [Thread-205316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:48:24.005 [DEBUG] [Thread-205316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:48:24.005 [DEBUG] [Thread-205316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] client lang: <none>
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] server lang: <none>
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] kex follows: False
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] Compression: none
2026-02-15T13:48:24.006 [DEBUG] [Thread-205316] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:48:24.023 [DEBUG] [Thread-205316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:48:24.023 [DEBUG] [Thread-205316] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:48:24.024 [DEBUG] [Thread-205316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:48:24.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:48:24.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:48:24.026 [DEBUG] [Thread-205316] [transport.py] [_log()] userauth is OK
2026-02-15T13:48:24.026 [DEBUG] [Thread-205316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:48:24.026 [DEBUG] [Thread-205316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:48:24.026 [DEBUG] [Thread-205316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:48:24.026 [DEBUG] [Thread-205316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:48:24.049 [INFO] [Thread-205316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:48:24.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:48:24.691 [DEBUG] [Thread-205316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:48:24.691 [DEBUG] [Thread-205316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:48:24.691 [DEBUG] [Thread-205316] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:48:24.732 [DEBUG] [Thread-205316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:48:24.732 [DEBUG] [Thread-205316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:48:24.735 [DEBUG] [Thread-205316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:48:24.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:48:24.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:48:24.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:48:24.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:48:24.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:48:24.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:48:24.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:48:24.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:48:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:48:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.491416 -999.00  +24.20  14.30     22   +1.30 1 1 1 1 1   888    0 24.21 122.10 ----- 14.3 14.3 127.6 24.8 30.4 -28.0 29.8 -27.5 30.4 -26.6 31.3 -28.1
2026-02-15T13:48:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:48:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:48:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.491416
2026-02-15T13:48:24.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:48:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:48:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:48:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:48:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:48:24.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:47:44', tmtdew=26.58, humidity=16.72, cloud=0.0, wind=20.89, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:47:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:48:24.760 [DEBUG] [Thread-205316] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:48:24.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:48:35.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:35.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:36.821 [DEBUG] [Thread-205319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:50.668 [DEBUG] [Thread-205320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:48:51.871 [DEBUG] [Thread-205321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:06.906 [DEBUG] [Thread-205322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:21.943 [DEBUG] [Thread-205323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:36.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:36.135 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:36.979 [DEBUG] [Thread-205324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:50.702 [DEBUG] [Thread-205325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:49:52.017 [DEBUG] [Thread-205326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:07.057 [DEBUG] [Thread-205327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:22.092 [DEBUG] [Thread-205328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:36.278 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:36.279 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:36.344 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T13:50:37.128 [DEBUG] [Thread-205329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:50.758 [DEBUG] [Thread-205330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:50:52.166 [DEBUG] [Thread-205331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:06.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:51:06.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:51:06.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:51:07.204 [DEBUG] [Thread-205332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 50, 39), 25.82, 17.92, 0.0, 27.8, 23.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:51:08.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:50:39
2026-02-15T13:51:08.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:51:09.045 [DEBUG] [Thread-205333] [transport.py] [_log()] starting thread (client mode): 0xa2d68610
2026-02-15T13:51:09.045 [DEBUG] [Thread-205333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:51:09.055 [DEBUG] [Thread-205333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:51:09.055 [INFO] [Thread-205333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] client lang: <none>
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] server lang: <none>
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] kex follows: False
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] Compression: none
2026-02-15T13:51:09.057 [DEBUG] [Thread-205333] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:51:09.068 [DEBUG] [Thread-205333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:51:09.068 [DEBUG] [Thread-205333] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:51:09.068 [DEBUG] [Thread-205333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:51:09.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:51:09.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:51:09.070 [DEBUG] [Thread-205333] [transport.py] [_log()] userauth is OK
2026-02-15T13:51:09.070 [DEBUG] [Thread-205333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:51:09.070 [DEBUG] [Thread-205333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:51:09.070 [DEBUG] [Thread-205333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:51:09.070 [DEBUG] [Thread-205333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:51:09.088 [INFO] [Thread-205333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:51:09.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:51:09.663 [DEBUG] [Thread-205333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:51:09.663 [DEBUG] [Thread-205333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:51:09.664 [DEBUG] [Thread-205333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:51:09.704 [DEBUG] [Thread-205333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:51:09.704 [DEBUG] [Thread-205333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:51:09.707 [DEBUG] [Thread-205333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:51:09.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:51:09.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:51:09.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:51:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:51:09.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:51:09.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:51:09.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:51:09.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:51:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:51:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.493500 -999.00  +23.00  17.17     24   +1.70 1 1 1 1 1   888    0 25.05 135.97 ----- 17.2 17.2 150.6 26.9 30.4 -29.1 29.8 -28.7 30.4 -29.0 31.4 -30.3
2026-02-15T13:51:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:51:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:51:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.493500
2026-02-15T13:51:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:51:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:51:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:51:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:51:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:51:09.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:50:39', tmtdew=25.82, humidity=17.92, cloud=0.0, wind=27.8, temperature=23.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:50:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:51:09.742 [DEBUG] [Thread-205333] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:51:09.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:51:09.841 [DEBUG] [Thread-205336] [transport.py] [_log()] starting thread (client mode): 0xa2d00a30
2026-02-15T13:51:09.841 [DEBUG] [Thread-205336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:51:09.857 [DEBUG] [Thread-205336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:51:09.857 [INFO] [Thread-205336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:51:09.865 [DEBUG] [Thread-205336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:51:09.865 [DEBUG] [Thread-205336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:51:09.865 [DEBUG] [Thread-205336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:51:09.865 [DEBUG] [Thread-205336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] client lang: <none>
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] server lang: <none>
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] kex follows: False
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] Compression: none
2026-02-15T13:51:09.866 [DEBUG] [Thread-205336] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:51:09.922 [DEBUG] [Thread-205336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:51:09.923 [DEBUG] [Thread-205336] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:51:09.923 [DEBUG] [Thread-205336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:51:09.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:51:09.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:51:09.982 [DEBUG] [Thread-205336] [transport.py] [_log()] userauth is OK
2026-02-15T13:51:09.983 [DEBUG] [Thread-205336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:51:09.983 [DEBUG] [Thread-205336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:51:09.983 [DEBUG] [Thread-205336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:51:09.983 [DEBUG] [Thread-205336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:51:10.002 [INFO] [Thread-205336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:51:10.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:51:10.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:51:10.821 [DEBUG] [Thread-205336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:51:10.822 [DEBUG] [Thread-205336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:51:10.876 [DEBUG] [Thread-205336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:51:10.876 [DEBUG] [Thread-205336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:51:10.891 [DEBUG] [Thread-205336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:51:10.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:51:10.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:51:10.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:51:10.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:51:10.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:51:10.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:51:10.947 [DEBUG] [Thread-205336] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:51:22.243 [DEBUG] [Thread-205338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:36.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:36.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:37.296 [DEBUG] [Thread-205339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:40.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:51:40.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:51:40.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:51:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 51, 15), 24.84, 18.79, 0.0, 23.91, 22.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:51:43.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:51:15
2026-02-15T13:51:43.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:51:43.633 [DEBUG] [Thread-205340] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-15T13:51:43.633 [DEBUG] [Thread-205340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:51:43.648 [DEBUG] [Thread-205340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:51:43.648 [INFO] [Thread-205340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:51:43.650 [DEBUG] [Thread-205340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:51:43.650 [DEBUG] [Thread-205340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:51:43.650 [DEBUG] [Thread-205340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:51:43.650 [DEBUG] [Thread-205340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:43.650 [DEBUG] [Thread-205340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] client lang: <none>
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] server lang: <none>
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] kex follows: False
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] Compression: none
2026-02-15T13:51:43.651 [DEBUG] [Thread-205340] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:51:43.662 [DEBUG] [Thread-205340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:51:43.663 [DEBUG] [Thread-205340] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:51:43.663 [DEBUG] [Thread-205340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:51:43.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:51:43.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:51:43.664 [DEBUG] [Thread-205340] [transport.py] [_log()] userauth is OK
2026-02-15T13:51:43.664 [DEBUG] [Thread-205340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:51:43.664 [DEBUG] [Thread-205340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:51:43.664 [DEBUG] [Thread-205340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:51:43.664 [DEBUG] [Thread-205340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:51:43.677 [INFO] [Thread-205340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:51:43.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:51:44.379 [DEBUG] [Thread-205340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:51:44.379 [DEBUG] [Thread-205340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:51:44.379 [DEBUG] [Thread-205340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:51:44.420 [DEBUG] [Thread-205340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:51:44.420 [DEBUG] [Thread-205340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:51:44.423 [DEBUG] [Thread-205340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:51:44.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:51:44.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:51:44.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:51:44.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:51:44.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:51:44.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:51:44.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.493847 -999.00  +22.70  29.00     24   +1.40 1 1 1 1 1   888    0 25.30 131.26 ----- 29.0 29.0 142.6 37.0 30.4 -30.7 29.6 -29.2 30.4 -27.8 31.2 -29.8
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.493847
2026-02-15T13:51:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:51:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:51:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:51:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:51:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:51:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:51:15', tmtdew=24.84, humidity=18.79, cloud=0.0, wind=23.91, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:51:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:51:44.442 [DEBUG] [Thread-205340] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:51:44.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:51:44.525 [DEBUG] [Thread-205343] [transport.py] [_log()] starting thread (client mode): 0xa2d685b0
2026-02-15T13:51:44.526 [DEBUG] [Thread-205343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:51:44.540 [DEBUG] [Thread-205343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:51:44.541 [INFO] [Thread-205343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:51:44.548 [DEBUG] [Thread-205343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] client lang: <none>
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] server lang: <none>
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] kex follows: False
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] Compression: none
2026-02-15T13:51:44.549 [DEBUG] [Thread-205343] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:51:44.606 [DEBUG] [Thread-205343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:51:44.607 [DEBUG] [Thread-205343] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:51:44.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:51:44.608 [DEBUG] [Thread-205343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:51:44.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:51:44.662 [DEBUG] [Thread-205343] [transport.py] [_log()] userauth is OK
2026-02-15T13:51:44.662 [DEBUG] [Thread-205343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:51:44.662 [DEBUG] [Thread-205343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:51:44.662 [DEBUG] [Thread-205343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:51:44.662 [DEBUG] [Thread-205343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:51:44.685 [INFO] [Thread-205343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:51:44.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:51:44.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:51:45.499 [DEBUG] [Thread-205343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:51:45.499 [DEBUG] [Thread-205343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:51:45.548 [DEBUG] [Thread-205343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:51:45.548 [DEBUG] [Thread-205343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:51:45.558 [DEBUG] [Thread-205343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:51:45.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:51:45.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:51:45.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:51:45.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:51:45.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:51:45.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:51:45.595 [DEBUG] [Thread-205343] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:51:50.801 [DEBUG] [Thread-205345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:51:52.333 [DEBUG] [Thread-205346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:07.387 [DEBUG] [Thread-205347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:52:15.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:52:15.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:52:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 51, 50), 25.28, 18.64, 0.0, 23.98, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:52:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:51:50
2026-02-15T13:52:17.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:52:18.104 [DEBUG] [Thread-205348] [transport.py] [_log()] starting thread (client mode): 0xa81d6b30
2026-02-15T13:52:18.104 [DEBUG] [Thread-205348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:52:18.124 [DEBUG] [Thread-205348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:52:18.124 [INFO] [Thread-205348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] client lang: <none>
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] server lang: <none>
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] kex follows: False
2026-02-15T13:52:18.127 [DEBUG] [Thread-205348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:52:18.128 [DEBUG] [Thread-205348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:52:18.128 [DEBUG] [Thread-205348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:52:18.128 [DEBUG] [Thread-205348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:52:18.128 [DEBUG] [Thread-205348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:52:18.128 [DEBUG] [Thread-205348] [transport.py] [_log()] Compression: none
2026-02-15T13:52:18.128 [DEBUG] [Thread-205348] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:52:18.146 [DEBUG] [Thread-205348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:52:18.147 [DEBUG] [Thread-205348] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:52:18.148 [DEBUG] [Thread-205348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:52:18.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:52:18.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:52:18.150 [DEBUG] [Thread-205348] [transport.py] [_log()] userauth is OK
2026-02-15T13:52:18.150 [DEBUG] [Thread-205348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:52:18.150 [DEBUG] [Thread-205348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:52:18.150 [DEBUG] [Thread-205348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:52:18.150 [DEBUG] [Thread-205348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:52:18.166 [INFO] [Thread-205348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:52:18.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:52:18.784 [DEBUG] [Thread-205348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:52:18.785 [DEBUG] [Thread-205348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:52:18.785 [DEBUG] [Thread-205348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:52:18.825 [DEBUG] [Thread-205348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:52:18.826 [DEBUG] [Thread-205348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:52:18.829 [DEBUG] [Thread-205348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:52:18.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:52:18.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:52:18.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:52:18.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:52:18.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:52:18.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:52:18.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:52:18.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:52:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:52:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.494194 -999.00  +22.40  19.05     24   +1.20 1 1 1 1 1   888    0 24.77 132.45 ----- 19.1 19.1 153.2 34.9 30.2 -30.1 29.6 -29.8 30.2 -29.0 31.1 -30.2
2026-02-15T13:52:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:52:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:52:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.494194
2026-02-15T13:52:18.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:52:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:52:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:52:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:52:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:52:18.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:51:50', tmtdew=25.28, humidity=18.64, cloud=0.0, wind=23.98, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:51:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:52:18.854 [DEBUG] [Thread-205348] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:52:18.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:52:18.940 [DEBUG] [Thread-205351] [transport.py] [_log()] starting thread (client mode): 0xa81d5b10
2026-02-15T13:52:18.940 [DEBUG] [Thread-205351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:52:18.955 [DEBUG] [Thread-205351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:52:18.955 [INFO] [Thread-205351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:52:18.962 [DEBUG] [Thread-205351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:52:18.963 [DEBUG] [Thread-205351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:52:18.963 [DEBUG] [Thread-205351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:52:18.963 [DEBUG] [Thread-205351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:18.963 [DEBUG] [Thread-205351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:18.963 [DEBUG] [Thread-205351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:18.963 [DEBUG] [Thread-205351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] client lang: <none>
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] server lang: <none>
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] kex follows: False
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] Compression: none
2026-02-15T13:52:18.964 [DEBUG] [Thread-205351] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:52:19.022 [DEBUG] [Thread-205351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:52:19.022 [DEBUG] [Thread-205351] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:52:19.023 [DEBUG] [Thread-205351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:52:19.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:52:19.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:52:19.078 [DEBUG] [Thread-205351] [transport.py] [_log()] userauth is OK
2026-02-15T13:52:19.078 [DEBUG] [Thread-205351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:52:19.078 [DEBUG] [Thread-205351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:52:19.078 [DEBUG] [Thread-205351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:52:19.079 [DEBUG] [Thread-205351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:52:19.098 [INFO] [Thread-205351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:52:19.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:52:19.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:52:19.896 [DEBUG] [Thread-205351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:52:19.897 [DEBUG] [Thread-205351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:52:19.945 [DEBUG] [Thread-205351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:52:19.945 [DEBUG] [Thread-205351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:52:19.954 [DEBUG] [Thread-205351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:52:19.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:52:19.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:52:19.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:52:19.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:52:19.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:52:19.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:52:19.991 [DEBUG] [Thread-205351] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:52:22.426 [DEBUG] [Thread-205353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:36.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:36.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:37.474 [DEBUG] [Thread-205354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:50.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:52:50.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:52: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
2026-02-15T13:52:50.835 [DEBUG] [Thread-205355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:51.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 52, 25), 25.05, 18.89, 0.0, 23.22, 22.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:52:51.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:52:25
2026-02-15T13:52:52.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:52:52.417 [DEBUG] [Thread-205356] [transport.py] [_log()] starting thread (client mode): 0xa2d01d80
2026-02-15T13:52:52.417 [DEBUG] [Thread-205356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:52:52.436 [DEBUG] [Thread-205356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:52:52.437 [INFO] [Thread-205356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] client lang: <none>
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] server lang: <none>
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] kex follows: False
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] Compression: none
2026-02-15T13:52:52.440 [DEBUG] [Thread-205356] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:52:52.456 [DEBUG] [Thread-205356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:52:52.456 [DEBUG] [Thread-205356] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:52:52.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:52:52.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:52:52.456 [DEBUG] [Thread-205356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:52:52.457 [DEBUG] [Thread-205356] [transport.py] [_log()] userauth is OK
2026-02-15T13:52:52.457 [DEBUG] [Thread-205356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:52:52.457 [DEBUG] [Thread-205356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:52:52.457 [DEBUG] [Thread-205356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:52:52.457 [DEBUG] [Thread-205356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:52:52.468 [INFO] [Thread-205356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:52:52.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:52:52.511 [DEBUG] [Thread-205358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:52:53.099 [DEBUG] [Thread-205356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:52:53.099 [DEBUG] [Thread-205356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:52:53.100 [DEBUG] [Thread-205356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:52:53.140 [DEBUG] [Thread-205356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:52:53.140 [DEBUG] [Thread-205356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:52:53.143 [DEBUG] [Thread-205356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:52:53.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:52:53.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:52:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:52:53.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:52:53.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:52:53.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:52:53.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:52:53.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.494541 -999.00  +22.40  17.50     25   +1.40 1 1 1 1 1   888    0 25.03 128.19 ----- 17.5 17.5 151.3 20.9 30.1 -29.2 29.6 -28.4 30.3 -27.1 31.1 -29.6
2026-02-15T13:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:52:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.494541
2026-02-15T13:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:52:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:52:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:52:53.168 [DEBUG] [Thread-205356] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:52:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:52:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:52:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:52:25', tmtdew=25.05, humidity=18.89, cloud=0.0, wind=23.22, temperature=22.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:52:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:52:53.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:52:53.257 [DEBUG] [Thread-205360] [transport.py] [_log()] starting thread (client mode): 0xa2d1b640
2026-02-15T13:52:53.257 [DEBUG] [Thread-205360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:52:53.271 [DEBUG] [Thread-205360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:52:53.272 [INFO] [Thread-205360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:52:53.282 [DEBUG] [Thread-205360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:52:53.282 [DEBUG] [Thread-205360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] client lang: <none>
2026-02-15T13:52:53.283 [DEBUG] [Thread-205360] [transport.py] [_log()] server lang: <none>
2026-02-15T13:52:53.284 [DEBUG] [Thread-205360] [transport.py] [_log()] kex follows: False
2026-02-15T13:52:53.284 [DEBUG] [Thread-205360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:52:53.284 [DEBUG] [Thread-205360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:52:53.284 [DEBUG] [Thread-205360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:52:53.284 [DEBUG] [Thread-205360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:52:53.285 [DEBUG] [Thread-205360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:52:53.285 [DEBUG] [Thread-205360] [transport.py] [_log()] Compression: none
2026-02-15T13:52:53.285 [DEBUG] [Thread-205360] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:52:53.338 [DEBUG] [Thread-205360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:52:53.338 [DEBUG] [Thread-205360] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:52:53.348 [DEBUG] [Thread-205360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:52:53.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:52:53.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:52:53.394 [DEBUG] [Thread-205360] [transport.py] [_log()] userauth is OK
2026-02-15T13:52:53.394 [DEBUG] [Thread-205360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:52:53.395 [DEBUG] [Thread-205360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:52:53.395 [DEBUG] [Thread-205360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:52:53.395 [DEBUG] [Thread-205360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:52:53.414 [INFO] [Thread-205360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:52:53.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:52:53.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:52:54.216 [DEBUG] [Thread-205360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:52:54.216 [DEBUG] [Thread-205360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:52:54.264 [DEBUG] [Thread-205360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:52:54.264 [DEBUG] [Thread-205360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:52:54.273 [DEBUG] [Thread-205360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:52:54.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:52:54.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:52:54.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:52:54.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:52:54.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:52:54.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:52:54.311 [DEBUG] [Thread-205360] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:53:07.549 [DEBUG] [Thread-205362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:22.602 [DEBUG] [Thread-205363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:24.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:53:24.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:53:24.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:53:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 53, 1), 24.82, 19.19, 0.0, 25.88, 22.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:53:26.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:53:01
2026-02-15T13:53:26.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:53:26.675 [DEBUG] [Thread-205364] [transport.py] [_log()] starting thread (client mode): 0xa2d6a2c0
2026-02-15T13:53:26.675 [DEBUG] [Thread-205364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:53:26.695 [DEBUG] [Thread-205364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:53:26.695 [INFO] [Thread-205364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] client lang: <none>
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] server lang: <none>
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] kex follows: False
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:53:26.699 [DEBUG] [Thread-205364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:53:26.700 [DEBUG] [Thread-205364] [transport.py] [_log()] Compression: none
2026-02-15T13:53:26.700 [DEBUG] [Thread-205364] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:53:26.716 [DEBUG] [Thread-205364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:53:26.717 [DEBUG] [Thread-205364] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:53:26.717 [DEBUG] [Thread-205364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:53:26.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:53:26.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:53:26.761 [DEBUG] [Thread-205364] [transport.py] [_log()] userauth is OK
2026-02-15T13:53:26.761 [DEBUG] [Thread-205364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:53:26.761 [DEBUG] [Thread-205364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:53:26.761 [DEBUG] [Thread-205364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:53:26.761 [DEBUG] [Thread-205364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:53:26.782 [INFO] [Thread-205364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:53:26.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:53:27.433 [DEBUG] [Thread-205364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:53:27.433 [DEBUG] [Thread-205364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:53:27.433 [DEBUG] [Thread-205364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:53:27.473 [DEBUG] [Thread-205364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:53:27.474 [DEBUG] [Thread-205364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:53:27.477 [DEBUG] [Thread-205364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:53:27.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:53:27.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:53:27.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:53:27.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:53:27.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:53:27.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:53:27.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:53:27.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:53:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:53:27.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.494889 -999.00  +22.30  19.03     25   +1.50 1 1 1 1 1   888    0 25.14 119.18 ----- 19.0 19.0 146.8 31.6 30.2 -29.1 29.5 -29.7 30.1 -28.8 31.1 -29.7
2026-02-15T13:53:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:53:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:53:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.494889
2026-02-15T13:53:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:53:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:53:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:53:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:53:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:53:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:53:01', tmtdew=24.82, humidity=19.19, cloud=0.0, wind=25.88, temperature=22.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:52:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:53:27.503 [DEBUG] [Thread-205364] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:53:27.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:53:27.599 [DEBUG] [Thread-205367] [transport.py] [_log()] starting thread (client mode): 0xa57c0d90
2026-02-15T13:53:27.599 [DEBUG] [Thread-205367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:53:27.617 [DEBUG] [Thread-205367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:53:27.618 [INFO] [Thread-205367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:53:27.625 [DEBUG] [Thread-205367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] client lang: <none>
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] server lang: <none>
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] kex follows: False
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:53:27.626 [DEBUG] [Thread-205367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:53:27.627 [DEBUG] [Thread-205367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:53:27.627 [DEBUG] [Thread-205367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:53:27.627 [DEBUG] [Thread-205367] [transport.py] [_log()] Compression: none
2026-02-15T13:53:27.627 [DEBUG] [Thread-205367] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:53:27.686 [DEBUG] [Thread-205367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:53:27.687 [DEBUG] [Thread-205367] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:53:27.688 [DEBUG] [Thread-205367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:53:27.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:53:27.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:53:27.753 [DEBUG] [Thread-205367] [transport.py] [_log()] userauth is OK
2026-02-15T13:53:27.753 [DEBUG] [Thread-205367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:53:27.753 [DEBUG] [Thread-205367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:53:27.753 [DEBUG] [Thread-205367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:53:27.753 [DEBUG] [Thread-205367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:53:27.774 [INFO] [Thread-205367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:53:27.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:53:27.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:53:28.611 [DEBUG] [Thread-205367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:53:28.611 [DEBUG] [Thread-205367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:53:28.660 [DEBUG] [Thread-205367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:53:28.660 [DEBUG] [Thread-205367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:53:28.669 [DEBUG] [Thread-205367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:53:28.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:53:28.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:53:28.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:53:28.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:53:28.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:53:28.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:53:28.706 [DEBUG] [Thread-205367] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:53:36.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:36.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:37.638 [DEBUG] [Thread-205369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:50.868 [DEBUG] [Thread-205370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:52.689 [DEBUG] [Thread-205371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:53:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:53:58.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:53:58.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:54:00.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 53, 37), 25.08, 18.74, 0.0, 23.78, 23.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:54:00.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:53:37
2026-02-15T13:54:01.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:54:01.174 [DEBUG] [Thread-205372] [transport.py] [_log()] starting thread (client mode): 0xa2d03340
2026-02-15T13:54:01.174 [DEBUG] [Thread-205372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:54:01.190 [DEBUG] [Thread-205372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:54:01.190 [INFO] [Thread-205372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] client lang: <none>
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] server lang: <none>
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] kex follows: False
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] Compression: none
2026-02-15T13:54:01.193 [DEBUG] [Thread-205372] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:54:01.212 [DEBUG] [Thread-205372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:54:01.213 [DEBUG] [Thread-205372] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:54:01.214 [DEBUG] [Thread-205372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:54:01.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:54:01.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:54:01.216 [DEBUG] [Thread-205372] [transport.py] [_log()] userauth is OK
2026-02-15T13:54:01.216 [DEBUG] [Thread-205372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:54:01.216 [DEBUG] [Thread-205372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:54:01.216 [DEBUG] [Thread-205372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:54:01.216 [DEBUG] [Thread-205372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:54:01.242 [INFO] [Thread-205372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:54:01.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:54:02.003 [DEBUG] [Thread-205372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:54:02.004 [DEBUG] [Thread-205372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:54:02.004 [DEBUG] [Thread-205372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:54:02.044 [DEBUG] [Thread-205372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:54:02.044 [DEBUG] [Thread-205372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:54:02.047 [DEBUG] [Thread-205372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:54:02.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:54:02.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:54:02.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:54:02.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:54:02.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:54:02.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:54:02.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.495236 -999.00  +22.40  20.13     25   +1.50 1 1 1 1 1   888    0 24.49 114.92 ----- 20.1 20.1 117.2 30.2 30.0 -29.8 29.3 -28.1 30.1 -27.6 31.0 -29.5
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.495236
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:54:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:53:37', tmtdew=25.08, humidity=18.74, cloud=0.0, wind=23.78, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:53:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:54:02.068 [DEBUG] [Thread-205372] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:54:02.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:54:02.154 [DEBUG] [Thread-205375] [transport.py] [_log()] starting thread (client mode): 0xa2d006a0
2026-02-15T13:54:02.154 [DEBUG] [Thread-205375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:54:02.177 [DEBUG] [Thread-205375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:54:02.177 [INFO] [Thread-205375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:54:02.189 [DEBUG] [Thread-205375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:54:02.189 [DEBUG] [Thread-205375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:54:02.189 [DEBUG] [Thread-205375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] client lang: <none>
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] server lang: <none>
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] kex follows: False
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] Compression: none
2026-02-15T13:54:02.190 [DEBUG] [Thread-205375] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:54:02.253 [DEBUG] [Thread-205375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:54:02.253 [DEBUG] [Thread-205375] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:54:02.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:54:02.254 [DEBUG] [Thread-205375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:54:02.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:54:02.317 [DEBUG] [Thread-205375] [transport.py] [_log()] userauth is OK
2026-02-15T13:54:02.317 [DEBUG] [Thread-205375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:54:02.317 [DEBUG] [Thread-205375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:54:02.317 [DEBUG] [Thread-205375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:54:02.317 [DEBUG] [Thread-205375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:54:02.336 [INFO] [Thread-205375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:54:02.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:54:02.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:54:03.225 [DEBUG] [Thread-205375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:54:03.225 [DEBUG] [Thread-205375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:54:03.282 [DEBUG] [Thread-205375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:54:03.283 [DEBUG] [Thread-205375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:54:03.300 [DEBUG] [Thread-205375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:54:03.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:54:03.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:54:03.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:54:03.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:54:03.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:54:03.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:54:03.371 [DEBUG] [Thread-205375] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:54:07.727 [DEBUG] [Thread-205377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:54:22.790 [DEBUG] [Thread-205378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:54:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:54:33.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:54:33.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:54:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 54, 13), 24.53, 19.22, 0.0, 18.02, 22.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:54:35.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:54:13
2026-02-15T13:54:35.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:54:35.870 [DEBUG] [Thread-205379] [transport.py] [_log()] starting thread (client mode): 0xa2d03460
2026-02-15T13:54:35.870 [DEBUG] [Thread-205379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:54:35.890 [DEBUG] [Thread-205379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:54:35.890 [INFO] [Thread-205379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] client lang: <none>
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] server lang: <none>
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] kex follows: False
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] Compression: none
2026-02-15T13:54:35.894 [DEBUG] [Thread-205379] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:54:35.911 [DEBUG] [Thread-205379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:54:35.911 [DEBUG] [Thread-205379] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:54:35.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:54:35.912 [DEBUG] [Thread-205379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:54:35.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:54:35.914 [DEBUG] [Thread-205379] [transport.py] [_log()] userauth is OK
2026-02-15T13:54:35.914 [DEBUG] [Thread-205379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:54:35.914 [DEBUG] [Thread-205379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:54:35.915 [DEBUG] [Thread-205379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:54:35.915 [DEBUG] [Thread-205379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:54:35.938 [INFO] [Thread-205379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:54:35.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:54:36.557 [DEBUG] [Thread-205379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:54:36.557 [DEBUG] [Thread-205379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:54:36.557 [DEBUG] [Thread-205379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:54:36.598 [DEBUG] [Thread-205379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:54:36.599 [DEBUG] [Thread-205379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:54:36.601 [DEBUG] [Thread-205379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:54:36.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:54:36.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:54:36.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:54:36.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:54:36.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:54:36.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:54:36.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:54:36.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:54:36.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:54:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.495583 -999.00  +22.60  12.90     24   +1.50 1 1 1 1 1   888    0 24.37 108.40 ----- 12.9 12.9 129.2 21.9 30.0 -28.0 29.4 -28.6 30.2 -27.2 31.1 -27.5
2026-02-15T13:54:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:54:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:54:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.495583
2026-02-15T13:54:36.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:54:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:54:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:54:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:54:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:54:36.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:54:13', tmtdew=24.53, humidity=19.22, cloud=0.0, wind=18.02, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:53:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:54:36.626 [DEBUG] [Thread-205379] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:54:36.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:54:36.723 [DEBUG] [Thread-205382] [transport.py] [_log()] starting thread (client mode): 0xa2d037f0
2026-02-15T13:54:36.723 [DEBUG] [Thread-205382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:54:36.742 [DEBUG] [Thread-205382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:54:36.743 [INFO] [Thread-205382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:36.750 [DEBUG] [Thread-205382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] client lang: <none>
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] server lang: <none>
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] kex follows: False
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] Compression: none
2026-02-15T13:54:36.751 [DEBUG] [Thread-205382] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:54:36.813 [DEBUG] [Thread-205382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:54:36.813 [DEBUG] [Thread-205382] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:54:36.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:54:36.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:54:36.815 [DEBUG] [Thread-205382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:54:36.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:54:36.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:54:36.869 [DEBUG] [Thread-205382] [transport.py] [_log()] userauth is OK
2026-02-15T13:54:36.869 [DEBUG] [Thread-205382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:54:36.869 [DEBUG] [Thread-205382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:54:36.870 [DEBUG] [Thread-205382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:54:36.870 [DEBUG] [Thread-205382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:54:36.888 [INFO] [Thread-205382] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:54:36.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:54:36.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:54:37.749 [DEBUG] [Thread-205382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:54:37.749 [DEBUG] [Thread-205382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:54:37.801 [DEBUG] [Thread-205382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:54:37.801 [DEBUG] [Thread-205382] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:54:37.813 [DEBUG] [Thread-205382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:54:37.824 [DEBUG] [Thread-205384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:54:37.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:54:37.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:54:37.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:54:37.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:54:37.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:54:37.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:54:37.855 [DEBUG] [Thread-205382] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:54:50.901 [DEBUG] [Thread-205385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:54:52.870 [DEBUG] [Thread-205386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:07.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:55:07.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:55:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:55:07.905 [DEBUG] [Thread-205387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:09.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 54, 48), 24.03, 20.17, 0.0, 15.51, 22.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:55:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:54:48
2026-02-15T13:55:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:55:10.382 [DEBUG] [Thread-205388] [transport.py] [_log()] starting thread (client mode): 0xa57e17b0
2026-02-15T13:55:10.383 [DEBUG] [Thread-205388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:55:10.403 [DEBUG] [Thread-205388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:55:10.403 [INFO] [Thread-205388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:55:10.406 [DEBUG] [Thread-205388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:55:10.406 [DEBUG] [Thread-205388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:55:10.406 [DEBUG] [Thread-205388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:55:10.406 [DEBUG] [Thread-205388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:10.406 [DEBUG] [Thread-205388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:10.406 [DEBUG] [Thread-205388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] client lang: <none>
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] server lang: <none>
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] kex follows: False
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] Compression: none
2026-02-15T13:55:10.407 [DEBUG] [Thread-205388] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:55:10.426 [DEBUG] [Thread-205388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:55:10.427 [DEBUG] [Thread-205388] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:55:10.428 [DEBUG] [Thread-205388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:55:10.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:55:10.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:55:10.431 [DEBUG] [Thread-205388] [transport.py] [_log()] userauth is OK
2026-02-15T13:55:10.431 [DEBUG] [Thread-205388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:55:10.431 [DEBUG] [Thread-205388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:55:10.431 [DEBUG] [Thread-205388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:55:10.431 [DEBUG] [Thread-205388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:55:10.451 [INFO] [Thread-205388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:55:10.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:55:12.910 [DEBUG] [Thread-205388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:55:12.910 [DEBUG] [Thread-205388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:55:12.911 [DEBUG] [Thread-205388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:55:12.951 [DEBUG] [Thread-205388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:55:12.951 [DEBUG] [Thread-205388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:55:12.954 [DEBUG] [Thread-205388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:55:12.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:55:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:55:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:55:12.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:55:12.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:55:13.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:55:13.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:55:13.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:55:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:55:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.495930 -999.00  +22.90  17.01     24   +1.50 1 1 1 1 1   888    0 24.29 98.85 ----- 17.0 17.0 168.2 21.9 30.1 -28.8 29.5 -27.9 30.2 -27.5 31.1 -28.8
2026-02-15T13:55:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:55:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:55:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.495930
2026-02-15T13:55:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:55:13.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:55:13.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:55:13.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:55:13.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:55:13.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:54:48', tmtdew=24.03, humidity=20.17, cloud=0.0, wind=15.51, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:54:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:55:13.003 [DEBUG] [Thread-205388] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:55:13.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:55:13.102 [DEBUG] [Thread-205391] [transport.py] [_log()] starting thread (client mode): 0xa2d6bf70
2026-02-15T13:55:13.102 [DEBUG] [Thread-205391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:55:13.118 [DEBUG] [Thread-205391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:55:13.119 [INFO] [Thread-205391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:55:13.126 [DEBUG] [Thread-205391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:55:13.127 [DEBUG] [Thread-205391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] client lang: <none>
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] server lang: <none>
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] kex follows: False
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:55:13.128 [DEBUG] [Thread-205391] [transport.py] [_log()] Compression: none
2026-02-15T13:55:13.129 [DEBUG] [Thread-205391] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:55:13.187 [DEBUG] [Thread-205391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:55:13.187 [DEBUG] [Thread-205391] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:55:13.188 [DEBUG] [Thread-205391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:55:13.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:55:13.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:55:13.246 [DEBUG] [Thread-205391] [transport.py] [_log()] userauth is OK
2026-02-15T13:55:13.247 [DEBUG] [Thread-205391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:55:13.247 [DEBUG] [Thread-205391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:55:13.247 [DEBUG] [Thread-205391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:55:13.247 [DEBUG] [Thread-205391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:55:13.266 [INFO] [Thread-205391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:55:13.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:55:13.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:55:14.149 [DEBUG] [Thread-205391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:55:14.150 [DEBUG] [Thread-205391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:55:14.197 [DEBUG] [Thread-205391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:55:14.198 [DEBUG] [Thread-205391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:55:14.207 [DEBUG] [Thread-205391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:55:14.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:55:14.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:55:14.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:55:14.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:55:14.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:55:14.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:55:14.244 [DEBUG] [Thread-205391] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:55:22.939 [DEBUG] [Thread-205393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:36.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:36.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:37.985 [DEBUG] [Thread-205394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:44.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:55:44.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:55:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:55:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 55, 24), 24.02, 20.15, 0.0, 16.07, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:55:46.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:55:24
2026-02-15T13:55:47.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:55:47.256 [DEBUG] [Thread-205395] [transport.py] [_log()] starting thread (client mode): 0xa57c1210
2026-02-15T13:55:47.256 [DEBUG] [Thread-205395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:55:47.279 [DEBUG] [Thread-205395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:55:47.279 [INFO] [Thread-205395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:55:47.282 [DEBUG] [Thread-205395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:55:47.283 [DEBUG] [Thread-205395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:55:47.283 [DEBUG] [Thread-205395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:55:47.283 [DEBUG] [Thread-205395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:47.283 [DEBUG] [Thread-205395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:47.283 [DEBUG] [Thread-205395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:47.283 [DEBUG] [Thread-205395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] client lang: <none>
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] server lang: <none>
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] kex follows: False
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] Compression: none
2026-02-15T13:55:47.284 [DEBUG] [Thread-205395] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:55:47.301 [DEBUG] [Thread-205395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:55:47.301 [DEBUG] [Thread-205395] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:55:47.302 [DEBUG] [Thread-205395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:55:47.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:55:47.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:55:47.304 [DEBUG] [Thread-205395] [transport.py] [_log()] userauth is OK
2026-02-15T13:55:47.304 [DEBUG] [Thread-205395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:55:47.304 [DEBUG] [Thread-205395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:55:47.304 [DEBUG] [Thread-205395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:55:47.304 [DEBUG] [Thread-205395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:55:47.323 [INFO] [Thread-205395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:55:47.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:55:47.962 [DEBUG] [Thread-205395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:55:47.963 [DEBUG] [Thread-205395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:55:47.963 [DEBUG] [Thread-205395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:55:48.004 [DEBUG] [Thread-205395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:55:48.004 [DEBUG] [Thread-205395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:55:48.007 [DEBUG] [Thread-205395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:55:48.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:55:48.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:55:48.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:55:48.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:55:48.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:55:48.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:55:48.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.496624 -999.00  +22.90  21.33     23   +1.20 1 1 1 1 1   888    0 23.86 88.90 ----- 21.3 21.3 133.0 29.9 30.2 -31.4 29.4 -28.0 30.0 -28.1 31.1 -29.8
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.496624
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:55:48.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:55:24', tmtdew=24.02, humidity=20.15, cloud=0.0, wind=16.07, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:55:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:55:48.025 [DEBUG] [Thread-205395] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:55:48.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:55:48.110 [DEBUG] [Thread-205398] [transport.py] [_log()] starting thread (client mode): 0xa2d68c10
2026-02-15T13:55:48.111 [DEBUG] [Thread-205398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:55:48.124 [DEBUG] [Thread-205398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:55:48.125 [INFO] [Thread-205398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] client lang: <none>
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] server lang: <none>
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] kex follows: False
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] Compression: none
2026-02-15T13:55:48.132 [DEBUG] [Thread-205398] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:55:48.192 [DEBUG] [Thread-205398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:55:48.192 [DEBUG] [Thread-205398] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:55:48.193 [DEBUG] [Thread-205398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:55:48.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:55:48.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:55:48.253 [DEBUG] [Thread-205398] [transport.py] [_log()] userauth is OK
2026-02-15T13:55:48.253 [DEBUG] [Thread-205398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:55:48.253 [DEBUG] [Thread-205398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:55:48.253 [DEBUG] [Thread-205398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:55:48.253 [DEBUG] [Thread-205398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:55:48.271 [INFO] [Thread-205398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:55:48.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:55:48.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:55:49.133 [DEBUG] [Thread-205398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:55:49.133 [DEBUG] [Thread-205398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:55:49.182 [DEBUG] [Thread-205398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:55:49.182 [DEBUG] [Thread-205398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:55:49.191 [DEBUG] [Thread-205398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:55:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:55:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:55:49.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:55:49.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:55:49.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:55:49.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:55:49.228 [DEBUG] [Thread-205398] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:55:50.943 [DEBUG] [Thread-205400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:55:53.023 [DEBUG] [Thread-205401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:08.070 [DEBUG] [Thread-205402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:56:19.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:56: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-02-15T13:56:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 55, 59), 24.66, 19.14, 0.0, 19.82, 22.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:56:21.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:55:59
2026-02-15T13:56:21.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:56:21.746 [DEBUG] [Thread-205403] [transport.py] [_log()] starting thread (client mode): 0xa81d4a90
2026-02-15T13:56:21.746 [DEBUG] [Thread-205403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:56:21.764 [DEBUG] [Thread-205403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:56:21.764 [INFO] [Thread-205403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:56:21.767 [DEBUG] [Thread-205403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:56:21.767 [DEBUG] [Thread-205403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] client lang: <none>
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] server lang: <none>
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] kex follows: False
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:56:21.768 [DEBUG] [Thread-205403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:56:21.769 [DEBUG] [Thread-205403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:56:21.769 [DEBUG] [Thread-205403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:56:21.769 [DEBUG] [Thread-205403] [transport.py] [_log()] Compression: none
2026-02-15T13:56:21.769 [DEBUG] [Thread-205403] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:56:21.788 [DEBUG] [Thread-205403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:56:21.788 [DEBUG] [Thread-205403] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:56:21.789 [DEBUG] [Thread-205403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:56:21.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:56:21.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:56:21.791 [DEBUG] [Thread-205403] [transport.py] [_log()] userauth is OK
2026-02-15T13:56:21.791 [DEBUG] [Thread-205403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:56:21.791 [DEBUG] [Thread-205403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:56:21.791 [DEBUG] [Thread-205403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:56:21.791 [DEBUG] [Thread-205403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:56:21.811 [INFO] [Thread-205403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:56:21.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:56:22.405 [DEBUG] [Thread-205403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:56:22.406 [DEBUG] [Thread-205403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:56:22.406 [DEBUG] [Thread-205403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:56:22.446 [DEBUG] [Thread-205403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:56:22.447 [DEBUG] [Thread-205403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:56:22.450 [DEBUG] [Thread-205403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:56:22.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:56:22.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:56:22.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:56:22.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:56:22.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:56:22.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:56:22.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:56:22.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:56:22.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:56:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.497319 -999.00  +22.80  20.83     23   +1.00 1 1 1 1 1   888    0 23.69 81.50 ----- 20.8 20.8 149.6 26.0 30.3 -29.3 29.6 -28.0 30.2 -27.2 31.2 -30.3
2026-02-15T13:56:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:56:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:56:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.497319
2026-02-15T13:56:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:56:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:56:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:56:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:56:22.472 [DEBUG] [Thread-205403] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:56:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:56:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:55:59', tmtdew=24.66, humidity=19.14, cloud=0.0, wind=19.82, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:56:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:56:22.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:56:22.567 [DEBUG] [Thread-205406] [transport.py] [_log()] starting thread (client mode): 0xa57c36a0
2026-02-15T13:56:22.568 [DEBUG] [Thread-205406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:56:22.582 [DEBUG] [Thread-205406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:56:22.582 [INFO] [Thread-205406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:56:22.590 [DEBUG] [Thread-205406] [transport.py] [_log()] client lang: <none>
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] server lang: <none>
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] kex follows: False
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] Compression: none
2026-02-15T13:56:22.591 [DEBUG] [Thread-205406] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:56:22.650 [DEBUG] [Thread-205406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:56:22.651 [DEBUG] [Thread-205406] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:56:22.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:56:22.652 [DEBUG] [Thread-205406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:56:22.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:56:22.706 [DEBUG] [Thread-205406] [transport.py] [_log()] userauth is OK
2026-02-15T13:56:22.706 [DEBUG] [Thread-205406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:56:22.707 [DEBUG] [Thread-205406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:56:22.707 [DEBUG] [Thread-205406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:56:22.707 [DEBUG] [Thread-205406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:56:22.731 [INFO] [Thread-205406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:56:22.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:56:22.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:56:23.106 [DEBUG] [Thread-205408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:23.549 [DEBUG] [Thread-205406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:56:23.550 [DEBUG] [Thread-205406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:56:23.598 [DEBUG] [Thread-205406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:56:23.598 [DEBUG] [Thread-205406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:56:23.607 [DEBUG] [Thread-205406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:56:23.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:56:23.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:56:23.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:56:23.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:56:23.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:56:23.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:56:23.646 [DEBUG] [Thread-205406] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:56:37.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:37.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:38.155 [DEBUG] [Thread-205409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:50.989 [DEBUG] [Thread-205410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:53.185 [DEBUG] [Thread-205411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:56:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:56:53.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:56:53.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:56:55.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 56, 34), 24.97, 18.81, 0.0, 21.28, 22.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:56:55.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:56:34
2026-02-15T13:56:55.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:56:56.132 [DEBUG] [Thread-205412] [transport.py] [_log()] starting thread (client mode): 0xa57416c0
2026-02-15T13:56:56.132 [DEBUG] [Thread-205412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:56:56.160 [DEBUG] [Thread-205412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:56:56.160 [INFO] [Thread-205412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:56:56.161 [DEBUG] [Thread-205412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:56:56.161 [DEBUG] [Thread-205412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] client lang: <none>
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] server lang: <none>
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] kex follows: False
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] Compression: none
2026-02-15T13:56:56.162 [DEBUG] [Thread-205412] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:56:56.177 [DEBUG] [Thread-205412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:56:56.178 [DEBUG] [Thread-205412] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:56:56.178 [DEBUG] [Thread-205412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:56:56.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:56:56.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:56:56.180 [DEBUG] [Thread-205412] [transport.py] [_log()] userauth is OK
2026-02-15T13:56:56.181 [DEBUG] [Thread-205412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:56:56.181 [DEBUG] [Thread-205412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:56:56.181 [DEBUG] [Thread-205412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:56:56.181 [DEBUG] [Thread-205412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:56:56.204 [INFO] [Thread-205412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:56:56.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:56:56.816 [DEBUG] [Thread-205412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:56:56.816 [DEBUG] [Thread-205412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:56:56.816 [DEBUG] [Thread-205412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:56:56.856 [DEBUG] [Thread-205412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:56:56.857 [DEBUG] [Thread-205412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:56:56.860 [DEBUG] [Thread-205412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:56:56.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:56:56.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:56:56.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:56:56.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:56:56.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:56:56.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:56:56.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:56:56.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:56:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:56:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.497666 -999.00  +22.60  17.11     23   +0.80 1 1 1 1 1   888    0 23.81 81.98 ----- 17.1 17.1 168.6 23.4 30.1 -29.4 29.5 -28.6 30.2 -27.3 31.1 -29.8
2026-02-15T13:56:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:56:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:56:56.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.497666
2026-02-15T13:56:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:56:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:56:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:56:56.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:56:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:56:56.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:56:34', tmtdew=24.97, humidity=18.81, cloud=0.0, wind=21.28, temperature=22.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:56:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:56:56.884 [DEBUG] [Thread-205412] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:56:56.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:56:56.981 [DEBUG] [Thread-205415] [transport.py] [_log()] starting thread (client mode): 0xa2d00940
2026-02-15T13:56:56.981 [DEBUG] [Thread-205415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:56:56.996 [DEBUG] [Thread-205415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:56:56.997 [INFO] [Thread-205415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:56:57.004 [DEBUG] [Thread-205415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:56:57.004 [DEBUG] [Thread-205415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:56:57.004 [DEBUG] [Thread-205415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] client lang: <none>
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] server lang: <none>
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] kex follows: False
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] Compression: none
2026-02-15T13:56:57.005 [DEBUG] [Thread-205415] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:56:57.062 [DEBUG] [Thread-205415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:56:57.063 [DEBUG] [Thread-205415] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:56:57.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:56:57.064 [DEBUG] [Thread-205415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:56:57.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:56:57.118 [DEBUG] [Thread-205415] [transport.py] [_log()] userauth is OK
2026-02-15T13:56:57.119 [DEBUG] [Thread-205415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:56:57.119 [DEBUG] [Thread-205415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:56:57.119 [DEBUG] [Thread-205415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:56:57.119 [DEBUG] [Thread-205415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:56:57.138 [INFO] [Thread-205415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:56:57.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:56:57.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:56:57.958 [DEBUG] [Thread-205415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:56:57.958 [DEBUG] [Thread-205415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:56:58.006 [DEBUG] [Thread-205415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:56:58.007 [DEBUG] [Thread-205415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:56:58.016 [DEBUG] [Thread-205415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:56:58.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:56:58.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:56:58.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:56:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:56:58.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:56:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:56:58.054 [DEBUG] [Thread-205415] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:57:08.223 [DEBUG] [Thread-205417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:57:23.282 [DEBUG] [Thread-205418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:57:28.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:57:28.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:57:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:57:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 57, 10), 25.23, 18.37, 0.0, 21.72, 22.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:57:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:57:10
2026-02-15T13:57:30.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:57:30.436 [DEBUG] [Thread-205419] [transport.py] [_log()] starting thread (client mode): 0xa2d015a0
2026-02-15T13:57:30.436 [DEBUG] [Thread-205419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:57:30.457 [DEBUG] [Thread-205419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:57:30.457 [INFO] [Thread-205419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:57:30.458 [DEBUG] [Thread-205419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] client lang: <none>
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] server lang: <none>
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] kex follows: False
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] Compression: none
2026-02-15T13:57:30.459 [DEBUG] [Thread-205419] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:57:30.469 [DEBUG] [Thread-205419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:57:30.469 [DEBUG] [Thread-205419] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:57:30.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:57:30.470 [DEBUG] [Thread-205419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:57:30.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:57:30.472 [DEBUG] [Thread-205419] [transport.py] [_log()] userauth is OK
2026-02-15T13:57:30.472 [DEBUG] [Thread-205419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:57:30.472 [DEBUG] [Thread-205419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:57:30.472 [DEBUG] [Thread-205419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:57:30.472 [DEBUG] [Thread-205419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:57:30.498 [INFO] [Thread-205419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:57:30.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:57:31.167 [DEBUG] [Thread-205419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:57:31.167 [DEBUG] [Thread-205419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:57:31.168 [DEBUG] [Thread-205419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:57:31.208 [DEBUG] [Thread-205419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:57:31.208 [DEBUG] [Thread-205419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:57:31.211 [DEBUG] [Thread-205419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:57:31.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:57:31.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:57:31.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:57:31.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:57:31.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:57:31.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:57:31.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:57:31.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:57:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:57:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.498014 -999.00  +22.70  25.78     22   +0.30 1 1 1 1 1   888    0 23.82 82.72 ----- 25.8 25.8 167.6 29.9 30.1 -31.2 29.0 -32.9 30.1 -29.0 31.1 -31.2
2026-02-15T13:57:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:57:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:57:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.498014
2026-02-15T13:57:31.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:57:31.235 [DEBUG] [Thread-205419] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:57:31.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:57:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:57:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:57:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:57:31.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:57:10', tmtdew=25.23, humidity=18.37, cloud=0.0, wind=21.72, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:57:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:57:31.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:57:31.331 [DEBUG] [Thread-205422] [transport.py] [_log()] starting thread (client mode): 0xa2db7d60
2026-02-15T13:57:31.331 [DEBUG] [Thread-205422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:57:31.346 [DEBUG] [Thread-205422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:57:31.346 [INFO] [Thread-205422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:57:31.354 [DEBUG] [Thread-205422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:57:31.354 [DEBUG] [Thread-205422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] client lang: <none>
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] server lang: <none>
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] kex follows: False
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:57:31.355 [DEBUG] [Thread-205422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:57:31.356 [DEBUG] [Thread-205422] [transport.py] [_log()] Compression: none
2026-02-15T13:57:31.356 [DEBUG] [Thread-205422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:57:31.414 [DEBUG] [Thread-205422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:57:31.415 [DEBUG] [Thread-205422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:57:31.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:57:31.416 [DEBUG] [Thread-205422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:57:31.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:57:31.471 [DEBUG] [Thread-205422] [transport.py] [_log()] userauth is OK
2026-02-15T13:57:31.471 [DEBUG] [Thread-205422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:57:31.471 [DEBUG] [Thread-205422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:57:31.471 [DEBUG] [Thread-205422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:57:31.471 [DEBUG] [Thread-205422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:57:31.490 [INFO] [Thread-205422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:57:31.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:57:31.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:57:32.305 [DEBUG] [Thread-205422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:57:32.306 [DEBUG] [Thread-205422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:57:32.356 [DEBUG] [Thread-205422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:57:32.357 [DEBUG] [Thread-205422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:57:32.368 [DEBUG] [Thread-205422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:57:32.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:57:32.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:57:32.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:57:32.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:57:32.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:57:32.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:57:32.405 [DEBUG] [Thread-205422] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:57:37.288 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:57:37.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:57:38.317 [DEBUG] [Thread-205424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:57:51.034 [DEBUG] [Thread-205425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:57:53.370 [DEBUG] [Thread-205426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:02.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:58:02.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:58:02.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:58:04.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 57, 46), 26.35, 16.86, 0.0, 26.7, 22.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:58:04.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:57:46
2026-02-15T13:58:05.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:58:05.180 [DEBUG] [Thread-205427] [transport.py] [_log()] starting thread (client mode): 0xa2d69e10
2026-02-15T13:58:05.180 [DEBUG] [Thread-205427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:58:05.195 [DEBUG] [Thread-205427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:58:05.195 [INFO] [Thread-205427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] client lang: <none>
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] server lang: <none>
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] kex follows: False
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] Compression: none
2026-02-15T13:58:05.199 [DEBUG] [Thread-205427] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:58:05.215 [DEBUG] [Thread-205427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:58:05.216 [DEBUG] [Thread-205427] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:58:05.216 [DEBUG] [Thread-205427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:58:05.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:58:05.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:58:05.218 [DEBUG] [Thread-205427] [transport.py] [_log()] userauth is OK
2026-02-15T13:58:05.219 [DEBUG] [Thread-205427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:58:05.219 [DEBUG] [Thread-205427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:58:05.219 [DEBUG] [Thread-205427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:58:05.219 [DEBUG] [Thread-205427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:58:05.244 [INFO] [Thread-205427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:58:05.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:58:05.831 [DEBUG] [Thread-205427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:58:05.831 [DEBUG] [Thread-205427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:58:05.831 [DEBUG] [Thread-205427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:58:05.872 [DEBUG] [Thread-205427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:58:05.872 [DEBUG] [Thread-205427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:58:05.874 [DEBUG] [Thread-205427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:58:05.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:58:05.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:58:05.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:58:05.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:58:05.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:58:05.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:58:05.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:58:05.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:58:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:58:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.498361 -999.00  +23.00  22.18     22   +0.30 1 1 1 1 1   888    0 24.70 98.69 ----- 22.2 22.2 163.2 26.7 30.2 -28.7 29.4 -29.2 30.2 -28.3 31.2 -28.8
2026-02-15T13:58:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:58:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:58:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.498361
2026-02-15T13:58:05.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:58:05.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:58:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:58:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:58:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:58:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:57:46', tmtdew=26.35, humidity=16.86, cloud=0.0, wind=26.7, temperature=22.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:57:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:58:05.895 [DEBUG] [Thread-205427] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:58:05.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:58:06.003 [DEBUG] [Thread-205430] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-15T13:58:06.003 [DEBUG] [Thread-205430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:58:06.018 [DEBUG] [Thread-205430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:58:06.018 [INFO] [Thread-205430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:58:06.025 [DEBUG] [Thread-205430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:06.026 [DEBUG] [Thread-205430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] client lang: <none>
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] server lang: <none>
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] kex follows: False
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:58:06.027 [DEBUG] [Thread-205430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:58:06.028 [DEBUG] [Thread-205430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:58:06.028 [DEBUG] [Thread-205430] [transport.py] [_log()] Compression: none
2026-02-15T13:58:06.028 [DEBUG] [Thread-205430] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:58:06.088 [DEBUG] [Thread-205430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:58:06.089 [DEBUG] [Thread-205430] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:58:06.089 [DEBUG] [Thread-205430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:58:06.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:58:06.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:58:06.146 [DEBUG] [Thread-205430] [transport.py] [_log()] userauth is OK
2026-02-15T13:58:06.147 [DEBUG] [Thread-205430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:58:06.147 [DEBUG] [Thread-205430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:58:06.147 [DEBUG] [Thread-205430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:58:06.147 [DEBUG] [Thread-205430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:58:06.165 [INFO] [Thread-205430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:58:06.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:58:06.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:58:06.993 [DEBUG] [Thread-205430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:58:06.994 [DEBUG] [Thread-205430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:58:07.044 [DEBUG] [Thread-205430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:58:07.044 [DEBUG] [Thread-205430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:58:07.053 [DEBUG] [Thread-205430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:58:07.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:58:07.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:58:07.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:58:07.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:58:07.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:58:07.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:58:07.092 [DEBUG] [Thread-205430] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:58:08.405 [DEBUG] [Thread-205432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:23.447 [DEBUG] [Thread-205433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:58:37.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:58:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:58:37.427 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:37.428 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:38.484 [DEBUG] [Thread-205434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:39.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 58, 22), 26.32, 16.95, 0.0, 25.88, 23.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:58:39.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:58:22
2026-02-15T13:58:39.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:58:39.543 [DEBUG] [Thread-205435] [transport.py] [_log()] starting thread (client mode): 0xa2d68520
2026-02-15T13:58:39.544 [DEBUG] [Thread-205435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:58:39.564 [DEBUG] [Thread-205435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:58:39.565 [INFO] [Thread-205435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] client lang: <none>
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] server lang: <none>
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] kex follows: False
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] Compression: none
2026-02-15T13:58:39.566 [DEBUG] [Thread-205435] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:58:39.578 [DEBUG] [Thread-205435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:58:39.579 [DEBUG] [Thread-205435] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:58:39.579 [DEBUG] [Thread-205435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:58:39.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:58:39.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:58:39.582 [DEBUG] [Thread-205435] [transport.py] [_log()] userauth is OK
2026-02-15T13:58:39.582 [DEBUG] [Thread-205435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:58:39.582 [DEBUG] [Thread-205435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:58:39.582 [DEBUG] [Thread-205435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:58:39.582 [DEBUG] [Thread-205435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:58:39.618 [INFO] [Thread-205435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:58:39.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:58:40.214 [DEBUG] [Thread-205435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:58:40.215 [DEBUG] [Thread-205435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:58:40.215 [DEBUG] [Thread-205435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:58:40.256 [DEBUG] [Thread-205435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:58:40.256 [DEBUG] [Thread-205435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:58:40.259 [DEBUG] [Thread-205435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:58:40.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:58:40.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:58:40.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:58:40.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:58:40.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:58:40.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:58:40.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:58:40.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:58:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:58:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.498708 -999.00  +23.20  29.86     22   +0.80 1 1 1 1 1   888    0 24.77 103.53 ----- 29.9 29.9 143.0 32.3 30.2 -29.4 29.3 -28.0 30.1 -28.0 31.1 -29.9
2026-02-15T13:58:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:58:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:58:40.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.498708
2026-02-15T13:58:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:58:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:58:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:58:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:58:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:58:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:58:22', tmtdew=26.32, humidity=16.95, cloud=0.0, wind=25.88, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:58:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:58:40.289 [DEBUG] [Thread-205435] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:58:40.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:58:40.386 [DEBUG] [Thread-205438] [transport.py] [_log()] starting thread (client mode): 0xa57c2230
2026-02-15T13:58:40.386 [DEBUG] [Thread-205438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:58:40.401 [DEBUG] [Thread-205438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:58:40.402 [INFO] [Thread-205438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:58:40.409 [DEBUG] [Thread-205438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:58:40.410 [DEBUG] [Thread-205438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] client lang: <none>
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] server lang: <none>
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] kex follows: False
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:58:40.411 [DEBUG] [Thread-205438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:58:40.412 [DEBUG] [Thread-205438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:58:40.412 [DEBUG] [Thread-205438] [transport.py] [_log()] Compression: none
2026-02-15T13:58:40.412 [DEBUG] [Thread-205438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:58:40.471 [DEBUG] [Thread-205438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:58:40.472 [DEBUG] [Thread-205438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:58:40.472 [DEBUG] [Thread-205438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:58:40.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:58:40.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:58:40.531 [DEBUG] [Thread-205438] [transport.py] [_log()] userauth is OK
2026-02-15T13:58:40.531 [DEBUG] [Thread-205438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:58:40.531 [DEBUG] [Thread-205438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:58:40.531 [DEBUG] [Thread-205438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:58:40.531 [DEBUG] [Thread-205438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:58:40.550 [INFO] [Thread-205438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:58:40.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:58:40.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:58:41.363 [DEBUG] [Thread-205438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:58:41.363 [DEBUG] [Thread-205438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:58:41.412 [DEBUG] [Thread-205438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:58:41.412 [DEBUG] [Thread-205438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:58:41.422 [DEBUG] [Thread-205438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:58:41.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:58:41.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:58:41.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:58:41.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:58:41.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:58:41.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:58:41.459 [DEBUG] [Thread-205438] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:58:51.077 [DEBUG] [Thread-205440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:58:53.519 [DEBUG] [Thread-205441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:08.570 [DEBUG] [Thread-205442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:11.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:59:11.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:59:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:59:13.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 58, 57), 26.22, 17.41, 0.0, 23.59, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:59:13.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:58:57
2026-02-15T13:59:13.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:59:13.916 [DEBUG] [Thread-205443] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-15T13:59:13.916 [DEBUG] [Thread-205443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:59:13.937 [DEBUG] [Thread-205443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:59:13.937 [INFO] [Thread-205443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] client lang: <none>
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] server lang: <none>
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] kex follows: False
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:59:13.940 [DEBUG] [Thread-205443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:59:13.941 [DEBUG] [Thread-205443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:59:13.941 [DEBUG] [Thread-205443] [transport.py] [_log()] Compression: none
2026-02-15T13:59:13.941 [DEBUG] [Thread-205443] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:59:13.957 [DEBUG] [Thread-205443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:59:13.958 [DEBUG] [Thread-205443] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:59:13.959 [DEBUG] [Thread-205443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:59:13.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:59:13.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:59:13.961 [DEBUG] [Thread-205443] [transport.py] [_log()] userauth is OK
2026-02-15T13:59:13.962 [DEBUG] [Thread-205443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:59:13.962 [DEBUG] [Thread-205443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:59:13.962 [DEBUG] [Thread-205443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:59:13.962 [DEBUG] [Thread-205443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:59:13.985 [INFO] [Thread-205443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:59:13.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:59:14.596 [DEBUG] [Thread-205443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:59:14.596 [DEBUG] [Thread-205443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:59:14.596 [DEBUG] [Thread-205443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:59:14.638 [DEBUG] [Thread-205443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:59:14.638 [DEBUG] [Thread-205443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:59:14.641 [DEBUG] [Thread-205443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:59:14.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:59:14.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:59:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:59:14.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:59:14.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:59:14.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:59:14.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:59:14.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:59:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:59:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.499055 -999.00  +22.90  18.25     23   +0.90 1 1 1 1 1   888    0 24.29 105.31 ----- 18.2 18.2 136.1 27.1 30.0 -30.1 29.3 -28.3 30.0 -27.5 31.0 -30.3
2026-02-15T13:59:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:59:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:59:14.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.499055
2026-02-15T13:59:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:59:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:59:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:59:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:59:14.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:59:14.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:58:57', tmtdew=26.22, humidity=17.41, cloud=0.0, wind=23.59, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:58:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:59:14.671 [DEBUG] [Thread-205443] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:59:14.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:59:14.780 [DEBUG] [Thread-205446] [transport.py] [_log()] starting thread (client mode): 0xa5740130
2026-02-15T13:59:14.780 [DEBUG] [Thread-205446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:59:14.796 [DEBUG] [Thread-205446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:59:14.797 [INFO] [Thread-205446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:59:14.805 [DEBUG] [Thread-205446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:59:14.805 [DEBUG] [Thread-205446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:59:14.805 [DEBUG] [Thread-205446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:59:14.805 [DEBUG] [Thread-205446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:14.805 [DEBUG] [Thread-205446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:14.805 [DEBUG] [Thread-205446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] client lang: <none>
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] server lang: <none>
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] kex follows: False
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:59:14.806 [DEBUG] [Thread-205446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:59:14.807 [DEBUG] [Thread-205446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:59:14.807 [DEBUG] [Thread-205446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:59:14.807 [DEBUG] [Thread-205446] [transport.py] [_log()] Compression: none
2026-02-15T13:59:14.807 [DEBUG] [Thread-205446] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:59:14.863 [DEBUG] [Thread-205446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:59:14.864 [DEBUG] [Thread-205446] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:59:14.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:59:14.865 [DEBUG] [Thread-205446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:59:14.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:59:14.924 [DEBUG] [Thread-205446] [transport.py] [_log()] userauth is OK
2026-02-15T13:59:14.924 [DEBUG] [Thread-205446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:59:14.924 [DEBUG] [Thread-205446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:59:14.924 [DEBUG] [Thread-205446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:59:14.924 [DEBUG] [Thread-205446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:59:14.949 [INFO] [Thread-205446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:59:14.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:59:14.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:59:15.782 [DEBUG] [Thread-205446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:59:15.782 [DEBUG] [Thread-205446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:59:15.832 [DEBUG] [Thread-205446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:59:15.832 [DEBUG] [Thread-205446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:59:15.841 [DEBUG] [Thread-205446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:59:15.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:59:15.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:59:15.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:59:15.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:59:15.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:59:15.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:59:15.879 [DEBUG] [Thread-205446] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:59:23.603 [DEBUG] [Thread-205448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:37.569 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:37.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:38.666 [DEBUG] [Thread-205449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T13:59:45.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T13:59:45.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T13:59:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 13, 59, 33), 26.8, 16.76, 0.0, 18.38, 24.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T13:59:48.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 13:59:33
2026-02-15T13:59:48.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T13:59:48.717 [DEBUG] [Thread-205450] [transport.py] [_log()] starting thread (client mode): 0xa2d01ab0
2026-02-15T13:59:48.717 [DEBUG] [Thread-205450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:59:48.737 [DEBUG] [Thread-205450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T13:59:48.737 [INFO] [Thread-205450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T13:59:48.740 [DEBUG] [Thread-205450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] client lang: <none>
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] server lang: <none>
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] kex follows: False
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:59:48.741 [DEBUG] [Thread-205450] [transport.py] [_log()] Compression: none
2026-02-15T13:59:48.742 [DEBUG] [Thread-205450] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:59:48.760 [DEBUG] [Thread-205450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:59:48.760 [DEBUG] [Thread-205450] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:59:48.761 [DEBUG] [Thread-205450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T13:59:48.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T13:59:48.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:59:48.763 [DEBUG] [Thread-205450] [transport.py] [_log()] userauth is OK
2026-02-15T13:59:48.763 [DEBUG] [Thread-205450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:59:48.763 [DEBUG] [Thread-205450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:59:48.763 [DEBUG] [Thread-205450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T13:59:48.764 [DEBUG] [Thread-205450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:59:48.788 [INFO] [Thread-205450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:59:48.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:59:49.432 [DEBUG] [Thread-205450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:59:49.433 [DEBUG] [Thread-205450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:59:49.433 [DEBUG] [Thread-205450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T13:59:49.473 [DEBUG] [Thread-205450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:59:49.474 [DEBUG] [Thread-205450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:59:49.477 [DEBUG] [Thread-205450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:59:49.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:59:49.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T13:59:49.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T13:59:49.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T13:59:49.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:59:49.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T13:59:49.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:59:49.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:59:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T13:59:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.499403 -999.00  +22.60  14.14     23   +0.80 1 1 1 1 1   888    0 24.56 105.93 ----- 14.1 14.1 143.6 20.2 30.1 -28.9 29.4 -28.5 30.1 -27.4 31.0 -29.9
2026-02-15T13:59:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T13:59:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T13:59:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.499403
2026-02-15T13:59:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T13:59:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T13:59:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T13:59:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T13:59:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T13:59:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T13:59:33', tmtdew=26.8, humidity=16.76, cloud=0.0, wind=18.38, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:59:08.419', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T13:59:49.505 [DEBUG] [Thread-205450] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:59:49.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T13:59:49.601 [DEBUG] [Thread-205453] [transport.py] [_log()] starting thread (client mode): 0xa2d4c040
2026-02-15T13:59:49.601 [DEBUG] [Thread-205453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T13:59:49.616 [DEBUG] [Thread-205453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T13:59:49.616 [INFO] [Thread-205453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T13:59:49.623 [DEBUG] [Thread-205453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T13:59:49.624 [DEBUG] [Thread-205453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T13:59:49.624 [DEBUG] [Thread-205453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T13:59:49.624 [DEBUG] [Thread-205453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] client lang: <none>
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] server lang: <none>
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] kex follows: False
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] Compression: none
2026-02-15T13:59:49.625 [DEBUG] [Thread-205453] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T13:59:49.683 [DEBUG] [Thread-205453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T13:59:49.683 [DEBUG] [Thread-205453] [transport.py] [_log()] Switch to new keys ...
2026-02-15T13:59:49.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T13:59:49.685 [DEBUG] [Thread-205453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T13:59:49.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T13:59:49.739 [DEBUG] [Thread-205453] [transport.py] [_log()] userauth is OK
2026-02-15T13:59:49.739 [DEBUG] [Thread-205453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T13:59:49.740 [DEBUG] [Thread-205453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T13:59:49.740 [DEBUG] [Thread-205453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T13:59:49.740 [DEBUG] [Thread-205453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T13:59:49.765 [INFO] [Thread-205453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T13:59:49.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T13:59:49.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T13:59:50.641 [DEBUG] [Thread-205453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T13:59:50.641 [DEBUG] [Thread-205453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T13:59:50.689 [DEBUG] [Thread-205453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T13:59:50.690 [DEBUG] [Thread-205453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T13:59:50.699 [DEBUG] [Thread-205453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T13:59:50.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T13:59:50.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T13:59:50.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T13:59:50.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T13:59:50.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T13:59:50.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T13:59:50.736 [DEBUG] [Thread-205453] [transport.py] [_log()] EOF in transport thread
2026-02-15T13:59:51.118 [DEBUG] [Thread-205455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T13:59:53.704 [DEBUG] [Thread-205456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:08.755 [DEBUG] [Thread-205457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:20.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:00:20.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:00:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:00:22.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 0, 9), 25.75, 18.09, 0.0, 22.25, 23.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:00:22.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:00:09
2026-02-15T14:00:23.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:00:23.516 [DEBUG] [Thread-205458] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-15T14:00:23.516 [DEBUG] [Thread-205458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:00:23.537 [DEBUG] [Thread-205458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:00:23.537 [INFO] [Thread-205458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:00:23.540 [DEBUG] [Thread-205458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] client lang: <none>
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] server lang: <none>
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] kex follows: False
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:00:23.541 [DEBUG] [Thread-205458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:00:23.542 [DEBUG] [Thread-205458] [transport.py] [_log()] Compression: none
2026-02-15T14:00:23.542 [DEBUG] [Thread-205458] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:00:23.559 [DEBUG] [Thread-205458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:00:23.559 [DEBUG] [Thread-205458] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:00:23.560 [DEBUG] [Thread-205458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:00:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:00:23.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:00:23.562 [DEBUG] [Thread-205458] [transport.py] [_log()] userauth is OK
2026-02-15T14:00:23.562 [DEBUG] [Thread-205458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:00:23.562 [DEBUG] [Thread-205458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:00:23.562 [DEBUG] [Thread-205458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:00:23.562 [DEBUG] [Thread-205458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:00:23.598 [INFO] [Thread-205458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:00:23.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:00:23.792 [DEBUG] [Thread-205460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:24.228 [DEBUG] [Thread-205458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:00:24.228 [DEBUG] [Thread-205458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:00:24.229 [DEBUG] [Thread-205458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:00:24.269 [DEBUG] [Thread-205458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:00:24.269 [DEBUG] [Thread-205458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:00:24.272 [DEBUG] [Thread-205458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:00:24.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:00:24.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:00:24.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:00:24.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:00:24.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:00:24.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:00:24.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:00:24.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:00:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:00:24.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.499750 -999.00  +22.50  17.02     23   +0.90 1 1 1 1 1   888    0 24.58 94.66 ----- 17.0 17.0 181.8 23.3 30.0 -31.1 29.3 -32.0 30.1 -28.7 31.0 -30.5
2026-02-15T14:00:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:00:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:00:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.499750
2026-02-15T14:00:24.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:00:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:00:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:00:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:00:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:00:24.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:00:09', tmtdew=25.75, humidity=18.09, cloud=0.0, wind=22.25, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T11:59:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:00:24.297 [DEBUG] [Thread-205458] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:00:24.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:00:24.383 [DEBUG] [Thread-205462] [transport.py] [_log()] starting thread (client mode): 0xa57e1120
2026-02-15T14:00:24.383 [DEBUG] [Thread-205462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:00:24.399 [DEBUG] [Thread-205462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:00:24.399 [INFO] [Thread-205462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:24.408 [DEBUG] [Thread-205462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] client lang: <none>
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] server lang: <none>
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] kex follows: False
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] Compression: none
2026-02-15T14:00:24.409 [DEBUG] [Thread-205462] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:00:24.472 [DEBUG] [Thread-205462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:00:24.473 [DEBUG] [Thread-205462] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:00:24.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:00:24.474 [DEBUG] [Thread-205462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:00:24.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:00:24.531 [DEBUG] [Thread-205462] [transport.py] [_log()] userauth is OK
2026-02-15T14:00:24.531 [DEBUG] [Thread-205462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:00:24.532 [DEBUG] [Thread-205462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:00:24.532 [DEBUG] [Thread-205462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:00:24.532 [DEBUG] [Thread-205462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:00:24.551 [INFO] [Thread-205462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:00:24.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:00:24.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:00:25.393 [DEBUG] [Thread-205462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:00:25.394 [DEBUG] [Thread-205462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:00:25.442 [DEBUG] [Thread-205462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:00:25.442 [DEBUG] [Thread-205462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:00:25.451 [DEBUG] [Thread-205462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:00:25.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:00:25.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:00:25.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:00:25.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:00:25.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:00:25.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:00:25.488 [DEBUG] [Thread-205462] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:00:37.711 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:37.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:38.833 [DEBUG] [Thread-205464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:51.173 [DEBUG] [Thread-205465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:53.885 [DEBUG] [Thread-205466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:00:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:00:55.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:00:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:00:57.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 0, 44), 25.04, 18.71, 0.0, 20.43, 22.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:00:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:00:44
2026-02-15T14:00:57.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:00:57.927 [DEBUG] [Thread-205467] [transport.py] [_log()] starting thread (client mode): 0xa2d4fdc0
2026-02-15T14:00:57.927 [DEBUG] [Thread-205467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:00:57.948 [DEBUG] [Thread-205467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:00:57.948 [INFO] [Thread-205467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:00:57.951 [DEBUG] [Thread-205467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:00:57.951 [DEBUG] [Thread-205467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:00:57.951 [DEBUG] [Thread-205467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:00:57.951 [DEBUG] [Thread-205467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:57.951 [DEBUG] [Thread-205467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:57.951 [DEBUG] [Thread-205467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] client lang: <none>
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] server lang: <none>
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] kex follows: False
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] Compression: none
2026-02-15T14:00:57.952 [DEBUG] [Thread-205467] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:00:57.971 [DEBUG] [Thread-205467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:00:57.972 [DEBUG] [Thread-205467] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:00:57.972 [DEBUG] [Thread-205467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:00:57.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:00:57.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:00:57.974 [DEBUG] [Thread-205467] [transport.py] [_log()] userauth is OK
2026-02-15T14:00:57.975 [DEBUG] [Thread-205467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:00:57.975 [DEBUG] [Thread-205467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:00:57.975 [DEBUG] [Thread-205467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:00:57.975 [DEBUG] [Thread-205467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:00:57.998 [INFO] [Thread-205467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:00:57.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:00:58.652 [DEBUG] [Thread-205467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:00:58.652 [DEBUG] [Thread-205467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:00:58.652 [DEBUG] [Thread-205467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:00:58.693 [DEBUG] [Thread-205467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:00:58.693 [DEBUG] [Thread-205467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:00:58.696 [DEBUG] [Thread-205467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:00:58.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:00:58.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:00:58.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:00:58.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:00:58.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:00:58.724 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:00:58.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:00:58.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:00:58.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:00:58.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.500444 -999.00  +22.30  11.53     24   +1.00 1 1 1 1 1   888    0 24.66 93.13 ----- 11.5 11.5 147.8 22.2 30.0 -29.5 29.1 -28.4 29.9 -28.7 31.1 -30.9
2026-02-15T14:00:58.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:00:58.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:00:58.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.500444
2026-02-15T14:00:58.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:00:58.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:00:58.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:00:58.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:00:58.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:00:58.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:00:44', tmtdew=25.04, humidity=18.71, cloud=0.0, wind=20.43, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:00:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:00:58.726 [DEBUG] [Thread-205467] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:00:58.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:00:58.825 [DEBUG] [Thread-205470] [transport.py] [_log()] starting thread (client mode): 0xa2d4e1d0
2026-02-15T14:00:58.825 [DEBUG] [Thread-205470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:00:58.840 [DEBUG] [Thread-205470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:00:58.840 [INFO] [Thread-205470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:00:58.861 [DEBUG] [Thread-205470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] client lang: <none>
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] server lang: <none>
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] kex follows: False
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] Compression: none
2026-02-15T14:00:58.862 [DEBUG] [Thread-205470] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:00:58.906 [DEBUG] [Thread-205470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:00:58.906 [DEBUG] [Thread-205470] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:00:58.907 [DEBUG] [Thread-205470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:00:58.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:00:58.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:00:58.966 [DEBUG] [Thread-205470] [transport.py] [_log()] userauth is OK
2026-02-15T14:00:58.966 [DEBUG] [Thread-205470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:00:58.967 [DEBUG] [Thread-205470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:00:58.967 [DEBUG] [Thread-205470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:00:58.967 [DEBUG] [Thread-205470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:00:58.986 [INFO] [Thread-205470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:00:58.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:00:58.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:00:59.816 [DEBUG] [Thread-205470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:00:59.816 [DEBUG] [Thread-205470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:00:59.864 [DEBUG] [Thread-205470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:00:59.864 [DEBUG] [Thread-205470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:00:59.873 [DEBUG] [Thread-205470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:00:59.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:00:59.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:00:59.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:00:59.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:00:59.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:00:59.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:00:59.908 [DEBUG] [Thread-205470] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:01:08.919 [DEBUG] [Thread-205472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:01:23.978 [DEBUG] [Thread-205473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:01:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:01:29.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:01:29.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:01:31.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 1, 19), 24.82, 18.96, 0.0, 18.93, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:01:31.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:01:19
2026-02-15T14:01:32.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:01:32.335 [DEBUG] [Thread-205474] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae00
2026-02-15T14:01:32.335 [DEBUG] [Thread-205474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:01:32.355 [DEBUG] [Thread-205474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:01:32.355 [INFO] [Thread-205474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:01:32.358 [DEBUG] [Thread-205474] [transport.py] [_log()] client lang: <none>
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] server lang: <none>
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] kex follows: False
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] Compression: none
2026-02-15T14:01:32.359 [DEBUG] [Thread-205474] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:01:32.377 [DEBUG] [Thread-205474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:01:32.378 [DEBUG] [Thread-205474] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:01:32.378 [DEBUG] [Thread-205474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:01:32.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:01:32.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:01:32.381 [DEBUG] [Thread-205474] [transport.py] [_log()] userauth is OK
2026-02-15T14:01:32.381 [DEBUG] [Thread-205474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:01:32.381 [DEBUG] [Thread-205474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:01:32.381 [DEBUG] [Thread-205474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:01:32.381 [DEBUG] [Thread-205474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:01:32.406 [INFO] [Thread-205474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:01:32.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:01:33.045 [DEBUG] [Thread-205474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:01:33.046 [DEBUG] [Thread-205474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:01:33.046 [DEBUG] [Thread-205474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:01:33.087 [DEBUG] [Thread-205474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:01:33.087 [DEBUG] [Thread-205474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:01:33.090 [DEBUG] [Thread-205474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:01:33.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:01:33.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:01:33.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:01:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:01:33.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:01:33.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:01:33.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:01:33.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:01:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:01:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.500791 -999.00  +22.60  27.10     24   +1.30 1 1 1 1 1   888    0 23.95 86.51 ----- 27.1 27.1 160.6 34.6 30.1 -30.0 29.1 -28.0 30.1 -28.3 31.1 -29.8
2026-02-15T14:01:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:01:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:01:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.500791
2026-02-15T14:01:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:01:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:01:33.114 [DEBUG] [Thread-205474] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:01:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:01:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:01:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:01:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:01:19', tmtdew=24.82, humidity=18.96, cloud=0.0, wind=18.93, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:01:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:01:33.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:01:33.215 [DEBUG] [Thread-205477] [transport.py] [_log()] starting thread (client mode): 0xa2dc0280
2026-02-15T14:01:33.215 [DEBUG] [Thread-205477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:01:33.230 [DEBUG] [Thread-205477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:01:33.230 [INFO] [Thread-205477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:01:33.238 [DEBUG] [Thread-205477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:01:33.238 [DEBUG] [Thread-205477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:01:33.238 [DEBUG] [Thread-205477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:01:33.238 [DEBUG] [Thread-205477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:01:33.238 [DEBUG] [Thread-205477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:01:33.238 [DEBUG] [Thread-205477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] client lang: <none>
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] server lang: <none>
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] kex follows: False
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:01:33.239 [DEBUG] [Thread-205477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:01:33.240 [DEBUG] [Thread-205477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:01:33.240 [DEBUG] [Thread-205477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:01:33.240 [DEBUG] [Thread-205477] [transport.py] [_log()] Compression: none
2026-02-15T14:01:33.240 [DEBUG] [Thread-205477] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:01:33.304 [DEBUG] [Thread-205477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:01:33.305 [DEBUG] [Thread-205477] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:01:33.305 [DEBUG] [Thread-205477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:01:33.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:01:33.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:01:33.365 [DEBUG] [Thread-205477] [transport.py] [_log()] userauth is OK
2026-02-15T14:01:33.365 [DEBUG] [Thread-205477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:01:33.365 [DEBUG] [Thread-205477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:01:33.365 [DEBUG] [Thread-205477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:01:33.366 [DEBUG] [Thread-205477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:01:33.388 [INFO] [Thread-205477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:01:33.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:01:33.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:01:34.213 [DEBUG] [Thread-205477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:01:34.213 [DEBUG] [Thread-205477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:01:34.263 [DEBUG] [Thread-205477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:01:34.263 [DEBUG] [Thread-205477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:01:34.278 [DEBUG] [Thread-205477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:01:34.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:01:34.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:01:34.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:01:34.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:01:34.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:01:34.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:01:34.318 [DEBUG] [Thread-205477] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:01:37.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:01:37.855 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:01:39.014 [DEBUG] [Thread-205479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:01:51.207 [DEBUG] [Thread-205480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:01:54.069 [DEBUG] [Thread-205481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:04.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:02:04.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:02:04.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:02:06.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 1, 54), 25.0, 18.87, 0.0, 21.63, 22.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:02:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:01:54
2026-02-15T14:02:06.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:02:06.980 [DEBUG] [Thread-205482] [transport.py] [_log()] starting thread (client mode): 0xa2dc0dc0
2026-02-15T14:02:06.981 [DEBUG] [Thread-205482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:02:07.000 [DEBUG] [Thread-205482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:02:07.000 [INFO] [Thread-205482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:02:07.004 [DEBUG] [Thread-205482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:02:07.004 [DEBUG] [Thread-205482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:02:07.004 [DEBUG] [Thread-205482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:02:07.004 [DEBUG] [Thread-205482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:07.004 [DEBUG] [Thread-205482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:07.004 [DEBUG] [Thread-205482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] client lang: <none>
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] server lang: <none>
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] kex follows: False
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] Compression: none
2026-02-15T14:02:07.005 [DEBUG] [Thread-205482] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:02:07.023 [DEBUG] [Thread-205482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:02:07.024 [DEBUG] [Thread-205482] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:02:07.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:02:07.025 [DEBUG] [Thread-205482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:02:07.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:02:07.027 [DEBUG] [Thread-205482] [transport.py] [_log()] userauth is OK
2026-02-15T14:02:07.027 [DEBUG] [Thread-205482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:02:07.027 [DEBUG] [Thread-205482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:02:07.027 [DEBUG] [Thread-205482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:02:07.028 [DEBUG] [Thread-205482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:02:07.052 [INFO] [Thread-205482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:02:07.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:02:07.666 [DEBUG] [Thread-205482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:02:07.666 [DEBUG] [Thread-205482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:02:07.667 [DEBUG] [Thread-205482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:02:07.707 [DEBUG] [Thread-205482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:02:07.707 [DEBUG] [Thread-205482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:02:07.711 [DEBUG] [Thread-205482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:02:07.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:02:07.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:02:07.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:02:07.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:02:07.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:02:07.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:02:07.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:02:07.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:02:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:02:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.501139 -999.00  +22.40  10.08     25   +1.40 1 1 1 1 1   888    0 24.05 80.61 ----- 10.1 10.1 143.2 28.9 29.9 -30.3 29.0 -28.6 29.8 -27.9 30.9 -30.9
2026-02-15T14:02:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:02:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:02:07.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.501139
2026-02-15T14:02:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:02:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:02:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:02:07.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:02:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:02:07.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:01:54', tmtdew=25.0, humidity=18.87, cloud=0.0, wind=21.63, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:01:38.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:02:07.736 [DEBUG] [Thread-205482] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:02:07.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:02:07.831 [DEBUG] [Thread-205485] [transport.py] [_log()] starting thread (client mode): 0xa2d182b0
2026-02-15T14:02:07.831 [DEBUG] [Thread-205485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:02:07.846 [DEBUG] [Thread-205485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:02:07.846 [INFO] [Thread-205485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] client lang: <none>
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] server lang: <none>
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] kex follows: False
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:02:07.854 [DEBUG] [Thread-205485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:02:07.855 [DEBUG] [Thread-205485] [transport.py] [_log()] Compression: none
2026-02-15T14:02:07.855 [DEBUG] [Thread-205485] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:02:07.916 [DEBUG] [Thread-205485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:02:07.917 [DEBUG] [Thread-205485] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:02:07.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:02:07.918 [DEBUG] [Thread-205485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:02:07.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:02:07.975 [DEBUG] [Thread-205485] [transport.py] [_log()] userauth is OK
2026-02-15T14:02:07.975 [DEBUG] [Thread-205485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:02:07.976 [DEBUG] [Thread-205485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:02:07.976 [DEBUG] [Thread-205485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:02:07.976 [DEBUG] [Thread-205485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:02:07.994 [INFO] [Thread-205485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:02:07.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:02:07.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:02:08.852 [DEBUG] [Thread-205485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:02:08.853 [DEBUG] [Thread-205485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:02:08.903 [DEBUG] [Thread-205485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:02:08.903 [DEBUG] [Thread-205485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:02:08.921 [DEBUG] [Thread-205485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:02:08.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:02:08.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:02:08.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:02:08.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:02:08.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:02:08.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:02:08.964 [DEBUG] [Thread-205485] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:02:09.105 [DEBUG] [Thread-205487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:24.167 [DEBUG] [Thread-205488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:37.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:37.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:38.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:02:38.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:02:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:02:39.205 [DEBUG] [Thread-205489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:40.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 2, 30), 24.7, 19.26, 0.0, 20.96, 22.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:02:40.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:02:30
2026-02-15T14:02:41.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:02:41.345 [DEBUG] [Thread-205490] [transport.py] [_log()] starting thread (client mode): 0xa2d1bfa0
2026-02-15T14:02:41.345 [DEBUG] [Thread-205490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:02:41.364 [DEBUG] [Thread-205490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:02:41.364 [INFO] [Thread-205490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] client lang: <none>
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] server lang: <none>
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] kex follows: False
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:02:41.367 [DEBUG] [Thread-205490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:02:41.368 [DEBUG] [Thread-205490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:02:41.368 [DEBUG] [Thread-205490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:02:41.368 [DEBUG] [Thread-205490] [transport.py] [_log()] Compression: none
2026-02-15T14:02:41.368 [DEBUG] [Thread-205490] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:02:41.385 [DEBUG] [Thread-205490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:02:41.385 [DEBUG] [Thread-205490] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:02:41.386 [DEBUG] [Thread-205490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:02:41.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:02:41.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:02:41.387 [DEBUG] [Thread-205490] [transport.py] [_log()] userauth is OK
2026-02-15T14:02:41.388 [DEBUG] [Thread-205490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:02:41.388 [DEBUG] [Thread-205490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:02:41.388 [DEBUG] [Thread-205490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:02:41.388 [DEBUG] [Thread-205490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:02:41.410 [INFO] [Thread-205490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:02:41.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:02:42.044 [DEBUG] [Thread-205490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:02:42.045 [DEBUG] [Thread-205490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:02:42.045 [DEBUG] [Thread-205490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:02:42.085 [DEBUG] [Thread-205490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:02:42.085 [DEBUG] [Thread-205490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:02:42.089 [DEBUG] [Thread-205490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:02:42.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:02:42.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:02:42.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:02:42.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:02:42.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:02:42.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:02:42.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:02:42.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:02:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:02:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.501486 -999.00  +22.30  14.92     25   +1.30 1 1 1 1 1   888    0 23.94 76.64 ----- 14.9 14.9 130.4 18.9 30.0 -29.2 29.1 -28.5 30.0 -27.8 31.1 -29.3
2026-02-15T14:02:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:02:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:02:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.501486
2026-02-15T14:02:42.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:02:42.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:02:42.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:02:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:02:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:02:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:02:30', tmtdew=24.7, humidity=19.26, cloud=0.0, wind=20.96, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:02:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:02:42.111 [DEBUG] [Thread-205490] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:02:42.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:02:42.207 [DEBUG] [Thread-205493] [transport.py] [_log()] starting thread (client mode): 0xa2dc02b0
2026-02-15T14:02:42.208 [DEBUG] [Thread-205493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:02:42.223 [DEBUG] [Thread-205493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:02:42.223 [INFO] [Thread-205493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:02:42.230 [DEBUG] [Thread-205493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:02:42.231 [DEBUG] [Thread-205493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] client lang: <none>
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] server lang: <none>
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] kex follows: False
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:02:42.232 [DEBUG] [Thread-205493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:02:42.233 [DEBUG] [Thread-205493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:02:42.233 [DEBUG] [Thread-205493] [transport.py] [_log()] Compression: none
2026-02-15T14:02:42.233 [DEBUG] [Thread-205493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:02:42.291 [DEBUG] [Thread-205493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:02:42.292 [DEBUG] [Thread-205493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:02:42.292 [DEBUG] [Thread-205493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:02:42.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:02:42.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:02:42.347 [DEBUG] [Thread-205493] [transport.py] [_log()] userauth is OK
2026-02-15T14:02:42.347 [DEBUG] [Thread-205493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:02:42.348 [DEBUG] [Thread-205493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:02:42.348 [DEBUG] [Thread-205493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:02:42.348 [DEBUG] [Thread-205493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:02:42.367 [INFO] [Thread-205493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:02:42.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:02:42.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:02:43.190 [DEBUG] [Thread-205493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:02:43.190 [DEBUG] [Thread-205493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:02:43.238 [DEBUG] [Thread-205493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:02:43.238 [DEBUG] [Thread-205493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:02:43.247 [DEBUG] [Thread-205493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:02:43.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:02:43.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:02:43.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:02:43.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:02:43.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:02:43.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:02:43.280 [DEBUG] [Thread-205493] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:02:51.273 [DEBUG] [Thread-205495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:02:54.247 [DEBUG] [Thread-205496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:09.302 [DEBUG] [Thread-205497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:13.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:03:13.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:03:13.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:03:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 3, 5), 24.97, 18.89, 0.0, 20.35, 22.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:03:15.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:03:05
2026-02-15T14:03:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:03:15.684 [DEBUG] [Thread-205498] [transport.py] [_log()] starting thread (client mode): 0xa2db5ea0
2026-02-15T14:03:15.684 [DEBUG] [Thread-205498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:03:15.706 [DEBUG] [Thread-205498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:03:15.706 [INFO] [Thread-205498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:03:15.710 [DEBUG] [Thread-205498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:03:15.710 [DEBUG] [Thread-205498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:03:15.710 [DEBUG] [Thread-205498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] client lang: <none>
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] server lang: <none>
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] kex follows: False
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:03:15.711 [DEBUG] [Thread-205498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:03:15.712 [DEBUG] [Thread-205498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:03:15.712 [DEBUG] [Thread-205498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:03:15.712 [DEBUG] [Thread-205498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:03:15.712 [DEBUG] [Thread-205498] [transport.py] [_log()] Compression: none
2026-02-15T14:03:15.712 [DEBUG] [Thread-205498] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:03:15.729 [DEBUG] [Thread-205498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:03:15.730 [DEBUG] [Thread-205498] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:03:15.730 [DEBUG] [Thread-205498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:03:15.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:03:15.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:03:15.732 [DEBUG] [Thread-205498] [transport.py] [_log()] userauth is OK
2026-02-15T14:03:15.732 [DEBUG] [Thread-205498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:03:15.733 [DEBUG] [Thread-205498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:03:15.733 [DEBUG] [Thread-205498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:03:15.733 [DEBUG] [Thread-205498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:03:15.757 [INFO] [Thread-205498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:03:15.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:03:16.362 [DEBUG] [Thread-205498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:03:16.362 [DEBUG] [Thread-205498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:03:16.362 [DEBUG] [Thread-205498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:03:16.402 [DEBUG] [Thread-205498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:03:16.403 [DEBUG] [Thread-205498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:03:16.406 [DEBUG] [Thread-205498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:03:16.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:03:16.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:03:16.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:03:16.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:03:16.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:03:16.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:03:16.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:03:16.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:03:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:03:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.501833 -999.00  +22.60  11.60     25   +1.70 1 1 1 1 1   888    0 23.53 65.25 ----- 11.6 11.6 145.9 17.2 30.1 -29.2 29.2 -29.9 30.1 -26.6 31.1 -29.2
2026-02-15T14:03:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:03:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:03:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.501833
2026-02-15T14:03:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:03:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:03:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:03:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:03:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:03:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:03:05', tmtdew=24.97, humidity=18.89, cloud=0.0, wind=20.35, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:02:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:03:16.434 [DEBUG] [Thread-205498] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:03:16.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:03:16.529 [DEBUG] [Thread-205501] [transport.py] [_log()] starting thread (client mode): 0xa2dc0df0
2026-02-15T14:03:16.530 [DEBUG] [Thread-205501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:03:16.545 [DEBUG] [Thread-205501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:03:16.545 [INFO] [Thread-205501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:03:16.554 [DEBUG] [Thread-205501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:03:16.554 [DEBUG] [Thread-205501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:03:16.554 [DEBUG] [Thread-205501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:03:16.554 [DEBUG] [Thread-205501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:16.554 [DEBUG] [Thread-205501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] client lang: <none>
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] server lang: <none>
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] kex follows: False
2026-02-15T14:03:16.555 [DEBUG] [Thread-205501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:03:16.556 [DEBUG] [Thread-205501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:03:16.556 [DEBUG] [Thread-205501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:03:16.556 [DEBUG] [Thread-205501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:03:16.556 [DEBUG] [Thread-205501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:03:16.556 [DEBUG] [Thread-205501] [transport.py] [_log()] Compression: none
2026-02-15T14:03:16.556 [DEBUG] [Thread-205501] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:03:16.611 [DEBUG] [Thread-205501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:03:16.612 [DEBUG] [Thread-205501] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:03:16.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:03:16.613 [DEBUG] [Thread-205501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:03:16.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:03:16.667 [DEBUG] [Thread-205501] [transport.py] [_log()] userauth is OK
2026-02-15T14:03:16.667 [DEBUG] [Thread-205501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:03:16.667 [DEBUG] [Thread-205501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:03:16.668 [DEBUG] [Thread-205501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:03:16.668 [DEBUG] [Thread-205501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:03:16.686 [INFO] [Thread-205501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:03:16.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:03:16.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:03:17.503 [DEBUG] [Thread-205501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:03:17.503 [DEBUG] [Thread-205501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:03:17.552 [DEBUG] [Thread-205501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:03:17.552 [DEBUG] [Thread-205501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:03:17.562 [DEBUG] [Thread-205501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:03:17.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:03:17.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:03:17.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:03:17.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:03:17.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:03:17.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:03:17.602 [DEBUG] [Thread-205501] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:03:24.338 [DEBUG] [Thread-205503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:38.139 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:38.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:39.390 [DEBUG] [Thread-205504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:47.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:03:47.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:03:47.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:03:49.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 3, 40), 25.73, 17.91, 0.0, 19.48, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:03:49.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:03:40
2026-02-15T14:03:49.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:03:50.107 [DEBUG] [Thread-205505] [transport.py] [_log()] starting thread (client mode): 0xa2d4dd20
2026-02-15T14:03:50.107 [DEBUG] [Thread-205505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:03:50.126 [DEBUG] [Thread-205505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:03:50.126 [INFO] [Thread-205505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:50.129 [DEBUG] [Thread-205505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] client lang: <none>
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] server lang: <none>
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] kex follows: False
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] Compression: none
2026-02-15T14:03:50.130 [DEBUG] [Thread-205505] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:03:50.148 [DEBUG] [Thread-205505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:03:50.148 [DEBUG] [Thread-205505] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:03:50.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:03:50.149 [DEBUG] [Thread-205505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:03:50.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:03:50.152 [DEBUG] [Thread-205505] [transport.py] [_log()] userauth is OK
2026-02-15T14:03:50.153 [DEBUG] [Thread-205505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:03:50.153 [DEBUG] [Thread-205505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:03:50.153 [DEBUG] [Thread-205505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:03:50.153 [DEBUG] [Thread-205505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:03:50.178 [INFO] [Thread-205505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:03:50.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:03:50.813 [DEBUG] [Thread-205505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:03:50.814 [DEBUG] [Thread-205505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:03:50.814 [DEBUG] [Thread-205505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:03:50.854 [DEBUG] [Thread-205505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:03:50.855 [DEBUG] [Thread-205505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:03:50.858 [DEBUG] [Thread-205505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:03:50.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:03:50.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:03:50.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:03:50.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:03:50.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:03:50.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:03:50.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:03:50.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:03:50.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:03:50.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.502180 -999.00  +23.00  14.65     25   +1.90 1 1 1 1 1   888    0 23.49 52.79 ----- 14.7 14.7 133.6 18.6 30.2 -28.7 29.4 -27.5 30.2 -27.2 31.3 -28.4
2026-02-15T14:03:50.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:03:50.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:03:50.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.502180
2026-02-15T14:03:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:03:50.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:03:50.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:03:50.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:03:50.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:03:50.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:03:40', tmtdew=25.73, humidity=17.91, cloud=0.0, wind=19.48, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:03:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:03:50.885 [DEBUG] [Thread-205505] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:03:50.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:03:50.982 [DEBUG] [Thread-205508] [transport.py] [_log()] starting thread (client mode): 0xa2d4ffd0
2026-02-15T14:03:50.982 [DEBUG] [Thread-205508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:03:50.997 [DEBUG] [Thread-205508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:03:50.997 [INFO] [Thread-205508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:03:51.004 [DEBUG] [Thread-205508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:03:51.005 [DEBUG] [Thread-205508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] client lang: <none>
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] server lang: <none>
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] kex follows: False
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:03:51.006 [DEBUG] [Thread-205508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:03:51.007 [DEBUG] [Thread-205508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:03:51.007 [DEBUG] [Thread-205508] [transport.py] [_log()] Compression: none
2026-02-15T14:03:51.007 [DEBUG] [Thread-205508] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:03:51.064 [DEBUG] [Thread-205508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:03:51.065 [DEBUG] [Thread-205508] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:03:51.065 [DEBUG] [Thread-205508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:03:51.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:03:51.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:03:51.123 [DEBUG] [Thread-205508] [transport.py] [_log()] userauth is OK
2026-02-15T14:03:51.124 [DEBUG] [Thread-205508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:03:51.124 [DEBUG] [Thread-205508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:03:51.124 [DEBUG] [Thread-205508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:03:51.124 [DEBUG] [Thread-205508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:03:51.142 [INFO] [Thread-205508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:03:51.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:03:51.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:03:51.315 [DEBUG] [Thread-205510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:03:51.979 [DEBUG] [Thread-205508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:03:51.979 [DEBUG] [Thread-205508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:03:52.030 [DEBUG] [Thread-205508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:03:52.031 [DEBUG] [Thread-205508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:03:52.043 [DEBUG] [Thread-205508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:03:52.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:03:52.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:03:52.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:03:52.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:03:52.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:03:52.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:03:52.087 [DEBUG] [Thread-205508] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:03:54.427 [DEBUG] [Thread-205511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:09.481 [DEBUG] [Thread-205512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:22.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:04:22.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:04:22.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:04:24.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 3, 40), 25.73, 17.91, 0.0, 19.48, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:04:24.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:03:40
2026-02-15T14:04:24.519 [DEBUG] [Thread-205513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:24.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:04:25.022 [DEBUG] [Thread-205514] [transport.py] [_log()] starting thread (client mode): 0xa2d1b640
2026-02-15T14:04:25.022 [DEBUG] [Thread-205514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:04:25.042 [DEBUG] [Thread-205514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:04:25.042 [INFO] [Thread-205514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:04:25.045 [DEBUG] [Thread-205514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:04:25.045 [DEBUG] [Thread-205514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:04:25.045 [DEBUG] [Thread-205514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] client lang: <none>
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] server lang: <none>
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] kex follows: False
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] Compression: none
2026-02-15T14:04:25.046 [DEBUG] [Thread-205514] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:04:25.063 [DEBUG] [Thread-205514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:04:25.063 [DEBUG] [Thread-205514] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:04:25.063 [DEBUG] [Thread-205514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:04:25.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:04:25.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:04:25.065 [DEBUG] [Thread-205514] [transport.py] [_log()] userauth is OK
2026-02-15T14:04:25.066 [DEBUG] [Thread-205514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:04:25.066 [DEBUG] [Thread-205514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:04:25.066 [DEBUG] [Thread-205514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:04:25.066 [DEBUG] [Thread-205514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:04:25.091 [INFO] [Thread-205514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:04:25.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:04:25.726 [DEBUG] [Thread-205514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:04:25.727 [DEBUG] [Thread-205514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:04:25.727 [DEBUG] [Thread-205514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:04:25.768 [DEBUG] [Thread-205514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:04:25.768 [DEBUG] [Thread-205514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:04:25.770 [DEBUG] [Thread-205514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:04:25.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:04:25.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:04:25.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:04:25.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:04:25.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:04:25.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:04:25.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:04:25.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.502527 -999.00  +23.40  11.39     24   +2.10 1 1 1 1 1   888    0 22.86 46.25 ----- 11.4 11.4 138.0 20.1 30.3 -28.9 29.6 -28.2 30.4 -26.7 31.4 -27.8
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.502527
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:04:25.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:03:40', tmtdew=25.73, humidity=17.91, cloud=0.0, wind=19.48, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:03:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:04:25.790 [DEBUG] [Thread-205514] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:04:25.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:04:25.871 [DEBUG] [Thread-205517] [transport.py] [_log()] starting thread (client mode): 0xa2d4e5c0
2026-02-15T14:04:25.871 [DEBUG] [Thread-205517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:04:25.886 [DEBUG] [Thread-205517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:04:25.886 [INFO] [Thread-205517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] client lang: <none>
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] server lang: <none>
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] kex follows: False
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] Compression: none
2026-02-15T14:04:25.894 [DEBUG] [Thread-205517] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:04:25.953 [DEBUG] [Thread-205517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:04:25.953 [DEBUG] [Thread-205517] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:04:25.953 [DEBUG] [Thread-205517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:04:25.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:04:25.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:04:26.011 [DEBUG] [Thread-205517] [transport.py] [_log()] userauth is OK
2026-02-15T14:04:26.011 [DEBUG] [Thread-205517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:04:26.011 [DEBUG] [Thread-205517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:04:26.011 [DEBUG] [Thread-205517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:04:26.011 [DEBUG] [Thread-205517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:04:26.025 [INFO] [Thread-205517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:04:26.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:04:26.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:04:26.880 [DEBUG] [Thread-205517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:04:26.880 [DEBUG] [Thread-205517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:04:26.935 [DEBUG] [Thread-205517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:04:26.935 [DEBUG] [Thread-205517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:04:26.948 [DEBUG] [Thread-205517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:04:26.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:04:26.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:04:26.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:04:26.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:04:26.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:04:26.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:04:26.984 [DEBUG] [Thread-205517] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:04:38.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:38.293 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:39.558 [DEBUG] [Thread-205519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:51.349 [DEBUG] [Thread-205520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:54.617 [DEBUG] [Thread-205521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:04:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:04:57.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:04:57.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:04:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 4, 16), 24.11, 19.84, 0.0, 12.34, 22.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:04:58.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:04:16
2026-02-15T14:04:59.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:04:59.432 [DEBUG] [Thread-205522] [transport.py] [_log()] starting thread (client mode): 0xa2d4eec0
2026-02-15T14:04:59.432 [DEBUG] [Thread-205522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:04:59.452 [DEBUG] [Thread-205522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:04:59.452 [INFO] [Thread-205522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:04:59.455 [DEBUG] [Thread-205522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] client lang: <none>
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] server lang: <none>
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] kex follows: False
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:04:59.456 [DEBUG] [Thread-205522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:04:59.457 [DEBUG] [Thread-205522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:04:59.457 [DEBUG] [Thread-205522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:04:59.457 [DEBUG] [Thread-205522] [transport.py] [_log()] Compression: none
2026-02-15T14:04:59.457 [DEBUG] [Thread-205522] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:04:59.476 [DEBUG] [Thread-205522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:04:59.476 [DEBUG] [Thread-205522] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:04:59.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:04:59.478 [DEBUG] [Thread-205522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:04:59.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:04:59.480 [DEBUG] [Thread-205522] [transport.py] [_log()] userauth is OK
2026-02-15T14:04:59.481 [DEBUG] [Thread-205522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:04:59.481 [DEBUG] [Thread-205522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:04:59.481 [DEBUG] [Thread-205522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:04:59.481 [DEBUG] [Thread-205522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:04:59.517 [INFO] [Thread-205522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:04:59.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:05:00.130 [DEBUG] [Thread-205522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:05:00.130 [DEBUG] [Thread-205522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:05:00.130 [DEBUG] [Thread-205522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:05:00.171 [DEBUG] [Thread-205522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:05:00.171 [DEBUG] [Thread-205522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:05:00.174 [DEBUG] [Thread-205522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:05:00.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:05:00.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:05:00.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:05:00.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:05:00.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:05:00.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:05:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:05:00.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:05:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:05:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.502875 -999.00  +23.60  10.89     23   +1.70 1 1 1 1 1   888    0 22.83 38.04 ----- 10.9 10.9 132.0 18.0 30.4 -28.7 29.8 -27.9 30.5 -27.2 31.6 -29.4
2026-02-15T14:05:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:05:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:05:00.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.502875
2026-02-15T14:05:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:05:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:05:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:05:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:05:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:05:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:04:16', tmtdew=24.11, humidity=19.84, cloud=0.0, wind=12.34, temperature=22.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:04:08.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:05:00.202 [DEBUG] [Thread-205522] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:05:00.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:05:00.311 [DEBUG] [Thread-205525] [transport.py] [_log()] starting thread (client mode): 0xa2dc0790
2026-02-15T14:05:00.312 [DEBUG] [Thread-205525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:05:00.326 [DEBUG] [Thread-205525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:05:00.327 [INFO] [Thread-205525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:05:00.334 [DEBUG] [Thread-205525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:05:00.334 [DEBUG] [Thread-205525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] client lang: <none>
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] server lang: <none>
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] kex follows: False
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:05:00.335 [DEBUG] [Thread-205525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:05:00.336 [DEBUG] [Thread-205525] [transport.py] [_log()] Compression: none
2026-02-15T14:05:00.336 [DEBUG] [Thread-205525] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:05:00.392 [DEBUG] [Thread-205525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:05:00.392 [DEBUG] [Thread-205525] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:05:00.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:05:00.393 [DEBUG] [Thread-205525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:05:00.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:05:00.452 [DEBUG] [Thread-205525] [transport.py] [_log()] userauth is OK
2026-02-15T14:05:00.453 [DEBUG] [Thread-205525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:05:00.453 [DEBUG] [Thread-205525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:05:00.453 [DEBUG] [Thread-205525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:05:00.453 [DEBUG] [Thread-205525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:05:00.471 [INFO] [Thread-205525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:05:00.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:05:00.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:05:01.285 [DEBUG] [Thread-205525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:05:01.285 [DEBUG] [Thread-205525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:05:01.334 [DEBUG] [Thread-205525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:05:01.335 [DEBUG] [Thread-205525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:05:01.346 [DEBUG] [Thread-205525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:05:01.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:05:01.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:05:01.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:05:01.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:05:01.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:05:01.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:05:01.388 [DEBUG] [Thread-205525] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:05:09.655 [DEBUG] [Thread-205527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:05:24.703 [DEBUG] [Thread-205528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:05:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:05:31.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:05:31.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:05:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 4, 52), 24.72, 19.21, 0.0, 16.41, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:05:33.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:04:52
2026-02-15T14:05:33.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:05:33.915 [DEBUG] [Thread-205529] [transport.py] [_log()] starting thread (client mode): 0xa2d19960
2026-02-15T14:05:33.915 [DEBUG] [Thread-205529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:05:33.934 [DEBUG] [Thread-205529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:05:33.934 [INFO] [Thread-205529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:05:33.937 [DEBUG] [Thread-205529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] client lang: <none>
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] server lang: <none>
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] kex follows: False
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] Compression: none
2026-02-15T14:05:33.938 [DEBUG] [Thread-205529] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:05:33.955 [DEBUG] [Thread-205529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:05:33.956 [DEBUG] [Thread-205529] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:05:33.956 [DEBUG] [Thread-205529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:05:33.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:05:33.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:05:33.959 [DEBUG] [Thread-205529] [transport.py] [_log()] userauth is OK
2026-02-15T14:05:33.959 [DEBUG] [Thread-205529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:05:33.959 [DEBUG] [Thread-205529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:05:33.959 [DEBUG] [Thread-205529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:05:33.959 [DEBUG] [Thread-205529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:05:33.996 [INFO] [Thread-205529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:05:33.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:05:34.596 [DEBUG] [Thread-205529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:05:34.596 [DEBUG] [Thread-205529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:05:34.597 [DEBUG] [Thread-205529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:05:34.637 [DEBUG] [Thread-205529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:05:34.637 [DEBUG] [Thread-205529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:05:34.641 [DEBUG] [Thread-205529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:05:34.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:05:34.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:05:34.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:05:34.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:05:34.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:05:34.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:05:34.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:05:34.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.503569 -999.00  +23.40  20.39     23   +1.50 1 1 1 1 1   888    0 22.09 26.26 ----- 20.4 20.4 163.2 26.8 30.6 -29.6 29.8 -28.8 30.6 -28.7 31.8 -28.8
2026-02-15T14:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.503569
2026-02-15T14:05:34.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:05:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:05:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:05:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:05:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:05:34.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:04:52', tmtdew=24.72, humidity=19.21, cloud=0.0, wind=16.41, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:05:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:05:34.667 [DEBUG] [Thread-205529] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:05:34.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:05:34.764 [DEBUG] [Thread-205532] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-15T14:05:34.764 [DEBUG] [Thread-205532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:05:34.780 [DEBUG] [Thread-205532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:05:34.780 [INFO] [Thread-205532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:05:34.788 [DEBUG] [Thread-205532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] client lang: <none>
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] server lang: <none>
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] kex follows: False
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] Compression: none
2026-02-15T14:05:34.789 [DEBUG] [Thread-205532] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:05:34.848 [DEBUG] [Thread-205532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:05:34.848 [DEBUG] [Thread-205532] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:05:34.849 [DEBUG] [Thread-205532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:05:34.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:05:34.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:05:34.904 [DEBUG] [Thread-205532] [transport.py] [_log()] userauth is OK
2026-02-15T14:05:34.904 [DEBUG] [Thread-205532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:05:34.904 [DEBUG] [Thread-205532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:05:34.904 [DEBUG] [Thread-205532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:05:34.904 [DEBUG] [Thread-205532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:05:34.923 [INFO] [Thread-205532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:05:34.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:05:34.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:05:35.769 [DEBUG] [Thread-205532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:05:35.769 [DEBUG] [Thread-205532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:05:35.816 [DEBUG] [Thread-205532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:05:35.817 [DEBUG] [Thread-205532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:05:35.826 [DEBUG] [Thread-205532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:05:35.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:05:35.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:05:35.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:05:35.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:05:35.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:05:35.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:05:35.863 [DEBUG] [Thread-205532] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:05:38.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:05:38.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:05:39.739 [DEBUG] [Thread-205534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:05:51.388 [DEBUG] [Thread-205535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:05:54.798 [DEBUG] [Thread-205536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:06:05.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:06:05.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:06:07.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 5, 27), 25.21, 18.61, 0.0, 20.7, 22.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:06:07.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:05:27
2026-02-15T14:06:08.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:06:08.508 [DEBUG] [Thread-205537] [transport.py] [_log()] starting thread (client mode): 0xa2d19330
2026-02-15T14:06:08.508 [DEBUG] [Thread-205537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:06:08.529 [DEBUG] [Thread-205537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:06:08.529 [INFO] [Thread-205537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:06:08.533 [DEBUG] [Thread-205537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] client lang: <none>
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] server lang: <none>
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] kex follows: False
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] Compression: none
2026-02-15T14:06:08.534 [DEBUG] [Thread-205537] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:06:08.554 [DEBUG] [Thread-205537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:06:08.556 [DEBUG] [Thread-205537] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:06:08.556 [DEBUG] [Thread-205537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:06:08.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:06:08.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:06:08.558 [DEBUG] [Thread-205537] [transport.py] [_log()] userauth is OK
2026-02-15T14:06:08.559 [DEBUG] [Thread-205537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:06:08.559 [DEBUG] [Thread-205537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:06:08.559 [DEBUG] [Thread-205537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:06:08.559 [DEBUG] [Thread-205537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:06:08.595 [INFO] [Thread-205537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:06:08.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:06:09.193 [DEBUG] [Thread-205537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:06:09.194 [DEBUG] [Thread-205537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:06:09.194 [DEBUG] [Thread-205537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:06:09.234 [DEBUG] [Thread-205537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:06:09.235 [DEBUG] [Thread-205537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:06:09.238 [DEBUG] [Thread-205537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:06:09.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:06:09.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:06:09.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:06:09.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:06:09.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:06:09.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:06:09.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:06:09.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:06:09.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:06:09.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.503916 -999.00  +22.90  13.87     23   +1.10 1 1 1 1 1   888    0 22.49 20.45 ----- 13.9 13.9 140.0 27.8 30.4 -31.7 29.6 -30.1 30.4 -29.1 31.5 -30.9
2026-02-15T14:06:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:06:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:06:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.503916
2026-02-15T14:06:09.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:06:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:06:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:06:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:06:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:06:09.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:05:27', tmtdew=25.21, humidity=18.61, cloud=0.0, wind=20.7, temperature=22.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:05:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:06:09.266 [DEBUG] [Thread-205537] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:06:09.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:06:09.362 [DEBUG] [Thread-205540] [transport.py] [_log()] starting thread (client mode): 0xa57c1a20
2026-02-15T14:06:09.363 [DEBUG] [Thread-205540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:06:09.377 [DEBUG] [Thread-205540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:06:09.377 [INFO] [Thread-205540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] client lang: <none>
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] server lang: <none>
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] kex follows: False
2026-02-15T14:06:09.385 [DEBUG] [Thread-205540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:06:09.386 [DEBUG] [Thread-205540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:06:09.386 [DEBUG] [Thread-205540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:06:09.386 [DEBUG] [Thread-205540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:06:09.386 [DEBUG] [Thread-205540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:06:09.386 [DEBUG] [Thread-205540] [transport.py] [_log()] Compression: none
2026-02-15T14:06:09.386 [DEBUG] [Thread-205540] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:06:09.445 [DEBUG] [Thread-205540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:06:09.446 [DEBUG] [Thread-205540] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:06:09.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:06:09.447 [DEBUG] [Thread-205540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:06:09.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:06:09.505 [DEBUG] [Thread-205540] [transport.py] [_log()] userauth is OK
2026-02-15T14:06:09.505 [DEBUG] [Thread-205540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:06:09.505 [DEBUG] [Thread-205540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:06:09.506 [DEBUG] [Thread-205540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:06:09.506 [DEBUG] [Thread-205540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:06:09.525 [INFO] [Thread-205540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:06:09.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:06:09.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:06:09.836 [DEBUG] [Thread-205542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:10.342 [DEBUG] [Thread-205540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:06:10.342 [DEBUG] [Thread-205540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:06:10.390 [DEBUG] [Thread-205540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:06:10.391 [DEBUG] [Thread-205540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:06:10.400 [DEBUG] [Thread-205540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:06:10.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:06: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')
2026-02-15T14:06:10.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:06:10.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:06:10.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:06:10.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:06:10.442 [DEBUG] [Thread-205540] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:06:24.887 [DEBUG] [Thread-205543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:38.576 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:38.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:39.923 [DEBUG] [Thread-205544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:40.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:06:40.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:06:40.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:06:42.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 6, 2), 25.19, 18.66, 0.0, 22.2, 22.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:06:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:06:02
2026-02-15T14:06:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:06:43.096 [DEBUG] [Thread-205545] [transport.py] [_log()] starting thread (client mode): 0xa57c2bf0
2026-02-15T14:06:43.097 [DEBUG] [Thread-205545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:06:43.116 [DEBUG] [Thread-205545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:06:43.116 [INFO] [Thread-205545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:06:43.119 [DEBUG] [Thread-205545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:06:43.119 [DEBUG] [Thread-205545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:06:43.119 [DEBUG] [Thread-205545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:06:43.119 [DEBUG] [Thread-205545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] client lang: <none>
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] server lang: <none>
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] kex follows: False
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] Compression: none
2026-02-15T14:06:43.120 [DEBUG] [Thread-205545] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:06:43.137 [DEBUG] [Thread-205545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:06:43.138 [DEBUG] [Thread-205545] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:06:43.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:06:43.139 [DEBUG] [Thread-205545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:06:43.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:06:43.148 [DEBUG] [Thread-205545] [transport.py] [_log()] userauth is OK
2026-02-15T14:06:43.148 [DEBUG] [Thread-205545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:06:43.149 [DEBUG] [Thread-205545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:06:43.149 [DEBUG] [Thread-205545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:06:43.149 [DEBUG] [Thread-205545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:06:43.172 [INFO] [Thread-205545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:06:43.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:06:43.947 [DEBUG] [Thread-205545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:06:43.948 [DEBUG] [Thread-205545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:06:43.948 [DEBUG] [Thread-205545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:06:43.988 [DEBUG] [Thread-205545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:06:43.989 [DEBUG] [Thread-205545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:06:43.991 [DEBUG] [Thread-205545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:06:44.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:06:44.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:06:44.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:06:44.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:06:44.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:06:44.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:06:44.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:06:44.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:06:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:06:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.504264 -999.00  +22.70  17.05     24   +1.60 1 1 1 1 1   888    0 21.90 15.11 ----- 17.1 17.1 145.4 21.6 30.4 -30.2 29.7 -29.4 30.5 -28.5 31.6 -28.4
2026-02-15T14:06:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:06:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:06:44.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.504264
2026-02-15T14:06:44.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:06:44.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:06:44.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:06:44.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:06:44.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:06:44.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:06:02', tmtdew=25.19, humidity=18.66, cloud=0.0, wind=22.2, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:06:08.410', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:06:44.020 [DEBUG] [Thread-205545] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:06:44.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:06:44.110 [DEBUG] [Thread-205548] [transport.py] [_log()] starting thread (client mode): 0xa57417e0
2026-02-15T14:06:44.110 [DEBUG] [Thread-205548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:06:44.125 [DEBUG] [Thread-205548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:06:44.125 [INFO] [Thread-205548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:06:44.132 [DEBUG] [Thread-205548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:06:44.132 [DEBUG] [Thread-205548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] client lang: <none>
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] server lang: <none>
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] kex follows: False
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] Compression: none
2026-02-15T14:06:44.133 [DEBUG] [Thread-205548] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:06:44.191 [DEBUG] [Thread-205548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:06:44.192 [DEBUG] [Thread-205548] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:06:44.193 [DEBUG] [Thread-205548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:06:44.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:06:44.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:06:44.251 [DEBUG] [Thread-205548] [transport.py] [_log()] userauth is OK
2026-02-15T14:06:44.252 [DEBUG] [Thread-205548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:06:44.252 [DEBUG] [Thread-205548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:06:44.252 [DEBUG] [Thread-205548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:06:44.252 [DEBUG] [Thread-205548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:06:44.271 [INFO] [Thread-205548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:06:44.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:06:44.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:06:45.080 [DEBUG] [Thread-205548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:06:45.080 [DEBUG] [Thread-205548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:06:45.129 [DEBUG] [Thread-205548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:06:45.129 [DEBUG] [Thread-205548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:06:45.139 [DEBUG] [Thread-205548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:06:45.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:06:45.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:06:45.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:06:45.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:06:45.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:06:45.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:06:45.188 [DEBUG] [Thread-205548] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:06:51.432 [DEBUG] [Thread-205550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:06:54.954 [DEBUG] [Thread-205551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:10.008 [DEBUG] [Thread-205552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:15.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:07:15.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:07:15.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:07:17.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 6, 37), 26.46, 17.15, 0.0, 25.05, 24.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:07:17.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:06:37
2026-02-15T14:07:17.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:07:17.810 [DEBUG] [Thread-205553] [transport.py] [_log()] starting thread (client mode): 0xa2d1b640
2026-02-15T14:07:17.810 [DEBUG] [Thread-205553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:07:17.830 [DEBUG] [Thread-205553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:07:17.831 [INFO] [Thread-205553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:07:17.834 [DEBUG] [Thread-205553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] client lang: <none>
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] server lang: <none>
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] kex follows: False
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] Compression: none
2026-02-15T14:07:17.835 [DEBUG] [Thread-205553] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:07:17.854 [DEBUG] [Thread-205553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:07:17.854 [DEBUG] [Thread-205553] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:07:17.855 [DEBUG] [Thread-205553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:07:17.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:07:17.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:07:17.857 [DEBUG] [Thread-205553] [transport.py] [_log()] userauth is OK
2026-02-15T14:07:17.857 [DEBUG] [Thread-205553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:07:17.857 [DEBUG] [Thread-205553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:07:17.857 [DEBUG] [Thread-205553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:07:17.857 [DEBUG] [Thread-205553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:07:17.872 [INFO] [Thread-205553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:07:17.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:07:18.499 [DEBUG] [Thread-205553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:07:18.499 [DEBUG] [Thread-205553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:07:18.500 [DEBUG] [Thread-205553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:07:18.540 [DEBUG] [Thread-205553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:07:18.540 [DEBUG] [Thread-205553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:07:18.543 [DEBUG] [Thread-205553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:07:18.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:07:18.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:07:18.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:07:18.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:07:18.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:07:18.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:07:18.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:07:18.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:07:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:07:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.504611 -999.00  +22.50  19.05     25   +1.50 1 1 1 1 1   888    0 21.30 6.39 ----- 19.1 19.1 134.2 27.9 30.4 -29.4 29.7 -28.8 30.5 -27.7 31.6 -30.2
2026-02-15T14:07:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:07:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:07:18.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.504611
2026-02-15T14:07:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:07:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:07:18.565 [DEBUG] [Thread-205553] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:07:18.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:07:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:07:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:07:18.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:06:37', tmtdew=26.46, humidity=17.15, cloud=0.0, wind=25.05, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:06:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:07:18.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:07:18.658 [DEBUG] [Thread-205556] [transport.py] [_log()] starting thread (client mode): 0xa2d1b7f0
2026-02-15T14:07:18.658 [DEBUG] [Thread-205556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:07:18.672 [DEBUG] [Thread-205556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:07:18.672 [INFO] [Thread-205556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:18.680 [DEBUG] [Thread-205556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] client lang: <none>
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] server lang: <none>
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] kex follows: False
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] Compression: none
2026-02-15T14:07:18.681 [DEBUG] [Thread-205556] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:07:18.738 [DEBUG] [Thread-205556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:07:18.739 [DEBUG] [Thread-205556] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:07:18.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:07:18.740 [DEBUG] [Thread-205556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:07:18.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:07:18.799 [DEBUG] [Thread-205556] [transport.py] [_log()] userauth is OK
2026-02-15T14:07:18.799 [DEBUG] [Thread-205556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:07:18.799 [DEBUG] [Thread-205556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:07:18.799 [DEBUG] [Thread-205556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:07:18.799 [DEBUG] [Thread-205556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:07:18.822 [INFO] [Thread-205556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:07:18.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:07:18.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:07:19.647 [DEBUG] [Thread-205556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:07:19.648 [DEBUG] [Thread-205556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:07:19.695 [DEBUG] [Thread-205556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:07:19.695 [DEBUG] [Thread-205556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:07:19.704 [DEBUG] [Thread-205556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:07:19.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:07:19.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:07:19.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:07:19.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:07:19.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:07:19.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:07:19.741 [DEBUG] [Thread-205556] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:07:25.043 [DEBUG] [Thread-205558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:38.720 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:38.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:40.102 [DEBUG] [Thread-205559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:49.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:07:49.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:07:49.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
2026-02-15T14:07:51.466 [DEBUG] [Thread-205560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:07:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 7, 13), 24.81, 19.23, 0.0, 16.15, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:07:52.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:07:13
2026-02-15T14:07:52.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:07:53.018 [DEBUG] [Thread-205561] [transport.py] [_log()] starting thread (client mode): 0xa2dc09a0
2026-02-15T14:07:53.019 [DEBUG] [Thread-205561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:07:53.039 [DEBUG] [Thread-205561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:07:53.039 [INFO] [Thread-205561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] client lang: <none>
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] server lang: <none>
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] kex follows: False
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:07:53.042 [DEBUG] [Thread-205561] [transport.py] [_log()] Compression: none
2026-02-15T14:07:53.043 [DEBUG] [Thread-205561] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:07:53.058 [DEBUG] [Thread-205561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:07:53.059 [DEBUG] [Thread-205561] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:07:53.059 [DEBUG] [Thread-205561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:07:53.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:07:53.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:07:53.061 [DEBUG] [Thread-205561] [transport.py] [_log()] userauth is OK
2026-02-15T14:07:53.061 [DEBUG] [Thread-205561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:07:53.061 [DEBUG] [Thread-205561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:07:53.061 [DEBUG] [Thread-205561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:07:53.061 [DEBUG] [Thread-205561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:07:53.096 [INFO] [Thread-205561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:07:53.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:07:53.742 [DEBUG] [Thread-205561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:07:53.742 [DEBUG] [Thread-205561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:07:53.742 [DEBUG] [Thread-205561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:07:53.782 [DEBUG] [Thread-205561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:07:53.783 [DEBUG] [Thread-205561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:07:53.786 [DEBUG] [Thread-205561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:07:53.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:07:53.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:07:53.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:07:53.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:07:53.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:07:53.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:07:53.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:07:53.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:07:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:07:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.504958 -999.00  +22.50  15.34     24   +1.40 1 1 1 1 1   888    0 21.48 -0.49 ----- 15.3 15.3 116.6 20.1 30.4 -31.5 29.7 -28.8 30.5 -28.3 31.4 -30.3
2026-02-15T14:07:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:07:53.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:07:53.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.504958
2026-02-15T14:07:53.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:07:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:07:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:07:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:07:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:07:53.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:07:13', tmtdew=24.81, humidity=19.23, cloud=0.0, wind=16.15, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:07:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:07:53.817 [DEBUG] [Thread-205561] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:07:53.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:07:53.911 [DEBUG] [Thread-205564] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T14:07:53.911 [DEBUG] [Thread-205564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:07:53.926 [DEBUG] [Thread-205564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:07:53.927 [INFO] [Thread-205564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:07:53.934 [DEBUG] [Thread-205564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:07:53.934 [DEBUG] [Thread-205564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:07:53.934 [DEBUG] [Thread-205564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] client lang: <none>
2026-02-15T14:07:53.935 [DEBUG] [Thread-205564] [transport.py] [_log()] server lang: <none>
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] kex follows: False
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] Compression: none
2026-02-15T14:07:53.936 [DEBUG] [Thread-205564] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:07:53.996 [DEBUG] [Thread-205564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:07:53.997 [DEBUG] [Thread-205564] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:07:53.997 [DEBUG] [Thread-205564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:07:53.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:07:53.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:07:54.055 [DEBUG] [Thread-205564] [transport.py] [_log()] userauth is OK
2026-02-15T14:07:54.056 [DEBUG] [Thread-205564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:07:54.056 [DEBUG] [Thread-205564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:07:54.056 [DEBUG] [Thread-205564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:07:54.056 [DEBUG] [Thread-205564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:07:54.080 [INFO] [Thread-205564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:07:54.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:07:54.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:07:54.888 [DEBUG] [Thread-205564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:07:54.889 [DEBUG] [Thread-205564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:07:54.936 [DEBUG] [Thread-205564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:07:54.936 [DEBUG] [Thread-205564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:07:54.945 [DEBUG] [Thread-205564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:07:54.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:07:54.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:07:54.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:07:54.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:07:54.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:07:54.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:07:54.982 [DEBUG] [Thread-205564] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:07:55.141 [DEBUG] [Thread-205566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:10.195 [DEBUG] [Thread-205567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:25.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:08:25.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:08:25.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:08:25.235 [DEBUG] [Thread-205568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:27.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 7, 48), 24.53, 19.24, 0.0, 18.63, 22.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:08:27.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:07:48
2026-02-15T14:08:27.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:08:27.935 [DEBUG] [Thread-205569] [transport.py] [_log()] starting thread (client mode): 0xa5743100
2026-02-15T14:08:27.935 [DEBUG] [Thread-205569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:08:27.954 [DEBUG] [Thread-205569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:08:27.955 [INFO] [Thread-205569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:08:27.958 [DEBUG] [Thread-205569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:08:27.958 [DEBUG] [Thread-205569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:08:27.958 [DEBUG] [Thread-205569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:08:27.958 [DEBUG] [Thread-205569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] client lang: <none>
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] server lang: <none>
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] kex follows: False
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:08:27.959 [DEBUG] [Thread-205569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:08:27.960 [DEBUG] [Thread-205569] [transport.py] [_log()] Compression: none
2026-02-15T14:08:27.960 [DEBUG] [Thread-205569] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:08:27.978 [DEBUG] [Thread-205569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:08:27.979 [DEBUG] [Thread-205569] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:08:27.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:08:27.980 [DEBUG] [Thread-205569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:08:27.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:08:28.021 [DEBUG] [Thread-205569] [transport.py] [_log()] userauth is OK
2026-02-15T14:08:28.022 [DEBUG] [Thread-205569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:08:28.022 [DEBUG] [Thread-205569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:08:28.022 [DEBUG] [Thread-205569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:08:28.022 [DEBUG] [Thread-205569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:08:28.042 [INFO] [Thread-205569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:08:28.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:08:28.814 [DEBUG] [Thread-205569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:08:28.814 [DEBUG] [Thread-205569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:08:28.815 [DEBUG] [Thread-205569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:08:28.855 [DEBUG] [Thread-205569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:08:28.856 [DEBUG] [Thread-205569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:08:28.859 [DEBUG] [Thread-205569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:08:28.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:08:28.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:08:28.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:08:28.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:08:28.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:08:28.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:08:28.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:08:28.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:08:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:08:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.505305 -999.00  +22.70  13.01     24   +1.20 1 1 1 1 1   888    0 21.42 -6.31 ----- 13.0 13.0 161.6 21.1 30.4 -29.4 29.7 -31.2 30.5 -28.1 31.5 -29.9
2026-02-15T14:08:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:08:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:08:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.505305
2026-02-15T14:08:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:08:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:08:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:08:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:08:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:08:28.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:07:48', tmtdew=24.53, humidity=19.24, cloud=0.0, wind=18.63, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:07:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:08:28.887 [DEBUG] [Thread-205569] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:08:28.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:08:28.983 [DEBUG] [Thread-205572] [transport.py] [_log()] starting thread (client mode): 0xa5742b00
2026-02-15T14:08:28.983 [DEBUG] [Thread-205572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:08:28.997 [DEBUG] [Thread-205572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:08:28.997 [INFO] [Thread-205572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:08:29.005 [DEBUG] [Thread-205572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:08:29.005 [DEBUG] [Thread-205572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] client lang: <none>
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] server lang: <none>
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] kex follows: False
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] Compression: none
2026-02-15T14:08:29.006 [DEBUG] [Thread-205572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:08:29.064 [DEBUG] [Thread-205572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:08:29.064 [DEBUG] [Thread-205572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:08:29.065 [DEBUG] [Thread-205572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:08:29.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:08:29.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:08:29.123 [DEBUG] [Thread-205572] [transport.py] [_log()] userauth is OK
2026-02-15T14:08:29.124 [DEBUG] [Thread-205572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:08:29.124 [DEBUG] [Thread-205572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:08:29.124 [DEBUG] [Thread-205572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:08:29.124 [DEBUG] [Thread-205572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:08:29.142 [INFO] [Thread-205572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:08:29.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:08:29.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:08:29.990 [DEBUG] [Thread-205572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:08:29.990 [DEBUG] [Thread-205572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:08:30.038 [DEBUG] [Thread-205572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:08:30.039 [DEBUG] [Thread-205572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:08:30.048 [DEBUG] [Thread-205572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:08:30.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:08:30.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:08:30.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:08:30.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:08:30.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:08:30.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:08:30.085 [DEBUG] [Thread-205572] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:08:38.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:38.863 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:40.276 [DEBUG] [Thread-205574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:51.509 [DEBUG] [Thread-205575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:08:55.331 [DEBUG] [Thread-205576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:00.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:09:00.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:09:00.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:09:02.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 8, 24), 24.6, 19.19, 0.0, 16.37, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:09:02.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:08:24
2026-02-15T14:09:02.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:09:03.093 [DEBUG] [Thread-205577] [transport.py] [_log()] starting thread (client mode): 0xa5741f90
2026-02-15T14:09:03.093 [DEBUG] [Thread-205577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:09:03.116 [DEBUG] [Thread-205577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:09:03.116 [INFO] [Thread-205577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] client lang: <none>
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] server lang: <none>
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] kex follows: False
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] Compression: none
2026-02-15T14:09:03.120 [DEBUG] [Thread-205577] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:09:03.137 [DEBUG] [Thread-205577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:09:03.138 [DEBUG] [Thread-205577] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:09:03.139 [DEBUG] [Thread-205577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:09:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:09:03.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:09:03.141 [DEBUG] [Thread-205577] [transport.py] [_log()] userauth is OK
2026-02-15T14:09:03.141 [DEBUG] [Thread-205577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:09:03.141 [DEBUG] [Thread-205577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:09:03.141 [DEBUG] [Thread-205577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:09:03.141 [DEBUG] [Thread-205577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:09:03.163 [INFO] [Thread-205577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:09:03.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:09:03.790 [DEBUG] [Thread-205577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:09:03.790 [DEBUG] [Thread-205577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:09:03.790 [DEBUG] [Thread-205577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:09:03.831 [DEBUG] [Thread-205577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:09:03.832 [DEBUG] [Thread-205577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:09:03.835 [DEBUG] [Thread-205577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:09:03.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:09:03.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:09:03.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:09:03.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:09:03.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:09:03.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:09:03.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:09:03.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:09:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:09:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.505652 -999.00  +22.80  16.48     24   +1.50 1 1 1 1 1   888    0 21.14 -12.18 ----- 16.5 16.5 175.1 18.0 30.4 -28.9 29.6 -28.8 30.7 -27.4 31.7 -29.0
2026-02-15T14:09:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:09:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:09:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.505652
2026-02-15T14:09:03.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:09:03.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:09:03.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:09:03.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:09:03.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:09:03.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:08:24', tmtdew=24.6, humidity=19.19, cloud=0.0, wind=16.37, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:08:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:09:03.866 [DEBUG] [Thread-205577] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:09:03.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:09:03.961 [DEBUG] [Thread-205580] [transport.py] [_log()] starting thread (client mode): 0xa57401f0
2026-02-15T14:09:03.961 [DEBUG] [Thread-205580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:09:03.975 [DEBUG] [Thread-205580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:09:03.975 [INFO] [Thread-205580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:03.983 [DEBUG] [Thread-205580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] client lang: <none>
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] server lang: <none>
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] kex follows: False
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] Compression: none
2026-02-15T14:09:03.984 [DEBUG] [Thread-205580] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:09:04.043 [DEBUG] [Thread-205580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:09:04.044 [DEBUG] [Thread-205580] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:09:04.045 [DEBUG] [Thread-205580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:09:04.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:09:04.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:09:04.100 [DEBUG] [Thread-205580] [transport.py] [_log()] userauth is OK
2026-02-15T14:09:04.100 [DEBUG] [Thread-205580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:09:04.100 [DEBUG] [Thread-205580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:09:04.100 [DEBUG] [Thread-205580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:09:04.100 [DEBUG] [Thread-205580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:09:04.119 [INFO] [Thread-205580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:09:04.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:09:04.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:09:04.955 [DEBUG] [Thread-205580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:09:04.955 [DEBUG] [Thread-205580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:09:05.004 [DEBUG] [Thread-205580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:09:05.004 [DEBUG] [Thread-205580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:09:05.013 [DEBUG] [Thread-205580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:09:05.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:09:05.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:09:05.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:09:05.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:09:05.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:09:05.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:09:05.050 [DEBUG] [Thread-205580] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:09:10.372 [DEBUG] [Thread-205582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:25.423 [DEBUG] [Thread-205583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:35.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:09:35.073 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:09:35.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:09:37.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 8, 24), 24.6, 19.19, 0.0, 16.37, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:09:37.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:08:24
2026-02-15T14:09:37.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:09:37.634 [DEBUG] [Thread-205584] [transport.py] [_log()] starting thread (client mode): 0xa2d4c1f0
2026-02-15T14:09:37.634 [DEBUG] [Thread-205584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:09:37.653 [DEBUG] [Thread-205584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:09:37.654 [INFO] [Thread-205584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] client lang: <none>
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] server lang: <none>
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] kex follows: False
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] Compression: none
2026-02-15T14:09:37.655 [DEBUG] [Thread-205584] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:09:37.666 [DEBUG] [Thread-205584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:09:37.666 [DEBUG] [Thread-205584] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:09:37.667 [DEBUG] [Thread-205584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:09:37.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:09:37.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:09:37.669 [DEBUG] [Thread-205584] [transport.py] [_log()] userauth is OK
2026-02-15T14:09:37.669 [DEBUG] [Thread-205584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:09:37.669 [DEBUG] [Thread-205584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:09:37.669 [DEBUG] [Thread-205584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:09:37.669 [DEBUG] [Thread-205584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:09:37.687 [INFO] [Thread-205584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:09:37.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:09:38.312 [DEBUG] [Thread-205584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:09:38.312 [DEBUG] [Thread-205584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:09:38.312 [DEBUG] [Thread-205584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:09:38.353 [DEBUG] [Thread-205584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:09:38.354 [DEBUG] [Thread-205584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:09:38.357 [DEBUG] [Thread-205584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:09:38.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:09:38.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:09:38.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:09:38.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:09:38.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:09:38.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:09:38.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:09:38.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:09:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:09:38.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.506000 -999.00  +22.70  17.85     25   +1.70 1 1 1 1 1   888    0 20.96 -20.17 ----- 17.9 17.9 172.4 24.9 30.5 -30.1 29.6 -29.9 30.6 -28.2 31.7 -30.2
2026-02-15T14:09:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:09:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:09:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.506000
2026-02-15T14:09:38.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:09:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:09:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:09:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:09:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:09:38.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:08:24', tmtdew=24.6, humidity=19.19, cloud=0.0, wind=16.37, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:08:38.400', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:09:38.384 [DEBUG] [Thread-205584] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:09:38.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:09:38.477 [DEBUG] [Thread-205587] [transport.py] [_log()] starting thread (client mode): 0xa81d7520
2026-02-15T14:09:38.477 [DEBUG] [Thread-205587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:09:38.492 [DEBUG] [Thread-205587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:09:38.492 [INFO] [Thread-205587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] client lang: <none>
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] server lang: <none>
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] kex follows: False
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:09:38.500 [DEBUG] [Thread-205587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:09:38.501 [DEBUG] [Thread-205587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:09:38.501 [DEBUG] [Thread-205587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:09:38.501 [DEBUG] [Thread-205587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:09:38.501 [DEBUG] [Thread-205587] [transport.py] [_log()] Compression: none
2026-02-15T14:09:38.501 [DEBUG] [Thread-205587] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:09:38.559 [DEBUG] [Thread-205587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:09:38.560 [DEBUG] [Thread-205587] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:09:38.560 [DEBUG] [Thread-205587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:09:38.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:09:38.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:09:38.616 [DEBUG] [Thread-205587] [transport.py] [_log()] userauth is OK
2026-02-15T14:09:38.616 [DEBUG] [Thread-205587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:09:38.617 [DEBUG] [Thread-205587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:09:38.617 [DEBUG] [Thread-205587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:09:38.617 [DEBUG] [Thread-205587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:09:38.635 [INFO] [Thread-205587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:09:38.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:09:38.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:09:39.012 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:39.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:39.476 [DEBUG] [Thread-205587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:09:39.476 [DEBUG] [Thread-205587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:09:39.524 [DEBUG] [Thread-205587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:09:39.524 [DEBUG] [Thread-205587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:09:39.533 [DEBUG] [Thread-205587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:09:39.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:09:39.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:09:39.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:09:39.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:09:39.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:09:39.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:09:39.567 [DEBUG] [Thread-205587] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:09:40.454 [DEBUG] [Thread-205589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:51.556 [DEBUG] [Thread-205590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:09:55.506 [DEBUG] [Thread-205591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:09.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:10:09.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:10:09.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:10:10.545 [DEBUG] [Thread-205592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 9, 36), 25.14, 18.77, 0.0, 20.04, 23.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:10:11.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:09:36
2026-02-15T14:10:12.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:10:12.247 [DEBUG] [Thread-205593] [transport.py] [_log()] starting thread (client mode): 0xa57c0820
2026-02-15T14:10:12.248 [DEBUG] [Thread-205593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:10:12.268 [DEBUG] [Thread-205593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:10:12.268 [INFO] [Thread-205593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:12.271 [DEBUG] [Thread-205593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] client lang: <none>
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] server lang: <none>
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] kex follows: False
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] Compression: none
2026-02-15T14:10:12.272 [DEBUG] [Thread-205593] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:10:12.291 [DEBUG] [Thread-205593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:10:12.291 [DEBUG] [Thread-205593] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:10:12.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:10:12.292 [DEBUG] [Thread-205593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:10:12.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:10:12.295 [DEBUG] [Thread-205593] [transport.py] [_log()] userauth is OK
2026-02-15T14:10:12.295 [DEBUG] [Thread-205593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:10:12.295 [DEBUG] [Thread-205593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:10:12.295 [DEBUG] [Thread-205593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:10:12.295 [DEBUG] [Thread-205593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:10:12.330 [INFO] [Thread-205593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:10:12.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:10:14.736 [DEBUG] [Thread-205593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:10:14.737 [DEBUG] [Thread-205593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:10:14.737 [DEBUG] [Thread-205593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:10:14.778 [DEBUG] [Thread-205593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:10:14.778 [DEBUG] [Thread-205593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:10:14.781 [DEBUG] [Thread-205593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:10:14.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:10:14.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:10:14.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:10:14.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:10:14.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:10:14.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:10:14.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:10:14.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:10:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:10:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.506694 -999.00  +22.90  15.30     25   +2.00 1 1 1 1 1   888    0 20.69 -30.63 ----- 15.3 15.3 172.8 19.6 30.4 -29.3 29.4 -28.4 30.6 -28.0 31.6 -31.4
2026-02-15T14:10:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:10:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:10:14.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.506694
2026-02-15T14:10:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:10:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:10:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:10:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:10:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:10:14.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:09:36', tmtdew=25.14, humidity=18.77, cloud=0.0, wind=20.04, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:09:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:10:14.965 [DEBUG] [Thread-205593] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:10:15.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:10:15.068 [DEBUG] [Thread-205596] [transport.py] [_log()] starting thread (client mode): 0xa2d6aa40
2026-02-15T14:10:15.068 [DEBUG] [Thread-205596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:10:15.084 [DEBUG] [Thread-205596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:10:15.084 [INFO] [Thread-205596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] client lang: <none>
2026-02-15T14:10:15.092 [DEBUG] [Thread-205596] [transport.py] [_log()] server lang: <none>
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] kex follows: False
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] Compression: none
2026-02-15T14:10:15.093 [DEBUG] [Thread-205596] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:10:15.150 [DEBUG] [Thread-205596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:10:15.151 [DEBUG] [Thread-205596] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:10:15.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:10:15.152 [DEBUG] [Thread-205596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:10:15.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:10:15.209 [DEBUG] [Thread-205596] [transport.py] [_log()] userauth is OK
2026-02-15T14:10:15.209 [DEBUG] [Thread-205596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:10:15.209 [DEBUG] [Thread-205596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:10:15.209 [DEBUG] [Thread-205596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:10:15.209 [DEBUG] [Thread-205596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:10:15.234 [INFO] [Thread-205596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:10:15.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:10:15.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:10:16.076 [DEBUG] [Thread-205596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:10:16.076 [DEBUG] [Thread-205596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:10:16.124 [DEBUG] [Thread-205596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:10:16.124 [DEBUG] [Thread-205596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:10:16.132 [DEBUG] [Thread-205596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:10:16.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:10:16.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:10:16.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:10:16.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:10:16.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:10:16.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:10:16.166 [DEBUG] [Thread-205596] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:10:25.580 [DEBUG] [Thread-205598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:39.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:39.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:40.630 [DEBUG] [Thread-205599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:46.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:10:46.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:10:46.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:10:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 10, 11), 24.57, 19.44, 0.0, 21.65, 22.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:10:48.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:10:11
2026-02-15T14:10:48.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:10:48.642 [DEBUG] [Thread-205600] [transport.py] [_log()] starting thread (client mode): 0xa57c0cd0
2026-02-15T14:10:48.642 [DEBUG] [Thread-205600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:10:48.659 [DEBUG] [Thread-205600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:10:48.659 [INFO] [Thread-205600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] client lang: <none>
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] server lang: <none>
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] kex follows: False
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] Compression: none
2026-02-15T14:10:48.661 [DEBUG] [Thread-205600] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:10:48.675 [DEBUG] [Thread-205600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:10:48.675 [DEBUG] [Thread-205600] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:10:48.676 [DEBUG] [Thread-205600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:10:48.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:10:48.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:10:48.677 [DEBUG] [Thread-205600] [transport.py] [_log()] userauth is OK
2026-02-15T14:10:48.678 [DEBUG] [Thread-205600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:10:48.678 [DEBUG] [Thread-205600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:10:48.678 [DEBUG] [Thread-205600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:10:48.678 [DEBUG] [Thread-205600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:10:48.714 [INFO] [Thread-205600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:10:48.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:10:49.331 [DEBUG] [Thread-205600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:10:49.331 [DEBUG] [Thread-205600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:10:49.332 [DEBUG] [Thread-205600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:10:49.372 [DEBUG] [Thread-205600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:10:49.372 [DEBUG] [Thread-205600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:10:49.375 [DEBUG] [Thread-205600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:10:49.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:10:49.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:10:49.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:10:49.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:10:49.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:10:49.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:10:49.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:10:49.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:10:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:10:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.507388 -999.00  +23.10  14.41     25   +2.00 1 1 1 1 1   888    0 20.42 -45.99 ----- 14.4 14.4 137.4 20.6 30.6 -28.9 29.7 -28.4 30.7 -27.5 31.9 -28.7
2026-02-15T14:10:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:10:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:10:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.507388
2026-02-15T14:10:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:10:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:10:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:10:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:10:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:10:49.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:10:11', tmtdew=24.57, humidity=19.44, cloud=0.0, wind=21.65, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:10:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:10:49.399 [DEBUG] [Thread-205600] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:10:49.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:10:49.495 [DEBUG] [Thread-205603] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-15T14:10:49.495 [DEBUG] [Thread-205603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:10:49.513 [DEBUG] [Thread-205603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:10:49.514 [INFO] [Thread-205603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:10:49.522 [DEBUG] [Thread-205603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:10:49.522 [DEBUG] [Thread-205603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:10:49.522 [DEBUG] [Thread-205603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:10:49.522 [DEBUG] [Thread-205603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:49.522 [DEBUG] [Thread-205603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] client lang: <none>
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] server lang: <none>
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] kex follows: False
2026-02-15T14:10:49.523 [DEBUG] [Thread-205603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:10:49.524 [DEBUG] [Thread-205603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:10:49.524 [DEBUG] [Thread-205603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:10:49.524 [DEBUG] [Thread-205603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:10:49.524 [DEBUG] [Thread-205603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:10:49.524 [DEBUG] [Thread-205603] [transport.py] [_log()] Compression: none
2026-02-15T14:10:49.524 [DEBUG] [Thread-205603] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:10:49.581 [DEBUG] [Thread-205603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:10:49.582 [DEBUG] [Thread-205603] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:10:49.583 [DEBUG] [Thread-205603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:10:49.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:10:49.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:10:49.639 [DEBUG] [Thread-205603] [transport.py] [_log()] userauth is OK
2026-02-15T14:10:49.640 [DEBUG] [Thread-205603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:10:49.640 [DEBUG] [Thread-205603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:10:49.640 [DEBUG] [Thread-205603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:10:49.640 [DEBUG] [Thread-205603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:10:49.661 [INFO] [Thread-205603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:10:49.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:10:49.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:10:50.504 [DEBUG] [Thread-205603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:10:50.504 [DEBUG] [Thread-205603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:10:50.553 [DEBUG] [Thread-205603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:10:50.553 [DEBUG] [Thread-205603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:10:50.563 [DEBUG] [Thread-205603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:10:50.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:10:50.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')
2026-02-15T14:10:50.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:10:50.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:10:50.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:10:50.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:10:50.602 [DEBUG] [Thread-205603] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:10:51.593 [DEBUG] [Thread-205605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:10:55.668 [DEBUG] [Thread-205606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:10.724 [DEBUG] [Thread-205607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:20.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:11:20.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:11:20.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:11:22.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 10, 47), 24.47, 19.77, 0.0, 15.81, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:11:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:10:47
2026-02-15T14:11:22.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:11:23.092 [DEBUG] [Thread-205608] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-15T14:11:23.092 [DEBUG] [Thread-205608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:11:23.104 [DEBUG] [Thread-205608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:11:23.104 [INFO] [Thread-205608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] client lang: <none>
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] server lang: <none>
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] kex follows: False
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:11:23.106 [DEBUG] [Thread-205608] [transport.py] [_log()] Compression: none
2026-02-15T14:11:23.107 [DEBUG] [Thread-205608] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:11:23.114 [DEBUG] [Thread-205608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:11:23.114 [DEBUG] [Thread-205608] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:11:23.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:11:23.115 [DEBUG] [Thread-205608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:11:23.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:11:23.116 [DEBUG] [Thread-205608] [transport.py] [_log()] userauth is OK
2026-02-15T14:11:23.116 [DEBUG] [Thread-205608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:11:23.116 [DEBUG] [Thread-205608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:11:23.116 [DEBUG] [Thread-205608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:11:23.116 [DEBUG] [Thread-205608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:11:23.129 [INFO] [Thread-205608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:11:23.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:11:23.699 [DEBUG] [Thread-205608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:11:23.700 [DEBUG] [Thread-205608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:11:23.700 [DEBUG] [Thread-205608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:11:23.740 [DEBUG] [Thread-205608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:11:23.741 [DEBUG] [Thread-205608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:11:23.744 [DEBUG] [Thread-205608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:11:23.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:11:23.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:11:23.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:11:23.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:11:23.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:11:23.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:11:23.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:11:23.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:11:23.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:11:23.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.507736 -999.00  +23.50  11.41     23   +1.70 1 1 1 1 1   888    0 20.40 -52.80 ----- 11.4 11.4 119.2 20.7 30.7 -28.5 29.9 -28.3 30.8 -27.0 31.9 -29.4
2026-02-15T14:11:23.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:11:23.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:11:23.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.507736
2026-02-15T14:11:23.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:11:23.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:11:23.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:11:23.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:11:23.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:11:23.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:10:47', tmtdew=24.47, humidity=19.77, cloud=0.0, wind=15.81, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:11:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:11:23.767 [DEBUG] [Thread-205608] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:11:23.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:11:23.853 [DEBUG] [Thread-205611] [transport.py] [_log()] starting thread (client mode): 0xa2d03790
2026-02-15T14:11:23.853 [DEBUG] [Thread-205611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:11:23.872 [DEBUG] [Thread-205611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:11:23.873 [INFO] [Thread-205611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:11:23.880 [DEBUG] [Thread-205611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] client lang: <none>
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] server lang: <none>
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] kex follows: False
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:11:23.881 [DEBUG] [Thread-205611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:11:23.882 [DEBUG] [Thread-205611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:11:23.882 [DEBUG] [Thread-205611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:11:23.882 [DEBUG] [Thread-205611] [transport.py] [_log()] Compression: none
2026-02-15T14:11:23.882 [DEBUG] [Thread-205611] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:11:23.939 [DEBUG] [Thread-205611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:11:23.940 [DEBUG] [Thread-205611] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:11:23.941 [DEBUG] [Thread-205611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:11:23.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:11:23.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:11:23.995 [DEBUG] [Thread-205611] [transport.py] [_log()] userauth is OK
2026-02-15T14:11:23.996 [DEBUG] [Thread-205611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:11:23.996 [DEBUG] [Thread-205611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:11:23.996 [DEBUG] [Thread-205611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:11:23.996 [DEBUG] [Thread-205611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:11:24.016 [INFO] [Thread-205611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:11:24.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:11:24.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:11:24.879 [DEBUG] [Thread-205611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:11:24.879 [DEBUG] [Thread-205611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:11:24.929 [DEBUG] [Thread-205611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:11:24.929 [DEBUG] [Thread-205611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:11:24.938 [DEBUG] [Thread-205611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:11:24.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:11:24.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:11:24.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:11:24.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:11:24.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:11:24.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:11:24.972 [DEBUG] [Thread-205611] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:11:25.761 [DEBUG] [Thread-205613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:39.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:39.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:40.809 [DEBUG] [Thread-205614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:51.633 [DEBUG] [Thread-205615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:54.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:11:54.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:11:54.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:11:55.842 [DEBUG] [Thread-205616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:11:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 11, 22), 24.52, 19.73, 0.0, 15.44, 22.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:11:57.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:11:22
2026-02-15T14:11:57.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:11:57.698 [DEBUG] [Thread-205617] [transport.py] [_log()] starting thread (client mode): 0xa57c1c30
2026-02-15T14:11:57.699 [DEBUG] [Thread-205617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:11:57.719 [DEBUG] [Thread-205617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:11:57.719 [INFO] [Thread-205617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] client lang: <none>
2026-02-15T14:11:57.722 [DEBUG] [Thread-205617] [transport.py] [_log()] server lang: <none>
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] kex follows: False
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] Compression: none
2026-02-15T14:11:57.723 [DEBUG] [Thread-205617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:11:57.740 [DEBUG] [Thread-205617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:11:57.740 [DEBUG] [Thread-205617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:11:57.741 [DEBUG] [Thread-205617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:11:57.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:11:57.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:11:57.743 [DEBUG] [Thread-205617] [transport.py] [_log()] userauth is OK
2026-02-15T14:11:57.743 [DEBUG] [Thread-205617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:11:57.743 [DEBUG] [Thread-205617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:11:57.743 [DEBUG] [Thread-205617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:11:57.743 [DEBUG] [Thread-205617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:11:57.779 [INFO] [Thread-205617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:11:57.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:11:58.377 [DEBUG] [Thread-205617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:11:58.377 [DEBUG] [Thread-205617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:11:58.377 [DEBUG] [Thread-205617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:11:58.417 [DEBUG] [Thread-205617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:11:58.418 [DEBUG] [Thread-205617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:11:58.421 [DEBUG] [Thread-205617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:11:58.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:11:58.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:11:58.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:11:58.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:11:58.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:11:58.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:11:58.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:11:58.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:11:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:11:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.508083 -999.00  +23.70  11.89     24   +1.90 1 1 1 1 1   888    0 20.17 -57.47 ----- 11.9 11.9 156.5 13.6 30.8 -28.4 29.8 -33.3 30.9 -28.1 32.0 -28.7
2026-02-15T14:11:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:11:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:11:58.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.508083
2026-02-15T14:11:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:11:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:11:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:11:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:11:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:11:58.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:11:22', tmtdew=24.52, humidity=19.73, cloud=0.0, wind=15.44, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:11:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:11:58.449 [DEBUG] [Thread-205617] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:11:58.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:11:58.544 [DEBUG] [Thread-205620] [transport.py] [_log()] starting thread (client mode): 0xa2d4d180
2026-02-15T14:11:58.545 [DEBUG] [Thread-205620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:11:58.559 [DEBUG] [Thread-205620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:11:58.559 [INFO] [Thread-205620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] client lang: <none>
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] server lang: <none>
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] kex follows: False
2026-02-15T14:11:58.567 [DEBUG] [Thread-205620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:11:58.568 [DEBUG] [Thread-205620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:11:58.568 [DEBUG] [Thread-205620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:11:58.568 [DEBUG] [Thread-205620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:11:58.568 [DEBUG] [Thread-205620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:11:58.568 [DEBUG] [Thread-205620] [transport.py] [_log()] Compression: none
2026-02-15T14:11:58.568 [DEBUG] [Thread-205620] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:11:58.628 [DEBUG] [Thread-205620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:11:58.629 [DEBUG] [Thread-205620] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:11:58.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:11:58.630 [DEBUG] [Thread-205620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:11:58.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:11:58.688 [DEBUG] [Thread-205620] [transport.py] [_log()] userauth is OK
2026-02-15T14:11:58.688 [DEBUG] [Thread-205620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:11:58.688 [DEBUG] [Thread-205620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:11:58.688 [DEBUG] [Thread-205620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:11:58.688 [DEBUG] [Thread-205620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:11:58.707 [INFO] [Thread-205620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:11:58.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:11:58.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:11:59.503 [DEBUG] [Thread-205620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:11:59.503 [DEBUG] [Thread-205620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:11:59.552 [DEBUG] [Thread-205620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:11:59.552 [DEBUG] [Thread-205620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:11:59.561 [DEBUG] [Thread-205620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:11:59.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:11:59.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:11:59.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:11:59.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:11:59.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:11:59.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:11:59.599 [DEBUG] [Thread-205620] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:12:10.879 [DEBUG] [Thread-205622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:12:25.933 [DEBUG] [Thread-205623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:12:29.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:12:29.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:12:29.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:12:31.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 11, 57), 25.03, 18.71, 0.0, 16.04, 23.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:12:31.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:11:57
2026-02-15T14:12:31.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:12:31.992 [DEBUG] [Thread-205624] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-15T14:12:31.992 [DEBUG] [Thread-205624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:12:32.012 [DEBUG] [Thread-205624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:12:32.012 [INFO] [Thread-205624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:12:32.015 [DEBUG] [Thread-205624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:12:32.015 [DEBUG] [Thread-205624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:12:32.015 [DEBUG] [Thread-205624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:12:32.015 [DEBUG] [Thread-205624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:12:32.015 [DEBUG] [Thread-205624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] client lang: <none>
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] server lang: <none>
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] kex follows: False
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] Compression: none
2026-02-15T14:12:32.016 [DEBUG] [Thread-205624] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:12:32.034 [DEBUG] [Thread-205624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:12:32.035 [DEBUG] [Thread-205624] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:12:32.036 [DEBUG] [Thread-205624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:12:32.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:12:32.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:12:32.038 [DEBUG] [Thread-205624] [transport.py] [_log()] userauth is OK
2026-02-15T14:12:32.038 [DEBUG] [Thread-205624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:12:32.038 [DEBUG] [Thread-205624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:12:32.038 [DEBUG] [Thread-205624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:12:32.038 [DEBUG] [Thread-205624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:12:32.057 [INFO] [Thread-205624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:12:32.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:12:32.700 [DEBUG] [Thread-205624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:12:32.700 [DEBUG] [Thread-205624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:12:32.700 [DEBUG] [Thread-205624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:12:32.740 [DEBUG] [Thread-205624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:12:32.740 [DEBUG] [Thread-205624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:12:32.744 [DEBUG] [Thread-205624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:12:32.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:12:32.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:12:32.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:12:32.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:12:32.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:12:32.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:12:32.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:12:32.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:12:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:12:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.508430 -999.00  +23.60  17.37     23   +1.50 1 1 1 1 1   888    0 19.79 -59.02 ----- 17.4 17.4 159.2 24.0 30.8 -29.4 29.9 -29.4 30.8 -28.5 32.0 -30.6
2026-02-15T14:12:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:12:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:12:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.508430
2026-02-15T14:12:32.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:12:32.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:12:32.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:12:32.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:12:32.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:12:32.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:11:57', tmtdew=25.03, humidity=18.71, cloud=0.0, wind=16.04, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:12:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:12:32.771 [DEBUG] [Thread-205624] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:12:32.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:12:32.868 [DEBUG] [Thread-205627] [transport.py] [_log()] starting thread (client mode): 0xa81d4d00
2026-02-15T14:12:32.868 [DEBUG] [Thread-205627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:12:32.883 [DEBUG] [Thread-205627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:12:32.883 [INFO] [Thread-205627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:12:32.899 [DEBUG] [Thread-205627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:12:32.899 [DEBUG] [Thread-205627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:12:32.899 [DEBUG] [Thread-205627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:12:32.899 [DEBUG] [Thread-205627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:12:32.899 [DEBUG] [Thread-205627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] client lang: <none>
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] server lang: <none>
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] kex follows: False
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] Compression: none
2026-02-15T14:12:32.900 [DEBUG] [Thread-205627] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:12:32.950 [DEBUG] [Thread-205627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:12:32.950 [DEBUG] [Thread-205627] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:12:32.951 [DEBUG] [Thread-205627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:12:32.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:12:32.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:12:33.007 [DEBUG] [Thread-205627] [transport.py] [_log()] userauth is OK
2026-02-15T14:12:33.007 [DEBUG] [Thread-205627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:12:33.008 [DEBUG] [Thread-205627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:12:33.008 [DEBUG] [Thread-205627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:12:33.008 [DEBUG] [Thread-205627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:12:33.031 [INFO] [Thread-205627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:12:33.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:12:33.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:12:33.827 [DEBUG] [Thread-205627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:12:33.828 [DEBUG] [Thread-205627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:12:33.876 [DEBUG] [Thread-205627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:12:33.876 [DEBUG] [Thread-205627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:12:33.885 [DEBUG] [Thread-205627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:12:33.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:12:33.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:12:33.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:12:33.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:12:33.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:12:33.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:12:33.922 [DEBUG] [Thread-205627] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:12:39.440 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:12:39.441 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:12:40.970 [DEBUG] [Thread-205629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:12:51.670 [DEBUG] [Thread-205630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:12:56.021 [DEBUG] [Thread-205631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:03.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:13:03.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:13:03.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:13:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 12, 34), 26.0, 17.75, 0.0, 17.36, 24.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:13:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:12:34
2026-02-15T14:13:06.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:13:06.532 [DEBUG] [Thread-205632] [transport.py] [_log()] starting thread (client mode): 0xa2d1aad0
2026-02-15T14:13:06.533 [DEBUG] [Thread-205632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:13:06.553 [DEBUG] [Thread-205632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:13:06.554 [INFO] [Thread-205632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:13:06.556 [DEBUG] [Thread-205632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:13:06.556 [DEBUG] [Thread-205632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] client lang: <none>
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] server lang: <none>
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] kex follows: False
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:13:06.557 [DEBUG] [Thread-205632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:13:06.558 [DEBUG] [Thread-205632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:13:06.558 [DEBUG] [Thread-205632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:13:06.558 [DEBUG] [Thread-205632] [transport.py] [_log()] Compression: none
2026-02-15T14:13:06.558 [DEBUG] [Thread-205632] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:13:06.577 [DEBUG] [Thread-205632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:13:06.578 [DEBUG] [Thread-205632] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:13:06.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:13:06.579 [DEBUG] [Thread-205632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:13:06.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:13:06.581 [DEBUG] [Thread-205632] [transport.py] [_log()] userauth is OK
2026-02-15T14:13:06.581 [DEBUG] [Thread-205632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:13:06.581 [DEBUG] [Thread-205632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:13:06.582 [DEBUG] [Thread-205632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:13:06.582 [DEBUG] [Thread-205632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:13:06.602 [INFO] [Thread-205632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:13:06.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:13:07.194 [DEBUG] [Thread-205632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:13:07.194 [DEBUG] [Thread-205632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:13:07.195 [DEBUG] [Thread-205632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:13:07.235 [DEBUG] [Thread-205632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:13:07.236 [DEBUG] [Thread-205632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:13:07.238 [DEBUG] [Thread-205632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:13:07.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:13:07.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:13:07.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:13:07.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:13:07.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:13:07.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:13:07.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:13:07.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:13:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:13:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.508777 -999.00  +23.50  16.78     23   +1.40 1 1 1 1 1   888    0 20.14 -58.09 ----- 16.8 16.8 166.8 21.8 30.8 -29.0 29.9 -28.4 30.9 -28.3 32.0 -29.8
2026-02-15T14:13:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:13:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:13:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.508777
2026-02-15T14:13:07.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:13:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:13:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:13:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:13:07.265 [DEBUG] [Thread-205632] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:13:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:13:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:12:34', tmtdew=26.0, humidity=17.75, cloud=0.0, wind=17.36, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:12:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:13:07.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:13:07.364 [DEBUG] [Thread-205635] [transport.py] [_log()] starting thread (client mode): 0xa2d19330
2026-02-15T14:13:07.365 [DEBUG] [Thread-205635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:13:07.380 [DEBUG] [Thread-205635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:13:07.380 [INFO] [Thread-205635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] client lang: <none>
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] server lang: <none>
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] kex follows: False
2026-02-15T14:13:07.388 [DEBUG] [Thread-205635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:13:07.389 [DEBUG] [Thread-205635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:13:07.389 [DEBUG] [Thread-205635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:13:07.389 [DEBUG] [Thread-205635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:13:07.389 [DEBUG] [Thread-205635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:13:07.389 [DEBUG] [Thread-205635] [transport.py] [_log()] Compression: none
2026-02-15T14:13:07.389 [DEBUG] [Thread-205635] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:13:07.447 [DEBUG] [Thread-205635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:13:07.448 [DEBUG] [Thread-205635] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:13:07.448 [DEBUG] [Thread-205635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:13:07.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:13:07.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:13:07.507 [DEBUG] [Thread-205635] [transport.py] [_log()] userauth is OK
2026-02-15T14:13:07.508 [DEBUG] [Thread-205635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:13:07.508 [DEBUG] [Thread-205635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:13:07.508 [DEBUG] [Thread-205635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:13:07.508 [DEBUG] [Thread-205635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:13:07.528 [INFO] [Thread-205635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:13:07.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:13:07.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:13:08.461 [DEBUG] [Thread-205635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:13:08.461 [DEBUG] [Thread-205635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:13:08.509 [DEBUG] [Thread-205635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:13:08.510 [DEBUG] [Thread-205635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:13:08.519 [DEBUG] [Thread-205635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:13:08.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:13:08.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:13:08.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:13:08.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:13:08.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:13:08.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:13:08.557 [DEBUG] [Thread-205635] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:13:11.060 [DEBUG] [Thread-205637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:26.120 [DEBUG] [Thread-205638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:38.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:13:38.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:13:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:13:39.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:39.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 13, 9), 25.16, 18.73, 0.0, 16.08, 23.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:13:40.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:13:09
2026-02-15T14:13:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:13:40.916 [DEBUG] [Thread-205639] [transport.py] [_log()] starting thread (client mode): 0xa2d03790
2026-02-15T14:13:40.916 [DEBUG] [Thread-205639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:13:40.937 [DEBUG] [Thread-205639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:13:40.937 [INFO] [Thread-205639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] client lang: <none>
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] server lang: <none>
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] kex follows: False
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] Compression: none
2026-02-15T14:13:40.940 [DEBUG] [Thread-205639] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:13:40.964 [DEBUG] [Thread-205639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:13:40.964 [DEBUG] [Thread-205639] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:13:40.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:13:40.966 [DEBUG] [Thread-205639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:13:40.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:13:40.968 [DEBUG] [Thread-205639] [transport.py] [_log()] userauth is OK
2026-02-15T14:13:40.968 [DEBUG] [Thread-205639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:13:40.968 [DEBUG] [Thread-205639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:13:40.968 [DEBUG] [Thread-205639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:13:40.968 [DEBUG] [Thread-205639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:13:41.004 [INFO] [Thread-205639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:13:41.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:13:41.156 [DEBUG] [Thread-205641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:41.686 [DEBUG] [Thread-205639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:13:41.686 [DEBUG] [Thread-205639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:13:41.687 [DEBUG] [Thread-205639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:13:41.727 [DEBUG] [Thread-205639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:13:41.728 [DEBUG] [Thread-205639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:13:41.731 [DEBUG] [Thread-205639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:13:41.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:13:41.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:13:41.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:13:41.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:13:41.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:13:41.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:13:41.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:13:41.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:13:41.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:13:41.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.509124 -999.00  +23.50  23.08     23   +1.60 1 1 1 1 1   888    0 20.23 -49.48 ----- 23.1 23.1 167.6 25.8 30.9 -29.2 29.9 -31.4 30.9 -28.7 32.0 -30.3
2026-02-15T14:13:41.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:13:41.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:13:41.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.509124
2026-02-15T14:13:41.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:13:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:13:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:13:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:13:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:13:41.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:13:09', tmtdew=25.16, humidity=18.73, cloud=0.0, wind=16.08, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:13:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:13:41.756 [DEBUG] [Thread-205639] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:13:41.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:13:41.858 [DEBUG] [Thread-205643] [transport.py] [_log()] starting thread (client mode): 0xa81d5600
2026-02-15T14:13:41.858 [DEBUG] [Thread-205643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:13:41.874 [DEBUG] [Thread-205643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:13:41.875 [INFO] [Thread-205643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:13:41.882 [DEBUG] [Thread-205643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:13:41.882 [DEBUG] [Thread-205643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] client lang: <none>
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] server lang: <none>
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] kex follows: False
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] Compression: none
2026-02-15T14:13:41.883 [DEBUG] [Thread-205643] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:13:41.940 [DEBUG] [Thread-205643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:13:41.940 [DEBUG] [Thread-205643] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:13:41.941 [DEBUG] [Thread-205643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:13:41.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:13:41.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:13:41.996 [DEBUG] [Thread-205643] [transport.py] [_log()] userauth is OK
2026-02-15T14:13:41.996 [DEBUG] [Thread-205643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:13:41.996 [DEBUG] [Thread-205643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:13:41.996 [DEBUG] [Thread-205643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:13:41.996 [DEBUG] [Thread-205643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:13:42.015 [INFO] [Thread-205643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:13:42.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:13:42.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:13:42.815 [DEBUG] [Thread-205643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:13:42.816 [DEBUG] [Thread-205643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:13:42.864 [DEBUG] [Thread-205643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:13:42.864 [DEBUG] [Thread-205643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:13:42.873 [DEBUG] [Thread-205643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:13:42.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:13:42.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:13:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:13:42.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:13:42.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:13:42.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:13:42.907 [DEBUG] [Thread-205643] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:13:51.697 [DEBUG] [Thread-205645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:13:56.187 [DEBUG] [Thread-205646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:11.243 [DEBUG] [Thread-205647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:12.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:14:12.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:14:12.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:14:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 13, 44), 25.42, 18.41, 0.0, 20.82, 23.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:14:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:13:44
2026-02-15T14:14:15.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:14:15.668 [DEBUG] [Thread-205648] [transport.py] [_log()] starting thread (client mode): 0xa2d6a500
2026-02-15T14:14:15.668 [DEBUG] [Thread-205648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:14:15.685 [DEBUG] [Thread-205648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:14:15.685 [INFO] [Thread-205648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:14:15.688 [DEBUG] [Thread-205648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] client lang: <none>
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] server lang: <none>
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] kex follows: False
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] Compression: none
2026-02-15T14:14:15.689 [DEBUG] [Thread-205648] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:14:15.702 [DEBUG] [Thread-205648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:14:15.702 [DEBUG] [Thread-205648] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:14:15.703 [DEBUG] [Thread-205648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:14:15.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:14:15.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:14:15.705 [DEBUG] [Thread-205648] [transport.py] [_log()] userauth is OK
2026-02-15T14:14:15.706 [DEBUG] [Thread-205648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:14:15.706 [DEBUG] [Thread-205648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:14:15.706 [DEBUG] [Thread-205648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:14:15.706 [DEBUG] [Thread-205648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:14:15.732 [INFO] [Thread-205648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:14:15.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:14:16.344 [DEBUG] [Thread-205648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:14:16.344 [DEBUG] [Thread-205648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:14:16.344 [DEBUG] [Thread-205648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:14:16.385 [DEBUG] [Thread-205648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:14:16.385 [DEBUG] [Thread-205648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:14:16.389 [DEBUG] [Thread-205648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:14:16.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:14:16.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:14:16.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:14:16.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:14:16.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:14:16.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:14:16.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:14:16.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:14:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:14:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.509472 -999.00  +23.00  20.63     23   +1.30 1 1 1 1 1   888    0 20.90 -48.50 ----- 20.6 20.6 154.4 27.1 30.7 -31.4 29.8 -28.8 30.7 -29.2 31.9 -31.2
2026-02-15T14:14:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:14:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:14:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.509472
2026-02-15T14:14:16.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:14:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:14:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:14:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:14:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:14:16.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:13:44', tmtdew=25.42, humidity=18.41, cloud=0.0, wind=20.82, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:13:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:14:16.416 [DEBUG] [Thread-205648] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:14:16.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:14:16.511 [DEBUG] [Thread-205651] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdc0
2026-02-15T14:14:16.511 [DEBUG] [Thread-205651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:14:16.526 [DEBUG] [Thread-205651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:14:16.527 [INFO] [Thread-205651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:14:16.534 [DEBUG] [Thread-205651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] client lang: <none>
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] server lang: <none>
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] kex follows: False
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:14:16.535 [DEBUG] [Thread-205651] [transport.py] [_log()] Compression: none
2026-02-15T14:14:16.536 [DEBUG] [Thread-205651] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:14:16.591 [DEBUG] [Thread-205651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:14:16.592 [DEBUG] [Thread-205651] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:14:16.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:14:16.593 [DEBUG] [Thread-205651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:14:16.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:14:16.647 [DEBUG] [Thread-205651] [transport.py] [_log()] userauth is OK
2026-02-15T14:14:16.648 [DEBUG] [Thread-205651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:14:16.648 [DEBUG] [Thread-205651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:14:16.648 [DEBUG] [Thread-205651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:14:16.648 [DEBUG] [Thread-205651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:14:16.666 [INFO] [Thread-205651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:14:16.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:14:16.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:14:17.481 [DEBUG] [Thread-205651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:14:17.481 [DEBUG] [Thread-205651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:14:17.530 [DEBUG] [Thread-205651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:14:17.530 [DEBUG] [Thread-205651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:14:17.539 [DEBUG] [Thread-205651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:14:17.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:14:17.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:14:17.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:14:17.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:14:17.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:14:17.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:14:17.577 [DEBUG] [Thread-205651] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:14:26.279 [DEBUG] [Thread-205653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:39.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:39.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:41.331 [DEBUG] [Thread-205654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:47.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:14:47.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:14:47.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:14:49.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 14, 19), 25.26, 18.58, 0.0, 22.57, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:14:49.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:14:19
2026-02-15T14:14:49.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:14:49.966 [DEBUG] [Thread-205655] [transport.py] [_log()] starting thread (client mode): 0xa2d038b0
2026-02-15T14:14:49.966 [DEBUG] [Thread-205655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:14:49.986 [DEBUG] [Thread-205655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:14:49.986 [INFO] [Thread-205655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:14:49.989 [DEBUG] [Thread-205655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:14:49.989 [DEBUG] [Thread-205655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:14:49.989 [DEBUG] [Thread-205655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] client lang: <none>
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] server lang: <none>
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] kex follows: False
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] Compression: none
2026-02-15T14:14:49.990 [DEBUG] [Thread-205655] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:14:50.008 [DEBUG] [Thread-205655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:14:50.009 [DEBUG] [Thread-205655] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:14:50.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:14:50.010 [DEBUG] [Thread-205655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:14:50.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:14:50.012 [DEBUG] [Thread-205655] [transport.py] [_log()] userauth is OK
2026-02-15T14:14:50.012 [DEBUG] [Thread-205655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:14:50.012 [DEBUG] [Thread-205655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:14:50.012 [DEBUG] [Thread-205655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:14:50.013 [DEBUG] [Thread-205655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:14:50.038 [INFO] [Thread-205655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:14:50.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:14:50.678 [DEBUG] [Thread-205655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:14:50.678 [DEBUG] [Thread-205655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:14:50.679 [DEBUG] [Thread-205655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:14:50.720 [DEBUG] [Thread-205655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:14:50.720 [DEBUG] [Thread-205655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:14:50.723 [DEBUG] [Thread-205655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:14:50.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:14:50.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:14:50.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:14:50.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:14:50.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:14:50.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:14:50.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:14:50.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:14:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:14:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.509819 -999.00  +22.70  16.54     24   +1.30 1 1 1 1 1   888    0 20.17 -44.49 ----- 16.5 16.5 155.6 22.8 30.6 -31.1 29.6 -28.4 30.6 -28.7 31.8 -30.4
2026-02-15T14:14:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:14:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:14:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.509819
2026-02-15T14:14:50.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:14:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:14:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:14:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:14:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:14:50.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:14:19', tmtdew=25.26, humidity=18.58, cloud=0.0, wind=22.57, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:14:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:14:50.752 [DEBUG] [Thread-205655] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:14:50.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:14:50.848 [DEBUG] [Thread-205658] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-15T14:14:50.848 [DEBUG] [Thread-205658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:14:50.863 [DEBUG] [Thread-205658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:14:50.863 [INFO] [Thread-205658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:14:50.871 [DEBUG] [Thread-205658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:14:50.871 [DEBUG] [Thread-205658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:14:50.871 [DEBUG] [Thread-205658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:14:50.871 [DEBUG] [Thread-205658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:50.871 [DEBUG] [Thread-205658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:14:50.871 [DEBUG] [Thread-205658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] client lang: <none>
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] server lang: <none>
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] kex follows: False
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:14:50.872 [DEBUG] [Thread-205658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:14:50.873 [DEBUG] [Thread-205658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:14:50.873 [DEBUG] [Thread-205658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:14:50.873 [DEBUG] [Thread-205658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:14:50.873 [DEBUG] [Thread-205658] [transport.py] [_log()] Compression: none
2026-02-15T14:14:50.873 [DEBUG] [Thread-205658] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:14:50.932 [DEBUG] [Thread-205658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:14:50.933 [DEBUG] [Thread-205658] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:14:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:14:50.935 [DEBUG] [Thread-205658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:14:50.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:14:50.992 [DEBUG] [Thread-205658] [transport.py] [_log()] userauth is OK
2026-02-15T14:14:50.993 [DEBUG] [Thread-205658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:14:50.993 [DEBUG] [Thread-205658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:14:50.993 [DEBUG] [Thread-205658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:14:50.993 [DEBUG] [Thread-205658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:14:51.013 [INFO] [Thread-205658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:14:51.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:14:51.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:14:51.725 [DEBUG] [Thread-205660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:14:51.841 [DEBUG] [Thread-205658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:14:51.842 [DEBUG] [Thread-205658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:14:51.889 [DEBUG] [Thread-205658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:14:51.890 [DEBUG] [Thread-205658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:14:51.899 [DEBUG] [Thread-205658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:14:51.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:14:51.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:14:51.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:14:51.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:14:51.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:14:51.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:14:51.933 [DEBUG] [Thread-205658] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:14:56.368 [DEBUG] [Thread-205661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:11.421 [DEBUG] [Thread-205662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:15:21.930 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:15:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:15:23.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 14, 55), 25.02, 18.72, 0.0, 20.63, 22.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:15:23.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:14:55
2026-02-15T14:15:24.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:15:24.313 [DEBUG] [Thread-205663] [transport.py] [_log()] starting thread (client mode): 0xa2d01d80
2026-02-15T14:15:24.314 [DEBUG] [Thread-205663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:15:24.335 [DEBUG] [Thread-205663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:15:24.335 [INFO] [Thread-205663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] client lang: <none>
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] server lang: <none>
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] kex follows: False
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] Compression: none
2026-02-15T14:15:24.338 [DEBUG] [Thread-205663] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:15:24.354 [DEBUG] [Thread-205663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:15:24.354 [DEBUG] [Thread-205663] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:15:24.354 [DEBUG] [Thread-205663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:15:24.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:15:24.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:15:24.355 [DEBUG] [Thread-205663] [transport.py] [_log()] userauth is OK
2026-02-15T14:15:24.355 [DEBUG] [Thread-205663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:15:24.355 [DEBUG] [Thread-205663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:15:24.355 [DEBUG] [Thread-205663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:15:24.355 [DEBUG] [Thread-205663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:15:24.375 [INFO] [Thread-205663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:15:24.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:15:25.055 [DEBUG] [Thread-205663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:15:25.055 [DEBUG] [Thread-205663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:15:25.056 [DEBUG] [Thread-205663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:15:25.096 [DEBUG] [Thread-205663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:15:25.096 [DEBUG] [Thread-205663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:15:25.099 [DEBUG] [Thread-205663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:15:25.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:15:25.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:15:25.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:15:25.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:15:25.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:15:25.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:15:25.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:15:25.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:15:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:15:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.510166 -999.00  +23.00  16.34     24   +1.50 1 1 1 1 1   888    0 20.71 -40.73 ----- 16.3 16.3 145.2 24.3 30.6 -30.0 29.7 -28.2 30.7 -27.2 31.8 -29.9
2026-02-15T14:15:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:15:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:15:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.510166
2026-02-15T14:15:25.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:15:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:15:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:15:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:15:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:15:25.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:14:55', tmtdew=25.02, humidity=18.72, cloud=0.0, wind=20.63, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:14:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:15:25.128 [DEBUG] [Thread-205663] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:15:25.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:15:25.223 [DEBUG] [Thread-205666] [transport.py] [_log()] starting thread (client mode): 0xa2d69e40
2026-02-15T14:15:25.224 [DEBUG] [Thread-205666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:15:25.240 [DEBUG] [Thread-205666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:15:25.240 [INFO] [Thread-205666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:15:25.247 [DEBUG] [Thread-205666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] client lang: <none>
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] server lang: <none>
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] kex follows: False
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] Compression: none
2026-02-15T14:15:25.248 [DEBUG] [Thread-205666] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:15:25.305 [DEBUG] [Thread-205666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:15:25.306 [DEBUG] [Thread-205666] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:15:25.306 [DEBUG] [Thread-205666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:15:25.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:15:25.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:15:25.363 [DEBUG] [Thread-205666] [transport.py] [_log()] userauth is OK
2026-02-15T14:15:25.363 [DEBUG] [Thread-205666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:15:25.363 [DEBUG] [Thread-205666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:15:25.363 [DEBUG] [Thread-205666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:15:25.363 [DEBUG] [Thread-205666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:15:25.377 [INFO] [Thread-205666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:15:25.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:15:25.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:15:26.246 [DEBUG] [Thread-205666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:15:26.246 [DEBUG] [Thread-205666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:15:26.295 [DEBUG] [Thread-205666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:15:26.295 [DEBUG] [Thread-205666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:15:26.304 [DEBUG] [Thread-205666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:15:26.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:15:26.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:15:26.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:15:26.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:15:26.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:15:26.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:15:26.341 [DEBUG] [Thread-205666] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:15:26.459 [DEBUG] [Thread-205668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:39.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:39.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:41.511 [DEBUG] [Thread-205669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:51.752 [DEBUG] [Thread-205670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:56.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:15:56.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:15:56.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:15:56.547 [DEBUG] [Thread-205671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:15:58.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 15, 31), 24.86, 18.89, 0.0, 18.17, 22.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:15:58.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:15:31
2026-02-15T14:15:58.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:15:58.989 [DEBUG] [Thread-205672] [transport.py] [_log()] starting thread (client mode): 0xa81d6200
2026-02-15T14:15:58.990 [DEBUG] [Thread-205672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:15:59.010 [DEBUG] [Thread-205672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:15:59.011 [INFO] [Thread-205672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:15:59.014 [DEBUG] [Thread-205672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:15:59.014 [DEBUG] [Thread-205672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:15:59.014 [DEBUG] [Thread-205672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:15:59.014 [DEBUG] [Thread-205672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:59.014 [DEBUG] [Thread-205672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:59.014 [DEBUG] [Thread-205672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] client lang: <none>
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] server lang: <none>
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] kex follows: False
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] Compression: none
2026-02-15T14:15:59.015 [DEBUG] [Thread-205672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:15:59.034 [DEBUG] [Thread-205672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:15:59.035 [DEBUG] [Thread-205672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:15:59.036 [DEBUG] [Thread-205672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:15:59.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:15:59.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:15:59.038 [DEBUG] [Thread-205672] [transport.py] [_log()] userauth is OK
2026-02-15T14:15:59.039 [DEBUG] [Thread-205672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:15:59.039 [DEBUG] [Thread-205672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:15:59.039 [DEBUG] [Thread-205672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:15:59.039 [DEBUG] [Thread-205672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:15:59.075 [INFO] [Thread-205672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:15:59.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:15:59.684 [DEBUG] [Thread-205672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:15:59.684 [DEBUG] [Thread-205672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:15:59.684 [DEBUG] [Thread-205672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:15:59.725 [DEBUG] [Thread-205672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:15:59.725 [DEBUG] [Thread-205672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:15:59.728 [DEBUG] [Thread-205672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:15:59.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:15:59.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:15:59.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:15:59.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:15:59.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:15:59.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:15:59.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:15:59.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:15:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:15:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.510861 -999.00  +23.10  16.63     24   +1.50 1 1 1 1 1   888    0 20.92 -29.94 ----- 16.6 16.6 152.1 26.7 30.7 -29.9 29.9 -29.7 30.8 -28.9 32.0 -29.9
2026-02-15T14:15:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:15:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:15:59.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.510861
2026-02-15T14:15:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:15:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:15:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:15:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:15:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:15:59.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:15:31', tmtdew=24.86, humidity=18.89, cloud=0.0, wind=18.17, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:15:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:15:59.753 [DEBUG] [Thread-205672] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:15:59.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:15:59.849 [DEBUG] [Thread-205675] [transport.py] [_log()] starting thread (client mode): 0xa57e3dc0
2026-02-15T14:15:59.849 [DEBUG] [Thread-205675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:15:59.864 [DEBUG] [Thread-205675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:15:59.864 [INFO] [Thread-205675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:15:59.871 [DEBUG] [Thread-205675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:15:59.872 [DEBUG] [Thread-205675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:15:59.872 [DEBUG] [Thread-205675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:15:59.872 [DEBUG] [Thread-205675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:59.872 [DEBUG] [Thread-205675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:15:59.872 [DEBUG] [Thread-205675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:59.872 [DEBUG] [Thread-205675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] client lang: <none>
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] server lang: <none>
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] kex follows: False
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:15:59.873 [DEBUG] [Thread-205675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:15:59.874 [DEBUG] [Thread-205675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:15:59.874 [DEBUG] [Thread-205675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:15:59.874 [DEBUG] [Thread-205675] [transport.py] [_log()] Compression: none
2026-02-15T14:15:59.874 [DEBUG] [Thread-205675] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:15:59.932 [DEBUG] [Thread-205675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:15:59.933 [DEBUG] [Thread-205675] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:15:59.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:15:59.935 [DEBUG] [Thread-205675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:15:59.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:15:59.992 [DEBUG] [Thread-205675] [transport.py] [_log()] userauth is OK
2026-02-15T14:15:59.992 [DEBUG] [Thread-205675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:15:59.992 [DEBUG] [Thread-205675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:15:59.992 [DEBUG] [Thread-205675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:15:59.993 [DEBUG] [Thread-205675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:16:00.019 [INFO] [Thread-205675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:16:00.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:16:00.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:16:00.899 [DEBUG] [Thread-205675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:16:00.899 [DEBUG] [Thread-205675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:16:00.948 [DEBUG] [Thread-205675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:16:00.949 [DEBUG] [Thread-205675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:16:00.958 [DEBUG] [Thread-205675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:16:00.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:16:00.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:16:00.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:16:00.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:16:00.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:16:00.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:16:00.995 [DEBUG] [Thread-205675] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:16:11.582 [DEBUG] [Thread-205677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:16:26.639 [DEBUG] [Thread-205678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:16:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:16:31.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:16:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:16:32.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 16, 6), 24.62, 19.17, 0.0, 19.23, 22.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:16:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:16:06
2026-02-15T14:16:33.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:16:33.483 [DEBUG] [Thread-205679] [transport.py] [_log()] starting thread (client mode): 0xa57c2b60
2026-02-15T14:16:33.483 [DEBUG] [Thread-205679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:16:33.503 [DEBUG] [Thread-205679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:16:33.503 [INFO] [Thread-205679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:16:33.506 [DEBUG] [Thread-205679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:16:33.506 [DEBUG] [Thread-205679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:16:33.506 [DEBUG] [Thread-205679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] client lang: <none>
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] server lang: <none>
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] kex follows: False
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] Compression: none
2026-02-15T14:16:33.507 [DEBUG] [Thread-205679] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:16:33.524 [DEBUG] [Thread-205679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:16:33.525 [DEBUG] [Thread-205679] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:16:33.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:16:33.526 [DEBUG] [Thread-205679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:16:33.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:16:33.569 [DEBUG] [Thread-205679] [transport.py] [_log()] userauth is OK
2026-02-15T14:16:33.569 [DEBUG] [Thread-205679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:16:33.569 [DEBUG] [Thread-205679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:16:33.569 [DEBUG] [Thread-205679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:16:33.569 [DEBUG] [Thread-205679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:16:33.589 [INFO] [Thread-205679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:16:33.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:16:34.189 [DEBUG] [Thread-205679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:16:34.189 [DEBUG] [Thread-205679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:16:34.190 [DEBUG] [Thread-205679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:16:34.230 [DEBUG] [Thread-205679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:16:34.231 [DEBUG] [Thread-205679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:16:34.234 [DEBUG] [Thread-205679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:16:34.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:16:34.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:16:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:16:34.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:16:34.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:16:34.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:16:34.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:16:34.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:16:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:16:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.511208 -999.00  +23.10  15.08     24   +1.50 1 1 1 1 1   888    0 20.23 -31.47 ----- 15.1 15.1 149.2 22.8 30.7 -29.6 29.9 -29.2 30.9 -27.7 31.9 -30.1
2026-02-15T14:16:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:16:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:16:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.511208
2026-02-15T14:16:34.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:16:34.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:16:34.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:16:34.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:16:34.260 [DEBUG] [Thread-205679] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:16:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:16:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:16:06', tmtdew=24.62, humidity=19.17, cloud=0.0, wind=19.23, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:16:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:16:34.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:16:34.371 [DEBUG] [Thread-205682] [transport.py] [_log()] starting thread (client mode): 0xa2d4dde0
2026-02-15T14:16:34.371 [DEBUG] [Thread-205682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:16:34.388 [DEBUG] [Thread-205682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:16:34.389 [INFO] [Thread-205682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:16:34.396 [DEBUG] [Thread-205682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:16:34.396 [DEBUG] [Thread-205682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] client lang: <none>
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] server lang: <none>
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] kex follows: False
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:16:34.397 [DEBUG] [Thread-205682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:16:34.398 [DEBUG] [Thread-205682] [transport.py] [_log()] Compression: none
2026-02-15T14:16:34.398 [DEBUG] [Thread-205682] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:16:34.461 [DEBUG] [Thread-205682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:16:34.462 [DEBUG] [Thread-205682] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:16:34.462 [DEBUG] [Thread-205682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:16:34.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:16:34.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:16:34.525 [DEBUG] [Thread-205682] [transport.py] [_log()] userauth is OK
2026-02-15T14:16:34.525 [DEBUG] [Thread-205682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:16:34.526 [DEBUG] [Thread-205682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:16:34.526 [DEBUG] [Thread-205682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:16:34.526 [DEBUG] [Thread-205682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:16:34.548 [INFO] [Thread-205682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:16:34.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:16:34.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:16:35.392 [DEBUG] [Thread-205682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:16:35.392 [DEBUG] [Thread-205682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:16:35.441 [DEBUG] [Thread-205682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:16:35.441 [DEBUG] [Thread-205682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:16:35.451 [DEBUG] [Thread-205682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:16:35.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:16:35.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:16:35.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:16:35.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:16:35.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:16:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:16:35.499 [DEBUG] [Thread-205682] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:16:40.010 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:16:40.011 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:16:41.675 [DEBUG] [Thread-205684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:16:51.781 [DEBUG] [Thread-205685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:16:56.737 [DEBUG] [Thread-205686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:05.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:17:05.496 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:17:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:17:07.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 16, 42), 25.44, 18.34, 0.0, 17.26, 23.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:17:07.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:16:42
2026-02-15T14:17:07.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:17:07.924 [DEBUG] [Thread-205687] [transport.py] [_log()] starting thread (client mode): 0xa2d19d20
2026-02-15T14:17:07.924 [DEBUG] [Thread-205687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:17:07.944 [DEBUG] [Thread-205687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:17:07.944 [INFO] [Thread-205687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:07.947 [DEBUG] [Thread-205687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] client lang: <none>
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] server lang: <none>
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] kex follows: False
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] Compression: none
2026-02-15T14:17:07.948 [DEBUG] [Thread-205687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:17:07.967 [DEBUG] [Thread-205687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:17:07.968 [DEBUG] [Thread-205687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:17:07.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:17:07.969 [DEBUG] [Thread-205687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:17:07.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:17:07.971 [DEBUG] [Thread-205687] [transport.py] [_log()] userauth is OK
2026-02-15T14:17:07.971 [DEBUG] [Thread-205687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:17:07.971 [DEBUG] [Thread-205687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:17:07.971 [DEBUG] [Thread-205687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:17:07.971 [DEBUG] [Thread-205687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:17:07.992 [INFO] [Thread-205687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:17:07.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:17:08.633 [DEBUG] [Thread-205687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:17:08.634 [DEBUG] [Thread-205687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:17:08.634 [DEBUG] [Thread-205687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:17:08.674 [DEBUG] [Thread-205687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:17:08.674 [DEBUG] [Thread-205687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:17:08.678 [DEBUG] [Thread-205687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:17:08.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:17:08.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:17:08.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:17:08.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:17:08.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:17:08.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:17:08.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:17:08.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:17:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:17:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.511555 -999.00  +23.20  13.59     23   +1.40 1 1 1 1 1   888    0 20.76 -29.77 ----- 13.6 13.6 166.6 18.8 30.7 -29.5 29.9 -28.3 30.9 -28.0 32.0 -30.3
2026-02-15T14:17:08.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:17:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:17:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.511555
2026-02-15T14:17:08.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:17:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:17:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:17:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:17:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:17:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:16:42', tmtdew=25.44, humidity=18.34, cloud=0.0, wind=17.26, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:16:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:17:08.705 [DEBUG] [Thread-205687] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:17:08.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:17:08.808 [DEBUG] [Thread-205690] [transport.py] [_log()] starting thread (client mode): 0xa57e1480
2026-02-15T14:17:08.808 [DEBUG] [Thread-205690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:17:08.822 [DEBUG] [Thread-205690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:17:08.822 [INFO] [Thread-205690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:17:08.830 [DEBUG] [Thread-205690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:17:08.830 [DEBUG] [Thread-205690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] client lang: <none>
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] server lang: <none>
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] kex follows: False
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] Compression: none
2026-02-15T14:17:08.831 [DEBUG] [Thread-205690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:17:08.887 [DEBUG] [Thread-205690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:17:08.888 [DEBUG] [Thread-205690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:17:08.888 [DEBUG] [Thread-205690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:17:08.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:17:08.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:17:08.944 [DEBUG] [Thread-205690] [transport.py] [_log()] userauth is OK
2026-02-15T14:17:08.944 [DEBUG] [Thread-205690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:17:08.944 [DEBUG] [Thread-205690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:17:08.944 [DEBUG] [Thread-205690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:17:08.945 [DEBUG] [Thread-205690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:17:08.964 [INFO] [Thread-205690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:17:08.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:17:08.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:17:09.777 [DEBUG] [Thread-205690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:17:09.777 [DEBUG] [Thread-205690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:17:09.825 [DEBUG] [Thread-205690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:17:09.826 [DEBUG] [Thread-205690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:17:09.835 [DEBUG] [Thread-205690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:17:09.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:17:09.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:17:09.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:17:09.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:17:09.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:17:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:17:09.873 [DEBUG] [Thread-205690] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:17:11.774 [DEBUG] [Thread-205692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:26.834 [DEBUG] [Thread-205693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:39.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:17:39.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:17:39.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:17:40.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:40.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:41.873 [DEBUG] [Thread-205694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 17, 18), 24.63, 19.02, 0.0, 16.59, 22.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:17:42.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:17:18
2026-02-15T14:17:43.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:17:43.266 [DEBUG] [Thread-205695] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d00
2026-02-15T14:17:43.266 [DEBUG] [Thread-205695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:17:43.279 [DEBUG] [Thread-205695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:17:43.279 [INFO] [Thread-205695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] client lang: <none>
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] server lang: <none>
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] kex follows: False
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] Compression: none
2026-02-15T14:17:43.282 [DEBUG] [Thread-205695] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:17:43.296 [DEBUG] [Thread-205695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:17:43.297 [DEBUG] [Thread-205695] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:17:43.297 [DEBUG] [Thread-205695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:17:43.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:17:43.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:17:43.299 [DEBUG] [Thread-205695] [transport.py] [_log()] userauth is OK
2026-02-15T14:17:43.299 [DEBUG] [Thread-205695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:17:43.299 [DEBUG] [Thread-205695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:17:43.299 [DEBUG] [Thread-205695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:17:43.299 [DEBUG] [Thread-205695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:17:43.322 [INFO] [Thread-205695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:17:43.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:17:43.937 [DEBUG] [Thread-205695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:17:43.938 [DEBUG] [Thread-205695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:17:43.938 [DEBUG] [Thread-205695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:17:43.978 [DEBUG] [Thread-205695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:17:43.979 [DEBUG] [Thread-205695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:17:43.982 [DEBUG] [Thread-205695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:17:43.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:17:43.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:17:43.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:17:43.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:17:44.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:17:44.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:17:44.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:17:44.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:17:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:17:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.511902 -999.00  +23.00  12.36     24   +1.30 1 1 1 1 1   888    0 20.79 -24.51 ----- 12.4 12.4 157.9 20.7 30.7 -29.4 29.9 -29.0 30.9 -28.7 32.0 -30.4
2026-02-15T14:17:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:17:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:17:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.511902
2026-02-15T14:17:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:17:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:17:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:17:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:17:44.008 [DEBUG] [Thread-205695] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:17:44.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:17:44.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:17:18', tmtdew=24.63, humidity=19.02, cloud=0.0, wind=16.59, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:17:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:17:44.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:17:44.106 [DEBUG] [Thread-205698] [transport.py] [_log()] starting thread (client mode): 0xa2d18d60
2026-02-15T14:17:44.106 [DEBUG] [Thread-205698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:17:44.122 [DEBUG] [Thread-205698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:17:44.122 [INFO] [Thread-205698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:17:44.130 [DEBUG] [Thread-205698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] client lang: <none>
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] server lang: <none>
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] kex follows: False
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] Compression: none
2026-02-15T14:17:44.131 [DEBUG] [Thread-205698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:17:44.188 [DEBUG] [Thread-205698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:17:44.188 [DEBUG] [Thread-205698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:17:44.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:17:44.189 [DEBUG] [Thread-205698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:17:44.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:17:44.248 [DEBUG] [Thread-205698] [transport.py] [_log()] userauth is OK
2026-02-15T14:17:44.248 [DEBUG] [Thread-205698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:17:44.248 [DEBUG] [Thread-205698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:17:44.249 [DEBUG] [Thread-205698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:17:44.249 [DEBUG] [Thread-205698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:17:44.268 [INFO] [Thread-205698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:17:44.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:17:44.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:17:45.088 [DEBUG] [Thread-205698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:17:45.088 [DEBUG] [Thread-205698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:17:45.136 [DEBUG] [Thread-205698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:17:45.137 [DEBUG] [Thread-205698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:17:45.147 [DEBUG] [Thread-205698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:17:45.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:17:45.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:17:45.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:17:45.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:17:45.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:17:45.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:17:45.183 [DEBUG] [Thread-205698] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:17:51.821 [DEBUG] [Thread-205700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:17:56.909 [DEBUG] [Thread-205701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:11.970 [DEBUG] [Thread-205702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:15.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:18:15.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:18:15.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:18:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 17, 53), 24.75, 19.16, 0.0, 19.46, 22.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:18:17.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:17:53
2026-02-15T14:18:17.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:18:17.560 [DEBUG] [Thread-205703] [transport.py] [_log()] starting thread (client mode): 0xa2d00250
2026-02-15T14:18:17.560 [DEBUG] [Thread-205703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:18:17.580 [DEBUG] [Thread-205703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:18:17.580 [INFO] [Thread-205703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:18:17.583 [DEBUG] [Thread-205703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:18:17.583 [DEBUG] [Thread-205703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:18:17.583 [DEBUG] [Thread-205703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:18:17.583 [DEBUG] [Thread-205703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:17.583 [DEBUG] [Thread-205703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] client lang: <none>
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] server lang: <none>
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] kex follows: False
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] Compression: none
2026-02-15T14:18:17.584 [DEBUG] [Thread-205703] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:18:17.604 [DEBUG] [Thread-205703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:18:17.604 [DEBUG] [Thread-205703] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:18:17.605 [DEBUG] [Thread-205703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:18:17.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:18:17.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:18:17.607 [DEBUG] [Thread-205703] [transport.py] [_log()] userauth is OK
2026-02-15T14:18:17.607 [DEBUG] [Thread-205703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:18:17.607 [DEBUG] [Thread-205703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:18:17.607 [DEBUG] [Thread-205703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:18:17.607 [DEBUG] [Thread-205703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:18:17.640 [INFO] [Thread-205703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:18:17.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:18:18.293 [DEBUG] [Thread-205703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:18:18.294 [DEBUG] [Thread-205703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:18:18.294 [DEBUG] [Thread-205703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:18:18.335 [DEBUG] [Thread-205703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:18:18.336 [DEBUG] [Thread-205703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:18:18.339 [DEBUG] [Thread-205703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:18:18.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:18:18.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:18:18.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:18:18.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:18:18.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:18:18.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:18:18.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:18:18.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:18:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:18:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.512249 -999.00  +22.80  22.33     24   +1.30 1 1 1 1 1   888    0 20.68 -18.26 ----- 22.3 22.3 145.2 26.0 30.6 -30.2 29.8 -30.1 30.7 -28.6 31.9 -30.5
2026-02-15T14:18:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:18:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:18:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.512249
2026-02-15T14:18:18.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:18:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:18:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:18:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:18:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:18:18.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:17:53', tmtdew=24.75, humidity=19.16, cloud=0.0, wind=19.46, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:17:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:18:18.365 [DEBUG] [Thread-205703] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:18:18.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:18:18.462 [DEBUG] [Thread-205706] [transport.py] [_log()] starting thread (client mode): 0xa2d01d80
2026-02-15T14:18:18.462 [DEBUG] [Thread-205706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:18:18.476 [DEBUG] [Thread-205706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:18:18.476 [INFO] [Thread-205706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:18:18.484 [DEBUG] [Thread-205706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:18:18.484 [DEBUG] [Thread-205706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:18:18.484 [DEBUG] [Thread-205706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:18:18.484 [DEBUG] [Thread-205706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:18.484 [DEBUG] [Thread-205706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] client lang: <none>
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] server lang: <none>
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] kex follows: False
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:18:18.485 [DEBUG] [Thread-205706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:18:18.486 [DEBUG] [Thread-205706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:18:18.486 [DEBUG] [Thread-205706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:18:18.486 [DEBUG] [Thread-205706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:18:18.486 [DEBUG] [Thread-205706] [transport.py] [_log()] Compression: none
2026-02-15T14:18:18.486 [DEBUG] [Thread-205706] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:18:18.543 [DEBUG] [Thread-205706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:18:18.544 [DEBUG] [Thread-205706] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:18:18.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:18:18.545 [DEBUG] [Thread-205706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:18:18.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:18:18.600 [DEBUG] [Thread-205706] [transport.py] [_log()] userauth is OK
2026-02-15T14:18:18.600 [DEBUG] [Thread-205706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:18:18.600 [DEBUG] [Thread-205706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:18:18.600 [DEBUG] [Thread-205706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:18:18.600 [DEBUG] [Thread-205706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:18:18.619 [INFO] [Thread-205706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:18:18.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:18:18.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:18:19.418 [DEBUG] [Thread-205706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:18:19.418 [DEBUG] [Thread-205706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:18:19.466 [DEBUG] [Thread-205706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:18:19.467 [DEBUG] [Thread-205706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:18:19.476 [DEBUG] [Thread-205706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:18:19.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:18:19.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:18:19.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:18:19.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:18:19.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:18:19.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:18:19.510 [DEBUG] [Thread-205706] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:18:27.011 [DEBUG] [Thread-205708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:40.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:40.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:42.063 [DEBUG] [Thread-205709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:49.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:18:49.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:18:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:18:51.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 18, 28), 24.93, 18.92, 0.0, 24.33, 22.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:18:51.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:18:28
2026-02-15T14:18:51.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:18:51.830 [DEBUG] [Thread-205710] [transport.py] [_log()] starting thread (client mode): 0xa2d693c0
2026-02-15T14:18:51.830 [DEBUG] [Thread-205710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:18:51.849 [DEBUG] [Thread-205711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:18:51.850 [DEBUG] [Thread-205710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:18:51.850 [INFO] [Thread-205710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] client lang: <none>
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] server lang: <none>
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] kex follows: False
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] Compression: none
2026-02-15T14:18:51.853 [DEBUG] [Thread-205710] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:18:51.869 [DEBUG] [Thread-205710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:18:51.870 [DEBUG] [Thread-205710] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:18:51.870 [DEBUG] [Thread-205710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:18:51.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:18:51.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:18:51.871 [DEBUG] [Thread-205710] [transport.py] [_log()] userauth is OK
2026-02-15T14:18:51.872 [DEBUG] [Thread-205710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:18:51.872 [DEBUG] [Thread-205710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:18:51.872 [DEBUG] [Thread-205710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:18:51.872 [DEBUG] [Thread-205710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:18:51.891 [INFO] [Thread-205710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:18:51.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:18:52.471 [DEBUG] [Thread-205710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:18:52.471 [DEBUG] [Thread-205710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:18:52.472 [DEBUG] [Thread-205710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:18:52.512 [DEBUG] [Thread-205710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:18:52.513 [DEBUG] [Thread-205710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:18:52.516 [DEBUG] [Thread-205710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:18:52.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:18:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:18:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:18:52.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:18:52.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:18:52.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:18:52.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:18:52.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:18:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:18:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.512597 -999.00  +22.40  14.02     25   +1.40 1 1 1 1 1   888    0 21.16 -14.34 ----- 14.0 14.0 138.2 20.2 30.6 -29.3 29.8 -28.6 30.9 -27.3 31.9 -29.9
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.512597
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:18:52.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:18:28', tmtdew=24.93, humidity=18.92, cloud=0.0, wind=24.33, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:18:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:18:52.541 [DEBUG] [Thread-205710] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:18:52.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:18:52.641 [DEBUG] [Thread-205714] [transport.py] [_log()] starting thread (client mode): 0xa57e0460
2026-02-15T14:18:52.642 [DEBUG] [Thread-205714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:18:52.656 [DEBUG] [Thread-205714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:18:52.656 [INFO] [Thread-205714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] client lang: <none>
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] server lang: <none>
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] kex follows: False
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:18:52.664 [DEBUG] [Thread-205714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:18:52.665 [DEBUG] [Thread-205714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:18:52.665 [DEBUG] [Thread-205714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:18:52.665 [DEBUG] [Thread-205714] [transport.py] [_log()] Compression: none
2026-02-15T14:18:52.665 [DEBUG] [Thread-205714] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:18:52.723 [DEBUG] [Thread-205714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:18:52.724 [DEBUG] [Thread-205714] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:18:52.724 [DEBUG] [Thread-205714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:18:52.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:18:52.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:18:52.780 [DEBUG] [Thread-205714] [transport.py] [_log()] userauth is OK
2026-02-15T14:18:52.780 [DEBUG] [Thread-205714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:18:52.780 [DEBUG] [Thread-205714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:18:52.780 [DEBUG] [Thread-205714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:18:52.780 [DEBUG] [Thread-205714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:18:52.799 [INFO] [Thread-205714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:18:52.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:18:52.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:18:53.669 [DEBUG] [Thread-205714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:18:53.670 [DEBUG] [Thread-205714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:18:53.717 [DEBUG] [Thread-205714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:18:53.718 [DEBUG] [Thread-205714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:18:53.727 [DEBUG] [Thread-205714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:18:53.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:18:53.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:18:53.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:18:53.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:18:53.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:18:53.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:18:53.765 [DEBUG] [Thread-205714] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:18:57.101 [DEBUG] [Thread-205716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:12.163 [DEBUG] [Thread-205717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:23.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:19:23.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:19:23.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:19:25.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 19, 4), 24.97, 18.89, 0.0, 24.74, 23.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:19:25.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:19:04
2026-02-15T14:19:25.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:19:26.094 [DEBUG] [Thread-205718] [transport.py] [_log()] starting thread (client mode): 0xa2d4e860
2026-02-15T14:19:26.094 [DEBUG] [Thread-205718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:19:26.115 [DEBUG] [Thread-205718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:19:26.115 [INFO] [Thread-205718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:19:26.117 [DEBUG] [Thread-205718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] client lang: <none>
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] server lang: <none>
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] kex follows: False
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] Compression: none
2026-02-15T14:19:26.118 [DEBUG] [Thread-205718] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:19:26.133 [DEBUG] [Thread-205718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:19:26.133 [DEBUG] [Thread-205718] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:19:26.133 [DEBUG] [Thread-205718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:19:26.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:19:26.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:19:26.134 [DEBUG] [Thread-205718] [transport.py] [_log()] userauth is OK
2026-02-15T14:19:26.134 [DEBUG] [Thread-205718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:19:26.134 [DEBUG] [Thread-205718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:19:26.134 [DEBUG] [Thread-205718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:19:26.134 [DEBUG] [Thread-205718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:19:26.144 [INFO] [Thread-205718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:19:26.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:19:26.769 [DEBUG] [Thread-205718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:19:26.769 [DEBUG] [Thread-205718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:19:26.769 [DEBUG] [Thread-205718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:19:26.810 [DEBUG] [Thread-205718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:19:26.810 [DEBUG] [Thread-205718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:19:26.813 [DEBUG] [Thread-205718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:19:26.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:19:26.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:19:26.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:19:26.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:19:26.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:19:26.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:19:26.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:19:26.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:19:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:19:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.512944 -999.00  +22.70  11.34     24   +1.60 1 1 1 1 1   888    0 21.75 -8.64 ----- 11.3 11.3 134.6 17.0 30.6 -30.8 30.0 -28.7 31.0 -27.0 32.0 -29.2
2026-02-15T14:19:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:19:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:19:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.512944
2026-02-15T14:19:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:19:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:19:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:19:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:19:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:19:26.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:19:04', tmtdew=24.97, humidity=18.89, cloud=0.0, wind=24.74, temperature=23.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:18:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:19:26.841 [DEBUG] [Thread-205718] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:19:26.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:19:26.936 [DEBUG] [Thread-205721] [transport.py] [_log()] starting thread (client mode): 0xa5742710
2026-02-15T14:19:26.936 [DEBUG] [Thread-205721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:19:26.951 [DEBUG] [Thread-205721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:19:26.952 [INFO] [Thread-205721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:19:26.959 [DEBUG] [Thread-205721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:19:26.959 [DEBUG] [Thread-205721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:19:26.959 [DEBUG] [Thread-205721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] client lang: <none>
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] server lang: <none>
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] kex follows: False
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] Compression: none
2026-02-15T14:19:26.960 [DEBUG] [Thread-205721] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:19:27.019 [DEBUG] [Thread-205721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:19:27.020 [DEBUG] [Thread-205721] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:19:27.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:19:27.021 [DEBUG] [Thread-205721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:19:27.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:19:27.080 [DEBUG] [Thread-205721] [transport.py] [_log()] userauth is OK
2026-02-15T14:19:27.080 [DEBUG] [Thread-205721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:19:27.080 [DEBUG] [Thread-205721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:19:27.081 [DEBUG] [Thread-205721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:19:27.081 [DEBUG] [Thread-205721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:19:27.100 [INFO] [Thread-205721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:19:27.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:19:27.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:19:27.200 [DEBUG] [Thread-205723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:27.963 [DEBUG] [Thread-205721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:19:27.963 [DEBUG] [Thread-205721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:19:28.012 [DEBUG] [Thread-205721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:19:28.012 [DEBUG] [Thread-205721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:19:28.021 [DEBUG] [Thread-205721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:19:28.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:19:28.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:19:28.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:19:28.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:19:28.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:19:28.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:19:28.058 [DEBUG] [Thread-205721] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:19:40.437 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:40.438 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:42.256 [DEBUG] [Thread-205724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:51.883 [DEBUG] [Thread-205725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:57.293 [DEBUG] [Thread-205726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:19:58.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:19:58.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:19:58.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:19:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 19, 39), 25.24, 18.51, 0.0, 21.38, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:19:59.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:19:39
2026-02-15T14:20:00.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:20:00.499 [DEBUG] [Thread-205727] [transport.py] [_log()] starting thread (client mode): 0xa2d4ee60
2026-02-15T14:20:00.499 [DEBUG] [Thread-205727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:20:00.518 [DEBUG] [Thread-205727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:20:00.518 [INFO] [Thread-205727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] client lang: <none>
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] server lang: <none>
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] kex follows: False
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:20:00.519 [DEBUG] [Thread-205727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:20:00.520 [DEBUG] [Thread-205727] [transport.py] [_log()] Compression: none
2026-02-15T14:20:00.520 [DEBUG] [Thread-205727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:20:00.536 [DEBUG] [Thread-205727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:20:00.537 [DEBUG] [Thread-205727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:20:00.537 [DEBUG] [Thread-205727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:20:00.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:20:00.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:20:00.540 [DEBUG] [Thread-205727] [transport.py] [_log()] userauth is OK
2026-02-15T14:20:00.540 [DEBUG] [Thread-205727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:20:00.540 [DEBUG] [Thread-205727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:20:00.540 [DEBUG] [Thread-205727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:20:00.540 [DEBUG] [Thread-205727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:20:00.565 [INFO] [Thread-205727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:20:00.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:20:01.181 [DEBUG] [Thread-205727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:20:01.181 [DEBUG] [Thread-205727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:20:01.182 [DEBUG] [Thread-205727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:20:01.223 [DEBUG] [Thread-205727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:20:01.223 [DEBUG] [Thread-205727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:20:01.225 [DEBUG] [Thread-205727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:20:01.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:20:01.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:20:01.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:20:01.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:20:01.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:20:01.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.513291 -999.00  +23.00  15.60     24   +1.60 1 1 1 1 1   888    0 21.02 -3.68 ----- 15.6 15.6 158.8 20.2 30.6 -29.6 30.0 -28.4 30.9 -27.8 32.0 -29.7
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:20:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.513291
2026-02-15T14:20:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:20:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:20:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:20:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:20:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:20:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:19:39', tmtdew=25.24, humidity=18.51, cloud=0.0, wind=21.38, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:19:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:20:01.244 [DEBUG] [Thread-205727] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:20:01.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:20:01.330 [DEBUG] [Thread-205730] [transport.py] [_log()] starting thread (client mode): 0xa2d6ad70
2026-02-15T14:20:01.330 [DEBUG] [Thread-205730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:20:01.345 [DEBUG] [Thread-205730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:20:01.345 [INFO] [Thread-205730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] client lang: <none>
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] server lang: <none>
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] kex follows: False
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] Compression: none
2026-02-15T14:20:01.352 [DEBUG] [Thread-205730] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:20:01.410 [DEBUG] [Thread-205730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:20:01.410 [DEBUG] [Thread-205730] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:20:01.410 [DEBUG] [Thread-205730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:20:01.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:20:01.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:20:01.467 [DEBUG] [Thread-205730] [transport.py] [_log()] userauth is OK
2026-02-15T14:20:01.468 [DEBUG] [Thread-205730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:20:01.468 [DEBUG] [Thread-205730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:20:01.468 [DEBUG] [Thread-205730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:20:01.468 [DEBUG] [Thread-205730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:20:01.493 [INFO] [Thread-205730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:20:01.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:20:01.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:20:02.346 [DEBUG] [Thread-205730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:20:02.346 [DEBUG] [Thread-205730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:20:02.394 [DEBUG] [Thread-205730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:20:02.394 [DEBUG] [Thread-205730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:20:02.402 [DEBUG] [Thread-205730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:20:02.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:20:02.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:20:02.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:20:02.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:20:02.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:20:02.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:20:02.434 [DEBUG] [Thread-205730] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:20:12.329 [DEBUG] [Thread-205732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:20:27.383 [DEBUG] [Thread-205733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:20:32.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:20:32.457 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:20:32.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:20:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 20, 15), 24.88, 18.97, 0.0, 23.4, 22.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:20:34.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:20:15
2026-02-15T14:20:34.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:20:34.812 [DEBUG] [Thread-205734] [transport.py] [_log()] starting thread (client mode): 0xa2db4970
2026-02-15T14:20:34.812 [DEBUG] [Thread-205734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:20:34.832 [DEBUG] [Thread-205734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:20:34.832 [INFO] [Thread-205734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] client lang: <none>
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] server lang: <none>
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] kex follows: False
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] Compression: none
2026-02-15T14:20:34.835 [DEBUG] [Thread-205734] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:20:34.850 [DEBUG] [Thread-205734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:20:34.850 [DEBUG] [Thread-205734] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:20:34.850 [DEBUG] [Thread-205734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:20:34.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:20:34.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:20:34.851 [DEBUG] [Thread-205734] [transport.py] [_log()] userauth is OK
2026-02-15T14:20:34.851 [DEBUG] [Thread-205734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:20:34.851 [DEBUG] [Thread-205734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:20:34.851 [DEBUG] [Thread-205734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:20:34.851 [DEBUG] [Thread-205734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:20:34.860 [INFO] [Thread-205734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:20:34.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:20:35.499 [DEBUG] [Thread-205734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:20:35.499 [DEBUG] [Thread-205734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:20:35.500 [DEBUG] [Thread-205734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:20:35.540 [DEBUG] [Thread-205734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:20:35.540 [DEBUG] [Thread-205734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:20:35.544 [DEBUG] [Thread-205734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:20:35.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:20:35.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:20:35.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:20:35.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:20:35.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:20:35.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:20:35.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:20:35.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:20:35.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:20:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.513985 -999.00  +23.10  22.50     24   +1.50 1 1 1 1 1   888    0 21.50 0.08 ----- 22.5 22.5 125.6 25.0 30.7 -29.3 30.1 -29.3 31.1 -27.8 32.0 -29.8
2026-02-15T14:20:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:20:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:20:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.513985
2026-02-15T14:20:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:20:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:20:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:20:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:20:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:20:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:20:15', tmtdew=24.88, humidity=18.97, cloud=0.0, wind=23.4, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:20:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:20:35.577 [DEBUG] [Thread-205734] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:20:35.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:20:35.675 [DEBUG] [Thread-205737] [transport.py] [_log()] starting thread (client mode): 0xa2db50f0
2026-02-15T14:20:35.675 [DEBUG] [Thread-205737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:20:35.690 [DEBUG] [Thread-205737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:20:35.690 [INFO] [Thread-205737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:35.698 [DEBUG] [Thread-205737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] client lang: <none>
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] server lang: <none>
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] kex follows: False
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] Compression: none
2026-02-15T14:20:35.699 [DEBUG] [Thread-205737] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:20:35.755 [DEBUG] [Thread-205737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:20:35.756 [DEBUG] [Thread-205737] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:20:35.756 [DEBUG] [Thread-205737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:20:35.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:20:35.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:20:35.812 [DEBUG] [Thread-205737] [transport.py] [_log()] userauth is OK
2026-02-15T14:20:35.812 [DEBUG] [Thread-205737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:20:35.812 [DEBUG] [Thread-205737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:20:35.812 [DEBUG] [Thread-205737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:20:35.812 [DEBUG] [Thread-205737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:20:35.832 [INFO] [Thread-205737] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:20:35.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:20:35.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:20:36.727 [DEBUG] [Thread-205737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:20:36.728 [DEBUG] [Thread-205737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:20:36.776 [DEBUG] [Thread-205737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:20:36.776 [DEBUG] [Thread-205737] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:20:36.785 [DEBUG] [Thread-205737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:20:36.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:20:36.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:20:36.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:20:36.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:20:36.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:20:36.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:20:36.821 [DEBUG] [Thread-205737] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:20:40.579 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:20:40.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:20:42.422 [DEBUG] [Thread-205739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:20:51.929 [DEBUG] [Thread-205740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:20:57.486 [DEBUG] [Thread-205741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:06.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:21:06.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:21:06.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:21:08.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 20, 51), 25.4, 18.22, 0.0, 23.61, 23.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:21:08.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:20:51
2026-02-15T14:21:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:21:09.215 [DEBUG] [Thread-205742] [transport.py] [_log()] starting thread (client mode): 0xa81d6b00
2026-02-15T14:21:09.215 [DEBUG] [Thread-205742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:21:09.238 [DEBUG] [Thread-205742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:21:09.238 [INFO] [Thread-205742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] client lang: <none>
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] server lang: <none>
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] kex follows: False
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:21:09.243 [DEBUG] [Thread-205742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:21:09.244 [DEBUG] [Thread-205742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:21:09.244 [DEBUG] [Thread-205742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:21:09.244 [DEBUG] [Thread-205742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:21:09.244 [DEBUG] [Thread-205742] [transport.py] [_log()] Compression: none
2026-02-15T14:21:09.244 [DEBUG] [Thread-205742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:21:09.262 [DEBUG] [Thread-205742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:21:09.262 [DEBUG] [Thread-205742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:21:09.263 [DEBUG] [Thread-205742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:21:09.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:21:09.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:21:09.265 [DEBUG] [Thread-205742] [transport.py] [_log()] userauth is OK
2026-02-15T14:21:09.265 [DEBUG] [Thread-205742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:21:09.265 [DEBUG] [Thread-205742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:21:09.265 [DEBUG] [Thread-205742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:21:09.266 [DEBUG] [Thread-205742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:21:09.289 [INFO] [Thread-205742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:21:09.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:21:09.966 [DEBUG] [Thread-205742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:21:09.966 [DEBUG] [Thread-205742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:21:09.967 [DEBUG] [Thread-205742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:21:10.008 [DEBUG] [Thread-205742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:21:10.008 [DEBUG] [Thread-205742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:21:10.011 [DEBUG] [Thread-205742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:21:10.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:21:10.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:21:10.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:21:10.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:21:10.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:21:10.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:21:10.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:21:10.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.514333 -999.00  +23.40  22.21     24   +1.80 1 1 1 1 1   888    0 21.78 -0.46 ----- 22.2 22.2 110.8 27.7 30.4 -30.1 30.1 -28.9 31.1 -28.0 32.0 -28.5
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.514333
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:21:10.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:21:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:21:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:21:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:21:10.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:20:51', tmtdew=25.4, humidity=18.22, cloud=0.0, wind=23.61, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:20:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:21:10.034 [DEBUG] [Thread-205742] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:21:10.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:21:10.121 [DEBUG] [Thread-205745] [transport.py] [_log()] starting thread (client mode): 0xa2d01930
2026-02-15T14:21:10.121 [DEBUG] [Thread-205745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:21:10.135 [DEBUG] [Thread-205745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:21:10.136 [INFO] [Thread-205745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:21:10.143 [DEBUG] [Thread-205745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] client lang: <none>
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] server lang: <none>
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] kex follows: False
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:21:10.144 [DEBUG] [Thread-205745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:21:10.145 [DEBUG] [Thread-205745] [transport.py] [_log()] Compression: none
2026-02-15T14:21:10.145 [DEBUG] [Thread-205745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:21:10.203 [DEBUG] [Thread-205745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:21:10.204 [DEBUG] [Thread-205745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:21:10.204 [DEBUG] [Thread-205745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:21:10.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:21:10.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:21:10.259 [DEBUG] [Thread-205745] [transport.py] [_log()] userauth is OK
2026-02-15T14:21:10.260 [DEBUG] [Thread-205745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:21:10.260 [DEBUG] [Thread-205745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:21:10.260 [DEBUG] [Thread-205745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:21:10.260 [DEBUG] [Thread-205745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:21:10.278 [INFO] [Thread-205745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:21:10.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:21:10.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:21:11.104 [DEBUG] [Thread-205745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:21:11.105 [DEBUG] [Thread-205745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:21:11.152 [DEBUG] [Thread-205745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:21:11.153 [DEBUG] [Thread-205745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:21:11.162 [DEBUG] [Thread-205745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:21:11.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:21:11.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:21:11.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:21:11.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:21:11.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:21:11.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:21:11.199 [DEBUG] [Thread-205745] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:21:12.530 [DEBUG] [Thread-205747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:27.588 [DEBUG] [Thread-205748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:40.721 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:40.722 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:41.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:21:41.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:21:41.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:21:42.627 [DEBUG] [Thread-205749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:43.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 21, 27), 25.62, 18.01, 0.0, 22.83, 23.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:21:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:21:27
2026-02-15T14:21:44.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:21:44.343 [DEBUG] [Thread-205750] [transport.py] [_log()] starting thread (client mode): 0xa2d00a30
2026-02-15T14:21:44.343 [DEBUG] [Thread-205750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:21:44.364 [DEBUG] [Thread-205750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:21:44.365 [INFO] [Thread-205750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:21:44.368 [DEBUG] [Thread-205750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:21:44.368 [DEBUG] [Thread-205750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:21:44.368 [DEBUG] [Thread-205750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:21:44.368 [DEBUG] [Thread-205750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] client lang: <none>
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] server lang: <none>
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] kex follows: False
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] Compression: none
2026-02-15T14:21:44.369 [DEBUG] [Thread-205750] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:21:44.387 [DEBUG] [Thread-205750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:21:44.387 [DEBUG] [Thread-205750] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:21:44.388 [DEBUG] [Thread-205750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:21:44.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:21:44.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:21:44.390 [DEBUG] [Thread-205750] [transport.py] [_log()] userauth is OK
2026-02-15T14:21:44.390 [DEBUG] [Thread-205750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:21:44.390 [DEBUG] [Thread-205750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:21:44.390 [DEBUG] [Thread-205750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:21:44.390 [DEBUG] [Thread-205750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:21:44.412 [INFO] [Thread-205750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:21:44.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:21:45.147 [DEBUG] [Thread-205750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:21:45.147 [DEBUG] [Thread-205750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:21:45.147 [DEBUG] [Thread-205750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:21:45.188 [DEBUG] [Thread-205750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:21:45.189 [DEBUG] [Thread-205750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:21:45.191 [DEBUG] [Thread-205750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:21:45.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:21:45.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:21:45.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:21:45.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:21:45.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:21:45.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:21:45.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:21:45.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:21:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:21:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.514680 -999.00  +23.40  16.48     23   +1.60 1 1 1 1 1   888    0 21.89 0.80 ----- 16.5 16.5 108.4 27.5 30.4 -29.7 30.1 -29.1 31.1 -28.3 32.0 -30.0
2026-02-15T14:21:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:21:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:21:45.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.514680
2026-02-15T14:21:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:21:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:21:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:21:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:21:45.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:21:45.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:21:27', tmtdew=25.62, humidity=18.01, cloud=0.0, wind=22.83, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:21:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:21:45.218 [DEBUG] [Thread-205750] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:21:45.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:21:45.322 [DEBUG] [Thread-205753] [transport.py] [_log()] starting thread (client mode): 0xa81d6b00
2026-02-15T14:21:45.322 [DEBUG] [Thread-205753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:21:45.337 [DEBUG] [Thread-205753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:21:45.337 [INFO] [Thread-205753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:21:45.345 [DEBUG] [Thread-205753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:21:45.345 [DEBUG] [Thread-205753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] client lang: <none>
2026-02-15T14:21:45.346 [DEBUG] [Thread-205753] [transport.py] [_log()] server lang: <none>
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] kex follows: False
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:21:45.347 [DEBUG] [Thread-205753] [transport.py] [_log()] Compression: none
2026-02-15T14:21:45.348 [DEBUG] [Thread-205753] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:21:45.404 [DEBUG] [Thread-205753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:21:45.405 [DEBUG] [Thread-205753] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:21:45.406 [DEBUG] [Thread-205753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:21:45.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:21:45.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:21:45.460 [DEBUG] [Thread-205753] [transport.py] [_log()] userauth is OK
2026-02-15T14:21:45.460 [DEBUG] [Thread-205753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:21:45.461 [DEBUG] [Thread-205753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:21:45.461 [DEBUG] [Thread-205753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:21:45.461 [DEBUG] [Thread-205753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:21:45.480 [INFO] [Thread-205753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:21:45.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:21:45.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:21:46.318 [DEBUG] [Thread-205753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:21:46.318 [DEBUG] [Thread-205753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:21:46.366 [DEBUG] [Thread-205753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:21:46.367 [DEBUG] [Thread-205753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:21:46.376 [DEBUG] [Thread-205753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:21:46.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:21:46.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:21:46.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:21:46.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:21:46.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:21:46.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:21:46.414 [DEBUG] [Thread-205753] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:21:51.983 [DEBUG] [Thread-205755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:21:57.662 [DEBUG] [Thread-205756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:12.714 [DEBUG] [Thread-205757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:16.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:22:16.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:22:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:22:18.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 22, 2), 25.65, 17.96, 0.0, 21.86, 23.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:22:18.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:22:02
2026-02-15T14:22:18.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:22:18.892 [DEBUG] [Thread-205758] [transport.py] [_log()] starting thread (client mode): 0xa2d6a350
2026-02-15T14:22:18.893 [DEBUG] [Thread-205758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:22:18.913 [DEBUG] [Thread-205758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:22:18.913 [INFO] [Thread-205758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] client lang: <none>
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] server lang: <none>
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] kex follows: False
2026-02-15T14:22:18.917 [DEBUG] [Thread-205758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:22:18.918 [DEBUG] [Thread-205758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:22:18.918 [DEBUG] [Thread-205758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:22:18.918 [DEBUG] [Thread-205758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:22:18.918 [DEBUG] [Thread-205758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:22:18.918 [DEBUG] [Thread-205758] [transport.py] [_log()] Compression: none
2026-02-15T14:22:18.918 [DEBUG] [Thread-205758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:22:18.937 [DEBUG] [Thread-205758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:22:18.937 [DEBUG] [Thread-205758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:22:18.938 [DEBUG] [Thread-205758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:22:18.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:22:18.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:22:18.940 [DEBUG] [Thread-205758] [transport.py] [_log()] userauth is OK
2026-02-15T14:22:18.940 [DEBUG] [Thread-205758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:22:18.940 [DEBUG] [Thread-205758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:22:18.940 [DEBUG] [Thread-205758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:22:18.941 [DEBUG] [Thread-205758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:22:18.963 [INFO] [Thread-205758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:22:18.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:22:19.566 [DEBUG] [Thread-205758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:22:19.566 [DEBUG] [Thread-205758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:22:19.567 [DEBUG] [Thread-205758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:22:19.608 [DEBUG] [Thread-205758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:22:19.608 [DEBUG] [Thread-205758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:22:19.610 [DEBUG] [Thread-205758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:22:19.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:22:19.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:22:19.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:22:19.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:22:19.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:22:19.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:22:19.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:22:19.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:22:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:22:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.515027 -999.00  +23.30  14.62     24   +1.70 1 1 1 1 1   888    0 21.62 0.95 ----- 14.6 14.6 113.2 21.7 30.4 -31.8 30.2 -28.6 31.2 -27.6 32.1 -29.4
2026-02-15T14:22:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:22:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:22:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.515027
2026-02-15T14:22:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:22:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:22:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:22:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:22:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:22:19.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:22:02', tmtdew=25.65, humidity=17.96, cloud=0.0, wind=21.86, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:21:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:22:19.635 [DEBUG] [Thread-205758] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:22:19.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:22:19.730 [DEBUG] [Thread-205761] [transport.py] [_log()] starting thread (client mode): 0xa57e3ac0
2026-02-15T14:22:19.730 [DEBUG] [Thread-205761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:22:19.745 [DEBUG] [Thread-205761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:22:19.745 [INFO] [Thread-205761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:19.752 [DEBUG] [Thread-205761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] client lang: <none>
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] server lang: <none>
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] kex follows: False
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] Compression: none
2026-02-15T14:22:19.753 [DEBUG] [Thread-205761] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:22:19.811 [DEBUG] [Thread-205761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:22:19.811 [DEBUG] [Thread-205761] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:22:19.812 [DEBUG] [Thread-205761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:22:19.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:22:19.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:22:19.867 [DEBUG] [Thread-205761] [transport.py] [_log()] userauth is OK
2026-02-15T14:22:19.867 [DEBUG] [Thread-205761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:22:19.867 [DEBUG] [Thread-205761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:22:19.867 [DEBUG] [Thread-205761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:22:19.867 [DEBUG] [Thread-205761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:22:19.890 [INFO] [Thread-205761] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:22:19.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:22:19.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:22:20.731 [DEBUG] [Thread-205761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:22:20.731 [DEBUG] [Thread-205761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:22:20.779 [DEBUG] [Thread-205761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:22:20.779 [DEBUG] [Thread-205761] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:22:20.788 [DEBUG] [Thread-205761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:22:20.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:22:20.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:22:20.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:22:20.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:22:20.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:22:20.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:22:20.822 [DEBUG] [Thread-205761] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:22:27.747 [DEBUG] [Thread-205763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:40.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:40.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:42.801 [DEBUG] [Thread-205764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:50.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:22:50.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:22:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:22:52.022 [DEBUG] [Thread-205765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:22:52.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 22, 38), 26.61, 16.99, 0.0, 16.59, 24.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:22:52.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:22:38
2026-02-15T14:22:53.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:22:53.317 [DEBUG] [Thread-205766] [transport.py] [_log()] starting thread (client mode): 0xa2d1aec0
2026-02-15T14:22:53.317 [DEBUG] [Thread-205766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:22:53.341 [DEBUG] [Thread-205766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:22:53.341 [INFO] [Thread-205766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:53.345 [DEBUG] [Thread-205766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] client lang: <none>
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] server lang: <none>
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] kex follows: False
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] Compression: none
2026-02-15T14:22:53.346 [DEBUG] [Thread-205766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:22:53.364 [DEBUG] [Thread-205766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:22:53.365 [DEBUG] [Thread-205766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:22:53.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:22:53.366 [DEBUG] [Thread-205766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:22:53.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:22:53.368 [DEBUG] [Thread-205766] [transport.py] [_log()] userauth is OK
2026-02-15T14:22:53.368 [DEBUG] [Thread-205766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:22:53.369 [DEBUG] [Thread-205766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:22:53.369 [DEBUG] [Thread-205766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:22:53.369 [DEBUG] [Thread-205766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:22:53.393 [INFO] [Thread-205766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:22:53.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:22:53.974 [DEBUG] [Thread-205766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:22:53.974 [DEBUG] [Thread-205766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:22:53.974 [DEBUG] [Thread-205766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:22:54.015 [DEBUG] [Thread-205766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:22:54.016 [DEBUG] [Thread-205766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:22:54.019 [DEBUG] [Thread-205766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:22:54.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:22:54.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:22:54.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:22:54.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:22:54.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:22:54.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:22:54.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:22:54.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:22:54.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:22:54.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.515374 -999.00  +23.10  14.91     24   +1.50 1 1 1 1 1   888    0 21.71 0.14 ----- 14.9 14.9 118.8 21.9 30.4 -31.8 30.3 -28.7 31.2 -28.0 32.1 -29.7
2026-02-15T14:22:54.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:22:54.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:22:54.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.515374
2026-02-15T14:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:22:54.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:22:38', tmtdew=26.61, humidity=16.99, cloud=0.0, wind=16.59, temperature=24.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:22:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:22:54.047 [DEBUG] [Thread-205766] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:22:54.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:22:54.143 [DEBUG] [Thread-205769] [transport.py] [_log()] starting thread (client mode): 0xa2dc1720
2026-02-15T14:22:54.143 [DEBUG] [Thread-205769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:22:54.157 [DEBUG] [Thread-205769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:22:54.157 [INFO] [Thread-205769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] client lang: <none>
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] server lang: <none>
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] kex follows: False
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:22:54.165 [DEBUG] [Thread-205769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:22:54.166 [DEBUG] [Thread-205769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:22:54.166 [DEBUG] [Thread-205769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:22:54.166 [DEBUG] [Thread-205769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:22:54.166 [DEBUG] [Thread-205769] [transport.py] [_log()] Compression: none
2026-02-15T14:22:54.166 [DEBUG] [Thread-205769] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:22:54.223 [DEBUG] [Thread-205769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:22:54.224 [DEBUG] [Thread-205769] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:22:54.224 [DEBUG] [Thread-205769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:22:54.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:22:54.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:22:54.279 [DEBUG] [Thread-205769] [transport.py] [_log()] userauth is OK
2026-02-15T14:22:54.280 [DEBUG] [Thread-205769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:22:54.280 [DEBUG] [Thread-205769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:22:54.280 [DEBUG] [Thread-205769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:22:54.280 [DEBUG] [Thread-205769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:22:54.300 [INFO] [Thread-205769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:22:54.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:22:54.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:22:55.104 [DEBUG] [Thread-205769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:22:55.104 [DEBUG] [Thread-205769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:22:55.153 [DEBUG] [Thread-205769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:22:55.153 [DEBUG] [Thread-205769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:22:55.163 [DEBUG] [Thread-205769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:22:55.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:22:55.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:22:55.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:22:55.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:22:55.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:22:55.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:22:55.200 [DEBUG] [Thread-205769] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:22:57.838 [DEBUG] [Thread-205771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:12.898 [DEBUG] [Thread-205772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:25.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:23:25.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:23:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:23:27.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 23, 13), 25.75, 17.79, 0.0, 15.12, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:23:27.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:23:13
2026-02-15T14:23:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:23:27.669 [DEBUG] [Thread-205773] [transport.py] [_log()] starting thread (client mode): 0xa2d4f040
2026-02-15T14:23:27.670 [DEBUG] [Thread-205773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:23:27.688 [DEBUG] [Thread-205773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:23:27.689 [INFO] [Thread-205773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:23:27.692 [DEBUG] [Thread-205773] [transport.py] [_log()] client lang: <none>
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] server lang: <none>
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] kex follows: False
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] Compression: none
2026-02-15T14:23:27.693 [DEBUG] [Thread-205773] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:23:27.711 [DEBUG] [Thread-205773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:23:27.711 [DEBUG] [Thread-205773] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:23:27.712 [DEBUG] [Thread-205773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:23:27.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:23:27.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:23:27.714 [DEBUG] [Thread-205773] [transport.py] [_log()] userauth is OK
2026-02-15T14:23:27.714 [DEBUG] [Thread-205773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:23:27.714 [DEBUG] [Thread-205773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:23:27.714 [DEBUG] [Thread-205773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:23:27.714 [DEBUG] [Thread-205773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:23:27.739 [INFO] [Thread-205773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:23:27.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:23:27.932 [DEBUG] [Thread-205775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:28.352 [DEBUG] [Thread-205773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:23:28.352 [DEBUG] [Thread-205773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:23:28.352 [DEBUG] [Thread-205773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:23:28.393 [DEBUG] [Thread-205773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:23:28.394 [DEBUG] [Thread-205773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:23:28.397 [DEBUG] [Thread-205773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:23:28.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:23:28.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:23:28.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:23:28.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:23:28.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:23:28.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:23:28.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:23:28.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:23:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:23:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.515722 -999.00  +22.80  10.99     24   +1.50 1 1 1 1 1   888    0 20.90 -3.15 ----- 11.0 11.0 129.4 20.8 30.3 -31.9 30.4 -29.1 31.3 -28.4 32.1 -29.7
2026-02-15T14:23:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:23:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:23:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.515722
2026-02-15T14:23:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:23:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:23:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:23:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:23:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:23:28.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:23:13', tmtdew=25.75, humidity=17.79, cloud=0.0, wind=15.12, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:22:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:23:28.426 [DEBUG] [Thread-205773] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:23:28.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:23:28.521 [DEBUG] [Thread-205777] [transport.py] [_log()] starting thread (client mode): 0xa5742a40
2026-02-15T14:23:28.521 [DEBUG] [Thread-205777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:23:28.536 [DEBUG] [Thread-205777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:23:28.536 [INFO] [Thread-205777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:23:28.544 [DEBUG] [Thread-205777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] client lang: <none>
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] server lang: <none>
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] kex follows: False
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] Compression: none
2026-02-15T14:23:28.545 [DEBUG] [Thread-205777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:23:28.603 [DEBUG] [Thread-205777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:23:28.604 [DEBUG] [Thread-205777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:23:28.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:23:28.605 [DEBUG] [Thread-205777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:23:28.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:23:28.659 [DEBUG] [Thread-205777] [transport.py] [_log()] userauth is OK
2026-02-15T14:23:28.660 [DEBUG] [Thread-205777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:23:28.660 [DEBUG] [Thread-205777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:23:28.660 [DEBUG] [Thread-205777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:23:28.660 [DEBUG] [Thread-205777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:23:28.685 [INFO] [Thread-205777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:23:28.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:23:28.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:23:29.517 [DEBUG] [Thread-205777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:23:29.517 [DEBUG] [Thread-205777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:23:29.566 [DEBUG] [Thread-205777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:23:29.566 [DEBUG] [Thread-205777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:23:29.575 [DEBUG] [Thread-205777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:23:29.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:23:29.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:23:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:23:29.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:23:29.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:23:29.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:23:29.612 [DEBUG] [Thread-205777] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:23:41.008 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:41.009 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:42.968 [DEBUG] [Thread-205779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:52.077 [DEBUG] [Thread-205780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:58.015 [DEBUG] [Thread-205781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:23:59.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:23:59.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:23:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:24:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 23, 48), 25.31, 18.37, 0.0, 12.25, 23.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:24:01.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:23:48
2026-02-15T14:24:01.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:24:02.059 [DEBUG] [Thread-205782] [transport.py] [_log()] starting thread (client mode): 0xa2d01330
2026-02-15T14:24:02.059 [DEBUG] [Thread-205782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:24:02.078 [DEBUG] [Thread-205782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:24:02.078 [INFO] [Thread-205782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:24:02.081 [DEBUG] [Thread-205782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] client lang: <none>
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] server lang: <none>
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] kex follows: False
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] Compression: none
2026-02-15T14:24:02.082 [DEBUG] [Thread-205782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:24:02.099 [DEBUG] [Thread-205782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:24:02.099 [DEBUG] [Thread-205782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:24:02.099 [DEBUG] [Thread-205782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:24:02.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:24:02.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:24:02.100 [DEBUG] [Thread-205782] [transport.py] [_log()] userauth is OK
2026-02-15T14:24:02.100 [DEBUG] [Thread-205782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:24:02.100 [DEBUG] [Thread-205782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:24:02.100 [DEBUG] [Thread-205782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:24:02.100 [DEBUG] [Thread-205782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:24:02.113 [INFO] [Thread-205782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:24:02.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:24:02.764 [DEBUG] [Thread-205782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:24:02.764 [DEBUG] [Thread-205782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:24:02.765 [DEBUG] [Thread-205782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:24:02.806 [DEBUG] [Thread-205782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:24:02.806 [DEBUG] [Thread-205782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:24:02.809 [DEBUG] [Thread-205782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:24:02.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:24:02.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:24:02.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:24:02.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:24:02.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:24:02.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:24:02.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:24:02.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.516069 -999.00  +23.00   8.24     24   +1.70 1 1 1 1 1   888    0 21.52 -7.41 ----- 8.2 8.2 133.4 14.5 30.6 -28.8 30.4 -28.0 31.4 -27.3 32.1 -28.8
2026-02-15T14:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:24:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:24:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.516069
2026-02-15T14:24:02.835 [DEBUG] [Thread-205782] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:24:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:24:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:24:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:24:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:24:02.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:24:02.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:23:48', tmtdew=25.31, humidity=18.37, cloud=0.0, wind=12.25, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:23:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:24:02.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:24:02.935 [DEBUG] [Thread-205785] [transport.py] [_log()] starting thread (client mode): 0xa2d4f520
2026-02-15T14:24:02.935 [DEBUG] [Thread-205785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:24:02.950 [DEBUG] [Thread-205785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:24:02.950 [INFO] [Thread-205785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:24:02.957 [DEBUG] [Thread-205785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:24:02.957 [DEBUG] [Thread-205785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:24:02.957 [DEBUG] [Thread-205785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:24:02.957 [DEBUG] [Thread-205785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:02.957 [DEBUG] [Thread-205785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] client lang: <none>
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] server lang: <none>
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] kex follows: False
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] Compression: none
2026-02-15T14:24:02.958 [DEBUG] [Thread-205785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:24:03.014 [DEBUG] [Thread-205785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:24:03.015 [DEBUG] [Thread-205785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:24:03.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:24:03.016 [DEBUG] [Thread-205785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:24:03.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:24:03.071 [DEBUG] [Thread-205785] [transport.py] [_log()] userauth is OK
2026-02-15T14:24:03.071 [DEBUG] [Thread-205785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:24:03.072 [DEBUG] [Thread-205785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:24:03.072 [DEBUG] [Thread-205785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:24:03.072 [DEBUG] [Thread-205785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:24:03.094 [INFO] [Thread-205785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:24:03.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:24:03.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:24:03.980 [DEBUG] [Thread-205785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:24:03.980 [DEBUG] [Thread-205785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:24:04.028 [DEBUG] [Thread-205785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:24:04.028 [DEBUG] [Thread-205785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:24:04.037 [DEBUG] [Thread-205785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:24:04.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:24:04.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:24:04.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:24:04.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:24:04.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:24:04.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:24:04.072 [DEBUG] [Thread-205785] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:24:13.052 [DEBUG] [Thread-205787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:24:28.102 [DEBUG] [Thread-205788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:24:34.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:24:34.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:24:34.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:24:35.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 24, 24), 25.27, 18.41, 0.0, 13.43, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:24:35.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:24:24
2026-02-15T14:24:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:24:36.478 [DEBUG] [Thread-205789] [transport.py] [_log()] starting thread (client mode): 0xa2dc16f0
2026-02-15T14:24:36.479 [DEBUG] [Thread-205789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:24:36.501 [DEBUG] [Thread-205789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:24:36.501 [INFO] [Thread-205789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] client lang: <none>
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] server lang: <none>
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] kex follows: False
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] Compression: none
2026-02-15T14:24:36.505 [DEBUG] [Thread-205789] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:24:36.523 [DEBUG] [Thread-205789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:24:36.524 [DEBUG] [Thread-205789] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:24:36.524 [DEBUG] [Thread-205789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:24:36.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:24:36.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:24:36.526 [DEBUG] [Thread-205789] [transport.py] [_log()] userauth is OK
2026-02-15T14:24:36.527 [DEBUG] [Thread-205789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:24:36.527 [DEBUG] [Thread-205789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:24:36.527 [DEBUG] [Thread-205789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:24:36.527 [DEBUG] [Thread-205789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:24:36.549 [INFO] [Thread-205789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:24:36.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:24:37.365 [DEBUG] [Thread-205789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:24:37.365 [DEBUG] [Thread-205789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:24:37.365 [DEBUG] [Thread-205789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:24:37.407 [DEBUG] [Thread-205789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:24:37.407 [DEBUG] [Thread-205789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:24:37.410 [DEBUG] [Thread-205789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:24:37.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:24:37.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:24:37.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:24:37.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:24:37.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:24:37.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:24:37.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:24:37.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:24:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:24:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.516416 -999.00  +23.10   7.75     24   +1.70 1 1 1 1 1   888    0 21.55 -12.54 ----- 7.8 7.8 105.6 11.2 30.8 -28.7 30.5 -28.1 31.6 -27.3 32.4 -28.5
2026-02-15T14:24:37.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:24:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:24:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.516416
2026-02-15T14:24:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:24:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:24:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:24:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:24:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:24:37.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:24:24', tmtdew=25.27, humidity=18.41, cloud=0.0, wind=13.43, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:23:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:24:37.436 [DEBUG] [Thread-205789] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:24:37.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:24:37.531 [DEBUG] [Thread-205792] [transport.py] [_log()] starting thread (client mode): 0xa2d18280
2026-02-15T14:24:37.531 [DEBUG] [Thread-205792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:24:37.546 [DEBUG] [Thread-205792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:24:37.546 [INFO] [Thread-205792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:24:37.553 [DEBUG] [Thread-205792] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] client lang: <none>
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] server lang: <none>
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] kex follows: False
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] Compression: none
2026-02-15T14:24:37.554 [DEBUG] [Thread-205792] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:24:37.612 [DEBUG] [Thread-205792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:24:37.612 [DEBUG] [Thread-205792] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:24:37.613 [DEBUG] [Thread-205792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:24:37.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:24:37.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:24:37.667 [DEBUG] [Thread-205792] [transport.py] [_log()] userauth is OK
2026-02-15T14:24:37.668 [DEBUG] [Thread-205792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:24:37.668 [DEBUG] [Thread-205792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:24:37.668 [DEBUG] [Thread-205792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:24:37.668 [DEBUG] [Thread-205792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:24:37.686 [INFO] [Thread-205792] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:24:37.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:24:37.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:24:38.521 [DEBUG] [Thread-205792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:24:38.521 [DEBUG] [Thread-205792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:24:38.570 [DEBUG] [Thread-205792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:24:38.570 [DEBUG] [Thread-205792] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:24:38.580 [DEBUG] [Thread-205792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:24:38.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:24:38.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:24:38.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:24:38.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:24:38.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:24:38.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:24:38.618 [DEBUG] [Thread-205792] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:24:41.149 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:24:41.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:24:43.137 [DEBUG] [Thread-205794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:24:52.120 [DEBUG] [Thread-205795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:24:58.187 [DEBUG] [Thread-205796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:08.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:25:08.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:25:08.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:25:10.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 24, 59), 24.87, 18.89, 0.0, 9.37, 22.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:25:10.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:24:59
2026-02-15T14:25:10.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:25:11.023 [DEBUG] [Thread-205797] [transport.py] [_log()] starting thread (client mode): 0xa2d185e0
2026-02-15T14:25:11.024 [DEBUG] [Thread-205797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:25:11.044 [DEBUG] [Thread-205797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:25:11.045 [INFO] [Thread-205797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:11.049 [DEBUG] [Thread-205797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] client lang: <none>
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] server lang: <none>
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] kex follows: False
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] Compression: none
2026-02-15T14:25:11.050 [DEBUG] [Thread-205797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:25:11.070 [DEBUG] [Thread-205797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:25:11.071 [DEBUG] [Thread-205797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:25:11.072 [DEBUG] [Thread-205797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:25:11.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:25:11.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:25:11.074 [DEBUG] [Thread-205797] [transport.py] [_log()] userauth is OK
2026-02-15T14:25:11.074 [DEBUG] [Thread-205797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:25:11.074 [DEBUG] [Thread-205797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:25:11.074 [DEBUG] [Thread-205797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:25:11.074 [DEBUG] [Thread-205797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:25:11.088 [INFO] [Thread-205797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:25:11.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:25:12.839 [DEBUG] [Thread-205797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:25:12.839 [DEBUG] [Thread-205797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:25:12.840 [DEBUG] [Thread-205797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:25:12.881 [DEBUG] [Thread-205797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:25:12.881 [DEBUG] [Thread-205797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:25:12.884 [DEBUG] [Thread-205797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:25:12.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:25:12.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:25:12.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:25:12.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:25:12.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:25:12.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:25:12.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:25:12.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:25:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:25:12.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.516763 -999.00  +23.30   7.10     24   +1.70 1 1 1 1 1   888    0 20.78 -13.35 ----- 7.1 7.1 135.4 9.9 30.9 -30.3 30.7 -28.4 31.6 -28.4 32.6 -28.2
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.516763
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:25:12.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:24:59', tmtdew=24.87, humidity=18.89, cloud=0.0, wind=9.37, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:24:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:25:12.902 [DEBUG] [Thread-205797] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:25:12.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:25:12.994 [DEBUG] [Thread-205800] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d60
2026-02-15T14:25:12.994 [DEBUG] [Thread-205800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:25:13.009 [DEBUG] [Thread-205800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:25:13.009 [INFO] [Thread-205800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] client lang: <none>
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] server lang: <none>
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] kex follows: False
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:25:13.016 [DEBUG] [Thread-205800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:25:13.017 [DEBUG] [Thread-205800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:25:13.017 [DEBUG] [Thread-205800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:25:13.017 [DEBUG] [Thread-205800] [transport.py] [_log()] Compression: none
2026-02-15T14:25:13.017 [DEBUG] [Thread-205800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:25:13.074 [DEBUG] [Thread-205800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:25:13.074 [DEBUG] [Thread-205800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:25:13.074 [DEBUG] [Thread-205800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:25:13.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:25:13.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:25:13.132 [DEBUG] [Thread-205800] [transport.py] [_log()] userauth is OK
2026-02-15T14:25:13.132 [DEBUG] [Thread-205800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:25:13.132 [DEBUG] [Thread-205800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:25:13.133 [DEBUG] [Thread-205800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:25:13.133 [DEBUG] [Thread-205800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:25:13.150 [INFO] [Thread-205800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:25:13.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:25:13.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:25:13.223 [DEBUG] [Thread-205802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:13.974 [DEBUG] [Thread-205800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:25:13.974 [DEBUG] [Thread-205800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:25:14.022 [DEBUG] [Thread-205800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:25:14.023 [DEBUG] [Thread-205800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:25:14.032 [DEBUG] [Thread-205800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:25:14.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:25:14.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:25:14.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:25:14.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:25:14.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:25:14.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:25:14.074 [DEBUG] [Thread-205800] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:25:28.278 [DEBUG] [Thread-205803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:41.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:41.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:43.315 [DEBUG] [Thread-205804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:44.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:25:44.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:25:44.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:25:45.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 25, 34), 25.38, 18.38, 0.0, 7.98, 23.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:25:45.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:25:34
2026-02-15T14:25:46.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:25:46.486 [DEBUG] [Thread-205805] [transport.py] [_log()] starting thread (client mode): 0xa2d1b7c0
2026-02-15T14:25:46.486 [DEBUG] [Thread-205805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:25:46.505 [DEBUG] [Thread-205805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:25:46.505 [INFO] [Thread-205805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:25:46.507 [DEBUG] [Thread-205805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:25:46.507 [DEBUG] [Thread-205805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:25:46.507 [DEBUG] [Thread-205805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] client lang: <none>
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] server lang: <none>
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] kex follows: False
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] Compression: none
2026-02-15T14:25:46.508 [DEBUG] [Thread-205805] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:25:46.522 [DEBUG] [Thread-205805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:25:46.522 [DEBUG] [Thread-205805] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:25:46.523 [DEBUG] [Thread-205805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:25:46.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:25:46.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:25:46.524 [DEBUG] [Thread-205805] [transport.py] [_log()] userauth is OK
2026-02-15T14:25:46.524 [DEBUG] [Thread-205805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:25:46.524 [DEBUG] [Thread-205805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:25:46.525 [DEBUG] [Thread-205805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:25:46.525 [DEBUG] [Thread-205805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:25:46.543 [INFO] [Thread-205805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:25:46.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:25:47.150 [DEBUG] [Thread-205805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:25:47.151 [DEBUG] [Thread-205805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:25:47.151 [DEBUG] [Thread-205805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:25:47.192 [DEBUG] [Thread-205805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:25:47.192 [DEBUG] [Thread-205805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:25:47.195 [DEBUG] [Thread-205805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:25:47.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:25:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:25:47.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:25:47.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:25:47.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:25:47.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:25:47.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:25:47.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:25:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:25:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.517805 -999.00  +23.70  18.58     24   +2.00 1 1 1 1 1   888    0 21.23 -10.20 ----- 18.6 18.6 168.4 21.1 31.4 -28.9 30.7 -29.3 31.9 -28.3 32.9 -29.8
2026-02-15T14:25:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:25:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:25:47.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.517805
2026-02-15T14:25:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:25:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:25:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:25:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:25:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:25:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:25:34', tmtdew=25.38, humidity=18.38, cloud=0.0, wind=7.98, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:25:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:25:47.221 [DEBUG] [Thread-205805] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:25:47.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:25:47.324 [DEBUG] [Thread-205808] [transport.py] [_log()] starting thread (client mode): 0xa2d05d80
2026-02-15T14:25:47.324 [DEBUG] [Thread-205808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:25:47.338 [DEBUG] [Thread-205808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:25:47.338 [INFO] [Thread-205808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:25:47.346 [DEBUG] [Thread-205808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:25:47.346 [DEBUG] [Thread-205808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:25:47.346 [DEBUG] [Thread-205808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] client lang: <none>
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] server lang: <none>
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] kex follows: False
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] Compression: none
2026-02-15T14:25:47.347 [DEBUG] [Thread-205808] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:25:47.403 [DEBUG] [Thread-205808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:25:47.404 [DEBUG] [Thread-205808] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:25:47.404 [DEBUG] [Thread-205808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:25:47.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:25:47.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:25:47.460 [DEBUG] [Thread-205808] [transport.py] [_log()] userauth is OK
2026-02-15T14:25:47.460 [DEBUG] [Thread-205808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:25:47.460 [DEBUG] [Thread-205808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:25:47.460 [DEBUG] [Thread-205808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:25:47.460 [DEBUG] [Thread-205808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:25:47.479 [INFO] [Thread-205808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:25:47.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:25:47.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:25:48.330 [DEBUG] [Thread-205808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:25:48.330 [DEBUG] [Thread-205808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:25:48.378 [DEBUG] [Thread-205808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:25:48.379 [DEBUG] [Thread-205808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:25:48.388 [DEBUG] [Thread-205808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:25:48.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:25:48.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:25:48.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:25:48.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:25:48.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:25:48.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:25:48.425 [DEBUG] [Thread-205808] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:25:52.153 [DEBUG] [Thread-205810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:25:58.350 [DEBUG] [Thread-205811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:13.392 [DEBUG] [Thread-205812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:18.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:26:18.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:26:18.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:26:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 26, 9), 24.78, 19.27, 0.0, 10.52, 22.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:26:20.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:26:09
2026-02-15T14:26:20.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:26:20.902 [DEBUG] [Thread-205813] [transport.py] [_log()] starting thread (client mode): 0xa2d05e40
2026-02-15T14:26:20.902 [DEBUG] [Thread-205813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:26:20.922 [DEBUG] [Thread-205813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:26:20.922 [INFO] [Thread-205813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] client lang: <none>
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] server lang: <none>
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] kex follows: False
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] Compression: none
2026-02-15T14:26:20.925 [DEBUG] [Thread-205813] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:26:20.944 [DEBUG] [Thread-205813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:26:20.945 [DEBUG] [Thread-205813] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:26:20.945 [DEBUG] [Thread-205813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:26:20.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:26:20.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:26:20.947 [DEBUG] [Thread-205813] [transport.py] [_log()] userauth is OK
2026-02-15T14:26:20.948 [DEBUG] [Thread-205813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:26:20.948 [DEBUG] [Thread-205813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:26:20.948 [DEBUG] [Thread-205813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:26:20.948 [DEBUG] [Thread-205813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:26:20.972 [INFO] [Thread-205813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:26:20.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:26:21.541 [DEBUG] [Thread-205813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:26:21.541 [DEBUG] [Thread-205813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:26:21.541 [DEBUG] [Thread-205813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:26:21.583 [DEBUG] [Thread-205813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:26:21.583 [DEBUG] [Thread-205813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:26:21.585 [DEBUG] [Thread-205813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:26:21.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:26:21.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:26:21.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:26:21.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:26:21.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:26:21.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:26:21.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:26:21.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:26:21.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:26:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.518152 -999.00  +23.50  14.93     24   +1.90 1 1 1 1 1   888    0 21.57 -8.53 ----- 14.9 14.9 170.9 19.5 31.3 -29.5 30.7 -30.6 31.8 -28.1 32.8 -29.3
2026-02-15T14:26:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:26:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:26:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.518152
2026-02-15T14:26:21.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:26:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:26:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:26:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:26:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:26:21.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:26:09', tmtdew=24.78, humidity=19.27, cloud=0.0, wind=10.52, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:26:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:26:21.611 [DEBUG] [Thread-205813] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:26:21.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:26:21.804 [DEBUG] [Thread-205816] [transport.py] [_log()] starting thread (client mode): 0xa2db7160
2026-02-15T14:26:21.805 [DEBUG] [Thread-205816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:26:21.819 [DEBUG] [Thread-205816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:26:21.819 [INFO] [Thread-205816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:26:21.827 [DEBUG] [Thread-205816] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:26:21.827 [DEBUG] [Thread-205816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:26:21.827 [DEBUG] [Thread-205816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:26:21.827 [DEBUG] [Thread-205816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:21.827 [DEBUG] [Thread-205816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] client lang: <none>
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] server lang: <none>
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] kex follows: False
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:26:21.828 [DEBUG] [Thread-205816] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:26:21.829 [DEBUG] [Thread-205816] [transport.py] [_log()] Compression: none
2026-02-15T14:26:21.829 [DEBUG] [Thread-205816] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:26:21.891 [DEBUG] [Thread-205816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:26:21.892 [DEBUG] [Thread-205816] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:26:21.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:26:21.893 [DEBUG] [Thread-205816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:26:21.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:26:21.947 [DEBUG] [Thread-205816] [transport.py] [_log()] userauth is OK
2026-02-15T14:26:21.948 [DEBUG] [Thread-205816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:26:21.948 [DEBUG] [Thread-205816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:26:21.948 [DEBUG] [Thread-205816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:26:21.948 [DEBUG] [Thread-205816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:26:21.973 [INFO] [Thread-205816] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:26:21.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:26:21.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:26:22.787 [DEBUG] [Thread-205816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:26:22.787 [DEBUG] [Thread-205816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:26:22.836 [DEBUG] [Thread-205816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:26:22.836 [DEBUG] [Thread-205816] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:26:22.845 [DEBUG] [Thread-205816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:26:22.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:26:22.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:26: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') -> 00000000
2026-02-15T14:26:22.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:26:22.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:26:22.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:26:22.878 [DEBUG] [Thread-205816] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:26:28.429 [DEBUG] [Thread-205818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:41.444 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:41.445 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:43.486 [DEBUG] [Thread-205819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:52.196 [DEBUG] [Thread-205820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:26:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:26:52.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:26:52.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:26:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 26, 44), 24.51, 19.29, 0.0, 16.48, 22.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:26:54.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:26:44
2026-02-15T14:26:55.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:26:55.315 [DEBUG] [Thread-205821] [transport.py] [_log()] starting thread (client mode): 0xa2d06200
2026-02-15T14:26:55.315 [DEBUG] [Thread-205821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:26:55.329 [DEBUG] [Thread-205821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:26:55.329 [INFO] [Thread-205821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:26:55.331 [DEBUG] [Thread-205821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:26:55.331 [DEBUG] [Thread-205821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] client lang: <none>
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] server lang: <none>
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] kex follows: False
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] Compression: none
2026-02-15T14:26:55.332 [DEBUG] [Thread-205821] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:26:55.348 [DEBUG] [Thread-205821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:26:55.348 [DEBUG] [Thread-205821] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:26:55.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:26:55.350 [DEBUG] [Thread-205821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:26:55.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:26:55.352 [DEBUG] [Thread-205821] [transport.py] [_log()] userauth is OK
2026-02-15T14:26:55.352 [DEBUG] [Thread-205821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:26:55.352 [DEBUG] [Thread-205821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:26:55.353 [DEBUG] [Thread-205821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:26:55.353 [DEBUG] [Thread-205821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:26:55.372 [INFO] [Thread-205821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:26:55.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:26:56.029 [DEBUG] [Thread-205821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:26:56.030 [DEBUG] [Thread-205821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:26:56.030 [DEBUG] [Thread-205821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:26:56.070 [DEBUG] [Thread-205821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:26:56.071 [DEBUG] [Thread-205821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:26:56.074 [DEBUG] [Thread-205821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:26:56.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:26:56.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:26:56.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:26:56.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:26:56.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:26:56.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:26:56.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:26:56.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:26:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:26:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.518499 -999.00  +23.50  12.99     23   +1.60 1 1 1 1 1   888    0 21.12 -6.50 ----- 13.0 13.0 185.0 24.5 31.4 -30.2 30.4 -33.6 31.8 -29.1 32.8 -31.2
2026-02-15T14:26:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:26:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:26:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.518499
2026-02-15T14:26:56.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:26:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:26:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:26:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:26:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:26:56.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:26:44', tmtdew=24.51, humidity=19.29, cloud=0.0, wind=16.48, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:26:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:26:56.097 [DEBUG] [Thread-205821] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:26:56.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:26:56.191 [DEBUG] [Thread-205824] [transport.py] [_log()] starting thread (client mode): 0xa2d06ec0
2026-02-15T14:26:56.191 [DEBUG] [Thread-205824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:26:56.206 [DEBUG] [Thread-205824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:26:56.206 [INFO] [Thread-205824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] client lang: <none>
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] server lang: <none>
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] kex follows: False
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:26:56.214 [DEBUG] [Thread-205824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:26:56.215 [DEBUG] [Thread-205824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:26:56.215 [DEBUG] [Thread-205824] [transport.py] [_log()] Compression: none
2026-02-15T14:26:56.215 [DEBUG] [Thread-205824] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:26:56.272 [DEBUG] [Thread-205824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:26:56.273 [DEBUG] [Thread-205824] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:26:56.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:26:56.274 [DEBUG] [Thread-205824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:26:56.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:26:56.331 [DEBUG] [Thread-205824] [transport.py] [_log()] userauth is OK
2026-02-15T14:26:56.332 [DEBUG] [Thread-205824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:26:56.332 [DEBUG] [Thread-205824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:26:56.332 [DEBUG] [Thread-205824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:26:56.332 [DEBUG] [Thread-205824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:26:56.352 [INFO] [Thread-205824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:26:56.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:26:56.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:26:57.200 [DEBUG] [Thread-205824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:26:57.200 [DEBUG] [Thread-205824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:26:57.248 [DEBUG] [Thread-205824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:26:57.249 [DEBUG] [Thread-205824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:26:57.259 [DEBUG] [Thread-205824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:26:57.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:26:57.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:26:57.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:26:57.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:26:57.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:26:57.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:26:57.296 [DEBUG] [Thread-205824] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:26:58.525 [DEBUG] [Thread-205826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:13.580 [DEBUG] [Thread-205827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:27.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:27:27.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:27:27.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:27:28.622 [DEBUG] [Thread-205828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:29.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 27, 19), 24.43, 19.4, 0.0, 18.74, 22.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:27:29.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:27:19
2026-02-15T14:27:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:27:29.711 [DEBUG] [Thread-205829] [transport.py] [_log()] starting thread (client mode): 0xa57c1720
2026-02-15T14:27:29.711 [DEBUG] [Thread-205829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:27:29.732 [DEBUG] [Thread-205829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:27:29.732 [INFO] [Thread-205829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] client lang: <none>
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] server lang: <none>
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] kex follows: False
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] Compression: none
2026-02-15T14:27:29.735 [DEBUG] [Thread-205829] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:27:29.750 [DEBUG] [Thread-205829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:27:29.750 [DEBUG] [Thread-205829] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:27:29.751 [DEBUG] [Thread-205829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:27:29.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:27:29.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:27:29.752 [DEBUG] [Thread-205829] [transport.py] [_log()] userauth is OK
2026-02-15T14:27:29.752 [DEBUG] [Thread-205829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:27:29.752 [DEBUG] [Thread-205829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:27:29.752 [DEBUG] [Thread-205829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:27:29.752 [DEBUG] [Thread-205829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:27:29.775 [INFO] [Thread-205829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:27:29.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:27:30.412 [DEBUG] [Thread-205829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:27:30.413 [DEBUG] [Thread-205829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:27:30.413 [DEBUG] [Thread-205829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:27:30.453 [DEBUG] [Thread-205829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:27:30.454 [DEBUG] [Thread-205829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:27:30.457 [DEBUG] [Thread-205829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:27:30.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:27:30.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:27:30.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:27:30.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:27:30.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:27:30.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:27:30.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:27:30.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:27:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:27:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.518847 -999.00  +23.50  12.18     24   +1.70 1 1 1 1 1   888    0 21.89 -2.47 ----- 12.2 12.2 180.0 15.9 31.3 -29.6 30.2 -29.0 31.6 -27.6 32.7 -30.4
2026-02-15T14:27:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:27:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:27:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.518847
2026-02-15T14:27:30.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:27:30.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:27:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:27:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:27:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:27:30.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:27:19', tmtdew=24.43, humidity=19.4, cloud=0.0, wind=18.74, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:27:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:27:30.482 [DEBUG] [Thread-205829] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:27:30.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:27:30.577 [DEBUG] [Thread-205832] [transport.py] [_log()] starting thread (client mode): 0xa2d19d20
2026-02-15T14:27:30.577 [DEBUG] [Thread-205832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:27:30.592 [DEBUG] [Thread-205832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:27:30.592 [INFO] [Thread-205832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] client lang: <none>
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] server lang: <none>
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] kex follows: False
2026-02-15T14:27:30.600 [DEBUG] [Thread-205832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:27:30.601 [DEBUG] [Thread-205832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:27:30.601 [DEBUG] [Thread-205832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:27:30.601 [DEBUG] [Thread-205832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:27:30.601 [DEBUG] [Thread-205832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:27:30.601 [DEBUG] [Thread-205832] [transport.py] [_log()] Compression: none
2026-02-15T14:27:30.601 [DEBUG] [Thread-205832] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:27:30.659 [DEBUG] [Thread-205832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:27:30.660 [DEBUG] [Thread-205832] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:27:30.661 [DEBUG] [Thread-205832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:27:30.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:27:30.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:27:30.715 [DEBUG] [Thread-205832] [transport.py] [_log()] userauth is OK
2026-02-15T14:27:30.716 [DEBUG] [Thread-205832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:27:30.716 [DEBUG] [Thread-205832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:27:30.716 [DEBUG] [Thread-205832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:27:30.716 [DEBUG] [Thread-205832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:27:30.734 [INFO] [Thread-205832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:27:30.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:27:30.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:27:31.589 [DEBUG] [Thread-205832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:27:31.589 [DEBUG] [Thread-205832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:27:31.637 [DEBUG] [Thread-205832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:27:31.637 [DEBUG] [Thread-205832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:27:31.647 [DEBUG] [Thread-205832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:27:31.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:27:31.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:27:31.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:27:31.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:27:31.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:27:31.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:27:31.686 [DEBUG] [Thread-205832] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:27:41.589 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:41.590 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:43.659 [DEBUG] [Thread-205834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:52.229 [DEBUG] [Thread-205835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:27:58.718 [DEBUG] [Thread-205836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:01.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:28:01.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:28:01.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:28:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 27, 55), 24.79, 18.81, 0.0, 11.88, 22.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:28:03.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:27:55
2026-02-15T14:28:03.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:28:04.059 [DEBUG] [Thread-205837] [transport.py] [_log()] starting thread (client mode): 0xa2db4c40
2026-02-15T14:28:04.059 [DEBUG] [Thread-205837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:28:04.081 [DEBUG] [Thread-205837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:28:04.081 [INFO] [Thread-205837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] client lang: <none>
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] server lang: <none>
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] kex follows: False
2026-02-15T14:28:04.084 [DEBUG] [Thread-205837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:28:04.085 [DEBUG] [Thread-205837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:28:04.085 [DEBUG] [Thread-205837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:28:04.085 [DEBUG] [Thread-205837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:28:04.085 [DEBUG] [Thread-205837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:28:04.085 [DEBUG] [Thread-205837] [transport.py] [_log()] Compression: none
2026-02-15T14:28:04.085 [DEBUG] [Thread-205837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:28:04.103 [DEBUG] [Thread-205837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:28:04.103 [DEBUG] [Thread-205837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:28:04.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:28:04.104 [DEBUG] [Thread-205837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:28:04.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:28:04.106 [DEBUG] [Thread-205837] [transport.py] [_log()] userauth is OK
2026-02-15T14:28:04.107 [DEBUG] [Thread-205837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:28:04.107 [DEBUG] [Thread-205837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:28:04.107 [DEBUG] [Thread-205837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:28:04.107 [DEBUG] [Thread-205837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:28:04.127 [INFO] [Thread-205837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:28:04.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:28:04.751 [DEBUG] [Thread-205837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:28:04.751 [DEBUG] [Thread-205837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:28:04.752 [DEBUG] [Thread-205837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:28:04.793 [DEBUG] [Thread-205837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:28:04.793 [DEBUG] [Thread-205837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:28:04.796 [DEBUG] [Thread-205837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:28:04.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:28:04.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:28:04.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:28:04.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:28:04.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:28:04.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:28:04.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:28:04.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:28:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:28:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.519194 -999.00  +23.50  11.15     24   +1.90 1 1 1 1 1   888    0 22.01 4.05 ----- 11.2 11.2 159.5 18.1 31.4 -29.9 30.4 -30.7 31.8 -28.2 32.9 -29.3
2026-02-15T14:28:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:28:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:28:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.519194
2026-02-15T14:28:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:28:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:28:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:28:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:28:04.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:28:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:27:55', tmtdew=24.79, humidity=18.81, cloud=0.0, wind=11.88, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:27:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:28:04.825 [DEBUG] [Thread-205837] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:28:04.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:28:04.920 [DEBUG] [Thread-205840] [transport.py] [_log()] starting thread (client mode): 0xa5742890
2026-02-15T14:28:04.920 [DEBUG] [Thread-205840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:28:04.937 [DEBUG] [Thread-205840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:28:04.937 [INFO] [Thread-205840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:28:04.948 [DEBUG] [Thread-205840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] client lang: <none>
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] server lang: <none>
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] kex follows: False
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] Compression: none
2026-02-15T14:28:04.949 [DEBUG] [Thread-205840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:28:05.012 [DEBUG] [Thread-205840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:28:05.012 [DEBUG] [Thread-205840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:28:05.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:28:05.013 [DEBUG] [Thread-205840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:28:05.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:28:05.071 [DEBUG] [Thread-205840] [transport.py] [_log()] userauth is OK
2026-02-15T14:28:05.071 [DEBUG] [Thread-205840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:28:05.071 [DEBUG] [Thread-205840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:28:05.071 [DEBUG] [Thread-205840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:28:05.072 [DEBUG] [Thread-205840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:28:05.091 [INFO] [Thread-205840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:28:05.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:28:05.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:28:05.977 [DEBUG] [Thread-205840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:28:05.977 [DEBUG] [Thread-205840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:28:06.025 [DEBUG] [Thread-205840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:28:06.025 [DEBUG] [Thread-205840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:28:06.035 [DEBUG] [Thread-205840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:28:06.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:28: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')
2026-02-15T14:28:06.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:28:06.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:28:06.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:28:06.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:28:06.073 [DEBUG] [Thread-205840] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:28:13.754 [DEBUG] [Thread-205842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:28.810 [DEBUG] [Thread-205843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:28:36.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:28:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:28:37.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 28, 30), 25.06, 18.53, 0.0, 15.76, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:28:37.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:28:30
2026-02-15T14:28:38.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:28:38.465 [DEBUG] [Thread-205844] [transport.py] [_log()] starting thread (client mode): 0xa2db53f0
2026-02-15T14:28:38.465 [DEBUG] [Thread-205844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:28:38.485 [DEBUG] [Thread-205844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:28:38.485 [INFO] [Thread-205844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:38.488 [DEBUG] [Thread-205844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] client lang: <none>
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] server lang: <none>
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] kex follows: False
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] Compression: none
2026-02-15T14:28:38.489 [DEBUG] [Thread-205844] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:28:38.505 [DEBUG] [Thread-205844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:28:38.505 [DEBUG] [Thread-205844] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:28:38.506 [DEBUG] [Thread-205844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:28:38.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:28:38.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:28:38.507 [DEBUG] [Thread-205844] [transport.py] [_log()] userauth is OK
2026-02-15T14:28:38.508 [DEBUG] [Thread-205844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:28:38.508 [DEBUG] [Thread-205844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:28:38.508 [DEBUG] [Thread-205844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:28:38.508 [DEBUG] [Thread-205844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:28:38.532 [INFO] [Thread-205844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:28:38.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:28:39.183 [DEBUG] [Thread-205844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:28:39.183 [DEBUG] [Thread-205844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:28:39.183 [DEBUG] [Thread-205844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:28:39.224 [DEBUG] [Thread-205844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:28:39.224 [DEBUG] [Thread-205844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:28:39.227 [DEBUG] [Thread-205844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:28:39.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:28:39.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:28:39.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:28:39.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:28:39.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:28:39.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:28:39.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:28:39.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:28:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:28:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.519541 -999.00  +23.60  16.19     24   +2.00 1 1 1 1 1   888    0 21.59 10.89 ----- 16.2 16.2 172.5 21.4 31.4 -29.3 30.4 -32.5 31.8 -27.4 32.9 -29.3
2026-02-15T14:28:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:28:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:28:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.519541
2026-02-15T14:28:39.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:28:39.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:28:30', tmtdew=25.06, humidity=18.53, cloud=0.0, wind=15.76, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:28:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:28:39.249 [DEBUG] [Thread-205844] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:28:39.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:28:39.347 [DEBUG] [Thread-205847] [transport.py] [_log()] starting thread (client mode): 0xa2db4d00
2026-02-15T14:28:39.347 [DEBUG] [Thread-205847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:28:39.361 [DEBUG] [Thread-205847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:28:39.362 [INFO] [Thread-205847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] client lang: <none>
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] server lang: <none>
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] kex follows: False
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:28:39.369 [DEBUG] [Thread-205847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:28:39.370 [DEBUG] [Thread-205847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:28:39.370 [DEBUG] [Thread-205847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:28:39.370 [DEBUG] [Thread-205847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:28:39.370 [DEBUG] [Thread-205847] [transport.py] [_log()] Compression: none
2026-02-15T14:28:39.370 [DEBUG] [Thread-205847] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:28:39.426 [DEBUG] [Thread-205847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:28:39.426 [DEBUG] [Thread-205847] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:28:39.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:28:39.427 [DEBUG] [Thread-205847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:28:39.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:28:39.482 [DEBUG] [Thread-205847] [transport.py] [_log()] userauth is OK
2026-02-15T14:28:39.483 [DEBUG] [Thread-205847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:28:39.483 [DEBUG] [Thread-205847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:28:39.483 [DEBUG] [Thread-205847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:28:39.483 [DEBUG] [Thread-205847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:28:39.505 [INFO] [Thread-205847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:28:39.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:28:39.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:28:40.340 [DEBUG] [Thread-205847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:28:40.341 [DEBUG] [Thread-205847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:28:40.390 [DEBUG] [Thread-205847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:28:40.390 [DEBUG] [Thread-205847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:28:40.399 [DEBUG] [Thread-205847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:28:40.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:28:40.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:28:40.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:28:40.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:28:40.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:28:40.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:28:40.432 [DEBUG] [Thread-205847] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:28:41.743 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:41.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:43.845 [DEBUG] [Thread-205849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:52.277 [DEBUG] [Thread-205850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:28:58.902 [DEBUG] [Thread-205851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:10.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:29:10.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:29:10.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:29:12.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 28, 30), 25.06, 18.53, 0.0, 15.76, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:29:12.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:28:30
2026-02-15T14:29:12.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:29:12.837 [DEBUG] [Thread-205852] [transport.py] [_log()] starting thread (client mode): 0xa2dc2fb0
2026-02-15T14:29:12.837 [DEBUG] [Thread-205852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:29:12.860 [DEBUG] [Thread-205852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:29:12.860 [INFO] [Thread-205852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:29:12.864 [DEBUG] [Thread-205852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:29:12.864 [DEBUG] [Thread-205852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] client lang: <none>
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] server lang: <none>
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] kex follows: False
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:29:12.865 [DEBUG] [Thread-205852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:29:12.866 [DEBUG] [Thread-205852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:29:12.866 [DEBUG] [Thread-205852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:29:12.866 [DEBUG] [Thread-205852] [transport.py] [_log()] Compression: none
2026-02-15T14:29:12.866 [DEBUG] [Thread-205852] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:29:12.883 [DEBUG] [Thread-205852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:29:12.884 [DEBUG] [Thread-205852] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:29:12.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:29:12.884 [DEBUG] [Thread-205852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:29:12.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:29:12.886 [DEBUG] [Thread-205852] [transport.py] [_log()] userauth is OK
2026-02-15T14:29:12.886 [DEBUG] [Thread-205852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:29:12.886 [DEBUG] [Thread-205852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:29:12.886 [DEBUG] [Thread-205852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:29:12.886 [DEBUG] [Thread-205852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:29:12.907 [INFO] [Thread-205852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:29:12.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:29:13.535 [DEBUG] [Thread-205852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:29:13.535 [DEBUG] [Thread-205852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:29:13.536 [DEBUG] [Thread-205852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:29:13.576 [DEBUG] [Thread-205852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:29:13.577 [DEBUG] [Thread-205852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:29:13.580 [DEBUG] [Thread-205852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:29:13.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:29:13.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:29:13.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:29:13.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:29:13.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:29:13.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:29:13.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:29:13.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:29:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:29:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.519888 -999.00  +24.00  20.31     23   +1.60 1 1 1 1 1   888    0 22.56 17.25 ----- 20.3 20.3 144.4 24.6 31.4 -29.7 30.6 -28.3 31.9 -28.3 32.9 -29.5
2026-02-15T14:29:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:29:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:29:13.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.519888
2026-02-15T14:29:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:29:13.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:29:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:29:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:29:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:29:13.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:28:30', tmtdew=25.06, humidity=18.53, cloud=0.0, wind=15.76, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:28:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:29:13.608 [DEBUG] [Thread-205852] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:29:13.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:29:13.704 [DEBUG] [Thread-205855] [transport.py] [_log()] starting thread (client mode): 0xa2d6a0b0
2026-02-15T14:29:13.704 [DEBUG] [Thread-205855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:29:13.719 [DEBUG] [Thread-205855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:29:13.719 [INFO] [Thread-205855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:29:13.727 [DEBUG] [Thread-205855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:29:13.727 [DEBUG] [Thread-205855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:29:13.727 [DEBUG] [Thread-205855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:29:13.727 [DEBUG] [Thread-205855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:13.727 [DEBUG] [Thread-205855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:13.727 [DEBUG] [Thread-205855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] client lang: <none>
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] server lang: <none>
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] kex follows: False
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] Compression: none
2026-02-15T14:29:13.728 [DEBUG] [Thread-205855] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:29:13.788 [DEBUG] [Thread-205855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:29:13.788 [DEBUG] [Thread-205855] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:29:13.789 [DEBUG] [Thread-205855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:29:13.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:29:13.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:29:13.844 [DEBUG] [Thread-205855] [transport.py] [_log()] userauth is OK
2026-02-15T14:29:13.844 [DEBUG] [Thread-205855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:29:13.844 [DEBUG] [Thread-205855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:29:13.844 [DEBUG] [Thread-205855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:29:13.844 [DEBUG] [Thread-205855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:29:13.863 [INFO] [Thread-205855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:29:13.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:29:13.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:29:13.939 [DEBUG] [Thread-205857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:14.745 [DEBUG] [Thread-205855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:29:14.745 [DEBUG] [Thread-205855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:29:14.794 [DEBUG] [Thread-205855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:29:14.795 [DEBUG] [Thread-205855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:29:14.804 [DEBUG] [Thread-205855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:29:14.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:29:14.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:29:14.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:29:14.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:29:14.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:29:14.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:29:14.847 [DEBUG] [Thread-205855] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:29:28.993 [DEBUG] [Thread-205858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:41.886 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:41.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:44.030 [DEBUG] [Thread-205859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:44.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:29:44.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:29:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:29:47.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 29, 5), 25.13, 18.46, 0.0, 14.72, 23.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:29:47.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:29:05
2026-02-15T14:29:47.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:29:47.707 [DEBUG] [Thread-205860] [transport.py] [_log()] starting thread (client mode): 0xa2d68580
2026-02-15T14:29:47.707 [DEBUG] [Thread-205860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:29:47.722 [DEBUG] [Thread-205860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:29:47.722 [INFO] [Thread-205860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:47.724 [DEBUG] [Thread-205860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] client lang: <none>
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] server lang: <none>
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] kex follows: False
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] Compression: none
2026-02-15T14:29:47.725 [DEBUG] [Thread-205860] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:29:47.738 [DEBUG] [Thread-205860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:29:47.739 [DEBUG] [Thread-205860] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:29:47.739 [DEBUG] [Thread-205860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:29:47.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:29:47.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:29:47.740 [DEBUG] [Thread-205860] [transport.py] [_log()] userauth is OK
2026-02-15T14:29:47.740 [DEBUG] [Thread-205860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:29:47.741 [DEBUG] [Thread-205860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:29:47.741 [DEBUG] [Thread-205860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:29:47.741 [DEBUG] [Thread-205860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:29:47.760 [INFO] [Thread-205860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:29:47.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:29:48.442 [DEBUG] [Thread-205860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:29:48.443 [DEBUG] [Thread-205860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:29:48.443 [DEBUG] [Thread-205860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:29:48.483 [DEBUG] [Thread-205860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:29:48.483 [DEBUG] [Thread-205860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:29:48.486 [DEBUG] [Thread-205860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:29:48.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:29:48.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:29:48.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:29:48.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:29:48.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:29:48.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:29:48.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:29:48.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:29:48.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:29:48.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.520235 -999.00  +23.50   4.56     23   +1.30 1 1 1 1 1   888    0 22.42 25.52 ----- 4.6 4.6 142.8 23.9 31.4 -30.6 30.7 -29.9 31.8 -28.5 32.7 -31.3
2026-02-15T14:29:48.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:29:48.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:29:48.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.520235
2026-02-15T14:29:48.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:29:48.515 [DEBUG] [Thread-205860] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:29:48.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:29:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:29:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:29:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:29:48.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:29:05', tmtdew=25.13, humidity=18.46, cloud=0.0, wind=14.72, temperature=23.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:29:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:29:48.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:29:48.611 [DEBUG] [Thread-205863] [transport.py] [_log()] starting thread (client mode): 0xa2d198d0
2026-02-15T14:29:48.611 [DEBUG] [Thread-205863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:29:48.627 [DEBUG] [Thread-205863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:29:48.627 [INFO] [Thread-205863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:29:48.637 [DEBUG] [Thread-205863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:29:48.638 [DEBUG] [Thread-205863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] client lang: <none>
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] server lang: <none>
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] kex follows: False
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:29:48.639 [DEBUG] [Thread-205863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:29:48.640 [DEBUG] [Thread-205863] [transport.py] [_log()] Compression: none
2026-02-15T14:29:48.640 [DEBUG] [Thread-205863] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:29:48.699 [DEBUG] [Thread-205863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:29:48.700 [DEBUG] [Thread-205863] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:29:48.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:29:48.701 [DEBUG] [Thread-205863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:29:48.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:29:48.766 [DEBUG] [Thread-205863] [transport.py] [_log()] userauth is OK
2026-02-15T14:29:48.766 [DEBUG] [Thread-205863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:29:48.766 [DEBUG] [Thread-205863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:29:48.766 [DEBUG] [Thread-205863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:29:48.767 [DEBUG] [Thread-205863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:29:48.786 [INFO] [Thread-205863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:29:48.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:29:48.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:29:49.628 [DEBUG] [Thread-205863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:29:49.628 [DEBUG] [Thread-205863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:29:49.676 [DEBUG] [Thread-205863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:29:49.677 [DEBUG] [Thread-205863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:29:49.687 [DEBUG] [Thread-205863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:29:49.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:29: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-02-15T14:29: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-02-15T14:29:49.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:29:49.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:29:49.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:29:49.724 [DEBUG] [Thread-205863] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:29:52.311 [DEBUG] [Thread-205865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:29:59.068 [DEBUG] [Thread-205866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:14.121 [DEBUG] [Thread-205867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:19.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:30:19.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:30:19.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:30:21.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 29, 40), 27.4, 16.19, 0.0, 22.51, 25.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:30:21.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:29:40
2026-02-15T14:30:22.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:30:22.525 [DEBUG] [Thread-205868] [transport.py] [_log()] starting thread (client mode): 0xa5742020
2026-02-15T14:30:22.525 [DEBUG] [Thread-205868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:30:22.544 [DEBUG] [Thread-205868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:30:22.544 [INFO] [Thread-205868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:30:22.547 [DEBUG] [Thread-205868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] client lang: <none>
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] server lang: <none>
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] kex follows: False
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] Compression: none
2026-02-15T14:30:22.548 [DEBUG] [Thread-205868] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:30:22.567 [DEBUG] [Thread-205868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:30:22.568 [DEBUG] [Thread-205868] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:30:22.568 [DEBUG] [Thread-205868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:30:22.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:30:22.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:30:22.570 [DEBUG] [Thread-205868] [transport.py] [_log()] userauth is OK
2026-02-15T14:30:22.570 [DEBUG] [Thread-205868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:30:22.570 [DEBUG] [Thread-205868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:30:22.570 [DEBUG] [Thread-205868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:30:22.570 [DEBUG] [Thread-205868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:30:22.592 [INFO] [Thread-205868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:30:22.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:30:23.237 [DEBUG] [Thread-205868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:30:23.237 [DEBUG] [Thread-205868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:30:23.237 [DEBUG] [Thread-205868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:30:23.278 [DEBUG] [Thread-205868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:30:23.278 [DEBUG] [Thread-205868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:30:23.281 [DEBUG] [Thread-205868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:30:23.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:30:23.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:30:23.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:30:23.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:30:23.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:30:23.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:30:23.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:30:23.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:30:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:30:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.520583 -999.00  +23.50  14.23     23   +1.50 1 1 1 1 1   888    0 22.08 27.42 ----- 14.2 14.2 146.7 16.8 31.4 -29.9 30.8 -29.2 31.8 -28.0 32.9 -31.0
2026-02-15T14:30:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:30:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:30:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.520583
2026-02-15T14:30:23.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:30:23.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:30:23.302 [DEBUG] [Thread-205868] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:30:23.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:30:23.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:30:23.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:30:23.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:29:40', tmtdew=27.4, humidity=16.19, cloud=0.0, wind=22.51, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:29:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:30:23.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:30:23.409 [DEBUG] [Thread-205871] [transport.py] [_log()] starting thread (client mode): 0xa2d06a70
2026-02-15T14:30:23.409 [DEBUG] [Thread-205871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:30:23.423 [DEBUG] [Thread-205871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:30:23.424 [INFO] [Thread-205871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:30:23.431 [DEBUG] [Thread-205871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] client lang: <none>
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] server lang: <none>
2026-02-15T14:30:23.432 [DEBUG] [Thread-205871] [transport.py] [_log()] kex follows: False
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] Compression: none
2026-02-15T14:30:23.433 [DEBUG] [Thread-205871] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:30:23.490 [DEBUG] [Thread-205871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:30:23.491 [DEBUG] [Thread-205871] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:30:23.492 [DEBUG] [Thread-205871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:30:23.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:30:23.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:30:23.546 [DEBUG] [Thread-205871] [transport.py] [_log()] userauth is OK
2026-02-15T14:30:23.546 [DEBUG] [Thread-205871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:30:23.547 [DEBUG] [Thread-205871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:30:23.547 [DEBUG] [Thread-205871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:30:23.547 [DEBUG] [Thread-205871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:30:23.565 [INFO] [Thread-205871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:30:23.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:30:23.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:30:24.413 [DEBUG] [Thread-205871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:30:24.413 [DEBUG] [Thread-205871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:30:24.461 [DEBUG] [Thread-205871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:30:24.462 [DEBUG] [Thread-205871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:30:24.472 [DEBUG] [Thread-205871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:30:24.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:30:24.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:30:24.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:30:24.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:30:24.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:30:24.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:30:24.506 [DEBUG] [Thread-205871] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:30:29.157 [DEBUG] [Thread-205873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:42.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:42.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:44.213 [DEBUG] [Thread-205874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:52.340 [DEBUG] [Thread-205875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:54.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:30:54.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:30:54.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:30:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 30, 16), 25.81, 18.11, 0.0, 21.15, 23.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:30:56.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:30:16
2026-02-15T14:30:57.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:30:57.416 [DEBUG] [Thread-205876] [transport.py] [_log()] starting thread (client mode): 0xa2d6b9a0
2026-02-15T14:30:57.416 [DEBUG] [Thread-205876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:30:57.436 [DEBUG] [Thread-205876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:30:57.436 [INFO] [Thread-205876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:30:57.439 [DEBUG] [Thread-205876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] client lang: <none>
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] server lang: <none>
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] kex follows: False
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] Compression: none
2026-02-15T14:30:57.440 [DEBUG] [Thread-205876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:30:57.457 [DEBUG] [Thread-205876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:30:57.458 [DEBUG] [Thread-205876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:30:57.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:30:57.459 [DEBUG] [Thread-205876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:30:57.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:30:57.461 [DEBUG] [Thread-205876] [transport.py] [_log()] userauth is OK
2026-02-15T14:30:57.461 [DEBUG] [Thread-205876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:30:57.461 [DEBUG] [Thread-205876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:30:57.462 [DEBUG] [Thread-205876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:30:57.462 [DEBUG] [Thread-205876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:30:57.498 [INFO] [Thread-205876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:30:57.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:30:58.125 [DEBUG] [Thread-205876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:30:58.125 [DEBUG] [Thread-205876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:30:58.125 [DEBUG] [Thread-205876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:30:58.166 [DEBUG] [Thread-205876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:30:58.166 [DEBUG] [Thread-205876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:30:58.168 [DEBUG] [Thread-205876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:30:58.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:30:58.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:30:58.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:30:58.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:30:58.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:30:58.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:30:58.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:30:58.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:30:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:30:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.521277 -999.00  +23.90  28.24     21   +0.70 1 1 1 1 1   888    0 22.49 36.06 ----- 28.2 28.2 142.0 33.1 31.4 -30.6 30.6 -30.2 31.8 -30.2 32.8 -30.2
2026-02-15T14:30:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:30:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:30:58.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.521277
2026-02-15T14:30:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:30:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:30:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:30:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:30:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:30:58.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:30:16', tmtdew=25.81, humidity=18.11, cloud=0.0, wind=21.15, temperature=23.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:30:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:30:58.195 [DEBUG] [Thread-205876] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:30:58.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:30:58.289 [DEBUG] [Thread-205879] [transport.py] [_log()] starting thread (client mode): 0xa2d013c0
2026-02-15T14:30:58.289 [DEBUG] [Thread-205879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:30:58.304 [DEBUG] [Thread-205879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:30:58.304 [INFO] [Thread-205879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] client lang: <none>
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] server lang: <none>
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] kex follows: False
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:30:58.312 [DEBUG] [Thread-205879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:30:58.313 [DEBUG] [Thread-205879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:30:58.313 [DEBUG] [Thread-205879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:30:58.313 [DEBUG] [Thread-205879] [transport.py] [_log()] Compression: none
2026-02-15T14:30:58.313 [DEBUG] [Thread-205879] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:30:58.372 [DEBUG] [Thread-205879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:30:58.373 [DEBUG] [Thread-205879] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:30:58.373 [DEBUG] [Thread-205879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:30:58.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:30:58.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:30:58.428 [DEBUG] [Thread-205879] [transport.py] [_log()] userauth is OK
2026-02-15T14:30:58.428 [DEBUG] [Thread-205879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:30:58.428 [DEBUG] [Thread-205879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:30:58.428 [DEBUG] [Thread-205879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:30:58.428 [DEBUG] [Thread-205879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:30:58.447 [INFO] [Thread-205879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:30:58.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:30:58.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:30:59.247 [DEBUG] [Thread-205881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:30:59.272 [DEBUG] [Thread-205879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:30:59.272 [DEBUG] [Thread-205879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:30:59.320 [DEBUG] [Thread-205879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:30:59.321 [DEBUG] [Thread-205879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:30:59.329 [DEBUG] [Thread-205879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:30:59.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:30:59.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:30:59.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:30:59.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:30:59.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:30:59.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:30:59.364 [DEBUG] [Thread-205879] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:31:14.302 [DEBUG] [Thread-205882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:31:29.339 [DEBUG] [Thread-205883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:31:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:31:29.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:31:29.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:31:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 30, 52), 26.82, 16.9, 0.0, 27.79, 23.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:31:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:30:52
2026-02-15T14:31:31.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:31:31.945 [DEBUG] [Thread-205884] [transport.py] [_log()] starting thread (client mode): 0xa5743c10
2026-02-15T14:31:31.945 [DEBUG] [Thread-205884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:31:31.965 [DEBUG] [Thread-205884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:31:31.965 [INFO] [Thread-205884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:31:31.968 [DEBUG] [Thread-205884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:31:31.968 [DEBUG] [Thread-205884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:31:31.968 [DEBUG] [Thread-205884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:31:31.968 [DEBUG] [Thread-205884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:31:31.968 [DEBUG] [Thread-205884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:31:31.968 [DEBUG] [Thread-205884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] client lang: <none>
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] server lang: <none>
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] kex follows: False
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] Compression: none
2026-02-15T14:31:31.969 [DEBUG] [Thread-205884] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:31:31.986 [DEBUG] [Thread-205884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:31:31.987 [DEBUG] [Thread-205884] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:31:31.987 [DEBUG] [Thread-205884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:31:31.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:31:31.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:31:31.989 [DEBUG] [Thread-205884] [transport.py] [_log()] userauth is OK
2026-02-15T14:31:31.990 [DEBUG] [Thread-205884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:31:31.990 [DEBUG] [Thread-205884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:31:31.990 [DEBUG] [Thread-205884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:31:31.990 [DEBUG] [Thread-205884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:31:32.014 [INFO] [Thread-205884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:31:32.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:31:32.646 [DEBUG] [Thread-205884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:31:32.646 [DEBUG] [Thread-205884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:31:32.646 [DEBUG] [Thread-205884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:31:32.688 [DEBUG] [Thread-205884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:31:32.688 [DEBUG] [Thread-205884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:31:32.691 [DEBUG] [Thread-205884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:31:32.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:31:32.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:31:32.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:31:32.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:31:32.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:31:32.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:31:32.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:31:32.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:31:32.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:31:32.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.521624 -999.00  +23.50  17.91     22   +0.90 1 1 1 1 1   888    0 23.36 44.45 ----- 17.9 17.9 120.4 23.1 31.2 -30.1 30.6 -29.5 31.7 -28.5 32.7 -30.0
2026-02-15T14:31:32.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:31:32.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:31:32.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.521624
2026-02-15T14:31:32.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:31:32.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:31:32.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:31:32.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:31:32.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:31:32.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:30:52', tmtdew=26.82, humidity=16.9, cloud=0.0, wind=27.79, temperature=23.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:31:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:31:32.717 [DEBUG] [Thread-205884] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:31:32.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:31:32.815 [DEBUG] [Thread-205887] [transport.py] [_log()] starting thread (client mode): 0xa5741030
2026-02-15T14:31:32.815 [DEBUG] [Thread-205887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:31:32.831 [DEBUG] [Thread-205887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:31:32.832 [INFO] [Thread-205887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:31:32.840 [DEBUG] [Thread-205887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:31:32.840 [DEBUG] [Thread-205887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:31:32.840 [DEBUG] [Thread-205887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:31:32.840 [DEBUG] [Thread-205887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] client lang: <none>
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] server lang: <none>
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] kex follows: False
2026-02-15T14:31:32.841 [DEBUG] [Thread-205887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:31:32.842 [DEBUG] [Thread-205887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:31:32.842 [DEBUG] [Thread-205887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:31:32.842 [DEBUG] [Thread-205887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:31:32.842 [DEBUG] [Thread-205887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:31:32.842 [DEBUG] [Thread-205887] [transport.py] [_log()] Compression: none
2026-02-15T14:31:32.842 [DEBUG] [Thread-205887] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:31:32.897 [DEBUG] [Thread-205887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:31:32.898 [DEBUG] [Thread-205887] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:31:32.899 [DEBUG] [Thread-205887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:31:32.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:31:32.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:31:32.953 [DEBUG] [Thread-205887] [transport.py] [_log()] userauth is OK
2026-02-15T14:31:32.954 [DEBUG] [Thread-205887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:31:32.954 [DEBUG] [Thread-205887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:31:32.954 [DEBUG] [Thread-205887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:31:32.954 [DEBUG] [Thread-205887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:31:32.977 [INFO] [Thread-205887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:31:32.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:31:32.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:31:33.794 [DEBUG] [Thread-205887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:31:33.794 [DEBUG] [Thread-205887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:31:33.841 [DEBUG] [Thread-205887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:31:33.842 [DEBUG] [Thread-205887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:31:33.851 [DEBUG] [Thread-205887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:31:33.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:31:33.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:31:33.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:31:33.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:31:33.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:31:33.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:31:33.889 [DEBUG] [Thread-205887] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:31:42.178 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:31:42.179 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:31:44.373 [DEBUG] [Thread-205889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:31:52.384 [DEBUG] [Thread-205890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:31:59.427 [DEBUG] [Thread-205891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:32:03.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:32:03.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:32:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 31, 28), 26.32, 17.41, 0.0, 20.36, 23.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:32:06.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:31:28
2026-02-15T14:32:06.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:32:06.997 [DEBUG] [Thread-205892] [transport.py] [_log()] starting thread (client mode): 0xa5742680
2026-02-15T14:32:06.997 [DEBUG] [Thread-205892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:32:07.017 [DEBUG] [Thread-205892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:32:07.017 [INFO] [Thread-205892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] client lang: <none>
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] server lang: <none>
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] kex follows: False
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] Compression: none
2026-02-15T14:32:07.021 [DEBUG] [Thread-205892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:32:07.038 [DEBUG] [Thread-205892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:32:07.039 [DEBUG] [Thread-205892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:32:07.039 [DEBUG] [Thread-205892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:32:07.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:32:07.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:32:07.041 [DEBUG] [Thread-205892] [transport.py] [_log()] userauth is OK
2026-02-15T14:32:07.041 [DEBUG] [Thread-205892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:32:07.041 [DEBUG] [Thread-205892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:32:07.042 [DEBUG] [Thread-205892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:32:07.042 [DEBUG] [Thread-205892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:32:07.067 [INFO] [Thread-205892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:32:07.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:32:07.691 [DEBUG] [Thread-205892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:32:07.691 [DEBUG] [Thread-205892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:32:07.691 [DEBUG] [Thread-205892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:32:07.732 [DEBUG] [Thread-205892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:32:07.733 [DEBUG] [Thread-205892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:32:07.736 [DEBUG] [Thread-205892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:32:07.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:32:07.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:32:07.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:32:07.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:32:07.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:32:07.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:32:07.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:32:07.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:32:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:32:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.521972 -999.00  +23.70  15.96     23   +1.80 1 1 1 1 1   888    0 22.69 42.25 ----- 16.0 16.0 141.4 22.0 31.2 -30.4 30.6 -29.1 31.8 -28.3 32.7 -30.2
2026-02-15T14:32:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:32:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:32:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.521972
2026-02-15T14:32:07.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:32:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:32:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:32:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:32:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:32:07.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:31:28', tmtdew=26.32, humidity=17.41, cloud=0.0, wind=20.36, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:31:38.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:32:07.763 [DEBUG] [Thread-205892] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:32:07.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:32:07.858 [DEBUG] [Thread-205895] [transport.py] [_log()] starting thread (client mode): 0xa5742290
2026-02-15T14:32:07.858 [DEBUG] [Thread-205895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:32:07.876 [DEBUG] [Thread-205895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:32:07.876 [INFO] [Thread-205895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] client lang: <none>
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] server lang: <none>
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] kex follows: False
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:32:07.884 [DEBUG] [Thread-205895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:32:07.885 [DEBUG] [Thread-205895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:32:07.885 [DEBUG] [Thread-205895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:32:07.885 [DEBUG] [Thread-205895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:32:07.885 [DEBUG] [Thread-205895] [transport.py] [_log()] Compression: none
2026-02-15T14:32:07.885 [DEBUG] [Thread-205895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:32:07.944 [DEBUG] [Thread-205895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:32:07.945 [DEBUG] [Thread-205895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:32:07.945 [DEBUG] [Thread-205895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:32:07.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:32:07.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:32:08.000 [DEBUG] [Thread-205895] [transport.py] [_log()] userauth is OK
2026-02-15T14:32:08.000 [DEBUG] [Thread-205895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:32:08.000 [DEBUG] [Thread-205895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:32:08.001 [DEBUG] [Thread-205895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:32:08.001 [DEBUG] [Thread-205895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:32:08.019 [INFO] [Thread-205895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:32:08.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:32:08.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:32:08.852 [DEBUG] [Thread-205895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:32:08.852 [DEBUG] [Thread-205895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:32:08.900 [DEBUG] [Thread-205895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:32:08.900 [DEBUG] [Thread-205895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:32:08.910 [DEBUG] [Thread-205895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:32:08.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:32:08.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:32:08.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:32:08.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:32:08.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:32:08.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:32:08.947 [DEBUG] [Thread-205895] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:32:14.466 [DEBUG] [Thread-205897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:29.523 [DEBUG] [Thread-205898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:32:38.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:32:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:32:40.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 32, 4), 25.94, 17.83, 0.0, 22.09, 23.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:32:40.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:32:04
2026-02-15T14:32:41.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:32:41.580 [DEBUG] [Thread-205899] [transport.py] [_log()] starting thread (client mode): 0xa57c1720
2026-02-15T14:32:41.580 [DEBUG] [Thread-205899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:32:41.600 [DEBUG] [Thread-205899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:32:41.600 [INFO] [Thread-205899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] client lang: <none>
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] server lang: <none>
2026-02-15T14:32:41.604 [DEBUG] [Thread-205899] [transport.py] [_log()] kex follows: False
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] Compression: none
2026-02-15T14:32:41.605 [DEBUG] [Thread-205899] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:32:41.623 [DEBUG] [Thread-205899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:32:41.624 [DEBUG] [Thread-205899] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:32:41.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:32:41.625 [DEBUG] [Thread-205899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:32:41.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:32:41.627 [DEBUG] [Thread-205899] [transport.py] [_log()] userauth is OK
2026-02-15T14:32:41.627 [DEBUG] [Thread-205899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:32:41.627 [DEBUG] [Thread-205899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:32:41.627 [DEBUG] [Thread-205899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:32:41.627 [DEBUG] [Thread-205899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:32:41.651 [INFO] [Thread-205899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:32:41.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:32:42.266 [DEBUG] [Thread-205899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:32:42.267 [DEBUG] [Thread-205899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:32:42.267 [DEBUG] [Thread-205899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:32:42.307 [DEBUG] [Thread-205899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:32:42.308 [DEBUG] [Thread-205899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:32:42.311 [DEBUG] [Thread-205899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:32:42.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:42.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:32:42.321 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:42.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:32:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:32:42.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:32:42.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:32:42.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:32:42.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:32:42.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:32:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:32:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.522319 -999.00  +23.60  18.66     23   +1.50 1 1 1 1 1   888    0 22.42 40.44 ----- 18.7 18.7 137.4 33.4 31.1 -31.4 30.5 -29.7 31.6 -30.3 32.5 -32.5
2026-02-15T14:32:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:32:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:32:42.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.522319
2026-02-15T14:32:42.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:32:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:32:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:32:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:32:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:32:42.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:32:04', tmtdew=25.94, humidity=17.83, cloud=0.0, wind=22.09, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:32:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:32:42.336 [DEBUG] [Thread-205899] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:32:42.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:32:42.425 [DEBUG] [Thread-205902] [transport.py] [_log()] starting thread (client mode): 0xa2d682b0
2026-02-15T14:32:42.426 [DEBUG] [Thread-205902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:32:42.441 [DEBUG] [Thread-205902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:32:42.441 [INFO] [Thread-205902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:32:42.448 [DEBUG] [Thread-205902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:32:42.449 [DEBUG] [Thread-205902] [transport.py] [_log()] client lang: <none>
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] server lang: <none>
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] kex follows: False
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:32:42.450 [DEBUG] [Thread-205902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:32:42.451 [DEBUG] [Thread-205902] [transport.py] [_log()] Compression: none
2026-02-15T14:32:42.451 [DEBUG] [Thread-205902] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:32:42.509 [DEBUG] [Thread-205902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:32:42.510 [DEBUG] [Thread-205902] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:32:42.510 [DEBUG] [Thread-205902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:32:42.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:32:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:32:42.566 [DEBUG] [Thread-205902] [transport.py] [_log()] userauth is OK
2026-02-15T14:32:42.566 [DEBUG] [Thread-205902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:32:42.566 [DEBUG] [Thread-205902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:32:42.566 [DEBUG] [Thread-205902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:32:42.566 [DEBUG] [Thread-205902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:32:42.585 [INFO] [Thread-205902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:32:42.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:32:42.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:32:43.415 [DEBUG] [Thread-205902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:32:43.415 [DEBUG] [Thread-205902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:32:43.463 [DEBUG] [Thread-205902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:32:43.464 [DEBUG] [Thread-205902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:32:43.473 [DEBUG] [Thread-205902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:32:43.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:32:43.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:32:43.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:32:43.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:32:43.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:32:43.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:32:43.510 [DEBUG] [Thread-205902] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:32:44.563 [DEBUG] [Thread-205904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:52.417 [DEBUG] [Thread-205905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:32:59.615 [DEBUG] [Thread-205906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:13.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:33:13.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:33:13.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:33:14.653 [DEBUG] [Thread-205907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 32, 39), 26.03, 17.71, 0.0, 23.11, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:33:15.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:32:39
2026-02-15T14:33:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:33:16.012 [DEBUG] [Thread-205908] [transport.py] [_log()] starting thread (client mode): 0xa2db7eb0
2026-02-15T14:33:16.012 [DEBUG] [Thread-205908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:33:16.033 [DEBUG] [Thread-205908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:33:16.033 [INFO] [Thread-205908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:33:16.036 [DEBUG] [Thread-205908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:33:16.036 [DEBUG] [Thread-205908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:33:16.036 [DEBUG] [Thread-205908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:33:16.036 [DEBUG] [Thread-205908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] client lang: <none>
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] server lang: <none>
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] kex follows: False
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] Compression: none
2026-02-15T14:33:16.037 [DEBUG] [Thread-205908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:33:16.054 [DEBUG] [Thread-205908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:33:16.055 [DEBUG] [Thread-205908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:33:16.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:33:16.056 [DEBUG] [Thread-205908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:33:16.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:33:16.058 [DEBUG] [Thread-205908] [transport.py] [_log()] userauth is OK
2026-02-15T14:33:16.059 [DEBUG] [Thread-205908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:33:16.059 [DEBUG] [Thread-205908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:33:16.059 [DEBUG] [Thread-205908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:33:16.059 [DEBUG] [Thread-205908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:33:16.082 [INFO] [Thread-205908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:33:16.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:33:16.725 [DEBUG] [Thread-205908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:33:16.726 [DEBUG] [Thread-205908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:33:16.726 [DEBUG] [Thread-205908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:33:16.767 [DEBUG] [Thread-205908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:33:16.767 [DEBUG] [Thread-205908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:33:16.771 [DEBUG] [Thread-205908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:33:16.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:33:16.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:33:16.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:33:16.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:33:16.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:33:16.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:33:16.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:33:16.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:33:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:33:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.522666 -999.00  +23.60  19.22     23   +1.30 1 1 1 1 1   888    0 22.74 39.41 ----- 19.2 19.2 164.2 26.3 31.1 -31.2 30.5 -29.6 31.6 -29.2 32.5 -31.2
2026-02-15T14:33:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:33:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:33:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.522666
2026-02-15T14:33:16.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:33:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:33:16.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:33:16.799 [DEBUG] [Thread-205908] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:33:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:33:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:33:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:32:39', tmtdew=26.03, humidity=17.71, cloud=0.0, wind=23.11, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:32:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:33:16.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:33:16.894 [DEBUG] [Thread-205911] [transport.py] [_log()] starting thread (client mode): 0xa2d01060
2026-02-15T14:33:16.894 [DEBUG] [Thread-205911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:33:16.909 [DEBUG] [Thread-205911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:33:16.909 [INFO] [Thread-205911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] client lang: <none>
2026-02-15T14:33:16.917 [DEBUG] [Thread-205911] [transport.py] [_log()] server lang: <none>
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] kex follows: False
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] Compression: none
2026-02-15T14:33:16.918 [DEBUG] [Thread-205911] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:33:16.975 [DEBUG] [Thread-205911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:33:16.976 [DEBUG] [Thread-205911] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:33:16.976 [DEBUG] [Thread-205911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:33:16.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:33:16.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:33:17.031 [DEBUG] [Thread-205911] [transport.py] [_log()] userauth is OK
2026-02-15T14:33:17.032 [DEBUG] [Thread-205911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:33:17.032 [DEBUG] [Thread-205911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:33:17.032 [DEBUG] [Thread-205911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:33:17.032 [DEBUG] [Thread-205911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:33:17.051 [INFO] [Thread-205911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:33:17.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:33:17.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:33:17.895 [DEBUG] [Thread-205911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:33:17.895 [DEBUG] [Thread-205911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:33:17.947 [DEBUG] [Thread-205911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:33:17.947 [DEBUG] [Thread-205911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:33:17.960 [DEBUG] [Thread-205911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:33:17.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:33:17.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:33:17.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:33:17.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:33:17.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:33:17.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:33:18.002 [DEBUG] [Thread-205911] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:33:29.690 [DEBUG] [Thread-205913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:42.461 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:42.462 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:44.743 [DEBUG] [Thread-205914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:48.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:33:48.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:33:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:33:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 33, 15), 25.74, 18.21, 0.0, 20.98, 23.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:33:50.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:33:15
2026-02-15T14:33:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:33:50.928 [DEBUG] [Thread-205915] [transport.py] [_log()] starting thread (client mode): 0xa57e2290
2026-02-15T14:33:50.928 [DEBUG] [Thread-205915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:33:50.949 [DEBUG] [Thread-205915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:33:50.949 [INFO] [Thread-205915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:33:50.952 [DEBUG] [Thread-205915] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] client lang: <none>
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] server lang: <none>
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] kex follows: False
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] Compression: none
2026-02-15T14:33:50.953 [DEBUG] [Thread-205915] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:33:50.971 [DEBUG] [Thread-205915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:33:50.972 [DEBUG] [Thread-205915] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:33:50.972 [DEBUG] [Thread-205915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:33:50.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:33:50.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:33:50.974 [DEBUG] [Thread-205915] [transport.py] [_log()] userauth is OK
2026-02-15T14:33:50.974 [DEBUG] [Thread-205915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:33:50.974 [DEBUG] [Thread-205915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:33:50.975 [DEBUG] [Thread-205915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:33:50.975 [DEBUG] [Thread-205915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:33:50.999 [INFO] [Thread-205915] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:33:51.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:33:51.647 [DEBUG] [Thread-205915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:33:51.647 [DEBUG] [Thread-205915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:33:51.648 [DEBUG] [Thread-205915] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:33:51.688 [DEBUG] [Thread-205915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:33:51.688 [DEBUG] [Thread-205915] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:33:51.691 [DEBUG] [Thread-205915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:33:51.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:33:51.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:33:51.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:33:51.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:33:51.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:33:51.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:33:51.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:33:51.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:33:51.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.523013 -999.00  +23.50   9.06     23   +1.40 1 1 1 1 1   888    0 22.89 39.42 ----- 9.1 9.1 192.4 21.6 31.1 -30.9 30.5 -29.3 31.6 -28.0 32.6 -30.9
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.523013
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:33:51.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:33:15', tmtdew=25.74, humidity=18.21, cloud=0.0, wind=20.98, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:33:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:33:51.713 [DEBUG] [Thread-205915] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:33:51.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:33:51.801 [DEBUG] [Thread-205918] [transport.py] [_log()] starting thread (client mode): 0xa57e3be0
2026-02-15T14:33:51.801 [DEBUG] [Thread-205918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:33:51.816 [DEBUG] [Thread-205918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:33:51.816 [INFO] [Thread-205918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] client lang: <none>
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] server lang: <none>
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] kex follows: False
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] Compression: none
2026-02-15T14:33:51.824 [DEBUG] [Thread-205918] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:33:51.879 [DEBUG] [Thread-205918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:33:51.880 [DEBUG] [Thread-205918] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:33:51.880 [DEBUG] [Thread-205918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:33:51.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:33:51.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:33:51.936 [DEBUG] [Thread-205918] [transport.py] [_log()] userauth is OK
2026-02-15T14:33:51.937 [DEBUG] [Thread-205918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:33:51.937 [DEBUG] [Thread-205918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:33:51.937 [DEBUG] [Thread-205918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:33:51.937 [DEBUG] [Thread-205918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:33:51.956 [INFO] [Thread-205918] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:33:51.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:33:51.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:33:52.449 [DEBUG] [Thread-205920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:33:52.831 [DEBUG] [Thread-205918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:33:52.831 [DEBUG] [Thread-205918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:33:52.879 [DEBUG] [Thread-205918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:33:52.879 [DEBUG] [Thread-205918] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:33:52.888 [DEBUG] [Thread-205918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:33:52.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:33:52.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:33: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') -> 00000000
2026-02-15T14:33:52.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:33:52.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:33:52.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:33:52.922 [DEBUG] [Thread-205918] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:33:59.780 [DEBUG] [Thread-205921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:14.827 [DEBUG] [Thread-205922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:22.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:34:22.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:34:22.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:34:24.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 33, 50), 26.09, 17.69, 0.0, 16.06, 23.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:34:24.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:33:50
2026-02-15T14:34:25.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:34:25.384 [DEBUG] [Thread-205923] [transport.py] [_log()] starting thread (client mode): 0xa2d02ec0
2026-02-15T14:34:25.384 [DEBUG] [Thread-205923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:34:25.405 [DEBUG] [Thread-205923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:34:25.405 [INFO] [Thread-205923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] client lang: <none>
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] server lang: <none>
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] kex follows: False
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] Compression: none
2026-02-15T14:34:25.408 [DEBUG] [Thread-205923] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:34:25.424 [DEBUG] [Thread-205923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:34:25.424 [DEBUG] [Thread-205923] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:34:25.424 [DEBUG] [Thread-205923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:34:25.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:34:25.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:34:25.425 [DEBUG] [Thread-205923] [transport.py] [_log()] userauth is OK
2026-02-15T14:34:25.425 [DEBUG] [Thread-205923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:34:25.425 [DEBUG] [Thread-205923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:34:25.425 [DEBUG] [Thread-205923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:34:25.425 [DEBUG] [Thread-205923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:34:25.435 [INFO] [Thread-205923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:34:25.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:34:26.075 [DEBUG] [Thread-205923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:34:26.075 [DEBUG] [Thread-205923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:34:26.075 [DEBUG] [Thread-205923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:34:26.116 [DEBUG] [Thread-205923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:34:26.116 [DEBUG] [Thread-205923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:34:26.118 [DEBUG] [Thread-205923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:34:26.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:34:26.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:34:26.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:34:26.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:34:26.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:34:26.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:34:26.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.523361 -999.00  +23.50  22.68     22   +0.60 1 1 1 1 1   888    0 23.11 42.93 ----- 22.7 22.7 143.8 27.2 31.1 -30.2 30.4 -29.6 31.6 -29.1 32.6 -30.2
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.523361
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:34:26.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:33:50', tmtdew=26.09, humidity=17.69, cloud=0.0, wind=16.06, temperature=23.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:33:38.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:34:26.136 [DEBUG] [Thread-205923] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:34:26.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:34:26.219 [DEBUG] [Thread-205926] [transport.py] [_log()] starting thread (client mode): 0xa2d4e080
2026-02-15T14:34:26.220 [DEBUG] [Thread-205926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:34:26.235 [DEBUG] [Thread-205926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:34:26.235 [INFO] [Thread-205926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:34:26.242 [DEBUG] [Thread-205926] [transport.py] [_log()] client lang: <none>
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] server lang: <none>
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] kex follows: False
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] Compression: none
2026-02-15T14:34:26.243 [DEBUG] [Thread-205926] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:34:26.301 [DEBUG] [Thread-205926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:34:26.301 [DEBUG] [Thread-205926] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:34:26.301 [DEBUG] [Thread-205926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:34:26.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:34:26.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:34:26.358 [DEBUG] [Thread-205926] [transport.py] [_log()] userauth is OK
2026-02-15T14:34:26.358 [DEBUG] [Thread-205926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:34:26.358 [DEBUG] [Thread-205926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:34:26.358 [DEBUG] [Thread-205926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:34:26.358 [DEBUG] [Thread-205926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:34:26.373 [INFO] [Thread-205926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:34:26.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:34:26.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:34:27.217 [DEBUG] [Thread-205926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:34:27.217 [DEBUG] [Thread-205926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:34:27.265 [DEBUG] [Thread-205926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:34:27.265 [DEBUG] [Thread-205926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:34:27.274 [DEBUG] [Thread-205926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:34:27.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:34: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')
2026-02-15T14:34:27.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:34:27.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:34:27.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:34:27.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:34:27.308 [DEBUG] [Thread-205926] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:34:29.865 [DEBUG] [Thread-205928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:42.603 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:42.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:44.928 [DEBUG] [Thread-205929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:52.487 [DEBUG] [Thread-205930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:34:57.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:34:57.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:34:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:34:59.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 34, 27), 25.98, 17.74, 0.0, 16.76, 23.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:34:59.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:34:27
2026-02-15T14:34:59.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:34:59.662 [DEBUG] [Thread-205931] [transport.py] [_log()] starting thread (client mode): 0xa2d4df90
2026-02-15T14:34:59.662 [DEBUG] [Thread-205931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:34:59.682 [DEBUG] [Thread-205931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:34:59.682 [INFO] [Thread-205931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] client lang: <none>
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] server lang: <none>
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] kex follows: False
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:34:59.685 [DEBUG] [Thread-205931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:34:59.686 [DEBUG] [Thread-205931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:34:59.686 [DEBUG] [Thread-205931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:34:59.686 [DEBUG] [Thread-205931] [transport.py] [_log()] Compression: none
2026-02-15T14:34:59.686 [DEBUG] [Thread-205931] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:34:59.705 [DEBUG] [Thread-205931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:34:59.705 [DEBUG] [Thread-205931] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:34:59.706 [DEBUG] [Thread-205931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:34:59.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:34:59.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:34:59.708 [DEBUG] [Thread-205931] [transport.py] [_log()] userauth is OK
2026-02-15T14:34:59.708 [DEBUG] [Thread-205931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:34:59.708 [DEBUG] [Thread-205931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:34:59.709 [DEBUG] [Thread-205931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:34:59.709 [DEBUG] [Thread-205931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:34:59.733 [INFO] [Thread-205931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:34:59.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:34:59.966 [DEBUG] [Thread-205933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:35:00.369 [DEBUG] [Thread-205931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:35:00.370 [DEBUG] [Thread-205931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:35:00.370 [DEBUG] [Thread-205931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:35:00.410 [DEBUG] [Thread-205931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:35:00.410 [DEBUG] [Thread-205931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:35:00.412 [DEBUG] [Thread-205931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:35:00.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:35:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:35:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:35:00.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:35:00.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:35:00.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:35:00.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.523708 -999.00  +23.50  16.77     23   +1.60 1 1 1 1 1   888    0 22.32 41.16 ----- 16.8 16.8 148.7 24.8 31.1 -29.4 30.4 -29.3 31.5 -28.7 32.5 -29.8
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.523708
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:35:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:34:27', tmtdew=25.98, humidity=17.74, cloud=0.0, wind=16.76, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:34:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:35:00.431 [DEBUG] [Thread-205931] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:35:00.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:35:00.515 [DEBUG] [Thread-205935] [transport.py] [_log()] starting thread (client mode): 0xa2d025f0
2026-02-15T14:35:00.515 [DEBUG] [Thread-205935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:35:00.530 [DEBUG] [Thread-205935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:35:00.530 [INFO] [Thread-205935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:35:00.537 [DEBUG] [Thread-205935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:35:00.537 [DEBUG] [Thread-205935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] client lang: <none>
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] server lang: <none>
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] kex follows: False
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] Compression: none
2026-02-15T14:35:00.538 [DEBUG] [Thread-205935] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:35:00.594 [DEBUG] [Thread-205935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:35:00.594 [DEBUG] [Thread-205935] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:35:00.595 [DEBUG] [Thread-205935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:35:00.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:35:00.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:35:00.651 [DEBUG] [Thread-205935] [transport.py] [_log()] userauth is OK
2026-02-15T14:35:00.651 [DEBUG] [Thread-205935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:35:00.651 [DEBUG] [Thread-205935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:35:00.651 [DEBUG] [Thread-205935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:35:00.651 [DEBUG] [Thread-205935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:35:00.670 [INFO] [Thread-205935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:35:00.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:35:00.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:35:01.491 [DEBUG] [Thread-205935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:35:01.491 [DEBUG] [Thread-205935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:35:01.540 [DEBUG] [Thread-205935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:35:01.540 [DEBUG] [Thread-205935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:35:01.549 [DEBUG] [Thread-205935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:35:01.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:35:01.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:35:01.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:35:01.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:35:01.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:35:01.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:35:01.582 [DEBUG] [Thread-205935] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:35:15.002 [DEBUG] [Thread-205937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:35:30.059 [DEBUG] [Thread-205938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:35:31.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:35:31.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:35:31.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:35:34.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 35, 2), 25.9, 17.83, 0.0, 18.39, 23.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:35:34.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:35:02
2026-02-15T14:35:34.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:35:34.659 [DEBUG] [Thread-205939] [transport.py] [_log()] starting thread (client mode): 0xa2d06920
2026-02-15T14:35:34.659 [DEBUG] [Thread-205939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:35:34.679 [DEBUG] [Thread-205939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:35:34.680 [INFO] [Thread-205939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:35:34.682 [DEBUG] [Thread-205939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] client lang: <none>
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] server lang: <none>
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] kex follows: False
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:35:34.683 [DEBUG] [Thread-205939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:35:34.684 [DEBUG] [Thread-205939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:35:34.684 [DEBUG] [Thread-205939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:35:34.684 [DEBUG] [Thread-205939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:35:34.684 [DEBUG] [Thread-205939] [transport.py] [_log()] Compression: none
2026-02-15T14:35:34.684 [DEBUG] [Thread-205939] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:35:34.702 [DEBUG] [Thread-205939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:35:34.703 [DEBUG] [Thread-205939] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:35:34.703 [DEBUG] [Thread-205939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:35:34.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:35:34.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:35:34.705 [DEBUG] [Thread-205939] [transport.py] [_log()] userauth is OK
2026-02-15T14:35:34.705 [DEBUG] [Thread-205939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:35:34.705 [DEBUG] [Thread-205939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:35:34.706 [DEBUG] [Thread-205939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:35:34.706 [DEBUG] [Thread-205939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:35:34.724 [INFO] [Thread-205939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:35:34.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:35:35.504 [DEBUG] [Thread-205939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:35:35.504 [DEBUG] [Thread-205939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:35:35.504 [DEBUG] [Thread-205939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:35:35.545 [DEBUG] [Thread-205939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:35:35.545 [DEBUG] [Thread-205939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:35:35.548 [DEBUG] [Thread-205939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:35:35.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:35:35.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:35:35.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:35:35.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:35:35.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:35:35.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:35:35.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:35:35.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:35:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:35:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.524402 -999.00  +23.50  17.06     23   +1.60 1 1 1 1 1   888    0 22.87 43.72 ----- 17.1 17.1 139.2 27.4 30.9 -30.4 30.2 -30.3 31.4 -28.6 32.4 -31.3
2026-02-15T14:35:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:35:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:35:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.524402
2026-02-15T14:35:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:35:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:35:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:35:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:35:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:35:35.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:35:02', tmtdew=25.9, humidity=17.83, cloud=0.0, wind=18.39, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:35:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:35:35.578 [DEBUG] [Thread-205939] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:35:35.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:35:35.673 [DEBUG] [Thread-205942] [transport.py] [_log()] starting thread (client mode): 0xa5743e50
2026-02-15T14:35:35.674 [DEBUG] [Thread-205942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:35:35.688 [DEBUG] [Thread-205942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:35:35.688 [INFO] [Thread-205942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] client lang: <none>
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] server lang: <none>
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] kex follows: False
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:35:35.696 [DEBUG] [Thread-205942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:35:35.697 [DEBUG] [Thread-205942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:35:35.697 [DEBUG] [Thread-205942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:35:35.697 [DEBUG] [Thread-205942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:35:35.697 [DEBUG] [Thread-205942] [transport.py] [_log()] Compression: none
2026-02-15T14:35:35.697 [DEBUG] [Thread-205942] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:35:35.756 [DEBUG] [Thread-205942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:35:35.757 [DEBUG] [Thread-205942] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:35:35.757 [DEBUG] [Thread-205942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:35:35.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:35:35.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:35:35.813 [DEBUG] [Thread-205942] [transport.py] [_log()] userauth is OK
2026-02-15T14:35:35.813 [DEBUG] [Thread-205942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:35:35.813 [DEBUG] [Thread-205942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:35:35.813 [DEBUG] [Thread-205942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:35:35.814 [DEBUG] [Thread-205942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:35:35.832 [INFO] [Thread-205942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:35:35.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:35:35.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:35:36.659 [DEBUG] [Thread-205942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:35:36.659 [DEBUG] [Thread-205942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:35:36.707 [DEBUG] [Thread-205942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:35:36.707 [DEBUG] [Thread-205942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:35:36.716 [DEBUG] [Thread-205942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:35:36.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:35:36.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:35:36.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:35:36.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:35:36.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:35:36.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:35:36.751 [DEBUG] [Thread-205942] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:35:42.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:35:42.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:35:45.097 [DEBUG] [Thread-205944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:35:52.525 [DEBUG] [Thread-205945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:00.149 [DEBUG] [Thread-205946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:06.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:36:06.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:36:06.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:36:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 35, 37), 27.2, 16.46, 0.0, 17.82, 25.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:36:08.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:35:37
2026-02-15T14:36:09.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:36:09.251 [DEBUG] [Thread-205947] [transport.py] [_log()] starting thread (client mode): 0xa57e1180
2026-02-15T14:36:09.252 [DEBUG] [Thread-205947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:36:09.272 [DEBUG] [Thread-205947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:36:09.272 [INFO] [Thread-205947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:36:09.275 [DEBUG] [Thread-205947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:36:09.275 [DEBUG] [Thread-205947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] client lang: <none>
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] server lang: <none>
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] kex follows: False
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] Compression: none
2026-02-15T14:36:09.276 [DEBUG] [Thread-205947] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:36:09.293 [DEBUG] [Thread-205947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:36:09.293 [DEBUG] [Thread-205947] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:36:09.294 [DEBUG] [Thread-205947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:36:09.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:36:09.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:36:09.296 [DEBUG] [Thread-205947] [transport.py] [_log()] userauth is OK
2026-02-15T14:36:09.296 [DEBUG] [Thread-205947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:36:09.296 [DEBUG] [Thread-205947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:36:09.296 [DEBUG] [Thread-205947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:36:09.297 [DEBUG] [Thread-205947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:36:09.322 [INFO] [Thread-205947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:36:09.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:36:09.904 [DEBUG] [Thread-205947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:36:09.904 [DEBUG] [Thread-205947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:36:09.905 [DEBUG] [Thread-205947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:36:09.946 [DEBUG] [Thread-205947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:36:09.946 [DEBUG] [Thread-205947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:36:09.949 [DEBUG] [Thread-205947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:36:09.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:36:09.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:36:09.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:36:09.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:36:09.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:36:09.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:36:09.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:36:09.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:36:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:36:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.524749 -999.00  +23.30  24.68     24   +1.80 1 1 1 1 1   888    0 23.15 47.00 ----- 24.7 24.7 141.4 28.6 30.9 -29.6 30.3 -30.0 31.4 -29.4 32.4 -31.9
2026-02-15T14:36:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:36:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:36:09.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.524749
2026-02-15T14:36:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:36:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:36:09.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:36:09.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:36:09.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:36:09.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:35:37', tmtdew=27.2, humidity=16.46, cloud=0.0, wind=17.82, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:35:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:36:09.974 [DEBUG] [Thread-205947] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:36:10.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:36:10.071 [DEBUG] [Thread-205950] [transport.py] [_log()] starting thread (client mode): 0xa81d5e10
2026-02-15T14:36:10.071 [DEBUG] [Thread-205950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:36:10.089 [DEBUG] [Thread-205950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:36:10.090 [INFO] [Thread-205950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:36:10.099 [DEBUG] [Thread-205950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] client lang: <none>
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] server lang: <none>
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] kex follows: False
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:36:10.100 [DEBUG] [Thread-205950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:36:10.101 [DEBUG] [Thread-205950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:36:10.101 [DEBUG] [Thread-205950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:36:10.101 [DEBUG] [Thread-205950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:36:10.101 [DEBUG] [Thread-205950] [transport.py] [_log()] Compression: none
2026-02-15T14:36:10.101 [DEBUG] [Thread-205950] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:36:10.165 [DEBUG] [Thread-205950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:36:10.165 [DEBUG] [Thread-205950] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:36:10.166 [DEBUG] [Thread-205950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:36:10.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:36:10.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:36:10.229 [DEBUG] [Thread-205950] [transport.py] [_log()] userauth is OK
2026-02-15T14:36:10.229 [DEBUG] [Thread-205950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:36:10.229 [DEBUG] [Thread-205950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:36:10.229 [DEBUG] [Thread-205950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:36:10.229 [DEBUG] [Thread-205950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:36:10.252 [INFO] [Thread-205950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:36:10.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:36:10.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:36:11.057 [DEBUG] [Thread-205950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:36:11.057 [DEBUG] [Thread-205950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:36:11.105 [DEBUG] [Thread-205950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:36:11.106 [DEBUG] [Thread-205950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:36:11.115 [DEBUG] [Thread-205950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:36:11.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:36:11.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:36:11.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:36:11.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:36:11.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:36:11.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:36:11.158 [DEBUG] [Thread-205950] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:36:15.186 [DEBUG] [Thread-205952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:30.238 [DEBUG] [Thread-205953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:41.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:36:41.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:36:41.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:36:42.895 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:42.896 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:43.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 36, 13), 25.57, 18.27, 0.0, 21.17, 23.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:36:43.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:36:13
2026-02-15T14:36:43.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:36:43.716 [DEBUG] [Thread-205954] [transport.py] [_log()] starting thread (client mode): 0xa81d5870
2026-02-15T14:36:43.717 [DEBUG] [Thread-205954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:36:43.737 [DEBUG] [Thread-205954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:36:43.737 [INFO] [Thread-205954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:43.740 [DEBUG] [Thread-205954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] client lang: <none>
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] server lang: <none>
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] kex follows: False
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] Compression: none
2026-02-15T14:36:43.741 [DEBUG] [Thread-205954] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:36:43.761 [DEBUG] [Thread-205954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:36:43.762 [DEBUG] [Thread-205954] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:36:43.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:36:43.763 [DEBUG] [Thread-205954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:36:43.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:36:43.764 [DEBUG] [Thread-205954] [transport.py] [_log()] userauth is OK
2026-02-15T14:36:43.765 [DEBUG] [Thread-205954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:36:43.765 [DEBUG] [Thread-205954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:36:43.765 [DEBUG] [Thread-205954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:36:43.765 [DEBUG] [Thread-205954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:36:43.790 [INFO] [Thread-205954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:36:43.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:36:44.436 [DEBUG] [Thread-205954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:36:44.436 [DEBUG] [Thread-205954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:36:44.437 [DEBUG] [Thread-205954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:36:44.477 [DEBUG] [Thread-205954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:36:44.478 [DEBUG] [Thread-205954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:36:44.481 [DEBUG] [Thread-205954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:36:44.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:36:44.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:36:44.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:36:44.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:36:44.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:36:44.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:36:44.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:36:44.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:36:44.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:36:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.525097 -999.00  +23.20  17.82     24   +1.90 1 1 1 1 1   888    0 23.27 46.04 ----- 17.8 17.8 147.1 22.1 30.8 -30.3 30.4 -28.4 31.5 -28.1 32.4 -29.7
2026-02-15T14:36:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:36:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:36:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.525097
2026-02-15T14:36:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:36:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:36:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:36:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:36:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:36:44.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:36:13', tmtdew=25.57, humidity=18.27, cloud=0.0, wind=21.17, temperature=23.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:36:08.381', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:36:44.511 [DEBUG] [Thread-205954] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:36:44.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:36:44.608 [DEBUG] [Thread-205957] [transport.py] [_log()] starting thread (client mode): 0xa2d68a90
2026-02-15T14:36:44.608 [DEBUG] [Thread-205957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:36:44.623 [DEBUG] [Thread-205957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:36:44.623 [INFO] [Thread-205957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:36:44.630 [DEBUG] [Thread-205957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] client lang: <none>
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] server lang: <none>
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] kex follows: False
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:36:44.631 [DEBUG] [Thread-205957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:36:44.632 [DEBUG] [Thread-205957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:36:44.632 [DEBUG] [Thread-205957] [transport.py] [_log()] Compression: none
2026-02-15T14:36:44.632 [DEBUG] [Thread-205957] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:36:44.691 [DEBUG] [Thread-205957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:36:44.691 [DEBUG] [Thread-205957] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:36:44.692 [DEBUG] [Thread-205957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:36:44.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:36:44.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:36:44.747 [DEBUG] [Thread-205957] [transport.py] [_log()] userauth is OK
2026-02-15T14:36:44.748 [DEBUG] [Thread-205957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:36:44.748 [DEBUG] [Thread-205957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:36:44.748 [DEBUG] [Thread-205957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:36:44.748 [DEBUG] [Thread-205957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:36:44.768 [INFO] [Thread-205957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:36:44.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:36:44.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:36:45.278 [DEBUG] [Thread-205959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:36:45.568 [DEBUG] [Thread-205957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:36:45.569 [DEBUG] [Thread-205957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:36:45.616 [DEBUG] [Thread-205957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:36:45.617 [DEBUG] [Thread-205957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:36:45.626 [DEBUG] [Thread-205957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:36:45.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:36:45.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:36:45.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:36:45.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:36:45.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:36:45.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:36:45.663 [DEBUG] [Thread-205957] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:36:52.571 [DEBUG] [Thread-205960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:00.327 [DEBUG] [Thread-205961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:15.361 [DEBUG] [Thread-205962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:15.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:37:15.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:37:15.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:37:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 36, 49), 25.92, 17.95, 0.0, 20.5, 23.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:37:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:36:49
2026-02-15T14:37:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:37:18.095 [DEBUG] [Thread-205963] [transport.py] [_log()] starting thread (client mode): 0xa57e1900
2026-02-15T14:37:18.095 [DEBUG] [Thread-205963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:37:18.116 [DEBUG] [Thread-205963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:37:18.116 [INFO] [Thread-205963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:37:18.118 [DEBUG] [Thread-205963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] client lang: <none>
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] server lang: <none>
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] kex follows: False
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:37:18.119 [DEBUG] [Thread-205963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:37:18.120 [DEBUG] [Thread-205963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:37:18.120 [DEBUG] [Thread-205963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:37:18.120 [DEBUG] [Thread-205963] [transport.py] [_log()] Compression: none
2026-02-15T14:37:18.120 [DEBUG] [Thread-205963] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:37:18.135 [DEBUG] [Thread-205963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:37:18.135 [DEBUG] [Thread-205963] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:37:18.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:37:18.136 [DEBUG] [Thread-205963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:37:18.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:37:18.139 [DEBUG] [Thread-205963] [transport.py] [_log()] userauth is OK
2026-02-15T14:37:18.139 [DEBUG] [Thread-205963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:37:18.139 [DEBUG] [Thread-205963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:37:18.139 [DEBUG] [Thread-205963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:37:18.139 [DEBUG] [Thread-205963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:37:18.164 [INFO] [Thread-205963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:37:18.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:37:18.816 [DEBUG] [Thread-205963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:37:18.816 [DEBUG] [Thread-205963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:37:18.817 [DEBUG] [Thread-205963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:37:18.857 [DEBUG] [Thread-205963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:37:18.858 [DEBUG] [Thread-205963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:37:18.861 [DEBUG] [Thread-205963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:37:18.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:37:18.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:37:18.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:37:18.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:37:18.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:37:18.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:37:18.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:37:18.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:37:18.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:37:18.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.525444 -999.00  +23.30  14.40     24   +1.90 1 1 1 1 1   888    0 23.00 42.38 ----- 14.4 14.4 150.8 28.4 30.8 -29.5 30.3 -29.6 31.5 -28.2 32.4 -30.5
2026-02-15T14:37:18.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:37:18.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:37:18.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.525444
2026-02-15T14:37:18.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:37:18.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:37:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:37:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:37:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:37:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:36:49', tmtdew=25.92, humidity=17.95, cloud=0.0, wind=20.5, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:36:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:37:18.889 [DEBUG] [Thread-205963] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:37:18.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:37:18.986 [DEBUG] [Thread-205966] [transport.py] [_log()] starting thread (client mode): 0xa2dc1330
2026-02-15T14:37:18.986 [DEBUG] [Thread-205966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:37:19.000 [DEBUG] [Thread-205966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:37:19.000 [INFO] [Thread-205966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:37:19.008 [DEBUG] [Thread-205966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:37:19.009 [DEBUG] [Thread-205966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] client lang: <none>
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] server lang: <none>
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] kex follows: False
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:37:19.010 [DEBUG] [Thread-205966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:37:19.011 [DEBUG] [Thread-205966] [transport.py] [_log()] Compression: none
2026-02-15T14:37:19.011 [DEBUG] [Thread-205966] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:37:19.070 [DEBUG] [Thread-205966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:37:19.071 [DEBUG] [Thread-205966] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:37:19.072 [DEBUG] [Thread-205966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:37:19.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:37:19.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:37:19.128 [DEBUG] [Thread-205966] [transport.py] [_log()] userauth is OK
2026-02-15T14:37:19.129 [DEBUG] [Thread-205966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:37:19.129 [DEBUG] [Thread-205966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:37:19.129 [DEBUG] [Thread-205966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:37:19.129 [DEBUG] [Thread-205966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:37:19.147 [INFO] [Thread-205966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:37:19.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:37:19.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:37:19.979 [DEBUG] [Thread-205966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:37:19.979 [DEBUG] [Thread-205966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:37:20.027 [DEBUG] [Thread-205966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:37:20.028 [DEBUG] [Thread-205966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:37:20.037 [DEBUG] [Thread-205966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:37:20.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:37:20.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:37:20.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:37:20.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:37:20.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:37:20.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:37:20.074 [DEBUG] [Thread-205966] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:37:30.395 [DEBUG] [Thread-205968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:43.035 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:43.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:45.453 [DEBUG] [Thread-205969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:50.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:37:50.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:37:50.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:37:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 37, 25), 25.91, 17.93, 0.0, 20.56, 23.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:37:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:37:25
2026-02-15T14:37:52.614 [DEBUG] [Thread-205970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:37:52.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:37:52.892 [DEBUG] [Thread-205971] [transport.py] [_log()] starting thread (client mode): 0xa2dc3af0
2026-02-15T14:37:52.892 [DEBUG] [Thread-205971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:37:52.914 [DEBUG] [Thread-205971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:37:52.914 [INFO] [Thread-205971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:37:52.918 [DEBUG] [Thread-205971] [transport.py] [_log()] client lang: <none>
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] server lang: <none>
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] kex follows: False
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] Compression: none
2026-02-15T14:37:52.919 [DEBUG] [Thread-205971] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:37:52.933 [DEBUG] [Thread-205971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:37:52.933 [DEBUG] [Thread-205971] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:37:52.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:37:52.934 [DEBUG] [Thread-205971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:37:52.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:37:52.935 [DEBUG] [Thread-205971] [transport.py] [_log()] userauth is OK
2026-02-15T14:37:52.935 [DEBUG] [Thread-205971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:37:52.935 [DEBUG] [Thread-205971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:37:52.935 [DEBUG] [Thread-205971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:37:52.935 [DEBUG] [Thread-205971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:37:52.969 [INFO] [Thread-205971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:37:52.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:37:53.617 [DEBUG] [Thread-205971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:37:53.617 [DEBUG] [Thread-205971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:37:53.618 [DEBUG] [Thread-205971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:37:53.659 [DEBUG] [Thread-205971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:37:53.659 [DEBUG] [Thread-205971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:37:53.662 [DEBUG] [Thread-205971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:37:53.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:37:53.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:37:53.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:37:53.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:37:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:37:53.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:37:53.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:37:53.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.525791 -999.00  +23.80  18.45     24   +2.00 1 1 1 1 1   888    0 22.91 39.07 ----- 18.4 18.4 166.0 22.6 30.9 -29.2 30.3 -28.9 31.5 -28.4 32.5 -29.8
2026-02-15T14:37:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:37:53.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:37:53.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.525791
2026-02-15T14:37:53.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:37:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:37:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:37:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:37:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:37:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:37:25', tmtdew=25.91, humidity=17.93, cloud=0.0, wind=20.56, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:37:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:37:53.688 [DEBUG] [Thread-205971] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:37:53.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:37:53.784 [DEBUG] [Thread-205974] [transport.py] [_log()] starting thread (client mode): 0xa2d4f070
2026-02-15T14:37:53.784 [DEBUG] [Thread-205974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:37:53.800 [DEBUG] [Thread-205974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:37:53.800 [INFO] [Thread-205974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:37:53.808 [DEBUG] [Thread-205974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:37:53.808 [DEBUG] [Thread-205974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:37:53.808 [DEBUG] [Thread-205974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] client lang: <none>
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] server lang: <none>
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] kex follows: False
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] Compression: none
2026-02-15T14:37:53.809 [DEBUG] [Thread-205974] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:37:53.865 [DEBUG] [Thread-205974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:37:53.865 [DEBUG] [Thread-205974] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:37:53.866 [DEBUG] [Thread-205974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:37:53.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:37:53.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:37:53.921 [DEBUG] [Thread-205974] [transport.py] [_log()] userauth is OK
2026-02-15T14:37:53.921 [DEBUG] [Thread-205974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:37:53.922 [DEBUG] [Thread-205974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:37:53.922 [DEBUG] [Thread-205974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:37:53.922 [DEBUG] [Thread-205974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:37:53.940 [INFO] [Thread-205974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:37:53.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:37:53.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:37:54.758 [DEBUG] [Thread-205974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:37:54.759 [DEBUG] [Thread-205974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:37:54.808 [DEBUG] [Thread-205974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:37:54.808 [DEBUG] [Thread-205974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:37:54.817 [DEBUG] [Thread-205974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:37:54.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:37:54.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:37:54.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:37:54.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:37:54.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:37:54.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:37:54.856 [DEBUG] [Thread-205974] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:38:00.490 [DEBUG] [Thread-205976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:15.550 [DEBUG] [Thread-205977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:38:24.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:38:24.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:38:26.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 38), 25.72, 17.84, 0.0, 15.47, 23.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:38:26.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:38:00
2026-02-15T14:38:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:38:27.197 [DEBUG] [Thread-205978] [transport.py] [_log()] starting thread (client mode): 0xa2d4c580
2026-02-15T14:38:27.197 [DEBUG] [Thread-205978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:38:27.217 [DEBUG] [Thread-205978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:38:27.217 [INFO] [Thread-205978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:38:27.220 [DEBUG] [Thread-205978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:38:27.220 [DEBUG] [Thread-205978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:38:27.220 [DEBUG] [Thread-205978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] client lang: <none>
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] server lang: <none>
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] kex follows: False
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] Compression: none
2026-02-15T14:38:27.221 [DEBUG] [Thread-205978] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:38:27.241 [DEBUG] [Thread-205978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:38:27.241 [DEBUG] [Thread-205978] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:38:27.242 [DEBUG] [Thread-205978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:38:27.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:38:27.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:38:27.245 [DEBUG] [Thread-205978] [transport.py] [_log()] userauth is OK
2026-02-15T14:38:27.245 [DEBUG] [Thread-205978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:38:27.246 [DEBUG] [Thread-205978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:38:27.246 [DEBUG] [Thread-205978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:38:27.246 [DEBUG] [Thread-205978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:38:27.266 [INFO] [Thread-205978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:38:27.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:38:28.023 [DEBUG] [Thread-205978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:38:28.023 [DEBUG] [Thread-205978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:38:28.024 [DEBUG] [Thread-205978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:38:28.064 [DEBUG] [Thread-205978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:38:28.064 [DEBUG] [Thread-205978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:38:28.068 [DEBUG] [Thread-205978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:38:28.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:38:28.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:38:28.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:38:28.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:38:28.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:38:28.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:38:28.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:38:28.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:38:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:38:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.526138 -999.00  +23.70  10.31     24   +2.00 1 1 1 1 1   888    0 23.20 36.55 ----- 10.3 10.3 134.2 20.6 30.9 -28.8 30.3 -28.6 31.5 -27.9 32.5 -29.3
2026-02-15T14:38:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:38:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:38:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.526138
2026-02-15T14:38:28.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:38:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:38:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:38:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:38:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:38:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:38:00', tmtdew=25.72, humidity=17.84, cloud=0.0, wind=15.47, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:37:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:38:28.096 [DEBUG] [Thread-205978] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:38:28.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:38:28.187 [DEBUG] [Thread-205981] [transport.py] [_log()] starting thread (client mode): 0xa81d7f10
2026-02-15T14:38:28.188 [DEBUG] [Thread-205981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:38:28.202 [DEBUG] [Thread-205981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:38:28.203 [INFO] [Thread-205981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:38:28.210 [DEBUG] [Thread-205981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] client lang: <none>
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] server lang: <none>
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] kex follows: False
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:38:28.211 [DEBUG] [Thread-205981] [transport.py] [_log()] Compression: none
2026-02-15T14:38:28.212 [DEBUG] [Thread-205981] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:38:28.274 [DEBUG] [Thread-205981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:38:28.275 [DEBUG] [Thread-205981] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:38:28.275 [DEBUG] [Thread-205981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:38:28.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:38:28.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:38:28.330 [DEBUG] [Thread-205981] [transport.py] [_log()] userauth is OK
2026-02-15T14:38:28.331 [DEBUG] [Thread-205981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:38:28.331 [DEBUG] [Thread-205981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:38:28.331 [DEBUG] [Thread-205981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:38:28.331 [DEBUG] [Thread-205981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:38:28.349 [INFO] [Thread-205981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:38:28.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:38:28.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:38:29.183 [DEBUG] [Thread-205981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:38:29.184 [DEBUG] [Thread-205981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:38:29.231 [DEBUG] [Thread-205981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:38:29.232 [DEBUG] [Thread-205981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:38:29.241 [DEBUG] [Thread-205981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:38:29.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:38:29.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:38:29.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:38:29.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:38:29.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:38:29.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:38:29.279 [DEBUG] [Thread-205981] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:38:30.589 [DEBUG] [Thread-205983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:43.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:43.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:45.643 [DEBUG] [Thread-205984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:52.648 [DEBUG] [Thread-205985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:38:59.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:38:59.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:38:59.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:39:00.680 [DEBUG] [Thread-205986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:39:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 38, 36), 26.15, 17.61, 0.0, 22.05, 24.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:39:01.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:38:36
2026-02-15T14:39:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:39:01.577 [DEBUG] [Thread-205987] [transport.py] [_log()] starting thread (client mode): 0xa57e0580
2026-02-15T14:39:01.577 [DEBUG] [Thread-205987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:39:01.596 [DEBUG] [Thread-205987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:39:01.596 [INFO] [Thread-205987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] client lang: <none>
2026-02-15T14:39:01.600 [DEBUG] [Thread-205987] [transport.py] [_log()] server lang: <none>
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] kex follows: False
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] Compression: none
2026-02-15T14:39:01.601 [DEBUG] [Thread-205987] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:39:01.618 [DEBUG] [Thread-205987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:39:01.619 [DEBUG] [Thread-205987] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:39:01.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:39:01.620 [DEBUG] [Thread-205987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:39:01.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:39:01.622 [DEBUG] [Thread-205987] [transport.py] [_log()] userauth is OK
2026-02-15T14:39:01.623 [DEBUG] [Thread-205987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:39:01.623 [DEBUG] [Thread-205987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:39:01.623 [DEBUG] [Thread-205987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:39:01.623 [DEBUG] [Thread-205987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:39:01.646 [INFO] [Thread-205987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:39:01.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:39:02.281 [DEBUG] [Thread-205987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:39:02.281 [DEBUG] [Thread-205987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:39:02.281 [DEBUG] [Thread-205987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:39:02.321 [DEBUG] [Thread-205987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:39:02.322 [DEBUG] [Thread-205987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:39:02.325 [DEBUG] [Thread-205987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:39:02.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:39:02.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:39:02.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:39:02.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:39:02.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:39:02.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:39:02.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:39:02.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:39:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:39:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.526485 -999.00  +23.80  16.86     23   +2.00 1 1 1 1 1   888    0 22.91 37.08 ----- 16.9 16.9 137.3 23.4 31.0 -29.2 30.4 -29.4 31.6 -27.9 32.5 -30.4
2026-02-15T14:39:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:39:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:39:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.526485
2026-02-15T14:39:02.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:39:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:39:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:39:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:39:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:39:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:38:36', tmtdew=26.15, humidity=17.61, cloud=0.0, wind=22.05, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:38:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:39:02.352 [DEBUG] [Thread-205987] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:39:02.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:39:02.448 [DEBUG] [Thread-205990] [transport.py] [_log()] starting thread (client mode): 0xa2d68a90
2026-02-15T14:39:02.448 [DEBUG] [Thread-205990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:39:02.463 [DEBUG] [Thread-205990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:39:02.463 [INFO] [Thread-205990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] client lang: <none>
2026-02-15T14:39:02.471 [DEBUG] [Thread-205990] [transport.py] [_log()] server lang: <none>
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] kex follows: False
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] Compression: none
2026-02-15T14:39:02.472 [DEBUG] [Thread-205990] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:39:02.534 [DEBUG] [Thread-205990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:39:02.535 [DEBUG] [Thread-205990] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:39:02.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:39:02.536 [DEBUG] [Thread-205990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:39:02.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:39:02.596 [DEBUG] [Thread-205990] [transport.py] [_log()] userauth is OK
2026-02-15T14:39:02.596 [DEBUG] [Thread-205990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:39:02.596 [DEBUG] [Thread-205990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:39:02.596 [DEBUG] [Thread-205990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:39:02.597 [DEBUG] [Thread-205990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:39:02.616 [INFO] [Thread-205990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:39:02.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:39:02.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:39:03.437 [DEBUG] [Thread-205990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:39:03.437 [DEBUG] [Thread-205990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:39:03.485 [DEBUG] [Thread-205990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:39:03.486 [DEBUG] [Thread-205990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:39:03.499 [DEBUG] [Thread-205990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:39:03.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:39:03.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:39:03.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:39:03.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:39:03.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:39:03.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:39:03.548 [DEBUG] [Thread-205990] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:39:15.719 [DEBUG] [Thread-205992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:39:30.770 [DEBUG] [Thread-205993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:39:33.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:39:33.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:39:33.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:39:35.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 39, 11), 25.96, 17.84, 0.0, 23.71, 24.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:39:35.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:39:11
2026-02-15T14:39:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:39:36.299 [DEBUG] [Thread-205994] [transport.py] [_log()] starting thread (client mode): 0xa2d4d240
2026-02-15T14:39:36.299 [DEBUG] [Thread-205994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:39:36.321 [DEBUG] [Thread-205994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:39:36.321 [INFO] [Thread-205994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] client lang: <none>
2026-02-15T14:39:36.324 [DEBUG] [Thread-205994] [transport.py] [_log()] server lang: <none>
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] kex follows: False
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] Compression: none
2026-02-15T14:39:36.325 [DEBUG] [Thread-205994] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:39:36.342 [DEBUG] [Thread-205994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:39:36.343 [DEBUG] [Thread-205994] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:39:36.343 [DEBUG] [Thread-205994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:39:36.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:39:36.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:39:36.345 [DEBUG] [Thread-205994] [transport.py] [_log()] userauth is OK
2026-02-15T14:39:36.345 [DEBUG] [Thread-205994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:39:36.345 [DEBUG] [Thread-205994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:39:36.345 [DEBUG] [Thread-205994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:39:36.345 [DEBUG] [Thread-205994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:39:36.367 [INFO] [Thread-205994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:39:36.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:39:36.997 [DEBUG] [Thread-205994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:39:36.998 [DEBUG] [Thread-205994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:39:36.998 [DEBUG] [Thread-205994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:39:37.039 [DEBUG] [Thread-205994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:39:37.039 [DEBUG] [Thread-205994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:39:37.042 [DEBUG] [Thread-205994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:39:37.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:39:37.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:39:37.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:39:37.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:39:37.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:39:37.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:39:37.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:39:37.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:39:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:39:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.526833 -999.00  +23.80  24.96     23   +1.70 1 1 1 1 1   888    0 23.03 36.17 ----- 25.0 25.0 143.6 29.9 30.9 -32.0 30.2 -30.0 31.4 -28.4 32.4 -32.0
2026-02-15T14:39:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:39:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:39:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.526833
2026-02-15T14:39:37.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:39:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:39:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:39:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:39:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:39:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:39:11', tmtdew=25.96, humidity=17.84, cloud=0.0, wind=23.71, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:38:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:39:37.068 [DEBUG] [Thread-205994] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:39:37.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:39:37.165 [DEBUG] [Thread-205997] [transport.py] [_log()] starting thread (client mode): 0xa57c1210
2026-02-15T14:39:37.165 [DEBUG] [Thread-205997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:39:37.179 [DEBUG] [Thread-205997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:39:37.180 [INFO] [Thread-205997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] client lang: <none>
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] server lang: <none>
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] kex follows: False
2026-02-15T14:39:37.187 [DEBUG] [Thread-205997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:39:37.188 [DEBUG] [Thread-205997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:39:37.188 [DEBUG] [Thread-205997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:39:37.188 [DEBUG] [Thread-205997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:39:37.188 [DEBUG] [Thread-205997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:39:37.188 [DEBUG] [Thread-205997] [transport.py] [_log()] Compression: none
2026-02-15T14:39:37.188 [DEBUG] [Thread-205997] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:39:37.248 [DEBUG] [Thread-205997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:39:37.248 [DEBUG] [Thread-205997] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:39:37.249 [DEBUG] [Thread-205997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:39:37.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:39:37.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:39:37.304 [DEBUG] [Thread-205997] [transport.py] [_log()] userauth is OK
2026-02-15T14:39:37.304 [DEBUG] [Thread-205997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:39:37.305 [DEBUG] [Thread-205997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:39:37.305 [DEBUG] [Thread-205997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:39:37.305 [DEBUG] [Thread-205997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:39:37.323 [INFO] [Thread-205997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:39:37.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:39:37.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:39:38.155 [DEBUG] [Thread-205997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:39:38.155 [DEBUG] [Thread-205997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:39:38.203 [DEBUG] [Thread-205997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:39:38.204 [DEBUG] [Thread-205997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:39:38.213 [DEBUG] [Thread-205997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:39:38.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:39:38.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:39:38.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:39:38.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:39:38.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:39:38.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:39:38.249 [DEBUG] [Thread-205997] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:39:43.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:39:43.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:39:45.811 [DEBUG] [Thread-205999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:39:52.680 [DEBUG] [Thread-206000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:00.866 [DEBUG] [Thread-206001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:08.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:40:08.268 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:40:08.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:40:10.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 39, 46), 26.37, 17.53, 0.0, 23.06, 24.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:40:10.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:39:46
2026-02-15T14:40:10.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:40:10.646 [DEBUG] [Thread-206002] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-15T14:40:10.646 [DEBUG] [Thread-206002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:40:10.667 [DEBUG] [Thread-206002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:40:10.667 [INFO] [Thread-206002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:40:10.670 [DEBUG] [Thread-206002] [transport.py] [_log()] client lang: <none>
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] server lang: <none>
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] kex follows: False
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] Compression: none
2026-02-15T14:40:10.671 [DEBUG] [Thread-206002] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:40:10.679 [DEBUG] [Thread-206002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:40:10.679 [DEBUG] [Thread-206002] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:40:10.679 [DEBUG] [Thread-206002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:40:10.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:40:10.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:40:10.680 [DEBUG] [Thread-206002] [transport.py] [_log()] userauth is OK
2026-02-15T14:40:10.681 [DEBUG] [Thread-206002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:40:10.681 [DEBUG] [Thread-206002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:40:10.681 [DEBUG] [Thread-206002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:40:10.681 [DEBUG] [Thread-206002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:40:10.693 [INFO] [Thread-206002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:40:10.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:40:13.925 [DEBUG] [Thread-206002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:40:13.925 [DEBUG] [Thread-206002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:40:13.926 [DEBUG] [Thread-206002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:40:13.966 [DEBUG] [Thread-206002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:40:13.966 [DEBUG] [Thread-206002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:40:13.969 [DEBUG] [Thread-206002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:40:13.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:40:13.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:40:13.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:40:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:40:13.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:40:13.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:40:13.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:40:13.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:40:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:40:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.527527 -999.00  +23.60  26.99     23   +1.70 1 1 1 1 1   888    0 22.11 30.69 ----- 27.0 27.0 108.6 32.1 30.7 -28.9 30.2 -29.0 31.4 -27.8 32.3 -29.5
2026-02-15T14:40:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:40:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:40:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.527527
2026-02-15T14:40:13.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:40:13.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:40:13.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:40:13.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:40:13.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:40:13.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:39:46', tmtdew=26.37, humidity=17.53, cloud=0.0, wind=23.06, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:39:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:40:13.996 [DEBUG] [Thread-206002] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:40:14.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:40:14.096 [DEBUG] [Thread-206005] [transport.py] [_log()] starting thread (client mode): 0xa2d4f940
2026-02-15T14:40:14.096 [DEBUG] [Thread-206005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:40:14.111 [DEBUG] [Thread-206005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:40:14.111 [INFO] [Thread-206005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:40:14.119 [DEBUG] [Thread-206005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:40:14.119 [DEBUG] [Thread-206005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] client lang: <none>
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] server lang: <none>
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] kex follows: False
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:40:14.120 [DEBUG] [Thread-206005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:40:14.121 [DEBUG] [Thread-206005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:40:14.121 [DEBUG] [Thread-206005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:40:14.121 [DEBUG] [Thread-206005] [transport.py] [_log()] Compression: none
2026-02-15T14:40:14.121 [DEBUG] [Thread-206005] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:40:14.177 [DEBUG] [Thread-206005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:40:14.177 [DEBUG] [Thread-206005] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:40:14.178 [DEBUG] [Thread-206005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:40:14.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:40:14.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:40:14.233 [DEBUG] [Thread-206005] [transport.py] [_log()] userauth is OK
2026-02-15T14:40:14.233 [DEBUG] [Thread-206005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:40:14.233 [DEBUG] [Thread-206005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:40:14.233 [DEBUG] [Thread-206005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:40:14.234 [DEBUG] [Thread-206005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:40:14.253 [INFO] [Thread-206005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:40:14.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:40:14.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:40:15.083 [DEBUG] [Thread-206005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:40:15.083 [DEBUG] [Thread-206005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:40:15.131 [DEBUG] [Thread-206005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:40:15.131 [DEBUG] [Thread-206005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:40:15.140 [DEBUG] [Thread-206005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:40:15.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:40:15.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:40:15.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:40:15.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:40:15.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:40:15.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:40:15.175 [DEBUG] [Thread-206005] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:40:15.905 [DEBUG] [Thread-206007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:30.958 [DEBUG] [Thread-206008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:43.463 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:43.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:45.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:40:45.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:40:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:40:45.998 [DEBUG] [Thread-206009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:40:47.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 40, 21), 26.46, 17.38, 0.0, 20.34, 24.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:40:47.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:40:21
2026-02-15T14:40:47.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:40:47.543 [DEBUG] [Thread-206010] [transport.py] [_log()] starting thread (client mode): 0xa2d4d1b0
2026-02-15T14:40:47.544 [DEBUG] [Thread-206010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:40:47.562 [DEBUG] [Thread-206010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:40:47.562 [INFO] [Thread-206010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] client lang: <none>
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] server lang: <none>
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] kex follows: False
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] Compression: none
2026-02-15T14:40:47.564 [DEBUG] [Thread-206010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:40:47.574 [DEBUG] [Thread-206010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:40:47.574 [DEBUG] [Thread-206010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:40:47.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:40:47.575 [DEBUG] [Thread-206010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:40:47.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:40:47.577 [DEBUG] [Thread-206010] [transport.py] [_log()] userauth is OK
2026-02-15T14:40:47.577 [DEBUG] [Thread-206010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:40:47.577 [DEBUG] [Thread-206010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:40:47.577 [DEBUG] [Thread-206010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:40:47.577 [DEBUG] [Thread-206010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:40:47.591 [INFO] [Thread-206010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:40:47.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:40:48.192 [DEBUG] [Thread-206010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:40:48.193 [DEBUG] [Thread-206010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:40:48.193 [DEBUG] [Thread-206010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:40:48.233 [DEBUG] [Thread-206010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:40:48.234 [DEBUG] [Thread-206010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:40:48.237 [DEBUG] [Thread-206010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:40:48.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:40:48.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:40:48.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:40:48.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:40:48.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:40:48.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:40:48.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:40:48.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:40:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:40:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.528221 -999.00  +23.50  17.75     23   +1.30 1 1 1 1 1   888    0 22.47 25.36 ----- 17.8 17.8 124.2 28.3 30.7 -29.8 30.4 -29.2 31.5 -28.2 32.2 -30.6
2026-02-15T14:40:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:40:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:40:48.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.528221
2026-02-15T14:40:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:40:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:40:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:40:48.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:40:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:40:48.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:40:21', tmtdew=26.46, humidity=17.38, cloud=0.0, wind=20.34, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:40:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:40:48.255 [DEBUG] [Thread-206010] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:40:48.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:40:48.357 [DEBUG] [Thread-206013] [transport.py] [_log()] starting thread (client mode): 0xa2d69bd0
2026-02-15T14:40:48.357 [DEBUG] [Thread-206013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:40:48.371 [DEBUG] [Thread-206013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:40:48.371 [INFO] [Thread-206013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:40:48.379 [DEBUG] [Thread-206013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:40:48.379 [DEBUG] [Thread-206013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:40:48.379 [DEBUG] [Thread-206013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:40:48.379 [DEBUG] [Thread-206013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] client lang: <none>
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] server lang: <none>
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] kex follows: False
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] Compression: none
2026-02-15T14:40:48.380 [DEBUG] [Thread-206013] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:40:48.437 [DEBUG] [Thread-206013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:40:48.438 [DEBUG] [Thread-206013] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:40:48.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:40:48.439 [DEBUG] [Thread-206013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:40:48.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:40:48.493 [DEBUG] [Thread-206013] [transport.py] [_log()] userauth is OK
2026-02-15T14:40:48.494 [DEBUG] [Thread-206013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:40:48.494 [DEBUG] [Thread-206013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:40:48.494 [DEBUG] [Thread-206013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:40:48.494 [DEBUG] [Thread-206013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:40:48.522 [INFO] [Thread-206013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:40:48.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:40:48.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:40:49.417 [DEBUG] [Thread-206013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:40:49.417 [DEBUG] [Thread-206013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:40:49.464 [DEBUG] [Thread-206013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:40:49.464 [DEBUG] [Thread-206013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:40:49.473 [DEBUG] [Thread-206013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:40:49.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:40:49.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:40:49.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:40:49.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:40:49.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:40:49.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:40:49.509 [DEBUG] [Thread-206013] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:40:52.725 [DEBUG] [Thread-206015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:01.034 [DEBUG] [Thread-206016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:16.095 [DEBUG] [Thread-206017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:19.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:41:19.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:41:19.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:41:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 40, 58), 26.0, 17.58, 0.0, 18.95, 23.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:41:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:40:58
2026-02-15T14:41:21.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:41:21.987 [DEBUG] [Thread-206018] [transport.py] [_log()] starting thread (client mode): 0xa57e0580
2026-02-15T14:41:21.987 [DEBUG] [Thread-206018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:41:22.003 [DEBUG] [Thread-206018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:41:22.003 [INFO] [Thread-206018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] client lang: <none>
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] server lang: <none>
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] kex follows: False
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:41:22.006 [DEBUG] [Thread-206018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:41:22.007 [DEBUG] [Thread-206018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:41:22.007 [DEBUG] [Thread-206018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:41:22.007 [DEBUG] [Thread-206018] [transport.py] [_log()] Compression: none
2026-02-15T14:41:22.007 [DEBUG] [Thread-206018] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:41:22.019 [DEBUG] [Thread-206018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:41:22.019 [DEBUG] [Thread-206018] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:41:22.019 [DEBUG] [Thread-206018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:41:22.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:41:22.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:41:22.022 [DEBUG] [Thread-206018] [transport.py] [_log()] userauth is OK
2026-02-15T14:41:22.022 [DEBUG] [Thread-206018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:41:22.022 [DEBUG] [Thread-206018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:41:22.022 [DEBUG] [Thread-206018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:41:22.022 [DEBUG] [Thread-206018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:41:22.046 [INFO] [Thread-206018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:41:22.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:41:22.650 [DEBUG] [Thread-206018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:41:22.650 [DEBUG] [Thread-206018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:41:22.651 [DEBUG] [Thread-206018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:41:22.691 [DEBUG] [Thread-206018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:41:22.692 [DEBUG] [Thread-206018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:41:22.695 [DEBUG] [Thread-206018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:41:22.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:41:22.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:41:22.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:41:22.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:41:22.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:41:22.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:41:22.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:41:22.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:41:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:41:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.528569 -999.00  +23.50  18.77     24   +1.80 1 1 1 1 1   888    0 23.22 25.10 ----- 18.8 18.8 132.2 22.9 30.6 -29.7 30.4 -29.6 31.6 -27.6 32.4 -29.6
2026-02-15T14:41:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:41:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:41:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.528569
2026-02-15T14:41:22.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:41:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:41:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:41:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:41:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:41:22.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:40:58', tmtdew=26.0, humidity=17.58, cloud=0.0, wind=18.95, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:41:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:41:22.721 [DEBUG] [Thread-206018] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:41:22.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:41:22.824 [DEBUG] [Thread-206021] [transport.py] [_log()] starting thread (client mode): 0xa2d4c370
2026-02-15T14:41:22.824 [DEBUG] [Thread-206021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:41:22.839 [DEBUG] [Thread-206021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:41:22.839 [INFO] [Thread-206021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:41:22.846 [DEBUG] [Thread-206021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:41:22.847 [DEBUG] [Thread-206021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:41:22.847 [DEBUG] [Thread-206021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:41:22.847 [DEBUG] [Thread-206021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:22.847 [DEBUG] [Thread-206021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:22.847 [DEBUG] [Thread-206021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:22.847 [DEBUG] [Thread-206021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] client lang: <none>
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] server lang: <none>
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] kex follows: False
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] Compression: none
2026-02-15T14:41:22.848 [DEBUG] [Thread-206021] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:41:22.905 [DEBUG] [Thread-206021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:41:22.905 [DEBUG] [Thread-206021] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:41:22.906 [DEBUG] [Thread-206021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:41:22.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:41:22.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:41:22.962 [DEBUG] [Thread-206021] [transport.py] [_log()] userauth is OK
2026-02-15T14:41:22.962 [DEBUG] [Thread-206021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:41:22.962 [DEBUG] [Thread-206021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:41:22.962 [DEBUG] [Thread-206021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:41:22.962 [DEBUG] [Thread-206021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:41:22.982 [INFO] [Thread-206021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:41:22.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:41:22.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:41:23.809 [DEBUG] [Thread-206021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:41:23.809 [DEBUG] [Thread-206021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:41:23.857 [DEBUG] [Thread-206021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:41:23.857 [DEBUG] [Thread-206021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:41:23.866 [DEBUG] [Thread-206021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:41:23.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:41:23.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:41:23.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:41:23.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:41:23.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:41:23.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:41:23.900 [DEBUG] [Thread-206021] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:41:31.126 [DEBUG] [Thread-206023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:43.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:43.615 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:46.167 [DEBUG] [Thread-206024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:52.754 [DEBUG] [Thread-206025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:41:53.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:41:53.912 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:41:53.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:41:56.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 41, 33), 26.63, 17.05, 0.0, 22.76, 24.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:41:56.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:41:33
2026-02-15T14:41:56.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:41:56.627 [DEBUG] [Thread-206026] [transport.py] [_log()] starting thread (client mode): 0xa81d4fd0
2026-02-15T14:41:56.628 [DEBUG] [Thread-206026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:41:56.647 [DEBUG] [Thread-206026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:41:56.647 [INFO] [Thread-206026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] client lang: <none>
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] server lang: <none>
2026-02-15T14:41:56.650 [DEBUG] [Thread-206026] [transport.py] [_log()] kex follows: False
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] Compression: none
2026-02-15T14:41:56.651 [DEBUG] [Thread-206026] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:41:56.670 [DEBUG] [Thread-206026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:41:56.670 [DEBUG] [Thread-206026] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:41:56.671 [DEBUG] [Thread-206026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:41:56.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:41:56.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:41:56.713 [DEBUG] [Thread-206026] [transport.py] [_log()] userauth is OK
2026-02-15T14:41:56.713 [DEBUG] [Thread-206026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:41:56.714 [DEBUG] [Thread-206026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:41:56.714 [DEBUG] [Thread-206026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:41:56.714 [DEBUG] [Thread-206026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:41:56.739 [INFO] [Thread-206026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:41:56.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:41:57.391 [DEBUG] [Thread-206026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:41:57.391 [DEBUG] [Thread-206026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:41:57.391 [DEBUG] [Thread-206026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:41:57.432 [DEBUG] [Thread-206026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:41:57.433 [DEBUG] [Thread-206026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:41:57.436 [DEBUG] [Thread-206026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:41:57.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:41:57.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:41:57.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:41:57.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:41:57.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:41:57.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:41:57.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:41:57.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:41:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:41:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.528916 -999.00  +23.50  24.55     23   +1.50 1 1 1 1 1   888    0 22.72 24.14 ----- 24.6 24.6 143.4 31.4 30.7 -29.7 30.4 -29.9 31.5 -28.7 32.3 -31.4
2026-02-15T14:41:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:41:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:41:57.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.528916
2026-02-15T14:41:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:41:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:41:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:41:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:41:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:41:57.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:41:33', tmtdew=26.63, humidity=17.05, cloud=0.0, wind=22.76, temperature=24.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:41:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:41:57.465 [DEBUG] [Thread-206026] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:41:57.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:41:57.560 [DEBUG] [Thread-206029] [transport.py] [_log()] starting thread (client mode): 0xa2d19d20
2026-02-15T14:41:57.560 [DEBUG] [Thread-206029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:41:57.575 [DEBUG] [Thread-206029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:41:57.576 [INFO] [Thread-206029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:41:57.583 [DEBUG] [Thread-206029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:41:57.584 [DEBUG] [Thread-206029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:41:57.585 [DEBUG] [Thread-206029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:41:57.585 [DEBUG] [Thread-206029] [transport.py] [_log()] client lang: <none>
2026-02-15T14:41:57.585 [DEBUG] [Thread-206029] [transport.py] [_log()] server lang: <none>
2026-02-15T14:41:57.585 [DEBUG] [Thread-206029] [transport.py] [_log()] kex follows: False
2026-02-15T14:41:57.585 [DEBUG] [Thread-206029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:41:57.585 [DEBUG] [Thread-206029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:41:57.586 [DEBUG] [Thread-206029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:41:57.586 [DEBUG] [Thread-206029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:41:57.586 [DEBUG] [Thread-206029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:41:57.586 [DEBUG] [Thread-206029] [transport.py] [_log()] Compression: none
2026-02-15T14:41:57.586 [DEBUG] [Thread-206029] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:41:57.641 [DEBUG] [Thread-206029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:41:57.641 [DEBUG] [Thread-206029] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:41:57.642 [DEBUG] [Thread-206029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:41:57.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:41:57.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:41:57.702 [DEBUG] [Thread-206029] [transport.py] [_log()] userauth is OK
2026-02-15T14:41:57.702 [DEBUG] [Thread-206029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:41:57.702 [DEBUG] [Thread-206029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:41:57.702 [DEBUG] [Thread-206029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:41:57.702 [DEBUG] [Thread-206029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:41:57.726 [INFO] [Thread-206029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:41:57.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:41:57.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:41:58.568 [DEBUG] [Thread-206029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:41:58.569 [DEBUG] [Thread-206029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:41:58.616 [DEBUG] [Thread-206029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:41:58.617 [DEBUG] [Thread-206029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:41:58.626 [DEBUG] [Thread-206029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:41:58.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:41:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:41:58.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:41:58.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:41:58.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:41:58.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:41:58.663 [DEBUG] [Thread-206029] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:42:01.209 [DEBUG] [Thread-206031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:42:16.260 [DEBUG] [Thread-206032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:42:28.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:42:28.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:42:28.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:42:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 42, 9), 25.94, 17.89, 0.0, 27.74, 24.03, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:42:30.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:42:09
2026-02-15T14:42:30.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:42:31.088 [DEBUG] [Thread-206033] [transport.py] [_log()] starting thread (client mode): 0xa81d7be0
2026-02-15T14:42:31.088 [DEBUG] [Thread-206033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:42:31.108 [DEBUG] [Thread-206033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:42:31.108 [INFO] [Thread-206033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:42:31.111 [DEBUG] [Thread-206033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] client lang: <none>
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] server lang: <none>
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] kex follows: False
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:42:31.112 [DEBUG] [Thread-206033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:42:31.113 [DEBUG] [Thread-206033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:42:31.113 [DEBUG] [Thread-206033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:42:31.113 [DEBUG] [Thread-206033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:42:31.113 [DEBUG] [Thread-206033] [transport.py] [_log()] Compression: none
2026-02-15T14:42:31.113 [DEBUG] [Thread-206033] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:42:31.121 [DEBUG] [Thread-206033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:42:31.121 [DEBUG] [Thread-206033] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:42:31.122 [DEBUG] [Thread-206033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:42:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:42:31.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:42:31.123 [DEBUG] [Thread-206033] [transport.py] [_log()] userauth is OK
2026-02-15T14:42:31.124 [DEBUG] [Thread-206033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:42:31.124 [DEBUG] [Thread-206033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:42:31.124 [DEBUG] [Thread-206033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:42:31.124 [DEBUG] [Thread-206033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:42:31.152 [INFO] [Thread-206033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:42:31.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:42:31.302 [DEBUG] [Thread-206035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:42:31.768 [DEBUG] [Thread-206033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:42:31.769 [DEBUG] [Thread-206033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:42:31.769 [DEBUG] [Thread-206033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:42:31.810 [DEBUG] [Thread-206033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:42:31.810 [DEBUG] [Thread-206033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:42:31.813 [DEBUG] [Thread-206033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:42:31.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:42:31.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:42:31.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:42:31.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:42:31.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:42:31.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:42:31.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:42:31.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:42:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:42:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.529263 -999.00  +23.20  12.18     24   +1.50 1 1 1 1 1   888    0 22.48 25.36 ----- 12.2 12.2 159.5 18.2 30.6 -29.6 30.3 -29.1 31.4 -27.8 32.3 -30.5
2026-02-15T14:42:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:42:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:42:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.529263
2026-02-15T14:42:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:42:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:42:31.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:42:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:42:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:42:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:42:09', tmtdew=25.94, humidity=17.89, cloud=0.0, wind=27.74, temperature=24.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:42:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:42:31.840 [DEBUG] [Thread-206033] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:42:31.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:42:31.947 [DEBUG] [Thread-206037] [transport.py] [_log()] starting thread (client mode): 0xa2db50f0
2026-02-15T14:42:31.947 [DEBUG] [Thread-206037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:42:31.961 [DEBUG] [Thread-206037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:42:31.962 [INFO] [Thread-206037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] client lang: <none>
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] server lang: <none>
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] kex follows: False
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:42:31.970 [DEBUG] [Thread-206037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:42:31.971 [DEBUG] [Thread-206037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:42:31.971 [DEBUG] [Thread-206037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:42:31.971 [DEBUG] [Thread-206037] [transport.py] [_log()] Compression: none
2026-02-15T14:42:31.971 [DEBUG] [Thread-206037] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:42:32.028 [DEBUG] [Thread-206037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:42:32.029 [DEBUG] [Thread-206037] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:42:32.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:42:32.030 [DEBUG] [Thread-206037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:42:32.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:42:32.084 [DEBUG] [Thread-206037] [transport.py] [_log()] userauth is OK
2026-02-15T14:42:32.084 [DEBUG] [Thread-206037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:42:32.085 [DEBUG] [Thread-206037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:42:32.085 [DEBUG] [Thread-206037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:42:32.085 [DEBUG] [Thread-206037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:42:32.103 [INFO] [Thread-206037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:42:32.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:42:32.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:42:32.928 [DEBUG] [Thread-206037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:42:32.928 [DEBUG] [Thread-206037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:42:32.976 [DEBUG] [Thread-206037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:42:32.976 [DEBUG] [Thread-206037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:42:32.985 [DEBUG] [Thread-206037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:42:32.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:42:32.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:42:33.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:42:33.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:42:33.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:42:33.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:42:33.018 [DEBUG] [Thread-206037] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:42:43.757 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:42:43.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:42:46.341 [DEBUG] [Thread-206039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:42:52.809 [DEBUG] [Thread-206040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:01.394 [DEBUG] [Thread-206041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:03.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:43:03.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:43:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:43:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 42, 44), 25.74, 17.83, 0.0, 19.76, 23.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:43:04.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:42:44
2026-02-15T14:43:05.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:43:05.349 [DEBUG] [Thread-206042] [transport.py] [_log()] starting thread (client mode): 0xa81d6740
2026-02-15T14:43:05.349 [DEBUG] [Thread-206042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:43:05.370 [DEBUG] [Thread-206042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:43:05.370 [INFO] [Thread-206042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:43:05.373 [DEBUG] [Thread-206042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:43:05.373 [DEBUG] [Thread-206042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:43:05.373 [DEBUG] [Thread-206042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:43:05.373 [DEBUG] [Thread-206042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:05.373 [DEBUG] [Thread-206042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:05.373 [DEBUG] [Thread-206042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] client lang: <none>
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] server lang: <none>
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] kex follows: False
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] Compression: none
2026-02-15T14:43:05.374 [DEBUG] [Thread-206042] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:43:05.391 [DEBUG] [Thread-206042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:43:05.391 [DEBUG] [Thread-206042] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:43:05.392 [DEBUG] [Thread-206042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:43:05.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:43:05.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:43:05.394 [DEBUG] [Thread-206042] [transport.py] [_log()] userauth is OK
2026-02-15T14:43:05.394 [DEBUG] [Thread-206042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:43:05.394 [DEBUG] [Thread-206042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:43:05.394 [DEBUG] [Thread-206042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:43:05.394 [DEBUG] [Thread-206042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:43:05.412 [INFO] [Thread-206042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:43:05.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:43:05.993 [DEBUG] [Thread-206042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:43:05.993 [DEBUG] [Thread-206042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:43:05.994 [DEBUG] [Thread-206042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:43:06.034 [DEBUG] [Thread-206042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:43:06.035 [DEBUG] [Thread-206042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:43:06.038 [DEBUG] [Thread-206042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:43:06.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:43:06.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:43:06.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:43:06.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:43:06.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:43:06.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:43:06.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:43:06.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:43:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:43:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.529610 -999.00  +23.30  22.28     24   +1.60 1 1 1 1 1   888    0 22.69 25.47 ----- 22.3 22.3 139.6 29.0 30.8 -30.0 30.3 -29.6 31.4 -29.1 32.2 -31.3
2026-02-15T14:43:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:43:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:43:06.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.529610
2026-02-15T14:43:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:43:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:43:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:43:06.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:43:06.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:43:06.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:42:44', tmtdew=25.74, humidity=17.83, cloud=0.0, wind=19.76, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:42:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:43:06.065 [DEBUG] [Thread-206042] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:43:06.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:43:06.161 [DEBUG] [Thread-206045] [transport.py] [_log()] starting thread (client mode): 0xa2d02290
2026-02-15T14:43:06.161 [DEBUG] [Thread-206045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:43:06.178 [DEBUG] [Thread-206045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:43:06.178 [INFO] [Thread-206045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:43:06.186 [DEBUG] [Thread-206045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:43:06.186 [DEBUG] [Thread-206045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:43:06.186 [DEBUG] [Thread-206045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] client lang: <none>
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] server lang: <none>
2026-02-15T14:43:06.187 [DEBUG] [Thread-206045] [transport.py] [_log()] kex follows: False
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] Compression: none
2026-02-15T14:43:06.188 [DEBUG] [Thread-206045] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:43:06.245 [DEBUG] [Thread-206045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:43:06.246 [DEBUG] [Thread-206045] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:43:06.246 [DEBUG] [Thread-206045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:43:06.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:43:06.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:43:06.304 [DEBUG] [Thread-206045] [transport.py] [_log()] userauth is OK
2026-02-15T14:43:06.304 [DEBUG] [Thread-206045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:43:06.305 [DEBUG] [Thread-206045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:43:06.305 [DEBUG] [Thread-206045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:43:06.305 [DEBUG] [Thread-206045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:43:06.327 [INFO] [Thread-206045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:43:06.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:43:06.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:43:07.191 [DEBUG] [Thread-206045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:43:07.192 [DEBUG] [Thread-206045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:43:07.240 [DEBUG] [Thread-206045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:43:07.240 [DEBUG] [Thread-206045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:43:07.250 [DEBUG] [Thread-206045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:43:07.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:43:07.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:43:07.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:43:07.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:43:07.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:43:07.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:43:07.287 [DEBUG] [Thread-206045] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:43:16.433 [DEBUG] [Thread-206047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:31.487 [DEBUG] [Thread-206048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:37.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:43:37.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:43:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:43:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 43, 19), 25.53, 18.09, 0.0, 15.44, 23.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:43:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:43:19
2026-02-15T14:43:40.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:43:40.268 [DEBUG] [Thread-206049] [transport.py] [_log()] starting thread (client mode): 0xa81d57b0
2026-02-15T14:43:40.268 [DEBUG] [Thread-206049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:43:40.287 [DEBUG] [Thread-206049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:43:40.287 [INFO] [Thread-206049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:43:40.289 [DEBUG] [Thread-206049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:43:40.289 [DEBUG] [Thread-206049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:43:40.289 [DEBUG] [Thread-206049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:43:40.289 [DEBUG] [Thread-206049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:40.289 [DEBUG] [Thread-206049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] client lang: <none>
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] server lang: <none>
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] kex follows: False
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] Compression: none
2026-02-15T14:43:40.290 [DEBUG] [Thread-206049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:43:40.303 [DEBUG] [Thread-206049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:43:40.303 [DEBUG] [Thread-206049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:43:40.304 [DEBUG] [Thread-206049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:43:40.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:43:40.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:43:40.306 [DEBUG] [Thread-206049] [transport.py] [_log()] userauth is OK
2026-02-15T14:43:40.307 [DEBUG] [Thread-206049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:43:40.307 [DEBUG] [Thread-206049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:43:40.307 [DEBUG] [Thread-206049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:43:40.307 [DEBUG] [Thread-206049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:43:40.340 [INFO] [Thread-206049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:43:40.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:43:40.955 [DEBUG] [Thread-206049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:43:40.955 [DEBUG] [Thread-206049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:43:40.955 [DEBUG] [Thread-206049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:43:40.996 [DEBUG] [Thread-206049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:43:40.997 [DEBUG] [Thread-206049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:43:41.000 [DEBUG] [Thread-206049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:43:41.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:43:41.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:43:41.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:43:41.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:43:41.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:43:41.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:43:41.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:43:41.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:43:41.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:43:41.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.529958 -999.00  +23.40  22.90     24   +1.80 1 1 1 1 1   888    0 22.65 23.54 ----- 22.9 22.9 135.2 27.1 30.6 -30.0 30.2 -29.5 31.3 -28.7 32.1 -30.5
2026-02-15T14:43:41.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:43:41.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:43:41.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.529958
2026-02-15T14:43:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:43:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:43:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:43:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:43:41.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:43:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:43:19', tmtdew=25.53, humidity=18.09, cloud=0.0, wind=15.44, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:43:08.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:43:41.026 [DEBUG] [Thread-206049] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:43:41.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:43:41.121 [DEBUG] [Thread-206052] [transport.py] [_log()] starting thread (client mode): 0xa2dc0670
2026-02-15T14:43:41.121 [DEBUG] [Thread-206052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:43:41.136 [DEBUG] [Thread-206052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:43:41.136 [INFO] [Thread-206052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:41.145 [DEBUG] [Thread-206052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] client lang: <none>
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] server lang: <none>
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] kex follows: False
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:43:41.146 [DEBUG] [Thread-206052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:43:41.147 [DEBUG] [Thread-206052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:43:41.147 [DEBUG] [Thread-206052] [transport.py] [_log()] Compression: none
2026-02-15T14:43:41.147 [DEBUG] [Thread-206052] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:43:41.202 [DEBUG] [Thread-206052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:43:41.203 [DEBUG] [Thread-206052] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:43:41.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:43:41.204 [DEBUG] [Thread-206052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:43:41.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:43:41.261 [DEBUG] [Thread-206052] [transport.py] [_log()] userauth is OK
2026-02-15T14:43:41.261 [DEBUG] [Thread-206052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:43:41.261 [DEBUG] [Thread-206052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:43:41.261 [DEBUG] [Thread-206052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:43:41.262 [DEBUG] [Thread-206052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:43:41.280 [INFO] [Thread-206052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:43:41.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:43:41.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:43:42.110 [DEBUG] [Thread-206052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:43:42.110 [DEBUG] [Thread-206052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:43:42.163 [DEBUG] [Thread-206052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:43:42.163 [DEBUG] [Thread-206052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:43:42.172 [DEBUG] [Thread-206052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:43:42.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:43:42.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:43:42.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:43:42.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:43:42.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:43:42.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:43:42.210 [DEBUG] [Thread-206052] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:43:43.904 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:43.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:46.524 [DEBUG] [Thread-206054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:43:52.860 [DEBUG] [Thread-206055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:01.580 [DEBUG] [Thread-206056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:12.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:44:12.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:44:12.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:44:14.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 43, 55), 26.23, 17.58, 0.0, 22.81, 23.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:44:14.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:43:55
2026-02-15T14:44:14.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:44:15.007 [DEBUG] [Thread-206057] [transport.py] [_log()] starting thread (client mode): 0xa81d5b70
2026-02-15T14:44:15.007 [DEBUG] [Thread-206057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:44:15.028 [DEBUG] [Thread-206057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:44:15.028 [INFO] [Thread-206057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] client lang: <none>
2026-02-15T14:44:15.031 [DEBUG] [Thread-206057] [transport.py] [_log()] server lang: <none>
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] kex follows: False
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] Compression: none
2026-02-15T14:44:15.032 [DEBUG] [Thread-206057] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:44:15.050 [DEBUG] [Thread-206057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:44:15.051 [DEBUG] [Thread-206057] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:44:15.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:44:15.053 [DEBUG] [Thread-206057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:44:15.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:44:15.098 [DEBUG] [Thread-206057] [transport.py] [_log()] userauth is OK
2026-02-15T14:44:15.098 [DEBUG] [Thread-206057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:44:15.098 [DEBUG] [Thread-206057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:44:15.099 [DEBUG] [Thread-206057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:44:15.099 [DEBUG] [Thread-206057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:44:15.117 [INFO] [Thread-206057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:44:15.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:44:15.740 [DEBUG] [Thread-206057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:44:15.740 [DEBUG] [Thread-206057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:44:15.740 [DEBUG] [Thread-206057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:44:15.782 [DEBUG] [Thread-206057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:44:15.782 [DEBUG] [Thread-206057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:44:15.786 [DEBUG] [Thread-206057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:44:15.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:44:15.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:44:15.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:44:15.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:44:15.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:44:15.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:44:15.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:44:15.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:44:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:44:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.530305 -999.00  +23.60  12.79     23   +1.80 1 1 1 1 1   888    0 22.94 24.57 ----- 12.8 12.8 146.8 22.2 30.6 -30.0 30.2 -29.6 31.4 -28.2 32.2 -29.3
2026-02-15T14:44:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:44:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:44:15.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.530305
2026-02-15T14:44:15.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:44:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:44:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:44:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:44:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:44:15.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:43:55', tmtdew=26.23, humidity=17.58, cloud=0.0, wind=22.81, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:43:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:44:15.810 [DEBUG] [Thread-206057] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:44:15.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:44:15.913 [DEBUG] [Thread-206060] [transport.py] [_log()] starting thread (client mode): 0xa81d72e0
2026-02-15T14:44:15.914 [DEBUG] [Thread-206060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:44:15.928 [DEBUG] [Thread-206060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:44:15.929 [INFO] [Thread-206060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:44:15.936 [DEBUG] [Thread-206060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:44:15.936 [DEBUG] [Thread-206060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:44:15.936 [DEBUG] [Thread-206060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:44:15.936 [DEBUG] [Thread-206060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:15.936 [DEBUG] [Thread-206060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] client lang: <none>
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] server lang: <none>
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] kex follows: False
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] Compression: none
2026-02-15T14:44:15.937 [DEBUG] [Thread-206060] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:44:15.994 [DEBUG] [Thread-206060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:44:15.995 [DEBUG] [Thread-206060] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:44:15.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:44:15.996 [DEBUG] [Thread-206060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:44:15.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:44:16.053 [DEBUG] [Thread-206060] [transport.py] [_log()] userauth is OK
2026-02-15T14:44:16.054 [DEBUG] [Thread-206060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:44:16.054 [DEBUG] [Thread-206060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:44:16.054 [DEBUG] [Thread-206060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:44:16.054 [DEBUG] [Thread-206060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:44:16.068 [INFO] [Thread-206060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:44:16.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:44:16.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:44:16.619 [DEBUG] [Thread-206062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:16.899 [DEBUG] [Thread-206060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:44:16.900 [DEBUG] [Thread-206060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:44:16.947 [DEBUG] [Thread-206060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:44:16.948 [DEBUG] [Thread-206060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:44:16.961 [DEBUG] [Thread-206060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:44:16.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:44:16.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:44:16.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:44:16.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:44:16.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:44:16.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:44:16.997 [DEBUG] [Thread-206060] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:44:31.674 [DEBUG] [Thread-206063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:44.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:44.048 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:46.710 [DEBUG] [Thread-206064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:44:47.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:44:47.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:44:47.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:44:48.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 44, 30), 26.3, 17.5, 0.0, 22.25, 23.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:44:48.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:44:30
2026-02-15T14:44:49.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:44:49.377 [DEBUG] [Thread-206065] [transport.py] [_log()] starting thread (client mode): 0xa81d7910
2026-02-15T14:44:49.377 [DEBUG] [Thread-206065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:44:49.399 [DEBUG] [Thread-206065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:44:49.399 [INFO] [Thread-206065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:44:49.402 [DEBUG] [Thread-206065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:44:49.402 [DEBUG] [Thread-206065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] client lang: <none>
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] server lang: <none>
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] kex follows: False
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:44:49.403 [DEBUG] [Thread-206065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:44:49.404 [DEBUG] [Thread-206065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:44:49.404 [DEBUG] [Thread-206065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:44:49.404 [DEBUG] [Thread-206065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:44:49.404 [DEBUG] [Thread-206065] [transport.py] [_log()] Compression: none
2026-02-15T14:44:49.404 [DEBUG] [Thread-206065] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:44:49.423 [DEBUG] [Thread-206065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:44:49.424 [DEBUG] [Thread-206065] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:44:49.424 [DEBUG] [Thread-206065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:44:49.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:44:49.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:44:49.427 [DEBUG] [Thread-206065] [transport.py] [_log()] userauth is OK
2026-02-15T14:44:49.427 [DEBUG] [Thread-206065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:44:49.427 [DEBUG] [Thread-206065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:44:49.427 [DEBUG] [Thread-206065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:44:49.427 [DEBUG] [Thread-206065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:44:49.452 [INFO] [Thread-206065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:44:49.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:44:50.084 [DEBUG] [Thread-206065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:44:50.084 [DEBUG] [Thread-206065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:44:50.084 [DEBUG] [Thread-206065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:44:50.125 [DEBUG] [Thread-206065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:44:50.125 [DEBUG] [Thread-206065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:44:50.128 [DEBUG] [Thread-206065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:44:50.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:44:50.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:44:50.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:44:50.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:44:50.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:44:50.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:44:50.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:44:50.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:44:50.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:44:50.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.530652 -999.00  +23.60  14.52     22   +0.90 1 1 1 1 1   888    0 22.48 28.94 ----- 14.5 14.5 148.2 31.0 30.6 -29.4 30.1 -29.4 31.4 -29.3 32.2 -30.9
2026-02-15T14:44:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:44:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:44:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.530652
2026-02-15T14:44:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:44:50.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:44:50.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:44:50.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:44:50.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:44:50.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:44:30', tmtdew=26.3, humidity=17.5, cloud=0.0, wind=22.25, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:44:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:44:50.152 [DEBUG] [Thread-206065] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:44:50.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:44:50.259 [DEBUG] [Thread-206068] [transport.py] [_log()] starting thread (client mode): 0xa2db4b20
2026-02-15T14:44:50.259 [DEBUG] [Thread-206068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:44:50.273 [DEBUG] [Thread-206068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:44:50.274 [INFO] [Thread-206068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:44:50.281 [DEBUG] [Thread-206068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] client lang: <none>
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] server lang: <none>
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] kex follows: False
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:44:50.282 [DEBUG] [Thread-206068] [transport.py] [_log()] Compression: none
2026-02-15T14:44:50.283 [DEBUG] [Thread-206068] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:44:50.338 [DEBUG] [Thread-206068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:44:50.339 [DEBUG] [Thread-206068] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:44:50.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:44:50.340 [DEBUG] [Thread-206068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:44:50.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:44:50.395 [DEBUG] [Thread-206068] [transport.py] [_log()] userauth is OK
2026-02-15T14:44:50.395 [DEBUG] [Thread-206068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:44:50.395 [DEBUG] [Thread-206068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:44:50.395 [DEBUG] [Thread-206068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:44:50.396 [DEBUG] [Thread-206068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:44:50.420 [INFO] [Thread-206068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:44:50.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:44:50.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:44:51.304 [DEBUG] [Thread-206068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:44:51.304 [DEBUG] [Thread-206068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:44:51.352 [DEBUG] [Thread-206068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:44:51.352 [DEBUG] [Thread-206068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:44:51.361 [DEBUG] [Thread-206068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:44:51.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:44:51.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:44:51.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:44:51.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:44:51.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:44:51.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:44:51.396 [DEBUG] [Thread-206068] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:44:52.909 [DEBUG] [Thread-206070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:01.744 [DEBUG] [Thread-206071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:16.803 [DEBUG] [Thread-206072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:21.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:45:21.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:45:21.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:45:23.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 45, 5), 26.46, 17.38, 0.0, 26.33, 24.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:45:23.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:45:05
2026-02-15T14:45:23.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:45:23.818 [DEBUG] [Thread-206073] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T14:45:23.818 [DEBUG] [Thread-206073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:45:23.831 [DEBUG] [Thread-206073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:45:23.831 [INFO] [Thread-206073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:45:23.833 [DEBUG] [Thread-206073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:45:23.833 [DEBUG] [Thread-206073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:45:23.833 [DEBUG] [Thread-206073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] client lang: <none>
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] server lang: <none>
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] kex follows: False
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] Compression: none
2026-02-15T14:45:23.834 [DEBUG] [Thread-206073] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:45:23.847 [DEBUG] [Thread-206073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:45:23.848 [DEBUG] [Thread-206073] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:45:23.848 [DEBUG] [Thread-206073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:45:23.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:45:23.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:45:23.850 [DEBUG] [Thread-206073] [transport.py] [_log()] userauth is OK
2026-02-15T14:45:23.850 [DEBUG] [Thread-206073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:45:23.850 [DEBUG] [Thread-206073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:45:23.850 [DEBUG] [Thread-206073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:45:23.850 [DEBUG] [Thread-206073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:45:23.870 [INFO] [Thread-206073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:45:23.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:45:24.461 [DEBUG] [Thread-206073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:45:24.461 [DEBUG] [Thread-206073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:45:24.462 [DEBUG] [Thread-206073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:45:24.502 [DEBUG] [Thread-206073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:45:24.502 [DEBUG] [Thread-206073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:45:24.504 [DEBUG] [Thread-206073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:45:24.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:45:24.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:45:24.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:45:24.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:45:24.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:45:24.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:45:24.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:45:24.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:45:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:45:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.530999 -999.00  +23.50  27.15     23   +1.20 1 1 1 1 1   888    0 23.35 33.12 ----- 27.1 27.1 144.4 30.9 30.6 -30.9 30.0 -30.8 31.2 -29.7 32.1 -32.6
2026-02-15T14:45:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:45:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:45:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.530999
2026-02-15T14:45:24.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:45:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:45:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:45:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:45:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:45:24.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:45:05', tmtdew=26.46, humidity=17.38, cloud=0.0, wind=26.33, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:44:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:45:24.522 [DEBUG] [Thread-206073] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:45:24.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:45:24.616 [DEBUG] [Thread-206076] [transport.py] [_log()] starting thread (client mode): 0xa2d69810
2026-02-15T14:45:24.616 [DEBUG] [Thread-206076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:45:24.631 [DEBUG] [Thread-206076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:45:24.631 [INFO] [Thread-206076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] client lang: <none>
2026-02-15T14:45:24.639 [DEBUG] [Thread-206076] [transport.py] [_log()] server lang: <none>
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] kex follows: False
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] Compression: none
2026-02-15T14:45:24.640 [DEBUG] [Thread-206076] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:45:24.702 [DEBUG] [Thread-206076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:45:24.703 [DEBUG] [Thread-206076] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:45:24.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:45:24.704 [DEBUG] [Thread-206076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:45:24.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:45:24.759 [DEBUG] [Thread-206076] [transport.py] [_log()] userauth is OK
2026-02-15T14:45:24.759 [DEBUG] [Thread-206076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:45:24.759 [DEBUG] [Thread-206076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:45:24.759 [DEBUG] [Thread-206076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:45:24.759 [DEBUG] [Thread-206076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:45:24.782 [INFO] [Thread-206076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:45:24.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:45:24.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:45:25.644 [DEBUG] [Thread-206076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:45:25.644 [DEBUG] [Thread-206076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:45:25.693 [DEBUG] [Thread-206076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:45:25.693 [DEBUG] [Thread-206076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:45:25.702 [DEBUG] [Thread-206076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:45:25.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:45:25.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:45:25.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:45:25.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:45:25.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:45:25.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:45:25.737 [DEBUG] [Thread-206076] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:45:31.841 [DEBUG] [Thread-206078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:44.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:44.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:46.889 [DEBUG] [Thread-206079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:52.955 [DEBUG] [Thread-206080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:45:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:45:55.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:45:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:45:58.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 45, 42), 27.56, 16.12, 0.0, 24.7, 25.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:45:58.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:45:42
2026-02-15T14:45:58.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:45:58.642 [DEBUG] [Thread-206081] [transport.py] [_log()] starting thread (client mode): 0xa2dc0670
2026-02-15T14:45:58.643 [DEBUG] [Thread-206081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:45:58.663 [DEBUG] [Thread-206081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:45:58.663 [INFO] [Thread-206081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:58.666 [DEBUG] [Thread-206081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] client lang: <none>
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] server lang: <none>
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] kex follows: False
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] Compression: none
2026-02-15T14:45:58.667 [DEBUG] [Thread-206081] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:45:58.684 [DEBUG] [Thread-206081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:45:58.684 [DEBUG] [Thread-206081] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:45:58.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:45:58.685 [DEBUG] [Thread-206081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:45:58.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:45:58.687 [DEBUG] [Thread-206081] [transport.py] [_log()] userauth is OK
2026-02-15T14:45:58.687 [DEBUG] [Thread-206081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:45:58.687 [DEBUG] [Thread-206081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:45:58.688 [DEBUG] [Thread-206081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:45:58.688 [DEBUG] [Thread-206081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:45:58.708 [INFO] [Thread-206081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:45:58.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:45:59.340 [DEBUG] [Thread-206081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:45:59.341 [DEBUG] [Thread-206081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:45:59.341 [DEBUG] [Thread-206081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:45:59.381 [DEBUG] [Thread-206081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:45:59.382 [DEBUG] [Thread-206081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:45:59.385 [DEBUG] [Thread-206081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:45:59.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:45:59.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:45:59.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:45:59.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:45:59.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:45:59.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:45:59.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:45:59.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:45:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:45:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.531694 -999.00  +23.40  15.88     23   +1.60 1 1 1 1 1   888    0 23.33 33.33 ----- 15.9 15.9 140.8 20.9 30.6 -29.3 30.0 -28.7 31.3 -27.4 32.2 -29.8
2026-02-15T14:45:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:45:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:45:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.531694
2026-02-15T14:45:59.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:45:59.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:45:59.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:45:59.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:45:59.411 [DEBUG] [Thread-206081] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:45:59.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:45:59.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:45:42', tmtdew=27.56, humidity=16.12, cloud=0.0, wind=24.7, temperature=25.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:45:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:45:59.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:45:59.509 [DEBUG] [Thread-206084] [transport.py] [_log()] starting thread (client mode): 0xa2d050c0
2026-02-15T14:45:59.509 [DEBUG] [Thread-206084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:45:59.523 [DEBUG] [Thread-206084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:45:59.523 [INFO] [Thread-206084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] client lang: <none>
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] server lang: <none>
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] kex follows: False
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:45:59.531 [DEBUG] [Thread-206084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:45:59.532 [DEBUG] [Thread-206084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:45:59.532 [DEBUG] [Thread-206084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:45:59.532 [DEBUG] [Thread-206084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:45:59.532 [DEBUG] [Thread-206084] [transport.py] [_log()] Compression: none
2026-02-15T14:45:59.532 [DEBUG] [Thread-206084] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:45:59.591 [DEBUG] [Thread-206084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:45:59.592 [DEBUG] [Thread-206084] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:45:59.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:45:59.593 [DEBUG] [Thread-206084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:45:59.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:45:59.647 [DEBUG] [Thread-206084] [transport.py] [_log()] userauth is OK
2026-02-15T14:45:59.647 [DEBUG] [Thread-206084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:45:59.647 [DEBUG] [Thread-206084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:45:59.647 [DEBUG] [Thread-206084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:45:59.647 [DEBUG] [Thread-206084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:45:59.666 [INFO] [Thread-206084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:45:59.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:45:59.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:46:00.489 [DEBUG] [Thread-206084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:46:00.490 [DEBUG] [Thread-206084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:46:00.537 [DEBUG] [Thread-206084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:46:00.538 [DEBUG] [Thread-206084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:46:00.547 [DEBUG] [Thread-206084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:46:00.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:46:00.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:46:00.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:46:00.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:46:00.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:46:00.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:46:00.583 [DEBUG] [Thread-206084] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:46:01.925 [DEBUG] [Thread-206086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:46:16.980 [DEBUG] [Thread-206087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:46:30.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:46:30.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:46:30.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:46:32.018 [DEBUG] [Thread-206088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:46:32.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 46, 17), 25.65, 18.29, 0.0, 20.01, 23.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:46:32.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:46:17
2026-02-15T14:46:32.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:46:32.994 [DEBUG] [Thread-206089] [transport.py] [_log()] starting thread (client mode): 0xa2dc30a0
2026-02-15T14:46:32.994 [DEBUG] [Thread-206089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:46:33.014 [DEBUG] [Thread-206089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:46:33.014 [INFO] [Thread-206089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] client lang: <none>
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] server lang: <none>
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] kex follows: False
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:46:33.017 [DEBUG] [Thread-206089] [transport.py] [_log()] Compression: none
2026-02-15T14:46:33.018 [DEBUG] [Thread-206089] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:46:33.034 [DEBUG] [Thread-206089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:46:33.035 [DEBUG] [Thread-206089] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:46:33.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:46:33.035 [DEBUG] [Thread-206089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:46:33.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:46:33.036 [DEBUG] [Thread-206089] [transport.py] [_log()] userauth is OK
2026-02-15T14:46:33.037 [DEBUG] [Thread-206089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:46:33.037 [DEBUG] [Thread-206089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:46:33.037 [DEBUG] [Thread-206089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:46:33.037 [DEBUG] [Thread-206089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:46:33.049 [INFO] [Thread-206089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:46:33.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:46:33.660 [DEBUG] [Thread-206089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:46:33.660 [DEBUG] [Thread-206089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:46:33.661 [DEBUG] [Thread-206089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:46:33.701 [DEBUG] [Thread-206089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:46:33.702 [DEBUG] [Thread-206089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:46:33.705 [DEBUG] [Thread-206089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:46:33.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:46:33.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:46:33.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:46:33.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:46:33.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:46:33.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:46:33.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:46:33.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:46:33.737 [DEBUG] [Thread-206089] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:46:33.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:46:33.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.532041 -999.00  +23.60  24.78     22   +1.10 1 1 1 1 1   888    0 22.45 35.82 ----- 24.8 24.8 143.2 29.4 30.6 -30.1 30.0 -30.3 31.3 -28.8 32.2 -30.3
2026-02-15T14:46:33.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:46:33.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:46:33.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.532041
2026-02-15T14:46:33.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:46:33.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:46:33.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:46:33.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:46:33.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:46:33.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:46:17', tmtdew=25.65, humidity=18.29, cloud=0.0, wind=20.01, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:46:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:46:33.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:46:33.841 [DEBUG] [Thread-206092] [transport.py] [_log()] starting thread (client mode): 0xa2db6ef0
2026-02-15T14:46:33.841 [DEBUG] [Thread-206092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:46:33.855 [DEBUG] [Thread-206092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:46:33.855 [INFO] [Thread-206092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:46:33.863 [DEBUG] [Thread-206092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] client lang: <none>
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] server lang: <none>
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] kex follows: False
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:46:33.864 [DEBUG] [Thread-206092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:46:33.865 [DEBUG] [Thread-206092] [transport.py] [_log()] Compression: none
2026-02-15T14:46:33.865 [DEBUG] [Thread-206092] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:46:33.921 [DEBUG] [Thread-206092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:46:33.922 [DEBUG] [Thread-206092] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:46:33.922 [DEBUG] [Thread-206092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:46:33.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:46:33.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:46:33.982 [DEBUG] [Thread-206092] [transport.py] [_log()] userauth is OK
2026-02-15T14:46:33.982 [DEBUG] [Thread-206092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:46:33.982 [DEBUG] [Thread-206092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:46:33.982 [DEBUG] [Thread-206092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:46:33.982 [DEBUG] [Thread-206092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:46:34.002 [INFO] [Thread-206092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:46:34.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:46:34.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:46:34.830 [DEBUG] [Thread-206092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:46:34.830 [DEBUG] [Thread-206092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:46:34.882 [DEBUG] [Thread-206092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:46:34.882 [DEBUG] [Thread-206092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:46:34.896 [DEBUG] [Thread-206092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:46:34.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:46:34.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:46:34.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:46:34.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:46:34.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:46:34.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:46:34.945 [DEBUG] [Thread-206092] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:46:44.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:46:44.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:46:47.056 [DEBUG] [Thread-206094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:46:52.987 [DEBUG] [Thread-206095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:02.107 [DEBUG] [Thread-206096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:04.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:47:04.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:47:04.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:47:06.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 46, 52), 25.87, 17.76, 0.0, 19.07, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:47:06.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:46:52
2026-02-15T14:47:07.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:47:07.423 [DEBUG] [Thread-206097] [transport.py] [_log()] starting thread (client mode): 0xa81d5b70
2026-02-15T14:47:07.423 [DEBUG] [Thread-206097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:47:07.444 [DEBUG] [Thread-206097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:47:07.445 [INFO] [Thread-206097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] client lang: <none>
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] server lang: <none>
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] kex follows: False
2026-02-15T14:47:07.448 [DEBUG] [Thread-206097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:47:07.449 [DEBUG] [Thread-206097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:47:07.449 [DEBUG] [Thread-206097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:47:07.449 [DEBUG] [Thread-206097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:47:07.449 [DEBUG] [Thread-206097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:47:07.449 [DEBUG] [Thread-206097] [transport.py] [_log()] Compression: none
2026-02-15T14:47:07.449 [DEBUG] [Thread-206097] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:47:07.466 [DEBUG] [Thread-206097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:47:07.467 [DEBUG] [Thread-206097] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:47:07.468 [DEBUG] [Thread-206097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:47:07.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:47:07.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:47:07.470 [DEBUG] [Thread-206097] [transport.py] [_log()] userauth is OK
2026-02-15T14:47:07.471 [DEBUG] [Thread-206097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:47:07.471 [DEBUG] [Thread-206097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:47:07.471 [DEBUG] [Thread-206097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:47:07.471 [DEBUG] [Thread-206097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:47:07.496 [INFO] [Thread-206097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:47:07.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:47:08.144 [DEBUG] [Thread-206097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:47:08.145 [DEBUG] [Thread-206097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:47:08.145 [DEBUG] [Thread-206097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:47:08.186 [DEBUG] [Thread-206097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:47:08.186 [DEBUG] [Thread-206097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:47:08.189 [DEBUG] [Thread-206097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:47:08.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:47:08.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:47:08.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:47:08.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:47:08.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:47:08.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:47:08.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:47:08.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:47:08.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:47:08.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.532388 -999.00  +23.40  14.44     23   +1.20 1 1 1 1 1   888    0 22.70 35.76 ----- 14.4 14.4 145.6 20.1 30.6 -29.0 30.1 -28.7 31.4 -27.7 32.2 -29.7
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.532388
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:47:08.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:46:52', tmtdew=25.87, humidity=17.76, cloud=0.0, wind=19.07, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:46:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:47:08.203 [DEBUG] [Thread-206097] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:47:08.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:47:08.288 [DEBUG] [Thread-206100] [transport.py] [_log()] starting thread (client mode): 0xa2d6b760
2026-02-15T14:47:08.288 [DEBUG] [Thread-206100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:47:08.304 [DEBUG] [Thread-206100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:47:08.305 [INFO] [Thread-206100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:47:08.313 [DEBUG] [Thread-206100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] client lang: <none>
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] server lang: <none>
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] kex follows: False
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:47:08.314 [DEBUG] [Thread-206100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:47:08.315 [DEBUG] [Thread-206100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:47:08.315 [DEBUG] [Thread-206100] [transport.py] [_log()] Compression: none
2026-02-15T14:47:08.315 [DEBUG] [Thread-206100] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:47:08.376 [DEBUG] [Thread-206100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:47:08.377 [DEBUG] [Thread-206100] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:47:08.377 [DEBUG] [Thread-206100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:47:08.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:47:08.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:47:08.435 [DEBUG] [Thread-206100] [transport.py] [_log()] userauth is OK
2026-02-15T14:47:08.436 [DEBUG] [Thread-206100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:47:08.436 [DEBUG] [Thread-206100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:47:08.436 [DEBUG] [Thread-206100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:47:08.436 [DEBUG] [Thread-206100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:47:08.454 [INFO] [Thread-206100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:47:08.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:47:08.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:47:09.306 [DEBUG] [Thread-206100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:47:09.306 [DEBUG] [Thread-206100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:47:09.354 [DEBUG] [Thread-206100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:47:09.355 [DEBUG] [Thread-206100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:47:09.365 [DEBUG] [Thread-206100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:47:09.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:47:09.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:47:09.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:47:09.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:47:09.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:47:09.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:47:09.402 [DEBUG] [Thread-206100] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:47:17.139 [DEBUG] [Thread-206102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:32.190 [DEBUG] [Thread-206103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:39.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:47:39.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:47: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
2026-02-15T14:47:41.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 47, 28), 25.7, 17.94, 0.0, 19.76, 23.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:47:41.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:47:28
2026-02-15T14:47:42.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:47:42.481 [DEBUG] [Thread-206104] [transport.py] [_log()] starting thread (client mode): 0xa2d06380
2026-02-15T14:47:42.481 [DEBUG] [Thread-206104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:47:42.501 [DEBUG] [Thread-206104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:47:42.501 [INFO] [Thread-206104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:47:42.504 [DEBUG] [Thread-206104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:47:42.504 [DEBUG] [Thread-206104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:47:42.504 [DEBUG] [Thread-206104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] client lang: <none>
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] server lang: <none>
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] kex follows: False
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] Compression: none
2026-02-15T14:47:42.505 [DEBUG] [Thread-206104] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:47:42.522 [DEBUG] [Thread-206104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:47:42.522 [DEBUG] [Thread-206104] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:47:42.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:47:42.523 [DEBUG] [Thread-206104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:47:42.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:47:42.526 [DEBUG] [Thread-206104] [transport.py] [_log()] userauth is OK
2026-02-15T14:47:42.526 [DEBUG] [Thread-206104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:47:42.526 [DEBUG] [Thread-206104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:47:42.526 [DEBUG] [Thread-206104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:47:42.526 [DEBUG] [Thread-206104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:47:42.550 [INFO] [Thread-206104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:47:42.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:47:43.098 [DEBUG] [Thread-206104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:47:43.098 [DEBUG] [Thread-206104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:47:43.098 [DEBUG] [Thread-206104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:47:43.140 [DEBUG] [Thread-206104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:47:43.140 [DEBUG] [Thread-206104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:47:43.142 [DEBUG] [Thread-206104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:47:43.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:47:43.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:47:43.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:47:43.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:47:43.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:47:43.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:47:43.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:47:43.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:47:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:47:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.532735 -999.00  +23.50  15.48     23   +1.50 1 1 1 1 1   888    0 23.34 39.90 ----- 15.5 15.5 178.6 18.4 30.7 -29.3 30.2 -30.0 31.5 -27.9 32.3 -29.7
2026-02-15T14:47:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:47:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:47:43.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.532735
2026-02-15T14:47:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:47:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:47:43.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:47:43.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:47:43.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:47:43.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:47:28', tmtdew=25.7, humidity=17.94, cloud=0.0, wind=19.76, temperature=23.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:47:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:47:43.163 [DEBUG] [Thread-206104] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:47:43.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:47:43.268 [DEBUG] [Thread-206107] [transport.py] [_log()] starting thread (client mode): 0xa2d06860
2026-02-15T14:47:43.268 [DEBUG] [Thread-206107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:47:43.282 [DEBUG] [Thread-206107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:47:43.282 [INFO] [Thread-206107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:47:43.290 [DEBUG] [Thread-206107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:47:43.290 [DEBUG] [Thread-206107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:47:43.290 [DEBUG] [Thread-206107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:47:43.290 [DEBUG] [Thread-206107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:43.290 [DEBUG] [Thread-206107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] client lang: <none>
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] server lang: <none>
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] kex follows: False
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] Compression: none
2026-02-15T14:47:43.291 [DEBUG] [Thread-206107] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:47:43.347 [DEBUG] [Thread-206107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:47:43.348 [DEBUG] [Thread-206107] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:47:43.348 [DEBUG] [Thread-206107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:47:43.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:47:43.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:47:43.405 [DEBUG] [Thread-206107] [transport.py] [_log()] userauth is OK
2026-02-15T14:47:43.405 [DEBUG] [Thread-206107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:47:43.406 [DEBUG] [Thread-206107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:47:43.406 [DEBUG] [Thread-206107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:47:43.406 [DEBUG] [Thread-206107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:47:43.430 [INFO] [Thread-206107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:47:43.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:47:43.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:47:44.306 [DEBUG] [Thread-206107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:47:44.306 [DEBUG] [Thread-206107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:47:44.354 [DEBUG] [Thread-206107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:47:44.354 [DEBUG] [Thread-206107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:47:44.363 [DEBUG] [Thread-206107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:47:44.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:47:44.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:47:44.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:47:44.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:47:44.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:47:44.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:47:44.400 [DEBUG] [Thread-206107] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:47:44.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:44.478 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:47.226 [DEBUG] [Thread-206109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:47:53.034 [DEBUG] [Thread-206110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:02.278 [DEBUG] [Thread-206111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:14.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:48:14.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:48:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:48:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 48, 4), 25.68, 17.94, 0.0, 17.29, 23.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:48:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:48:04
2026-02-15T14:48:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:48:17.316 [DEBUG] [Thread-206112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:17.324 [DEBUG] [Thread-206113] [transport.py] [_log()] starting thread (client mode): 0xa2d07c70
2026-02-15T14:48:17.325 [DEBUG] [Thread-206113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:48:17.344 [DEBUG] [Thread-206113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:48:17.344 [INFO] [Thread-206113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] client lang: <none>
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] server lang: <none>
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] kex follows: False
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] Compression: none
2026-02-15T14:48:17.346 [DEBUG] [Thread-206113] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:48:17.361 [DEBUG] [Thread-206113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:48:17.362 [DEBUG] [Thread-206113] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:48:17.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:48:17.363 [DEBUG] [Thread-206113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:48:17.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:48:17.365 [DEBUG] [Thread-206113] [transport.py] [_log()] userauth is OK
2026-02-15T14:48:17.365 [DEBUG] [Thread-206113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:48:17.365 [DEBUG] [Thread-206113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:48:17.365 [DEBUG] [Thread-206113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:48:17.365 [DEBUG] [Thread-206113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:48:17.379 [INFO] [Thread-206113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:48:17.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:48:18.037 [DEBUG] [Thread-206113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:48:18.037 [DEBUG] [Thread-206113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:48:18.038 [DEBUG] [Thread-206113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:48:18.078 [DEBUG] [Thread-206113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:48:18.078 [DEBUG] [Thread-206113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:48:18.081 [DEBUG] [Thread-206113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:48:18.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:48:18.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:48:18.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:48:18.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:48:18.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:48:18.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:48:18.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:48:18.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:48:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:48:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.533083 -999.00  +23.60  12.43     23   +1.80 1 1 1 1 1   888    0 23.15 37.02 ----- 12.4 12.4 162.4 17.6 30.8 -28.5 30.1 -28.9 31.5 -27.8 32.5 -28.6
2026-02-15T14:48:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:48:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:48:18.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.533083
2026-02-15T14:48:18.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:48:18.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:48:18.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:48:18.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:48:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:48:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:48:04', tmtdew=25.68, humidity=17.94, cloud=0.0, wind=17.29, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:47:38.371', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:48:18.107 [DEBUG] [Thread-206113] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:48:18.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:48:18.213 [DEBUG] [Thread-206116] [transport.py] [_log()] starting thread (client mode): 0xa2db78e0
2026-02-15T14:48:18.213 [DEBUG] [Thread-206116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:48:18.229 [DEBUG] [Thread-206116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:48:18.229 [INFO] [Thread-206116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] client lang: <none>
2026-02-15T14:48:18.237 [DEBUG] [Thread-206116] [transport.py] [_log()] server lang: <none>
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] kex follows: False
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] Compression: none
2026-02-15T14:48:18.238 [DEBUG] [Thread-206116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:48:18.292 [DEBUG] [Thread-206116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:48:18.292 [DEBUG] [Thread-206116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:48:18.293 [DEBUG] [Thread-206116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:48:18.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:48:18.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:48:18.352 [DEBUG] [Thread-206116] [transport.py] [_log()] userauth is OK
2026-02-15T14:48:18.352 [DEBUG] [Thread-206116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:48:18.353 [DEBUG] [Thread-206116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:48:18.353 [DEBUG] [Thread-206116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:48:18.353 [DEBUG] [Thread-206116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:48:18.373 [INFO] [Thread-206116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:48:18.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:48:18.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:48:19.201 [DEBUG] [Thread-206116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:48:19.202 [DEBUG] [Thread-206116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:48:19.250 [DEBUG] [Thread-206116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:48:19.250 [DEBUG] [Thread-206116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:48:19.261 [DEBUG] [Thread-206116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:48:19.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:48:19.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:48:19.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:48:19.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:48:19.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:48:19.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:48:19.296 [DEBUG] [Thread-206116] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:48:32.355 [DEBUG] [Thread-206118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:44.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:44.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:47.411 [DEBUG] [Thread-206119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:48:49.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:48:49.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:48:51.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 48, 39), 26.92, 16.72, 29.3, 21.52, 24.86, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:48:51.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:48:39
2026-02-15T14:48:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:48:51.609 [DEBUG] [Thread-206120] [transport.py] [_log()] starting thread (client mode): 0xa2db4b20
2026-02-15T14:48:51.609 [DEBUG] [Thread-206120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:48:51.630 [DEBUG] [Thread-206120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:48:51.630 [INFO] [Thread-206120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] client lang: <none>
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] server lang: <none>
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] kex follows: False
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] Compression: none
2026-02-15T14:48:51.632 [DEBUG] [Thread-206120] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:48:51.639 [DEBUG] [Thread-206120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:48:51.640 [DEBUG] [Thread-206120] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:48:51.640 [DEBUG] [Thread-206120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:48:51.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:48:51.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:48:51.641 [DEBUG] [Thread-206120] [transport.py] [_log()] userauth is OK
2026-02-15T14:48:51.641 [DEBUG] [Thread-206120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:48:51.641 [DEBUG] [Thread-206120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:48:51.641 [DEBUG] [Thread-206120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:48:51.641 [DEBUG] [Thread-206120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:48:51.654 [INFO] [Thread-206120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:48:51.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:48:52.271 [DEBUG] [Thread-206120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:48:52.272 [DEBUG] [Thread-206120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:48:52.272 [DEBUG] [Thread-206120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:48:52.312 [DEBUG] [Thread-206120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:48:52.313 [DEBUG] [Thread-206120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:48:52.316 [DEBUG] [Thread-206120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:48:52.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:48:52.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:48:52.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:48:52.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:48:52.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:48:52.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:48:52.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:48:52.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:48:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:48:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.533430 -999.00  +24.30   6.94     23   +2.20 1 1 1 1 1   888    0 23.26 31.22 ----- 6.9 6.9 142.8 19.9 30.9 -29.1 30.3 -28.0 31.6 -26.8 32.6 -28.9
2026-02-15T14:48:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:48:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:48:52.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.533430
2026-02-15T14:48:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:48:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:48:52.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:48:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:48:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:48:52.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:48:39', tmtdew=26.92, humidity=16.72, cloud=29.3, wind=21.52, temperature=24.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:48:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:48:52.344 [DEBUG] [Thread-206120] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:48:52.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:48:52.439 [DEBUG] [Thread-206123] [transport.py] [_log()] starting thread (client mode): 0xa2db4c10
2026-02-15T14:48:52.440 [DEBUG] [Thread-206123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:48:52.458 [DEBUG] [Thread-206123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:48:52.458 [INFO] [Thread-206123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:48:52.466 [DEBUG] [Thread-206123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:48:52.467 [DEBUG] [Thread-206123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:48:52.467 [DEBUG] [Thread-206123] [transport.py] [_log()] client lang: <none>
2026-02-15T14:48:52.467 [DEBUG] [Thread-206123] [transport.py] [_log()] server lang: <none>
2026-02-15T14:48:52.467 [DEBUG] [Thread-206123] [transport.py] [_log()] kex follows: False
2026-02-15T14:48:52.467 [DEBUG] [Thread-206123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:48:52.468 [DEBUG] [Thread-206123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:48:52.468 [DEBUG] [Thread-206123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:48:52.468 [DEBUG] [Thread-206123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:48:52.468 [DEBUG] [Thread-206123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:48:52.468 [DEBUG] [Thread-206123] [transport.py] [_log()] Compression: none
2026-02-15T14:48:52.468 [DEBUG] [Thread-206123] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:48:52.528 [DEBUG] [Thread-206123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:48:52.528 [DEBUG] [Thread-206123] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:48:52.529 [DEBUG] [Thread-206123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:48:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:48:52.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:48:52.588 [DEBUG] [Thread-206123] [transport.py] [_log()] userauth is OK
2026-02-15T14:48:52.589 [DEBUG] [Thread-206123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:48:52.589 [DEBUG] [Thread-206123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:48:52.589 [DEBUG] [Thread-206123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:48:52.589 [DEBUG] [Thread-206123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:48:52.608 [INFO] [Thread-206123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:48:52.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:48:52.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:48:53.086 [DEBUG] [Thread-206125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:48:53.464 [DEBUG] [Thread-206123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:48:53.465 [DEBUG] [Thread-206123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:48:53.512 [DEBUG] [Thread-206123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:48:53.513 [DEBUG] [Thread-206123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:48:53.523 [DEBUG] [Thread-206123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:48:53.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:48:53.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:48:53.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:48:53.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:48:53.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:48:53.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:48:53.559 [DEBUG] [Thread-206123] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:49:02.446 [DEBUG] [Thread-206126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:17.503 [DEBUG] [Thread-206127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:23.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:49:23.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:49:23.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:49:25.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 49, 14), 25.78, 17.93, 29.3, 21.56, 23.78, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:49:25.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:49:14
2026-02-15T14:49:26.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:49:26.196 [DEBUG] [Thread-206128] [transport.py] [_log()] starting thread (client mode): 0xa2db58a0
2026-02-15T14:49:26.196 [DEBUG] [Thread-206128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:49:26.217 [DEBUG] [Thread-206128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:49:26.217 [INFO] [Thread-206128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] client lang: <none>
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] server lang: <none>
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] kex follows: False
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:49:26.220 [DEBUG] [Thread-206128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:49:26.221 [DEBUG] [Thread-206128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:49:26.221 [DEBUG] [Thread-206128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:49:26.221 [DEBUG] [Thread-206128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:49:26.221 [DEBUG] [Thread-206128] [transport.py] [_log()] Compression: none
2026-02-15T14:49:26.221 [DEBUG] [Thread-206128] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:49:26.238 [DEBUG] [Thread-206128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:49:26.238 [DEBUG] [Thread-206128] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:49:26.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:49:26.240 [DEBUG] [Thread-206128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:49:26.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:49:26.242 [DEBUG] [Thread-206128] [transport.py] [_log()] userauth is OK
2026-02-15T14:49:26.242 [DEBUG] [Thread-206128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:49:26.242 [DEBUG] [Thread-206128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:49:26.242 [DEBUG] [Thread-206128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:49:26.242 [DEBUG] [Thread-206128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:49:26.267 [INFO] [Thread-206128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:49:26.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:49:26.893 [DEBUG] [Thread-206128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:49:26.894 [DEBUG] [Thread-206128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:49:26.894 [DEBUG] [Thread-206128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:49:26.934 [DEBUG] [Thread-206128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:49:26.934 [DEBUG] [Thread-206128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:49:26.937 [DEBUG] [Thread-206128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:49:26.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:49:26.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:49:26.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:49:26.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:49:26.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:49:26.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:49:26.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:49:26.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:49:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:49:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.533777 -999.00  +24.70  16.86     22   +2.00 1 1 1 1 1   888    0 22.49 27.91 ----- 16.9 16.9 135.2 21.4 31.1 -29.3 30.4 -28.9 31.7 -28.0 32.7 -29.2
2026-02-15T14:49:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:49:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:49:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.533777
2026-02-15T14:49:26.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:49:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:49:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:49:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:49:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:49:26.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:49:14', tmtdew=25.78, humidity=17.93, cloud=29.3, wind=21.56, temperature=23.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:48:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:49:26.962 [DEBUG] [Thread-206128] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:49:27.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:49:27.060 [DEBUG] [Thread-206131] [transport.py] [_log()] starting thread (client mode): 0xa5741de0
2026-02-15T14:49:27.060 [DEBUG] [Thread-206131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:49:27.074 [DEBUG] [Thread-206131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:49:27.075 [INFO] [Thread-206131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:49:27.082 [DEBUG] [Thread-206131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:49:27.082 [DEBUG] [Thread-206131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] client lang: <none>
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] server lang: <none>
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] kex follows: False
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:49:27.083 [DEBUG] [Thread-206131] [transport.py] [_log()] Compression: none
2026-02-15T14:49:27.084 [DEBUG] [Thread-206131] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:49:27.143 [DEBUG] [Thread-206131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:49:27.143 [DEBUG] [Thread-206131] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:49:27.144 [DEBUG] [Thread-206131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:49:27.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:49:27.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:49:27.202 [DEBUG] [Thread-206131] [transport.py] [_log()] userauth is OK
2026-02-15T14:49:27.202 [DEBUG] [Thread-206131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:49:27.203 [DEBUG] [Thread-206131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:49:27.203 [DEBUG] [Thread-206131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:49:27.203 [DEBUG] [Thread-206131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:49:27.222 [INFO] [Thread-206131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:49:27.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:49:27.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:49:28.080 [DEBUG] [Thread-206131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:49:28.081 [DEBUG] [Thread-206131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:49:28.128 [DEBUG] [Thread-206131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:49:28.128 [DEBUG] [Thread-206131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:49:28.138 [DEBUG] [Thread-206131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:49:28.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:49:28.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')
2026-02-15T14:49:28.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:49:28.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:49:28.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:49:28.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:49:28.178 [DEBUG] [Thread-206131] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:49:32.542 [DEBUG] [Thread-206133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:44.763 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:44.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:47.608 [DEBUG] [Thread-206134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:53.136 [DEBUG] [Thread-206135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:49:58.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:49:58.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:49:58.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:50:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 49, 49), 26.21, 17.38, 29.3, 27.54, 24.11, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:50:00.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:49:49
2026-02-15T14:50:00.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:50:00.773 [DEBUG] [Thread-206136] [transport.py] [_log()] starting thread (client mode): 0xa2d060b0
2026-02-15T14:50:00.774 [DEBUG] [Thread-206136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:50:00.794 [DEBUG] [Thread-206136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:50:00.794 [INFO] [Thread-206136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] client lang: <none>
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] server lang: <none>
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] kex follows: False
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] Compression: none
2026-02-15T14:50:00.797 [DEBUG] [Thread-206136] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:50:00.816 [DEBUG] [Thread-206136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:50:00.816 [DEBUG] [Thread-206136] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:50:00.817 [DEBUG] [Thread-206136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:50:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:50:00.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:50:00.819 [DEBUG] [Thread-206136] [transport.py] [_log()] userauth is OK
2026-02-15T14:50:00.819 [DEBUG] [Thread-206136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:50:00.819 [DEBUG] [Thread-206136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:50:00.819 [DEBUG] [Thread-206136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:50:00.820 [DEBUG] [Thread-206136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:50:00.836 [INFO] [Thread-206136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:50:00.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:50:01.487 [DEBUG] [Thread-206136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:50:01.487 [DEBUG] [Thread-206136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:50:01.488 [DEBUG] [Thread-206136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:50:01.530 [DEBUG] [Thread-206136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:50:01.530 [DEBUG] [Thread-206136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:50:01.531 [DEBUG] [Thread-206136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:50:01.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:50:01.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:50:01.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:50:01.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:50:01.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:50:01.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:50:01.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:50:01.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:50:01.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:50:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.534124 -999.00  +25.00  15.18     22   +2.10 1 1 1 1 1   888    0 23.09 30.10 ----- 15.2 15.2 133.4 22.9 31.1 -29.2 30.5 -28.7 31.8 -27.1 32.8 -29.1
2026-02-15T14:50:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:50:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:50:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.534124
2026-02-15T14:50:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:50:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:50:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:50:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:50:01.558 [DEBUG] [Thread-206136] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:50:01.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:50:01.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:49:49', tmtdew=26.21, humidity=17.38, cloud=29.3, wind=27.54, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:49:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:50:01.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:50:01.655 [DEBUG] [Thread-206139] [transport.py] [_log()] starting thread (client mode): 0xa2d04340
2026-02-15T14:50:01.655 [DEBUG] [Thread-206139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:50:01.670 [DEBUG] [Thread-206139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:50:01.670 [INFO] [Thread-206139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:50:01.678 [DEBUG] [Thread-206139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:50:01.678 [DEBUG] [Thread-206139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:50:01.679 [DEBUG] [Thread-206139] [transport.py] [_log()] client lang: <none>
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] server lang: <none>
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] kex follows: False
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:50:01.680 [DEBUG] [Thread-206139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:50:01.681 [DEBUG] [Thread-206139] [transport.py] [_log()] Compression: none
2026-02-15T14:50:01.681 [DEBUG] [Thread-206139] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:50:01.740 [DEBUG] [Thread-206139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:50:01.741 [DEBUG] [Thread-206139] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:50:01.741 [DEBUG] [Thread-206139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:50:01.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:50:01.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:50:01.798 [DEBUG] [Thread-206139] [transport.py] [_log()] userauth is OK
2026-02-15T14:50:01.798 [DEBUG] [Thread-206139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:50:01.798 [DEBUG] [Thread-206139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:50:01.799 [DEBUG] [Thread-206139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:50:01.799 [DEBUG] [Thread-206139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:50:01.818 [INFO] [Thread-206139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:50:01.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:50:01.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:50:02.642 [DEBUG] [Thread-206141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:50:02.682 [DEBUG] [Thread-206139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:50:02.682 [DEBUG] [Thread-206139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:50:02.730 [DEBUG] [Thread-206139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:50:02.730 [DEBUG] [Thread-206139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:50:02.740 [DEBUG] [Thread-206139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:50:02.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:50:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:50: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') -> 00000000
2026-02-15T14:50:02.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:50:02.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:50:02.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:50:02.781 [DEBUG] [Thread-206139] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:50:17.700 [DEBUG] [Thread-206142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:50:32.737 [DEBUG] [Thread-206143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:50:32.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:50:32.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:50:32.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:50:34.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 50, 25), 26.52, 17.04, 29.3, 28.44, 24.26, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:50:34.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:50:25
2026-02-15T14:50:35.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:50:35.280 [DEBUG] [Thread-206144] [transport.py] [_log()] starting thread (client mode): 0xa57c2470
2026-02-15T14:50:35.280 [DEBUG] [Thread-206144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:50:35.301 [DEBUG] [Thread-206144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:50:35.301 [INFO] [Thread-206144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:50:35.304 [DEBUG] [Thread-206144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:50:35.304 [DEBUG] [Thread-206144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:50:35.304 [DEBUG] [Thread-206144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] client lang: <none>
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] server lang: <none>
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] kex follows: False
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] Compression: none
2026-02-15T14:50:35.305 [DEBUG] [Thread-206144] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:50:35.323 [DEBUG] [Thread-206144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:50:35.324 [DEBUG] [Thread-206144] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:50:35.324 [DEBUG] [Thread-206144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:50:35.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:50:35.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:50:35.325 [DEBUG] [Thread-206144] [transport.py] [_log()] userauth is OK
2026-02-15T14:50:35.325 [DEBUG] [Thread-206144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:50:35.325 [DEBUG] [Thread-206144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:50:35.325 [DEBUG] [Thread-206144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:50:35.325 [DEBUG] [Thread-206144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:50:35.347 [INFO] [Thread-206144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:50:35.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:50:37.422 [DEBUG] [Thread-206144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:50:37.422 [DEBUG] [Thread-206144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:50:37.423 [DEBUG] [Thread-206144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:50:37.462 [DEBUG] [Thread-206144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:50:37.463 [DEBUG] [Thread-206144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:50:37.466 [DEBUG] [Thread-206144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:50:37.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:50:37.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:50:37.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:50:37.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:50:37.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:50:37.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:50:37.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:50:37.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:50:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:50:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.534471 -999.00  +25.10  22.52     21   +1.70 1 1 1 1 1   888    0 23.38 35.27 ----- 22.5 22.5 131.6 29.6 31.1 -29.3 30.5 -29.6 31.8 -28.2 32.7 -31.7
2026-02-15T14:50:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:50:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:50:37.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.534471
2026-02-15T14:50:37.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:50:37.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:50:37.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:50:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:50:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:50:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:50:25', tmtdew=26.52, humidity=17.04, cloud=29.3, wind=28.44, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:49:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:50:37.494 [DEBUG] [Thread-206144] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:50:37.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:50:37.593 [DEBUG] [Thread-206147] [transport.py] [_log()] starting thread (client mode): 0xa2db70d0
2026-02-15T14:50:37.593 [DEBUG] [Thread-206147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:50:37.611 [DEBUG] [Thread-206147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:50:37.611 [INFO] [Thread-206147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:50:37.622 [DEBUG] [Thread-206147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:50:37.622 [DEBUG] [Thread-206147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:50:37.622 [DEBUG] [Thread-206147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] client lang: <none>
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] server lang: <none>
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] kex follows: False
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:50:37.623 [DEBUG] [Thread-206147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:50:37.624 [DEBUG] [Thread-206147] [transport.py] [_log()] Compression: none
2026-02-15T14:50:37.624 [DEBUG] [Thread-206147] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:50:37.685 [DEBUG] [Thread-206147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:50:37.685 [DEBUG] [Thread-206147] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:50:37.686 [DEBUG] [Thread-206147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:50:37.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:50:37.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:50:37.746 [DEBUG] [Thread-206147] [transport.py] [_log()] userauth is OK
2026-02-15T14:50:37.746 [DEBUG] [Thread-206147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:50:37.746 [DEBUG] [Thread-206147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:50:37.747 [DEBUG] [Thread-206147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:50:37.747 [DEBUG] [Thread-206147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:50:37.771 [INFO] [Thread-206147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:50:37.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:50:37.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:50:38.614 [DEBUG] [Thread-206147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:50:38.614 [DEBUG] [Thread-206147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:50:38.662 [DEBUG] [Thread-206147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:50:38.663 [DEBUG] [Thread-206147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:50:38.672 [DEBUG] [Thread-206147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:50:38.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:50:38.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:50:38.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:50:38.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:50:38.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:50:38.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:50:38.707 [DEBUG] [Thread-206147] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:50:44.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:50:44.908 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:50:47.774 [DEBUG] [Thread-206149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:50:53.172 [DEBUG] [Thread-206150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:02.836 [DEBUG] [Thread-206151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:08.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:51:08.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:51:08.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:51:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 50, 25), 26.52, 17.04, 29.3, 28.44, 24.26, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:51:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:50:25
2026-02-15T14:51:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:51:11.115 [DEBUG] [Thread-206152] [transport.py] [_log()] starting thread (client mode): 0xa5740d30
2026-02-15T14:51:11.115 [DEBUG] [Thread-206152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:51:11.135 [DEBUG] [Thread-206152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:51:11.136 [INFO] [Thread-206152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:51:11.138 [DEBUG] [Thread-206152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] client lang: <none>
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] server lang: <none>
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] kex follows: False
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] Compression: none
2026-02-15T14:51:11.139 [DEBUG] [Thread-206152] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:51:11.156 [DEBUG] [Thread-206152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:51:11.157 [DEBUG] [Thread-206152] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:51:11.157 [DEBUG] [Thread-206152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:51:11.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:51:11.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:51:11.202 [DEBUG] [Thread-206152] [transport.py] [_log()] userauth is OK
2026-02-15T14:51:11.202 [DEBUG] [Thread-206152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:51:11.202 [DEBUG] [Thread-206152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:51:11.202 [DEBUG] [Thread-206152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:51:11.202 [DEBUG] [Thread-206152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:51:11.234 [INFO] [Thread-206152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:51:11.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:51:11.873 [DEBUG] [Thread-206152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:51:11.873 [DEBUG] [Thread-206152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:51:11.874 [DEBUG] [Thread-206152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:51:11.914 [DEBUG] [Thread-206152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:51:11.915 [DEBUG] [Thread-206152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:51:11.917 [DEBUG] [Thread-206152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:51:11.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:51:11.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:51:11.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:51:11.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:51:11.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:51:11.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:51:11.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.535166 -999.00  +24.50  22.41     22   +1.40 1 1 1 1 1   888    0 23.34 45.03 ----- 22.4 22.4 130.2 26.0 31.1 -29.8 30.6 -30.0 31.8 -28.5 32.7 -30.8
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.535166
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:51:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:50:25', tmtdew=26.52, humidity=17.04, cloud=29.3, wind=28.44, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:50:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:51:11.935 [DEBUG] [Thread-206152] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:51:12.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:51:12.019 [DEBUG] [Thread-206155] [transport.py] [_log()] starting thread (client mode): 0xa57e04c0
2026-02-15T14:51:12.019 [DEBUG] [Thread-206155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:51:12.033 [DEBUG] [Thread-206155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:51:12.033 [INFO] [Thread-206155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] client lang: <none>
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] server lang: <none>
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] kex follows: False
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:51:12.041 [DEBUG] [Thread-206155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:51:12.042 [DEBUG] [Thread-206155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:51:12.042 [DEBUG] [Thread-206155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:51:12.042 [DEBUG] [Thread-206155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:51:12.042 [DEBUG] [Thread-206155] [transport.py] [_log()] Compression: none
2026-02-15T14:51:12.042 [DEBUG] [Thread-206155] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:51:12.099 [DEBUG] [Thread-206155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:51:12.100 [DEBUG] [Thread-206155] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:51:12.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:51:12.101 [DEBUG] [Thread-206155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:51:12.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:51:12.156 [DEBUG] [Thread-206155] [transport.py] [_log()] userauth is OK
2026-02-15T14:51:12.156 [DEBUG] [Thread-206155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:51:12.156 [DEBUG] [Thread-206155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:51:12.156 [DEBUG] [Thread-206155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:51:12.157 [DEBUG] [Thread-206155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:51:12.176 [INFO] [Thread-206155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:51:12.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:51:12.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:51:12.987 [DEBUG] [Thread-206155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:51:12.987 [DEBUG] [Thread-206155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:51:13.036 [DEBUG] [Thread-206155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:51:13.036 [DEBUG] [Thread-206155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:51:13.044 [DEBUG] [Thread-206155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:51:13.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:51:13.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:51:13.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:51:13.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:51:13.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:51:13.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:51:13.078 [DEBUG] [Thread-206155] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:51:17.872 [DEBUG] [Thread-206157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:32.922 [DEBUG] [Thread-206158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:43.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:51:43.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:51:43.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:51:45.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:45.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:45.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 50, 25), 26.52, 17.04, 29.3, 28.44, 24.26, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:51:45.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:50:25
2026-02-15T14:51:45.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:51:45.926 [DEBUG] [Thread-206159] [transport.py] [_log()] starting thread (client mode): 0xa57c3220
2026-02-15T14:51:45.926 [DEBUG] [Thread-206159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:51:45.946 [DEBUG] [Thread-206159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:51:45.946 [INFO] [Thread-206159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:51:45.949 [DEBUG] [Thread-206159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:51:45.949 [DEBUG] [Thread-206159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:51:45.949 [DEBUG] [Thread-206159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] client lang: <none>
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] server lang: <none>
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] kex follows: False
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] Compression: none
2026-02-15T14:51:45.950 [DEBUG] [Thread-206159] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:51:45.967 [DEBUG] [Thread-206159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:51:45.968 [DEBUG] [Thread-206159] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:51:45.968 [DEBUG] [Thread-206159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:51:45.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:51:45.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:51:45.971 [DEBUG] [Thread-206159] [transport.py] [_log()] userauth is OK
2026-02-15T14:51:45.971 [DEBUG] [Thread-206159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:51:45.971 [DEBUG] [Thread-206159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:51:45.971 [DEBUG] [Thread-206159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:51:45.971 [DEBUG] [Thread-206159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:51:45.996 [INFO] [Thread-206159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:51:45.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:51:46.533 [DEBUG] [Thread-206159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:51:46.533 [DEBUG] [Thread-206159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:51:46.534 [DEBUG] [Thread-206159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:51:46.574 [DEBUG] [Thread-206159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:51:46.574 [DEBUG] [Thread-206159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:51:46.577 [DEBUG] [Thread-206159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:51:46.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:51:46.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:51:46.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:51:46.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:51:46.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:51:46.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:51:46.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:51:46.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:51:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:51:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.535513 -999.00  +24.10  23.03     22   +1.20 1 1 1 1 1   888    0 23.34 42.81 ----- 23.0 23.0 128.8 26.7 30.9 -30.4 30.6 -29.7 31.8 -29.0 32.6 -31.0
2026-02-15T14:51:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:51:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:51:46.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.535513
2026-02-15T14:51:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:51:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:51:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:51:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:51:46.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:51:46.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:50:25', tmtdew=26.52, humidity=17.04, cloud=29.3, wind=28.44, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:51:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:51:46.602 [DEBUG] [Thread-206159] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:51:46.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:51:46.698 [DEBUG] [Thread-206162] [transport.py] [_log()] starting thread (client mode): 0xa2d04760
2026-02-15T14:51:46.699 [DEBUG] [Thread-206162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:51:46.714 [DEBUG] [Thread-206162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:51:46.714 [INFO] [Thread-206162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] client lang: <none>
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] server lang: <none>
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] kex follows: False
2026-02-15T14:51:46.722 [DEBUG] [Thread-206162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:51:46.723 [DEBUG] [Thread-206162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:51:46.723 [DEBUG] [Thread-206162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:51:46.723 [DEBUG] [Thread-206162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:51:46.723 [DEBUG] [Thread-206162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:51:46.723 [DEBUG] [Thread-206162] [transport.py] [_log()] Compression: none
2026-02-15T14:51:46.723 [DEBUG] [Thread-206162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:51:46.780 [DEBUG] [Thread-206162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:51:46.780 [DEBUG] [Thread-206162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:51:46.781 [DEBUG] [Thread-206162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:51:46.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:51:46.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:51:46.836 [DEBUG] [Thread-206162] [transport.py] [_log()] userauth is OK
2026-02-15T14:51:46.836 [DEBUG] [Thread-206162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:51:46.836 [DEBUG] [Thread-206162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:51:46.836 [DEBUG] [Thread-206162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:51:46.836 [DEBUG] [Thread-206162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:51:46.855 [INFO] [Thread-206162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:51:46.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:51:46.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:51:47.717 [DEBUG] [Thread-206162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:51:47.717 [DEBUG] [Thread-206162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:51:47.766 [DEBUG] [Thread-206162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:51:47.766 [DEBUG] [Thread-206162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:51:47.775 [DEBUG] [Thread-206162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:51:47.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:51:47.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:51:47.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:51:47.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:51:47.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:51:47.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:51:47.812 [DEBUG] [Thread-206162] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:51:47.959 [DEBUG] [Thread-206164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:51:53.213 [DEBUG] [Thread-206165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:03.007 [DEBUG] [Thread-206166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:17.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:52:17.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:52:17.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:52:18.043 [DEBUG] [Thread-206167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:19.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 51, 36), 28.03, 15.56, 29.3, 22.48, 25.55, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:52:19.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:51:36
2026-02-15T14:52:20.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:52:20.547 [DEBUG] [Thread-206168] [transport.py] [_log()] starting thread (client mode): 0xa57c3760
2026-02-15T14:52:20.548 [DEBUG] [Thread-206168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:52:20.569 [DEBUG] [Thread-206168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:52:20.569 [INFO] [Thread-206168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:52:20.573 [DEBUG] [Thread-206168] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:52:20.573 [DEBUG] [Thread-206168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:52:20.573 [DEBUG] [Thread-206168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] client lang: <none>
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] server lang: <none>
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] kex follows: False
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:52:20.574 [DEBUG] [Thread-206168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:52:20.575 [DEBUG] [Thread-206168] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:52:20.575 [DEBUG] [Thread-206168] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:52:20.575 [DEBUG] [Thread-206168] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:52:20.575 [DEBUG] [Thread-206168] [transport.py] [_log()] Compression: none
2026-02-15T14:52:20.575 [DEBUG] [Thread-206168] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:52:20.595 [DEBUG] [Thread-206168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:52:20.596 [DEBUG] [Thread-206168] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:52:20.596 [DEBUG] [Thread-206168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:52:20.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:52:20.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:52:20.598 [DEBUG] [Thread-206168] [transport.py] [_log()] userauth is OK
2026-02-15T14:52:20.599 [DEBUG] [Thread-206168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:52:20.599 [DEBUG] [Thread-206168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:52:20.599 [DEBUG] [Thread-206168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:52:20.599 [DEBUG] [Thread-206168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:52:20.634 [INFO] [Thread-206168] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:52:20.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:52:21.300 [DEBUG] [Thread-206168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:52:21.300 [DEBUG] [Thread-206168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:52:21.300 [DEBUG] [Thread-206168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:52:21.342 [DEBUG] [Thread-206168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:52:21.342 [DEBUG] [Thread-206168] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:52:21.345 [DEBUG] [Thread-206168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:52:21.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:52:21.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:52:21.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:52:21.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:52:21.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:52:21.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:52:21.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:52:21.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:52:21.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:52:21.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.535860 -999.00  +23.90  18.43     22   +1.40 1 1 1 1 1   888    0 23.86 45.31 ----- 18.4 18.4 121.0 23.6 30.8 -30.1 30.7 -29.2 31.9 -28.2 32.7 -30.0
2026-02-15T14:52:21.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:52:21.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:52:21.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.535860
2026-02-15T14:52:21.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:52:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:52:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:52:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:52:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:52:21.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:51:36', tmtdew=28.03, humidity=15.56, cloud=29.3, wind=22.48, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:51:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:52:21.371 [DEBUG] [Thread-206168] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:52:21.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:52:21.464 [DEBUG] [Thread-206171] [transport.py] [_log()] starting thread (client mode): 0xa2dc3640
2026-02-15T14:52:21.464 [DEBUG] [Thread-206171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:52:21.479 [DEBUG] [Thread-206171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:52:21.479 [INFO] [Thread-206171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] client lang: <none>
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] server lang: <none>
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] kex follows: False
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:52:21.487 [DEBUG] [Thread-206171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:52:21.488 [DEBUG] [Thread-206171] [transport.py] [_log()] Compression: none
2026-02-15T14:52:21.488 [DEBUG] [Thread-206171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:52:21.544 [DEBUG] [Thread-206171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:52:21.545 [DEBUG] [Thread-206171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:52:21.545 [DEBUG] [Thread-206171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:52:21.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:52:21.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:52:21.600 [DEBUG] [Thread-206171] [transport.py] [_log()] userauth is OK
2026-02-15T14:52:21.601 [DEBUG] [Thread-206171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:52:21.601 [DEBUG] [Thread-206171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:52:21.601 [DEBUG] [Thread-206171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:52:21.601 [DEBUG] [Thread-206171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:52:21.623 [INFO] [Thread-206171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:52:21.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:52:21.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:52:22.456 [DEBUG] [Thread-206171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:52:22.456 [DEBUG] [Thread-206171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:52:22.504 [DEBUG] [Thread-206171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:52:22.504 [DEBUG] [Thread-206171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:52:22.513 [DEBUG] [Thread-206171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:52:22.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:52: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')
2026-02-15T14:52:22.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:52:22.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:52:22.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:52:22.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:52:22.550 [DEBUG] [Thread-206171] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:52:33.079 [DEBUG] [Thread-206173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:45.195 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:45.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:48.127 [DEBUG] [Thread-206174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:52.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:52:52.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:52:52.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:52:53.254 [DEBUG] [Thread-206175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:52:55.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 52, 12), 27.14, 16.23, 29.3, 17.03, 24.49, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:52:55.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:52:12
2026-02-15T14:52:55.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:52:55.672 [DEBUG] [Thread-206176] [transport.py] [_log()] starting thread (client mode): 0xa2dc0310
2026-02-15T14:52:55.672 [DEBUG] [Thread-206176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:52:55.695 [DEBUG] [Thread-206176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:52:55.695 [INFO] [Thread-206176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:52:55.697 [DEBUG] [Thread-206176] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] client lang: <none>
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] server lang: <none>
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] kex follows: False
2026-02-15T14:52:55.698 [DEBUG] [Thread-206176] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:52:55.699 [DEBUG] [Thread-206176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:52:55.699 [DEBUG] [Thread-206176] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:52:55.699 [DEBUG] [Thread-206176] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:52:55.699 [DEBUG] [Thread-206176] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:52:55.699 [DEBUG] [Thread-206176] [transport.py] [_log()] Compression: none
2026-02-15T14:52:55.699 [DEBUG] [Thread-206176] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:52:55.714 [DEBUG] [Thread-206176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:52:55.715 [DEBUG] [Thread-206176] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:52:55.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:52:55.716 [DEBUG] [Thread-206176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:52:55.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:52:55.719 [DEBUG] [Thread-206176] [transport.py] [_log()] userauth is OK
2026-02-15T14:52:55.719 [DEBUG] [Thread-206176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:52:55.719 [DEBUG] [Thread-206176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:52:55.719 [DEBUG] [Thread-206176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:52:55.720 [DEBUG] [Thread-206176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:52:55.734 [INFO] [Thread-206176] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:52:55.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:52:56.380 [DEBUG] [Thread-206176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:52:56.381 [DEBUG] [Thread-206176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:52:56.381 [DEBUG] [Thread-206176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:52:56.422 [DEBUG] [Thread-206176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:52:56.422 [DEBUG] [Thread-206176] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:52:56.426 [DEBUG] [Thread-206176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:52:56.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:52:56.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:52:56.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:52:56.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:52:56.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:52:56.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:52:56.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:52:56.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:52:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:52:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.536207 -999.00  +23.60  21.55     23   +1.40 1 1 1 1 1   888    0 23.14 42.51 ----- 21.6 21.6 109.2 24.2 30.7 -31.3 30.7 -29.7 31.9 -29.3 32.6 -29.1
2026-02-15T14:52:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:52:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:52:56.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.536207
2026-02-15T14:52:56.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:52:56.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:52:56.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:52:56.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:52:56.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:52:56.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:52:12', tmtdew=27.14, humidity=16.23, cloud=29.3, wind=17.03, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:52:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:52:56.454 [DEBUG] [Thread-206176] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:52:56.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:52:56.545 [DEBUG] [Thread-206179] [transport.py] [_log()] starting thread (client mode): 0xa2db6920
2026-02-15T14:52:56.546 [DEBUG] [Thread-206179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:52:56.560 [DEBUG] [Thread-206179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:52:56.561 [INFO] [Thread-206179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:52:56.568 [DEBUG] [Thread-206179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:52:56.569 [DEBUG] [Thread-206179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:52:56.569 [DEBUG] [Thread-206179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:52:56.569 [DEBUG] [Thread-206179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:56.569 [DEBUG] [Thread-206179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:52:56.569 [DEBUG] [Thread-206179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:56.569 [DEBUG] [Thread-206179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] client lang: <none>
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] server lang: <none>
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] kex follows: False
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:52:56.570 [DEBUG] [Thread-206179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:52:56.571 [DEBUG] [Thread-206179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:52:56.571 [DEBUG] [Thread-206179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:52:56.571 [DEBUG] [Thread-206179] [transport.py] [_log()] Compression: none
2026-02-15T14:52:56.571 [DEBUG] [Thread-206179] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:52:56.629 [DEBUG] [Thread-206179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:52:56.630 [DEBUG] [Thread-206179] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:52:56.630 [DEBUG] [Thread-206179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:52:56.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:52:56.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:52:56.689 [DEBUG] [Thread-206179] [transport.py] [_log()] userauth is OK
2026-02-15T14:52:56.689 [DEBUG] [Thread-206179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:52:56.689 [DEBUG] [Thread-206179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:52:56.689 [DEBUG] [Thread-206179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:52:56.690 [DEBUG] [Thread-206179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:52:56.711 [INFO] [Thread-206179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:52:56.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:52:56.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:52:57.541 [DEBUG] [Thread-206179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:52:57.541 [DEBUG] [Thread-206179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:52:57.588 [DEBUG] [Thread-206179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:52:57.588 [DEBUG] [Thread-206179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:52:57.597 [DEBUG] [Thread-206179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:52:57.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:52:57.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:52:57.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:52:57.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:52:57.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:52:57.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:52:57.634 [DEBUG] [Thread-206179] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:53:03.163 [DEBUG] [Thread-206181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:53:18.215 [DEBUG] [Thread-206182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:53:27.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:53:27.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:53:27.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:53:29.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 52, 49), 26.47, 17.21, 29.3, 18.24, 24.18, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:53:29.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:52:49
2026-02-15T14:53:29.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:53:30.074 [DEBUG] [Thread-206183] [transport.py] [_log()] starting thread (client mode): 0xa2dc08b0
2026-02-15T14:53:30.074 [DEBUG] [Thread-206183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:53:30.095 [DEBUG] [Thread-206183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:53:30.095 [INFO] [Thread-206183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] client lang: <none>
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] server lang: <none>
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] kex follows: False
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] Compression: none
2026-02-15T14:53:30.098 [DEBUG] [Thread-206183] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:53:30.115 [DEBUG] [Thread-206183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:53:30.116 [DEBUG] [Thread-206183] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:53:30.116 [DEBUG] [Thread-206183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:53:30.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:53:30.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:53:30.119 [DEBUG] [Thread-206183] [transport.py] [_log()] userauth is OK
2026-02-15T14:53:30.119 [DEBUG] [Thread-206183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:53:30.119 [DEBUG] [Thread-206183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:53:30.119 [DEBUG] [Thread-206183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:53:30.119 [DEBUG] [Thread-206183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:53:30.143 [INFO] [Thread-206183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:53:30.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:53:30.902 [DEBUG] [Thread-206183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:53:30.903 [DEBUG] [Thread-206183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:53:30.903 [DEBUG] [Thread-206183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:53:30.943 [DEBUG] [Thread-206183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:53:30.944 [DEBUG] [Thread-206183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:53:30.946 [DEBUG] [Thread-206183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:53:30.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:53:30.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:53:30.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:53:30.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:53:30.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:53:30.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:53:30.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:53:30.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:53:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:53:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.536555 -999.00  +24.10  11.84     23   +1.80 1 1 1 1 1   888    0 23.53 37.43 ----- 11.8 11.8 118.6 19.7 30.9 -28.6 30.8 -28.5 32.1 -27.4 32.9 -28.5
2026-02-15T14:53:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:53:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:53:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.536555
2026-02-15T14:53:30.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:53:30.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:53:30.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:53:30.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:53:30.965 [DEBUG] [Thread-206183] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:53:30.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:53:30.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:52:49', tmtdew=26.47, humidity=17.21, cloud=29.3, wind=18.24, temperature=24.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:52:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:53:31.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:53:31.061 [DEBUG] [Thread-206186] [transport.py] [_log()] starting thread (client mode): 0xa81d7520
2026-02-15T14:53:31.061 [DEBUG] [Thread-206186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:53:31.077 [DEBUG] [Thread-206186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:53:31.078 [INFO] [Thread-206186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:53:31.086 [DEBUG] [Thread-206186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:53:31.086 [DEBUG] [Thread-206186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:53:31.086 [DEBUG] [Thread-206186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:53:31.086 [DEBUG] [Thread-206186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] client lang: <none>
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] server lang: <none>
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] kex follows: False
2026-02-15T14:53:31.087 [DEBUG] [Thread-206186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:53:31.088 [DEBUG] [Thread-206186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:53:31.088 [DEBUG] [Thread-206186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:53:31.088 [DEBUG] [Thread-206186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:53:31.088 [DEBUG] [Thread-206186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:53:31.088 [DEBUG] [Thread-206186] [transport.py] [_log()] Compression: none
2026-02-15T14:53:31.088 [DEBUG] [Thread-206186] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:53:31.145 [DEBUG] [Thread-206186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:53:31.146 [DEBUG] [Thread-206186] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:53:31.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:53:31.148 [DEBUG] [Thread-206186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:53:31.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:53:31.205 [DEBUG] [Thread-206186] [transport.py] [_log()] userauth is OK
2026-02-15T14:53:31.206 [DEBUG] [Thread-206186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:53:31.206 [DEBUG] [Thread-206186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:53:31.206 [DEBUG] [Thread-206186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:53:31.206 [DEBUG] [Thread-206186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:53:31.239 [INFO] [Thread-206186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:53:31.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:53:31.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:53:32.089 [DEBUG] [Thread-206186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:53:32.089 [DEBUG] [Thread-206186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:53:32.137 [DEBUG] [Thread-206186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:53:32.137 [DEBUG] [Thread-206186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:53:32.146 [DEBUG] [Thread-206186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:53:32.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:53:32.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:53:32.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:53:32.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:53:32.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:53:32.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:53:32.182 [DEBUG] [Thread-206186] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:53:33.251 [DEBUG] [Thread-206188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:53:45.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:53:45.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:53:48.303 [DEBUG] [Thread-206189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:53:53.293 [DEBUG] [Thread-206190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:54:02.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:54:02.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:54:03.342 [DEBUG] [Thread-206191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:04.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 53, 24), 26.43, 17.28, 29.3, 17.17, 24.21, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:54:04.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:53:24
2026-02-15T14:54:04.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:54:05.046 [DEBUG] [Thread-206192] [transport.py] [_log()] starting thread (client mode): 0xa5741ed0
2026-02-15T14:54:05.046 [DEBUG] [Thread-206192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:54:05.056 [DEBUG] [Thread-206192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:54:05.056 [INFO] [Thread-206192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:54:05.059 [DEBUG] [Thread-206192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] client lang: <none>
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] server lang: <none>
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] kex follows: False
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] Compression: none
2026-02-15T14:54:05.060 [DEBUG] [Thread-206192] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:54:05.075 [DEBUG] [Thread-206192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:54:05.076 [DEBUG] [Thread-206192] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:54:05.076 [DEBUG] [Thread-206192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:54:05.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:54:05.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:54:05.077 [DEBUG] [Thread-206192] [transport.py] [_log()] userauth is OK
2026-02-15T14:54:05.077 [DEBUG] [Thread-206192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:54:05.077 [DEBUG] [Thread-206192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:54:05.077 [DEBUG] [Thread-206192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:54:05.077 [DEBUG] [Thread-206192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:54:05.089 [INFO] [Thread-206192] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:54:05.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:54:05.696 [DEBUG] [Thread-206192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:54:05.697 [DEBUG] [Thread-206192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:54:05.697 [DEBUG] [Thread-206192] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:54:05.737 [DEBUG] [Thread-206192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:54:05.738 [DEBUG] [Thread-206192] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:54:05.741 [DEBUG] [Thread-206192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:54:05.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:54:05.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:54:05.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:54:05.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:54:05.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:54:05.763 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:54:05.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:54:05.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:54:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:54:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.537249 -999.00  +24.00  19.31     23   +2.00 1 1 1 1 1   888    0 23.16 33.47 ----- 19.3 19.3 135.4 26.1 30.9 -30.1 30.7 -29.6 31.9 -29.6 32.7 -31.0
2026-02-15T14:54:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:54:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:54:05.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.537249
2026-02-15T14:54:05.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:54:05.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:54:05.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:54:05.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:54:05.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:54:05.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:53:24', tmtdew=26.43, humidity=17.28, cloud=29.3, wind=17.17, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:53:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:54:05.766 [DEBUG] [Thread-206192] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:54:05.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:54:05.861 [DEBUG] [Thread-206195] [transport.py] [_log()] starting thread (client mode): 0xa2d185e0
2026-02-15T14:54:05.861 [DEBUG] [Thread-206195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:54:05.876 [DEBUG] [Thread-206195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:54:05.876 [INFO] [Thread-206195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:05.883 [DEBUG] [Thread-206195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] client lang: <none>
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] server lang: <none>
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] kex follows: False
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] Compression: none
2026-02-15T14:54:05.884 [DEBUG] [Thread-206195] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:54:05.940 [DEBUG] [Thread-206195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:54:05.941 [DEBUG] [Thread-206195] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:54:05.941 [DEBUG] [Thread-206195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:54:05.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:54:05.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:54:05.998 [DEBUG] [Thread-206195] [transport.py] [_log()] userauth is OK
2026-02-15T14:54:05.998 [DEBUG] [Thread-206195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:54:05.998 [DEBUG] [Thread-206195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:54:05.998 [DEBUG] [Thread-206195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:54:05.998 [DEBUG] [Thread-206195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:54:06.017 [INFO] [Thread-206195] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:54:06.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:54:06.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:54:06.881 [DEBUG] [Thread-206195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:54:06.881 [DEBUG] [Thread-206195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:54:06.929 [DEBUG] [Thread-206195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:54:06.930 [DEBUG] [Thread-206195] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:54:06.939 [DEBUG] [Thread-206195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:54:06.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:54:06.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:54:06.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:54:06.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:54:06.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:54:06.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:54:06.976 [DEBUG] [Thread-206195] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:54:18.377 [DEBUG] [Thread-206197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:33.438 [DEBUG] [Thread-206198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:36.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:54:36.999 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:54:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:54:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 53, 24), 26.43, 17.28, 29.3, 17.17, 24.21, 0, 0, 0, 0, 0, 0),)
2026-02-15T14:54:39.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:53:24
2026-02-15T14:54:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:54:40.176 [DEBUG] [Thread-206199] [transport.py] [_log()] starting thread (client mode): 0xa57c03d0
2026-02-15T14:54:40.177 [DEBUG] [Thread-206199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:54:40.198 [DEBUG] [Thread-206199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:54:40.198 [INFO] [Thread-206199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] client lang: <none>
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] server lang: <none>
2026-02-15T14:54:40.201 [DEBUG] [Thread-206199] [transport.py] [_log()] kex follows: False
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] Compression: none
2026-02-15T14:54:40.202 [DEBUG] [Thread-206199] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:54:40.221 [DEBUG] [Thread-206199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:54:40.222 [DEBUG] [Thread-206199] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:54:40.222 [DEBUG] [Thread-206199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:54:40.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:54:40.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:54:40.225 [DEBUG] [Thread-206199] [transport.py] [_log()] userauth is OK
2026-02-15T14:54:40.225 [DEBUG] [Thread-206199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:54:40.225 [DEBUG] [Thread-206199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:54:40.225 [DEBUG] [Thread-206199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:54:40.226 [DEBUG] [Thread-206199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:54:40.249 [INFO] [Thread-206199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:54:40.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:54:40.894 [DEBUG] [Thread-206199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:54:40.894 [DEBUG] [Thread-206199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:54:40.894 [DEBUG] [Thread-206199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:54:40.935 [DEBUG] [Thread-206199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:54:40.936 [DEBUG] [Thread-206199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:54:40.939 [DEBUG] [Thread-206199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:54:40.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:54:40.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:54:40.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:54:40.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:54:40.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:54:40.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:54:40.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:54:40.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:54:40.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:54:40.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.537596 -999.00  +23.80  17.31     23   +1.90 1 1 1 1 1   888    0 23.32 31.29 ----- 17.3 17.3 141.6 23.4 30.9 -30.1 30.6 -30.6 31.8 -28.6 32.6 -31.1
2026-02-15T14:54:40.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:54:40.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:54:40.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.537596
2026-02-15T14:54:40.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:54:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:54:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:54:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:54:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:54:40.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:53:24', tmtdew=26.43, humidity=17.28, cloud=29.3, wind=17.17, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:54:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:54:40.965 [DEBUG] [Thread-206199] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:54:41.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:54:41.060 [DEBUG] [Thread-206202] [transport.py] [_log()] starting thread (client mode): 0xa81d7520
2026-02-15T14:54:41.060 [DEBUG] [Thread-206202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:54:41.075 [DEBUG] [Thread-206202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:54:41.075 [INFO] [Thread-206202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:54:41.082 [DEBUG] [Thread-206202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:54:41.083 [DEBUG] [Thread-206202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:54:41.083 [DEBUG] [Thread-206202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:54:41.083 [DEBUG] [Thread-206202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:41.083 [DEBUG] [Thread-206202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:54:41.083 [DEBUG] [Thread-206202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:41.083 [DEBUG] [Thread-206202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] client lang: <none>
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] server lang: <none>
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] kex follows: False
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:54:41.084 [DEBUG] [Thread-206202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:54:41.085 [DEBUG] [Thread-206202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:54:41.085 [DEBUG] [Thread-206202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:54:41.085 [DEBUG] [Thread-206202] [transport.py] [_log()] Compression: none
2026-02-15T14:54:41.085 [DEBUG] [Thread-206202] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:54:41.142 [DEBUG] [Thread-206202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:54:41.143 [DEBUG] [Thread-206202] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:54:41.143 [DEBUG] [Thread-206202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:54:41.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:54:41.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:54:41.203 [DEBUG] [Thread-206202] [transport.py] [_log()] userauth is OK
2026-02-15T14:54:41.204 [DEBUG] [Thread-206202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:54:41.204 [DEBUG] [Thread-206202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:54:41.204 [DEBUG] [Thread-206202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:54:41.204 [DEBUG] [Thread-206202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:54:41.223 [INFO] [Thread-206202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:54: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-02-15T14:54:41.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:54:42.051 [DEBUG] [Thread-206202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:54:42.051 [DEBUG] [Thread-206202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:54:42.100 [DEBUG] [Thread-206202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:54:42.101 [DEBUG] [Thread-206202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:54:42.110 [DEBUG] [Thread-206202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:54:42.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:54:42.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:54:42.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:54:42.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:54:42.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:54:42.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:54:42.145 [DEBUG] [Thread-206202] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:54:45.481 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:45.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:48.477 [DEBUG] [Thread-206204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:54:53.345 [DEBUG] [Thread-206205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:03.528 [DEBUG] [Thread-206206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:55:12.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:55:12.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:55:14.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 54, 35), 26.91, 16.72, 0.0, 17.4, 24.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:55:14.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:54:35
2026-02-15T14:55:14.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:55:14.740 [DEBUG] [Thread-206207] [transport.py] [_log()] starting thread (client mode): 0xa2d02ef0
2026-02-15T14:55:14.741 [DEBUG] [Thread-206207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:55:14.759 [DEBUG] [Thread-206207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:55:14.759 [INFO] [Thread-206207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] client lang: <none>
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] server lang: <none>
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] kex follows: False
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] Compression: none
2026-02-15T14:55:14.762 [DEBUG] [Thread-206207] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:55:14.779 [DEBUG] [Thread-206207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:55:14.779 [DEBUG] [Thread-206207] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:55:14.780 [DEBUG] [Thread-206207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:55:14.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:55:14.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:55:14.782 [DEBUG] [Thread-206207] [transport.py] [_log()] userauth is OK
2026-02-15T14:55:14.782 [DEBUG] [Thread-206207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:55:14.782 [DEBUG] [Thread-206207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:55:14.783 [DEBUG] [Thread-206207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:55:14.783 [DEBUG] [Thread-206207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:55:14.807 [INFO] [Thread-206207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:55:14.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:55:15.448 [DEBUG] [Thread-206207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:55:15.448 [DEBUG] [Thread-206207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:55:15.449 [DEBUG] [Thread-206207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:55:15.489 [DEBUG] [Thread-206207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:55:15.490 [DEBUG] [Thread-206207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:55:15.493 [DEBUG] [Thread-206207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:55:15.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:55:15.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:55:15.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:55:15.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:55:15.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:55:15.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:55:15.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:55:15.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:55:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:55:15.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.537944 -999.00  +23.60  11.39     23   +1.80 1 1 1 1 1   888    0 22.90 26.71 ----- 11.4 11.4 131.4 23.6 30.9 -29.4 30.6 -29.2 31.9 -29.0 32.7 -29.3
2026-02-15T14:55:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:55:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:55:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.537944
2026-02-15T14:55:15.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:55:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:55:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:55:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:55:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:55:15.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:54:35', tmtdew=26.91, humidity=16.72, cloud=0.0, wind=17.4, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:54:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:55:15.521 [DEBUG] [Thread-206207] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:55:15.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:55:15.618 [DEBUG] [Thread-206210] [transport.py] [_log()] starting thread (client mode): 0xa81d4dc0
2026-02-15T14:55:15.618 [DEBUG] [Thread-206210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:55:15.637 [DEBUG] [Thread-206210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:55:15.637 [INFO] [Thread-206210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:55:15.647 [DEBUG] [Thread-206210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] client lang: <none>
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] server lang: <none>
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] kex follows: False
2026-02-15T14:55:15.648 [DEBUG] [Thread-206210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:55:15.649 [DEBUG] [Thread-206210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:55:15.649 [DEBUG] [Thread-206210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:55:15.649 [DEBUG] [Thread-206210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:55:15.649 [DEBUG] [Thread-206210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:55:15.649 [DEBUG] [Thread-206210] [transport.py] [_log()] Compression: none
2026-02-15T14:55:15.649 [DEBUG] [Thread-206210] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:55:15.704 [DEBUG] [Thread-206210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:55:15.705 [DEBUG] [Thread-206210] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:55:15.705 [DEBUG] [Thread-206210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:55:15.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:55:15.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:55:15.762 [DEBUG] [Thread-206210] [transport.py] [_log()] userauth is OK
2026-02-15T14:55:15.762 [DEBUG] [Thread-206210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:55:15.762 [DEBUG] [Thread-206210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:55:15.762 [DEBUG] [Thread-206210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:55:15.763 [DEBUG] [Thread-206210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:55:15.786 [INFO] [Thread-206210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:55:15.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:55:15.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:55:16.598 [DEBUG] [Thread-206210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:55:16.598 [DEBUG] [Thread-206210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:55:16.647 [DEBUG] [Thread-206210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:55:16.647 [DEBUG] [Thread-206210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:55:16.656 [DEBUG] [Thread-206210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:55:16.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:55:16.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:55:16.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:55:16.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:55:16.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:55:16.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:55:16.703 [DEBUG] [Thread-206210] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:55:18.563 [DEBUG] [Thread-206212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:33.617 [DEBUG] [Thread-206213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:45.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:45.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:46.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:55:46.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:55:46.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:55:48.653 [DEBUG] [Thread-206214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:55:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 55, 11), 25.34, 18.32, 0.0, 15.9, 23.6, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:55:48.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:55:11
2026-02-15T14:55:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:55:49.496 [DEBUG] [Thread-206215] [transport.py] [_log()] starting thread (client mode): 0xa81d72e0
2026-02-15T14:55:49.496 [DEBUG] [Thread-206215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:55:49.517 [DEBUG] [Thread-206215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:55:49.517 [INFO] [Thread-206215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] client lang: <none>
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] server lang: <none>
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] kex follows: False
2026-02-15T14:55:49.520 [DEBUG] [Thread-206215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:55:49.521 [DEBUG] [Thread-206215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:55:49.521 [DEBUG] [Thread-206215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:55:49.521 [DEBUG] [Thread-206215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:55:49.521 [DEBUG] [Thread-206215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:55:49.521 [DEBUG] [Thread-206215] [transport.py] [_log()] Compression: none
2026-02-15T14:55:49.521 [DEBUG] [Thread-206215] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:55:49.538 [DEBUG] [Thread-206215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:55:49.539 [DEBUG] [Thread-206215] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:55:49.540 [DEBUG] [Thread-206215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:55:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:55:49.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:55:49.542 [DEBUG] [Thread-206215] [transport.py] [_log()] userauth is OK
2026-02-15T14:55:49.543 [DEBUG] [Thread-206215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:55:49.543 [DEBUG] [Thread-206215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:55:49.543 [DEBUG] [Thread-206215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:55:49.543 [DEBUG] [Thread-206215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:55:49.567 [INFO] [Thread-206215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:55:49.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:55:50.217 [DEBUG] [Thread-206215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:55:50.218 [DEBUG] [Thread-206215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:55:50.218 [DEBUG] [Thread-206215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:55:50.259 [DEBUG] [Thread-206215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:55:50.259 [DEBUG] [Thread-206215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:55:50.262 [DEBUG] [Thread-206215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:55:50.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:55:50.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:55:50.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:55:50.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:55:50.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:55:50.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:55:50.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:55:50.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:55:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:55:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.538638 -999.00  +23.90  19.38     23   +1.80 1 1 1 1 1   888    0 22.47 20.75 ----- 19.4 19.4 164.6 22.0 31.0 -29.7 30.6 -29.1 31.9 -29.1 32.8 -29.3
2026-02-15T14:55:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:55:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:55:50.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.538638
2026-02-15T14:55:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:55:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:55:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:55:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:55:50.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:55:50.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:55:11', tmtdew=25.34, humidity=18.32, cloud=0.0, wind=15.9, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:55:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:55:50.290 [DEBUG] [Thread-206215] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:55:50.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:55:50.385 [DEBUG] [Thread-206218] [transport.py] [_log()] starting thread (client mode): 0xa2db6da0
2026-02-15T14:55:50.385 [DEBUG] [Thread-206218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:55:50.400 [DEBUG] [Thread-206218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:55:50.400 [INFO] [Thread-206218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:55:50.408 [DEBUG] [Thread-206218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:55:50.408 [DEBUG] [Thread-206218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:55:50.408 [DEBUG] [Thread-206218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:55:50.408 [DEBUG] [Thread-206218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:50.408 [DEBUG] [Thread-206218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:55:50.409 [DEBUG] [Thread-206218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:50.409 [DEBUG] [Thread-206218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:55:50.409 [DEBUG] [Thread-206218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:55:50.409 [DEBUG] [Thread-206218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:55:50.409 [DEBUG] [Thread-206218] [transport.py] [_log()] client lang: <none>
2026-02-15T14:55:50.409 [DEBUG] [Thread-206218] [transport.py] [_log()] server lang: <none>
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] kex follows: False
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] Compression: none
2026-02-15T14:55:50.410 [DEBUG] [Thread-206218] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:55:50.466 [DEBUG] [Thread-206218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:55:50.467 [DEBUG] [Thread-206218] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:55:50.468 [DEBUG] [Thread-206218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:55:50.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:55:50.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:55:50.522 [DEBUG] [Thread-206218] [transport.py] [_log()] userauth is OK
2026-02-15T14:55:50.522 [DEBUG] [Thread-206218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:55:50.522 [DEBUG] [Thread-206218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:55:50.523 [DEBUG] [Thread-206218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:55:50.523 [DEBUG] [Thread-206218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:55:50.541 [INFO] [Thread-206218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:55:50.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:55:50.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:55:51.391 [DEBUG] [Thread-206218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:55:51.391 [DEBUG] [Thread-206218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:55:51.439 [DEBUG] [Thread-206218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:55:51.439 [DEBUG] [Thread-206218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:55:51.448 [DEBUG] [Thread-206218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:55:51.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:55:51.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:55:51.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:55:51.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:55:51.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:55:51.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:55:51.485 [DEBUG] [Thread-206218] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:55:53.388 [DEBUG] [Thread-206220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:03.692 [DEBUG] [Thread-206221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:18.746 [DEBUG] [Thread-206222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:21.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:56:21.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:56:21.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:56:23.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 55, 47), 25.59, 18.29, 0.0, 13.55, 23.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:56:23.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:55:47
2026-02-15T14:56:23.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:56:24.004 [DEBUG] [Thread-206223] [transport.py] [_log()] starting thread (client mode): 0xa2dc3640
2026-02-15T14:56:24.004 [DEBUG] [Thread-206223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:56:24.027 [DEBUG] [Thread-206223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:56:24.027 [INFO] [Thread-206223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:56:24.030 [DEBUG] [Thread-206223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:56:24.030 [DEBUG] [Thread-206223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:56:24.030 [DEBUG] [Thread-206223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:56:24.030 [DEBUG] [Thread-206223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:56:24.030 [DEBUG] [Thread-206223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] client lang: <none>
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] server lang: <none>
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] kex follows: False
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:56:24.031 [DEBUG] [Thread-206223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:56:24.032 [DEBUG] [Thread-206223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:56:24.032 [DEBUG] [Thread-206223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:56:24.032 [DEBUG] [Thread-206223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:56:24.032 [DEBUG] [Thread-206223] [transport.py] [_log()] Compression: none
2026-02-15T14:56:24.032 [DEBUG] [Thread-206223] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:56:24.047 [DEBUG] [Thread-206223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:56:24.047 [DEBUG] [Thread-206223] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:56:24.048 [DEBUG] [Thread-206223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:56:24.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:56:24.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:56:24.049 [DEBUG] [Thread-206223] [transport.py] [_log()] userauth is OK
2026-02-15T14:56:24.050 [DEBUG] [Thread-206223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:56:24.050 [DEBUG] [Thread-206223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:56:24.050 [DEBUG] [Thread-206223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:56:24.050 [DEBUG] [Thread-206223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:56:24.085 [INFO] [Thread-206223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:56:24.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:56:24.728 [DEBUG] [Thread-206223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:56:24.728 [DEBUG] [Thread-206223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:56:24.729 [DEBUG] [Thread-206223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:56:24.769 [DEBUG] [Thread-206223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:56:24.769 [DEBUG] [Thread-206223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:56:24.772 [DEBUG] [Thread-206223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:56:24.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:56:24.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:56:24.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:56:24.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:56:24.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:56:24.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:56:24.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:56:24.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:56:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:56:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.538985 -999.00  +23.50  20.33     23   +1.70 1 1 1 1 1   888    0 22.80 18.89 ----- 20.3 20.3 138.0 26.6 30.9 -30.1 30.4 -29.8 31.8 -28.7 32.6 -31.8
2026-02-15T14:56:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:56:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:56:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.538985
2026-02-15T14:56:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:56:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:56:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:56:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:56:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:56:24.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:55:47', tmtdew=25.59, humidity=18.29, cloud=0.0, wind=13.55, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:56:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:56:24.798 [DEBUG] [Thread-206223] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:56:24.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:56:24.894 [DEBUG] [Thread-206226] [transport.py] [_log()] starting thread (client mode): 0xa2d02560
2026-02-15T14:56:24.894 [DEBUG] [Thread-206226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:56:24.910 [DEBUG] [Thread-206226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:56:24.910 [INFO] [Thread-206226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:56:24.917 [DEBUG] [Thread-206226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:56:24.917 [DEBUG] [Thread-206226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:56:24.917 [DEBUG] [Thread-206226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] client lang: <none>
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] server lang: <none>
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] kex follows: False
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] Compression: none
2026-02-15T14:56:24.918 [DEBUG] [Thread-206226] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:56:24.974 [DEBUG] [Thread-206226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:56:24.974 [DEBUG] [Thread-206226] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:56:24.975 [DEBUG] [Thread-206226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:56:24.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:56:24.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:56:25.030 [DEBUG] [Thread-206226] [transport.py] [_log()] userauth is OK
2026-02-15T14:56:25.030 [DEBUG] [Thread-206226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:56:25.031 [DEBUG] [Thread-206226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:56:25.031 [DEBUG] [Thread-206226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:56:25.031 [DEBUG] [Thread-206226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:56:25.050 [INFO] [Thread-206226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:56:25.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:56:25.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:56:26.020 [DEBUG] [Thread-206226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:56:26.020 [DEBUG] [Thread-206226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:56:26.068 [DEBUG] [Thread-206226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:56:26.068 [DEBUG] [Thread-206226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:56:26.078 [DEBUG] [Thread-206226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:56:26.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:56:26.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:56:26.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:56:26.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:56:26.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:56:26.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:56:26.115 [DEBUG] [Thread-206226] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:56:33.781 [DEBUG] [Thread-206228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:45.772 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:45.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:48.843 [DEBUG] [Thread-206229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:53.424 [DEBUG] [Thread-206230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:56:56.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:56:56.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:56:56.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:56:58.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 56, 23), 25.74, 18.12, 0.0, 14.43, 23.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:56:58.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:56:23
2026-02-15T14:56:58.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:56:59.147 [DEBUG] [Thread-206231] [transport.py] [_log()] starting thread (client mode): 0xa81d72e0
2026-02-15T14:56:59.148 [DEBUG] [Thread-206231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:56:59.168 [DEBUG] [Thread-206231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:56:59.168 [INFO] [Thread-206231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:56:59.171 [DEBUG] [Thread-206231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] client lang: <none>
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] server lang: <none>
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] kex follows: False
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] Compression: none
2026-02-15T14:56:59.172 [DEBUG] [Thread-206231] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:56:59.189 [DEBUG] [Thread-206231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:56:59.190 [DEBUG] [Thread-206231] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:56:59.190 [DEBUG] [Thread-206231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:56:59.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:56:59.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:56:59.192 [DEBUG] [Thread-206231] [transport.py] [_log()] userauth is OK
2026-02-15T14:56:59.193 [DEBUG] [Thread-206231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:56:59.193 [DEBUG] [Thread-206231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:56:59.193 [DEBUG] [Thread-206231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:56:59.193 [DEBUG] [Thread-206231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:56:59.217 [INFO] [Thread-206231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:56:59.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:56:59.851 [DEBUG] [Thread-206231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:56:59.851 [DEBUG] [Thread-206231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:56:59.851 [DEBUG] [Thread-206231] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:56:59.892 [DEBUG] [Thread-206231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:56:59.893 [DEBUG] [Thread-206231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:56:59.896 [DEBUG] [Thread-206231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:56:59.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:56:59.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:56:59.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:56:59.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:56:59.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:56:59.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:56:59.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:56:59.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:56:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:56:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.539332 -999.00  +23.30  17.39     24   +1.70 1 1 1 1 1   888    0 22.80 15.61 ----- 17.4 17.4 137.2 22.3 30.9 -29.5 30.6 -29.4 31.9 -29.2 32.7 -30.0
2026-02-15T14:56:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:56:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:56:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.539332
2026-02-15T14:56:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:56:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:56:59.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:56:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:56:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:56:59.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:56:23', tmtdew=25.74, humidity=18.12, cloud=0.0, wind=14.43, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:56:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:56:59.926 [DEBUG] [Thread-206231] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:57:00.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:57:00.030 [DEBUG] [Thread-206234] [transport.py] [_log()] starting thread (client mode): 0xa57c2470
2026-02-15T14:57:00.030 [DEBUG] [Thread-206234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:57:00.045 [DEBUG] [Thread-206234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:57:00.045 [INFO] [Thread-206234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] client lang: <none>
2026-02-15T14:57:00.052 [DEBUG] [Thread-206234] [transport.py] [_log()] server lang: <none>
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] kex follows: False
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] Compression: none
2026-02-15T14:57:00.053 [DEBUG] [Thread-206234] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:57:00.109 [DEBUG] [Thread-206234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:57:00.110 [DEBUG] [Thread-206234] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:57:00.110 [DEBUG] [Thread-206234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:57:00.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:57:00.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:57:00.167 [DEBUG] [Thread-206234] [transport.py] [_log()] userauth is OK
2026-02-15T14:57:00.167 [DEBUG] [Thread-206234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:57:00.167 [DEBUG] [Thread-206234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:57:00.167 [DEBUG] [Thread-206234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:57:00.168 [DEBUG] [Thread-206234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:57:00.186 [INFO] [Thread-206234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:57:00.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:57:00.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:57:01.032 [DEBUG] [Thread-206234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:57:01.032 [DEBUG] [Thread-206234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:57:01.082 [DEBUG] [Thread-206234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:57:01.083 [DEBUG] [Thread-206234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:57:01.094 [DEBUG] [Thread-206234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:57:01.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:57:01.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:57:01.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:57:01.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:57:01.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:57:01.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:57:01.130 [DEBUG] [Thread-206234] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:57:03.882 [DEBUG] [Thread-206236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:57:18.931 [DEBUG] [Thread-206237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:57:31.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:57:31.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:57:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:57:33.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 56, 58), 26.1, 17.48, 0.0, 17.2, 23.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:57:33.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:56:58
2026-02-15T14:57:33.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:57:33.811 [DEBUG] [Thread-206238] [transport.py] [_log()] starting thread (client mode): 0xa2d03340
2026-02-15T14:57:33.811 [DEBUG] [Thread-206238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:57:33.831 [DEBUG] [Thread-206238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:57:33.832 [INFO] [Thread-206238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:57:33.835 [DEBUG] [Thread-206238] [transport.py] [_log()] client lang: <none>
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] server lang: <none>
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] kex follows: False
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] Compression: none
2026-02-15T14:57:33.836 [DEBUG] [Thread-206238] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:57:33.854 [DEBUG] [Thread-206238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:57:33.854 [DEBUG] [Thread-206238] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:57:33.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:57:33.855 [DEBUG] [Thread-206238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:57:33.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:57:33.897 [DEBUG] [Thread-206238] [transport.py] [_log()] userauth is OK
2026-02-15T14:57:33.897 [DEBUG] [Thread-206238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:57:33.898 [DEBUG] [Thread-206238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:57:33.898 [DEBUG] [Thread-206238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:57:33.898 [DEBUG] [Thread-206238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:57:33.919 [INFO] [Thread-206238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:57:33.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:57:33.968 [DEBUG] [Thread-206240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:57:34.565 [DEBUG] [Thread-206238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:57:34.565 [DEBUG] [Thread-206238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:57:34.566 [DEBUG] [Thread-206238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:57:34.606 [DEBUG] [Thread-206238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:57:34.607 [DEBUG] [Thread-206238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:57:34.610 [DEBUG] [Thread-206238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:57:34.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:57:34.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:57:34.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:57:34.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:57:34.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:57:34.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:57:34.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:57:34.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:57:34.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:57:34.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.539680 -999.00  +23.40  14.54     23   +1.60 1 1 1 1 1   888    0 22.30 12.55 ----- 14.5 14.5 161.6 22.1 30.9 -30.4 30.6 -29.1 31.8 -28.4 32.7 -30.6
2026-02-15T14:57:34.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:57:34.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:57:34.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.539680
2026-02-15T14:57:34.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:57:34.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:57:34.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:57:34.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:57:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:57:34.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:56:58', tmtdew=26.1, humidity=17.48, cloud=0.0, wind=17.2, temperature=23.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:57:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:57:34.636 [DEBUG] [Thread-206238] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:57:34.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:57:34.731 [DEBUG] [Thread-206242] [transport.py] [_log()] starting thread (client mode): 0xa2d4e560
2026-02-15T14:57:34.732 [DEBUG] [Thread-206242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:57:34.746 [DEBUG] [Thread-206242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:57:34.746 [INFO] [Thread-206242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:57:34.753 [DEBUG] [Thread-206242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:57:34.753 [DEBUG] [Thread-206242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:57:34.753 [DEBUG] [Thread-206242] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:57:34.753 [DEBUG] [Thread-206242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] client lang: <none>
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] server lang: <none>
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] kex follows: False
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] Compression: none
2026-02-15T14:57:34.754 [DEBUG] [Thread-206242] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:57:34.814 [DEBUG] [Thread-206242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:57:34.815 [DEBUG] [Thread-206242] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:57:34.815 [DEBUG] [Thread-206242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:57:34.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:57:34.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:57:34.872 [DEBUG] [Thread-206242] [transport.py] [_log()] userauth is OK
2026-02-15T14:57:34.872 [DEBUG] [Thread-206242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:57:34.872 [DEBUG] [Thread-206242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:57:34.872 [DEBUG] [Thread-206242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:57:34.872 [DEBUG] [Thread-206242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:57:34.898 [INFO] [Thread-206242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:57:34.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:57:34.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:57:35.722 [DEBUG] [Thread-206242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:57:35.722 [DEBUG] [Thread-206242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:57:35.769 [DEBUG] [Thread-206242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:57:35.770 [DEBUG] [Thread-206242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:57:35.779 [DEBUG] [Thread-206242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:57:35.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:57:35.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:57:35.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:57:35.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:57:35.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:57:35.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:57:35.815 [DEBUG] [Thread-206242] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:57:45.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:57:45.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:57:49.008 [DEBUG] [Thread-206244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:57:53.467 [DEBUG] [Thread-206245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:04.062 [DEBUG] [Thread-206246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:05.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:58:05.838 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:58:05.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:58:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 57, 34), 27.57, 16.02, 0.0, 17.33, 25.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:58:07.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:57:34
2026-02-15T14:58:08.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:58:08.263 [DEBUG] [Thread-206247] [transport.py] [_log()] starting thread (client mode): 0xa2dfb070
2026-02-15T14:58:08.263 [DEBUG] [Thread-206247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:58:08.281 [DEBUG] [Thread-206247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:58:08.282 [INFO] [Thread-206247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:08.285 [DEBUG] [Thread-206247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] client lang: <none>
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] server lang: <none>
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] kex follows: False
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] Compression: none
2026-02-15T14:58:08.286 [DEBUG] [Thread-206247] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:58:08.302 [DEBUG] [Thread-206247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:58:08.303 [DEBUG] [Thread-206247] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:58:08.303 [DEBUG] [Thread-206247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:58:08.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:58:08.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:58:08.305 [DEBUG] [Thread-206247] [transport.py] [_log()] userauth is OK
2026-02-15T14:58:08.306 [DEBUG] [Thread-206247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:58:08.306 [DEBUG] [Thread-206247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:58:08.306 [DEBUG] [Thread-206247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:58:08.306 [DEBUG] [Thread-206247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:58:08.332 [INFO] [Thread-206247] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:58:08.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:58:08.987 [DEBUG] [Thread-206247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:58:08.987 [DEBUG] [Thread-206247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:58:08.987 [DEBUG] [Thread-206247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:58:09.027 [DEBUG] [Thread-206247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:58:09.027 [DEBUG] [Thread-206247] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:58:09.031 [DEBUG] [Thread-206247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:58:09.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:58:09.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:58:09.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:58:09.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:58:09.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:58:09.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:58:09.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:58:09.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:58:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:58:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.540027 -999.00  +23.60  16.50     23   +1.60 1 1 1 1 1   888    0 22.50 8.30 ----- 16.5 16.5 144.4 22.5 31.0 -30.1 30.4 -29.7 31.8 -27.7 32.7 -30.4
2026-02-15T14:58:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:58:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:58:09.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.540027
2026-02-15T14:58:09.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:58:09.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:58:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:58:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:58:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:58:09.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:57:34', tmtdew=27.57, humidity=16.02, cloud=0.0, wind=17.33, temperature=25.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:57:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:58:09.056 [DEBUG] [Thread-206247] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:58:09.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:58:09.154 [DEBUG] [Thread-206250] [transport.py] [_log()] starting thread (client mode): 0xa2d4cfa0
2026-02-15T14:58:09.154 [DEBUG] [Thread-206250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:58:09.168 [DEBUG] [Thread-206250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:58:09.169 [INFO] [Thread-206250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:58:09.176 [DEBUG] [Thread-206250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:09.177 [DEBUG] [Thread-206250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] client lang: <none>
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] server lang: <none>
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] kex follows: False
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:58:09.178 [DEBUG] [Thread-206250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:58:09.179 [DEBUG] [Thread-206250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:58:09.179 [DEBUG] [Thread-206250] [transport.py] [_log()] Compression: none
2026-02-15T14:58:09.179 [DEBUG] [Thread-206250] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:58:09.237 [DEBUG] [Thread-206250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:58:09.238 [DEBUG] [Thread-206250] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:58:09.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:58:09.239 [DEBUG] [Thread-206250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:58:09.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:58:09.296 [DEBUG] [Thread-206250] [transport.py] [_log()] userauth is OK
2026-02-15T14:58:09.296 [DEBUG] [Thread-206250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:58:09.297 [DEBUG] [Thread-206250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:58:09.297 [DEBUG] [Thread-206250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:58:09.297 [DEBUG] [Thread-206250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:58:09.316 [INFO] [Thread-206250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:58:09.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:58:09.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:58:10.143 [DEBUG] [Thread-206250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:58:10.144 [DEBUG] [Thread-206250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:58:10.191 [DEBUG] [Thread-206250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:58:10.191 [DEBUG] [Thread-206250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:58:10.200 [DEBUG] [Thread-206250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:58:10.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:58:10.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:58:10.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:58:10.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:58:10.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:58:10.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:58:10.235 [DEBUG] [Thread-206250] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:58:19.098 [DEBUG] [Thread-206252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:34.150 [DEBUG] [Thread-206253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:58:40.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:58:40.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:58:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 58, 9), 26.44, 17.38, 0.0, 14.31, 24.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:58:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:58:09
2026-02-15T14:58:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:58:42.670 [DEBUG] [Thread-206254] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-15T14:58:42.670 [DEBUG] [Thread-206254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:58:42.689 [DEBUG] [Thread-206254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:58:42.690 [INFO] [Thread-206254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:58:42.693 [DEBUG] [Thread-206254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:58:42.693 [DEBUG] [Thread-206254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:58:42.693 [DEBUG] [Thread-206254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:58:42.693 [DEBUG] [Thread-206254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:42.693 [DEBUG] [Thread-206254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] client lang: <none>
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] server lang: <none>
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] kex follows: False
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] Compression: none
2026-02-15T14:58:42.694 [DEBUG] [Thread-206254] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:58:42.714 [DEBUG] [Thread-206254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:58:42.715 [DEBUG] [Thread-206254] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:58:42.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:58:42.716 [DEBUG] [Thread-206254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:58:42.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:58:42.718 [DEBUG] [Thread-206254] [transport.py] [_log()] userauth is OK
2026-02-15T14:58:42.718 [DEBUG] [Thread-206254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:58:42.718 [DEBUG] [Thread-206254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:58:42.718 [DEBUG] [Thread-206254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:58:42.719 [DEBUG] [Thread-206254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:58:42.749 [INFO] [Thread-206254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:58:42.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:58:43.394 [DEBUG] [Thread-206254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:58:43.403 [DEBUG] [Thread-206254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:58:43.404 [DEBUG] [Thread-206254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:58:43.435 [DEBUG] [Thread-206254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:58:43.436 [DEBUG] [Thread-206254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:58:43.439 [DEBUG] [Thread-206254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:58:43.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:58:43.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:58:43.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:58:43.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:58:43.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:58:43.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:58:43.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:58:43.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:58:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:58:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.540374 -999.00  +23.90  18.06     23   +1.70 1 1 1 1 1   888    0 22.66 5.95 ----- 18.1 18.1 162.2 21.4 31.1 -31.1 30.4 -29.1 31.8 -29.3 32.8 -30.5
2026-02-15T14:58:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:58:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:58:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.540374
2026-02-15T14:58:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:58:43.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:58:43.467 [DEBUG] [Thread-206254] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:58:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:58:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:58:43.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:58:43.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:58:09', tmtdew=26.44, humidity=17.38, cloud=0.0, wind=14.31, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:58:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:58:43.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:58:43.564 [DEBUG] [Thread-206257] [transport.py] [_log()] starting thread (client mode): 0xa2d69690
2026-02-15T14:58:43.564 [DEBUG] [Thread-206257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:58:43.578 [DEBUG] [Thread-206257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:58:43.578 [INFO] [Thread-206257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:58:43.586 [DEBUG] [Thread-206257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:58:43.586 [DEBUG] [Thread-206257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:58:43.586 [DEBUG] [Thread-206257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:58:43.586 [DEBUG] [Thread-206257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:43.586 [DEBUG] [Thread-206257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:58:43.586 [DEBUG] [Thread-206257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] client lang: <none>
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] server lang: <none>
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] kex follows: False
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:58:43.587 [DEBUG] [Thread-206257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:58:43.588 [DEBUG] [Thread-206257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:58:43.588 [DEBUG] [Thread-206257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:58:43.588 [DEBUG] [Thread-206257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:58:43.588 [DEBUG] [Thread-206257] [transport.py] [_log()] Compression: none
2026-02-15T14:58:43.588 [DEBUG] [Thread-206257] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:58:43.644 [DEBUG] [Thread-206257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:58:43.644 [DEBUG] [Thread-206257] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:58:43.645 [DEBUG] [Thread-206257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:58:43.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:58:43.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:58:43.700 [DEBUG] [Thread-206257] [transport.py] [_log()] userauth is OK
2026-02-15T14:58:43.700 [DEBUG] [Thread-206257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:58:43.700 [DEBUG] [Thread-206257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:58:43.700 [DEBUG] [Thread-206257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:58:43.701 [DEBUG] [Thread-206257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:58:43.720 [INFO] [Thread-206257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:58:43.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:58:43.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:58:44.551 [DEBUG] [Thread-206257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:58:44.551 [DEBUG] [Thread-206257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:58:44.598 [DEBUG] [Thread-206257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:58:44.599 [DEBUG] [Thread-206257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:58:44.608 [DEBUG] [Thread-206257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:58:44.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:58:44.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:58:44.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:58:44.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:58:44.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:58:44.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:58:44.643 [DEBUG] [Thread-206257] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:58:46.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:46.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:49.187 [DEBUG] [Thread-206259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:58:53.517 [DEBUG] [Thread-206260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:04.248 [DEBUG] [Thread-206261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:14.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:59:14.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:59:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:59:16.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 58, 45), 26.53, 16.98, 0.0, 15.93, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:59:16.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:58:45
2026-02-15T14:59:16.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:59:17.137 [DEBUG] [Thread-206262] [transport.py] [_log()] starting thread (client mode): 0xa2d69480
2026-02-15T14:59:17.137 [DEBUG] [Thread-206262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:59:17.157 [DEBUG] [Thread-206262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:59:17.157 [INFO] [Thread-206262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:17.161 [DEBUG] [Thread-206262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] client lang: <none>
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] server lang: <none>
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] kex follows: False
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] Compression: none
2026-02-15T14:59:17.162 [DEBUG] [Thread-206262] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:59:17.173 [DEBUG] [Thread-206262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:59:17.174 [DEBUG] [Thread-206262] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:59:17.174 [DEBUG] [Thread-206262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:59:17.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:59:17.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:59:17.177 [DEBUG] [Thread-206262] [transport.py] [_log()] userauth is OK
2026-02-15T14:59:17.177 [DEBUG] [Thread-206262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:59:17.177 [DEBUG] [Thread-206262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:59:17.177 [DEBUG] [Thread-206262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:59:17.177 [DEBUG] [Thread-206262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:59:17.203 [INFO] [Thread-206262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:59:17.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:59:17.801 [DEBUG] [Thread-206262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:59:17.801 [DEBUG] [Thread-206262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:59:17.801 [DEBUG] [Thread-206262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:59:17.842 [DEBUG] [Thread-206262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:59:17.843 [DEBUG] [Thread-206262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:59:17.846 [DEBUG] [Thread-206262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:59:17.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:59:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:59:17.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:59:17.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:59:17.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:59:17.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:59:17.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:59:17.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:59:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:59:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.540721 -999.00  +23.90  15.18     23   +1.70 1 1 1 1 1   888    0 22.63 5.55 ----- 15.2 15.2 149.6 23.3 31.0 -29.9 30.4 -29.7 31.8 -27.8 32.7 -30.4
2026-02-15T14:59:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:59:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:59:17.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.540721
2026-02-15T14:59:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:59:17.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:59:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:59:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:59:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:59:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:58:45', tmtdew=26.53, humidity=16.98, cloud=0.0, wind=15.93, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:58:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:59:17.875 [DEBUG] [Thread-206262] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:59:17.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:59:17.971 [DEBUG] [Thread-206265] [transport.py] [_log()] starting thread (client mode): 0xa2d68520
2026-02-15T14:59:17.971 [DEBUG] [Thread-206265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:59:17.986 [DEBUG] [Thread-206265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:59:17.986 [INFO] [Thread-206265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:59:17.994 [DEBUG] [Thread-206265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:59:17.994 [DEBUG] [Thread-206265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:59:17.994 [DEBUG] [Thread-206265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:59:17.994 [DEBUG] [Thread-206265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:17.994 [DEBUG] [Thread-206265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:17.994 [DEBUG] [Thread-206265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] client lang: <none>
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] server lang: <none>
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] kex follows: False
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:59:17.995 [DEBUG] [Thread-206265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:59:17.996 [DEBUG] [Thread-206265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:59:17.996 [DEBUG] [Thread-206265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:59:17.996 [DEBUG] [Thread-206265] [transport.py] [_log()] Compression: none
2026-02-15T14:59:17.996 [DEBUG] [Thread-206265] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:59:18.052 [DEBUG] [Thread-206265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:59:18.053 [DEBUG] [Thread-206265] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:59:18.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:59:18.054 [DEBUG] [Thread-206265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:59:18.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:59:18.110 [DEBUG] [Thread-206265] [transport.py] [_log()] userauth is OK
2026-02-15T14:59:18.110 [DEBUG] [Thread-206265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:59:18.110 [DEBUG] [Thread-206265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:59:18.110 [DEBUG] [Thread-206265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:59:18.110 [DEBUG] [Thread-206265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:59:18.134 [INFO] [Thread-206265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:59:18.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:59:18.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:59:18.942 [DEBUG] [Thread-206265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:59:18.942 [DEBUG] [Thread-206265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:59:18.991 [DEBUG] [Thread-206265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:59:18.991 [DEBUG] [Thread-206265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:59:19.000 [DEBUG] [Thread-206265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:59:19.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:59:19.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:59:19.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:59:19.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:59:19.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:59:19.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:59:19.037 [DEBUG] [Thread-206265] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:59:19.285 [DEBUG] [Thread-206267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:34.350 [DEBUG] [Thread-206268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:46.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:46.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:49.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T14:59:49.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T14:59:49.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T14:59:49.387 [DEBUG] [Thread-206269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 59, 21), 26.18, 17.39, 0.0, 18.46, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T14:59:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:59:21
2026-02-15T14:59:51.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T14:59:52.085 [DEBUG] [Thread-206270] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-15T14:59:52.085 [DEBUG] [Thread-206270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:59:52.104 [DEBUG] [Thread-206270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T14:59:52.105 [INFO] [Thread-206270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T14:59:52.107 [DEBUG] [Thread-206270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:59:52.107 [DEBUG] [Thread-206270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T14:59:52.107 [DEBUG] [Thread-206270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:59:52.107 [DEBUG] [Thread-206270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] client lang: <none>
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] server lang: <none>
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] kex follows: False
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] Compression: none
2026-02-15T14:59:52.108 [DEBUG] [Thread-206270] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:59:52.126 [DEBUG] [Thread-206270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:59:52.126 [DEBUG] [Thread-206270] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:59:52.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T14:59:52.127 [DEBUG] [Thread-206270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T14:59:52.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:59:52.129 [DEBUG] [Thread-206270] [transport.py] [_log()] userauth is OK
2026-02-15T14:59:52.130 [DEBUG] [Thread-206270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:59:52.130 [DEBUG] [Thread-206270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:59:52.130 [DEBUG] [Thread-206270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T14:59:52.130 [DEBUG] [Thread-206270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:59:52.165 [INFO] [Thread-206270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:59:52.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:59:52.810 [DEBUG] [Thread-206270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:59:52.811 [DEBUG] [Thread-206270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:59:52.811 [DEBUG] [Thread-206270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T14:59:52.851 [DEBUG] [Thread-206270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:59:52.851 [DEBUG] [Thread-206270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:59:52.854 [DEBUG] [Thread-206270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:59:52.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:59:52.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T14:59:52.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T14:59:52.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T14:59:52.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:59:52.876 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T14:59:52.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:59:52.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:59:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T14:59:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.541069 -999.00  +23.90  19.41     23   +1.80 1 1 1 1 1   888    0 22.20 6.95 ----- 19.4 19.4 167.8 23.6 31.0 -29.5 30.4 -28.9 31.8 -27.7 32.8 -29.7
2026-02-15T14:59:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T14:59:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T14:59:52.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.541069
2026-02-15T14:59:52.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T14:59:52.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T14:59:52.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T14:59:52.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T14:59:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T14:59:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:59:21', tmtdew=26.18, humidity=17.39, cloud=0.0, wind=18.46, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:59:08.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T14:59:52.878 [DEBUG] [Thread-206270] [transport.py] [_log()] EOF in transport thread
2026-02-15T14:59:52.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T14:59:52.978 [DEBUG] [Thread-206273] [transport.py] [_log()] starting thread (client mode): 0xa57c32e0
2026-02-15T14:59:52.978 [DEBUG] [Thread-206273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T14:59:52.992 [DEBUG] [Thread-206273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T14:59:52.992 [INFO] [Thread-206273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T14:59:53.001 [DEBUG] [Thread-206273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] client lang: <none>
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] server lang: <none>
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] kex follows: False
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] Compression: none
2026-02-15T14:59:53.002 [DEBUG] [Thread-206273] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T14:59:53.060 [DEBUG] [Thread-206273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T14:59:53.060 [DEBUG] [Thread-206273] [transport.py] [_log()] Switch to new keys ...
2026-02-15T14:59:53.061 [DEBUG] [Thread-206273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T14:59:53.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T14:59:53.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T14:59:53.116 [DEBUG] [Thread-206273] [transport.py] [_log()] userauth is OK
2026-02-15T14:59:53.116 [DEBUG] [Thread-206273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T14:59:53.116 [DEBUG] [Thread-206273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T14:59:53.116 [DEBUG] [Thread-206273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T14:59:53.116 [DEBUG] [Thread-206273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T14:59:53.138 [INFO] [Thread-206273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T14:59:53.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T14:59:53.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T14:59:53.550 [DEBUG] [Thread-206275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T14:59:53.979 [DEBUG] [Thread-206273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T14:59:53.980 [DEBUG] [Thread-206273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T14:59:54.028 [DEBUG] [Thread-206273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T14:59:54.028 [DEBUG] [Thread-206273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T14:59:54.037 [DEBUG] [Thread-206273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T14:59:54.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T14:59:54.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T14:59:54.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T14:59:54.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T14:59:54.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T14:59:54.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T14:59:54.074 [DEBUG] [Thread-206273] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:00:04.420 [DEBUG] [Thread-206276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:19.472 [DEBUG] [Thread-206277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:24.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:00:24.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:00:24.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:00:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 14, 59, 56), 26.39, 17.16, 0.0, 28.85, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:00:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 14:59:56
2026-02-15T15:00:26.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:00:26.604 [DEBUG] [Thread-206278] [transport.py] [_log()] starting thread (client mode): 0xa2dc1de0
2026-02-15T15:00:26.605 [DEBUG] [Thread-206278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:00:26.625 [DEBUG] [Thread-206278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:00:26.625 [INFO] [Thread-206278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:00:26.629 [DEBUG] [Thread-206278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] client lang: <none>
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] server lang: <none>
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] kex follows: False
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] Compression: none
2026-02-15T15:00:26.630 [DEBUG] [Thread-206278] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:00:26.650 [DEBUG] [Thread-206278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:00:26.651 [DEBUG] [Thread-206278] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:00:26.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:00:26.652 [DEBUG] [Thread-206278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:00:26.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:00:26.654 [DEBUG] [Thread-206278] [transport.py] [_log()] userauth is OK
2026-02-15T15:00:26.654 [DEBUG] [Thread-206278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:00:26.654 [DEBUG] [Thread-206278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:00:26.655 [DEBUG] [Thread-206278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:00:26.655 [DEBUG] [Thread-206278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:00:26.676 [INFO] [Thread-206278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:00:26.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:00:27.356 [DEBUG] [Thread-206278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:00:27.356 [DEBUG] [Thread-206278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:00:27.356 [DEBUG] [Thread-206278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:00:27.398 [DEBUG] [Thread-206278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:00:27.398 [DEBUG] [Thread-206278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:00:27.401 [DEBUG] [Thread-206278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:00:27.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:00:27.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:00:27.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:00:27.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:00:27.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:00:27.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:00:27.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:00:27.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:00:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:00:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.541416 -999.00  +24.00  23.82     23   +1.70 1 1 1 1 1   888    0 22.40 7.43 ----- 23.8 23.8 147.6 28.8 31.1 -30.1 30.4 -29.8 31.8 -29.8 32.6 -32.6
2026-02-15T15:00:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:00:27.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:00:27.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.541416
2026-02-15T15:00:27.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:00:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:00:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:00:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:00:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:00:27.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T14:59:56', tmtdew=26.39, humidity=17.16, cloud=0.0, wind=28.85, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T12:59:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:00:27.425 [DEBUG] [Thread-206278] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:00:27.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:00:27.520 [DEBUG] [Thread-206281] [transport.py] [_log()] starting thread (client mode): 0xa57c0040
2026-02-15T15:00:27.521 [DEBUG] [Thread-206281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:00:27.536 [DEBUG] [Thread-206281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:00:27.536 [INFO] [Thread-206281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:00:27.544 [DEBUG] [Thread-206281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:00:27.544 [DEBUG] [Thread-206281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:00:27.544 [DEBUG] [Thread-206281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:00:27.544 [DEBUG] [Thread-206281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] client lang: <none>
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] server lang: <none>
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] kex follows: False
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] Compression: none
2026-02-15T15:00:27.545 [DEBUG] [Thread-206281] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:00:27.604 [DEBUG] [Thread-206281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:00:27.605 [DEBUG] [Thread-206281] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:00:27.606 [DEBUG] [Thread-206281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:00:27.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:00:27.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:00:27.661 [DEBUG] [Thread-206281] [transport.py] [_log()] userauth is OK
2026-02-15T15:00:27.661 [DEBUG] [Thread-206281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:00:27.661 [DEBUG] [Thread-206281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:00:27.661 [DEBUG] [Thread-206281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:00:27.661 [DEBUG] [Thread-206281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:00:27.680 [INFO] [Thread-206281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:00:27.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:00:27.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:00:28.489 [DEBUG] [Thread-206281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:00:28.490 [DEBUG] [Thread-206281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:00:28.537 [DEBUG] [Thread-206281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:00:28.538 [DEBUG] [Thread-206281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:00:28.547 [DEBUG] [Thread-206281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:00:28.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:00:28.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:00:28.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:00:28.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:00:28.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:00:28.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:00:28.584 [DEBUG] [Thread-206281] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:00:34.506 [DEBUG] [Thread-206283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:46.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:46.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:49.556 [DEBUG] [Thread-206284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:53.619 [DEBUG] [Thread-206285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:00:58.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:00:58.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:00:58.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:01:00.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 0, 32), 26.2, 17.34, 0.0, 23.82, 24.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:01:00.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:00:32
2026-02-15T15:01:01.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:01:01.167 [DEBUG] [Thread-206286] [transport.py] [_log()] starting thread (client mode): 0xa2d027d0
2026-02-15T15:01:01.168 [DEBUG] [Thread-206286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:01:01.188 [DEBUG] [Thread-206286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:01:01.188 [INFO] [Thread-206286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:01.191 [DEBUG] [Thread-206286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] client lang: <none>
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] server lang: <none>
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] kex follows: False
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] Compression: none
2026-02-15T15:01:01.192 [DEBUG] [Thread-206286] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:01:01.214 [DEBUG] [Thread-206286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:01:01.215 [DEBUG] [Thread-206286] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:01:01.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:01:01.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:01:01.217 [DEBUG] [Thread-206286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:01:01.218 [DEBUG] [Thread-206286] [transport.py] [_log()] userauth is OK
2026-02-15T15:01:01.218 [DEBUG] [Thread-206286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:01:01.218 [DEBUG] [Thread-206286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:01:01.218 [DEBUG] [Thread-206286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:01:01.218 [DEBUG] [Thread-206286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:01:01.242 [INFO] [Thread-206286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:01:01.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:01:01.831 [DEBUG] [Thread-206286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:01:01.831 [DEBUG] [Thread-206286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:01:01.832 [DEBUG] [Thread-206286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:01:01.872 [DEBUG] [Thread-206286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:01:01.873 [DEBUG] [Thread-206286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:01:01.876 [DEBUG] [Thread-206286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:01:01.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:01:01.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:01:01.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:01:01.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:01:01.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:01:01.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:01:01.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:01:01.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:01:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:01:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.542110 -999.00  +24.00  10.12     23   +1.80 1 1 1 1 1   888    0 22.27 9.90 ----- 10.1 10.1 144.6 18.1 31.0 -29.8 30.4 -29.1 31.8 -28.4 32.7 -30.4
2026-02-15T15:01:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:01:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:01:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.542110
2026-02-15T15:01:01.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:01:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:01:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:01:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:01:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:01:01.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:00:32', tmtdew=26.2, humidity=17.34, cloud=0.0, wind=23.82, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:00:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:01:01.901 [DEBUG] [Thread-206286] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:01:01.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:01:02.001 [DEBUG] [Thread-206289] [transport.py] [_log()] starting thread (client mode): 0xa57e0460
2026-02-15T15:01:02.001 [DEBUG] [Thread-206289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:01:02.015 [DEBUG] [Thread-206289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:01:02.015 [INFO] [Thread-206289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] client lang: <none>
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] server lang: <none>
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] kex follows: False
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] Compression: none
2026-02-15T15:01:02.023 [DEBUG] [Thread-206289] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:01:02.085 [DEBUG] [Thread-206289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:01:02.085 [DEBUG] [Thread-206289] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:01:02.086 [DEBUG] [Thread-206289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:01:02.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:01:02.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:01:02.142 [DEBUG] [Thread-206289] [transport.py] [_log()] userauth is OK
2026-02-15T15:01:02.142 [DEBUG] [Thread-206289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:01:02.142 [DEBUG] [Thread-206289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:01:02.142 [DEBUG] [Thread-206289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:01:02.142 [DEBUG] [Thread-206289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:01:02.162 [INFO] [Thread-206289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:01:02.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:01:02.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:01:02.967 [DEBUG] [Thread-206289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:01:02.967 [DEBUG] [Thread-206289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:01:03.015 [DEBUG] [Thread-206289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:01:03.015 [DEBUG] [Thread-206289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:01:03.024 [DEBUG] [Thread-206289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:01:03.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:01: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')
2026-02-15T15:01:03.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:01:03.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:01:03.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:01:03.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:01:03.058 [DEBUG] [Thread-206289] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:01:04.598 [DEBUG] [Thread-206291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:01:19.651 [DEBUG] [Thread-206292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:01:33.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:01:33.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:01:33.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:01:34.687 [DEBUG] [Thread-206293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:01:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 1, 7), 25.84, 17.72, 0.0, 19.82, 23.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:01:35.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:01:07
2026-02-15T15:01:36.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:01:36.227 [DEBUG] [Thread-206294] [transport.py] [_log()] starting thread (client mode): 0xa2dc3970
2026-02-15T15:01:36.228 [DEBUG] [Thread-206294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:01:36.247 [DEBUG] [Thread-206294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:01:36.247 [INFO] [Thread-206294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] client lang: <none>
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] server lang: <none>
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] kex follows: False
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] Compression: none
2026-02-15T15:01:36.251 [DEBUG] [Thread-206294] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:01:36.269 [DEBUG] [Thread-206294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:01:36.270 [DEBUG] [Thread-206294] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:01:36.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:01:36.271 [DEBUG] [Thread-206294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:01:36.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:01:36.313 [DEBUG] [Thread-206294] [transport.py] [_log()] userauth is OK
2026-02-15T15:01:36.313 [DEBUG] [Thread-206294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:01:36.313 [DEBUG] [Thread-206294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:01:36.313 [DEBUG] [Thread-206294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:01:36.313 [DEBUG] [Thread-206294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:01:36.350 [INFO] [Thread-206294] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:01:36.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:01:36.948 [DEBUG] [Thread-206294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:01:36.948 [DEBUG] [Thread-206294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:01:36.949 [DEBUG] [Thread-206294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:01:36.989 [DEBUG] [Thread-206294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:01:36.990 [DEBUG] [Thread-206294] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:01:36.993 [DEBUG] [Thread-206294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:01:37.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:01:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:01:37.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:01:37.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:01:37.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:01:37.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:01:37.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:01:37.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:01:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:01:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.542457 -999.00  +24.00  12.85     23   +1.80 1 1 1 1 1   888    0 22.36 13.47 ----- 12.8 12.8 146.8 17.2 31.1 -28.8 30.5 -28.4 31.9 -28.1 32.8 -29.7
2026-02-15T15:01:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:01:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:01:37.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.542457
2026-02-15T15:01:37.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:01:37.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:01:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:01:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:01:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:01:37.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:01:07', tmtdew=25.84, humidity=17.72, cloud=0.0, wind=19.82, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:01:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:01:37.020 [DEBUG] [Thread-206294] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:01:37.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:01:37.113 [DEBUG] [Thread-206297] [transport.py] [_log()] starting thread (client mode): 0xa2d4c520
2026-02-15T15:01:37.113 [DEBUG] [Thread-206297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:01:37.128 [DEBUG] [Thread-206297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:01:37.128 [INFO] [Thread-206297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:01:37.137 [DEBUG] [Thread-206297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:01:37.137 [DEBUG] [Thread-206297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:01:37.137 [DEBUG] [Thread-206297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] client lang: <none>
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] server lang: <none>
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] kex follows: False
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] Compression: none
2026-02-15T15:01:37.138 [DEBUG] [Thread-206297] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:01:37.193 [DEBUG] [Thread-206297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:01:37.194 [DEBUG] [Thread-206297] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:01:37.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:01:37.195 [DEBUG] [Thread-206297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:01:37.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:01:37.249 [DEBUG] [Thread-206297] [transport.py] [_log()] userauth is OK
2026-02-15T15:01:37.249 [DEBUG] [Thread-206297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:01:37.250 [DEBUG] [Thread-206297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:01:37.250 [DEBUG] [Thread-206297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:01:37.250 [DEBUG] [Thread-206297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:01:37.269 [INFO] [Thread-206297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:01:37.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:01:37.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:01:38.114 [DEBUG] [Thread-206297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:01:38.114 [DEBUG] [Thread-206297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:01:38.162 [DEBUG] [Thread-206297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:01:38.162 [DEBUG] [Thread-206297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:01:38.171 [DEBUG] [Thread-206297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:01:38.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:01:38.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:01:38.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:01:38.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:01:38.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:01:38.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:01:38.212 [DEBUG] [Thread-206297] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:01:46.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:01:46.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:01:49.723 [DEBUG] [Thread-206299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:01:53.658 [DEBUG] [Thread-206300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:04.784 [DEBUG] [Thread-206301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:08.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:02:08.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:02:08.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:02:10.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 1, 42), 26.38, 17.38, 0.0, 22.48, 24.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:02:10.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:01:42
2026-02-15T15:02:10.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:02:10.679 [DEBUG] [Thread-206302] [transport.py] [_log()] starting thread (client mode): 0xa2d02140
2026-02-15T15:02:10.680 [DEBUG] [Thread-206302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:02:10.700 [DEBUG] [Thread-206302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:02:10.700 [INFO] [Thread-206302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] client lang: <none>
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] server lang: <none>
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] kex follows: False
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] Compression: none
2026-02-15T15:02:10.703 [DEBUG] [Thread-206302] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:02:10.717 [DEBUG] [Thread-206302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:02:10.718 [DEBUG] [Thread-206302] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:02:10.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:02:10.719 [DEBUG] [Thread-206302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:02:10.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:02:10.720 [DEBUG] [Thread-206302] [transport.py] [_log()] userauth is OK
2026-02-15T15:02:10.721 [DEBUG] [Thread-206302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:02:10.721 [DEBUG] [Thread-206302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:02:10.721 [DEBUG] [Thread-206302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:02:10.721 [DEBUG] [Thread-206302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:02:10.757 [INFO] [Thread-206302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:02:10.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:02:11.391 [DEBUG] [Thread-206302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:02:11.392 [DEBUG] [Thread-206302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:02:11.392 [DEBUG] [Thread-206302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:02:11.432 [DEBUG] [Thread-206302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:02:11.432 [DEBUG] [Thread-206302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:02:11.435 [DEBUG] [Thread-206302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:02:11.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:02:11.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:02:11.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:02:11.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:02:11.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:02:11.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:02:11.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:02:11.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:02:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:02:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.542805 -999.00  +24.00  16.37     23   +1.80 1 1 1 1 1   888    0 22.72 14.72 ----- 16.4 16.4 164.4 18.2 31.1 -29.7 30.5 -28.7 31.9 -28.4 33.0 -29.5
2026-02-15T15:02:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:02:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:02:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.542805
2026-02-15T15:02:11.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:02:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:02:11.453 [DEBUG] [Thread-206302] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:02:11.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:02:11.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:02:11.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:02:11.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:01:42', tmtdew=26.38, humidity=17.38, cloud=0.0, wind=22.48, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:01:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:02:11.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:02:11.540 [DEBUG] [Thread-206305] [transport.py] [_log()] starting thread (client mode): 0xa57c3760
2026-02-15T15:02:11.540 [DEBUG] [Thread-206305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:02:11.554 [DEBUG] [Thread-206305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:02:11.554 [INFO] [Thread-206305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] client lang: <none>
2026-02-15T15:02:11.562 [DEBUG] [Thread-206305] [transport.py] [_log()] server lang: <none>
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] kex follows: False
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] Compression: none
2026-02-15T15:02:11.563 [DEBUG] [Thread-206305] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:02:11.620 [DEBUG] [Thread-206305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:02:11.621 [DEBUG] [Thread-206305] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:02:11.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:02:11.622 [DEBUG] [Thread-206305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:02:11.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:02:11.677 [DEBUG] [Thread-206305] [transport.py] [_log()] userauth is OK
2026-02-15T15:02:11.678 [DEBUG] [Thread-206305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:02:11.678 [DEBUG] [Thread-206305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:02:11.678 [DEBUG] [Thread-206305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:02:11.678 [DEBUG] [Thread-206305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:02:11.698 [INFO] [Thread-206305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:02:11.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:02:11.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:02:12.490 [DEBUG] [Thread-206305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:02:12.491 [DEBUG] [Thread-206305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:02:12.539 [DEBUG] [Thread-206305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:02:12.539 [DEBUG] [Thread-206305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:02:12.548 [DEBUG] [Thread-206305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:02:12.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:02:12.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:02:12.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:02:12.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:02:12.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:02:12.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:02:12.584 [DEBUG] [Thread-206305] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:02:19.823 [DEBUG] [Thread-206307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:34.875 [DEBUG] [Thread-206308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:42.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:02:42.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:02:42.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:02:44.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 2, 18), 25.63, 18.33, 0.0, 21.44, 23.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:02:44.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:02:18
2026-02-15T15:02:44.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:02:44.937 [DEBUG] [Thread-206309] [transport.py] [_log()] starting thread (client mode): 0xa2d6b280
2026-02-15T15:02:44.937 [DEBUG] [Thread-206309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:02:44.956 [DEBUG] [Thread-206309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:02:44.956 [INFO] [Thread-206309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:44.960 [DEBUG] [Thread-206309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] client lang: <none>
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] server lang: <none>
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] kex follows: False
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] Compression: none
2026-02-15T15:02:44.961 [DEBUG] [Thread-206309] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:02:44.970 [DEBUG] [Thread-206309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:02:44.971 [DEBUG] [Thread-206309] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:02:44.971 [DEBUG] [Thread-206309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:02:44.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:02:44.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:02:44.973 [DEBUG] [Thread-206309] [transport.py] [_log()] userauth is OK
2026-02-15T15:02:44.973 [DEBUG] [Thread-206309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:02:44.973 [DEBUG] [Thread-206309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:02:44.973 [DEBUG] [Thread-206309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:02:44.973 [DEBUG] [Thread-206309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:02:44.997 [INFO] [Thread-206309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:02:44.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:02:45.614 [DEBUG] [Thread-206309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:02:45.614 [DEBUG] [Thread-206309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:02:45.614 [DEBUG] [Thread-206309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:02:45.655 [DEBUG] [Thread-206309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:02:45.655 [DEBUG] [Thread-206309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:02:45.658 [DEBUG] [Thread-206309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:02:45.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:02:45.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:02:45.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:02:45.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:02:45.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:02:45.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:02:45.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:02:45.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:02:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:02:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.543151 -999.00  +24.10  16.02     23   +1.80 1 1 1 1 1   888    0 22.37 15.07 ----- 16.0 16.0 154.2 22.4 31.1 -29.5 30.4 -32.3 32.0 -28.5 32.9 -30.1
2026-02-15T15:02:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:02:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:02:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.543151
2026-02-15T15:02:45.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:02:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:02:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:02:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:02:45.681 [DEBUG] [Thread-206309] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:02:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:02:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:02:18', tmtdew=25.63, humidity=18.33, cloud=0.0, wind=21.44, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:02:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:02:45.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:02:45.775 [DEBUG] [Thread-206312] [transport.py] [_log()] starting thread (client mode): 0xa81d6740
2026-02-15T15:02:45.775 [DEBUG] [Thread-206312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:02:45.790 [DEBUG] [Thread-206312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:02:45.790 [INFO] [Thread-206312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:02:45.797 [DEBUG] [Thread-206312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:02:45.797 [DEBUG] [Thread-206312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:02:45.798 [DEBUG] [Thread-206312] [transport.py] [_log()] client lang: <none>
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] server lang: <none>
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] kex follows: False
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] Compression: none
2026-02-15T15:02:45.799 [DEBUG] [Thread-206312] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:02:45.857 [DEBUG] [Thread-206312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:02:45.858 [DEBUG] [Thread-206312] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:02:45.859 [DEBUG] [Thread-206312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:02:45.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:02:45.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:02:45.913 [DEBUG] [Thread-206312] [transport.py] [_log()] userauth is OK
2026-02-15T15:02:45.913 [DEBUG] [Thread-206312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:02:45.913 [DEBUG] [Thread-206312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:02:45.913 [DEBUG] [Thread-206312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:02:45.914 [DEBUG] [Thread-206312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:02:45.936 [INFO] [Thread-206312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:02:45.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:02:45.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:02:46.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:46.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:46.769 [DEBUG] [Thread-206312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:02:46.769 [DEBUG] [Thread-206312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:02:46.817 [DEBUG] [Thread-206312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:02:46.817 [DEBUG] [Thread-206312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:02:46.831 [DEBUG] [Thread-206312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:02:46.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:02:46.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:02:46.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:02:46.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:02:46.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:02:46.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:02:46.864 [DEBUG] [Thread-206312] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:02:49.908 [DEBUG] [Thread-206314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:02:53.692 [DEBUG] [Thread-206315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:04.960 [DEBUG] [Thread-206316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:16.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:03:16.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:03:16.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:03:18.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 2, 53), 26.83, 16.97, 0.0, 21.97, 24.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:03:18.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:02:53
2026-02-15T15:03:18.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:03:19.138 [DEBUG] [Thread-206317] [transport.py] [_log()] starting thread (client mode): 0xa2d6b520
2026-02-15T15:03:19.138 [DEBUG] [Thread-206317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:03:19.159 [DEBUG] [Thread-206317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:03:19.159 [INFO] [Thread-206317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:03:19.162 [DEBUG] [Thread-206317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:03:19.162 [DEBUG] [Thread-206317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] client lang: <none>
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] server lang: <none>
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] kex follows: False
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:03:19.163 [DEBUG] [Thread-206317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:03:19.164 [DEBUG] [Thread-206317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:03:19.164 [DEBUG] [Thread-206317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:03:19.164 [DEBUG] [Thread-206317] [transport.py] [_log()] Compression: none
2026-02-15T15:03:19.164 [DEBUG] [Thread-206317] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:03:19.183 [DEBUG] [Thread-206317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:03:19.184 [DEBUG] [Thread-206317] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:03:19.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:03:19.185 [DEBUG] [Thread-206317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:03:19.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:03:19.187 [DEBUG] [Thread-206317] [transport.py] [_log()] userauth is OK
2026-02-15T15:03:19.187 [DEBUG] [Thread-206317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:03:19.188 [DEBUG] [Thread-206317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:03:19.188 [DEBUG] [Thread-206317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:03:19.188 [DEBUG] [Thread-206317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:03:19.205 [INFO] [Thread-206317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:03:19.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:03:19.997 [DEBUG] [Thread-206319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:20.008 [DEBUG] [Thread-206317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:03:20.008 [DEBUG] [Thread-206317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:03:20.008 [DEBUG] [Thread-206317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:03:20.050 [DEBUG] [Thread-206317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:03:20.051 [DEBUG] [Thread-206317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:03:20.054 [DEBUG] [Thread-206317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:03:20.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:03:20.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:03:20.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:03:20.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:03:20.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:03:20.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:03:20.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:03:20.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:03:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:03:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.543499 -999.00  +24.00  26.07     22   +1.40 1 1 1 1 1   888    0 22.72 16.71 ----- 26.1 26.1 141.4 29.1 31.1 -30.4 30.6 -29.2 31.8 -29.7 32.7 -31.9
2026-02-15T15:03:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:03:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:03:20.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.543499
2026-02-15T15:03:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:03:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:03:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:03:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:03:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:03:20.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:02:53', tmtdew=26.83, humidity=16.97, cloud=0.0, wind=21.97, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:02:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:03:20.079 [DEBUG] [Thread-206317] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:03:20.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:03:20.176 [DEBUG] [Thread-206321] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-15T15:03:20.176 [DEBUG] [Thread-206321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:03:20.195 [DEBUG] [Thread-206321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:03:20.195 [INFO] [Thread-206321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:03:20.202 [DEBUG] [Thread-206321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] client lang: <none>
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] server lang: <none>
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] kex follows: False
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:03:20.203 [DEBUG] [Thread-206321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:03:20.204 [DEBUG] [Thread-206321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:03:20.204 [DEBUG] [Thread-206321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:03:20.204 [DEBUG] [Thread-206321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:03:20.204 [DEBUG] [Thread-206321] [transport.py] [_log()] Compression: none
2026-02-15T15:03:20.204 [DEBUG] [Thread-206321] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:03:20.262 [DEBUG] [Thread-206321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:03:20.262 [DEBUG] [Thread-206321] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:03:20.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:03:20.264 [DEBUG] [Thread-206321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:03:20.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:03:20.322 [DEBUG] [Thread-206321] [transport.py] [_log()] userauth is OK
2026-02-15T15:03:20.322 [DEBUG] [Thread-206321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:03:20.322 [DEBUG] [Thread-206321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:03:20.322 [DEBUG] [Thread-206321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:03:20.323 [DEBUG] [Thread-206321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:03:20.342 [INFO] [Thread-206321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:03: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-02-15T15:03:20.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:03:21.171 [DEBUG] [Thread-206321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:03:21.172 [DEBUG] [Thread-206321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:03:21.219 [DEBUG] [Thread-206321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:03:21.220 [DEBUG] [Thread-206321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:03:21.229 [DEBUG] [Thread-206321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:03:21.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:03:21.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:03:21.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:03:21.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:03:21.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:03:21.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:03:21.266 [DEBUG] [Thread-206321] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:03:35.031 [DEBUG] [Thread-206323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:46.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:46.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:50.083 [DEBUG] [Thread-206324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:51.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:03:51.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:03:51.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:03:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 3, 29), 26.47, 17.38, 0.0, 18.42, 24.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:03:53.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:03:29
2026-02-15T15:03:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:03:53.719 [DEBUG] [Thread-206325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:03:53.819 [DEBUG] [Thread-206326] [transport.py] [_log()] starting thread (client mode): 0xa57c1c30
2026-02-15T15:03:53.819 [DEBUG] [Thread-206326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:03:53.838 [DEBUG] [Thread-206326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:03:53.838 [INFO] [Thread-206326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] client lang: <none>
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] server lang: <none>
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] kex follows: False
2026-02-15T15:03:53.841 [DEBUG] [Thread-206326] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:03:53.842 [DEBUG] [Thread-206326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:03:53.842 [DEBUG] [Thread-206326] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:03:53.842 [DEBUG] [Thread-206326] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:03:53.842 [DEBUG] [Thread-206326] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:03:53.842 [DEBUG] [Thread-206326] [transport.py] [_log()] Compression: none
2026-02-15T15:03:53.842 [DEBUG] [Thread-206326] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:03:53.850 [DEBUG] [Thread-206326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:03:53.850 [DEBUG] [Thread-206326] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:03:53.851 [DEBUG] [Thread-206326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:03:53.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:03:53.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:03:53.853 [DEBUG] [Thread-206326] [transport.py] [_log()] userauth is OK
2026-02-15T15:03:53.853 [DEBUG] [Thread-206326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:03:53.853 [DEBUG] [Thread-206326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:03:53.854 [DEBUG] [Thread-206326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:03:53.854 [DEBUG] [Thread-206326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:03:53.875 [INFO] [Thread-206326] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:03:53.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:03:54.538 [DEBUG] [Thread-206326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:03:54.539 [DEBUG] [Thread-206326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:03:54.539 [DEBUG] [Thread-206326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:03:54.580 [DEBUG] [Thread-206326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:03:54.580 [DEBUG] [Thread-206326] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:03:54.583 [DEBUG] [Thread-206326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:03:54.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:03:54.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:03:54.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:03:54.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:03:54.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:03:54.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:03:54.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:03:54.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:03:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:03:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.543846 -999.00  +23.50  15.07     23   +1.30 1 1 1 1 1   888    0 22.64 17.45 ----- 15.1 15.1 153.0 26.9 30.9 -31.0 30.4 -30.7 31.8 -29.1 32.6 -31.6
2026-02-15T15:03:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:03:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:03:54.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.543846
2026-02-15T15:03:54.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:03:54.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:03:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:03:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:03:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:03:54.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:03:29', tmtdew=26.47, humidity=17.38, cloud=0.0, wind=18.42, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:03:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:03:54.611 [DEBUG] [Thread-206326] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:03:54.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:03:54.707 [DEBUG] [Thread-206329] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-15T15:03:54.707 [DEBUG] [Thread-206329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:03:54.723 [DEBUG] [Thread-206329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:03:54.723 [INFO] [Thread-206329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] client lang: <none>
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] server lang: <none>
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] kex follows: False
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:03:54.731 [DEBUG] [Thread-206329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:03:54.732 [DEBUG] [Thread-206329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:03:54.732 [DEBUG] [Thread-206329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:03:54.732 [DEBUG] [Thread-206329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:03:54.732 [DEBUG] [Thread-206329] [transport.py] [_log()] Compression: none
2026-02-15T15:03:54.732 [DEBUG] [Thread-206329] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:03:54.790 [DEBUG] [Thread-206329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:03:54.791 [DEBUG] [Thread-206329] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:03:54.791 [DEBUG] [Thread-206329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:03:54.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:03:54.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:03:54.847 [DEBUG] [Thread-206329] [transport.py] [_log()] userauth is OK
2026-02-15T15:03:54.848 [DEBUG] [Thread-206329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:03:54.848 [DEBUG] [Thread-206329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:03:54.848 [DEBUG] [Thread-206329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:03:54.848 [DEBUG] [Thread-206329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:03:54.867 [INFO] [Thread-206329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:03:54.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:03:54.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:03:55.719 [DEBUG] [Thread-206329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:03:55.719 [DEBUG] [Thread-206329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:03:55.768 [DEBUG] [Thread-206329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:03:55.768 [DEBUG] [Thread-206329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:03:55.777 [DEBUG] [Thread-206329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:03:55.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:03:55.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:03:55.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:03:55.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:03:55.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:03:55.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:03:55.814 [DEBUG] [Thread-206329] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:04:05.118 [DEBUG] [Thread-206331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:04:20.164 [DEBUG] [Thread-206332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:04:25.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:04:25.836 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:04:25.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:04:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 4, 4), 26.64, 17.18, 0.0, 18.69, 24.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:04:27.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:04:04
2026-02-15T15:04:28.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:04:28.369 [DEBUG] [Thread-206333] [transport.py] [_log()] starting thread (client mode): 0xa81d7430
2026-02-15T15:04:28.369 [DEBUG] [Thread-206333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:04:28.389 [DEBUG] [Thread-206333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:04:28.389 [INFO] [Thread-206333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] client lang: <none>
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] server lang: <none>
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] kex follows: False
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:04:28.392 [DEBUG] [Thread-206333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:04:28.393 [DEBUG] [Thread-206333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:04:28.393 [DEBUG] [Thread-206333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:04:28.393 [DEBUG] [Thread-206333] [transport.py] [_log()] Compression: none
2026-02-15T15:04:28.393 [DEBUG] [Thread-206333] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:04:28.410 [DEBUG] [Thread-206333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:04:28.411 [DEBUG] [Thread-206333] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:04:28.411 [DEBUG] [Thread-206333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:04:28.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:04:28.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:04:28.414 [DEBUG] [Thread-206333] [transport.py] [_log()] userauth is OK
2026-02-15T15:04:28.414 [DEBUG] [Thread-206333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:04:28.414 [DEBUG] [Thread-206333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:04:28.414 [DEBUG] [Thread-206333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:04:28.414 [DEBUG] [Thread-206333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:04:28.433 [INFO] [Thread-206333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:04:28.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:04:29.100 [DEBUG] [Thread-206333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:04:29.101 [DEBUG] [Thread-206333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:04:29.101 [DEBUG] [Thread-206333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:04:29.141 [DEBUG] [Thread-206333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:04:29.142 [DEBUG] [Thread-206333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:04:29.145 [DEBUG] [Thread-206333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:04:29.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:04:29.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:04:29.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:04:29.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:04:29.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:04:29.171 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:04:29.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:04:29.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:04:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:04:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.544194 -999.00  +23.50  14.18     23   +1.50 1 1 1 1 1   888    0 22.82 18.41 ----- 14.2 14.2 164.6 21.6 30.9 -30.3 30.3 -28.9 31.8 -28.3 32.7 -31.5
2026-02-15T15:04:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:04:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:04:29.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.544194
2026-02-15T15:04:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:04:29.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:04:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:04:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:04:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:04:29.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:04:04', tmtdew=26.64, humidity=17.18, cloud=0.0, wind=18.69, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:03:38.362', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:04:29.174 [DEBUG] [Thread-206333] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:04:29.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:04:29.271 [DEBUG] [Thread-206336] [transport.py] [_log()] starting thread (client mode): 0xa81d7be0
2026-02-15T15:04:29.271 [DEBUG] [Thread-206336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:04:29.286 [DEBUG] [Thread-206336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:04:29.286 [INFO] [Thread-206336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:04:29.293 [DEBUG] [Thread-206336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] client lang: <none>
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] server lang: <none>
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] kex follows: False
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:04:29.294 [DEBUG] [Thread-206336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:04:29.295 [DEBUG] [Thread-206336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:04:29.295 [DEBUG] [Thread-206336] [transport.py] [_log()] Compression: none
2026-02-15T15:04:29.295 [DEBUG] [Thread-206336] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:04:29.350 [DEBUG] [Thread-206336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:04:29.351 [DEBUG] [Thread-206336] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:04:29.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:04:29.352 [DEBUG] [Thread-206336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:04:29.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:04:29.407 [DEBUG] [Thread-206336] [transport.py] [_log()] userauth is OK
2026-02-15T15:04:29.407 [DEBUG] [Thread-206336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:04:29.407 [DEBUG] [Thread-206336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:04:29.407 [DEBUG] [Thread-206336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:04:29.407 [DEBUG] [Thread-206336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:04:29.426 [INFO] [Thread-206336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:04:29.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:04:29.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:04:30.357 [DEBUG] [Thread-206336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:04:30.357 [DEBUG] [Thread-206336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:04:30.405 [DEBUG] [Thread-206336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:04:30.405 [DEBUG] [Thread-206336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:04:30.414 [DEBUG] [Thread-206336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:04:30.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:04:30.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:04: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
2026-02-15T15:04:30.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:04:30.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:04:30.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:04:30.449 [DEBUG] [Thread-206336] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:04:35.198 [DEBUG] [Thread-206338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:04:46.909 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:04:46.910 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:04:50.259 [DEBUG] [Thread-206339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:04:53.761 [DEBUG] [Thread-206340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:05:00.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:05:00.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:05:02.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 4, 39), 27.77, 15.82, 0.0, 15.46, 25.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:05:02.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:04:39
2026-02-15T15:05:02.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:05:02.961 [DEBUG] [Thread-206341] [transport.py] [_log()] starting thread (client mode): 0xa2d4feb0
2026-02-15T15:05:02.961 [DEBUG] [Thread-206341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:05:02.981 [DEBUG] [Thread-206341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:05:02.981 [INFO] [Thread-206341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] client lang: <none>
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] server lang: <none>
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] kex follows: False
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] Compression: none
2026-02-15T15:05:02.984 [DEBUG] [Thread-206341] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:05:03.000 [DEBUG] [Thread-206341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:05:03.001 [DEBUG] [Thread-206341] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:05:03.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:05:03.001 [DEBUG] [Thread-206341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:05:03.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:05:03.002 [DEBUG] [Thread-206341] [transport.py] [_log()] userauth is OK
2026-02-15T15:05:03.003 [DEBUG] [Thread-206341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:05:03.003 [DEBUG] [Thread-206341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:05:03.003 [DEBUG] [Thread-206341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:05:03.003 [DEBUG] [Thread-206341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:05:03.019 [INFO] [Thread-206341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:05:03.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:05:05.297 [DEBUG] [Thread-206343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:05.756 [DEBUG] [Thread-206341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:05:05.757 [DEBUG] [Thread-206341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:05:05.757 [DEBUG] [Thread-206341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:05:05.798 [DEBUG] [Thread-206341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:05:05.798 [DEBUG] [Thread-206341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:05:05.801 [DEBUG] [Thread-206341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:05:05.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:05:05.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:05:05.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:05:05.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:05:05.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:05:05.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:05:05.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:05:05.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:05:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:05:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.544541 -999.00  +23.60   9.96     23   +1.40 1 1 1 1 1   888    0 22.73 20.09 ----- 10.0 10.0 186.8 17.6 30.9 -30.4 30.1 -34.3 31.7 -28.4 32.6 -31.1
2026-02-15T15:05:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:05:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:05:05.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.544541
2026-02-15T15:05:05.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:05:05.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:05:05.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:05:05.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:05:05.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:05:05.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:04:39', tmtdew=27.77, humidity=15.82, cloud=0.0, wind=15.46, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:04:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:05:05.836 [DEBUG] [Thread-206341] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:05:05.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:05:05.932 [DEBUG] [Thread-206345] [transport.py] [_log()] starting thread (client mode): 0xa2db72b0
2026-02-15T15:05:05.933 [DEBUG] [Thread-206345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:05:05.947 [DEBUG] [Thread-206345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:05:05.947 [INFO] [Thread-206345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] client lang: <none>
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] server lang: <none>
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] kex follows: False
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:05:05.955 [DEBUG] [Thread-206345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:05:05.956 [DEBUG] [Thread-206345] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:05:05.956 [DEBUG] [Thread-206345] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:05:05.956 [DEBUG] [Thread-206345] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:05:05.956 [DEBUG] [Thread-206345] [transport.py] [_log()] Compression: none
2026-02-15T15:05:05.956 [DEBUG] [Thread-206345] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:05:06.011 [DEBUG] [Thread-206345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:05:06.012 [DEBUG] [Thread-206345] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:05:06.012 [DEBUG] [Thread-206345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:05:06.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:05:06.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:05:06.068 [DEBUG] [Thread-206345] [transport.py] [_log()] userauth is OK
2026-02-15T15:05:06.068 [DEBUG] [Thread-206345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:05:06.068 [DEBUG] [Thread-206345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:05:06.068 [DEBUG] [Thread-206345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:05:06.068 [DEBUG] [Thread-206345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:05:06.089 [INFO] [Thread-206345] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:05:06.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:05:06.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:05:06.943 [DEBUG] [Thread-206345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:05:06.943 [DEBUG] [Thread-206345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:05:06.992 [DEBUG] [Thread-206345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:05:06.992 [DEBUG] [Thread-206345] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:05:07.001 [DEBUG] [Thread-206345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:05:07.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:05:07.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:05:07.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:05:07.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:05:07.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:05:07.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:05:07.037 [DEBUG] [Thread-206345] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:05:20.338 [DEBUG] [Thread-206347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:35.391 [DEBUG] [Thread-206348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:37.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:05:37.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:05:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:05:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 5, 15), 26.37, 17.41, 0.0, 14.06, 23.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:05:39.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:05:15
2026-02-15T15:05:39.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:05:39.832 [DEBUG] [Thread-206349] [transport.py] [_log()] starting thread (client mode): 0xa2dc16f0
2026-02-15T15:05:39.832 [DEBUG] [Thread-206349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:05:39.853 [DEBUG] [Thread-206349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:05:39.853 [INFO] [Thread-206349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] client lang: <none>
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] server lang: <none>
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] kex follows: False
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:05:39.855 [DEBUG] [Thread-206349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:05:39.856 [DEBUG] [Thread-206349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:05:39.856 [DEBUG] [Thread-206349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:05:39.856 [DEBUG] [Thread-206349] [transport.py] [_log()] Compression: none
2026-02-15T15:05:39.856 [DEBUG] [Thread-206349] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:05:39.880 [DEBUG] [Thread-206349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:05:39.880 [DEBUG] [Thread-206349] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:05:39.881 [DEBUG] [Thread-206349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:05:39.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:05:39.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:05:39.883 [DEBUG] [Thread-206349] [transport.py] [_log()] userauth is OK
2026-02-15T15:05:39.883 [DEBUG] [Thread-206349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:05:39.883 [DEBUG] [Thread-206349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:05:39.883 [DEBUG] [Thread-206349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:05:39.883 [DEBUG] [Thread-206349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:05:39.900 [INFO] [Thread-206349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:05:39.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:05:40.519 [DEBUG] [Thread-206349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:05:40.519 [DEBUG] [Thread-206349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:05:40.520 [DEBUG] [Thread-206349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:05:40.560 [DEBUG] [Thread-206349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:05:40.561 [DEBUG] [Thread-206349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:05:40.564 [DEBUG] [Thread-206349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:05:40.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:05:40.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:05:40.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:05:40.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:05:40.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:05:40.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:05:40.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:05:40.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.544888 -999.00  +23.70  11.60     22   +1.00 1 1 1 1 1   888    0 22.46 21.39 ----- 11.6 11.6 188.2 17.0 31.0 -30.5 30.1 -30.9 31.7 -28.8 32.7 -30.5
2026-02-15T15:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.544888
2026-02-15T15:05:40.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:05:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:05:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:05:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:05:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:05:40.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:05:15', tmtdew=26.37, humidity=17.41, cloud=0.0, wind=14.06, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:04:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:05:40.590 [DEBUG] [Thread-206349] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:05:40.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:05:40.685 [DEBUG] [Thread-206352] [transport.py] [_log()] starting thread (client mode): 0xa57c1930
2026-02-15T15:05:40.685 [DEBUG] [Thread-206352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:05:40.699 [DEBUG] [Thread-206352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:05:40.700 [INFO] [Thread-206352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:05:40.707 [DEBUG] [Thread-206352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] client lang: <none>
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] server lang: <none>
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] kex follows: False
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] Compression: none
2026-02-15T15:05:40.708 [DEBUG] [Thread-206352] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:05:40.765 [DEBUG] [Thread-206352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:05:40.766 [DEBUG] [Thread-206352] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:05:40.767 [DEBUG] [Thread-206352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:05:40.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:05:40.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:05:40.825 [DEBUG] [Thread-206352] [transport.py] [_log()] userauth is OK
2026-02-15T15:05:40.825 [DEBUG] [Thread-206352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:05:40.826 [DEBUG] [Thread-206352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:05:40.826 [DEBUG] [Thread-206352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:05:40.826 [DEBUG] [Thread-206352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:05:40.845 [INFO] [Thread-206352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:05:40.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:05:40.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:05:41.671 [DEBUG] [Thread-206352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:05:41.671 [DEBUG] [Thread-206352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:05:41.718 [DEBUG] [Thread-206352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:05:41.719 [DEBUG] [Thread-206352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:05:41.728 [DEBUG] [Thread-206352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:05:41.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:05: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')
2026-02-15T15:05:41.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:05:41.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:05:41.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:05:41.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:05:41.769 [DEBUG] [Thread-206352] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:05:47.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:47.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:50.426 [DEBUG] [Thread-206354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:05:53.817 [DEBUG] [Thread-206355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:05.487 [DEBUG] [Thread-206356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:11.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:06:11.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:06:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:06:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 5, 50), 26.71, 17.1, 0.0, 22.89, 24.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:06:13.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:05:50
2026-02-15T15:06:14.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:06:14.233 [DEBUG] [Thread-206357] [transport.py] [_log()] starting thread (client mode): 0xa57e3880
2026-02-15T15:06:14.233 [DEBUG] [Thread-206357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:06:14.253 [DEBUG] [Thread-206357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:06:14.253 [INFO] [Thread-206357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:06:14.256 [DEBUG] [Thread-206357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] client lang: <none>
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] server lang: <none>
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] kex follows: False
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] Compression: none
2026-02-15T15:06:14.257 [DEBUG] [Thread-206357] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:06:14.275 [DEBUG] [Thread-206357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:06:14.276 [DEBUG] [Thread-206357] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:06:14.276 [DEBUG] [Thread-206357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:06:14.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:06:14.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:06:14.278 [DEBUG] [Thread-206357] [transport.py] [_log()] userauth is OK
2026-02-15T15:06:14.279 [DEBUG] [Thread-206357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:06:14.279 [DEBUG] [Thread-206357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:06:14.279 [DEBUG] [Thread-206357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:06:14.279 [DEBUG] [Thread-206357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:06:14.303 [INFO] [Thread-206357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:06:14.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:06:15.108 [DEBUG] [Thread-206357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:06:15.108 [DEBUG] [Thread-206357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:06:15.109 [DEBUG] [Thread-206357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:06:15.149 [DEBUG] [Thread-206357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:06:15.149 [DEBUG] [Thread-206357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:06:15.153 [DEBUG] [Thread-206357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:06:15.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:06:15.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:06:15.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:06:15.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:06:15.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:06:15.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:06:15.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:06:15.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:06:15.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:06:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.545582 -999.00  +23.90  13.92     23   +1.60 1 1 1 1 1   888    0 22.68 23.81 ----- 13.9 13.9 137.6 18.3 30.9 -30.1 30.2 -29.0 31.8 -27.6 32.8 -29.8
2026-02-15T15:06:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:06:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:06:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.545582
2026-02-15T15:06:15.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:06:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:06:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:06:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:06:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:06:15.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:05:50', tmtdew=26.71, humidity=17.1, cloud=0.0, wind=22.89, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:05:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:06:15.179 [DEBUG] [Thread-206357] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:06:15.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:06:15.275 [DEBUG] [Thread-206360] [transport.py] [_log()] starting thread (client mode): 0xa2d4ea40
2026-02-15T15:06:15.275 [DEBUG] [Thread-206360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:06:15.289 [DEBUG] [Thread-206360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:06:15.290 [INFO] [Thread-206360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:06:15.297 [DEBUG] [Thread-206360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:15.298 [DEBUG] [Thread-206360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] client lang: <none>
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] server lang: <none>
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] kex follows: False
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:06:15.299 [DEBUG] [Thread-206360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:06:15.300 [DEBUG] [Thread-206360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:06:15.300 [DEBUG] [Thread-206360] [transport.py] [_log()] Compression: none
2026-02-15T15:06:15.300 [DEBUG] [Thread-206360] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:06:15.355 [DEBUG] [Thread-206360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:06:15.356 [DEBUG] [Thread-206360] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:06:15.356 [DEBUG] [Thread-206360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:06:15.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:06:15.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:06:15.415 [DEBUG] [Thread-206360] [transport.py] [_log()] userauth is OK
2026-02-15T15:06:15.415 [DEBUG] [Thread-206360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:06:15.415 [DEBUG] [Thread-206360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:06:15.415 [DEBUG] [Thread-206360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:06:15.415 [DEBUG] [Thread-206360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:06:15.434 [INFO] [Thread-206360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:06:15.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:06:15.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:06:16.272 [DEBUG] [Thread-206360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:06:16.272 [DEBUG] [Thread-206360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:06:16.320 [DEBUG] [Thread-206360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:06:16.320 [DEBUG] [Thread-206360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:06:16.329 [DEBUG] [Thread-206360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:06:16.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:06:16.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:06: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') -> 00000000
2026-02-15T15:06:16.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:06:16.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:06:16.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:06:16.364 [DEBUG] [Thread-206360] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:06:20.524 [DEBUG] [Thread-206362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:35.573 [DEBUG] [Thread-206363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:46.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:06:46.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:06:46.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:06:47.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:47.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 6, 25), 26.51, 17.28, 0.0, 22.02, 23.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:06:48.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:06:25
2026-02-15T15:06:48.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:06:48.725 [DEBUG] [Thread-206364] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-15T15:06:48.726 [DEBUG] [Thread-206364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:06:48.746 [DEBUG] [Thread-206364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:06:48.746 [INFO] [Thread-206364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:06:48.749 [DEBUG] [Thread-206364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:06:48.749 [DEBUG] [Thread-206364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:06:48.749 [DEBUG] [Thread-206364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:06:48.749 [DEBUG] [Thread-206364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:48.749 [DEBUG] [Thread-206364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:48.749 [DEBUG] [Thread-206364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] client lang: <none>
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] server lang: <none>
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] kex follows: False
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] Compression: none
2026-02-15T15:06:48.750 [DEBUG] [Thread-206364] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:06:48.770 [DEBUG] [Thread-206364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:06:48.770 [DEBUG] [Thread-206364] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:06:48.771 [DEBUG] [Thread-206364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:06:48.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:06:48.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:06:48.773 [DEBUG] [Thread-206364] [transport.py] [_log()] userauth is OK
2026-02-15T15:06:48.773 [DEBUG] [Thread-206364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:06:48.773 [DEBUG] [Thread-206364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:06:48.773 [DEBUG] [Thread-206364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:06:48.773 [DEBUG] [Thread-206364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:06:48.798 [INFO] [Thread-206364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:06:48.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:06:49.384 [DEBUG] [Thread-206364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:06:49.385 [DEBUG] [Thread-206364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:06:49.385 [DEBUG] [Thread-206364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:06:49.426 [DEBUG] [Thread-206364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:06:49.426 [DEBUG] [Thread-206364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:06:49.429 [DEBUG] [Thread-206364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:06:49.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:06:49.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:06:49.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:06:49.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:06:49.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:06:49.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:06:49.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:06:49.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:06:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:06:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.545930 -999.00  +24.00  19.13     22   +1.40 1 1 1 1 1   888    0 23.35 23.48 ----- 19.1 19.1 170.8 23.7 31.0 -30.0 30.2 -30.0 31.7 -28.4 32.7 -30.9
2026-02-15T15:06:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:06:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:06:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.545930
2026-02-15T15:06:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:06:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:06:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:06:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:06:49.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:06:49.452 [DEBUG] [Thread-206364] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:06:49.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:06:25', tmtdew=26.51, humidity=17.28, cloud=0.0, wind=22.02, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:06:08.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:06:49.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:06:49.549 [DEBUG] [Thread-206367] [transport.py] [_log()] starting thread (client mode): 0xa2d6a0b0
2026-02-15T15:06:49.549 [DEBUG] [Thread-206367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:06:49.563 [DEBUG] [Thread-206367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:06:49.563 [INFO] [Thread-206367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:06:49.571 [DEBUG] [Thread-206367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] client lang: <none>
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] server lang: <none>
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] kex follows: False
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] Compression: none
2026-02-15T15:06:49.572 [DEBUG] [Thread-206367] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:06:49.628 [DEBUG] [Thread-206367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:06:49.629 [DEBUG] [Thread-206367] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:06:49.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:06:49.630 [DEBUG] [Thread-206367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:06:49.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:06:49.684 [DEBUG] [Thread-206367] [transport.py] [_log()] userauth is OK
2026-02-15T15:06:49.684 [DEBUG] [Thread-206367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:06:49.685 [DEBUG] [Thread-206367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:06:49.685 [DEBUG] [Thread-206367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:06:49.685 [DEBUG] [Thread-206367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:06:49.702 [INFO] [Thread-206367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:06:49.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:06:49.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:06:50.523 [DEBUG] [Thread-206367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:06:50.523 [DEBUG] [Thread-206367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:06:50.571 [DEBUG] [Thread-206367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:06:50.572 [DEBUG] [Thread-206367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:06:50.581 [DEBUG] [Thread-206367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:06:50.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:06:50.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:06:50.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:06:50.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:06:50.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:06:50.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:06:50.613 [DEBUG] [Thread-206369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:06:50.618 [DEBUG] [Thread-206367] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:06:53.849 [DEBUG] [Thread-206370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:05.672 [DEBUG] [Thread-206371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:20.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:07:20.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:07:20.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:07:20.708 [DEBUG] [Thread-206372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:22.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 7, 1), 26.3, 17.46, 0.0, 19.55, 23.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:07:22.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:07:01
2026-02-15T15:07:22.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:07:23.006 [DEBUG] [Thread-206373] [transport.py] [_log()] starting thread (client mode): 0xa2d06710
2026-02-15T15:07:23.006 [DEBUG] [Thread-206373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:07:23.025 [DEBUG] [Thread-206373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:07:23.025 [INFO] [Thread-206373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] client lang: <none>
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] server lang: <none>
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] kex follows: False
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:07:23.029 [DEBUG] [Thread-206373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:07:23.030 [DEBUG] [Thread-206373] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:07:23.030 [DEBUG] [Thread-206373] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:07:23.030 [DEBUG] [Thread-206373] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:07:23.030 [DEBUG] [Thread-206373] [transport.py] [_log()] Compression: none
2026-02-15T15:07:23.030 [DEBUG] [Thread-206373] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:07:23.045 [DEBUG] [Thread-206373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:07:23.046 [DEBUG] [Thread-206373] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:07:23.046 [DEBUG] [Thread-206373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:07:23.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:07:23.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:07:23.048 [DEBUG] [Thread-206373] [transport.py] [_log()] userauth is OK
2026-02-15T15:07:23.049 [DEBUG] [Thread-206373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:07:23.049 [DEBUG] [Thread-206373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:07:23.049 [DEBUG] [Thread-206373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:07:23.049 [DEBUG] [Thread-206373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:07:23.069 [INFO] [Thread-206373] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:07:23.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:07:23.699 [DEBUG] [Thread-206373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:07:23.699 [DEBUG] [Thread-206373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:07:23.700 [DEBUG] [Thread-206373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:07:23.741 [DEBUG] [Thread-206373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:07:23.741 [DEBUG] [Thread-206373] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:07:23.744 [DEBUG] [Thread-206373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:07:23.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:07:23.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:07:23.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:07:23.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:07:23.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:07:23.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:07:23.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:07:23.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:07:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:07:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.546277 -999.00  +23.90  14.71     22   +0.90 1 1 1 1 1   888    0 22.99 24.29 ----- 14.7 14.7 153.6 28.4 30.9 -30.7 30.2 -29.0 31.8 -28.2 32.7 -29.8
2026-02-15T15:07:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:07:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:07:23.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.546277
2026-02-15T15:07:23.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:07:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:07:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:07:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:07:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:07:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:07:01', tmtdew=26.3, humidity=17.46, cloud=0.0, wind=19.55, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:06:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:07:23.776 [DEBUG] [Thread-206373] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:07:23.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:07:23.860 [DEBUG] [Thread-206376] [transport.py] [_log()] starting thread (client mode): 0xa2d05a20
2026-02-15T15:07:23.860 [DEBUG] [Thread-206376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:07:23.875 [DEBUG] [Thread-206376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:07:23.875 [INFO] [Thread-206376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:07:23.883 [DEBUG] [Thread-206376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] client lang: <none>
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] server lang: <none>
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] kex follows: False
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] Compression: none
2026-02-15T15:07:23.884 [DEBUG] [Thread-206376] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:07:23.943 [DEBUG] [Thread-206376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:07:23.943 [DEBUG] [Thread-206376] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:07:23.944 [DEBUG] [Thread-206376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:07:23.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:07:23.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:07:24.002 [DEBUG] [Thread-206376] [transport.py] [_log()] userauth is OK
2026-02-15T15:07:24.002 [DEBUG] [Thread-206376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:07:24.003 [DEBUG] [Thread-206376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:07:24.003 [DEBUG] [Thread-206376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:07:24.003 [DEBUG] [Thread-206376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:07:24.021 [INFO] [Thread-206376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:07:24.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:07:24.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:07:24.842 [DEBUG] [Thread-206376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:07:24.843 [DEBUG] [Thread-206376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:07:24.891 [DEBUG] [Thread-206376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:07:24.891 [DEBUG] [Thread-206376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:07:24.899 [DEBUG] [Thread-206376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:07:24.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:07:24.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:07:24.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:07:24.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:07:24.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:07:24.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:07:24.933 [DEBUG] [Thread-206376] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:07:35.746 [DEBUG] [Thread-206378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:47.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:47.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:50.801 [DEBUG] [Thread-206379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:53.910 [DEBUG] [Thread-206380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:07:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:07:54.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:07:54.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:07:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 7, 37), 26.76, 16.88, 0.0, 24.03, 24.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:07:56.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:07:37
2026-02-15T15:07:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:07:57.362 [DEBUG] [Thread-206381] [transport.py] [_log()] starting thread (client mode): 0xa57c2320
2026-02-15T15:07:57.362 [DEBUG] [Thread-206381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:07:57.383 [DEBUG] [Thread-206381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:07:57.383 [INFO] [Thread-206381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] client lang: <none>
2026-02-15T15:07:57.386 [DEBUG] [Thread-206381] [transport.py] [_log()] server lang: <none>
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] kex follows: False
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] Compression: none
2026-02-15T15:07:57.387 [DEBUG] [Thread-206381] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:07:57.404 [DEBUG] [Thread-206381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:07:57.405 [DEBUG] [Thread-206381] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:07:57.405 [DEBUG] [Thread-206381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:07:57.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:07:57.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:07:57.407 [DEBUG] [Thread-206381] [transport.py] [_log()] userauth is OK
2026-02-15T15:07:57.407 [DEBUG] [Thread-206381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:07:57.407 [DEBUG] [Thread-206381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:07:57.407 [DEBUG] [Thread-206381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:07:57.407 [DEBUG] [Thread-206381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:07:57.432 [INFO] [Thread-206381] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:07:57.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:07:58.075 [DEBUG] [Thread-206381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:07:58.075 [DEBUG] [Thread-206381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:07:58.076 [DEBUG] [Thread-206381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:07:58.116 [DEBUG] [Thread-206381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:07:58.117 [DEBUG] [Thread-206381] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:07:58.119 [DEBUG] [Thread-206381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:07:58.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:07:58.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:07:58.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:07:58.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:07:58.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:07:58.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:07:58.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:07:58.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:07:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:07:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.546624 -999.00  +23.90  12.85     22   +1.10 1 1 1 1 1   888    0 23.06 22.20 ----- 12.8 12.8 138.8 20.9 30.9 -30.4 30.2 -31.7 31.8 -28.2 32.7 -29.8
2026-02-15T15:07:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:07:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:07:58.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.546624
2026-02-15T15:07:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:07:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:07:58.147 [DEBUG] [Thread-206381] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:07:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:07:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:07:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:07:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:07:37', tmtdew=26.76, humidity=16.88, cloud=0.0, wind=24.03, temperature=24.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:07:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:07:58.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:07:58.246 [DEBUG] [Thread-206384] [transport.py] [_log()] starting thread (client mode): 0xa2d043d0
2026-02-15T15:07:58.247 [DEBUG] [Thread-206384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:07:58.261 [DEBUG] [Thread-206384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:07:58.261 [INFO] [Thread-206384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:07:58.268 [DEBUG] [Thread-206384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:07:58.268 [DEBUG] [Thread-206384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] client lang: <none>
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] server lang: <none>
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] kex follows: False
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] Compression: none
2026-02-15T15:07:58.269 [DEBUG] [Thread-206384] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:07:58.328 [DEBUG] [Thread-206384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:07:58.328 [DEBUG] [Thread-206384] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:07:58.329 [DEBUG] [Thread-206384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:07:58.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:07:58.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:07:58.384 [DEBUG] [Thread-206384] [transport.py] [_log()] userauth is OK
2026-02-15T15:07:58.385 [DEBUG] [Thread-206384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:07:58.385 [DEBUG] [Thread-206384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:07:58.385 [DEBUG] [Thread-206384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:07:58.385 [DEBUG] [Thread-206384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:07:58.403 [INFO] [Thread-206384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:07:58.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:07:58.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:07:59.275 [DEBUG] [Thread-206384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:07:59.276 [DEBUG] [Thread-206384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:07:59.323 [DEBUG] [Thread-206384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:07:59.324 [DEBUG] [Thread-206384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:07:59.333 [DEBUG] [Thread-206384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:07:59.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:07:59.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:07:59.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:07:59.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:07:59.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:07:59.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:07:59.369 [DEBUG] [Thread-206384] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:08:05.837 [DEBUG] [Thread-206386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:08:20.891 [DEBUG] [Thread-206387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:08:29.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:08:29.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:08:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:08:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 8, 13), 26.3, 17.21, 0.0, 21.17, 23.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:08:31.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:08:13
2026-02-15T15:08:31.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:08:31.820 [DEBUG] [Thread-206388] [transport.py] [_log()] starting thread (client mode): 0xa2d002b0
2026-02-15T15:08:31.820 [DEBUG] [Thread-206388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:08:31.845 [DEBUG] [Thread-206388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:08:31.845 [INFO] [Thread-206388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:08:31.848 [DEBUG] [Thread-206388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] client lang: <none>
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] server lang: <none>
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] kex follows: False
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] Compression: none
2026-02-15T15:08:31.849 [DEBUG] [Thread-206388] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:08:31.863 [DEBUG] [Thread-206388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:08:31.864 [DEBUG] [Thread-206388] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:08:31.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:08:31.865 [DEBUG] [Thread-206388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:08:31.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:08:31.867 [DEBUG] [Thread-206388] [transport.py] [_log()] userauth is OK
2026-02-15T15:08:31.867 [DEBUG] [Thread-206388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:08:31.867 [DEBUG] [Thread-206388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:08:31.867 [DEBUG] [Thread-206388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:08:31.867 [DEBUG] [Thread-206388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:08:31.903 [INFO] [Thread-206388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:08:31.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:08:32.477 [DEBUG] [Thread-206388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:08:32.478 [DEBUG] [Thread-206388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:08:32.478 [DEBUG] [Thread-206388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:08:32.518 [DEBUG] [Thread-206388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:08:32.519 [DEBUG] [Thread-206388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:08:32.523 [DEBUG] [Thread-206388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:08:32.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:08:32.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:08:32.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:08:32.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:08:32.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:08:32.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:08:32.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:08:32.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.547318 -999.00  +23.90  16.02     22   +1.10 1 1 1 1 1   888    0 22.88 23.71 ----- 16.0 16.0 153.5 20.9 31.1 -29.6 30.3 -28.6 31.8 -29.0 32.9 -30.4
2026-02-15T15:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.547318
2026-02-15T15:08:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:08:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:08:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:08:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:08:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:08:32.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:08:13', tmtdew=26.3, humidity=17.21, cloud=0.0, wind=21.17, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:08:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:08:32.557 [DEBUG] [Thread-206388] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:08:32.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:08:32.653 [DEBUG] [Thread-206391] [transport.py] [_log()] starting thread (client mode): 0xa2db7040
2026-02-15T15:08:32.653 [DEBUG] [Thread-206391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:08:32.668 [DEBUG] [Thread-206391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:08:32.668 [INFO] [Thread-206391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:08:32.676 [DEBUG] [Thread-206391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] client lang: <none>
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] server lang: <none>
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] kex follows: False
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] Compression: none
2026-02-15T15:08:32.677 [DEBUG] [Thread-206391] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:08:32.734 [DEBUG] [Thread-206391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:08:32.735 [DEBUG] [Thread-206391] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:08:32.736 [DEBUG] [Thread-206391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:08:32.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:08:32.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:08:32.790 [DEBUG] [Thread-206391] [transport.py] [_log()] userauth is OK
2026-02-15T15:08:32.791 [DEBUG] [Thread-206391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:08:32.791 [DEBUG] [Thread-206391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:08:32.791 [DEBUG] [Thread-206391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:08:32.791 [DEBUG] [Thread-206391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:08:32.810 [INFO] [Thread-206391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:08:32.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:08:32.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:08:33.625 [DEBUG] [Thread-206391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:08:33.625 [DEBUG] [Thread-206391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:08:33.674 [DEBUG] [Thread-206391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:08:33.675 [DEBUG] [Thread-206391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:08:33.684 [DEBUG] [Thread-206391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:08:33.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:08:33.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:08:33.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:08:33.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:08:33.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:08:33.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:08:33.725 [DEBUG] [Thread-206391] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:08:35.926 [DEBUG] [Thread-206393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:08:47.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:08:47.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:08:50.979 [DEBUG] [Thread-206394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:08:53.950 [DEBUG] [Thread-206395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:03.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:09:03.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:09:03.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:09:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 8, 49), 26.78, 16.81, 0.0, 22.85, 24.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:09:05.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:08:49
2026-02-15T15:09:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:09:06.014 [DEBUG] [Thread-206396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:06.143 [DEBUG] [Thread-206397] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-15T15:09:06.143 [DEBUG] [Thread-206397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:09:06.163 [DEBUG] [Thread-206397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:09:06.163 [INFO] [Thread-206397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:09:06.164 [DEBUG] [Thread-206397] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] client lang: <none>
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] server lang: <none>
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] kex follows: False
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] Compression: none
2026-02-15T15:09:06.165 [DEBUG] [Thread-206397] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:09:06.176 [DEBUG] [Thread-206397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:09:06.177 [DEBUG] [Thread-206397] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:09:06.177 [DEBUG] [Thread-206397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:09:06.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:09:06.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:09:06.179 [DEBUG] [Thread-206397] [transport.py] [_log()] userauth is OK
2026-02-15T15:09:06.179 [DEBUG] [Thread-206397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:09:06.179 [DEBUG] [Thread-206397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:09:06.179 [DEBUG] [Thread-206397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:09:06.179 [DEBUG] [Thread-206397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:09:06.202 [INFO] [Thread-206397] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:09:06.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:09:06.784 [DEBUG] [Thread-206397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:09:06.784 [DEBUG] [Thread-206397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:09:06.785 [DEBUG] [Thread-206397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:09:06.825 [DEBUG] [Thread-206397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:09:06.825 [DEBUG] [Thread-206397] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:09:06.827 [DEBUG] [Thread-206397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:09:06.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:09:06.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:09:06.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:09:06.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:09:06.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:09:06.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:09:06.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:09:06.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:09:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:09:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.547666 -999.00  +23.70  15.22     23   +1.60 1 1 1 1 1   888    0 23.07 24.00 ----- 15.2 15.2 149.6 28.0 31.0 -30.8 30.3 -29.4 31.8 -28.4 32.7 -31.4
2026-02-15T15:09:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:09:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:09:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.547666
2026-02-15T15:09:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:09:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:09:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:09:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:09:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:09:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:08:49', tmtdew=26.78, humidity=16.81, cloud=0.0, wind=22.85, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:08:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:09:06.850 [DEBUG] [Thread-206397] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:09:06.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:09:06.955 [DEBUG] [Thread-206400] [transport.py] [_log()] starting thread (client mode): 0xa57c2650
2026-02-15T15:09:06.955 [DEBUG] [Thread-206400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:09:06.974 [DEBUG] [Thread-206400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:09:06.974 [INFO] [Thread-206400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:09:06.982 [DEBUG] [Thread-206400] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:09:06.982 [DEBUG] [Thread-206400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:09:06.982 [DEBUG] [Thread-206400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:09:06.982 [DEBUG] [Thread-206400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] client lang: <none>
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] server lang: <none>
2026-02-15T15:09:06.983 [DEBUG] [Thread-206400] [transport.py] [_log()] kex follows: False
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] Compression: none
2026-02-15T15:09:06.984 [DEBUG] [Thread-206400] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:09:07.041 [DEBUG] [Thread-206400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:09:07.042 [DEBUG] [Thread-206400] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:09:07.042 [DEBUG] [Thread-206400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:09:07.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:09:07.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:09:07.100 [DEBUG] [Thread-206400] [transport.py] [_log()] userauth is OK
2026-02-15T15:09:07.100 [DEBUG] [Thread-206400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:09:07.100 [DEBUG] [Thread-206400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:09:07.100 [DEBUG] [Thread-206400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:09:07.100 [DEBUG] [Thread-206400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:09:07.114 [INFO] [Thread-206400] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:09:07.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:09:07.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:09:07.971 [DEBUG] [Thread-206400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:09:07.971 [DEBUG] [Thread-206400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:09:08.019 [DEBUG] [Thread-206400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:09:08.019 [DEBUG] [Thread-206400] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:09:08.028 [DEBUG] [Thread-206400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:09:08.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:09:08.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:09:08.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:09:08.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:09:08.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:09:08.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:09:08.072 [DEBUG] [Thread-206400] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:09:21.047 [DEBUG] [Thread-206402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:36.107 [DEBUG] [Thread-206403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:38.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:09:38.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:09:38.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:09:40.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 9, 24), 26.55, 17.04, 0.0, 24.49, 24.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:09:40.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:09:24
2026-02-15T15:09:40.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:09:41.000 [DEBUG] [Thread-206404] [transport.py] [_log()] starting thread (client mode): 0xa57c0d60
2026-02-15T15:09:41.001 [DEBUG] [Thread-206404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:09:41.021 [DEBUG] [Thread-206404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:09:41.021 [INFO] [Thread-206404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:09:41.024 [DEBUG] [Thread-206404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] client lang: <none>
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] server lang: <none>
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] kex follows: False
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:09:41.025 [DEBUG] [Thread-206404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:09:41.026 [DEBUG] [Thread-206404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:09:41.026 [DEBUG] [Thread-206404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:09:41.026 [DEBUG] [Thread-206404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:09:41.026 [DEBUG] [Thread-206404] [transport.py] [_log()] Compression: none
2026-02-15T15:09:41.026 [DEBUG] [Thread-206404] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:09:41.044 [DEBUG] [Thread-206404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:09:41.045 [DEBUG] [Thread-206404] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:09:41.046 [DEBUG] [Thread-206404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:09:41.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:09:41.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:09:41.048 [DEBUG] [Thread-206404] [transport.py] [_log()] userauth is OK
2026-02-15T15:09:41.048 [DEBUG] [Thread-206404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:09:41.048 [DEBUG] [Thread-206404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:09:41.048 [DEBUG] [Thread-206404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:09:41.049 [DEBUG] [Thread-206404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:09:41.073 [INFO] [Thread-206404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:09:41.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:09:41.715 [DEBUG] [Thread-206404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:09:41.716 [DEBUG] [Thread-206404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:09:41.716 [DEBUG] [Thread-206404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:09:41.756 [DEBUG] [Thread-206404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:09:41.757 [DEBUG] [Thread-206404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:09:41.761 [DEBUG] [Thread-206404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:09:41.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:09:41.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:09:41.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:09:41.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:09:41.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:09:41.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:09:41.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:09:41.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:09:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:09:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.548013 -999.00  +23.80  23.36     23   +1.70 1 1 1 1 1   888    0 23.52 22.24 ----- 23.4 23.4 139.6 28.1 31.1 -30.6 30.4 -29.3 31.7 -31.2 32.8 -32.0
2026-02-15T15:09:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:09:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:09:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.548013
2026-02-15T15:09:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:09:41.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:09:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:09:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:09:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:09:41.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:09:24', tmtdew=26.55, humidity=17.04, cloud=0.0, wind=24.49, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:09:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:09:41.790 [DEBUG] [Thread-206404] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:09:41.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:09:41.884 [DEBUG] [Thread-206407] [transport.py] [_log()] starting thread (client mode): 0xa81d74f0
2026-02-15T15:09:41.884 [DEBUG] [Thread-206407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:09:41.899 [DEBUG] [Thread-206407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:09:41.899 [INFO] [Thread-206407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] client lang: <none>
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] server lang: <none>
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] kex follows: False
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:09:41.907 [DEBUG] [Thread-206407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:09:41.908 [DEBUG] [Thread-206407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:09:41.908 [DEBUG] [Thread-206407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:09:41.908 [DEBUG] [Thread-206407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:09:41.908 [DEBUG] [Thread-206407] [transport.py] [_log()] Compression: none
2026-02-15T15:09:41.908 [DEBUG] [Thread-206407] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:09:41.971 [DEBUG] [Thread-206407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:09:41.971 [DEBUG] [Thread-206407] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:09:41.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:09:41.972 [DEBUG] [Thread-206407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:09:41.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:09:42.027 [DEBUG] [Thread-206407] [transport.py] [_log()] userauth is OK
2026-02-15T15:09:42.027 [DEBUG] [Thread-206407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:09:42.027 [DEBUG] [Thread-206407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:09:42.027 [DEBUG] [Thread-206407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:09:42.027 [DEBUG] [Thread-206407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:09:42.046 [INFO] [Thread-206407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:09:42.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:09:42.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:09:42.904 [DEBUG] [Thread-206407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:09:42.904 [DEBUG] [Thread-206407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:09:42.952 [DEBUG] [Thread-206407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:09:42.952 [DEBUG] [Thread-206407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:09:42.961 [DEBUG] [Thread-206407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:09:42.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:09:42.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:09: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
2026-02-15T15:09:42.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:09:42.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:09:42.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:09:42.995 [DEBUG] [Thread-206407] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:09:47.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:47.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:51.144 [DEBUG] [Thread-206409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:09:53.994 [DEBUG] [Thread-206410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:06.194 [DEBUG] [Thread-206411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:10:13.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:10:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:10:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 9, 24), 26.55, 17.04, 0.0, 24.49, 24.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:10:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:09:24
2026-02-15T15:10:15.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:10:15.490 [DEBUG] [Thread-206412] [transport.py] [_log()] starting thread (client mode): 0xa5742860
2026-02-15T15:10:15.490 [DEBUG] [Thread-206412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:10:15.509 [DEBUG] [Thread-206412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:10:15.510 [INFO] [Thread-206412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:10:15.513 [DEBUG] [Thread-206412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:10:15.513 [DEBUG] [Thread-206412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:10:15.513 [DEBUG] [Thread-206412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:10:15.513 [DEBUG] [Thread-206412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] client lang: <none>
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] server lang: <none>
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] kex follows: False
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] Compression: none
2026-02-15T15:10:15.514 [DEBUG] [Thread-206412] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:10:15.530 [DEBUG] [Thread-206412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:10:15.531 [DEBUG] [Thread-206412] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:10:15.532 [DEBUG] [Thread-206412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:10:15.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:10:15.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:10:15.534 [DEBUG] [Thread-206412] [transport.py] [_log()] userauth is OK
2026-02-15T15:10:15.534 [DEBUG] [Thread-206412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:10:15.534 [DEBUG] [Thread-206412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:10:15.534 [DEBUG] [Thread-206412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:10:15.534 [DEBUG] [Thread-206412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:10:15.559 [INFO] [Thread-206412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:10:15.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:10:16.126 [DEBUG] [Thread-206412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:10:16.126 [DEBUG] [Thread-206412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:10:16.127 [DEBUG] [Thread-206412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:10:16.167 [DEBUG] [Thread-206412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:10:16.168 [DEBUG] [Thread-206412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:10:16.170 [DEBUG] [Thread-206412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:10:16.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:10:16.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:10:16.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:10:16.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:10:16.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:10:16.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:10:16.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:10:16.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:10:16.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:10:16.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.548360 -999.00  +23.80  17.88     23   +1.50 1 1 1 1 1   888    0 23.10 21.21 ----- 17.9 17.9 146.6 24.0 30.9 -30.4 30.3 -29.3 31.7 -28.0 32.6 -30.6
2026-02-15T15:10:16.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:10:16.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:10:16.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.548360
2026-02-15T15:10:16.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:10:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:10:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:10:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:10:16.201 [DEBUG] [Thread-206412] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:10:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:10:16.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:09:24', tmtdew=26.55, humidity=17.04, cloud=0.0, wind=24.49, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:09:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:10:16.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:10:16.296 [DEBUG] [Thread-206415] [transport.py] [_log()] starting thread (client mode): 0xa5741f90
2026-02-15T15:10:16.296 [DEBUG] [Thread-206415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:10:16.311 [DEBUG] [Thread-206415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:10:16.312 [INFO] [Thread-206415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:10:16.319 [DEBUG] [Thread-206415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:10:16.319 [DEBUG] [Thread-206415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:10:16.319 [DEBUG] [Thread-206415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:10:16.319 [DEBUG] [Thread-206415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] client lang: <none>
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] server lang: <none>
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] kex follows: False
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:10:16.320 [DEBUG] [Thread-206415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:10:16.321 [DEBUG] [Thread-206415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:10:16.321 [DEBUG] [Thread-206415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:10:16.321 [DEBUG] [Thread-206415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:10:16.321 [DEBUG] [Thread-206415] [transport.py] [_log()] Compression: none
2026-02-15T15:10:16.321 [DEBUG] [Thread-206415] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:10:16.378 [DEBUG] [Thread-206415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:10:16.378 [DEBUG] [Thread-206415] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:10:16.379 [DEBUG] [Thread-206415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:10:16.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:10:16.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:10:16.433 [DEBUG] [Thread-206415] [transport.py] [_log()] userauth is OK
2026-02-15T15:10:16.434 [DEBUG] [Thread-206415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:10:16.434 [DEBUG] [Thread-206415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:10:16.434 [DEBUG] [Thread-206415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:10:16.434 [DEBUG] [Thread-206415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:10:16.452 [INFO] [Thread-206415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:10:16.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:10:16.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:10:17.280 [DEBUG] [Thread-206415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:10:17.280 [DEBUG] [Thread-206415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:10:17.328 [DEBUG] [Thread-206415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:10:17.329 [DEBUG] [Thread-206415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:10:17.338 [DEBUG] [Thread-206415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:10:17.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:10:17.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:10:17.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:10:17.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:10:17.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:10:17.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:10:17.375 [DEBUG] [Thread-206415] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:10:21.229 [DEBUG] [Thread-206417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:36.282 [DEBUG] [Thread-206418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:47.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:10:47.398 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:10:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:10:47.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:47.763 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:49.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 10, 35), 27.37, 16.32, 0.0, 31.65, 25.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:10:49.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:10:35
2026-02-15T15:10:49.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:10:49.880 [DEBUG] [Thread-206419] [transport.py] [_log()] starting thread (client mode): 0xa57c1d50
2026-02-15T15:10:49.880 [DEBUG] [Thread-206419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:10:49.900 [DEBUG] [Thread-206419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:10:49.900 [INFO] [Thread-206419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:49.902 [DEBUG] [Thread-206419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] client lang: <none>
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] server lang: <none>
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] kex follows: False
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] Compression: none
2026-02-15T15:10:49.903 [DEBUG] [Thread-206419] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:10:49.920 [DEBUG] [Thread-206419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:10:49.921 [DEBUG] [Thread-206419] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:10:49.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:10:49.922 [DEBUG] [Thread-206419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:10:49.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:10:49.924 [DEBUG] [Thread-206419] [transport.py] [_log()] userauth is OK
2026-02-15T15:10:49.924 [DEBUG] [Thread-206419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:10:49.924 [DEBUG] [Thread-206419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:10:49.924 [DEBUG] [Thread-206419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:10:49.925 [DEBUG] [Thread-206419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:10:49.939 [INFO] [Thread-206419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:10:49.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:10:50.571 [DEBUG] [Thread-206419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:10:50.572 [DEBUG] [Thread-206419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:10:50.572 [DEBUG] [Thread-206419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:10:50.612 [DEBUG] [Thread-206419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:10:50.613 [DEBUG] [Thread-206419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:10:50.616 [DEBUG] [Thread-206419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:10:50.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:10:50.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:10:50.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:10:50.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:10:50.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:10:50.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:10:50.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:10:50.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:10:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:10:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.549055 -999.00  +24.10  18.37     22   +1.60 1 1 1 1 1   888    0 23.26 21.02 ----- 18.4 18.4 158.4 29.0 30.9 -31.0 30.2 -29.9 31.8 -29.3 32.7 -30.9
2026-02-15T15:10:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:10:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:10:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.549055
2026-02-15T15:10:50.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:10:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:10:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:10:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:10:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:10:50.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:10:35', tmtdew=27.37, humidity=16.32, cloud=0.0, wind=31.65, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:10:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:10:50.641 [DEBUG] [Thread-206419] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:10:50.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:10:50.733 [DEBUG] [Thread-206422] [transport.py] [_log()] starting thread (client mode): 0xa2d1a5f0
2026-02-15T15:10:50.733 [DEBUG] [Thread-206422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:10:50.748 [DEBUG] [Thread-206422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:10:50.748 [INFO] [Thread-206422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:10:50.756 [DEBUG] [Thread-206422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] client lang: <none>
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] server lang: <none>
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] kex follows: False
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:10:50.757 [DEBUG] [Thread-206422] [transport.py] [_log()] Compression: none
2026-02-15T15:10:50.758 [DEBUG] [Thread-206422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:10:50.821 [DEBUG] [Thread-206422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:10:50.821 [DEBUG] [Thread-206422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:10:50.822 [DEBUG] [Thread-206422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:10:50.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:10:50.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:10:50.880 [DEBUG] [Thread-206422] [transport.py] [_log()] userauth is OK
2026-02-15T15:10:50.880 [DEBUG] [Thread-206422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:10:50.880 [DEBUG] [Thread-206422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:10:50.880 [DEBUG] [Thread-206422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:10:50.880 [DEBUG] [Thread-206422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:10:50.900 [INFO] [Thread-206422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:10:50.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:10:50.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:10:51.320 [DEBUG] [Thread-206424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:10:51.733 [DEBUG] [Thread-206422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:10:51.733 [DEBUG] [Thread-206422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:10:51.781 [DEBUG] [Thread-206422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:10:51.781 [DEBUG] [Thread-206422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:10:51.789 [DEBUG] [Thread-206422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:10:51.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:10:51.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:10:51.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:10:51.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:10:51.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:10:51.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:10:51.821 [DEBUG] [Thread-206422] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:10:54.027 [DEBUG] [Thread-206425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:06.375 [DEBUG] [Thread-206426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:21.408 [DEBUG] [Thread-206427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:21.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:11:21.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:11:21.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:11:23.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 11, 11), 26.29, 17.24, 0.0, 21.65, 24.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:11:23.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:11:11
2026-02-15T15:11:24.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:11:24.488 [DEBUG] [Thread-206428] [transport.py] [_log()] starting thread (client mode): 0xa57c2680
2026-02-15T15:11:24.488 [DEBUG] [Thread-206428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:11:24.507 [DEBUG] [Thread-206428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:11:24.508 [INFO] [Thread-206428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] client lang: <none>
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] server lang: <none>
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] kex follows: False
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] Compression: none
2026-02-15T15:11:24.511 [DEBUG] [Thread-206428] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:11:24.528 [DEBUG] [Thread-206428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:11:24.528 [DEBUG] [Thread-206428] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:11:24.529 [DEBUG] [Thread-206428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:11:24.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:11:24.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:11:24.531 [DEBUG] [Thread-206428] [transport.py] [_log()] userauth is OK
2026-02-15T15:11:24.531 [DEBUG] [Thread-206428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:11:24.531 [DEBUG] [Thread-206428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:11:24.531 [DEBUG] [Thread-206428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:11:24.531 [DEBUG] [Thread-206428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:11:24.560 [INFO] [Thread-206428] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:11:24.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:11:25.225 [DEBUG] [Thread-206428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:11:25.226 [DEBUG] [Thread-206428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:11:25.226 [DEBUG] [Thread-206428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:11:25.266 [DEBUG] [Thread-206428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:11:25.267 [DEBUG] [Thread-206428] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:11:25.270 [DEBUG] [Thread-206428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:11:25.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:11:25.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:11:25.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:11:25.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:11:25.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:11:25.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:11:25.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:11:25.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:11:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:11:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.549402 -999.00  +24.30  25.42     22   +1.70 1 1 1 1 1   888    0 22.71 17.93 ----- 25.4 25.4 146.0 31.1 30.9 -31.0 30.2 -29.2 31.8 -28.4 32.6 -33.3
2026-02-15T15:11:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:11:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:11:25.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.549402
2026-02-15T15:11:25.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:11:25.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:11:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:11:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:11:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:11:25.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:11:11', tmtdew=26.29, humidity=17.24, cloud=0.0, wind=21.65, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:11:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:11:25.298 [DEBUG] [Thread-206428] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:11:25.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:11:25.381 [DEBUG] [Thread-206431] [transport.py] [_log()] starting thread (client mode): 0xa57c1900
2026-02-15T15:11:25.381 [DEBUG] [Thread-206431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:11:25.395 [DEBUG] [Thread-206431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:11:25.395 [INFO] [Thread-206431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] client lang: <none>
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] server lang: <none>
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] kex follows: False
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:11:25.403 [DEBUG] [Thread-206431] [transport.py] [_log()] Compression: none
2026-02-15T15:11:25.404 [DEBUG] [Thread-206431] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:11:25.462 [DEBUG] [Thread-206431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:11:25.462 [DEBUG] [Thread-206431] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:11:25.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:11:25.463 [DEBUG] [Thread-206431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:11:25.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:11:25.525 [DEBUG] [Thread-206431] [transport.py] [_log()] userauth is OK
2026-02-15T15:11:25.525 [DEBUG] [Thread-206431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:11:25.525 [DEBUG] [Thread-206431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:11:25.525 [DEBUG] [Thread-206431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:11:25.525 [DEBUG] [Thread-206431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:11:25.547 [INFO] [Thread-206431] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:11:25.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:11:25.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:11:26.389 [DEBUG] [Thread-206431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:11:26.390 [DEBUG] [Thread-206431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:11:26.437 [DEBUG] [Thread-206431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:11:26.438 [DEBUG] [Thread-206431] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:11:26.446 [DEBUG] [Thread-206431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:11:26.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:11:26.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:11:26.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:11:26.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:11:26.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:11:26.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:11:26.483 [DEBUG] [Thread-206431] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:11:36.450 [DEBUG] [Thread-206433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:47.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:47.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:51.500 [DEBUG] [Thread-206434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:54.063 [DEBUG] [Thread-206435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:11:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:11:56.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:11:56.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:11:58.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 11, 47), 26.09, 17.34, 0.0, 31.87, 23.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:11:58.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:11:47
2026-02-15T15:11:58.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:11:59.050 [DEBUG] [Thread-206436] [transport.py] [_log()] starting thread (client mode): 0xa2d04a60
2026-02-15T15:11:59.050 [DEBUG] [Thread-206436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:11:59.071 [DEBUG] [Thread-206436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:11:59.071 [INFO] [Thread-206436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:11:59.074 [DEBUG] [Thread-206436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:11:59.074 [DEBUG] [Thread-206436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:11:59.074 [DEBUG] [Thread-206436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:11:59.074 [DEBUG] [Thread-206436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:59.074 [DEBUG] [Thread-206436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:59.074 [DEBUG] [Thread-206436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] client lang: <none>
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] server lang: <none>
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] kex follows: False
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] Compression: none
2026-02-15T15:11:59.075 [DEBUG] [Thread-206436] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:11:59.097 [DEBUG] [Thread-206436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:11:59.097 [DEBUG] [Thread-206436] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:11:59.098 [DEBUG] [Thread-206436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:11:59.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:11:59.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:11:59.100 [DEBUG] [Thread-206436] [transport.py] [_log()] userauth is OK
2026-02-15T15:11:59.100 [DEBUG] [Thread-206436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:11:59.100 [DEBUG] [Thread-206436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:11:59.100 [DEBUG] [Thread-206436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:11:59.100 [DEBUG] [Thread-206436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:11:59.125 [INFO] [Thread-206436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:11:59.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:11:59.762 [DEBUG] [Thread-206436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:11:59.763 [DEBUG] [Thread-206436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:11:59.763 [DEBUG] [Thread-206436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:11:59.803 [DEBUG] [Thread-206436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:11:59.804 [DEBUG] [Thread-206436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:11:59.807 [DEBUG] [Thread-206436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:11:59.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:11:59.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:11:59.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:11:59.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:11:59.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:11:59.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:11:59.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:11:59.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:11:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:11:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.549749 -999.00  +23.90  25.83     22   +1.50 1 1 1 1 1   888    0 22.66 16.13 ----- 25.8 25.8 139.2 33.3 30.7 -30.7 30.2 -30.3 31.6 -29.5 32.4 -31.5
2026-02-15T15:11:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:11:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:11:59.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.549749
2026-02-15T15:11:59.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:11:59.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:11:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:11:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:11:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:11:59.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:11:47', tmtdew=26.09, humidity=17.34, cloud=0.0, wind=31.87, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:11:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:11:59.832 [DEBUG] [Thread-206436] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:11:59.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:11:59.920 [DEBUG] [Thread-206439] [transport.py] [_log()] starting thread (client mode): 0xa2d06680
2026-02-15T15:11:59.920 [DEBUG] [Thread-206439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:11:59.936 [DEBUG] [Thread-206439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:11:59.936 [INFO] [Thread-206439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:11:59.944 [DEBUG] [Thread-206439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] client lang: <none>
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] server lang: <none>
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] kex follows: False
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:11:59.945 [DEBUG] [Thread-206439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:11:59.946 [DEBUG] [Thread-206439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:11:59.946 [DEBUG] [Thread-206439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:11:59.946 [DEBUG] [Thread-206439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:11:59.946 [DEBUG] [Thread-206439] [transport.py] [_log()] Compression: none
2026-02-15T15:11:59.946 [DEBUG] [Thread-206439] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:12:00.005 [DEBUG] [Thread-206439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:12:00.006 [DEBUG] [Thread-206439] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:12:00.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:12:00.007 [DEBUG] [Thread-206439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:12:00.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:12:00.060 [DEBUG] [Thread-206439] [transport.py] [_log()] userauth is OK
2026-02-15T15:12:00.060 [DEBUG] [Thread-206439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:12:00.060 [DEBUG] [Thread-206439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:12:00.060 [DEBUG] [Thread-206439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:12:00.060 [DEBUG] [Thread-206439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:12:00.079 [INFO] [Thread-206439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:12:00.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:12:00.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:12:00.966 [DEBUG] [Thread-206439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:12:00.966 [DEBUG] [Thread-206439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:12:01.014 [DEBUG] [Thread-206439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:12:01.015 [DEBUG] [Thread-206439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:12:01.023 [DEBUG] [Thread-206439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:12:01.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:12:01.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:12:01.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
2026-02-15T15:12:01.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:12:01.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:12:01.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:12:01.056 [DEBUG] [Thread-206439] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:12:06.539 [DEBUG] [Thread-206441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:12:21.593 [DEBUG] [Thread-206442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:12:31.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:12:31.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:12:31.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:12:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 12, 22), 25.87, 17.59, 0.0, 29.45, 23.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:12:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:12:22
2026-02-15T15:12:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:12:33.484 [DEBUG] [Thread-206443] [transport.py] [_log()] starting thread (client mode): 0xa2d07af0
2026-02-15T15:12:33.484 [DEBUG] [Thread-206443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:12:33.504 [DEBUG] [Thread-206443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:12:33.504 [INFO] [Thread-206443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] client lang: <none>
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] server lang: <none>
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] kex follows: False
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] Compression: none
2026-02-15T15:12:33.507 [DEBUG] [Thread-206443] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:12:33.522 [DEBUG] [Thread-206443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:12:33.522 [DEBUG] [Thread-206443] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:12:33.523 [DEBUG] [Thread-206443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:12:33.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:12:33.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:12:33.524 [DEBUG] [Thread-206443] [transport.py] [_log()] userauth is OK
2026-02-15T15:12:33.524 [DEBUG] [Thread-206443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:12:33.524 [DEBUG] [Thread-206443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:12:33.524 [DEBUG] [Thread-206443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:12:33.524 [DEBUG] [Thread-206443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:12:33.533 [INFO] [Thread-206443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:12:33.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:12:34.168 [DEBUG] [Thread-206443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:12:34.168 [DEBUG] [Thread-206443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:12:34.169 [DEBUG] [Thread-206443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:12:34.209 [DEBUG] [Thread-206443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:12:34.209 [DEBUG] [Thread-206443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:12:34.212 [DEBUG] [Thread-206443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:12:34.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:12:34.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:12:34.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:12:34.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:12:34.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:12:34.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:12:34.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.550096 -999.00  +23.90  19.01     23   +1.60 1 1 1 1 1   888    0 22.43 13.44 ----- 19.0 19.0 131.6 23.7 30.9 -29.7 30.2 -28.6 31.5 -28.8 32.6 -30.0
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.550096
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:12:34.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:12:22', tmtdew=25.87, humidity=17.59, cloud=0.0, wind=29.45, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:12:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:12:34.230 [DEBUG] [Thread-206443] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:12:34.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:12:34.314 [DEBUG] [Thread-206446] [transport.py] [_log()] starting thread (client mode): 0xa2db7d60
2026-02-15T15:12:34.314 [DEBUG] [Thread-206446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:12:34.330 [DEBUG] [Thread-206446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:12:34.330 [INFO] [Thread-206446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:12:34.337 [DEBUG] [Thread-206446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:12:34.337 [DEBUG] [Thread-206446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] client lang: <none>
2026-02-15T15:12:34.338 [DEBUG] [Thread-206446] [transport.py] [_log()] server lang: <none>
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] kex follows: False
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] Compression: none
2026-02-15T15:12:34.339 [DEBUG] [Thread-206446] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:12:34.396 [DEBUG] [Thread-206446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:12:34.397 [DEBUG] [Thread-206446] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:12:34.397 [DEBUG] [Thread-206446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:12:34.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:12:34.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:12:34.456 [DEBUG] [Thread-206446] [transport.py] [_log()] userauth is OK
2026-02-15T15:12:34.456 [DEBUG] [Thread-206446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:12:34.456 [DEBUG] [Thread-206446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:12:34.457 [DEBUG] [Thread-206446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:12:34.457 [DEBUG] [Thread-206446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:12:34.475 [INFO] [Thread-206446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:12:34.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:12:34.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:12:35.313 [DEBUG] [Thread-206446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:12:35.313 [DEBUG] [Thread-206446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:12:35.362 [DEBUG] [Thread-206446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:12:35.362 [DEBUG] [Thread-206446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:12:35.371 [DEBUG] [Thread-206446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:12:35.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:12:35.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:12:35.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:12:35.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:12:35.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:12:35.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:12:35.412 [DEBUG] [Thread-206446] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:12:36.629 [DEBUG] [Thread-206448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:12:48.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:12:48.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:12:51.680 [DEBUG] [Thread-206449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:12:54.116 [DEBUG] [Thread-206450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:05.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:13:05.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:13:05.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:13:06.712 [DEBUG] [Thread-206451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:07.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 12, 57), 25.58, 18.29, 0.0, 21.99, 23.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:13:07.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:12:57
2026-02-15T15:13:07.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:13:07.811 [DEBUG] [Thread-206452] [transport.py] [_log()] starting thread (client mode): 0xa5740880
2026-02-15T15:13:07.811 [DEBUG] [Thread-206452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:13:07.832 [DEBUG] [Thread-206452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:13:07.832 [INFO] [Thread-206452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] client lang: <none>
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] server lang: <none>
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] kex follows: False
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] Compression: none
2026-02-15T15:13:07.833 [DEBUG] [Thread-206452] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:13:07.842 [DEBUG] [Thread-206452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:13:07.842 [DEBUG] [Thread-206452] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:13:07.843 [DEBUG] [Thread-206452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:13:07.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:13:07.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:13:07.844 [DEBUG] [Thread-206452] [transport.py] [_log()] userauth is OK
2026-02-15T15:13:07.844 [DEBUG] [Thread-206452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:13:07.845 [DEBUG] [Thread-206452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:13:07.845 [DEBUG] [Thread-206452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:13:07.845 [DEBUG] [Thread-206452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:13:07.862 [INFO] [Thread-206452] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:13:07.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:13:08.466 [DEBUG] [Thread-206452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:13:08.467 [DEBUG] [Thread-206452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:13:08.467 [DEBUG] [Thread-206452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:13:08.507 [DEBUG] [Thread-206452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:13:08.508 [DEBUG] [Thread-206452] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:13:08.511 [DEBUG] [Thread-206452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:13:08.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:13:08.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:13:08.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:13:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:13:08.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:13:08.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:13:08.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:13:08.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:13:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:13:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.550443 -999.00  +23.90  11.78     23   +1.60 1 1 1 1 1   888    0 22.77 11.34 ----- 11.8 11.8 151.2 13.5 30.9 -28.9 30.3 -28.4 31.7 -28.7 32.8 -28.3
2026-02-15T15:13:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:13:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:13:08.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.550443
2026-02-15T15:13:08.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:13:08.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:13:08.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:13:08.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:13:08.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:13:08.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:12:57', tmtdew=25.58, humidity=18.29, cloud=0.0, wind=21.99, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:12:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:13:08.537 [DEBUG] [Thread-206452] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:13:08.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:13:08.633 [DEBUG] [Thread-206455] [transport.py] [_log()] starting thread (client mode): 0xa2db56c0
2026-02-15T15:13:08.633 [DEBUG] [Thread-206455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:13:08.649 [DEBUG] [Thread-206455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:13:08.649 [INFO] [Thread-206455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] client lang: <none>
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] server lang: <none>
2026-02-15T15:13:08.657 [DEBUG] [Thread-206455] [transport.py] [_log()] kex follows: False
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] Compression: none
2026-02-15T15:13:08.658 [DEBUG] [Thread-206455] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:13:08.714 [DEBUG] [Thread-206455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:13:08.715 [DEBUG] [Thread-206455] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:13:08.715 [DEBUG] [Thread-206455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:13:08.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:13:08.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:13:08.770 [DEBUG] [Thread-206455] [transport.py] [_log()] userauth is OK
2026-02-15T15:13:08.771 [DEBUG] [Thread-206455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:13:08.771 [DEBUG] [Thread-206455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:13:08.771 [DEBUG] [Thread-206455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:13:08.771 [DEBUG] [Thread-206455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:13:08.790 [INFO] [Thread-206455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:13:08.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:13:08.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:13:09.618 [DEBUG] [Thread-206455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:13:09.619 [DEBUG] [Thread-206455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:13:09.667 [DEBUG] [Thread-206455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:13:09.667 [DEBUG] [Thread-206455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:13:09.680 [DEBUG] [Thread-206455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:13:09.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:13:09.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:13:09.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:13:09.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:13:09.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:13:09.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:13:09.719 [DEBUG] [Thread-206455] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:13:21.746 [DEBUG] [Thread-206457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:36.796 [DEBUG] [Thread-206458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:39.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:13:39.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:13:39.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:13:41.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 13, 32), 26.29, 17.56, 0.0, 23.24, 24.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:13:41.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:13:32
2026-02-15T15:13:42.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:13:42.263 [DEBUG] [Thread-206459] [transport.py] [_log()] starting thread (client mode): 0xa2d18550
2026-02-15T15:13:42.264 [DEBUG] [Thread-206459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:13:42.285 [DEBUG] [Thread-206459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:13:42.285 [INFO] [Thread-206459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:13:42.288 [DEBUG] [Thread-206459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:13:42.288 [DEBUG] [Thread-206459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:13:42.288 [DEBUG] [Thread-206459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:13:42.288 [DEBUG] [Thread-206459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:42.288 [DEBUG] [Thread-206459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] client lang: <none>
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] server lang: <none>
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] kex follows: False
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] Compression: none
2026-02-15T15:13:42.289 [DEBUG] [Thread-206459] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:13:42.309 [DEBUG] [Thread-206459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:13:42.309 [DEBUG] [Thread-206459] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:13:42.310 [DEBUG] [Thread-206459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:13:42.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:13:42.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:13:42.312 [DEBUG] [Thread-206459] [transport.py] [_log()] userauth is OK
2026-02-15T15:13:42.312 [DEBUG] [Thread-206459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:13:42.312 [DEBUG] [Thread-206459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:13:42.312 [DEBUG] [Thread-206459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:13:42.312 [DEBUG] [Thread-206459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:13:42.337 [INFO] [Thread-206459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:13:42.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:13:42.996 [DEBUG] [Thread-206459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:13:42.996 [DEBUG] [Thread-206459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:13:42.997 [DEBUG] [Thread-206459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:13:43.038 [DEBUG] [Thread-206459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:13:43.038 [DEBUG] [Thread-206459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:13:43.041 [DEBUG] [Thread-206459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:13:43.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:13:43.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:13:43.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:13:43.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:13:43.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:13:43.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:13:43.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:13:43.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.550791 -999.00  +24.10  24.61     22   +1.40 1 1 1 1 1   888    0 22.45 10.71 ----- 24.6 24.6 133.0 30.7 30.8 -31.0 30.4 -30.1 31.9 -27.8 32.6 -30.7
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.550791
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:13:43.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:13:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:13:43.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:13:32', tmtdew=26.29, humidity=17.56, cloud=0.0, wind=23.24, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:13:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:13:43.064 [DEBUG] [Thread-206459] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:13:43.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:13:43.159 [DEBUG] [Thread-206462] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-15T15:13:43.159 [DEBUG] [Thread-206462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:13:43.174 [DEBUG] [Thread-206462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:13:43.174 [INFO] [Thread-206462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:13:43.181 [DEBUG] [Thread-206462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] client lang: <none>
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] server lang: <none>
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] kex follows: False
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] Compression: none
2026-02-15T15:13:43.182 [DEBUG] [Thread-206462] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:13:43.240 [DEBUG] [Thread-206462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:13:43.241 [DEBUG] [Thread-206462] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:13:43.241 [DEBUG] [Thread-206462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:13:43.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:13:43.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:13:43.297 [DEBUG] [Thread-206462] [transport.py] [_log()] userauth is OK
2026-02-15T15:13:43.297 [DEBUG] [Thread-206462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:13:43.297 [DEBUG] [Thread-206462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:13:43.298 [DEBUG] [Thread-206462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:13:43.298 [DEBUG] [Thread-206462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:13:43.322 [INFO] [Thread-206462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:13:43.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:13:43.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:13:44.139 [DEBUG] [Thread-206462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:13:44.140 [DEBUG] [Thread-206462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:13:44.187 [DEBUG] [Thread-206462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:13:44.187 [DEBUG] [Thread-206462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:13:44.197 [DEBUG] [Thread-206462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:13:44.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:13:44.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:13:44.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:13:44.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:13:44.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:13:44.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:13:44.232 [DEBUG] [Thread-206462] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:13:48.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:48.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:51.832 [DEBUG] [Thread-206464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:13:54.148 [DEBUG] [Thread-206465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:06.885 [DEBUG] [Thread-206466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:14.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:14:14.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:14:14.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:14:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 14, 8), 26.44, 17.38, 0.0, 21.12, 24.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:14:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:14:08
2026-02-15T15:14:16.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:14:16.916 [DEBUG] [Thread-206467] [transport.py] [_log()] starting thread (client mode): 0xa2db7550
2026-02-15T15:14:16.917 [DEBUG] [Thread-206467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:14:16.938 [DEBUG] [Thread-206467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:14:16.938 [INFO] [Thread-206467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] client lang: <none>
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] server lang: <none>
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] kex follows: False
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:14:16.941 [DEBUG] [Thread-206467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:14:16.942 [DEBUG] [Thread-206467] [transport.py] [_log()] Compression: none
2026-02-15T15:14:16.942 [DEBUG] [Thread-206467] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:14:16.958 [DEBUG] [Thread-206467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:14:16.959 [DEBUG] [Thread-206467] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:14:16.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:14:16.960 [DEBUG] [Thread-206467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:14:16.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:14:16.962 [DEBUG] [Thread-206467] [transport.py] [_log()] userauth is OK
2026-02-15T15:14:16.962 [DEBUG] [Thread-206467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:14:16.962 [DEBUG] [Thread-206467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:14:16.962 [DEBUG] [Thread-206467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:14:16.962 [DEBUG] [Thread-206467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:14:16.987 [INFO] [Thread-206467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:14:16.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:14:17.612 [DEBUG] [Thread-206467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:14:17.613 [DEBUG] [Thread-206467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:14:17.613 [DEBUG] [Thread-206467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:14:17.653 [DEBUG] [Thread-206467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:14:17.653 [DEBUG] [Thread-206467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:14:17.656 [DEBUG] [Thread-206467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:14:17.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:14:17.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:14:17.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:14:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:14:17.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:14:17.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:14:17.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:14:17.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:14:17.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:14:17.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.551138 -999.00  +24.00  14.06     22   +1.30 1 1 1 1 1   888    0 22.41 9.41 ----- 14.1 14.1 128.6 30.1 30.9 -29.6 30.5 -29.6 31.8 -28.9 32.8 -30.9
2026-02-15T15:14:17.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:14:17.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:14:17.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.551138
2026-02-15T15:14:17.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:14:17.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:14:17.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:14:17.680 [DEBUG] [Thread-206467] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:14:17.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:14:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:14:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:14:08', tmtdew=26.44, humidity=17.38, cloud=0.0, wind=21.12, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:13:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:14:17.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:14:17.779 [DEBUG] [Thread-206470] [transport.py] [_log()] starting thread (client mode): 0xa57e3be0
2026-02-15T15:14:17.779 [DEBUG] [Thread-206470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:14:17.793 [DEBUG] [Thread-206470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:14:17.793 [INFO] [Thread-206470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:14:17.806 [DEBUG] [Thread-206470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] client lang: <none>
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] server lang: <none>
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] kex follows: False
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:14:17.807 [DEBUG] [Thread-206470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:14:17.808 [DEBUG] [Thread-206470] [transport.py] [_log()] Compression: none
2026-02-15T15:14:17.808 [DEBUG] [Thread-206470] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:14:17.864 [DEBUG] [Thread-206470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:14:17.864 [DEBUG] [Thread-206470] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:14:17.865 [DEBUG] [Thread-206470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:14:17.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:14:17.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:14:17.925 [DEBUG] [Thread-206470] [transport.py] [_log()] userauth is OK
2026-02-15T15:14:17.925 [DEBUG] [Thread-206470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:14:17.925 [DEBUG] [Thread-206470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:14:17.926 [DEBUG] [Thread-206470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:14:17.926 [DEBUG] [Thread-206470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:14:17.945 [INFO] [Thread-206470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:14:17.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:14:17.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:14:18.758 [DEBUG] [Thread-206470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:14:18.759 [DEBUG] [Thread-206470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:14:18.807 [DEBUG] [Thread-206470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:14:18.807 [DEBUG] [Thread-206470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:14:18.816 [DEBUG] [Thread-206470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:14:18.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:14: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')
2026-02-15T15:14:18.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:14:18.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:14:18.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:14:18.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:14:18.855 [DEBUG] [Thread-206470] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:14:21.922 [DEBUG] [Thread-206472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:36.976 [DEBUG] [Thread-206473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:48.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:48.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:48.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:14:48.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:14:48.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:14:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 14, 8), 26.44, 17.38, 0.0, 21.12, 24.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:14:50.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:14:08
2026-02-15T15:14:51.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:14:51.188 [DEBUG] [Thread-206474] [transport.py] [_log()] starting thread (client mode): 0xa57401f0
2026-02-15T15:14:51.189 [DEBUG] [Thread-206474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:14:51.210 [DEBUG] [Thread-206474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:14:51.210 [INFO] [Thread-206474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] client lang: <none>
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] server lang: <none>
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] kex follows: False
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:14:51.213 [DEBUG] [Thread-206474] [transport.py] [_log()] Compression: none
2026-02-15T15:14:51.214 [DEBUG] [Thread-206474] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:14:51.231 [DEBUG] [Thread-206474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:14:51.232 [DEBUG] [Thread-206474] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:14:51.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:14:51.233 [DEBUG] [Thread-206474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:14:51.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:14:51.235 [DEBUG] [Thread-206474] [transport.py] [_log()] userauth is OK
2026-02-15T15:14:51.235 [DEBUG] [Thread-206474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:14:51.236 [DEBUG] [Thread-206474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:14:51.236 [DEBUG] [Thread-206474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:14:51.236 [DEBUG] [Thread-206474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:14:51.253 [INFO] [Thread-206474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:14:51.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:14:51.842 [DEBUG] [Thread-206474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:14:51.842 [DEBUG] [Thread-206474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:14:51.842 [DEBUG] [Thread-206474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:14:51.883 [DEBUG] [Thread-206474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:14:51.884 [DEBUG] [Thread-206474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:14:51.887 [DEBUG] [Thread-206474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:14:51.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:14:51.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:14:51.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:14:51.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:14:51.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:14:51.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:14:51.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:14:51.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:14:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:14:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.551485 -999.00  +24.20  12.49     22   +1.30 1 1 1 1 1   888    0 22.72 11.36 ----- 12.5 12.5 147.0 23.7 30.9 -29.8 30.4 -28.9 31.8 -28.2 32.8 -29.7
2026-02-15T15:14:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:14:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:14:51.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.551485
2026-02-15T15:14:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:14:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:14:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:14:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:14:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:14:51.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:14:08', tmtdew=26.44, humidity=17.38, cloud=0.0, wind=21.12, temperature=24.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:14:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:14:51.915 [DEBUG] [Thread-206474] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:14:51.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:14:52.011 [DEBUG] [Thread-206477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:14:52.012 [DEBUG] [Thread-206478] [transport.py] [_log()] starting thread (client mode): 0xa2db5e40
2026-02-15T15:14:52.012 [DEBUG] [Thread-206478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:14:52.025 [DEBUG] [Thread-206478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:14:52.026 [INFO] [Thread-206478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:14:52.033 [DEBUG] [Thread-206478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:14:52.033 [DEBUG] [Thread-206478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:14:52.034 [DEBUG] [Thread-206478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] client lang: <none>
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] server lang: <none>
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] kex follows: False
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] Compression: none
2026-02-15T15:14:52.035 [DEBUG] [Thread-206478] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:14:52.090 [DEBUG] [Thread-206478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:14:52.090 [DEBUG] [Thread-206478] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:14:52.091 [DEBUG] [Thread-206478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:14:52.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:14:52.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:14:52.151 [DEBUG] [Thread-206478] [transport.py] [_log()] userauth is OK
2026-02-15T15:14:52.151 [DEBUG] [Thread-206478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:14:52.151 [DEBUG] [Thread-206478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:14:52.151 [DEBUG] [Thread-206478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:14:52.152 [DEBUG] [Thread-206478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:14:52.170 [INFO] [Thread-206478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:14:52.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:14:52.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:14:53.051 [DEBUG] [Thread-206478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:14:53.051 [DEBUG] [Thread-206478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:14:53.100 [DEBUG] [Thread-206478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:14:53.100 [DEBUG] [Thread-206478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:14:53.109 [DEBUG] [Thread-206478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:14:53.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:14:53.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:14:53.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:14:53.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:14:53.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:14:53.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:14:53.143 [DEBUG] [Thread-206478] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:14:54.181 [DEBUG] [Thread-206480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:07.055 [DEBUG] [Thread-206481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:22.092 [DEBUG] [Thread-206482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:23.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:15:23.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:15:23.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:15:25.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 14, 43), 26.41, 16.99, 0.0, 17.19, 24.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:15:25.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:14:43
2026-02-15T15:15:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:15:26.245 [DEBUG] [Thread-206483] [transport.py] [_log()] starting thread (client mode): 0xa2db6230
2026-02-15T15:15:26.245 [DEBUG] [Thread-206483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:15:26.267 [DEBUG] [Thread-206483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:15:26.267 [INFO] [Thread-206483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] client lang: <none>
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] server lang: <none>
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] kex follows: False
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:15:26.270 [DEBUG] [Thread-206483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:15:26.271 [DEBUG] [Thread-206483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:15:26.271 [DEBUG] [Thread-206483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:15:26.271 [DEBUG] [Thread-206483] [transport.py] [_log()] Compression: none
2026-02-15T15:15:26.271 [DEBUG] [Thread-206483] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:15:26.288 [DEBUG] [Thread-206483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:15:26.288 [DEBUG] [Thread-206483] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:15:26.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:15:26.290 [DEBUG] [Thread-206483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:15:26.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:15:26.292 [DEBUG] [Thread-206483] [transport.py] [_log()] userauth is OK
2026-02-15T15:15:26.292 [DEBUG] [Thread-206483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:15:26.292 [DEBUG] [Thread-206483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:15:26.292 [DEBUG] [Thread-206483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:15:26.292 [DEBUG] [Thread-206483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:15:26.317 [INFO] [Thread-206483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:15:26.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:15:26.964 [DEBUG] [Thread-206483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:15:26.965 [DEBUG] [Thread-206483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:15:26.965 [DEBUG] [Thread-206483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:15:27.007 [DEBUG] [Thread-206483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:15:27.007 [DEBUG] [Thread-206483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:15:27.011 [DEBUG] [Thread-206483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:15:27.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:15:27.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:15:27.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:15:27.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:15:27.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:15:27.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:15:27.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:15:27.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:15:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:15:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.552179 -999.00  +24.40  21.65     22   +1.30 1 1 1 1 1   888    0 23.18 17.82 ----- 21.6 21.6 147.4 25.9 31.0 -30.1 30.6 -30.2 32.2 -28.0 32.9 -30.5
2026-02-15T15:15:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:15:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:15:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.552179
2026-02-15T15:15:27.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:15:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:15:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:15:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:15:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:15:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:14:43', tmtdew=26.41, humidity=16.99, cloud=0.0, wind=17.19, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:15:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:15:27.039 [DEBUG] [Thread-206483] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:15:27.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:15:27.134 [DEBUG] [Thread-206486] [transport.py] [_log()] starting thread (client mode): 0xa2dc0850
2026-02-15T15:15:27.134 [DEBUG] [Thread-206486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:15:27.149 [DEBUG] [Thread-206486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:15:27.149 [INFO] [Thread-206486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] client lang: <none>
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] server lang: <none>
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] kex follows: False
2026-02-15T15:15:27.157 [DEBUG] [Thread-206486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:15:27.158 [DEBUG] [Thread-206486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:15:27.158 [DEBUG] [Thread-206486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:15:27.158 [DEBUG] [Thread-206486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:15:27.158 [DEBUG] [Thread-206486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:15:27.158 [DEBUG] [Thread-206486] [transport.py] [_log()] Compression: none
2026-02-15T15:15:27.158 [DEBUG] [Thread-206486] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:15:27.218 [DEBUG] [Thread-206486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:15:27.219 [DEBUG] [Thread-206486] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:15:27.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:15:27.220 [DEBUG] [Thread-206486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:15:27.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:15:27.279 [DEBUG] [Thread-206486] [transport.py] [_log()] userauth is OK
2026-02-15T15:15:27.279 [DEBUG] [Thread-206486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:15:27.280 [DEBUG] [Thread-206486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:15:27.280 [DEBUG] [Thread-206486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:15:27.280 [DEBUG] [Thread-206486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:15:27.307 [INFO] [Thread-206486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:15:27.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:15:27.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:15:28.142 [DEBUG] [Thread-206486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:15:28.151 [DEBUG] [Thread-206486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:15:28.190 [DEBUG] [Thread-206486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:15:28.190 [DEBUG] [Thread-206486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:15:28.199 [DEBUG] [Thread-206486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:15:28.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:15: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')
2026-02-15T15:15:28.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:15:28.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:15:28.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:15:28.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:15:28.233 [DEBUG] [Thread-206486] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:15:37.126 [DEBUG] [Thread-206488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:48.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:48.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:52.179 [DEBUG] [Thread-206489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:54.240 [DEBUG] [Thread-206490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:15:58.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:15:58.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:15:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:16:00.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 15, 18), 26.18, 17.21, 0.0, 15.56, 23.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:16:00.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:15:18
2026-02-15T15:16:00.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:16:00.804 [DEBUG] [Thread-206491] [transport.py] [_log()] starting thread (client mode): 0xa2d05420
2026-02-15T15:16:00.805 [DEBUG] [Thread-206491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:16:00.824 [DEBUG] [Thread-206491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:16:00.825 [INFO] [Thread-206491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] client lang: <none>
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] server lang: <none>
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] kex follows: False
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] Compression: none
2026-02-15T15:16:00.828 [DEBUG] [Thread-206491] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:16:00.845 [DEBUG] [Thread-206491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:16:00.846 [DEBUG] [Thread-206491] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:16:00.846 [DEBUG] [Thread-206491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:16:00.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:16:00.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:16:00.848 [DEBUG] [Thread-206491] [transport.py] [_log()] userauth is OK
2026-02-15T15:16:00.848 [DEBUG] [Thread-206491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:16:00.848 [DEBUG] [Thread-206491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:16:00.849 [DEBUG] [Thread-206491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:16:00.849 [DEBUG] [Thread-206491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:16:00.866 [INFO] [Thread-206491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:16:00.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:16:01.506 [DEBUG] [Thread-206491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:16:01.506 [DEBUG] [Thread-206491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:16:01.507 [DEBUG] [Thread-206491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:16:01.547 [DEBUG] [Thread-206491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:16:01.547 [DEBUG] [Thread-206491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:16:01.549 [DEBUG] [Thread-206491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:16:01.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:16:01.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:16:01.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:16:01.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:16:01.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:16:01.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:16:01.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:16:01.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:16:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:16:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.552527 -999.00  +24.10  18.21     22   +1.60 1 1 1 1 1   888    0 22.63 16.81 ----- 18.2 18.2 163.4 23.5 31.1 -30.7 30.6 -29.7 32.0 -28.7 32.9 -31.6
2026-02-15T15:16:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:16:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:16:01.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.552527
2026-02-15T15:16:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:16:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:16:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:16:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:16:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:16:01.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:15:18', tmtdew=26.18, humidity=17.21, cloud=0.0, wind=15.56, temperature=23.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:15:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:16:01.572 [DEBUG] [Thread-206491] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:16:01.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:16:01.663 [DEBUG] [Thread-206494] [transport.py] [_log()] starting thread (client mode): 0xa57c0580
2026-02-15T15:16:01.663 [DEBUG] [Thread-206494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:16:01.678 [DEBUG] [Thread-206494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:16:01.678 [INFO] [Thread-206494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:16:01.685 [DEBUG] [Thread-206494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:16:01.686 [DEBUG] [Thread-206494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:16:01.686 [DEBUG] [Thread-206494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:16:01.686 [DEBUG] [Thread-206494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:01.686 [DEBUG] [Thread-206494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] client lang: <none>
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] server lang: <none>
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] kex follows: False
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] Compression: none
2026-02-15T15:16:01.687 [DEBUG] [Thread-206494] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:16:01.745 [DEBUG] [Thread-206494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:16:01.746 [DEBUG] [Thread-206494] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:16:01.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:16:01.747 [DEBUG] [Thread-206494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:16:01.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:16:01.804 [DEBUG] [Thread-206494] [transport.py] [_log()] userauth is OK
2026-02-15T15:16:01.804 [DEBUG] [Thread-206494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:16:01.804 [DEBUG] [Thread-206494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:16:01.804 [DEBUG] [Thread-206494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:16:01.804 [DEBUG] [Thread-206494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:16:01.821 [INFO] [Thread-206494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:16:01.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:16:01.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:16:02.681 [DEBUG] [Thread-206494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:16:02.681 [DEBUG] [Thread-206494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:16:02.729 [DEBUG] [Thread-206494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:16:02.730 [DEBUG] [Thread-206494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:16:02.739 [DEBUG] [Thread-206494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:16:02.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:16:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:16:02.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:16:02.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:16:02.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:16:02.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:16:02.777 [DEBUG] [Thread-206494] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:16:07.220 [DEBUG] [Thread-206496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:16:22.281 [DEBUG] [Thread-206497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:16:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:16:32.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:16:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:16:34.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 15, 54), 26.41, 17.21, 0.0, 21.51, 24.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:16:34.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:15:54
2026-02-15T15:16:35.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:16:35.433 [DEBUG] [Thread-206498] [transport.py] [_log()] starting thread (client mode): 0xa5740190
2026-02-15T15:16:35.433 [DEBUG] [Thread-206498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:16:35.453 [DEBUG] [Thread-206498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:16:35.453 [INFO] [Thread-206498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] client lang: <none>
2026-02-15T15:16:35.456 [DEBUG] [Thread-206498] [transport.py] [_log()] server lang: <none>
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] kex follows: False
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] Compression: none
2026-02-15T15:16:35.457 [DEBUG] [Thread-206498] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:16:35.474 [DEBUG] [Thread-206498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:16:35.474 [DEBUG] [Thread-206498] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:16:35.475 [DEBUG] [Thread-206498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:16:35.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:16:35.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:16:35.477 [DEBUG] [Thread-206498] [transport.py] [_log()] userauth is OK
2026-02-15T15:16:35.477 [DEBUG] [Thread-206498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:16:35.478 [DEBUG] [Thread-206498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:16:35.478 [DEBUG] [Thread-206498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:16:35.478 [DEBUG] [Thread-206498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:16:35.503 [INFO] [Thread-206498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:16:35.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:16:36.128 [DEBUG] [Thread-206498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:16:36.128 [DEBUG] [Thread-206498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:16:36.129 [DEBUG] [Thread-206498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:16:36.169 [DEBUG] [Thread-206498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:16:36.169 [DEBUG] [Thread-206498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:16:36.173 [DEBUG] [Thread-206498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:16:36.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:16:36.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:16:36.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:16:36.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:16:36.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:16:36.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:16:36.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:16:36.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:16:36.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:16:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.552874 -999.00  +24.00  14.03     23   +1.60 1 1 1 1 1   888    0 22.89 15.41 ----- 14.0 14.0 156.6 21.6 31.1 -31.3 30.6 -29.2 32.0 -27.9 33.0 -30.6
2026-02-15T15:16:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:16:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:16:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.552874
2026-02-15T15:16:36.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:16:36.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:16:36.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:16:36.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:16:36.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:16:36.200 [DEBUG] [Thread-206498] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:16:36.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:15:54', tmtdew=26.41, humidity=17.21, cloud=0.0, wind=21.51, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:16:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:16:36.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:16:36.297 [DEBUG] [Thread-206501] [transport.py] [_log()] starting thread (client mode): 0xa57e2ce0
2026-02-15T15:16:36.297 [DEBUG] [Thread-206501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:16:36.314 [DEBUG] [Thread-206501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:16:36.314 [INFO] [Thread-206501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:16:36.328 [DEBUG] [Thread-206501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:16:36.328 [DEBUG] [Thread-206501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] client lang: <none>
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] server lang: <none>
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] kex follows: False
2026-02-15T15:16:36.329 [DEBUG] [Thread-206501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:16:36.330 [DEBUG] [Thread-206501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:16:36.330 [DEBUG] [Thread-206501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:16:36.330 [DEBUG] [Thread-206501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:16:36.330 [DEBUG] [Thread-206501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:16:36.330 [DEBUG] [Thread-206501] [transport.py] [_log()] Compression: none
2026-02-15T15:16:36.330 [DEBUG] [Thread-206501] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:16:36.384 [DEBUG] [Thread-206501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:16:36.385 [DEBUG] [Thread-206501] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:16:36.385 [DEBUG] [Thread-206501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:16:36.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:16:36.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:16:36.441 [DEBUG] [Thread-206501] [transport.py] [_log()] userauth is OK
2026-02-15T15:16:36.441 [DEBUG] [Thread-206501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:16:36.441 [DEBUG] [Thread-206501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:16:36.441 [DEBUG] [Thread-206501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:16:36.442 [DEBUG] [Thread-206501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:16:36.460 [INFO] [Thread-206501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:16:36.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:16:36.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:16:37.317 [DEBUG] [Thread-206503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:16:37.332 [DEBUG] [Thread-206501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:16:37.333 [DEBUG] [Thread-206501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:16:37.381 [DEBUG] [Thread-206501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:16:37.381 [DEBUG] [Thread-206501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:16:37.391 [DEBUG] [Thread-206501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:16:37.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:16:37.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:16:37.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:16:37.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:16:37.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:16:37.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:16:37.429 [DEBUG] [Thread-206501] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:16:48.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:16:48.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:16:52.368 [DEBUG] [Thread-206504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:16:54.285 [DEBUG] [Thread-206505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:07.403 [DEBUG] [Thread-206506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:07.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:17:07.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:17:07.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:17:09.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 16, 30), 26.48, 17.18, 0.0, 21.26, 24.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:17:09.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:16:30
2026-02-15T15:17:09.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:17:10.006 [DEBUG] [Thread-206507] [transport.py] [_log()] starting thread (client mode): 0xa2db7c70
2026-02-15T15:17:10.006 [DEBUG] [Thread-206507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:17:10.027 [DEBUG] [Thread-206507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:17:10.027 [INFO] [Thread-206507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:10.029 [DEBUG] [Thread-206507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] client lang: <none>
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] server lang: <none>
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] kex follows: False
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] Compression: none
2026-02-15T15:17:10.030 [DEBUG] [Thread-206507] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:17:10.047 [DEBUG] [Thread-206507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:17:10.048 [DEBUG] [Thread-206507] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:17:10.049 [DEBUG] [Thread-206507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:17:10.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:17:10.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:17:10.051 [DEBUG] [Thread-206507] [transport.py] [_log()] userauth is OK
2026-02-15T15:17:10.051 [DEBUG] [Thread-206507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:17:10.051 [DEBUG] [Thread-206507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:17:10.051 [DEBUG] [Thread-206507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:17:10.051 [DEBUG] [Thread-206507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:17:10.075 [INFO] [Thread-206507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:17:10.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:17:10.881 [DEBUG] [Thread-206507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:17:10.881 [DEBUG] [Thread-206507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:17:10.882 [DEBUG] [Thread-206507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:17:10.922 [DEBUG] [Thread-206507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:17:10.923 [DEBUG] [Thread-206507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:17:10.926 [DEBUG] [Thread-206507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:17:10.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:17:10.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:17:10.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:17:10.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:17:10.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:17:10.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:17:10.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:17:10.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:17:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:17:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.553221 -999.00  +24.10  14.07     22   +1.60 1 1 1 1 1   888    0 22.85 16.06 ----- 14.1 14.1 165.2 15.8 31.1 -30.5 30.6 -29.2 32.0 -28.1 33.0 -30.4
2026-02-15T15:17:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:17:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:17:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.553221
2026-02-15T15:17:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:17:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:17:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:17:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:17:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:17:10.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:16:30', tmtdew=26.48, humidity=17.18, cloud=0.0, wind=21.26, temperature=24.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:16:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:17:10.955 [DEBUG] [Thread-206507] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:17:11.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:17:11.053 [DEBUG] [Thread-206510] [transport.py] [_log()] starting thread (client mode): 0xa5742bf0
2026-02-15T15:17:11.053 [DEBUG] [Thread-206510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:17:11.068 [DEBUG] [Thread-206510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:17:11.069 [INFO] [Thread-206510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:17:11.076 [DEBUG] [Thread-206510] [transport.py] [_log()] client lang: <none>
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] server lang: <none>
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] kex follows: False
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] Compression: none
2026-02-15T15:17:11.077 [DEBUG] [Thread-206510] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:17:11.135 [DEBUG] [Thread-206510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:17:11.135 [DEBUG] [Thread-206510] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:17:11.136 [DEBUG] [Thread-206510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:17:11.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:17:11.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:17:11.197 [DEBUG] [Thread-206510] [transport.py] [_log()] userauth is OK
2026-02-15T15:17:11.197 [DEBUG] [Thread-206510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:17:11.197 [DEBUG] [Thread-206510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:17:11.197 [DEBUG] [Thread-206510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:17:11.197 [DEBUG] [Thread-206510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:17:11.216 [INFO] [Thread-206510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:17:11.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:17:11.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:17:12.030 [DEBUG] [Thread-206510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:17:12.030 [DEBUG] [Thread-206510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:17:12.077 [DEBUG] [Thread-206510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:17:12.078 [DEBUG] [Thread-206510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:17:12.087 [DEBUG] [Thread-206510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:17:12.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:17:12.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:17:12.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:17:12.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:17:12.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:17:12.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:17:12.134 [DEBUG] [Thread-206510] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:17:22.443 [DEBUG] [Thread-206512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:37.494 [DEBUG] [Thread-206513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:42.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:17:42.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:17:42.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:17:44.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 17, 5), 26.54, 17.08, 0.0, 19.68, 24.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:17:44.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:17:05
2026-02-15T15:17:44.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:17:44.653 [DEBUG] [Thread-206514] [transport.py] [_log()] starting thread (client mode): 0xa2d06050
2026-02-15T15:17:44.653 [DEBUG] [Thread-206514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:17:44.672 [DEBUG] [Thread-206514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:17:44.672 [INFO] [Thread-206514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] client lang: <none>
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] server lang: <none>
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] kex follows: False
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:17:44.675 [DEBUG] [Thread-206514] [transport.py] [_log()] Compression: none
2026-02-15T15:17:44.676 [DEBUG] [Thread-206514] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:17:44.691 [DEBUG] [Thread-206514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:17:44.691 [DEBUG] [Thread-206514] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:17:44.691 [DEBUG] [Thread-206514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:17:44.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:17:44.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:17:44.692 [DEBUG] [Thread-206514] [transport.py] [_log()] userauth is OK
2026-02-15T15:17:44.692 [DEBUG] [Thread-206514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:17:44.692 [DEBUG] [Thread-206514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:17:44.693 [DEBUG] [Thread-206514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:17:44.693 [DEBUG] [Thread-206514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:17:44.720 [INFO] [Thread-206514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:17:44.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:17:45.409 [DEBUG] [Thread-206514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:17:45.409 [DEBUG] [Thread-206514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:17:45.410 [DEBUG] [Thread-206514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:17:45.451 [DEBUG] [Thread-206514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:17:45.451 [DEBUG] [Thread-206514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:17:45.454 [DEBUG] [Thread-206514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:17:45.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:17:45.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:17:45.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:17:45.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:17:45.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:17:45.479 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:17:45.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:17:45.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:17:45.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:17:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.553568 -999.00  +24.20  14.44     22   +1.50 1 1 1 1 1   888    0 22.92 17.78 ----- 14.4 14.4 147.8 23.3 31.1 -30.7 30.6 -29.9 32.1 -28.0 33.0 -30.3
2026-02-15T15:17:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:17:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:17:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.553568
2026-02-15T15:17:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:17:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:17:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:17:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:17:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:17:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:17:05', tmtdew=26.54, humidity=17.08, cloud=0.0, wind=19.68, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:17:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:17:45.483 [DEBUG] [Thread-206514] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:17:45.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:17:45.576 [DEBUG] [Thread-206517] [transport.py] [_log()] starting thread (client mode): 0xa2d06290
2026-02-15T15:17:45.576 [DEBUG] [Thread-206517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:17:45.591 [DEBUG] [Thread-206517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:17:45.591 [INFO] [Thread-206517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:17:45.599 [DEBUG] [Thread-206517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] client lang: <none>
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] server lang: <none>
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] kex follows: False
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] Compression: none
2026-02-15T15:17:45.600 [DEBUG] [Thread-206517] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:17:45.658 [DEBUG] [Thread-206517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:17:45.658 [DEBUG] [Thread-206517] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:17:45.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:17:45.659 [DEBUG] [Thread-206517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:17:45.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:17:45.719 [DEBUG] [Thread-206517] [transport.py] [_log()] userauth is OK
2026-02-15T15:17:45.719 [DEBUG] [Thread-206517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:17:45.719 [DEBUG] [Thread-206517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:17:45.719 [DEBUG] [Thread-206517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:17:45.720 [DEBUG] [Thread-206517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:17:45.738 [INFO] [Thread-206517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:17:45.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:17:45.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:17:46.601 [DEBUG] [Thread-206517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:17:46.602 [DEBUG] [Thread-206517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:17:46.650 [DEBUG] [Thread-206517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:17:46.650 [DEBUG] [Thread-206517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:17:46.661 [DEBUG] [Thread-206517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:17:46.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:17:46.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:17:46.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:17:46.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:17:46.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:17:46.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:17:46.701 [DEBUG] [Thread-206517] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:17:48.763 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:48.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:52.526 [DEBUG] [Thread-206519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:17:54.313 [DEBUG] [Thread-206520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:07.575 [DEBUG] [Thread-206521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:16.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:18:16.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:18:16.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:18:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 17, 40), 26.66, 17.02, 0.0, 20.96, 24.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:18:19.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:17:40
2026-02-15T15:18:19.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:18:19.792 [DEBUG] [Thread-206522] [transport.py] [_log()] starting thread (client mode): 0xa2d032b0
2026-02-15T15:18:19.792 [DEBUG] [Thread-206522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:18:19.811 [DEBUG] [Thread-206522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:18:19.811 [INFO] [Thread-206522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] client lang: <none>
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] server lang: <none>
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] kex follows: False
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] Compression: none
2026-02-15T15:18:19.815 [DEBUG] [Thread-206522] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:18:19.833 [DEBUG] [Thread-206522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:18:19.834 [DEBUG] [Thread-206522] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:18:19.835 [DEBUG] [Thread-206522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:18:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:18:19.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:18:19.837 [DEBUG] [Thread-206522] [transport.py] [_log()] userauth is OK
2026-02-15T15:18:19.838 [DEBUG] [Thread-206522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:18:19.838 [DEBUG] [Thread-206522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:18:19.838 [DEBUG] [Thread-206522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:18:19.838 [DEBUG] [Thread-206522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:18:19.862 [INFO] [Thread-206522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:18:19.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:18:20.493 [DEBUG] [Thread-206522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:18:20.493 [DEBUG] [Thread-206522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:18:20.494 [DEBUG] [Thread-206522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:18:20.534 [DEBUG] [Thread-206522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:18:20.535 [DEBUG] [Thread-206522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:18:20.538 [DEBUG] [Thread-206522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:18:20.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:18:20.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:18:20.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:18:20.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:18:20.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:18:20.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:18:20.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:18:20.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:18:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:18:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.553916 -999.00  +24.00  12.18     22   +1.50 1 1 1 1 1   888    0 23.21 16.97 ----- 12.2 12.2 133.6 16.2 31.1 -30.7 30.5 -29.4 32.1 -27.4 33.0 -30.6
2026-02-15T15:18:20.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:18:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:18:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.553916
2026-02-15T15:18:20.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:18:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:18:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:18:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:18:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:18:20.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:17:40', tmtdew=26.66, humidity=17.02, cloud=0.0, wind=20.96, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:17:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:18:20.564 [DEBUG] [Thread-206522] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:18:20.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:18:20.670 [DEBUG] [Thread-206525] [transport.py] [_log()] starting thread (client mode): 0xa2d04310
2026-02-15T15:18:20.670 [DEBUG] [Thread-206525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:18:20.685 [DEBUG] [Thread-206525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:18:20.685 [INFO] [Thread-206525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:18:20.693 [DEBUG] [Thread-206525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:18:20.693 [DEBUG] [Thread-206525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] client lang: <none>
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] server lang: <none>
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] kex follows: False
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] Compression: none
2026-02-15T15:18:20.694 [DEBUG] [Thread-206525] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:18:20.753 [DEBUG] [Thread-206525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:18:20.754 [DEBUG] [Thread-206525] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:18:20.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:18:20.755 [DEBUG] [Thread-206525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:18:20.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:18:20.810 [DEBUG] [Thread-206525] [transport.py] [_log()] userauth is OK
2026-02-15T15:18:20.810 [DEBUG] [Thread-206525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:18:20.810 [DEBUG] [Thread-206525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:18:20.810 [DEBUG] [Thread-206525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:18:20.810 [DEBUG] [Thread-206525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:18:20.829 [INFO] [Thread-206525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:18:20.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:18:20.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:18:21.679 [DEBUG] [Thread-206525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:18:21.679 [DEBUG] [Thread-206525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:18:21.728 [DEBUG] [Thread-206525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:18:21.728 [DEBUG] [Thread-206525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:18:21.737 [DEBUG] [Thread-206525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:18:21.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:18:21.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:18:21.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:18:21.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:18:21.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:18:21.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:18:21.774 [DEBUG] [Thread-206525] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:18:22.612 [DEBUG] [Thread-206527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:37.663 [DEBUG] [Thread-206528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:48.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:48.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:51.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:18:51.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:18:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:18:52.700 [DEBUG] [Thread-206529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:54.349 [DEBUG] [Thread-206530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:18:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 18, 16), 25.71, 18.07, 0.0, 16.92, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:18:54.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:18:16
2026-02-15T15:18:54.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:18:55.135 [DEBUG] [Thread-206531] [transport.py] [_log()] starting thread (client mode): 0xa57e3a90
2026-02-15T15:18:55.135 [DEBUG] [Thread-206531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:18:55.155 [DEBUG] [Thread-206531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:18:55.155 [INFO] [Thread-206531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:55.158 [DEBUG] [Thread-206531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] client lang: <none>
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] server lang: <none>
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] kex follows: False
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] Compression: none
2026-02-15T15:18:55.159 [DEBUG] [Thread-206531] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:18:55.178 [DEBUG] [Thread-206531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:18:55.179 [DEBUG] [Thread-206531] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:18:55.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:18:55.180 [DEBUG] [Thread-206531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:18:55.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:18:55.183 [DEBUG] [Thread-206531] [transport.py] [_log()] userauth is OK
2026-02-15T15:18:55.183 [DEBUG] [Thread-206531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:18:55.183 [DEBUG] [Thread-206531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:18:55.183 [DEBUG] [Thread-206531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:18:55.183 [DEBUG] [Thread-206531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:18:55.219 [INFO] [Thread-206531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:18:55.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:18:55.851 [DEBUG] [Thread-206531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:18:55.851 [DEBUG] [Thread-206531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:18:55.852 [DEBUG] [Thread-206531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:18:55.892 [DEBUG] [Thread-206531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:18:55.893 [DEBUG] [Thread-206531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:18:55.896 [DEBUG] [Thread-206531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:18:55.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:18:55.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:18:55.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:18:55.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:18:55.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:18:55.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:18:55.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.554263 -999.00  +24.00   9.15     23   +1.60 1 1 1 1 1   888    0 22.47 14.72 ----- 9.2 9.2 132.7 12.2 31.3 -29.7 30.7 -28.5 32.2 -28.0 33.2 -30.0
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.554263
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:18:55.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:18:16', tmtdew=25.71, humidity=18.07, cloud=0.0, wind=16.92, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:18:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:18:55.919 [DEBUG] [Thread-206531] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:18:55.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:18:56.011 [DEBUG] [Thread-206534] [transport.py] [_log()] starting thread (client mode): 0xa2d19330
2026-02-15T15:18:56.012 [DEBUG] [Thread-206534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:18:56.026 [DEBUG] [Thread-206534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:18:56.026 [INFO] [Thread-206534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:18:56.033 [DEBUG] [Thread-206534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:18:56.034 [DEBUG] [Thread-206534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:18:56.034 [DEBUG] [Thread-206534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:18:56.034 [DEBUG] [Thread-206534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:56.034 [DEBUG] [Thread-206534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] client lang: <none>
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] server lang: <none>
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] kex follows: False
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] Compression: none
2026-02-15T15:18:56.035 [DEBUG] [Thread-206534] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:18:56.092 [DEBUG] [Thread-206534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:18:56.093 [DEBUG] [Thread-206534] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:18:56.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:18:56.094 [DEBUG] [Thread-206534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:18:56.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:18:56.148 [DEBUG] [Thread-206534] [transport.py] [_log()] userauth is OK
2026-02-15T15:18:56.149 [DEBUG] [Thread-206534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:18:56.149 [DEBUG] [Thread-206534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:18:56.149 [DEBUG] [Thread-206534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:18:56.149 [DEBUG] [Thread-206534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:18:56.167 [INFO] [Thread-206534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:18:56.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:18:56.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:18:56.990 [DEBUG] [Thread-206534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:18:56.990 [DEBUG] [Thread-206534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:18:57.038 [DEBUG] [Thread-206534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:18:57.039 [DEBUG] [Thread-206534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:18:57.048 [DEBUG] [Thread-206534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:18:57.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:18:57.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:18:57.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:18:57.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:18:57.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:18:57.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:18:57.086 [DEBUG] [Thread-206534] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:19:07.731 [DEBUG] [Thread-206536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:19:22.796 [DEBUG] [Thread-206537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:19:27.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:19:27.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:19:27.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:19:28.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 18, 52), 25.71, 17.94, 0.0, 15.02, 23.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:19:28.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:18:52
2026-02-15T15:19:29.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:19:29.470 [DEBUG] [Thread-206538] [transport.py] [_log()] starting thread (client mode): 0xa81d6350
2026-02-15T15:19:29.470 [DEBUG] [Thread-206538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:19:29.485 [DEBUG] [Thread-206538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:19:29.485 [INFO] [Thread-206538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:19:29.486 [DEBUG] [Thread-206538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] client lang: <none>
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] server lang: <none>
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] kex follows: False
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:19:29.487 [DEBUG] [Thread-206538] [transport.py] [_log()] Compression: none
2026-02-15T15:19:29.488 [DEBUG] [Thread-206538] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:19:29.507 [DEBUG] [Thread-206538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:19:29.508 [DEBUG] [Thread-206538] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:19:29.509 [DEBUG] [Thread-206538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:19:29.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:19:29.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:19:29.513 [DEBUG] [Thread-206538] [transport.py] [_log()] userauth is OK
2026-02-15T15:19:29.513 [DEBUG] [Thread-206538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:19:29.513 [DEBUG] [Thread-206538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:19:29.513 [DEBUG] [Thread-206538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:19:29.514 [DEBUG] [Thread-206538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:19:29.535 [INFO] [Thread-206538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:19:29.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:19:30.194 [DEBUG] [Thread-206538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:19:30.194 [DEBUG] [Thread-206538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:19:30.195 [DEBUG] [Thread-206538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:19:30.235 [DEBUG] [Thread-206538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:19:30.235 [DEBUG] [Thread-206538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:19:30.239 [DEBUG] [Thread-206538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:19:30.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:19:30.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:19:30.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:19:30.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:19:30.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:19:30.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:19:30.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:19:30.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:19:30.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:19:30.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.554610 -999.00  +24.20  13.72     23   +1.80 1 1 1 1 1   888    0 22.68 13.18 ----- 13.7 13.7 172.9 22.5 31.3 -30.6 30.7 -30.4 32.3 -26.7 33.2 -32.2
2026-02-15T15:19:30.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:19:30.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:19:30.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.554610
2026-02-15T15:19:30.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:19:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:19:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:19:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:19:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:19:30.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:18:52', tmtdew=25.71, humidity=17.94, cloud=0.0, wind=15.02, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:18:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:19:30.266 [DEBUG] [Thread-206538] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:19:30.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:19:30.360 [DEBUG] [Thread-206541] [transport.py] [_log()] starting thread (client mode): 0xa57c0cd0
2026-02-15T15:19:30.360 [DEBUG] [Thread-206541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:19:30.374 [DEBUG] [Thread-206541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:19:30.375 [INFO] [Thread-206541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:19:30.382 [DEBUG] [Thread-206541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] client lang: <none>
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] server lang: <none>
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] kex follows: False
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:19:30.383 [DEBUG] [Thread-206541] [transport.py] [_log()] Compression: none
2026-02-15T15:19:30.384 [DEBUG] [Thread-206541] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:19:30.440 [DEBUG] [Thread-206541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:19:30.440 [DEBUG] [Thread-206541] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:19:30.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:19:30.441 [DEBUG] [Thread-206541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:19:30.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:19:30.496 [DEBUG] [Thread-206541] [transport.py] [_log()] userauth is OK
2026-02-15T15:19:30.496 [DEBUG] [Thread-206541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:19:30.496 [DEBUG] [Thread-206541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:19:30.497 [DEBUG] [Thread-206541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:19:30.497 [DEBUG] [Thread-206541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:19:30.516 [INFO] [Thread-206541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:19:30.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:19:30.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:19:31.382 [DEBUG] [Thread-206541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:19:31.382 [DEBUG] [Thread-206541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:19:31.430 [DEBUG] [Thread-206541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:19:31.431 [DEBUG] [Thread-206541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:19:31.439 [DEBUG] [Thread-206541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:19:31.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:19:31.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:19:31.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:19:31.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:19:31.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:19:31.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:19:31.472 [DEBUG] [Thread-206541] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:19:37.832 [DEBUG] [Thread-206543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:19:49.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:19:49.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:19:52.878 [DEBUG] [Thread-206544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:19:54.391 [DEBUG] [Thread-206545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:01.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:20:01.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:20:01.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:20:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 19, 28), 25.48, 18.24, 0.0, 19.97, 23.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:20:03.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:19:28
2026-02-15T15:20:03.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:20:03.974 [DEBUG] [Thread-206546] [transport.py] [_log()] starting thread (client mode): 0xa5740940
2026-02-15T15:20:03.974 [DEBUG] [Thread-206546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:20:03.998 [DEBUG] [Thread-206546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:20:03.999 [INFO] [Thread-206546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] client lang: <none>
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] server lang: <none>
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] kex follows: False
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:20:04.002 [DEBUG] [Thread-206546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:20:04.003 [DEBUG] [Thread-206546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:20:04.003 [DEBUG] [Thread-206546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:20:04.003 [DEBUG] [Thread-206546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:20:04.003 [DEBUG] [Thread-206546] [transport.py] [_log()] Compression: none
2026-02-15T15:20:04.003 [DEBUG] [Thread-206546] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:20:04.021 [DEBUG] [Thread-206546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:20:04.021 [DEBUG] [Thread-206546] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:20:04.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:20:04.022 [DEBUG] [Thread-206546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:20:04.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:20:04.024 [DEBUG] [Thread-206546] [transport.py] [_log()] userauth is OK
2026-02-15T15:20:04.025 [DEBUG] [Thread-206546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:20:04.025 [DEBUG] [Thread-206546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:20:04.025 [DEBUG] [Thread-206546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:20:04.025 [DEBUG] [Thread-206546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:20:04.043 [INFO] [Thread-206546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:20:04.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:20:07.915 [DEBUG] [Thread-206548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:08.433 [DEBUG] [Thread-206546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:20:08.434 [DEBUG] [Thread-206546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:20:08.434 [DEBUG] [Thread-206546] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:20:08.475 [DEBUG] [Thread-206546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:20:08.475 [DEBUG] [Thread-206546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:20:08.479 [DEBUG] [Thread-206546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:20:08.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:20:08.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:20:08.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:20:08.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:20:08.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:20:08.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:20:08.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:20:08.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:20:08.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:20:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.554957 -999.00  +24.30  16.55     23   +1.80 1 1 1 1 1   888    0 22.42 15.48 ----- 16.6 16.6 186.4 26.9 31.2 -31.5 30.6 -29.8 32.3 -28.3 33.1 -30.4
2026-02-15T15:20:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:20:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:20:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.554957
2026-02-15T15:20:08.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:20:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:20:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:20:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:20:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:20:08.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:19:28', tmtdew=25.48, humidity=18.24, cloud=0.0, wind=19.97, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:19:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:20:08.501 [DEBUG] [Thread-206546] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:20:08.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:20:08.596 [DEBUG] [Thread-206550] [transport.py] [_log()] starting thread (client mode): 0xa5743f40
2026-02-15T15:20:08.596 [DEBUG] [Thread-206550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:20:08.610 [DEBUG] [Thread-206550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:20:08.610 [INFO] [Thread-206550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:08.618 [DEBUG] [Thread-206550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] client lang: <none>
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] server lang: <none>
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] kex follows: False
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] Compression: none
2026-02-15T15:20:08.619 [DEBUG] [Thread-206550] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:20:08.675 [DEBUG] [Thread-206550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:20:08.675 [DEBUG] [Thread-206550] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:20:08.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:20:08.676 [DEBUG] [Thread-206550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:20:08.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:20:08.731 [DEBUG] [Thread-206550] [transport.py] [_log()] userauth is OK
2026-02-15T15:20:08.731 [DEBUG] [Thread-206550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:20:08.732 [DEBUG] [Thread-206550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:20:08.732 [DEBUG] [Thread-206550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:20:08.732 [DEBUG] [Thread-206550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:20:08.751 [INFO] [Thread-206550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:20:08.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:20:08.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:20:09.580 [DEBUG] [Thread-206550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:20:09.580 [DEBUG] [Thread-206550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:20:09.630 [DEBUG] [Thread-206550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:20:09.631 [DEBUG] [Thread-206550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:20:09.640 [DEBUG] [Thread-206550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:20:09.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:20:09.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:20: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-02-15T15:20:09.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:20:09.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:20:09.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:20:09.679 [DEBUG] [Thread-206550] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:20:22.952 [DEBUG] [Thread-206552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:37.999 [DEBUG] [Thread-206553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:39.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:20:39.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:20:39.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:20:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 20, 4), 25.64, 18.06, 0.0, 19.44, 23.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:20:41.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:20:04
2026-02-15T15:20:42.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:20:42.573 [DEBUG] [Thread-206554] [transport.py] [_log()] starting thread (client mode): 0xa2d01930
2026-02-15T15:20:42.573 [DEBUG] [Thread-206554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:20:42.594 [DEBUG] [Thread-206554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:20:42.594 [INFO] [Thread-206554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] client lang: <none>
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] server lang: <none>
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] kex follows: False
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] Compression: none
2026-02-15T15:20:42.597 [DEBUG] [Thread-206554] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:20:42.617 [DEBUG] [Thread-206554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:20:42.617 [DEBUG] [Thread-206554] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:20:42.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:20:42.618 [DEBUG] [Thread-206554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:20:42.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:20:42.620 [DEBUG] [Thread-206554] [transport.py] [_log()] userauth is OK
2026-02-15T15:20:42.621 [DEBUG] [Thread-206554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:20:42.621 [DEBUG] [Thread-206554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:20:42.621 [DEBUG] [Thread-206554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:20:42.621 [DEBUG] [Thread-206554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:20:42.657 [INFO] [Thread-206554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:20:42.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:20:43.294 [DEBUG] [Thread-206554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:20:43.295 [DEBUG] [Thread-206554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:20:43.295 [DEBUG] [Thread-206554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:20:43.336 [DEBUG] [Thread-206554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:20:43.336 [DEBUG] [Thread-206554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:20:43.340 [DEBUG] [Thread-206554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:20:43.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:20:43.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:20:43.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:20:43.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:20:43.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:20:43.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:20:43.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:20:43.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.555305 -999.00  +24.10  16.62     23   +1.80 1 1 1 1 1   888    0 23.61 18.88 ----- 16.6 16.6 197.8 22.9 31.1 -30.6 30.3 -29.9 32.2 -29.6 33.0 -30.6
2026-02-15T15:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:20:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.555305
2026-02-15T15:20:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:20:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:20:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:20:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:20:43.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:20:43.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:20:04', tmtdew=25.64, humidity=18.06, cloud=0.0, wind=19.44, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:19:38.352', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:20:43.363 [DEBUG] [Thread-206554] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:20:43.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:20:43.469 [DEBUG] [Thread-206557] [transport.py] [_log()] starting thread (client mode): 0xa81d6230
2026-02-15T15:20:43.470 [DEBUG] [Thread-206557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:20:43.487 [DEBUG] [Thread-206557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:20:43.488 [INFO] [Thread-206557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:20:43.495 [DEBUG] [Thread-206557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] client lang: <none>
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] server lang: <none>
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] kex follows: False
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:20:43.496 [DEBUG] [Thread-206557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:20:43.497 [DEBUG] [Thread-206557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:20:43.497 [DEBUG] [Thread-206557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:20:43.497 [DEBUG] [Thread-206557] [transport.py] [_log()] Compression: none
2026-02-15T15:20:43.497 [DEBUG] [Thread-206557] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:20:43.555 [DEBUG] [Thread-206557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:20:43.556 [DEBUG] [Thread-206557] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:20:43.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:20:43.557 [DEBUG] [Thread-206557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:20:43.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:20:43.615 [DEBUG] [Thread-206557] [transport.py] [_log()] userauth is OK
2026-02-15T15:20:43.615 [DEBUG] [Thread-206557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:20:43.615 [DEBUG] [Thread-206557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:20:43.615 [DEBUG] [Thread-206557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:20:43.616 [DEBUG] [Thread-206557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:20:43.635 [INFO] [Thread-206557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:20:43.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:20:43.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:20:44.483 [DEBUG] [Thread-206557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:20:44.493 [DEBUG] [Thread-206557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:20:44.532 [DEBUG] [Thread-206557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:20:44.532 [DEBUG] [Thread-206557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:20:44.542 [DEBUG] [Thread-206557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:20:44.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:20:44.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:20:44.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:20:44.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:20:44.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:20:44.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:20:44.575 [DEBUG] [Thread-206557] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:20:49.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:49.188 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:53.035 [DEBUG] [Thread-206559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:20:54.431 [DEBUG] [Thread-206560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:08.083 [DEBUG] [Thread-206561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:14.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:21:14.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:21:14.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:21:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 20, 39), 27.51, 16.15, 0.0, 36.59, 25.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:21:16.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:20:39
2026-02-15T15:21:17.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:21:17.315 [DEBUG] [Thread-206562] [transport.py] [_log()] starting thread (client mode): 0xa2df8b80
2026-02-15T15:21:17.315 [DEBUG] [Thread-206562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:21:17.335 [DEBUG] [Thread-206562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:21:17.335 [INFO] [Thread-206562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:21:17.338 [DEBUG] [Thread-206562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:21:17.338 [DEBUG] [Thread-206562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:21:17.338 [DEBUG] [Thread-206562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:21:17.338 [DEBUG] [Thread-206562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] client lang: <none>
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] server lang: <none>
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] kex follows: False
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] Compression: none
2026-02-15T15:21:17.339 [DEBUG] [Thread-206562] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:21:17.355 [DEBUG] [Thread-206562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:21:17.356 [DEBUG] [Thread-206562] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:21:17.356 [DEBUG] [Thread-206562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:21:17.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:21:17.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:21:17.400 [DEBUG] [Thread-206562] [transport.py] [_log()] userauth is OK
2026-02-15T15:21:17.401 [DEBUG] [Thread-206562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:21:17.401 [DEBUG] [Thread-206562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:21:17.401 [DEBUG] [Thread-206562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:21:17.401 [DEBUG] [Thread-206562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:21:17.433 [INFO] [Thread-206562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:21:17.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:21:18.039 [DEBUG] [Thread-206562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:21:18.039 [DEBUG] [Thread-206562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:21:18.039 [DEBUG] [Thread-206562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:21:18.080 [DEBUG] [Thread-206562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:21:18.080 [DEBUG] [Thread-206562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:21:18.083 [DEBUG] [Thread-206562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:21:18.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:21:18.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:21:18.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:21:18.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:21:18.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:21:18.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:21:18.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:21:18.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:21:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:21:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.555999 -999.00  +24.20  15.59     22   +1.70 1 1 1 1 1   888    0 22.98 26.73 ----- 15.6 15.6 172.2 25.6 31.0 -30.0 30.0 -33.2 32.0 -30.2 32.9 -29.6
2026-02-15T15:21:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:21:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:21:18.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.555999
2026-02-15T15:21:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:21:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:21:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:21:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:21:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:21:18.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:20:39', tmtdew=27.51, humidity=16.15, cloud=0.0, wind=36.59, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:20:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:21:18.109 [DEBUG] [Thread-206562] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:21:18.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:21:18.204 [DEBUG] [Thread-206565] [transport.py] [_log()] starting thread (client mode): 0xa81d5ff0
2026-02-15T15:21:18.204 [DEBUG] [Thread-206565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:21:18.220 [DEBUG] [Thread-206565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:21:18.220 [INFO] [Thread-206565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] client lang: <none>
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] server lang: <none>
2026-02-15T15:21:18.228 [DEBUG] [Thread-206565] [transport.py] [_log()] kex follows: False
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] Compression: none
2026-02-15T15:21:18.229 [DEBUG] [Thread-206565] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:21:18.286 [DEBUG] [Thread-206565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:21:18.286 [DEBUG] [Thread-206565] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:21:18.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:21:18.288 [DEBUG] [Thread-206565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:21:18.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:21:18.342 [DEBUG] [Thread-206565] [transport.py] [_log()] userauth is OK
2026-02-15T15:21:18.342 [DEBUG] [Thread-206565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:21:18.342 [DEBUG] [Thread-206565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:21:18.342 [DEBUG] [Thread-206565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:21:18.342 [DEBUG] [Thread-206565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:21:18.361 [INFO] [Thread-206565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:21:18.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:21:18.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:21:19.196 [DEBUG] [Thread-206565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:21:19.197 [DEBUG] [Thread-206565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:21:19.244 [DEBUG] [Thread-206565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:21:19.245 [DEBUG] [Thread-206565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:21:19.254 [DEBUG] [Thread-206565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:21:19.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:21:19.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:21:19.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:21:19.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:21:19.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:21:19.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:21:19.291 [DEBUG] [Thread-206565] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:21:23.118 [DEBUG] [Thread-206567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:38.166 [DEBUG] [Thread-206568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:21:49.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:21:49.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:21:49.326 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:49.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:51.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 21, 15), 26.46, 17.36, 0.0, 21.21, 24.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:21:51.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:21:15
2026-02-15T15:21:51.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:21:51.768 [DEBUG] [Thread-206569] [transport.py] [_log()] starting thread (client mode): 0xa2df9c90
2026-02-15T15:21:51.768 [DEBUG] [Thread-206569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:21:51.787 [DEBUG] [Thread-206569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:21:51.788 [INFO] [Thread-206569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:21:51.790 [DEBUG] [Thread-206569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] client lang: <none>
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] server lang: <none>
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] kex follows: False
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] Compression: none
2026-02-15T15:21:51.795 [DEBUG] [Thread-206569] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:21:51.810 [DEBUG] [Thread-206569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:21:51.811 [DEBUG] [Thread-206569] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:21:51.811 [DEBUG] [Thread-206569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:21:51.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:21:51.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:21:51.812 [DEBUG] [Thread-206569] [transport.py] [_log()] userauth is OK
2026-02-15T15:21:51.812 [DEBUG] [Thread-206569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:21:51.812 [DEBUG] [Thread-206569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:21:51.812 [DEBUG] [Thread-206569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:21:51.812 [DEBUG] [Thread-206569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:21:51.844 [INFO] [Thread-206569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:21:51.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:21:52.485 [DEBUG] [Thread-206569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:21:52.485 [DEBUG] [Thread-206569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:21:52.485 [DEBUG] [Thread-206569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:21:52.526 [DEBUG] [Thread-206569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:21:52.526 [DEBUG] [Thread-206569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:21:52.529 [DEBUG] [Thread-206569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:21:52.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:21:52.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:21:52.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:21:52.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:21:52.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:21:52.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:21:52.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:21:52.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:21:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:21:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.556693 -999.00  +24.70  16.65     22   +1.50 1 1 1 1 1   888    0 23.64 35.52 ----- 16.6 16.6 136.2 24.5 31.1 -29.4 30.5 -28.8 32.0 -28.1 33.0 -29.7
2026-02-15T15:21:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:21:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:21:52.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.556693
2026-02-15T15:21:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:21:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:21:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:21:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:21:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:21:52.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:21:15', tmtdew=26.46, humidity=17.36, cloud=0.0, wind=21.21, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:21:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:21:52.549 [DEBUG] [Thread-206569] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:21:52.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:21:52.668 [DEBUG] [Thread-206572] [transport.py] [_log()] starting thread (client mode): 0xa81d4130
2026-02-15T15:21:52.668 [DEBUG] [Thread-206572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:21:52.682 [DEBUG] [Thread-206572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:21:52.682 [INFO] [Thread-206572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] client lang: <none>
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] server lang: <none>
2026-02-15T15:21:52.690 [DEBUG] [Thread-206572] [transport.py] [_log()] kex follows: False
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] Compression: none
2026-02-15T15:21:52.691 [DEBUG] [Thread-206572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:21:52.748 [DEBUG] [Thread-206572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:21:52.748 [DEBUG] [Thread-206572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:21:52.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:21:52.749 [DEBUG] [Thread-206572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:21:52.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:21:52.806 [DEBUG] [Thread-206572] [transport.py] [_log()] userauth is OK
2026-02-15T15:21:52.807 [DEBUG] [Thread-206572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:21:52.807 [DEBUG] [Thread-206572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:21:52.807 [DEBUG] [Thread-206572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:21:52.807 [DEBUG] [Thread-206572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:21:52.829 [INFO] [Thread-206572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:21:52.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:21:52.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:21:53.201 [DEBUG] [Thread-206574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:21:53.642 [DEBUG] [Thread-206572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:21:53.643 [DEBUG] [Thread-206572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:21:53.690 [DEBUG] [Thread-206572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:21:53.690 [DEBUG] [Thread-206572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:21:53.699 [DEBUG] [Thread-206572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:21:53.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:21:53.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:21:53.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:21:53.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:21:53.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:21:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:21:53.733 [DEBUG] [Thread-206572] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:21:54.496 [DEBUG] [Thread-206575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:08.252 [DEBUG] [Thread-206576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:23.292 [DEBUG] [Thread-206577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:23.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:22:23.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:22:23.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:22:25.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 21, 51), 26.84, 16.71, 0.0, 15.86, 24.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:22:25.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:21:51
2026-02-15T15:22:25.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:22:26.117 [DEBUG] [Thread-206578] [transport.py] [_log()] starting thread (client mode): 0xa2dc0e50
2026-02-15T15:22:26.117 [DEBUG] [Thread-206578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:22:26.138 [DEBUG] [Thread-206578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:22:26.138 [INFO] [Thread-206578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] client lang: <none>
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] server lang: <none>
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] kex follows: False
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:22:26.141 [DEBUG] [Thread-206578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:22:26.142 [DEBUG] [Thread-206578] [transport.py] [_log()] Compression: none
2026-02-15T15:22:26.142 [DEBUG] [Thread-206578] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:22:26.158 [DEBUG] [Thread-206578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:22:26.159 [DEBUG] [Thread-206578] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:22:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:22:26.160 [DEBUG] [Thread-206578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:22:26.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:22:26.162 [DEBUG] [Thread-206578] [transport.py] [_log()] userauth is OK
2026-02-15T15:22:26.162 [DEBUG] [Thread-206578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:22:26.162 [DEBUG] [Thread-206578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:22:26.162 [DEBUG] [Thread-206578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:22:26.162 [DEBUG] [Thread-206578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:22:26.188 [INFO] [Thread-206578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:22:26.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:22:26.776 [DEBUG] [Thread-206578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:22:26.776 [DEBUG] [Thread-206578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:22:26.777 [DEBUG] [Thread-206578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:22:26.817 [DEBUG] [Thread-206578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:22:26.817 [DEBUG] [Thread-206578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:22:26.820 [DEBUG] [Thread-206578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:22:26.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:22:26.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:22:26.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:22:26.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:22:26.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:22:26.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:22:26.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:22:26.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:22:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:22:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.557041 -999.00  +24.90  14.74     22   +1.80 1 1 1 1 1   888    0 23.69 35.52 ----- 14.7 14.7 165.8 20.9 31.2 -30.1 30.6 -30.0 32.1 -28.0 33.0 -29.9
2026-02-15T15:22:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:22:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:22:26.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.557041
2026-02-15T15:22:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:22:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:22:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:22:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:22:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:22:26.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:21:51', tmtdew=26.84, humidity=16.71, cloud=0.0, wind=15.86, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:22:08.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:22:26.847 [DEBUG] [Thread-206578] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:22:26.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:22:26.943 [DEBUG] [Thread-206581] [transport.py] [_log()] starting thread (client mode): 0xa2dc3970
2026-02-15T15:22:26.943 [DEBUG] [Thread-206581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:22:26.957 [DEBUG] [Thread-206581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:22:26.958 [INFO] [Thread-206581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:22:26.965 [DEBUG] [Thread-206581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:22:26.966 [DEBUG] [Thread-206581] [transport.py] [_log()] client lang: <none>
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] server lang: <none>
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] kex follows: False
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:22:26.967 [DEBUG] [Thread-206581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:22:26.968 [DEBUG] [Thread-206581] [transport.py] [_log()] Compression: none
2026-02-15T15:22:26.968 [DEBUG] [Thread-206581] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:22:27.025 [DEBUG] [Thread-206581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:22:27.026 [DEBUG] [Thread-206581] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:22:27.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:22:27.027 [DEBUG] [Thread-206581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:22:27.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:22:27.085 [DEBUG] [Thread-206581] [transport.py] [_log()] userauth is OK
2026-02-15T15:22:27.085 [DEBUG] [Thread-206581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:22:27.085 [DEBUG] [Thread-206581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:22:27.085 [DEBUG] [Thread-206581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:22:27.085 [DEBUG] [Thread-206581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:22:27.105 [INFO] [Thread-206581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:22:27.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:22:27.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:22:27.940 [DEBUG] [Thread-206581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:22:27.940 [DEBUG] [Thread-206581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:22:27.991 [DEBUG] [Thread-206581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:22:27.991 [DEBUG] [Thread-206581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:22:28.003 [DEBUG] [Thread-206581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:22:28.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:22:28.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:22:28.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:22:28.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:22:28.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:22:28.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:22:28.050 [DEBUG] [Thread-206581] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:22:38.331 [DEBUG] [Thread-206583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:49.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:49.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:53.384 [DEBUG] [Thread-206584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:54.531 [DEBUG] [Thread-206585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:22:58.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:22:58.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:22:58.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:22:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 22, 26), 26.53, 17.03, 0.0, 19.66, 24.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:22:59.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:22:26
2026-02-15T15:23:00.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:23:00.505 [DEBUG] [Thread-206586] [transport.py] [_log()] starting thread (client mode): 0xa2dfa350
2026-02-15T15:23:00.505 [DEBUG] [Thread-206586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:23:00.523 [DEBUG] [Thread-206586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:23:00.523 [INFO] [Thread-206586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] client lang: <none>
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] server lang: <none>
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] kex follows: False
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:23:00.525 [DEBUG] [Thread-206586] [transport.py] [_log()] Compression: none
2026-02-15T15:23:00.526 [DEBUG] [Thread-206586] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:23:00.540 [DEBUG] [Thread-206586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:23:00.540 [DEBUG] [Thread-206586] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:23:00.541 [DEBUG] [Thread-206586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:23:00.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:23:00.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:23:00.543 [DEBUG] [Thread-206586] [transport.py] [_log()] userauth is OK
2026-02-15T15:23:00.543 [DEBUG] [Thread-206586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:23:00.543 [DEBUG] [Thread-206586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:23:00.543 [DEBUG] [Thread-206586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:23:00.543 [DEBUG] [Thread-206586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:23:00.568 [INFO] [Thread-206586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:23:00.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:23:01.199 [DEBUG] [Thread-206586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:23:01.199 [DEBUG] [Thread-206586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:23:01.200 [DEBUG] [Thread-206586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:23:01.241 [DEBUG] [Thread-206586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:23:01.241 [DEBUG] [Thread-206586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:23:01.244 [DEBUG] [Thread-206586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:23:01.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:23:01.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:23:01.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:23:01.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:23:01.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:23:01.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:23:01.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:23:01.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:23:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:23:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.557388 -999.00  +25.00  14.11     21   +1.60 1 1 1 1 1   888    0 23.68 40.54 ----- 14.1 14.1 181.2 17.9 31.1 -30.6 30.4 -31.3 32.2 -27.4 33.0 -31.4
2026-02-15T15:23:01.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:23:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:23:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.557388
2026-02-15T15:23:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:23:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:23:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:23:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:23:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:23:01.269 [DEBUG] [Thread-206586] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:23:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:22:26', tmtdew=26.53, humidity=17.03, cloud=0.0, wind=19.66, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:22:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:23:01.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:23:01.363 [DEBUG] [Thread-206589] [transport.py] [_log()] starting thread (client mode): 0xa2d02da0
2026-02-15T15:23:01.363 [DEBUG] [Thread-206589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:23:01.378 [DEBUG] [Thread-206589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:23:01.378 [INFO] [Thread-206589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:23:01.386 [DEBUG] [Thread-206589] [transport.py] [_log()] client lang: <none>
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] server lang: <none>
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] kex follows: False
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] Compression: none
2026-02-15T15:23:01.387 [DEBUG] [Thread-206589] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:23:01.453 [DEBUG] [Thread-206589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:23:01.453 [DEBUG] [Thread-206589] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:23:01.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:23:01.455 [DEBUG] [Thread-206589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:23:01.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:23:01.512 [DEBUG] [Thread-206589] [transport.py] [_log()] userauth is OK
2026-02-15T15:23:01.512 [DEBUG] [Thread-206589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:23:01.512 [DEBUG] [Thread-206589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:23:01.513 [DEBUG] [Thread-206589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:23:01.513 [DEBUG] [Thread-206589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:23:01.531 [INFO] [Thread-206589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:23:01.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:23:01.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:23:02.364 [DEBUG] [Thread-206589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:23:02.364 [DEBUG] [Thread-206589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:23:02.412 [DEBUG] [Thread-206589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:23:02.413 [DEBUG] [Thread-206589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:23:02.422 [DEBUG] [Thread-206589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:23:02.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:23:02.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:23:02.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:23:02.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:23:02.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:23:02.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:23:02.459 [DEBUG] [Thread-206589] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:23:08.423 [DEBUG] [Thread-206591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:23:23.486 [DEBUG] [Thread-206592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:23:32.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:23:32.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:23:32.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:23:34.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 23, 1), 26.3, 17.29, 0.0, 20.38, 24.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:23:34.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:23:01
2026-02-15T15:23:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:23:34.982 [DEBUG] [Thread-206593] [transport.py] [_log()] starting thread (client mode): 0xa2d022f0
2026-02-15T15:23:34.983 [DEBUG] [Thread-206593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:23:35.004 [DEBUG] [Thread-206593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:23:35.004 [INFO] [Thread-206593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:23:35.008 [DEBUG] [Thread-206593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:23:35.008 [DEBUG] [Thread-206593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] client lang: <none>
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] server lang: <none>
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] kex follows: False
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] Compression: none
2026-02-15T15:23:35.009 [DEBUG] [Thread-206593] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:23:35.026 [DEBUG] [Thread-206593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:23:35.027 [DEBUG] [Thread-206593] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:23:35.027 [DEBUG] [Thread-206593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:23:35.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:23:35.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:23:35.029 [DEBUG] [Thread-206593] [transport.py] [_log()] userauth is OK
2026-02-15T15:23:35.030 [DEBUG] [Thread-206593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:23:35.030 [DEBUG] [Thread-206593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:23:35.030 [DEBUG] [Thread-206593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:23:35.030 [DEBUG] [Thread-206593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:23:35.039 [INFO] [Thread-206593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:23:35.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:23:35.697 [DEBUG] [Thread-206593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:23:35.697 [DEBUG] [Thread-206593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:23:35.698 [DEBUG] [Thread-206593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:23:35.739 [DEBUG] [Thread-206593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:23:35.739 [DEBUG] [Thread-206593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:23:35.743 [DEBUG] [Thread-206593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:23:35.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:23:35.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:23:35.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:23:35.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:23:35.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:23:35.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:23:35.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:23:35.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:23:35.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:23:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.557735 -999.00  +24.80  22.92     21   +1.60 1 1 1 1 1   888    0 23.58 42.17 ----- 22.9 22.9 162.2 30.6 31.0 -31.7 30.4 -29.7 32.2 -28.3 32.9 -31.2
2026-02-15T15:23:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:23:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:23:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.557735
2026-02-15T15:23:35.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:23:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:23:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:23:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:23:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:23:35.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:23:01', tmtdew=26.3, humidity=17.29, cloud=0.0, wind=20.38, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:23:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:23:35.775 [DEBUG] [Thread-206593] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:23:35.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:23:35.873 [DEBUG] [Thread-206596] [transport.py] [_log()] starting thread (client mode): 0xa2dfba90
2026-02-15T15:23:35.873 [DEBUG] [Thread-206596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:23:35.887 [DEBUG] [Thread-206596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:23:35.887 [INFO] [Thread-206596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:23:35.895 [DEBUG] [Thread-206596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:23:35.895 [DEBUG] [Thread-206596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:23:35.895 [DEBUG] [Thread-206596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:23:35.895 [DEBUG] [Thread-206596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] client lang: <none>
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] server lang: <none>
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] kex follows: False
2026-02-15T15:23:35.896 [DEBUG] [Thread-206596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:23:35.897 [DEBUG] [Thread-206596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:23:35.897 [DEBUG] [Thread-206596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:23:35.897 [DEBUG] [Thread-206596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:23:35.897 [DEBUG] [Thread-206596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:23:35.897 [DEBUG] [Thread-206596] [transport.py] [_log()] Compression: none
2026-02-15T15:23:35.897 [DEBUG] [Thread-206596] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:23:35.955 [DEBUG] [Thread-206596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:23:35.956 [DEBUG] [Thread-206596] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:23:35.957 [DEBUG] [Thread-206596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:23:35.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:23:35.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:23:36.011 [DEBUG] [Thread-206596] [transport.py] [_log()] userauth is OK
2026-02-15T15:23:36.012 [DEBUG] [Thread-206596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:23:36.012 [DEBUG] [Thread-206596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:23:36.012 [DEBUG] [Thread-206596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:23:36.012 [DEBUG] [Thread-206596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:23:36.030 [INFO] [Thread-206596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:23:36.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:23:36.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:23:36.859 [DEBUG] [Thread-206596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:23:36.859 [DEBUG] [Thread-206596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:23:36.908 [DEBUG] [Thread-206596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:23:36.908 [DEBUG] [Thread-206596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:23:36.917 [DEBUG] [Thread-206596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:23:36.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:23:36.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:23:36.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:23:36.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:23:36.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:23:36.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:23:36.951 [DEBUG] [Thread-206596] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:23:38.524 [DEBUG] [Thread-206598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:23:49.608 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:23:49.610 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:23:53.576 [DEBUG] [Thread-206599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:23:54.563 [DEBUG] [Thread-206600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:06.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:24:06.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:24:06.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:24:08.614 [DEBUG] [Thread-206601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 23, 36), 26.64, 17.08, 0.0, 19.87, 24.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:24:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:23:36
2026-02-15T15:24:09.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:24:10.069 [DEBUG] [Thread-206602] [transport.py] [_log()] starting thread (client mode): 0xa2dc2ad0
2026-02-15T15:24:10.069 [DEBUG] [Thread-206602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:24:10.087 [DEBUG] [Thread-206602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:24:10.087 [INFO] [Thread-206602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:24:10.090 [DEBUG] [Thread-206602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:24:10.090 [DEBUG] [Thread-206602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] client lang: <none>
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] server lang: <none>
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] kex follows: False
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] Compression: none
2026-02-15T15:24:10.091 [DEBUG] [Thread-206602] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:24:10.108 [DEBUG] [Thread-206602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:24:10.108 [DEBUG] [Thread-206602] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:24:10.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:24:10.110 [DEBUG] [Thread-206602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:24:10.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:24:10.112 [DEBUG] [Thread-206602] [transport.py] [_log()] userauth is OK
2026-02-15T15:24:10.112 [DEBUG] [Thread-206602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:24:10.112 [DEBUG] [Thread-206602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:24:10.112 [DEBUG] [Thread-206602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:24:10.112 [DEBUG] [Thread-206602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:24:10.132 [INFO] [Thread-206602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:24:10.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:24:10.792 [DEBUG] [Thread-206602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:24:10.792 [DEBUG] [Thread-206602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:24:10.793 [DEBUG] [Thread-206602] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:24:10.833 [DEBUG] [Thread-206602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:24:10.834 [DEBUG] [Thread-206602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:24:10.836 [DEBUG] [Thread-206602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:24:10.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:24:10.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:24:10.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:24:10.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:24:10.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:24:10.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:24:10.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:24:10.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:24:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:24:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.558082 -999.00  +24.40  29.79     22   +1.60 1 1 1 1 1   888    0 23.73 41.75 ----- 29.8 29.8 144.4 34.1 30.9 -31.9 30.4 -31.3 31.9 -29.7 32.6 -33.0
2026-02-15T15:24:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:24:10.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:24:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.558082
2026-02-15T15:24:10.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:24:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:24:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:24:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:24:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:24:10.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:23:36', tmtdew=26.64, humidity=17.08, cloud=0.0, wind=19.87, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:23:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:24:10.863 [DEBUG] [Thread-206602] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:24:10.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:24:10.971 [DEBUG] [Thread-206605] [transport.py] [_log()] starting thread (client mode): 0xa2df9ab0
2026-02-15T15:24:10.971 [DEBUG] [Thread-206605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:24:10.987 [DEBUG] [Thread-206605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:24:10.987 [INFO] [Thread-206605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] client lang: <none>
2026-02-15T15:24:10.995 [DEBUG] [Thread-206605] [transport.py] [_log()] server lang: <none>
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] kex follows: False
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] Compression: none
2026-02-15T15:24:10.996 [DEBUG] [Thread-206605] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:24:11.054 [DEBUG] [Thread-206605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:24:11.055 [DEBUG] [Thread-206605] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:24:11.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:24:11.056 [DEBUG] [Thread-206605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:24:11.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:24:11.111 [DEBUG] [Thread-206605] [transport.py] [_log()] userauth is OK
2026-02-15T15:24:11.111 [DEBUG] [Thread-206605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:24:11.111 [DEBUG] [Thread-206605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:24:11.111 [DEBUG] [Thread-206605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:24:11.112 [DEBUG] [Thread-206605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:24:11.133 [INFO] [Thread-206605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:24:11.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:24:11.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:24:11.930 [DEBUG] [Thread-206605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:24:11.931 [DEBUG] [Thread-206605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:24:11.980 [DEBUG] [Thread-206605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:24:11.980 [DEBUG] [Thread-206605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:24:11.988 [DEBUG] [Thread-206605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:24:11.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:24:12.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:24: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
2026-02-15T15:24:12.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:24:12.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:24:12.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:24:12.030 [DEBUG] [Thread-206605] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:24:23.655 [DEBUG] [Thread-206607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:38.709 [DEBUG] [Thread-206608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:42.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:24:42.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:24:42.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:24:43.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 24, 11), 26.53, 17.26, 0.0, 21.07, 24.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:24:43.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:24:11
2026-02-15T15:24:44.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:24:44.408 [DEBUG] [Thread-206609] [transport.py] [_log()] starting thread (client mode): 0xa2dfbb20
2026-02-15T15:24:44.409 [DEBUG] [Thread-206609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:24:44.430 [DEBUG] [Thread-206609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:24:44.430 [INFO] [Thread-206609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:24:44.433 [DEBUG] [Thread-206609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] client lang: <none>
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] server lang: <none>
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] kex follows: False
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] Compression: none
2026-02-15T15:24:44.434 [DEBUG] [Thread-206609] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:24:44.451 [DEBUG] [Thread-206609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:24:44.452 [DEBUG] [Thread-206609] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:24:44.453 [DEBUG] [Thread-206609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:24:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:24:44.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:24:44.455 [DEBUG] [Thread-206609] [transport.py] [_log()] userauth is OK
2026-02-15T15:24:44.455 [DEBUG] [Thread-206609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:24:44.455 [DEBUG] [Thread-206609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:24:44.456 [DEBUG] [Thread-206609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:24:44.456 [DEBUG] [Thread-206609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:24:44.479 [INFO] [Thread-206609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:24:44.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:24:45.145 [DEBUG] [Thread-206609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:24:45.145 [DEBUG] [Thread-206609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:24:45.146 [DEBUG] [Thread-206609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:24:45.190 [DEBUG] [Thread-206609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:24:45.191 [DEBUG] [Thread-206609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:24:45.197 [DEBUG] [Thread-206609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:24:45.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:24:45.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:24:45.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:24:45.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:24:45.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:24:45.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:24:45.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:24:45.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:24:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:24:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.558429 -999.00  +23.50  19.32     23   +1.50 1 1 1 1 1   888    0 24.03 40.89 ----- 19.3 19.3 125.4 28.3 30.8 -30.5 30.3 -29.7 31.8 -30.2 32.7 -31.0
2026-02-15T15:24:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:24:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:24:45.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.558429
2026-02-15T15:24:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:24:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:24:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:24:45.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:24:45.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:24:45.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:24:11', tmtdew=26.53, humidity=17.26, cloud=0.0, wind=21.07, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:24:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:24:45.235 [DEBUG] [Thread-206609] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:24:45.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:24:45.344 [DEBUG] [Thread-206612] [transport.py] [_log()] starting thread (client mode): 0xa2dc16f0
2026-02-15T15:24:45.344 [DEBUG] [Thread-206612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:24:45.362 [DEBUG] [Thread-206612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:24:45.363 [INFO] [Thread-206612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:24:45.370 [DEBUG] [Thread-206612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] client lang: <none>
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] server lang: <none>
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] kex follows: False
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:24:45.371 [DEBUG] [Thread-206612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:24:45.372 [DEBUG] [Thread-206612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:24:45.372 [DEBUG] [Thread-206612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:24:45.372 [DEBUG] [Thread-206612] [transport.py] [_log()] Compression: none
2026-02-15T15:24:45.372 [DEBUG] [Thread-206612] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:24:45.431 [DEBUG] [Thread-206612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:24:45.432 [DEBUG] [Thread-206612] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:24:45.432 [DEBUG] [Thread-206612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:24:45.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:24:45.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:24:45.496 [DEBUG] [Thread-206612] [transport.py] [_log()] userauth is OK
2026-02-15T15:24:45.496 [DEBUG] [Thread-206612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:24:45.496 [DEBUG] [Thread-206612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:24:45.496 [DEBUG] [Thread-206612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:24:45.496 [DEBUG] [Thread-206612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:24:45.516 [INFO] [Thread-206612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:24:45.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:24:45.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:24:46.385 [DEBUG] [Thread-206612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:24:46.385 [DEBUG] [Thread-206612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:24:46.433 [DEBUG] [Thread-206612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:24:46.433 [DEBUG] [Thread-206612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:24:46.442 [DEBUG] [Thread-206612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:24:46.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:24:46.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:24:46.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:24:46.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:24:46.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:24:46.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:24:46.482 [DEBUG] [Thread-206612] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:24:49.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:49.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:53.745 [DEBUG] [Thread-206614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:24:54.597 [DEBUG] [Thread-206615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:08.797 [DEBUG] [Thread-206616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:16.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:25:16.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:25:16.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:25:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 24, 47), 26.3, 17.23, 0.0, 24.6, 24.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:25:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:24:47
2026-02-15T15:25:18.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:25:18.847 [DEBUG] [Thread-206617] [transport.py] [_log()] starting thread (client mode): 0xa2d00580
2026-02-15T15:25:18.847 [DEBUG] [Thread-206617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:25:18.866 [DEBUG] [Thread-206617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:25:18.866 [INFO] [Thread-206617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:25:18.869 [DEBUG] [Thread-206617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:25:18.869 [DEBUG] [Thread-206617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:25:18.869 [DEBUG] [Thread-206617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:25:18.869 [DEBUG] [Thread-206617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:18.869 [DEBUG] [Thread-206617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:18.869 [DEBUG] [Thread-206617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] client lang: <none>
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] server lang: <none>
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] kex follows: False
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] Compression: none
2026-02-15T15:25:18.870 [DEBUG] [Thread-206617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:25:18.888 [DEBUG] [Thread-206617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:25:18.889 [DEBUG] [Thread-206617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:25:18.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:25:18.891 [DEBUG] [Thread-206617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:25:18.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:25:18.893 [DEBUG] [Thread-206617] [transport.py] [_log()] userauth is OK
2026-02-15T15:25:18.893 [DEBUG] [Thread-206617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:25:18.894 [DEBUG] [Thread-206617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:25:18.894 [DEBUG] [Thread-206617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:25:18.894 [DEBUG] [Thread-206617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:25:18.919 [INFO] [Thread-206617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:25:18.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:25:19.531 [DEBUG] [Thread-206617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:25:19.532 [DEBUG] [Thread-206617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:25:19.532 [DEBUG] [Thread-206617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:25:19.573 [DEBUG] [Thread-206617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:25:19.573 [DEBUG] [Thread-206617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:25:19.577 [DEBUG] [Thread-206617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:25:19.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:25:19.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:25:19.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:25:19.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:25:19.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:25:19.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:25:19.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:25:19.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:25:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:25:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.558777 -999.00  +23.70  18.82     23   +1.80 1 1 1 1 1   888    0 24.20 34.65 ----- 18.8 18.8 131.0 24.3 30.9 -30.5 30.4 -30.0 31.8 -28.6 32.7 -31.0
2026-02-15T15:25:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:25:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:25:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.558777
2026-02-15T15:25:19.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:25:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:25:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:25:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:25:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:25:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:24:47', tmtdew=26.3, humidity=17.23, cloud=0.0, wind=24.6, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:24:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:25:19.605 [DEBUG] [Thread-206617] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:25:19.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:25:19.700 [DEBUG] [Thread-206620] [transport.py] [_log()] starting thread (client mode): 0xa2d00cd0
2026-02-15T15:25:19.700 [DEBUG] [Thread-206620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:25:19.721 [DEBUG] [Thread-206620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:25:19.721 [INFO] [Thread-206620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] client lang: <none>
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] server lang: <none>
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] kex follows: False
2026-02-15T15:25:19.729 [DEBUG] [Thread-206620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:25:19.730 [DEBUG] [Thread-206620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:25:19.730 [DEBUG] [Thread-206620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:25:19.730 [DEBUG] [Thread-206620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:25:19.730 [DEBUG] [Thread-206620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:25:19.730 [DEBUG] [Thread-206620] [transport.py] [_log()] Compression: none
2026-02-15T15:25:19.730 [DEBUG] [Thread-206620] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:25:19.790 [DEBUG] [Thread-206620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:25:19.790 [DEBUG] [Thread-206620] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:25:19.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:25:19.792 [DEBUG] [Thread-206620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:25:19.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:25:19.852 [DEBUG] [Thread-206620] [transport.py] [_log()] userauth is OK
2026-02-15T15:25:19.852 [DEBUG] [Thread-206620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:25:19.852 [DEBUG] [Thread-206620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:25:19.852 [DEBUG] [Thread-206620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:25:19.853 [DEBUG] [Thread-206620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:25:19.873 [INFO] [Thread-206620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:25:19.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:25:19.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:25:20.680 [DEBUG] [Thread-206620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:25:20.681 [DEBUG] [Thread-206620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:25:20.728 [DEBUG] [Thread-206620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:25:20.729 [DEBUG] [Thread-206620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:25:20.738 [DEBUG] [Thread-206620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:25:20.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:25:20.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:25:20.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:25:20.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:25:20.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:25:20.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:25:20.775 [DEBUG] [Thread-206620] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:25:23.834 [DEBUG] [Thread-206622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:38.893 [DEBUG] [Thread-206623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:49.891 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:49.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:50.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:25:50.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:25:50.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:25:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 25, 22), 26.27, 17.26, 0.0, 23.61, 24.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:25:52.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:25:22
2026-02-15T15:25:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:25:53.164 [DEBUG] [Thread-206624] [transport.py] [_log()] starting thread (client mode): 0xa81d72e0
2026-02-15T15:25:53.164 [DEBUG] [Thread-206624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:25:53.178 [DEBUG] [Thread-206624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:25:53.178 [INFO] [Thread-206624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] client lang: <none>
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] server lang: <none>
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] kex follows: False
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:25:53.181 [DEBUG] [Thread-206624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:25:53.182 [DEBUG] [Thread-206624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:25:53.182 [DEBUG] [Thread-206624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:25:53.182 [DEBUG] [Thread-206624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:25:53.182 [DEBUG] [Thread-206624] [transport.py] [_log()] Compression: none
2026-02-15T15:25:53.182 [DEBUG] [Thread-206624] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:25:53.198 [DEBUG] [Thread-206624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:25:53.198 [DEBUG] [Thread-206624] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:25:53.199 [DEBUG] [Thread-206624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:25:53.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:25:53.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:25:53.201 [DEBUG] [Thread-206624] [transport.py] [_log()] userauth is OK
2026-02-15T15:25:53.201 [DEBUG] [Thread-206624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:25:53.201 [DEBUG] [Thread-206624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:25:53.201 [DEBUG] [Thread-206624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:25:53.201 [DEBUG] [Thread-206624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:25:53.225 [INFO] [Thread-206624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:25:53.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:25:53.883 [DEBUG] [Thread-206624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:25:53.883 [DEBUG] [Thread-206624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:25:53.883 [DEBUG] [Thread-206624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:25:53.924 [DEBUG] [Thread-206624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:25:53.924 [DEBUG] [Thread-206624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:25:53.928 [DEBUG] [Thread-206624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:25:53.932 [DEBUG] [Thread-206626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:53.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:25:53.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:25:53.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:25:53.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:25:53.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:25:53.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:25:53.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:25:53.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:25:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:25:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.559471 -999.00  +22.90  10.45     24   +1.40 1 1 1 1 1   888    0 23.12 24.06 ----- 10.4 10.4 114.7 16.4 30.5 -30.2 30.4 -29.3 31.8 -29.1 32.5 -31.4
2026-02-15T15:25:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:25:53.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:25:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.559471
2026-02-15T15:25:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:25:53.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:25:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:25:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:25:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:25:53.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:25:22', tmtdew=26.27, humidity=17.26, cloud=0.0, wind=23.61, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:25:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:25:53.952 [DEBUG] [Thread-206624] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:25:54.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:25:54.049 [DEBUG] [Thread-206628] [transport.py] [_log()] starting thread (client mode): 0xa2d4d540
2026-02-15T15:25:54.049 [DEBUG] [Thread-206628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:25:54.064 [DEBUG] [Thread-206628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:25:54.065 [INFO] [Thread-206628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:25:54.072 [DEBUG] [Thread-206628] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:25:54.072 [DEBUG] [Thread-206628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] client lang: <none>
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] server lang: <none>
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] kex follows: False
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] Compression: none
2026-02-15T15:25:54.073 [DEBUG] [Thread-206628] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:25:54.132 [DEBUG] [Thread-206628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:25:54.133 [DEBUG] [Thread-206628] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:25:54.133 [DEBUG] [Thread-206628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:25:54.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:25:54.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:25:54.189 [DEBUG] [Thread-206628] [transport.py] [_log()] userauth is OK
2026-02-15T15:25:54.189 [DEBUG] [Thread-206628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:25:54.189 [DEBUG] [Thread-206628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:25:54.190 [DEBUG] [Thread-206628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:25:54.190 [DEBUG] [Thread-206628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:25:54.209 [INFO] [Thread-206628] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:25:54.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:25:54.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:25:54.634 [DEBUG] [Thread-206630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:25:55.063 [DEBUG] [Thread-206628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:25:55.064 [DEBUG] [Thread-206628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:25:55.111 [DEBUG] [Thread-206628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:25:55.111 [DEBUG] [Thread-206628] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:25:55.120 [DEBUG] [Thread-206628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:25:55.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:25:55.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:25:55.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:25:55.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:25:55.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:25:55.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:25:55.151 [DEBUG] [Thread-206628] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:26:08.967 [DEBUG] [Thread-206631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:24.022 [DEBUG] [Thread-206632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:25.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:26:25.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:26:25.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:26:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 25, 58), 25.97, 17.89, 0.0, 14.89, 23.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:26:27.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:25:58
2026-02-15T15:26:27.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:26:27.543 [DEBUG] [Thread-206633] [transport.py] [_log()] starting thread (client mode): 0xa81d5600
2026-02-15T15:26:27.543 [DEBUG] [Thread-206633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:26:27.563 [DEBUG] [Thread-206633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:26:27.563 [INFO] [Thread-206633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:26:27.566 [DEBUG] [Thread-206633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] client lang: <none>
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] server lang: <none>
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] kex follows: False
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] Compression: none
2026-02-15T15:26:27.567 [DEBUG] [Thread-206633] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:26:27.585 [DEBUG] [Thread-206633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:26:27.586 [DEBUG] [Thread-206633] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:26:27.587 [DEBUG] [Thread-206633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:26:27.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:26:27.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:26:27.630 [DEBUG] [Thread-206633] [transport.py] [_log()] userauth is OK
2026-02-15T15:26:27.630 [DEBUG] [Thread-206633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:26:27.630 [DEBUG] [Thread-206633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:26:27.630 [DEBUG] [Thread-206633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:26:27.631 [DEBUG] [Thread-206633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:26:27.650 [INFO] [Thread-206633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:26:27.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:26:28.292 [DEBUG] [Thread-206633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:26:28.292 [DEBUG] [Thread-206633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:26:28.293 [DEBUG] [Thread-206633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:26:28.333 [DEBUG] [Thread-206633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:26:28.334 [DEBUG] [Thread-206633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:26:28.338 [DEBUG] [Thread-206633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:26:28.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:26:28.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:26:28.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:26:28.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:26:28.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:26:28.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:26:28.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:26:28.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:26:28.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:26:28.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.559818 -999.00  +23.40  13.52     24   +1.70 1 1 1 1 1   888    0 23.03 17.57 ----- 13.5 13.5 134.9 17.7 30.7 -30.1 30.6 -29.1 32.0 -28.0 32.7 -29.8
2026-02-15T15:26:28.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:26:28.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:26:28.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.559818
2026-02-15T15:26:28.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:26:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:26:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:26:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:26:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:26:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:25:58', tmtdew=25.97, humidity=17.89, cloud=0.0, wind=14.89, temperature=23.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:26:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:26:28.365 [DEBUG] [Thread-206633] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:26:28.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:26:28.474 [DEBUG] [Thread-206636] [transport.py] [_log()] starting thread (client mode): 0xa81d7d00
2026-02-15T15:26:28.474 [DEBUG] [Thread-206636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:26:28.489 [DEBUG] [Thread-206636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:26:28.490 [INFO] [Thread-206636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:26:28.498 [DEBUG] [Thread-206636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] client lang: <none>
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] server lang: <none>
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] kex follows: False
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:26:28.499 [DEBUG] [Thread-206636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:26:28.500 [DEBUG] [Thread-206636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:26:28.500 [DEBUG] [Thread-206636] [transport.py] [_log()] Compression: none
2026-02-15T15:26:28.500 [DEBUG] [Thread-206636] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:26:28.560 [DEBUG] [Thread-206636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:26:28.561 [DEBUG] [Thread-206636] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:26:28.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:26:28.562 [DEBUG] [Thread-206636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:26:28.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:26:28.617 [DEBUG] [Thread-206636] [transport.py] [_log()] userauth is OK
2026-02-15T15:26:28.617 [DEBUG] [Thread-206636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:26:28.617 [DEBUG] [Thread-206636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:26:28.617 [DEBUG] [Thread-206636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:26:28.617 [DEBUG] [Thread-206636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:26:28.635 [INFO] [Thread-206636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:26:28.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:26:28.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:26:29.452 [DEBUG] [Thread-206636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:26:29.452 [DEBUG] [Thread-206636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:26:29.500 [DEBUG] [Thread-206636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:26:29.500 [DEBUG] [Thread-206636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:26:29.508 [DEBUG] [Thread-206636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:26:29.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:26: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')
2026-02-15T15:26: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
2026-02-15T15:26:29.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:26:29.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:26:29.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:26:29.540 [DEBUG] [Thread-206636] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:26:39.059 [DEBUG] [Thread-206638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:50.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:50.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:54.112 [DEBUG] [Thread-206639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:54.682 [DEBUG] [Thread-206640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:26:59.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:26:59.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:26:59.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:27:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 26, 33), 26.35, 17.35, 0.0, 22.51, 24.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:27:01.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:26:33
2026-02-15T15:27:01.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:27:01.904 [DEBUG] [Thread-206641] [transport.py] [_log()] starting thread (client mode): 0xa2d01480
2026-02-15T15:27:01.904 [DEBUG] [Thread-206641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:27:01.923 [DEBUG] [Thread-206641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:27:01.924 [INFO] [Thread-206641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] client lang: <none>
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] server lang: <none>
2026-02-15T15:27:01.925 [DEBUG] [Thread-206641] [transport.py] [_log()] kex follows: False
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] Compression: none
2026-02-15T15:27:01.926 [DEBUG] [Thread-206641] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:27:01.940 [DEBUG] [Thread-206641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:27:01.941 [DEBUG] [Thread-206641] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:27:01.942 [DEBUG] [Thread-206641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:27:01.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:27:01.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:27:01.945 [DEBUG] [Thread-206641] [transport.py] [_log()] userauth is OK
2026-02-15T15:27:01.946 [DEBUG] [Thread-206641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:27:01.946 [DEBUG] [Thread-206641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:27:01.946 [DEBUG] [Thread-206641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:27:01.946 [DEBUG] [Thread-206641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:27:01.972 [INFO] [Thread-206641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:27:01.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:27:02.642 [DEBUG] [Thread-206641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:27:02.642 [DEBUG] [Thread-206641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:27:02.643 [DEBUG] [Thread-206641] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:27:02.684 [DEBUG] [Thread-206641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:27:02.684 [DEBUG] [Thread-206641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:27:02.687 [DEBUG] [Thread-206641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:27:02.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:27:02.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:27:02.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:27:02.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:27:02.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:27:02.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:27:02.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:27:02.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:27:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:27:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.560166 -999.00  +23.70  14.37     23   +1.50 1 1 1 1 1   888    0 23.11 13.73 ----- 14.4 14.4 149.2 23.3 30.8 -31.2 30.6 -29.8 32.1 -28.2 32.8 -29.9
2026-02-15T15:27:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:27:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:27:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.560166
2026-02-15T15:27:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:27:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:27:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:27:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:27:02.715 [DEBUG] [Thread-206641] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:27:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:27:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:26:33', tmtdew=26.35, humidity=17.35, cloud=0.0, wind=22.51, temperature=24.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:26:38.342', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:27:02.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:27:02.812 [DEBUG] [Thread-206644] [transport.py] [_log()] starting thread (client mode): 0xa5742fe0
2026-02-15T15:27:02.812 [DEBUG] [Thread-206644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:27:02.826 [DEBUG] [Thread-206644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:27:02.827 [INFO] [Thread-206644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:27:02.835 [DEBUG] [Thread-206644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:27:02.835 [DEBUG] [Thread-206644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:27:02.835 [DEBUG] [Thread-206644] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] client lang: <none>
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] server lang: <none>
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] kex follows: False
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:27:02.836 [DEBUG] [Thread-206644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:27:02.837 [DEBUG] [Thread-206644] [transport.py] [_log()] Compression: none
2026-02-15T15:27:02.837 [DEBUG] [Thread-206644] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:27:02.891 [DEBUG] [Thread-206644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:27:02.892 [DEBUG] [Thread-206644] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:27:02.892 [DEBUG] [Thread-206644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:27:02.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:27:02.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:27:02.948 [DEBUG] [Thread-206644] [transport.py] [_log()] userauth is OK
2026-02-15T15:27:02.948 [DEBUG] [Thread-206644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:27:02.948 [DEBUG] [Thread-206644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:27:02.948 [DEBUG] [Thread-206644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:27:02.948 [DEBUG] [Thread-206644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:27:02.966 [INFO] [Thread-206644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:27:02.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:27:02.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:27:03.781 [DEBUG] [Thread-206644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:27:03.781 [DEBUG] [Thread-206644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:27:03.829 [DEBUG] [Thread-206644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:27:03.829 [DEBUG] [Thread-206644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:27:03.838 [DEBUG] [Thread-206644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:27:03.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:27:03.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:27:03.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:27:03.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:27:03.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:27:03.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:27:03.874 [DEBUG] [Thread-206644] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:27:09.150 [DEBUG] [Thread-206646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:27:24.202 [DEBUG] [Thread-206647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:27:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:27:33.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:27:33.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:27:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 27, 8), 26.04, 17.51, 0.0, 19.16, 23.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:27:35.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:27:08
2026-02-15T15:27:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:27:36.272 [DEBUG] [Thread-206648] [transport.py] [_log()] starting thread (client mode): 0xa57423b0
2026-02-15T15:27:36.272 [DEBUG] [Thread-206648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:27:36.290 [DEBUG] [Thread-206648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:27:36.290 [INFO] [Thread-206648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:27:36.291 [DEBUG] [Thread-206648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] client lang: <none>
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] server lang: <none>
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] kex follows: False
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] Compression: none
2026-02-15T15:27:36.292 [DEBUG] [Thread-206648] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:27:36.300 [DEBUG] [Thread-206648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:27:36.300 [DEBUG] [Thread-206648] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:27:36.300 [DEBUG] [Thread-206648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:27:36.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:27:36.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:27:36.302 [DEBUG] [Thread-206648] [transport.py] [_log()] userauth is OK
2026-02-15T15:27:36.302 [DEBUG] [Thread-206648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:27:36.302 [DEBUG] [Thread-206648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:27:36.302 [DEBUG] [Thread-206648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:27:36.302 [DEBUG] [Thread-206648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:27:36.311 [INFO] [Thread-206648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:27:36.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:27:36.907 [DEBUG] [Thread-206648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:27:36.907 [DEBUG] [Thread-206648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:27:36.908 [DEBUG] [Thread-206648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:27:36.948 [DEBUG] [Thread-206648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:27:36.948 [DEBUG] [Thread-206648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:27:36.952 [DEBUG] [Thread-206648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:27:36.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:27:36.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:27:36.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:27:36.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:27:36.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:27:36.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:27:36.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:27:36.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:27:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:27:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.560513 -999.00  +23.70   9.95     23   +1.40 1 1 1 1 1   888    0 22.71 9.83 ----- 9.9 9.9 170.8 23.6 30.9 -30.9 30.5 -29.7 32.0 -29.1 32.9 -31.3
2026-02-15T15:27:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:27:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:27:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.560513
2026-02-15T15:27:36.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:27:36.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:27:36.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:27:36.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:27:36.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:27:36.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:27:08', tmtdew=26.04, humidity=17.51, cloud=0.0, wind=19.16, temperature=23.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:27:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:27:36.983 [DEBUG] [Thread-206648] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:27:37.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:27:37.082 [DEBUG] [Thread-206651] [transport.py] [_log()] starting thread (client mode): 0xa5740c40
2026-02-15T15:27:37.082 [DEBUG] [Thread-206651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:27:37.101 [DEBUG] [Thread-206651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:27:37.101 [INFO] [Thread-206651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:27:37.109 [DEBUG] [Thread-206651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] client lang: <none>
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] server lang: <none>
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] kex follows: False
2026-02-15T15:27:37.110 [DEBUG] [Thread-206651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:27:37.111 [DEBUG] [Thread-206651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:27:37.111 [DEBUG] [Thread-206651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:27:37.111 [DEBUG] [Thread-206651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:27:37.111 [DEBUG] [Thread-206651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:27:37.111 [DEBUG] [Thread-206651] [transport.py] [_log()] Compression: none
2026-02-15T15:27:37.111 [DEBUG] [Thread-206651] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:27:37.168 [DEBUG] [Thread-206651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:27:37.169 [DEBUG] [Thread-206651] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:27:37.169 [DEBUG] [Thread-206651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:27:37.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:27:37.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:27:37.223 [DEBUG] [Thread-206651] [transport.py] [_log()] userauth is OK
2026-02-15T15:27:37.224 [DEBUG] [Thread-206651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:27:37.224 [DEBUG] [Thread-206651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:27:37.224 [DEBUG] [Thread-206651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:27:37.224 [DEBUG] [Thread-206651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:27:37.243 [INFO] [Thread-206651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:27:37.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:27:37.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:27:38.074 [DEBUG] [Thread-206651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:27:38.075 [DEBUG] [Thread-206651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:27:38.122 [DEBUG] [Thread-206651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:27:38.122 [DEBUG] [Thread-206651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:27:38.134 [DEBUG] [Thread-206651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:27:38.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:27:38.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:27:38.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:27:38.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:27:38.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:27:38.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:27:38.170 [DEBUG] [Thread-206651] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:27:39.239 [DEBUG] [Thread-206653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:27:50.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:27:50.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:27:54.290 [DEBUG] [Thread-206654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:27:54.719 [DEBUG] [Thread-206655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:08.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:28:08.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:28:08.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:28:09.330 [DEBUG] [Thread-206656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 27, 44), 25.85, 17.76, 0.0, 16.78, 23.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:28:10.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:27:44
2026-02-15T15:28:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:28:11.082 [DEBUG] [Thread-206657] [transport.py] [_log()] starting thread (client mode): 0xa2d4e110
2026-02-15T15:28:11.082 [DEBUG] [Thread-206657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:28:11.102 [DEBUG] [Thread-206657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:28:11.102 [INFO] [Thread-206657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] client lang: <none>
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] server lang: <none>
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] kex follows: False
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] Compression: none
2026-02-15T15:28:11.105 [DEBUG] [Thread-206657] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:28:11.120 [DEBUG] [Thread-206657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:28:11.121 [DEBUG] [Thread-206657] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:28:11.121 [DEBUG] [Thread-206657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:28:11.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:28:11.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:28:11.123 [DEBUG] [Thread-206657] [transport.py] [_log()] userauth is OK
2026-02-15T15:28:11.123 [DEBUG] [Thread-206657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:28:11.123 [DEBUG] [Thread-206657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:28:11.123 [DEBUG] [Thread-206657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:28:11.123 [DEBUG] [Thread-206657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:28:11.150 [INFO] [Thread-206657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:28:11.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:28:11.774 [DEBUG] [Thread-206657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:28:11.774 [DEBUG] [Thread-206657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:28:11.775 [DEBUG] [Thread-206657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:28:11.815 [DEBUG] [Thread-206657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:28:11.815 [DEBUG] [Thread-206657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:28:11.818 [DEBUG] [Thread-206657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:28:11.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:28:11.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:28:11.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:28:11.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:28:11.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:28:11.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:28:11.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:28:11.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:28:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:28:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.560860 -999.00  +23.80  15.93     23   +1.40 1 1 1 1 1   888    0 22.83 6.43 ----- 15.9 15.9 171.8 19.9 30.9 -29.8 30.5 -30.1 32.1 -29.0 32.9 -31.0
2026-02-15T15:28:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:28:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:28:11.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.560860
2026-02-15T15:28:11.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:28:11.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:28:11.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:28:11.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:28:11.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:28:11.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:27:44', tmtdew=25.85, humidity=17.76, cloud=0.0, wind=16.78, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:27:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:28:11.845 [DEBUG] [Thread-206657] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:28:11.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:28:11.941 [DEBUG] [Thread-206660] [transport.py] [_log()] starting thread (client mode): 0xa2d4df00
2026-02-15T15:28:11.941 [DEBUG] [Thread-206660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:28:11.958 [DEBUG] [Thread-206660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:28:11.958 [INFO] [Thread-206660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:28:11.966 [DEBUG] [Thread-206660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:28:11.966 [DEBUG] [Thread-206660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] client lang: <none>
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] server lang: <none>
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] kex follows: False
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:28:11.967 [DEBUG] [Thread-206660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:28:11.968 [DEBUG] [Thread-206660] [transport.py] [_log()] Compression: none
2026-02-15T15:28:11.968 [DEBUG] [Thread-206660] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:28:12.023 [DEBUG] [Thread-206660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:28:12.023 [DEBUG] [Thread-206660] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:28:12.024 [DEBUG] [Thread-206660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:28:12.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:28:12.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:28:12.082 [DEBUG] [Thread-206660] [transport.py] [_log()] userauth is OK
2026-02-15T15:28:12.083 [DEBUG] [Thread-206660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:28:12.083 [DEBUG] [Thread-206660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:28:12.083 [DEBUG] [Thread-206660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:28:12.083 [DEBUG] [Thread-206660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:28:12.104 [INFO] [Thread-206660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:28:12.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:28:12.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:28:12.890 [DEBUG] [Thread-206660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:28:12.891 [DEBUG] [Thread-206660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:28:12.940 [DEBUG] [Thread-206660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:28:12.940 [DEBUG] [Thread-206660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:28:12.949 [DEBUG] [Thread-206660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:28:12.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:28:12.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:28:12.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:28:12.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:28:12.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:28:12.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:28:12.985 [DEBUG] [Thread-206660] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:28:24.362 [DEBUG] [Thread-206662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:39.414 [DEBUG] [Thread-206663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:42.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:28:42.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:28:42.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:28:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 28, 19), 25.78, 17.83, 0.0, 14.47, 23.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:28:44.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:28:19
2026-02-15T15:28:45.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:28:45.455 [DEBUG] [Thread-206664] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-15T15:28:45.456 [DEBUG] [Thread-206664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:28:45.476 [DEBUG] [Thread-206664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:28:45.476 [INFO] [Thread-206664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:28:45.478 [DEBUG] [Thread-206664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] client lang: <none>
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] server lang: <none>
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] kex follows: False
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:28:45.479 [DEBUG] [Thread-206664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:28:45.480 [DEBUG] [Thread-206664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:28:45.480 [DEBUG] [Thread-206664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:28:45.480 [DEBUG] [Thread-206664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:28:45.480 [DEBUG] [Thread-206664] [transport.py] [_log()] Compression: none
2026-02-15T15:28:45.480 [DEBUG] [Thread-206664] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:28:45.499 [DEBUG] [Thread-206664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:28:45.499 [DEBUG] [Thread-206664] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:28:45.500 [DEBUG] [Thread-206664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:28:45.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:28:45.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:28:45.501 [DEBUG] [Thread-206664] [transport.py] [_log()] userauth is OK
2026-02-15T15:28:45.502 [DEBUG] [Thread-206664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:28:45.502 [DEBUG] [Thread-206664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:28:45.502 [DEBUG] [Thread-206664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:28:45.502 [DEBUG] [Thread-206664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:28:45.526 [INFO] [Thread-206664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:28:45.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:28:46.173 [DEBUG] [Thread-206664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:28:46.173 [DEBUG] [Thread-206664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:28:46.174 [DEBUG] [Thread-206664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:28:46.214 [DEBUG] [Thread-206664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:28:46.215 [DEBUG] [Thread-206664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:28:46.218 [DEBUG] [Thread-206664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:28:46.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:28:46.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:28:46.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:28:46.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:28:46.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:28:46.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:28:46.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:28:46.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:28:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:28:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.561207 -999.00  +23.70   9.86     23   +1.30 1 1 1 1 1   888    0 22.98 4.67 ----- 9.9 9.9 170.8 18.4 31.0 -29.7 30.5 -29.8 32.1 -29.2 33.0 -30.4
2026-02-15T15:28:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:28:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:28:46.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.561207
2026-02-15T15:28:46.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:28:46.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:28:46.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:28:46.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:28:46.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:28:46.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:28:19', tmtdew=25.78, humidity=17.83, cloud=0.0, wind=14.47, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:28:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:28:46.248 [DEBUG] [Thread-206664] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:28:46.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:28:46.347 [DEBUG] [Thread-206667] [transport.py] [_log()] starting thread (client mode): 0xa57e1840
2026-02-15T15:28:46.347 [DEBUG] [Thread-206667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:28:46.365 [DEBUG] [Thread-206667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:28:46.365 [INFO] [Thread-206667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:28:46.375 [DEBUG] [Thread-206667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] client lang: <none>
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] server lang: <none>
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] kex follows: False
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:28:46.376 [DEBUG] [Thread-206667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:28:46.377 [DEBUG] [Thread-206667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:28:46.377 [DEBUG] [Thread-206667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:28:46.377 [DEBUG] [Thread-206667] [transport.py] [_log()] Compression: none
2026-02-15T15:28:46.377 [DEBUG] [Thread-206667] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:28:46.435 [DEBUG] [Thread-206667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:28:46.436 [DEBUG] [Thread-206667] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:28:46.436 [DEBUG] [Thread-206667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:28:46.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:28:46.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:28:46.498 [DEBUG] [Thread-206667] [transport.py] [_log()] userauth is OK
2026-02-15T15:28:46.498 [DEBUG] [Thread-206667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:28:46.498 [DEBUG] [Thread-206667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:28:46.498 [DEBUG] [Thread-206667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:28:46.498 [DEBUG] [Thread-206667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:28:46.512 [INFO] [Thread-206667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:28:46.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:28:46.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:28:47.364 [DEBUG] [Thread-206667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:28:47.364 [DEBUG] [Thread-206667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:28:47.411 [DEBUG] [Thread-206667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:28:47.412 [DEBUG] [Thread-206667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:28:47.421 [DEBUG] [Thread-206667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:28:47.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:28:47.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:28:47.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:28:47.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:28:47.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:28:47.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:28:47.456 [DEBUG] [Thread-206667] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:28:50.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:50.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:54.450 [DEBUG] [Thread-206669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:28:54.753 [DEBUG] [Thread-206670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:09.504 [DEBUG] [Thread-206671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:17.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:29:17.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:29:17.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:29:19.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 28, 55), 26.02, 17.51, 0.0, 15.65, 23.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:29:19.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:28:55
2026-02-15T15:29:19.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:29:19.794 [DEBUG] [Thread-206672] [transport.py] [_log()] starting thread (client mode): 0xa2df8c40
2026-02-15T15:29:19.795 [DEBUG] [Thread-206672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:29:19.815 [DEBUG] [Thread-206672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:29:19.815 [INFO] [Thread-206672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] client lang: <none>
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] server lang: <none>
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] kex follows: False
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] Compression: none
2026-02-15T15:29:19.819 [DEBUG] [Thread-206672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:29:19.834 [DEBUG] [Thread-206672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:29:19.834 [DEBUG] [Thread-206672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:29:19.834 [DEBUG] [Thread-206672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:29:19.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:29:19.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:29:19.835 [DEBUG] [Thread-206672] [transport.py] [_log()] userauth is OK
2026-02-15T15:29:19.835 [DEBUG] [Thread-206672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:29:19.835 [DEBUG] [Thread-206672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:29:19.835 [DEBUG] [Thread-206672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:29:19.835 [DEBUG] [Thread-206672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:29:19.850 [INFO] [Thread-206672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:29:19.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:29:20.501 [DEBUG] [Thread-206672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:29:20.501 [DEBUG] [Thread-206672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:29:20.502 [DEBUG] [Thread-206672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:29:20.542 [DEBUG] [Thread-206672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:29:20.543 [DEBUG] [Thread-206672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:29:20.546 [DEBUG] [Thread-206672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:29:20.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:29:20.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:29:20.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:29:20.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:29:20.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:29:20.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:29:20.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:29:20.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:29:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:29:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.561554 -999.00  +23.80  12.07     23   +1.50 1 1 1 1 1   888    0 22.68 3.12 ----- 12.1 12.1 174.0 13.7 31.1 -30.0 30.4 -30.5 32.1 -28.0 33.1 -31.1
2026-02-15T15:29:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:29:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:29:20.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.561554
2026-02-15T15:29:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:29:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:29:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:29:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:29:20.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:29:20.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:28:55', tmtdew=26.02, humidity=17.51, cloud=0.0, wind=15.65, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:28:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:29:20.573 [DEBUG] [Thread-206672] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:29:20.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:29:20.671 [DEBUG] [Thread-206675] [transport.py] [_log()] starting thread (client mode): 0xa2d4f3a0
2026-02-15T15:29:20.671 [DEBUG] [Thread-206675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:29:20.686 [DEBUG] [Thread-206675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:29:20.686 [INFO] [Thread-206675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] client lang: <none>
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] server lang: <none>
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] kex follows: False
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:29:20.694 [DEBUG] [Thread-206675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:29:20.695 [DEBUG] [Thread-206675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:29:20.695 [DEBUG] [Thread-206675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:29:20.695 [DEBUG] [Thread-206675] [transport.py] [_log()] Compression: none
2026-02-15T15:29:20.695 [DEBUG] [Thread-206675] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:29:20.754 [DEBUG] [Thread-206675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:29:20.754 [DEBUG] [Thread-206675] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:29:20.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:29:20.755 [DEBUG] [Thread-206675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:29:20.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:29:20.813 [DEBUG] [Thread-206675] [transport.py] [_log()] userauth is OK
2026-02-15T15:29:20.813 [DEBUG] [Thread-206675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:29:20.813 [DEBUG] [Thread-206675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:29:20.813 [DEBUG] [Thread-206675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:29:20.813 [DEBUG] [Thread-206675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:29:20.832 [INFO] [Thread-206675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:29:20.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:29:20.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:29:21.641 [DEBUG] [Thread-206675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:29:21.641 [DEBUG] [Thread-206675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:29:21.688 [DEBUG] [Thread-206675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:29:21.688 [DEBUG] [Thread-206675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:29:21.697 [DEBUG] [Thread-206675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:29:21.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:29: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')
2026-02-15T15:29:21.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:29:21.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:29:21.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:29:21.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:29:21.733 [DEBUG] [Thread-206675] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:29:24.541 [DEBUG] [Thread-206677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:39.591 [DEBUG] [Thread-206678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:50.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:50.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:29:51.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:29:51.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:29:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 29, 31), 26.23, 17.33, 0.0, 20.98, 24.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:29:53.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:29:31
2026-02-15T15:29:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:29:54.331 [DEBUG] [Thread-206679] [transport.py] [_log()] starting thread (client mode): 0xa2d4c3d0
2026-02-15T15:29:54.331 [DEBUG] [Thread-206679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:29:54.352 [DEBUG] [Thread-206679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:29:54.352 [INFO] [Thread-206679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:29:54.355 [DEBUG] [Thread-206679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:29:54.355 [DEBUG] [Thread-206679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:29:54.355 [DEBUG] [Thread-206679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] client lang: <none>
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] server lang: <none>
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] kex follows: False
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] Compression: none
2026-02-15T15:29:54.356 [DEBUG] [Thread-206679] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:29:54.375 [DEBUG] [Thread-206679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:29:54.375 [DEBUG] [Thread-206679] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:29:54.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:29:54.377 [DEBUG] [Thread-206679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:29:54.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:29:54.379 [DEBUG] [Thread-206679] [transport.py] [_log()] userauth is OK
2026-02-15T15:29:54.379 [DEBUG] [Thread-206679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:29:54.379 [DEBUG] [Thread-206679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:29:54.380 [DEBUG] [Thread-206679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:29:54.380 [DEBUG] [Thread-206679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:29:54.397 [INFO] [Thread-206679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:29:54.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:29:54.632 [DEBUG] [Thread-206681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:54.798 [DEBUG] [Thread-206682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:29:55.062 [DEBUG] [Thread-206679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:29:55.062 [DEBUG] [Thread-206679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:29:55.063 [DEBUG] [Thread-206679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:29:55.102 [DEBUG] [Thread-206679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:29:55.102 [DEBUG] [Thread-206679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:29:55.105 [DEBUG] [Thread-206679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:29:55.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:29:55.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:29:55.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:29:55.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:29:55.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:29:55.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:29:55.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:29:55.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:29:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:29:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.561902 -999.00  +24.00  18.76     23   +1.70 1 1 1 1 1   888    0 22.36 1.57 ----- 18.8 18.8 142.4 24.1 31.1 -30.7 30.4 -29.2 32.2 -28.1 33.1 -29.8
2026-02-15T15:29:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:29:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:29:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.561902
2026-02-15T15:29:55.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:29:55.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:29:55.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:29:55.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:29:55.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:29:55.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:29:31', tmtdew=26.23, humidity=17.33, cloud=0.0, wind=20.98, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:29:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:29:55.130 [DEBUG] [Thread-206679] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:29:55.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:29:55.227 [DEBUG] [Thread-206684] [transport.py] [_log()] starting thread (client mode): 0xa2db7ca0
2026-02-15T15:29:55.227 [DEBUG] [Thread-206684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:29:55.242 [DEBUG] [Thread-206684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:29:55.243 [INFO] [Thread-206684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:29:55.250 [DEBUG] [Thread-206684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:29:55.251 [DEBUG] [Thread-206684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] client lang: <none>
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] server lang: <none>
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] kex follows: False
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:29:55.252 [DEBUG] [Thread-206684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:29:55.253 [DEBUG] [Thread-206684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:29:55.253 [DEBUG] [Thread-206684] [transport.py] [_log()] Compression: none
2026-02-15T15:29:55.253 [DEBUG] [Thread-206684] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:29:55.310 [DEBUG] [Thread-206684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:29:55.311 [DEBUG] [Thread-206684] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:29:55.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:29:55.313 [DEBUG] [Thread-206684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:29:55.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:29:55.366 [DEBUG] [Thread-206684] [transport.py] [_log()] userauth is OK
2026-02-15T15:29:55.366 [DEBUG] [Thread-206684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:29:55.366 [DEBUG] [Thread-206684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:29:55.366 [DEBUG] [Thread-206684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:29:55.366 [DEBUG] [Thread-206684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:29:55.385 [INFO] [Thread-206684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:29:55.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:29:55.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:29:56.177 [DEBUG] [Thread-206684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:29:56.178 [DEBUG] [Thread-206684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:29:56.225 [DEBUG] [Thread-206684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:29:56.226 [DEBUG] [Thread-206684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:29:56.235 [DEBUG] [Thread-206684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:29:56.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:29:56.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:29:56.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:29:56.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:29:56.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:29:56.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:29:56.272 [DEBUG] [Thread-206684] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:30:09.668 [DEBUG] [Thread-206686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:30:24.730 [DEBUG] [Thread-206687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:30:26.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:30:26.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:30:26.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:30:28.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 30, 7), 26.14, 17.39, 0.0, 21.12, 23.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:30:28.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:30:07
2026-02-15T15:30:28.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:30:28.606 [DEBUG] [Thread-206688] [transport.py] [_log()] starting thread (client mode): 0xa2d001c0
2026-02-15T15:30:28.607 [DEBUG] [Thread-206688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:30:28.626 [DEBUG] [Thread-206688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:30:28.626 [INFO] [Thread-206688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:30:28.629 [DEBUG] [Thread-206688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] client lang: <none>
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] server lang: <none>
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] kex follows: False
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:30:28.630 [DEBUG] [Thread-206688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:30:28.631 [DEBUG] [Thread-206688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:30:28.631 [DEBUG] [Thread-206688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:30:28.631 [DEBUG] [Thread-206688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:30:28.631 [DEBUG] [Thread-206688] [transport.py] [_log()] Compression: none
2026-02-15T15:30:28.631 [DEBUG] [Thread-206688] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:30:28.648 [DEBUG] [Thread-206688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:30:28.648 [DEBUG] [Thread-206688] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:30:28.649 [DEBUG] [Thread-206688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:30:28.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:30:28.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:30:28.651 [DEBUG] [Thread-206688] [transport.py] [_log()] userauth is OK
2026-02-15T15:30:28.651 [DEBUG] [Thread-206688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:30:28.651 [DEBUG] [Thread-206688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:30:28.651 [DEBUG] [Thread-206688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:30:28.652 [DEBUG] [Thread-206688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:30:28.674 [INFO] [Thread-206688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:30:28.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:30:29.332 [DEBUG] [Thread-206688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:30:29.333 [DEBUG] [Thread-206688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:30:29.333 [DEBUG] [Thread-206688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:30:29.374 [DEBUG] [Thread-206688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:30:29.374 [DEBUG] [Thread-206688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:30:29.377 [DEBUG] [Thread-206688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:30:29.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:30:29.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:30:29.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:30:29.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:30:29.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:30:29.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:30:29.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:30:29.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:30:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:30:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.562596 -999.00  +24.00  24.85     23   +1.90 1 1 1 1 1   888    0 22.01 -3.52 ----- 24.9 24.9 162.6 29.4 30.8 -31.6 30.6 -30.0 32.1 -27.8 33.0 -29.7
2026-02-15T15:30:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:30:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:30:29.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.562596
2026-02-15T15:30:29.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:30:29.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:30:29.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:30:29.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:30:29.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:30:29.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:30:07', tmtdew=26.14, humidity=17.39, cloud=0.0, wind=21.12, temperature=23.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:30:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:30:29.406 [DEBUG] [Thread-206688] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:30:29.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:30:29.495 [DEBUG] [Thread-206691] [transport.py] [_log()] starting thread (client mode): 0xa2db64a0
2026-02-15T15:30:29.495 [DEBUG] [Thread-206691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:30:29.514 [DEBUG] [Thread-206691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:30:29.515 [INFO] [Thread-206691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:30:29.522 [DEBUG] [Thread-206691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:30:29.522 [DEBUG] [Thread-206691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:30:29.522 [DEBUG] [Thread-206691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:30:29.522 [DEBUG] [Thread-206691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:30:29.522 [DEBUG] [Thread-206691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] client lang: <none>
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] server lang: <none>
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] kex follows: False
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:30:29.523 [DEBUG] [Thread-206691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:30:29.524 [DEBUG] [Thread-206691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:30:29.524 [DEBUG] [Thread-206691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:30:29.524 [DEBUG] [Thread-206691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:30:29.524 [DEBUG] [Thread-206691] [transport.py] [_log()] Compression: none
2026-02-15T15:30:29.524 [DEBUG] [Thread-206691] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:30:29.581 [DEBUG] [Thread-206691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:30:29.582 [DEBUG] [Thread-206691] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:30:29.582 [DEBUG] [Thread-206691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:30:29.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:30:29.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:30:29.638 [DEBUG] [Thread-206691] [transport.py] [_log()] userauth is OK
2026-02-15T15:30:29.639 [DEBUG] [Thread-206691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:30:29.639 [DEBUG] [Thread-206691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:30:29.639 [DEBUG] [Thread-206691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:30:29.639 [DEBUG] [Thread-206691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:30:29.657 [INFO] [Thread-206691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:30:29.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:30:29.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:30:30.494 [DEBUG] [Thread-206691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:30:30.495 [DEBUG] [Thread-206691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:30:30.542 [DEBUG] [Thread-206691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:30:30.542 [DEBUG] [Thread-206691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:30:30.551 [DEBUG] [Thread-206691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:30:30.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:30:30.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:30:30.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:30:30.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:30:30.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:30:30.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:30:30.585 [DEBUG] [Thread-206691] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:30:39.764 [DEBUG] [Thread-206693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:30:50.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:30:50.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:30:54.821 [DEBUG] [Thread-206694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:30:54.836 [DEBUG] [Thread-206695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:00.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:31:00.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:31:00.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:31:02.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 30, 42), 26.39, 17.31, 0.0, 33.24, 24.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:31:02.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:30:42
2026-02-15T15:31:02.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:31:02.961 [DEBUG] [Thread-206696] [transport.py] [_log()] starting thread (client mode): 0xa2d010f0
2026-02-15T15:31:02.962 [DEBUG] [Thread-206696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:31:02.981 [DEBUG] [Thread-206696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:31:02.981 [INFO] [Thread-206696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:02.984 [DEBUG] [Thread-206696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] client lang: <none>
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] server lang: <none>
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] kex follows: False
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] Compression: none
2026-02-15T15:31:02.985 [DEBUG] [Thread-206696] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:31:03.003 [DEBUG] [Thread-206696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:31:03.004 [DEBUG] [Thread-206696] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:31:03.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:31:03.004 [DEBUG] [Thread-206696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:31:03.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:31:03.005 [DEBUG] [Thread-206696] [transport.py] [_log()] userauth is OK
2026-02-15T15:31:03.006 [DEBUG] [Thread-206696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:31:03.006 [DEBUG] [Thread-206696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:31:03.006 [DEBUG] [Thread-206696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:31:03.006 [DEBUG] [Thread-206696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:31:03.020 [INFO] [Thread-206696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:31:03.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:31:03.792 [DEBUG] [Thread-206696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:31:03.793 [DEBUG] [Thread-206696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:31:03.793 [DEBUG] [Thread-206696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:31:03.833 [DEBUG] [Thread-206696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:31:03.834 [DEBUG] [Thread-206696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:31:03.837 [DEBUG] [Thread-206696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:31:03.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:31:03.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:31:03.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:31:03.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:31:03.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:31:03.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:31:03.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:31:03.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:31:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:31:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.562943 -999.00  +23.80  27.97     23   +1.60 1 1 1 1 1   888    0 22.12 -5.10 ----- 28.0 28.0 143.0 37.1 30.6 -31.1 30.3 -30.3 31.9 -29.6 32.8 -32.5
2026-02-15T15:31:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:31:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:31:03.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.562943
2026-02-15T15:31:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:31:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:31:03.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:31:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:31:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:31:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:30:42', tmtdew=26.39, humidity=17.31, cloud=0.0, wind=33.24, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:30:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:31:03.863 [DEBUG] [Thread-206696] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:31:03.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:31:03.954 [DEBUG] [Thread-206699] [transport.py] [_log()] starting thread (client mode): 0xa57e0520
2026-02-15T15:31:03.954 [DEBUG] [Thread-206699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:31:03.969 [DEBUG] [Thread-206699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:31:03.969 [INFO] [Thread-206699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:31:03.977 [DEBUG] [Thread-206699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:31:03.977 [DEBUG] [Thread-206699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:31:03.977 [DEBUG] [Thread-206699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] client lang: <none>
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] server lang: <none>
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] kex follows: False
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] Compression: none
2026-02-15T15:31:03.978 [DEBUG] [Thread-206699] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:31:04.037 [DEBUG] [Thread-206699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:31:04.037 [DEBUG] [Thread-206699] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:31:04.038 [DEBUG] [Thread-206699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:31:04.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:31:04.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:31:04.093 [DEBUG] [Thread-206699] [transport.py] [_log()] userauth is OK
2026-02-15T15:31:04.093 [DEBUG] [Thread-206699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:31:04.093 [DEBUG] [Thread-206699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:31:04.093 [DEBUG] [Thread-206699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:31:04.093 [DEBUG] [Thread-206699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:31:04.112 [INFO] [Thread-206699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:31:04.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:31:04.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:31:04.938 [DEBUG] [Thread-206699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:31:04.939 [DEBUG] [Thread-206699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:31:04.986 [DEBUG] [Thread-206699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:31:04.987 [DEBUG] [Thread-206699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:31:04.996 [DEBUG] [Thread-206699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:31:05.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:31:05.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:31:05.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:31:05.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:31:05.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:31:05.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:31:05.033 [DEBUG] [Thread-206699] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:31:09.855 [DEBUG] [Thread-206701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:24.904 [DEBUG] [Thread-206702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:35.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:31:35.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:31:35.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:31:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 31, 17), 25.8, 17.64, 0.0, 30.95, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:31:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:31:17
2026-02-15T15:31:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:31:37.764 [DEBUG] [Thread-206703] [transport.py] [_log()] starting thread (client mode): 0xa2dfa7d0
2026-02-15T15:31:37.764 [DEBUG] [Thread-206703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:31:37.783 [DEBUG] [Thread-206703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:31:37.783 [INFO] [Thread-206703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:31:37.786 [DEBUG] [Thread-206703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] client lang: <none>
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] server lang: <none>
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] kex follows: False
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:31:37.787 [DEBUG] [Thread-206703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:31:37.788 [DEBUG] [Thread-206703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:31:37.788 [DEBUG] [Thread-206703] [transport.py] [_log()] Compression: none
2026-02-15T15:31:37.788 [DEBUG] [Thread-206703] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:31:37.806 [DEBUG] [Thread-206703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:31:37.807 [DEBUG] [Thread-206703] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:31:37.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:31:37.809 [DEBUG] [Thread-206703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:31:37.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:31:37.812 [DEBUG] [Thread-206703] [transport.py] [_log()] userauth is OK
2026-02-15T15:31:37.812 [DEBUG] [Thread-206703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:31:37.812 [DEBUG] [Thread-206703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:31:37.813 [DEBUG] [Thread-206703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:31:37.813 [DEBUG] [Thread-206703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:31:37.836 [INFO] [Thread-206703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:31:37.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:31:38.484 [DEBUG] [Thread-206703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:31:38.484 [DEBUG] [Thread-206703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:31:38.485 [DEBUG] [Thread-206703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:31:38.526 [DEBUG] [Thread-206703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:31:38.526 [DEBUG] [Thread-206703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:31:38.529 [DEBUG] [Thread-206703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:31:38.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:31:38.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:31:38.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:31:38.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:31:38.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:31:38.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:31:38.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:31:38.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:31:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:31:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.563290 -999.00  +23.60  22.12     23   +1.70 1 1 1 1 1   888    0 21.91 -8.76 ----- 22.1 22.1 120.2 30.5 30.6 -31.1 30.3 -29.1 31.8 -30.1 32.5 -34.2
2026-02-15T15:31:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:31:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:31:38.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.563290
2026-02-15T15:31:38.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:31:38.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:31:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:31:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:31:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:31:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:31:17', tmtdew=25.8, humidity=17.64, cloud=0.0, wind=30.95, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:31:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:31:38.558 [DEBUG] [Thread-206703] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:31:38.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:31:38.657 [DEBUG] [Thread-206706] [transport.py] [_log()] starting thread (client mode): 0xa2d04730
2026-02-15T15:31:38.657 [DEBUG] [Thread-206706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:31:38.671 [DEBUG] [Thread-206706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:31:38.671 [INFO] [Thread-206706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:31:38.679 [DEBUG] [Thread-206706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] client lang: <none>
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] server lang: <none>
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] kex follows: False
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:31:38.680 [DEBUG] [Thread-206706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:31:38.681 [DEBUG] [Thread-206706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:31:38.681 [DEBUG] [Thread-206706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:31:38.681 [DEBUG] [Thread-206706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:31:38.681 [DEBUG] [Thread-206706] [transport.py] [_log()] Compression: none
2026-02-15T15:31:38.681 [DEBUG] [Thread-206706] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:31:38.740 [DEBUG] [Thread-206706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:31:38.741 [DEBUG] [Thread-206706] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:31:38.741 [DEBUG] [Thread-206706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:31:38.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:31:38.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:31:38.797 [DEBUG] [Thread-206706] [transport.py] [_log()] userauth is OK
2026-02-15T15:31:38.797 [DEBUG] [Thread-206706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:31:38.798 [DEBUG] [Thread-206706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:31:38.798 [DEBUG] [Thread-206706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:31:38.798 [DEBUG] [Thread-206706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:31:38.823 [INFO] [Thread-206706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:31:38.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:31:38.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:31:39.638 [DEBUG] [Thread-206706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:31:39.639 [DEBUG] [Thread-206706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:31:39.686 [DEBUG] [Thread-206706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:31:39.687 [DEBUG] [Thread-206706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:31:39.696 [DEBUG] [Thread-206706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:31:39.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:31:39.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:31:39.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:31:39.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:31:39.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:31:39.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:31:39.734 [DEBUG] [Thread-206706] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:31:39.940 [DEBUG] [Thread-206708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:50.747 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:50.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:54.870 [DEBUG] [Thread-206709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:31:54.991 [DEBUG] [Thread-206710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:09.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:32:09.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:32:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:32:10.029 [DEBUG] [Thread-206711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 31, 53), 25.3, 18.32, 0.0, 26.29, 23.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:32:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:31:53
2026-02-15T15:32:12.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:32:12.703 [DEBUG] [Thread-206712] [transport.py] [_log()] starting thread (client mode): 0xa2d6afb0
2026-02-15T15:32:12.703 [DEBUG] [Thread-206712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:32:12.717 [DEBUG] [Thread-206712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:32:12.717 [INFO] [Thread-206712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:32:12.721 [DEBUG] [Thread-206712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] client lang: <none>
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] server lang: <none>
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] kex follows: False
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] Compression: none
2026-02-15T15:32:12.722 [DEBUG] [Thread-206712] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:32:12.736 [DEBUG] [Thread-206712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:32:12.736 [DEBUG] [Thread-206712] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:32:12.737 [DEBUG] [Thread-206712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:32:12.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:32:12.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:32:12.739 [DEBUG] [Thread-206712] [transport.py] [_log()] userauth is OK
2026-02-15T15:32:12.739 [DEBUG] [Thread-206712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:32:12.739 [DEBUG] [Thread-206712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:32:12.739 [DEBUG] [Thread-206712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:32:12.739 [DEBUG] [Thread-206712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:32:12.757 [INFO] [Thread-206712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:32:12.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:32:13.382 [DEBUG] [Thread-206712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:32:13.382 [DEBUG] [Thread-206712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:32:13.382 [DEBUG] [Thread-206712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:32:13.423 [DEBUG] [Thread-206712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:32:13.423 [DEBUG] [Thread-206712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:32:13.427 [DEBUG] [Thread-206712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:32:13.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:32:13.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:32:13.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:32:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:32:13.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:32:13.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:32:13.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:32:13.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:32:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:32:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.563638 -999.00  +23.90  23.41     23   +1.80 1 1 1 1 1   888    0 22.16 -12.53 ----- 23.4 23.4 150.6 28.9 30.6 -30.7 30.3 -30.6 31.8 -29.7 32.7 -30.7
2026-02-15T15:32:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:32:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:32:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.563638
2026-02-15T15:32:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:32:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:32:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:32:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:32:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:32:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:31:53', tmtdew=25.3, humidity=18.32, cloud=0.0, wind=26.29, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:31:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:32:13.453 [DEBUG] [Thread-206712] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:32:13.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:32:13.550 [DEBUG] [Thread-206715] [transport.py] [_log()] starting thread (client mode): 0xa81d73d0
2026-02-15T15:32:13.550 [DEBUG] [Thread-206715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:32:13.565 [DEBUG] [Thread-206715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:32:13.565 [INFO] [Thread-206715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] client lang: <none>
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] server lang: <none>
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] kex follows: False
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:32:13.573 [DEBUG] [Thread-206715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:32:13.574 [DEBUG] [Thread-206715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:32:13.574 [DEBUG] [Thread-206715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:32:13.574 [DEBUG] [Thread-206715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:32:13.574 [DEBUG] [Thread-206715] [transport.py] [_log()] Compression: none
2026-02-15T15:32:13.574 [DEBUG] [Thread-206715] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:32:13.632 [DEBUG] [Thread-206715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:32:13.633 [DEBUG] [Thread-206715] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:32:13.642 [DEBUG] [Thread-206715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:32:13.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:32:13.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:32:13.688 [DEBUG] [Thread-206715] [transport.py] [_log()] userauth is OK
2026-02-15T15:32:13.688 [DEBUG] [Thread-206715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:32:13.689 [DEBUG] [Thread-206715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:32:13.689 [DEBUG] [Thread-206715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:32:13.689 [DEBUG] [Thread-206715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:32:13.707 [INFO] [Thread-206715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:32:13.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:32:13.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:32:14.531 [DEBUG] [Thread-206715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:32:14.531 [DEBUG] [Thread-206715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:32:14.579 [DEBUG] [Thread-206715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:32:14.579 [DEBUG] [Thread-206715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:32:14.593 [DEBUG] [Thread-206715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:32:14.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:32:14.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:32:14.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:32:14.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:32:14.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:32:14.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:32:14.639 [DEBUG] [Thread-206715] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:32:25.060 [DEBUG] [Thread-206717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:40.106 [DEBUG] [Thread-206718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:44.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:32:44.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:32:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:32:46.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 32, 28), 25.32, 18.29, 0.0, 23.86, 23.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:32:46.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:32:28
2026-02-15T15:32:46.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:32:47.007 [DEBUG] [Thread-206719] [transport.py] [_log()] starting thread (client mode): 0xa2d4d510
2026-02-15T15:32:47.007 [DEBUG] [Thread-206719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:32:47.026 [DEBUG] [Thread-206719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:32:47.026 [INFO] [Thread-206719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:47.030 [DEBUG] [Thread-206719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] client lang: <none>
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] server lang: <none>
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] kex follows: False
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] Compression: none
2026-02-15T15:32:47.031 [DEBUG] [Thread-206719] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:32:47.050 [DEBUG] [Thread-206719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:32:47.050 [DEBUG] [Thread-206719] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:32:47.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:32:47.052 [DEBUG] [Thread-206719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:32:47.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:32:47.054 [DEBUG] [Thread-206719] [transport.py] [_log()] userauth is OK
2026-02-15T15:32:47.054 [DEBUG] [Thread-206719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:32:47.055 [DEBUG] [Thread-206719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:32:47.055 [DEBUG] [Thread-206719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:32:47.055 [DEBUG] [Thread-206719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:32:47.072 [INFO] [Thread-206719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:32:47.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:32:47.701 [DEBUG] [Thread-206719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:32:47.702 [DEBUG] [Thread-206719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:32:47.702 [DEBUG] [Thread-206719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:32:47.742 [DEBUG] [Thread-206719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:32:47.743 [DEBUG] [Thread-206719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:32:47.746 [DEBUG] [Thread-206719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:32:47.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:32:47.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:32:47.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:32:47.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:32:47.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:32:47.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:32:47.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:32:47.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:32:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:32:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.563986 -999.00  +23.60  18.59     23   +1.60 1 1 1 1 1   888    0 22.07 -16.12 ----- 18.6 18.6 146.8 24.1 30.6 -30.6 30.2 -30.1 31.7 -29.3 32.5 -32.4
2026-02-15T15:32:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:32:47.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:32:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.563986
2026-02-15T15:32:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:32:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:32:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:32:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:32:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:32:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:32:28', tmtdew=25.32, humidity=18.29, cloud=0.0, wind=23.86, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:32:08.390', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:32:47.776 [DEBUG] [Thread-206719] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:32:47.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:32:47.872 [DEBUG] [Thread-206722] [transport.py] [_log()] starting thread (client mode): 0xa2d4feb0
2026-02-15T15:32:47.872 [DEBUG] [Thread-206722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:32:47.887 [DEBUG] [Thread-206722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:32:47.887 [INFO] [Thread-206722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] client lang: <none>
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] server lang: <none>
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] kex follows: False
2026-02-15T15:32:47.895 [DEBUG] [Thread-206722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:32:47.896 [DEBUG] [Thread-206722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:32:47.896 [DEBUG] [Thread-206722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:32:47.896 [DEBUG] [Thread-206722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:32:47.896 [DEBUG] [Thread-206722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:32:47.896 [DEBUG] [Thread-206722] [transport.py] [_log()] Compression: none
2026-02-15T15:32:47.896 [DEBUG] [Thread-206722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:32:47.956 [DEBUG] [Thread-206722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:32:47.956 [DEBUG] [Thread-206722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:32:47.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:32:47.958 [DEBUG] [Thread-206722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:32:47.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:32:48.012 [DEBUG] [Thread-206722] [transport.py] [_log()] userauth is OK
2026-02-15T15:32:48.013 [DEBUG] [Thread-206722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:32:48.013 [DEBUG] [Thread-206722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:32:48.013 [DEBUG] [Thread-206722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:32:48.013 [DEBUG] [Thread-206722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:32:48.032 [INFO] [Thread-206722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:32:48.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:32:48.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:32:48.882 [DEBUG] [Thread-206722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:32:48.883 [DEBUG] [Thread-206722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:32:48.931 [DEBUG] [Thread-206722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:32:48.931 [DEBUG] [Thread-206722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:32:48.940 [DEBUG] [Thread-206722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:32:48.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:32:48.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:32:48.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:32:48.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:32:48.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:32:48.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:32:48.977 [DEBUG] [Thread-206722] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:32:50.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:50.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:54.916 [DEBUG] [Thread-206724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:32:55.142 [DEBUG] [Thread-206725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:10.200 [DEBUG] [Thread-206726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:18.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:33:18.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:33:18.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:33:20.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 33, 3), 25.24, 18.4, 0.0, 24.07, 23.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:33:20.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:33:03
2026-02-15T15:33:21.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:33:21.349 [DEBUG] [Thread-206727] [transport.py] [_log()] starting thread (client mode): 0xa2dfba00
2026-02-15T15:33:21.349 [DEBUG] [Thread-206727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:33:21.370 [DEBUG] [Thread-206727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:33:21.370 [INFO] [Thread-206727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] client lang: <none>
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] server lang: <none>
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] kex follows: False
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] Compression: none
2026-02-15T15:33:21.373 [DEBUG] [Thread-206727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:33:21.389 [DEBUG] [Thread-206727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:33:21.390 [DEBUG] [Thread-206727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:33:21.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:33:21.391 [DEBUG] [Thread-206727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:33:21.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:33:21.394 [DEBUG] [Thread-206727] [transport.py] [_log()] userauth is OK
2026-02-15T15:33:21.394 [DEBUG] [Thread-206727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:33:21.394 [DEBUG] [Thread-206727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:33:21.394 [DEBUG] [Thread-206727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:33:21.395 [DEBUG] [Thread-206727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:33:21.419 [INFO] [Thread-206727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:33:21.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:33:22.057 [DEBUG] [Thread-206727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:33:22.058 [DEBUG] [Thread-206727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:33:22.058 [DEBUG] [Thread-206727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:33:22.098 [DEBUG] [Thread-206727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:33:22.099 [DEBUG] [Thread-206727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:33:22.102 [DEBUG] [Thread-206727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:33:22.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:33:22.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:33:22.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:33:22.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:33:22.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:33:22.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:33:22.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:33:22.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:33:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:33:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.564332 -999.00  +23.70  13.45     23   +1.80 1 1 1 1 1   888    0 21.96 -18.15 ----- 13.4 13.4 155.4 24.8 30.5 -31.0 30.2 -29.8 31.7 -28.9 32.5 -30.9
2026-02-15T15:33:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:33:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:33:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.564332
2026-02-15T15:33:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:33:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:33:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:33:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:33:22.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:33:22.137 [DEBUG] [Thread-206727] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:33:22.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:33:03', tmtdew=25.24, humidity=18.4, cloud=0.0, wind=24.07, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:32:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:33:22.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:33:22.241 [DEBUG] [Thread-206730] [transport.py] [_log()] starting thread (client mode): 0xa2df8a30
2026-02-15T15:33:22.241 [DEBUG] [Thread-206730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:33:22.257 [DEBUG] [Thread-206730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:33:22.257 [INFO] [Thread-206730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:33:22.265 [DEBUG] [Thread-206730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:33:22.265 [DEBUG] [Thread-206730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] client lang: <none>
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] server lang: <none>
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] kex follows: False
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] Compression: none
2026-02-15T15:33:22.266 [DEBUG] [Thread-206730] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:33:22.323 [DEBUG] [Thread-206730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:33:22.324 [DEBUG] [Thread-206730] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:33:22.324 [DEBUG] [Thread-206730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:33:22.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:33:22.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:33:22.379 [DEBUG] [Thread-206730] [transport.py] [_log()] userauth is OK
2026-02-15T15:33:22.379 [DEBUG] [Thread-206730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:33:22.380 [DEBUG] [Thread-206730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:33:22.380 [DEBUG] [Thread-206730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:33:22.380 [DEBUG] [Thread-206730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:33:22.398 [INFO] [Thread-206730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:33:22.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:33:22.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:33:23.209 [DEBUG] [Thread-206730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:33:23.209 [DEBUG] [Thread-206730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:33:23.257 [DEBUG] [Thread-206730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:33:23.257 [DEBUG] [Thread-206730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:33:23.270 [DEBUG] [Thread-206730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:33:23.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:33:23.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:33:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:33:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:33:23.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:33:23.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:33:23.305 [DEBUG] [Thread-206730] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:33:25.238 [DEBUG] [Thread-206732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:40.294 [DEBUG] [Thread-206733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:51.035 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:51.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:33:53.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:33: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-02-15T15:33:54.961 [DEBUG] [Thread-206734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 33, 39), 26.5, 17.25, 0.0, 26.82, 24.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:33:55.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:33:39
2026-02-15T15:33:55.332 [DEBUG] [Thread-206735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:33:55.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:33:55.765 [DEBUG] [Thread-206736] [transport.py] [_log()] starting thread (client mode): 0xa2d68e50
2026-02-15T15:33:55.765 [DEBUG] [Thread-206736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:33:55.784 [DEBUG] [Thread-206736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:33:55.784 [INFO] [Thread-206736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] client lang: <none>
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] server lang: <none>
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] kex follows: False
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] Compression: none
2026-02-15T15:33:55.787 [DEBUG] [Thread-206736] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:33:55.801 [DEBUG] [Thread-206736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:33:55.802 [DEBUG] [Thread-206736] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:33:55.802 [DEBUG] [Thread-206736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:33:55.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:33:55.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:33:55.804 [DEBUG] [Thread-206736] [transport.py] [_log()] userauth is OK
2026-02-15T15:33:55.804 [DEBUG] [Thread-206736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:33:55.804 [DEBUG] [Thread-206736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:33:55.804 [DEBUG] [Thread-206736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:33:55.804 [DEBUG] [Thread-206736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:33:55.825 [INFO] [Thread-206736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:33:55.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:33:56.529 [DEBUG] [Thread-206736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:33:56.529 [DEBUG] [Thread-206736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:33:56.529 [DEBUG] [Thread-206736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:33:56.570 [DEBUG] [Thread-206736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:33:56.571 [DEBUG] [Thread-206736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:33:56.574 [DEBUG] [Thread-206736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:33:56.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:33:56.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:33:56.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:33:56.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:33:56.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:33:56.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:33:56.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:33:56.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:33:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:33:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.564679 -999.00  +23.60  17.76     23   +1.60 1 1 1 1 1   888    0 21.72 -21.94 ----- 17.8 17.8 159.0 22.5 30.5 -31.3 30.1 -29.4 31.7 -29.5 32.5 -31.1
2026-02-15T15:33:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:33:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:33:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.564679
2026-02-15T15:33:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:33:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:33:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:33:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:33:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:33:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:33:39', tmtdew=26.5, humidity=17.25, cloud=0.0, wind=26.82, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:33:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:33:56.600 [DEBUG] [Thread-206736] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:33:56.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:33:56.697 [DEBUG] [Thread-206739] [transport.py] [_log()] starting thread (client mode): 0xa2d18ca0
2026-02-15T15:33:56.698 [DEBUG] [Thread-206739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:33:56.712 [DEBUG] [Thread-206739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:33:56.712 [INFO] [Thread-206739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] client lang: <none>
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] server lang: <none>
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] kex follows: False
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:33:56.720 [DEBUG] [Thread-206739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:33:56.721 [DEBUG] [Thread-206739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:33:56.721 [DEBUG] [Thread-206739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:33:56.721 [DEBUG] [Thread-206739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:33:56.721 [DEBUG] [Thread-206739] [transport.py] [_log()] Compression: none
2026-02-15T15:33:56.721 [DEBUG] [Thread-206739] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:33:56.782 [DEBUG] [Thread-206739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:33:56.783 [DEBUG] [Thread-206739] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:33:56.784 [DEBUG] [Thread-206739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:33:56.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:33:56.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:33:56.839 [DEBUG] [Thread-206739] [transport.py] [_log()] userauth is OK
2026-02-15T15:33:56.839 [DEBUG] [Thread-206739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:33:56.840 [DEBUG] [Thread-206739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:33:56.840 [DEBUG] [Thread-206739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:33:56.840 [DEBUG] [Thread-206739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:33:56.860 [INFO] [Thread-206739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:33:56.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:33:56.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:33:57.673 [DEBUG] [Thread-206739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:33:57.674 [DEBUG] [Thread-206739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:33:57.722 [DEBUG] [Thread-206739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:33:57.722 [DEBUG] [Thread-206739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:33:57.731 [DEBUG] [Thread-206739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:33:57.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:33:57.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:33:57.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:33:57.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:33:57.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:33:57.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:33:57.768 [DEBUG] [Thread-206739] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:34:10.369 [DEBUG] [Thread-206741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:34:25.421 [DEBUG] [Thread-206742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:34:27.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:34:27.790 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:34:27.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:34:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 34, 14), 25.66, 18.39, 0.0, 23.82, 23.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:34:29.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:34:14
2026-02-15T15:34:30.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:34:30.173 [DEBUG] [Thread-206743] [transport.py] [_log()] starting thread (client mode): 0xa2d185e0
2026-02-15T15:34:30.174 [DEBUG] [Thread-206743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:34:30.197 [DEBUG] [Thread-206743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:34:30.197 [INFO] [Thread-206743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:34:30.201 [DEBUG] [Thread-206743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:34:30.201 [DEBUG] [Thread-206743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:34:30.201 [DEBUG] [Thread-206743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] client lang: <none>
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] server lang: <none>
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] kex follows: False
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] Compression: none
2026-02-15T15:34:30.202 [DEBUG] [Thread-206743] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:34:30.222 [DEBUG] [Thread-206743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:34:30.223 [DEBUG] [Thread-206743] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:34:30.223 [DEBUG] [Thread-206743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:34:30.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:34:30.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:34:30.225 [DEBUG] [Thread-206743] [transport.py] [_log()] userauth is OK
2026-02-15T15:34:30.225 [DEBUG] [Thread-206743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:34:30.225 [DEBUG] [Thread-206743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:34:30.225 [DEBUG] [Thread-206743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:34:30.226 [DEBUG] [Thread-206743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:34:30.250 [INFO] [Thread-206743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:34:30.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:34:30.830 [DEBUG] [Thread-206743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:34:30.831 [DEBUG] [Thread-206743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:34:30.831 [DEBUG] [Thread-206743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:34:30.872 [DEBUG] [Thread-206743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:34:30.872 [DEBUG] [Thread-206743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:34:30.876 [DEBUG] [Thread-206743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:34:30.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:34:30.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:34:30.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:34:30.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:34:30.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:34:30.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:34:30.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:34:30.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:34:30.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:34:30.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.565027 -999.00  +23.60  19.41     23   +1.70 1 1 1 1 1   888    0 20.97 -27.14 ----- 19.4 19.4 144.4 26.0 30.5 -31.7 30.1 -29.8 31.6 -29.2 32.5 -30.4
2026-02-15T15:34:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:34:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:34:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.565027
2026-02-15T15:34:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:34:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:34:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:34:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:34:30.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:34:30.902 [DEBUG] [Thread-206743] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:34:30.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:34:14', tmtdew=25.66, humidity=18.39, cloud=0.0, wind=23.82, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:33:38.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:34:30.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:34:30.998 [DEBUG] [Thread-206746] [transport.py] [_log()] starting thread (client mode): 0xa57e3be0
2026-02-15T15:34:30.999 [DEBUG] [Thread-206746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:34:31.014 [DEBUG] [Thread-206746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:34:31.014 [INFO] [Thread-206746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:34:31.022 [DEBUG] [Thread-206746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:34:31.022 [DEBUG] [Thread-206746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:34:31.022 [DEBUG] [Thread-206746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:34:31.022 [DEBUG] [Thread-206746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:34:31.022 [DEBUG] [Thread-206746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:34:31.022 [DEBUG] [Thread-206746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] client lang: <none>
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] server lang: <none>
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] kex follows: False
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:34:31.023 [DEBUG] [Thread-206746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:34:31.024 [DEBUG] [Thread-206746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:34:31.024 [DEBUG] [Thread-206746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:34:31.024 [DEBUG] [Thread-206746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:34:31.024 [DEBUG] [Thread-206746] [transport.py] [_log()] Compression: none
2026-02-15T15:34:31.024 [DEBUG] [Thread-206746] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:34:31.080 [DEBUG] [Thread-206746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:34:31.081 [DEBUG] [Thread-206746] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:34:31.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:34:31.082 [DEBUG] [Thread-206746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:34:31.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:34:31.139 [DEBUG] [Thread-206746] [transport.py] [_log()] userauth is OK
2026-02-15T15:34:31.139 [DEBUG] [Thread-206746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:34:31.139 [DEBUG] [Thread-206746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:34:31.139 [DEBUG] [Thread-206746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:34:31.139 [DEBUG] [Thread-206746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:34:31.159 [INFO] [Thread-206746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:34:31.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:34:31.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:34:31.988 [DEBUG] [Thread-206746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:34:31.989 [DEBUG] [Thread-206746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:34:32.036 [DEBUG] [Thread-206746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:34:32.037 [DEBUG] [Thread-206746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:34:32.046 [DEBUG] [Thread-206746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:34:32.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:34:32.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:34:32.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:34:32.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:34:32.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:34:32.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:34:32.084 [DEBUG] [Thread-206746] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:34:40.456 [DEBUG] [Thread-206748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:34:51.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:34:51.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:34:54.993 [DEBUG] [Thread-206749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:34:55.512 [DEBUG] [Thread-206750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:02.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:35:02.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:35:02.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:35:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 34, 49), 25.96, 17.92, 0.0, 24.49, 23.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:35:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:34:49
2026-02-15T15:35:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:35:04.622 [DEBUG] [Thread-206751] [transport.py] [_log()] starting thread (client mode): 0xa57e17b0
2026-02-15T15:35:04.622 [DEBUG] [Thread-206751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:35:04.642 [DEBUG] [Thread-206751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:35:04.643 [INFO] [Thread-206751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:35:04.646 [DEBUG] [Thread-206751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] client lang: <none>
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] server lang: <none>
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] kex follows: False
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] Compression: none
2026-02-15T15:35:04.647 [DEBUG] [Thread-206751] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:35:04.662 [DEBUG] [Thread-206751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:35:04.663 [DEBUG] [Thread-206751] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:35:04.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:35:04.664 [DEBUG] [Thread-206751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:35:04.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:35:04.666 [DEBUG] [Thread-206751] [transport.py] [_log()] userauth is OK
2026-02-15T15:35:04.666 [DEBUG] [Thread-206751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:35:04.666 [DEBUG] [Thread-206751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:35:04.666 [DEBUG] [Thread-206751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:35:04.666 [DEBUG] [Thread-206751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:35:04.690 [INFO] [Thread-206751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:35:04.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:35:10.549 [DEBUG] [Thread-206753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:13.182 [DEBUG] [Thread-206751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:35:13.183 [DEBUG] [Thread-206751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:35:13.183 [DEBUG] [Thread-206751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:35:13.224 [DEBUG] [Thread-206751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:35:13.224 [DEBUG] [Thread-206751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:35:13.227 [DEBUG] [Thread-206751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:35:13.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:35:13.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:35:13.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:35:13.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:35:13.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:35:13.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:35:13.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:35:13.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:35:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:35:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.565374 -999.00  +23.50  22.38     23   +1.60 1 1 1 1 1   888    0 21.71 -29.53 ----- 22.4 22.4 121.6 28.3 30.6 -31.1 30.1 -29.8 31.6 -29.3 32.5 -32.5
2026-02-15T15:35:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:35:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:35:13.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.565374
2026-02-15T15:35:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:35:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:35:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:35:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:35:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:35:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:34:49', tmtdew=25.96, humidity=17.92, cloud=0.0, wind=24.49, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:34:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:35:13.329 [DEBUG] [Thread-206751] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:35:13.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:35:13.422 [DEBUG] [Thread-206755] [transport.py] [_log()] starting thread (client mode): 0xa2db69e0
2026-02-15T15:35:13.422 [DEBUG] [Thread-206755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:35:13.436 [DEBUG] [Thread-206755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:35:13.437 [INFO] [Thread-206755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:35:13.444 [DEBUG] [Thread-206755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:35:13.445 [DEBUG] [Thread-206755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:35:13.445 [DEBUG] [Thread-206755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:35:13.445 [DEBUG] [Thread-206755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:13.445 [DEBUG] [Thread-206755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:13.445 [DEBUG] [Thread-206755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] client lang: <none>
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] server lang: <none>
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] kex follows: False
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:35:13.446 [DEBUG] [Thread-206755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:35:13.447 [DEBUG] [Thread-206755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:35:13.447 [DEBUG] [Thread-206755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:35:13.447 [DEBUG] [Thread-206755] [transport.py] [_log()] Compression: none
2026-02-15T15:35:13.447 [DEBUG] [Thread-206755] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:35:13.502 [DEBUG] [Thread-206755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:35:13.502 [DEBUG] [Thread-206755] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:35:13.503 [DEBUG] [Thread-206755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:35:13.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:35:13.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:35:13.558 [DEBUG] [Thread-206755] [transport.py] [_log()] userauth is OK
2026-02-15T15:35:13.559 [DEBUG] [Thread-206755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:35:13.559 [DEBUG] [Thread-206755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:35:13.559 [DEBUG] [Thread-206755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:35:13.559 [DEBUG] [Thread-206755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:35:13.578 [INFO] [Thread-206755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:35:13.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:35:13.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:35:14.383 [DEBUG] [Thread-206755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:35:14.383 [DEBUG] [Thread-206755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:35:14.434 [DEBUG] [Thread-206755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:35:14.434 [DEBUG] [Thread-206755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:35:14.445 [DEBUG] [Thread-206755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:35:14.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:35:14.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:35:14.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:35:14.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:35:14.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:35:14.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:35:14.482 [DEBUG] [Thread-206755] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:35:25.585 [DEBUG] [Thread-206757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:40.638 [DEBUG] [Thread-206758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:44.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:35:44.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:35: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
2026-02-15T15:35:46.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 35, 24), 25.88, 18.01, 0.0, 26.43, 23.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:35:46.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:35:24
2026-02-15T15:35:46.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:35:46.982 [DEBUG] [Thread-206759] [transport.py] [_log()] starting thread (client mode): 0xa2db6a40
2026-02-15T15:35:46.982 [DEBUG] [Thread-206759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:35:47.002 [DEBUG] [Thread-206759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:35:47.002 [INFO] [Thread-206759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:35:47.003 [DEBUG] [Thread-206759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] client lang: <none>
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] server lang: <none>
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] kex follows: False
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] Compression: none
2026-02-15T15:35:47.004 [DEBUG] [Thread-206759] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:35:47.020 [DEBUG] [Thread-206759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:35:47.021 [DEBUG] [Thread-206759] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:35:47.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:35:47.022 [DEBUG] [Thread-206759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:35:47.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:35:47.024 [DEBUG] [Thread-206759] [transport.py] [_log()] userauth is OK
2026-02-15T15:35:47.024 [DEBUG] [Thread-206759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:35:47.024 [DEBUG] [Thread-206759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:35:47.024 [DEBUG] [Thread-206759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:35:47.024 [DEBUG] [Thread-206759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:35:47.049 [INFO] [Thread-206759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:35:47.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:35:47.620 [DEBUG] [Thread-206759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:35:47.620 [DEBUG] [Thread-206759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:35:47.620 [DEBUG] [Thread-206759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:35:47.661 [DEBUG] [Thread-206759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:35:47.662 [DEBUG] [Thread-206759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:35:47.665 [DEBUG] [Thread-206759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:35:47.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:35:47.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:35:47.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:35:47.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:35:47.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:35:47.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:35:47.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:35:47.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:35:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:35:47.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.566068 -999.00  +23.70  24.19     23   +1.60 1 1 1 1 1   888    0 21.77 -31.96 ----- 24.2 24.2 147.0 28.7 30.4 -31.0 30.1 -30.7 31.6 -30.0 32.4 -31.7
2026-02-15T15:35:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:35:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:35:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.566068
2026-02-15T15:35:47.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:35:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:35:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:35:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:35:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:35:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:35:24', tmtdew=25.88, humidity=18.01, cloud=0.0, wind=26.43, temperature=23.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:35:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:35:47.695 [DEBUG] [Thread-206759] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:35:47.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:35:47.792 [DEBUG] [Thread-206762] [transport.py] [_log()] starting thread (client mode): 0xa2d6ba90
2026-02-15T15:35:47.792 [DEBUG] [Thread-206762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:35:47.807 [DEBUG] [Thread-206762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:35:47.807 [INFO] [Thread-206762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:35:47.816 [DEBUG] [Thread-206762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] client lang: <none>
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] server lang: <none>
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] kex follows: False
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:35:47.817 [DEBUG] [Thread-206762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:35:47.818 [DEBUG] [Thread-206762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:35:47.818 [DEBUG] [Thread-206762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:35:47.818 [DEBUG] [Thread-206762] [transport.py] [_log()] Compression: none
2026-02-15T15:35:47.818 [DEBUG] [Thread-206762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:35:47.873 [DEBUG] [Thread-206762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:35:47.874 [DEBUG] [Thread-206762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:35:47.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:35:47.875 [DEBUG] [Thread-206762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:35:47.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:35:47.936 [DEBUG] [Thread-206762] [transport.py] [_log()] userauth is OK
2026-02-15T15:35:47.936 [DEBUG] [Thread-206762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:35:47.936 [DEBUG] [Thread-206762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:35:47.936 [DEBUG] [Thread-206762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:35:47.936 [DEBUG] [Thread-206762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:35:47.956 [INFO] [Thread-206762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:35:47.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:35:47.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:35:48.771 [DEBUG] [Thread-206762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:35:48.771 [DEBUG] [Thread-206762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:35:48.820 [DEBUG] [Thread-206762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:35:48.821 [DEBUG] [Thread-206762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:35:48.831 [DEBUG] [Thread-206762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:35:48.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:35:48.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:35:48.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:35:48.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:35:48.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:35:48.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:35:48.870 [DEBUG] [Thread-206762] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:35:51.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:51.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:55.026 [DEBUG] [Thread-206764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:35:55.675 [DEBUG] [Thread-206765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:10.729 [DEBUG] [Thread-206766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:18.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:36:18.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:36:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:36:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 36), 25.94, 17.91, 0.0, 25.57, 23.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:36:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:36:00
2026-02-15T15:36:21.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:36:21.590 [DEBUG] [Thread-206767] [transport.py] [_log()] starting thread (client mode): 0xa2db4bb0
2026-02-15T15:36:21.590 [DEBUG] [Thread-206767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:36:21.609 [DEBUG] [Thread-206767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:36:21.610 [INFO] [Thread-206767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] client lang: <none>
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] server lang: <none>
2026-02-15T15:36:21.613 [DEBUG] [Thread-206767] [transport.py] [_log()] kex follows: False
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] Compression: none
2026-02-15T15:36:21.614 [DEBUG] [Thread-206767] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:36:21.632 [DEBUG] [Thread-206767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:36:21.632 [DEBUG] [Thread-206767] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:36:21.633 [DEBUG] [Thread-206767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:36:21.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:36:21.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:36:21.635 [DEBUG] [Thread-206767] [transport.py] [_log()] userauth is OK
2026-02-15T15:36:21.635 [DEBUG] [Thread-206767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:36:21.635 [DEBUG] [Thread-206767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:36:21.635 [DEBUG] [Thread-206767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:36:21.635 [DEBUG] [Thread-206767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:36:21.649 [INFO] [Thread-206767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:36:21.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:36:22.216 [DEBUG] [Thread-206767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:36:22.216 [DEBUG] [Thread-206767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:36:22.216 [DEBUG] [Thread-206767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:36:22.256 [DEBUG] [Thread-206767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:36:22.257 [DEBUG] [Thread-206767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:36:22.260 [DEBUG] [Thread-206767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:36:22.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:36:22.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:36:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:36:22.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:36:22.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:36:22.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:36:22.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:36:22.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:36:22.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:36:22.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.566763 -999.00  +23.50  10.60     23   +1.50 1 1 1 1 1   888    0 21.56 -42.72 ----- 10.6 10.6 164.4 18.0 30.4 -30.6 29.9 -29.2 31.5 -28.2 32.4 -30.2
2026-02-15T15:36:22.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:36:22.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:36:22.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.566763
2026-02-15T15:36:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:36:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:36:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:36:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:36:22.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:36:22.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:36:00', tmtdew=25.94, humidity=17.91, cloud=0.0, wind=25.57, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:36:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:36:22.288 [DEBUG] [Thread-206767] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:36:22.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:36:22.398 [DEBUG] [Thread-206770] [transport.py] [_log()] starting thread (client mode): 0xa2db5ea0
2026-02-15T15:36:22.399 [DEBUG] [Thread-206770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:36:22.413 [DEBUG] [Thread-206770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:36:22.413 [INFO] [Thread-206770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] client lang: <none>
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] server lang: <none>
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] kex follows: False
2026-02-15T15:36:22.426 [DEBUG] [Thread-206770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:36:22.427 [DEBUG] [Thread-206770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:36:22.427 [DEBUG] [Thread-206770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:36:22.427 [DEBUG] [Thread-206770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:36:22.427 [DEBUG] [Thread-206770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:36:22.427 [DEBUG] [Thread-206770] [transport.py] [_log()] Compression: none
2026-02-15T15:36:22.427 [DEBUG] [Thread-206770] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:36:22.482 [DEBUG] [Thread-206770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:36:22.482 [DEBUG] [Thread-206770] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:36:22.482 [DEBUG] [Thread-206770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:36:22.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:36:22.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:36:22.542 [DEBUG] [Thread-206770] [transport.py] [_log()] userauth is OK
2026-02-15T15:36:22.543 [DEBUG] [Thread-206770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:36:22.543 [DEBUG] [Thread-206770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:36:22.543 [DEBUG] [Thread-206770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:36:22.543 [DEBUG] [Thread-206770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:36:22.563 [INFO] [Thread-206770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:36:22.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:36:22.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:36:23.379 [DEBUG] [Thread-206770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:36:23.379 [DEBUG] [Thread-206770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:36:23.428 [DEBUG] [Thread-206770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:36:23.428 [DEBUG] [Thread-206770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:36:23.438 [DEBUG] [Thread-206770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:36:23.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:36:23.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:36:23.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:36:23.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:36:23.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:36:23.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:36:23.478 [DEBUG] [Thread-206770] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:36:25.765 [DEBUG] [Thread-206772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:40.816 [DEBUG] [Thread-206773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:51.473 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:51.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:36:53.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:36:53.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:36:55.059 [DEBUG] [Thread-206774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:55.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 36, 36), 26.46, 17.21, 0.0, 19.13, 24.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:36:55.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:36:36
2026-02-15T15:36:55.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:36:55.846 [DEBUG] [Thread-206775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:36:55.923 [DEBUG] [Thread-206776] [transport.py] [_log()] starting thread (client mode): 0xa2d6bbb0
2026-02-15T15:36:55.924 [DEBUG] [Thread-206776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:36:55.944 [DEBUG] [Thread-206776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:36:55.945 [INFO] [Thread-206776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] client lang: <none>
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] server lang: <none>
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] kex follows: False
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:36:55.947 [DEBUG] [Thread-206776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:36:55.948 [DEBUG] [Thread-206776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:36:55.948 [DEBUG] [Thread-206776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:36:55.948 [DEBUG] [Thread-206776] [transport.py] [_log()] Compression: none
2026-02-15T15:36:55.948 [DEBUG] [Thread-206776] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:36:55.961 [DEBUG] [Thread-206776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:36:55.962 [DEBUG] [Thread-206776] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:36:55.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:36:55.963 [DEBUG] [Thread-206776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:36:55.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:36:55.966 [DEBUG] [Thread-206776] [transport.py] [_log()] userauth is OK
2026-02-15T15:36:55.966 [DEBUG] [Thread-206776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:36:55.966 [DEBUG] [Thread-206776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:36:55.966 [DEBUG] [Thread-206776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:36:55.966 [DEBUG] [Thread-206776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:36:55.984 [INFO] [Thread-206776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:36:55.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:36:56.552 [DEBUG] [Thread-206776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:36:56.553 [DEBUG] [Thread-206776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:36:56.553 [DEBUG] [Thread-206776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:36:56.593 [DEBUG] [Thread-206776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:36:56.594 [DEBUG] [Thread-206776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:36:56.597 [DEBUG] [Thread-206776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:36:56.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:36:56.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:36:56.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:36:56.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:36:56.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:36:56.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:36:56.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:36:56.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:36:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:36:56.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.567110 -999.00  +23.70  16.93     23   +1.70 1 1 1 1 1   888    0 20.89 -39.45 ----- 16.9 16.9 131.8 22.3 30.5 -29.7 29.8 -28.9 31.6 -27.4 32.5 -29.2
2026-02-15T15:36:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:36:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:36:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.567110
2026-02-15T15:36:56.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:36:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:36:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:36:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:36:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:36:56.624 [DEBUG] [Thread-206776] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:36:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:36:36', tmtdew=26.46, humidity=17.21, cloud=0.0, wind=19.13, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:36:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:36:56.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:36:56.723 [DEBUG] [Thread-206779] [transport.py] [_log()] starting thread (client mode): 0xa2d1a260
2026-02-15T15:36:56.723 [DEBUG] [Thread-206779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:36:56.737 [DEBUG] [Thread-206779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:36:56.737 [INFO] [Thread-206779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:36:56.745 [DEBUG] [Thread-206779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:36:56.745 [DEBUG] [Thread-206779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:36:56.745 [DEBUG] [Thread-206779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:36:56.745 [DEBUG] [Thread-206779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:56.745 [DEBUG] [Thread-206779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:36:56.745 [DEBUG] [Thread-206779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] client lang: <none>
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] server lang: <none>
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] kex follows: False
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] Compression: none
2026-02-15T15:36:56.746 [DEBUG] [Thread-206779] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:36:56.809 [DEBUG] [Thread-206779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:36:56.810 [DEBUG] [Thread-206779] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:36:56.810 [DEBUG] [Thread-206779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:36:56.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:36:56.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:36:56.865 [DEBUG] [Thread-206779] [transport.py] [_log()] userauth is OK
2026-02-15T15:36:56.866 [DEBUG] [Thread-206779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:36:56.866 [DEBUG] [Thread-206779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:36:56.866 [DEBUG] [Thread-206779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:36:56.866 [DEBUG] [Thread-206779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:36:56.884 [INFO] [Thread-206779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:36:56.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:36:56.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:36:57.701 [DEBUG] [Thread-206779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:36:57.701 [DEBUG] [Thread-206779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:36:57.749 [DEBUG] [Thread-206779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:36:57.750 [DEBUG] [Thread-206779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:36:57.759 [DEBUG] [Thread-206779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:36:57.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:36:57.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:36:57.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:36:57.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:36:57.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:36:57.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:36:57.797 [DEBUG] [Thread-206779] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:37:10.880 [DEBUG] [Thread-206781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:37:25.929 [DEBUG] [Thread-206782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:37:27.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:37:27.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:37: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
2026-02-15T15:37:29.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 37, 11), 25.22, 18.69, 0.0, 19.74, 23.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:37:29.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:37:11
2026-02-15T15:37:30.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:37:30.288 [DEBUG] [Thread-206783] [transport.py] [_log()] starting thread (client mode): 0xa2db7af0
2026-02-15T15:37:30.288 [DEBUG] [Thread-206783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:37:30.307 [DEBUG] [Thread-206783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:37:30.307 [INFO] [Thread-206783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] client lang: <none>
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] server lang: <none>
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] kex follows: False
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] Compression: none
2026-02-15T15:37:30.311 [DEBUG] [Thread-206783] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:37:30.329 [DEBUG] [Thread-206783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:37:30.330 [DEBUG] [Thread-206783] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:37:30.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:37:30.331 [DEBUG] [Thread-206783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:37:30.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:37:30.334 [DEBUG] [Thread-206783] [transport.py] [_log()] userauth is OK
2026-02-15T15:37:30.335 [DEBUG] [Thread-206783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:37:30.335 [DEBUG] [Thread-206783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:37:30.335 [DEBUG] [Thread-206783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:37:30.335 [DEBUG] [Thread-206783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:37:30.361 [INFO] [Thread-206783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:37:30.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:37:31.015 [DEBUG] [Thread-206783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:37:31.016 [DEBUG] [Thread-206783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:37:31.016 [DEBUG] [Thread-206783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:37:31.056 [DEBUG] [Thread-206783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:37:31.057 [DEBUG] [Thread-206783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:37:31.060 [DEBUG] [Thread-206783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:37:31.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:37:31.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:37:31.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:37:31.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:37:31.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:37:31.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:37:31.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:37:31.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:37:31.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:37:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.567457 -999.00  +23.90  28.77     23   +1.60 1 1 1 1 1   888    0 21.35 -38.56 ----- 28.8 28.8 137.8 33.6 30.5 -30.1 29.9 -30.1 31.6 -28.0 32.4 -30.9
2026-02-15T15:37:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:37:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:37:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.567457
2026-02-15T15:37:31.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:37:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:37:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:37:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:37:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:37:31.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:37:11', tmtdew=25.22, humidity=18.69, cloud=0.0, wind=19.74, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:37:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:37:31.090 [DEBUG] [Thread-206783] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:37:31.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:37:31.186 [DEBUG] [Thread-206786] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-15T15:37:31.186 [DEBUG] [Thread-206786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:37:31.201 [DEBUG] [Thread-206786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:37:31.202 [INFO] [Thread-206786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:37:31.209 [DEBUG] [Thread-206786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] client lang: <none>
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] server lang: <none>
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] kex follows: False
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:37:31.210 [DEBUG] [Thread-206786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:37:31.211 [DEBUG] [Thread-206786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:37:31.211 [DEBUG] [Thread-206786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:37:31.211 [DEBUG] [Thread-206786] [transport.py] [_log()] Compression: none
2026-02-15T15:37:31.211 [DEBUG] [Thread-206786] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:37:31.268 [DEBUG] [Thread-206786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:37:31.269 [DEBUG] [Thread-206786] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:37:31.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:37:31.270 [DEBUG] [Thread-206786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:37:31.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:37:31.329 [DEBUG] [Thread-206786] [transport.py] [_log()] userauth is OK
2026-02-15T15:37:31.329 [DEBUG] [Thread-206786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:37:31.329 [DEBUG] [Thread-206786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:37:31.330 [DEBUG] [Thread-206786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:37:31.330 [DEBUG] [Thread-206786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:37:31.355 [INFO] [Thread-206786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:37:31.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:37:31.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:37:32.197 [DEBUG] [Thread-206786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:37:32.197 [DEBUG] [Thread-206786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:37:32.245 [DEBUG] [Thread-206786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:37:32.246 [DEBUG] [Thread-206786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:37:32.255 [DEBUG] [Thread-206786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:37:32.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:37:32.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:37: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-02-15T15:37:32.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:37:32.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:37:32.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:37:32.297 [DEBUG] [Thread-206786] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:37:40.967 [DEBUG] [Thread-206788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:37:51.616 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:37:51.618 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:37:55.093 [DEBUG] [Thread-206789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:37:56.028 [DEBUG] [Thread-206790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:02.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:38:02.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:38:02.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:38:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 37, 46), 25.91, 17.49, 0.0, 27.67, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:38:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:37:46
2026-02-15T15:38:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:38:04.705 [DEBUG] [Thread-206791] [transport.py] [_log()] starting thread (client mode): 0xa2d4dff0
2026-02-15T15:38:04.705 [DEBUG] [Thread-206791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:38:04.725 [DEBUG] [Thread-206791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:38:04.725 [INFO] [Thread-206791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:38:04.728 [DEBUG] [Thread-206791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:38:04.728 [DEBUG] [Thread-206791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] client lang: <none>
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] server lang: <none>
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] kex follows: False
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:38:04.729 [DEBUG] [Thread-206791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:38:04.730 [DEBUG] [Thread-206791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:38:04.730 [DEBUG] [Thread-206791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:38:04.730 [DEBUG] [Thread-206791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:38:04.730 [DEBUG] [Thread-206791] [transport.py] [_log()] Compression: none
2026-02-15T15:38:04.730 [DEBUG] [Thread-206791] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:38:04.746 [DEBUG] [Thread-206791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:38:04.747 [DEBUG] [Thread-206791] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:38:04.747 [DEBUG] [Thread-206791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:38:04.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:38:04.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:38:04.749 [DEBUG] [Thread-206791] [transport.py] [_log()] userauth is OK
2026-02-15T15:38:04.749 [DEBUG] [Thread-206791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:38:04.749 [DEBUG] [Thread-206791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:38:04.750 [DEBUG] [Thread-206791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:38:04.750 [DEBUG] [Thread-206791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:38:04.768 [INFO] [Thread-206791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:38:04.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:38:05.387 [DEBUG] [Thread-206791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:38:05.387 [DEBUG] [Thread-206791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:38:05.388 [DEBUG] [Thread-206791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:38:05.428 [DEBUG] [Thread-206791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:38:05.429 [DEBUG] [Thread-206791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:38:05.432 [DEBUG] [Thread-206791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:38:05.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:38:05.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:38:05.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:38:05.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:38:05.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:38:05.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:38:05.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:38:05.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:38:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:38:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.567804 -999.00  +23.50  15.39     23   +1.50 1 1 1 1 1   888    0 21.45 -37.03 ----- 15.4 15.4 142.8 32.0 30.2 -31.0 29.9 -29.9 31.4 -30.1 32.2 -32.9
2026-02-15T15:38:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:38:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:38:05.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.567804
2026-02-15T15:38:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:38:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:38:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:38:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:38:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:38:05.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:37:46', tmtdew=25.91, humidity=17.49, cloud=0.0, wind=27.67, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:37:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:38:05.458 [DEBUG] [Thread-206791] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:38:05.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:38:05.557 [DEBUG] [Thread-206794] [transport.py] [_log()] starting thread (client mode): 0xa2d4efe0
2026-02-15T15:38:05.557 [DEBUG] [Thread-206794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:38:05.572 [DEBUG] [Thread-206794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:38:05.572 [INFO] [Thread-206794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:38:05.583 [DEBUG] [Thread-206794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:38:05.583 [DEBUG] [Thread-206794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:38:05.583 [DEBUG] [Thread-206794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:38:05.583 [DEBUG] [Thread-206794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:05.583 [DEBUG] [Thread-206794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] client lang: <none>
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] server lang: <none>
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] kex follows: False
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:38:05.584 [DEBUG] [Thread-206794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:38:05.585 [DEBUG] [Thread-206794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:38:05.585 [DEBUG] [Thread-206794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:38:05.585 [DEBUG] [Thread-206794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:38:05.585 [DEBUG] [Thread-206794] [transport.py] [_log()] Compression: none
2026-02-15T15:38:05.585 [DEBUG] [Thread-206794] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:38:05.639 [DEBUG] [Thread-206794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:38:05.639 [DEBUG] [Thread-206794] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:38:05.639 [DEBUG] [Thread-206794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:38:05.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:38:05.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:38:05.700 [DEBUG] [Thread-206794] [transport.py] [_log()] userauth is OK
2026-02-15T15:38:05.701 [DEBUG] [Thread-206794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:38:05.701 [DEBUG] [Thread-206794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:38:05.701 [DEBUG] [Thread-206794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:38:05.701 [DEBUG] [Thread-206794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:38:05.721 [INFO] [Thread-206794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:38:05.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:38:05.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:38:06.596 [DEBUG] [Thread-206794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:38:06.596 [DEBUG] [Thread-206794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:38:06.643 [DEBUG] [Thread-206794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:38:06.644 [DEBUG] [Thread-206794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:38:06.658 [DEBUG] [Thread-206794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:38:06.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:38:06.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:38:06.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:38:06.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:38:06.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:38:06.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:38:06.712 [DEBUG] [Thread-206794] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:38:11.067 [DEBUG] [Thread-206796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:26.129 [DEBUG] [Thread-206797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:36.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:38:36.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:38:36.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:38:38.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 38, 22), 26.0, 17.41, 0.0, 30.17, 23.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:38:38.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:38:22
2026-02-15T15:38:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:38:39.266 [DEBUG] [Thread-206798] [transport.py] [_log()] starting thread (client mode): 0xa2d4fd60
2026-02-15T15:38:39.267 [DEBUG] [Thread-206798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:38:39.287 [DEBUG] [Thread-206798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:38:39.287 [INFO] [Thread-206798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:39.291 [DEBUG] [Thread-206798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] client lang: <none>
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] server lang: <none>
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] kex follows: False
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] Compression: none
2026-02-15T15:38:39.292 [DEBUG] [Thread-206798] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:38:39.310 [DEBUG] [Thread-206798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:38:39.311 [DEBUG] [Thread-206798] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:38:39.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:38:39.312 [DEBUG] [Thread-206798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:38:39.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:38:39.314 [DEBUG] [Thread-206798] [transport.py] [_log()] userauth is OK
2026-02-15T15:38:39.314 [DEBUG] [Thread-206798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:38:39.314 [DEBUG] [Thread-206798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:38:39.314 [DEBUG] [Thread-206798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:38:39.314 [DEBUG] [Thread-206798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:38:39.333 [INFO] [Thread-206798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:38:39.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:38:39.987 [DEBUG] [Thread-206798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:38:39.987 [DEBUG] [Thread-206798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:38:39.988 [DEBUG] [Thread-206798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:38:40.028 [DEBUG] [Thread-206798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:38:40.029 [DEBUG] [Thread-206798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:38:40.032 [DEBUG] [Thread-206798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:38:40.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:38:40.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:38:40.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:38:40.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:38:40.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:38:40.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:38:40.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:38:40.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:38:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:38:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.568152 -999.00  +23.50  26.23     24   +1.70 1 1 1 1 1   888    0 21.56 -35.60 ----- 26.2 26.2 125.8 28.4 30.2 -30.0 29.9 -29.5 31.4 -28.5 32.1 -32.0
2026-02-15T15:38:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:38:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:38:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.568152
2026-02-15T15:38:40.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:38:40.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:38:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:38:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:38:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:38:40.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:38:22', tmtdew=26.0, humidity=17.41, cloud=0.0, wind=30.17, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:38:08.333', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:38:40.057 [DEBUG] [Thread-206798] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:38:40.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:38:40.158 [DEBUG] [Thread-206801] [transport.py] [_log()] starting thread (client mode): 0xa2db4b20
2026-02-15T15:38:40.158 [DEBUG] [Thread-206801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:38:40.173 [DEBUG] [Thread-206801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:38:40.173 [INFO] [Thread-206801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:38:40.180 [DEBUG] [Thread-206801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:38:40.181 [DEBUG] [Thread-206801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:38:40.181 [DEBUG] [Thread-206801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:38:40.181 [DEBUG] [Thread-206801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:40.181 [DEBUG] [Thread-206801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:38:40.181 [DEBUG] [Thread-206801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:40.181 [DEBUG] [Thread-206801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] client lang: <none>
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] server lang: <none>
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] kex follows: False
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:38:40.182 [DEBUG] [Thread-206801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:38:40.183 [DEBUG] [Thread-206801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:38:40.183 [DEBUG] [Thread-206801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:38:40.183 [DEBUG] [Thread-206801] [transport.py] [_log()] Compression: none
2026-02-15T15:38:40.183 [DEBUG] [Thread-206801] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:38:40.242 [DEBUG] [Thread-206801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:38:40.243 [DEBUG] [Thread-206801] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:38:40.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:38:40.244 [DEBUG] [Thread-206801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:38:40.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:38:40.298 [DEBUG] [Thread-206801] [transport.py] [_log()] userauth is OK
2026-02-15T15:38:40.298 [DEBUG] [Thread-206801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:38:40.298 [DEBUG] [Thread-206801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:38:40.298 [DEBUG] [Thread-206801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:38:40.298 [DEBUG] [Thread-206801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:38:40.317 [INFO] [Thread-206801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:38:40.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:38:40.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:38:41.135 [DEBUG] [Thread-206801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:38:41.136 [DEBUG] [Thread-206801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:38:41.166 [DEBUG] [Thread-206803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:41.183 [DEBUG] [Thread-206801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:38:41.183 [DEBUG] [Thread-206801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:38:41.192 [DEBUG] [Thread-206801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:38:41.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:38:41.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:38:41.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:38:41.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:38:41.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:38:41.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:38:41.228 [DEBUG] [Thread-206801] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:38:51.772 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:51.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:55.133 [DEBUG] [Thread-206804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:38:56.219 [DEBUG] [Thread-206805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:39:11.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:39:11.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:39:11.257 [DEBUG] [Thread-206806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 38, 57), 25.68, 17.92, 0.0, 27.1, 23.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:39:13.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:38:57
2026-02-15T15:39:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:39:13.639 [DEBUG] [Thread-206807] [transport.py] [_log()] starting thread (client mode): 0xa2d063e0
2026-02-15T15:39:13.639 [DEBUG] [Thread-206807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:39:13.659 [DEBUG] [Thread-206807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:39:13.659 [INFO] [Thread-206807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:39:13.662 [DEBUG] [Thread-206807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] client lang: <none>
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] server lang: <none>
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] kex follows: False
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] Compression: none
2026-02-15T15:39:13.663 [DEBUG] [Thread-206807] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:39:13.679 [DEBUG] [Thread-206807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:39:13.680 [DEBUG] [Thread-206807] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:39:13.681 [DEBUG] [Thread-206807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:39:13.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:39:13.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:39:13.725 [DEBUG] [Thread-206807] [transport.py] [_log()] userauth is OK
2026-02-15T15:39:13.725 [DEBUG] [Thread-206807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:39:13.726 [DEBUG] [Thread-206807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:39:13.726 [DEBUG] [Thread-206807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:39:13.726 [DEBUG] [Thread-206807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:39:13.747 [INFO] [Thread-206807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:39:13.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:39:14.339 [DEBUG] [Thread-206807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:39:14.339 [DEBUG] [Thread-206807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:39:14.339 [DEBUG] [Thread-206807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:39:14.380 [DEBUG] [Thread-206807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:39:14.380 [DEBUG] [Thread-206807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:39:14.384 [DEBUG] [Thread-206807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:39:14.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:39:14.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:39:14.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:39:14.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:39:14.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:39:14.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:39:14.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:39:14.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:39:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:39:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.568499 -999.00  +23.50  27.64     23   +1.50 1 1 1 1 1   888    0 21.13 -35.35 ----- 27.6 27.6 134.4 34.3 30.2 -30.0 29.8 -30.3 31.4 -29.1 32.1 -30.7
2026-02-15T15:39:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:39:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:39:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.568499
2026-02-15T15:39:14.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:39:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:39:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:39:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:39:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:39:14.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:38:57', tmtdew=25.68, humidity=17.92, cloud=0.0, wind=27.1, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:38:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:39:14.411 [DEBUG] [Thread-206807] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:39:14.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:39:14.507 [DEBUG] [Thread-206810] [transport.py] [_log()] starting thread (client mode): 0xa2d4ee30
2026-02-15T15:39:14.507 [DEBUG] [Thread-206810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:39:14.522 [DEBUG] [Thread-206810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:39:14.522 [INFO] [Thread-206810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:39:14.529 [DEBUG] [Thread-206810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] client lang: <none>
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] server lang: <none>
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] kex follows: False
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] Compression: none
2026-02-15T15:39:14.530 [DEBUG] [Thread-206810] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:39:14.586 [DEBUG] [Thread-206810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:39:14.587 [DEBUG] [Thread-206810] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:39:14.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:39:14.588 [DEBUG] [Thread-206810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:39:14.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:39:14.643 [DEBUG] [Thread-206810] [transport.py] [_log()] userauth is OK
2026-02-15T15:39:14.643 [DEBUG] [Thread-206810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:39:14.643 [DEBUG] [Thread-206810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:39:14.643 [DEBUG] [Thread-206810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:39:14.644 [DEBUG] [Thread-206810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:39:14.663 [INFO] [Thread-206810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:39:14.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:39:14.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:39:15.491 [DEBUG] [Thread-206810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:39:15.492 [DEBUG] [Thread-206810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:39:15.540 [DEBUG] [Thread-206810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:39:15.540 [DEBUG] [Thread-206810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:39:15.550 [DEBUG] [Thread-206810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:39:15.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:39:15.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:39:15.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:39:15.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:39:15.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:39:15.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:39:15.592 [DEBUG] [Thread-206810] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:39:26.291 [DEBUG] [Thread-206812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:41.341 [DEBUG] [Thread-206813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:39:45.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:39:45.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:39:47.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 39, 32), 25.73, 17.87, 0.0, 23.2, 23.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:39:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:39:32
2026-02-15T15:39:47.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:39:47.943 [DEBUG] [Thread-206814] [transport.py] [_log()] starting thread (client mode): 0xa57e1a20
2026-02-15T15:39:47.944 [DEBUG] [Thread-206814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:39:47.964 [DEBUG] [Thread-206814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:39:47.964 [INFO] [Thread-206814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:39:47.967 [DEBUG] [Thread-206814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:39:47.967 [DEBUG] [Thread-206814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] client lang: <none>
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] server lang: <none>
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] kex follows: False
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] Compression: none
2026-02-15T15:39:47.968 [DEBUG] [Thread-206814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:39:47.986 [DEBUG] [Thread-206814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:39:47.987 [DEBUG] [Thread-206814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:39:47.988 [DEBUG] [Thread-206814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:39:47.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:39:47.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:39:47.990 [DEBUG] [Thread-206814] [transport.py] [_log()] userauth is OK
2026-02-15T15:39:47.990 [DEBUG] [Thread-206814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:39:47.990 [DEBUG] [Thread-206814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:39:47.990 [DEBUG] [Thread-206814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:39:47.990 [DEBUG] [Thread-206814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:39:48.009 [INFO] [Thread-206814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:39:48.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:39:48.654 [DEBUG] [Thread-206814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:39:48.654 [DEBUG] [Thread-206814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:39:48.655 [DEBUG] [Thread-206814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:39:48.695 [DEBUG] [Thread-206814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:39:48.696 [DEBUG] [Thread-206814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:39:48.699 [DEBUG] [Thread-206814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:39:48.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:39:48.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:39:48.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:39:48.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:39:48.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:39:48.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:39:48.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:39:48.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:39:48.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:39:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.568846 -999.00  +23.50  21.88     23   +1.70 1 1 1 1 1   888    0 21.12 -37.61 ----- 21.9 21.9 145.8 24.8 30.1 -29.8 29.8 -30.5 31.4 -28.9 32.0 -30.5
2026-02-15T15:39:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:39:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:39:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.568846
2026-02-15T15:39:48.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:39:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:39:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:39:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:39:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:39:48.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:39:32', tmtdew=25.73, humidity=17.87, cloud=0.0, wind=23.2, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:39:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:39:48.727 [DEBUG] [Thread-206814] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:39:48.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:39:48.821 [DEBUG] [Thread-206817] [transport.py] [_log()] starting thread (client mode): 0xa2df9960
2026-02-15T15:39:48.822 [DEBUG] [Thread-206817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:39:48.836 [DEBUG] [Thread-206817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:39:48.837 [INFO] [Thread-206817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:39:48.845 [DEBUG] [Thread-206817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:39:48.845 [DEBUG] [Thread-206817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:39:48.845 [DEBUG] [Thread-206817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] client lang: <none>
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] server lang: <none>
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] kex follows: False
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] Compression: none
2026-02-15T15:39:48.846 [DEBUG] [Thread-206817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:39:48.907 [DEBUG] [Thread-206817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:39:48.908 [DEBUG] [Thread-206817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:39:48.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:39:48.909 [DEBUG] [Thread-206817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:39:48.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:39:48.963 [DEBUG] [Thread-206817] [transport.py] [_log()] userauth is OK
2026-02-15T15:39:48.964 [DEBUG] [Thread-206817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:39:48.964 [DEBUG] [Thread-206817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:39:48.964 [DEBUG] [Thread-206817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:39:48.964 [DEBUG] [Thread-206817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:39:48.983 [INFO] [Thread-206817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:39:48.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:39:48.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:39:49.815 [DEBUG] [Thread-206817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:39:49.816 [DEBUG] [Thread-206817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:39:49.863 [DEBUG] [Thread-206817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:39:49.864 [DEBUG] [Thread-206817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:39:49.874 [DEBUG] [Thread-206817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:39:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:39:49.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:39:49.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:39:49.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:39:49.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:39:49.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:39:49.911 [DEBUG] [Thread-206817] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:39:51.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:51.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:55.166 [DEBUG] [Thread-206819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:39:56.378 [DEBUG] [Thread-206820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:11.436 [DEBUG] [Thread-206821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:40:19.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:40:19.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:40:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 40, 8), 25.66, 17.92, 0.0, 26.15, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:40:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:40:08
2026-02-15T15:40:22.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:40:22.421 [DEBUG] [Thread-206822] [transport.py] [_log()] starting thread (client mode): 0xa2db6470
2026-02-15T15:40:22.422 [DEBUG] [Thread-206822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:40:22.442 [DEBUG] [Thread-206822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:40:22.442 [INFO] [Thread-206822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:40:22.445 [DEBUG] [Thread-206822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] client lang: <none>
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] server lang: <none>
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] kex follows: False
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:40:22.446 [DEBUG] [Thread-206822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:40:22.447 [DEBUG] [Thread-206822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:40:22.447 [DEBUG] [Thread-206822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:40:22.447 [DEBUG] [Thread-206822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:40:22.447 [DEBUG] [Thread-206822] [transport.py] [_log()] Compression: none
2026-02-15T15:40:22.447 [DEBUG] [Thread-206822] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:40:22.464 [DEBUG] [Thread-206822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:40:22.464 [DEBUG] [Thread-206822] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:40:22.465 [DEBUG] [Thread-206822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:40:22.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:40:22.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:40:22.467 [DEBUG] [Thread-206822] [transport.py] [_log()] userauth is OK
2026-02-15T15:40:22.467 [DEBUG] [Thread-206822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:40:22.468 [DEBUG] [Thread-206822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:40:22.468 [DEBUG] [Thread-206822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:40:22.468 [DEBUG] [Thread-206822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:40:22.504 [INFO] [Thread-206822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:40:22.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:40:23.105 [DEBUG] [Thread-206822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:40:23.105 [DEBUG] [Thread-206822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:40:23.106 [DEBUG] [Thread-206822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:40:23.146 [DEBUG] [Thread-206822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:40:23.146 [DEBUG] [Thread-206822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:40:23.148 [DEBUG] [Thread-206822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:40:23.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:40:23.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:40:23.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:40:23.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:40:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:40:23.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:40:23.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:40:23.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:40:23.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:40:23.279 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-15T15:40:23.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:40:08', tmtdew=25.66, humidity=17.92, cloud=0.0, wind=26.15, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:40:23.280 [DEBUG] [Thread-206822] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:40:23.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:40:23.377 [DEBUG] [Thread-206825] [transport.py] [_log()] starting thread (client mode): 0xa2db5510
2026-02-15T15:40:23.378 [DEBUG] [Thread-206825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:40:23.392 [DEBUG] [Thread-206825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:40:23.392 [INFO] [Thread-206825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:23.400 [DEBUG] [Thread-206825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] client lang: <none>
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] server lang: <none>
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] kex follows: False
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] Compression: none
2026-02-15T15:40:23.401 [DEBUG] [Thread-206825] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:40:23.460 [DEBUG] [Thread-206825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:40:23.460 [DEBUG] [Thread-206825] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:40:23.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:40:23.462 [DEBUG] [Thread-206825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:40:23.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:40:23.515 [DEBUG] [Thread-206825] [transport.py] [_log()] userauth is OK
2026-02-15T15:40:23.516 [DEBUG] [Thread-206825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:40:23.516 [DEBUG] [Thread-206825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:40:23.516 [DEBUG] [Thread-206825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:40:23.516 [DEBUG] [Thread-206825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:40:23.540 [INFO] [Thread-206825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:40:23.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:40:23.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:40:24.359 [DEBUG] [Thread-206825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:40:24.359 [DEBUG] [Thread-206825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:40:24.407 [DEBUG] [Thread-206825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:40:24.407 [DEBUG] [Thread-206825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:40:24.417 [DEBUG] [Thread-206825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:40:24.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:40:24.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:40:24.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:40:24.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:40:24.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:40:24.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:40:24.451 [DEBUG] [Thread-206825] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:40:26.473 [DEBUG] [Thread-206827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:41.532 [DEBUG] [Thread-206828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:52.062 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:52.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:54.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:40:54.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:40: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
2026-02-15T15:40:55.211 [DEBUG] [Thread-206829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 40, 43), 25.57, 18.47, 0.0, 20.68, 23.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:40:56.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:40:43
2026-02-15T15:40:56.569 [DEBUG] [Thread-206830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:40:56.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:40:56.855 [DEBUG] [Thread-206831] [transport.py] [_log()] starting thread (client mode): 0xa2db6140
2026-02-15T15:40:56.855 [DEBUG] [Thread-206831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:40:56.875 [DEBUG] [Thread-206831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:40:56.875 [INFO] [Thread-206831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] client lang: <none>
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] server lang: <none>
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] kex follows: False
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:40:56.877 [DEBUG] [Thread-206831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:40:56.878 [DEBUG] [Thread-206831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:40:56.878 [DEBUG] [Thread-206831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:40:56.878 [DEBUG] [Thread-206831] [transport.py] [_log()] Compression: none
2026-02-15T15:40:56.878 [DEBUG] [Thread-206831] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:40:56.890 [DEBUG] [Thread-206831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:40:56.890 [DEBUG] [Thread-206831] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:40:56.891 [DEBUG] [Thread-206831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:40:56.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:40:56.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:40:56.893 [DEBUG] [Thread-206831] [transport.py] [_log()] userauth is OK
2026-02-15T15:40:56.893 [DEBUG] [Thread-206831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:40:56.893 [DEBUG] [Thread-206831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:40:56.893 [DEBUG] [Thread-206831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:40:56.893 [DEBUG] [Thread-206831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:40:56.912 [INFO] [Thread-206831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:40:56.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:40:57.492 [DEBUG] [Thread-206831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:40:57.493 [DEBUG] [Thread-206831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:40:57.493 [DEBUG] [Thread-206831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:40:57.533 [DEBUG] [Thread-206831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:40:57.533 [DEBUG] [Thread-206831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:40:57.537 [DEBUG] [Thread-206831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:40:57.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:40:57.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:40:57.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:40:57.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:40:57.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:40:57.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:40:57.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:40:57.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:40:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:40:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.569888 -999.00  +23.80  10.83     23   +1.70 1 1 1 1 1   888    0 20.82 -43.96 ----- 10.8 10.8 145.2 16.3 30.1 -30.4 29.5 -29.9 31.4 -28.5 32.1 -30.9
2026-02-15T15:40:57.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:40:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:40:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.569888
2026-02-15T15:40:57.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:40:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:40:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:40:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:40:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:40:57.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:40:43', tmtdew=25.57, humidity=18.47, cloud=0.0, wind=20.68, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:40:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:40:57.566 [DEBUG] [Thread-206831] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:40:57.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:40:57.663 [DEBUG] [Thread-206834] [transport.py] [_log()] starting thread (client mode): 0xa2dfb0a0
2026-02-15T15:40:57.663 [DEBUG] [Thread-206834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:40:57.679 [DEBUG] [Thread-206834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:40:57.679 [INFO] [Thread-206834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:40:57.687 [DEBUG] [Thread-206834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:40:57.687 [DEBUG] [Thread-206834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:40:57.687 [DEBUG] [Thread-206834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:40:57.687 [DEBUG] [Thread-206834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] client lang: <none>
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] server lang: <none>
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] kex follows: False
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:40:57.688 [DEBUG] [Thread-206834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:40:57.689 [DEBUG] [Thread-206834] [transport.py] [_log()] Compression: none
2026-02-15T15:40:57.689 [DEBUG] [Thread-206834] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:40:57.745 [DEBUG] [Thread-206834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:40:57.745 [DEBUG] [Thread-206834] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:40:57.746 [DEBUG] [Thread-206834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:40:57.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:40:57.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:40:57.800 [DEBUG] [Thread-206834] [transport.py] [_log()] userauth is OK
2026-02-15T15:40:57.801 [DEBUG] [Thread-206834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:40:57.801 [DEBUG] [Thread-206834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:40:57.801 [DEBUG] [Thread-206834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:40:57.802 [DEBUG] [Thread-206834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:40:57.823 [INFO] [Thread-206834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:40:57.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:40:57.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:40:58.646 [DEBUG] [Thread-206834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:40:58.646 [DEBUG] [Thread-206834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:40:58.694 [DEBUG] [Thread-206834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:40:58.695 [DEBUG] [Thread-206834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:40:58.704 [DEBUG] [Thread-206834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:40:58.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:40:58.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:40:58.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:40:58.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:40:58.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:40:58.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:40:58.741 [DEBUG] [Thread-206834] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:41:11.599 [DEBUG] [Thread-206836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:41:26.648 [DEBUG] [Thread-206837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:41:28.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:41:28.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:41:28.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
2026-02-15T15:41:30.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 41, 19), 25.48, 18.57, 0.0, 17.59, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:41:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:41:19
2026-02-15T15:41:31.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:41:31.229 [DEBUG] [Thread-206838] [transport.py] [_log()] starting thread (client mode): 0xa81d4f40
2026-02-15T15:41:31.229 [DEBUG] [Thread-206838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:41:31.249 [DEBUG] [Thread-206838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:41:31.249 [INFO] [Thread-206838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] client lang: <none>
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] server lang: <none>
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] kex follows: False
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] Compression: none
2026-02-15T15:41:31.251 [DEBUG] [Thread-206838] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:41:31.262 [DEBUG] [Thread-206838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:41:31.262 [DEBUG] [Thread-206838] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:41:31.263 [DEBUG] [Thread-206838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:41:31.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:41:31.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:41:31.264 [DEBUG] [Thread-206838] [transport.py] [_log()] userauth is OK
2026-02-15T15:41:31.264 [DEBUG] [Thread-206838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:41:31.265 [DEBUG] [Thread-206838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:41:31.265 [DEBUG] [Thread-206838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:41:31.265 [DEBUG] [Thread-206838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:41:31.282 [INFO] [Thread-206838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:41:31.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:41:31.859 [DEBUG] [Thread-206838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:41:31.859 [DEBUG] [Thread-206838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:41:31.859 [DEBUG] [Thread-206838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:41:31.901 [DEBUG] [Thread-206838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:41:31.901 [DEBUG] [Thread-206838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:41:31.904 [DEBUG] [Thread-206838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:41:31.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:41:31.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:41:31.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:41:31.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:41:31.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:41:31.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:41:31.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:41:31.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:41:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:41:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.570235 -999.00  +23.80  13.80     23   +1.70 1 1 1 1 1   888    0 20.72 -42.40 ----- 13.8 13.8 160.4 25.1 30.3 -29.2 29.4 -29.2 31.4 -28.1 32.2 -31.3
2026-02-15T15:41:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:41:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:41:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.570235
2026-02-15T15:41:31.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:41:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:41:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:41:31.929 [DEBUG] [Thread-206838] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:41:31.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:41:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:41:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:41:19', tmtdew=25.48, humidity=18.57, cloud=0.0, wind=17.59, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:41:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:41:32.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:41:32.026 [DEBUG] [Thread-206841] [transport.py] [_log()] starting thread (client mode): 0xa81d7100
2026-02-15T15:41:32.027 [DEBUG] [Thread-206841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:41:32.041 [DEBUG] [Thread-206841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:41:32.041 [INFO] [Thread-206841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:41:32.049 [DEBUG] [Thread-206841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:41:32.049 [DEBUG] [Thread-206841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:41:32.049 [DEBUG] [Thread-206841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:41:32.049 [DEBUG] [Thread-206841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:41:32.049 [DEBUG] [Thread-206841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] client lang: <none>
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] server lang: <none>
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] kex follows: False
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] Compression: none
2026-02-15T15:41:32.050 [DEBUG] [Thread-206841] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:41:32.119 [DEBUG] [Thread-206841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:41:32.119 [DEBUG] [Thread-206841] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:41:32.120 [DEBUG] [Thread-206841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:41:32.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:41:32.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:41:32.178 [DEBUG] [Thread-206841] [transport.py] [_log()] userauth is OK
2026-02-15T15:41:32.178 [DEBUG] [Thread-206841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:41:32.179 [DEBUG] [Thread-206841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:41:32.179 [DEBUG] [Thread-206841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:41:32.179 [DEBUG] [Thread-206841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:41:32.197 [INFO] [Thread-206841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:41:32.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:41:32.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:41:33.028 [DEBUG] [Thread-206841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:41:33.028 [DEBUG] [Thread-206841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:41:33.082 [DEBUG] [Thread-206841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:41:33.083 [DEBUG] [Thread-206841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:41:33.095 [DEBUG] [Thread-206841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:41:33.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:41:33.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:41:33.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:41:33.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:41:33.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:41:33.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:41:33.156 [DEBUG] [Thread-206841] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:41:41.684 [DEBUG] [Thread-206843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:41:52.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:41:52.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:41:55.253 [DEBUG] [Thread-206844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:41:56.743 [DEBUG] [Thread-206845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:03.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:42:03.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:42:03.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:42:05.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 41, 56), 25.53, 18.54, 0.0, 16.76, 23.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:42:05.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:41:56
2026-02-15T15:42:05.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:42:06.044 [DEBUG] [Thread-206846] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-15T15:42:06.044 [DEBUG] [Thread-206846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:42:06.064 [DEBUG] [Thread-206846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:42:06.064 [INFO] [Thread-206846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] client lang: <none>
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] server lang: <none>
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] kex follows: False
2026-02-15T15:42:06.066 [DEBUG] [Thread-206846] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:42:06.067 [DEBUG] [Thread-206846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:42:06.067 [DEBUG] [Thread-206846] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:42:06.067 [DEBUG] [Thread-206846] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:42:06.067 [DEBUG] [Thread-206846] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:42:06.067 [DEBUG] [Thread-206846] [transport.py] [_log()] Compression: none
2026-02-15T15:42:06.067 [DEBUG] [Thread-206846] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:42:06.083 [DEBUG] [Thread-206846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:42:06.083 [DEBUG] [Thread-206846] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:42:06.084 [DEBUG] [Thread-206846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:42:06.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:42:06.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:42:06.086 [DEBUG] [Thread-206846] [transport.py] [_log()] userauth is OK
2026-02-15T15:42:06.086 [DEBUG] [Thread-206846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:42:06.086 [DEBUG] [Thread-206846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:42:06.086 [DEBUG] [Thread-206846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:42:06.086 [DEBUG] [Thread-206846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:42:06.110 [INFO] [Thread-206846] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:42:06.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:42:06.773 [DEBUG] [Thread-206846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:42:06.774 [DEBUG] [Thread-206846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:42:06.774 [DEBUG] [Thread-206846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:42:06.816 [DEBUG] [Thread-206846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:42:06.816 [DEBUG] [Thread-206846] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:42:06.819 [DEBUG] [Thread-206846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:42:06.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:42:06.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:42:06.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:42:06.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:42:06.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:42:06.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:42:06.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:42:06.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:42:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:42:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.570582 -999.00  +23.70  15.52     23   +1.80 1 1 1 1 1   888    0 20.93 -42.85 ----- 15.5 15.5 151.1 23.0 30.1 -31.3 29.6 -29.4 31.3 -28.1 32.1 -30.9
2026-02-15T15:42:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:42:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:42:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.570582
2026-02-15T15:42:06.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:42:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:42:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:42:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:42:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:42:06.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:41:56', tmtdew=25.53, humidity=18.54, cloud=0.0, wind=16.76, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:41:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:42:06.845 [DEBUG] [Thread-206846] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:42:06.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:42:06.941 [DEBUG] [Thread-206849] [transport.py] [_log()] starting thread (client mode): 0xa2d05ea0
2026-02-15T15:42:06.941 [DEBUG] [Thread-206849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:42:06.956 [DEBUG] [Thread-206849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:42:06.956 [INFO] [Thread-206849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:42:06.963 [DEBUG] [Thread-206849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:42:06.963 [DEBUG] [Thread-206849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] client lang: <none>
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] server lang: <none>
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] kex follows: False
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:42:06.964 [DEBUG] [Thread-206849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:42:06.965 [DEBUG] [Thread-206849] [transport.py] [_log()] Compression: none
2026-02-15T15:42:06.965 [DEBUG] [Thread-206849] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:42:07.022 [DEBUG] [Thread-206849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:42:07.022 [DEBUG] [Thread-206849] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:42:07.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:42:07.023 [DEBUG] [Thread-206849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:42:07.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:42:07.079 [DEBUG] [Thread-206849] [transport.py] [_log()] userauth is OK
2026-02-15T15:42:07.080 [DEBUG] [Thread-206849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:42:07.080 [DEBUG] [Thread-206849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:42:07.080 [DEBUG] [Thread-206849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:42:07.080 [DEBUG] [Thread-206849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:42:07.098 [INFO] [Thread-206849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:42:07.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:42:07.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:42:07.915 [DEBUG] [Thread-206849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:42:07.915 [DEBUG] [Thread-206849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:42:07.963 [DEBUG] [Thread-206849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:42:07.963 [DEBUG] [Thread-206849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:42:07.975 [DEBUG] [Thread-206849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:42:07.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:42: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')
2026-02-15T15:42:07.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:42:08.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:42:08.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:42:08.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:42:08.012 [DEBUG] [Thread-206849] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:42:11.780 [DEBUG] [Thread-206851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:26.844 [DEBUG] [Thread-206852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:38.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:42:38.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:42:38.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:42:40.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 41, 56), 25.53, 18.54, 0.0, 16.76, 23.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:42:40.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:41:56
2026-02-15T15:42:40.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:42:40.524 [DEBUG] [Thread-206853] [transport.py] [_log()] starting thread (client mode): 0xa2d4e7d0
2026-02-15T15:42:40.524 [DEBUG] [Thread-206853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:42:40.546 [DEBUG] [Thread-206853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:42:40.546 [INFO] [Thread-206853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:42:40.549 [DEBUG] [Thread-206853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] client lang: <none>
2026-02-15T15:42:40.550 [DEBUG] [Thread-206853] [transport.py] [_log()] server lang: <none>
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] kex follows: False
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:42:40.551 [DEBUG] [Thread-206853] [transport.py] [_log()] Compression: none
2026-02-15T15:42:40.552 [DEBUG] [Thread-206853] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:42:40.570 [DEBUG] [Thread-206853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:42:40.571 [DEBUG] [Thread-206853] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:42:40.571 [DEBUG] [Thread-206853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:42:40.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:42:40.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:42:40.573 [DEBUG] [Thread-206853] [transport.py] [_log()] userauth is OK
2026-02-15T15:42:40.573 [DEBUG] [Thread-206853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:42:40.574 [DEBUG] [Thread-206853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:42:40.574 [DEBUG] [Thread-206853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:42:40.574 [DEBUG] [Thread-206853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:42:40.592 [INFO] [Thread-206853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:42:40.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:42:41.251 [DEBUG] [Thread-206853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:42:41.251 [DEBUG] [Thread-206853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:42:41.251 [DEBUG] [Thread-206853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:42:41.291 [DEBUG] [Thread-206853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:42:41.292 [DEBUG] [Thread-206853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:42:41.295 [DEBUG] [Thread-206853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:42:41.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:42:41.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:42:41.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:42:41.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:42:41.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:42:41.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:42:41.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:42:41.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:42:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:42:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.570929 -999.00  +23.90  19.05     23   +1.80 1 1 1 1 1   888    0 20.99 -43.28 ----- 19.1 19.1 163.6 23.9 30.2 -30.2 29.7 -29.1 31.4 -27.7 32.2 -29.8
2026-02-15T15:42:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:42:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:42:41.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.570929
2026-02-15T15:42:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:42:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:42:41.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:42:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:42:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:42:41.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:41:56', tmtdew=25.53, humidity=18.54, cloud=0.0, wind=16.76, temperature=23.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:42:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:42:41.323 [DEBUG] [Thread-206853] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:42:41.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:42:41.419 [DEBUG] [Thread-206856] [transport.py] [_log()] starting thread (client mode): 0xa2d4c1c0
2026-02-15T15:42:41.420 [DEBUG] [Thread-206856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:42:41.433 [DEBUG] [Thread-206856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:42:41.433 [INFO] [Thread-206856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:42:41.441 [DEBUG] [Thread-206856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:42:41.441 [DEBUG] [Thread-206856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:42:41.441 [DEBUG] [Thread-206856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:42:41.441 [DEBUG] [Thread-206856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:41.441 [DEBUG] [Thread-206856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:42:41.441 [DEBUG] [Thread-206856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] client lang: <none>
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] server lang: <none>
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] kex follows: False
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:42:41.442 [DEBUG] [Thread-206856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:42:41.443 [DEBUG] [Thread-206856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:42:41.443 [DEBUG] [Thread-206856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:42:41.443 [DEBUG] [Thread-206856] [transport.py] [_log()] Compression: none
2026-02-15T15:42:41.443 [DEBUG] [Thread-206856] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:42:41.501 [DEBUG] [Thread-206856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:42:41.502 [DEBUG] [Thread-206856] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:42:41.502 [DEBUG] [Thread-206856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:42:41.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:42:41.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:42:41.558 [DEBUG] [Thread-206856] [transport.py] [_log()] userauth is OK
2026-02-15T15:42:41.558 [DEBUG] [Thread-206856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:42:41.559 [DEBUG] [Thread-206856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:42:41.559 [DEBUG] [Thread-206856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:42:41.559 [DEBUG] [Thread-206856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:42:41.578 [INFO] [Thread-206856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:42:41.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:42:41.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:42:41.880 [DEBUG] [Thread-206858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:42.355 [DEBUG] [Thread-206856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:42:42.356 [DEBUG] [Thread-206856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:42:42.404 [DEBUG] [Thread-206856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:42:42.405 [DEBUG] [Thread-206856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:42:42.415 [DEBUG] [Thread-206856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:42:42.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:42:42.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:42:42.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:42:42.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:42:42.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:42:42.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:42:42.457 [DEBUG] [Thread-206856] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:42:52.342 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:52.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:55.305 [DEBUG] [Thread-206859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:42:56.935 [DEBUG] [Thread-206860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:11.967 [DEBUG] [Thread-206861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:12.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:43:12.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:43:12.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:43:14.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 42, 32), 25.71, 18.37, 0.0, 18.91, 24.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:43:14.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:42:32
2026-02-15T15:43:14.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:43:14.980 [DEBUG] [Thread-206862] [transport.py] [_log()] starting thread (client mode): 0xa2dc0940
2026-02-15T15:43:14.981 [DEBUG] [Thread-206862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:43:15.001 [DEBUG] [Thread-206862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:43:15.001 [INFO] [Thread-206862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:15.004 [DEBUG] [Thread-206862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] client lang: <none>
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] server lang: <none>
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] kex follows: False
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] Compression: none
2026-02-15T15:43:15.005 [DEBUG] [Thread-206862] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:43:15.013 [DEBUG] [Thread-206862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:43:15.014 [DEBUG] [Thread-206862] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:43:15.014 [DEBUG] [Thread-206862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:43:15.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:43:15.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:43:15.016 [DEBUG] [Thread-206862] [transport.py] [_log()] userauth is OK
2026-02-15T15:43:15.016 [DEBUG] [Thread-206862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:43:15.016 [DEBUG] [Thread-206862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:43:15.016 [DEBUG] [Thread-206862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:43:15.016 [DEBUG] [Thread-206862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:43:15.040 [INFO] [Thread-206862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:43:15.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:43:15.664 [DEBUG] [Thread-206862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:43:15.664 [DEBUG] [Thread-206862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:43:15.665 [DEBUG] [Thread-206862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:43:15.705 [DEBUG] [Thread-206862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:43:15.705 [DEBUG] [Thread-206862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:43:15.707 [DEBUG] [Thread-206862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:43:15.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:43:15.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:43:15.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:43:15.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:43:15.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:43:15.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:43:15.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:43:15.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:43:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:43:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.571276 -999.00  +23.60  20.05     23   +1.60 1 1 1 1 1   888    0 21.07 -44.26 ----- 20.1 20.1 167.8 29.1 30.1 -32.0 29.5 -29.8 31.1 -30.6 32.1 -31.3
2026-02-15T15:43:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:43:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:43:15.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.571276
2026-02-15T15:43:15.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:43:15.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:43:15.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:43:15.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:43:15.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:43:15.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:42:32', tmtdew=25.71, humidity=18.37, cloud=0.0, wind=18.91, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:42:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:43:15.724 [DEBUG] [Thread-206862] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:43:15.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:43:15.826 [DEBUG] [Thread-206865] [transport.py] [_log()] starting thread (client mode): 0xa2df9f30
2026-02-15T15:43:15.826 [DEBUG] [Thread-206865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:43:15.840 [DEBUG] [Thread-206865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:43:15.840 [INFO] [Thread-206865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:43:15.847 [DEBUG] [Thread-206865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:43:15.848 [DEBUG] [Thread-206865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] client lang: <none>
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] server lang: <none>
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] kex follows: False
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] Compression: none
2026-02-15T15:43:15.849 [DEBUG] [Thread-206865] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:43:15.906 [DEBUG] [Thread-206865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:43:15.907 [DEBUG] [Thread-206865] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:43:15.907 [DEBUG] [Thread-206865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:43:15.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:43:15.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:43:15.964 [DEBUG] [Thread-206865] [transport.py] [_log()] userauth is OK
2026-02-15T15:43:15.964 [DEBUG] [Thread-206865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:43:15.964 [DEBUG] [Thread-206865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:43:15.964 [DEBUG] [Thread-206865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:43:15.964 [DEBUG] [Thread-206865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:43:15.986 [INFO] [Thread-206865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:43:15.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:43:15.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:43:16.805 [DEBUG] [Thread-206865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:43:16.805 [DEBUG] [Thread-206865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:43:16.853 [DEBUG] [Thread-206865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:43:16.853 [DEBUG] [Thread-206865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:43:16.864 [DEBUG] [Thread-206865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:43:16.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:43:16.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:43:16.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:43:16.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:43:16.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:43:16.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:43:16.900 [DEBUG] [Thread-206865] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:43:27.007 [DEBUG] [Thread-206867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:42.059 [DEBUG] [Thread-206868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:46.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:43:46.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:43:46.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:43:48.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 43, 8), 25.75, 18.29, 0.0, 21.65, 23.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:43:48.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:43:08
2026-02-15T15:43:49.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:43:49.481 [DEBUG] [Thread-206869] [transport.py] [_log()] starting thread (client mode): 0xa2d00040
2026-02-15T15:43:49.482 [DEBUG] [Thread-206869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:43:49.500 [DEBUG] [Thread-206869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:43:49.500 [INFO] [Thread-206869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:43:49.503 [DEBUG] [Thread-206869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] client lang: <none>
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] server lang: <none>
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] kex follows: False
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] Compression: none
2026-02-15T15:43:49.504 [DEBUG] [Thread-206869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:43:49.520 [DEBUG] [Thread-206869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:43:49.520 [DEBUG] [Thread-206869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:43:49.521 [DEBUG] [Thread-206869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:43:49.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:43:49.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:43:49.523 [DEBUG] [Thread-206869] [transport.py] [_log()] userauth is OK
2026-02-15T15:43:49.523 [DEBUG] [Thread-206869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:43:49.523 [DEBUG] [Thread-206869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:43:49.523 [DEBUG] [Thread-206869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:43:49.523 [DEBUG] [Thread-206869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:43:49.548 [INFO] [Thread-206869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:43:49.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:43:50.199 [DEBUG] [Thread-206869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:43:50.199 [DEBUG] [Thread-206869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:43:50.200 [DEBUG] [Thread-206869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:43:50.240 [DEBUG] [Thread-206869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:43:50.241 [DEBUG] [Thread-206869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:43:50.244 [DEBUG] [Thread-206869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:43:50.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:43:50.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:43:50.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:43:50.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:43:50.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:43:50.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:43:50.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.571624 -999.00  +23.60  17.75     23   +1.60 1 1 1 1 1   888    0 20.57 -45.37 ----- 17.8 17.8 178.8 26.3 30.1 -30.0 29.3 -32.9 31.1 -28.4 32.1 -30.6
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.571624
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:43:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:43:08', tmtdew=25.75, humidity=18.29, cloud=0.0, wind=21.65, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:43:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:43:50.266 [DEBUG] [Thread-206869] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:43:50.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:43:50.354 [DEBUG] [Thread-206872] [transport.py] [_log()] starting thread (client mode): 0xa2d4d180
2026-02-15T15:43:50.355 [DEBUG] [Thread-206872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:43:50.369 [DEBUG] [Thread-206872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:43:50.369 [INFO] [Thread-206872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:43:50.377 [DEBUG] [Thread-206872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:43:50.377 [DEBUG] [Thread-206872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:43:50.377 [DEBUG] [Thread-206872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:43:50.377 [DEBUG] [Thread-206872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:50.377 [DEBUG] [Thread-206872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] client lang: <none>
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] server lang: <none>
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] kex follows: False
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] Compression: none
2026-02-15T15:43:50.378 [DEBUG] [Thread-206872] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:43:50.435 [DEBUG] [Thread-206872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:43:50.436 [DEBUG] [Thread-206872] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:43:50.436 [DEBUG] [Thread-206872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:43:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:43:50.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:43:50.492 [DEBUG] [Thread-206872] [transport.py] [_log()] userauth is OK
2026-02-15T15:43:50.492 [DEBUG] [Thread-206872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:43:50.492 [DEBUG] [Thread-206872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:43:50.493 [DEBUG] [Thread-206872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:43:50.493 [DEBUG] [Thread-206872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:43:50.517 [INFO] [Thread-206872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:43:50.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:43:50.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:43:51.388 [DEBUG] [Thread-206872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:43:51.388 [DEBUG] [Thread-206872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:43:51.436 [DEBUG] [Thread-206872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:43:51.437 [DEBUG] [Thread-206872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:43:51.446 [DEBUG] [Thread-206872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:43:51.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:43:51.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:43:51.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:43:51.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:43:51.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:43:51.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:43:51.484 [DEBUG] [Thread-206872] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:43:52.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:52.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:55.338 [DEBUG] [Thread-206874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:43:57.097 [DEBUG] [Thread-206875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:12.152 [DEBUG] [Thread-206876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:44:21.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:44:21.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
2026-02-15T15:44:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 43, 43), 25.71, 17.86, 0.0, 24.74, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:44:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:43:43
2026-02-15T15:44:23.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:44:24.113 [DEBUG] [Thread-206877] [transport.py] [_log()] starting thread (client mode): 0xa2d04fa0
2026-02-15T15:44:24.113 [DEBUG] [Thread-206877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:44:24.132 [DEBUG] [Thread-206877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:44:24.133 [INFO] [Thread-206877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] client lang: <none>
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] server lang: <none>
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] kex follows: False
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] Compression: none
2026-02-15T15:44:24.136 [DEBUG] [Thread-206877] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:44:24.154 [DEBUG] [Thread-206877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:44:24.154 [DEBUG] [Thread-206877] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:44:24.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:44:24.155 [DEBUG] [Thread-206877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:44:24.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:44:24.157 [DEBUG] [Thread-206877] [transport.py] [_log()] userauth is OK
2026-02-15T15:44:24.158 [DEBUG] [Thread-206877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:44:24.158 [DEBUG] [Thread-206877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:44:24.158 [DEBUG] [Thread-206877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:44:24.158 [DEBUG] [Thread-206877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:44:24.175 [INFO] [Thread-206877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:44:24.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:44:24.802 [DEBUG] [Thread-206877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:44:24.802 [DEBUG] [Thread-206877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:44:24.802 [DEBUG] [Thread-206877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:44:24.843 [DEBUG] [Thread-206877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:44:24.843 [DEBUG] [Thread-206877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:44:24.845 [DEBUG] [Thread-206877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:44:24.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:44:24.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:44:24.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:44:24.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:44:24.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:44:24.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:44:24.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:44:24.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:44:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:44:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.572318 -999.00  +24.00  16.29     23   +1.90 1 1 1 1 1   888    0 21.38 -44.10 ----- 16.3 16.3 130.6 30.9 30.2 -29.2 29.7 -29.2 31.3 -27.3 32.2 -28.7
2026-02-15T15:44:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:44:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:44:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.572318
2026-02-15T15:44:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:44:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:44:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:44:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:44:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:44:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:43:43', tmtdew=25.71, humidity=17.86, cloud=0.0, wind=24.74, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:44:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:44:24.871 [DEBUG] [Thread-206877] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:44:24.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:44:24.965 [DEBUG] [Thread-206880] [transport.py] [_log()] starting thread (client mode): 0xa2d4efe0
2026-02-15T15:44:24.965 [DEBUG] [Thread-206880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:44:24.979 [DEBUG] [Thread-206880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:44:24.979 [INFO] [Thread-206880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:44:24.986 [DEBUG] [Thread-206880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:44:24.986 [DEBUG] [Thread-206880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] client lang: <none>
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] server lang: <none>
2026-02-15T15:44:24.987 [DEBUG] [Thread-206880] [transport.py] [_log()] kex follows: False
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] Compression: none
2026-02-15T15:44:24.988 [DEBUG] [Thread-206880] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:44:25.043 [DEBUG] [Thread-206880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:44:25.043 [DEBUG] [Thread-206880] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:44:25.044 [DEBUG] [Thread-206880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:44:25.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:44:25.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:44:25.099 [DEBUG] [Thread-206880] [transport.py] [_log()] userauth is OK
2026-02-15T15:44:25.100 [DEBUG] [Thread-206880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:44:25.100 [DEBUG] [Thread-206880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:44:25.100 [DEBUG] [Thread-206880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:44:25.100 [DEBUG] [Thread-206880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:44:25.119 [INFO] [Thread-206880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:44:25.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:44:25.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:44:25.978 [DEBUG] [Thread-206880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:44:25.978 [DEBUG] [Thread-206880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:44:26.026 [DEBUG] [Thread-206880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:44:26.026 [DEBUG] [Thread-206880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:44:26.038 [DEBUG] [Thread-206880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:44:26.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:44:26.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:44:26.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:44:26.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:44:26.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:44:26.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:44:26.075 [DEBUG] [Thread-206880] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:44:27.191 [DEBUG] [Thread-206882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:42.256 [DEBUG] [Thread-206883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:52.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:52.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:55.381 [DEBUG] [Thread-206884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:56.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:44:56.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:44: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-02-15T15:44:57.291 [DEBUG] [Thread-206885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:44:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 44, 19), 25.57, 18.04, 0.0, 22.16, 23.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:44:58.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:44:19
2026-02-15T15:44:58.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:44:58.791 [DEBUG] [Thread-206886] [transport.py] [_log()] starting thread (client mode): 0xa2df8af0
2026-02-15T15:44:58.791 [DEBUG] [Thread-206886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:44:58.811 [DEBUG] [Thread-206886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:44:58.811 [INFO] [Thread-206886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] client lang: <none>
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] server lang: <none>
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] kex follows: False
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:44:58.814 [DEBUG] [Thread-206886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:44:58.815 [DEBUG] [Thread-206886] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:44:58.815 [DEBUG] [Thread-206886] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:44:58.815 [DEBUG] [Thread-206886] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:44:58.815 [DEBUG] [Thread-206886] [transport.py] [_log()] Compression: none
2026-02-15T15:44:58.815 [DEBUG] [Thread-206886] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:44:58.835 [DEBUG] [Thread-206886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:44:58.836 [DEBUG] [Thread-206886] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:44:58.836 [DEBUG] [Thread-206886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:44:58.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:44:58.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:44:58.839 [DEBUG] [Thread-206886] [transport.py] [_log()] userauth is OK
2026-02-15T15:44:58.840 [DEBUG] [Thread-206886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:44:58.840 [DEBUG] [Thread-206886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:44:58.840 [DEBUG] [Thread-206886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:44:58.840 [DEBUG] [Thread-206886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:44:58.865 [INFO] [Thread-206886] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:44:58.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:44:59.503 [DEBUG] [Thread-206886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:44:59.503 [DEBUG] [Thread-206886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:44:59.504 [DEBUG] [Thread-206886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:44:59.544 [DEBUG] [Thread-206886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:44:59.544 [DEBUG] [Thread-206886] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:44:59.548 [DEBUG] [Thread-206886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:44:59.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:44:59.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:44:59.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:44:59.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:44:59.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:44:59.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:44:59.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:44:59.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:44:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:44:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.572665 -999.00  +24.10  22.57     23   +2.00 1 1 1 1 1   888    0 21.17 -43.26 ----- 22.6 22.6 144.2 28.5 30.1 -33.4 29.9 -29.8 31.4 -27.6 32.2 -29.4
2026-02-15T15:44:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:44:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:44:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.572665
2026-02-15T15:44:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:44:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:44:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:44:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:44:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:44:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:44:19', tmtdew=25.57, humidity=18.04, cloud=0.0, wind=22.16, temperature=23.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:44:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:44:59.573 [DEBUG] [Thread-206886] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:44:59.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:44:59.669 [DEBUG] [Thread-206889] [transport.py] [_log()] starting thread (client mode): 0xa2d6b100
2026-02-15T15:44:59.669 [DEBUG] [Thread-206889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:44:59.684 [DEBUG] [Thread-206889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:44:59.684 [INFO] [Thread-206889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:44:59.691 [DEBUG] [Thread-206889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] client lang: <none>
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] server lang: <none>
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] kex follows: False
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] Compression: none
2026-02-15T15:44:59.692 [DEBUG] [Thread-206889] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:44:59.751 [DEBUG] [Thread-206889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:44:59.752 [DEBUG] [Thread-206889] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:44:59.752 [DEBUG] [Thread-206889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:44:59.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:44:59.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:44:59.808 [DEBUG] [Thread-206889] [transport.py] [_log()] userauth is OK
2026-02-15T15:44:59.808 [DEBUG] [Thread-206889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:44:59.808 [DEBUG] [Thread-206889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:44:59.808 [DEBUG] [Thread-206889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:44:59.808 [DEBUG] [Thread-206889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:44:59.828 [INFO] [Thread-206889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:44:59.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:44:59.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:45:00.644 [DEBUG] [Thread-206889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:45:00.644 [DEBUG] [Thread-206889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:45:00.701 [DEBUG] [Thread-206889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:45:00.701 [DEBUG] [Thread-206889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:45:00.713 [DEBUG] [Thread-206889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:45:00.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:45:00.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:45:00.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:45:00.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:45:00.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:45:00.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:45:00.754 [DEBUG] [Thread-206889] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:45:12.326 [DEBUG] [Thread-206891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:45:27.383 [DEBUG] [Thread-206892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:45:30.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:45:30.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:45:30.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:45:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 44, 54), 25.49, 18.24, 0.0, 21.56, 23.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:45:32.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:44:54
2026-02-15T15:45:33.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:45:33.381 [DEBUG] [Thread-206893] [transport.py] [_log()] starting thread (client mode): 0xa2de5f60
2026-02-15T15:45:33.381 [DEBUG] [Thread-206893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:45:33.401 [DEBUG] [Thread-206893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:45:33.401 [INFO] [Thread-206893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:45:33.404 [DEBUG] [Thread-206893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:45:33.404 [DEBUG] [Thread-206893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:45:33.404 [DEBUG] [Thread-206893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:45:33.404 [DEBUG] [Thread-206893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:45:33.404 [DEBUG] [Thread-206893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] client lang: <none>
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] server lang: <none>
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] kex follows: False
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:45:33.405 [DEBUG] [Thread-206893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:45:33.406 [DEBUG] [Thread-206893] [transport.py] [_log()] Compression: none
2026-02-15T15:45:33.406 [DEBUG] [Thread-206893] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:45:33.426 [DEBUG] [Thread-206893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:45:33.426 [DEBUG] [Thread-206893] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:45:33.427 [DEBUG] [Thread-206893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:45:33.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:45:33.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:45:33.429 [DEBUG] [Thread-206893] [transport.py] [_log()] userauth is OK
2026-02-15T15:45:33.429 [DEBUG] [Thread-206893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:45:33.430 [DEBUG] [Thread-206893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:45:33.430 [DEBUG] [Thread-206893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:45:33.430 [DEBUG] [Thread-206893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:45:33.455 [INFO] [Thread-206893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:45:33.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:45:34.097 [DEBUG] [Thread-206893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:45:34.098 [DEBUG] [Thread-206893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:45:34.098 [DEBUG] [Thread-206893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:45:34.138 [DEBUG] [Thread-206893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:45:34.138 [DEBUG] [Thread-206893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:45:34.141 [DEBUG] [Thread-206893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:45:34.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:45:34.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:45:34.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:45:34.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:45:34.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:45:34.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:45:34.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:45:34.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:45:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:45:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.573012 -999.00  +23.90  22.72     23   +1.90 1 1 1 1 1   888    0 21.39 -36.75 ----- 22.7 22.7 145.0 26.1 30.2 -30.4 29.8 -29.9 31.4 -28.5 32.2 -30.8
2026-02-15T15:45:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:45:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:45:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.573012
2026-02-15T15:45:34.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:45:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:45:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:45:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:45:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:45:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:44:54', tmtdew=25.49, humidity=18.24, cloud=0.0, wind=21.56, temperature=23.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:45:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:45:34.167 [DEBUG] [Thread-206893] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:45:34.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:45:34.262 [DEBUG] [Thread-206896] [transport.py] [_log()] starting thread (client mode): 0xa2de7070
2026-02-15T15:45:34.262 [DEBUG] [Thread-206896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:45:34.278 [DEBUG] [Thread-206896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:45:34.278 [INFO] [Thread-206896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:45:34.287 [DEBUG] [Thread-206896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] client lang: <none>
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] server lang: <none>
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] kex follows: False
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:45:34.288 [DEBUG] [Thread-206896] [transport.py] [_log()] Compression: none
2026-02-15T15:45:34.289 [DEBUG] [Thread-206896] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:45:34.345 [DEBUG] [Thread-206896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:45:34.346 [DEBUG] [Thread-206896] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:45:34.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:45:34.347 [DEBUG] [Thread-206896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:45:34.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:45:34.404 [DEBUG] [Thread-206896] [transport.py] [_log()] userauth is OK
2026-02-15T15:45:34.404 [DEBUG] [Thread-206896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:45:34.404 [DEBUG] [Thread-206896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:45:34.405 [DEBUG] [Thread-206896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:45:34.405 [DEBUG] [Thread-206896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:45:34.424 [INFO] [Thread-206896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:45:34.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:45:34.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:45:35.258 [DEBUG] [Thread-206896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:45:35.258 [DEBUG] [Thread-206896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:45:35.307 [DEBUG] [Thread-206896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:45:35.307 [DEBUG] [Thread-206896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:45:35.317 [DEBUG] [Thread-206896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:45:35.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:45:35.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:45:35.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:45:35.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:45:35.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:45:35.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:45:35.356 [DEBUG] [Thread-206896] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:45:42.418 [DEBUG] [Thread-206898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:45:52.771 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:45:52.772 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:45:55.414 [DEBUG] [Thread-206899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:45:57.473 [DEBUG] [Thread-206900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:05.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:46:05.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:46:05.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:46:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 45, 30), 25.57, 18.16, 0.0, 21.7, 23.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:46:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:45:30
2026-02-15T15:46:07.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:46:08.065 [DEBUG] [Thread-206901] [transport.py] [_log()] starting thread (client mode): 0xa2de68f0
2026-02-15T15:46:08.066 [DEBUG] [Thread-206901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:46:08.086 [DEBUG] [Thread-206901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:46:08.086 [INFO] [Thread-206901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:46:08.089 [DEBUG] [Thread-206901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] client lang: <none>
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] server lang: <none>
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] kex follows: False
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:46:08.090 [DEBUG] [Thread-206901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:46:08.091 [DEBUG] [Thread-206901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:46:08.091 [DEBUG] [Thread-206901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:46:08.091 [DEBUG] [Thread-206901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:46:08.091 [DEBUG] [Thread-206901] [transport.py] [_log()] Compression: none
2026-02-15T15:46:08.091 [DEBUG] [Thread-206901] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:46:08.109 [DEBUG] [Thread-206901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:46:08.109 [DEBUG] [Thread-206901] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:46:08.110 [DEBUG] [Thread-206901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:46:08.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:46:08.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:46:08.112 [DEBUG] [Thread-206901] [transport.py] [_log()] userauth is OK
2026-02-15T15:46:08.112 [DEBUG] [Thread-206901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:46:08.112 [DEBUG] [Thread-206901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:46:08.112 [DEBUG] [Thread-206901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:46:08.112 [DEBUG] [Thread-206901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:46:08.136 [INFO] [Thread-206901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:46:08.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:46:08.812 [DEBUG] [Thread-206901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:46:08.812 [DEBUG] [Thread-206901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:46:08.813 [DEBUG] [Thread-206901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:46:08.854 [DEBUG] [Thread-206901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:46:08.854 [DEBUG] [Thread-206901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:46:08.857 [DEBUG] [Thread-206901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:46:08.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:46:08.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:46:08.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:46:08.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:46:08.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:46:08.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:46:08.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:46:08.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:46:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:46:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.573360 -999.00  +23.90  24.46     23   +1.90 1 1 1 1 1   888    0 21.18 -36.83 ----- 24.5 24.5 162.2 28.1 30.1 -30.4 29.8 -29.7 31.4 -29.6 32.1 -31.4
2026-02-15T15:46:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:46:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:46:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.573360
2026-02-15T15:46:08.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:46:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:46:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:46:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:46:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:46:08.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:45:30', tmtdew=25.57, humidity=18.16, cloud=0.0, wind=21.7, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:45:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:46:08.885 [DEBUG] [Thread-206901] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:46:08.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:46:08.978 [DEBUG] [Thread-206904] [transport.py] [_log()] starting thread (client mode): 0xa2de7250
2026-02-15T15:46:08.978 [DEBUG] [Thread-206904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:46:08.993 [DEBUG] [Thread-206904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:46:08.994 [INFO] [Thread-206904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:46:09.001 [DEBUG] [Thread-206904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:46:09.001 [DEBUG] [Thread-206904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] client lang: <none>
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] server lang: <none>
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] kex follows: False
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] Compression: none
2026-02-15T15:46:09.002 [DEBUG] [Thread-206904] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:46:09.061 [DEBUG] [Thread-206904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:46:09.061 [DEBUG] [Thread-206904] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:46:09.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:46:09.063 [DEBUG] [Thread-206904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:46:09.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:46:09.120 [DEBUG] [Thread-206904] [transport.py] [_log()] userauth is OK
2026-02-15T15:46:09.121 [DEBUG] [Thread-206904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:46:09.121 [DEBUG] [Thread-206904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:46:09.121 [DEBUG] [Thread-206904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:46:09.121 [DEBUG] [Thread-206904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:46:09.144 [INFO] [Thread-206904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:46:09.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:46:09.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:46:09.949 [DEBUG] [Thread-206904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:46:09.950 [DEBUG] [Thread-206904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:46:09.996 [DEBUG] [Thread-206904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:46:09.996 [DEBUG] [Thread-206904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:46:10.004 [DEBUG] [Thread-206904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:46:10.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:46:10.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:46:10.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:46:10.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:46:10.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:46:10.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:46:10.036 [DEBUG] [Thread-206904] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:46:12.513 [DEBUG] [Thread-206906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:27.567 [DEBUG] [Thread-206907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:40.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:46:40.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:46:40.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:46:42.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 46, 5), 25.76, 17.94, 0.0, 18.17, 23.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:46:42.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:46:05
2026-02-15T15:46:42.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:46:42.602 [DEBUG] [Thread-206908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:42.730 [DEBUG] [Thread-206909] [transport.py] [_log()] starting thread (client mode): 0xa2de4cd0
2026-02-15T15:46:42.730 [DEBUG] [Thread-206909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:46:42.751 [DEBUG] [Thread-206909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:46:42.751 [INFO] [Thread-206909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] client lang: <none>
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] server lang: <none>
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] kex follows: False
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:46:42.754 [DEBUG] [Thread-206909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:46:42.755 [DEBUG] [Thread-206909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:46:42.755 [DEBUG] [Thread-206909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:46:42.755 [DEBUG] [Thread-206909] [transport.py] [_log()] Compression: none
2026-02-15T15:46:42.755 [DEBUG] [Thread-206909] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:46:42.773 [DEBUG] [Thread-206909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:46:42.773 [DEBUG] [Thread-206909] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:46:42.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:46:42.775 [DEBUG] [Thread-206909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:46:42.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:46:42.776 [DEBUG] [Thread-206909] [transport.py] [_log()] userauth is OK
2026-02-15T15:46:42.777 [DEBUG] [Thread-206909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:46:42.777 [DEBUG] [Thread-206909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:46:42.777 [DEBUG] [Thread-206909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:46:42.777 [DEBUG] [Thread-206909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:46:42.801 [INFO] [Thread-206909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:46:42.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:46:43.443 [DEBUG] [Thread-206909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:46:43.443 [DEBUG] [Thread-206909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:46:43.444 [DEBUG] [Thread-206909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:46:43.484 [DEBUG] [Thread-206909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:46:43.485 [DEBUG] [Thread-206909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:46:43.488 [DEBUG] [Thread-206909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:46:43.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:46:43.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:46:43.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:46:43.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:46:43.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:46:43.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:46:43.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:46:43.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:46:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:46:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.573707 -999.00  +23.80  13.95     23   +1.90 1 1 1 1 1   888    0 20.93 -34.45 ----- 13.9 13.9 128.0 24.7 30.1 -30.5 29.8 -29.6 31.2 -28.7 32.0 -31.0
2026-02-15T15:46:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:46:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:46:43.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.573707
2026-02-15T15:46:43.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:46:43.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:46:43.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:46:43.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:46:43.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:46:43.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:46:05', tmtdew=25.76, humidity=17.94, cloud=0.0, wind=18.17, temperature=23.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:46:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:46:43.515 [DEBUG] [Thread-206909] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:46:43.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:46:43.610 [DEBUG] [Thread-206912] [transport.py] [_log()] starting thread (client mode): 0xa2de5f00
2026-02-15T15:46:43.611 [DEBUG] [Thread-206912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:46:43.625 [DEBUG] [Thread-206912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:46:43.625 [INFO] [Thread-206912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:46:43.633 [DEBUG] [Thread-206912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:46:43.633 [DEBUG] [Thread-206912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] client lang: <none>
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] server lang: <none>
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] kex follows: False
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] Compression: none
2026-02-15T15:46:43.634 [DEBUG] [Thread-206912] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:46:43.692 [DEBUG] [Thread-206912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:46:43.693 [DEBUG] [Thread-206912] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:46:43.693 [DEBUG] [Thread-206912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:46:43.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:46:43.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:46:43.749 [DEBUG] [Thread-206912] [transport.py] [_log()] userauth is OK
2026-02-15T15:46:43.749 [DEBUG] [Thread-206912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:46:43.749 [DEBUG] [Thread-206912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:46:43.749 [DEBUG] [Thread-206912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:46:43.749 [DEBUG] [Thread-206912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:46:43.767 [INFO] [Thread-206912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:46:43.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:46:43.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:46:44.580 [DEBUG] [Thread-206912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:46:44.581 [DEBUG] [Thread-206912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:46:44.628 [DEBUG] [Thread-206912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:46:44.629 [DEBUG] [Thread-206912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:46:44.638 [DEBUG] [Thread-206912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:46:44.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:46:44.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:46:44.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:46:44.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:46:44.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:46:44.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:46:44.674 [DEBUG] [Thread-206912] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:46:52.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:52.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:55.470 [DEBUG] [Thread-206914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:46:57.634 [DEBUG] [Thread-206915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:12.689 [DEBUG] [Thread-206916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:47:14.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:47:14.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:47:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 46, 40), 26.56, 17.15, 0.0, 31.01, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:47:16.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:46:40
2026-02-15T15:47:16.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:47:17.156 [DEBUG] [Thread-206917] [transport.py] [_log()] starting thread (client mode): 0xa2d6a1a0
2026-02-15T15:47:17.156 [DEBUG] [Thread-206917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:47:17.176 [DEBUG] [Thread-206917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:47:17.176 [INFO] [Thread-206917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:47:17.179 [DEBUG] [Thread-206917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] client lang: <none>
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] server lang: <none>
2026-02-15T15:47:17.180 [DEBUG] [Thread-206917] [transport.py] [_log()] kex follows: False
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] Compression: none
2026-02-15T15:47:17.181 [DEBUG] [Thread-206917] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:47:17.198 [DEBUG] [Thread-206917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:47:17.199 [DEBUG] [Thread-206917] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:47:17.199 [DEBUG] [Thread-206917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:47:17.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:47:17.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:47:17.201 [DEBUG] [Thread-206917] [transport.py] [_log()] userauth is OK
2026-02-15T15:47:17.202 [DEBUG] [Thread-206917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:47:17.202 [DEBUG] [Thread-206917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:47:17.202 [DEBUG] [Thread-206917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:47:17.202 [DEBUG] [Thread-206917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:47:17.224 [INFO] [Thread-206917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:47:17.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:47:17.857 [DEBUG] [Thread-206917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:47:17.858 [DEBUG] [Thread-206917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:47:17.858 [DEBUG] [Thread-206917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:47:17.898 [DEBUG] [Thread-206917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:47:17.899 [DEBUG] [Thread-206917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:47:17.902 [DEBUG] [Thread-206917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:47:17.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:47:17.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:47:17.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:47:17.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:47:17.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:47:17.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:47:17.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:47:17.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:47:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:47:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.574054 -999.00  +24.10  26.22     23   +1.80 1 1 1 1 1   888    0 21.13 -31.47 ----- 26.2 26.2 144.2 30.2 30.1 -29.6 29.8 -30.7 31.4 -28.7 32.2 -30.0
2026-02-15T15:47:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:47:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:47:17.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.574054
2026-02-15T15:47:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:47:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:47:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:47:17.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:47:17.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:47:17.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:46:40', tmtdew=26.56, humidity=17.15, cloud=0.0, wind=31.01, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:46:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:47:17.930 [DEBUG] [Thread-206917] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:47:18.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:47:18.025 [DEBUG] [Thread-206920] [transport.py] [_log()] starting thread (client mode): 0xa2d6bc10
2026-02-15T15:47:18.026 [DEBUG] [Thread-206920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:47:18.041 [DEBUG] [Thread-206920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:47:18.041 [INFO] [Thread-206920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] client lang: <none>
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] server lang: <none>
2026-02-15T15:47:18.049 [DEBUG] [Thread-206920] [transport.py] [_log()] kex follows: False
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] Compression: none
2026-02-15T15:47:18.050 [DEBUG] [Thread-206920] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:47:18.109 [DEBUG] [Thread-206920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:47:18.110 [DEBUG] [Thread-206920] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:47:18.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:47:18.111 [DEBUG] [Thread-206920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:47:18.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:47:18.172 [DEBUG] [Thread-206920] [transport.py] [_log()] userauth is OK
2026-02-15T15:47:18.173 [DEBUG] [Thread-206920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:47:18.173 [DEBUG] [Thread-206920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:47:18.173 [DEBUG] [Thread-206920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:47:18.173 [DEBUG] [Thread-206920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:47:18.194 [INFO] [Thread-206920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:47:18.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:47:18.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:47:19.073 [DEBUG] [Thread-206920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:47:19.074 [DEBUG] [Thread-206920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:47:19.123 [DEBUG] [Thread-206920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:47:19.124 [DEBUG] [Thread-206920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:47:19.137 [DEBUG] [Thread-206920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:47:19.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:47:19.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:47:19.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:47:19.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:47:19.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:47:19.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:47:19.183 [DEBUG] [Thread-206920] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:47:27.729 [DEBUG] [Thread-206922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:42.778 [DEBUG] [Thread-206923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:49.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:47:49.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:47:49.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:47:51.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 47, 17), 25.72, 18.26, 0.0, 27.67, 23.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:47:51.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:47:17
2026-02-15T15:47:51.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:47:51.643 [DEBUG] [Thread-206924] [transport.py] [_log()] starting thread (client mode): 0xa57c35b0
2026-02-15T15:47:51.644 [DEBUG] [Thread-206924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:47:51.665 [DEBUG] [Thread-206924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:47:51.665 [INFO] [Thread-206924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:47:51.668 [DEBUG] [Thread-206924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] client lang: <none>
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] server lang: <none>
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] kex follows: False
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] Compression: none
2026-02-15T15:47:51.669 [DEBUG] [Thread-206924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:47:51.685 [DEBUG] [Thread-206924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:47:51.685 [DEBUG] [Thread-206924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:47:51.685 [DEBUG] [Thread-206924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:47:51.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:47:51.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:47:51.686 [DEBUG] [Thread-206924] [transport.py] [_log()] userauth is OK
2026-02-15T15:47:51.686 [DEBUG] [Thread-206924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:47:51.686 [DEBUG] [Thread-206924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:47:51.686 [DEBUG] [Thread-206924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:47:51.686 [DEBUG] [Thread-206924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:47:51.696 [INFO] [Thread-206924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:47:51.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:47:52.306 [DEBUG] [Thread-206924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:47:52.306 [DEBUG] [Thread-206924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:47:52.306 [DEBUG] [Thread-206924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:47:52.347 [DEBUG] [Thread-206924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:47:52.348 [DEBUG] [Thread-206924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:47:52.351 [DEBUG] [Thread-206924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:47:52.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:47:52.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:47:52.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:47:52.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:47:52.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:47:52.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:47:52.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:47:52.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:47:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:47:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.574401 -999.00  +23.80  21.41     23   +1.70 1 1 1 1 1   888    0 21.14 -29.54 ----- 21.4 21.4 152.8 24.7 30.0 -31.6 29.6 -30.2 31.1 -30.4 31.9 -31.3
2026-02-15T15:47:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:47:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:47:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.574401
2026-02-15T15:47:52.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:47:52.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:47:52.375 [DEBUG] [Thread-206924] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:47:52.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:47:52.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:47:52.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:47:52.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:47:17', tmtdew=25.72, humidity=18.26, cloud=0.0, wind=27.67, temperature=23.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:47:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:47:52.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:47:52.473 [DEBUG] [Thread-206927] [transport.py] [_log()] starting thread (client mode): 0xa57c03d0
2026-02-15T15:47:52.473 [DEBUG] [Thread-206927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:47:52.487 [DEBUG] [Thread-206927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:47:52.488 [INFO] [Thread-206927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] client lang: <none>
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] server lang: <none>
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] kex follows: False
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] Compression: none
2026-02-15T15:47:52.495 [DEBUG] [Thread-206927] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:47:52.551 [DEBUG] [Thread-206927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:47:52.551 [DEBUG] [Thread-206927] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:47:52.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:47:52.551 [DEBUG] [Thread-206927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:47:52.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:47:52.609 [DEBUG] [Thread-206927] [transport.py] [_log()] userauth is OK
2026-02-15T15:47:52.610 [DEBUG] [Thread-206927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:47:52.610 [DEBUG] [Thread-206927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:47:52.610 [DEBUG] [Thread-206927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:47:52.610 [DEBUG] [Thread-206927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:47:52.630 [INFO] [Thread-206927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:47:52.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:47:52.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:47:53.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:53.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:53.484 [DEBUG] [Thread-206927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:47:53.484 [DEBUG] [Thread-206927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:47:53.531 [DEBUG] [Thread-206927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:47:53.532 [DEBUG] [Thread-206927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:47:53.540 [DEBUG] [Thread-206927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:47:53.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:47:53.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:47:53.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:47:53.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:47:53.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:47:53.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:47:53.577 [DEBUG] [Thread-206927] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:47:55.537 [DEBUG] [Thread-206929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:47:57.819 [DEBUG] [Thread-206930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:12.871 [DEBUG] [Thread-206931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:23.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:48:23.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:48:23.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:48:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 47, 53), 25.63, 18.22, 0.0, 26.2, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:48:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:47:53
2026-02-15T15:48:25.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:48:26.051 [DEBUG] [Thread-206932] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-15T15:48:26.051 [DEBUG] [Thread-206932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:48:26.071 [DEBUG] [Thread-206932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:48:26.071 [INFO] [Thread-206932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:48:26.072 [DEBUG] [Thread-206932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:48:26.072 [DEBUG] [Thread-206932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:48:26.072 [DEBUG] [Thread-206932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:48:26.072 [DEBUG] [Thread-206932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:48:26.072 [DEBUG] [Thread-206932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:48:26.072 [DEBUG] [Thread-206932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] client lang: <none>
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] server lang: <none>
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] kex follows: False
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] Compression: none
2026-02-15T15:48:26.073 [DEBUG] [Thread-206932] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:48:26.081 [DEBUG] [Thread-206932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:48:26.082 [DEBUG] [Thread-206932] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:48:26.082 [DEBUG] [Thread-206932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:48:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:48:26.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:48:26.083 [DEBUG] [Thread-206932] [transport.py] [_log()] userauth is OK
2026-02-15T15:48:26.083 [DEBUG] [Thread-206932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:48:26.083 [DEBUG] [Thread-206932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:48:26.083 [DEBUG] [Thread-206932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:48:26.083 [DEBUG] [Thread-206932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:48:26.101 [INFO] [Thread-206932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:48:26.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:48:26.746 [DEBUG] [Thread-206932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:48:26.747 [DEBUG] [Thread-206932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:48:26.747 [DEBUG] [Thread-206932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:48:26.787 [DEBUG] [Thread-206932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:48:26.788 [DEBUG] [Thread-206932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:48:26.791 [DEBUG] [Thread-206932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:48:26.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:48:26.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:48:26.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:48:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:48:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:48:26.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:48:26.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:48:26.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:48:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:48:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.575096 -999.00  +23.40  12.84     24   +1.80 1 1 1 1 1   888    0 21.70 -29.41 ----- 12.8 12.8 156.4 24.7 29.9 -30.4 29.4 -29.2 31.1 -29.2 31.9 -30.4
2026-02-15T15:48:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:48:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:48:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.575096
2026-02-15T15:48:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:48:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:48:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:48:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:48:26.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:48:26.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:47:53', tmtdew=25.63, humidity=18.22, cloud=0.0, wind=26.2, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:48:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:48:26.815 [DEBUG] [Thread-206932] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:48:26.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:48:26.908 [DEBUG] [Thread-206935] [transport.py] [_log()] starting thread (client mode): 0xa2d02590
2026-02-15T15:48:26.908 [DEBUG] [Thread-206935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:48:26.922 [DEBUG] [Thread-206935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:48:26.923 [INFO] [Thread-206935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:48:26.930 [DEBUG] [Thread-206935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:48:26.930 [DEBUG] [Thread-206935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:48:26.931 [DEBUG] [Thread-206935] [transport.py] [_log()] client lang: <none>
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] server lang: <none>
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] kex follows: False
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] Compression: none
2026-02-15T15:48:26.932 [DEBUG] [Thread-206935] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:48:26.989 [DEBUG] [Thread-206935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:48:26.989 [DEBUG] [Thread-206935] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:48:26.990 [DEBUG] [Thread-206935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:48:26.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:48:26.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:48:27.045 [DEBUG] [Thread-206935] [transport.py] [_log()] userauth is OK
2026-02-15T15:48:27.046 [DEBUG] [Thread-206935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:48:27.046 [DEBUG] [Thread-206935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:48:27.046 [DEBUG] [Thread-206935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:48:27.046 [DEBUG] [Thread-206935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:48:27.064 [INFO] [Thread-206935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:48:27.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:48:27.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:48:27.907 [DEBUG] [Thread-206935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:48:27.907 [DEBUG] [Thread-206935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:48:27.909 [DEBUG] [Thread-206937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:27.955 [DEBUG] [Thread-206935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:48:27.955 [DEBUG] [Thread-206935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:48:27.965 [DEBUG] [Thread-206935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:48:27.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:48:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:48:27.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:48:27.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:48:27.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:48:27.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:48:28.000 [DEBUG] [Thread-206935] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:48:42.958 [DEBUG] [Thread-206938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:53.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:53.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:55.577 [DEBUG] [Thread-206939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:57.998 [DEBUG] [Thread-206940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:48:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:48:58.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:48:58.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:48:59.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 48, 28), 25.41, 18.49, 0.0, 25.06, 23.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:48:59.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:48:28
2026-02-15T15:49:00.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:49:00.411 [DEBUG] [Thread-206941] [transport.py] [_log()] starting thread (client mode): 0xa57c09d0
2026-02-15T15:49:00.411 [DEBUG] [Thread-206941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:49:00.432 [DEBUG] [Thread-206941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:49:00.432 [INFO] [Thread-206941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] client lang: <none>
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] server lang: <none>
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] kex follows: False
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:49:00.435 [DEBUG] [Thread-206941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:49:00.436 [DEBUG] [Thread-206941] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:49:00.436 [DEBUG] [Thread-206941] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:49:00.436 [DEBUG] [Thread-206941] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:49:00.436 [DEBUG] [Thread-206941] [transport.py] [_log()] Compression: none
2026-02-15T15:49:00.436 [DEBUG] [Thread-206941] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:49:00.453 [DEBUG] [Thread-206941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:49:00.453 [DEBUG] [Thread-206941] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:49:00.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:49:00.455 [DEBUG] [Thread-206941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:49:00.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:49:00.458 [DEBUG] [Thread-206941] [transport.py] [_log()] userauth is OK
2026-02-15T15:49:00.458 [DEBUG] [Thread-206941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:49:00.458 [DEBUG] [Thread-206941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:49:00.458 [DEBUG] [Thread-206941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:49:00.458 [DEBUG] [Thread-206941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:49:00.483 [INFO] [Thread-206941] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:49:00.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:49:01.154 [DEBUG] [Thread-206941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:49:01.154 [DEBUG] [Thread-206941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:49:01.155 [DEBUG] [Thread-206941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:49:01.194 [DEBUG] [Thread-206941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:49:01.195 [DEBUG] [Thread-206941] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:49:01.198 [DEBUG] [Thread-206941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:49:01.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:49:01.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:49:01.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:49:01.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:49:01.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:49:01.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:49:01.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:49:01.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.575443 -999.00  +23.30  16.34     24   +1.70 1 1 1 1 1   888    0 21.15 -30.27 ----- 16.3 16.3 167.6 25.4 29.9 -30.3 29.5 -29.0 31.1 -28.2 31.9 -31.0
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.575443
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:49:01.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:48:28', tmtdew=25.41, humidity=18.49, cloud=0.0, wind=25.06, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:48:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:49:01.221 [DEBUG] [Thread-206941] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:49:01.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:49:01.312 [DEBUG] [Thread-206944] [transport.py] [_log()] starting thread (client mode): 0xa2d68e50
2026-02-15T15:49:01.312 [DEBUG] [Thread-206944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:49:01.326 [DEBUG] [Thread-206944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:49:01.326 [INFO] [Thread-206944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:49:01.333 [DEBUG] [Thread-206944] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:49:01.334 [DEBUG] [Thread-206944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:49:01.334 [DEBUG] [Thread-206944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:49:01.334 [DEBUG] [Thread-206944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:01.334 [DEBUG] [Thread-206944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:01.334 [DEBUG] [Thread-206944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:01.334 [DEBUG] [Thread-206944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] client lang: <none>
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] server lang: <none>
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] kex follows: False
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] Compression: none
2026-02-15T15:49:01.335 [DEBUG] [Thread-206944] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:49:01.394 [DEBUG] [Thread-206944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:49:01.395 [DEBUG] [Thread-206944] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:49:01.395 [DEBUG] [Thread-206944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:49:01.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:49:01.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:49:01.453 [DEBUG] [Thread-206944] [transport.py] [_log()] userauth is OK
2026-02-15T15:49:01.453 [DEBUG] [Thread-206944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:49:01.453 [DEBUG] [Thread-206944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:49:01.453 [DEBUG] [Thread-206944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:49:01.454 [DEBUG] [Thread-206944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:49:01.472 [INFO] [Thread-206944] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:49:01.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:49:01.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:49:02.327 [DEBUG] [Thread-206944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:49:02.327 [DEBUG] [Thread-206944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:49:02.375 [DEBUG] [Thread-206944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:49:02.376 [DEBUG] [Thread-206944] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:49:02.394 [DEBUG] [Thread-206944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:49:02.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:49:02.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:49:02.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:49:02.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:49:02.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:49:02.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:49:02.431 [DEBUG] [Thread-206944] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:49:13.033 [DEBUG] [Thread-206946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:49:28.083 [DEBUG] [Thread-206947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:49:32.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:49:32.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:49:32.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:49:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 49, 4), 25.34, 18.57, 0.0, 25.81, 23.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:49:34.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:49:04
2026-02-15T15:49:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:49:34.835 [DEBUG] [Thread-206948] [transport.py] [_log()] starting thread (client mode): 0xa2d037f0
2026-02-15T15:49:34.835 [DEBUG] [Thread-206948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:49:34.855 [DEBUG] [Thread-206948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:49:34.855 [INFO] [Thread-206948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:49:34.859 [DEBUG] [Thread-206948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:49:34.859 [DEBUG] [Thread-206948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:49:34.859 [DEBUG] [Thread-206948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:49:34.859 [DEBUG] [Thread-206948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:34.859 [DEBUG] [Thread-206948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:34.859 [DEBUG] [Thread-206948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] client lang: <none>
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] server lang: <none>
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] kex follows: False
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:49:34.860 [DEBUG] [Thread-206948] [transport.py] [_log()] Compression: none
2026-02-15T15:49:34.861 [DEBUG] [Thread-206948] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:49:34.881 [DEBUG] [Thread-206948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:49:34.882 [DEBUG] [Thread-206948] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:49:34.882 [DEBUG] [Thread-206948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:49:34.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:49:34.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:49:34.884 [DEBUG] [Thread-206948] [transport.py] [_log()] userauth is OK
2026-02-15T15:49:34.885 [DEBUG] [Thread-206948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:49:34.885 [DEBUG] [Thread-206948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:49:34.885 [DEBUG] [Thread-206948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:49:34.885 [DEBUG] [Thread-206948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:49:34.909 [INFO] [Thread-206948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:49:34.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:49:35.539 [DEBUG] [Thread-206948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:49:35.539 [DEBUG] [Thread-206948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:49:35.539 [DEBUG] [Thread-206948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:49:35.580 [DEBUG] [Thread-206948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:49:35.580 [DEBUG] [Thread-206948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:49:35.582 [DEBUG] [Thread-206948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:49:35.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:49:35.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:49:35.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:49:35.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:49:35.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:49:35.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:49:35.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:49:35.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:49:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:49:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.575790 -999.00  +23.40  18.88     24   +1.80 1 1 1 1 1   888    0 21.06 -29.68 ----- 18.9 18.9 149.2 24.1 29.9 -30.1 29.6 -30.9 31.1 -28.0 31.9 -30.9
2026-02-15T15:49:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:49:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:49:35.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.575790
2026-02-15T15:49:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:49:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:49:35.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:49:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:49:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:49:35.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:49:04', tmtdew=25.34, humidity=18.57, cloud=0.0, wind=25.81, temperature=23.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:49:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:49:35.604 [DEBUG] [Thread-206948] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:49:35.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:49:35.703 [DEBUG] [Thread-206951] [transport.py] [_log()] starting thread (client mode): 0xa2d01180
2026-02-15T15:49:35.704 [DEBUG] [Thread-206951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:49:35.717 [DEBUG] [Thread-206951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:49:35.718 [INFO] [Thread-206951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:49:35.725 [DEBUG] [Thread-206951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:49:35.725 [DEBUG] [Thread-206951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] client lang: <none>
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] server lang: <none>
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] kex follows: False
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] Compression: none
2026-02-15T15:49:35.726 [DEBUG] [Thread-206951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:49:35.784 [DEBUG] [Thread-206951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:49:35.785 [DEBUG] [Thread-206951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:49:35.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:49:35.785 [DEBUG] [Thread-206951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:49:35.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:49:35.841 [DEBUG] [Thread-206951] [transport.py] [_log()] userauth is OK
2026-02-15T15:49:35.841 [DEBUG] [Thread-206951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:49:35.841 [DEBUG] [Thread-206951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:49:35.841 [DEBUG] [Thread-206951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:49:35.841 [DEBUG] [Thread-206951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:49:35.859 [INFO] [Thread-206951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:49:35.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:49:35.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:49:36.665 [DEBUG] [Thread-206951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:49:36.665 [DEBUG] [Thread-206951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:49:36.713 [DEBUG] [Thread-206951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:49:36.713 [DEBUG] [Thread-206951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:49:36.722 [DEBUG] [Thread-206951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:49:36.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:49:36.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:49:36.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:49:36.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:49:36.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:49:36.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:49:36.756 [DEBUG] [Thread-206951] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:49:43.114 [DEBUG] [Thread-206953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:49:53.339 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:49:53.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:49:55.611 [DEBUG] [Thread-206954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:49:58.167 [DEBUG] [Thread-206955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:06.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:50:06.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:50:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:50:08.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 49, 39), 26.03, 17.74, 0.0, 21.88, 24.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:50:08.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:49:39
2026-02-15T15:50:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:50:09.124 [DEBUG] [Thread-206956] [transport.py] [_log()] starting thread (client mode): 0xa57c2680
2026-02-15T15:50:09.124 [DEBUG] [Thread-206956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:50:09.144 [DEBUG] [Thread-206956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:50:09.144 [INFO] [Thread-206956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:50:09.147 [DEBUG] [Thread-206956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:50:09.147 [DEBUG] [Thread-206956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] client lang: <none>
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] server lang: <none>
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] kex follows: False
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] Compression: none
2026-02-15T15:50:09.148 [DEBUG] [Thread-206956] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:50:09.162 [DEBUG] [Thread-206956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:50:09.163 [DEBUG] [Thread-206956] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:50:09.163 [DEBUG] [Thread-206956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:50:09.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:50:09.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:50:09.165 [DEBUG] [Thread-206956] [transport.py] [_log()] userauth is OK
2026-02-15T15:50:09.165 [DEBUG] [Thread-206956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:50:09.165 [DEBUG] [Thread-206956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:50:09.165 [DEBUG] [Thread-206956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:50:09.166 [DEBUG] [Thread-206956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:50:09.189 [INFO] [Thread-206956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:50:09.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:50:13.203 [DEBUG] [Thread-206958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:17.649 [DEBUG] [Thread-206956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:50:17.649 [DEBUG] [Thread-206956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:50:17.650 [DEBUG] [Thread-206956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:50:17.690 [DEBUG] [Thread-206956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:50:17.690 [DEBUG] [Thread-206956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:50:17.693 [DEBUG] [Thread-206956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:50:17.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:50:17.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:50:17.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:50:17.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:50:17.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:50:17.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:50:17.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:50:17.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:50:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:50:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.576138 -999.00  +23.50  13.20     23   +1.60 1 1 1 1 1   888    0 21.30 -28.18 ----- 13.2 13.2 168.8 19.0 29.9 -30.5 29.2 -31.3 31.3 -27.9 31.9 -30.4
2026-02-15T15:50:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:50:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:50:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.576138
2026-02-15T15:50:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:50:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:50:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:50:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:50:17.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:50:17.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:49:39', tmtdew=26.03, humidity=17.74, cloud=0.0, wind=21.88, temperature=24.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:49:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:50:17.755 [DEBUG] [Thread-206956] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:50:17.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:50:17.850 [DEBUG] [Thread-206960] [transport.py] [_log()] starting thread (client mode): 0xa2d00fd0
2026-02-15T15:50:17.851 [DEBUG] [Thread-206960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:50:17.865 [DEBUG] [Thread-206960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:50:17.865 [INFO] [Thread-206960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:50:17.873 [DEBUG] [Thread-206960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:50:17.873 [DEBUG] [Thread-206960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:50:17.873 [DEBUG] [Thread-206960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] client lang: <none>
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] server lang: <none>
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] kex follows: False
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] Compression: none
2026-02-15T15:50:17.874 [DEBUG] [Thread-206960] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:50:17.934 [DEBUG] [Thread-206960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:50:17.934 [DEBUG] [Thread-206960] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:50:17.935 [DEBUG] [Thread-206960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:50:17.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:50:17.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:50:17.991 [DEBUG] [Thread-206960] [transport.py] [_log()] userauth is OK
2026-02-15T15:50:17.991 [DEBUG] [Thread-206960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:50:17.991 [DEBUG] [Thread-206960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:50:17.991 [DEBUG] [Thread-206960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:50:17.991 [DEBUG] [Thread-206960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:50:18.015 [INFO] [Thread-206960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:50:18.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:50:18.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:50:18.822 [DEBUG] [Thread-206960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:50:18.822 [DEBUG] [Thread-206960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:50:18.872 [DEBUG] [Thread-206960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:50:18.872 [DEBUG] [Thread-206960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:50:18.886 [DEBUG] [Thread-206960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:50:18.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:50:18.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:50:18.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:50:18.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:50:18.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:50:18.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:50:18.928 [DEBUG] [Thread-206960] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:50:28.243 [DEBUG] [Thread-206962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:43.292 [DEBUG] [Thread-206963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:50:48.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:50:48.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:50:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 50, 15), 25.51, 18.24, 0.0, 16.2, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:50:50.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:50:15
2026-02-15T15:50:51.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:50:51.467 [DEBUG] [Thread-206964] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-15T15:50:51.467 [DEBUG] [Thread-206964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:50:51.487 [DEBUG] [Thread-206964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:50:51.487 [INFO] [Thread-206964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:51.490 [DEBUG] [Thread-206964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] client lang: <none>
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] server lang: <none>
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] kex follows: False
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] Compression: none
2026-02-15T15:50:51.491 [DEBUG] [Thread-206964] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:50:51.509 [DEBUG] [Thread-206964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:50:51.510 [DEBUG] [Thread-206964] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:50:51.510 [DEBUG] [Thread-206964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:50:51.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:50:51.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:50:51.553 [DEBUG] [Thread-206964] [transport.py] [_log()] userauth is OK
2026-02-15T15:50:51.553 [DEBUG] [Thread-206964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:50:51.553 [DEBUG] [Thread-206964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:50:51.553 [DEBUG] [Thread-206964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:50:51.553 [DEBUG] [Thread-206964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:50:51.574 [INFO] [Thread-206964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:50:51.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:50:52.212 [DEBUG] [Thread-206964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:50:52.212 [DEBUG] [Thread-206964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:50:52.213 [DEBUG] [Thread-206964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:50:52.253 [DEBUG] [Thread-206964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:50:52.253 [DEBUG] [Thread-206964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:50:52.256 [DEBUG] [Thread-206964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:50:52.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:50:52.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:50:52.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:50:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:50:52.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:50:52.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:50:52.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:50:52.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:50:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:50:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.576484 -999.00  +23.60  13.37     23   +1.70 1 1 1 1 1   888    0 21.19 -28.66 ----- 13.4 13.4 153.2 24.1 29.9 -30.0 29.5 -29.1 31.1 -28.5 31.9 -30.8
2026-02-15T15:50:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:50:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:50:52.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.576484
2026-02-15T15:50:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:50:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:50:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:50:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:50:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:50:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:50:15', tmtdew=25.51, humidity=18.24, cloud=0.0, wind=16.2, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:50:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:50:52.281 [DEBUG] [Thread-206964] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:50:52.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:50:52.376 [DEBUG] [Thread-206967] [transport.py] [_log()] starting thread (client mode): 0xa2dc0160
2026-02-15T15:50:52.377 [DEBUG] [Thread-206967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:50:52.391 [DEBUG] [Thread-206967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:50:52.391 [INFO] [Thread-206967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:50:52.398 [DEBUG] [Thread-206967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] client lang: <none>
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] server lang: <none>
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] kex follows: False
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] Compression: none
2026-02-15T15:50:52.399 [DEBUG] [Thread-206967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:50:52.463 [DEBUG] [Thread-206967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:50:52.464 [DEBUG] [Thread-206967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:50:52.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:50:52.465 [DEBUG] [Thread-206967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:50:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:50:52.521 [DEBUG] [Thread-206967] [transport.py] [_log()] userauth is OK
2026-02-15T15:50:52.521 [DEBUG] [Thread-206967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:50:52.521 [DEBUG] [Thread-206967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:50:52.521 [DEBUG] [Thread-206967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:50:52.521 [DEBUG] [Thread-206967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:50:52.537 [INFO] [Thread-206967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:50:52.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:50:52.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:50:53.404 [DEBUG] [Thread-206967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:50:53.405 [DEBUG] [Thread-206967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:50:53.452 [DEBUG] [Thread-206967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:50:53.453 [DEBUG] [Thread-206967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:50:53.464 [DEBUG] [Thread-206967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:50:53.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:50:53.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:50:53.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:53.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:53.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:50:53.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:50:53.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:50:53.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:50:53.500 [DEBUG] [Thread-206967] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:50:55.672 [DEBUG] [Thread-206969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:50:58.327 [DEBUG] [Thread-206970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:13.387 [DEBUG] [Thread-206971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:23.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:51:23.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:51:23.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:51:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 50, 50), 25.68, 18.21, 0.0, 22.66, 23.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:51:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:50:50
2026-02-15T15:51:25.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:51:25.990 [DEBUG] [Thread-206972] [transport.py] [_log()] starting thread (client mode): 0xa2df9360
2026-02-15T15:51:25.991 [DEBUG] [Thread-206972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:51:26.012 [DEBUG] [Thread-206972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:51:26.012 [INFO] [Thread-206972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] client lang: <none>
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] server lang: <none>
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] kex follows: False
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:51:26.016 [DEBUG] [Thread-206972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:51:26.017 [DEBUG] [Thread-206972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:51:26.017 [DEBUG] [Thread-206972] [transport.py] [_log()] Compression: none
2026-02-15T15:51:26.017 [DEBUG] [Thread-206972] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:51:26.037 [DEBUG] [Thread-206972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:51:26.038 [DEBUG] [Thread-206972] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:51:26.038 [DEBUG] [Thread-206972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:51:26.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:51:26.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:51:26.040 [DEBUG] [Thread-206972] [transport.py] [_log()] userauth is OK
2026-02-15T15:51:26.041 [DEBUG] [Thread-206972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:51:26.041 [DEBUG] [Thread-206972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:51:26.041 [DEBUG] [Thread-206972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:51:26.041 [DEBUG] [Thread-206972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:51:26.077 [INFO] [Thread-206972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:51:26.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:51:26.699 [DEBUG] [Thread-206972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:51:26.700 [DEBUG] [Thread-206972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:51:26.700 [DEBUG] [Thread-206972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:51:26.740 [DEBUG] [Thread-206972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:51:26.741 [DEBUG] [Thread-206972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:51:26.744 [DEBUG] [Thread-206972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:51:26.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:51:26.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:51:26.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:51:26.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:51:26.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:51:26.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:51:26.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:51:26.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:51:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:51:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.576832 -999.00  +23.60  11.61     23   +1.60 1 1 1 1 1   888    0 21.13 -26.98 ----- 11.6 11.6 180.6 22.2 29.9 -30.6 29.4 -32.1 31.2 -28.7 32.0 -30.1
2026-02-15T15:51:26.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:51:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:51:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.576832
2026-02-15T15:51:26.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:51:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:51:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:51:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:51:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:51:26.771 [DEBUG] [Thread-206972] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:51:26.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:50:50', tmtdew=25.68, humidity=18.21, cloud=0.0, wind=22.66, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:50:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:51:26.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:51:26.880 [DEBUG] [Thread-206975] [transport.py] [_log()] starting thread (client mode): 0xa2df9900
2026-02-15T15:51:26.880 [DEBUG] [Thread-206975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:51:26.895 [DEBUG] [Thread-206975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:51:26.895 [INFO] [Thread-206975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:51:26.904 [DEBUG] [Thread-206975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] client lang: <none>
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] server lang: <none>
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] kex follows: False
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] Compression: none
2026-02-15T15:51:26.905 [DEBUG] [Thread-206975] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:51:26.963 [DEBUG] [Thread-206975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:51:26.963 [DEBUG] [Thread-206975] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:51:26.964 [DEBUG] [Thread-206975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:51:26.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:51:26.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:51:27.027 [DEBUG] [Thread-206975] [transport.py] [_log()] userauth is OK
2026-02-15T15:51:27.027 [DEBUG] [Thread-206975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:51:27.027 [DEBUG] [Thread-206975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:51:27.027 [DEBUG] [Thread-206975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:51:27.028 [DEBUG] [Thread-206975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:51:27.050 [INFO] [Thread-206975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:51:27.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:51:27.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:51:27.897 [DEBUG] [Thread-206975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:51:27.898 [DEBUG] [Thread-206975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:51:27.946 [DEBUG] [Thread-206975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:51:27.946 [DEBUG] [Thread-206975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:51:27.956 [DEBUG] [Thread-206975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:51:27.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:51:27.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:51:27.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:51:27.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:51:27.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:51:27.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:51:27.993 [DEBUG] [Thread-206975] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:51:28.425 [DEBUG] [Thread-206977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:43.481 [DEBUG] [Thread-206978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:53.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:53.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:55.704 [DEBUG] [Thread-206979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:51:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:51:58.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:51:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:51:58.514 [DEBUG] [Thread-206980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 51, 25), 25.82, 18.07, 0.0, 24.72, 23.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:52:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:51:25
2026-02-15T15:52:00.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:52:01.042 [DEBUG] [Thread-206981] [transport.py] [_log()] starting thread (client mode): 0xa2dc0280
2026-02-15T15:52:01.042 [DEBUG] [Thread-206981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:52:01.065 [DEBUG] [Thread-206981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:52:01.065 [INFO] [Thread-206981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:52:01.068 [DEBUG] [Thread-206981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:52:01.068 [DEBUG] [Thread-206981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:52:01.068 [DEBUG] [Thread-206981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:52:01.068 [DEBUG] [Thread-206981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:01.068 [DEBUG] [Thread-206981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:01.068 [DEBUG] [Thread-206981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] client lang: <none>
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] server lang: <none>
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] kex follows: False
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:52:01.069 [DEBUG] [Thread-206981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:52:01.070 [DEBUG] [Thread-206981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:52:01.070 [DEBUG] [Thread-206981] [transport.py] [_log()] Compression: none
2026-02-15T15:52:01.070 [DEBUG] [Thread-206981] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:52:01.089 [DEBUG] [Thread-206981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:52:01.089 [DEBUG] [Thread-206981] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:52:01.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:52:01.090 [DEBUG] [Thread-206981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:52:01.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:52:01.093 [DEBUG] [Thread-206981] [transport.py] [_log()] userauth is OK
2026-02-15T15:52:01.093 [DEBUG] [Thread-206981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:52:01.093 [DEBUG] [Thread-206981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:52:01.093 [DEBUG] [Thread-206981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:52:01.093 [DEBUG] [Thread-206981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:52:01.125 [INFO] [Thread-206981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:52:01.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:52:01.973 [DEBUG] [Thread-206981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:52:01.973 [DEBUG] [Thread-206981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:52:01.973 [DEBUG] [Thread-206981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:52:02.014 [DEBUG] [Thread-206981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:52:02.014 [DEBUG] [Thread-206981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:52:02.017 [DEBUG] [Thread-206981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:52:02.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:52:02.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:52:02.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:52:02.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:52:02.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:52:02.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:52:02.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.577179 -999.00  +23.40  19.69     23   +1.40 1 1 1 1 1   888    0 20.97 -26.05 ----- 19.7 19.7 129.2 28.4 29.9 -31.3 29.5 -29.3 31.1 -30.3 32.0 -31.8
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.577179
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:52:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:51:25', tmtdew=25.82, humidity=18.07, cloud=0.0, wind=24.72, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:51:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:52:02.040 [DEBUG] [Thread-206981] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:52:02.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:52:02.122 [DEBUG] [Thread-206984] [transport.py] [_log()] starting thread (client mode): 0xa2de5060
2026-02-15T15:52:02.122 [DEBUG] [Thread-206984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:52:02.138 [DEBUG] [Thread-206984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:52:02.138 [INFO] [Thread-206984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:52:02.145 [DEBUG] [Thread-206984] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:52:02.145 [DEBUG] [Thread-206984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] client lang: <none>
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] server lang: <none>
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] kex follows: False
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] Compression: none
2026-02-15T15:52:02.146 [DEBUG] [Thread-206984] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:52:02.208 [DEBUG] [Thread-206984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:52:02.208 [DEBUG] [Thread-206984] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:52:02.208 [DEBUG] [Thread-206984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:52:02.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:52:02.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:52:02.265 [DEBUG] [Thread-206984] [transport.py] [_log()] userauth is OK
2026-02-15T15:52:02.265 [DEBUG] [Thread-206984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:52:02.265 [DEBUG] [Thread-206984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:52:02.265 [DEBUG] [Thread-206984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:52:02.265 [DEBUG] [Thread-206984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:52:02.280 [INFO] [Thread-206984] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:52:02.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:52:02.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:52:03.152 [DEBUG] [Thread-206984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:52:03.152 [DEBUG] [Thread-206984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:52:03.201 [DEBUG] [Thread-206984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:52:03.201 [DEBUG] [Thread-206984] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:52:03.209 [DEBUG] [Thread-206984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:52:03.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:52:03.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:52:03.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:52:03.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:52:03.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:52:03.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:52:03.243 [DEBUG] [Thread-206984] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:52:13.550 [DEBUG] [Thread-206986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:28.604 [DEBUG] [Thread-206987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:33.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:52:33.265 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:52:33.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:52:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 52), 25.64, 18.09, 0.0, 23.94, 23.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:52:35.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:52:00
2026-02-15T15:52:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:52:35.886 [DEBUG] [Thread-206988] [transport.py] [_log()] starting thread (client mode): 0xa2dfaf20
2026-02-15T15:52:35.886 [DEBUG] [Thread-206988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:52:35.907 [DEBUG] [Thread-206988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:52:35.907 [INFO] [Thread-206988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] client lang: <none>
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] server lang: <none>
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] kex follows: False
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] Compression: none
2026-02-15T15:52:35.909 [DEBUG] [Thread-206988] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:52:35.919 [DEBUG] [Thread-206988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:52:35.919 [DEBUG] [Thread-206988] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:52:35.919 [DEBUG] [Thread-206988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:52:35.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:52:35.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:52:35.920 [DEBUG] [Thread-206988] [transport.py] [_log()] userauth is OK
2026-02-15T15:52:35.920 [DEBUG] [Thread-206988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:52:35.920 [DEBUG] [Thread-206988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:52:35.920 [DEBUG] [Thread-206988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:52:35.920 [DEBUG] [Thread-206988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:52:35.937 [INFO] [Thread-206988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:52:35.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:52:36.588 [DEBUG] [Thread-206988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:52:36.588 [DEBUG] [Thread-206988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:52:36.589 [DEBUG] [Thread-206988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:52:36.629 [DEBUG] [Thread-206988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:52:36.630 [DEBUG] [Thread-206988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:52:36.633 [DEBUG] [Thread-206988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:52:36.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:52:36.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:52:36.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:52:36.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:52:36.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:52:36.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:52:36.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:52:36.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:52:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:52:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.577526 -999.00  +23.50  16.17     23   +1.50 1 1 1 1 1   888    0 21.63 -25.18 ----- 16.2 16.2 156.7 25.3 29.9 -30.7 29.5 -28.8 31.2 -28.6 31.9 -30.7
2026-02-15T15:52:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:52:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:52:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.577526
2026-02-15T15:52:36.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:52:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:52:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:52:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:52:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:52:36.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:52:00', tmtdew=25.64, humidity=18.09, cloud=0.0, wind=23.94, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:51:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:52:36.663 [DEBUG] [Thread-206988] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:52:36.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:52:36.771 [DEBUG] [Thread-206991] [transport.py] [_log()] starting thread (client mode): 0xa2d021a0
2026-02-15T15:52:36.771 [DEBUG] [Thread-206991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:52:36.786 [DEBUG] [Thread-206991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:52:36.786 [INFO] [Thread-206991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:52:36.794 [DEBUG] [Thread-206991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:52:36.794 [DEBUG] [Thread-206991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] client lang: <none>
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] server lang: <none>
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] kex follows: False
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:52:36.795 [DEBUG] [Thread-206991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:52:36.796 [DEBUG] [Thread-206991] [transport.py] [_log()] Compression: none
2026-02-15T15:52:36.796 [DEBUG] [Thread-206991] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:52:36.854 [DEBUG] [Thread-206991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:52:36.854 [DEBUG] [Thread-206991] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:52:36.864 [DEBUG] [Thread-206991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:52:36.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:52:36.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:52:36.910 [DEBUG] [Thread-206991] [transport.py] [_log()] userauth is OK
2026-02-15T15:52:36.910 [DEBUG] [Thread-206991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:52:36.910 [DEBUG] [Thread-206991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:52:36.911 [DEBUG] [Thread-206991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:52:36.911 [DEBUG] [Thread-206991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:52:36.929 [INFO] [Thread-206991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:52:36.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:52:36.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:52:37.757 [DEBUG] [Thread-206991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:52:37.757 [DEBUG] [Thread-206991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:52:37.805 [DEBUG] [Thread-206991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:52:37.806 [DEBUG] [Thread-206991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:52:37.815 [DEBUG] [Thread-206991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:52:37.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:52:37.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:52:37.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:52:37.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:52:37.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:52:37.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:52:37.853 [DEBUG] [Thread-206991] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:52:43.644 [DEBUG] [Thread-206993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:53.760 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:53.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:55.740 [DEBUG] [Thread-206994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:52:58.696 [DEBUG] [Thread-206995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:07.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:53:07.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:53:07.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:53:10.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 52, 36), 26.49, 17.21, 0.0, 24.03, 24.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:53:10.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:52:36
2026-02-15T15:53:10.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:53:10.654 [DEBUG] [Thread-206996] [transport.py] [_log()] starting thread (client mode): 0xa2de53f0
2026-02-15T15:53:10.654 [DEBUG] [Thread-206996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:53:10.673 [DEBUG] [Thread-206996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:53:10.673 [INFO] [Thread-206996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:53:10.676 [DEBUG] [Thread-206996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] client lang: <none>
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] server lang: <none>
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] kex follows: False
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] Compression: none
2026-02-15T15:53:10.677 [DEBUG] [Thread-206996] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:53:10.694 [DEBUG] [Thread-206996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:53:10.694 [DEBUG] [Thread-206996] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:53:10.695 [DEBUG] [Thread-206996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:53:10.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:53:10.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:53:10.697 [DEBUG] [Thread-206996] [transport.py] [_log()] userauth is OK
2026-02-15T15:53:10.697 [DEBUG] [Thread-206996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:53:10.697 [DEBUG] [Thread-206996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:53:10.697 [DEBUG] [Thread-206996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:53:10.697 [DEBUG] [Thread-206996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:53:10.722 [INFO] [Thread-206996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:53:10.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:53:11.363 [DEBUG] [Thread-206996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:53:11.363 [DEBUG] [Thread-206996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:53:11.363 [DEBUG] [Thread-206996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:53:11.404 [DEBUG] [Thread-206996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:53:11.404 [DEBUG] [Thread-206996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:53:11.408 [DEBUG] [Thread-206996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:53:11.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:53:11.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:53:11.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:53:11.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:53:11.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:53:11.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:53:11.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:53:11.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:53:11.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:53:11.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.577874 -999.00  +23.70  14.09     23   +1.70 1 1 1 1 1   888    0 21.57 -19.65 ----- 14.1 14.1 179.4 19.7 29.9 -31.2 29.1 -32.5 31.1 -29.4 31.9 -31.7
2026-02-15T15:53:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:53:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:53:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.577874
2026-02-15T15:53:11.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:53:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:53:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:53:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:53:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:53:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:52:36', tmtdew=26.49, humidity=17.21, cloud=0.0, wind=24.03, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:52:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:53:11.435 [DEBUG] [Thread-206996] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:53:11.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:53:11.534 [DEBUG] [Thread-206999] [transport.py] [_log()] starting thread (client mode): 0xa2db7b80
2026-02-15T15:53:11.535 [DEBUG] [Thread-206999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:53:11.552 [DEBUG] [Thread-206999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:53:11.552 [INFO] [Thread-206999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:53:11.560 [DEBUG] [Thread-206999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:53:11.560 [DEBUG] [Thread-206999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] client lang: <none>
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] server lang: <none>
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] kex follows: False
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:53:11.561 [DEBUG] [Thread-206999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:53:11.562 [DEBUG] [Thread-206999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:53:11.562 [DEBUG] [Thread-206999] [transport.py] [_log()] Compression: none
2026-02-15T15:53:11.562 [DEBUG] [Thread-206999] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:53:11.617 [DEBUG] [Thread-206999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:53:11.618 [DEBUG] [Thread-206999] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:53:11.618 [DEBUG] [Thread-206999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:53:11.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:53:11.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:53:11.674 [DEBUG] [Thread-206999] [transport.py] [_log()] userauth is OK
2026-02-15T15:53:11.674 [DEBUG] [Thread-206999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:53:11.674 [DEBUG] [Thread-206999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:53:11.674 [DEBUG] [Thread-206999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:53:11.674 [DEBUG] [Thread-206999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:53:11.693 [INFO] [Thread-206999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:53:11.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:53:11.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:53:12.566 [DEBUG] [Thread-206999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:53:12.567 [DEBUG] [Thread-206999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:53:12.614 [DEBUG] [Thread-206999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:53:12.615 [DEBUG] [Thread-206999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:53:12.624 [DEBUG] [Thread-206999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:53:12.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:53:12.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:53:12.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:53:12.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:53:12.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:53:12.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:53:12.661 [DEBUG] [Thread-206999] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:53:13.733 [DEBUG] [Thread-207001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:28.782 [DEBUG] [Thread-207002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:42.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:53:42.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:53:42.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:53:43.819 [DEBUG] [Thread-207003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:44.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 53, 11), 25.17, 18.87, 0.0, 24.03, 23.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:53:44.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:53:11
2026-02-15T15:53:44.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:53:45.079 [DEBUG] [Thread-207004] [transport.py] [_log()] starting thread (client mode): 0xa2dfa0b0
2026-02-15T15:53:45.079 [DEBUG] [Thread-207004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:53:45.090 [DEBUG] [Thread-207004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:53:45.090 [INFO] [Thread-207004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] client lang: <none>
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] server lang: <none>
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] kex follows: False
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] Compression: none
2026-02-15T15:53:45.091 [DEBUG] [Thread-207004] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:53:45.100 [DEBUG] [Thread-207004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:53:45.100 [DEBUG] [Thread-207004] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:53:45.101 [DEBUG] [Thread-207004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:53:45.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:53:45.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:53:45.101 [DEBUG] [Thread-207004] [transport.py] [_log()] userauth is OK
2026-02-15T15:53:45.101 [DEBUG] [Thread-207004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:53:45.102 [DEBUG] [Thread-207004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:53:45.102 [DEBUG] [Thread-207004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:53:45.102 [DEBUG] [Thread-207004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:53:45.113 [INFO] [Thread-207004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:53:45.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:53:45.694 [DEBUG] [Thread-207004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:53:45.694 [DEBUG] [Thread-207004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:53:45.695 [DEBUG] [Thread-207004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:53:45.735 [DEBUG] [Thread-207004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:53:45.736 [DEBUG] [Thread-207004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:53:45.741 [DEBUG] [Thread-207004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:53:45.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:53:45.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:53:45.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:53:45.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:53:45.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:53:45.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:53:45.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:53:45.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:53:45.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:53:45.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.578915 -999.00  +23.60  23.34     23   +1.80 1 1 1 1 1   888    0 21.84 -9.48 ----- 23.3 23.3 161.2 27.2 29.8 -30.9 29.2 -29.0 31.0 -28.2 31.8 -30.8
2026-02-15T15:53:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:53:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:53:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.578915
2026-02-15T15:53:45.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:53:45.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:53:45.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:53:45.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:53:45.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:53:45.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:53:11', tmtdew=25.17, humidity=18.87, cloud=0.0, wind=24.03, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:53:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:53:45.764 [DEBUG] [Thread-207004] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:53:45.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:53:45.860 [DEBUG] [Thread-207007] [transport.py] [_log()] starting thread (client mode): 0xa2d68e50
2026-02-15T15:53:45.860 [DEBUG] [Thread-207007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:53:45.874 [DEBUG] [Thread-207007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:53:45.875 [INFO] [Thread-207007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:53:45.882 [DEBUG] [Thread-207007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:53:45.883 [DEBUG] [Thread-207007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:53:45.883 [DEBUG] [Thread-207007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:53:45.883 [DEBUG] [Thread-207007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] client lang: <none>
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] server lang: <none>
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] kex follows: False
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] Compression: none
2026-02-15T15:53:45.884 [DEBUG] [Thread-207007] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:53:45.945 [DEBUG] [Thread-207007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:53:45.946 [DEBUG] [Thread-207007] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:53:45.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:53:45.947 [DEBUG] [Thread-207007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:53:45.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:53:46.002 [DEBUG] [Thread-207007] [transport.py] [_log()] userauth is OK
2026-02-15T15:53:46.002 [DEBUG] [Thread-207007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:53:46.002 [DEBUG] [Thread-207007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:53:46.002 [DEBUG] [Thread-207007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:53:46.002 [DEBUG] [Thread-207007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:53:46.020 [INFO] [Thread-207007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:53:46.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:53:46.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:53:46.866 [DEBUG] [Thread-207007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:53:46.867 [DEBUG] [Thread-207007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:53:46.915 [DEBUG] [Thread-207007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:53:46.915 [DEBUG] [Thread-207007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:53:46.925 [DEBUG] [Thread-207007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:53:46.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:53:46.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:53:46.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:53:46.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:53:46.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:53:46.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:53:46.963 [DEBUG] [Thread-207007] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:53:53.902 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:53.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:55.773 [DEBUG] [Thread-207009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:53:58.852 [DEBUG] [Thread-207010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54:13.904 [DEBUG] [Thread-207011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54:16.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:54:16.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:54:16.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:54:18.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 53, 47), 25.54, 18.22, 0.0, 25.99, 23.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:54:18.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:53:47
2026-02-15T15:54:19.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:54:19.392 [DEBUG] [Thread-207012] [transport.py] [_log()] starting thread (client mode): 0xa2db63b0
2026-02-15T15:54:19.392 [DEBUG] [Thread-207012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:54:19.413 [DEBUG] [Thread-207012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:54:19.414 [INFO] [Thread-207012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] client lang: <none>
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] server lang: <none>
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] kex follows: False
2026-02-15T15:54:19.415 [DEBUG] [Thread-207012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:54:19.416 [DEBUG] [Thread-207012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:54:19.416 [DEBUG] [Thread-207012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:54:19.416 [DEBUG] [Thread-207012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:54:19.416 [DEBUG] [Thread-207012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:54:19.416 [DEBUG] [Thread-207012] [transport.py] [_log()] Compression: none
2026-02-15T15:54:19.416 [DEBUG] [Thread-207012] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:54:19.425 [DEBUG] [Thread-207012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:54:19.425 [DEBUG] [Thread-207012] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:54:19.426 [DEBUG] [Thread-207012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:54:19.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:54:19.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:54:19.427 [DEBUG] [Thread-207012] [transport.py] [_log()] userauth is OK
2026-02-15T15:54:19.427 [DEBUG] [Thread-207012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:54:19.428 [DEBUG] [Thread-207012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:54:19.428 [DEBUG] [Thread-207012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:54:19.428 [DEBUG] [Thread-207012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:54:19.452 [INFO] [Thread-207012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:54:19.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:54:20.045 [DEBUG] [Thread-207012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:54:20.045 [DEBUG] [Thread-207012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:54:20.046 [DEBUG] [Thread-207012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:54:20.086 [DEBUG] [Thread-207012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:54:20.086 [DEBUG] [Thread-207012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:54:20.089 [DEBUG] [Thread-207012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:54:20.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:54:20.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:54:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:54:20.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:54:20.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:54:20.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:54:20.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:54:20.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:54:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:54:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.579263 -999.00  +23.60  19.26     24   +2.00 1 1 1 1 1   888    0 21.64 -9.58 ----- 19.3 19.3 163.6 30.5 29.8 -30.9 29.2 -29.4 30.9 -28.1 31.8 -30.2
2026-02-15T15:54:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:54:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:54:20.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.579263
2026-02-15T15:54:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:54:20.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:54:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:54:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:54:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:54:20.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:53:47', tmtdew=25.54, humidity=18.22, cloud=0.0, wind=25.99, temperature=23.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:54:08.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:54:20.113 [DEBUG] [Thread-207012] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:54:20.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:54:20.209 [DEBUG] [Thread-207015] [transport.py] [_log()] starting thread (client mode): 0xa2db7040
2026-02-15T15:54:20.210 [DEBUG] [Thread-207015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:54:20.226 [DEBUG] [Thread-207015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:54:20.226 [INFO] [Thread-207015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:54:20.237 [DEBUG] [Thread-207015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:54:20.237 [DEBUG] [Thread-207015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] client lang: <none>
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] server lang: <none>
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] kex follows: False
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:54:20.238 [DEBUG] [Thread-207015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:54:20.239 [DEBUG] [Thread-207015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:54:20.239 [DEBUG] [Thread-207015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:54:20.239 [DEBUG] [Thread-207015] [transport.py] [_log()] Compression: none
2026-02-15T15:54:20.239 [DEBUG] [Thread-207015] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:54:20.294 [DEBUG] [Thread-207015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:54:20.294 [DEBUG] [Thread-207015] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:54:20.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:54:20.295 [DEBUG] [Thread-207015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:54:20.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:54:20.352 [DEBUG] [Thread-207015] [transport.py] [_log()] userauth is OK
2026-02-15T15:54:20.352 [DEBUG] [Thread-207015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:54:20.353 [DEBUG] [Thread-207015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:54:20.353 [DEBUG] [Thread-207015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:54:20.353 [DEBUG] [Thread-207015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:54:20.374 [INFO] [Thread-207015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:54:20.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:54:20.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:54:21.270 [DEBUG] [Thread-207015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:54:21.271 [DEBUG] [Thread-207015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:54:21.318 [DEBUG] [Thread-207015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:54:21.319 [DEBUG] [Thread-207015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:54:21.332 [DEBUG] [Thread-207015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:54:21.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:54:21.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:54:21.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:54:21.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:54:21.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:54:21.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:54:21.372 [DEBUG] [Thread-207015] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:54:28.941 [DEBUG] [Thread-207017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54:43.994 [DEBUG] [Thread-207018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54:51.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:54:51.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:54:51.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:54:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 54, 23), 25.5, 18.27, 0.0, 28.27, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:54:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:54:23
2026-02-15T15:54:53.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:54:53.841 [DEBUG] [Thread-207019] [transport.py] [_log()] starting thread (client mode): 0xa2dfaad0
2026-02-15T15:54:53.842 [DEBUG] [Thread-207019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:54:53.866 [DEBUG] [Thread-207019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:54:53.866 [INFO] [Thread-207019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] client lang: <none>
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] server lang: <none>
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] kex follows: False
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:54:53.867 [DEBUG] [Thread-207019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:54:53.868 [DEBUG] [Thread-207019] [transport.py] [_log()] Compression: none
2026-02-15T15:54:53.868 [DEBUG] [Thread-207019] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:54:53.879 [DEBUG] [Thread-207019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:54:53.879 [DEBUG] [Thread-207019] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:54:53.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:54:53.880 [DEBUG] [Thread-207019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:54:53.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:54:53.882 [DEBUG] [Thread-207019] [transport.py] [_log()] userauth is OK
2026-02-15T15:54:53.882 [DEBUG] [Thread-207019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:54:53.883 [DEBUG] [Thread-207019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:54:53.883 [DEBUG] [Thread-207019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:54:53.883 [DEBUG] [Thread-207019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:54:53.906 [INFO] [Thread-207019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:54:53.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:54:54.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54:54.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54:54.552 [DEBUG] [Thread-207019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:54:54.552 [DEBUG] [Thread-207019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:54:54.552 [DEBUG] [Thread-207019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:54:54.594 [DEBUG] [Thread-207019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:54:54.594 [DEBUG] [Thread-207019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:54:54.597 [DEBUG] [Thread-207019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:54:54.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:54:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:54:54.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:54:54.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:54:54.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:54:54.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:54:54.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:54:54.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:54:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:54:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.579610 -999.00  +23.80  18.24     24   +2.00 1 1 1 1 1   888    0 21.55 -11.11 ----- 18.2 18.2 139.6 25.9 29.8 -29.8 29.3 -29.1 30.9 -27.7 31.8 -29.8
2026-02-15T15:54:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:54:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:54:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.579610
2026-02-15T15:54:54.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:54:54.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:54:54.622 [DEBUG] [Thread-207019] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:54:54.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:54:54.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:54:54.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:54:54.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:54:23', tmtdew=25.5, humidity=18.27, cloud=0.0, wind=28.27, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:54:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:54:54.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:54:54.736 [DEBUG] [Thread-207022] [transport.py] [_log()] starting thread (client mode): 0xa2d4e440
2026-02-15T15:54:54.736 [DEBUG] [Thread-207022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:54:54.753 [DEBUG] [Thread-207022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:54:54.753 [INFO] [Thread-207022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:54:54.761 [DEBUG] [Thread-207022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] client lang: <none>
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] server lang: <none>
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] kex follows: False
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:54:54.762 [DEBUG] [Thread-207022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:54:54.763 [DEBUG] [Thread-207022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:54:54.763 [DEBUG] [Thread-207022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:54:54.763 [DEBUG] [Thread-207022] [transport.py] [_log()] Compression: none
2026-02-15T15:54:54.763 [DEBUG] [Thread-207022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:54:54.822 [DEBUG] [Thread-207022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:54:54.822 [DEBUG] [Thread-207022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:54:54.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:54:54.824 [DEBUG] [Thread-207022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:54:54.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:54:54.879 [DEBUG] [Thread-207022] [transport.py] [_log()] userauth is OK
2026-02-15T15:54:54.879 [DEBUG] [Thread-207022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:54:54.879 [DEBUG] [Thread-207022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:54:54.879 [DEBUG] [Thread-207022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:54:54.879 [DEBUG] [Thread-207022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:54:54.898 [INFO] [Thread-207022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:54:54.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:54:54.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:54:55.731 [DEBUG] [Thread-207022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:54:55.731 [DEBUG] [Thread-207022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:54:55.780 [DEBUG] [Thread-207022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:54:55.780 [DEBUG] [Thread-207022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:54:55.790 [DEBUG] [Thread-207022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:54:55.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:54:55.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:54:55.806 [DEBUG] [Thread-207024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:54: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') -> 00000000
2026-02-15T15:54:55.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:54:55.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:54:55.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:54:55.835 [DEBUG] [Thread-207022] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:54:59.032 [DEBUG] [Thread-207025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:14.082 [DEBUG] [Thread-207026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:25.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:55:25.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:55:25.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:55:27.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 54, 58), 24.96, 18.99, 0.0, 21.79, 23.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:55:27.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:54:58
2026-02-15T15:55:28.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:55:28.404 [DEBUG] [Thread-207027] [transport.py] [_log()] starting thread (client mode): 0xa2dfa320
2026-02-15T15:55:28.404 [DEBUG] [Thread-207027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:55:28.424 [DEBUG] [Thread-207027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:55:28.424 [INFO] [Thread-207027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] client lang: <none>
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] server lang: <none>
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] kex follows: False
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:55:28.427 [DEBUG] [Thread-207027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:55:28.428 [DEBUG] [Thread-207027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:55:28.428 [DEBUG] [Thread-207027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:55:28.428 [DEBUG] [Thread-207027] [transport.py] [_log()] Compression: none
2026-02-15T15:55:28.428 [DEBUG] [Thread-207027] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:55:28.445 [DEBUG] [Thread-207027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:55:28.446 [DEBUG] [Thread-207027] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:55:28.446 [DEBUG] [Thread-207027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:55:28.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:55:28.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:55:28.448 [DEBUG] [Thread-207027] [transport.py] [_log()] userauth is OK
2026-02-15T15:55:28.448 [DEBUG] [Thread-207027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:55:28.448 [DEBUG] [Thread-207027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:55:28.448 [DEBUG] [Thread-207027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:55:28.448 [DEBUG] [Thread-207027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:55:28.480 [INFO] [Thread-207027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:55:28.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:55:29.069 [DEBUG] [Thread-207027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:55:29.070 [DEBUG] [Thread-207027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:55:29.070 [DEBUG] [Thread-207027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:55:29.110 [DEBUG] [Thread-207027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:55:29.111 [DEBUG] [Thread-207027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:55:29.113 [DEBUG] [Thread-207027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:55:29.120 [DEBUG] [Thread-207029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:29.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:55:29.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:55:29.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:55:29.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:55:29.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:55:29.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:55:29.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:55:29.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:55:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:55:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.579957 -999.00  +23.90  17.60     23   +2.00 1 1 1 1 1   888    0 21.48 -11.27 ----- 17.6 17.6 135.2 28.0 29.8 -30.2 29.5 -29.2 31.0 -27.8 31.8 -29.5
2026-02-15T15:55:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:55:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:55:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.579957
2026-02-15T15:55:29.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:55:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:55:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:55:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:55:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:55:29.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:54:58', tmtdew=24.96, humidity=18.99, cloud=0.0, wind=21.79, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:55:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:55:29.139 [DEBUG] [Thread-207027] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:55:29.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:55:29.245 [DEBUG] [Thread-207031] [transport.py] [_log()] starting thread (client mode): 0xa2de43a0
2026-02-15T15:55:29.245 [DEBUG] [Thread-207031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:55:29.259 [DEBUG] [Thread-207031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:55:29.260 [INFO] [Thread-207031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:55:29.267 [DEBUG] [Thread-207031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] client lang: <none>
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] server lang: <none>
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] kex follows: False
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:55:29.268 [DEBUG] [Thread-207031] [transport.py] [_log()] Compression: none
2026-02-15T15:55:29.269 [DEBUG] [Thread-207031] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:55:29.335 [DEBUG] [Thread-207031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:55:29.335 [DEBUG] [Thread-207031] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:55:29.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:55:29.337 [DEBUG] [Thread-207031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:55:29.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:55:29.394 [DEBUG] [Thread-207031] [transport.py] [_log()] userauth is OK
2026-02-15T15:55:29.395 [DEBUG] [Thread-207031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:55:29.395 [DEBUG] [Thread-207031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:55:29.395 [DEBUG] [Thread-207031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:55:29.395 [DEBUG] [Thread-207031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:55:29.414 [INFO] [Thread-207031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:55:29.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:55:29.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:55:30.329 [DEBUG] [Thread-207031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:55:30.329 [DEBUG] [Thread-207031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:55:30.378 [DEBUG] [Thread-207031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:55:30.378 [DEBUG] [Thread-207031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:55:30.388 [DEBUG] [Thread-207031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:55:30.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:55:30.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:55:30.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:55:30.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:55:30.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:55:30.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:55:30.429 [DEBUG] [Thread-207031] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:55:44.157 [DEBUG] [Thread-207033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:54.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:54.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:55.851 [DEBUG] [Thread-207034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:55:59.208 [DEBUG] [Thread-207035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:00.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:56:00.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:56:00.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:56:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 55, 33), 25.44, 18.37, 0.0, 18.24, 23.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:56:02.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:55:33
2026-02-15T15:56:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:56:03.062 [DEBUG] [Thread-207036] [transport.py] [_log()] starting thread (client mode): 0xa2db5720
2026-02-15T15:56:03.062 [DEBUG] [Thread-207036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:56:03.084 [DEBUG] [Thread-207036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:56:03.084 [INFO] [Thread-207036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:56:03.087 [DEBUG] [Thread-207036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] client lang: <none>
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] server lang: <none>
2026-02-15T15:56:03.088 [DEBUG] [Thread-207036] [transport.py] [_log()] kex follows: False
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] Compression: none
2026-02-15T15:56:03.089 [DEBUG] [Thread-207036] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:56:03.107 [DEBUG] [Thread-207036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:56:03.107 [DEBUG] [Thread-207036] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:56:03.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:56:03.109 [DEBUG] [Thread-207036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:56:03.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:56:03.111 [DEBUG] [Thread-207036] [transport.py] [_log()] userauth is OK
2026-02-15T15:56:03.111 [DEBUG] [Thread-207036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:56:03.111 [DEBUG] [Thread-207036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:56:03.111 [DEBUG] [Thread-207036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:56:03.111 [DEBUG] [Thread-207036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:56:03.134 [INFO] [Thread-207036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:56:03.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:56:03.805 [DEBUG] [Thread-207036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:56:03.806 [DEBUG] [Thread-207036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:56:03.806 [DEBUG] [Thread-207036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:56:03.847 [DEBUG] [Thread-207036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:56:03.847 [DEBUG] [Thread-207036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:56:03.850 [DEBUG] [Thread-207036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:56:03.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:56:03.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:56:03.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:56:03.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:56:03.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:56:03.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:56:03.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:56:03.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:56:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:56:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.580304 -999.00  +23.80  14.26     23   +1.90 1 1 1 1 1   888    0 21.32 -12.96 ----- 14.3 14.3 156.3 28.1 29.8 -29.7 29.4 -29.3 31.1 -28.9 31.9 -29.5
2026-02-15T15:56:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:56:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:56:03.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.580304
2026-02-15T15:56:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:56:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:56:03.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:56:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:56:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:56:03.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:55:33', tmtdew=25.44, humidity=18.37, cloud=0.0, wind=18.24, temperature=23.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:55:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:56:03.873 [DEBUG] [Thread-207036] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:56:03.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:56:03.967 [DEBUG] [Thread-207039] [transport.py] [_log()] starting thread (client mode): 0xa2df9930
2026-02-15T15:56:03.967 [DEBUG] [Thread-207039] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:56:03.982 [DEBUG] [Thread-207039] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:56:03.982 [INFO] [Thread-207039] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:56:03.991 [DEBUG] [Thread-207039] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] client lang: <none>
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] server lang: <none>
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] kex follows: False
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] Compression: none
2026-02-15T15:56:03.992 [DEBUG] [Thread-207039] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:56:04.050 [DEBUG] [Thread-207039] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:56:04.050 [DEBUG] [Thread-207039] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:56:04.051 [DEBUG] [Thread-207039] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:56:04.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:56:04.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:56:04.108 [DEBUG] [Thread-207039] [transport.py] [_log()] userauth is OK
2026-02-15T15:56:04.108 [DEBUG] [Thread-207039] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:56:04.108 [DEBUG] [Thread-207039] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:56:04.108 [DEBUG] [Thread-207039] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:56:04.108 [DEBUG] [Thread-207039] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:56:04.131 [INFO] [Thread-207039] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:56:04.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:56:04.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:56:04.971 [DEBUG] [Thread-207039] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:56:04.971 [DEBUG] [Thread-207039] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:56:05.021 [DEBUG] [Thread-207039] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:56:05.021 [DEBUG] [Thread-207039] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:56:05.036 [DEBUG] [Thread-207039] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:56:05.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:56:05.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:56:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:56:05.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:56:05.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:56:05.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:56:05.088 [DEBUG] [Thread-207039] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:56:14.239 [DEBUG] [Thread-207041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:29.301 [DEBUG] [Thread-207042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:35.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:56:35.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:56:35.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:56:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 56, 9), 25.29, 18.75, 0.0, 25.41, 23.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:56:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:56:09
2026-02-15T15:56:37.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:56:38.065 [DEBUG] [Thread-207043] [transport.py] [_log()] starting thread (client mode): 0xa2dfb040
2026-02-15T15:56:38.065 [DEBUG] [Thread-207043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:56:38.084 [DEBUG] [Thread-207043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:56:38.084 [INFO] [Thread-207043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:56:38.087 [DEBUG] [Thread-207043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:56:38.087 [DEBUG] [Thread-207043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:56:38.087 [DEBUG] [Thread-207043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:56:38.087 [DEBUG] [Thread-207043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:38.087 [DEBUG] [Thread-207043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] client lang: <none>
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] server lang: <none>
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] kex follows: False
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] Compression: none
2026-02-15T15:56:38.088 [DEBUG] [Thread-207043] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:56:38.105 [DEBUG] [Thread-207043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:56:38.105 [DEBUG] [Thread-207043] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:56:38.106 [DEBUG] [Thread-207043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:56:38.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:56:38.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:56:38.107 [DEBUG] [Thread-207043] [transport.py] [_log()] userauth is OK
2026-02-15T15:56:38.108 [DEBUG] [Thread-207043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:56:38.108 [DEBUG] [Thread-207043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:56:38.108 [DEBUG] [Thread-207043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:56:38.108 [DEBUG] [Thread-207043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:56:38.132 [INFO] [Thread-207043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:56:38.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:56:38.782 [DEBUG] [Thread-207043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:56:38.782 [DEBUG] [Thread-207043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:56:38.783 [DEBUG] [Thread-207043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:56:38.823 [DEBUG] [Thread-207043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:56:38.824 [DEBUG] [Thread-207043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:56:38.827 [DEBUG] [Thread-207043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:56:38.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:56:38.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:56:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:56:38.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:56:38.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:56:38.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:56:38.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:56:38.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:56:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:56:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.580651 -999.00  +23.70  15.68     23   +1.80 1 1 1 1 1   888    0 21.43 -15.66 ----- 15.7 15.7 162.9 28.1 29.8 -30.8 29.3 -29.5 31.0 -29.5 31.8 -31.7
2026-02-15T15:56:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:56:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:56:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.580651
2026-02-15T15:56:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:56:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:56:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:56:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:56:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:56:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:56:09', tmtdew=25.29, humidity=18.75, cloud=0.0, wind=25.41, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:56:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:56:38.853 [DEBUG] [Thread-207043] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:56:38.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:56:38.949 [DEBUG] [Thread-207046] [transport.py] [_log()] starting thread (client mode): 0xa57e1660
2026-02-15T15:56:38.950 [DEBUG] [Thread-207046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:56:38.965 [DEBUG] [Thread-207046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:56:38.965 [INFO] [Thread-207046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:56:38.973 [DEBUG] [Thread-207046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:56:38.973 [DEBUG] [Thread-207046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:56:38.973 [DEBUG] [Thread-207046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] client lang: <none>
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] server lang: <none>
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] kex follows: False
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:56:38.974 [DEBUG] [Thread-207046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:56:38.975 [DEBUG] [Thread-207046] [transport.py] [_log()] Compression: none
2026-02-15T15:56:38.975 [DEBUG] [Thread-207046] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:56:39.031 [DEBUG] [Thread-207046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:56:39.032 [DEBUG] [Thread-207046] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:56:39.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:56:39.033 [DEBUG] [Thread-207046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:56:39.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:56:39.089 [DEBUG] [Thread-207046] [transport.py] [_log()] userauth is OK
2026-02-15T15:56:39.090 [DEBUG] [Thread-207046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:56:39.090 [DEBUG] [Thread-207046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:56:39.090 [DEBUG] [Thread-207046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:56:39.090 [DEBUG] [Thread-207046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:56:39.113 [INFO] [Thread-207046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:56:39.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:56:39.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:56:39.928 [DEBUG] [Thread-207046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:56:39.928 [DEBUG] [Thread-207046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:56:39.976 [DEBUG] [Thread-207046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:56:39.977 [DEBUG] [Thread-207046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:56:39.986 [DEBUG] [Thread-207046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:56:39.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:56: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')
2026-02-15T15:56: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
2026-02-15T15:56:40.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:56:40.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:56:40.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:56:40.023 [DEBUG] [Thread-207046] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:56:44.340 [DEBUG] [Thread-207048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:54.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:54.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:55.890 [DEBUG] [Thread-207049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:56:59.391 [DEBUG] [Thread-207050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:10.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:57:10.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:57:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:57:11.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 56, 44), 25.11, 18.54, 0.0, 28.9, 23.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:57:11.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:56:44
2026-02-15T15:57:12.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:57:12.478 [DEBUG] [Thread-207051] [transport.py] [_log()] starting thread (client mode): 0xa2d1bdc0
2026-02-15T15:57:12.478 [DEBUG] [Thread-207051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:57:12.498 [DEBUG] [Thread-207051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:57:12.498 [INFO] [Thread-207051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] client lang: <none>
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] server lang: <none>
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] kex follows: False
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:57:12.501 [DEBUG] [Thread-207051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:57:12.502 [DEBUG] [Thread-207051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:57:12.502 [DEBUG] [Thread-207051] [transport.py] [_log()] Compression: none
2026-02-15T15:57:12.502 [DEBUG] [Thread-207051] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:57:12.510 [DEBUG] [Thread-207051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:57:12.510 [DEBUG] [Thread-207051] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:57:12.511 [DEBUG] [Thread-207051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:57:12.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:57:12.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:57:12.512 [DEBUG] [Thread-207051] [transport.py] [_log()] userauth is OK
2026-02-15T15:57:12.512 [DEBUG] [Thread-207051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:57:12.512 [DEBUG] [Thread-207051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:57:12.512 [DEBUG] [Thread-207051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:57:12.513 [DEBUG] [Thread-207051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:57:12.530 [INFO] [Thread-207051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:57:12.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:57:13.172 [DEBUG] [Thread-207051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:57:13.173 [DEBUG] [Thread-207051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:57:13.173 [DEBUG] [Thread-207051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:57:13.214 [DEBUG] [Thread-207051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:57:13.214 [DEBUG] [Thread-207051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:57:13.216 [DEBUG] [Thread-207051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:57:13.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:57:13.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:57:13.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:57:13.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:57:13.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:57:13.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:57:13.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:57:13.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:57:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:57:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.580999 -999.00  +23.80  15.84     23   +1.90 1 1 1 1 1   888    0 21.83 -17.54 ----- 15.8 15.8 146.2 24.0 29.7 -30.3 29.4 -28.8 31.0 -28.8 31.8 -30.2
2026-02-15T15:57:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:57:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:57:13.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.580999
2026-02-15T15:57:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:57:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:57:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:57:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:57:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:57:13.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:56:44', tmtdew=25.11, humidity=18.54, cloud=0.0, wind=28.9, temperature=23.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:56:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:57:13.237 [DEBUG] [Thread-207051] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:57:13.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:57:13.347 [DEBUG] [Thread-207054] [transport.py] [_log()] starting thread (client mode): 0xa5742e00
2026-02-15T15:57:13.347 [DEBUG] [Thread-207054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:57:13.367 [DEBUG] [Thread-207054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:57:13.368 [INFO] [Thread-207054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:57:13.375 [DEBUG] [Thread-207054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] client lang: <none>
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] server lang: <none>
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] kex follows: False
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] Compression: none
2026-02-15T15:57:13.376 [DEBUG] [Thread-207054] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:57:13.434 [DEBUG] [Thread-207054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:57:13.435 [DEBUG] [Thread-207054] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:57:13.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:57:13.436 [DEBUG] [Thread-207054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:57:13.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:57:13.490 [DEBUG] [Thread-207054] [transport.py] [_log()] userauth is OK
2026-02-15T15:57:13.490 [DEBUG] [Thread-207054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:57:13.491 [DEBUG] [Thread-207054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:57:13.491 [DEBUG] [Thread-207054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:57:13.491 [DEBUG] [Thread-207054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:57:13.517 [INFO] [Thread-207054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:57:13.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:57:13.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:57:14.345 [DEBUG] [Thread-207054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:57:14.345 [DEBUG] [Thread-207054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:57:14.393 [DEBUG] [Thread-207054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:57:14.394 [DEBUG] [Thread-207054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:57:14.403 [DEBUG] [Thread-207054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:57:14.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:57:14.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:57:14.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:57:14.427 [DEBUG] [Thread-207056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:14.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:57:14.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:57:14.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:57:14.440 [DEBUG] [Thread-207054] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:57:29.481 [DEBUG] [Thread-207057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:44.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:57:44.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:57:44.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:57:44.519 [DEBUG] [Thread-207058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 57, 19), 25.31, 18.29, 0.0, 26.08, 23.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:57:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:57:19
2026-02-15T15:57:46.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:57:47.109 [DEBUG] [Thread-207059] [transport.py] [_log()] starting thread (client mode): 0xa57e2290
2026-02-15T15:57:47.110 [DEBUG] [Thread-207059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:57:47.110 [DEBUG] [Thread-207059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:57:47.110 [INFO] [Thread-207059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:57:47.115 [DEBUG] [Thread-207059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:57:47.115 [DEBUG] [Thread-207059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:57:47.115 [DEBUG] [Thread-207059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:57:47.115 [DEBUG] [Thread-207059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] client lang: <none>
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] server lang: <none>
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] kex follows: False
2026-02-15T15:57:47.116 [DEBUG] [Thread-207059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:57:47.117 [DEBUG] [Thread-207059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:57:47.117 [DEBUG] [Thread-207059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:57:47.117 [DEBUG] [Thread-207059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:57:47.117 [DEBUG] [Thread-207059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:57:47.117 [DEBUG] [Thread-207059] [transport.py] [_log()] Compression: none
2026-02-15T15:57:47.117 [DEBUG] [Thread-207059] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:57:47.138 [DEBUG] [Thread-207059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:57:47.138 [DEBUG] [Thread-207059] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:57:47.139 [DEBUG] [Thread-207059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:57:47.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:57:47.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:57:47.141 [DEBUG] [Thread-207059] [transport.py] [_log()] userauth is OK
2026-02-15T15:57:47.141 [DEBUG] [Thread-207059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:57:47.141 [DEBUG] [Thread-207059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:57:47.141 [DEBUG] [Thread-207059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:57:47.141 [DEBUG] [Thread-207059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:57:47.165 [INFO] [Thread-207059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:57:47.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:57:47.811 [DEBUG] [Thread-207059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:57:47.811 [DEBUG] [Thread-207059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:57:47.811 [DEBUG] [Thread-207059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:57:47.851 [DEBUG] [Thread-207059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:57:47.852 [DEBUG] [Thread-207059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:57:47.855 [DEBUG] [Thread-207059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:57:47.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:57:47.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:57:47.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:57:47.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:57:47.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:57:47.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:57:47.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:57:47.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:57:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:57:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.581345 -999.00  +23.70  22.14     23   +1.50 1 1 1 1 1   888    0 21.43 -15.02 ----- 22.1 22.1 140.4 26.8 29.8 -30.1 29.4 -30.4 31.0 -29.3 31.8 -30.8
2026-02-15T15:57:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:57:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:57:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.581345
2026-02-15T15:57:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:57:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:57:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:57:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:57:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:57:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:57:19', tmtdew=25.31, humidity=18.29, cloud=0.0, wind=26.08, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:57:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:57:47.883 [DEBUG] [Thread-207059] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:57:47.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:57:47.983 [DEBUG] [Thread-207062] [transport.py] [_log()] starting thread (client mode): 0xa2d4de10
2026-02-15T15:57:47.983 [DEBUG] [Thread-207062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:57:47.998 [DEBUG] [Thread-207062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:57:47.998 [INFO] [Thread-207062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:57:48.005 [DEBUG] [Thread-207062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] client lang: <none>
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] server lang: <none>
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] kex follows: False
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:57:48.006 [DEBUG] [Thread-207062] [transport.py] [_log()] Compression: none
2026-02-15T15:57:48.007 [DEBUG] [Thread-207062] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:57:48.065 [DEBUG] [Thread-207062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:57:48.066 [DEBUG] [Thread-207062] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:57:48.066 [DEBUG] [Thread-207062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:57:48.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:57:48.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:57:48.124 [DEBUG] [Thread-207062] [transport.py] [_log()] userauth is OK
2026-02-15T15:57:48.124 [DEBUG] [Thread-207062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:57:48.124 [DEBUG] [Thread-207062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:57:48.124 [DEBUG] [Thread-207062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:57:48.124 [DEBUG] [Thread-207062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:57:48.145 [INFO] [Thread-207062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:57:48.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:57:48.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:57:49.038 [DEBUG] [Thread-207062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:57:49.039 [DEBUG] [Thread-207062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:57:49.089 [DEBUG] [Thread-207062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:57:49.089 [DEBUG] [Thread-207062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:57:49.098 [DEBUG] [Thread-207062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:57:49.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:57:49.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:57:49.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:57:49.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:57:49.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:57:49.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:57:49.144 [DEBUG] [Thread-207062] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:57:54.479 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:54.480 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:55.925 [DEBUG] [Thread-207064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:57:59.558 [DEBUG] [Thread-207065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:14.606 [DEBUG] [Thread-207066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:19.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:58:19.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:58:19.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:58:20.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 57, 55), 25.45, 18.26, 0.0, 21.49, 23.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:58:20.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:57:55
2026-02-15T15:58:21.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:58:21.416 [DEBUG] [Thread-207067] [transport.py] [_log()] starting thread (client mode): 0xa2d4f490
2026-02-15T15:58:21.416 [DEBUG] [Thread-207067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:58:21.436 [DEBUG] [Thread-207067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:58:21.436 [INFO] [Thread-207067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:58:21.439 [DEBUG] [Thread-207067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:58:21.439 [DEBUG] [Thread-207067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] client lang: <none>
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] server lang: <none>
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] kex follows: False
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] Compression: none
2026-02-15T15:58:21.440 [DEBUG] [Thread-207067] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:58:21.459 [DEBUG] [Thread-207067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:58:21.459 [DEBUG] [Thread-207067] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:58:21.460 [DEBUG] [Thread-207067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:58:21.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:58:21.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:58:21.462 [DEBUG] [Thread-207067] [transport.py] [_log()] userauth is OK
2026-02-15T15:58:21.462 [DEBUG] [Thread-207067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:58:21.462 [DEBUG] [Thread-207067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:58:21.462 [DEBUG] [Thread-207067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:58:21.462 [DEBUG] [Thread-207067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:58:21.486 [INFO] [Thread-207067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:58:21.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:58:22.128 [DEBUG] [Thread-207067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:58:22.128 [DEBUG] [Thread-207067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:58:22.129 [DEBUG] [Thread-207067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:58:22.169 [DEBUG] [Thread-207067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:58:22.169 [DEBUG] [Thread-207067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:58:22.173 [DEBUG] [Thread-207067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:58:22.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:58:22.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:58:22.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:58:22.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:58:22.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:58:22.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:58:22.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:58:22.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:58:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:58:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.581693 -999.00  +23.30  15.19     23   +1.40 1 1 1 1 1   888    0 21.46 -14.32 ----- 15.2 15.2 177.8 19.8 29.7 -30.4 29.3 -29.6 31.0 -28.7 31.7 -30.0
2026-02-15T15:58:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:58:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:58:22.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.581693
2026-02-15T15:58:22.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:58:22.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:58:22.200 [DEBUG] [Thread-207067] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:58:22.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:58:22.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:58:22.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:58:22.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:57:55', tmtdew=25.45, humidity=18.26, cloud=0.0, wind=21.49, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:57:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:58:22.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:58:22.296 [DEBUG] [Thread-207070] [transport.py] [_log()] starting thread (client mode): 0xa2d4c430
2026-02-15T15:58:22.296 [DEBUG] [Thread-207070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:58:22.311 [DEBUG] [Thread-207070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:58:22.312 [INFO] [Thread-207070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:58:22.319 [DEBUG] [Thread-207070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:58:22.319 [DEBUG] [Thread-207070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:58:22.319 [DEBUG] [Thread-207070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:58:22.319 [DEBUG] [Thread-207070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] client lang: <none>
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] server lang: <none>
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] kex follows: False
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] Compression: none
2026-02-15T15:58:22.320 [DEBUG] [Thread-207070] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:58:22.376 [DEBUG] [Thread-207070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:58:22.377 [DEBUG] [Thread-207070] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:58:22.377 [DEBUG] [Thread-207070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:58:22.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:58:22.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:58:22.433 [DEBUG] [Thread-207070] [transport.py] [_log()] userauth is OK
2026-02-15T15:58:22.433 [DEBUG] [Thread-207070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:58:22.433 [DEBUG] [Thread-207070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:58:22.433 [DEBUG] [Thread-207070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:58:22.434 [DEBUG] [Thread-207070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:58:22.452 [INFO] [Thread-207070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:58:22.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:58:22.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:58:23.270 [DEBUG] [Thread-207070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:58:23.271 [DEBUG] [Thread-207070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:58:23.323 [DEBUG] [Thread-207070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:58:23.324 [DEBUG] [Thread-207070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:58:23.333 [DEBUG] [Thread-207070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:58:23.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:58:23.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:58:23.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:58:23.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:58:23.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:58:23.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:58:23.371 [DEBUG] [Thread-207070] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:58:29.645 [DEBUG] [Thread-207072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:44.695 [DEBUG] [Thread-207073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:53.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:58:53.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:58:53.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:58:54.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:54.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:55.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 58, 30), 25.55, 18.19, 0.0, 19.3, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:58:55.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:58:30
2026-02-15T15:58:55.961 [DEBUG] [Thread-207074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:58:56.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:58:56.170 [DEBUG] [Thread-207075] [transport.py] [_log()] starting thread (client mode): 0xa2d4ece0
2026-02-15T15:58:56.170 [DEBUG] [Thread-207075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:58:56.192 [DEBUG] [Thread-207075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:58:56.192 [INFO] [Thread-207075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] client lang: <none>
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] server lang: <none>
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] kex follows: False
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] Compression: none
2026-02-15T15:58:56.195 [DEBUG] [Thread-207075] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:58:56.213 [DEBUG] [Thread-207075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:58:56.214 [DEBUG] [Thread-207075] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:58:56.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:58:56.215 [DEBUG] [Thread-207075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:58:56.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:58:56.217 [DEBUG] [Thread-207075] [transport.py] [_log()] userauth is OK
2026-02-15T15:58:56.217 [DEBUG] [Thread-207075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:58:56.217 [DEBUG] [Thread-207075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:58:56.217 [DEBUG] [Thread-207075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:58:56.217 [DEBUG] [Thread-207075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:58:56.240 [INFO] [Thread-207075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:58:56.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:58:56.882 [DEBUG] [Thread-207075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:58:56.883 [DEBUG] [Thread-207075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:58:56.883 [DEBUG] [Thread-207075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:58:56.923 [DEBUG] [Thread-207075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:58:56.923 [DEBUG] [Thread-207075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:58:56.926 [DEBUG] [Thread-207075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:58:56.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:58:56.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:58:56.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:58:56.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:58:56.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:58:56.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:58:56.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:58:56.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:58:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:58:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.582388 -999.00  +23.50  16.62     24   +1.90 1 1 1 1 1   888    0 21.37 -14.64 ----- 16.6 16.6 160.9 21.8 29.8 -30.1 29.3 -29.8 31.1 -27.4 31.9 -29.7
2026-02-15T15:58:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:58:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:58:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.582388
2026-02-15T15:58:56.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:58:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:58:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:58:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:58:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:58:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:58:30', tmtdew=25.55, humidity=18.19, cloud=0.0, wind=19.3, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:58:38.323', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:58:56.950 [DEBUG] [Thread-207075] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:58:57.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:58:57.042 [DEBUG] [Thread-207078] [transport.py] [_log()] starting thread (client mode): 0xa2d4c490
2026-02-15T15:58:57.042 [DEBUG] [Thread-207078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:58:57.057 [DEBUG] [Thread-207078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:58:57.057 [INFO] [Thread-207078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:58:57.065 [DEBUG] [Thread-207078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] client lang: <none>
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] server lang: <none>
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] kex follows: False
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] Compression: none
2026-02-15T15:58:57.066 [DEBUG] [Thread-207078] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:58:57.125 [DEBUG] [Thread-207078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:58:57.126 [DEBUG] [Thread-207078] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:58:57.127 [DEBUG] [Thread-207078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:58:57.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:58:57.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:58:57.182 [DEBUG] [Thread-207078] [transport.py] [_log()] userauth is OK
2026-02-15T15:58:57.182 [DEBUG] [Thread-207078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:58:57.183 [DEBUG] [Thread-207078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:58:57.183 [DEBUG] [Thread-207078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:58:57.183 [DEBUG] [Thread-207078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:58:57.208 [INFO] [Thread-207078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:58:57.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:58:57.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:58:58.017 [DEBUG] [Thread-207078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:58:58.017 [DEBUG] [Thread-207078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:58:58.065 [DEBUG] [Thread-207078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:58:58.065 [DEBUG] [Thread-207078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:58:58.075 [DEBUG] [Thread-207078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:58:58.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:58:58.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:58:58.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:58:58.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:58:58.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:58:58.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:58:58.112 [DEBUG] [Thread-207078] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:58:59.734 [DEBUG] [Thread-207080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:14.792 [DEBUG] [Thread-207081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:28.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T15:59:28.133 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T15:59:28.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T15:59:29.828 [DEBUG] [Thread-207082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 59, 5), 25.61, 18.14, 0.0, 23.75, 23.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T15:59:30.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:59:05
2026-02-15T15:59:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T15:59:30.626 [DEBUG] [Thread-207083] [transport.py] [_log()] starting thread (client mode): 0xa2d4f250
2026-02-15T15:59:30.627 [DEBUG] [Thread-207083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:59:30.647 [DEBUG] [Thread-207083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T15:59:30.647 [INFO] [Thread-207083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T15:59:30.650 [DEBUG] [Thread-207083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:59:30.650 [DEBUG] [Thread-207083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T15:59:30.650 [DEBUG] [Thread-207083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:59:30.650 [DEBUG] [Thread-207083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:59:30.650 [DEBUG] [Thread-207083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:59:30.650 [DEBUG] [Thread-207083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] client lang: <none>
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] server lang: <none>
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] kex follows: False
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] Compression: none
2026-02-15T15:59:30.651 [DEBUG] [Thread-207083] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:59:30.668 [DEBUG] [Thread-207083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:59:30.669 [DEBUG] [Thread-207083] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:59:30.669 [DEBUG] [Thread-207083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T15:59:30.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T15:59:30.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:59:30.671 [DEBUG] [Thread-207083] [transport.py] [_log()] userauth is OK
2026-02-15T15:59:30.671 [DEBUG] [Thread-207083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:59:30.671 [DEBUG] [Thread-207083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:59:30.671 [DEBUG] [Thread-207083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T15:59:30.671 [DEBUG] [Thread-207083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:59:30.686 [INFO] [Thread-207083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:59:30.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:59:31.487 [DEBUG] [Thread-207083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:59:31.487 [DEBUG] [Thread-207083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:59:31.487 [DEBUG] [Thread-207083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T15:59:31.528 [DEBUG] [Thread-207083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:59:31.528 [DEBUG] [Thread-207083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:59:31.532 [DEBUG] [Thread-207083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:59:31.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:59:31.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T15:59:31.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T15:59:31.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T15:59:31.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:59:31.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T15:59:31.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:59:31.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:59:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T15:59:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.582735 -999.00  +23.60  17.77     24   +1.90 1 1 1 1 1   888    0 21.64 -14.04 ----- 17.8 17.8 161.0 20.6 29.9 -29.7 29.4 -30.6 31.1 -27.4 31.9 -29.5
2026-02-15T15:59:31.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T15:59:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T15:59:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.582735
2026-02-15T15:59:31.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T15:59:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T15:59:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T15:59:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T15:59:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T15:59:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:59:05', tmtdew=25.61, humidity=18.14, cloud=0.0, wind=23.75, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:59:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T15:59:31.559 [DEBUG] [Thread-207083] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:59:31.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T15:59:31.654 [DEBUG] [Thread-207086] [transport.py] [_log()] starting thread (client mode): 0xa2d4c5e0
2026-02-15T15:59:31.654 [DEBUG] [Thread-207086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T15:59:31.669 [DEBUG] [Thread-207086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T15:59:31.669 [INFO] [Thread-207086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T15:59:31.677 [DEBUG] [Thread-207086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T15:59:31.678 [DEBUG] [Thread-207086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] client lang: <none>
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] server lang: <none>
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] kex follows: False
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] Compression: none
2026-02-15T15:59:31.679 [DEBUG] [Thread-207086] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T15:59:31.737 [DEBUG] [Thread-207086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T15:59:31.738 [DEBUG] [Thread-207086] [transport.py] [_log()] Switch to new keys ...
2026-02-15T15:59:31.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T15:59:31.739 [DEBUG] [Thread-207086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T15:59:31.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T15:59:31.794 [DEBUG] [Thread-207086] [transport.py] [_log()] userauth is OK
2026-02-15T15:59:31.794 [DEBUG] [Thread-207086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T15:59:31.794 [DEBUG] [Thread-207086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T15:59:31.794 [DEBUG] [Thread-207086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T15:59:31.794 [DEBUG] [Thread-207086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T15:59:31.812 [INFO] [Thread-207086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T15:59:31.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T15:59:31.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T15:59:32.637 [DEBUG] [Thread-207086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T15:59:32.637 [DEBUG] [Thread-207086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T15:59:32.685 [DEBUG] [Thread-207086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T15:59:32.686 [DEBUG] [Thread-207086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T15:59:32.695 [DEBUG] [Thread-207086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T15:59:32.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T15:59:32.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T15:59:32.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T15:59:32.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T15:59:32.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T15:59:32.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T15:59:32.733 [DEBUG] [Thread-207086] [transport.py] [_log()] EOF in transport thread
2026-02-15T15:59:44.865 [DEBUG] [Thread-207088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:54.760 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:54.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:56.007 [DEBUG] [Thread-207089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T15:59:59.919 [DEBUG] [Thread-207090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:00:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:00:02.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:00:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:00:04.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 15, 59, 41), 26.4, 17.41, 0.0, 24.66, 25.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:00:04.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 15:59:41
2026-02-15T16:00:05.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:00:05.239 [DEBUG] [Thread-207091] [transport.py] [_log()] starting thread (client mode): 0xa2d4f7f0
2026-02-15T16:00:05.239 [DEBUG] [Thread-207091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:00:05.260 [DEBUG] [Thread-207091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:00:05.260 [INFO] [Thread-207091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:00:05.263 [DEBUG] [Thread-207091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:00:05.263 [DEBUG] [Thread-207091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:00:05.263 [DEBUG] [Thread-207091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:00:05.263 [DEBUG] [Thread-207091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:05.263 [DEBUG] [Thread-207091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] client lang: <none>
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] server lang: <none>
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] kex follows: False
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] Compression: none
2026-02-15T16:00:05.264 [DEBUG] [Thread-207091] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:00:05.281 [DEBUG] [Thread-207091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:00:05.282 [DEBUG] [Thread-207091] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:00:05.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:00:05.283 [DEBUG] [Thread-207091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:00:05.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:00:05.285 [DEBUG] [Thread-207091] [transport.py] [_log()] userauth is OK
2026-02-15T16:00:05.286 [DEBUG] [Thread-207091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:00:05.286 [DEBUG] [Thread-207091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:00:05.286 [DEBUG] [Thread-207091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:00:05.287 [DEBUG] [Thread-207091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:00:05.312 [INFO] [Thread-207091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:00:05.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:00:14.953 [DEBUG] [Thread-207093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:00:19.481 [DEBUG] [Thread-207091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:00:19.481 [DEBUG] [Thread-207091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:00:19.481 [DEBUG] [Thread-207091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:00:19.522 [DEBUG] [Thread-207091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:00:19.522 [DEBUG] [Thread-207091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:00:19.526 [DEBUG] [Thread-207091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:00:19.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:00:19.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:00:19.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:00:19.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:00:19.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:00:19.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:00:19.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:00:19.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:00:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:00:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.583082 -999.00  +23.60  16.32     24   +1.90 1 1 1 1 1   888    0 21.55 -14.34 ----- 16.3 16.3 144.8 25.1 29.8 -31.0 29.4 -29.3 31.0 -29.0 31.9 -31.4
2026-02-15T16:00:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:00:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:00:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.583082
2026-02-15T16:00:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:00:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:00:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:00:19.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:00:19.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:00:19.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T15:59:41', tmtdew=26.4, humidity=17.41, cloud=0.0, wind=24.66, temperature=25.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T13:59:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:00:19.818 [DEBUG] [Thread-207091] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:00:19.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:00:19.916 [DEBUG] [Thread-207095] [transport.py] [_log()] starting thread (client mode): 0xa2d4e170
2026-02-15T16:00:19.916 [DEBUG] [Thread-207095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:00:19.931 [DEBUG] [Thread-207095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:00:19.931 [INFO] [Thread-207095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:00:19.938 [DEBUG] [Thread-207095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:00:19.938 [DEBUG] [Thread-207095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:00:19.938 [DEBUG] [Thread-207095] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:00:19.938 [DEBUG] [Thread-207095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:19.938 [DEBUG] [Thread-207095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:19.938 [DEBUG] [Thread-207095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] client lang: <none>
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] server lang: <none>
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] kex follows: False
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] Compression: none
2026-02-15T16:00:19.939 [DEBUG] [Thread-207095] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:00:19.997 [DEBUG] [Thread-207095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:00:19.997 [DEBUG] [Thread-207095] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:00:19.998 [DEBUG] [Thread-207095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:00:19.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:00:19.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:00:20.054 [DEBUG] [Thread-207095] [transport.py] [_log()] userauth is OK
2026-02-15T16:00:20.054 [DEBUG] [Thread-207095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:00:20.054 [DEBUG] [Thread-207095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:00:20.055 [DEBUG] [Thread-207095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:00:20.055 [DEBUG] [Thread-207095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:00:20.073 [INFO] [Thread-207095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:00:20.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:00:20.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:00:20.922 [DEBUG] [Thread-207095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:00:20.922 [DEBUG] [Thread-207095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:00:20.971 [DEBUG] [Thread-207095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:00:20.971 [DEBUG] [Thread-207095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:00:20.980 [DEBUG] [Thread-207095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:00:20.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:00:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:00:20.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:00:21.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:00:21.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:00:21.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:00:21.014 [DEBUG] [Thread-207095] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:00:29.988 [DEBUG] [Thread-207097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:00:45.052 [DEBUG] [Thread-207098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:00:51.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:00:51.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:00:51.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:00:52.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 0, 17), 25.49, 18.27, 0.0, 27.83, 23.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:00:52.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:00:17
2026-02-15T16:00:53.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:00:53.390 [DEBUG] [Thread-207099] [transport.py] [_log()] starting thread (client mode): 0xa2d4d090
2026-02-15T16:00:53.390 [DEBUG] [Thread-207099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:00:53.410 [DEBUG] [Thread-207099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:00:53.410 [INFO] [Thread-207099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:00:53.413 [DEBUG] [Thread-207099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:00:53.413 [DEBUG] [Thread-207099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:00:53.413 [DEBUG] [Thread-207099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:00:53.413 [DEBUG] [Thread-207099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:53.413 [DEBUG] [Thread-207099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] client lang: <none>
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] server lang: <none>
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] kex follows: False
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:00:53.414 [DEBUG] [Thread-207099] [transport.py] [_log()] Compression: none
2026-02-15T16:00:53.415 [DEBUG] [Thread-207099] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:00:53.434 [DEBUG] [Thread-207099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:00:53.435 [DEBUG] [Thread-207099] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:00:53.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:00:53.436 [DEBUG] [Thread-207099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:00:53.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:00:53.438 [DEBUG] [Thread-207099] [transport.py] [_log()] userauth is OK
2026-02-15T16:00:53.439 [DEBUG] [Thread-207099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:00:53.439 [DEBUG] [Thread-207099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:00:53.439 [DEBUG] [Thread-207099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:00:53.439 [DEBUG] [Thread-207099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:00:53.464 [INFO] [Thread-207099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:00:53.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:00:54.101 [DEBUG] [Thread-207099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:00:54.101 [DEBUG] [Thread-207099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:00:54.102 [DEBUG] [Thread-207099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:00:54.142 [DEBUG] [Thread-207099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:00:54.142 [DEBUG] [Thread-207099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:00:54.145 [DEBUG] [Thread-207099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:00:54.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:00:54.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:00:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:00:54.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:00:54.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:00:54.168 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:00:54.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:00:54.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.583429 -999.00  +23.60  20.20     24   +2.00 1 1 1 1 1   888    0 21.34 -15.27 ----- 20.2 20.2 147.6 26.5 29.8 -31.0 29.2 -29.4 31.0 -29.1 31.9 -30.9
2026-02-15T16:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:00:54.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.583429
2026-02-15T16:00:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:00:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:00:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:00:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:00:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:00:54.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:00:17', tmtdew=25.49, humidity=18.27, cloud=0.0, wind=27.83, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:00:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:00:54.171 [DEBUG] [Thread-207099] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:00:54.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:00:54.267 [DEBUG] [Thread-207102] [transport.py] [_log()] starting thread (client mode): 0xa2d4cfd0
2026-02-15T16:00:54.267 [DEBUG] [Thread-207102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:00:54.281 [DEBUG] [Thread-207102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:00:54.282 [INFO] [Thread-207102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:00:54.289 [DEBUG] [Thread-207102] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:00:54.289 [DEBUG] [Thread-207102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:00:54.289 [DEBUG] [Thread-207102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] client lang: <none>
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] server lang: <none>
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] kex follows: False
2026-02-15T16:00:54.290 [DEBUG] [Thread-207102] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:00:54.291 [DEBUG] [Thread-207102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:00:54.291 [DEBUG] [Thread-207102] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:00:54.291 [DEBUG] [Thread-207102] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:00:54.291 [DEBUG] [Thread-207102] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:00:54.291 [DEBUG] [Thread-207102] [transport.py] [_log()] Compression: none
2026-02-15T16:00:54.291 [DEBUG] [Thread-207102] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:00:54.359 [DEBUG] [Thread-207102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:00:54.360 [DEBUG] [Thread-207102] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:00:54.360 [DEBUG] [Thread-207102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:00:54.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:00:54.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:00:54.419 [DEBUG] [Thread-207102] [transport.py] [_log()] userauth is OK
2026-02-15T16:00:54.419 [DEBUG] [Thread-207102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:00:54.419 [DEBUG] [Thread-207102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:00:54.420 [DEBUG] [Thread-207102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:00:54.420 [DEBUG] [Thread-207102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:00:54.440 [INFO] [Thread-207102] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:00:54.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:00:54.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:00:54.901 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:00:54.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:00:55.320 [DEBUG] [Thread-207102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:00:55.320 [DEBUG] [Thread-207102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:00:55.368 [DEBUG] [Thread-207102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:00:55.368 [DEBUG] [Thread-207102] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:00:55.378 [DEBUG] [Thread-207102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:00:55.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:00:55.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:00:55.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:00:55.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:00:55.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:00:55.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:00:55.415 [DEBUG] [Thread-207102] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:00:56.066 [DEBUG] [Thread-207104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:00.088 [DEBUG] [Thread-207105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:15.140 [DEBUG] [Thread-207106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:01:25.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:01:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:01:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 0, 52), 24.97, 18.89, 0.0, 27.98, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:01:27.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:00:52
2026-02-15T16:01:27.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:01:27.769 [DEBUG] [Thread-207107] [transport.py] [_log()] starting thread (client mode): 0xa2d1b730
2026-02-15T16:01:27.770 [DEBUG] [Thread-207107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:01:27.790 [DEBUG] [Thread-207107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:01:27.791 [INFO] [Thread-207107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:01:27.794 [DEBUG] [Thread-207107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:01:27.794 [DEBUG] [Thread-207107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] client lang: <none>
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] server lang: <none>
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] kex follows: False
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:01:27.795 [DEBUG] [Thread-207107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:01:27.796 [DEBUG] [Thread-207107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:01:27.796 [DEBUG] [Thread-207107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:01:27.796 [DEBUG] [Thread-207107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:01:27.796 [DEBUG] [Thread-207107] [transport.py] [_log()] Compression: none
2026-02-15T16:01:27.796 [DEBUG] [Thread-207107] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:01:27.814 [DEBUG] [Thread-207107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:01:27.815 [DEBUG] [Thread-207107] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:01:27.816 [DEBUG] [Thread-207107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:01:27.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:01:27.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:01:27.818 [DEBUG] [Thread-207107] [transport.py] [_log()] userauth is OK
2026-02-15T16:01:27.818 [DEBUG] [Thread-207107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:01:27.818 [DEBUG] [Thread-207107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:01:27.818 [DEBUG] [Thread-207107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:01:27.818 [DEBUG] [Thread-207107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:01:27.844 [INFO] [Thread-207107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:01:27.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:01:28.476 [DEBUG] [Thread-207107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:01:28.476 [DEBUG] [Thread-207107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:01:28.476 [DEBUG] [Thread-207107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:01:28.518 [DEBUG] [Thread-207107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:01:28.518 [DEBUG] [Thread-207107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:01:28.521 [DEBUG] [Thread-207107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:01:28.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:01:28.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:01:28.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:01:28.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:01:28.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:01:28.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:01:28.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:01:28.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:01:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:01:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.583776 -999.00  +23.60  23.73     24   +2.10 1 1 1 1 1   888    0 21.81 -16.11 ----- 23.7 23.7 144.2 31.7 29.8 -30.7 29.3 -30.0 30.9 -29.0 31.8 -31.7
2026-02-15T16:01:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:01:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:01:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.583776
2026-02-15T16:01:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:01:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:01:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:01:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:01:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:01:28.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:00:52', tmtdew=24.97, humidity=18.89, cloud=0.0, wind=27.98, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:00:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:01:28.550 [DEBUG] [Thread-207107] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:01:28.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:01:28.650 [DEBUG] [Thread-207110] [transport.py] [_log()] starting thread (client mode): 0xa2d18790
2026-02-15T16:01:28.650 [DEBUG] [Thread-207110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:01:28.665 [DEBUG] [Thread-207110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:01:28.666 [INFO] [Thread-207110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:01:28.673 [DEBUG] [Thread-207110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:01:28.674 [DEBUG] [Thread-207110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] client lang: <none>
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] server lang: <none>
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] kex follows: False
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:01:28.675 [DEBUG] [Thread-207110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:01:28.676 [DEBUG] [Thread-207110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:01:28.676 [DEBUG] [Thread-207110] [transport.py] [_log()] Compression: none
2026-02-15T16:01:28.676 [DEBUG] [Thread-207110] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:01:28.737 [DEBUG] [Thread-207110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:01:28.738 [DEBUG] [Thread-207110] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:01:28.738 [DEBUG] [Thread-207110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:01:28.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:01:28.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:01:28.793 [DEBUG] [Thread-207110] [transport.py] [_log()] userauth is OK
2026-02-15T16:01:28.793 [DEBUG] [Thread-207110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:01:28.793 [DEBUG] [Thread-207110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:01:28.794 [DEBUG] [Thread-207110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:01:28.794 [DEBUG] [Thread-207110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:01:28.812 [INFO] [Thread-207110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:01:28.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:01:28.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:01:29.682 [DEBUG] [Thread-207110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:01:29.682 [DEBUG] [Thread-207110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:01:29.730 [DEBUG] [Thread-207110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:01:29.731 [DEBUG] [Thread-207110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:01:29.741 [DEBUG] [Thread-207110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:01:29.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:01:29.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:01:29.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:01:29.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:01:29.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:01:29.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:01:29.779 [DEBUG] [Thread-207110] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:01:30.180 [DEBUG] [Thread-207112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:45.235 [DEBUG] [Thread-207113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:55.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:55.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:56.100 [DEBUG] [Thread-207114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:01:59.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:01:59.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:01:59.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:02:00.274 [DEBUG] [Thread-207115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:02:01.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 1, 27), 24.89, 18.95, 0.0, 28.16, 23.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:02:01.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:01:27
2026-02-15T16:02:02.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:02:02.228 [DEBUG] [Thread-207116] [transport.py] [_log()] starting thread (client mode): 0xa2d183a0
2026-02-15T16:02:02.228 [DEBUG] [Thread-207116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:02:02.248 [DEBUG] [Thread-207116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:02:02.248 [INFO] [Thread-207116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:02.251 [DEBUG] [Thread-207116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] client lang: <none>
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] server lang: <none>
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] kex follows: False
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] Compression: none
2026-02-15T16:02:02.252 [DEBUG] [Thread-207116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:02:02.271 [DEBUG] [Thread-207116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:02:02.271 [DEBUG] [Thread-207116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:02:02.272 [DEBUG] [Thread-207116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:02:02.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:02:02.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:02:02.274 [DEBUG] [Thread-207116] [transport.py] [_log()] userauth is OK
2026-02-15T16:02:02.275 [DEBUG] [Thread-207116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:02:02.275 [DEBUG] [Thread-207116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:02:02.275 [DEBUG] [Thread-207116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:02:02.275 [DEBUG] [Thread-207116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:02:02.297 [INFO] [Thread-207116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:02:02.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:02:02.941 [DEBUG] [Thread-207116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:02:02.941 [DEBUG] [Thread-207116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:02:02.941 [DEBUG] [Thread-207116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:02:02.983 [DEBUG] [Thread-207116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:02:02.983 [DEBUG] [Thread-207116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:02:02.986 [DEBUG] [Thread-207116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:02:02.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:02:02.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:02:03.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:02:03.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:02:03.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:02:03.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:02:03.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:02:03.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.584124 -999.00  +23.30  24.01     24   +1.90 1 1 1 1 1   888    0 21.69 -17.45 ----- 24.0 24.0 141.8 31.5 29.6 -30.3 29.3 -29.3 30.9 -28.8 31.6 -30.4
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.584124
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:02:03.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:01:27', tmtdew=24.89, humidity=18.95, cloud=0.0, wind=28.16, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:01:08.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:02:03.004 [DEBUG] [Thread-207116] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:02:03.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:02:03.100 [DEBUG] [Thread-207119] [transport.py] [_log()] starting thread (client mode): 0xa2d4e5f0
2026-02-15T16:02:03.101 [DEBUG] [Thread-207119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:02:03.116 [DEBUG] [Thread-207119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:02:03.116 [INFO] [Thread-207119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:02:03.123 [DEBUG] [Thread-207119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] client lang: <none>
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] server lang: <none>
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] kex follows: False
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:02:03.124 [DEBUG] [Thread-207119] [transport.py] [_log()] Compression: none
2026-02-15T16:02:03.125 [DEBUG] [Thread-207119] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:02:03.180 [DEBUG] [Thread-207119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:02:03.181 [DEBUG] [Thread-207119] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:02:03.181 [DEBUG] [Thread-207119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:02:03.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:02:03.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:02:03.240 [DEBUG] [Thread-207119] [transport.py] [_log()] userauth is OK
2026-02-15T16:02:03.240 [DEBUG] [Thread-207119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:02:03.241 [DEBUG] [Thread-207119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:02:03.241 [DEBUG] [Thread-207119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:02:03.241 [DEBUG] [Thread-207119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:02:03.255 [INFO] [Thread-207119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:02:03.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:02:03.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:02:04.137 [DEBUG] [Thread-207119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:02:04.138 [DEBUG] [Thread-207119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:02:04.185 [DEBUG] [Thread-207119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:02:04.185 [DEBUG] [Thread-207119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:02:04.195 [DEBUG] [Thread-207119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:02:04.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:02:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:02:04.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:02:04.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:02:04.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:02:04.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:02:04.231 [DEBUG] [Thread-207119] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:02:15.311 [DEBUG] [Thread-207121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:02:30.363 [DEBUG] [Thread-207122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:02:34.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:02:34.254 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:02:34.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:02:36.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 2, 3), 24.73, 19.12, 0.0, 26.15, 23.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:02:36.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:02:03
2026-02-15T16:02:36.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:02:37.114 [DEBUG] [Thread-207123] [transport.py] [_log()] starting thread (client mode): 0xa2d4c0d0
2026-02-15T16:02:37.115 [DEBUG] [Thread-207123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:02:37.134 [DEBUG] [Thread-207123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:02:37.135 [INFO] [Thread-207123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:02:37.137 [DEBUG] [Thread-207123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:02:37.137 [DEBUG] [Thread-207123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] client lang: <none>
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] server lang: <none>
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] kex follows: False
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] Compression: none
2026-02-15T16:02:37.138 [DEBUG] [Thread-207123] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:02:37.156 [DEBUG] [Thread-207123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:02:37.156 [DEBUG] [Thread-207123] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:02:37.157 [DEBUG] [Thread-207123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:02:37.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:02:37.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:02:37.159 [DEBUG] [Thread-207123] [transport.py] [_log()] userauth is OK
2026-02-15T16:02:37.159 [DEBUG] [Thread-207123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:02:37.160 [DEBUG] [Thread-207123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:02:37.160 [DEBUG] [Thread-207123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:02:37.160 [DEBUG] [Thread-207123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:02:37.186 [INFO] [Thread-207123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:02:37.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:02:37.784 [DEBUG] [Thread-207123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:02:37.785 [DEBUG] [Thread-207123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:02:37.785 [DEBUG] [Thread-207123] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:02:37.825 [DEBUG] [Thread-207123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:02:37.826 [DEBUG] [Thread-207123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:02:37.829 [DEBUG] [Thread-207123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:02:37.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:02:37.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:02:37.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:02:37.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:02:37.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:02:37.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:02:37.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:02:37.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:02:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:02:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.584818 -999.00  +23.30  18.12     24   +2.00 1 1 1 1 1   888    0 21.19 -19.76 ----- 18.1 18.1 163.8 24.7 29.5 -30.4 29.1 -28.7 30.8 -28.7 31.6 -30.6
2026-02-15T16:02:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:02:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:02:37.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.584818
2026-02-15T16:02:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:02:37.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:02:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:02:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:02:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:02:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:02:03', tmtdew=24.73, humidity=19.12, cloud=0.0, wind=26.15, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:02:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:02:37.858 [DEBUG] [Thread-207123] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:02:37.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:02:37.950 [DEBUG] [Thread-207126] [transport.py] [_log()] starting thread (client mode): 0xa2d1bbe0
2026-02-15T16:02:37.950 [DEBUG] [Thread-207126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:02:37.969 [DEBUG] [Thread-207126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:02:37.969 [INFO] [Thread-207126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:02:37.977 [DEBUG] [Thread-207126] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:02:37.977 [DEBUG] [Thread-207126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:02:37.977 [DEBUG] [Thread-207126] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:02:37.977 [DEBUG] [Thread-207126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] client lang: <none>
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] server lang: <none>
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] kex follows: False
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] Compression: none
2026-02-15T16:02:37.978 [DEBUG] [Thread-207126] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:02:38.037 [DEBUG] [Thread-207126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:02:38.038 [DEBUG] [Thread-207126] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:02:38.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:02:38.039 [DEBUG] [Thread-207126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:02:38.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:02:38.093 [DEBUG] [Thread-207126] [transport.py] [_log()] userauth is OK
2026-02-15T16:02:38.093 [DEBUG] [Thread-207126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:02:38.093 [DEBUG] [Thread-207126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:02:38.093 [DEBUG] [Thread-207126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:02:38.093 [DEBUG] [Thread-207126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:02:38.118 [INFO] [Thread-207126] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:02:38.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:02:38.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:02:38.962 [DEBUG] [Thread-207126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:02:38.963 [DEBUG] [Thread-207126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:02:39.014 [DEBUG] [Thread-207126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:02:39.014 [DEBUG] [Thread-207126] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:02:39.023 [DEBUG] [Thread-207126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:02:39.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:02:39.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:02:39.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:02:39.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:02:39.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:02:39.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:02:39.060 [DEBUG] [Thread-207126] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:02:45.400 [DEBUG] [Thread-207128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:02:55.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:02:55.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:02:56.133 [DEBUG] [Thread-207129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:00.454 [DEBUG] [Thread-207130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:09.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:03:09.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:03:09.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:03:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 2, 39), 25.77, 18.11, 0.0, 28.4, 24.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:03:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:02:39
2026-02-15T16:03:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:03:11.474 [DEBUG] [Thread-207131] [transport.py] [_log()] starting thread (client mode): 0xa2d1b0d0
2026-02-15T16:03:11.474 [DEBUG] [Thread-207131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:03:11.490 [DEBUG] [Thread-207131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:03:11.490 [INFO] [Thread-207131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:03:11.493 [DEBUG] [Thread-207131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:03:11.493 [DEBUG] [Thread-207131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] client lang: <none>
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] server lang: <none>
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] kex follows: False
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] Compression: none
2026-02-15T16:03:11.494 [DEBUG] [Thread-207131] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:03:11.512 [DEBUG] [Thread-207131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:03:11.512 [DEBUG] [Thread-207131] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:03:11.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:03:11.513 [DEBUG] [Thread-207131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:03:11.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:03:11.515 [DEBUG] [Thread-207131] [transport.py] [_log()] userauth is OK
2026-02-15T16:03:11.516 [DEBUG] [Thread-207131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:03:11.516 [DEBUG] [Thread-207131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:03:11.516 [DEBUG] [Thread-207131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:03:11.516 [DEBUG] [Thread-207131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:03:11.541 [INFO] [Thread-207131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:03:11.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:03:12.193 [DEBUG] [Thread-207131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:03:12.194 [DEBUG] [Thread-207131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:03:12.194 [DEBUG] [Thread-207131] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:03:12.234 [DEBUG] [Thread-207131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:03:12.234 [DEBUG] [Thread-207131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:03:12.238 [DEBUG] [Thread-207131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:03:12.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:03:12.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:03:12.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:03:12.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:03:12.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:03:12.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:03:12.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:03:12.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:03:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:03:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.585165 -999.00  +23.40  19.48     24   +2.00 1 1 1 1 1   888    0 21.34 -21.70 ----- 19.5 19.5 164.4 29.0 29.6 -29.8 29.1 -29.8 30.9 -28.0 31.7 -29.8
2026-02-15T16:03:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:03:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:03:12.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.585165
2026-02-15T16:03:12.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:03:12.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:03:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:03:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:03:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:03:12.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:02:39', tmtdew=25.77, humidity=18.11, cloud=0.0, wind=28.4, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:02:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:03:12.263 [DEBUG] [Thread-207131] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:03:12.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:03:12.368 [DEBUG] [Thread-207134] [transport.py] [_log()] starting thread (client mode): 0xa2d4f250
2026-02-15T16:03:12.368 [DEBUG] [Thread-207134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:03:12.387 [DEBUG] [Thread-207134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:03:12.387 [INFO] [Thread-207134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] client lang: <none>
2026-02-15T16:03:12.395 [DEBUG] [Thread-207134] [transport.py] [_log()] server lang: <none>
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] kex follows: False
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] Compression: none
2026-02-15T16:03:12.396 [DEBUG] [Thread-207134] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:03:12.453 [DEBUG] [Thread-207134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:03:12.454 [DEBUG] [Thread-207134] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:03:12.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:03:12.455 [DEBUG] [Thread-207134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:03:12.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:03:12.509 [DEBUG] [Thread-207134] [transport.py] [_log()] userauth is OK
2026-02-15T16:03:12.510 [DEBUG] [Thread-207134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:03:12.510 [DEBUG] [Thread-207134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:03:12.510 [DEBUG] [Thread-207134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:03:12.510 [DEBUG] [Thread-207134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:03:12.530 [INFO] [Thread-207134] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:03:12.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:03:12.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:03:13.386 [DEBUG] [Thread-207134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:03:13.386 [DEBUG] [Thread-207134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:03:13.434 [DEBUG] [Thread-207134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:03:13.435 [DEBUG] [Thread-207134] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:03:13.444 [DEBUG] [Thread-207134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:03:13.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:03:13.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:03: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') -> 00000000
2026-02-15T16:03:13.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:03:13.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:03:13.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:03:13.480 [DEBUG] [Thread-207134] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:03:15.495 [DEBUG] [Thread-207136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:30.549 [DEBUG] [Thread-207137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:43.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:03:43.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:03:43.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:03:45.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 3, 14), 24.72, 19.37, 0.0, 21.44, 23.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:03:45.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:03:14
2026-02-15T16:03:45.585 [DEBUG] [Thread-207138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:45.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:03:45.909 [DEBUG] [Thread-207139] [transport.py] [_log()] starting thread (client mode): 0xa2d1b970
2026-02-15T16:03:45.909 [DEBUG] [Thread-207139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:03:45.931 [DEBUG] [Thread-207139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:03:45.931 [INFO] [Thread-207139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:03:45.934 [DEBUG] [Thread-207139] [transport.py] [_log()] client lang: <none>
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] server lang: <none>
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] kex follows: False
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] Compression: none
2026-02-15T16:03:45.935 [DEBUG] [Thread-207139] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:03:45.953 [DEBUG] [Thread-207139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:03:45.954 [DEBUG] [Thread-207139] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:03:45.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:03:45.956 [DEBUG] [Thread-207139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:03:45.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:03:45.958 [DEBUG] [Thread-207139] [transport.py] [_log()] userauth is OK
2026-02-15T16:03:45.958 [DEBUG] [Thread-207139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:03:45.959 [DEBUG] [Thread-207139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:03:45.959 [DEBUG] [Thread-207139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:03:45.959 [DEBUG] [Thread-207139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:03:45.985 [INFO] [Thread-207139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:03:45.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:03:46.629 [DEBUG] [Thread-207139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:03:46.629 [DEBUG] [Thread-207139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:03:46.630 [DEBUG] [Thread-207139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:03:46.670 [DEBUG] [Thread-207139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:03:46.671 [DEBUG] [Thread-207139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:03:46.674 [DEBUG] [Thread-207139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:03:46.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:03:46.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:03:46.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:03:46.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:03:46.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:03:46.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:03:46.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:03:46.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:03:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:03:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.585860 -999.00  +23.70  20.65     24   +1.90 1 1 1 1 1   888    0 20.91 -23.83 ----- 20.6 20.6 133.6 23.0 29.6 -30.0 29.2 -29.4 30.8 -28.1 31.6 -30.2
2026-02-15T16:03:46.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:03:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:03:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.585860
2026-02-15T16:03:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:03:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:03:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:03:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:03:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:03:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:03:14', tmtdew=24.72, humidity=19.37, cloud=0.0, wind=21.44, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:03:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:03:46.702 [DEBUG] [Thread-207139] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:03:46.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:03:46.799 [DEBUG] [Thread-207142] [transport.py] [_log()] starting thread (client mode): 0xa2d1b8b0
2026-02-15T16:03:46.799 [DEBUG] [Thread-207142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:03:46.813 [DEBUG] [Thread-207142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:03:46.814 [INFO] [Thread-207142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:03:46.821 [DEBUG] [Thread-207142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:03:46.821 [DEBUG] [Thread-207142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:03:46.821 [DEBUG] [Thread-207142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] client lang: <none>
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] server lang: <none>
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] kex follows: False
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] Compression: none
2026-02-15T16:03:46.822 [DEBUG] [Thread-207142] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:03:46.881 [DEBUG] [Thread-207142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:03:46.882 [DEBUG] [Thread-207142] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:03:46.882 [DEBUG] [Thread-207142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:03:46.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:03:46.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:03:46.940 [DEBUG] [Thread-207142] [transport.py] [_log()] userauth is OK
2026-02-15T16:03:46.941 [DEBUG] [Thread-207142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:03:46.941 [DEBUG] [Thread-207142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:03:46.941 [DEBUG] [Thread-207142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:03:46.941 [DEBUG] [Thread-207142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:03:46.960 [INFO] [Thread-207142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:03:46.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:03:46.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:03:47.812 [DEBUG] [Thread-207142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:03:47.812 [DEBUG] [Thread-207142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:03:47.861 [DEBUG] [Thread-207142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:03:47.861 [DEBUG] [Thread-207142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:03:47.870 [DEBUG] [Thread-207142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:03:47.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:03:47.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:03:47.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:03:47.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:03:47.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:03:47.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:03:47.909 [DEBUG] [Thread-207142] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:03:55.324 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:55.325 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:03:56.168 [DEBUG] [Thread-207144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:00.622 [DEBUG] [Thread-207145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:15.680 [DEBUG] [Thread-207146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:04:17.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:04:17.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:04:19.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 3, 50), 25.09, 18.64, 0.0, 25.2, 23.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:04:19.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:03:50
2026-02-15T16:04:20.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:04:20.307 [DEBUG] [Thread-207147] [transport.py] [_log()] starting thread (client mode): 0xa2d1ab90
2026-02-15T16:04:20.308 [DEBUG] [Thread-207147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:04:20.327 [DEBUG] [Thread-207147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:04:20.327 [INFO] [Thread-207147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:04:20.330 [DEBUG] [Thread-207147] [transport.py] [_log()] client lang: <none>
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] server lang: <none>
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] kex follows: False
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] Compression: none
2026-02-15T16:04:20.331 [DEBUG] [Thread-207147] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:04:20.348 [DEBUG] [Thread-207147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:04:20.349 [DEBUG] [Thread-207147] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:04:20.349 [DEBUG] [Thread-207147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:04:20.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:04:20.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:04:20.351 [DEBUG] [Thread-207147] [transport.py] [_log()] userauth is OK
2026-02-15T16:04:20.351 [DEBUG] [Thread-207147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:04:20.351 [DEBUG] [Thread-207147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:04:20.351 [DEBUG] [Thread-207147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:04:20.351 [DEBUG] [Thread-207147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:04:20.372 [INFO] [Thread-207147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:04:20.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:04:20.993 [DEBUG] [Thread-207147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:04:20.993 [DEBUG] [Thread-207147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:04:20.994 [DEBUG] [Thread-207147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:04:21.034 [DEBUG] [Thread-207147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:04:21.035 [DEBUG] [Thread-207147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:04:21.037 [DEBUG] [Thread-207147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:04:21.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:04:21.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:04:21.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:04:21.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:04:21.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:04:21.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:04:21.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:04:21.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:04:21.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:04:21.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.586207 -999.00  +23.80  18.10     24   +2.00 1 1 1 1 1   888    0 21.17 -23.31 ----- 18.1 18.1 153.4 24.0 29.6 -29.9 29.3 -29.1 30.9 -28.2 31.6 -30.0
2026-02-15T16:04:21.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:04:21.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:04:21.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.586207
2026-02-15T16:04:21.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:04:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:04:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:04:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:04:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:04:21.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:03:50', tmtdew=25.09, humidity=18.64, cloud=0.0, wind=25.2, temperature=23.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:04:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:04:21.058 [DEBUG] [Thread-207147] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:04:21.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:04:21.155 [DEBUG] [Thread-207150] [transport.py] [_log()] starting thread (client mode): 0xa2d19de0
2026-02-15T16:04:21.155 [DEBUG] [Thread-207150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:04:21.170 [DEBUG] [Thread-207150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:04:21.170 [INFO] [Thread-207150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:04:21.178 [DEBUG] [Thread-207150] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:04:21.178 [DEBUG] [Thread-207150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:04:21.178 [DEBUG] [Thread-207150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] client lang: <none>
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] server lang: <none>
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] kex follows: False
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] Compression: none
2026-02-15T16:04:21.179 [DEBUG] [Thread-207150] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:04:21.237 [DEBUG] [Thread-207150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:04:21.238 [DEBUG] [Thread-207150] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:04:21.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:04:21.239 [DEBUG] [Thread-207150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:04:21.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:04:21.293 [DEBUG] [Thread-207150] [transport.py] [_log()] userauth is OK
2026-02-15T16:04:21.293 [DEBUG] [Thread-207150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:04:21.293 [DEBUG] [Thread-207150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:04:21.293 [DEBUG] [Thread-207150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:04:21.294 [DEBUG] [Thread-207150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:04:21.312 [INFO] [Thread-207150] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:04:21.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:04:21.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:04:22.142 [DEBUG] [Thread-207150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:04:22.143 [DEBUG] [Thread-207150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:04:22.190 [DEBUG] [Thread-207150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:04:22.191 [DEBUG] [Thread-207150] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:04:22.200 [DEBUG] [Thread-207150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:04:22.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:04:22.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:04:22.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:04:22.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:04:22.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:04:22.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:04:22.238 [DEBUG] [Thread-207150] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:04:30.719 [DEBUG] [Thread-207152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:45.771 [DEBUG] [Thread-207153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:52.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:04:52.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:04:52.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-02-15T16:04:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 4, 25), 25.23, 18.44, 0.0, 23.94, 23.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:04:54.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:04:25
2026-02-15T16:04:54.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:04:54.562 [DEBUG] [Thread-207154] [transport.py] [_log()] starting thread (client mode): 0xa2d195a0
2026-02-15T16:04:54.562 [DEBUG] [Thread-207154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:04:54.582 [DEBUG] [Thread-207154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:04:54.583 [INFO] [Thread-207154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:04:54.586 [DEBUG] [Thread-207154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:04:54.586 [DEBUG] [Thread-207154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:04:54.586 [DEBUG] [Thread-207154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] client lang: <none>
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] server lang: <none>
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] kex follows: False
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] Compression: none
2026-02-15T16:04:54.587 [DEBUG] [Thread-207154] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:04:54.606 [DEBUG] [Thread-207154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:04:54.606 [DEBUG] [Thread-207154] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:04:54.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:04:54.607 [DEBUG] [Thread-207154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:04:54.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:04:54.609 [DEBUG] [Thread-207154] [transport.py] [_log()] userauth is OK
2026-02-15T16:04:54.610 [DEBUG] [Thread-207154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:04:54.610 [DEBUG] [Thread-207154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:04:54.610 [DEBUG] [Thread-207154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:04:54.610 [DEBUG] [Thread-207154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:04:54.635 [INFO] [Thread-207154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:04:54.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:04:55.284 [DEBUG] [Thread-207154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:04:55.285 [DEBUG] [Thread-207154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:04:55.285 [DEBUG] [Thread-207154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:04:55.326 [DEBUG] [Thread-207154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:04:55.326 [DEBUG] [Thread-207154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:04:55.330 [DEBUG] [Thread-207154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:04:55.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:04:55.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:04:55.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:04:55.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:04:55.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:04:55.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:04:55.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:04:55.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:04:55.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:04:55.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.586554 -999.00  +24.00  18.03     23   +2.00 1 1 1 1 1   888    0 21.04 -23.96 ----- 18.0 18.0 157.0 24.3 29.6 -30.5 29.3 -29.0 30.9 -28.3 31.7 -30.8
2026-02-15T16:04:55.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:04:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:04:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.586554
2026-02-15T16:04:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:04:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:04:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:04:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:04:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:04:55.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:04:25', tmtdew=25.23, humidity=18.44, cloud=0.0, wind=23.94, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:04:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:04:55.356 [DEBUG] [Thread-207154] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:04:55.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:04:55.453 [DEBUG] [Thread-207157] [transport.py] [_log()] starting thread (client mode): 0xa2d1b760
2026-02-15T16:04:55.453 [DEBUG] [Thread-207157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:04:55.466 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:55.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:55.467 [DEBUG] [Thread-207157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:04:55.468 [INFO] [Thread-207157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:04:55.475 [DEBUG] [Thread-207157] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:04:55.475 [DEBUG] [Thread-207157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] client lang: <none>
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] server lang: <none>
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] kex follows: False
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] Compression: none
2026-02-15T16:04:55.476 [DEBUG] [Thread-207157] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:04:55.537 [DEBUG] [Thread-207157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:04:55.537 [DEBUG] [Thread-207157] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:04:55.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:04:55.539 [DEBUG] [Thread-207157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:04:55.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:04:55.593 [DEBUG] [Thread-207157] [transport.py] [_log()] userauth is OK
2026-02-15T16:04:55.593 [DEBUG] [Thread-207157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:04:55.593 [DEBUG] [Thread-207157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:04:55.593 [DEBUG] [Thread-207157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:04:55.593 [DEBUG] [Thread-207157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:04:55.612 [INFO] [Thread-207157] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:04:55.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:04:55.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:04:56.202 [DEBUG] [Thread-207159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:04:56.439 [DEBUG] [Thread-207157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:04:56.439 [DEBUG] [Thread-207157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:04:56.488 [DEBUG] [Thread-207157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:04:56.488 [DEBUG] [Thread-207157] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:04:56.497 [DEBUG] [Thread-207157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:04:56.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:04:56.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:04:56.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:04:56.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:04:56.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:04:56.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:04:56.539 [DEBUG] [Thread-207157] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:05:00.811 [DEBUG] [Thread-207160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:05:15.859 [DEBUG] [Thread-207161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:05:26.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:05:26.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:05:26.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:05:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 5, 1), 25.08, 18.62, 0.0, 21.69, 23.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:05:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:05:01
2026-02-15T16:05:29.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:05:29.279 [DEBUG] [Thread-207162] [transport.py] [_log()] starting thread (client mode): 0xa2d18790
2026-02-15T16:05:29.279 [DEBUG] [Thread-207162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:05:29.302 [DEBUG] [Thread-207162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:05:29.302 [INFO] [Thread-207162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] client lang: <none>
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] server lang: <none>
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] kex follows: False
2026-02-15T16:05:29.305 [DEBUG] [Thread-207162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:05:29.306 [DEBUG] [Thread-207162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:05:29.306 [DEBUG] [Thread-207162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:05:29.306 [DEBUG] [Thread-207162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:05:29.306 [DEBUG] [Thread-207162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:05:29.306 [DEBUG] [Thread-207162] [transport.py] [_log()] Compression: none
2026-02-15T16:05:29.306 [DEBUG] [Thread-207162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:05:29.323 [DEBUG] [Thread-207162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:05:29.324 [DEBUG] [Thread-207162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:05:29.325 [DEBUG] [Thread-207162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:05:29.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:05:29.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:05:29.327 [DEBUG] [Thread-207162] [transport.py] [_log()] userauth is OK
2026-02-15T16:05:29.328 [DEBUG] [Thread-207162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:05:29.328 [DEBUG] [Thread-207162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:05:29.328 [DEBUG] [Thread-207162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:05:29.328 [DEBUG] [Thread-207162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:05:29.353 [INFO] [Thread-207162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:05:29.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:05:30.013 [DEBUG] [Thread-207162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:05:30.014 [DEBUG] [Thread-207162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:05:30.014 [DEBUG] [Thread-207162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:05:30.054 [DEBUG] [Thread-207162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:05:30.055 [DEBUG] [Thread-207162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:05:30.058 [DEBUG] [Thread-207162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:05:30.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:05:30.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:05:30.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:05:30.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:05:30.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:05:30.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:05:30.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:05:30.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:05:30.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:05:30.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.586901 -999.00  +23.80  16.18     23   +1.90 1 1 1 1 1   888    0 21.15 -21.58 ----- 16.2 16.2 158.2 24.8 29.6 -31.2 29.2 -29.8 30.9 -28.9 31.7 -30.8
2026-02-15T16:05:30.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:05:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:05:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.586901
2026-02-15T16:05:30.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:05:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:05:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:05:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:05:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:05:30.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:05:01', tmtdew=25.08, humidity=18.62, cloud=0.0, wind=21.69, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:05:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:05:30.090 [DEBUG] [Thread-207162] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:05:30.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:05:30.188 [DEBUG] [Thread-207165] [transport.py] [_log()] starting thread (client mode): 0xa2d7ad10
2026-02-15T16:05:30.188 [DEBUG] [Thread-207165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:05:30.202 [DEBUG] [Thread-207165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:05:30.203 [INFO] [Thread-207165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] client lang: <none>
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] server lang: <none>
2026-02-15T16:05:30.210 [DEBUG] [Thread-207165] [transport.py] [_log()] kex follows: False
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] Compression: none
2026-02-15T16:05:30.211 [DEBUG] [Thread-207165] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:05:30.268 [DEBUG] [Thread-207165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:05:30.269 [DEBUG] [Thread-207165] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:05:30.270 [DEBUG] [Thread-207165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:05:30.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:05:30.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:05:30.329 [DEBUG] [Thread-207165] [transport.py] [_log()] userauth is OK
2026-02-15T16:05:30.329 [DEBUG] [Thread-207165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:05:30.330 [DEBUG] [Thread-207165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:05:30.330 [DEBUG] [Thread-207165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:05:30.330 [DEBUG] [Thread-207165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:05:30.348 [INFO] [Thread-207165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:05:30.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:05:30.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:05:30.894 [DEBUG] [Thread-207167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:05:31.191 [DEBUG] [Thread-207165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:05:31.191 [DEBUG] [Thread-207165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:05:31.240 [DEBUG] [Thread-207165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:05:31.240 [DEBUG] [Thread-207165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:05:31.250 [DEBUG] [Thread-207165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:05:31.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:05:31.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:05:31.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:05:31.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:05:31.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:05:31.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:05:31.288 [DEBUG] [Thread-207165] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:05:45.944 [DEBUG] [Thread-207168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:05:55.612 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:05:55.613 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:05:56.236 [DEBUG] [Thread-207169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:00.979 [DEBUG] [Thread-207170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:01.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:06:01.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:06:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:06:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 5, 36), 25.83, 17.97, 0.0, 19.09, 24.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:06:03.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:05:36
2026-02-15T16:06:03.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:06:03.785 [DEBUG] [Thread-207171] [transport.py] [_log()] starting thread (client mode): 0xa2d7a2c0
2026-02-15T16:06:03.786 [DEBUG] [Thread-207171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:06:03.798 [DEBUG] [Thread-207171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:06:03.798 [INFO] [Thread-207171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:06:03.799 [DEBUG] [Thread-207171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:06:03.799 [DEBUG] [Thread-207171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:06:03.799 [DEBUG] [Thread-207171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:06:03.799 [DEBUG] [Thread-207171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:03.799 [DEBUG] [Thread-207171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:03.799 [DEBUG] [Thread-207171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] client lang: <none>
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] server lang: <none>
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] kex follows: False
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] Compression: none
2026-02-15T16:06:03.800 [DEBUG] [Thread-207171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:06:03.809 [DEBUG] [Thread-207171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:06:03.809 [DEBUG] [Thread-207171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:06:03.809 [DEBUG] [Thread-207171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:06:03.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:06:03.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:06:03.812 [DEBUG] [Thread-207171] [transport.py] [_log()] userauth is OK
2026-02-15T16:06:03.812 [DEBUG] [Thread-207171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:06:03.812 [DEBUG] [Thread-207171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:06:03.812 [DEBUG] [Thread-207171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:06:03.813 [DEBUG] [Thread-207171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:06:03.837 [INFO] [Thread-207171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:06:03.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:06:04.425 [DEBUG] [Thread-207171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:06:04.425 [DEBUG] [Thread-207171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:06:04.425 [DEBUG] [Thread-207171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:06:04.466 [DEBUG] [Thread-207171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:06:04.466 [DEBUG] [Thread-207171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:06:04.471 [DEBUG] [Thread-207171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:06:04.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:06:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:06:04.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:06:04.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:06:04.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:06:04.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:06:04.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:06:04.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:06:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:06:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.587249 -999.00  +23.60  22.61     24   +1.90 1 1 1 1 1   888    0 21.34 -18.95 ----- 22.6 22.6 164.0 27.6 29.6 -31.4 29.1 -29.5 30.8 -28.8 31.7 -31.3
2026-02-15T16:06:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:06:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:06:04.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.587249
2026-02-15T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:06:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:06:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:06:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:06:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:05:36', tmtdew=25.83, humidity=17.97, cloud=0.0, wind=19.09, temperature=24.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:05:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:06:04.491 [DEBUG] [Thread-207171] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:06:04.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:06:04.597 [DEBUG] [Thread-207174] [transport.py] [_log()] starting thread (client mode): 0xa2d789d0
2026-02-15T16:06:04.597 [DEBUG] [Thread-207174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:06:04.612 [DEBUG] [Thread-207174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:06:04.613 [INFO] [Thread-207174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:06:04.620 [DEBUG] [Thread-207174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:06:04.620 [DEBUG] [Thread-207174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] client lang: <none>
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] server lang: <none>
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] kex follows: False
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] Compression: none
2026-02-15T16:06:04.621 [DEBUG] [Thread-207174] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:06:04.680 [DEBUG] [Thread-207174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:06:04.681 [DEBUG] [Thread-207174] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:06:04.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:06:04.682 [DEBUG] [Thread-207174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:06:04.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:06:04.740 [DEBUG] [Thread-207174] [transport.py] [_log()] userauth is OK
2026-02-15T16:06:04.740 [DEBUG] [Thread-207174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:06:04.741 [DEBUG] [Thread-207174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:06:04.741 [DEBUG] [Thread-207174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:06:04.741 [DEBUG] [Thread-207174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:06:04.760 [INFO] [Thread-207174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:06:04.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:06:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:06:05.625 [DEBUG] [Thread-207174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:06:05.625 [DEBUG] [Thread-207174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:06:05.673 [DEBUG] [Thread-207174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:06:05.674 [DEBUG] [Thread-207174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:06:05.687 [DEBUG] [Thread-207174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:06:05.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:06:05.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:06:05.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:06:05.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:06:05.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:06:05.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:06:05.726 [DEBUG] [Thread-207174] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:06:16.015 [DEBUG] [Thread-207176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:31.068 [DEBUG] [Thread-207177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:35.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:06:35.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:06:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:06:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 6, 11), 24.78, 19.39, 0.0, 24.38, 23.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:06:37.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:06:11
2026-02-15T16:06:38.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:06:38.466 [DEBUG] [Thread-207178] [transport.py] [_log()] starting thread (client mode): 0xa2d18880
2026-02-15T16:06:38.466 [DEBUG] [Thread-207178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:06:38.487 [DEBUG] [Thread-207178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:06:38.487 [INFO] [Thread-207178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:06:38.491 [DEBUG] [Thread-207178] [transport.py] [_log()] client lang: <none>
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] server lang: <none>
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] kex follows: False
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] Compression: none
2026-02-15T16:06:38.492 [DEBUG] [Thread-207178] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:06:38.508 [DEBUG] [Thread-207178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:06:38.509 [DEBUG] [Thread-207178] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:06:38.509 [DEBUG] [Thread-207178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:06:38.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:06:38.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:06:38.511 [DEBUG] [Thread-207178] [transport.py] [_log()] userauth is OK
2026-02-15T16:06:38.511 [DEBUG] [Thread-207178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:06:38.512 [DEBUG] [Thread-207178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:06:38.512 [DEBUG] [Thread-207178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:06:38.512 [DEBUG] [Thread-207178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:06:38.535 [INFO] [Thread-207178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:06:38.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:06:39.207 [DEBUG] [Thread-207178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:06:39.207 [DEBUG] [Thread-207178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:06:39.208 [DEBUG] [Thread-207178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:06:39.248 [DEBUG] [Thread-207178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:06:39.248 [DEBUG] [Thread-207178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:06:39.251 [DEBUG] [Thread-207178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:06:39.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:06:39.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:06:39.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:06:39.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:06:39.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:06:39.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:06:39.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:06:39.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:06:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:06:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.587596 -999.00  +23.30  20.17     24   +1.90 1 1 1 1 1   888    0 21.46 -19.80 ----- 20.2 20.2 151.3 25.6 29.6 -30.4 28.9 -29.7 30.7 -29.3 31.6 -31.3
2026-02-15T16:06:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:06:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:06:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.587596
2026-02-15T16:06:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:06:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:06:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:06:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:06:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:06:39.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:06:11', tmtdew=24.78, humidity=19.39, cloud=0.0, wind=24.38, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:06:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:06:39.275 [DEBUG] [Thread-207178] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:06:39.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:06:39.373 [DEBUG] [Thread-207181] [transport.py] [_log()] starting thread (client mode): 0xa2d788e0
2026-02-15T16:06:39.373 [DEBUG] [Thread-207181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:06:39.393 [DEBUG] [Thread-207181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:06:39.394 [INFO] [Thread-207181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:06:39.401 [DEBUG] [Thread-207181] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:06:39.401 [DEBUG] [Thread-207181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] client lang: <none>
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] server lang: <none>
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] kex follows: False
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:06:39.402 [DEBUG] [Thread-207181] [transport.py] [_log()] Compression: none
2026-02-15T16:06:39.403 [DEBUG] [Thread-207181] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:06:39.459 [DEBUG] [Thread-207181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:06:39.460 [DEBUG] [Thread-207181] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:06:39.460 [DEBUG] [Thread-207181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:06:39.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:06:39.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:06:39.516 [DEBUG] [Thread-207181] [transport.py] [_log()] userauth is OK
2026-02-15T16:06:39.516 [DEBUG] [Thread-207181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:06:39.516 [DEBUG] [Thread-207181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:06:39.516 [DEBUG] [Thread-207181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:06:39.516 [DEBUG] [Thread-207181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:06:39.539 [INFO] [Thread-207181] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:06:39.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:06:39.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:06:40.372 [DEBUG] [Thread-207181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:06:40.373 [DEBUG] [Thread-207181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:06:40.424 [DEBUG] [Thread-207181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:06:40.424 [DEBUG] [Thread-207181] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:06:40.442 [DEBUG] [Thread-207181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:06:40.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:06:40.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:06:40.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:06:40.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:06:40.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:06:40.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:06:40.493 [DEBUG] [Thread-207181] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:06:46.103 [DEBUG] [Thread-207183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:55.755 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:55.757 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:06:56.272 [DEBUG] [Thread-207184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:01.162 [DEBUG] [Thread-207185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:10.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:07:10.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:07:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:07:12.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 6, 48), 25.07, 18.77, 0.0, 23.29, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:07:12.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:06:48
2026-02-15T16:07:12.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:07:13.037 [DEBUG] [Thread-207186] [transport.py] [_log()] starting thread (client mode): 0xa2d7b850
2026-02-15T16:07:13.037 [DEBUG] [Thread-207186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:07:13.056 [DEBUG] [Thread-207186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:07:13.057 [INFO] [Thread-207186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] client lang: <none>
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] server lang: <none>
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] kex follows: False
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] Compression: none
2026-02-15T16:07:13.060 [DEBUG] [Thread-207186] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:07:13.076 [DEBUG] [Thread-207186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:07:13.076 [DEBUG] [Thread-207186] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:07:13.077 [DEBUG] [Thread-207186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:07:13.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:07:13.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:07:13.079 [DEBUG] [Thread-207186] [transport.py] [_log()] userauth is OK
2026-02-15T16:07:13.079 [DEBUG] [Thread-207186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:07:13.079 [DEBUG] [Thread-207186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:07:13.079 [DEBUG] [Thread-207186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:07:13.079 [DEBUG] [Thread-207186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:07:13.092 [INFO] [Thread-207186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:07:13.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:07:13.737 [DEBUG] [Thread-207186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:07:13.737 [DEBUG] [Thread-207186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:07:13.737 [DEBUG] [Thread-207186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:07:13.778 [DEBUG] [Thread-207186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:07:13.779 [DEBUG] [Thread-207186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:07:13.781 [DEBUG] [Thread-207186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:07:13.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:07:13.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:07:13.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:07:13.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:07:13.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:07:13.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:07:13.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:07:13.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:07:13.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:07:13.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.587943 -999.00  +23.00  22.78     24   +1.90 1 1 1 1 1   888    0 20.98 -24.09 ----- 22.8 22.8 144.2 31.4 29.4 -31.6 28.8 -30.3 30.5 -28.3 31.4 -31.9
2026-02-15T16:07:13.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:07:13.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:07:13.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.587943
2026-02-15T16:07:13.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:07:13.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:07:13.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:07:13.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:07:13.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:07:13.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:06:48', tmtdew=25.07, humidity=18.77, cloud=0.0, wind=23.29, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:06:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:07:13.808 [DEBUG] [Thread-207186] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:07:13.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:07:13.904 [DEBUG] [Thread-207189] [transport.py] [_log()] starting thread (client mode): 0xa2d79300
2026-02-15T16:07:13.904 [DEBUG] [Thread-207189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:07:13.919 [DEBUG] [Thread-207189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:07:13.919 [INFO] [Thread-207189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:07:13.927 [DEBUG] [Thread-207189] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:07:13.927 [DEBUG] [Thread-207189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:07:13.927 [DEBUG] [Thread-207189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:07:13.927 [DEBUG] [Thread-207189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:13.927 [DEBUG] [Thread-207189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:13.927 [DEBUG] [Thread-207189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] client lang: <none>
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] server lang: <none>
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] kex follows: False
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:07:13.928 [DEBUG] [Thread-207189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:07:13.929 [DEBUG] [Thread-207189] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:07:13.929 [DEBUG] [Thread-207189] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:07:13.929 [DEBUG] [Thread-207189] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:07:13.929 [DEBUG] [Thread-207189] [transport.py] [_log()] Compression: none
2026-02-15T16:07:13.929 [DEBUG] [Thread-207189] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:07:13.985 [DEBUG] [Thread-207189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:07:13.985 [DEBUG] [Thread-207189] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:07:13.986 [DEBUG] [Thread-207189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:07:13.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:07:13.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:07:14.044 [DEBUG] [Thread-207189] [transport.py] [_log()] userauth is OK
2026-02-15T16:07:14.044 [DEBUG] [Thread-207189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:07:14.044 [DEBUG] [Thread-207189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:07:14.044 [DEBUG] [Thread-207189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:07:14.044 [DEBUG] [Thread-207189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:07:14.063 [INFO] [Thread-207189] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:07:14.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:07:14.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:07:14.925 [DEBUG] [Thread-207189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:07:14.925 [DEBUG] [Thread-207189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:07:14.973 [DEBUG] [Thread-207189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:07:14.974 [DEBUG] [Thread-207189] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:07:14.983 [DEBUG] [Thread-207189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:07:14.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:07:14.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:07:15.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:07:15.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:07:15.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:07:15.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:07:15.026 [DEBUG] [Thread-207189] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:07:16.198 [DEBUG] [Thread-207191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:31.258 [DEBUG] [Thread-207192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:07:45.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:07:45.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:07:46.295 [DEBUG] [Thread-207193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:46.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 7, 23), 24.98, 18.89, 0.0, 22.6, 23.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:07:46.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:07:23
2026-02-15T16:07:47.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:07:47.404 [DEBUG] [Thread-207194] [transport.py] [_log()] starting thread (client mode): 0xa2d780a0
2026-02-15T16:07:47.404 [DEBUG] [Thread-207194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:07:47.425 [DEBUG] [Thread-207194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:07:47.425 [INFO] [Thread-207194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] client lang: <none>
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] server lang: <none>
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] kex follows: False
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] Compression: none
2026-02-15T16:07:47.429 [DEBUG] [Thread-207194] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:07:47.448 [DEBUG] [Thread-207194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:07:47.449 [DEBUG] [Thread-207194] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:07:47.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:07:47.450 [DEBUG] [Thread-207194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:07:47.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:07:47.452 [DEBUG] [Thread-207194] [transport.py] [_log()] userauth is OK
2026-02-15T16:07:47.453 [DEBUG] [Thread-207194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:07:47.453 [DEBUG] [Thread-207194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:07:47.453 [DEBUG] [Thread-207194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:07:47.453 [DEBUG] [Thread-207194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:07:47.485 [INFO] [Thread-207194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:07:47.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:07:48.100 [DEBUG] [Thread-207194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:07:48.100 [DEBUG] [Thread-207194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:07:48.100 [DEBUG] [Thread-207194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:07:48.141 [DEBUG] [Thread-207194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:07:48.141 [DEBUG] [Thread-207194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:07:48.144 [DEBUG] [Thread-207194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:07:48.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:07:48.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:07:48.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:07:48.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:07:48.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:07:48.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:07:48.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:07:48.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:07:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:07:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.588290 -999.00  +22.90  19.62     25   +1.80 1 1 1 1 1   888    0 20.66 -26.38 ----- 19.6 19.6 168.4 24.0 29.3 -30.0 28.8 -28.9 30.6 -28.5 31.4 -30.9
2026-02-15T16:07:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:07:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:07:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.588290
2026-02-15T16:07:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:07:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:07:48.171 [DEBUG] [Thread-207194] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:07:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:07:48.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:07:48.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:07:48.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:07:23', tmtdew=24.98, humidity=18.89, cloud=0.0, wind=22.6, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:07:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:07:48.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:07:48.274 [DEBUG] [Thread-207197] [transport.py] [_log()] starting thread (client mode): 0xa2d4f250
2026-02-15T16:07:48.275 [DEBUG] [Thread-207197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:07:48.294 [DEBUG] [Thread-207197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:07:48.294 [INFO] [Thread-207197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:48.305 [DEBUG] [Thread-207197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] client lang: <none>
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] server lang: <none>
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] kex follows: False
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] Compression: none
2026-02-15T16:07:48.306 [DEBUG] [Thread-207197] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:07:48.368 [DEBUG] [Thread-207197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:07:48.369 [DEBUG] [Thread-207197] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:07:48.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:07:48.370 [DEBUG] [Thread-207197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:07:48.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:07:48.437 [DEBUG] [Thread-207197] [transport.py] [_log()] userauth is OK
2026-02-15T16:07:48.437 [DEBUG] [Thread-207197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:07:48.438 [DEBUG] [Thread-207197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:07:48.438 [DEBUG] [Thread-207197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:07:48.438 [DEBUG] [Thread-207197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:07:48.463 [INFO] [Thread-207197] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:07:48.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:07:48.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:07:49.328 [DEBUG] [Thread-207197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:07:49.329 [DEBUG] [Thread-207197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:07:49.385 [DEBUG] [Thread-207197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:07:49.385 [DEBUG] [Thread-207197] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:07:49.404 [DEBUG] [Thread-207197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:07:49.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:07:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:07:49.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:07:49.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:07:49.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:07:49.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:07:49.477 [DEBUG] [Thread-207197] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:07:55.896 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:55.897 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:07:56.308 [DEBUG] [Thread-207199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:01.331 [DEBUG] [Thread-207200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:16.385 [DEBUG] [Thread-207201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:19.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:08:19.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:08:19.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:08:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 7, 58), 25.28, 18.44, 0.0, 18.99, 23.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:08:21.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:07:58
2026-02-15T16:08:21.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:08:21.866 [DEBUG] [Thread-207202] [transport.py] [_log()] starting thread (client mode): 0xa2d682e0
2026-02-15T16:08:21.866 [DEBUG] [Thread-207202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:08:21.887 [DEBUG] [Thread-207202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:08:21.887 [INFO] [Thread-207202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:08:21.890 [DEBUG] [Thread-207202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:08:21.890 [DEBUG] [Thread-207202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:08:21.890 [DEBUG] [Thread-207202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:08:21.890 [DEBUG] [Thread-207202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:21.890 [DEBUG] [Thread-207202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] client lang: <none>
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] server lang: <none>
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] kex follows: False
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] Compression: none
2026-02-15T16:08:21.891 [DEBUG] [Thread-207202] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:08:21.907 [DEBUG] [Thread-207202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:08:21.907 [DEBUG] [Thread-207202] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:08:21.908 [DEBUG] [Thread-207202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:08:21.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:08:21.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:08:21.910 [DEBUG] [Thread-207202] [transport.py] [_log()] userauth is OK
2026-02-15T16:08:21.910 [DEBUG] [Thread-207202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:08:21.910 [DEBUG] [Thread-207202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:08:21.910 [DEBUG] [Thread-207202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:08:21.910 [DEBUG] [Thread-207202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:08:21.932 [INFO] [Thread-207202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:08:21.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:08:22.567 [DEBUG] [Thread-207202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:08:22.567 [DEBUG] [Thread-207202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:08:22.568 [DEBUG] [Thread-207202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:08:22.608 [DEBUG] [Thread-207202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:08:22.609 [DEBUG] [Thread-207202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:08:22.612 [DEBUG] [Thread-207202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:08:22.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:08:22.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:08:22.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:08:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:08:22.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:08:22.634 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:08:22.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:08:22.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:08:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:08:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.588637 -999.00  +22.90  14.09     25   +1.80 1 1 1 1 1   888    0 20.70 -30.32 ----- 14.1 14.1 150.0 21.1 29.3 -30.8 28.8 -29.1 30.5 -29.5 31.4 -31.0
2026-02-15T16:08:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:08:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:08:22.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.588637
2026-02-15T16:08:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:08:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:08:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:08:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:08:22.637 [DEBUG] [Thread-207202] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:08:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:08:22.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:07:58', tmtdew=25.28, humidity=18.44, cloud=0.0, wind=18.99, temperature=23.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:07:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:08:22.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:08:22.733 [DEBUG] [Thread-207205] [transport.py] [_log()] starting thread (client mode): 0xa2d6ae90
2026-02-15T16:08:22.733 [DEBUG] [Thread-207205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:08:22.752 [DEBUG] [Thread-207205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:08:22.752 [INFO] [Thread-207205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:08:22.760 [DEBUG] [Thread-207205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:08:22.760 [DEBUG] [Thread-207205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:08:22.760 [DEBUG] [Thread-207205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:08:22.760 [DEBUG] [Thread-207205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:22.760 [DEBUG] [Thread-207205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:22.760 [DEBUG] [Thread-207205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] client lang: <none>
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] server lang: <none>
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] kex follows: False
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] Compression: none
2026-02-15T16:08:22.761 [DEBUG] [Thread-207205] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:08:22.822 [DEBUG] [Thread-207205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:08:22.822 [DEBUG] [Thread-207205] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:08:22.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:08:22.824 [DEBUG] [Thread-207205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:08:22.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:08:22.879 [DEBUG] [Thread-207205] [transport.py] [_log()] userauth is OK
2026-02-15T16:08:22.879 [DEBUG] [Thread-207205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:08:22.880 [DEBUG] [Thread-207205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:08:22.880 [DEBUG] [Thread-207205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:08:22.880 [DEBUG] [Thread-207205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:08:22.898 [INFO] [Thread-207205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:08:22.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:08:22.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:08:23.715 [DEBUG] [Thread-207205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:08:23.716 [DEBUG] [Thread-207205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:08:23.763 [DEBUG] [Thread-207205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:08:23.764 [DEBUG] [Thread-207205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:08:23.773 [DEBUG] [Thread-207205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:08:23.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:08:23.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:08:23.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:08:23.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:08:23.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:08:23.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:08:23.811 [DEBUG] [Thread-207205] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:08:31.423 [DEBUG] [Thread-207207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:46.471 [DEBUG] [Thread-207208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:08:53.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:08:53.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:08:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 8, 33), 26.52, 17.28, 0.0, 19.34, 25.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:08:55.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:08:33
2026-02-15T16:08:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:08:56.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:56.040 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:56.159 [DEBUG] [Thread-207209] [transport.py] [_log()] starting thread (client mode): 0xa2d6b9a0
2026-02-15T16:08:56.159 [DEBUG] [Thread-207209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:08:56.180 [DEBUG] [Thread-207209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:08:56.180 [INFO] [Thread-207209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] client lang: <none>
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] server lang: <none>
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] kex follows: False
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:08:56.183 [DEBUG] [Thread-207209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:08:56.184 [DEBUG] [Thread-207209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:08:56.184 [DEBUG] [Thread-207209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:08:56.184 [DEBUG] [Thread-207209] [transport.py] [_log()] Compression: none
2026-02-15T16:08:56.184 [DEBUG] [Thread-207209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:08:56.202 [DEBUG] [Thread-207209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:08:56.203 [DEBUG] [Thread-207209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:08:56.203 [DEBUG] [Thread-207209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:08:56.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:08:56.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:08:56.245 [DEBUG] [Thread-207209] [transport.py] [_log()] userauth is OK
2026-02-15T16:08:56.245 [DEBUG] [Thread-207209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:08:56.245 [DEBUG] [Thread-207209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:08:56.246 [DEBUG] [Thread-207209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:08:56.246 [DEBUG] [Thread-207209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:08:56.266 [INFO] [Thread-207209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:08:56.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:08:56.369 [DEBUG] [Thread-207211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:08:56.876 [DEBUG] [Thread-207209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:08:56.877 [DEBUG] [Thread-207209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:08:56.877 [DEBUG] [Thread-207209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:08:56.917 [DEBUG] [Thread-207209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:08:56.918 [DEBUG] [Thread-207209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:08:56.921 [DEBUG] [Thread-207209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:08:56.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:08:56.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:08:56.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:08:56.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:08:56.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:08:56.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:08:56.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:08:56.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:08:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:08:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.589332 -999.00  +23.00  11.75     24   +1.60 1 1 1 1 1   888    0 21.04 -38.40 ----- 11.8 11.8 176.4 17.2 29.3 -29.7 28.8 -28.8 30.6 -28.1 31.4 -29.7
2026-02-15T16:08:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:08:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:08:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.589332
2026-02-15T16:08:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:08:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:08:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:08:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:08:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:08:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:08:33', tmtdew=26.52, humidity=17.28, cloud=0.0, wind=19.34, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:08:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:08:56.964 [DEBUG] [Thread-207209] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:08:57.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:08:57.061 [DEBUG] [Thread-207213] [transport.py] [_log()] starting thread (client mode): 0xa2d6b340
2026-02-15T16:08:57.061 [DEBUG] [Thread-207213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:08:57.075 [DEBUG] [Thread-207213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:08:57.076 [INFO] [Thread-207213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:08:57.083 [DEBUG] [Thread-207213] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:08:57.083 [DEBUG] [Thread-207213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] client lang: <none>
2026-02-15T16:08:57.084 [DEBUG] [Thread-207213] [transport.py] [_log()] server lang: <none>
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] kex follows: False
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] Compression: none
2026-02-15T16:08:57.085 [DEBUG] [Thread-207213] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:08:57.146 [DEBUG] [Thread-207213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:08:57.147 [DEBUG] [Thread-207213] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:08:57.147 [DEBUG] [Thread-207213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:08:57.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:08:57.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:08:57.204 [DEBUG] [Thread-207213] [transport.py] [_log()] userauth is OK
2026-02-15T16:08:57.204 [DEBUG] [Thread-207213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:08:57.204 [DEBUG] [Thread-207213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:08:57.205 [DEBUG] [Thread-207213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:08:57.205 [DEBUG] [Thread-207213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:08:57.224 [INFO] [Thread-207213] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:08:57.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:08:57.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:08:58.057 [DEBUG] [Thread-207213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:08:58.057 [DEBUG] [Thread-207213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:08:58.105 [DEBUG] [Thread-207213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:08:58.105 [DEBUG] [Thread-207213] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:08:58.115 [DEBUG] [Thread-207213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:08:58.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:08:58.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:08:58.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:08:58.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:08:58.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:08:58.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:08:58.149 [DEBUG] [Thread-207213] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:09:01.507 [DEBUG] [Thread-207215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:09:16.563 [DEBUG] [Thread-207216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:09:28.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:09:28.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:09:28.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
2026-02-15T16:09:30.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 9, 9), 25.33, 18.62, 0.0, 19.21, 23.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:09:30.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:09:09
2026-02-15T16:09:30.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:09:31.118 [DEBUG] [Thread-207217] [transport.py] [_log()] starting thread (client mode): 0xa2d6a4a0
2026-02-15T16:09:31.118 [DEBUG] [Thread-207217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:09:31.138 [DEBUG] [Thread-207217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:09:31.138 [INFO] [Thread-207217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] client lang: <none>
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] server lang: <none>
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] kex follows: False
2026-02-15T16:09:31.141 [DEBUG] [Thread-207217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:09:31.142 [DEBUG] [Thread-207217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:09:31.142 [DEBUG] [Thread-207217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:09:31.142 [DEBUG] [Thread-207217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:09:31.142 [DEBUG] [Thread-207217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:09:31.142 [DEBUG] [Thread-207217] [transport.py] [_log()] Compression: none
2026-02-15T16:09:31.142 [DEBUG] [Thread-207217] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:09:31.159 [DEBUG] [Thread-207217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:09:31.160 [DEBUG] [Thread-207217] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:09:31.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:09:31.161 [DEBUG] [Thread-207217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:09:31.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:09:31.163 [DEBUG] [Thread-207217] [transport.py] [_log()] userauth is OK
2026-02-15T16:09:31.163 [DEBUG] [Thread-207217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:09:31.164 [DEBUG] [Thread-207217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:09:31.164 [DEBUG] [Thread-207217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:09:31.164 [DEBUG] [Thread-207217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:09:31.188 [INFO] [Thread-207217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:09:31.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:09:31.602 [DEBUG] [Thread-207219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:09:31.829 [DEBUG] [Thread-207217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:09:31.829 [DEBUG] [Thread-207217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:09:31.829 [DEBUG] [Thread-207217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:09:31.870 [DEBUG] [Thread-207217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:09:31.871 [DEBUG] [Thread-207217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:09:31.874 [DEBUG] [Thread-207217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:09:31.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:09:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:09:31.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:09:31.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:09:31.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:09:31.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:09:31.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:09:31.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:09:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:09:31.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.589679 -999.00  +23.20  17.74     24   +1.80 1 1 1 1 1   888    0 20.98 -47.25 ----- 17.7 17.7 175.4 27.1 29.3 -31.2 28.4 -29.2 30.5 -29.5 31.3 -31.5
2026-02-15T16:09:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:09:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:09:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.589679
2026-02-15T16:09:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:09:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:09:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:09:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:09:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:09:31.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:09:09', tmtdew=25.33, humidity=18.62, cloud=0.0, wind=19.21, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:09:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:09:31.902 [DEBUG] [Thread-207217] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:09:31.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:09:31.997 [DEBUG] [Thread-207221] [transport.py] [_log()] starting thread (client mode): 0xa2d682b0
2026-02-15T16:09:31.997 [DEBUG] [Thread-207221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:09:32.016 [DEBUG] [Thread-207221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:09:32.016 [INFO] [Thread-207221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:09:32.024 [DEBUG] [Thread-207221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] client lang: <none>
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] server lang: <none>
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] kex follows: False
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] Compression: none
2026-02-15T16:09:32.025 [DEBUG] [Thread-207221] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:09:32.084 [DEBUG] [Thread-207221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:09:32.084 [DEBUG] [Thread-207221] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:09:32.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:09:32.085 [DEBUG] [Thread-207221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:09:32.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:09:32.140 [DEBUG] [Thread-207221] [transport.py] [_log()] userauth is OK
2026-02-15T16:09:32.140 [DEBUG] [Thread-207221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:09:32.140 [DEBUG] [Thread-207221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:09:32.140 [DEBUG] [Thread-207221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:09:32.140 [DEBUG] [Thread-207221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:09:32.165 [INFO] [Thread-207221] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:09:32.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:09:32.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:09:33.022 [DEBUG] [Thread-207221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:09:33.023 [DEBUG] [Thread-207221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:09:33.071 [DEBUG] [Thread-207221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:09:33.072 [DEBUG] [Thread-207221] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:09:33.081 [DEBUG] [Thread-207221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:09:33.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:09:33.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:09:33.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:09:33.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:09:33.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:09:33.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:09:33.116 [DEBUG] [Thread-207221] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:09:46.637 [DEBUG] [Thread-207223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:09:56.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:09:56.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:09:56.403 [DEBUG] [Thread-207224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:01.682 [DEBUG] [Thread-207225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:03.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:10:03.139 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:10:03.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:10:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 9, 46), 25.18, 18.79, 0.0, 23.61, 23.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:10:05.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:09:46
2026-02-15T16:10:05.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:10:05.570 [DEBUG] [Thread-207226] [transport.py] [_log()] starting thread (client mode): 0xa2d68ee0
2026-02-15T16:10:05.570 [DEBUG] [Thread-207226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:10:05.590 [DEBUG] [Thread-207226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:10:05.590 [INFO] [Thread-207226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] client lang: <none>
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] server lang: <none>
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] kex follows: False
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:10:05.591 [DEBUG] [Thread-207226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:10:05.592 [DEBUG] [Thread-207226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:10:05.592 [DEBUG] [Thread-207226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:10:05.592 [DEBUG] [Thread-207226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:10:05.592 [DEBUG] [Thread-207226] [transport.py] [_log()] Compression: none
2026-02-15T16:10:05.592 [DEBUG] [Thread-207226] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:10:05.610 [DEBUG] [Thread-207226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:10:05.610 [DEBUG] [Thread-207226] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:10:05.610 [DEBUG] [Thread-207226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:10:05.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:10:05.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:10:05.612 [DEBUG] [Thread-207226] [transport.py] [_log()] userauth is OK
2026-02-15T16:10:05.612 [DEBUG] [Thread-207226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:10:05.613 [DEBUG] [Thread-207226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:10:05.613 [DEBUG] [Thread-207226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:10:05.613 [DEBUG] [Thread-207226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:10:05.637 [INFO] [Thread-207226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:10:05.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:10:16.720 [DEBUG] [Thread-207228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:19.949 [DEBUG] [Thread-207226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:10:19.949 [DEBUG] [Thread-207226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:10:19.950 [DEBUG] [Thread-207226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:10:19.990 [DEBUG] [Thread-207226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:10:19.991 [DEBUG] [Thread-207226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:10:19.994 [DEBUG] [Thread-207226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:10:20.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:10:20.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:10:20.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:10:20.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:10:20.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:10:20.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:10:20.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:10:20.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:10:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:10:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.590026 -999.00  +23.20  17.70     24   +1.90 1 1 1 1 1   888    0 19.99 -54.88 ----- 17.7 17.7 173.4 23.8 29.3 -31.3 28.4 -31.1 30.4 -29.6 31.2 -32.6
2026-02-15T16:10:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:10:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:10:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.590026
2026-02-15T16:10:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:10:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:10:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:10:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:10:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:10:20.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:09:46', tmtdew=25.18, humidity=18.79, cloud=0.0, wind=23.61, temperature=23.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:09:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:10:20.093 [DEBUG] [Thread-207226] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:10:20.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:10:20.188 [DEBUG] [Thread-207230] [transport.py] [_log()] starting thread (client mode): 0xa2d690c0
2026-02-15T16:10:20.188 [DEBUG] [Thread-207230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:10:20.203 [DEBUG] [Thread-207230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:10:20.204 [INFO] [Thread-207230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] client lang: <none>
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] server lang: <none>
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] kex follows: False
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:10:20.212 [DEBUG] [Thread-207230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:10:20.213 [DEBUG] [Thread-207230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:10:20.213 [DEBUG] [Thread-207230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:10:20.213 [DEBUG] [Thread-207230] [transport.py] [_log()] Compression: none
2026-02-15T16:10:20.213 [DEBUG] [Thread-207230] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:10:20.271 [DEBUG] [Thread-207230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:10:20.272 [DEBUG] [Thread-207230] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:10:20.273 [DEBUG] [Thread-207230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:10:20.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:10:20.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:10:20.331 [DEBUG] [Thread-207230] [transport.py] [_log()] userauth is OK
2026-02-15T16:10:20.332 [DEBUG] [Thread-207230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:10:20.332 [DEBUG] [Thread-207230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:10:20.332 [DEBUG] [Thread-207230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:10:20.332 [DEBUG] [Thread-207230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:10:20.352 [INFO] [Thread-207230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:10:20.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:10:20.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:10:21.190 [DEBUG] [Thread-207230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:10:21.190 [DEBUG] [Thread-207230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:10:21.237 [DEBUG] [Thread-207230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:10:21.238 [DEBUG] [Thread-207230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:10:21.247 [DEBUG] [Thread-207230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:10:21.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:10:21.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:10:21.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:10:21.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:10:21.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:10:21.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:10:21.287 [DEBUG] [Thread-207230] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:10:31.760 [DEBUG] [Thread-207232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:46.814 [DEBUG] [Thread-207233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:51.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:10:51.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:10:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:10:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 10, 22), 25.04, 18.95, 0.0, 23.36, 23.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:10:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:10:22
2026-02-15T16:10:53.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:10:53.613 [DEBUG] [Thread-207234] [transport.py] [_log()] starting thread (client mode): 0xa2d6aec0
2026-02-15T16:10:53.613 [DEBUG] [Thread-207234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:10:53.635 [DEBUG] [Thread-207234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:10:53.635 [INFO] [Thread-207234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] client lang: <none>
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] server lang: <none>
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] kex follows: False
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] Compression: none
2026-02-15T16:10:53.638 [DEBUG] [Thread-207234] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:10:53.655 [DEBUG] [Thread-207234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:10:53.655 [DEBUG] [Thread-207234] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:10:53.655 [DEBUG] [Thread-207234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:10:53.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:10:53.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:10:53.657 [DEBUG] [Thread-207234] [transport.py] [_log()] userauth is OK
2026-02-15T16:10:53.657 [DEBUG] [Thread-207234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:10:53.657 [DEBUG] [Thread-207234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:10:53.657 [DEBUG] [Thread-207234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:10:53.657 [DEBUG] [Thread-207234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:10:53.676 [INFO] [Thread-207234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:10:53.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:10:54.331 [DEBUG] [Thread-207234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:10:54.332 [DEBUG] [Thread-207234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:10:54.332 [DEBUG] [Thread-207234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:10:54.373 [DEBUG] [Thread-207234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:10:54.373 [DEBUG] [Thread-207234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:10:54.377 [DEBUG] [Thread-207234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:10:54.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:10:54.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:10:54.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:10:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:10:54.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:10:54.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:10:54.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:10:54.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:10:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:10:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.590373 -999.00  +23.20  14.19     24   +2.00 1 1 1 1 1   888    0 20.39 -61.28 ----- 14.2 14.2 167.4 22.3 29.2 -30.6 28.7 -28.5 30.4 -27.8 31.2 -29.8
2026-02-15T16:10:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:10:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:10:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.590373
2026-02-15T16:10:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:10:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:10:54.403 [DEBUG] [Thread-207234] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:10:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:10:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:10:54.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:10:54.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:10:22', tmtdew=25.04, humidity=18.95, cloud=0.0, wind=23.36, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:10:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:10:54.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:10:54.499 [DEBUG] [Thread-207237] [transport.py] [_log()] starting thread (client mode): 0xa2d69c00
2026-02-15T16:10:54.499 [DEBUG] [Thread-207237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:10:54.514 [DEBUG] [Thread-207237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:10:54.514 [INFO] [Thread-207237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] client lang: <none>
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] server lang: <none>
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] kex follows: False
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:10:54.522 [DEBUG] [Thread-207237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:10:54.523 [DEBUG] [Thread-207237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:10:54.523 [DEBUG] [Thread-207237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:10:54.523 [DEBUG] [Thread-207237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:10:54.523 [DEBUG] [Thread-207237] [transport.py] [_log()] Compression: none
2026-02-15T16:10:54.523 [DEBUG] [Thread-207237] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:10:54.579 [DEBUG] [Thread-207237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:10:54.580 [DEBUG] [Thread-207237] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:10:54.581 [DEBUG] [Thread-207237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:10:54.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:10:54.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:10:54.635 [DEBUG] [Thread-207237] [transport.py] [_log()] userauth is OK
2026-02-15T16:10:54.635 [DEBUG] [Thread-207237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:10:54.636 [DEBUG] [Thread-207237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:10:54.636 [DEBUG] [Thread-207237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:10:54.636 [DEBUG] [Thread-207237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:10:54.655 [INFO] [Thread-207237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:10:54.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:10:54.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:10:55.540 [DEBUG] [Thread-207237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:10:55.540 [DEBUG] [Thread-207237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:10:55.588 [DEBUG] [Thread-207237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:10:55.588 [DEBUG] [Thread-207237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:10:55.597 [DEBUG] [Thread-207237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:10:55.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:10:55.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:10:55.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:10:55.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:10:55.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:10:55.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:10:55.630 [DEBUG] [Thread-207237] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:10:56.324 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:56.325 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:10:56.449 [DEBUG] [Thread-207239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:01.849 [DEBUG] [Thread-207240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:16.894 [DEBUG] [Thread-207241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:25.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:11:25.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:11:25.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:11:27.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 10, 58), 24.48, 19.72, 0.0, 23.71, 23.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:11:27.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:10:58
2026-02-15T16:11:27.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:11:27.978 [DEBUG] [Thread-207242] [transport.py] [_log()] starting thread (client mode): 0xa2d68610
2026-02-15T16:11:27.978 [DEBUG] [Thread-207242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:11:27.997 [DEBUG] [Thread-207242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:11:27.997 [INFO] [Thread-207242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] client lang: <none>
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] server lang: <none>
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] kex follows: False
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:11:28.001 [DEBUG] [Thread-207242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:11:28.002 [DEBUG] [Thread-207242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:11:28.002 [DEBUG] [Thread-207242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:11:28.002 [DEBUG] [Thread-207242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:11:28.002 [DEBUG] [Thread-207242] [transport.py] [_log()] Compression: none
2026-02-15T16:11:28.002 [DEBUG] [Thread-207242] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:11:28.019 [DEBUG] [Thread-207242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:11:28.020 [DEBUG] [Thread-207242] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:11:28.020 [DEBUG] [Thread-207242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:11:28.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:11:28.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:11:28.023 [DEBUG] [Thread-207242] [transport.py] [_log()] userauth is OK
2026-02-15T16:11:28.023 [DEBUG] [Thread-207242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:11:28.023 [DEBUG] [Thread-207242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:11:28.023 [DEBUG] [Thread-207242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:11:28.023 [DEBUG] [Thread-207242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:11:28.060 [INFO] [Thread-207242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:11:28.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:11:28.707 [DEBUG] [Thread-207242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:11:28.707 [DEBUG] [Thread-207242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:11:28.708 [DEBUG] [Thread-207242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:11:28.748 [DEBUG] [Thread-207242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:11:28.749 [DEBUG] [Thread-207242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:11:28.752 [DEBUG] [Thread-207242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:11:28.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:11:28.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:11:28.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:11:28.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:11:28.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:11:28.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:11:28.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:11:28.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:11:28.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:11:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.590721 -999.00  +23.50  16.45     24   +2.10 1 1 1 1 1   888    0 20.18 -50.29 ----- 16.4 16.4 154.2 19.0 29.3 -29.1 28.8 -28.5 30.6 -26.9 31.4 -29.2
2026-02-15T16:11:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:11:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:11:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.590721
2026-02-15T16:11:28.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:11:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:11:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:11:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:11:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:11:28.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:10:58', tmtdew=24.48, humidity=19.72, cloud=0.0, wind=23.71, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:10:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:11:28.780 [DEBUG] [Thread-207242] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:11:28.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:11:28.876 [DEBUG] [Thread-207245] [transport.py] [_log()] starting thread (client mode): 0xa2d6a170
2026-02-15T16:11:28.876 [DEBUG] [Thread-207245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:11:28.891 [DEBUG] [Thread-207245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:11:28.891 [INFO] [Thread-207245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:11:28.898 [DEBUG] [Thread-207245] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:11:28.899 [DEBUG] [Thread-207245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:11:28.899 [DEBUG] [Thread-207245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:11:28.899 [DEBUG] [Thread-207245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:11:28.899 [DEBUG] [Thread-207245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:11:28.899 [DEBUG] [Thread-207245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:11:28.899 [DEBUG] [Thread-207245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] client lang: <none>
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] server lang: <none>
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] kex follows: False
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:11:28.900 [DEBUG] [Thread-207245] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:11:28.901 [DEBUG] [Thread-207245] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:11:28.901 [DEBUG] [Thread-207245] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:11:28.901 [DEBUG] [Thread-207245] [transport.py] [_log()] Compression: none
2026-02-15T16:11:28.901 [DEBUG] [Thread-207245] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:11:28.959 [DEBUG] [Thread-207245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:11:28.960 [DEBUG] [Thread-207245] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:11:28.960 [DEBUG] [Thread-207245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:11:28.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:11:28.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:11:29.019 [DEBUG] [Thread-207245] [transport.py] [_log()] userauth is OK
2026-02-15T16:11:29.019 [DEBUG] [Thread-207245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:11:29.019 [DEBUG] [Thread-207245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:11:29.020 [DEBUG] [Thread-207245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:11:29.020 [DEBUG] [Thread-207245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:11:29.040 [INFO] [Thread-207245] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:11:29.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:11:29.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:11:29.934 [DEBUG] [Thread-207245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:11:29.934 [DEBUG] [Thread-207245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:11:29.983 [DEBUG] [Thread-207245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:11:29.983 [DEBUG] [Thread-207245] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:11:29.992 [DEBUG] [Thread-207245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:11:30.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:11:30.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:11:30.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:11:30.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:11:30.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:11:30.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:11:30.029 [DEBUG] [Thread-207245] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:11:31.931 [DEBUG] [Thread-207247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:46.986 [DEBUG] [Thread-207248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:56.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:56.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:11:56.494 [DEBUG] [Thread-207249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:00.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:12:00.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:12:00.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:12:01.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 11, 34), 25.76, 18.14, 0.0, 32.11, 24.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:12:01.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:11:34
2026-02-15T16:12:02.025 [DEBUG] [Thread-207250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:12:02.358 [DEBUG] [Thread-207251] [transport.py] [_log()] starting thread (client mode): 0xa2d694b0
2026-02-15T16:12:02.358 [DEBUG] [Thread-207251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:12:02.379 [DEBUG] [Thread-207251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:12:02.380 [INFO] [Thread-207251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] client lang: <none>
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] server lang: <none>
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] kex follows: False
2026-02-15T16:12:02.383 [DEBUG] [Thread-207251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:12:02.384 [DEBUG] [Thread-207251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:12:02.384 [DEBUG] [Thread-207251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:12:02.384 [DEBUG] [Thread-207251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:12:02.384 [DEBUG] [Thread-207251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:12:02.384 [DEBUG] [Thread-207251] [transport.py] [_log()] Compression: none
2026-02-15T16:12:02.384 [DEBUG] [Thread-207251] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:12:02.401 [DEBUG] [Thread-207251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:12:02.402 [DEBUG] [Thread-207251] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:12:02.403 [DEBUG] [Thread-207251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:12:02.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:12:02.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:12:02.405 [DEBUG] [Thread-207251] [transport.py] [_log()] userauth is OK
2026-02-15T16:12:02.405 [DEBUG] [Thread-207251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:12:02.405 [DEBUG] [Thread-207251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:12:02.405 [DEBUG] [Thread-207251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:12:02.405 [DEBUG] [Thread-207251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:12:02.423 [INFO] [Thread-207251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:12:02.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:12:03.032 [DEBUG] [Thread-207251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:12:03.032 [DEBUG] [Thread-207251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:12:03.033 [DEBUG] [Thread-207251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:12:03.073 [DEBUG] [Thread-207251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:12:03.073 [DEBUG] [Thread-207251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:12:03.076 [DEBUG] [Thread-207251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:12:03.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:12:03.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:12:03.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:12:03.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:12:03.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:12:03.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:12:03.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:12:03.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:12:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:12:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.591067 -999.00  +23.50  24.67     24   +2.00 1 1 1 1 1   888    0 20.08 -53.00 ----- 24.7 24.7 138.8 29.5 29.3 -30.7 28.9 -29.1 30.5 -28.5 31.4 -31.2
2026-02-15T16:12:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:12:03.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:12:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.591067
2026-02-15T16:12:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:12:03.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:12:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:12:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:12:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:12:03.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:11:34', tmtdew=25.76, humidity=18.14, cloud=0.0, wind=32.11, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:11:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:12:03.098 [DEBUG] [Thread-207251] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:12:03.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:12:03.197 [DEBUG] [Thread-207254] [transport.py] [_log()] starting thread (client mode): 0xa2d698a0
2026-02-15T16:12:03.197 [DEBUG] [Thread-207254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:12:03.215 [DEBUG] [Thread-207254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:12:03.215 [INFO] [Thread-207254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:03.227 [DEBUG] [Thread-207254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] client lang: <none>
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] server lang: <none>
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] kex follows: False
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] Compression: none
2026-02-15T16:12:03.228 [DEBUG] [Thread-207254] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:12:03.283 [DEBUG] [Thread-207254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:12:03.283 [DEBUG] [Thread-207254] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:12:03.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:12:03.285 [DEBUG] [Thread-207254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:12:03.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:12:03.339 [DEBUG] [Thread-207254] [transport.py] [_log()] userauth is OK
2026-02-15T16:12:03.340 [DEBUG] [Thread-207254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:12:03.340 [DEBUG] [Thread-207254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:12:03.340 [DEBUG] [Thread-207254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:12:03.340 [DEBUG] [Thread-207254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:12:03.359 [INFO] [Thread-207254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:12:03.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:12:03.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:12:04.254 [DEBUG] [Thread-207254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:12:04.254 [DEBUG] [Thread-207254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:12:04.303 [DEBUG] [Thread-207254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:12:04.303 [DEBUG] [Thread-207254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:12:04.312 [DEBUG] [Thread-207254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:12:04.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:12:04.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:12:04.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:12:04.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:12:04.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:12:04.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:12:04.350 [DEBUG] [Thread-207254] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:12:17.060 [DEBUG] [Thread-207256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:32.114 [DEBUG] [Thread-207257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:34.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:12:34.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:12:34.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:12:36.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 12, 9), 25.42, 18.34, 0.0, 24.65, 23.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:12:36.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:12:09
2026-02-15T16:12:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:12:37.081 [DEBUG] [Thread-207258] [transport.py] [_log()] starting thread (client mode): 0xa2d6a8c0
2026-02-15T16:12:37.081 [DEBUG] [Thread-207258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:12:37.102 [DEBUG] [Thread-207258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:12:37.102 [INFO] [Thread-207258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:12:37.104 [DEBUG] [Thread-207258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] client lang: <none>
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] server lang: <none>
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] kex follows: False
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] Compression: none
2026-02-15T16:12:37.105 [DEBUG] [Thread-207258] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:12:37.122 [DEBUG] [Thread-207258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:12:37.123 [DEBUG] [Thread-207258] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:12:37.123 [DEBUG] [Thread-207258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:12:37.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:12:37.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:12:37.125 [DEBUG] [Thread-207258] [transport.py] [_log()] userauth is OK
2026-02-15T16:12:37.125 [DEBUG] [Thread-207258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:12:37.126 [DEBUG] [Thread-207258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:12:37.126 [DEBUG] [Thread-207258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:12:37.126 [DEBUG] [Thread-207258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:12:37.145 [INFO] [Thread-207258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:12:37.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:12:37.737 [DEBUG] [Thread-207258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:12:37.738 [DEBUG] [Thread-207258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:12:37.738 [DEBUG] [Thread-207258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:12:37.778 [DEBUG] [Thread-207258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:12:37.779 [DEBUG] [Thread-207258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:12:37.781 [DEBUG] [Thread-207258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:12:37.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:12:37.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:12:37.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:12:37.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:12:37.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:12:37.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:12:37.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:12:37.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:12:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:12:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.591762 -999.00  +23.10  13.50     25   +2.10 1 1 1 1 1   888    0 19.79 -58.44 ----- 13.5 13.5 148.8 23.4 29.1 -30.4 28.8 -30.2 30.4 -28.0 31.1 -29.8
2026-02-15T16:12:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:12:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:12:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.591762
2026-02-15T16:12:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:12:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:12:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:12:37.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:12:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:12:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:12:09', tmtdew=25.42, humidity=18.34, cloud=0.0, wind=24.65, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:12:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:12:37.805 [DEBUG] [Thread-207258] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:12:37.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:12:37.911 [DEBUG] [Thread-207261] [transport.py] [_log()] starting thread (client mode): 0xa2d69990
2026-02-15T16:12:37.912 [DEBUG] [Thread-207261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:12:37.926 [DEBUG] [Thread-207261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:12:37.927 [INFO] [Thread-207261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:37.934 [DEBUG] [Thread-207261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] client lang: <none>
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] server lang: <none>
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] kex follows: False
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] Compression: none
2026-02-15T16:12:37.935 [DEBUG] [Thread-207261] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:12:37.992 [DEBUG] [Thread-207261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:12:37.992 [DEBUG] [Thread-207261] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:12:37.993 [DEBUG] [Thread-207261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:12:37.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:12:37.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:12:38.051 [DEBUG] [Thread-207261] [transport.py] [_log()] userauth is OK
2026-02-15T16:12:38.052 [DEBUG] [Thread-207261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:12:38.052 [DEBUG] [Thread-207261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:12:38.052 [DEBUG] [Thread-207261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:12:38.052 [DEBUG] [Thread-207261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:12:38.079 [INFO] [Thread-207261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:12:38.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:12:38.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:12:38.911 [DEBUG] [Thread-207261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:12:38.911 [DEBUG] [Thread-207261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:12:38.959 [DEBUG] [Thread-207261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:12:38.959 [DEBUG] [Thread-207261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:12:38.968 [DEBUG] [Thread-207261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:12:38.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:12:38.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:12:38.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:12:38.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:12:38.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:12:38.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:12:39.010 [DEBUG] [Thread-207261] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:12:47.149 [DEBUG] [Thread-207263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:56.547 [DEBUG] [Thread-207264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:56.609 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:12:56.611 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:02.202 [DEBUG] [Thread-207265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:09.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:13:09.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:13:09.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:13:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 12, 44), 24.87, 19.07, 0.0, 23.52, 23.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:13:11.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:12:44
2026-02-15T16:13:12.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:13:12.394 [DEBUG] [Thread-207266] [transport.py] [_log()] starting thread (client mode): 0xa2d682b0
2026-02-15T16:13:12.394 [DEBUG] [Thread-207266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:13:12.407 [DEBUG] [Thread-207266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:13:12.407 [INFO] [Thread-207266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] client lang: <none>
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] server lang: <none>
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] kex follows: False
2026-02-15T16:13:12.409 [DEBUG] [Thread-207266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:13:12.410 [DEBUG] [Thread-207266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:13:12.410 [DEBUG] [Thread-207266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:13:12.410 [DEBUG] [Thread-207266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:13:12.410 [DEBUG] [Thread-207266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:13:12.410 [DEBUG] [Thread-207266] [transport.py] [_log()] Compression: none
2026-02-15T16:13:12.410 [DEBUG] [Thread-207266] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:13:12.422 [DEBUG] [Thread-207266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:13:12.422 [DEBUG] [Thread-207266] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:13:12.423 [DEBUG] [Thread-207266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:13:12.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:13:12.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:13:12.424 [DEBUG] [Thread-207266] [transport.py] [_log()] userauth is OK
2026-02-15T16:13:12.424 [DEBUG] [Thread-207266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:13:12.424 [DEBUG] [Thread-207266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:13:12.424 [DEBUG] [Thread-207266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:13:12.424 [DEBUG] [Thread-207266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:13:12.438 [INFO] [Thread-207266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:13:12.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:13:13.052 [DEBUG] [Thread-207266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:13:13.053 [DEBUG] [Thread-207266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:13:13.053 [DEBUG] [Thread-207266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:13:13.094 [DEBUG] [Thread-207266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:13:13.094 [DEBUG] [Thread-207266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:13:13.095 [DEBUG] [Thread-207266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:13:13.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:13:13.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:13:13.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:13:13.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:13:13.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:13:13.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:13:13.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:13:13.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:13:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:13:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.592110 -999.00  +23.20  16.17     25   +2.20 1 1 1 1 1   888    0 19.61 -64.34 ----- 16.2 16.2 162.7 22.9 29.1 -29.6 28.9 -28.4 30.5 -27.3 31.2 -29.5
2026-02-15T16:13:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:13:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:13:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.592110
2026-02-15T16:13:13.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:13:13.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:13:13.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:13:13.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:13:13.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:13:13.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:12:44', tmtdew=24.87, humidity=19.07, cloud=0.0, wind=23.52, temperature=23.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:12:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:13:13.111 [DEBUG] [Thread-207266] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:13:13.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:13:13.211 [DEBUG] [Thread-207269] [transport.py] [_log()] starting thread (client mode): 0xa2d69ff0
2026-02-15T16:13:13.211 [DEBUG] [Thread-207269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:13:13.228 [DEBUG] [Thread-207269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:13:13.228 [INFO] [Thread-207269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:13:13.239 [DEBUG] [Thread-207269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:13:13.240 [DEBUG] [Thread-207269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] client lang: <none>
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] server lang: <none>
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] kex follows: False
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] Compression: none
2026-02-15T16:13:13.241 [DEBUG] [Thread-207269] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:13:13.295 [DEBUG] [Thread-207269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:13:13.296 [DEBUG] [Thread-207269] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:13:13.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:13:13.297 [DEBUG] [Thread-207269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:13:13.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:13:13.352 [DEBUG] [Thread-207269] [transport.py] [_log()] userauth is OK
2026-02-15T16:13:13.352 [DEBUG] [Thread-207269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:13:13.352 [DEBUG] [Thread-207269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:13:13.352 [DEBUG] [Thread-207269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:13:13.353 [DEBUG] [Thread-207269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:13:13.371 [INFO] [Thread-207269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:13:13.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:13:13.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:13:14.189 [DEBUG] [Thread-207269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:13:14.190 [DEBUG] [Thread-207269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:13:14.238 [DEBUG] [Thread-207269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:13:14.238 [DEBUG] [Thread-207269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:13:14.247 [DEBUG] [Thread-207269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:13:14.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:13:14.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:13:14.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:13:14.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:13:14.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:13:14.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:13:14.283 [DEBUG] [Thread-207269] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:13:17.234 [DEBUG] [Thread-207271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:32.296 [DEBUG] [Thread-207272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:44.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:13:44.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:13:44.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:13:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 13, 21), 24.66, 19.35, 0.0, 23.43, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:13:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:13:21
2026-02-15T16:13:46.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:13:46.815 [DEBUG] [Thread-207273] [transport.py] [_log()] starting thread (client mode): 0xa2d78a60
2026-02-15T16:13:46.815 [DEBUG] [Thread-207273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:13:46.835 [DEBUG] [Thread-207273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:13:46.835 [INFO] [Thread-207273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:13:46.838 [DEBUG] [Thread-207273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:13:46.838 [DEBUG] [Thread-207273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:13:46.838 [DEBUG] [Thread-207273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:13:46.838 [DEBUG] [Thread-207273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] client lang: <none>
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] server lang: <none>
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] kex follows: False
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] Compression: none
2026-02-15T16:13:46.839 [DEBUG] [Thread-207273] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:13:46.856 [DEBUG] [Thread-207273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:13:46.856 [DEBUG] [Thread-207273] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:13:46.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:13:46.857 [DEBUG] [Thread-207273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:13:46.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:13:46.901 [DEBUG] [Thread-207273] [transport.py] [_log()] userauth is OK
2026-02-15T16:13:46.901 [DEBUG] [Thread-207273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:13:46.902 [DEBUG] [Thread-207273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:13:46.902 [DEBUG] [Thread-207273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:13:46.902 [DEBUG] [Thread-207273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:13:46.923 [INFO] [Thread-207273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:13:46.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:13:47.335 [DEBUG] [Thread-207275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:47.557 [DEBUG] [Thread-207273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:13:47.557 [DEBUG] [Thread-207273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:13:47.558 [DEBUG] [Thread-207273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:13:47.598 [DEBUG] [Thread-207273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:13:47.599 [DEBUG] [Thread-207273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:13:47.602 [DEBUG] [Thread-207273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:13:47.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:13:47.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:13:47.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:13:47.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:13:47.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:13:47.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:13:47.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:13:47.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:13:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:13:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.592804 -999.00  +23.60  20.66     25   +2.40 1 1 1 1 1   888    0 20.47 -51.53 ----- 20.7 20.7 148.4 28.0 29.1 -30.1 28.9 -30.4 30.6 -28.2 31.3 -29.0
2026-02-15T16:13:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:13:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:13:47.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.592804
2026-02-15T16:13:47.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:13:47.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:13:47.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:13:47.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:13:47.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:13:47.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:13:21', tmtdew=24.66, humidity=19.35, cloud=0.0, wind=23.43, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:13:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:13:47.628 [DEBUG] [Thread-207273] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:13:47.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:13:47.724 [DEBUG] [Thread-207277] [transport.py] [_log()] starting thread (client mode): 0xa2d78eb0
2026-02-15T16:13:47.725 [DEBUG] [Thread-207277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:13:47.739 [DEBUG] [Thread-207277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:13:47.739 [INFO] [Thread-207277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:13:47.746 [DEBUG] [Thread-207277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] client lang: <none>
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] server lang: <none>
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] kex follows: False
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:13:47.747 [DEBUG] [Thread-207277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:13:47.748 [DEBUG] [Thread-207277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:13:47.748 [DEBUG] [Thread-207277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:13:47.748 [DEBUG] [Thread-207277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:13:47.748 [DEBUG] [Thread-207277] [transport.py] [_log()] Compression: none
2026-02-15T16:13:47.748 [DEBUG] [Thread-207277] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:13:47.804 [DEBUG] [Thread-207277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:13:47.805 [DEBUG] [Thread-207277] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:13:47.806 [DEBUG] [Thread-207277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:13:47.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:13:47.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:13:47.860 [DEBUG] [Thread-207277] [transport.py] [_log()] userauth is OK
2026-02-15T16:13:47.861 [DEBUG] [Thread-207277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:13:47.861 [DEBUG] [Thread-207277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:13:47.861 [DEBUG] [Thread-207277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:13:47.861 [DEBUG] [Thread-207277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:13:47.880 [INFO] [Thread-207277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:13:47.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:13:47.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:13:48.707 [DEBUG] [Thread-207277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:13:48.707 [DEBUG] [Thread-207277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:13:48.755 [DEBUG] [Thread-207277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:13:48.756 [DEBUG] [Thread-207277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:13:48.765 [DEBUG] [Thread-207277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:13:48.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:13:48.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:13:48.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:13:48.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:13:48.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:13:48.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:13:48.802 [DEBUG] [Thread-207277] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:13:56.581 [DEBUG] [Thread-207279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:56.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:13:56.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:02.372 [DEBUG] [Thread-207280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:17.426 [DEBUG] [Thread-207281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:18.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:14:18.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:14:18.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:14:21.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 13, 57), 24.62, 19.28, 0.0, 29.43, 23.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:14:21.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:13:57
2026-02-15T16:14:21.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:14:21.521 [DEBUG] [Thread-207282] [transport.py] [_log()] starting thread (client mode): 0xa2d79d80
2026-02-15T16:14:21.521 [DEBUG] [Thread-207282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:14:21.541 [DEBUG] [Thread-207282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:14:21.541 [INFO] [Thread-207282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:14:21.543 [DEBUG] [Thread-207282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:14:21.543 [DEBUG] [Thread-207282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:14:21.543 [DEBUG] [Thread-207282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] client lang: <none>
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] server lang: <none>
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] kex follows: False
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] Compression: none
2026-02-15T16:14:21.544 [DEBUG] [Thread-207282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:14:21.561 [DEBUG] [Thread-207282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:14:21.562 [DEBUG] [Thread-207282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:14:21.562 [DEBUG] [Thread-207282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:14:21.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:14:21.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:14:21.564 [DEBUG] [Thread-207282] [transport.py] [_log()] userauth is OK
2026-02-15T16:14:21.564 [DEBUG] [Thread-207282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:14:21.564 [DEBUG] [Thread-207282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:14:21.564 [DEBUG] [Thread-207282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:14:21.565 [DEBUG] [Thread-207282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:14:21.582 [INFO] [Thread-207282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:14:21.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:14:22.218 [DEBUG] [Thread-207282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:14:22.218 [DEBUG] [Thread-207282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:14:22.218 [DEBUG] [Thread-207282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:14:22.262 [DEBUG] [Thread-207282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:14:22.262 [DEBUG] [Thread-207282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:14:22.266 [DEBUG] [Thread-207282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:14:22.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:14:22.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:14:22.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:14:22.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:14:22.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:14:22.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:14:22.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:14:22.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:14:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:14:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.593151 -999.00  +23.80  17.38     24   +2.40 1 1 1 1 1   888    0 19.88 -49.81 ----- 17.4 17.4 158.8 24.1 29.2 -29.8 28.9 -29.7 30.6 -27.6 31.4 -29.4
2026-02-15T16:14:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:14:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:14:22.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.593151
2026-02-15T16:14:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:14:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:14:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:14:22.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:14:22.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:14:22.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:13:57', tmtdew=24.62, humidity=19.28, cloud=0.0, wind=29.43, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:14:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:14:22.292 [DEBUG] [Thread-207282] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:14:22.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:14:22.390 [DEBUG] [Thread-207285] [transport.py] [_log()] starting thread (client mode): 0xa2d6ab90
2026-02-15T16:14:22.391 [DEBUG] [Thread-207285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:14:22.406 [DEBUG] [Thread-207285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:14:22.406 [INFO] [Thread-207285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:14:22.418 [DEBUG] [Thread-207285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:14:22.418 [DEBUG] [Thread-207285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:14:22.418 [DEBUG] [Thread-207285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:14:22.418 [DEBUG] [Thread-207285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:22.418 [DEBUG] [Thread-207285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:22.418 [DEBUG] [Thread-207285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] client lang: <none>
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] server lang: <none>
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] kex follows: False
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] Compression: none
2026-02-15T16:14:22.419 [DEBUG] [Thread-207285] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:14:22.477 [DEBUG] [Thread-207285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:14:22.477 [DEBUG] [Thread-207285] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:14:22.478 [DEBUG] [Thread-207285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:14:22.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:14:22.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:14:22.533 [DEBUG] [Thread-207285] [transport.py] [_log()] userauth is OK
2026-02-15T16:14:22.534 [DEBUG] [Thread-207285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:14:22.534 [DEBUG] [Thread-207285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:14:22.534 [DEBUG] [Thread-207285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:14:22.534 [DEBUG] [Thread-207285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:14:22.553 [INFO] [Thread-207285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:14:22.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:14:22.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:14:23.336 [DEBUG] [Thread-207285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:14:23.336 [DEBUG] [Thread-207285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:14:23.384 [DEBUG] [Thread-207285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:14:23.384 [DEBUG] [Thread-207285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:14:23.393 [DEBUG] [Thread-207285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:14:23.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:14: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')
2026-02-15T16:14: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
2026-02-15T16:14:23.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:14:23.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:14:23.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:14:23.427 [DEBUG] [Thread-207285] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:14:32.464 [DEBUG] [Thread-207287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:47.519 [DEBUG] [Thread-207288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:53.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:14:53.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:14:53.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:14:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 14, 32), 24.78, 19.09, 0.0, 27.38, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:14:55.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:14:32
2026-02-15T16:14:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:14:55.969 [DEBUG] [Thread-207289] [transport.py] [_log()] starting thread (client mode): 0xa2d682b0
2026-02-15T16:14:55.969 [DEBUG] [Thread-207289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:14:55.989 [DEBUG] [Thread-207289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:14:55.990 [INFO] [Thread-207289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] client lang: <none>
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] server lang: <none>
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] kex follows: False
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] Compression: none
2026-02-15T16:14:55.993 [DEBUG] [Thread-207289] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:14:56.010 [DEBUG] [Thread-207289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:14:56.010 [DEBUG] [Thread-207289] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:14:56.011 [DEBUG] [Thread-207289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:14:56.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:14:56.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:14:56.013 [DEBUG] [Thread-207289] [transport.py] [_log()] userauth is OK
2026-02-15T16:14:56.013 [DEBUG] [Thread-207289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:14:56.013 [DEBUG] [Thread-207289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:14:56.013 [DEBUG] [Thread-207289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:14:56.013 [DEBUG] [Thread-207289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:14:56.034 [INFO] [Thread-207289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:14:56.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:14:56.613 [DEBUG] [Thread-207291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:56.636 [DEBUG] [Thread-207289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:14:56.636 [DEBUG] [Thread-207289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:14:56.636 [DEBUG] [Thread-207289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:14:56.677 [DEBUG] [Thread-207289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:14:56.677 [DEBUG] [Thread-207289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:14:56.681 [DEBUG] [Thread-207289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:14:56.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:14:56.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:14:56.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:14:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:14:56.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:14:56.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:14:56.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:14:56.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:14:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:14:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.593499 -999.00  +23.30  21.97     25   +2.20 1 1 1 1 1   888    0 20.58 -46.75 ----- 22.0 22.0 148.4 29.4 29.2 -30.6 28.9 -29.1 30.5 -29.5 31.2 -31.4
2026-02-15T16:14:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:14:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:14:56.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.593499
2026-02-15T16:14:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:14:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:14:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:14:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:14:56.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:14:56.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:14:32', tmtdew=24.78, humidity=19.09, cloud=0.0, wind=27.38, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:14:38.314', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:14:56.706 [DEBUG] [Thread-207289] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:14:56.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:14:56.802 [DEBUG] [Thread-207293] [transport.py] [_log()] starting thread (client mode): 0xa2d69d20
2026-02-15T16:14:56.802 [DEBUG] [Thread-207293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:14:56.817 [DEBUG] [Thread-207293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:14:56.817 [INFO] [Thread-207293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:14:56.824 [DEBUG] [Thread-207293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] client lang: <none>
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] server lang: <none>
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] kex follows: False
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:14:56.825 [DEBUG] [Thread-207293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:14:56.826 [DEBUG] [Thread-207293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:14:56.826 [DEBUG] [Thread-207293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:14:56.826 [DEBUG] [Thread-207293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:14:56.826 [DEBUG] [Thread-207293] [transport.py] [_log()] Compression: none
2026-02-15T16:14:56.826 [DEBUG] [Thread-207293] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:14:56.885 [DEBUG] [Thread-207293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:14:56.885 [DEBUG] [Thread-207293] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:14:56.886 [DEBUG] [Thread-207293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:14:56.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:14:56.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:14:56.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:56.891 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:14:56.941 [DEBUG] [Thread-207293] [transport.py] [_log()] userauth is OK
2026-02-15T16:14:56.942 [DEBUG] [Thread-207293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:14:56.942 [DEBUG] [Thread-207293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:14:56.942 [DEBUG] [Thread-207293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:14:56.942 [DEBUG] [Thread-207293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:14:56.961 [INFO] [Thread-207293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:14:56.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:14:56.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:14:57.788 [DEBUG] [Thread-207293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:14:57.789 [DEBUG] [Thread-207293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:14:57.836 [DEBUG] [Thread-207293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:14:57.837 [DEBUG] [Thread-207293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:14:57.846 [DEBUG] [Thread-207293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:14:57.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:14:57.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:14:57.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:14:57.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:14:57.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:14:57.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:14:57.885 [DEBUG] [Thread-207293] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:15:02.557 [DEBUG] [Thread-207295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:15:17.606 [DEBUG] [Thread-207296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:15:27.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:15:27.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:15:27.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:15:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 15, 7), 24.48, 19.42, 0.0, 27.26, 23.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:15:29.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:15:07
2026-02-15T16:15:30.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:15:30.203 [DEBUG] [Thread-207297] [transport.py] [_log()] starting thread (client mode): 0xa2d693c0
2026-02-15T16:15:30.203 [DEBUG] [Thread-207297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:15:30.222 [DEBUG] [Thread-207297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:15:30.222 [INFO] [Thread-207297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:15:30.225 [DEBUG] [Thread-207297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:15:30.225 [DEBUG] [Thread-207297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:15:30.225 [DEBUG] [Thread-207297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:15:30.225 [DEBUG] [Thread-207297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] client lang: <none>
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] server lang: <none>
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] kex follows: False
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] Compression: none
2026-02-15T16:15:30.226 [DEBUG] [Thread-207297] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:15:30.242 [DEBUG] [Thread-207297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:15:30.243 [DEBUG] [Thread-207297] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:15:30.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:15:30.244 [DEBUG] [Thread-207297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:15:30.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:15:30.246 [DEBUG] [Thread-207297] [transport.py] [_log()] userauth is OK
2026-02-15T16:15:30.246 [DEBUG] [Thread-207297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:15:30.247 [DEBUG] [Thread-207297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:15:30.247 [DEBUG] [Thread-207297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:15:30.247 [DEBUG] [Thread-207297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:15:30.272 [INFO] [Thread-207297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:15:30.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:15:30.922 [DEBUG] [Thread-207297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:15:30.922 [DEBUG] [Thread-207297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:15:30.922 [DEBUG] [Thread-207297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:15:30.963 [DEBUG] [Thread-207297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:15:30.964 [DEBUG] [Thread-207297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:15:30.967 [DEBUG] [Thread-207297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:15:30.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:15:30.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:15:30.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:15:30.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:15:30.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:15:30.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:15:30.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:15:30.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:15:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:15:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.593845 -999.00  +22.90  16.39     25   +2.30 1 1 1 1 1   888    0 20.17 -44.36 ----- 16.4 16.4 138.4 24.1 29.1 -30.0 28.9 -28.8 30.5 -28.2 31.1 -30.9
2026-02-15T16:15:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:15:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:15:30.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.593845
2026-02-15T16:15:30.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:15:30.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:15:30.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:15:30.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:15:30.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:15:30.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:15:07', tmtdew=24.48, humidity=19.42, cloud=0.0, wind=27.26, temperature=23.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:15:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:15:30.995 [DEBUG] [Thread-207297] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:15:31.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:15:31.090 [DEBUG] [Thread-207300] [transport.py] [_log()] starting thread (client mode): 0xa2d786a0
2026-02-15T16:15:31.091 [DEBUG] [Thread-207300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:15:31.105 [DEBUG] [Thread-207300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:15:31.106 [INFO] [Thread-207300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:15:31.113 [DEBUG] [Thread-207300] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] client lang: <none>
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] server lang: <none>
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] kex follows: False
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] Compression: none
2026-02-15T16:15:31.114 [DEBUG] [Thread-207300] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:15:31.173 [DEBUG] [Thread-207300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:15:31.174 [DEBUG] [Thread-207300] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:15:31.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:15:31.175 [DEBUG] [Thread-207300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:15:31.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:15:31.230 [DEBUG] [Thread-207300] [transport.py] [_log()] userauth is OK
2026-02-15T16:15:31.230 [DEBUG] [Thread-207300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:15:31.231 [DEBUG] [Thread-207300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:15:31.231 [DEBUG] [Thread-207300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:15:31.231 [DEBUG] [Thread-207300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:15:31.250 [INFO] [Thread-207300] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:15:31.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:15:31.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:15:32.081 [DEBUG] [Thread-207300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:15:32.081 [DEBUG] [Thread-207300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:15:32.129 [DEBUG] [Thread-207300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:15:32.129 [DEBUG] [Thread-207300] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:15:32.139 [DEBUG] [Thread-207300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:15:32.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:15:32.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:15:32.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:15:32.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:15:32.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:15:32.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:15:32.176 [DEBUG] [Thread-207300] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:15:32.641 [DEBUG] [Thread-207302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:15:47.700 [DEBUG] [Thread-207303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:15:56.687 [DEBUG] [Thread-207304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:15:57.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:15:57.034 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:02.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:16:02.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:16:02.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:16:02.735 [DEBUG] [Thread-207305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 15, 43), 24.23, 19.88, 0.0, 25.48, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:16:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:15:43
2026-02-15T16:16:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:16:04.720 [DEBUG] [Thread-207306] [transport.py] [_log()] starting thread (client mode): 0xa2d79420
2026-02-15T16:16:04.720 [DEBUG] [Thread-207306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:16:04.739 [DEBUG] [Thread-207306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:16:04.739 [INFO] [Thread-207306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] client lang: <none>
2026-02-15T16:16:04.743 [DEBUG] [Thread-207306] [transport.py] [_log()] server lang: <none>
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] kex follows: False
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] Compression: none
2026-02-15T16:16:04.744 [DEBUG] [Thread-207306] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:16:04.760 [DEBUG] [Thread-207306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:16:04.761 [DEBUG] [Thread-207306] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:16:04.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:16:04.762 [DEBUG] [Thread-207306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:16:04.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:16:04.763 [DEBUG] [Thread-207306] [transport.py] [_log()] userauth is OK
2026-02-15T16:16:04.764 [DEBUG] [Thread-207306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:16:04.764 [DEBUG] [Thread-207306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:16:04.764 [DEBUG] [Thread-207306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:16:04.764 [DEBUG] [Thread-207306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:16:04.788 [INFO] [Thread-207306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:16:04.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:16:05.434 [DEBUG] [Thread-207306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:16:05.435 [DEBUG] [Thread-207306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:16:05.435 [DEBUG] [Thread-207306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:16:05.475 [DEBUG] [Thread-207306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:16:05.475 [DEBUG] [Thread-207306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:16:05.478 [DEBUG] [Thread-207306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:16:05.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:16:05.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:16:05.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:16:05.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:16:05.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:16:05.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:16:05.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:16:05.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:16:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:16:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.594193 -999.00  +23.20  19.26     25   +2.20 1 1 1 1 1   888    0 19.60 -47.16 ----- 19.3 19.3 140.0 27.8 29.1 -29.4 28.9 -29.3 30.6 -29.0 31.2 -30.3
2026-02-15T16:16:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:16:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:16:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.594193
2026-02-15T16:16:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:16:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:16:05.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:16:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:16:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:16:05.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:15:43', tmtdew=24.23, humidity=19.88, cloud=0.0, wind=25.48, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:15:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:16:05.504 [DEBUG] [Thread-207306] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:16:05.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:16:05.598 [DEBUG] [Thread-207309] [transport.py] [_log()] starting thread (client mode): 0xa2d7b220
2026-02-15T16:16:05.599 [DEBUG] [Thread-207309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:16:05.613 [DEBUG] [Thread-207309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:16:05.613 [INFO] [Thread-207309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:16:05.621 [DEBUG] [Thread-207309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] client lang: <none>
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] server lang: <none>
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] kex follows: False
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:16:05.622 [DEBUG] [Thread-207309] [transport.py] [_log()] Compression: none
2026-02-15T16:16:05.623 [DEBUG] [Thread-207309] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:16:05.677 [DEBUG] [Thread-207309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:16:05.678 [DEBUG] [Thread-207309] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:16:05.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:16:05.679 [DEBUG] [Thread-207309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:16:05.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:16:05.733 [DEBUG] [Thread-207309] [transport.py] [_log()] userauth is OK
2026-02-15T16:16:05.733 [DEBUG] [Thread-207309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:16:05.733 [DEBUG] [Thread-207309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:16:05.733 [DEBUG] [Thread-207309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:16:05.734 [DEBUG] [Thread-207309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:16:05.747 [INFO] [Thread-207309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:16:05.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:16:05.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:16:06.627 [DEBUG] [Thread-207309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:16:06.628 [DEBUG] [Thread-207309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:16:06.675 [DEBUG] [Thread-207309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:16:06.675 [DEBUG] [Thread-207309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:16:06.685 [DEBUG] [Thread-207309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:16:06.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:16:06.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:16:06.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:16:06.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:16:06.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:16:06.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:16:06.721 [DEBUG] [Thread-207309] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:16:17.769 [DEBUG] [Thread-207311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:32.825 [DEBUG] [Thread-207312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:36.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:16:36.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:16:36.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:16:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 16, 19), 24.2, 19.93, 0.0, 24.56, 23.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:16:38.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:16:19
2026-02-15T16:16:38.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:16:39.088 [DEBUG] [Thread-207313] [transport.py] [_log()] starting thread (client mode): 0xa2d6a710
2026-02-15T16:16:39.088 [DEBUG] [Thread-207313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:16:39.109 [DEBUG] [Thread-207313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:16:39.109 [INFO] [Thread-207313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:16:39.111 [DEBUG] [Thread-207313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:16:39.111 [DEBUG] [Thread-207313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] client lang: <none>
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] server lang: <none>
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] kex follows: False
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:16:39.112 [DEBUG] [Thread-207313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:16:39.113 [DEBUG] [Thread-207313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:16:39.113 [DEBUG] [Thread-207313] [transport.py] [_log()] Compression: none
2026-02-15T16:16:39.113 [DEBUG] [Thread-207313] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:16:39.129 [DEBUG] [Thread-207313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:16:39.130 [DEBUG] [Thread-207313] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:16:39.130 [DEBUG] [Thread-207313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:16:39.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:16:39.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:16:39.132 [DEBUG] [Thread-207313] [transport.py] [_log()] userauth is OK
2026-02-15T16:16:39.132 [DEBUG] [Thread-207313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:16:39.132 [DEBUG] [Thread-207313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:16:39.133 [DEBUG] [Thread-207313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:16:39.133 [DEBUG] [Thread-207313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:16:39.158 [INFO] [Thread-207313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:16:39.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:16:39.803 [DEBUG] [Thread-207313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:16:39.803 [DEBUG] [Thread-207313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:16:39.804 [DEBUG] [Thread-207313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:16:39.844 [DEBUG] [Thread-207313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:16:39.845 [DEBUG] [Thread-207313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:16:39.848 [DEBUG] [Thread-207313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:16:39.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:16:39.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:16:39.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:16:39.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:16:39.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:16:39.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:16:39.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:16:39.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:16:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:16:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.594540 -999.00  +23.20  15.88     25   +2.40 1 1 1 1 1   888    0 20.30 -44.03 ----- 15.9 15.9 166.8 29.1 29.0 -30.5 28.8 -29.1 30.4 -29.0 31.1 -30.3
2026-02-15T16:16:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:16:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:16:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.594540
2026-02-15T16:16:39.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:16:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:16:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:16:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:16:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:16:39.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:16:19', tmtdew=24.2, humidity=19.93, cloud=0.0, wind=24.56, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:16:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:16:39.875 [DEBUG] [Thread-207313] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:16:39.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:16:39.981 [DEBUG] [Thread-207316] [transport.py] [_log()] starting thread (client mode): 0xa2d19cc0
2026-02-15T16:16:39.981 [DEBUG] [Thread-207316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:16:39.996 [DEBUG] [Thread-207316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:16:39.996 [INFO] [Thread-207316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:16:40.004 [DEBUG] [Thread-207316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:16:40.004 [DEBUG] [Thread-207316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:16:40.004 [DEBUG] [Thread-207316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:16:40.004 [DEBUG] [Thread-207316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] client lang: <none>
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] server lang: <none>
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] kex follows: False
2026-02-15T16:16:40.005 [DEBUG] [Thread-207316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:16:40.006 [DEBUG] [Thread-207316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:16:40.006 [DEBUG] [Thread-207316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:16:40.006 [DEBUG] [Thread-207316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:16:40.006 [DEBUG] [Thread-207316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:16:40.006 [DEBUG] [Thread-207316] [transport.py] [_log()] Compression: none
2026-02-15T16:16:40.007 [DEBUG] [Thread-207316] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:16:40.063 [DEBUG] [Thread-207316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:16:40.064 [DEBUG] [Thread-207316] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:16:40.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:16:40.065 [DEBUG] [Thread-207316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:16:40.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:16:40.123 [DEBUG] [Thread-207316] [transport.py] [_log()] userauth is OK
2026-02-15T16:16:40.123 [DEBUG] [Thread-207316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:16:40.123 [DEBUG] [Thread-207316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:16:40.123 [DEBUG] [Thread-207316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:16:40.124 [DEBUG] [Thread-207316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:16:40.142 [INFO] [Thread-207316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:16:40.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:16:40.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:16:40.963 [DEBUG] [Thread-207316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:16:40.963 [DEBUG] [Thread-207316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:16:41.011 [DEBUG] [Thread-207316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:16:41.011 [DEBUG] [Thread-207316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:16:41.025 [DEBUG] [Thread-207316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:16:41.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:16:41.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:16:41.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:16:41.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:16:41.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:16:41.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:16:41.064 [DEBUG] [Thread-207316] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:16:47.862 [DEBUG] [Thread-207318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:56.724 [DEBUG] [Thread-207319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:57.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:16:57.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:02.913 [DEBUG] [Thread-207320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:11.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:17:11.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:17:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:17:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 16, 54), 24.49, 19.42, 0.0, 27.6, 23.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:17:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:16:54
2026-02-15T16:17:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:17:13.467 [DEBUG] [Thread-207321] [transport.py] [_log()] starting thread (client mode): 0xa2d18040
2026-02-15T16:17:13.467 [DEBUG] [Thread-207321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:17:13.487 [DEBUG] [Thread-207321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:17:13.487 [INFO] [Thread-207321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:17:13.492 [DEBUG] [Thread-207321] [transport.py] [_log()] client lang: <none>
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] server lang: <none>
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] kex follows: False
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] Compression: none
2026-02-15T16:17:13.493 [DEBUG] [Thread-207321] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:17:13.508 [DEBUG] [Thread-207321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:17:13.508 [DEBUG] [Thread-207321] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:17:13.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:17:13.509 [DEBUG] [Thread-207321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:17:13.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:17:13.512 [DEBUG] [Thread-207321] [transport.py] [_log()] userauth is OK
2026-02-15T16:17:13.512 [DEBUG] [Thread-207321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:17:13.512 [DEBUG] [Thread-207321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:17:13.512 [DEBUG] [Thread-207321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:17:13.512 [DEBUG] [Thread-207321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:17:13.538 [INFO] [Thread-207321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:17:13.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:17:14.129 [DEBUG] [Thread-207321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:17:14.130 [DEBUG] [Thread-207321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:17:14.130 [DEBUG] [Thread-207321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:17:14.170 [DEBUG] [Thread-207321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:17:14.171 [DEBUG] [Thread-207321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:17:14.177 [DEBUG] [Thread-207321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:17:14.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:17:14.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:17:14.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:17:14.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:17:14.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:17:14.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:17:14.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:17:14.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:17:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:17:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.594887 -999.00  +23.10  16.03     25   +2.40 1 1 1 1 1   888    0 20.17 -43.71 ----- 16.0 16.0 153.8 28.9 29.0 -30.2 28.6 -31.0 30.4 -28.8 31.1 -30.8
2026-02-15T16:17:14.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:17:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:17:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.594887
2026-02-15T16:17:14.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:17:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:17:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:17:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:17:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:17:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:16:54', tmtdew=24.49, humidity=19.42, cloud=0.0, wind=27.6, temperature=23.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:16:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:17:14.198 [DEBUG] [Thread-207321] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:17:14.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:17:14.293 [DEBUG] [Thread-207324] [transport.py] [_log()] starting thread (client mode): 0xa2d79ae0
2026-02-15T16:17:14.293 [DEBUG] [Thread-207324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:17:14.308 [DEBUG] [Thread-207324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:17:14.308 [INFO] [Thread-207324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:17:14.315 [DEBUG] [Thread-207324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] client lang: <none>
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] server lang: <none>
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] kex follows: False
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:17:14.316 [DEBUG] [Thread-207324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:17:14.317 [DEBUG] [Thread-207324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:17:14.317 [DEBUG] [Thread-207324] [transport.py] [_log()] Compression: none
2026-02-15T16:17:14.317 [DEBUG] [Thread-207324] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:17:14.373 [DEBUG] [Thread-207324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:17:14.373 [DEBUG] [Thread-207324] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:17:14.374 [DEBUG] [Thread-207324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:17:14.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:17:14.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:17:14.430 [DEBUG] [Thread-207324] [transport.py] [_log()] userauth is OK
2026-02-15T16:17:14.430 [DEBUG] [Thread-207324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:17:14.431 [DEBUG] [Thread-207324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:17:14.431 [DEBUG] [Thread-207324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:17:14.431 [DEBUG] [Thread-207324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:17:14.451 [INFO] [Thread-207324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:17:14.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:17:14.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:17:15.258 [DEBUG] [Thread-207324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:17:15.259 [DEBUG] [Thread-207324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:17:15.307 [DEBUG] [Thread-207324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:17:15.307 [DEBUG] [Thread-207324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:17:15.316 [DEBUG] [Thread-207324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:17:15.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:17: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')
2026-02-15T16:17:15.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:17:15.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:17:15.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:17:15.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:17:15.352 [DEBUG] [Thread-207324] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:17:17.947 [DEBUG] [Thread-207326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:32.996 [DEBUG] [Thread-207327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:45.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:17:45.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:17:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:17:47.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 17, 29), 24.53, 19.38, 0.0, 24.69, 23.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:17:47.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:17:29
2026-02-15T16:17:47.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:17:47.878 [DEBUG] [Thread-207328] [transport.py] [_log()] starting thread (client mode): 0xa2d7a080
2026-02-15T16:17:47.878 [DEBUG] [Thread-207328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:17:47.898 [DEBUG] [Thread-207328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:17:47.898 [INFO] [Thread-207328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] client lang: <none>
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] server lang: <none>
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] kex follows: False
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] Compression: none
2026-02-15T16:17:47.902 [DEBUG] [Thread-207328] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:17:47.920 [DEBUG] [Thread-207328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:17:47.920 [DEBUG] [Thread-207328] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:17:47.920 [DEBUG] [Thread-207328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:17:47.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:17:47.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:17:47.922 [DEBUG] [Thread-207328] [transport.py] [_log()] userauth is OK
2026-02-15T16:17:47.922 [DEBUG] [Thread-207328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:17:47.922 [DEBUG] [Thread-207328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:17:47.922 [DEBUG] [Thread-207328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:17:47.922 [DEBUG] [Thread-207328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:17:47.935 [INFO] [Thread-207328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:17:47.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:17:48.032 [DEBUG] [Thread-207330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:48.537 [DEBUG] [Thread-207328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:17:48.538 [DEBUG] [Thread-207328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:17:48.538 [DEBUG] [Thread-207328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:17:48.578 [DEBUG] [Thread-207328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:17:48.578 [DEBUG] [Thread-207328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:17:48.581 [DEBUG] [Thread-207328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:17:48.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:17:48.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:17:48.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:17:48.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:17:48.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:17:48.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:17:48.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:17:48.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:17:48.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.595235 -999.00  +23.40  14.52     25   +2.40 1 1 1 1 1   888    0 20.27 -44.21 ----- 14.5 14.5 163.6 23.3 29.1 -30.2 28.8 -28.1 30.5 -27.3 31.1 -29.2
2026-02-15T16:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.595235
2026-02-15T16:17:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:17:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:17:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:17:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:17:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:17:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:17:29', tmtdew=24.53, humidity=19.38, cloud=0.0, wind=24.69, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:17:08.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:17:48.607 [DEBUG] [Thread-207328] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:17:48.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:17:48.705 [DEBUG] [Thread-207332] [transport.py] [_log()] starting thread (client mode): 0xa2d7af80
2026-02-15T16:17:48.705 [DEBUG] [Thread-207332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:17:48.719 [DEBUG] [Thread-207332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:17:48.720 [INFO] [Thread-207332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] client lang: <none>
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] server lang: <none>
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] kex follows: False
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:17:48.728 [DEBUG] [Thread-207332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:17:48.729 [DEBUG] [Thread-207332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:17:48.729 [DEBUG] [Thread-207332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:17:48.729 [DEBUG] [Thread-207332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:17:48.729 [DEBUG] [Thread-207332] [transport.py] [_log()] Compression: none
2026-02-15T16:17:48.729 [DEBUG] [Thread-207332] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:17:48.788 [DEBUG] [Thread-207332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:17:48.788 [DEBUG] [Thread-207332] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:17:48.789 [DEBUG] [Thread-207332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:17:48.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:17:48.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:17:48.847 [DEBUG] [Thread-207332] [transport.py] [_log()] userauth is OK
2026-02-15T16:17:48.847 [DEBUG] [Thread-207332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:17:48.847 [DEBUG] [Thread-207332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:17:48.847 [DEBUG] [Thread-207332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:17:48.848 [DEBUG] [Thread-207332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:17:48.866 [INFO] [Thread-207332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:17:48.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:17:48.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:17:49.690 [DEBUG] [Thread-207332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:17:49.691 [DEBUG] [Thread-207332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:17:49.738 [DEBUG] [Thread-207332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:17:49.739 [DEBUG] [Thread-207332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:17:49.748 [DEBUG] [Thread-207332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:17:49.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:17: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')
2026-02-15T16:17: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
2026-02-15T16:17:49.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:17:49.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:17:49.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:17:49.785 [DEBUG] [Thread-207332] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:17:56.759 [DEBUG] [Thread-207334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:57.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:17:57.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:03.068 [DEBUG] [Thread-207335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:18.117 [DEBUG] [Thread-207336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:19.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:18:19.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:18:19.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:18:21.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 18, 4), 24.43, 19.5, 0.0, 24.91, 23.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:18:21.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:18:04
2026-02-15T16:18:22.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:18:22.229 [DEBUG] [Thread-207337] [transport.py] [_log()] starting thread (client mode): 0xa2d1ad70
2026-02-15T16:18:22.229 [DEBUG] [Thread-207337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:18:22.250 [DEBUG] [Thread-207337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:18:22.250 [INFO] [Thread-207337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] client lang: <none>
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] server lang: <none>
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] kex follows: False
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] Compression: none
2026-02-15T16:18:22.253 [DEBUG] [Thread-207337] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:18:22.270 [DEBUG] [Thread-207337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:18:22.271 [DEBUG] [Thread-207337] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:18:22.271 [DEBUG] [Thread-207337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:18:22.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:18:22.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:18:22.273 [DEBUG] [Thread-207337] [transport.py] [_log()] userauth is OK
2026-02-15T16:18:22.273 [DEBUG] [Thread-207337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:18:22.274 [DEBUG] [Thread-207337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:18:22.274 [DEBUG] [Thread-207337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:18:22.274 [DEBUG] [Thread-207337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:18:22.310 [INFO] [Thread-207337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:18:22.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:18:22.948 [DEBUG] [Thread-207337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:18:22.948 [DEBUG] [Thread-207337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:18:22.949 [DEBUG] [Thread-207337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:18:22.989 [DEBUG] [Thread-207337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:18:22.989 [DEBUG] [Thread-207337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:18:22.992 [DEBUG] [Thread-207337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:18:23.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:18:23.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:18:23.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:18:23.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:18:23.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:18:23.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:18:23.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:18:23.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:18:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:18:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.595929 -999.00  +23.10  16.70     25   +2.40 1 1 1 1 1   888    0 20.31 -43.25 ----- 16.7 16.7 153.8 29.3 29.0 -30.8 28.6 -29.4 30.3 -28.7 31.0 -31.0
2026-02-15T16:18:23.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:18:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:18:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.595929
2026-02-15T16:18:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:18:23.015 [DEBUG] [Thread-207337] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:18:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:18:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:18:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:18:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:18:23.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:18:04', tmtdew=24.43, humidity=19.5, cloud=0.0, wind=24.91, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:18:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:18:23.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:18:23.128 [DEBUG] [Thread-207340] [transport.py] [_log()] starting thread (client mode): 0xa2d1bc40
2026-02-15T16:18:23.128 [DEBUG] [Thread-207340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:18:23.144 [DEBUG] [Thread-207340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:18:23.144 [INFO] [Thread-207340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:18:23.152 [DEBUG] [Thread-207340] [transport.py] [_log()] client lang: <none>
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] server lang: <none>
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] kex follows: False
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] Compression: none
2026-02-15T16:18:23.153 [DEBUG] [Thread-207340] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:18:23.210 [DEBUG] [Thread-207340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:18:23.210 [DEBUG] [Thread-207340] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:18:23.211 [DEBUG] [Thread-207340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:18:23.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:18:23.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:18:23.267 [DEBUG] [Thread-207340] [transport.py] [_log()] userauth is OK
2026-02-15T16:18:23.267 [DEBUG] [Thread-207340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:18:23.268 [DEBUG] [Thread-207340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:18:23.268 [DEBUG] [Thread-207340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:18:23.268 [DEBUG] [Thread-207340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:18:23.287 [INFO] [Thread-207340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:18:23.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:18:23.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:18:24.157 [DEBUG] [Thread-207340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:18:24.157 [DEBUG] [Thread-207340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:18:24.205 [DEBUG] [Thread-207340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:18:24.206 [DEBUG] [Thread-207340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:18:24.215 [DEBUG] [Thread-207340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:18:24.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:18:24.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:18:24.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:18:24.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:18:24.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:18:24.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:18:24.251 [DEBUG] [Thread-207340] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:18:33.152 [DEBUG] [Thread-207342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:48.201 [DEBUG] [Thread-207343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:54.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:18:54.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:18:54.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:18:56.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 18, 39), 25.14, 18.97, 0.0, 22.9, 24.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:18:56.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:18:39
2026-02-15T16:18:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:18:56.692 [DEBUG] [Thread-207344] [transport.py] [_log()] starting thread (client mode): 0xa2d19b70
2026-02-15T16:18:56.692 [DEBUG] [Thread-207344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:18:56.712 [DEBUG] [Thread-207344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:18:56.713 [INFO] [Thread-207344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:18:56.716 [DEBUG] [Thread-207344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:18:56.716 [DEBUG] [Thread-207344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] client lang: <none>
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] server lang: <none>
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] kex follows: False
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:18:56.717 [DEBUG] [Thread-207344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:18:56.718 [DEBUG] [Thread-207344] [transport.py] [_log()] Compression: none
2026-02-15T16:18:56.718 [DEBUG] [Thread-207344] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:18:56.738 [DEBUG] [Thread-207344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:18:56.739 [DEBUG] [Thread-207344] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:18:56.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:18:56.740 [DEBUG] [Thread-207344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:18:56.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:18:56.742 [DEBUG] [Thread-207344] [transport.py] [_log()] userauth is OK
2026-02-15T16:18:56.742 [DEBUG] [Thread-207344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:18:56.742 [DEBUG] [Thread-207344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:18:56.742 [DEBUG] [Thread-207344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:18:56.742 [DEBUG] [Thread-207344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:18:56.767 [INFO] [Thread-207344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:18:56.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:18:56.797 [DEBUG] [Thread-207346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:57.412 [DEBUG] [Thread-207344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:18:57.412 [DEBUG] [Thread-207344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:18:57.413 [DEBUG] [Thread-207344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:18:57.454 [DEBUG] [Thread-207344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:18:57.454 [DEBUG] [Thread-207344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:18:57.457 [DEBUG] [Thread-207344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:18:57.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:57.468 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:18:57.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:18:57.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:18:57.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:18:57.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:18:57.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:18:57.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:18:57.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:18:57.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:18:57.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:18:57.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.596276 -999.00  +23.00  16.59     26   +2.50 1 1 1 1 1   888    0 19.91 -45.60 ----- 16.6 16.6 133.0 27.3 29.0 -30.2 28.8 -29.3 30.3 -28.1 31.0 -29.6
2026-02-15T16:18:57.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:18:57.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:18:57.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.596276
2026-02-15T16:18:57.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:18:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:18:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:18:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:18:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:18:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:18:39', tmtdew=25.14, humidity=18.97, cloud=0.0, wind=22.9, temperature=24.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:18:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:18:57.486 [DEBUG] [Thread-207344] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:18:57.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:18:57.580 [DEBUG] [Thread-207348] [transport.py] [_log()] starting thread (client mode): 0xa2d19990
2026-02-15T16:18:57.581 [DEBUG] [Thread-207348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:18:57.599 [DEBUG] [Thread-207348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:18:57.599 [INFO] [Thread-207348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:18:57.607 [DEBUG] [Thread-207348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] client lang: <none>
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] server lang: <none>
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] kex follows: False
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:18:57.608 [DEBUG] [Thread-207348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:18:57.609 [DEBUG] [Thread-207348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:18:57.609 [DEBUG] [Thread-207348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:18:57.609 [DEBUG] [Thread-207348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:18:57.609 [DEBUG] [Thread-207348] [transport.py] [_log()] Compression: none
2026-02-15T16:18:57.609 [DEBUG] [Thread-207348] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:18:57.667 [DEBUG] [Thread-207348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:18:57.668 [DEBUG] [Thread-207348] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:18:57.669 [DEBUG] [Thread-207348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:18:57.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:18:57.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:18:57.723 [DEBUG] [Thread-207348] [transport.py] [_log()] userauth is OK
2026-02-15T16:18:57.724 [DEBUG] [Thread-207348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:18:57.724 [DEBUG] [Thread-207348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:18:57.724 [DEBUG] [Thread-207348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:18:57.724 [DEBUG] [Thread-207348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:18:57.743 [INFO] [Thread-207348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:18:57.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:18:57.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:18:58.553 [DEBUG] [Thread-207348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:18:58.554 [DEBUG] [Thread-207348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:18:58.601 [DEBUG] [Thread-207348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:18:58.601 [DEBUG] [Thread-207348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:18:58.611 [DEBUG] [Thread-207348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:18:58.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:18:58.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:18:58.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:18:58.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:18:58.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:18:58.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:18:58.647 [DEBUG] [Thread-207348] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:19:03.237 [DEBUG] [Thread-207350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:19:18.286 [DEBUG] [Thread-207351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:19:28.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:19:28.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:19:28.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:19:30.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 19, 14), 24.54, 19.52, 0.0, 22.67, 23.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:19:30.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:19:14
2026-02-15T16:19:30.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:19:31.042 [DEBUG] [Thread-207352] [transport.py] [_log()] starting thread (client mode): 0xa2d4fb50
2026-02-15T16:19:31.042 [DEBUG] [Thread-207352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:19:31.061 [DEBUG] [Thread-207352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:19:31.061 [INFO] [Thread-207352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:19:31.064 [DEBUG] [Thread-207352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:19:31.064 [DEBUG] [Thread-207352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] client lang: <none>
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] server lang: <none>
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] kex follows: False
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:19:31.065 [DEBUG] [Thread-207352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:19:31.066 [DEBUG] [Thread-207352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:19:31.066 [DEBUG] [Thread-207352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:19:31.066 [DEBUG] [Thread-207352] [transport.py] [_log()] Compression: none
2026-02-15T16:19:31.066 [DEBUG] [Thread-207352] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:19:31.085 [DEBUG] [Thread-207352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:19:31.085 [DEBUG] [Thread-207352] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:19:31.086 [DEBUG] [Thread-207352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:19:31.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:19:31.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:19:31.088 [DEBUG] [Thread-207352] [transport.py] [_log()] userauth is OK
2026-02-15T16:19:31.088 [DEBUG] [Thread-207352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:19:31.088 [DEBUG] [Thread-207352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:19:31.088 [DEBUG] [Thread-207352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:19:31.088 [DEBUG] [Thread-207352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:19:31.124 [INFO] [Thread-207352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:19:31.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:19:31.772 [DEBUG] [Thread-207352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:19:31.772 [DEBUG] [Thread-207352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:19:31.773 [DEBUG] [Thread-207352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:19:31.813 [DEBUG] [Thread-207352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:19:31.813 [DEBUG] [Thread-207352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:19:31.816 [DEBUG] [Thread-207352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:19:31.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:19:31.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:19:31.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:19:31.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:19:31.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:19:31.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:19:31.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:19:31.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.596623 -999.00  +23.10  19.71     25   +2.30 1 1 1 1 1   888    0 20.50 -50.84 ----- 19.7 19.7 149.6 28.1 28.9 -30.0 28.6 -29.4 30.2 -28.2 30.9 -30.4
2026-02-15T16:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:19:31.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.596623
2026-02-15T16:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:19:31.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:19:31.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:19:14', tmtdew=24.54, humidity=19.52, cloud=0.0, wind=22.67, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:19:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:19:31.842 [DEBUG] [Thread-207352] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:19:31.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:19:31.938 [DEBUG] [Thread-207355] [transport.py] [_log()] starting thread (client mode): 0xa2d4ec20
2026-02-15T16:19:31.938 [DEBUG] [Thread-207355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:19:31.952 [DEBUG] [Thread-207355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:19:31.952 [INFO] [Thread-207355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:19:31.959 [DEBUG] [Thread-207355] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] client lang: <none>
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] server lang: <none>
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] kex follows: False
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] Compression: none
2026-02-15T16:19:31.960 [DEBUG] [Thread-207355] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:19:32.018 [DEBUG] [Thread-207355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:19:32.019 [DEBUG] [Thread-207355] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:19:32.019 [DEBUG] [Thread-207355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:19:32.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:19:32.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:19:32.075 [DEBUG] [Thread-207355] [transport.py] [_log()] userauth is OK
2026-02-15T16:19:32.076 [DEBUG] [Thread-207355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:19:32.076 [DEBUG] [Thread-207355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:19:32.076 [DEBUG] [Thread-207355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:19:32.076 [DEBUG] [Thread-207355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:19:32.097 [INFO] [Thread-207355] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:19:32.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:19:32.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:19:32.937 [DEBUG] [Thread-207355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:19:32.937 [DEBUG] [Thread-207355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:19:32.987 [DEBUG] [Thread-207355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:19:32.987 [DEBUG] [Thread-207355] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:19:33.000 [DEBUG] [Thread-207355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:19:33.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:19:33.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:19: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') -> 00000000
2026-02-15T16:19:33.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:19:33.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:19:33.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:19:33.035 [DEBUG] [Thread-207355] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:19:33.318 [DEBUG] [Thread-207357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:19:48.366 [DEBUG] [Thread-207358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:19:56.842 [DEBUG] [Thread-207359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:19:57.611 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:19:57.612 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:03.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:20:03.057 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:20:03.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:20:03.402 [DEBUG] [Thread-207360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:05.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 19, 50), 24.06, 20.38, 0.0, 20.77, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:20:05.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:19:50
2026-02-15T16:20:05.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:20:05.538 [DEBUG] [Thread-207361] [transport.py] [_log()] starting thread (client mode): 0xa2d4ee90
2026-02-15T16:20:05.538 [DEBUG] [Thread-207361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:20:05.560 [DEBUG] [Thread-207361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:20:05.560 [INFO] [Thread-207361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] client lang: <none>
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] server lang: <none>
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] kex follows: False
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] Compression: none
2026-02-15T16:20:05.564 [DEBUG] [Thread-207361] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:20:05.581 [DEBUG] [Thread-207361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:20:05.581 [DEBUG] [Thread-207361] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:20:05.582 [DEBUG] [Thread-207361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:20:05.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:20:05.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:20:05.584 [DEBUG] [Thread-207361] [transport.py] [_log()] userauth is OK
2026-02-15T16:20:05.584 [DEBUG] [Thread-207361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:20:05.584 [DEBUG] [Thread-207361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:20:05.584 [DEBUG] [Thread-207361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:20:05.584 [DEBUG] [Thread-207361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:20:05.608 [INFO] [Thread-207361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:20:05.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:20:12.620 [DEBUG] [Thread-207361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:20:12.620 [DEBUG] [Thread-207361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:20:12.621 [DEBUG] [Thread-207361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:20:12.661 [DEBUG] [Thread-207361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:20:12.661 [DEBUG] [Thread-207361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:20:12.665 [DEBUG] [Thread-207361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:20:12.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:20:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:20:12.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:20:12.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:20:12.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:20:12.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:20:12.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:20:12.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:20:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:20:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.596971 -999.00  +23.00  23.04     25   +2.40 1 1 1 1 1   888    0 19.11 -55.73 ----- 23.0 23.0 166.2 25.4 28.8 -30.4 28.4 -29.0 30.1 -29.1 30.9 -31.9
2026-02-15T16:20:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:20:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:20:12.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.596971
2026-02-15T16:20:12.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:20:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:20:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:20:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:20:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:20:12.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:19:50', tmtdew=24.06, humidity=20.38, cloud=0.0, wind=20.77, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:19:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:20:12.729 [DEBUG] [Thread-207361] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:20:12.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:20:12.815 [DEBUG] [Thread-207364] [transport.py] [_log()] starting thread (client mode): 0xa2d4f310
2026-02-15T16:20:12.815 [DEBUG] [Thread-207364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:20:12.829 [DEBUG] [Thread-207364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:20:12.829 [INFO] [Thread-207364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:20:12.837 [DEBUG] [Thread-207364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:20:12.837 [DEBUG] [Thread-207364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:20:12.837 [DEBUG] [Thread-207364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:20:12.837 [DEBUG] [Thread-207364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:12.837 [DEBUG] [Thread-207364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] client lang: <none>
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] server lang: <none>
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] kex follows: False
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:20:12.838 [DEBUG] [Thread-207364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:20:12.839 [DEBUG] [Thread-207364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:20:12.839 [DEBUG] [Thread-207364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:20:12.839 [DEBUG] [Thread-207364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:20:12.839 [DEBUG] [Thread-207364] [transport.py] [_log()] Compression: none
2026-02-15T16:20:12.839 [DEBUG] [Thread-207364] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:20:12.895 [DEBUG] [Thread-207364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:20:12.896 [DEBUG] [Thread-207364] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:20:12.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:20:12.897 [DEBUG] [Thread-207364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:20:12.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:20:12.951 [DEBUG] [Thread-207364] [transport.py] [_log()] userauth is OK
2026-02-15T16:20:12.951 [DEBUG] [Thread-207364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:20:12.952 [DEBUG] [Thread-207364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:20:12.952 [DEBUG] [Thread-207364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:20:12.952 [DEBUG] [Thread-207364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:20:12.978 [INFO] [Thread-207364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:20:12.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:20:12.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:20:13.803 [DEBUG] [Thread-207364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:20:13.803 [DEBUG] [Thread-207364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:20:13.850 [DEBUG] [Thread-207364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:20:13.851 [DEBUG] [Thread-207364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:20:13.860 [DEBUG] [Thread-207364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:20:13.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:20:13.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:20:13.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:20:13.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:20:13.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:20:13.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:20:13.897 [DEBUG] [Thread-207364] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:20:18.440 [DEBUG] [Thread-207366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:33.496 [DEBUG] [Thread-207367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:20:43.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:20:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:20:46.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 20, 25), 23.89, 20.58, 0.0, 19.22, 22.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:20:46.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:20:25
2026-02-15T16:20:46.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:20:46.762 [DEBUG] [Thread-207368] [transport.py] [_log()] starting thread (client mode): 0xa2d4f550
2026-02-15T16:20:46.762 [DEBUG] [Thread-207368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:20:46.783 [DEBUG] [Thread-207368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:20:46.783 [INFO] [Thread-207368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:20:46.786 [DEBUG] [Thread-207368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:20:46.786 [DEBUG] [Thread-207368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:20:46.786 [DEBUG] [Thread-207368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:20:46.786 [DEBUG] [Thread-207368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:46.786 [DEBUG] [Thread-207368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] client lang: <none>
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] server lang: <none>
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] kex follows: False
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] Compression: none
2026-02-15T16:20:46.787 [DEBUG] [Thread-207368] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:20:46.805 [DEBUG] [Thread-207368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:20:46.805 [DEBUG] [Thread-207368] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:20:46.806 [DEBUG] [Thread-207368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:20:46.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:20:46.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:20:46.808 [DEBUG] [Thread-207368] [transport.py] [_log()] userauth is OK
2026-02-15T16:20:46.808 [DEBUG] [Thread-207368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:20:46.808 [DEBUG] [Thread-207368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:20:46.808 [DEBUG] [Thread-207368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:20:46.808 [DEBUG] [Thread-207368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:20:46.827 [INFO] [Thread-207368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:20:46.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:20:47.469 [DEBUG] [Thread-207368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:20:47.469 [DEBUG] [Thread-207368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:20:47.470 [DEBUG] [Thread-207368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:20:47.510 [DEBUG] [Thread-207368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:20:47.511 [DEBUG] [Thread-207368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:20:47.514 [DEBUG] [Thread-207368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:20:47.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:20:47.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:20:47.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:20:47.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:20:47.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:20:47.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:20:47.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:20:47.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:20:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:20:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.597317 -999.00  +23.10  22.02     26   +2.60 1 1 1 1 1   888    0 19.43 -59.53 ----- 22.0 22.0 173.0 29.6 28.8 -29.6 28.2 -32.5 30.1 -28.4 30.9 -29.5
2026-02-15T16:20:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:20:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:20:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.597317
2026-02-15T16:20:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:20:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:20:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:20:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:20:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:20:47.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:20:25', tmtdew=23.89, humidity=20.58, cloud=0.0, wind=19.22, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:20:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:20:47.540 [DEBUG] [Thread-207368] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:20:47.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:20:47.625 [DEBUG] [Thread-207371] [transport.py] [_log()] starting thread (client mode): 0xa2d4fdc0
2026-02-15T16:20:47.625 [DEBUG] [Thread-207371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:20:47.639 [DEBUG] [Thread-207371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:20:47.639 [INFO] [Thread-207371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:20:47.646 [DEBUG] [Thread-207371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:20:47.647 [DEBUG] [Thread-207371] [transport.py] [_log()] client lang: <none>
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] server lang: <none>
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] kex follows: False
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] Compression: none
2026-02-15T16:20:47.648 [DEBUG] [Thread-207371] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:20:47.704 [DEBUG] [Thread-207371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:20:47.705 [DEBUG] [Thread-207371] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:20:47.705 [DEBUG] [Thread-207371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:20:47.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:20:47.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:20:47.760 [DEBUG] [Thread-207371] [transport.py] [_log()] userauth is OK
2026-02-15T16:20:47.761 [DEBUG] [Thread-207371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:20:47.761 [DEBUG] [Thread-207371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:20:47.761 [DEBUG] [Thread-207371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:20:47.761 [DEBUG] [Thread-207371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:20:47.780 [INFO] [Thread-207371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:20:47.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:20:47.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:20:48.533 [DEBUG] [Thread-207373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:48.644 [DEBUG] [Thread-207371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:20:48.644 [DEBUG] [Thread-207371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:20:48.692 [DEBUG] [Thread-207371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:20:48.693 [DEBUG] [Thread-207371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:20:48.702 [DEBUG] [Thread-207371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:20:48.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:20:48.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:20:48.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:20:48.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:20:48.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:20:48.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:20:48.739 [DEBUG] [Thread-207371] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:20:56.877 [DEBUG] [Thread-207374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:57.752 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:20:57.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:03.586 [DEBUG] [Thread-207375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:18.624 [DEBUG] [Thread-207376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:18.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:21:18.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:21:18.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:21:20.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 21, 1), 23.85, 20.68, 0.0, 20.66, 23.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:21:20.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:21:01
2026-02-15T16:21:21.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:21:21.190 [DEBUG] [Thread-207377] [transport.py] [_log()] starting thread (client mode): 0xa2d4ded0
2026-02-15T16:21:21.190 [DEBUG] [Thread-207377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:21:21.210 [DEBUG] [Thread-207377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:21:21.210 [INFO] [Thread-207377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] client lang: <none>
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] server lang: <none>
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] kex follows: False
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] Compression: none
2026-02-15T16:21:21.212 [DEBUG] [Thread-207377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:21:21.233 [DEBUG] [Thread-207377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:21:21.234 [DEBUG] [Thread-207377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:21:21.235 [DEBUG] [Thread-207377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:21:21.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:21:21.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:21:21.237 [DEBUG] [Thread-207377] [transport.py] [_log()] userauth is OK
2026-02-15T16:21:21.237 [DEBUG] [Thread-207377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:21:21.237 [DEBUG] [Thread-207377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:21:21.237 [DEBUG] [Thread-207377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:21:21.237 [DEBUG] [Thread-207377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:21:21.262 [INFO] [Thread-207377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:21:21.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:21:21.884 [DEBUG] [Thread-207377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:21:21.884 [DEBUG] [Thread-207377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:21:21.885 [DEBUG] [Thread-207377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:21:21.925 [DEBUG] [Thread-207377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:21:21.925 [DEBUG] [Thread-207377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:21:21.928 [DEBUG] [Thread-207377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:21:21.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:21:21.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:21:21.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:21:21.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:21:21.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:21:21.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:21:21.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:21:21.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:21:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:21:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.597665 -999.00  +23.00  19.09     26   +2.50 1 1 1 1 1   888    0 19.61 -65.42 ----- 19.1 19.1 183.6 27.5 28.7 -30.7 28.1 -35.1 30.1 -28.1 30.8 -30.8
2026-02-15T16:21:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:21:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:21:21.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.597665
2026-02-15T16:21:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:21:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:21:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:21:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:21:21.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:21:21.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:21:01', tmtdew=23.85, humidity=20.68, cloud=0.0, wind=20.66, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:20:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:21:21.955 [DEBUG] [Thread-207377] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:21:22.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:21:22.051 [DEBUG] [Thread-207380] [transport.py] [_log()] starting thread (client mode): 0xa2d4db40
2026-02-15T16:21:22.051 [DEBUG] [Thread-207380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:21:22.066 [DEBUG] [Thread-207380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:21:22.066 [INFO] [Thread-207380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] client lang: <none>
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] server lang: <none>
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] kex follows: False
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:21:22.074 [DEBUG] [Thread-207380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:21:22.075 [DEBUG] [Thread-207380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:21:22.075 [DEBUG] [Thread-207380] [transport.py] [_log()] Compression: none
2026-02-15T16:21:22.075 [DEBUG] [Thread-207380] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:21:22.132 [DEBUG] [Thread-207380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:21:22.132 [DEBUG] [Thread-207380] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:21:22.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:21:22.134 [DEBUG] [Thread-207380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:21:22.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:21:22.188 [DEBUG] [Thread-207380] [transport.py] [_log()] userauth is OK
2026-02-15T16:21:22.188 [DEBUG] [Thread-207380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:21:22.189 [DEBUG] [Thread-207380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:21:22.189 [DEBUG] [Thread-207380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:21:22.189 [DEBUG] [Thread-207380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:21:22.208 [INFO] [Thread-207380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:21:22.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:21:22.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:21:23.056 [DEBUG] [Thread-207380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:21:23.056 [DEBUG] [Thread-207380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:21:23.105 [DEBUG] [Thread-207380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:21:23.105 [DEBUG] [Thread-207380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:21:23.114 [DEBUG] [Thread-207380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:21:23.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:21:23.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:21:23.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:21:23.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:21:23.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:21:23.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:21:23.148 [DEBUG] [Thread-207380] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:21:33.665 [DEBUG] [Thread-207382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:48.724 [DEBUG] [Thread-207383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:53.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:21:53.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:21:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:21:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 21, 37), 25.6, 18.4, 0.0, 26.08, 24.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:21:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:21:37
2026-02-15T16:21:55.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:21:55.619 [DEBUG] [Thread-207384] [transport.py] [_log()] starting thread (client mode): 0xa2d4d690
2026-02-15T16:21:55.620 [DEBUG] [Thread-207384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:21:55.640 [DEBUG] [Thread-207384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:21:55.640 [INFO] [Thread-207384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] client lang: <none>
2026-02-15T16:21:55.644 [DEBUG] [Thread-207384] [transport.py] [_log()] server lang: <none>
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] kex follows: False
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] Compression: none
2026-02-15T16:21:55.645 [DEBUG] [Thread-207384] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:21:55.665 [DEBUG] [Thread-207384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:21:55.665 [DEBUG] [Thread-207384] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:21:55.666 [DEBUG] [Thread-207384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:21:55.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:21:55.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:21:55.668 [DEBUG] [Thread-207384] [transport.py] [_log()] userauth is OK
2026-02-15T16:21:55.668 [DEBUG] [Thread-207384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:21:55.668 [DEBUG] [Thread-207384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:21:55.668 [DEBUG] [Thread-207384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:21:55.669 [DEBUG] [Thread-207384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:21:55.692 [INFO] [Thread-207384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:21:55.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:21:56.312 [DEBUG] [Thread-207384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:21:56.312 [DEBUG] [Thread-207384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:21:56.313 [DEBUG] [Thread-207384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:21:56.353 [DEBUG] [Thread-207384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:21:56.353 [DEBUG] [Thread-207384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:21:56.357 [DEBUG] [Thread-207384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:21:56.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:21:56.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:21:56.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:21:56.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:21:56.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:21:56.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:21:56.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:21:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.598012 -999.00  +22.90  22.87     26   +2.50 1 1 1 1 1   888    0 19.22 -62.22 ----- 22.9 22.9 178.6 30.1 28.7 -29.8 28.0 -31.0 30.0 -28.3 30.8 -29.9
2026-02-15T16:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:21:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:21:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.598012
2026-02-15T16:21:56.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:21:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:21:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:21:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:21:56.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:21:56.385 [DEBUG] [Thread-207384] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:21:56.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:21:37', tmtdew=25.6, humidity=18.4, cloud=0.0, wind=26.08, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:21:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:21:56.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:21:56.480 [DEBUG] [Thread-207387] [transport.py] [_log()] starting thread (client mode): 0xa2d4f4c0
2026-02-15T16:21:56.480 [DEBUG] [Thread-207387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:21:56.494 [DEBUG] [Thread-207387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:21:56.495 [INFO] [Thread-207387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:21:56.502 [DEBUG] [Thread-207387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:21:56.503 [DEBUG] [Thread-207387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] client lang: <none>
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] server lang: <none>
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] kex follows: False
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:21:56.504 [DEBUG] [Thread-207387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:21:56.505 [DEBUG] [Thread-207387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:21:56.505 [DEBUG] [Thread-207387] [transport.py] [_log()] Compression: none
2026-02-15T16:21:56.505 [DEBUG] [Thread-207387] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:21:56.560 [DEBUG] [Thread-207387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:21:56.561 [DEBUG] [Thread-207387] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:21:56.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:21:56.562 [DEBUG] [Thread-207387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:21:56.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:21:56.616 [DEBUG] [Thread-207387] [transport.py] [_log()] userauth is OK
2026-02-15T16:21:56.616 [DEBUG] [Thread-207387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:21:56.617 [DEBUG] [Thread-207387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:21:56.617 [DEBUG] [Thread-207387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:21:56.617 [DEBUG] [Thread-207387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:21:56.641 [INFO] [Thread-207387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:21:56.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:21:56.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:21:56.925 [DEBUG] [Thread-207389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:57.503 [DEBUG] [Thread-207387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:21:57.504 [DEBUG] [Thread-207387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:21:57.551 [DEBUG] [Thread-207387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:21:57.552 [DEBUG] [Thread-207387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:21:57.562 [DEBUG] [Thread-207387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:21:57.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:21:57.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:21:57.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:21:57.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:21:57.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:21:57.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:21:57.598 [DEBUG] [Thread-207387] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:21:57.894 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:21:57.895 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:03.762 [DEBUG] [Thread-207390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:18.812 [DEBUG] [Thread-207391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:22:27.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:22:27.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:22:29.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 22, 12), 24.21, 19.97, 0.0, 25.2, 23.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:22:29.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:22:12
2026-02-15T16:22:29.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:22:30.043 [DEBUG] [Thread-207392] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T16:22:30.043 [DEBUG] [Thread-207392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:22:30.060 [DEBUG] [Thread-207392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:22:30.060 [INFO] [Thread-207392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:22:30.063 [DEBUG] [Thread-207392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] client lang: <none>
2026-02-15T16:22:30.064 [DEBUG] [Thread-207392] [transport.py] [_log()] server lang: <none>
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] kex follows: False
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] Compression: none
2026-02-15T16:22:30.065 [DEBUG] [Thread-207392] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:22:30.082 [DEBUG] [Thread-207392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:22:30.083 [DEBUG] [Thread-207392] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:22:30.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:22:30.084 [DEBUG] [Thread-207392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:22:30.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:22:30.086 [DEBUG] [Thread-207392] [transport.py] [_log()] userauth is OK
2026-02-15T16:22:30.086 [DEBUG] [Thread-207392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:22:30.086 [DEBUG] [Thread-207392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:22:30.086 [DEBUG] [Thread-207392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:22:30.086 [DEBUG] [Thread-207392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:22:30.105 [INFO] [Thread-207392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:22:30.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:22:30.744 [DEBUG] [Thread-207392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:22:30.744 [DEBUG] [Thread-207392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:22:30.745 [DEBUG] [Thread-207392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:22:30.785 [DEBUG] [Thread-207392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:22:30.786 [DEBUG] [Thread-207392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:22:30.789 [DEBUG] [Thread-207392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:22:30.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:22:30.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:22:30.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:22:30.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:22:30.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:22:30.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:22:30.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:22:30.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:22:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:22:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.598360 -999.00  +23.10  11.02     26   +2.60 1 1 1 1 1   888    0 19.16 -72.41 ----- 11.0 11.0 156.8 19.2 28.7 -29.7 28.2 -29.4 30.0 -27.2 30.8 -29.5
2026-02-15T16:22:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:22:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:22:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.598360
2026-02-15T16:22:30.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:22:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:22:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:22:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:22:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:22:30.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:22:12', tmtdew=24.21, humidity=19.97, cloud=0.0, wind=25.2, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:21:38.304', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:22:30.815 [DEBUG] [Thread-207392] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:22:30.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:22:30.912 [DEBUG] [Thread-207395] [transport.py] [_log()] starting thread (client mode): 0xa2d79480
2026-02-15T16:22:30.912 [DEBUG] [Thread-207395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:22:30.926 [DEBUG] [Thread-207395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:22:30.926 [INFO] [Thread-207395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:22:30.934 [DEBUG] [Thread-207395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] client lang: <none>
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] server lang: <none>
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] kex follows: False
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] Compression: none
2026-02-15T16:22:30.935 [DEBUG] [Thread-207395] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:22:30.991 [DEBUG] [Thread-207395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:22:30.992 [DEBUG] [Thread-207395] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:22:30.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:22:30.993 [DEBUG] [Thread-207395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:22:30.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:22:31.049 [DEBUG] [Thread-207395] [transport.py] [_log()] userauth is OK
2026-02-15T16:22:31.049 [DEBUG] [Thread-207395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:22:31.049 [DEBUG] [Thread-207395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:22:31.049 [DEBUG] [Thread-207395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:22:31.049 [DEBUG] [Thread-207395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:22:31.068 [INFO] [Thread-207395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:22:31.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:22:31.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:22:31.909 [DEBUG] [Thread-207395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:22:31.910 [DEBUG] [Thread-207395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:22:31.957 [DEBUG] [Thread-207395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:22:31.958 [DEBUG] [Thread-207395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:22:31.967 [DEBUG] [Thread-207395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:22:31.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:22:31.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:22:31.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:22:31.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:22:31.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:22:31.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:22:32.004 [DEBUG] [Thread-207395] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:22:33.851 [DEBUG] [Thread-207397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:48.903 [DEBUG] [Thread-207398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:56.977 [DEBUG] [Thread-207399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:58.035 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:22:58.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:02.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:23:02.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:23:02.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:23:03.943 [DEBUG] [Thread-207400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 22, 47), 23.81, 20.73, 0.0, 27.16, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:23:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:22:47
2026-02-15T16:23:04.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:23:05.152 [DEBUG] [Thread-207401] [transport.py] [_log()] starting thread (client mode): 0xa2d7a4d0
2026-02-15T16:23:05.152 [DEBUG] [Thread-207401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:23:05.172 [DEBUG] [Thread-207401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:23:05.173 [INFO] [Thread-207401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:05.174 [DEBUG] [Thread-207401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] client lang: <none>
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] server lang: <none>
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] kex follows: False
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] Compression: none
2026-02-15T16:23:05.175 [DEBUG] [Thread-207401] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:23:05.195 [DEBUG] [Thread-207401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:23:05.195 [DEBUG] [Thread-207401] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:23:05.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:23:05.196 [DEBUG] [Thread-207401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:23:05.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:23:05.198 [DEBUG] [Thread-207401] [transport.py] [_log()] userauth is OK
2026-02-15T16:23:05.199 [DEBUG] [Thread-207401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:23:05.199 [DEBUG] [Thread-207401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:23:05.199 [DEBUG] [Thread-207401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:23:05.199 [DEBUG] [Thread-207401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:23:05.223 [INFO] [Thread-207401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:23:05.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:23:05.976 [DEBUG] [Thread-207401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:23:05.977 [DEBUG] [Thread-207401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:23:05.977 [DEBUG] [Thread-207401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:23:06.017 [DEBUG] [Thread-207401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:23:06.018 [DEBUG] [Thread-207401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:23:06.021 [DEBUG] [Thread-207401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:23:06.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:23:06.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:23:06.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:23:06.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:23:06.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:23:06.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:23:06.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:23:06.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:23:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:23:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.598707 -999.00  +23.30  19.76     26   +2.70 1 1 1 1 1   888    0 19.05 -72.05 ----- 19.8 19.8 147.4 26.3 28.8 -29.3 28.3 -29.0 30.1 -27.0 30.9 -29.8
2026-02-15T16:23:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:23:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:23:06.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.598707
2026-02-15T16:23:06.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:23:06.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:23:06.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:23:06.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:23:06.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:23:06.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:22:47', tmtdew=23.81, humidity=20.73, cloud=0.0, wind=27.16, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:22:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:23:06.049 [DEBUG] [Thread-207401] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:23:06.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:23:06.144 [DEBUG] [Thread-207404] [transport.py] [_log()] starting thread (client mode): 0xa2d4e380
2026-02-15T16:23:06.144 [DEBUG] [Thread-207404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:23:06.159 [DEBUG] [Thread-207404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:23:06.159 [INFO] [Thread-207404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:23:06.167 [DEBUG] [Thread-207404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:23:06.167 [DEBUG] [Thread-207404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:23:06.167 [DEBUG] [Thread-207404] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:23:06.167 [DEBUG] [Thread-207404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:06.167 [DEBUG] [Thread-207404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:06.167 [DEBUG] [Thread-207404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] client lang: <none>
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] server lang: <none>
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] kex follows: False
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:23:06.168 [DEBUG] [Thread-207404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:23:06.169 [DEBUG] [Thread-207404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:23:06.169 [DEBUG] [Thread-207404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:23:06.169 [DEBUG] [Thread-207404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:23:06.169 [DEBUG] [Thread-207404] [transport.py] [_log()] Compression: none
2026-02-15T16:23:06.169 [DEBUG] [Thread-207404] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:23:06.226 [DEBUG] [Thread-207404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:23:06.227 [DEBUG] [Thread-207404] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:23:06.227 [DEBUG] [Thread-207404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:23:06.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:23:06.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:23:06.285 [DEBUG] [Thread-207404] [transport.py] [_log()] userauth is OK
2026-02-15T16:23:06.285 [DEBUG] [Thread-207404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:23:06.286 [DEBUG] [Thread-207404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:23:06.286 [DEBUG] [Thread-207404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:23:06.286 [DEBUG] [Thread-207404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:23:06.308 [INFO] [Thread-207404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:23:06.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:23:06.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:23:07.154 [DEBUG] [Thread-207404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:23:07.154 [DEBUG] [Thread-207404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:23:07.202 [DEBUG] [Thread-207404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:23:07.203 [DEBUG] [Thread-207404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:23:07.212 [DEBUG] [Thread-207404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:23:07.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:23:07.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:23:07.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:23:07.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:23:07.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:23:07.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:23:07.249 [DEBUG] [Thread-207404] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:23:18.980 [DEBUG] [Thread-207406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:34.034 [DEBUG] [Thread-207407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:37.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:23:37.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:23:37.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:23:39.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 23, 23), 23.81, 20.75, 0.0, 27.17, 23.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:23:39.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:23:23
2026-02-15T16:23:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:23:39.714 [DEBUG] [Thread-207408] [transport.py] [_log()] starting thread (client mode): 0xa2d4fd60
2026-02-15T16:23:39.714 [DEBUG] [Thread-207408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:23:39.735 [DEBUG] [Thread-207408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:23:39.735 [INFO] [Thread-207408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:39.738 [DEBUG] [Thread-207408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] client lang: <none>
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] server lang: <none>
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] kex follows: False
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] Compression: none
2026-02-15T16:23:39.739 [DEBUG] [Thread-207408] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:23:39.756 [DEBUG] [Thread-207408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:23:39.757 [DEBUG] [Thread-207408] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:23:39.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:23:39.757 [DEBUG] [Thread-207408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:23:39.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:23:39.760 [DEBUG] [Thread-207408] [transport.py] [_log()] userauth is OK
2026-02-15T16:23:39.760 [DEBUG] [Thread-207408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:23:39.760 [DEBUG] [Thread-207408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:23:39.760 [DEBUG] [Thread-207408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:23:39.760 [DEBUG] [Thread-207408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:23:39.784 [INFO] [Thread-207408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:23:39.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:23:40.404 [DEBUG] [Thread-207408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:23:40.404 [DEBUG] [Thread-207408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:23:40.404 [DEBUG] [Thread-207408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:23:40.445 [DEBUG] [Thread-207408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:23:40.445 [DEBUG] [Thread-207408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:23:40.447 [DEBUG] [Thread-207408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:23:40.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:23:40.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:23:40.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:23:40.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:23:40.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:23:40.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:23:40.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:23:40.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:23:40.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:23:40.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.599401 -999.00  +22.90  23.80     26   +2.60 1 1 1 1 1   888    0 18.59 -78.93 ----- 23.8 23.8 153.8 29.4 28.6 -31.3 28.1 -28.9 29.9 -28.9 30.7 -30.0
2026-02-15T16:23:40.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:23:40.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.599401
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:23:40.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:23:23', tmtdew=23.81, humidity=20.75, cloud=0.0, wind=27.17, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:23:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:23:40.466 [DEBUG] [Thread-207408] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:23:40.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:23:40.551 [DEBUG] [Thread-207411] [transport.py] [_log()] starting thread (client mode): 0xa2d7bd30
2026-02-15T16:23:40.551 [DEBUG] [Thread-207411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:23:40.567 [DEBUG] [Thread-207411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:23:40.567 [INFO] [Thread-207411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] client lang: <none>
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] server lang: <none>
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] kex follows: False
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] Compression: none
2026-02-15T16:23:40.575 [DEBUG] [Thread-207411] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:23:40.634 [DEBUG] [Thread-207411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:23:40.634 [DEBUG] [Thread-207411] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:23:40.635 [DEBUG] [Thread-207411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:23:40.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:23:40.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:23:40.692 [DEBUG] [Thread-207411] [transport.py] [_log()] userauth is OK
2026-02-15T16:23:40.692 [DEBUG] [Thread-207411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:23:40.692 [DEBUG] [Thread-207411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:23:40.692 [DEBUG] [Thread-207411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:23:40.692 [DEBUG] [Thread-207411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:23:40.707 [INFO] [Thread-207411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:23:40.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:23:40.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:23:41.530 [DEBUG] [Thread-207411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:23:41.530 [DEBUG] [Thread-207411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:23:41.579 [DEBUG] [Thread-207411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:23:41.579 [DEBUG] [Thread-207411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:23:41.588 [DEBUG] [Thread-207411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:23:41.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:23:41.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:23:41.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:23:41.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:23:41.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:23:41.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:23:41.625 [DEBUG] [Thread-207411] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:23:49.068 [DEBUG] [Thread-207413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:57.011 [DEBUG] [Thread-207414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:58.176 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:23:58.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:04.119 [DEBUG] [Thread-207415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:11.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:24:11.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:24:11.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:24:13.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 23, 58), 23.79, 20.65, 0.0, 28.11, 23.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:24:13.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:23:58
2026-02-15T16:24:13.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:24:14.026 [DEBUG] [Thread-207416] [transport.py] [_log()] starting thread (client mode): 0xa2d79300
2026-02-15T16:24:14.026 [DEBUG] [Thread-207416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:24:14.041 [DEBUG] [Thread-207416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:24:14.041 [INFO] [Thread-207416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:24:14.042 [DEBUG] [Thread-207416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:24:14.042 [DEBUG] [Thread-207416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:24:14.042 [DEBUG] [Thread-207416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:24:14.042 [DEBUG] [Thread-207416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:14.042 [DEBUG] [Thread-207416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] client lang: <none>
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] server lang: <none>
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] kex follows: False
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] Compression: none
2026-02-15T16:24:14.043 [DEBUG] [Thread-207416] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:24:14.061 [DEBUG] [Thread-207416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:24:14.062 [DEBUG] [Thread-207416] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:24:14.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:24:14.064 [DEBUG] [Thread-207416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:24:14.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:24:14.066 [DEBUG] [Thread-207416] [transport.py] [_log()] userauth is OK
2026-02-15T16:24:14.066 [DEBUG] [Thread-207416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:24:14.067 [DEBUG] [Thread-207416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:24:14.067 [DEBUG] [Thread-207416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:24:14.067 [DEBUG] [Thread-207416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:24:14.087 [INFO] [Thread-207416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:24:14.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:24:14.747 [DEBUG] [Thread-207416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:24:14.748 [DEBUG] [Thread-207416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:24:14.748 [DEBUG] [Thread-207416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:24:14.788 [DEBUG] [Thread-207416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:24:14.788 [DEBUG] [Thread-207416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:24:14.792 [DEBUG] [Thread-207416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:24:14.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:24:14.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:24:14.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:24:14.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:24:14.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:24:14.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:24:14.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:24:14.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:24:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:24:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.599748 -999.00  +23.00  16.18     26   +2.60 1 1 1 1 1   888    0 18.68 -75.36 ----- 16.2 16.2 162.5 21.1 28.6 -30.4 28.2 -28.3 29.9 -28.1 30.6 -29.7
2026-02-15T16:24:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:24:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:24:14.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.599748
2026-02-15T16:24:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:24:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:24:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:24:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:24:14.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:24:14.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:23:58', tmtdew=23.79, humidity=20.65, cloud=0.0, wind=28.11, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:23:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:24:14.817 [DEBUG] [Thread-207416] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:24:14.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:24:14.912 [DEBUG] [Thread-207419] [transport.py] [_log()] starting thread (client mode): 0xa2d4e260
2026-02-15T16:24:14.913 [DEBUG] [Thread-207419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:24:14.927 [DEBUG] [Thread-207419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:24:14.927 [INFO] [Thread-207419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:24:14.935 [DEBUG] [Thread-207419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:24:14.935 [DEBUG] [Thread-207419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:24:14.935 [DEBUG] [Thread-207419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:24:14.935 [DEBUG] [Thread-207419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] client lang: <none>
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] server lang: <none>
2026-02-15T16:24:14.936 [DEBUG] [Thread-207419] [transport.py] [_log()] kex follows: False
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] Compression: none
2026-02-15T16:24:14.937 [DEBUG] [Thread-207419] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:24:14.999 [DEBUG] [Thread-207419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:24:15.000 [DEBUG] [Thread-207419] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:24:15.001 [DEBUG] [Thread-207419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:24:15.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:24:15.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:24:15.057 [DEBUG] [Thread-207419] [transport.py] [_log()] userauth is OK
2026-02-15T16:24:15.057 [DEBUG] [Thread-207419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:24:15.057 [DEBUG] [Thread-207419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:24:15.057 [DEBUG] [Thread-207419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:24:15.057 [DEBUG] [Thread-207419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:24:15.076 [INFO] [Thread-207419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:24:15.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:24:15.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:24:15.917 [DEBUG] [Thread-207419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:24:15.917 [DEBUG] [Thread-207419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:24:15.965 [DEBUG] [Thread-207419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:24:15.965 [DEBUG] [Thread-207419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:24:15.979 [DEBUG] [Thread-207419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:24:15.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:24:15.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:24:15.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:24:16.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:24:16.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:24:16.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:24:16.017 [DEBUG] [Thread-207419] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:24:19.160 [DEBUG] [Thread-207421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:34.213 [DEBUG] [Thread-207422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:46.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:24:46.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:24:46.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:24:48.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 24, 34), 25.18, 18.87, 0.0, 30.59, 24.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:24:48.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:24:34
2026-02-15T16:24:48.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:24:48.622 [DEBUG] [Thread-207423] [transport.py] [_log()] starting thread (client mode): 0xa2d78760
2026-02-15T16:24:48.623 [DEBUG] [Thread-207423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:24:48.643 [DEBUG] [Thread-207423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:24:48.643 [INFO] [Thread-207423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:24:48.646 [DEBUG] [Thread-207423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] client lang: <none>
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] server lang: <none>
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] kex follows: False
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] Compression: none
2026-02-15T16:24:48.647 [DEBUG] [Thread-207423] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:24:48.665 [DEBUG] [Thread-207423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:24:48.665 [DEBUG] [Thread-207423] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:24:48.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:24:48.666 [DEBUG] [Thread-207423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:24:48.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:24:48.668 [DEBUG] [Thread-207423] [transport.py] [_log()] userauth is OK
2026-02-15T16:24:48.669 [DEBUG] [Thread-207423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:24:48.669 [DEBUG] [Thread-207423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:24:48.669 [DEBUG] [Thread-207423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:24:48.669 [DEBUG] [Thread-207423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:24:48.688 [INFO] [Thread-207423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:24:48.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:24:49.251 [DEBUG] [Thread-207425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:49.297 [DEBUG] [Thread-207423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:24:49.297 [DEBUG] [Thread-207423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:24:49.298 [DEBUG] [Thread-207423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:24:49.338 [DEBUG] [Thread-207423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:24:49.339 [DEBUG] [Thread-207423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:24:49.342 [DEBUG] [Thread-207423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:24:49.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:24:49.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:24:49.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:24:49.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:24:49.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:24:49.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:24:49.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:24:49.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:24:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:24:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.600096 -999.00  +22.90  17.65     26   +2.40 1 1 1 1 1   888    0 19.79 -70.88 ----- 17.6 17.6 174.4 25.4 28.6 -30.1 28.1 -28.8 29.9 -28.0 30.7 -30.3
2026-02-15T16:24:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:24:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:24:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.600096
2026-02-15T16:24:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:24:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:24:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:24:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:24:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:24:49.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:24:34', tmtdew=25.18, humidity=18.87, cloud=0.0, wind=30.59, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:24:08.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:24:49.369 [DEBUG] [Thread-207423] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:24:49.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:24:49.466 [DEBUG] [Thread-207427] [transport.py] [_log()] starting thread (client mode): 0xa2d4e3b0
2026-02-15T16:24:49.467 [DEBUG] [Thread-207427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:24:49.480 [DEBUG] [Thread-207427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:24:49.481 [INFO] [Thread-207427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:24:49.488 [DEBUG] [Thread-207427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:24:49.488 [DEBUG] [Thread-207427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:24:49.488 [DEBUG] [Thread-207427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:24:49.488 [DEBUG] [Thread-207427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:49.488 [DEBUG] [Thread-207427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] client lang: <none>
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] server lang: <none>
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] kex follows: False
2026-02-15T16:24:49.489 [DEBUG] [Thread-207427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:24:49.490 [DEBUG] [Thread-207427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:24:49.490 [DEBUG] [Thread-207427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:24:49.490 [DEBUG] [Thread-207427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:24:49.490 [DEBUG] [Thread-207427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:24:49.490 [DEBUG] [Thread-207427] [transport.py] [_log()] Compression: none
2026-02-15T16:24:49.490 [DEBUG] [Thread-207427] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:24:49.549 [DEBUG] [Thread-207427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:24:49.549 [DEBUG] [Thread-207427] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:24:49.550 [DEBUG] [Thread-207427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:24:49.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:24:49.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:24:49.609 [DEBUG] [Thread-207427] [transport.py] [_log()] userauth is OK
2026-02-15T16:24:49.609 [DEBUG] [Thread-207427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:24:49.609 [DEBUG] [Thread-207427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:24:49.609 [DEBUG] [Thread-207427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:24:49.609 [DEBUG] [Thread-207427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:24:49.634 [INFO] [Thread-207427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:24:49.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:24:49.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:24:50.493 [DEBUG] [Thread-207427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:24:50.493 [DEBUG] [Thread-207427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:24:50.543 [DEBUG] [Thread-207427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:24:50.543 [DEBUG] [Thread-207427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:24:50.552 [DEBUG] [Thread-207427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:24:50.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:24:50.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:24:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:24:50.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:24:50.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:24:50.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:24:50.589 [DEBUG] [Thread-207427] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:24:57.046 [DEBUG] [Thread-207429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:58.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:24:58.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:04.285 [DEBUG] [Thread-207430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:19.336 [DEBUG] [Thread-207431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:20.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:25:20.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:25:20.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:25:22.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 25, 9), 23.6, 20.73, 0.0, 18.79, 22.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:25:22.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:25:09
2026-02-15T16:25:22.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:25:22.982 [DEBUG] [Thread-207432] [transport.py] [_log()] starting thread (client mode): 0xa2d4e3b0
2026-02-15T16:25:22.982 [DEBUG] [Thread-207432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:25:23.002 [DEBUG] [Thread-207432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:25:23.002 [INFO] [Thread-207432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:25:23.005 [DEBUG] [Thread-207432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:25:23.005 [DEBUG] [Thread-207432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:25:23.005 [DEBUG] [Thread-207432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:25:23.005 [DEBUG] [Thread-207432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:23.005 [DEBUG] [Thread-207432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] client lang: <none>
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] server lang: <none>
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] kex follows: False
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] Compression: none
2026-02-15T16:25:23.006 [DEBUG] [Thread-207432] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:25:23.020 [DEBUG] [Thread-207432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:25:23.021 [DEBUG] [Thread-207432] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:25:23.021 [DEBUG] [Thread-207432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:25:23.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:25:23.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:25:23.023 [DEBUG] [Thread-207432] [transport.py] [_log()] userauth is OK
2026-02-15T16:25:23.023 [DEBUG] [Thread-207432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:25:23.023 [DEBUG] [Thread-207432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:25:23.023 [DEBUG] [Thread-207432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:25:23.023 [DEBUG] [Thread-207432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:25:23.045 [INFO] [Thread-207432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:25:23.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:25:23.706 [DEBUG] [Thread-207432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:25:23.706 [DEBUG] [Thread-207432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:25:23.707 [DEBUG] [Thread-207432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:25:23.747 [DEBUG] [Thread-207432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:25:23.748 [DEBUG] [Thread-207432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:25:23.751 [DEBUG] [Thread-207432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:25:23.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:25:23.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:25:23.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:25:23.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:25:23.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:25:23.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:25:23.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:25:23.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:25:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:25:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.600443 -999.00  +22.90  25.68     26   +2.50 1 1 1 1 1   888    0 18.82 -83.47 ----- 25.7 25.7 139.6 34.0 28.6 -29.8 28.1 -29.5 29.9 -28.0 30.7 -29.6
2026-02-15T16:25:23.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:25:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:25:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.600443
2026-02-15T16:25:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:25:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:25:23.777 [DEBUG] [Thread-207432] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:25:23.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:25:23.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:25:23.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:25:23.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:25:09', tmtdew=23.6, humidity=20.73, cloud=0.0, wind=18.79, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:24:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:25:23.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:25:23.872 [DEBUG] [Thread-207435] [transport.py] [_log()] starting thread (client mode): 0xa2d4c220
2026-02-15T16:25:23.873 [DEBUG] [Thread-207435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:25:23.889 [DEBUG] [Thread-207435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:25:23.889 [INFO] [Thread-207435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:25:23.896 [DEBUG] [Thread-207435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] client lang: <none>
2026-02-15T16:25:23.897 [DEBUG] [Thread-207435] [transport.py] [_log()] server lang: <none>
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] kex follows: False
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] Compression: none
2026-02-15T16:25:23.898 [DEBUG] [Thread-207435] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:25:23.959 [DEBUG] [Thread-207435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:25:23.960 [DEBUG] [Thread-207435] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:25:23.961 [DEBUG] [Thread-207435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:25:23.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:25:23.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:25:24.017 [DEBUG] [Thread-207435] [transport.py] [_log()] userauth is OK
2026-02-15T16:25:24.017 [DEBUG] [Thread-207435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:25:24.017 [DEBUG] [Thread-207435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:25:24.017 [DEBUG] [Thread-207435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:25:24.017 [DEBUG] [Thread-207435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:25:24.042 [INFO] [Thread-207435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:25:24.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:25:24.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:25:24.873 [DEBUG] [Thread-207435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:25:24.874 [DEBUG] [Thread-207435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:25:24.922 [DEBUG] [Thread-207435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:25:24.922 [DEBUG] [Thread-207435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:25:24.930 [DEBUG] [Thread-207435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:25:24.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:25:24.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:25:24.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:25:24.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:25:24.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:25:24.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:25:24.968 [DEBUG] [Thread-207435] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:25:34.371 [DEBUG] [Thread-207437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:49.421 [DEBUG] [Thread-207438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:54.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:25:54.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:25:54.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:25:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 25, 45), 23.59, 20.81, 0.0, 22.62, 22.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:25:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:25:45
2026-02-15T16:25:57.081 [DEBUG] [Thread-207439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:57.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:25:57.348 [DEBUG] [Thread-207440] [transport.py] [_log()] starting thread (client mode): 0xa2d4c8e0
2026-02-15T16:25:57.348 [DEBUG] [Thread-207440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:25:57.368 [DEBUG] [Thread-207440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:25:57.368 [INFO] [Thread-207440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:25:57.371 [DEBUG] [Thread-207440] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:25:57.371 [DEBUG] [Thread-207440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:25:57.371 [DEBUG] [Thread-207440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:25:57.371 [DEBUG] [Thread-207440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:57.371 [DEBUG] [Thread-207440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] client lang: <none>
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] server lang: <none>
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] kex follows: False
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] Compression: none
2026-02-15T16:25:57.372 [DEBUG] [Thread-207440] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:25:57.390 [DEBUG] [Thread-207440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:25:57.391 [DEBUG] [Thread-207440] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:25:57.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:25:57.392 [DEBUG] [Thread-207440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:25:57.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:25:57.394 [DEBUG] [Thread-207440] [transport.py] [_log()] userauth is OK
2026-02-15T16:25:57.394 [DEBUG] [Thread-207440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:25:57.394 [DEBUG] [Thread-207440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:25:57.394 [DEBUG] [Thread-207440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:25:57.394 [DEBUG] [Thread-207440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:25:57.419 [INFO] [Thread-207440] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:25:57.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:25:57.664 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:58.056 [DEBUG] [Thread-207440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:25:58.057 [DEBUG] [Thread-207440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:25:58.057 [DEBUG] [Thread-207440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:25:58.097 [DEBUG] [Thread-207440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:25:58.097 [DEBUG] [Thread-207440] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:25:58.100 [DEBUG] [Thread-207440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:25:58.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:25:58.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:25:58.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:25:58.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:25:58.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:25:58.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:25:58.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:25:58.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:25:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:25:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.600790 -999.00  +22.50  15.30     26   +2.40 1 1 1 1 1   888    0 18.21 -85.22 ----- 15.3 15.3 160.8 26.7 28.5 -30.0 28.1 -29.0 29.8 -27.5 30.6 -29.5
2026-02-15T16:25:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:25:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:25:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.600790
2026-02-15T16:25:58.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:25:58.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:25:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:25:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:25:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:25:58.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:25:45', tmtdew=23.59, humidity=20.81, cloud=0.0, wind=22.62, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:25:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:25:58.129 [DEBUG] [Thread-207440] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:25:58.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:25:58.231 [DEBUG] [Thread-207444] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T16:25:58.232 [DEBUG] [Thread-207444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:25:58.249 [DEBUG] [Thread-207444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:25:58.249 [INFO] [Thread-207444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:25:58.258 [DEBUG] [Thread-207444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:25:58.259 [DEBUG] [Thread-207444] [transport.py] [_log()] client lang: <none>
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] server lang: <none>
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] kex follows: False
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] Compression: none
2026-02-15T16:25:58.260 [DEBUG] [Thread-207444] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:25:58.318 [DEBUG] [Thread-207444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:25:58.319 [DEBUG] [Thread-207444] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:25:58.319 [DEBUG] [Thread-207444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:25:58.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:25:58.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:25:58.386 [DEBUG] [Thread-207444] [transport.py] [_log()] userauth is OK
2026-02-15T16:25:58.386 [DEBUG] [Thread-207444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:25:58.386 [DEBUG] [Thread-207444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:25:58.386 [DEBUG] [Thread-207444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:25:58.387 [DEBUG] [Thread-207444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:25:58.409 [INFO] [Thread-207444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:25:58.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:25:58.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:25:58.468 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:58.470 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:25:59.242 [DEBUG] [Thread-207444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:25:59.242 [DEBUG] [Thread-207444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:25:59.289 [DEBUG] [Thread-207444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:25:59.289 [DEBUG] [Thread-207444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:25:59.298 [DEBUG] [Thread-207444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:25:59.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:25:59.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:25:59.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:25:59.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:25:59.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:25:59.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:25:59.336 [DEBUG] [Thread-207444] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:26:04.456 [DEBUG] [Thread-207446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:26:19.510 [DEBUG] [Thread-207447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:26:29.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:26:29.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:26:29.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:26:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 26, 21), 23.73, 20.65, 0.0, 24.07, 22.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:26:31.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:26:21
2026-02-15T16:26:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:26:31.797 [DEBUG] [Thread-207448] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T16:26:31.797 [DEBUG] [Thread-207448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:26:31.817 [DEBUG] [Thread-207448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:26:31.817 [INFO] [Thread-207448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:26:31.821 [DEBUG] [Thread-207448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:26:31.821 [DEBUG] [Thread-207448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:26:31.821 [DEBUG] [Thread-207448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:26:31.821 [DEBUG] [Thread-207448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:26:31.821 [DEBUG] [Thread-207448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:26:31.821 [DEBUG] [Thread-207448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] client lang: <none>
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] server lang: <none>
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] kex follows: False
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:26:31.822 [DEBUG] [Thread-207448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:26:31.823 [DEBUG] [Thread-207448] [transport.py] [_log()] Compression: none
2026-02-15T16:26:31.823 [DEBUG] [Thread-207448] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:26:31.842 [DEBUG] [Thread-207448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:26:31.843 [DEBUG] [Thread-207448] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:26:31.843 [DEBUG] [Thread-207448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:26:31.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:26:31.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:26:31.846 [DEBUG] [Thread-207448] [transport.py] [_log()] userauth is OK
2026-02-15T16:26:31.846 [DEBUG] [Thread-207448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:26:31.846 [DEBUG] [Thread-207448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:26:31.846 [DEBUG] [Thread-207448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:26:31.846 [DEBUG] [Thread-207448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:26:31.872 [INFO] [Thread-207448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:26:31.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:26:32.507 [DEBUG] [Thread-207448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:26:32.507 [DEBUG] [Thread-207448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:26:32.508 [DEBUG] [Thread-207448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:26:32.549 [DEBUG] [Thread-207448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:26:32.549 [DEBUG] [Thread-207448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:26:32.552 [DEBUG] [Thread-207448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:26:32.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:26:32.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:26:32.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:26:32.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:26:32.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:26:32.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:26:32.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:26:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.601137 -999.00  +22.60  19.21     26   +2.40 1 1 1 1 1   888    0 18.60 -78.47 ----- 19.2 19.2 165.4 29.8 28.5 -30.6 28.1 -28.9 29.8 -29.0 30.6 -31.5
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.601137
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:26:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:26:21', tmtdew=23.73, humidity=20.65, cloud=0.0, wind=24.07, temperature=22.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:25:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:26:32.573 [DEBUG] [Thread-207448] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:26:32.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:26:32.663 [DEBUG] [Thread-207451] [transport.py] [_log()] starting thread (client mode): 0xa2d68b50
2026-02-15T16:26:32.663 [DEBUG] [Thread-207451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:26:32.677 [DEBUG] [Thread-207451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:26:32.677 [INFO] [Thread-207451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:26:32.684 [DEBUG] [Thread-207451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:26:32.684 [DEBUG] [Thread-207451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:26:32.684 [DEBUG] [Thread-207451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] client lang: <none>
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] server lang: <none>
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] kex follows: False
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] Compression: none
2026-02-15T16:26:32.685 [DEBUG] [Thread-207451] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:26:32.743 [DEBUG] [Thread-207451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:26:32.744 [DEBUG] [Thread-207451] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:26:32.744 [DEBUG] [Thread-207451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:26:32.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:26:32.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:26:32.800 [DEBUG] [Thread-207451] [transport.py] [_log()] userauth is OK
2026-02-15T16:26:32.800 [DEBUG] [Thread-207451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:26:32.801 [DEBUG] [Thread-207451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:26:32.801 [DEBUG] [Thread-207451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:26:32.801 [DEBUG] [Thread-207451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:26:32.818 [INFO] [Thread-207451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:26:32.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:26:32.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:26:33.656 [DEBUG] [Thread-207451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:26:33.656 [DEBUG] [Thread-207451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:26:33.704 [DEBUG] [Thread-207451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:26:33.705 [DEBUG] [Thread-207451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:26:33.714 [DEBUG] [Thread-207451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:26:33.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:26:33.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:26:33.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:26:33.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:26:33.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:26:33.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:26:33.751 [DEBUG] [Thread-207451] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:26:34.548 [DEBUG] [Thread-207453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:26:49.602 [DEBUG] [Thread-207454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:26:57.126 [DEBUG] [Thread-207455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:26:58.613 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:26:58.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:03.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:27:03.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:27:03.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:27:04.639 [DEBUG] [Thread-207456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 26, 56), 23.97, 20.52, 0.0, 23.68, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:27:05.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:26:56
2026-02-15T16:27:06.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:27:06.362 [DEBUG] [Thread-207457] [transport.py] [_log()] starting thread (client mode): 0xa2d69810
2026-02-15T16:27:06.363 [DEBUG] [Thread-207457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:27:06.383 [DEBUG] [Thread-207457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:27:06.383 [INFO] [Thread-207457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] client lang: <none>
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] server lang: <none>
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] kex follows: False
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] Compression: none
2026-02-15T16:27:06.387 [DEBUG] [Thread-207457] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:27:06.406 [DEBUG] [Thread-207457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:27:06.407 [DEBUG] [Thread-207457] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:27:06.407 [DEBUG] [Thread-207457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:27:06.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:27:06.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:27:06.409 [DEBUG] [Thread-207457] [transport.py] [_log()] userauth is OK
2026-02-15T16:27:06.409 [DEBUG] [Thread-207457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:27:06.410 [DEBUG] [Thread-207457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:27:06.410 [DEBUG] [Thread-207457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:27:06.410 [DEBUG] [Thread-207457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:27:06.446 [INFO] [Thread-207457] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:27:06.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:27:07.088 [DEBUG] [Thread-207457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:27:07.088 [DEBUG] [Thread-207457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:27:07.088 [DEBUG] [Thread-207457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:27:07.129 [DEBUG] [Thread-207457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:27:07.130 [DEBUG] [Thread-207457] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:27:07.133 [DEBUG] [Thread-207457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:27:07.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:27:07.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:27:07.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:27:07.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:27:07.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:27:07.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:27:07.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:27:07.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:27:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:27:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.601832 -999.00  +22.60  15.13     26   +2.30 1 1 1 1 1   888    0 18.84 -74.20 ----- 15.1 15.1 154.5 24.4 28.4 -29.9 28.1 -28.2 29.8 -27.2 30.5 -29.8
2026-02-15T16:27:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:27:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:27:07.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.601832
2026-02-15T16:27:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:27:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:27:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:27:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:27:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:27:07.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:26:56', tmtdew=23.97, humidity=20.52, cloud=0.0, wind=23.68, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:26:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:27:07.152 [DEBUG] [Thread-207457] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:27:07.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:27:07.260 [DEBUG] [Thread-207460] [transport.py] [_log()] starting thread (client mode): 0xa2d4ff70
2026-02-15T16:27:07.260 [DEBUG] [Thread-207460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:27:07.282 [DEBUG] [Thread-207460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:27:07.282 [INFO] [Thread-207460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:27:07.290 [DEBUG] [Thread-207460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:27:07.291 [DEBUG] [Thread-207460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] client lang: <none>
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] server lang: <none>
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] kex follows: False
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:27:07.292 [DEBUG] [Thread-207460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:27:07.293 [DEBUG] [Thread-207460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:27:07.293 [DEBUG] [Thread-207460] [transport.py] [_log()] Compression: none
2026-02-15T16:27:07.293 [DEBUG] [Thread-207460] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:27:07.349 [DEBUG] [Thread-207460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:27:07.350 [DEBUG] [Thread-207460] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:27:07.350 [DEBUG] [Thread-207460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:27:07.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:27:07.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:27:07.406 [DEBUG] [Thread-207460] [transport.py] [_log()] userauth is OK
2026-02-15T16:27:07.406 [DEBUG] [Thread-207460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:27:07.406 [DEBUG] [Thread-207460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:27:07.406 [DEBUG] [Thread-207460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:27:07.407 [DEBUG] [Thread-207460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:27:07.427 [INFO] [Thread-207460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:27:07.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:27:07.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:27:08.241 [DEBUG] [Thread-207460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:27:08.241 [DEBUG] [Thread-207460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:27:08.289 [DEBUG] [Thread-207460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:27:08.289 [DEBUG] [Thread-207460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:27:08.298 [DEBUG] [Thread-207460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:27:08.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:27:08.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:27:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:27:08.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:27:08.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:27:08.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:27:08.333 [DEBUG] [Thread-207460] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:27:19.676 [DEBUG] [Thread-207462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:34.735 [DEBUG] [Thread-207463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:27:38.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:27:38.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 26, 56), 23.97, 20.52, 0.0, 23.68, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:27:40.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:26:56
2026-02-15T16:27:41.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:27:41.329 [DEBUG] [Thread-207464] [transport.py] [_log()] starting thread (client mode): 0xa2d78820
2026-02-15T16:27:41.329 [DEBUG] [Thread-207464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:27:41.349 [DEBUG] [Thread-207464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:27:41.349 [INFO] [Thread-207464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:41.352 [DEBUG] [Thread-207464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] client lang: <none>
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] server lang: <none>
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] kex follows: False
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] Compression: none
2026-02-15T16:27:41.353 [DEBUG] [Thread-207464] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:27:41.371 [DEBUG] [Thread-207464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:27:41.372 [DEBUG] [Thread-207464] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:27:41.372 [DEBUG] [Thread-207464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:27:41.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:27:41.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:27:41.374 [DEBUG] [Thread-207464] [transport.py] [_log()] userauth is OK
2026-02-15T16:27:41.375 [DEBUG] [Thread-207464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:27:41.375 [DEBUG] [Thread-207464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:27:41.375 [DEBUG] [Thread-207464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:27:41.375 [DEBUG] [Thread-207464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:27:41.394 [INFO] [Thread-207464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:27:41.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:27:42.030 [DEBUG] [Thread-207464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:27:42.030 [DEBUG] [Thread-207464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:27:42.031 [DEBUG] [Thread-207464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:27:42.071 [DEBUG] [Thread-207464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:27:42.071 [DEBUG] [Thread-207464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:27:42.075 [DEBUG] [Thread-207464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:27:42.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:27:42.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:27:42.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:27:42.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:27:42.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:27:42.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:27:42.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:27:42.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:27:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:27:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.602179 -999.00  +22.70  13.88     26   +2.30 1 1 1 1 1   888    0 18.84 -67.09 ----- 13.9 13.9 161.6 21.7 28.4 -30.4 28.1 -28.1 29.8 -27.4 30.6 -30.0
2026-02-15T16:27:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:27:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:27:42.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.602179
2026-02-15T16:27:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:27:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:27:42.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:27:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:27:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:27:42.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:26:56', tmtdew=23.97, humidity=20.52, cloud=0.0, wind=23.68, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:27:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:27:42.104 [DEBUG] [Thread-207464] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:27:42.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:27:42.205 [DEBUG] [Thread-207467] [transport.py] [_log()] starting thread (client mode): 0xa2d7a0e0
2026-02-15T16:27:42.205 [DEBUG] [Thread-207467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:27:42.220 [DEBUG] [Thread-207467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:27:42.220 [INFO] [Thread-207467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:27:42.228 [DEBUG] [Thread-207467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:27:42.228 [DEBUG] [Thread-207467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:27:42.228 [DEBUG] [Thread-207467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:27:42.228 [DEBUG] [Thread-207467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:42.228 [DEBUG] [Thread-207467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] client lang: <none>
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] server lang: <none>
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] kex follows: False
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:27:42.229 [DEBUG] [Thread-207467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:27:42.230 [DEBUG] [Thread-207467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:27:42.230 [DEBUG] [Thread-207467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:27:42.230 [DEBUG] [Thread-207467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:27:42.230 [DEBUG] [Thread-207467] [transport.py] [_log()] Compression: none
2026-02-15T16:27:42.230 [DEBUG] [Thread-207467] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:27:42.285 [DEBUG] [Thread-207467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:27:42.285 [DEBUG] [Thread-207467] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:27:42.286 [DEBUG] [Thread-207467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:27:42.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:27:42.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:27:42.341 [DEBUG] [Thread-207467] [transport.py] [_log()] userauth is OK
2026-02-15T16:27:42.341 [DEBUG] [Thread-207467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:27:42.342 [DEBUG] [Thread-207467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:27:42.342 [DEBUG] [Thread-207467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:27:42.342 [DEBUG] [Thread-207467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:27:42.366 [INFO] [Thread-207467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:27:42.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:27:42.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:27:43.178 [DEBUG] [Thread-207467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:27:43.178 [DEBUG] [Thread-207467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:27:43.227 [DEBUG] [Thread-207467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:27:43.227 [DEBUG] [Thread-207467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:27:43.236 [DEBUG] [Thread-207467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:27:43.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:27:43.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:27:43.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:27:43.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:27:43.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:27:43.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:27:43.269 [DEBUG] [Thread-207467] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:27:49.773 [DEBUG] [Thread-207469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:57.170 [DEBUG] [Thread-207470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:58.755 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:27:58.756 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:04.830 [DEBUG] [Thread-207471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:13.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:28:13.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:28:13.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:28:15.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 27, 32), 24.01, 20.47, 0.0, 23.4, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:28:15.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:27:32
2026-02-15T16:28:15.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:28:15.794 [DEBUG] [Thread-207472] [transport.py] [_log()] starting thread (client mode): 0xa2d68700
2026-02-15T16:28:15.795 [DEBUG] [Thread-207472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:28:15.815 [DEBUG] [Thread-207472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:28:15.815 [INFO] [Thread-207472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:28:15.818 [DEBUG] [Thread-207472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:28:15.819 [DEBUG] [Thread-207472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] client lang: <none>
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] server lang: <none>
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] kex follows: False
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] Compression: none
2026-02-15T16:28:15.820 [DEBUG] [Thread-207472] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:28:15.837 [DEBUG] [Thread-207472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:28:15.838 [DEBUG] [Thread-207472] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:28:15.838 [DEBUG] [Thread-207472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:28:15.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:28:15.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:28:15.841 [DEBUG] [Thread-207472] [transport.py] [_log()] userauth is OK
2026-02-15T16:28:15.841 [DEBUG] [Thread-207472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:28:15.841 [DEBUG] [Thread-207472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:28:15.841 [DEBUG] [Thread-207472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:28:15.841 [DEBUG] [Thread-207472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:28:15.865 [INFO] [Thread-207472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:28:15.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:28:16.489 [DEBUG] [Thread-207472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:28:16.489 [DEBUG] [Thread-207472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:28:16.490 [DEBUG] [Thread-207472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:28:16.530 [DEBUG] [Thread-207472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:28:16.530 [DEBUG] [Thread-207472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:28:16.533 [DEBUG] [Thread-207472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:28:16.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:28:16.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:28:16.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:28:16.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:28:16.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:28:16.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:28:16.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:28:16.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:28:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:28:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.602526 -999.00  +22.80  14.98     26   +2.30 1 1 1 1 1   888    0 19.05 -67.01 ----- 15.0 15.0 142.2 20.6 28.6 -29.8 28.2 -28.4 30.0 -27.7 30.6 -30.5
2026-02-15T16:28:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:28:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:28:16.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.602526
2026-02-15T16:28:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:28:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:28:16.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:28:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:28:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:28:16.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:27:32', tmtdew=24.01, humidity=20.47, cloud=0.0, wind=23.4, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:27:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:28:16.558 [DEBUG] [Thread-207472] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:28:16.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:28:16.653 [DEBUG] [Thread-207475] [transport.py] [_log()] starting thread (client mode): 0xa2d6a1d0
2026-02-15T16:28:16.654 [DEBUG] [Thread-207475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:28:16.673 [DEBUG] [Thread-207475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:28:16.674 [INFO] [Thread-207475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:28:16.681 [DEBUG] [Thread-207475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:28:16.681 [DEBUG] [Thread-207475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:28:16.682 [DEBUG] [Thread-207475] [transport.py] [_log()] client lang: <none>
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] server lang: <none>
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] kex follows: False
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:28:16.683 [DEBUG] [Thread-207475] [transport.py] [_log()] Compression: none
2026-02-15T16:28:16.684 [DEBUG] [Thread-207475] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:28:16.742 [DEBUG] [Thread-207475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:28:16.743 [DEBUG] [Thread-207475] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:28:16.744 [DEBUG] [Thread-207475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:28:16.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:28:16.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:28:16.801 [DEBUG] [Thread-207475] [transport.py] [_log()] userauth is OK
2026-02-15T16:28:16.802 [DEBUG] [Thread-207475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:28:16.802 [DEBUG] [Thread-207475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:28:16.802 [DEBUG] [Thread-207475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:28:16.802 [DEBUG] [Thread-207475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:28:16.821 [INFO] [Thread-207475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:28:16.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:28:16.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:28:17.703 [DEBUG] [Thread-207475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:28:17.703 [DEBUG] [Thread-207475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:28:17.755 [DEBUG] [Thread-207475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:28:17.755 [DEBUG] [Thread-207475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:28:17.767 [DEBUG] [Thread-207475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:28:17.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:28:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:28:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:28:17.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:28:17.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:28:17.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:28:17.804 [DEBUG] [Thread-207475] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:28:19.867 [DEBUG] [Thread-207477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:34.918 [DEBUG] [Thread-207478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:47.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:28:47.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:28:47.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:28:49.956 [DEBUG] [Thread-207479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 28, 8), 24.1, 20.35, 0.0, 24.9, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:28:50.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:28:08
2026-02-15T16:28:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:28:50.536 [DEBUG] [Thread-207480] [transport.py] [_log()] starting thread (client mode): 0xa2d4cd30
2026-02-15T16:28:50.536 [DEBUG] [Thread-207480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:28:50.555 [DEBUG] [Thread-207480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:28:50.555 [INFO] [Thread-207480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:28:50.558 [DEBUG] [Thread-207480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] client lang: <none>
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] server lang: <none>
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] kex follows: False
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] Compression: none
2026-02-15T16:28:50.559 [DEBUG] [Thread-207480] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:28:50.577 [DEBUG] [Thread-207480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:28:50.578 [DEBUG] [Thread-207480] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:28:50.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:28:50.579 [DEBUG] [Thread-207480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:28:50.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:28:50.581 [DEBUG] [Thread-207480] [transport.py] [_log()] userauth is OK
2026-02-15T16:28:50.581 [DEBUG] [Thread-207480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:28:50.581 [DEBUG] [Thread-207480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:28:50.581 [DEBUG] [Thread-207480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:28:50.581 [DEBUG] [Thread-207480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:28:50.605 [INFO] [Thread-207480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:28:50.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:28:51.212 [DEBUG] [Thread-207480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:28:51.212 [DEBUG] [Thread-207480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:28:51.212 [DEBUG] [Thread-207480] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:28:51.253 [DEBUG] [Thread-207480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:28:51.254 [DEBUG] [Thread-207480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:28:51.257 [DEBUG] [Thread-207480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:28:51.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:28:51.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:28:51.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:28:51.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:28:51.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:28:51.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:28:51.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:28:51.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:28:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:28:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.603221 -999.00  +22.90  17.82     25   +2.20 1 1 1 1 1   888    0 19.39 -64.93 ----- 17.8 17.8 166.7 26.7 28.5 -30.1 28.2 -30.8 29.9 -27.4 30.6 -30.0
2026-02-15T16:28:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:28:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:28:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.603221
2026-02-15T16:28:51.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:28:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:28:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:28:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:28:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:28:51.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:28:08', tmtdew=24.1, humidity=20.35, cloud=0.0, wind=24.9, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:28:38.294', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:28:51.284 [DEBUG] [Thread-207480] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:28:51.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:28:51.380 [DEBUG] [Thread-207483] [transport.py] [_log()] starting thread (client mode): 0xa2d18a60
2026-02-15T16:28:51.380 [DEBUG] [Thread-207483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:28:51.396 [DEBUG] [Thread-207483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:28:51.396 [INFO] [Thread-207483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:28:51.403 [DEBUG] [Thread-207483] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] client lang: <none>
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] server lang: <none>
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] kex follows: False
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:28:51.404 [DEBUG] [Thread-207483] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:28:51.405 [DEBUG] [Thread-207483] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:28:51.405 [DEBUG] [Thread-207483] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:28:51.405 [DEBUG] [Thread-207483] [transport.py] [_log()] Compression: none
2026-02-15T16:28:51.405 [DEBUG] [Thread-207483] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:28:51.462 [DEBUG] [Thread-207483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:28:51.463 [DEBUG] [Thread-207483] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:28:51.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:28:51.464 [DEBUG] [Thread-207483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:28:51.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:28:51.521 [DEBUG] [Thread-207483] [transport.py] [_log()] userauth is OK
2026-02-15T16:28:51.521 [DEBUG] [Thread-207483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:28:51.521 [DEBUG] [Thread-207483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:28:51.521 [DEBUG] [Thread-207483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:28:51.521 [DEBUG] [Thread-207483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:28:51.542 [INFO] [Thread-207483] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:28:51.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:28:51.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:28:52.449 [DEBUG] [Thread-207483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:28:52.449 [DEBUG] [Thread-207483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:28:52.497 [DEBUG] [Thread-207483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:28:52.497 [DEBUG] [Thread-207483] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:28:52.505 [DEBUG] [Thread-207483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:28:52.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:28:52.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:28:52.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:28:52.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:28:52.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:28:52.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:28:52.540 [DEBUG] [Thread-207483] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:28:57.214 [DEBUG] [Thread-207485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:58.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:28:58.899 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:04.991 [DEBUG] [Thread-207486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:20.043 [DEBUG] [Thread-207487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:29:22.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:29:22.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:29:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 28, 43), 24.09, 20.37, 0.0, 26.41, 23.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:29:24.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:28:43
2026-02-15T16:29:25.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:29:25.292 [DEBUG] [Thread-207488] [transport.py] [_log()] starting thread (client mode): 0xa2d69330
2026-02-15T16:29:25.292 [DEBUG] [Thread-207488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:29:25.312 [DEBUG] [Thread-207488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:29:25.312 [INFO] [Thread-207488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] client lang: <none>
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] server lang: <none>
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] kex follows: False
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:29:25.315 [DEBUG] [Thread-207488] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:29:25.316 [DEBUG] [Thread-207488] [transport.py] [_log()] Compression: none
2026-02-15T16:29:25.316 [DEBUG] [Thread-207488] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:29:25.331 [DEBUG] [Thread-207488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:29:25.332 [DEBUG] [Thread-207488] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:29:25.332 [DEBUG] [Thread-207488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:29:25.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:29:25.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:29:25.332 [DEBUG] [Thread-207488] [transport.py] [_log()] userauth is OK
2026-02-15T16:29:25.333 [DEBUG] [Thread-207488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:29:25.333 [DEBUG] [Thread-207488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:29:25.333 [DEBUG] [Thread-207488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:29:25.333 [DEBUG] [Thread-207488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:29:25.352 [INFO] [Thread-207488] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:29:25.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:29:26.007 [DEBUG] [Thread-207488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:29:26.007 [DEBUG] [Thread-207488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:29:26.008 [DEBUG] [Thread-207488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:29:26.049 [DEBUG] [Thread-207488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:29:26.049 [DEBUG] [Thread-207488] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:29:26.052 [DEBUG] [Thread-207488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:29:26.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:29:26.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:29:26.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:29:26.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:29:26.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:29:26.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:29:26.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:29:26.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:29:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:29:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.603568 -999.00  +22.90  14.96     26   +2.40 1 1 1 1 1   888    0 19.03 -63.18 ----- 15.0 15.0 149.1 28.4 28.5 -30.4 28.1 -29.4 29.8 -28.8 30.6 -31.0
2026-02-15T16:29:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:29:26.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:29:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.603568
2026-02-15T16:29:26.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:29:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:29:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:29:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:29:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:29:26.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:28:43', tmtdew=24.09, humidity=20.37, cloud=0.0, wind=26.41, temperature=23.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:29:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:29:26.080 [DEBUG] [Thread-207488] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:29:26.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:29:26.168 [DEBUG] [Thread-207491] [transport.py] [_log()] starting thread (client mode): 0xa2d78100
2026-02-15T16:29:26.168 [DEBUG] [Thread-207491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:29:26.186 [DEBUG] [Thread-207491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:29:26.186 [INFO] [Thread-207491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:29:26.193 [DEBUG] [Thread-207491] [transport.py] [_log()] client lang: <none>
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] server lang: <none>
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] kex follows: False
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] Compression: none
2026-02-15T16:29:26.194 [DEBUG] [Thread-207491] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:29:26.251 [DEBUG] [Thread-207491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:29:26.251 [DEBUG] [Thread-207491] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:29:26.251 [DEBUG] [Thread-207491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:29:26.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:29:26.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:29:26.308 [DEBUG] [Thread-207491] [transport.py] [_log()] userauth is OK
2026-02-15T16:29:26.308 [DEBUG] [Thread-207491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:29:26.308 [DEBUG] [Thread-207491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:29:26.308 [DEBUG] [Thread-207491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:29:26.308 [DEBUG] [Thread-207491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:29:26.322 [INFO] [Thread-207491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:29:26.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:29:26.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:29:27.173 [DEBUG] [Thread-207491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:29:27.173 [DEBUG] [Thread-207491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:29:27.221 [DEBUG] [Thread-207491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:29:27.221 [DEBUG] [Thread-207491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:29:27.231 [DEBUG] [Thread-207491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:29:27.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:29:27.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:29:27.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:29:27.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:29:27.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:29:27.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:29:27.268 [DEBUG] [Thread-207491] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:29:35.075 [DEBUG] [Thread-207493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:50.129 [DEBUG] [Thread-207494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:57.256 [DEBUG] [Thread-207495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:29:57.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:29: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
2026-02-15T16:29:59.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:59.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:29:59.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 29, 19), 24.02, 20.45, 0.0, 27.24, 23.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:29:59.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:29:19
2026-02-15T16:29:59.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:29:59.938 [DEBUG] [Thread-207496] [transport.py] [_log()] starting thread (client mode): 0xa2d1a590
2026-02-15T16:29:59.938 [DEBUG] [Thread-207496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:29:59.958 [DEBUG] [Thread-207496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:29:59.959 [INFO] [Thread-207496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] client lang: <none>
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] server lang: <none>
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] kex follows: False
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:29:59.962 [DEBUG] [Thread-207496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:29:59.963 [DEBUG] [Thread-207496] [transport.py] [_log()] Compression: none
2026-02-15T16:29:59.963 [DEBUG] [Thread-207496] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:29:59.980 [DEBUG] [Thread-207496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:29:59.981 [DEBUG] [Thread-207496] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:29:59.981 [DEBUG] [Thread-207496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:29:59.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:29:59.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:29:59.983 [DEBUG] [Thread-207496] [transport.py] [_log()] userauth is OK
2026-02-15T16:29:59.983 [DEBUG] [Thread-207496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:29:59.983 [DEBUG] [Thread-207496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:29:59.983 [DEBUG] [Thread-207496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:29:59.984 [DEBUG] [Thread-207496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:30:00.020 [INFO] [Thread-207496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:30:00.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:30:00.638 [DEBUG] [Thread-207496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:30:00.639 [DEBUG] [Thread-207496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:30:00.639 [DEBUG] [Thread-207496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:30:00.680 [DEBUG] [Thread-207496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:30:00.680 [DEBUG] [Thread-207496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:30:00.684 [DEBUG] [Thread-207496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:30:00.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:30:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:30:00.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:30:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:30:00.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:30:00.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:30:00.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:30:00.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:30:00.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:30:00.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.603915 -999.00  +22.90  24.11     25   +2.30 1 1 1 1 1   888    0 19.20 -58.64 ----- 24.1 24.1 172.0 28.5 28.4 -30.6 27.9 -28.7 29.8 -28.9 30.6 -31.9
2026-02-15T16:30:00.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:30:00.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:30:00.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.603915
2026-02-15T16:30:00.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:30:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:30:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:30:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:30:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:30:00.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:29:19', tmtdew=24.02, humidity=20.45, cloud=0.0, wind=27.24, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:29:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:30:00.712 [DEBUG] [Thread-207496] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:30:00.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:30:00.824 [DEBUG] [Thread-207499] [transport.py] [_log()] starting thread (client mode): 0xa2d19fc0
2026-02-15T16:30:00.824 [DEBUG] [Thread-207499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:30:00.838 [DEBUG] [Thread-207499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:30:00.839 [INFO] [Thread-207499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:30:00.846 [DEBUG] [Thread-207499] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:30:00.846 [DEBUG] [Thread-207499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:30:00.846 [DEBUG] [Thread-207499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:30:00.846 [DEBUG] [Thread-207499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:30:00.846 [DEBUG] [Thread-207499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:30:00.846 [DEBUG] [Thread-207499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] client lang: <none>
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] server lang: <none>
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] kex follows: False
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] Compression: none
2026-02-15T16:30:00.847 [DEBUG] [Thread-207499] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:30:00.905 [DEBUG] [Thread-207499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:30:00.906 [DEBUG] [Thread-207499] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:30:00.906 [DEBUG] [Thread-207499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:30:00.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:30:00.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:30:00.961 [DEBUG] [Thread-207499] [transport.py] [_log()] userauth is OK
2026-02-15T16:30:00.961 [DEBUG] [Thread-207499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:30:00.961 [DEBUG] [Thread-207499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:30:00.961 [DEBUG] [Thread-207499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:30:00.961 [DEBUG] [Thread-207499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:30:00.980 [INFO] [Thread-207499] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:30:00.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:30:00.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:30:01.820 [DEBUG] [Thread-207499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:30:01.820 [DEBUG] [Thread-207499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:30:01.869 [DEBUG] [Thread-207499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:30:01.869 [DEBUG] [Thread-207499] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:30:01.878 [DEBUG] [Thread-207499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:30:01.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:30:01.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:30:01.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:30:01.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:30:01.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:30:01.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:30:01.916 [DEBUG] [Thread-207499] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:30:05.167 [DEBUG] [Thread-207501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:30:20.233 [DEBUG] [Thread-207502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:30:31.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:30:31.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:30:31.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:30:33.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 29, 55), 23.91, 20.63, 0.0, 23.17, 23.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:30:33.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:29:55
2026-02-15T16:30:34.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:30:34.525 [DEBUG] [Thread-207503] [transport.py] [_log()] starting thread (client mode): 0xa2d6bdf0
2026-02-15T16:30:34.525 [DEBUG] [Thread-207503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:30:34.546 [DEBUG] [Thread-207503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:30:34.546 [INFO] [Thread-207503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:30:34.549 [DEBUG] [Thread-207503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] client lang: <none>
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] server lang: <none>
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] kex follows: False
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] Compression: none
2026-02-15T16:30:34.550 [DEBUG] [Thread-207503] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:30:34.568 [DEBUG] [Thread-207503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:30:34.569 [DEBUG] [Thread-207503] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:30:34.569 [DEBUG] [Thread-207503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:30:34.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:30:34.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:30:34.571 [DEBUG] [Thread-207503] [transport.py] [_log()] userauth is OK
2026-02-15T16:30:34.572 [DEBUG] [Thread-207503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:30:34.572 [DEBUG] [Thread-207503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:30:34.572 [DEBUG] [Thread-207503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:30:34.572 [DEBUG] [Thread-207503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:30:34.605 [INFO] [Thread-207503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:30:34.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:30:35.266 [DEBUG] [Thread-207505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:30:35.281 [DEBUG] [Thread-207503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:30:35.281 [DEBUG] [Thread-207503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:30:35.281 [DEBUG] [Thread-207503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:30:35.322 [DEBUG] [Thread-207503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:30:35.322 [DEBUG] [Thread-207503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:30:35.324 [DEBUG] [Thread-207503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:30:35.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:30:35.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:30:35.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:30:35.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:30:35.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:30:35.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:30:35.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.604262 -999.00  +22.80  19.45     26   +2.40 1 1 1 1 1   888    0 18.93 -55.11 ----- 19.4 19.4 167.2 24.7 28.4 -31.1 27.8 -29.2 29.7 -30.6 30.4 -32.9
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.604262
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:30:35.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:29:55', tmtdew=23.91, humidity=20.63, cloud=0.0, wind=23.17, temperature=23.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:30:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:30:35.346 [DEBUG] [Thread-207503] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:30:35.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:30:35.433 [DEBUG] [Thread-207507] [transport.py] [_log()] starting thread (client mode): 0xa2d19fc0
2026-02-15T16:30:35.433 [DEBUG] [Thread-207507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:30:35.447 [DEBUG] [Thread-207507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:30:35.447 [INFO] [Thread-207507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] client lang: <none>
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] server lang: <none>
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] kex follows: False
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] Compression: none
2026-02-15T16:30:35.455 [DEBUG] [Thread-207507] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:30:35.511 [DEBUG] [Thread-207507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:30:35.511 [DEBUG] [Thread-207507] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:30:35.511 [DEBUG] [Thread-207507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:30:35.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:30:35.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:30:35.568 [DEBUG] [Thread-207507] [transport.py] [_log()] userauth is OK
2026-02-15T16:30:35.568 [DEBUG] [Thread-207507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:30:35.568 [DEBUG] [Thread-207507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:30:35.569 [DEBUG] [Thread-207507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:30:35.569 [DEBUG] [Thread-207507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:30:35.584 [INFO] [Thread-207507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:30:35.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:30:35.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:30:36.423 [DEBUG] [Thread-207507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:30:36.424 [DEBUG] [Thread-207507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:30:36.471 [DEBUG] [Thread-207507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:30:36.472 [DEBUG] [Thread-207507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:30:36.481 [DEBUG] [Thread-207507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:30:36.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:30:36.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:30:36.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:30:36.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:30:36.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:30:36.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:30:36.517 [DEBUG] [Thread-207507] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:30:50.301 [DEBUG] [Thread-207509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:30:57.288 [DEBUG] [Thread-207510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:30:59.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:30:59.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:05.353 [DEBUG] [Thread-207511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:06.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:31:06.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:31:06.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:31:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 30, 30), 23.77, 20.83, 0.0, 23.38, 22.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:31:08.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:30:30
2026-02-15T16:31:08.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:31:09.115 [DEBUG] [Thread-207512] [transport.py] [_log()] starting thread (client mode): 0xa2d6aec0
2026-02-15T16:31:09.115 [DEBUG] [Thread-207512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:31:09.136 [DEBUG] [Thread-207512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:31:09.136 [INFO] [Thread-207512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] client lang: <none>
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] server lang: <none>
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] kex follows: False
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:31:09.138 [DEBUG] [Thread-207512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:31:09.139 [DEBUG] [Thread-207512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:31:09.139 [DEBUG] [Thread-207512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:31:09.139 [DEBUG] [Thread-207512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:31:09.139 [DEBUG] [Thread-207512] [transport.py] [_log()] Compression: none
2026-02-15T16:31:09.139 [DEBUG] [Thread-207512] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:31:09.157 [DEBUG] [Thread-207512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:31:09.157 [DEBUG] [Thread-207512] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:31:09.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:31:09.159 [DEBUG] [Thread-207512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:31:09.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:31:09.161 [DEBUG] [Thread-207512] [transport.py] [_log()] userauth is OK
2026-02-15T16:31:09.161 [DEBUG] [Thread-207512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:31:09.161 [DEBUG] [Thread-207512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:31:09.161 [DEBUG] [Thread-207512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:31:09.161 [DEBUG] [Thread-207512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:31:09.185 [INFO] [Thread-207512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:31:09.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:31:09.806 [DEBUG] [Thread-207512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:31:09.806 [DEBUG] [Thread-207512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:31:09.806 [DEBUG] [Thread-207512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:31:09.847 [DEBUG] [Thread-207512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:31:09.848 [DEBUG] [Thread-207512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:31:09.850 [DEBUG] [Thread-207512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:31:09.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:31:09.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:31:09.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:31:09.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:31:09.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:31:09.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:31:09.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:31:09.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:31:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:31:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.604609 -999.00  +22.90  19.92     26   +2.50 1 1 1 1 1   888    0 19.05 -60.10 ----- 20.8 19.9 172.2 25.5 28.4 -30.1 27.9 -32.7 29.8 -27.8 30.6 -29.8
2026-02-15T16:31:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:31:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:31:09.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.604609
2026-02-15T16:31:09.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:31:09.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:31:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:31:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:31:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:31:09.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:30:30', tmtdew=23.77, humidity=20.83, cloud=0.0, wind=23.38, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:30:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:31:09.877 [DEBUG] [Thread-207512] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:31:09.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:31:09.977 [DEBUG] [Thread-207515] [transport.py] [_log()] starting thread (client mode): 0xa2d69270
2026-02-15T16:31:09.977 [DEBUG] [Thread-207515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:31:09.992 [DEBUG] [Thread-207515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:31:09.992 [INFO] [Thread-207515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:31:10.000 [DEBUG] [Thread-207515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:31:10.000 [DEBUG] [Thread-207515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] client lang: <none>
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] server lang: <none>
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] kex follows: False
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] Compression: none
2026-02-15T16:31:10.001 [DEBUG] [Thread-207515] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:31:10.062 [DEBUG] [Thread-207515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:31:10.062 [DEBUG] [Thread-207515] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:31:10.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:31:10.064 [DEBUG] [Thread-207515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:31:10.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:31:10.122 [DEBUG] [Thread-207515] [transport.py] [_log()] userauth is OK
2026-02-15T16:31:10.122 [DEBUG] [Thread-207515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:31:10.122 [DEBUG] [Thread-207515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:31:10.122 [DEBUG] [Thread-207515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:31:10.122 [DEBUG] [Thread-207515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:31:10.140 [INFO] [Thread-207515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:31:10.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:31:10.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:31:10.964 [DEBUG] [Thread-207515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:31:10.964 [DEBUG] [Thread-207515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:31:11.012 [DEBUG] [Thread-207515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:31:11.013 [DEBUG] [Thread-207515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:31:11.022 [DEBUG] [Thread-207515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:31:11.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:31:11.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:31:11.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:31:11.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:31:11.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:31:11.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:31:11.060 [DEBUG] [Thread-207515] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:31:20.395 [DEBUG] [Thread-207517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:35.449 [DEBUG] [Thread-207518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:41.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:31:41.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:31:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:31:43.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 31, 6), 24.06, 20.5, 0.0, 27.07, 23.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:31:43.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:31:06
2026-02-15T16:31:43.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:31:43.768 [DEBUG] [Thread-207519] [transport.py] [_log()] starting thread (client mode): 0xa2d1ae90
2026-02-15T16:31:43.768 [DEBUG] [Thread-207519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:31:43.787 [DEBUG] [Thread-207519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:31:43.787 [INFO] [Thread-207519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:31:43.790 [DEBUG] [Thread-207519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:31:43.790 [DEBUG] [Thread-207519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:31:43.790 [DEBUG] [Thread-207519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:31:43.790 [DEBUG] [Thread-207519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] client lang: <none>
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] server lang: <none>
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] kex follows: False
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] Compression: none
2026-02-15T16:31:43.791 [DEBUG] [Thread-207519] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:31:43.808 [DEBUG] [Thread-207519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:31:43.808 [DEBUG] [Thread-207519] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:31:43.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:31:43.809 [DEBUG] [Thread-207519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:31:43.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:31:43.812 [DEBUG] [Thread-207519] [transport.py] [_log()] userauth is OK
2026-02-15T16:31:43.812 [DEBUG] [Thread-207519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:31:43.812 [DEBUG] [Thread-207519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:31:43.812 [DEBUG] [Thread-207519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:31:43.812 [DEBUG] [Thread-207519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:31:43.826 [INFO] [Thread-207519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:31:43.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:31:44.493 [DEBUG] [Thread-207519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:31:44.494 [DEBUG] [Thread-207519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:31:44.494 [DEBUG] [Thread-207519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:31:44.534 [DEBUG] [Thread-207519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:31:44.534 [DEBUG] [Thread-207519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:31:44.537 [DEBUG] [Thread-207519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:31:44.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:31:44.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:31:44.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:31:44.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:31:44.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:31:44.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:31:44.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:31:44.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:31:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:31:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.604957 -999.00  +23.00  26.27     26   +2.50 1 1 1 1 1   888    0 19.33 -61.38 ----- 26.3 26.3 169.4 30.2 28.3 -30.4 27.8 -29.0 29.6 -28.3 30.3 -30.6
2026-02-15T16:31:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:31:44.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:31:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.604957
2026-02-15T16:31:44.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:31:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:31:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:31:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:31:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:31:44.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:31:06', tmtdew=24.06, humidity=20.5, cloud=0.0, wind=27.07, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:31:08.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:31:44.565 [DEBUG] [Thread-207519] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:31:44.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:31:44.660 [DEBUG] [Thread-207522] [transport.py] [_log()] starting thread (client mode): 0xa2d18c70
2026-02-15T16:31:44.660 [DEBUG] [Thread-207522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:31:44.675 [DEBUG] [Thread-207522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:31:44.675 [INFO] [Thread-207522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:31:44.683 [DEBUG] [Thread-207522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:31:44.683 [DEBUG] [Thread-207522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] client lang: <none>
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] server lang: <none>
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] kex follows: False
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:31:44.684 [DEBUG] [Thread-207522] [transport.py] [_log()] Compression: none
2026-02-15T16:31:44.685 [DEBUG] [Thread-207522] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:31:44.742 [DEBUG] [Thread-207522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:31:44.743 [DEBUG] [Thread-207522] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:31:44.743 [DEBUG] [Thread-207522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:31:44.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:31:44.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:31:44.801 [DEBUG] [Thread-207522] [transport.py] [_log()] userauth is OK
2026-02-15T16:31:44.801 [DEBUG] [Thread-207522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:31:44.802 [DEBUG] [Thread-207522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:31:44.802 [DEBUG] [Thread-207522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:31:44.802 [DEBUG] [Thread-207522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:31:44.820 [INFO] [Thread-207522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:31:44.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:31:44.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:31:45.630 [DEBUG] [Thread-207522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:31:45.630 [DEBUG] [Thread-207522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:31:45.678 [DEBUG] [Thread-207522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:31:45.678 [DEBUG] [Thread-207522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:31:45.687 [DEBUG] [Thread-207522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:31:45.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:31:45.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:31:45.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:31:45.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:31:45.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:31:45.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:31:45.729 [DEBUG] [Thread-207522] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:31:50.492 [DEBUG] [Thread-207524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:57.322 [DEBUG] [Thread-207525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:59.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:31:59.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:05.552 [DEBUG] [Thread-207526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:15.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:32:15.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:32:15.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:32:18.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 31, 41), 25.06, 19.03, 0.0, 32.81, 24.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:32:18.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:31:41
2026-02-15T16:32:18.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:32:18.827 [DEBUG] [Thread-207527] [transport.py] [_log()] starting thread (client mode): 0xa2d6b490
2026-02-15T16:32:18.827 [DEBUG] [Thread-207527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:32:18.847 [DEBUG] [Thread-207527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:32:18.847 [INFO] [Thread-207527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:32:18.850 [DEBUG] [Thread-207527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:32:18.850 [DEBUG] [Thread-207527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:32:18.850 [DEBUG] [Thread-207527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] client lang: <none>
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] server lang: <none>
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] kex follows: False
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:32:18.851 [DEBUG] [Thread-207527] [transport.py] [_log()] Compression: none
2026-02-15T16:32:18.852 [DEBUG] [Thread-207527] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:32:18.870 [DEBUG] [Thread-207527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:32:18.871 [DEBUG] [Thread-207527] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:32:18.871 [DEBUG] [Thread-207527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:32:18.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:32:18.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:32:18.873 [DEBUG] [Thread-207527] [transport.py] [_log()] userauth is OK
2026-02-15T16:32:18.873 [DEBUG] [Thread-207527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:32:18.873 [DEBUG] [Thread-207527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:32:18.873 [DEBUG] [Thread-207527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:32:18.873 [DEBUG] [Thread-207527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:32:18.883 [INFO] [Thread-207527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:32:18.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:32:19.472 [DEBUG] [Thread-207527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:32:19.472 [DEBUG] [Thread-207527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:32:19.472 [DEBUG] [Thread-207527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:32:19.513 [DEBUG] [Thread-207527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:32:19.513 [DEBUG] [Thread-207527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:32:19.516 [DEBUG] [Thread-207527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:32:19.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:32:19.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:32:19.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:32:19.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:32:19.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:32:19.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:32:19.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:32:19.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:32:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:32:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.605304 -999.00  +22.70  22.52     26   +2.40 1 1 1 1 1   888    0 18.91 -61.47 ----- 22.2 22.5 170.0 31.4 28.3 -30.8 27.8 -28.7 29.5 -28.3 30.4 -30.4
2026-02-15T16:32:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:32:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:32:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.605304
2026-02-15T16:32:19.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:32:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:32:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:32:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:32:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:32:19.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:31:41', tmtdew=25.06, humidity=19.03, cloud=0.0, wind=32.81, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:31:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:32:19.538 [DEBUG] [Thread-207527] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:32:19.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:32:19.636 [DEBUG] [Thread-207530] [transport.py] [_log()] starting thread (client mode): 0xa2d6beb0
2026-02-15T16:32:19.636 [DEBUG] [Thread-207530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:32:19.654 [DEBUG] [Thread-207530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:32:19.654 [INFO] [Thread-207530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:32:19.665 [DEBUG] [Thread-207530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:32:19.665 [DEBUG] [Thread-207530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:32:19.665 [DEBUG] [Thread-207530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:32:19.665 [DEBUG] [Thread-207530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:19.665 [DEBUG] [Thread-207530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:19.665 [DEBUG] [Thread-207530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] client lang: <none>
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] server lang: <none>
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] kex follows: False
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:32:19.666 [DEBUG] [Thread-207530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:32:19.667 [DEBUG] [Thread-207530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:32:19.667 [DEBUG] [Thread-207530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:32:19.667 [DEBUG] [Thread-207530] [transport.py] [_log()] Compression: none
2026-02-15T16:32:19.667 [DEBUG] [Thread-207530] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:32:19.726 [DEBUG] [Thread-207530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:32:19.727 [DEBUG] [Thread-207530] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:32:19.727 [DEBUG] [Thread-207530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:32:19.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:32:19.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:32:19.785 [DEBUG] [Thread-207530] [transport.py] [_log()] userauth is OK
2026-02-15T16:32:19.786 [DEBUG] [Thread-207530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:32:19.786 [DEBUG] [Thread-207530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:32:19.786 [DEBUG] [Thread-207530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:32:19.786 [DEBUG] [Thread-207530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:32:19.806 [INFO] [Thread-207530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:32:19.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:32:19.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:32:20.587 [DEBUG] [Thread-207532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:20.642 [DEBUG] [Thread-207530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:32:20.642 [DEBUG] [Thread-207530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:32:20.690 [DEBUG] [Thread-207530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:32:20.690 [DEBUG] [Thread-207530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:32:20.699 [DEBUG] [Thread-207530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:32:20.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:32:20.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:32:20.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:32:20.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:32:20.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:32:20.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:32:20.733 [DEBUG] [Thread-207530] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:32:35.637 [DEBUG] [Thread-207533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:50.675 [DEBUG] [Thread-207534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:50.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:32:50.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:32:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:32:53.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 32, 17), 23.69, 20.6, 0.0, 24.95, 22.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:32:53.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:32:17
2026-02-15T16:32:53.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:32:53.733 [DEBUG] [Thread-207535] [transport.py] [_log()] starting thread (client mode): 0xa2d1b1f0
2026-02-15T16:32:53.733 [DEBUG] [Thread-207535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:32:53.752 [DEBUG] [Thread-207535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:32:53.752 [INFO] [Thread-207535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:53.755 [DEBUG] [Thread-207535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] client lang: <none>
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] server lang: <none>
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] kex follows: False
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] Compression: none
2026-02-15T16:32:53.756 [DEBUG] [Thread-207535] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:32:53.772 [DEBUG] [Thread-207535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:32:53.773 [DEBUG] [Thread-207535] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:32:53.773 [DEBUG] [Thread-207535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:32:53.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:32:53.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:32:53.776 [DEBUG] [Thread-207535] [transport.py] [_log()] userauth is OK
2026-02-15T16:32:53.776 [DEBUG] [Thread-207535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:32:53.776 [DEBUG] [Thread-207535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:32:53.776 [DEBUG] [Thread-207535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:32:53.776 [DEBUG] [Thread-207535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:32:53.795 [INFO] [Thread-207535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:32:53.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:32:54.545 [DEBUG] [Thread-207535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:32:54.546 [DEBUG] [Thread-207535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:32:54.546 [DEBUG] [Thread-207535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:32:54.586 [DEBUG] [Thread-207535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:32:54.586 [DEBUG] [Thread-207535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:32:54.589 [DEBUG] [Thread-207535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:32:54.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:32:54.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:32:54.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:32:54.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:32:54.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:32:54.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:32:54.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:32:54.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:32:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:32:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.605651 -999.00  +22.70  19.43     26   +2.40 1 1 1 1 1   888    0 18.95 -62.55 ----- 19.4 19.4 149.0 24.7 28.2 -29.9 27.8 -28.9 29.5 -27.6 30.3 -29.5
2026-02-15T16:32:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:32:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:32:54.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.605651
2026-02-15T16:32:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:32:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:32:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:32:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:32:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:32:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:32:17', tmtdew=23.69, humidity=20.6, cloud=0.0, wind=24.95, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:32:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:32:54.616 [DEBUG] [Thread-207535] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:32:54.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:32:54.712 [DEBUG] [Thread-207538] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-15T16:32:54.712 [DEBUG] [Thread-207538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:32:54.726 [DEBUG] [Thread-207538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:32:54.727 [INFO] [Thread-207538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:32:54.734 [DEBUG] [Thread-207538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:32:54.735 [DEBUG] [Thread-207538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:32:54.735 [DEBUG] [Thread-207538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:32:54.735 [DEBUG] [Thread-207538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:54.735 [DEBUG] [Thread-207538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:32:54.735 [DEBUG] [Thread-207538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:54.735 [DEBUG] [Thread-207538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] client lang: <none>
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] server lang: <none>
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] kex follows: False
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:32:54.736 [DEBUG] [Thread-207538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:32:54.737 [DEBUG] [Thread-207538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:32:54.737 [DEBUG] [Thread-207538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:32:54.737 [DEBUG] [Thread-207538] [transport.py] [_log()] Compression: none
2026-02-15T16:32:54.737 [DEBUG] [Thread-207538] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:32:54.793 [DEBUG] [Thread-207538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:32:54.794 [DEBUG] [Thread-207538] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:32:54.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:32:54.795 [DEBUG] [Thread-207538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:32:54.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:32:54.849 [DEBUG] [Thread-207538] [transport.py] [_log()] userauth is OK
2026-02-15T16:32:54.849 [DEBUG] [Thread-207538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:32:54.849 [DEBUG] [Thread-207538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:32:54.849 [DEBUG] [Thread-207538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:32:54.850 [DEBUG] [Thread-207538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:32:54.868 [INFO] [Thread-207538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:32:54.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:32:54.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:32:55.717 [DEBUG] [Thread-207538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:32:55.717 [DEBUG] [Thread-207538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:32:55.769 [DEBUG] [Thread-207538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:32:55.769 [DEBUG] [Thread-207538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:32:55.779 [DEBUG] [Thread-207538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:32:55.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:32:55.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:32:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:32:55.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:32:55.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:32:55.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:32:55.817 [DEBUG] [Thread-207538] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:32:57.366 [DEBUG] [Thread-207540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:59.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:32:59.473 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:05.709 [DEBUG] [Thread-207541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:20.766 [DEBUG] [Thread-207542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:25.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:33:25.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:33:25.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:33:27.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 32, 53), 23.57, 20.71, 0.0, 25.66, 22.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:33:27.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:32:53
2026-02-15T16:33:28.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:33:28.245 [DEBUG] [Thread-207543] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd30
2026-02-15T16:33:28.245 [DEBUG] [Thread-207543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:33:28.265 [DEBUG] [Thread-207543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:33:28.266 [INFO] [Thread-207543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] client lang: <none>
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] server lang: <none>
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] kex follows: False
2026-02-15T16:33:28.269 [DEBUG] [Thread-207543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:33:28.270 [DEBUG] [Thread-207543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:33:28.270 [DEBUG] [Thread-207543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:33:28.270 [DEBUG] [Thread-207543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:33:28.270 [DEBUG] [Thread-207543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:33:28.270 [DEBUG] [Thread-207543] [transport.py] [_log()] Compression: none
2026-02-15T16:33:28.270 [DEBUG] [Thread-207543] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:33:28.287 [DEBUG] [Thread-207543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:33:28.287 [DEBUG] [Thread-207543] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:33:28.288 [DEBUG] [Thread-207543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:33:28.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:33:28.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:33:28.291 [DEBUG] [Thread-207543] [transport.py] [_log()] userauth is OK
2026-02-15T16:33:28.291 [DEBUG] [Thread-207543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:33:28.291 [DEBUG] [Thread-207543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:33:28.291 [DEBUG] [Thread-207543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:33:28.291 [DEBUG] [Thread-207543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:33:28.316 [INFO] [Thread-207543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:33:28.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:33:28.957 [DEBUG] [Thread-207543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:33:28.957 [DEBUG] [Thread-207543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:33:28.958 [DEBUG] [Thread-207543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:33:28.998 [DEBUG] [Thread-207543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:33:28.999 [DEBUG] [Thread-207543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:33:29.002 [DEBUG] [Thread-207543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:33:29.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:33:29.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:33:29.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:33:29.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:33:29.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:33:29.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:33:29.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:33:29.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:33:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:33:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.605998 -999.00  +22.60  21.14     26   +2.40 1 1 1 1 1   888    0 18.83 -60.66 ----- 21.3 21.1 157.2 26.1 28.1 -30.8 27.8 -28.3 29.4 -28.4 30.2 -31.3
2026-02-15T16:33:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:33:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:33:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.605998
2026-02-15T16:33:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:33:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:33:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:33:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:33:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:33:29.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:32:53', tmtdew=23.57, humidity=20.71, cloud=0.0, wind=25.66, temperature=22.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:32:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:33:29.029 [DEBUG] [Thread-207543] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:33:29.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:33:29.125 [DEBUG] [Thread-207546] [transport.py] [_log()] starting thread (client mode): 0xa2d689a0
2026-02-15T16:33:29.125 [DEBUG] [Thread-207546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:33:29.140 [DEBUG] [Thread-207546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:33:29.140 [INFO] [Thread-207546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:33:29.147 [DEBUG] [Thread-207546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] client lang: <none>
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] server lang: <none>
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] kex follows: False
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:33:29.148 [DEBUG] [Thread-207546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:33:29.149 [DEBUG] [Thread-207546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:33:29.149 [DEBUG] [Thread-207546] [transport.py] [_log()] Compression: none
2026-02-15T16:33:29.149 [DEBUG] [Thread-207546] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:33:29.205 [DEBUG] [Thread-207546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:33:29.206 [DEBUG] [Thread-207546] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:33:29.207 [DEBUG] [Thread-207546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:33:29.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:33:29.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:33:29.265 [DEBUG] [Thread-207546] [transport.py] [_log()] userauth is OK
2026-02-15T16:33:29.265 [DEBUG] [Thread-207546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:33:29.265 [DEBUG] [Thread-207546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:33:29.265 [DEBUG] [Thread-207546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:33:29.266 [DEBUG] [Thread-207546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:33:29.284 [INFO] [Thread-207546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:33:29.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:33:29.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:33:30.125 [DEBUG] [Thread-207546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:33:30.126 [DEBUG] [Thread-207546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:33:30.175 [DEBUG] [Thread-207546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:33:30.175 [DEBUG] [Thread-207546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:33:30.188 [DEBUG] [Thread-207546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:33:30.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:33:30.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:33:30.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:33:30.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:33:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:33:30.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:33:30.237 [DEBUG] [Thread-207546] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:33:35.802 [DEBUG] [Thread-207548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:50.863 [DEBUG] [Thread-207549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:57.411 [DEBUG] [Thread-207550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:59.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:33:59.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:34:00.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:34:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:34:02.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 33, 30), 23.71, 20.52, 0.0, 24.05, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:34:02.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:33:30
2026-02-15T16:34:02.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:34:02.593 [DEBUG] [Thread-207551] [transport.py] [_log()] starting thread (client mode): 0xa2d19ed0
2026-02-15T16:34:02.593 [DEBUG] [Thread-207551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:34:02.609 [DEBUG] [Thread-207551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:34:02.609 [INFO] [Thread-207551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] client lang: <none>
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] server lang: <none>
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] kex follows: False
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] Compression: none
2026-02-15T16:34:02.613 [DEBUG] [Thread-207551] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:34:02.628 [DEBUG] [Thread-207551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:34:02.628 [DEBUG] [Thread-207551] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:34:02.628 [DEBUG] [Thread-207551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:34:02.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:34:02.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:34:02.629 [DEBUG] [Thread-207551] [transport.py] [_log()] userauth is OK
2026-02-15T16:34:02.629 [DEBUG] [Thread-207551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:34:02.629 [DEBUG] [Thread-207551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:34:02.629 [DEBUG] [Thread-207551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:34:02.630 [DEBUG] [Thread-207551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:34:02.639 [INFO] [Thread-207551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:34:02.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:34:03.221 [DEBUG] [Thread-207551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:34:03.221 [DEBUG] [Thread-207551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:34:03.221 [DEBUG] [Thread-207551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:34:03.262 [DEBUG] [Thread-207551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:34:03.262 [DEBUG] [Thread-207551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:34:03.265 [DEBUG] [Thread-207551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:34:03.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:34:03.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:34:03.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:34:03.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:34:03.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:34:03.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:34:03.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:34:03.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:34:03.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:34:03.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.606693 -999.00  +22.70  18.58     26   +2.30 1 1 1 1 1   888    0 18.84 -61.82 ----- 18.6 18.6 179.6 28.0 28.2 -30.5 27.5 -33.6 29.4 -28.0 30.3 -30.2
2026-02-15T16:34:03.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:34:03.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:34:03.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.606693
2026-02-15T16:34:03.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:34:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:34:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:34:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:34:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:34:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:33:30', tmtdew=23.71, humidity=20.52, cloud=0.0, wind=24.05, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:33:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:34:03.289 [DEBUG] [Thread-207551] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:34:03.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:34:03.388 [DEBUG] [Thread-207554] [transport.py] [_log()] starting thread (client mode): 0xa2d198a0
2026-02-15T16:34:03.388 [DEBUG] [Thread-207554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:34:03.407 [DEBUG] [Thread-207554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:34:03.407 [INFO] [Thread-207554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:34:03.415 [DEBUG] [Thread-207554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] client lang: <none>
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] server lang: <none>
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] kex follows: False
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] Compression: none
2026-02-15T16:34:03.416 [DEBUG] [Thread-207554] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:34:03.473 [DEBUG] [Thread-207554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:34:03.474 [DEBUG] [Thread-207554] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:34:03.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:34:03.475 [DEBUG] [Thread-207554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:34:03.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:34:03.530 [DEBUG] [Thread-207554] [transport.py] [_log()] userauth is OK
2026-02-15T16:34:03.530 [DEBUG] [Thread-207554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:34:03.530 [DEBUG] [Thread-207554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:34:03.530 [DEBUG] [Thread-207554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:34:03.530 [DEBUG] [Thread-207554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:34:03.549 [INFO] [Thread-207554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:34:03.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:34:03.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:34:04.393 [DEBUG] [Thread-207554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:34:04.393 [DEBUG] [Thread-207554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:34:04.440 [DEBUG] [Thread-207554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:34:04.441 [DEBUG] [Thread-207554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:34:04.450 [DEBUG] [Thread-207554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:34:04.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:34:04.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:34:04.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:34:04.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:34:04.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:34:04.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:34:04.488 [DEBUG] [Thread-207554] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:34:05.898 [DEBUG] [Thread-207556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:20.953 [DEBUG] [Thread-207557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:34.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:34:34.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:34:34.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:34:35.987 [DEBUG] [Thread-207558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:36.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 34, 6), 23.73, 20.48, 0.0, 26.68, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:34:36.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:34:06
2026-02-15T16:34:37.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:34:37.444 [DEBUG] [Thread-207559] [transport.py] [_log()] starting thread (client mode): 0xa2d4f1c0
2026-02-15T16:34:37.444 [DEBUG] [Thread-207559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:34:37.465 [DEBUG] [Thread-207559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:34:37.466 [INFO] [Thread-207559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] client lang: <none>
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] server lang: <none>
2026-02-15T16:34:37.468 [DEBUG] [Thread-207559] [transport.py] [_log()] kex follows: False
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] Compression: none
2026-02-15T16:34:37.469 [DEBUG] [Thread-207559] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:34:37.482 [DEBUG] [Thread-207559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:34:37.483 [DEBUG] [Thread-207559] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:34:37.483 [DEBUG] [Thread-207559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:34:37.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:34:37.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:34:37.486 [DEBUG] [Thread-207559] [transport.py] [_log()] userauth is OK
2026-02-15T16:34:37.486 [DEBUG] [Thread-207559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:34:37.486 [DEBUG] [Thread-207559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:34:37.486 [DEBUG] [Thread-207559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:34:37.486 [DEBUG] [Thread-207559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:34:37.511 [INFO] [Thread-207559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:34:37.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:34:38.155 [DEBUG] [Thread-207559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:34:38.155 [DEBUG] [Thread-207559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:34:38.156 [DEBUG] [Thread-207559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:34:38.196 [DEBUG] [Thread-207559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:34:38.197 [DEBUG] [Thread-207559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:34:38.200 [DEBUG] [Thread-207559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:34:38.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:34:38.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:34:38.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:34:38.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:34:38.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:34:38.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:34:38.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:34:38.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:34:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:34:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.607040 -999.00  +22.70  14.22     26   +2.40 1 1 1 1 1   888    0 18.97 -58.87 ----- 14.2 14.2 163.0 24.3 28.2 -29.4 27.7 -29.6 29.4 -28.0 30.2 -30.1
2026-02-15T16:34:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:34:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:34:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.607040
2026-02-15T16:34:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:34:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:34:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:34:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:34:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:34:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:34:06', tmtdew=23.73, humidity=20.48, cloud=0.0, wind=26.68, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:34:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:34:38.231 [DEBUG] [Thread-207559] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:34:38.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:34:38.328 [DEBUG] [Thread-207562] [transport.py] [_log()] starting thread (client mode): 0xa2d4e260
2026-02-15T16:34:38.328 [DEBUG] [Thread-207562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:34:38.345 [DEBUG] [Thread-207562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:34:38.345 [INFO] [Thread-207562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] client lang: <none>
2026-02-15T16:34:38.353 [DEBUG] [Thread-207562] [transport.py] [_log()] server lang: <none>
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] kex follows: False
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] Compression: none
2026-02-15T16:34:38.354 [DEBUG] [Thread-207562] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:34:38.417 [DEBUG] [Thread-207562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:34:38.418 [DEBUG] [Thread-207562] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:34:38.419 [DEBUG] [Thread-207562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:34:38.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:34:38.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:34:38.477 [DEBUG] [Thread-207562] [transport.py] [_log()] userauth is OK
2026-02-15T16:34:38.478 [DEBUG] [Thread-207562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:34:38.478 [DEBUG] [Thread-207562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:34:38.478 [DEBUG] [Thread-207562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:34:38.478 [DEBUG] [Thread-207562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:34:38.497 [INFO] [Thread-207562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:34:38.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:34:39.339 [DEBUG] [Thread-207562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:34:39.339 [DEBUG] [Thread-207562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:34:39.388 [DEBUG] [Thread-207562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:34:39.388 [DEBUG] [Thread-207562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:34:39.397 [DEBUG] [Thread-207562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:34:39.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:34:39.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:34:39.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:34:39.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:34:39.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:34:39.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:34:39.435 [DEBUG] [Thread-207562] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:34:51.024 [DEBUG] [Thread-207564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:57.445 [DEBUG] [Thread-207565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:59.764 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:34:59.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:06.077 [DEBUG] [Thread-207566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:09.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:35:09.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:35:09.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:35:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 34, 41), 25.05, 19.0, 0.0, 24.77, 24.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:35:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:34:41
2026-02-15T16:35:11.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:35:11.954 [DEBUG] [Thread-207567] [transport.py] [_log()] starting thread (client mode): 0xa2d6b7c0
2026-02-15T16:35:11.955 [DEBUG] [Thread-207567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:35:11.975 [DEBUG] [Thread-207567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:35:11.975 [INFO] [Thread-207567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:35:11.978 [DEBUG] [Thread-207567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] client lang: <none>
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] server lang: <none>
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] kex follows: False
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:35:11.979 [DEBUG] [Thread-207567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:35:11.980 [DEBUG] [Thread-207567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:35:11.980 [DEBUG] [Thread-207567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:35:11.980 [DEBUG] [Thread-207567] [transport.py] [_log()] Compression: none
2026-02-15T16:35:11.980 [DEBUG] [Thread-207567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:35:11.999 [DEBUG] [Thread-207567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:35:12.000 [DEBUG] [Thread-207567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:35:12.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:35:12.001 [DEBUG] [Thread-207567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:35:12.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:35:12.003 [DEBUG] [Thread-207567] [transport.py] [_log()] userauth is OK
2026-02-15T16:35:12.003 [DEBUG] [Thread-207567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:35:12.003 [DEBUG] [Thread-207567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:35:12.003 [DEBUG] [Thread-207567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:35:12.003 [DEBUG] [Thread-207567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:35:12.040 [INFO] [Thread-207567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:35:12.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:35:21.120 [DEBUG] [Thread-207569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:21.129 [DEBUG] [Thread-207567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:35:21.129 [DEBUG] [Thread-207567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:35:21.130 [DEBUG] [Thread-207567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:35:21.170 [DEBUG] [Thread-207567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:35:21.170 [DEBUG] [Thread-207567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:35:21.173 [DEBUG] [Thread-207567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:35:21.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:35:21.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:35:21.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:35:21.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:35:21.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:35:21.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:35:21.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:35:21.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:35:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:35:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.607387 -999.00  +22.90  16.70     26   +2.40 1 1 1 1 1   888    0 19.10 -54.59 ----- 15.2 16.7 179.0 23.3 28.1 -29.5 27.6 -28.2 29.4 -27.1 30.1 -29.3
2026-02-15T16:35:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:35:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:35:21.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.607387
2026-02-15T16:35:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:35:21.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:35:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:35:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:35:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:35:21.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:34:41', tmtdew=25.05, humidity=19.0, cloud=0.0, wind=24.77, temperature=24.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:34:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:35:21.272 [DEBUG] [Thread-207567] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:35:21.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:35:21.371 [DEBUG] [Thread-207571] [transport.py] [_log()] starting thread (client mode): 0xa2d69cf0
2026-02-15T16:35:21.371 [DEBUG] [Thread-207571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:35:21.386 [DEBUG] [Thread-207571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:35:21.386 [INFO] [Thread-207571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:35:21.394 [DEBUG] [Thread-207571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:35:21.394 [DEBUG] [Thread-207571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:35:21.394 [DEBUG] [Thread-207571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:35:21.394 [DEBUG] [Thread-207571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:21.394 [DEBUG] [Thread-207571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] client lang: <none>
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] server lang: <none>
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] kex follows: False
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:35:21.395 [DEBUG] [Thread-207571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:35:21.396 [DEBUG] [Thread-207571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:35:21.396 [DEBUG] [Thread-207571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:35:21.396 [DEBUG] [Thread-207571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:35:21.396 [DEBUG] [Thread-207571] [transport.py] [_log()] Compression: none
2026-02-15T16:35:21.396 [DEBUG] [Thread-207571] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:35:21.454 [DEBUG] [Thread-207571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:35:21.454 [DEBUG] [Thread-207571] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:35:21.455 [DEBUG] [Thread-207571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:35:21.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:35:21.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:35:21.513 [DEBUG] [Thread-207571] [transport.py] [_log()] userauth is OK
2026-02-15T16:35:21.514 [DEBUG] [Thread-207571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:35:21.514 [DEBUG] [Thread-207571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:35:21.514 [DEBUG] [Thread-207571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:35:21.514 [DEBUG] [Thread-207571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:35:21.533 [INFO] [Thread-207571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:35:21.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:35:21.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:35:22.366 [DEBUG] [Thread-207571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:35:22.366 [DEBUG] [Thread-207571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:35:22.413 [DEBUG] [Thread-207571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:35:22.414 [DEBUG] [Thread-207571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:35:22.423 [DEBUG] [Thread-207571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:35:22.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:35: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')
2026-02-15T16:35:22.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:35:22.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:35:22.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:35:22.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:35:22.460 [DEBUG] [Thread-207571] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:35:36.156 [DEBUG] [Thread-207573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:51.209 [DEBUG] [Thread-207574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:35:52.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:35:52.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:35:54.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 35, 16), 23.83, 20.43, 0.0, 25.0, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:35:54.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:35:16
2026-02-15T16:35:54.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:35:55.049 [DEBUG] [Thread-207575] [transport.py] [_log()] starting thread (client mode): 0xa2d1a260
2026-02-15T16:35:55.049 [DEBUG] [Thread-207575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:35:55.069 [DEBUG] [Thread-207575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:35:55.069 [INFO] [Thread-207575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] client lang: <none>
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] server lang: <none>
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] kex follows: False
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] Compression: none
2026-02-15T16:35:55.073 [DEBUG] [Thread-207575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:35:55.088 [DEBUG] [Thread-207575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:35:55.089 [DEBUG] [Thread-207575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:35:55.089 [DEBUG] [Thread-207575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:35:55.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:35:55.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:35:55.090 [DEBUG] [Thread-207575] [transport.py] [_log()] userauth is OK
2026-02-15T16:35:55.090 [DEBUG] [Thread-207575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:35:55.090 [DEBUG] [Thread-207575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:35:55.090 [DEBUG] [Thread-207575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:35:55.090 [DEBUG] [Thread-207575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:35:55.100 [INFO] [Thread-207575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:35:55.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:35:55.737 [DEBUG] [Thread-207575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:35:55.737 [DEBUG] [Thread-207575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:35:55.738 [DEBUG] [Thread-207575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:35:55.779 [DEBUG] [Thread-207575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:35:55.779 [DEBUG] [Thread-207575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:35:55.782 [DEBUG] [Thread-207575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:35:55.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:35:55.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:35:55.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:35:55.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:35:55.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:35:55.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:35:55.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:35:55.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:35:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:35:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.607734 -999.00  +22.80  20.04     26   +2.30 1 1 1 1 1   888    0 19.07 -48.95 ----- 20.0 20.0 183.4 25.3 28.1 -30.5 27.4 -33.7 29.4 -28.9 30.1 -30.8
2026-02-15T16:35:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:35:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:35:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.607734
2026-02-15T16:35:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:35:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:35:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:35:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:35:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:35:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:35:16', tmtdew=23.83, humidity=20.43, cloud=0.0, wind=25.0, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:35:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:35:55.810 [DEBUG] [Thread-207575] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:35:55.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:35:55.913 [DEBUG] [Thread-207578] [transport.py] [_log()] starting thread (client mode): 0xa2d6bdc0
2026-02-15T16:35:55.913 [DEBUG] [Thread-207578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:35:55.928 [DEBUG] [Thread-207578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:35:55.929 [INFO] [Thread-207578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:35:55.936 [DEBUG] [Thread-207578] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:35:55.936 [DEBUG] [Thread-207578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:35:55.936 [DEBUG] [Thread-207578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:35:55.936 [DEBUG] [Thread-207578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] client lang: <none>
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] server lang: <none>
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] kex follows: False
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:35:55.937 [DEBUG] [Thread-207578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:35:55.938 [DEBUG] [Thread-207578] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:35:55.938 [DEBUG] [Thread-207578] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:35:55.938 [DEBUG] [Thread-207578] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:35:55.938 [DEBUG] [Thread-207578] [transport.py] [_log()] Compression: none
2026-02-15T16:35:55.938 [DEBUG] [Thread-207578] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:35:55.999 [DEBUG] [Thread-207578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:35:56.000 [DEBUG] [Thread-207578] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:35:56.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:35:56.001 [DEBUG] [Thread-207578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:35:56.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:35:56.065 [DEBUG] [Thread-207578] [transport.py] [_log()] userauth is OK
2026-02-15T16:35:56.066 [DEBUG] [Thread-207578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:35:56.066 [DEBUG] [Thread-207578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:35:56.066 [DEBUG] [Thread-207578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:35:56.066 [DEBUG] [Thread-207578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:35:56.094 [INFO] [Thread-207578] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:35:56.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:35:56.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:35:56.917 [DEBUG] [Thread-207578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:35:56.917 [DEBUG] [Thread-207578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:35:56.965 [DEBUG] [Thread-207578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:35:56.966 [DEBUG] [Thread-207578] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:35:56.975 [DEBUG] [Thread-207578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:35:56.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:35:56.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:35: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') -> 00000000
2026-02-15T16:35:57.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:35:57.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:35:57.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:35:57.012 [DEBUG] [Thread-207578] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:35:57.492 [DEBUG] [Thread-207580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:59.908 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:35:59.909 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:36:06.249 [DEBUG] [Thread-207581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:36:21.300 [DEBUG] [Thread-207582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:36:27.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:36:27.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:36:27.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:36:29.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 35, 52), 24.06, 20.42, 0.0, 23.41, 23.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:36:29.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:35:52
2026-02-15T16:36:29.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:36:29.517 [DEBUG] [Thread-207583] [transport.py] [_log()] starting thread (client mode): 0xa2d6a320
2026-02-15T16:36:29.517 [DEBUG] [Thread-207583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:36:29.539 [DEBUG] [Thread-207583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:36:29.539 [INFO] [Thread-207583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:36:29.542 [DEBUG] [Thread-207583] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:36:29.542 [DEBUG] [Thread-207583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] client lang: <none>
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] server lang: <none>
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] kex follows: False
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:36:29.543 [DEBUG] [Thread-207583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:36:29.544 [DEBUG] [Thread-207583] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:36:29.544 [DEBUG] [Thread-207583] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:36:29.544 [DEBUG] [Thread-207583] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:36:29.544 [DEBUG] [Thread-207583] [transport.py] [_log()] Compression: none
2026-02-15T16:36:29.544 [DEBUG] [Thread-207583] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:36:29.563 [DEBUG] [Thread-207583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:36:29.564 [DEBUG] [Thread-207583] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:36:29.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:36:29.565 [DEBUG] [Thread-207583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:36:29.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:36:29.567 [DEBUG] [Thread-207583] [transport.py] [_log()] userauth is OK
2026-02-15T16:36:29.567 [DEBUG] [Thread-207583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:36:29.567 [DEBUG] [Thread-207583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:36:29.568 [DEBUG] [Thread-207583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:36:29.568 [DEBUG] [Thread-207583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:36:29.604 [INFO] [Thread-207583] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:36:29.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:36:30.218 [DEBUG] [Thread-207583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:36:30.218 [DEBUG] [Thread-207583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:36:30.219 [DEBUG] [Thread-207583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:36:30.259 [DEBUG] [Thread-207583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:36:30.259 [DEBUG] [Thread-207583] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:36:30.262 [DEBUG] [Thread-207583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:36:30.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:36:30.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:36:30.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:36:30.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:36:30.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:36:30.281 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:36:30.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:36:30.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:36:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:36:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.608082 -999.00  +22.70  18.81     26   +2.40 1 1 1 1 1   888    0 19.34 -47.21 ----- 18.8 18.8 166.8 23.4 28.1 -30.0 27.4 -30.4 29.3 -30.2 30.1 -31.7
2026-02-15T16:36:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:36:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:36:30.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.608082
2026-02-15T16:36:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:36:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:36:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:36:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:36:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:36:30.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:35:52', tmtdew=24.06, humidity=20.42, cloud=0.0, wind=23.41, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:35:38.285', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:36:30.283 [DEBUG] [Thread-207583] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:36:30.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:36:30.378 [DEBUG] [Thread-207586] [transport.py] [_log()] starting thread (client mode): 0xa2d1b5b0
2026-02-15T16:36:30.378 [DEBUG] [Thread-207586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:36:30.392 [DEBUG] [Thread-207586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:36:30.392 [INFO] [Thread-207586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:36:30.400 [DEBUG] [Thread-207586] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:36:30.400 [DEBUG] [Thread-207586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:36:30.400 [DEBUG] [Thread-207586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:36:30.400 [DEBUG] [Thread-207586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] client lang: <none>
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] server lang: <none>
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] kex follows: False
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] Compression: none
2026-02-15T16:36:30.401 [DEBUG] [Thread-207586] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:36:30.460 [DEBUG] [Thread-207586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:36:30.461 [DEBUG] [Thread-207586] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:36:30.461 [DEBUG] [Thread-207586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:36:30.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:36:30.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:36:30.516 [DEBUG] [Thread-207586] [transport.py] [_log()] userauth is OK
2026-02-15T16:36:30.517 [DEBUG] [Thread-207586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:36:30.517 [DEBUG] [Thread-207586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:36:30.517 [DEBUG] [Thread-207586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:36:30.517 [DEBUG] [Thread-207586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:36:30.540 [INFO] [Thread-207586] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:36:30.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:36:30.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:36:31.400 [DEBUG] [Thread-207586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:36:31.400 [DEBUG] [Thread-207586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:36:31.448 [DEBUG] [Thread-207586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:36:31.448 [DEBUG] [Thread-207586] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:36:31.456 [DEBUG] [Thread-207586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:36:31.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:36:31.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:36:31.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:36:31.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:36:31.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:36:31.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:36:31.491 [DEBUG] [Thread-207586] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:36:36.332 [DEBUG] [Thread-207588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:36:51.382 [DEBUG] [Thread-207589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:36:57.526 [DEBUG] [Thread-207590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:00.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:00.052 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:01.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:37:01.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:37:01.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:37:03.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 36, 27), 23.92, 20.58, 0.0, 21.65, 22.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:37:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:36:27
2026-02-15T16:37:04.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:37:04.516 [DEBUG] [Thread-207591] [transport.py] [_log()] starting thread (client mode): 0xa2d69000
2026-02-15T16:37:04.516 [DEBUG] [Thread-207591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:37:04.527 [DEBUG] [Thread-207591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:37:04.527 [INFO] [Thread-207591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:37:04.528 [DEBUG] [Thread-207591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] client lang: <none>
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] server lang: <none>
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] kex follows: False
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] Compression: none
2026-02-15T16:37:04.529 [DEBUG] [Thread-207591] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:37:04.550 [DEBUG] [Thread-207591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:37:04.550 [DEBUG] [Thread-207591] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:37:04.550 [DEBUG] [Thread-207591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:37:04.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:37:04.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:37:04.552 [DEBUG] [Thread-207591] [transport.py] [_log()] userauth is OK
2026-02-15T16:37:04.552 [DEBUG] [Thread-207591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:37:04.552 [DEBUG] [Thread-207591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:37:04.553 [DEBUG] [Thread-207591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:37:04.553 [DEBUG] [Thread-207591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:37:04.571 [INFO] [Thread-207591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:37:04.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:37:05.151 [DEBUG] [Thread-207591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:37:05.151 [DEBUG] [Thread-207591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:37:05.152 [DEBUG] [Thread-207591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:37:05.192 [DEBUG] [Thread-207591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:37:05.192 [DEBUG] [Thread-207591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:37:05.196 [DEBUG] [Thread-207591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:37:05.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:37:05.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:37:05.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:37:05.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:37:05.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:37:05.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:37:05.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:37:05.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:37:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:37:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.608776 -999.00  +22.60  18.00     26   +2.40 1 1 1 1 1   888    0 19.15 -51.39 ----- 18.0 18.0 176.2 23.9 28.0 -30.2 27.4 -32.1 29.3 -27.5 30.1 -30.0
2026-02-15T16:37:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:37:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:37:05.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.608776
2026-02-15T16:37:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:37:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:37:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:37:05.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:37:05.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:37:05.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:36:27', tmtdew=23.92, humidity=20.58, cloud=0.0, wind=21.65, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:36:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:37:05.225 [DEBUG] [Thread-207591] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:37:05.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:37:05.315 [DEBUG] [Thread-207594] [transport.py] [_log()] starting thread (client mode): 0xa2d4f280
2026-02-15T16:37:05.315 [DEBUG] [Thread-207594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:37:05.329 [DEBUG] [Thread-207594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:37:05.330 [INFO] [Thread-207594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:37:05.337 [DEBUG] [Thread-207594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] client lang: <none>
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] server lang: <none>
2026-02-15T16:37:05.338 [DEBUG] [Thread-207594] [transport.py] [_log()] kex follows: False
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] Compression: none
2026-02-15T16:37:05.339 [DEBUG] [Thread-207594] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:37:05.402 [DEBUG] [Thread-207594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:37:05.402 [DEBUG] [Thread-207594] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:37:05.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:37:05.403 [DEBUG] [Thread-207594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:37:05.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:37:05.460 [DEBUG] [Thread-207594] [transport.py] [_log()] userauth is OK
2026-02-15T16:37:05.461 [DEBUG] [Thread-207594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:37:05.461 [DEBUG] [Thread-207594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:37:05.461 [DEBUG] [Thread-207594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:37:05.461 [DEBUG] [Thread-207594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:37:05.480 [INFO] [Thread-207594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:37:05.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:37:05.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:37:06.303 [DEBUG] [Thread-207594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:37:06.303 [DEBUG] [Thread-207594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:37:06.351 [DEBUG] [Thread-207594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:37:06.351 [DEBUG] [Thread-207594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:37:06.360 [DEBUG] [Thread-207594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:37:06.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:37:06.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:37:06.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:37:06.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:37:06.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:37:06.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:37:06.397 [DEBUG] [Thread-207594] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:37:06.420 [DEBUG] [Thread-207596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:21.480 [DEBUG] [Thread-207597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:36.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:37:36.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:37:36.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:37:36.517 [DEBUG] [Thread-207598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:38.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 37, 2), 23.87, 20.65, 0.0, 25.32, 22.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:37:38.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:37:02
2026-02-15T16:37:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:37:39.487 [DEBUG] [Thread-207599] [transport.py] [_log()] starting thread (client mode): 0xa2d7ada0
2026-02-15T16:37:39.487 [DEBUG] [Thread-207599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:37:39.508 [DEBUG] [Thread-207599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:37:39.508 [INFO] [Thread-207599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:37:39.510 [DEBUG] [Thread-207599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:37:39.510 [DEBUG] [Thread-207599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:37:39.510 [DEBUG] [Thread-207599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:37:39.510 [DEBUG] [Thread-207599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] client lang: <none>
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] server lang: <none>
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] kex follows: False
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] Compression: none
2026-02-15T16:37:39.511 [DEBUG] [Thread-207599] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:37:39.521 [DEBUG] [Thread-207599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:37:39.522 [DEBUG] [Thread-207599] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:37:39.523 [DEBUG] [Thread-207599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:37:39.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:37:39.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:37:39.525 [DEBUG] [Thread-207599] [transport.py] [_log()] userauth is OK
2026-02-15T16:37:39.526 [DEBUG] [Thread-207599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:37:39.526 [DEBUG] [Thread-207599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:37:39.526 [DEBUG] [Thread-207599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:37:39.526 [DEBUG] [Thread-207599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:37:39.551 [INFO] [Thread-207599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:37:39.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:37:40.186 [DEBUG] [Thread-207599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:37:40.186 [DEBUG] [Thread-207599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:37:40.186 [DEBUG] [Thread-207599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:37:40.226 [DEBUG] [Thread-207599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:37:40.227 [DEBUG] [Thread-207599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:37:40.230 [DEBUG] [Thread-207599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:37:40.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:37:40.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:37:40.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:37:40.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:37:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:37:40.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:37:40.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:37:40.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.609123 -999.00  +22.70  15.29     26   +2.50 1 1 1 1 1   888    0 18.58 -53.49 ----- 16.1 15.3 166.4 25.8 28.1 -29.3 27.6 -28.3 29.3 -26.8 30.1 -28.7
2026-02-15T16:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:37:40.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.609123
2026-02-15T16:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:37:40.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:37:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:37:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:37:40.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:37:02', tmtdew=23.87, humidity=20.65, cloud=0.0, wind=25.32, temperature=22.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:37:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:37:40.256 [DEBUG] [Thread-207599] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:37:40.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:37:40.351 [DEBUG] [Thread-207602] [transport.py] [_log()] starting thread (client mode): 0xa2d79ff0
2026-02-15T16:37:40.352 [DEBUG] [Thread-207602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:37:40.367 [DEBUG] [Thread-207602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:37:40.367 [INFO] [Thread-207602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] client lang: <none>
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] server lang: <none>
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] kex follows: False
2026-02-15T16:37:40.374 [DEBUG] [Thread-207602] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:37:40.375 [DEBUG] [Thread-207602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:37:40.375 [DEBUG] [Thread-207602] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:37:40.375 [DEBUG] [Thread-207602] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:37:40.375 [DEBUG] [Thread-207602] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:37:40.375 [DEBUG] [Thread-207602] [transport.py] [_log()] Compression: none
2026-02-15T16:37:40.375 [DEBUG] [Thread-207602] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:37:40.432 [DEBUG] [Thread-207602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:37:40.433 [DEBUG] [Thread-207602] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:37:40.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:37:40.434 [DEBUG] [Thread-207602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:37:40.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:37:40.489 [DEBUG] [Thread-207602] [transport.py] [_log()] userauth is OK
2026-02-15T16:37:40.489 [DEBUG] [Thread-207602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:37:40.489 [DEBUG] [Thread-207602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:37:40.489 [DEBUG] [Thread-207602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:37:40.489 [DEBUG] [Thread-207602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:37:40.513 [INFO] [Thread-207602] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:37:40.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:37:40.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:37:41.354 [DEBUG] [Thread-207602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:37:41.354 [DEBUG] [Thread-207602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:37:41.402 [DEBUG] [Thread-207602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:37:41.403 [DEBUG] [Thread-207602] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:37:41.412 [DEBUG] [Thread-207602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:37:41.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:37:41.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:37:41.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:37:41.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:37:41.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:37:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:37:41.448 [DEBUG] [Thread-207602] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:37:51.557 [DEBUG] [Thread-207604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:37:57.559 [DEBUG] [Thread-207605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:00.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:00.193 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:06.618 [DEBUG] [Thread-207606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:11.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:38:11.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:38: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-02-15T16:38:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 37, 38), 24.84, 19.26, 0.0, 32.36, 24.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:38:13.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:37:38
2026-02-15T16:38:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:38:13.945 [DEBUG] [Thread-207607] [transport.py] [_log()] starting thread (client mode): 0xa2d4e020
2026-02-15T16:38:13.945 [DEBUG] [Thread-207607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:38:13.964 [DEBUG] [Thread-207607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:38:13.964 [INFO] [Thread-207607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:38:13.967 [DEBUG] [Thread-207607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] client lang: <none>
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] server lang: <none>
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] kex follows: False
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] Compression: none
2026-02-15T16:38:13.968 [DEBUG] [Thread-207607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:38:13.985 [DEBUG] [Thread-207607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:38:13.985 [DEBUG] [Thread-207607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:38:13.986 [DEBUG] [Thread-207607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:38:13.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:38:13.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:38:13.988 [DEBUG] [Thread-207607] [transport.py] [_log()] userauth is OK
2026-02-15T16:38:13.988 [DEBUG] [Thread-207607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:38:13.989 [DEBUG] [Thread-207607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:38:13.989 [DEBUG] [Thread-207607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:38:13.989 [DEBUG] [Thread-207607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:38:14.013 [INFO] [Thread-207607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:38:14.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:38:14.627 [DEBUG] [Thread-207607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:38:14.627 [DEBUG] [Thread-207607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:38:14.628 [DEBUG] [Thread-207607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:38:14.668 [DEBUG] [Thread-207607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:38:14.668 [DEBUG] [Thread-207607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:38:14.671 [DEBUG] [Thread-207607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:38:14.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:38:14.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:38:14.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:38:14.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:38:14.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:38:14.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:38:14.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:38:14.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:38:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:38:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.609470 -999.00  +22.70  27.60     26   +2.50 1 1 1 1 1   888    0 19.40 -53.53 ----- 27.6 27.6 171.2 31.6 28.0 -30.3 27.5 -30.9 29.3 -29.0 30.0 -30.5
2026-02-15T16:38:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:38:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:38:14.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.609470
2026-02-15T16:38:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:38:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:38:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:38:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:38:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:38:14.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:37:38', tmtdew=24.84, humidity=19.26, cloud=0.0, wind=32.36, temperature=24.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:37:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:38:14.698 [DEBUG] [Thread-207607] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:38:14.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:38:14.792 [DEBUG] [Thread-207610] [transport.py] [_log()] starting thread (client mode): 0xa2d68520
2026-02-15T16:38:14.792 [DEBUG] [Thread-207610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:38:14.806 [DEBUG] [Thread-207610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:38:14.806 [INFO] [Thread-207610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:38:14.814 [DEBUG] [Thread-207610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:38:14.814 [DEBUG] [Thread-207610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] client lang: <none>
2026-02-15T16:38:14.815 [DEBUG] [Thread-207610] [transport.py] [_log()] server lang: <none>
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] kex follows: False
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:38:14.816 [DEBUG] [Thread-207610] [transport.py] [_log()] Compression: none
2026-02-15T16:38:14.817 [DEBUG] [Thread-207610] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:38:14.873 [DEBUG] [Thread-207610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:38:14.874 [DEBUG] [Thread-207610] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:38:14.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:38:14.875 [DEBUG] [Thread-207610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:38:14.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:38:14.933 [DEBUG] [Thread-207610] [transport.py] [_log()] userauth is OK
2026-02-15T16:38:14.933 [DEBUG] [Thread-207610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:38:14.933 [DEBUG] [Thread-207610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:38:14.942 [DEBUG] [Thread-207610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:38:14.942 [DEBUG] [Thread-207610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:38:14.961 [INFO] [Thread-207610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:38:14.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:38:14.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:38:15.801 [DEBUG] [Thread-207610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:38:15.801 [DEBUG] [Thread-207610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:38:15.849 [DEBUG] [Thread-207610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:38:15.850 [DEBUG] [Thread-207610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:38:15.859 [DEBUG] [Thread-207610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:38:15.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:38:15.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:38:15.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:38:15.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:38:15.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:38:15.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:38:15.896 [DEBUG] [Thread-207610] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:38:21.654 [DEBUG] [Thread-207612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:36.703 [DEBUG] [Thread-207613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:45.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:38:45.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:38:45.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:38:47.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 38, 14), 23.7, 20.85, 0.0, 24.72, 22.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:38:47.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:38:14
2026-02-15T16:38:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:38:48.444 [DEBUG] [Thread-207614] [transport.py] [_log()] starting thread (client mode): 0xa2d6a7a0
2026-02-15T16:38:48.444 [DEBUG] [Thread-207614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:38:48.463 [DEBUG] [Thread-207614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:38:48.464 [INFO] [Thread-207614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:38:48.467 [DEBUG] [Thread-207614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:38:48.467 [DEBUG] [Thread-207614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:38:48.467 [DEBUG] [Thread-207614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:38:48.467 [DEBUG] [Thread-207614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:48.467 [DEBUG] [Thread-207614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] client lang: <none>
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] server lang: <none>
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] kex follows: False
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:38:48.468 [DEBUG] [Thread-207614] [transport.py] [_log()] Compression: none
2026-02-15T16:38:48.469 [DEBUG] [Thread-207614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:38:48.487 [DEBUG] [Thread-207614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:38:48.488 [DEBUG] [Thread-207614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:38:48.489 [DEBUG] [Thread-207614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:38:48.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:38:48.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:38:48.492 [DEBUG] [Thread-207614] [transport.py] [_log()] userauth is OK
2026-02-15T16:38:48.492 [DEBUG] [Thread-207614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:38:48.492 [DEBUG] [Thread-207614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:38:48.492 [DEBUG] [Thread-207614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:38:48.492 [DEBUG] [Thread-207614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:38:48.517 [INFO] [Thread-207614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:38:48.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:38:49.182 [DEBUG] [Thread-207614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:38:49.182 [DEBUG] [Thread-207614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:38:49.182 [DEBUG] [Thread-207614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:38:49.222 [DEBUG] [Thread-207614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:38:49.223 [DEBUG] [Thread-207614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:38:49.226 [DEBUG] [Thread-207614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:38:49.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:38:49.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:38:49.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:38:49.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:38:49.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:38:49.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:38:49.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:38:49.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:38:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:38:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.610165 -999.00  +22.50  20.87     26   +2.30 1 1 1 1 1   888    0 18.90 -52.32 ----- 18.5 20.9 185.4 28.6 27.9 -30.3 27.2 -28.5 29.1 -27.7 29.9 -30.2
2026-02-15T16:38:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:38:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:38:49.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.610165
2026-02-15T16:38:49.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:38:49.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:38:49.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:38:49.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:38:49.256 [DEBUG] [Thread-207614] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:38:49.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:38:49.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:38:14', tmtdew=23.7, humidity=20.85, cloud=0.0, wind=24.72, temperature=22.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:38:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:38:49.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:38:49.353 [DEBUG] [Thread-207617] [transport.py] [_log()] starting thread (client mode): 0xa2d78970
2026-02-15T16:38:49.354 [DEBUG] [Thread-207617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:38:49.368 [DEBUG] [Thread-207617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:38:49.368 [INFO] [Thread-207617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:38:49.375 [DEBUG] [Thread-207617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] client lang: <none>
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] server lang: <none>
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] kex follows: False
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] Compression: none
2026-02-15T16:38:49.376 [DEBUG] [Thread-207617] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:38:49.436 [DEBUG] [Thread-207617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:38:49.436 [DEBUG] [Thread-207617] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:38:49.437 [DEBUG] [Thread-207617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:38:49.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:38:49.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:38:49.493 [DEBUG] [Thread-207617] [transport.py] [_log()] userauth is OK
2026-02-15T16:38:49.493 [DEBUG] [Thread-207617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:38:49.493 [DEBUG] [Thread-207617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:38:49.493 [DEBUG] [Thread-207617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:38:49.493 [DEBUG] [Thread-207617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:38:49.512 [INFO] [Thread-207617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:38:49.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:38:49.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:38:50.384 [DEBUG] [Thread-207617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:38:50.384 [DEBUG] [Thread-207617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:38:50.433 [DEBUG] [Thread-207617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:38:50.433 [DEBUG] [Thread-207617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:38:50.442 [DEBUG] [Thread-207617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:38:50.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:38:50.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:38:50.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:38:50.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:38:50.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:38:50.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:38:50.477 [DEBUG] [Thread-207617] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:38:51.737 [DEBUG] [Thread-207619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:38:57.602 [DEBUG] [Thread-207620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:00.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:00.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:06.779 [DEBUG] [Thread-207621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:20.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:39:20.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:39:20.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:39:21.817 [DEBUG] [Thread-207622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 38, 50), 23.8, 20.6, 0.0, 27.81, 22.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:39:22.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:38:50
2026-02-15T16:39:23.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:39:23.172 [DEBUG] [Thread-207623] [transport.py] [_log()] starting thread (client mode): 0xa2d7b4c0
2026-02-15T16:39:23.172 [DEBUG] [Thread-207623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:39:23.193 [DEBUG] [Thread-207623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:39:23.193 [INFO] [Thread-207623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] client lang: <none>
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] server lang: <none>
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] kex follows: False
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] Compression: none
2026-02-15T16:39:23.196 [DEBUG] [Thread-207623] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:39:23.216 [DEBUG] [Thread-207623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:39:23.216 [DEBUG] [Thread-207623] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:39:23.217 [DEBUG] [Thread-207623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:39:23.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:39:23.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:39:23.219 [DEBUG] [Thread-207623] [transport.py] [_log()] userauth is OK
2026-02-15T16:39:23.219 [DEBUG] [Thread-207623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:39:23.219 [DEBUG] [Thread-207623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:39:23.219 [DEBUG] [Thread-207623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:39:23.219 [DEBUG] [Thread-207623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:39:23.255 [INFO] [Thread-207623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:39:23.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:39:23.910 [DEBUG] [Thread-207623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:39:23.910 [DEBUG] [Thread-207623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:39:23.911 [DEBUG] [Thread-207623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:39:23.951 [DEBUG] [Thread-207623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:39:23.952 [DEBUG] [Thread-207623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:39:23.955 [DEBUG] [Thread-207623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:39:23.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:39:23.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:39:23.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:39:23.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:39:23.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:39:23.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:39:23.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:39:23.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:39:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:39:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.610512 -999.00  +22.50  15.96     26   +2.40 1 1 1 1 1   888    0 19.31 -50.44 ----- 16.0 16.0 161.8 20.9 27.9 -29.9 27.5 -28.0 29.2 -27.7 30.0 -30.1
2026-02-15T16:39:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:39:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:39:23.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.610512
2026-02-15T16:39:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:39:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:39:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:39:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:39:23.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:39:23.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:38:50', tmtdew=23.8, humidity=20.6, cloud=0.0, wind=27.81, temperature=22.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:39:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:39:23.984 [DEBUG] [Thread-207623] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:39:24.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:39:24.079 [DEBUG] [Thread-207626] [transport.py] [_log()] starting thread (client mode): 0xa2d7af80
2026-02-15T16:39:24.079 [DEBUG] [Thread-207626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:39:24.094 [DEBUG] [Thread-207626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:39:24.094 [INFO] [Thread-207626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] client lang: <none>
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] server lang: <none>
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] kex follows: False
2026-02-15T16:39:24.103 [DEBUG] [Thread-207626] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:39:24.104 [DEBUG] [Thread-207626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:39:24.104 [DEBUG] [Thread-207626] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:39:24.104 [DEBUG] [Thread-207626] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:39:24.104 [DEBUG] [Thread-207626] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:39:24.104 [DEBUG] [Thread-207626] [transport.py] [_log()] Compression: none
2026-02-15T16:39:24.104 [DEBUG] [Thread-207626] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:39:24.165 [DEBUG] [Thread-207626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:39:24.165 [DEBUG] [Thread-207626] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:39:24.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:39:24.166 [DEBUG] [Thread-207626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:39:24.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:39:24.221 [DEBUG] [Thread-207626] [transport.py] [_log()] userauth is OK
2026-02-15T16:39:24.221 [DEBUG] [Thread-207626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:39:24.221 [DEBUG] [Thread-207626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:39:24.221 [DEBUG] [Thread-207626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:39:24.221 [DEBUG] [Thread-207626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:39:24.240 [INFO] [Thread-207626] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:39:24.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:39:24.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:39:25.085 [DEBUG] [Thread-207626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:39:25.086 [DEBUG] [Thread-207626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:39:25.134 [DEBUG] [Thread-207626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:39:25.134 [DEBUG] [Thread-207626] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:39:25.143 [DEBUG] [Thread-207626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:39:25.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:39:25.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:39:25.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:39:25.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:39:25.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:39:25.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:39:25.181 [DEBUG] [Thread-207626] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:39:36.855 [DEBUG] [Thread-207628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:51.917 [DEBUG] [Thread-207629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:55.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:39:55.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:39:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:39:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 39, 26), 23.64, 20.78, 0.0, 24.86, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:39:57.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:39:26
2026-02-15T16:39:57.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:39:57.630 [DEBUG] [Thread-207630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:39:57.635 [DEBUG] [Thread-207631] [transport.py] [_log()] starting thread (client mode): 0xa2d7a650
2026-02-15T16:39:57.635 [DEBUG] [Thread-207631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:39:57.659 [DEBUG] [Thread-207631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:39:57.659 [INFO] [Thread-207631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:39:57.662 [DEBUG] [Thread-207631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:39:57.662 [DEBUG] [Thread-207631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:39:57.662 [DEBUG] [Thread-207631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:39:57.662 [DEBUG] [Thread-207631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] client lang: <none>
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] server lang: <none>
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] kex follows: False
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] Compression: none
2026-02-15T16:39:57.663 [DEBUG] [Thread-207631] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:39:57.680 [DEBUG] [Thread-207631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:39:57.680 [DEBUG] [Thread-207631] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:39:57.681 [DEBUG] [Thread-207631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:39:57.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:39:57.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:39:57.683 [DEBUG] [Thread-207631] [transport.py] [_log()] userauth is OK
2026-02-15T16:39:57.683 [DEBUG] [Thread-207631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:39:57.684 [DEBUG] [Thread-207631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:39:57.684 [DEBUG] [Thread-207631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:39:57.684 [DEBUG] [Thread-207631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:39:57.704 [INFO] [Thread-207631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:39:57.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:39:58.349 [DEBUG] [Thread-207631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:39:58.350 [DEBUG] [Thread-207631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:39:58.350 [DEBUG] [Thread-207631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:39:58.390 [DEBUG] [Thread-207631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:39:58.391 [DEBUG] [Thread-207631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:39:58.394 [DEBUG] [Thread-207631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:39:58.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:39:58.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:39:58.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:39:58.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:39:58.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:39:58.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:39:58.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:39:58.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:39:58.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:39:58.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.610859 -999.00  +22.60  15.56     26   +2.50 1 1 1 1 1   888    0 19.06 -46.51 ----- 22.4 15.6 173.4 22.5 27.9 -30.1 27.5 -28.8 29.2 -28.3 30.0 -29.6
2026-02-15T16:39:58.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:39:58.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:39:58.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.610859
2026-02-15T16:39:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:39:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:39:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:39:58.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:39:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:39:58.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:39:26', tmtdew=23.64, humidity=20.78, cloud=0.0, wind=24.86, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:39:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:39:58.424 [DEBUG] [Thread-207631] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:39:58.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:39:58.523 [DEBUG] [Thread-207634] [transport.py] [_log()] starting thread (client mode): 0xa2d6bd30
2026-02-15T16:39:58.524 [DEBUG] [Thread-207634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:39:58.538 [DEBUG] [Thread-207634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:39:58.538 [INFO] [Thread-207634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:39:58.546 [DEBUG] [Thread-207634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:39:58.546 [DEBUG] [Thread-207634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:39:58.546 [DEBUG] [Thread-207634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:39:58.546 [DEBUG] [Thread-207634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] client lang: <none>
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] server lang: <none>
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] kex follows: False
2026-02-15T16:39:58.547 [DEBUG] [Thread-207634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:39:58.548 [DEBUG] [Thread-207634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:39:58.548 [DEBUG] [Thread-207634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:39:58.548 [DEBUG] [Thread-207634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:39:58.548 [DEBUG] [Thread-207634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:39:58.548 [DEBUG] [Thread-207634] [transport.py] [_log()] Compression: none
2026-02-15T16:39:58.548 [DEBUG] [Thread-207634] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:39:58.607 [DEBUG] [Thread-207634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:39:58.607 [DEBUG] [Thread-207634] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:39:58.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:39:58.609 [DEBUG] [Thread-207634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:39:58.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:39:58.664 [DEBUG] [Thread-207634] [transport.py] [_log()] userauth is OK
2026-02-15T16:39:58.664 [DEBUG] [Thread-207634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:39:58.664 [DEBUG] [Thread-207634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:39:58.664 [DEBUG] [Thread-207634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:39:58.664 [DEBUG] [Thread-207634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:39:58.683 [INFO] [Thread-207634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:39:58.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:39:58.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:39:59.499 [DEBUG] [Thread-207634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:39:59.499 [DEBUG] [Thread-207634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:39:59.546 [DEBUG] [Thread-207634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:39:59.546 [DEBUG] [Thread-207634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:39:59.555 [DEBUG] [Thread-207634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:39:59.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:39:59.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:39:59.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:39:59.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:39:59.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:39:59.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:39:59.596 [DEBUG] [Thread-207634] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:40:00.473 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:40:00.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:40:06.951 [DEBUG] [Thread-207636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:40:22.003 [DEBUG] [Thread-207637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:40:29.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:40:29.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:40:29.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
2026-02-15T16:40:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 40, 2), 23.55, 20.91, 0.0, 26.47, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:40:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:40:02
2026-02-15T16:40:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:40:32.127 [DEBUG] [Thread-207638] [transport.py] [_log()] starting thread (client mode): 0xa2d4e3b0
2026-02-15T16:40:32.127 [DEBUG] [Thread-207638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:40:32.147 [DEBUG] [Thread-207638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:40:32.147 [INFO] [Thread-207638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] client lang: <none>
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] server lang: <none>
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] kex follows: False
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] Compression: none
2026-02-15T16:40:32.150 [DEBUG] [Thread-207638] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:40:32.166 [DEBUG] [Thread-207638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:40:32.166 [DEBUG] [Thread-207638] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:40:32.166 [DEBUG] [Thread-207638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:40:32.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:40:32.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:40:32.167 [DEBUG] [Thread-207638] [transport.py] [_log()] userauth is OK
2026-02-15T16:40:32.167 [DEBUG] [Thread-207638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:40:32.167 [DEBUG] [Thread-207638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:40:32.167 [DEBUG] [Thread-207638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:40:32.167 [DEBUG] [Thread-207638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:40:32.176 [INFO] [Thread-207638] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:40:32.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:40:32.812 [DEBUG] [Thread-207638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:40:32.813 [DEBUG] [Thread-207638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:40:32.813 [DEBUG] [Thread-207638] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:40:32.854 [DEBUG] [Thread-207638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:40:32.855 [DEBUG] [Thread-207638] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:40:32.858 [DEBUG] [Thread-207638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:40:32.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:40:32.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:40:32.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:40:32.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:40:32.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:40:32.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:40:32.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:40:32.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:40:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:40:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.611206 -999.00  +22.70  20.29     26   +2.50 1 1 1 1 1   888    0 19.17 -45.06 ----- 27.3 20.3 154.3 29.6 28.0 -30.0 27.5 -29.2 29.2 -27.7 30.1 -29.8
2026-02-15T16:40:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:40:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:40:32.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.611206
2026-02-15T16:40:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:40:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:40:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:40:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:40:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:40:32.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:40:02', tmtdew=23.55, humidity=20.91, cloud=0.0, wind=26.47, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:40:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:40:32.883 [DEBUG] [Thread-207638] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:40:32.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:40:32.984 [DEBUG] [Thread-207641] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-15T16:40:32.984 [DEBUG] [Thread-207641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:40:32.998 [DEBUG] [Thread-207641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:40:32.998 [INFO] [Thread-207641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] client lang: <none>
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] server lang: <none>
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] kex follows: False
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:40:33.006 [DEBUG] [Thread-207641] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:40:33.007 [DEBUG] [Thread-207641] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:40:33.007 [DEBUG] [Thread-207641] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:40:33.007 [DEBUG] [Thread-207641] [transport.py] [_log()] Compression: none
2026-02-15T16:40:33.007 [DEBUG] [Thread-207641] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:40:33.064 [DEBUG] [Thread-207641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:40:33.065 [DEBUG] [Thread-207641] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:40:33.066 [DEBUG] [Thread-207641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:40:33.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:40:33.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:40:33.120 [DEBUG] [Thread-207641] [transport.py] [_log()] userauth is OK
2026-02-15T16:40:33.120 [DEBUG] [Thread-207641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:40:33.120 [DEBUG] [Thread-207641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:40:33.120 [DEBUG] [Thread-207641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:40:33.120 [DEBUG] [Thread-207641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:40:33.143 [INFO] [Thread-207641] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:40:33.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:40:33.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:40:33.960 [DEBUG] [Thread-207641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:40:33.960 [DEBUG] [Thread-207641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:40:34.007 [DEBUG] [Thread-207641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:40:34.008 [DEBUG] [Thread-207641] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:40:34.017 [DEBUG] [Thread-207641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:40:34.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:40:34.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:40:34.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:40:34.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:40:34.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:40:34.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:40:34.053 [DEBUG] [Thread-207641] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:40:37.045 [DEBUG] [Thread-207643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:40:52.097 [DEBUG] [Thread-207644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:40:57.677 [DEBUG] [Thread-207645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:00.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:00.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:04.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:41:04.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:41:04.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:41:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 40, 38), 24.72, 19.46, 0.0, 27.66, 24.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:41:05.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:40:38
2026-02-15T16:41:06.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:41:06.472 [DEBUG] [Thread-207646] [transport.py] [_log()] starting thread (client mode): 0xa2d79690
2026-02-15T16:41:06.472 [DEBUG] [Thread-207646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:41:06.493 [DEBUG] [Thread-207646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:41:06.493 [INFO] [Thread-207646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] client lang: <none>
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] server lang: <none>
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] kex follows: False
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:41:06.496 [DEBUG] [Thread-207646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:41:06.497 [DEBUG] [Thread-207646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:41:06.497 [DEBUG] [Thread-207646] [transport.py] [_log()] Compression: none
2026-02-15T16:41:06.497 [DEBUG] [Thread-207646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:41:06.513 [DEBUG] [Thread-207646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:41:06.513 [DEBUG] [Thread-207646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:41:06.514 [DEBUG] [Thread-207646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:41:06.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:41:06.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:41:06.515 [DEBUG] [Thread-207646] [transport.py] [_log()] userauth is OK
2026-02-15T16:41:06.516 [DEBUG] [Thread-207646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:41:06.516 [DEBUG] [Thread-207646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:41:06.516 [DEBUG] [Thread-207646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:41:06.516 [DEBUG] [Thread-207646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:41:06.539 [INFO] [Thread-207646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:41:06.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:41:07.136 [DEBUG] [Thread-207648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:07.154 [DEBUG] [Thread-207646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:41:07.154 [DEBUG] [Thread-207646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:41:07.155 [DEBUG] [Thread-207646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:41:07.195 [DEBUG] [Thread-207646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:41:07.196 [DEBUG] [Thread-207646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:41:07.199 [DEBUG] [Thread-207646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:41:07.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:41:07.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:41:07.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:41:07.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:41:07.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:41:07.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:41:07.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:41:07.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:41:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:41:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.611554 -999.00  +22.50  20.94     26   +2.30 1 1 1 1 1   888    0 18.96 -41.54 ----- 23.0 20.9 142.7 33.8 27.9 -30.0 27.5 -29.2 29.1 -28.2 29.8 -30.7
2026-02-15T16:41:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:41:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:41:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.611554
2026-02-15T16:41:07.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:41:07.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:40:38', tmtdew=24.72, humidity=19.46, cloud=0.0, wind=27.66, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:40:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:41:07.219 [DEBUG] [Thread-207646] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:41:07.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:41:07.315 [DEBUG] [Thread-207650] [transport.py] [_log()] starting thread (client mode): 0xa2d4fbe0
2026-02-15T16:41:07.315 [DEBUG] [Thread-207650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:41:07.330 [DEBUG] [Thread-207650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:41:07.330 [INFO] [Thread-207650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:41:07.337 [DEBUG] [Thread-207650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:41:07.338 [DEBUG] [Thread-207650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:41:07.338 [DEBUG] [Thread-207650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:41:07.338 [DEBUG] [Thread-207650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:07.338 [DEBUG] [Thread-207650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:07.338 [DEBUG] [Thread-207650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:07.338 [DEBUG] [Thread-207650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] client lang: <none>
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] server lang: <none>
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] kex follows: False
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:41:07.339 [DEBUG] [Thread-207650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:41:07.340 [DEBUG] [Thread-207650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:41:07.340 [DEBUG] [Thread-207650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:41:07.340 [DEBUG] [Thread-207650] [transport.py] [_log()] Compression: none
2026-02-15T16:41:07.340 [DEBUG] [Thread-207650] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:41:07.396 [DEBUG] [Thread-207650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:41:07.397 [DEBUG] [Thread-207650] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:41:07.397 [DEBUG] [Thread-207650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:41:07.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:41:07.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:41:07.456 [DEBUG] [Thread-207650] [transport.py] [_log()] userauth is OK
2026-02-15T16:41:07.456 [DEBUG] [Thread-207650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:41:07.456 [DEBUG] [Thread-207650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:41:07.456 [DEBUG] [Thread-207650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:41:07.456 [DEBUG] [Thread-207650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:41:07.475 [INFO] [Thread-207650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:41:07.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:41:07.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:41:08.307 [DEBUG] [Thread-207650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:41:08.307 [DEBUG] [Thread-207650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:41:08.354 [DEBUG] [Thread-207650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:41:08.354 [DEBUG] [Thread-207650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:41:08.363 [DEBUG] [Thread-207650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:41:08.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:41:08.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:41:08.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:41:08.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:41:08.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:41:08.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:41:08.400 [DEBUG] [Thread-207650] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:41:22.173 [DEBUG] [Thread-207652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:37.224 [DEBUG] [Thread-207653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:38.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:41:38.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:41:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:41:40.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 41, 13), 24.08, 20.43, 0.0, 27.9, 23.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:41:40.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:41:13
2026-02-15T16:41:40.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:41:40.757 [DEBUG] [Thread-207654] [transport.py] [_log()] starting thread (client mode): 0xa2d4f1c0
2026-02-15T16:41:40.757 [DEBUG] [Thread-207654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:41:40.779 [DEBUG] [Thread-207654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:41:40.779 [INFO] [Thread-207654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] client lang: <none>
2026-02-15T16:41:40.783 [DEBUG] [Thread-207654] [transport.py] [_log()] server lang: <none>
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] kex follows: False
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] Compression: none
2026-02-15T16:41:40.784 [DEBUG] [Thread-207654] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:41:40.801 [DEBUG] [Thread-207654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:41:40.801 [DEBUG] [Thread-207654] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:41:40.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:41:40.803 [DEBUG] [Thread-207654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:41:40.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:41:40.804 [DEBUG] [Thread-207654] [transport.py] [_log()] userauth is OK
2026-02-15T16:41:40.805 [DEBUG] [Thread-207654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:41:40.805 [DEBUG] [Thread-207654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:41:40.805 [DEBUG] [Thread-207654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:41:40.805 [DEBUG] [Thread-207654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:41:40.841 [INFO] [Thread-207654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:41:40.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:41:41.483 [DEBUG] [Thread-207654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:41:41.483 [DEBUG] [Thread-207654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:41:41.483 [DEBUG] [Thread-207654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:41:41.524 [DEBUG] [Thread-207654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:41:41.524 [DEBUG] [Thread-207654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:41:41.527 [DEBUG] [Thread-207654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:41:41.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:41:41.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:41:41.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:41:41.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:41:41.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:41:41.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:41:41.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:41:41.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:41:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:41:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.611901 -999.00  +22.60  25.15     26   +2.40 1 1 1 1 1   888    0 19.32 -37.88 ----- 25.1 25.1 132.0 31.8 27.8 -29.4 27.6 -29.1 29.1 -27.5 29.8 -29.5
2026-02-15T16:41:41.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.611901
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:41:41.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:41:13', tmtdew=24.08, humidity=20.43, cloud=0.0, wind=27.9, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:41:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:41:41.552 [DEBUG] [Thread-207654] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:41:41.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:41:41.645 [DEBUG] [Thread-207657] [transport.py] [_log()] starting thread (client mode): 0xa2d4cac0
2026-02-15T16:41:41.645 [DEBUG] [Thread-207657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:41:41.659 [DEBUG] [Thread-207657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:41:41.660 [INFO] [Thread-207657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:41:41.667 [DEBUG] [Thread-207657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:41:41.667 [DEBUG] [Thread-207657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:41:41.667 [DEBUG] [Thread-207657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:41:41.667 [DEBUG] [Thread-207657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] client lang: <none>
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] server lang: <none>
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] kex follows: False
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:41:41.668 [DEBUG] [Thread-207657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:41:41.669 [DEBUG] [Thread-207657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:41:41.669 [DEBUG] [Thread-207657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:41:41.669 [DEBUG] [Thread-207657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:41:41.669 [DEBUG] [Thread-207657] [transport.py] [_log()] Compression: none
2026-02-15T16:41:41.669 [DEBUG] [Thread-207657] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:41:41.725 [DEBUG] [Thread-207657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:41:41.725 [DEBUG] [Thread-207657] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:41:41.726 [DEBUG] [Thread-207657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:41:41.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:41:41.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:41:41.780 [DEBUG] [Thread-207657] [transport.py] [_log()] userauth is OK
2026-02-15T16:41:41.781 [DEBUG] [Thread-207657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:41:41.781 [DEBUG] [Thread-207657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:41:41.781 [DEBUG] [Thread-207657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:41:41.781 [DEBUG] [Thread-207657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:41:41.799 [INFO] [Thread-207657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:41:41.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:41:41.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:41:42.602 [DEBUG] [Thread-207657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:41:42.602 [DEBUG] [Thread-207657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:41:42.651 [DEBUG] [Thread-207657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:41:42.651 [DEBUG] [Thread-207657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:41:42.660 [DEBUG] [Thread-207657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:41:42.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:41:42.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:41:42.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:41:42.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:41:42.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:41:42.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:41:42.703 [DEBUG] [Thread-207657] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:41:52.261 [DEBUG] [Thread-207659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:41:57.726 [DEBUG] [Thread-207660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:00.767 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:00.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:07.322 [DEBUG] [Thread-207661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:12.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:42:12.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:42:12.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:42:14.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 41, 48), 24.01, 20.26, 0.0, 22.11, 23.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:42:14.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:41:48
2026-02-15T16:42:15.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:42:15.273 [DEBUG] [Thread-207662] [transport.py] [_log()] starting thread (client mode): 0xa2d4cac0
2026-02-15T16:42:15.273 [DEBUG] [Thread-207662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:42:15.293 [DEBUG] [Thread-207662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:42:15.294 [INFO] [Thread-207662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:42:15.296 [DEBUG] [Thread-207662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] client lang: <none>
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] server lang: <none>
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] kex follows: False
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] Compression: none
2026-02-15T16:42:15.297 [DEBUG] [Thread-207662] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:42:15.317 [DEBUG] [Thread-207662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:42:15.318 [DEBUG] [Thread-207662] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:42:15.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:42:15.319 [DEBUG] [Thread-207662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:42:15.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:42:15.320 [DEBUG] [Thread-207662] [transport.py] [_log()] userauth is OK
2026-02-15T16:42:15.320 [DEBUG] [Thread-207662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:42:15.320 [DEBUG] [Thread-207662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:42:15.320 [DEBUG] [Thread-207662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:42:15.320 [DEBUG] [Thread-207662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:42:15.352 [INFO] [Thread-207662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:42:15.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:42:15.989 [DEBUG] [Thread-207662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:42:15.990 [DEBUG] [Thread-207662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:42:15.990 [DEBUG] [Thread-207662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:42:16.030 [DEBUG] [Thread-207662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:42:16.031 [DEBUG] [Thread-207662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:42:16.034 [DEBUG] [Thread-207662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:42:16.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:42:16.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:42:16.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:42:16.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:42:16.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:42:16.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:42:16.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:42:16.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:42:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:42:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.612248 -999.00  +22.60  21.93     26   +2.50 1 1 1 1 1   888    0 19.24 -39.89 ----- 21.9 21.9 134.8 32.7 27.8 -29.5 27.6 -28.8 29.1 -28.0 29.8 -30.1
2026-02-15T16:42:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:42:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:42:16.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.612248
2026-02-15T16:42:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:42:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:42:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:42:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:42:16.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:42:16.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:41:48', tmtdew=24.01, humidity=20.26, cloud=0.0, wind=22.11, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:41:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:42:16.063 [DEBUG] [Thread-207662] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:42:16.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:42:16.164 [DEBUG] [Thread-207665] [transport.py] [_log()] starting thread (client mode): 0xa5740850
2026-02-15T16:42:16.164 [DEBUG] [Thread-207665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:42:16.180 [DEBUG] [Thread-207665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:42:16.180 [INFO] [Thread-207665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:42:16.188 [DEBUG] [Thread-207665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:42:16.188 [DEBUG] [Thread-207665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:42:16.188 [DEBUG] [Thread-207665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:42:16.188 [DEBUG] [Thread-207665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:16.188 [DEBUG] [Thread-207665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:16.188 [DEBUG] [Thread-207665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] client lang: <none>
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] server lang: <none>
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] kex follows: False
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:42:16.189 [DEBUG] [Thread-207665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:42:16.190 [DEBUG] [Thread-207665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:42:16.190 [DEBUG] [Thread-207665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:42:16.190 [DEBUG] [Thread-207665] [transport.py] [_log()] Compression: none
2026-02-15T16:42:16.190 [DEBUG] [Thread-207665] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:42:16.249 [DEBUG] [Thread-207665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:42:16.250 [DEBUG] [Thread-207665] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:42:16.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:42:16.252 [DEBUG] [Thread-207665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:42:16.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:42:16.308 [DEBUG] [Thread-207665] [transport.py] [_log()] userauth is OK
2026-02-15T16:42:16.309 [DEBUG] [Thread-207665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:42:16.309 [DEBUG] [Thread-207665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:42:16.309 [DEBUG] [Thread-207665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:42:16.309 [DEBUG] [Thread-207665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:42:16.328 [INFO] [Thread-207665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:42:16.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:42:16.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:42:17.161 [DEBUG] [Thread-207665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:42:17.162 [DEBUG] [Thread-207665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:42:17.212 [DEBUG] [Thread-207665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:42:17.212 [DEBUG] [Thread-207665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:42:17.221 [DEBUG] [Thread-207665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:42:17.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:42:17.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:42:17.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:42:17.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:42:17.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:42:17.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:42:17.264 [DEBUG] [Thread-207665] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:42:22.359 [DEBUG] [Thread-207667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:37.420 [DEBUG] [Thread-207668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:47.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:42:47.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:42:47.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:42:49.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 42, 24), 23.95, 20.33, 0.0, 25.3, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:42:49.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:42:24
2026-02-15T16:42:49.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:42:49.645 [DEBUG] [Thread-207669] [transport.py] [_log()] starting thread (client mode): 0xa2d7acb0
2026-02-15T16:42:49.645 [DEBUG] [Thread-207669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:42:49.666 [DEBUG] [Thread-207669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:42:49.666 [INFO] [Thread-207669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:42:49.669 [DEBUG] [Thread-207669] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:42:49.669 [DEBUG] [Thread-207669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:42:49.669 [DEBUG] [Thread-207669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:42:49.669 [DEBUG] [Thread-207669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:49.669 [DEBUG] [Thread-207669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:49.669 [DEBUG] [Thread-207669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] client lang: <none>
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] server lang: <none>
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] kex follows: False
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:42:49.670 [DEBUG] [Thread-207669] [transport.py] [_log()] Compression: none
2026-02-15T16:42:49.671 [DEBUG] [Thread-207669] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:42:49.688 [DEBUG] [Thread-207669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:42:49.689 [DEBUG] [Thread-207669] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:42:49.690 [DEBUG] [Thread-207669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:42:49.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:42:49.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:42:49.692 [DEBUG] [Thread-207669] [transport.py] [_log()] userauth is OK
2026-02-15T16:42:49.692 [DEBUG] [Thread-207669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:42:49.692 [DEBUG] [Thread-207669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:42:49.692 [DEBUG] [Thread-207669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:42:49.692 [DEBUG] [Thread-207669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:42:49.707 [INFO] [Thread-207669] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:42:49.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:42:50.359 [DEBUG] [Thread-207669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:42:50.359 [DEBUG] [Thread-207669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:42:50.360 [DEBUG] [Thread-207669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:42:50.400 [DEBUG] [Thread-207669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:42:50.400 [DEBUG] [Thread-207669] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:42:50.404 [DEBUG] [Thread-207669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:42:50.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:42:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:42:50.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:42:50.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:42:50.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:42:50.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:42:50.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:42:50.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:42:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:42:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.612595 -999.00  +22.70  22.00     26   +2.60 1 1 1 1 1   888    0 19.23 -38.39 ----- 22.0 22.0 141.6 31.1 27.8 -29.9 27.5 -29.7 29.2 -27.1 29.9 -28.4
2026-02-15T16:42:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:42:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:42:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.612595
2026-02-15T16:42:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:42:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:42:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:42:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:42:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:42:50.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:42:24', tmtdew=23.95, humidity=20.33, cloud=0.0, wind=25.3, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:42:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:42:50.432 [DEBUG] [Thread-207669] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:42:50.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:42:50.528 [DEBUG] [Thread-207672] [transport.py] [_log()] starting thread (client mode): 0xa2d79810
2026-02-15T16:42:50.528 [DEBUG] [Thread-207672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:42:50.542 [DEBUG] [Thread-207672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:42:50.542 [INFO] [Thread-207672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] client lang: <none>
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] server lang: <none>
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] kex follows: False
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:42:50.550 [DEBUG] [Thread-207672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:42:50.551 [DEBUG] [Thread-207672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:42:50.551 [DEBUG] [Thread-207672] [transport.py] [_log()] Compression: none
2026-02-15T16:42:50.551 [DEBUG] [Thread-207672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:42:50.608 [DEBUG] [Thread-207672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:42:50.608 [DEBUG] [Thread-207672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:42:50.609 [DEBUG] [Thread-207672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:42:50.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:42:50.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:42:50.663 [DEBUG] [Thread-207672] [transport.py] [_log()] userauth is OK
2026-02-15T16:42:50.663 [DEBUG] [Thread-207672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:42:50.664 [DEBUG] [Thread-207672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:42:50.664 [DEBUG] [Thread-207672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:42:50.664 [DEBUG] [Thread-207672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:42:50.682 [INFO] [Thread-207672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:42:50.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:42:50.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:42:51.525 [DEBUG] [Thread-207672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:42:51.526 [DEBUG] [Thread-207672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:42:51.573 [DEBUG] [Thread-207672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:42:51.573 [DEBUG] [Thread-207672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:42:51.582 [DEBUG] [Thread-207672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:42:51.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:42:51.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:42:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:42:51.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:42:51.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:42:51.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:42:51.617 [DEBUG] [Thread-207672] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:42:52.462 [DEBUG] [Thread-207674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:42:57.765 [DEBUG] [Thread-207675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:00.910 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:00.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:07.508 [DEBUG] [Thread-207676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:21.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:43:21.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:43:21.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:43:22.545 [DEBUG] [Thread-207677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 42, 59), 23.5, 20.96, 0.0, 24.24, 22.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:43:23.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:42:59
2026-02-15T16:43:24.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:43:24.239 [DEBUG] [Thread-207678] [transport.py] [_log()] starting thread (client mode): 0xa5740d30
2026-02-15T16:43:24.239 [DEBUG] [Thread-207678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:43:24.259 [DEBUG] [Thread-207678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:43:24.259 [INFO] [Thread-207678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:43:24.262 [DEBUG] [Thread-207678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] client lang: <none>
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] server lang: <none>
2026-02-15T16:43:24.263 [DEBUG] [Thread-207678] [transport.py] [_log()] kex follows: False
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] Compression: none
2026-02-15T16:43:24.264 [DEBUG] [Thread-207678] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:43:24.281 [DEBUG] [Thread-207678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:43:24.281 [DEBUG] [Thread-207678] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:43:24.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:43:24.282 [DEBUG] [Thread-207678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:43:24.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:43:24.325 [DEBUG] [Thread-207678] [transport.py] [_log()] userauth is OK
2026-02-15T16:43:24.325 [DEBUG] [Thread-207678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:43:24.325 [DEBUG] [Thread-207678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:43:24.325 [DEBUG] [Thread-207678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:43:24.325 [DEBUG] [Thread-207678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:43:24.342 [INFO] [Thread-207678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:43:24.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:43:24.999 [DEBUG] [Thread-207678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:43:24.999 [DEBUG] [Thread-207678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:43:24.999 [DEBUG] [Thread-207678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:43:25.040 [DEBUG] [Thread-207678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:43:25.040 [DEBUG] [Thread-207678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:43:25.043 [DEBUG] [Thread-207678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:43:25.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:43:25.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:43:25.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:43:25.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:43:25.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:43:25.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:43:25.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:43:25.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:43:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:43:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.613290 -999.00  +22.60  23.58     26   +2.30 1 1 1 1 1   888    0 19.03 -39.15 ----- 21.3 23.6 159.6 28.3 27.7 -30.5 27.5 -29.2 29.1 -28.6 29.8 -31.0
2026-02-15T16:43:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:43:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:43:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.613290
2026-02-15T16:43:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:43:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:43:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:43:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:43:25.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:43:25.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:42:59', tmtdew=23.5, humidity=20.96, cloud=0.0, wind=24.24, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:43:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:43:25.069 [DEBUG] [Thread-207678] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:43:25.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:43:25.166 [DEBUG] [Thread-207681] [transport.py] [_log()] starting thread (client mode): 0xa5742290
2026-02-15T16:43:25.166 [DEBUG] [Thread-207681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:43:25.181 [DEBUG] [Thread-207681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:43:25.181 [INFO] [Thread-207681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:43:25.188 [DEBUG] [Thread-207681] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:25.189 [DEBUG] [Thread-207681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] client lang: <none>
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] server lang: <none>
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] kex follows: False
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:43:25.190 [DEBUG] [Thread-207681] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:43:25.191 [DEBUG] [Thread-207681] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:43:25.191 [DEBUG] [Thread-207681] [transport.py] [_log()] Compression: none
2026-02-15T16:43:25.191 [DEBUG] [Thread-207681] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:43:25.248 [DEBUG] [Thread-207681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:43:25.249 [DEBUG] [Thread-207681] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:43:25.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:43:25.250 [DEBUG] [Thread-207681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:43:25.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:43:25.304 [DEBUG] [Thread-207681] [transport.py] [_log()] userauth is OK
2026-02-15T16:43:25.305 [DEBUG] [Thread-207681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:43:25.305 [DEBUG] [Thread-207681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:43:25.305 [DEBUG] [Thread-207681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:43:25.305 [DEBUG] [Thread-207681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:43:25.323 [INFO] [Thread-207681] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:43:25.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:43:25.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:43:26.171 [DEBUG] [Thread-207681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:43:26.172 [DEBUG] [Thread-207681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:43:26.220 [DEBUG] [Thread-207681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:43:26.220 [DEBUG] [Thread-207681] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:43:26.229 [DEBUG] [Thread-207681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:43:26.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:43:26.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:43:26.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:43:26.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:43:26.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:43:26.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:43:26.265 [DEBUG] [Thread-207681] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:43:37.586 [DEBUG] [Thread-207683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:52.637 [DEBUG] [Thread-207684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:43:56.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:43:56.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:43:57.819 [DEBUG] [Thread-207685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:43:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 43, 34), 24.42, 19.86, 0.0, 29.85, 23.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:43:58.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:43:34
2026-02-15T16:43:58.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:43:58.629 [DEBUG] [Thread-207686] [transport.py] [_log()] starting thread (client mode): 0xa57416f0
2026-02-15T16:43:58.630 [DEBUG] [Thread-207686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:43:58.650 [DEBUG] [Thread-207686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:43:58.650 [INFO] [Thread-207686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] client lang: <none>
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] server lang: <none>
2026-02-15T16:43:58.653 [DEBUG] [Thread-207686] [transport.py] [_log()] kex follows: False
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] Compression: none
2026-02-15T16:43:58.654 [DEBUG] [Thread-207686] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:43:58.672 [DEBUG] [Thread-207686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:43:58.673 [DEBUG] [Thread-207686] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:43:58.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:43:58.674 [DEBUG] [Thread-207686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:43:58.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:43:58.676 [DEBUG] [Thread-207686] [transport.py] [_log()] userauth is OK
2026-02-15T16:43:58.677 [DEBUG] [Thread-207686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:43:58.677 [DEBUG] [Thread-207686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:43:58.677 [DEBUG] [Thread-207686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:43:58.677 [DEBUG] [Thread-207686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:43:58.702 [INFO] [Thread-207686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:43:58.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:43:59.388 [DEBUG] [Thread-207686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:43:59.388 [DEBUG] [Thread-207686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:43:59.388 [DEBUG] [Thread-207686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:43:59.428 [DEBUG] [Thread-207686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:43:59.429 [DEBUG] [Thread-207686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:43:59.432 [DEBUG] [Thread-207686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:43:59.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:43:59.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:43:59.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:43:59.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:43:59.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:43:59.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:43:59.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:43:59.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:43:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:43:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.613637 -999.00  +22.50  20.26     27   +2.70 1 1 1 1 1   888    0 19.76 -36.31 ----- 20.3 20.3 163.9 26.2 27.8 -30.0 27.5 -28.5 29.1 -28.1 29.9 -30.1
2026-02-15T16:43:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:43:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:43:59.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.613637
2026-02-15T16:43:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:43:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:43:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:43:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:43:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:43:59.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:43:34', tmtdew=24.42, humidity=19.86, cloud=0.0, wind=29.85, temperature=23.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:43:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:43:59.459 [DEBUG] [Thread-207686] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:43:59.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:43:59.556 [DEBUG] [Thread-207689] [transport.py] [_log()] starting thread (client mode): 0xa57430a0
2026-02-15T16:43:59.556 [DEBUG] [Thread-207689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:43:59.571 [DEBUG] [Thread-207689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:43:59.571 [INFO] [Thread-207689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:43:59.578 [DEBUG] [Thread-207689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] client lang: <none>
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] server lang: <none>
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] kex follows: False
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:43:59.579 [DEBUG] [Thread-207689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:43:59.580 [DEBUG] [Thread-207689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:43:59.580 [DEBUG] [Thread-207689] [transport.py] [_log()] Compression: none
2026-02-15T16:43:59.580 [DEBUG] [Thread-207689] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:43:59.636 [DEBUG] [Thread-207689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:43:59.637 [DEBUG] [Thread-207689] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:43:59.637 [DEBUG] [Thread-207689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:43:59.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:43:59.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:43:59.694 [DEBUG] [Thread-207689] [transport.py] [_log()] userauth is OK
2026-02-15T16:43:59.694 [DEBUG] [Thread-207689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:43:59.694 [DEBUG] [Thread-207689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:43:59.695 [DEBUG] [Thread-207689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:43:59.695 [DEBUG] [Thread-207689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:43:59.714 [INFO] [Thread-207689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:43:59.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:43:59.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:44:00.535 [DEBUG] [Thread-207689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:44:00.536 [DEBUG] [Thread-207689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:44:00.584 [DEBUG] [Thread-207689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:44:00.584 [DEBUG] [Thread-207689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:44:00.593 [DEBUG] [Thread-207689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:44:00.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:44:00.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:44:00.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:44:00.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:44:00.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:44:00.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:44:00.629 [DEBUG] [Thread-207689] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:44:01.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:44:01.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:44:07.674 [DEBUG] [Thread-207691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:44:22.728 [DEBUG] [Thread-207692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:44:30.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:44:30.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:44:30.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:44:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 44, 9), 23.2, 21.19, 0.0, 24.79, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:44:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:44:09
2026-02-15T16:44:32.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:44:32.992 [DEBUG] [Thread-207693] [transport.py] [_log()] starting thread (client mode): 0xa5743730
2026-02-15T16:44:32.992 [DEBUG] [Thread-207693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:44:33.012 [DEBUG] [Thread-207693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:44:33.012 [INFO] [Thread-207693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:44:33.015 [DEBUG] [Thread-207693] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:44:33.015 [DEBUG] [Thread-207693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:44:33.015 [DEBUG] [Thread-207693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:44:33.015 [DEBUG] [Thread-207693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:44:33.015 [DEBUG] [Thread-207693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:44:33.015 [DEBUG] [Thread-207693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] client lang: <none>
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] server lang: <none>
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] kex follows: False
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] Compression: none
2026-02-15T16:44:33.016 [DEBUG] [Thread-207693] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:44:33.031 [DEBUG] [Thread-207693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:44:33.032 [DEBUG] [Thread-207693] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:44:33.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:44:33.033 [DEBUG] [Thread-207693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:44:33.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:44:33.034 [DEBUG] [Thread-207693] [transport.py] [_log()] userauth is OK
2026-02-15T16:44:33.034 [DEBUG] [Thread-207693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:44:33.034 [DEBUG] [Thread-207693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:44:33.034 [DEBUG] [Thread-207693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:44:33.034 [DEBUG] [Thread-207693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:44:33.069 [INFO] [Thread-207693] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:44:33.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:44:33.728 [DEBUG] [Thread-207693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:44:33.728 [DEBUG] [Thread-207693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:44:33.729 [DEBUG] [Thread-207693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:44:33.769 [DEBUG] [Thread-207693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:44:33.770 [DEBUG] [Thread-207693] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:44:33.773 [DEBUG] [Thread-207693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:44:33.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:44:33.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:44:33.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:44:33.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:44:33.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:44:33.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:44:33.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:44:33.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:44:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:44:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.613984 -999.00  +22.60  19.22     27   +2.90 1 1 1 1 1   888    0 19.34 -36.78 ----- 19.6 19.2 163.8 26.2 27.7 -29.7 27.4 -28.4 29.1 -27.7 29.9 -30.3
2026-02-15T16:44:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:44:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:44:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.613984
2026-02-15T16:44:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:44:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:44:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:44:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:44:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:44:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:44:09', tmtdew=23.2, humidity=21.19, cloud=0.0, wind=24.79, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:44:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:44:33.802 [DEBUG] [Thread-207693] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:44:33.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:44:33.910 [DEBUG] [Thread-207696] [transport.py] [_log()] starting thread (client mode): 0xa2d78a00
2026-02-15T16:44:33.911 [DEBUG] [Thread-207696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:44:33.925 [DEBUG] [Thread-207696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:44:33.925 [INFO] [Thread-207696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] client lang: <none>
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] server lang: <none>
2026-02-15T16:44:33.933 [DEBUG] [Thread-207696] [transport.py] [_log()] kex follows: False
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] Compression: none
2026-02-15T16:44:33.934 [DEBUG] [Thread-207696] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:44:33.992 [DEBUG] [Thread-207696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:44:33.993 [DEBUG] [Thread-207696] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:44:33.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:44:33.994 [DEBUG] [Thread-207696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:44:33.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:44:34.048 [DEBUG] [Thread-207696] [transport.py] [_log()] userauth is OK
2026-02-15T16:44:34.048 [DEBUG] [Thread-207696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:44:34.049 [DEBUG] [Thread-207696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:44:34.049 [DEBUG] [Thread-207696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:44:34.049 [DEBUG] [Thread-207696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:44:34.068 [INFO] [Thread-207696] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:44:34.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:44:34.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:44:34.877 [DEBUG] [Thread-207696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:44:34.878 [DEBUG] [Thread-207696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:44:34.925 [DEBUG] [Thread-207696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:44:34.926 [DEBUG] [Thread-207696] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:44:34.935 [DEBUG] [Thread-207696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:44:34.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:44:34.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:44:34.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:44:34.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:44:34.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:44:34.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:44:34.972 [DEBUG] [Thread-207696] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:44:37.769 [DEBUG] [Thread-207698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:44:52.825 [DEBUG] [Thread-207699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:44:57.865 [DEBUG] [Thread-207700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:01.201 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:01.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:45:04.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:45:05.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:45:07.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 44, 44), 22.65, 22.39, 0.0, 29.41, 22.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:45:07.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:44:44
2026-02-15T16:45:07.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:45:07.825 [DEBUG] [Thread-207701] [transport.py] [_log()] starting thread (client mode): 0xa2d4d900
2026-02-15T16:45:07.825 [DEBUG] [Thread-207701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:45:07.844 [DEBUG] [Thread-207701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:45:07.844 [INFO] [Thread-207701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:07.847 [DEBUG] [Thread-207701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] client lang: <none>
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] server lang: <none>
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] kex follows: False
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] Compression: none
2026-02-15T16:45:07.848 [DEBUG] [Thread-207701] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:45:07.860 [DEBUG] [Thread-207703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:07.866 [DEBUG] [Thread-207701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:45:07.867 [DEBUG] [Thread-207701] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:45:07.868 [DEBUG] [Thread-207701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:45:07.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:45:07.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:45:07.870 [DEBUG] [Thread-207701] [transport.py] [_log()] userauth is OK
2026-02-15T16:45:07.870 [DEBUG] [Thread-207701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:45:07.870 [DEBUG] [Thread-207701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:45:07.871 [DEBUG] [Thread-207701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:45:07.871 [DEBUG] [Thread-207701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:45:07.896 [INFO] [Thread-207701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:45:07.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:45:17.240 [DEBUG] [Thread-207701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:45:17.240 [DEBUG] [Thread-207701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:45:17.241 [DEBUG] [Thread-207701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:45:17.282 [DEBUG] [Thread-207701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:45:17.282 [DEBUG] [Thread-207701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:45:17.286 [DEBUG] [Thread-207701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:45:17.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:45:17.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:45:17.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:45:17.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:45:17.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:45:17.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:45:17.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:45:17.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:45:17.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:45:17.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.614331 -999.00  +22.60  21.59     27   +2.80 1 1 1 1 1   888    0 18.99 -35.88 ----- 17.2 21.6 163.4 27.0 27.7 -30.6 27.4 -28.3 29.0 -29.1 29.8 -30.2
2026-02-15T16:45:17.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:45:17.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:45:17.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.614331
2026-02-15T16:45:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:45:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:45:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:45:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:45:17.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:45:17.350 [DEBUG] [Thread-207701] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:45:17.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:44:44', tmtdew=22.65, humidity=22.39, cloud=0.0, wind=29.41, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:44:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:45:17.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:45:17.448 [DEBUG] [Thread-207705] [transport.py] [_log()] starting thread (client mode): 0xa2d4e5f0
2026-02-15T16:45:17.448 [DEBUG] [Thread-207705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:45:17.463 [DEBUG] [Thread-207705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:45:17.463 [INFO] [Thread-207705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:45:17.471 [DEBUG] [Thread-207705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:45:17.471 [DEBUG] [Thread-207705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:45:17.471 [DEBUG] [Thread-207705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:45:17.471 [DEBUG] [Thread-207705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:17.471 [DEBUG] [Thread-207705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:17.471 [DEBUG] [Thread-207705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] client lang: <none>
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] server lang: <none>
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] kex follows: False
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:45:17.472 [DEBUG] [Thread-207705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:45:17.473 [DEBUG] [Thread-207705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:45:17.473 [DEBUG] [Thread-207705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:45:17.473 [DEBUG] [Thread-207705] [transport.py] [_log()] Compression: none
2026-02-15T16:45:17.473 [DEBUG] [Thread-207705] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:45:17.527 [DEBUG] [Thread-207705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:45:17.528 [DEBUG] [Thread-207705] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:45:17.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:45:17.529 [DEBUG] [Thread-207705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:45:17.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:45:17.584 [DEBUG] [Thread-207705] [transport.py] [_log()] userauth is OK
2026-02-15T16:45:17.584 [DEBUG] [Thread-207705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:45:17.584 [DEBUG] [Thread-207705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:45:17.584 [DEBUG] [Thread-207705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:45:17.585 [DEBUG] [Thread-207705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:45:17.604 [INFO] [Thread-207705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:45:17.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:45:17.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:45:18.406 [DEBUG] [Thread-207705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:45:18.406 [DEBUG] [Thread-207705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:45:18.455 [DEBUG] [Thread-207705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:45:18.455 [DEBUG] [Thread-207705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:45:18.463 [DEBUG] [Thread-207705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:45:18.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:45:18.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:45:18.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:45:18.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:45:18.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:45:18.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:45:18.495 [DEBUG] [Thread-207705] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:45:22.893 [DEBUG] [Thread-207707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:37.944 [DEBUG] [Thread-207708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:48.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:45:48.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:45:48.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:45:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 45, 20), 22.55, 22.54, 0.0, 25.21, 22.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:45:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:45:20
2026-02-15T16:45:51.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:45:51.226 [DEBUG] [Thread-207709] [transport.py] [_log()] starting thread (client mode): 0xa2d4c0d0
2026-02-15T16:45:51.226 [DEBUG] [Thread-207709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:45:51.247 [DEBUG] [Thread-207709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:45:51.247 [INFO] [Thread-207709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:45:51.250 [DEBUG] [Thread-207709] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] client lang: <none>
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] server lang: <none>
2026-02-15T16:45:51.251 [DEBUG] [Thread-207709] [transport.py] [_log()] kex follows: False
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] Compression: none
2026-02-15T16:45:51.252 [DEBUG] [Thread-207709] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:45:51.271 [DEBUG] [Thread-207709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:45:51.272 [DEBUG] [Thread-207709] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:45:51.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:45:51.273 [DEBUG] [Thread-207709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:45:51.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:45:51.276 [DEBUG] [Thread-207709] [transport.py] [_log()] userauth is OK
2026-02-15T16:45:51.276 [DEBUG] [Thread-207709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:45:51.276 [DEBUG] [Thread-207709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:45:51.276 [DEBUG] [Thread-207709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:45:51.276 [DEBUG] [Thread-207709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:45:51.300 [INFO] [Thread-207709] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:45:51.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:45:51.939 [DEBUG] [Thread-207709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:45:51.939 [DEBUG] [Thread-207709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:45:51.940 [DEBUG] [Thread-207709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:45:51.980 [DEBUG] [Thread-207709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:45:51.980 [DEBUG] [Thread-207709] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:45:51.982 [DEBUG] [Thread-207709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:45:51.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:45:51.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:45:51.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:45:51.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:45:52.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:45:52.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:45:52.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.614678 -999.00  +22.50  22.80     27   +2.90 1 1 1 1 1   888    0 19.21 -38.82 ----- 20.2 22.8 143.8 28.7 27.6 -29.8 27.3 -29.1 29.0 -27.5 29.7 -29.6
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.614678
2026-02-15T16:45:52.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:45:52.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:45:52.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:45:52.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:45:52.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:45:52.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:45:20', tmtdew=22.55, humidity=22.54, cloud=0.0, wind=25.21, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:45:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:45:52.002 [DEBUG] [Thread-207709] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:45:52.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:45:52.093 [DEBUG] [Thread-207712] [transport.py] [_log()] starting thread (client mode): 0xa5741690
2026-02-15T16:45:52.093 [DEBUG] [Thread-207712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:45:52.108 [DEBUG] [Thread-207712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:45:52.108 [INFO] [Thread-207712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:45:52.115 [DEBUG] [Thread-207712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] client lang: <none>
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] server lang: <none>
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] kex follows: False
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:45:52.116 [DEBUG] [Thread-207712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:45:52.117 [DEBUG] [Thread-207712] [transport.py] [_log()] Compression: none
2026-02-15T16:45:52.117 [DEBUG] [Thread-207712] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:45:52.175 [DEBUG] [Thread-207712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:45:52.175 [DEBUG] [Thread-207712] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:45:52.176 [DEBUG] [Thread-207712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:45:52.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:45:52.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:45:52.231 [DEBUG] [Thread-207712] [transport.py] [_log()] userauth is OK
2026-02-15T16:45:52.231 [DEBUG] [Thread-207712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:45:52.231 [DEBUG] [Thread-207712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:45:52.232 [DEBUG] [Thread-207712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:45:52.232 [DEBUG] [Thread-207712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:45:52.254 [INFO] [Thread-207712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:45:52.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:45:52.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:45:52.977 [DEBUG] [Thread-207714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:45:53.083 [DEBUG] [Thread-207712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:45:53.083 [DEBUG] [Thread-207712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:45:53.131 [DEBUG] [Thread-207712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:45:53.131 [DEBUG] [Thread-207712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:45:53.141 [DEBUG] [Thread-207712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:45:53.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:45:53.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:45: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-02-15T16:45:53.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:45:53.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:45:53.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:45:53.185 [DEBUG] [Thread-207712] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:45:57.900 [DEBUG] [Thread-207715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:01.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:01.395 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:08.033 [DEBUG] [Thread-207716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:23.079 [DEBUG] [Thread-207717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:23.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:46:23.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:46:23.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:46:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 45, 55), 23.02, 21.68, 0.0, 24.28, 22.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:46:25.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:45:55
2026-02-15T16:46:25.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:46:25.613 [DEBUG] [Thread-207718] [transport.py] [_log()] starting thread (client mode): 0xa2d7acb0
2026-02-15T16:46:25.613 [DEBUG] [Thread-207718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:46:25.634 [DEBUG] [Thread-207718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:46:25.634 [INFO] [Thread-207718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:46:25.637 [DEBUG] [Thread-207718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:46:25.637 [DEBUG] [Thread-207718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:46:25.637 [DEBUG] [Thread-207718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:46:25.637 [DEBUG] [Thread-207718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:46:25.637 [DEBUG] [Thread-207718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:46:25.637 [DEBUG] [Thread-207718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] client lang: <none>
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] server lang: <none>
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] kex follows: False
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] Compression: none
2026-02-15T16:46:25.638 [DEBUG] [Thread-207718] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:46:25.658 [DEBUG] [Thread-207718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:46:25.659 [DEBUG] [Thread-207718] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:46:25.659 [DEBUG] [Thread-207718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:46:25.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:46:25.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:46:25.662 [DEBUG] [Thread-207718] [transport.py] [_log()] userauth is OK
2026-02-15T16:46:25.662 [DEBUG] [Thread-207718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:46:25.662 [DEBUG] [Thread-207718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:46:25.662 [DEBUG] [Thread-207718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:46:25.662 [DEBUG] [Thread-207718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:46:25.686 [INFO] [Thread-207718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:46:25.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:46:26.324 [DEBUG] [Thread-207718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:46:26.325 [DEBUG] [Thread-207718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:46:26.325 [DEBUG] [Thread-207718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:46:26.365 [DEBUG] [Thread-207718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:46:26.366 [DEBUG] [Thread-207718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:46:26.369 [DEBUG] [Thread-207718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:46:26.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:46:26.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:46:26.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:46:26.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:46:26.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:46:26.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:46:26.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:46:26.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:46:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:46:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.615026 -999.00  +22.50  15.08     27   +2.90 1 1 1 1 1   888    0 19.04 -41.99 ----- 20.7 15.1 146.6 28.0 27.6 -30.6 27.3 -28.6 29.0 -28.0 29.7 -30.0
2026-02-15T16:46:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:46:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:46:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.615026
2026-02-15T16:46:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:46:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:46:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:46:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:46:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:46:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:45:55', tmtdew=23.02, humidity=21.68, cloud=0.0, wind=24.28, temperature=22.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:45:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:46:26.397 [DEBUG] [Thread-207718] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:46:26.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:46:26.493 [DEBUG] [Thread-207721] [transport.py] [_log()] starting thread (client mode): 0xa5743b80
2026-02-15T16:46:26.493 [DEBUG] [Thread-207721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:46:26.507 [DEBUG] [Thread-207721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:46:26.508 [INFO] [Thread-207721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:46:26.515 [DEBUG] [Thread-207721] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:46:26.516 [DEBUG] [Thread-207721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] client lang: <none>
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] server lang: <none>
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] kex follows: False
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:46:26.517 [DEBUG] [Thread-207721] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:46:26.518 [DEBUG] [Thread-207721] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:46:26.518 [DEBUG] [Thread-207721] [transport.py] [_log()] Compression: none
2026-02-15T16:46:26.518 [DEBUG] [Thread-207721] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:46:26.576 [DEBUG] [Thread-207721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:46:26.577 [DEBUG] [Thread-207721] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:46:26.577 [DEBUG] [Thread-207721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:46:26.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:46:26.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:46:26.632 [DEBUG] [Thread-207721] [transport.py] [_log()] userauth is OK
2026-02-15T16:46:26.633 [DEBUG] [Thread-207721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:46:26.633 [DEBUG] [Thread-207721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:46:26.633 [DEBUG] [Thread-207721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:46:26.633 [DEBUG] [Thread-207721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:46:26.654 [INFO] [Thread-207721] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:46:26.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:46:26.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:46:27.479 [DEBUG] [Thread-207721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:46:27.479 [DEBUG] [Thread-207721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:46:27.527 [DEBUG] [Thread-207721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:46:27.528 [DEBUG] [Thread-207721] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:46:27.538 [DEBUG] [Thread-207721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:46:27.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:46:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:46:27.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:46:27.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:46:27.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:46:27.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:46:27.576 [DEBUG] [Thread-207721] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:46:38.116 [DEBUG] [Thread-207723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:53.165 [DEBUG] [Thread-207724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:57.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:46:57.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:46:57.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:46:57.933 [DEBUG] [Thread-207725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:46:59.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 46, 30), 22.89, 21.86, 0.0, 25.14, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:46:59.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:46:30
2026-02-15T16:46:59.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:46:59.974 [DEBUG] [Thread-207726] [transport.py] [_log()] starting thread (client mode): 0xa2d4e0b0
2026-02-15T16:46:59.974 [DEBUG] [Thread-207726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:46:59.996 [DEBUG] [Thread-207726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:46:59.996 [INFO] [Thread-207726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] client lang: <none>
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] server lang: <none>
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] kex follows: False
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] Compression: none
2026-02-15T16:47:00.000 [DEBUG] [Thread-207726] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:47:00.017 [DEBUG] [Thread-207726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:47:00.018 [DEBUG] [Thread-207726] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:47:00.018 [DEBUG] [Thread-207726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:47:00.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:47:00.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:47:00.020 [DEBUG] [Thread-207726] [transport.py] [_log()] userauth is OK
2026-02-15T16:47:00.020 [DEBUG] [Thread-207726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:47:00.021 [DEBUG] [Thread-207726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:47:00.021 [DEBUG] [Thread-207726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:47:00.021 [DEBUG] [Thread-207726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:47:00.043 [INFO] [Thread-207726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:47:00.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:47:00.677 [DEBUG] [Thread-207726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:47:00.677 [DEBUG] [Thread-207726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:47:00.677 [DEBUG] [Thread-207726] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:47:00.718 [DEBUG] [Thread-207726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:47:00.719 [DEBUG] [Thread-207726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:47:00.722 [DEBUG] [Thread-207726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:47:00.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:47:00.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:47:00.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:47:00.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:47:00.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:47:00.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:47:00.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:47:00.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:47:00.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:47:00.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.615373 -999.00  +22.50  22.97     27   +2.80 1 1 1 1 1   888    0 19.18 -43.38 ----- 20.7 23.0 162.0 33.1 27.5 -29.1 27.3 -27.9 28.9 -27.0 29.7 -29.2
2026-02-15T16:47:00.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:47:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:47:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.615373
2026-02-15T16:47:00.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:47:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:47:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:47:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:47:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:47:00.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:46:30', tmtdew=22.89, humidity=21.86, cloud=0.0, wind=25.14, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:46:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:47:00.749 [DEBUG] [Thread-207726] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:47:00.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:47:00.844 [DEBUG] [Thread-207729] [transport.py] [_log()] starting thread (client mode): 0xa2d7ace0
2026-02-15T16:47:00.844 [DEBUG] [Thread-207729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:47:00.859 [DEBUG] [Thread-207729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:47:00.860 [INFO] [Thread-207729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:47:00.867 [DEBUG] [Thread-207729] [transport.py] [_log()] client lang: <none>
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] server lang: <none>
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] kex follows: False
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] Compression: none
2026-02-15T16:47:00.868 [DEBUG] [Thread-207729] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:47:00.924 [DEBUG] [Thread-207729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:47:00.924 [DEBUG] [Thread-207729] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:47:00.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:47:00.925 [DEBUG] [Thread-207729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:47:00.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:47:00.980 [DEBUG] [Thread-207729] [transport.py] [_log()] userauth is OK
2026-02-15T16:47:00.980 [DEBUG] [Thread-207729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:47:00.980 [DEBUG] [Thread-207729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:47:00.981 [DEBUG] [Thread-207729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:47:00.981 [DEBUG] [Thread-207729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:47:00.999 [INFO] [Thread-207729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:47:01.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:47:01.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:47:01.596 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:47:01.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:47:01.860 [DEBUG] [Thread-207729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:47:01.860 [DEBUG] [Thread-207729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:47:01.908 [DEBUG] [Thread-207729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:47:01.909 [DEBUG] [Thread-207729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:47:01.918 [DEBUG] [Thread-207729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:47:01.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:47:01.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:47:01.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:47:01.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:47:01.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:47:01.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:47:01.954 [DEBUG] [Thread-207729] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:47:08.202 [DEBUG] [Thread-207731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:47:23.238 [DEBUG] [Thread-207732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:47:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:47:31.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:47:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:47:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 47, 6), 23.01, 21.68, 0.0, 23.93, 22.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:47:33.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:47:06
2026-02-15T16:47:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:47:34.539 [DEBUG] [Thread-207733] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-15T16:47:34.539 [DEBUG] [Thread-207733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:47:34.560 [DEBUG] [Thread-207733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:47:34.561 [INFO] [Thread-207733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:47:34.563 [DEBUG] [Thread-207733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:47:34.563 [DEBUG] [Thread-207733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:47:34.563 [DEBUG] [Thread-207733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:47:34.563 [DEBUG] [Thread-207733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:34.563 [DEBUG] [Thread-207733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] client lang: <none>
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] server lang: <none>
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] kex follows: False
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] Compression: none
2026-02-15T16:47:34.564 [DEBUG] [Thread-207733] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:47:34.582 [DEBUG] [Thread-207733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:47:34.583 [DEBUG] [Thread-207733] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:47:34.583 [DEBUG] [Thread-207733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:47:34.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:47:34.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:47:34.585 [DEBUG] [Thread-207733] [transport.py] [_log()] userauth is OK
2026-02-15T16:47:34.585 [DEBUG] [Thread-207733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:47:34.585 [DEBUG] [Thread-207733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:47:34.586 [DEBUG] [Thread-207733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:47:34.586 [DEBUG] [Thread-207733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:47:34.610 [INFO] [Thread-207733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:47:34.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:47:35.252 [DEBUG] [Thread-207733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:47:35.253 [DEBUG] [Thread-207733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:47:35.253 [DEBUG] [Thread-207733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:47:35.293 [DEBUG] [Thread-207733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:47:35.293 [DEBUG] [Thread-207733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:47:35.297 [DEBUG] [Thread-207733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:47:35.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:47:35.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:47:35.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:47:35.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:47:35.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:47:35.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:47:35.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:47:35.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:47:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:47:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.615720 -999.00  +22.60  17.20     27   +2.90 1 1 1 1 1   888    0 18.76 -44.32 ----- 15.4 17.2 152.1 27.3 27.6 -29.3 27.3 -28.5 29.0 -27.4 29.7 -29.1
2026-02-15T16:47:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:47:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:47:35.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.615720
2026-02-15T16:47:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:47:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:47:35.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:47:35.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:47:06', tmtdew=23.01, humidity=21.68, cloud=0.0, wind=23.93, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:46:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:47:35.326 [DEBUG] [Thread-207733] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:47:35.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:47:35.421 [DEBUG] [Thread-207736] [transport.py] [_log()] starting thread (client mode): 0xa5740e20
2026-02-15T16:47:35.422 [DEBUG] [Thread-207736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:47:35.436 [DEBUG] [Thread-207736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:47:35.436 [INFO] [Thread-207736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] client lang: <none>
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] server lang: <none>
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] kex follows: False
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:47:35.444 [DEBUG] [Thread-207736] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:47:35.445 [DEBUG] [Thread-207736] [transport.py] [_log()] Compression: none
2026-02-15T16:47:35.445 [DEBUG] [Thread-207736] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:47:35.502 [DEBUG] [Thread-207736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:47:35.503 [DEBUG] [Thread-207736] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:47:35.503 [DEBUG] [Thread-207736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:47:35.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:47:35.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:47:35.560 [DEBUG] [Thread-207736] [transport.py] [_log()] userauth is OK
2026-02-15T16:47:35.560 [DEBUG] [Thread-207736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:47:35.560 [DEBUG] [Thread-207736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:47:35.560 [DEBUG] [Thread-207736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:47:35.561 [DEBUG] [Thread-207736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:47:35.579 [INFO] [Thread-207736] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:47:35.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:47:35.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:47:36.397 [DEBUG] [Thread-207736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:47:36.397 [DEBUG] [Thread-207736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:47:36.444 [DEBUG] [Thread-207736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:47:36.445 [DEBUG] [Thread-207736] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:47:36.454 [DEBUG] [Thread-207736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:47:36.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:47: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')
2026-02-15T16:47:36.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:47:36.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:47:36.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:47:36.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:47:36.491 [DEBUG] [Thread-207736] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:47:38.275 [DEBUG] [Thread-207738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:47:53.336 [DEBUG] [Thread-207739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:47:57.973 [DEBUG] [Thread-207740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:01.823 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:01.824 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:06.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:48:06.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:48:06.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:48:08.373 [DEBUG] [Thread-207741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:09.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 47, 41), 23.99, 20.42, 0.0, 25.83, 23.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:48:09.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:47:41
2026-02-15T16:48:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:48:09.845 [DEBUG] [Thread-207742] [transport.py] [_log()] starting thread (client mode): 0xa2d19750
2026-02-15T16:48:09.846 [DEBUG] [Thread-207742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:48:09.866 [DEBUG] [Thread-207742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:48:09.866 [INFO] [Thread-207742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] client lang: <none>
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] server lang: <none>
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] kex follows: False
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] Compression: none
2026-02-15T16:48:09.869 [DEBUG] [Thread-207742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:48:09.887 [DEBUG] [Thread-207742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:48:09.887 [DEBUG] [Thread-207742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:48:09.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:48:09.888 [DEBUG] [Thread-207742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:48:09.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:48:09.890 [DEBUG] [Thread-207742] [transport.py] [_log()] userauth is OK
2026-02-15T16:48:09.891 [DEBUG] [Thread-207742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:48:09.891 [DEBUG] [Thread-207742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:48:09.891 [DEBUG] [Thread-207742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:48:09.891 [DEBUG] [Thread-207742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:48:09.915 [INFO] [Thread-207742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:48:09.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:48:10.662 [DEBUG] [Thread-207742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:48:10.662 [DEBUG] [Thread-207742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:48:10.663 [DEBUG] [Thread-207742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:48:10.703 [DEBUG] [Thread-207742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:48:10.704 [DEBUG] [Thread-207742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:48:10.706 [DEBUG] [Thread-207742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:48:10.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:48:10.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:48:10.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:48:10.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:48:10.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:48:10.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:48:10.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:48:10.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:48:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:48:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.616068 -999.00  +22.70  19.47     27   +2.80 1 1 1 1 1   888    0 18.75 -49.78 ----- 20.6 19.5 143.2 26.6 27.6 -29.0 27.4 -28.7 29.0 -26.6 29.7 -29.6
2026-02-15T16:48:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:48:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:48:10.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.616068
2026-02-15T16:48:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:48:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:48:10.732 [DEBUG] [Thread-207742] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:48:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:48:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:48:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:48:10.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:47:41', tmtdew=23.99, humidity=20.42, cloud=0.0, wind=25.83, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:47:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:48:10.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:48:10.827 [DEBUG] [Thread-207745] [transport.py] [_log()] starting thread (client mode): 0xa2d18100
2026-02-15T16:48:10.827 [DEBUG] [Thread-207745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:48:10.841 [DEBUG] [Thread-207745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:48:10.841 [INFO] [Thread-207745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:48:10.849 [DEBUG] [Thread-207745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:48:10.849 [DEBUG] [Thread-207745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:48:10.849 [DEBUG] [Thread-207745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:48:10.849 [DEBUG] [Thread-207745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:10.849 [DEBUG] [Thread-207745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:10.849 [DEBUG] [Thread-207745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] client lang: <none>
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] server lang: <none>
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] kex follows: False
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] Compression: none
2026-02-15T16:48:10.850 [DEBUG] [Thread-207745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:48:10.912 [DEBUG] [Thread-207745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:48:10.913 [DEBUG] [Thread-207745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:48:10.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:48:10.914 [DEBUG] [Thread-207745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:48:10.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:48:10.969 [DEBUG] [Thread-207745] [transport.py] [_log()] userauth is OK
2026-02-15T16:48:10.969 [DEBUG] [Thread-207745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:48:10.969 [DEBUG] [Thread-207745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:48:10.969 [DEBUG] [Thread-207745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:48:10.969 [DEBUG] [Thread-207745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:48:10.988 [INFO] [Thread-207745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:48:10.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:48:10.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:48:11.798 [DEBUG] [Thread-207745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:48:11.798 [DEBUG] [Thread-207745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:48:11.845 [DEBUG] [Thread-207745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:48:11.846 [DEBUG] [Thread-207745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:48:11.855 [DEBUG] [Thread-207745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:48:11.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:48:11.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:48:11.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:48:11.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:48:11.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:48:11.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:48:11.893 [DEBUG] [Thread-207745] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:48:23.410 [DEBUG] [Thread-207747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:38.463 [DEBUG] [Thread-207748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:48:41.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:48:41.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:48:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 48, 16), 23.78, 20.81, 0.0, 23.11, 23.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:48:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:48:16
2026-02-15T16:48:44.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:48:44.374 [DEBUG] [Thread-207749] [transport.py] [_log()] starting thread (client mode): 0xa2d4fa60
2026-02-15T16:48:44.374 [DEBUG] [Thread-207749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:48:44.397 [DEBUG] [Thread-207749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:48:44.398 [INFO] [Thread-207749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] client lang: <none>
2026-02-15T16:48:44.401 [DEBUG] [Thread-207749] [transport.py] [_log()] server lang: <none>
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] kex follows: False
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] Compression: none
2026-02-15T16:48:44.402 [DEBUG] [Thread-207749] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:48:44.420 [DEBUG] [Thread-207749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:48:44.421 [DEBUG] [Thread-207749] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:48:44.422 [DEBUG] [Thread-207749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:48:44.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:48:44.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:48:44.424 [DEBUG] [Thread-207749] [transport.py] [_log()] userauth is OK
2026-02-15T16:48:44.425 [DEBUG] [Thread-207749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:48:44.425 [DEBUG] [Thread-207749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:48:44.425 [DEBUG] [Thread-207749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:48:44.425 [DEBUG] [Thread-207749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:48:44.461 [INFO] [Thread-207749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:48:44.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:48:45.150 [DEBUG] [Thread-207749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:48:45.150 [DEBUG] [Thread-207749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:48:45.151 [DEBUG] [Thread-207749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:48:45.191 [DEBUG] [Thread-207749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:48:45.192 [DEBUG] [Thread-207749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:48:45.195 [DEBUG] [Thread-207749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:48:45.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:48:45.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:48:45.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:48:45.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:48:45.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:48:45.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:48:45.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:48:45.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:48:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:48:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.616415 -999.00  +22.80  14.23     27   +2.90 1 1 1 1 1   888    0 19.34 -46.26 ----- 25.7 14.2 156.1 24.2 27.6 -30.0 27.3 -29.4 29.1 -28.1 29.8 -29.6
2026-02-15T16:48:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:48:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:48:45.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.616415
2026-02-15T16:48:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:48:45.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:48:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:48:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:48:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:48:45.222 [DEBUG] [Thread-207749] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:48:45.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:48:16', tmtdew=23.78, humidity=20.81, cloud=0.0, wind=23.11, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:47:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:48:45.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:48:45.318 [DEBUG] [Thread-207752] [transport.py] [_log()] starting thread (client mode): 0xa2d4ca30
2026-02-15T16:48:45.318 [DEBUG] [Thread-207752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:48:45.333 [DEBUG] [Thread-207752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:48:45.333 [INFO] [Thread-207752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:48:45.340 [DEBUG] [Thread-207752] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] client lang: <none>
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] server lang: <none>
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] kex follows: False
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:48:45.341 [DEBUG] [Thread-207752] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:48:45.342 [DEBUG] [Thread-207752] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:48:45.342 [DEBUG] [Thread-207752] [transport.py] [_log()] Compression: none
2026-02-15T16:48:45.342 [DEBUG] [Thread-207752] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:48:45.401 [DEBUG] [Thread-207752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:48:45.401 [DEBUG] [Thread-207752] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:48:45.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:48:45.403 [DEBUG] [Thread-207752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:48:45.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:48:45.457 [DEBUG] [Thread-207752] [transport.py] [_log()] userauth is OK
2026-02-15T16:48:45.457 [DEBUG] [Thread-207752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:48:45.457 [DEBUG] [Thread-207752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:48:45.457 [DEBUG] [Thread-207752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:48:45.458 [DEBUG] [Thread-207752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:48:45.476 [INFO] [Thread-207752] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:48:45.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:48:45.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:48:46.323 [DEBUG] [Thread-207752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:48:46.324 [DEBUG] [Thread-207752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:48:46.371 [DEBUG] [Thread-207752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:48:46.372 [DEBUG] [Thread-207752] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:48:46.381 [DEBUG] [Thread-207752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:48:46.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:48:46.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:48:46.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:48:46.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:48:46.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:48:46.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:48:46.416 [DEBUG] [Thread-207752] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:48:53.499 [DEBUG] [Thread-207754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:48:58.024 [DEBUG] [Thread-207755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:02.028 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:02.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:08.551 [DEBUG] [Thread-207756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:16.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:49:16.417 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:49:16.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:49:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 48, 52), 23.13, 21.58, 0.0, 24.76, 22.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:49:18.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:48:52
2026-02-15T16:49:18.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:49:18.804 [DEBUG] [Thread-207757] [transport.py] [_log()] starting thread (client mode): 0xa5743b80
2026-02-15T16:49:18.804 [DEBUG] [Thread-207757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:49:18.825 [DEBUG] [Thread-207757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:49:18.825 [INFO] [Thread-207757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:49:18.828 [DEBUG] [Thread-207757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] client lang: <none>
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] server lang: <none>
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] kex follows: False
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] Compression: none
2026-02-15T16:49:18.829 [DEBUG] [Thread-207757] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:49:18.846 [DEBUG] [Thread-207757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:49:18.846 [DEBUG] [Thread-207757] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:49:18.847 [DEBUG] [Thread-207757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:49:18.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:49:18.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:49:18.848 [DEBUG] [Thread-207757] [transport.py] [_log()] userauth is OK
2026-02-15T16:49:18.849 [DEBUG] [Thread-207757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:49:18.849 [DEBUG] [Thread-207757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:49:18.849 [DEBUG] [Thread-207757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:49:18.849 [DEBUG] [Thread-207757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:49:18.873 [INFO] [Thread-207757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:49:18.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:49:19.482 [DEBUG] [Thread-207757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:49:19.482 [DEBUG] [Thread-207757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:49:19.482 [DEBUG] [Thread-207757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:49:19.523 [DEBUG] [Thread-207757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:49:19.523 [DEBUG] [Thread-207757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:49:19.526 [DEBUG] [Thread-207757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:49:19.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:49:19.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:49:19.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:49:19.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:49:19.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:49:19.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:49:19.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:49:19.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:49:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:49:19.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.617456 -999.00  +22.60  12.31     27   +2.80 1 1 1 1 1   888    0 18.56 -44.75 ----- 19.7 12.3 164.4 20.6 27.6 -30.1 27.4 -27.7 29.0 -28.1 29.8 -30.6
2026-02-15T16:49:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:49:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:49:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.617456
2026-02-15T16:49:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:49:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:49:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:49:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:49:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:49:19.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:48:52', tmtdew=23.13, humidity=21.58, cloud=0.0, wind=24.76, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:49:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:49:19.549 [DEBUG] [Thread-207757] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:49:19.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:49:19.645 [DEBUG] [Thread-207760] [transport.py] [_log()] starting thread (client mode): 0xa57404f0
2026-02-15T16:49:19.646 [DEBUG] [Thread-207760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:49:19.660 [DEBUG] [Thread-207760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:49:19.660 [INFO] [Thread-207760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:49:19.667 [DEBUG] [Thread-207760] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] client lang: <none>
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] server lang: <none>
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] kex follows: False
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] Compression: none
2026-02-15T16:49:19.668 [DEBUG] [Thread-207760] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:49:19.724 [DEBUG] [Thread-207760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:49:19.724 [DEBUG] [Thread-207760] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:49:19.725 [DEBUG] [Thread-207760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:49:19.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:49:19.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:49:19.780 [DEBUG] [Thread-207760] [transport.py] [_log()] userauth is OK
2026-02-15T16:49:19.781 [DEBUG] [Thread-207760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:49:19.781 [DEBUG] [Thread-207760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:49:19.781 [DEBUG] [Thread-207760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:49:19.781 [DEBUG] [Thread-207760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:49:19.798 [INFO] [Thread-207760] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:49:19.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:49:19.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:49:20.620 [DEBUG] [Thread-207760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:49:20.621 [DEBUG] [Thread-207760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:49:20.671 [DEBUG] [Thread-207760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:49:20.672 [DEBUG] [Thread-207760] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:49:20.681 [DEBUG] [Thread-207760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:49:20.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:49:20.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:49:20.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:49:20.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:49:20.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:49:20.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:49:20.723 [DEBUG] [Thread-207760] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:49:23.583 [DEBUG] [Thread-207762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:38.638 [DEBUG] [Thread-207763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:49:50.729 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:49:50.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:49:53.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 49, 28), 23.02, 21.74, 0.0, 25.92, 22.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:49:53.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:49:28
2026-02-15T16:49:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:49:53.674 [DEBUG] [Thread-207764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:49:53.690 [DEBUG] [Thread-207765] [transport.py] [_log()] starting thread (client mode): 0xa2d18700
2026-02-15T16:49:53.690 [DEBUG] [Thread-207765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:49:53.709 [DEBUG] [Thread-207765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:49:53.709 [INFO] [Thread-207765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:53.710 [DEBUG] [Thread-207765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] client lang: <none>
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] server lang: <none>
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] kex follows: False
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] Compression: none
2026-02-15T16:49:53.711 [DEBUG] [Thread-207765] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:49:53.720 [DEBUG] [Thread-207765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:49:53.720 [DEBUG] [Thread-207765] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:49:53.721 [DEBUG] [Thread-207765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:49:53.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:49:53.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:49:53.722 [DEBUG] [Thread-207765] [transport.py] [_log()] userauth is OK
2026-02-15T16:49:53.722 [DEBUG] [Thread-207765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:49:53.722 [DEBUG] [Thread-207765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:49:53.723 [DEBUG] [Thread-207765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:49:53.723 [DEBUG] [Thread-207765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:49:53.740 [INFO] [Thread-207765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:49:53.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:49:54.301 [DEBUG] [Thread-207765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:49:54.301 [DEBUG] [Thread-207765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:49:54.301 [DEBUG] [Thread-207765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:49:54.342 [DEBUG] [Thread-207765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:49:54.343 [DEBUG] [Thread-207765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:49:54.345 [DEBUG] [Thread-207765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:49:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:49:54.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:49:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:49:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:49:54.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:49:54.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:49:54.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:49:54.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:49:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:49:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.617804 -999.00  +22.60  22.24     27   +2.80 1 1 1 1 1   888    0 18.54 -43.01 ----- 22.9 22.2 158.3 26.9 27.6 -29.5 27.3 -28.5 28.9 -27.3 29.6 -29.3
2026-02-15T16:49:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:49:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:49:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.617804
2026-02-15T16:49:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:49:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:49:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:49:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:49:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:49:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:49:28', tmtdew=23.02, humidity=21.74, cloud=0.0, wind=25.92, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:49:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:49:54.364 [DEBUG] [Thread-207765] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:49:54.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:49:54.465 [DEBUG] [Thread-207768] [transport.py] [_log()] starting thread (client mode): 0xa57402e0
2026-02-15T16:49:54.466 [DEBUG] [Thread-207768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:49:54.480 [DEBUG] [Thread-207768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:49:54.480 [INFO] [Thread-207768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:49:54.490 [DEBUG] [Thread-207768] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] client lang: <none>
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] server lang: <none>
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] kex follows: False
2026-02-15T16:49:54.491 [DEBUG] [Thread-207768] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:49:54.492 [DEBUG] [Thread-207768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:49:54.492 [DEBUG] [Thread-207768] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:49:54.492 [DEBUG] [Thread-207768] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:49:54.492 [DEBUG] [Thread-207768] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:49:54.492 [DEBUG] [Thread-207768] [transport.py] [_log()] Compression: none
2026-02-15T16:49:54.492 [DEBUG] [Thread-207768] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:49:54.560 [DEBUG] [Thread-207768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:49:54.560 [DEBUG] [Thread-207768] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:49:54.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:49:54.562 [DEBUG] [Thread-207768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:49:54.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:49:54.618 [DEBUG] [Thread-207768] [transport.py] [_log()] userauth is OK
2026-02-15T16:49:54.619 [DEBUG] [Thread-207768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:49:54.619 [DEBUG] [Thread-207768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:49:54.619 [DEBUG] [Thread-207768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:49:54.619 [DEBUG] [Thread-207768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:49:54.640 [INFO] [Thread-207768] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:49:54.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:49:54.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:49:55.470 [DEBUG] [Thread-207768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:49:55.471 [DEBUG] [Thread-207768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:49:55.518 [DEBUG] [Thread-207768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:49:55.519 [DEBUG] [Thread-207768] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:49:55.528 [DEBUG] [Thread-207768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:49:55.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:49: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')
2026-02-15T16:49:55.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:49:55.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:49:55.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:49:55.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:49:55.567 [DEBUG] [Thread-207768] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:49:58.057 [DEBUG] [Thread-207770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:02.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:02.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:08.709 [DEBUG] [Thread-207771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:23.760 [DEBUG] [Thread-207772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:25.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:50:25.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:50:25.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:50:27.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 50, 4), 23.01, 21.74, 0.0, 26.52, 22.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:50:27.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:50:04
2026-02-15T16:50:27.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:50:28.006 [DEBUG] [Thread-207773] [transport.py] [_log()] starting thread (client mode): 0xa2d69120
2026-02-15T16:50:28.006 [DEBUG] [Thread-207773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:50:28.026 [DEBUG] [Thread-207773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:50:28.026 [INFO] [Thread-207773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] client lang: <none>
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] server lang: <none>
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] kex follows: False
2026-02-15T16:50:28.029 [DEBUG] [Thread-207773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:50:28.030 [DEBUG] [Thread-207773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:50:28.030 [DEBUG] [Thread-207773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:50:28.030 [DEBUG] [Thread-207773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:50:28.030 [DEBUG] [Thread-207773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:50:28.030 [DEBUG] [Thread-207773] [transport.py] [_log()] Compression: none
2026-02-15T16:50:28.030 [DEBUG] [Thread-207773] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:50:28.047 [DEBUG] [Thread-207773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:50:28.048 [DEBUG] [Thread-207773] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:50:28.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:50:28.049 [DEBUG] [Thread-207773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:50:28.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:50:28.051 [DEBUG] [Thread-207773] [transport.py] [_log()] userauth is OK
2026-02-15T16:50:28.052 [DEBUG] [Thread-207773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:50:28.052 [DEBUG] [Thread-207773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:50:28.052 [DEBUG] [Thread-207773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:50:28.052 [DEBUG] [Thread-207773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:50:28.076 [INFO] [Thread-207773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:50:28.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:50:28.691 [DEBUG] [Thread-207773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:50:28.691 [DEBUG] [Thread-207773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:50:28.692 [DEBUG] [Thread-207773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:50:28.732 [DEBUG] [Thread-207773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:50:28.732 [DEBUG] [Thread-207773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:50:28.735 [DEBUG] [Thread-207773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:50:28.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:50:28.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:50:28.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:50:28.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:50:28.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:50:28.758 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:50:28.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:50:28.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:50:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:50:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.618151 -999.00  +22.40  26.73     27   +2.60 1 1 1 1 1   888    0 18.73 -43.78 ----- 25.5 26.7 145.0 29.9 27.5 -31.2 27.3 -29.2 29.0 -28.5 29.6 -30.0
2026-02-15T16:50:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:50:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:50:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.618151
2026-02-15T16:50:28.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:50:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:50:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:50:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:50:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:50:28.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:50:04', tmtdew=23.01, humidity=21.74, cloud=0.0, wind=26.52, temperature=22.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:50:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:50:28.761 [DEBUG] [Thread-207773] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:50:28.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:50:28.857 [DEBUG] [Thread-207776] [transport.py] [_log()] starting thread (client mode): 0xa2d6b040
2026-02-15T16:50:28.857 [DEBUG] [Thread-207776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:50:28.872 [DEBUG] [Thread-207776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:50:28.872 [INFO] [Thread-207776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] client lang: <none>
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] server lang: <none>
2026-02-15T16:50:28.880 [DEBUG] [Thread-207776] [transport.py] [_log()] kex follows: False
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] Compression: none
2026-02-15T16:50:28.881 [DEBUG] [Thread-207776] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:50:28.941 [DEBUG] [Thread-207776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:50:28.942 [DEBUG] [Thread-207776] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:50:28.942 [DEBUG] [Thread-207776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:50:28.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:50:28.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:50:29.002 [DEBUG] [Thread-207776] [transport.py] [_log()] userauth is OK
2026-02-15T16:50:29.002 [DEBUG] [Thread-207776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:50:29.002 [DEBUG] [Thread-207776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:50:29.002 [DEBUG] [Thread-207776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:50:29.002 [DEBUG] [Thread-207776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:50:29.021 [INFO] [Thread-207776] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:50:29.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:50:29.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:50:29.864 [DEBUG] [Thread-207776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:50:29.865 [DEBUG] [Thread-207776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:50:29.912 [DEBUG] [Thread-207776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:50:29.912 [DEBUG] [Thread-207776] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:50:29.921 [DEBUG] [Thread-207776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:50:29.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:50:29.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:50: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') -> 00000000
2026-02-15T16:50:29.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:50:29.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:50:29.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:50:29.956 [DEBUG] [Thread-207776] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:50:38.798 [DEBUG] [Thread-207778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:53.856 [DEBUG] [Thread-207779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:58.116 [DEBUG] [Thread-207780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:50:59.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:50:59.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:50:59.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:51:01.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 50, 40), 23.95, 20.42, 0.0, 26.32, 23.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:51:01.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:50:40
2026-02-15T16:51:02.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:51:02.269 [DEBUG] [Thread-207781] [transport.py] [_log()] starting thread (client mode): 0xa2d69180
2026-02-15T16:51:02.269 [DEBUG] [Thread-207781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:51:02.288 [DEBUG] [Thread-207781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:51:02.288 [INFO] [Thread-207781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:51:02.291 [DEBUG] [Thread-207781] [transport.py] [_log()] client lang: <none>
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] server lang: <none>
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] kex follows: False
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] Compression: none
2026-02-15T16:51:02.292 [DEBUG] [Thread-207781] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:51:02.308 [DEBUG] [Thread-207781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:51:02.308 [DEBUG] [Thread-207781] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:51:02.309 [DEBUG] [Thread-207781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:51:02.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:51:02.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:51:02.311 [DEBUG] [Thread-207781] [transport.py] [_log()] userauth is OK
2026-02-15T16:51:02.311 [DEBUG] [Thread-207781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:51:02.311 [DEBUG] [Thread-207781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:51:02.311 [DEBUG] [Thread-207781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:51:02.312 [DEBUG] [Thread-207781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:51:02.313 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:51:02.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:51:02.337 [INFO] [Thread-207781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:51:02.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:51:02.940 [DEBUG] [Thread-207781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:51:02.941 [DEBUG] [Thread-207781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:51:02.941 [DEBUG] [Thread-207781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:51:02.982 [DEBUG] [Thread-207781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:51:02.982 [DEBUG] [Thread-207781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:51:02.985 [DEBUG] [Thread-207781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:51:02.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:51:02.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:51:02.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:51:03.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:51:03.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:51:03.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:51:03.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:51:03.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:51:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:51:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.618498 -999.00  +21.90  21.09     28   +2.60 1 1 1 1 1   888    0 18.77 -43.97 ----- 22.1 21.1 145.0 31.7 27.4 -29.8 27.3 -28.8 28.9 -27.3 29.5 -29.5
2026-02-15T16:51:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:51:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:51:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.618498
2026-02-15T16:51:03.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:51:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:51:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:51:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:51:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:51:03.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:50:40', tmtdew=23.95, humidity=20.42, cloud=0.0, wind=26.32, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:50:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:51:03.009 [DEBUG] [Thread-207781] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:51:03.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:51:03.107 [DEBUG] [Thread-207784] [transport.py] [_log()] starting thread (client mode): 0xa2d689a0
2026-02-15T16:51:03.107 [DEBUG] [Thread-207784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:51:03.122 [DEBUG] [Thread-207784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:51:03.123 [INFO] [Thread-207784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] client lang: <none>
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] server lang: <none>
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] kex follows: False
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:51:03.130 [DEBUG] [Thread-207784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:51:03.131 [DEBUG] [Thread-207784] [transport.py] [_log()] Compression: none
2026-02-15T16:51:03.131 [DEBUG] [Thread-207784] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:51:03.189 [DEBUG] [Thread-207784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:51:03.189 [DEBUG] [Thread-207784] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:51:03.190 [DEBUG] [Thread-207784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:51:03.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:51:03.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:51:03.245 [DEBUG] [Thread-207784] [transport.py] [_log()] userauth is OK
2026-02-15T16:51:03.246 [DEBUG] [Thread-207784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:51:03.246 [DEBUG] [Thread-207784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:51:03.246 [DEBUG] [Thread-207784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:51:03.246 [DEBUG] [Thread-207784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:51:03.265 [INFO] [Thread-207784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:51:03.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:51:03.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:51:04.128 [DEBUG] [Thread-207784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:51:04.129 [DEBUG] [Thread-207784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:51:04.176 [DEBUG] [Thread-207784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:51:04.176 [DEBUG] [Thread-207784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:51:04.186 [DEBUG] [Thread-207784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:51:04.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:51:04.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:51:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:51:04.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:51:04.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:51:04.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:51:04.222 [DEBUG] [Thread-207784] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:51:08.894 [DEBUG] [Thread-207786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:51:23.950 [DEBUG] [Thread-207787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:51:34.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:51:34.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:51:34.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:51:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 51, 16), 23.11, 21.68, 0.0, 24.63, 22.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:51:36.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:51:16
2026-02-15T16:51:36.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:51:36.737 [DEBUG] [Thread-207788] [transport.py] [_log()] starting thread (client mode): 0xa5743af0
2026-02-15T16:51:36.737 [DEBUG] [Thread-207788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:51:36.758 [DEBUG] [Thread-207788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:51:36.758 [INFO] [Thread-207788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:36.762 [DEBUG] [Thread-207788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] client lang: <none>
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] server lang: <none>
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] kex follows: False
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] Compression: none
2026-02-15T16:51:36.763 [DEBUG] [Thread-207788] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:51:36.782 [DEBUG] [Thread-207788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:51:36.783 [DEBUG] [Thread-207788] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:51:36.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:51:36.784 [DEBUG] [Thread-207788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:51:36.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:51:36.786 [DEBUG] [Thread-207788] [transport.py] [_log()] userauth is OK
2026-02-15T16:51:36.787 [DEBUG] [Thread-207788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:51:36.787 [DEBUG] [Thread-207788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:51:36.787 [DEBUG] [Thread-207788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:51:36.787 [DEBUG] [Thread-207788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:51:36.809 [INFO] [Thread-207788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:51:36.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:51:37.439 [DEBUG] [Thread-207788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:51:37.439 [DEBUG] [Thread-207788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:51:37.440 [DEBUG] [Thread-207788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:51:37.480 [DEBUG] [Thread-207788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:51:37.481 [DEBUG] [Thread-207788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:51:37.484 [DEBUG] [Thread-207788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:51:37.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:51:37.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:51:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:51:37.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:51:37.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:51:37.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:51:37.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:51:37.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:51:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:51:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.618845 -999.00  +21.90  22.57     28   +2.70 1 1 1 1 1   888    0 18.67 -48.36 ----- 15.4 22.6 145.0 29.2 27.4 -29.9 27.2 -28.7 28.9 -27.8 29.5 -30.0
2026-02-15T16:51:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:51:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:51:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.618845
2026-02-15T16:51:37.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:51:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:51:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:51:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:51:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:51:37.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:51:16', tmtdew=23.11, humidity=21.68, cloud=0.0, wind=24.63, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:51:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:51:37.510 [DEBUG] [Thread-207788] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:51:37.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:51:37.605 [DEBUG] [Thread-207791] [transport.py] [_log()] starting thread (client mode): 0xa2d180a0
2026-02-15T16:51:37.605 [DEBUG] [Thread-207791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:51:37.620 [DEBUG] [Thread-207791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:51:37.620 [INFO] [Thread-207791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:37.628 [DEBUG] [Thread-207791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] client lang: <none>
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] server lang: <none>
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] kex follows: False
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:51:37.629 [DEBUG] [Thread-207791] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:51:37.630 [DEBUG] [Thread-207791] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:51:37.630 [DEBUG] [Thread-207791] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:51:37.630 [DEBUG] [Thread-207791] [transport.py] [_log()] Compression: none
2026-02-15T16:51:37.630 [DEBUG] [Thread-207791] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:51:37.686 [DEBUG] [Thread-207791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:51:37.687 [DEBUG] [Thread-207791] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:51:37.687 [DEBUG] [Thread-207791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:51:37.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:51:37.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:51:37.746 [DEBUG] [Thread-207791] [transport.py] [_log()] userauth is OK
2026-02-15T16:51:37.746 [DEBUG] [Thread-207791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:51:37.746 [DEBUG] [Thread-207791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:51:37.747 [DEBUG] [Thread-207791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:51:37.747 [DEBUG] [Thread-207791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:51:37.766 [INFO] [Thread-207791] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:51:37.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:51:37.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:51:38.604 [DEBUG] [Thread-207791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:51:38.604 [DEBUG] [Thread-207791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:51:38.651 [DEBUG] [Thread-207791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:51:38.652 [DEBUG] [Thread-207791] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:51:38.661 [DEBUG] [Thread-207791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:51:38.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:51:38.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:51:38.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:51:38.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:51:38.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:51:38.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:51:38.698 [DEBUG] [Thread-207791] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:51:38.983 [DEBUG] [Thread-207793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:51:54.029 [DEBUG] [Thread-207794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:51:58.149 [DEBUG] [Thread-207795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:02.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:02.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:52:08.717 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:52:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:52:09.066 [DEBUG] [Thread-207796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:10.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 51, 51), 23.42, 20.98, 0.0, 22.39, 22.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:52:10.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:51:51
2026-02-15T16:52:11.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:52:11.165 [DEBUG] [Thread-207797] [transport.py] [_log()] starting thread (client mode): 0xa2d19570
2026-02-15T16:52:11.165 [DEBUG] [Thread-207797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:52:11.184 [DEBUG] [Thread-207797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:52:11.184 [INFO] [Thread-207797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:52:11.185 [DEBUG] [Thread-207797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] client lang: <none>
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] server lang: <none>
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] kex follows: False
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:52:11.186 [DEBUG] [Thread-207797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:52:11.187 [DEBUG] [Thread-207797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:52:11.187 [DEBUG] [Thread-207797] [transport.py] [_log()] Compression: none
2026-02-15T16:52:11.187 [DEBUG] [Thread-207797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:52:11.204 [DEBUG] [Thread-207797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:52:11.205 [DEBUG] [Thread-207797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:52:11.205 [DEBUG] [Thread-207797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:52:11.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:52:11.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:52:11.208 [DEBUG] [Thread-207797] [transport.py] [_log()] userauth is OK
2026-02-15T16:52:11.208 [DEBUG] [Thread-207797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:52:11.208 [DEBUG] [Thread-207797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:52:11.209 [DEBUG] [Thread-207797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:52:11.209 [DEBUG] [Thread-207797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:52:11.234 [INFO] [Thread-207797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:52:11.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:52:11.818 [DEBUG] [Thread-207797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:52:11.819 [DEBUG] [Thread-207797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:52:11.819 [DEBUG] [Thread-207797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:52:11.859 [DEBUG] [Thread-207797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:52:11.860 [DEBUG] [Thread-207797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:52:11.863 [DEBUG] [Thread-207797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:52:11.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:52:11.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:52:11.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:52:11.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:52:11.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:52:11.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:52:11.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:52:11.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:52:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:52:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.619193 -999.00  +22.20  17.92     27   +2.80 1 1 1 1 1   887    0 18.86 -52.12 ----- 15.3 17.9 147.8 24.5 27.5 -29.1 27.3 -28.6 28.9 -27.4 29.6 -29.7
2026-02-15T16:52:11.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:52:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:52:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.619193
2026-02-15T16:52:11.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:52:11.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:52:11.889 [DEBUG] [Thread-207797] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:52:11.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:52:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:52:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:52:11.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:51:51', tmtdew=23.42, humidity=20.98, cloud=0.0, wind=22.39, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:51:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:52:11.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:52:11.982 [DEBUG] [Thread-207800] [transport.py] [_log()] starting thread (client mode): 0xa2d6a830
2026-02-15T16:52:11.982 [DEBUG] [Thread-207800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:52:11.996 [DEBUG] [Thread-207800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:52:11.997 [INFO] [Thread-207800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:52:12.004 [DEBUG] [Thread-207800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:52:12.004 [DEBUG] [Thread-207800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:52:12.004 [DEBUG] [Thread-207800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] client lang: <none>
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] server lang: <none>
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] kex follows: False
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] Compression: none
2026-02-15T16:52:12.005 [DEBUG] [Thread-207800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:52:12.061 [DEBUG] [Thread-207800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:52:12.062 [DEBUG] [Thread-207800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:52:12.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:52:12.063 [DEBUG] [Thread-207800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:52:12.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:52:12.117 [DEBUG] [Thread-207800] [transport.py] [_log()] userauth is OK
2026-02-15T16:52:12.118 [DEBUG] [Thread-207800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:52:12.118 [DEBUG] [Thread-207800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:52:12.118 [DEBUG] [Thread-207800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:52:12.118 [DEBUG] [Thread-207800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:52:12.137 [INFO] [Thread-207800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:52:12.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:52:12.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:52:12.992 [DEBUG] [Thread-207800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:52:12.993 [DEBUG] [Thread-207800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:52:13.041 [DEBUG] [Thread-207800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:52:13.041 [DEBUG] [Thread-207800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:52:13.050 [DEBUG] [Thread-207800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:52:13.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:52: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')
2026-02-15T16:52:13.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:52:13.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:52:13.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:52:13.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:52:13.091 [DEBUG] [Thread-207800] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:52:24.103 [DEBUG] [Thread-207802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:39.156 [DEBUG] [Thread-207803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:43.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:52:43.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:52:43.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:52:44.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 52, 26), 23.33, 21.1, 0.0, 25.44, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:52:44.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:52:26
2026-02-15T16:52:45.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:52:45.497 [DEBUG] [Thread-207804] [transport.py] [_log()] starting thread (client mode): 0xa2d691e0
2026-02-15T16:52:45.497 [DEBUG] [Thread-207804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:52:45.516 [DEBUG] [Thread-207804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:52:45.517 [INFO] [Thread-207804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:52:45.519 [DEBUG] [Thread-207804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] client lang: <none>
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] server lang: <none>
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] kex follows: False
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] Compression: none
2026-02-15T16:52:45.520 [DEBUG] [Thread-207804] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:52:45.539 [DEBUG] [Thread-207804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:52:45.539 [DEBUG] [Thread-207804] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:52:45.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:52:45.541 [DEBUG] [Thread-207804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:52:45.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:52:45.543 [DEBUG] [Thread-207804] [transport.py] [_log()] userauth is OK
2026-02-15T16:52:45.543 [DEBUG] [Thread-207804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:52:45.543 [DEBUG] [Thread-207804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:52:45.543 [DEBUG] [Thread-207804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:52:45.543 [DEBUG] [Thread-207804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:52:45.559 [INFO] [Thread-207804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:52:45.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:52:46.188 [DEBUG] [Thread-207804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:52:46.188 [DEBUG] [Thread-207804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:52:46.188 [DEBUG] [Thread-207804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:52:46.229 [DEBUG] [Thread-207804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:52:46.230 [DEBUG] [Thread-207804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:52:46.233 [DEBUG] [Thread-207804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:52:46.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:52:46.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:52:46.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:52:46.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:52:46.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:52:46.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:52:46.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:52:46.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:52:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:52:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.619540 -999.00  +22.40  17.19     27   +2.70 1 1 1 1 1   887    0 18.94 -47.77 ----- 21.2 17.2 148.5 27.6 27.4 -30.7 27.2 -29.3 28.9 -28.2 29.5 -30.9
2026-02-15T16:52:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:52:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:52:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.619540
2026-02-15T16:52:46.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:52:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:52:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:52:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:52:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:52:46.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:52:26', tmtdew=23.33, humidity=21.1, cloud=0.0, wind=25.44, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:52:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:52:46.259 [DEBUG] [Thread-207804] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:52:46.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:52:46.355 [DEBUG] [Thread-207807] [transport.py] [_log()] starting thread (client mode): 0xa2d6b820
2026-02-15T16:52:46.355 [DEBUG] [Thread-207807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:52:46.370 [DEBUG] [Thread-207807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:52:46.370 [INFO] [Thread-207807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:52:46.377 [DEBUG] [Thread-207807] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:52:46.378 [DEBUG] [Thread-207807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:52:46.378 [DEBUG] [Thread-207807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:52:46.378 [DEBUG] [Thread-207807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:46.378 [DEBUG] [Thread-207807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:52:46.378 [DEBUG] [Thread-207807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:46.378 [DEBUG] [Thread-207807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] client lang: <none>
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] server lang: <none>
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] kex follows: False
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:52:46.379 [DEBUG] [Thread-207807] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:52:46.380 [DEBUG] [Thread-207807] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:52:46.380 [DEBUG] [Thread-207807] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:52:46.380 [DEBUG] [Thread-207807] [transport.py] [_log()] Compression: none
2026-02-15T16:52:46.380 [DEBUG] [Thread-207807] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:52:46.439 [DEBUG] [Thread-207807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:52:46.440 [DEBUG] [Thread-207807] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:52:46.440 [DEBUG] [Thread-207807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:52:46.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:52:46.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:52:46.497 [DEBUG] [Thread-207807] [transport.py] [_log()] userauth is OK
2026-02-15T16:52:46.498 [DEBUG] [Thread-207807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:52:46.498 [DEBUG] [Thread-207807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:52:46.498 [DEBUG] [Thread-207807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:52:46.498 [DEBUG] [Thread-207807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:52:46.517 [INFO] [Thread-207807] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:52:46.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:52:46.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:52:47.351 [DEBUG] [Thread-207807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:52:47.351 [DEBUG] [Thread-207807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:52:47.399 [DEBUG] [Thread-207807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:52:47.399 [DEBUG] [Thread-207807] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:52:47.410 [DEBUG] [Thread-207807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:52:47.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:52:47.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:52:47.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:52:47.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:52:47.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:52:47.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:52:47.456 [DEBUG] [Thread-207807] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:52:54.193 [DEBUG] [Thread-207809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:52:58.200 [DEBUG] [Thread-207810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:02.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:02.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:09.247 [DEBUG] [Thread-207811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:17.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:53:17.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:53:17.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:53:19.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 53, 1), 23.29, 21.15, 0.0, 25.9, 22.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:53:19.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:53:01
2026-02-15T16:53:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:53:19.818 [DEBUG] [Thread-207812] [transport.py] [_log()] starting thread (client mode): 0xa2d1a9b0
2026-02-15T16:53:19.819 [DEBUG] [Thread-207812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:53:19.837 [DEBUG] [Thread-207812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:53:19.838 [INFO] [Thread-207812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:53:19.841 [DEBUG] [Thread-207812] [transport.py] [_log()] client lang: <none>
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] server lang: <none>
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] kex follows: False
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] Compression: none
2026-02-15T16:53:19.842 [DEBUG] [Thread-207812] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:53:19.861 [DEBUG] [Thread-207812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:53:19.862 [DEBUG] [Thread-207812] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:53:19.862 [DEBUG] [Thread-207812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:53:19.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:53:19.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:53:19.865 [DEBUG] [Thread-207812] [transport.py] [_log()] userauth is OK
2026-02-15T16:53:19.865 [DEBUG] [Thread-207812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:53:19.865 [DEBUG] [Thread-207812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:53:19.866 [DEBUG] [Thread-207812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:53:19.866 [DEBUG] [Thread-207812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:53:19.886 [INFO] [Thread-207812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:53:19.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:53:20.520 [DEBUG] [Thread-207812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:53:20.520 [DEBUG] [Thread-207812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:53:20.521 [DEBUG] [Thread-207812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:53:20.561 [DEBUG] [Thread-207812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:53:20.561 [DEBUG] [Thread-207812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:53:20.565 [DEBUG] [Thread-207812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:53:20.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:53:20.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:53:20.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:53:20.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:53:20.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:53:20.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:53:20.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:53:20.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:53:20.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:53:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.619887 -999.00  +22.40  19.15     27   +2.60 1 1 1 1 1   887    0 18.18 -46.87 ----- 26.9 19.1 160.6 26.7 27.4 -30.9 27.1 -28.4 28.8 -28.5 29.5 -30.5
2026-02-15T16:53:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:53:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:53:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.619887
2026-02-15T16:53:20.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:53:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:53:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:53:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:53:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:53:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:53:01', tmtdew=23.29, humidity=21.15, cloud=0.0, wind=25.9, temperature=22.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:52:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:53:20.593 [DEBUG] [Thread-207812] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:53:20.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:53:20.689 [DEBUG] [Thread-207815] [transport.py] [_log()] starting thread (client mode): 0xa2d1b700
2026-02-15T16:53:20.689 [DEBUG] [Thread-207815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:53:20.704 [DEBUG] [Thread-207815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:53:20.704 [INFO] [Thread-207815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:53:20.713 [DEBUG] [Thread-207815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] client lang: <none>
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] server lang: <none>
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] kex follows: False
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] Compression: none
2026-02-15T16:53:20.714 [DEBUG] [Thread-207815] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:53:20.769 [DEBUG] [Thread-207815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:53:20.770 [DEBUG] [Thread-207815] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:53:20.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:53:20.771 [DEBUG] [Thread-207815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:53:20.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:53:20.826 [DEBUG] [Thread-207815] [transport.py] [_log()] userauth is OK
2026-02-15T16:53:20.826 [DEBUG] [Thread-207815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:53:20.826 [DEBUG] [Thread-207815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:53:20.826 [DEBUG] [Thread-207815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:53:20.826 [DEBUG] [Thread-207815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:53:20.845 [INFO] [Thread-207815] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:53:20.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:53:20.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:53:21.690 [DEBUG] [Thread-207815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:53:21.690 [DEBUG] [Thread-207815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:53:21.738 [DEBUG] [Thread-207815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:53:21.738 [DEBUG] [Thread-207815] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:53:21.747 [DEBUG] [Thread-207815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:53:21.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:53:21.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:53:21.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:53:21.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:53:21.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:53:21.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:53:21.784 [DEBUG] [Thread-207815] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:53:24.286 [DEBUG] [Thread-207817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:39.337 [DEBUG] [Thread-207818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:51.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:53:51.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:53:51.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:53:53.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 53, 36), 24.18, 20.19, 0.0, 29.14, 23.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:53:53.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:53:36
2026-02-15T16:53:54.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:53:54.374 [DEBUG] [Thread-207819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:53:54.388 [DEBUG] [Thread-207820] [transport.py] [_log()] starting thread (client mode): 0xa2d1bca0
2026-02-15T16:53:54.388 [DEBUG] [Thread-207820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:53:54.409 [DEBUG] [Thread-207820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:53:54.409 [INFO] [Thread-207820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:53:54.412 [DEBUG] [Thread-207820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:53:54.412 [DEBUG] [Thread-207820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:53:54.412 [DEBUG] [Thread-207820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:53:54.412 [DEBUG] [Thread-207820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] client lang: <none>
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] server lang: <none>
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] kex follows: False
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:53:54.413 [DEBUG] [Thread-207820] [transport.py] [_log()] Compression: none
2026-02-15T16:53:54.414 [DEBUG] [Thread-207820] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:53:54.431 [DEBUG] [Thread-207820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:53:54.431 [DEBUG] [Thread-207820] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:53:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:53:54.432 [DEBUG] [Thread-207820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:53:54.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:53:54.434 [DEBUG] [Thread-207820] [transport.py] [_log()] userauth is OK
2026-02-15T16:53:54.435 [DEBUG] [Thread-207820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:53:54.435 [DEBUG] [Thread-207820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:53:54.435 [DEBUG] [Thread-207820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:53:54.435 [DEBUG] [Thread-207820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:53:54.460 [INFO] [Thread-207820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:53:54.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:53:55.095 [DEBUG] [Thread-207820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:53:55.095 [DEBUG] [Thread-207820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:53:55.096 [DEBUG] [Thread-207820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:53:55.136 [DEBUG] [Thread-207820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:53:55.136 [DEBUG] [Thread-207820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:53:55.140 [DEBUG] [Thread-207820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:53:55.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:53:55.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:53:55.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:53:55.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:53:55.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:53:55.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:53:55.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:53:55.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:53:55.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:53:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.620581 -999.00  +22.20  20.03     27   +2.80 1 1 1 1 1   887    0 18.46 -50.30 ----- 20.5 20.0 156.0 26.5 27.3 -29.7 27.0 -28.5 28.6 -27.5 29.3 -29.4
2026-02-15T16:53:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:53:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:53:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.620581
2026-02-15T16:53:55.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:53:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:53:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:53:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:53:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:53:55.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:53:36', tmtdew=24.18, humidity=20.19, cloud=0.0, wind=29.14, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:53:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:53:55.167 [DEBUG] [Thread-207820] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:53:55.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:53:55.265 [DEBUG] [Thread-207823] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-15T16:53:55.265 [DEBUG] [Thread-207823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:53:55.280 [DEBUG] [Thread-207823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:53:55.281 [INFO] [Thread-207823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:53:55.289 [DEBUG] [Thread-207823] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:53:55.289 [DEBUG] [Thread-207823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] client lang: <none>
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] server lang: <none>
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] kex follows: False
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:53:55.290 [DEBUG] [Thread-207823] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:53:55.291 [DEBUG] [Thread-207823] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:53:55.291 [DEBUG] [Thread-207823] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:53:55.291 [DEBUG] [Thread-207823] [transport.py] [_log()] Compression: none
2026-02-15T16:53:55.291 [DEBUG] [Thread-207823] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:53:55.345 [DEBUG] [Thread-207823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:53:55.346 [DEBUG] [Thread-207823] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:53:55.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:53:55.347 [DEBUG] [Thread-207823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:53:55.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:53:55.402 [DEBUG] [Thread-207823] [transport.py] [_log()] userauth is OK
2026-02-15T16:53:55.402 [DEBUG] [Thread-207823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:53:55.402 [DEBUG] [Thread-207823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:53:55.402 [DEBUG] [Thread-207823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:53:55.403 [DEBUG] [Thread-207823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:53:55.421 [INFO] [Thread-207823] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:53:55.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:53:55.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:53:56.239 [DEBUG] [Thread-207823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:53:56.239 [DEBUG] [Thread-207823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:53:56.288 [DEBUG] [Thread-207823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:53:56.288 [DEBUG] [Thread-207823] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:53:56.298 [DEBUG] [Thread-207823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:53:56.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:53:56.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:53:56.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:53:56.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:53:56.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:53:56.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:53:56.337 [DEBUG] [Thread-207823] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:53:58.238 [DEBUG] [Thread-207825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:02.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:02.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:09.407 [DEBUG] [Thread-207826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:24.471 [DEBUG] [Thread-207827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:26.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:54:26.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:54:26.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:54:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 54, 12), 23.25, 21.55, 0.0, 24.83, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:54:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:54:12
2026-02-15T16:54:28.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:54:28.743 [DEBUG] [Thread-207828] [transport.py] [_log()] starting thread (client mode): 0xa2dc02e0
2026-02-15T16:54:28.743 [DEBUG] [Thread-207828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:54:28.764 [DEBUG] [Thread-207828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:54:28.764 [INFO] [Thread-207828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:54:28.767 [DEBUG] [Thread-207828] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:54:28.767 [DEBUG] [Thread-207828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:54:28.767 [DEBUG] [Thread-207828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:54:28.767 [DEBUG] [Thread-207828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:54:28.767 [DEBUG] [Thread-207828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:54:28.767 [DEBUG] [Thread-207828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] client lang: <none>
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] server lang: <none>
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] kex follows: False
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] Compression: none
2026-02-15T16:54:28.768 [DEBUG] [Thread-207828] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:54:28.785 [DEBUG] [Thread-207828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:54:28.785 [DEBUG] [Thread-207828] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:54:28.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:54:28.786 [DEBUG] [Thread-207828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:54:28.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:54:28.789 [DEBUG] [Thread-207828] [transport.py] [_log()] userauth is OK
2026-02-15T16:54:28.789 [DEBUG] [Thread-207828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:54:28.789 [DEBUG] [Thread-207828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:54:28.789 [DEBUG] [Thread-207828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:54:28.789 [DEBUG] [Thread-207828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:54:28.814 [INFO] [Thread-207828] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:54:28.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:54:29.445 [DEBUG] [Thread-207828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:54:29.445 [DEBUG] [Thread-207828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:54:29.446 [DEBUG] [Thread-207828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:54:29.487 [DEBUG] [Thread-207828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:54:29.487 [DEBUG] [Thread-207828] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:54:29.490 [DEBUG] [Thread-207828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:54:29.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:54:29.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:54:29.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:54:29.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:54:29.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:54:29.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:54:29.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:54:29.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:54:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:54:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.620929 -999.00  +22.30  18.74     27   +2.70 1 1 1 1 1   887    0 18.76 -51.21 ----- 25.2 18.7 143.6 26.8 27.2 -29.7 27.0 -28.5 28.6 -27.9 29.3 -30.6
2026-02-15T16:54:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:54:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:54:29.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.620929
2026-02-15T16:54:29.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:54:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:54:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:54:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:54:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:54:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:54:12', tmtdew=23.25, humidity=21.55, cloud=0.0, wind=24.83, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:54:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:54:29.517 [DEBUG] [Thread-207828] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:54:29.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:54:29.611 [DEBUG] [Thread-207831] [transport.py] [_log()] starting thread (client mode): 0xa2d69780
2026-02-15T16:54:29.612 [DEBUG] [Thread-207831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:54:29.626 [DEBUG] [Thread-207831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:54:29.627 [INFO] [Thread-207831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:54:29.634 [DEBUG] [Thread-207831] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:54:29.634 [DEBUG] [Thread-207831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] client lang: <none>
2026-02-15T16:54:29.635 [DEBUG] [Thread-207831] [transport.py] [_log()] server lang: <none>
2026-02-15T16:54:29.636 [DEBUG] [Thread-207831] [transport.py] [_log()] kex follows: False
2026-02-15T16:54:29.636 [DEBUG] [Thread-207831] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:54:29.636 [DEBUG] [Thread-207831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:54:29.636 [DEBUG] [Thread-207831] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:54:29.636 [DEBUG] [Thread-207831] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:54:29.637 [DEBUG] [Thread-207831] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:54:29.637 [DEBUG] [Thread-207831] [transport.py] [_log()] Compression: none
2026-02-15T16:54:29.637 [DEBUG] [Thread-207831] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:54:29.694 [DEBUG] [Thread-207831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:54:29.694 [DEBUG] [Thread-207831] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:54:29.694 [DEBUG] [Thread-207831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:54:29.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:54:29.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:54:29.750 [DEBUG] [Thread-207831] [transport.py] [_log()] userauth is OK
2026-02-15T16:54:29.750 [DEBUG] [Thread-207831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:54:29.751 [DEBUG] [Thread-207831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:54:29.751 [DEBUG] [Thread-207831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:54:29.751 [DEBUG] [Thread-207831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:54:29.769 [INFO] [Thread-207831] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:54: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-02-15T16:54:29.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:54:30.674 [DEBUG] [Thread-207831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:54:30.674 [DEBUG] [Thread-207831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:54:30.722 [DEBUG] [Thread-207831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:54:30.723 [DEBUG] [Thread-207831] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:54:30.732 [DEBUG] [Thread-207831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:54:30.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:54:30.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:54: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
2026-02-15T16:54:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:54:30.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:54:30.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:54:30.773 [DEBUG] [Thread-207831] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:54:39.510 [DEBUG] [Thread-207833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:54.565 [DEBUG] [Thread-207834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:54:58.291 [DEBUG] [Thread-207835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:00.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:55:00.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:55:00.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:55:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 54, 47), 23.19, 21.45, 0.0, 29.55, 22.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:55:02.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:54:47
2026-02-15T16:55:02.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:02.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:02.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:55:03.144 [DEBUG] [Thread-207836] [transport.py] [_log()] starting thread (client mode): 0xa2d683d0
2026-02-15T16:55:03.145 [DEBUG] [Thread-207836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:55:03.166 [DEBUG] [Thread-207836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:55:03.167 [INFO] [Thread-207836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] client lang: <none>
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] server lang: <none>
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] kex follows: False
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] Compression: none
2026-02-15T16:55:03.170 [DEBUG] [Thread-207836] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:55:03.186 [DEBUG] [Thread-207836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:55:03.187 [DEBUG] [Thread-207836] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:55:03.187 [DEBUG] [Thread-207836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:55:03.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:55:03.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:55:03.189 [DEBUG] [Thread-207836] [transport.py] [_log()] userauth is OK
2026-02-15T16:55:03.190 [DEBUG] [Thread-207836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:55:03.190 [DEBUG] [Thread-207836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:55:03.190 [DEBUG] [Thread-207836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:55:03.190 [DEBUG] [Thread-207836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:55:03.214 [INFO] [Thread-207836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:55:03.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:55:09.601 [DEBUG] [Thread-207838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:14.330 [DEBUG] [Thread-207836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:55:14.331 [DEBUG] [Thread-207836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:55:14.331 [DEBUG] [Thread-207836] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:55:14.371 [DEBUG] [Thread-207836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:55:14.371 [DEBUG] [Thread-207836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:55:14.374 [DEBUG] [Thread-207836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:55:14.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:55:14.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:55:14.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:55:14.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:55:14.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:55:14.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:55:14.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:55:14.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:55:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:55:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.621276 -999.00  +22.30  21.86     27   +2.60 1 1 1 1 1   887    0 18.42 -50.78 ----- 16.7 21.9 154.6 28.2 27.2 -30.0 27.0 -28.3 28.6 -27.3 29.3 -29.9
2026-02-15T16:55:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:55:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:55:14.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.621276
2026-02-15T16:55:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:55:14.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:55:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:55:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:55:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:55:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:54:47', tmtdew=23.19, humidity=21.45, cloud=0.0, wind=29.55, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:54:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:55:14.579 [DEBUG] [Thread-207836] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:55:14.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:55:14.677 [DEBUG] [Thread-207840] [transport.py] [_log()] starting thread (client mode): 0xa2d4fd60
2026-02-15T16:55:14.677 [DEBUG] [Thread-207840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:55:14.692 [DEBUG] [Thread-207840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:55:14.692 [INFO] [Thread-207840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:55:14.699 [DEBUG] [Thread-207840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] client lang: <none>
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] server lang: <none>
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] kex follows: False
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] Compression: none
2026-02-15T16:55:14.700 [DEBUG] [Thread-207840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:55:14.758 [DEBUG] [Thread-207840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:55:14.758 [DEBUG] [Thread-207840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:55:14.759 [DEBUG] [Thread-207840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:55:14.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:55:14.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:55:14.814 [DEBUG] [Thread-207840] [transport.py] [_log()] userauth is OK
2026-02-15T16:55:14.814 [DEBUG] [Thread-207840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:55:14.814 [DEBUG] [Thread-207840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:55:14.814 [DEBUG] [Thread-207840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:55:14.815 [DEBUG] [Thread-207840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:55:14.833 [INFO] [Thread-207840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:55:14.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:55:14.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:55:15.667 [DEBUG] [Thread-207840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:55:15.667 [DEBUG] [Thread-207840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:55:15.715 [DEBUG] [Thread-207840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:55:15.715 [DEBUG] [Thread-207840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:55:15.724 [DEBUG] [Thread-207840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:55:15.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:55:15.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:55:15.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:55:15.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:55:15.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:55:15.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:55:15.760 [DEBUG] [Thread-207840] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:55:24.636 [DEBUG] [Thread-207842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:39.689 [DEBUG] [Thread-207843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:45.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:55:45.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:55:45.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:55:47.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 55, 22), 22.96, 21.74, 0.0, 27.75, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:55:47.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:55:22
2026-02-15T16:55:48.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:55:48.170 [DEBUG] [Thread-207844] [transport.py] [_log()] starting thread (client mode): 0xa2d18490
2026-02-15T16:55:48.170 [DEBUG] [Thread-207844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:55:48.191 [DEBUG] [Thread-207844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:55:48.191 [INFO] [Thread-207844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:55:48.194 [DEBUG] [Thread-207844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:55:48.194 [DEBUG] [Thread-207844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:55:48.194 [DEBUG] [Thread-207844] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:55:48.194 [DEBUG] [Thread-207844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:48.194 [DEBUG] [Thread-207844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:48.194 [DEBUG] [Thread-207844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] client lang: <none>
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] server lang: <none>
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] kex follows: False
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] Compression: none
2026-02-15T16:55:48.195 [DEBUG] [Thread-207844] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:55:48.215 [DEBUG] [Thread-207844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:55:48.216 [DEBUG] [Thread-207844] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:55:48.217 [DEBUG] [Thread-207844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:55:48.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:55:48.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:55:48.219 [DEBUG] [Thread-207844] [transport.py] [_log()] userauth is OK
2026-02-15T16:55:48.219 [DEBUG] [Thread-207844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:55:48.220 [DEBUG] [Thread-207844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:55:48.220 [DEBUG] [Thread-207844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:55:48.220 [DEBUG] [Thread-207844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:55:48.242 [INFO] [Thread-207844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:55:48.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:55:48.867 [DEBUG] [Thread-207844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:55:48.867 [DEBUG] [Thread-207844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:55:48.867 [DEBUG] [Thread-207844] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:55:48.908 [DEBUG] [Thread-207844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:55:48.908 [DEBUG] [Thread-207844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:55:48.912 [DEBUG] [Thread-207844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:55:48.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:55:48.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:55:48.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:55:48.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:55:48.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:55:48.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:55:48.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:55:48.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:55:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:55:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.621623 -999.00  +22.30  20.08     27   +2.80 1 1 1 1 1   887    0 18.53 -51.38 ----- 18.1 20.1 144.3 23.4 27.2 -28.9 26.9 -28.4 28.7 -26.9 29.4 -28.9
2026-02-15T16:55:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:55:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:55:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.621623
2026-02-15T16:55:48.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:55:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:55:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:55:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:55:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:55:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:55:22', tmtdew=22.96, humidity=21.74, cloud=0.0, wind=27.75, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:55:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:55:48.938 [DEBUG] [Thread-207844] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:55:49.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:55:49.036 [DEBUG] [Thread-207847] [transport.py] [_log()] starting thread (client mode): 0xa2d18700
2026-02-15T16:55:49.036 [DEBUG] [Thread-207847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:55:49.057 [DEBUG] [Thread-207847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:55:49.057 [INFO] [Thread-207847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:55:49.069 [DEBUG] [Thread-207847] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] client lang: <none>
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] server lang: <none>
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] kex follows: False
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:55:49.070 [DEBUG] [Thread-207847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:55:49.071 [DEBUG] [Thread-207847] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:55:49.071 [DEBUG] [Thread-207847] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:55:49.071 [DEBUG] [Thread-207847] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:55:49.071 [DEBUG] [Thread-207847] [transport.py] [_log()] Compression: none
2026-02-15T16:55:49.071 [DEBUG] [Thread-207847] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:55:49.126 [DEBUG] [Thread-207847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:55:49.127 [DEBUG] [Thread-207847] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:55:49.127 [DEBUG] [Thread-207847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:55:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:55:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:55:49.182 [DEBUG] [Thread-207847] [transport.py] [_log()] userauth is OK
2026-02-15T16:55:49.182 [DEBUG] [Thread-207847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:55:49.183 [DEBUG] [Thread-207847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:55:49.183 [DEBUG] [Thread-207847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:55:49.183 [DEBUG] [Thread-207847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:55:49.208 [INFO] [Thread-207847] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:55:49.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:55:49.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:55:50.050 [DEBUG] [Thread-207847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:55:50.050 [DEBUG] [Thread-207847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:55:50.105 [DEBUG] [Thread-207847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:55:50.105 [DEBUG] [Thread-207847] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:55:50.114 [DEBUG] [Thread-207847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:55:50.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:55:50.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:55:50.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:55:50.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:55:50.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:55:50.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:55:50.150 [DEBUG] [Thread-207847] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:55:54.721 [DEBUG] [Thread-207849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:55:58.353 [DEBUG] [Thread-207850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:03.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:03.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:09.783 [DEBUG] [Thread-207851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:20.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:56:20.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:56:20.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:56:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 55, 57), 22.99, 21.84, 0.0, 25.85, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:56:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:55:57
2026-02-15T16:56:22.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:56:23.096 [DEBUG] [Thread-207852] [transport.py] [_log()] starting thread (client mode): 0xa2d1b3d0
2026-02-15T16:56:23.096 [DEBUG] [Thread-207852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:56:23.115 [DEBUG] [Thread-207852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:56:23.115 [INFO] [Thread-207852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] client lang: <none>
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] server lang: <none>
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] kex follows: False
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:56:23.119 [DEBUG] [Thread-207852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:56:23.120 [DEBUG] [Thread-207852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:56:23.120 [DEBUG] [Thread-207852] [transport.py] [_log()] Compression: none
2026-02-15T16:56:23.120 [DEBUG] [Thread-207852] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:56:23.136 [DEBUG] [Thread-207852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:56:23.136 [DEBUG] [Thread-207852] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:56:23.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:56:23.138 [DEBUG] [Thread-207852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:56:23.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:56:23.139 [DEBUG] [Thread-207852] [transport.py] [_log()] userauth is OK
2026-02-15T16:56:23.140 [DEBUG] [Thread-207852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:56:23.140 [DEBUG] [Thread-207852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:56:23.140 [DEBUG] [Thread-207852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:56:23.140 [DEBUG] [Thread-207852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:56:23.163 [INFO] [Thread-207852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:56:23.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:56:23.792 [DEBUG] [Thread-207852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:56:23.793 [DEBUG] [Thread-207852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:56:23.793 [DEBUG] [Thread-207852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:56:23.833 [DEBUG] [Thread-207852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:56:23.834 [DEBUG] [Thread-207852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:56:23.837 [DEBUG] [Thread-207852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:56:23.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:56:23.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:56:23.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:56:23.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:56:23.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:56:23.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:56:23.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:56:23.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:56:23.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:56:23.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.621970 -999.00  +22.50  22.90     27   +2.90 1 1 1 1 1   887    0 17.86 -55.25 ----- 22.6 22.9 163.6 31.0 27.2 -29.5 27.1 -27.4 28.7 -27.9 29.3 -30.6
2026-02-15T16:56:23.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:56:23.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:56:23.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.621970
2026-02-15T16:56:23.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:56:23.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:56:23.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:56:23.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:56:23.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:56:23.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:55:57', tmtdew=22.99, humidity=21.84, cloud=0.0, wind=25.85, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:55:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:56:23.862 [DEBUG] [Thread-207852] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:56:23.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:56:23.954 [DEBUG] [Thread-207855] [transport.py] [_log()] starting thread (client mode): 0xa2d4dfc0
2026-02-15T16:56:23.954 [DEBUG] [Thread-207855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:56:23.969 [DEBUG] [Thread-207855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:56:23.969 [INFO] [Thread-207855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] client lang: <none>
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] server lang: <none>
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] kex follows: False
2026-02-15T16:56:23.976 [DEBUG] [Thread-207855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:56:23.977 [DEBUG] [Thread-207855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:56:23.977 [DEBUG] [Thread-207855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:56:23.977 [DEBUG] [Thread-207855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:56:23.977 [DEBUG] [Thread-207855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:56:23.977 [DEBUG] [Thread-207855] [transport.py] [_log()] Compression: none
2026-02-15T16:56:23.977 [DEBUG] [Thread-207855] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:56:24.032 [DEBUG] [Thread-207855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:56:24.032 [DEBUG] [Thread-207855] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:56:24.033 [DEBUG] [Thread-207855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:56:24.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:56:24.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:56:24.090 [DEBUG] [Thread-207855] [transport.py] [_log()] userauth is OK
2026-02-15T16:56:24.090 [DEBUG] [Thread-207855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:56:24.090 [DEBUG] [Thread-207855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:56:24.090 [DEBUG] [Thread-207855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:56:24.090 [DEBUG] [Thread-207855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:56:24.104 [INFO] [Thread-207855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:56:24.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:56:24.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:56:24.822 [DEBUG] [Thread-207857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:24.931 [DEBUG] [Thread-207855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:56:24.931 [DEBUG] [Thread-207855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:56:24.979 [DEBUG] [Thread-207855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:56:24.979 [DEBUG] [Thread-207855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:56:24.988 [DEBUG] [Thread-207855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:56:24.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:56:24.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:56:25.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:56:25.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:56:25.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:56:25.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:56:25.022 [DEBUG] [Thread-207855] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:56:39.871 [DEBUG] [Thread-207858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:54.906 [DEBUG] [Thread-207859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:56:55.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:56:55.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:56:56.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 56, 33), 23.77, 20.65, 0.0, 31.44, 23.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:56:56.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:56:33
2026-02-15T16:56:57.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:56:57.561 [DEBUG] [Thread-207860] [transport.py] [_log()] starting thread (client mode): 0xa2d6b220
2026-02-15T16:56:57.561 [DEBUG] [Thread-207860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:56:57.581 [DEBUG] [Thread-207860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:56:57.581 [INFO] [Thread-207860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:56:57.584 [DEBUG] [Thread-207860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:56:57.584 [DEBUG] [Thread-207860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:56:57.584 [DEBUG] [Thread-207860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] client lang: <none>
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] server lang: <none>
2026-02-15T16:56:57.585 [DEBUG] [Thread-207860] [transport.py] [_log()] kex follows: False
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] Compression: none
2026-02-15T16:56:57.586 [DEBUG] [Thread-207860] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:56:57.605 [DEBUG] [Thread-207860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:56:57.605 [DEBUG] [Thread-207860] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:56:57.606 [DEBUG] [Thread-207860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:56:57.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:56:57.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:56:57.608 [DEBUG] [Thread-207860] [transport.py] [_log()] userauth is OK
2026-02-15T16:56:57.608 [DEBUG] [Thread-207860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:56:57.608 [DEBUG] [Thread-207860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:56:57.608 [DEBUG] [Thread-207860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:56:57.608 [DEBUG] [Thread-207860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:56:57.633 [INFO] [Thread-207860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:56:57.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:56:58.270 [DEBUG] [Thread-207860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:56:58.270 [DEBUG] [Thread-207860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:56:58.270 [DEBUG] [Thread-207860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:56:58.311 [DEBUG] [Thread-207860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:56:58.311 [DEBUG] [Thread-207860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:56:58.313 [DEBUG] [Thread-207860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:56:58.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:56:58.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:56:58.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:56:58.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:56:58.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:56:58.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:56:58.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.622318 -999.00  +22.50  23.89     27   +2.80 1 1 1 1 1   887    0 18.54 -54.77 ----- 22.1 23.9 151.1 34.8 27.2 -29.5 27.0 -28.9 28.6 -28.5 29.2 -31.0
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.622318
2026-02-15T16:56:58.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:56:58.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:56:58.333 [DEBUG] [Thread-207860] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:56:58.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:56:58.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:56:58.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:56:58.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:56:33', tmtdew=23.77, humidity=20.65, cloud=0.0, wind=31.44, temperature=23.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:56:08.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:56:58.383 [DEBUG] [Thread-207863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:56:58.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:56:58.418 [DEBUG] [Thread-207864] [transport.py] [_log()] starting thread (client mode): 0xa2d4d870
2026-02-15T16:56:58.418 [DEBUG] [Thread-207864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:56:58.434 [DEBUG] [Thread-207864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:56:58.434 [INFO] [Thread-207864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:56:58.441 [DEBUG] [Thread-207864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] client lang: <none>
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] server lang: <none>
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] kex follows: False
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] Compression: none
2026-02-15T16:56:58.442 [DEBUG] [Thread-207864] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:56:58.496 [DEBUG] [Thread-207864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:56:58.496 [DEBUG] [Thread-207864] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:56:58.496 [DEBUG] [Thread-207864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:56:58.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:56:58.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:56:58.553 [DEBUG] [Thread-207864] [transport.py] [_log()] userauth is OK
2026-02-15T16:56:58.553 [DEBUG] [Thread-207864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:56:58.553 [DEBUG] [Thread-207864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:56:58.553 [DEBUG] [Thread-207864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:56:58.553 [DEBUG] [Thread-207864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:56:58.567 [INFO] [Thread-207864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:56:58.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:56:58.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:56:59.383 [DEBUG] [Thread-207864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:56:59.383 [DEBUG] [Thread-207864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:56:59.431 [DEBUG] [Thread-207864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:56:59.432 [DEBUG] [Thread-207864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:56:59.441 [DEBUG] [Thread-207864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:56:59.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:56:59.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:56:59.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:56:59.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:56:59.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:56:59.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:56:59.478 [DEBUG] [Thread-207864] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:57:03.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:57:03.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:57:09.939 [DEBUG] [Thread-207866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:57:24.990 [DEBUG] [Thread-207867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:57:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:57:29.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:57:29.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:57:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 57, 9), 22.89, 22.04, 0.0, 27.38, 22.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:57:31.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:57:09
2026-02-15T16:57:31.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:57:31.885 [DEBUG] [Thread-207868] [transport.py] [_log()] starting thread (client mode): 0xa2d4c970
2026-02-15T16:57:31.885 [DEBUG] [Thread-207868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:57:31.900 [DEBUG] [Thread-207868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:57:31.901 [INFO] [Thread-207868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:57:31.903 [DEBUG] [Thread-207868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] client lang: <none>
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] server lang: <none>
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] kex follows: False
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] Compression: none
2026-02-15T16:57:31.904 [DEBUG] [Thread-207868] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:57:31.921 [DEBUG] [Thread-207868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:57:31.922 [DEBUG] [Thread-207868] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:57:31.922 [DEBUG] [Thread-207868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:57:31.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:57:31.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:57:31.924 [DEBUG] [Thread-207868] [transport.py] [_log()] userauth is OK
2026-02-15T16:57:31.924 [DEBUG] [Thread-207868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:57:31.925 [DEBUG] [Thread-207868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:57:31.925 [DEBUG] [Thread-207868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:57:31.925 [DEBUG] [Thread-207868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:57:31.944 [INFO] [Thread-207868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:57:31.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:57:32.566 [DEBUG] [Thread-207868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:57:32.566 [DEBUG] [Thread-207868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:57:32.567 [DEBUG] [Thread-207868] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:57:32.607 [DEBUG] [Thread-207868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:57:32.608 [DEBUG] [Thread-207868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:57:32.611 [DEBUG] [Thread-207868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:57:32.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:57:32.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:57:32.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:57:32.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:57:32.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:57:32.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:57:32.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:57:32.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:57:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:57:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.622665 -999.00  +22.40  25.29     27   +2.80 1 1 1 1 1   887    0 18.03 -58.77 ----- 22.6 25.3 132.0 30.0 27.2 -29.2 27.0 -28.6 28.6 -27.5 29.2 -29.4
2026-02-15T16:57:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:57:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:57:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.622665
2026-02-15T16:57:32.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:57:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:57:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:57:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:57:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:57:32.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:57:09', tmtdew=22.89, humidity=22.04, cloud=0.0, wind=27.38, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:56:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:57:32.638 [DEBUG] [Thread-207868] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:57:32.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:57:32.734 [DEBUG] [Thread-207871] [transport.py] [_log()] starting thread (client mode): 0xa2d78c70
2026-02-15T16:57:32.734 [DEBUG] [Thread-207871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:57:32.749 [DEBUG] [Thread-207871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:57:32.749 [INFO] [Thread-207871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:57:32.757 [DEBUG] [Thread-207871] [transport.py] [_log()] client lang: <none>
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] server lang: <none>
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] kex follows: False
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] Compression: none
2026-02-15T16:57:32.758 [DEBUG] [Thread-207871] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:57:32.815 [DEBUG] [Thread-207871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:57:32.816 [DEBUG] [Thread-207871] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:57:32.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:57:32.817 [DEBUG] [Thread-207871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:57:32.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:57:32.874 [DEBUG] [Thread-207871] [transport.py] [_log()] userauth is OK
2026-02-15T16:57:32.874 [DEBUG] [Thread-207871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:57:32.874 [DEBUG] [Thread-207871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:57:32.874 [DEBUG] [Thread-207871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:57:32.874 [DEBUG] [Thread-207871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:57:32.891 [INFO] [Thread-207871] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:57:32.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:57:32.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:57:33.692 [DEBUG] [Thread-207871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:57:33.693 [DEBUG] [Thread-207871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:57:33.740 [DEBUG] [Thread-207871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:57:33.741 [DEBUG] [Thread-207871] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:57:33.750 [DEBUG] [Thread-207871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:57:33.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:57:33.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:57:33.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:57:33.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:57:33.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:57:33.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:57:33.788 [DEBUG] [Thread-207871] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:57:40.027 [DEBUG] [Thread-207873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:57:55.084 [DEBUG] [Thread-207874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:57:58.416 [DEBUG] [Thread-207875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:03.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:03.313 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:03.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:58:03.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:58:03.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:58:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 57, 44), 23.03, 21.54, 0.0, 27.97, 22.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:58:05.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:57:44
2026-02-15T16:58:06.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:58:06.462 [DEBUG] [Thread-207876] [transport.py] [_log()] starting thread (client mode): 0xa57410f0
2026-02-15T16:58:06.462 [DEBUG] [Thread-207876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:58:06.483 [DEBUG] [Thread-207876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:58:06.483 [INFO] [Thread-207876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:06.486 [DEBUG] [Thread-207876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] client lang: <none>
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] server lang: <none>
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] kex follows: False
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] Compression: none
2026-02-15T16:58:06.487 [DEBUG] [Thread-207876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:58:06.506 [DEBUG] [Thread-207876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:58:06.507 [DEBUG] [Thread-207876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:58:06.508 [DEBUG] [Thread-207876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:58:06.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:58:06.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:58:06.510 [DEBUG] [Thread-207876] [transport.py] [_log()] userauth is OK
2026-02-15T16:58:06.510 [DEBUG] [Thread-207876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:58:06.510 [DEBUG] [Thread-207876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:58:06.510 [DEBUG] [Thread-207876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:58:06.510 [DEBUG] [Thread-207876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:58:06.534 [INFO] [Thread-207876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:58:06.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:58:07.297 [DEBUG] [Thread-207876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:58:07.297 [DEBUG] [Thread-207876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:58:07.298 [DEBUG] [Thread-207876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:58:07.338 [DEBUG] [Thread-207876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:58:07.339 [DEBUG] [Thread-207876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:58:07.341 [DEBUG] [Thread-207876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:58:07.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:58:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:58:07.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:58:07.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:58:07.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:58:07.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:58:07.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:58:07.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:58:07.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:58:07.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.623012 -999.00  +22.30  18.34     27   +2.70 1 1 1 1 1   887    0 18.16 -55.81 ----- 21.8 18.3 138.4 31.5 27.1 -29.3 27.0 -28.5 28.6 -27.6 29.2 -29.7
2026-02-15T16:58:07.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:58:07.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:58:07.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.623012
2026-02-15T16:58:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:58:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:58:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:58:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:58:07.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:58:07.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:57:44', tmtdew=23.03, humidity=21.54, cloud=0.0, wind=27.97, temperature=22.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:57:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:58:07.368 [DEBUG] [Thread-207876] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:58:07.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:58:07.465 [DEBUG] [Thread-207879] [transport.py] [_log()] starting thread (client mode): 0xa5741390
2026-02-15T16:58:07.465 [DEBUG] [Thread-207879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:58:07.479 [DEBUG] [Thread-207879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:58:07.479 [INFO] [Thread-207879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:58:07.487 [DEBUG] [Thread-207879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:58:07.487 [DEBUG] [Thread-207879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:58:07.488 [DEBUG] [Thread-207879] [transport.py] [_log()] client lang: <none>
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] server lang: <none>
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] kex follows: False
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] Compression: none
2026-02-15T16:58:07.489 [DEBUG] [Thread-207879] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:58:07.547 [DEBUG] [Thread-207879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:58:07.548 [DEBUG] [Thread-207879] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:58:07.548 [DEBUG] [Thread-207879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:58:07.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:58:07.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:58:07.605 [DEBUG] [Thread-207879] [transport.py] [_log()] userauth is OK
2026-02-15T16:58:07.606 [DEBUG] [Thread-207879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:58:07.606 [DEBUG] [Thread-207879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:58:07.606 [DEBUG] [Thread-207879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:58:07.606 [DEBUG] [Thread-207879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:58:07.624 [INFO] [Thread-207879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:58:07.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:58:07.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:58:08.459 [DEBUG] [Thread-207879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:58:08.460 [DEBUG] [Thread-207879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:58:08.507 [DEBUG] [Thread-207879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:58:08.508 [DEBUG] [Thread-207879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:58:08.517 [DEBUG] [Thread-207879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:58:08.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:58:08.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:58: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') -> 00000000
2026-02-15T16:58:08.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:58:08.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:58:08.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:58:08.554 [DEBUG] [Thread-207879] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:58:10.120 [DEBUG] [Thread-207881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:25.171 [DEBUG] [Thread-207882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:38.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:58:38.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:58:38.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:58:40.208 [DEBUG] [Thread-207883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:40.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 58, 21), 23.22, 21.29, 0.0, 25.06, 22.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:58:40.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:58:21
2026-02-15T16:58:40.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:58:40.891 [DEBUG] [Thread-207884] [transport.py] [_log()] starting thread (client mode): 0xa2d4f100
2026-02-15T16:58:40.891 [DEBUG] [Thread-207884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:58:40.912 [DEBUG] [Thread-207884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:58:40.913 [INFO] [Thread-207884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:58:40.915 [DEBUG] [Thread-207884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:58:40.915 [DEBUG] [Thread-207884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:58:40.915 [DEBUG] [Thread-207884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:58:40.915 [DEBUG] [Thread-207884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] client lang: <none>
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] server lang: <none>
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] kex follows: False
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] Compression: none
2026-02-15T16:58:40.916 [DEBUG] [Thread-207884] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:58:40.924 [DEBUG] [Thread-207884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:58:40.924 [DEBUG] [Thread-207884] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:58:40.925 [DEBUG] [Thread-207884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:58:40.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:58:40.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:58:40.927 [DEBUG] [Thread-207884] [transport.py] [_log()] userauth is OK
2026-02-15T16:58:40.927 [DEBUG] [Thread-207884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:58:40.927 [DEBUG] [Thread-207884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:58:40.927 [DEBUG] [Thread-207884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:58:40.927 [DEBUG] [Thread-207884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:58:40.952 [INFO] [Thread-207884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:58:40.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:58:41.592 [DEBUG] [Thread-207884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:58:41.592 [DEBUG] [Thread-207884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:58:41.593 [DEBUG] [Thread-207884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:58:41.633 [DEBUG] [Thread-207884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:58:41.633 [DEBUG] [Thread-207884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:58:41.636 [DEBUG] [Thread-207884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:58:41.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:58:41.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:58:41.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:58:41.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:58:41.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:58:41.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:58:41.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:58:41.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:58:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:58:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.623359 -999.00  +22.30  18.88     27   +2.70 1 1 1 1 1   887    0 18.66 -53.33 ----- 16.7 18.9 176.6 28.7 27.2 -29.8 27.0 -30.1 28.6 -27.5 29.2 -30.2
2026-02-15T16:58:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:58:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:58:41.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.623359
2026-02-15T16:58:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:58:41.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:58:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:58:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:58:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:58:41.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:58:21', tmtdew=23.22, humidity=21.29, cloud=0.0, wind=25.06, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:57:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:58:41.664 [DEBUG] [Thread-207884] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:58:41.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:58:41.759 [DEBUG] [Thread-207887] [transport.py] [_log()] starting thread (client mode): 0xa2d4dd80
2026-02-15T16:58:41.759 [DEBUG] [Thread-207887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:58:41.781 [DEBUG] [Thread-207887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:58:41.781 [INFO] [Thread-207887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:58:41.791 [DEBUG] [Thread-207887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] client lang: <none>
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] server lang: <none>
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] kex follows: False
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:58:41.792 [DEBUG] [Thread-207887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:58:41.793 [DEBUG] [Thread-207887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:58:41.793 [DEBUG] [Thread-207887] [transport.py] [_log()] Compression: none
2026-02-15T16:58:41.793 [DEBUG] [Thread-207887] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:58:41.846 [DEBUG] [Thread-207887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:58:41.847 [DEBUG] [Thread-207887] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:58:41.847 [DEBUG] [Thread-207887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:58:41.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:58:41.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:58:41.902 [DEBUG] [Thread-207887] [transport.py] [_log()] userauth is OK
2026-02-15T16:58:41.903 [DEBUG] [Thread-207887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:58:41.903 [DEBUG] [Thread-207887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:58:41.903 [DEBUG] [Thread-207887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:58:41.903 [DEBUG] [Thread-207887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:58:41.921 [INFO] [Thread-207887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:58:41.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:58:41.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:58:42.759 [DEBUG] [Thread-207887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:58:42.759 [DEBUG] [Thread-207887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:58:42.807 [DEBUG] [Thread-207887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:58:42.808 [DEBUG] [Thread-207887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:58:42.817 [DEBUG] [Thread-207887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:58:42.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:58:42.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:58:42.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:58:42.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:58:42.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:58:42.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:58:42.856 [DEBUG] [Thread-207887] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:58:55.243 [DEBUG] [Thread-207889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:58:58.449 [DEBUG] [Thread-207890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:03.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:03.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:10.295 [DEBUG] [Thread-207891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:12.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:59:12.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:59: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
2026-02-15T16:59:14.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 58, 56), 23.0, 21.76, 0.0, 25.65, 22.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:59:14.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:58:56
2026-02-15T16:59:15.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:59:15.218 [DEBUG] [Thread-207892] [transport.py] [_log()] starting thread (client mode): 0xa5742560
2026-02-15T16:59:15.218 [DEBUG] [Thread-207892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:59:15.244 [DEBUG] [Thread-207892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:59:15.245 [INFO] [Thread-207892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:59:15.246 [DEBUG] [Thread-207892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:59:15.246 [DEBUG] [Thread-207892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:59:15.246 [DEBUG] [Thread-207892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:59:15.246 [DEBUG] [Thread-207892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] client lang: <none>
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] server lang: <none>
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] kex follows: False
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:59:15.247 [DEBUG] [Thread-207892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:59:15.248 [DEBUG] [Thread-207892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:59:15.248 [DEBUG] [Thread-207892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:59:15.248 [DEBUG] [Thread-207892] [transport.py] [_log()] Compression: none
2026-02-15T16:59:15.248 [DEBUG] [Thread-207892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:59:15.261 [DEBUG] [Thread-207892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:59:15.261 [DEBUG] [Thread-207892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:59:15.262 [DEBUG] [Thread-207892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:59:15.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:59:15.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:59:15.264 [DEBUG] [Thread-207892] [transport.py] [_log()] userauth is OK
2026-02-15T16:59:15.264 [DEBUG] [Thread-207892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:59:15.264 [DEBUG] [Thread-207892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:59:15.264 [DEBUG] [Thread-207892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:59:15.264 [DEBUG] [Thread-207892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:59:15.282 [INFO] [Thread-207892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:59:15.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:59:15.879 [DEBUG] [Thread-207892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:59:15.879 [DEBUG] [Thread-207892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:59:15.879 [DEBUG] [Thread-207892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:59:15.919 [DEBUG] [Thread-207892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:59:15.919 [DEBUG] [Thread-207892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:59:15.923 [DEBUG] [Thread-207892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:59:15.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:59:15.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:59:15.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:59:15.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:59:15.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:59:15.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:59:15.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:59:15.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:59:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:59:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.624401 -999.00  +22.10  22.44     27   +2.60 1 1 1 1 1   887    0 18.29 -49.90 ----- 21.9 22.4 159.8 30.4 27.1 -29.4 26.8 -29.7 28.5 -27.6 29.2 -28.9
2026-02-15T16:59:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:59:15.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:59:15.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.624401
2026-02-15T16:59:15.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:59:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:59:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:59:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:59:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:59:15.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:58:56', tmtdew=23.0, humidity=21.76, cloud=0.0, wind=25.65, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:59:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:59:15.950 [DEBUG] [Thread-207892] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:59:16.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:59:16.049 [DEBUG] [Thread-207895] [transport.py] [_log()] starting thread (client mode): 0xa2d7be20
2026-02-15T16:59:16.049 [DEBUG] [Thread-207895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:59:16.063 [DEBUG] [Thread-207895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:59:16.064 [INFO] [Thread-207895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] client lang: <none>
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] server lang: <none>
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] kex follows: False
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:59:16.072 [DEBUG] [Thread-207895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:59:16.073 [DEBUG] [Thread-207895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:59:16.073 [DEBUG] [Thread-207895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:59:16.073 [DEBUG] [Thread-207895] [transport.py] [_log()] Compression: none
2026-02-15T16:59:16.073 [DEBUG] [Thread-207895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:59:16.130 [DEBUG] [Thread-207895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:59:16.131 [DEBUG] [Thread-207895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:59:16.131 [DEBUG] [Thread-207895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:59:16.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:59:16.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:59:16.187 [DEBUG] [Thread-207895] [transport.py] [_log()] userauth is OK
2026-02-15T16:59:16.187 [DEBUG] [Thread-207895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:59:16.188 [DEBUG] [Thread-207895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:59:16.188 [DEBUG] [Thread-207895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:59:16.188 [DEBUG] [Thread-207895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:59:16.210 [INFO] [Thread-207895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:59:16.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:59:16.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:59:17.053 [DEBUG] [Thread-207895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:59:17.053 [DEBUG] [Thread-207895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:59:17.101 [DEBUG] [Thread-207895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:59:17.101 [DEBUG] [Thread-207895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:59:17.112 [DEBUG] [Thread-207895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:59:17.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:59:17.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:59:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:59:17.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:59:17.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:59:17.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:59:17.150 [DEBUG] [Thread-207895] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:59:25.332 [DEBUG] [Thread-207897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:40.383 [DEBUG] [Thread-207898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:47.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T16:59:47.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T16:59:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T16:59:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 16, 59, 31), 23.02, 21.73, 0.0, 22.53, 22.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T16:59:49.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 16:59:31
2026-02-15T16:59:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T16:59:49.543 [DEBUG] [Thread-207899] [transport.py] [_log()] starting thread (client mode): 0xa2d19f00
2026-02-15T16:59:49.543 [DEBUG] [Thread-207899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:59:49.563 [DEBUG] [Thread-207899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T16:59:49.564 [INFO] [Thread-207899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T16:59:49.566 [DEBUG] [Thread-207899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:59:49.567 [DEBUG] [Thread-207899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] client lang: <none>
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] server lang: <none>
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] kex follows: False
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] Compression: none
2026-02-15T16:59:49.568 [DEBUG] [Thread-207899] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:59:49.586 [DEBUG] [Thread-207899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:59:49.586 [DEBUG] [Thread-207899] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:59:49.587 [DEBUG] [Thread-207899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T16:59:49.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T16:59:49.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:59:49.589 [DEBUG] [Thread-207899] [transport.py] [_log()] userauth is OK
2026-02-15T16:59:49.589 [DEBUG] [Thread-207899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:59:49.590 [DEBUG] [Thread-207899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:59:49.590 [DEBUG] [Thread-207899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T16:59:49.590 [DEBUG] [Thread-207899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:59:49.614 [INFO] [Thread-207899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:59:49.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:59:50.184 [DEBUG] [Thread-207899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:59:50.184 [DEBUG] [Thread-207899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:59:50.185 [DEBUG] [Thread-207899] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T16:59:50.226 [DEBUG] [Thread-207899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:59:50.226 [DEBUG] [Thread-207899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:59:50.229 [DEBUG] [Thread-207899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:59:50.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:59:50.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T16:59:50.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T16:59:50.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T16:59:50.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:59:50.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T16:59:50.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:59:50.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:59:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T16:59:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.624748 -999.00  +22.30  12.95     27   +2.70 1 1 1 1 1   887    0 17.97 -51.23 ----- 11.7 12.9 161.2 23.3 27.1 -28.5 26.9 -28.0 28.6 -26.0 29.3 -28.5
2026-02-15T16:59:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T16:59:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T16:59:50.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.624748
2026-02-15T16:59:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T16:59:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T16:59:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T16:59:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T16:59:50.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T16:59:50.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T16:59:31', tmtdew=23.02, humidity=21.73, cloud=0.0, wind=22.53, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T14:59:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T16:59:50.252 [DEBUG] [Thread-207899] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:59:50.335 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T16:59:50.354 [DEBUG] [Thread-207902] [transport.py] [_log()] starting thread (client mode): 0xa2d1a3e0
2026-02-15T16:59:50.354 [DEBUG] [Thread-207902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T16:59:50.374 [DEBUG] [Thread-207902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T16:59:50.375 [INFO] [Thread-207902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T16:59:50.390 [DEBUG] [Thread-207902] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] client lang: <none>
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] server lang: <none>
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] kex follows: False
2026-02-15T16:59:50.391 [DEBUG] [Thread-207902] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T16:59:50.392 [DEBUG] [Thread-207902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T16:59:50.392 [DEBUG] [Thread-207902] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T16:59:50.392 [DEBUG] [Thread-207902] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T16:59:50.392 [DEBUG] [Thread-207902] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T16:59:50.392 [DEBUG] [Thread-207902] [transport.py] [_log()] Compression: none
2026-02-15T16:59:50.392 [DEBUG] [Thread-207902] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T16:59:50.453 [DEBUG] [Thread-207902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T16:59:50.454 [DEBUG] [Thread-207902] [transport.py] [_log()] Switch to new keys ...
2026-02-15T16:59:50.454 [DEBUG] [Thread-207902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T16:59:50.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T16:59:50.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T16:59:50.523 [DEBUG] [Thread-207902] [transport.py] [_log()] userauth is OK
2026-02-15T16:59:50.523 [DEBUG] [Thread-207902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T16:59:50.523 [DEBUG] [Thread-207902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T16:59:50.523 [DEBUG] [Thread-207902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T16:59:50.523 [DEBUG] [Thread-207902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T16:59:50.548 [INFO] [Thread-207902] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T16:59:50.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T16:59:50.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T16:59:51.372 [DEBUG] [Thread-207902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T16:59:51.372 [DEBUG] [Thread-207902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T16:59:51.420 [DEBUG] [Thread-207902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T16:59:51.421 [DEBUG] [Thread-207902] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T16:59:51.434 [DEBUG] [Thread-207902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T16:59:51.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T16:59:51.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T16:59:51.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T16:59:51.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T16:59:51.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T16:59:51.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T16:59:51.469 [DEBUG] [Thread-207902] [transport.py] [_log()] EOF in transport thread
2026-02-15T16:59:55.418 [DEBUG] [Thread-207904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T16:59:58.483 [DEBUG] [Thread-207905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:03.598 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:03.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:10.464 [DEBUG] [Thread-207906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:21.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:00:21.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:00:21.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:00:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 0, 7), 23.18, 21.53, 0.0, 27.52, 22.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:00:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:00:07
2026-02-15T17:00:23.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:00:24.146 [DEBUG] [Thread-207907] [transport.py] [_log()] starting thread (client mode): 0xa2d19090
2026-02-15T17:00:24.146 [DEBUG] [Thread-207907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:00:24.159 [DEBUG] [Thread-207907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:00:24.159 [INFO] [Thread-207907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] client lang: <none>
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] server lang: <none>
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] kex follows: False
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] Compression: none
2026-02-15T17:00:24.163 [DEBUG] [Thread-207907] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:00:24.179 [DEBUG] [Thread-207907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:00:24.179 [DEBUG] [Thread-207907] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:00:24.180 [DEBUG] [Thread-207907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:00:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:00:24.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:00:24.181 [DEBUG] [Thread-207907] [transport.py] [_log()] userauth is OK
2026-02-15T17:00:24.181 [DEBUG] [Thread-207907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:00:24.181 [DEBUG] [Thread-207907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:00:24.181 [DEBUG] [Thread-207907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:00:24.181 [DEBUG] [Thread-207907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:00:24.193 [INFO] [Thread-207907] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:00:24.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:00:24.799 [DEBUG] [Thread-207907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:00:24.799 [DEBUG] [Thread-207907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:00:24.799 [DEBUG] [Thread-207907] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:00:24.840 [DEBUG] [Thread-207907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:00:24.840 [DEBUG] [Thread-207907] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:00:24.843 [DEBUG] [Thread-207907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:00:24.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:00:24.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:00:24.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:00:24.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:00:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:00:24.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:00:24.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:00:24.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:00:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:00:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.625095 -999.00  +22.70  11.56     27   +2.80 1 1 1 1 1   887    0 18.04 -49.32 ----- 18.1 11.6 150.6 21.0 27.2 -29.6 26.9 -27.3 28.6 -26.9 29.3 -29.7
2026-02-15T17:00:24.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:00:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:00:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.625095
2026-02-15T17:00:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:00:24.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:00:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:00:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:00:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:00:24.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:00:07', tmtdew=23.18, humidity=21.53, cloud=0.0, wind=27.52, temperature=22.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:00:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:00:24.862 [DEBUG] [Thread-207907] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:00:24.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:00:24.959 [DEBUG] [Thread-207910] [transport.py] [_log()] starting thread (client mode): 0xa2d79480
2026-02-15T17:00:24.959 [DEBUG] [Thread-207910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:00:24.973 [DEBUG] [Thread-207910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:00:24.974 [INFO] [Thread-207910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:24.982 [DEBUG] [Thread-207910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] client lang: <none>
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] server lang: <none>
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] kex follows: False
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:00:24.983 [DEBUG] [Thread-207910] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:00:24.984 [DEBUG] [Thread-207910] [transport.py] [_log()] Compression: none
2026-02-15T17:00:24.984 [DEBUG] [Thread-207910] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:00:25.041 [DEBUG] [Thread-207910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:00:25.041 [DEBUG] [Thread-207910] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:00:25.042 [DEBUG] [Thread-207910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:00:25.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:00:25.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:00:25.102 [DEBUG] [Thread-207910] [transport.py] [_log()] userauth is OK
2026-02-15T17:00:25.102 [DEBUG] [Thread-207910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:00:25.102 [DEBUG] [Thread-207910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:00:25.102 [DEBUG] [Thread-207910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:00:25.102 [DEBUG] [Thread-207910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:00:25.121 [INFO] [Thread-207910] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:00:25.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:00:25.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:00:25.500 [DEBUG] [Thread-207912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:25.961 [DEBUG] [Thread-207910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:00:25.962 [DEBUG] [Thread-207910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:00:26.009 [DEBUG] [Thread-207910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:00:26.009 [DEBUG] [Thread-207910] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:00:26.018 [DEBUG] [Thread-207910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:00:26.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:00:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:00:26.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:00:26.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:00:26.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:00:26.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:00:26.050 [DEBUG] [Thread-207910] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:00:40.542 [DEBUG] [Thread-207913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:55.583 [DEBUG] [Thread-207914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:56.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:00:56.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:00:56.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:00:58.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 0, 43), 23.08, 21.58, 0.0, 26.54, 22.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:00:58.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:00:43
2026-02-15T17:00:58.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:00:58.513 [DEBUG] [Thread-207915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:00:58.543 [DEBUG] [Thread-207916] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-15T17:00:58.544 [DEBUG] [Thread-207916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:00:58.563 [DEBUG] [Thread-207916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:00:58.563 [INFO] [Thread-207916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] client lang: <none>
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] server lang: <none>
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] kex follows: False
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] Compression: none
2026-02-15T17:00:58.566 [DEBUG] [Thread-207916] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:00:58.582 [DEBUG] [Thread-207916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:00:58.582 [DEBUG] [Thread-207916] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:00:58.582 [DEBUG] [Thread-207916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:00:58.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:00:58.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:00:58.583 [DEBUG] [Thread-207916] [transport.py] [_log()] userauth is OK
2026-02-15T17:00:58.583 [DEBUG] [Thread-207916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:00:58.583 [DEBUG] [Thread-207916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:00:58.583 [DEBUG] [Thread-207916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:00:58.583 [DEBUG] [Thread-207916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:00:58.596 [INFO] [Thread-207916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:00:58.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:00:59.256 [DEBUG] [Thread-207916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:00:59.256 [DEBUG] [Thread-207916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:00:59.256 [DEBUG] [Thread-207916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:00:59.296 [DEBUG] [Thread-207916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:00:59.297 [DEBUG] [Thread-207916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:00:59.300 [DEBUG] [Thread-207916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:00:59.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:00:59.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:00:59.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:00:59.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:00:59.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:00:59.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:00:59.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:00:59.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:00:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:00:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.625443 -999.00  +22.80  17.16     27   +2.80 1 1 1 1 1   887    0 18.69 -47.97 ----- 15.9 17.2 149.2 28.2 27.2 -29.7 26.9 -28.5 28.6 -27.0 29.3 -29.8
2026-02-15T17:00:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:00:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:00:59.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.625443
2026-02-15T17:00:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:00:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:00:59.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:00:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:00:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:00:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:00:43', tmtdew=23.08, humidity=21.58, cloud=0.0, wind=26.54, temperature=22.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:00:38.275', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:00:59.328 [DEBUG] [Thread-207916] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:00:59.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:00:59.425 [DEBUG] [Thread-207919] [transport.py] [_log()] starting thread (client mode): 0xa5741d20
2026-02-15T17:00:59.425 [DEBUG] [Thread-207919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:00:59.440 [DEBUG] [Thread-207919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:00:59.440 [INFO] [Thread-207919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] client lang: <none>
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] server lang: <none>
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] kex follows: False
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] Compression: none
2026-02-15T17:00:59.448 [DEBUG] [Thread-207919] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:00:59.506 [DEBUG] [Thread-207919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:00:59.507 [DEBUG] [Thread-207919] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:00:59.507 [DEBUG] [Thread-207919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:00:59.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:00:59.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:00:59.565 [DEBUG] [Thread-207919] [transport.py] [_log()] userauth is OK
2026-02-15T17:00:59.565 [DEBUG] [Thread-207919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:00:59.565 [DEBUG] [Thread-207919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:00:59.565 [DEBUG] [Thread-207919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:00:59.565 [DEBUG] [Thread-207919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:00:59.579 [INFO] [Thread-207919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:00:59.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:00:59.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:01:00.401 [DEBUG] [Thread-207919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:01:00.401 [DEBUG] [Thread-207919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:01:00.449 [DEBUG] [Thread-207919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:01:00.449 [DEBUG] [Thread-207919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:01:00.458 [DEBUG] [Thread-207919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:01:00.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:01:00.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:01:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:01:00.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:01:00.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:01:00.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:01:00.496 [DEBUG] [Thread-207919] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:01:03.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:01:03.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:01:10.620 [DEBUG] [Thread-207921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:01:25.671 [DEBUG] [Thread-207922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:01:30.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:01:30.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:01:30.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:01:32.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 1, 19), 22.95, 21.74, 0.0, 27.28, 22.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:01:32.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:01:19
2026-02-15T17:01:32.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:01:32.892 [DEBUG] [Thread-207923] [transport.py] [_log()] starting thread (client mode): 0xa2d183a0
2026-02-15T17:01:32.893 [DEBUG] [Thread-207923] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:01:32.913 [DEBUG] [Thread-207923] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:01:32.913 [INFO] [Thread-207923] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:01:32.916 [DEBUG] [Thread-207923] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:01:32.916 [DEBUG] [Thread-207923] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:01:32.916 [DEBUG] [Thread-207923] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:01:32.916 [DEBUG] [Thread-207923] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:01:32.916 [DEBUG] [Thread-207923] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:01:32.916 [DEBUG] [Thread-207923] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] client lang: <none>
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] server lang: <none>
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] kex follows: False
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:01:32.917 [DEBUG] [Thread-207923] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:01:32.918 [DEBUG] [Thread-207923] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:01:32.918 [DEBUG] [Thread-207923] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:01:32.918 [DEBUG] [Thread-207923] [transport.py] [_log()] Compression: none
2026-02-15T17:01:32.918 [DEBUG] [Thread-207923] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:01:32.937 [DEBUG] [Thread-207923] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:01:32.937 [DEBUG] [Thread-207923] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:01:32.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:01:32.938 [DEBUG] [Thread-207923] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:01:32.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:01:32.940 [DEBUG] [Thread-207923] [transport.py] [_log()] userauth is OK
2026-02-15T17:01:32.940 [DEBUG] [Thread-207923] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:01:32.940 [DEBUG] [Thread-207923] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:01:32.940 [DEBUG] [Thread-207923] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:01:32.940 [DEBUG] [Thread-207923] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:01:32.962 [INFO] [Thread-207923] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:01:32.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:01:33.611 [DEBUG] [Thread-207923] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:01:33.611 [DEBUG] [Thread-207923] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:01:33.612 [DEBUG] [Thread-207923] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:01:33.652 [DEBUG] [Thread-207923] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:01:33.653 [DEBUG] [Thread-207923] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:01:33.656 [DEBUG] [Thread-207923] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:01:33.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:01:33.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:01:33.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:01:33.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:01:33.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:01:33.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:01:33.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:01:33.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:01:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:01:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.625790 -999.00  +22.90  15.67     26   +2.80 1 1 1 1 1   887    0 18.52 -43.79 ----- 19.7 15.7 167.4 27.5 27.2 -29.4 27.0 -27.9 28.6 -27.2 -999.0 -999.0
2026-02-15T17:01:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:01:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:01:33.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.625790
2026-02-15T17:01:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:01:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:01:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:01:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:01:33.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:01:33.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:01:19', tmtdew=22.95, humidity=21.74, cloud=0.0, wind=27.28, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:01:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:01:33.687 [DEBUG] [Thread-207923] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:01:33.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:01:33.784 [DEBUG] [Thread-207926] [transport.py] [_log()] starting thread (client mode): 0xa2d69510
2026-02-15T17:01:33.784 [DEBUG] [Thread-207926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:01:33.798 [DEBUG] [Thread-207926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:01:33.799 [INFO] [Thread-207926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:01:33.806 [DEBUG] [Thread-207926] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:01:33.807 [DEBUG] [Thread-207926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] client lang: <none>
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] server lang: <none>
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] kex follows: False
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:01:33.808 [DEBUG] [Thread-207926] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:01:33.809 [DEBUG] [Thread-207926] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:01:33.809 [DEBUG] [Thread-207926] [transport.py] [_log()] Compression: none
2026-02-15T17:01:33.809 [DEBUG] [Thread-207926] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:01:33.869 [DEBUG] [Thread-207926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:01:33.869 [DEBUG] [Thread-207926] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:01:33.870 [DEBUG] [Thread-207926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:01:33.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:01:33.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:01:33.927 [DEBUG] [Thread-207926] [transport.py] [_log()] userauth is OK
2026-02-15T17:01:33.927 [DEBUG] [Thread-207926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:01:33.927 [DEBUG] [Thread-207926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:01:33.927 [DEBUG] [Thread-207926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:01:33.927 [DEBUG] [Thread-207926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:01:33.946 [INFO] [Thread-207926] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:01:33.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:01:33.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:01:34.773 [DEBUG] [Thread-207926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:01:34.773 [DEBUG] [Thread-207926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:01:34.820 [DEBUG] [Thread-207926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:01:34.821 [DEBUG] [Thread-207926] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:01:34.830 [DEBUG] [Thread-207926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:01:34.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:01:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:01: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-02-15T17:01:34.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:01:34.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:01:34.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:01:34.867 [DEBUG] [Thread-207926] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:01:40.712 [DEBUG] [Thread-207928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:01:55.765 [DEBUG] [Thread-207929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:01:58.556 [DEBUG] [Thread-207930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:03.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:03.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:02:04.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:02:04.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:02:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 1, 54), 22.85, 21.88, 0.0, 22.88, 22.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:02:06.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:01:54
2026-02-15T17:02:07.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:02:07.220 [DEBUG] [Thread-207931] [transport.py] [_log()] starting thread (client mode): 0xa2dc24a0
2026-02-15T17:02:07.220 [DEBUG] [Thread-207931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:02:07.238 [DEBUG] [Thread-207931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:02:07.239 [INFO] [Thread-207931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] client lang: <none>
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] server lang: <none>
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] kex follows: False
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:02:07.242 [DEBUG] [Thread-207931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:02:07.243 [DEBUG] [Thread-207931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:02:07.243 [DEBUG] [Thread-207931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:02:07.243 [DEBUG] [Thread-207931] [transport.py] [_log()] Compression: none
2026-02-15T17:02:07.243 [DEBUG] [Thread-207931] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:02:07.259 [DEBUG] [Thread-207931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:02:07.259 [DEBUG] [Thread-207931] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:02:07.260 [DEBUG] [Thread-207931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:02:07.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:02:07.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:02:07.262 [DEBUG] [Thread-207931] [transport.py] [_log()] userauth is OK
2026-02-15T17:02:07.262 [DEBUG] [Thread-207931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:02:07.262 [DEBUG] [Thread-207931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:02:07.262 [DEBUG] [Thread-207931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:02:07.262 [DEBUG] [Thread-207931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:02:07.284 [INFO] [Thread-207931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:02:07.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:02:07.934 [DEBUG] [Thread-207931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:02:07.934 [DEBUG] [Thread-207931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:02:07.935 [DEBUG] [Thread-207931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:02:07.975 [DEBUG] [Thread-207931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:02:07.975 [DEBUG] [Thread-207931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:02:07.977 [DEBUG] [Thread-207931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:02:07.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:02:07.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:02:07.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:02:07.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:02:07.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:02:07.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:02:07.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:02:07.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:02:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:02:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.626137 -999.00  +22.80  24.42     27   +2.80 1 1 1 1 1   887    0 18.88 -39.84 ----- 18.9 24.4 148.5 34.7 27.2 -30.2 27.0 -28.4 28.6 -27.7 29.3 -29.6
2026-02-15T17:02:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:02:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:02:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.626137
2026-02-15T17:02:07.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:02:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:02:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:02:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:02:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:02:07.999 [DEBUG] [Thread-207931] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:02:07.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:01:54', tmtdew=22.85, humidity=21.88, cloud=0.0, wind=22.88, temperature=22.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:01:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:02:08.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:02:08.096 [DEBUG] [Thread-207934] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-15T17:02:08.096 [DEBUG] [Thread-207934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:02:08.111 [DEBUG] [Thread-207934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:02:08.111 [INFO] [Thread-207934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:02:08.119 [DEBUG] [Thread-207934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] client lang: <none>
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] server lang: <none>
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] kex follows: False
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:02:08.120 [DEBUG] [Thread-207934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:02:08.121 [DEBUG] [Thread-207934] [transport.py] [_log()] Compression: none
2026-02-15T17:02:08.121 [DEBUG] [Thread-207934] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:02:08.179 [DEBUG] [Thread-207934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:02:08.179 [DEBUG] [Thread-207934] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:02:08.180 [DEBUG] [Thread-207934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:02:08.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:02:08.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:02:08.241 [DEBUG] [Thread-207934] [transport.py] [_log()] userauth is OK
2026-02-15T17:02:08.241 [DEBUG] [Thread-207934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:02:08.241 [DEBUG] [Thread-207934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:02:08.241 [DEBUG] [Thread-207934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:02:08.241 [DEBUG] [Thread-207934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:02:08.263 [INFO] [Thread-207934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:02:08.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:02:08.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:02:09.109 [DEBUG] [Thread-207934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:02:09.109 [DEBUG] [Thread-207934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:02:09.157 [DEBUG] [Thread-207934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:02:09.157 [DEBUG] [Thread-207934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:02:09.166 [DEBUG] [Thread-207934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:02:09.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:02:09.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:02:09.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:02:09.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:02:09.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:02:09.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:02:09.205 [DEBUG] [Thread-207934] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:02:10.800 [DEBUG] [Thread-207936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:25.851 [DEBUG] [Thread-207937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:39.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:02:39.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:02:39.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:02:40.888 [DEBUG] [Thread-207938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 2, 30), 22.9, 21.83, 0.0, 24.86, 22.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:02:41.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:02:30
2026-02-15T17:02:41.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:02:42.082 [DEBUG] [Thread-207939] [transport.py] [_log()] starting thread (client mode): 0xa2d19330
2026-02-15T17:02:42.082 [DEBUG] [Thread-207939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:02:42.103 [DEBUG] [Thread-207939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:02:42.103 [INFO] [Thread-207939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] client lang: <none>
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] server lang: <none>
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] kex follows: False
2026-02-15T17:02:42.106 [DEBUG] [Thread-207939] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:02:42.107 [DEBUG] [Thread-207939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:02:42.107 [DEBUG] [Thread-207939] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:02:42.107 [DEBUG] [Thread-207939] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:02:42.107 [DEBUG] [Thread-207939] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:02:42.107 [DEBUG] [Thread-207939] [transport.py] [_log()] Compression: none
2026-02-15T17:02:42.107 [DEBUG] [Thread-207939] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:02:42.124 [DEBUG] [Thread-207939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:02:42.124 [DEBUG] [Thread-207939] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:02:42.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:02:42.125 [DEBUG] [Thread-207939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:02:42.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:02:42.126 [DEBUG] [Thread-207939] [transport.py] [_log()] userauth is OK
2026-02-15T17:02:42.126 [DEBUG] [Thread-207939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:02:42.126 [DEBUG] [Thread-207939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:02:42.126 [DEBUG] [Thread-207939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:02:42.126 [DEBUG] [Thread-207939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:02:42.138 [INFO] [Thread-207939] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:02:42.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:02:42.774 [DEBUG] [Thread-207939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:02:42.774 [DEBUG] [Thread-207939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:02:42.775 [DEBUG] [Thread-207939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:02:42.815 [DEBUG] [Thread-207939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:02:42.816 [DEBUG] [Thread-207939] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:02:42.819 [DEBUG] [Thread-207939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:02:42.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:02:42.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:02:42.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:02:42.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:02:42.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:02:42.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:02:42.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:02:42.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:02:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:02:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.626484 -999.00  +22.60  24.28     27   +2.80 1 1 1 1 1   887    0 18.80 -40.47 ----- 19.0 24.3 138.1 26.6 27.2 -29.5 26.9 -29.2 28.6 -27.6 29.2 -29.7
2026-02-15T17:02:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:02:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:02:42.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.626484
2026-02-15T17:02:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:02:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:02:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:02:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:02:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:02:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:02:30', tmtdew=22.9, humidity=21.83, cloud=0.0, wind=24.86, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:02:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:02:42.844 [DEBUG] [Thread-207939] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:02:42.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:02:42.941 [DEBUG] [Thread-207942] [transport.py] [_log()] starting thread (client mode): 0xa5741930
2026-02-15T17:02:42.942 [DEBUG] [Thread-207942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:02:42.956 [DEBUG] [Thread-207942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:02:42.956 [INFO] [Thread-207942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] client lang: <none>
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] server lang: <none>
2026-02-15T17:02:42.969 [DEBUG] [Thread-207942] [transport.py] [_log()] kex follows: False
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] Compression: none
2026-02-15T17:02:42.970 [DEBUG] [Thread-207942] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:02:43.021 [DEBUG] [Thread-207942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:02:43.021 [DEBUG] [Thread-207942] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:02:43.022 [DEBUG] [Thread-207942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:02:43.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:02:43.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:02:43.079 [DEBUG] [Thread-207942] [transport.py] [_log()] userauth is OK
2026-02-15T17:02:43.079 [DEBUG] [Thread-207942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:02:43.079 [DEBUG] [Thread-207942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:02:43.079 [DEBUG] [Thread-207942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:02:43.079 [DEBUG] [Thread-207942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:02:43.093 [INFO] [Thread-207942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:02:43.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:02:43.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:02:43.918 [DEBUG] [Thread-207942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:02:43.919 [DEBUG] [Thread-207942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:02:43.966 [DEBUG] [Thread-207942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:02:43.966 [DEBUG] [Thread-207942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:02:43.975 [DEBUG] [Thread-207942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:02:43.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:02:43.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:02:43.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:02:44.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:02:44.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:02:44.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:02:44.012 [DEBUG] [Thread-207942] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:02:55.924 [DEBUG] [Thread-207944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:02:58.603 [DEBUG] [Thread-207945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:04.032 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:04.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:10.977 [DEBUG] [Thread-207946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:14.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:03:14.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:03:14.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:03:16.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 3, 6), 22.9, 21.81, 0.0, 25.44, 22.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:03:16.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:03:06
2026-02-15T17:03:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:03:16.985 [DEBUG] [Thread-207947] [transport.py] [_log()] starting thread (client mode): 0xa2dc10c0
2026-02-15T17:03:16.985 [DEBUG] [Thread-207947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:03:17.005 [DEBUG] [Thread-207947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:03:17.006 [INFO] [Thread-207947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:03:17.008 [DEBUG] [Thread-207947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] client lang: <none>
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] server lang: <none>
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] kex follows: False
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] Compression: none
2026-02-15T17:03:17.009 [DEBUG] [Thread-207947] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:03:17.027 [DEBUG] [Thread-207947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:03:17.028 [DEBUG] [Thread-207947] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:03:17.029 [DEBUG] [Thread-207947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:03:17.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:03:17.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:03:17.030 [DEBUG] [Thread-207947] [transport.py] [_log()] userauth is OK
2026-02-15T17:03:17.031 [DEBUG] [Thread-207947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:03:17.031 [DEBUG] [Thread-207947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:03:17.031 [DEBUG] [Thread-207947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:03:17.031 [DEBUG] [Thread-207947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:03:17.053 [INFO] [Thread-207947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:03:17.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:03:17.684 [DEBUG] [Thread-207947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:03:17.685 [DEBUG] [Thread-207947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:03:17.685 [DEBUG] [Thread-207947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:03:17.726 [DEBUG] [Thread-207947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:03:17.726 [DEBUG] [Thread-207947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:03:17.729 [DEBUG] [Thread-207947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:03:17.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:03:17.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:03:17.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:03:17.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:03:17.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:03:17.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:03:17.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:03:17.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:03:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:03:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.626831 -999.00  +22.50  22.80     27   +2.70 1 1 1 1 1   887    0 18.18 -40.61 ----- 18.1 22.8 167.4 28.5 27.0 -30.3 26.9 -28.8 28.4 -28.2 29.1 -30.4
2026-02-15T17:03:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:03:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:03:17.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.626831
2026-02-15T17:03:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:03:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:03:17.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:03:17.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:03:17.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:03:17.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:03:06', tmtdew=22.9, humidity=21.81, cloud=0.0, wind=25.44, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:02:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:03:17.755 [DEBUG] [Thread-207947] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:03:17.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:03:17.863 [DEBUG] [Thread-207950] [transport.py] [_log()] starting thread (client mode): 0xa2dc27d0
2026-02-15T17:03:17.863 [DEBUG] [Thread-207950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:03:17.878 [DEBUG] [Thread-207950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:03:17.879 [INFO] [Thread-207950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:03:17.886 [DEBUG] [Thread-207950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:03:17.887 [DEBUG] [Thread-207950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:03:17.887 [DEBUG] [Thread-207950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:03:17.887 [DEBUG] [Thread-207950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] client lang: <none>
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] server lang: <none>
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] kex follows: False
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:03:17.888 [DEBUG] [Thread-207950] [transport.py] [_log()] Compression: none
2026-02-15T17:03:17.889 [DEBUG] [Thread-207950] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:03:17.946 [DEBUG] [Thread-207950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:03:17.947 [DEBUG] [Thread-207950] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:03:17.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:03:17.948 [DEBUG] [Thread-207950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:03:17.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:03:18.002 [DEBUG] [Thread-207950] [transport.py] [_log()] userauth is OK
2026-02-15T17:03:18.003 [DEBUG] [Thread-207950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:03:18.003 [DEBUG] [Thread-207950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:03:18.003 [DEBUG] [Thread-207950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:03:18.003 [DEBUG] [Thread-207950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:03:18.022 [INFO] [Thread-207950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:03:18.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:03:18.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:03:18.846 [DEBUG] [Thread-207950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:03:18.847 [DEBUG] [Thread-207950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:03:18.894 [DEBUG] [Thread-207950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:03:18.894 [DEBUG] [Thread-207950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:03:18.903 [DEBUG] [Thread-207950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:03:18.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:03:18.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:03:18.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:03:18.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:03:18.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:03:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:03:18.945 [DEBUG] [Thread-207950] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:03:26.014 [DEBUG] [Thread-207952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:41.067 [DEBUG] [Thread-207953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:48.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:03:48.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:03:48.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:03:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 3, 41), 23.7, 20.75, 0.0, 25.48, 23.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:03:50.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:03:41
2026-02-15T17:03:51.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:03:51.361 [DEBUG] [Thread-207954] [transport.py] [_log()] starting thread (client mode): 0xa2dc35e0
2026-02-15T17:03:51.362 [DEBUG] [Thread-207954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:03:51.386 [DEBUG] [Thread-207954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:03:51.387 [INFO] [Thread-207954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] client lang: <none>
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] server lang: <none>
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] kex follows: False
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:03:51.390 [DEBUG] [Thread-207954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:03:51.391 [DEBUG] [Thread-207954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:03:51.391 [DEBUG] [Thread-207954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:03:51.391 [DEBUG] [Thread-207954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:03:51.391 [DEBUG] [Thread-207954] [transport.py] [_log()] Compression: none
2026-02-15T17:03:51.391 [DEBUG] [Thread-207954] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:03:51.408 [DEBUG] [Thread-207954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:03:51.408 [DEBUG] [Thread-207954] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:03:51.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:03:51.409 [DEBUG] [Thread-207954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:03:51.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:03:51.412 [DEBUG] [Thread-207954] [transport.py] [_log()] userauth is OK
2026-02-15T17:03:51.412 [DEBUG] [Thread-207954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:03:51.412 [DEBUG] [Thread-207954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:03:51.412 [DEBUG] [Thread-207954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:03:51.413 [DEBUG] [Thread-207954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:03:51.438 [INFO] [Thread-207954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:03:51.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:03:52.086 [DEBUG] [Thread-207954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:03:52.086 [DEBUG] [Thread-207954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:03:52.086 [DEBUG] [Thread-207954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:03:52.127 [DEBUG] [Thread-207954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:03:52.127 [DEBUG] [Thread-207954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:03:52.130 [DEBUG] [Thread-207954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:03:52.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:03:52.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:03:52.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:03:52.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:03:52.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:03:52.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:03:52.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:03:52.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:03:52.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:03:52.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.627179 -999.00  +22.20  23.28     27   +2.70 1 1 1 1 1   887    0 18.72 -40.54 ----- 16.8 23.3 150.3 29.4 27.0 -29.6 26.8 -29.5 28.4 -27.5 29.1 -29.4
2026-02-15T17:03:52.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:03:52.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:03:52.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.627179
2026-02-15T17:03:52.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:03:52.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:03:52.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:03:52.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:03:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:03:52.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:03:41', tmtdew=23.7, humidity=20.75, cloud=0.0, wind=25.48, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:03:08.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:03:52.157 [DEBUG] [Thread-207954] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:03:52.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:03:52.253 [DEBUG] [Thread-207957] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f60
2026-02-15T17:03:52.253 [DEBUG] [Thread-207957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:03:52.268 [DEBUG] [Thread-207957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:03:52.269 [INFO] [Thread-207957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] client lang: <none>
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] server lang: <none>
2026-02-15T17:03:52.276 [DEBUG] [Thread-207957] [transport.py] [_log()] kex follows: False
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] Compression: none
2026-02-15T17:03:52.277 [DEBUG] [Thread-207957] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:03:52.333 [DEBUG] [Thread-207957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:03:52.334 [DEBUG] [Thread-207957] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:03:52.334 [DEBUG] [Thread-207957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:03:52.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:03:52.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:03:52.390 [DEBUG] [Thread-207957] [transport.py] [_log()] userauth is OK
2026-02-15T17:03:52.390 [DEBUG] [Thread-207957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:03:52.390 [DEBUG] [Thread-207957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:03:52.390 [DEBUG] [Thread-207957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:03:52.391 [DEBUG] [Thread-207957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:03:52.409 [INFO] [Thread-207957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:03:52.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:03:52.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:03:53.234 [DEBUG] [Thread-207957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:03:53.234 [DEBUG] [Thread-207957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:03:53.282 [DEBUG] [Thread-207957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:03:53.282 [DEBUG] [Thread-207957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:03:53.291 [DEBUG] [Thread-207957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:03:53.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:03:53.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:03:53.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:03:53.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:03:53.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:03:53.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:03:53.324 [DEBUG] [Thread-207957] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:03:56.104 [DEBUG] [Thread-207959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:03:58.637 [DEBUG] [Thread-207960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:04.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:04.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:11.158 [DEBUG] [Thread-207961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:23.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:04:23.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:04:23.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:04:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 3, 41), 23.7, 20.75, 0.0, 25.48, 23.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:04:25.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:03:41
2026-02-15T17:04:25.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:04:26.078 [DEBUG] [Thread-207962] [transport.py] [_log()] starting thread (client mode): 0xa5743730
2026-02-15T17:04:26.078 [DEBUG] [Thread-207962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:04:26.098 [DEBUG] [Thread-207962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:04:26.098 [INFO] [Thread-207962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:04:26.102 [DEBUG] [Thread-207962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:04:26.102 [DEBUG] [Thread-207962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:04:26.102 [DEBUG] [Thread-207962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:04:26.102 [DEBUG] [Thread-207962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:04:26.102 [DEBUG] [Thread-207962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] client lang: <none>
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] server lang: <none>
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] kex follows: False
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] Compression: none
2026-02-15T17:04:26.103 [DEBUG] [Thread-207962] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:04:26.123 [DEBUG] [Thread-207962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:04:26.124 [DEBUG] [Thread-207962] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:04:26.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:04:26.125 [DEBUG] [Thread-207962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:04:26.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:04:26.127 [DEBUG] [Thread-207962] [transport.py] [_log()] userauth is OK
2026-02-15T17:04:26.127 [DEBUG] [Thread-207962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:04:26.127 [DEBUG] [Thread-207962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:04:26.127 [DEBUG] [Thread-207962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:04:26.127 [DEBUG] [Thread-207962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:04:26.163 [INFO] [Thread-207962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:04:26.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:04:26.192 [DEBUG] [Thread-207964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:26.755 [DEBUG] [Thread-207962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:04:26.755 [DEBUG] [Thread-207962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:04:26.755 [DEBUG] [Thread-207962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:04:26.796 [DEBUG] [Thread-207962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:04:26.796 [DEBUG] [Thread-207962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:04:26.798 [DEBUG] [Thread-207962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:04:26.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:04:26.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:04:26.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:04:26.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:04:26.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:04:26.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:04:26.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:04:26.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.627873 -999.00  +22.20  16.42     27   +2.70 1 1 1 1 1   887    0 18.32 -36.54 ----- 17.8 16.4 158.0 25.4 26.9 -30.1 26.7 -28.8 28.3 -28.6 29.0 -30.2
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.627873
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:04:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:03:41', tmtdew=23.7, humidity=20.75, cloud=0.0, wind=25.48, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:04:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:04:26.819 [DEBUG] [Thread-207962] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:04:26.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:04:26.903 [DEBUG] [Thread-207966] [transport.py] [_log()] starting thread (client mode): 0xa2d4fd60
2026-02-15T17:04:26.903 [DEBUG] [Thread-207966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:04:26.918 [DEBUG] [Thread-207966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:04:26.918 [INFO] [Thread-207966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] client lang: <none>
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] server lang: <none>
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] kex follows: False
2026-02-15T17:04:26.926 [DEBUG] [Thread-207966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:04:26.927 [DEBUG] [Thread-207966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:04:26.927 [DEBUG] [Thread-207966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:04:26.927 [DEBUG] [Thread-207966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:04:26.927 [DEBUG] [Thread-207966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:04:26.927 [DEBUG] [Thread-207966] [transport.py] [_log()] Compression: none
2026-02-15T17:04:26.927 [DEBUG] [Thread-207966] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:04:26.985 [DEBUG] [Thread-207966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:04:26.986 [DEBUG] [Thread-207966] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:04:26.986 [DEBUG] [Thread-207966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:04:26.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:04:26.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:04:27.042 [DEBUG] [Thread-207966] [transport.py] [_log()] userauth is OK
2026-02-15T17:04:27.043 [DEBUG] [Thread-207966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:04:27.043 [DEBUG] [Thread-207966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:04:27.043 [DEBUG] [Thread-207966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:04:27.043 [DEBUG] [Thread-207966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:04:27.062 [INFO] [Thread-207966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:04:27.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:04:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:04:27.944 [DEBUG] [Thread-207966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:04:27.944 [DEBUG] [Thread-207966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:04:27.991 [DEBUG] [Thread-207966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:04:27.991 [DEBUG] [Thread-207966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:04:28.004 [DEBUG] [Thread-207966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:04:28.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:04:28.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:04:28.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:04:28.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:04:28.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:04:28.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:04:28.043 [DEBUG] [Thread-207966] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:04:41.228 [DEBUG] [Thread-207968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:56.279 [DEBUG] [Thread-207969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:58.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:04:58.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:04:58.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:04:58.670 [DEBUG] [Thread-207970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:04:59.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 4, 16), 22.78, 21.91, 0.0, 27.6, 22.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:04:59.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:04:16
2026-02-15T17:05:00.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:05:00.411 [DEBUG] [Thread-207971] [transport.py] [_log()] starting thread (client mode): 0xa2dc2620
2026-02-15T17:05:00.411 [DEBUG] [Thread-207971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:05:00.433 [DEBUG] [Thread-207971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:05:00.433 [INFO] [Thread-207971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] client lang: <none>
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] server lang: <none>
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] kex follows: False
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:05:00.436 [DEBUG] [Thread-207971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:05:00.437 [DEBUG] [Thread-207971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:05:00.437 [DEBUG] [Thread-207971] [transport.py] [_log()] Compression: none
2026-02-15T17:05:00.437 [DEBUG] [Thread-207971] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:05:00.454 [DEBUG] [Thread-207971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:05:00.454 [DEBUG] [Thread-207971] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:05:00.455 [DEBUG] [Thread-207971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:05:00.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:05:00.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:05:00.457 [DEBUG] [Thread-207971] [transport.py] [_log()] userauth is OK
2026-02-15T17:05:00.458 [DEBUG] [Thread-207971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:05:00.458 [DEBUG] [Thread-207971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:05:00.458 [DEBUG] [Thread-207971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:05:00.458 [DEBUG] [Thread-207971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:05:00.481 [INFO] [Thread-207971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:05:00.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:05:01.123 [DEBUG] [Thread-207971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:05:01.124 [DEBUG] [Thread-207971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:05:01.124 [DEBUG] [Thread-207971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:05:01.164 [DEBUG] [Thread-207971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:05:01.164 [DEBUG] [Thread-207971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:05:01.167 [DEBUG] [Thread-207971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:05:01.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:05:01.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:05:01.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:05:01.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:05:01.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:05:01.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:05:01.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:05:01.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:05:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:05:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.628220 -999.00  +22.30  24.31     27   +2.70 1 1 1 1 1   887    0 18.21 -34.50 ----- 19.7 24.3 172.8 28.1 26.9 -29.9 26.4 -28.6 28.3 -27.8 29.0 -29.5
2026-02-15T17:05:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:05:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:05:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.628220
2026-02-15T17:05:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:05:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:05:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:05:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:05:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:05:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:04:16', tmtdew=22.78, humidity=21.91, cloud=0.0, wind=27.6, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:04:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:05:01.195 [DEBUG] [Thread-207971] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:05:01.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:05:01.287 [DEBUG] [Thread-207974] [transport.py] [_log()] starting thread (client mode): 0xa2dc10f0
2026-02-15T17:05:01.287 [DEBUG] [Thread-207974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:05:01.301 [DEBUG] [Thread-207974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:05:01.301 [INFO] [Thread-207974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:05:01.309 [DEBUG] [Thread-207974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:05:01.309 [DEBUG] [Thread-207974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] client lang: <none>
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] server lang: <none>
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] kex follows: False
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:05:01.310 [DEBUG] [Thread-207974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:05:01.311 [DEBUG] [Thread-207974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:05:01.311 [DEBUG] [Thread-207974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:05:01.311 [DEBUG] [Thread-207974] [transport.py] [_log()] Compression: none
2026-02-15T17:05:01.311 [DEBUG] [Thread-207974] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:05:01.366 [DEBUG] [Thread-207974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:05:01.367 [DEBUG] [Thread-207974] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:05:01.367 [DEBUG] [Thread-207974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:05:01.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:05:01.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:05:01.422 [DEBUG] [Thread-207974] [transport.py] [_log()] userauth is OK
2026-02-15T17:05:01.423 [DEBUG] [Thread-207974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:05:01.423 [DEBUG] [Thread-207974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:05:01.423 [DEBUG] [Thread-207974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:05:01.423 [DEBUG] [Thread-207974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:05:01.441 [INFO] [Thread-207974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:05:01.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:05:01.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:05:02.270 [DEBUG] [Thread-207974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:05:02.270 [DEBUG] [Thread-207974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:05:02.318 [DEBUG] [Thread-207974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:05:02.318 [DEBUG] [Thread-207974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:05:02.326 [DEBUG] [Thread-207974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:05:02.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:05:02.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:05:02.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:05:02.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:05:02.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:05:02.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:05:02.357 [DEBUG] [Thread-207974] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:05:04.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:05:04.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:05:11.320 [DEBUG] [Thread-207976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:05:26.371 [DEBUG] [Thread-207977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:05:32.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:05:32.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:05:32.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:05:34.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 4, 53), 22.84, 21.94, 0.0, 31.46, 22.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:05:34.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:04:53
2026-02-15T17:05:34.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:05:34.842 [DEBUG] [Thread-207978] [transport.py] [_log()] starting thread (client mode): 0xa2dc1870
2026-02-15T17:05:34.843 [DEBUG] [Thread-207978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:05:34.864 [DEBUG] [Thread-207978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:05:34.864 [INFO] [Thread-207978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:34.867 [DEBUG] [Thread-207978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] client lang: <none>
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] server lang: <none>
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] kex follows: False
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] Compression: none
2026-02-15T17:05:34.868 [DEBUG] [Thread-207978] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:05:34.887 [DEBUG] [Thread-207978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:05:34.887 [DEBUG] [Thread-207978] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:05:34.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:05:34.889 [DEBUG] [Thread-207978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:05:34.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:05:34.891 [DEBUG] [Thread-207978] [transport.py] [_log()] userauth is OK
2026-02-15T17:05:34.891 [DEBUG] [Thread-207978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:05:34.892 [DEBUG] [Thread-207978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:05:34.892 [DEBUG] [Thread-207978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:05:34.892 [DEBUG] [Thread-207978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:05:34.912 [INFO] [Thread-207978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:05:34.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:05:38.646 [DEBUG] [Thread-207978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:05:38.646 [DEBUG] [Thread-207978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:05:38.647 [DEBUG] [Thread-207978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:05:38.687 [DEBUG] [Thread-207978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:05:38.687 [DEBUG] [Thread-207978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:05:38.690 [DEBUG] [Thread-207978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:05:38.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:05:38.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:05:38.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:05:38.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:05:38.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:05:38.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:05:38.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:05:38.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:05:38.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:05:38.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.628220 -999.00  +22.30  24.31     27   +2.70 1 1 1 1 1   887    0 18.21 -34.50 ----- 19.7 24.3 172.8 28.1 26.9 -29.9 26.4 -28.6 28.3 -27.8 29.0 -29.5
2026-02-15T17:05:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:05:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:05:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.628220
2026-02-15T17:05:38.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:05:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:05:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:05:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:05:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:05:38.717 [DEBUG] [Thread-207978] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:05:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:04:53', tmtdew=22.84, humidity=21.94, cloud=0.0, wind=31.46, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:04:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:05:38.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:05:38.825 [DEBUG] [Thread-207981] [transport.py] [_log()] starting thread (client mode): 0xa2dc27d0
2026-02-15T17:05:38.825 [DEBUG] [Thread-207981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:05:38.839 [DEBUG] [Thread-207981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:05:38.839 [INFO] [Thread-207981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:05:38.847 [DEBUG] [Thread-207981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:05:38.847 [DEBUG] [Thread-207981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:05:38.847 [DEBUG] [Thread-207981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:05:38.847 [DEBUG] [Thread-207981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:38.847 [DEBUG] [Thread-207981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:05:38.847 [DEBUG] [Thread-207981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] client lang: <none>
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] server lang: <none>
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] kex follows: False
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:05:38.848 [DEBUG] [Thread-207981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:05:38.849 [DEBUG] [Thread-207981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:05:38.849 [DEBUG] [Thread-207981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:05:38.849 [DEBUG] [Thread-207981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:05:38.849 [DEBUG] [Thread-207981] [transport.py] [_log()] Compression: none
2026-02-15T17:05:38.849 [DEBUG] [Thread-207981] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:05:38.907 [DEBUG] [Thread-207981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:05:38.908 [DEBUG] [Thread-207981] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:05:38.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:05:38.909 [DEBUG] [Thread-207981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:05:38.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:05:38.963 [DEBUG] [Thread-207981] [transport.py] [_log()] userauth is OK
2026-02-15T17:05:38.963 [DEBUG] [Thread-207981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:05:38.963 [DEBUG] [Thread-207981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:05:38.963 [DEBUG] [Thread-207981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:05:38.963 [DEBUG] [Thread-207981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:05:38.982 [INFO] [Thread-207981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:05:38.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:05:38.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:05:39.793 [DEBUG] [Thread-207981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:05:39.793 [DEBUG] [Thread-207981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:05:39.842 [DEBUG] [Thread-207981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:05:39.842 [DEBUG] [Thread-207981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:05:39.856 [DEBUG] [Thread-207981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:05:39.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:05:39.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:05:39.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:05:39.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:05:39.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:05:39.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:05:39.892 [DEBUG] [Thread-207981] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:05:41.410 [DEBUG] [Thread-207983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:05:56.471 [DEBUG] [Thread-207984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:05:58.703 [DEBUG] [Thread-207985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:04.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:04.461 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:09.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:06:09.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:06:09.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:06:11.507 [DEBUG] [Thread-207986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 6, 3), 22.57, 22.31, 0.0, 29.85, 22.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:06:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:06:03
2026-02-15T17:06:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:06:12.290 [DEBUG] [Thread-207987] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b50
2026-02-15T17:06:12.290 [DEBUG] [Thread-207987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:06:12.312 [DEBUG] [Thread-207987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:06:12.312 [INFO] [Thread-207987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] client lang: <none>
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] server lang: <none>
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] kex follows: False
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] Compression: none
2026-02-15T17:06:12.315 [DEBUG] [Thread-207987] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:06:12.333 [DEBUG] [Thread-207987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:06:12.334 [DEBUG] [Thread-207987] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:06:12.335 [DEBUG] [Thread-207987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:06:12.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:06:12.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:06:12.336 [DEBUG] [Thread-207987] [transport.py] [_log()] userauth is OK
2026-02-15T17:06:12.337 [DEBUG] [Thread-207987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:06:12.337 [DEBUG] [Thread-207987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:06:12.337 [DEBUG] [Thread-207987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:06:12.337 [DEBUG] [Thread-207987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:06:12.361 [INFO] [Thread-207987] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:06:12.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:06:12.959 [DEBUG] [Thread-207987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:06:12.959 [DEBUG] [Thread-207987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:06:12.960 [DEBUG] [Thread-207987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:06:13.001 [DEBUG] [Thread-207987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:06:13.001 [DEBUG] [Thread-207987] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:06:13.004 [DEBUG] [Thread-207987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:06:13.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:06:13.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:06:13.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:06:13.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:06:13.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:06:13.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.628567 -999.00  +22.50  11.20     27   +2.80 1 1 1 1 1   887    0 19.07 -34.70 ----- 25.6 11.2 145.7 22.0 26.9 -30.1 26.5 -32.4 28.2 -27.9 29.0 -29.7
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:06:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.628567
2026-02-15T17:06:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:06:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:06:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:06:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:06:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:06:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:06:03', tmtdew=22.57, humidity=22.31, cloud=0.0, wind=29.85, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:05:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:06:13.024 [DEBUG] [Thread-207987] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:06:13.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:06:13.117 [DEBUG] [Thread-207990] [transport.py] [_log()] starting thread (client mode): 0xa2d55510
2026-02-15T17:06:13.117 [DEBUG] [Thread-207990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:06:13.137 [DEBUG] [Thread-207990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:06:13.138 [INFO] [Thread-207990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:06:13.146 [DEBUG] [Thread-207990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:06:13.146 [DEBUG] [Thread-207990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:06:13.146 [DEBUG] [Thread-207990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] client lang: <none>
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] server lang: <none>
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] kex follows: False
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] Compression: none
2026-02-15T17:06:13.147 [DEBUG] [Thread-207990] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:06:13.200 [DEBUG] [Thread-207990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:06:13.201 [DEBUG] [Thread-207990] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:06:13.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:06:13.201 [DEBUG] [Thread-207990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:06:13.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:06:13.265 [DEBUG] [Thread-207990] [transport.py] [_log()] userauth is OK
2026-02-15T17:06:13.265 [DEBUG] [Thread-207990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:06:13.265 [DEBUG] [Thread-207990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:06:13.265 [DEBUG] [Thread-207990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:06:13.265 [DEBUG] [Thread-207990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:06:13.289 [INFO] [Thread-207990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:06:13.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:06:13.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:06:14.145 [DEBUG] [Thread-207990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:06:14.145 [DEBUG] [Thread-207990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:06:14.193 [DEBUG] [Thread-207990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:06:14.193 [DEBUG] [Thread-207990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:06:14.202 [DEBUG] [Thread-207990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:06:14.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:06:14.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:06:14.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:06:14.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:06:14.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:06:14.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:06:14.241 [DEBUG] [Thread-207990] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:06:26.544 [DEBUG] [Thread-207992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:41.595 [DEBUG] [Thread-207993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:44.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:06:44.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:06:44.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-02-15T17:06:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 6, 38), 22.92, 21.81, 0.0, 26.11, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:06:46.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:06:38
2026-02-15T17:06:46.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:06:46.613 [DEBUG] [Thread-207994] [transport.py] [_log()] starting thread (client mode): 0xa2d57160
2026-02-15T17:06:46.613 [DEBUG] [Thread-207994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:06:46.634 [DEBUG] [Thread-207994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:06:46.634 [INFO] [Thread-207994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] client lang: <none>
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] server lang: <none>
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] kex follows: False
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] Compression: none
2026-02-15T17:06:46.637 [DEBUG] [Thread-207994] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:06:46.645 [DEBUG] [Thread-207994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:06:46.645 [DEBUG] [Thread-207994] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:06:46.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:06:46.646 [DEBUG] [Thread-207994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:06:46.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:06:46.647 [DEBUG] [Thread-207994] [transport.py] [_log()] userauth is OK
2026-02-15T17:06:46.647 [DEBUG] [Thread-207994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:06:46.647 [DEBUG] [Thread-207994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:06:46.647 [DEBUG] [Thread-207994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:06:46.647 [DEBUG] [Thread-207994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:06:46.664 [INFO] [Thread-207994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:06:46.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:06:47.242 [DEBUG] [Thread-207994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:06:47.242 [DEBUG] [Thread-207994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:06:47.243 [DEBUG] [Thread-207994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:06:47.283 [DEBUG] [Thread-207994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:06:47.284 [DEBUG] [Thread-207994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:06:47.287 [DEBUG] [Thread-207994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:06:47.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:06:47.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:06:47.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:06:47.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:06:47.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:06:47.313 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:06:47.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:06:47.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:06:47.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:06:47.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.629609 -999.00  +21.80  22.60     28   +2.60 1 1 1 1 1   887    0 18.54 -31.79 ----- 16.5 22.6 152.6 27.7 26.6 -30.4 26.5 -28.5 28.1 -28.6 28.7 -31.4
2026-02-15T17:06:47.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:06:47.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:06:47.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.629609
2026-02-15T17:06:47.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:06:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:06:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:06:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:06:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:06:47.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:06:38', tmtdew=22.92, humidity=21.81, cloud=0.0, wind=26.11, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:06:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:06:47.316 [DEBUG] [Thread-207994] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:06:47.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:06:47.409 [DEBUG] [Thread-207997] [transport.py] [_log()] starting thread (client mode): 0xa2d57220
2026-02-15T17:06:47.409 [DEBUG] [Thread-207997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:06:47.424 [DEBUG] [Thread-207997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:06:47.424 [INFO] [Thread-207997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] client lang: <none>
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] server lang: <none>
2026-02-15T17:06:47.432 [DEBUG] [Thread-207997] [transport.py] [_log()] kex follows: False
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] Compression: none
2026-02-15T17:06:47.433 [DEBUG] [Thread-207997] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:06:47.491 [DEBUG] [Thread-207997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:06:47.491 [DEBUG] [Thread-207997] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:06:47.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:06:47.492 [DEBUG] [Thread-207997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:06:47.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:06:47.550 [DEBUG] [Thread-207997] [transport.py] [_log()] userauth is OK
2026-02-15T17:06:47.551 [DEBUG] [Thread-207997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:06:47.551 [DEBUG] [Thread-207997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:06:47.551 [DEBUG] [Thread-207997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:06:47.551 [DEBUG] [Thread-207997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:06:47.570 [INFO] [Thread-207997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:06:47.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:06:47.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:06:48.438 [DEBUG] [Thread-207997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:06:48.438 [DEBUG] [Thread-207997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:06:48.486 [DEBUG] [Thread-207997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:06:48.487 [DEBUG] [Thread-207997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:06:48.495 [DEBUG] [Thread-207997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:06:48.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:06:48.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:06:48.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:06:48.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:06:48.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:06:48.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:06:48.532 [DEBUG] [Thread-207997] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:06:56.631 [DEBUG] [Thread-207999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:06:58.736 [DEBUG] [Thread-208000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:04.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:04.603 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:11.686 [DEBUG] [Thread-208001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:18.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:07:18.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:07:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:07:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 6, 38), 22.92, 21.81, 0.0, 26.11, 22.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:07:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:06:38
2026-02-15T17:07:20.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:07:21.000 [DEBUG] [Thread-208002] [transport.py] [_log()] starting thread (client mode): 0xa2d54100
2026-02-15T17:07:21.000 [DEBUG] [Thread-208002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:07:21.020 [DEBUG] [Thread-208002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:07:21.020 [INFO] [Thread-208002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] client lang: <none>
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] server lang: <none>
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] kex follows: False
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:07:21.023 [DEBUG] [Thread-208002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:07:21.024 [DEBUG] [Thread-208002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:07:21.024 [DEBUG] [Thread-208002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:07:21.024 [DEBUG] [Thread-208002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:07:21.024 [DEBUG] [Thread-208002] [transport.py] [_log()] Compression: none
2026-02-15T17:07:21.024 [DEBUG] [Thread-208002] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:07:21.042 [DEBUG] [Thread-208002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:07:21.042 [DEBUG] [Thread-208002] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:07:21.043 [DEBUG] [Thread-208002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:07:21.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:07:21.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:07:21.045 [DEBUG] [Thread-208002] [transport.py] [_log()] userauth is OK
2026-02-15T17:07:21.045 [DEBUG] [Thread-208002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:07:21.045 [DEBUG] [Thread-208002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:07:21.045 [DEBUG] [Thread-208002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:07:21.045 [DEBUG] [Thread-208002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:07:21.069 [INFO] [Thread-208002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:07:21.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:07:21.702 [DEBUG] [Thread-208002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:07:21.703 [DEBUG] [Thread-208002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:07:21.703 [DEBUG] [Thread-208002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:07:21.743 [DEBUG] [Thread-208002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:07:21.743 [DEBUG] [Thread-208002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:07:21.746 [DEBUG] [Thread-208002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:07:21.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:07:21.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:07:21.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:07:21.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:07:21.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:07:21.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:07:21.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:07:21.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:07:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:07:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.629956 -999.00  +21.80  20.22     28   +2.60 1 1 1 1 1   887    0 18.32 -33.17 ----- 19.5 20.2 140.7 29.6 26.5 -29.4 26.5 -28.9 28.1 -27.3 28.7 -29.7
2026-02-15T17:07:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:07:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:07:21.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.629956
2026-02-15T17:07:21.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:07:21.771 [DEBUG] [Thread-208002] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:07:21.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:07:21.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:07:21.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:07:21.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:07:21.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:06:38', tmtdew=22.92, humidity=21.81, cloud=0.0, wind=26.11, temperature=22.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:07:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:07:21.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:07:21.872 [DEBUG] [Thread-208005] [transport.py] [_log()] starting thread (client mode): 0xa2d54a60
2026-02-15T17:07:21.873 [DEBUG] [Thread-208005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:07:21.887 [DEBUG] [Thread-208005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:07:21.888 [INFO] [Thread-208005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:07:21.895 [DEBUG] [Thread-208005] [transport.py] [_log()] client lang: <none>
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] server lang: <none>
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] kex follows: False
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] Compression: none
2026-02-15T17:07:21.896 [DEBUG] [Thread-208005] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:07:21.955 [DEBUG] [Thread-208005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:07:21.956 [DEBUG] [Thread-208005] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:07:21.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:07:21.957 [DEBUG] [Thread-208005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:07:21.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:07:22.014 [DEBUG] [Thread-208005] [transport.py] [_log()] userauth is OK
2026-02-15T17:07:22.015 [DEBUG] [Thread-208005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:07:22.015 [DEBUG] [Thread-208005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:07:22.015 [DEBUG] [Thread-208005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:07:22.015 [DEBUG] [Thread-208005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:07:22.033 [INFO] [Thread-208005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:07:22.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:07:22.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:07:22.862 [DEBUG] [Thread-208005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:07:22.862 [DEBUG] [Thread-208005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:07:22.911 [DEBUG] [Thread-208005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:07:22.911 [DEBUG] [Thread-208005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:07:22.919 [DEBUG] [Thread-208005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:07:22.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:07:22.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-02-15T17:07:22.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:07:22.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:07:22.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:07:22.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:07:22.952 [DEBUG] [Thread-208005] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:07:26.726 [DEBUG] [Thread-208007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:41.778 [DEBUG] [Thread-208008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:52.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:07:52.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:07:52.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:07:55.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 7, 13), 22.54, 22.53, 0.0, 25.87, 22.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:07:55.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:07:13
2026-02-15T17:07:55.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:07:55.556 [DEBUG] [Thread-208009] [transport.py] [_log()] starting thread (client mode): 0xa2d54c10
2026-02-15T17:07:55.556 [DEBUG] [Thread-208009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:07:55.576 [DEBUG] [Thread-208009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:07:55.576 [INFO] [Thread-208009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:07:55.579 [DEBUG] [Thread-208009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:07:55.579 [DEBUG] [Thread-208009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:07:55.579 [DEBUG] [Thread-208009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] client lang: <none>
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] server lang: <none>
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] kex follows: False
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] Compression: none
2026-02-15T17:07:55.580 [DEBUG] [Thread-208009] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:07:55.596 [DEBUG] [Thread-208009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:07:55.596 [DEBUG] [Thread-208009] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:07:55.597 [DEBUG] [Thread-208009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:07:55.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:07:55.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:07:55.599 [DEBUG] [Thread-208009] [transport.py] [_log()] userauth is OK
2026-02-15T17:07:55.599 [DEBUG] [Thread-208009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:07:55.599 [DEBUG] [Thread-208009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:07:55.599 [DEBUG] [Thread-208009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:07:55.599 [DEBUG] [Thread-208009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:07:55.618 [INFO] [Thread-208009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:07:55.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:07:56.195 [DEBUG] [Thread-208009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:07:56.195 [DEBUG] [Thread-208009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:07:56.196 [DEBUG] [Thread-208009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:07:56.237 [DEBUG] [Thread-208009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:07:56.237 [DEBUG] [Thread-208009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:07:56.240 [DEBUG] [Thread-208009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:07:56.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:07:56.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:07:56.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:07:56.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:07:56.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:07:56.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:07:56.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:07:56.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:07:56.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:07:56.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.630304 -999.00  +21.70  19.54     28   +2.50 1 1 1 1 1   887    0 18.52 -33.29 ----- 22.6 19.5 156.2 27.5 26.5 -30.0 26.4 -28.9 28.0 -28.4 28.6 -30.1
2026-02-15T17:07:56.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:07:56.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:07:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.630304
2026-02-15T17:07:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:07:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:07:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:07:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:07:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:07:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:07:13', tmtdew=22.54, humidity=22.53, cloud=0.0, wind=25.87, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:07:38.266', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:07:56.269 [DEBUG] [Thread-208009] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:07:56.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:07:56.365 [DEBUG] [Thread-208012] [transport.py] [_log()] starting thread (client mode): 0xa2d54d60
2026-02-15T17:07:56.365 [DEBUG] [Thread-208012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:07:56.380 [DEBUG] [Thread-208012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:07:56.380 [INFO] [Thread-208012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:07:56.387 [DEBUG] [Thread-208012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:07:56.387 [DEBUG] [Thread-208012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:07:56.387 [DEBUG] [Thread-208012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:07:56.387 [DEBUG] [Thread-208012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] client lang: <none>
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] server lang: <none>
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] kex follows: False
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:07:56.388 [DEBUG] [Thread-208012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:07:56.389 [DEBUG] [Thread-208012] [transport.py] [_log()] Compression: none
2026-02-15T17:07:56.389 [DEBUG] [Thread-208012] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:07:56.446 [DEBUG] [Thread-208012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:07:56.447 [DEBUG] [Thread-208012] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:07:56.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:07:56.448 [DEBUG] [Thread-208012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:07:56.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:07:56.502 [DEBUG] [Thread-208012] [transport.py] [_log()] userauth is OK
2026-02-15T17:07:56.502 [DEBUG] [Thread-208012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:07:56.503 [DEBUG] [Thread-208012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:07:56.503 [DEBUG] [Thread-208012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:07:56.503 [DEBUG] [Thread-208012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:07:56.521 [INFO] [Thread-208012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:07:56.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:07:56.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:07:56.815 [DEBUG] [Thread-208014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:07:57.350 [DEBUG] [Thread-208012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:07:57.350 [DEBUG] [Thread-208012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:07:57.399 [DEBUG] [Thread-208012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:07:57.399 [DEBUG] [Thread-208012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:07:57.408 [DEBUG] [Thread-208012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:07:57.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:07:57.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:07:57.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:07:57.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:07:57.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:07:57.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:07:57.444 [DEBUG] [Thread-208012] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:07:58.778 [DEBUG] [Thread-208015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:04.743 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:04.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:11.865 [DEBUG] [Thread-208016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:26.900 [DEBUG] [Thread-208017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:27.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:08:27.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:08:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:08:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 7, 49), 22.72, 21.99, 0.0, 26.93, 22.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:08:30.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:07:49
2026-02-15T17:08:30.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:08:30.618 [DEBUG] [Thread-208018] [transport.py] [_log()] starting thread (client mode): 0xa2d554b0
2026-02-15T17:08:30.618 [DEBUG] [Thread-208018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:08:30.638 [DEBUG] [Thread-208018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:08:30.638 [INFO] [Thread-208018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] client lang: <none>
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] server lang: <none>
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] kex follows: False
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] Compression: none
2026-02-15T17:08:30.641 [DEBUG] [Thread-208018] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:08:30.656 [DEBUG] [Thread-208018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:08:30.657 [DEBUG] [Thread-208018] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:08:30.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:08:30.658 [DEBUG] [Thread-208018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:08:30.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:08:30.660 [DEBUG] [Thread-208018] [transport.py] [_log()] userauth is OK
2026-02-15T17:08:30.660 [DEBUG] [Thread-208018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:08:30.660 [DEBUG] [Thread-208018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:08:30.660 [DEBUG] [Thread-208018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:08:30.660 [DEBUG] [Thread-208018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:08:30.675 [INFO] [Thread-208018] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:08:30.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:08:31.259 [DEBUG] [Thread-208018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:08:31.259 [DEBUG] [Thread-208018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:08:31.259 [DEBUG] [Thread-208018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:08:31.300 [DEBUG] [Thread-208018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:08:31.300 [DEBUG] [Thread-208018] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:08:31.302 [DEBUG] [Thread-208018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:08:31.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:08:31.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:08:31.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:08:31.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:08:31.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:08:31.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:08:31.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:08:31.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:08:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:08:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.630651 -999.00  +21.80  18.10     28   +2.70 1 1 1 1 1   887    0 18.55 -32.86 ----- 20.0 18.1 168.5 25.2 26.5 -29.4 26.4 -28.1 28.0 -27.9 28.6 -30.0
2026-02-15T17:08:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:08:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:08:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.630651
2026-02-15T17:08:31.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:08:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:08:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:08:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:08:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:08:31.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:07:49', tmtdew=22.72, humidity=21.99, cloud=0.0, wind=26.93, temperature=22.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:08:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:08:31.317 [DEBUG] [Thread-208018] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:08:31.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:08:31.415 [DEBUG] [Thread-208021] [transport.py] [_log()] starting thread (client mode): 0xa2d567a0
2026-02-15T17:08:31.415 [DEBUG] [Thread-208021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:08:31.433 [DEBUG] [Thread-208021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:08:31.433 [INFO] [Thread-208021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:08:31.444 [DEBUG] [Thread-208021] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:08:31.444 [DEBUG] [Thread-208021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:08:31.444 [DEBUG] [Thread-208021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:08:31.444 [DEBUG] [Thread-208021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] client lang: <none>
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] server lang: <none>
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] kex follows: False
2026-02-15T17:08:31.445 [DEBUG] [Thread-208021] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:08:31.446 [DEBUG] [Thread-208021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:08:31.446 [DEBUG] [Thread-208021] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:08:31.446 [DEBUG] [Thread-208021] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:08:31.446 [DEBUG] [Thread-208021] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:08:31.446 [DEBUG] [Thread-208021] [transport.py] [_log()] Compression: none
2026-02-15T17:08:31.446 [DEBUG] [Thread-208021] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:08:31.504 [DEBUG] [Thread-208021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:08:31.505 [DEBUG] [Thread-208021] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:08:31.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:08:31.506 [DEBUG] [Thread-208021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:08:31.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:08:31.562 [DEBUG] [Thread-208021] [transport.py] [_log()] userauth is OK
2026-02-15T17:08:31.562 [DEBUG] [Thread-208021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:08:31.562 [DEBUG] [Thread-208021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:08:31.562 [DEBUG] [Thread-208021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:08:31.562 [DEBUG] [Thread-208021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:08:31.584 [INFO] [Thread-208021] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:08:31.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:08:31.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:08:32.478 [DEBUG] [Thread-208021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:08:32.478 [DEBUG] [Thread-208021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:08:32.525 [DEBUG] [Thread-208021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:08:32.525 [DEBUG] [Thread-208021] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:08:32.534 [DEBUG] [Thread-208021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:08:32.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:08:32.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:08:32.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:08:32.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:08:32.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:08:32.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:08:32.569 [DEBUG] [Thread-208021] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:08:41.933 [DEBUG] [Thread-208023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:56.984 [DEBUG] [Thread-208024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:08:58.822 [DEBUG] [Thread-208025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:09:02.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:09:02.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:09:04.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:04.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 8, 24), 22.84, 21.84, 0.0, 26.34, 22.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:09:05.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:08:24
2026-02-15T17:09:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:09:05.665 [DEBUG] [Thread-208026] [transport.py] [_log()] starting thread (client mode): 0xa2d56770
2026-02-15T17:09:05.665 [DEBUG] [Thread-208026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:09:05.685 [DEBUG] [Thread-208026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:09:05.685 [INFO] [Thread-208026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:09:05.687 [DEBUG] [Thread-208026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] client lang: <none>
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] server lang: <none>
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] kex follows: False
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:09:05.688 [DEBUG] [Thread-208026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:09:05.689 [DEBUG] [Thread-208026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:09:05.689 [DEBUG] [Thread-208026] [transport.py] [_log()] Compression: none
2026-02-15T17:09:05.689 [DEBUG] [Thread-208026] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:09:05.707 [DEBUG] [Thread-208026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:09:05.708 [DEBUG] [Thread-208026] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:09:05.709 [DEBUG] [Thread-208026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:09:05.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:09:05.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:09:05.711 [DEBUG] [Thread-208026] [transport.py] [_log()] userauth is OK
2026-02-15T17:09:05.711 [DEBUG] [Thread-208026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:09:05.711 [DEBUG] [Thread-208026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:09:05.711 [DEBUG] [Thread-208026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:09:05.712 [DEBUG] [Thread-208026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:09:05.737 [INFO] [Thread-208026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:09:05.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:09:06.381 [DEBUG] [Thread-208026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:09:06.382 [DEBUG] [Thread-208026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:09:06.382 [DEBUG] [Thread-208026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:09:06.422 [DEBUG] [Thread-208026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:09:06.423 [DEBUG] [Thread-208026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:09:06.426 [DEBUG] [Thread-208026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:09:06.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:09:06.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:09:06.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:09:06.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:09:06.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:09:06.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:09:06.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:09:06.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:09:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:09:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.630998 -999.00  +21.80  14.77     28   +2.60 1 1 1 1 1   887    0 18.76 -32.09 ----- 15.7 14.8 148.9 23.6 26.6 -29.1 26.3 -28.1 28.1 -26.9 28.7 -29.0
2026-02-15T17:09:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:09:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:09:06.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.630998
2026-02-15T17:09:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:09:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:09:06.453 [DEBUG] [Thread-208026] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:09:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:09:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:09:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:09:06.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:08:24', tmtdew=22.84, humidity=21.84, cloud=0.0, wind=26.34, temperature=22.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:08:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:09:06.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:09:06.546 [DEBUG] [Thread-208029] [transport.py] [_log()] starting thread (client mode): 0xa2d54c10
2026-02-15T17:09:06.546 [DEBUG] [Thread-208029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:09:06.562 [DEBUG] [Thread-208029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:09:06.562 [INFO] [Thread-208029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:09:06.569 [DEBUG] [Thread-208029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:09:06.569 [DEBUG] [Thread-208029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:09:06.569 [DEBUG] [Thread-208029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] client lang: <none>
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] server lang: <none>
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] kex follows: False
2026-02-15T17:09:06.570 [DEBUG] [Thread-208029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:09:06.571 [DEBUG] [Thread-208029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:09:06.571 [DEBUG] [Thread-208029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:09:06.571 [DEBUG] [Thread-208029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:09:06.571 [DEBUG] [Thread-208029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:09:06.571 [DEBUG] [Thread-208029] [transport.py] [_log()] Compression: none
2026-02-15T17:09:06.571 [DEBUG] [Thread-208029] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:09:06.627 [DEBUG] [Thread-208029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:09:06.627 [DEBUG] [Thread-208029] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:09:06.628 [DEBUG] [Thread-208029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:09:06.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:09:06.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:09:06.682 [DEBUG] [Thread-208029] [transport.py] [_log()] userauth is OK
2026-02-15T17:09:06.682 [DEBUG] [Thread-208029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:09:06.682 [DEBUG] [Thread-208029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:09:06.682 [DEBUG] [Thread-208029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:09:06.682 [DEBUG] [Thread-208029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:09:06.701 [INFO] [Thread-208029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:09:06.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:09:06.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:09:07.542 [DEBUG] [Thread-208029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:09:07.542 [DEBUG] [Thread-208029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:09:07.589 [DEBUG] [Thread-208029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:09:07.590 [DEBUG] [Thread-208029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:09:07.599 [DEBUG] [Thread-208029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:09:07.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:09:07.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:09:07.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:09:07.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:09:07.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:09:07.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:09:07.635 [DEBUG] [Thread-208029] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:09:12.021 [DEBUG] [Thread-208031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:27.077 [DEBUG] [Thread-208032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:37.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:09:37.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:09:37.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:09:39.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 9), 22.91, 21.73, 0.0, 20.56, 22.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:09:39.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:09:00
2026-02-15T17:09:40.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:09:40.577 [DEBUG] [Thread-208033] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-15T17:09:40.577 [DEBUG] [Thread-208033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:09:40.598 [DEBUG] [Thread-208033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:09:40.598 [INFO] [Thread-208033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] client lang: <none>
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] server lang: <none>
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] kex follows: False
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] Compression: none
2026-02-15T17:09:40.601 [DEBUG] [Thread-208033] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:09:40.618 [DEBUG] [Thread-208033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:09:40.619 [DEBUG] [Thread-208033] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:09:40.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:09:40.620 [DEBUG] [Thread-208033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:09:40.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:09:40.622 [DEBUG] [Thread-208033] [transport.py] [_log()] userauth is OK
2026-02-15T17:09:40.622 [DEBUG] [Thread-208033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:09:40.622 [DEBUG] [Thread-208033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:09:40.622 [DEBUG] [Thread-208033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:09:40.622 [DEBUG] [Thread-208033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:09:40.638 [INFO] [Thread-208033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:09:40.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:09:41.283 [DEBUG] [Thread-208033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:09:41.283 [DEBUG] [Thread-208033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:09:41.284 [DEBUG] [Thread-208033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:09:41.324 [DEBUG] [Thread-208033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:09:41.325 [DEBUG] [Thread-208033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:09:41.328 [DEBUG] [Thread-208033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:09:41.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:09:41.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:09:41.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:09:41.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:09:41.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:09:41.350 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:09:41.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:09:41.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:09:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:09:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.631345 -999.00  +22.10  17.96     28   +2.70 1 1 1 1 1   887    0 18.70 -31.64 ----- 21.2 18.0 167.8 24.5 26.6 -28.7 26.4 -27.7 28.1 -27.1 28.7 -28.6
2026-02-15T17:09:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:09:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:09:41.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.631345
2026-02-15T17:09:41.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:09:41.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:09:41.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:09:41.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:09:41.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:09:41.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:09:00', tmtdew=22.91, humidity=21.73, cloud=0.0, wind=20.56, temperature=22.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:09:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:09:41.353 [DEBUG] [Thread-208033] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:09:41.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:09:41.448 [DEBUG] [Thread-208036] [transport.py] [_log()] starting thread (client mode): 0xa2d57af0
2026-02-15T17:09:41.448 [DEBUG] [Thread-208036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:09:41.462 [DEBUG] [Thread-208036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:09:41.463 [INFO] [Thread-208036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:09:41.470 [DEBUG] [Thread-208036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:09:41.470 [DEBUG] [Thread-208036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:09:41.470 [DEBUG] [Thread-208036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:09:41.470 [DEBUG] [Thread-208036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] client lang: <none>
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] server lang: <none>
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] kex follows: False
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] Compression: none
2026-02-15T17:09:41.471 [DEBUG] [Thread-208036] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:09:41.530 [DEBUG] [Thread-208036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:09:41.531 [DEBUG] [Thread-208036] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:09:41.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:09:41.532 [DEBUG] [Thread-208036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:09:41.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:09:41.586 [DEBUG] [Thread-208036] [transport.py] [_log()] userauth is OK
2026-02-15T17:09:41.587 [DEBUG] [Thread-208036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:09:41.587 [DEBUG] [Thread-208036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:09:41.587 [DEBUG] [Thread-208036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:09:41.587 [DEBUG] [Thread-208036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:09:41.612 [INFO] [Thread-208036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:09:41.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:09:41.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:09:42.116 [DEBUG] [Thread-208038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:42.505 [DEBUG] [Thread-208036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:09:42.505 [DEBUG] [Thread-208036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:09:42.553 [DEBUG] [Thread-208036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:09:42.554 [DEBUG] [Thread-208036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:09:42.567 [DEBUG] [Thread-208036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:09:42.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:09:42.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:09:42.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:09:42.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:09:42.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:09:42.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:09:42.604 [DEBUG] [Thread-208036] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:09:57.170 [DEBUG] [Thread-208039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:09:58.854 [DEBUG] [Thread-208040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:05.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:05.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:12.209 [DEBUG] [Thread-208041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:10:12.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:10:12.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:10:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 9, 36), 23.61, 20.85, 0.0, 26.5, 23.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:10:14.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:09:36
2026-02-15T17:10:15.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:10:15.515 [DEBUG] [Thread-208042] [transport.py] [_log()] starting thread (client mode): 0xa2d7b3a0
2026-02-15T17:10:15.515 [DEBUG] [Thread-208042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:10:15.535 [DEBUG] [Thread-208042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:10:15.535 [INFO] [Thread-208042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] client lang: <none>
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] server lang: <none>
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] kex follows: False
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] Compression: none
2026-02-15T17:10:15.538 [DEBUG] [Thread-208042] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:10:15.556 [DEBUG] [Thread-208042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:10:15.557 [DEBUG] [Thread-208042] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:10:15.557 [DEBUG] [Thread-208042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:10:15.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:10:15.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:10:15.600 [DEBUG] [Thread-208042] [transport.py] [_log()] userauth is OK
2026-02-15T17:10:15.601 [DEBUG] [Thread-208042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:10:15.601 [DEBUG] [Thread-208042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:10:15.601 [DEBUG] [Thread-208042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:10:15.601 [DEBUG] [Thread-208042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:10:15.636 [INFO] [Thread-208042] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:10:15.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:10:20.800 [DEBUG] [Thread-208042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:10:20.800 [DEBUG] [Thread-208042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:10:20.801 [DEBUG] [Thread-208042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:10:20.841 [DEBUG] [Thread-208042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:10:20.841 [DEBUG] [Thread-208042] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:10:20.846 [DEBUG] [Thread-208042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:10:20.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:10:20.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:10:20.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:10:20.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:10:20.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:10:20.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:10:20.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:10:20.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:10:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:10:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.631345 -999.00  +22.10  17.96     28   +2.70 1 1 1 1 1   887    0 18.70 -31.64 ----- 21.2 18.0 167.8 24.5 26.6 -28.7 26.4 -27.7 28.1 -27.1 28.7 -28.6
2026-02-15T17:10:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:10:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:10:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.631345
2026-02-15T17:10:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:10:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:10:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:10:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:10:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:10:20.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:09:36', tmtdew=23.61, humidity=20.85, cloud=0.0, wind=26.5, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:09:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:10:20.996 [DEBUG] [Thread-208042] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:10:21.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:10:21.093 [DEBUG] [Thread-208045] [transport.py] [_log()] starting thread (client mode): 0xa2d7a740
2026-02-15T17:10:21.093 [DEBUG] [Thread-208045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:10:21.108 [DEBUG] [Thread-208045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:10:21.108 [INFO] [Thread-208045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:10:21.116 [DEBUG] [Thread-208045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:10:21.116 [DEBUG] [Thread-208045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:10:21.116 [DEBUG] [Thread-208045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:10:21.116 [DEBUG] [Thread-208045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] client lang: <none>
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] server lang: <none>
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] kex follows: False
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:10:21.117 [DEBUG] [Thread-208045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:10:21.118 [DEBUG] [Thread-208045] [transport.py] [_log()] Compression: none
2026-02-15T17:10:21.118 [DEBUG] [Thread-208045] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:10:21.173 [DEBUG] [Thread-208045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:10:21.174 [DEBUG] [Thread-208045] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:10:21.174 [DEBUG] [Thread-208045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:10:21.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:10:21.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:10:21.230 [DEBUG] [Thread-208045] [transport.py] [_log()] userauth is OK
2026-02-15T17:10:21.230 [DEBUG] [Thread-208045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:10:21.230 [DEBUG] [Thread-208045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:10:21.231 [DEBUG] [Thread-208045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:10:21.231 [DEBUG] [Thread-208045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:10:21.250 [INFO] [Thread-208045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:10:21.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:10:21.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:10:22.078 [DEBUG] [Thread-208045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:10:22.078 [DEBUG] [Thread-208045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:10:22.126 [DEBUG] [Thread-208045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:10:22.126 [DEBUG] [Thread-208045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:10:22.135 [DEBUG] [Thread-208045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:10:22.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:10:22.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:10:22.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:10:22.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:10:22.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:10:22.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:10:22.170 [DEBUG] [Thread-208045] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:10:27.244 [DEBUG] [Thread-208047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:42.290 [DEBUG] [Thread-208048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:52.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:10:52.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:10:52.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:10:54.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 10, 12), 22.88, 21.99, 0.0, 22.64, 22.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:10:54.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:10:12
2026-02-15T17:10:54.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:10:54.749 [DEBUG] [Thread-208049] [transport.py] [_log()] starting thread (client mode): 0xa2dc04f0
2026-02-15T17:10:54.749 [DEBUG] [Thread-208049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:10:54.759 [DEBUG] [Thread-208049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:10:54.759 [INFO] [Thread-208049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:10:54.762 [DEBUG] [Thread-208049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] client lang: <none>
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] server lang: <none>
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] kex follows: False
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] Compression: none
2026-02-15T17:10:54.763 [DEBUG] [Thread-208049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:10:54.774 [DEBUG] [Thread-208049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:10:54.775 [DEBUG] [Thread-208049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:10:54.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:10:54.775 [DEBUG] [Thread-208049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:10:54.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:10:54.776 [DEBUG] [Thread-208049] [transport.py] [_log()] userauth is OK
2026-02-15T17:10:54.776 [DEBUG] [Thread-208049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:10:54.776 [DEBUG] [Thread-208049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:10:54.776 [DEBUG] [Thread-208049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:10:54.776 [DEBUG] [Thread-208049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:10:54.788 [INFO] [Thread-208049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:10:54.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:10:55.377 [DEBUG] [Thread-208049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:10:55.377 [DEBUG] [Thread-208049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:10:55.378 [DEBUG] [Thread-208049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:10:55.418 [DEBUG] [Thread-208049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:10:55.419 [DEBUG] [Thread-208049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:10:55.422 [DEBUG] [Thread-208049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:10:55.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:10:55.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:10:55.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:10:55.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:10:55.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:10:55.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:10:55.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:10:55.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:10:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:10:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.632386 -999.00  +22.20  20.02     28   +2.90 1 1 1 1 1   887    0 18.66 -26.88 ----- 18.6 20.0 160.5 25.5 26.6 -29.5 26.4 -27.9 28.1 -27.0 28.7 -29.1
2026-02-15T17:10:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:10:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:10:55.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.632386
2026-02-15T17:10:55.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:10:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:10:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:10:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:10:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:10:55.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:10:12', tmtdew=22.88, humidity=21.99, cloud=0.0, wind=22.64, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:10:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:10:55.449 [DEBUG] [Thread-208049] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:10:55.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:10:55.549 [DEBUG] [Thread-208052] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ab0
2026-02-15T17:10:55.550 [DEBUG] [Thread-208052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:10:55.564 [DEBUG] [Thread-208052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:10:55.564 [INFO] [Thread-208052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:10:55.572 [DEBUG] [Thread-208052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:10:55.572 [DEBUG] [Thread-208052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:10:55.572 [DEBUG] [Thread-208052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:10:55.572 [DEBUG] [Thread-208052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:55.572 [DEBUG] [Thread-208052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:10:55.572 [DEBUG] [Thread-208052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] client lang: <none>
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] server lang: <none>
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] kex follows: False
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:10:55.573 [DEBUG] [Thread-208052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:10:55.574 [DEBUG] [Thread-208052] [transport.py] [_log()] Compression: none
2026-02-15T17:10:55.574 [DEBUG] [Thread-208052] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:10:55.628 [DEBUG] [Thread-208052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:10:55.628 [DEBUG] [Thread-208052] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:10:55.628 [DEBUG] [Thread-208052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:10:55.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:10:55.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:10:55.686 [DEBUG] [Thread-208052] [transport.py] [_log()] userauth is OK
2026-02-15T17:10:55.686 [DEBUG] [Thread-208052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:10:55.686 [DEBUG] [Thread-208052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:10:55.686 [DEBUG] [Thread-208052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:10:55.686 [DEBUG] [Thread-208052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:10:55.700 [INFO] [Thread-208052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:10:55.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:10:55.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:10:56.535 [DEBUG] [Thread-208052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:10:56.535 [DEBUG] [Thread-208052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:10:56.583 [DEBUG] [Thread-208052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:10:56.584 [DEBUG] [Thread-208052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:10:56.593 [DEBUG] [Thread-208052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:10:56.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:10:56.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:10:56.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:10:56.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:10:56.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:10:56.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:10:56.633 [DEBUG] [Thread-208052] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:10:57.328 [DEBUG] [Thread-208054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:10:58.886 [DEBUG] [Thread-208055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:05.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:05.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:12.376 [DEBUG] [Thread-208056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:26.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:11:26.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:11: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
2026-02-15T17:11:27.415 [DEBUG] [Thread-208057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:28.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 10, 48), 23.04, 21.71, 0.0, 24.91, 22.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:11:28.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:10:48
2026-02-15T17:11:28.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:11:29.123 [DEBUG] [Thread-208058] [transport.py] [_log()] starting thread (client mode): 0xa2d7aec0
2026-02-15T17:11:29.123 [DEBUG] [Thread-208058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:11:29.141 [DEBUG] [Thread-208058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:11:29.141 [INFO] [Thread-208058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:11:29.144 [DEBUG] [Thread-208058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] client lang: <none>
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] server lang: <none>
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] kex follows: False
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] Compression: none
2026-02-15T17:11:29.145 [DEBUG] [Thread-208058] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:11:29.162 [DEBUG] [Thread-208058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:11:29.163 [DEBUG] [Thread-208058] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:11:29.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:11:29.164 [DEBUG] [Thread-208058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:11:29.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:11:29.166 [DEBUG] [Thread-208058] [transport.py] [_log()] userauth is OK
2026-02-15T17:11:29.166 [DEBUG] [Thread-208058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:11:29.166 [DEBUG] [Thread-208058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:11:29.166 [DEBUG] [Thread-208058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:11:29.166 [DEBUG] [Thread-208058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:11:29.188 [INFO] [Thread-208058] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:11:29.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:11:29.729 [DEBUG] [Thread-208058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:11:29.730 [DEBUG] [Thread-208058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:11:29.730 [DEBUG] [Thread-208058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:11:29.771 [DEBUG] [Thread-208058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:11:29.771 [DEBUG] [Thread-208058] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:11:29.777 [DEBUG] [Thread-208058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:11:29.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:11:29.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:11:29.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:11:29.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:11:29.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:11:29.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:11:29.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:11:29.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:11:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:11:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.632734 -999.00  +22.20  21.16     28   +2.90 1 1 1 1 1   887    0 18.75 -25.59 ----- 20.1 21.2 154.6 28.0 26.5 -30.6 26.4 -28.6 28.0 -28.5 28.6 -30.1
2026-02-15T17:11:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:11:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:11:29.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.632734
2026-02-15T17:11:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:11:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:11:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:11:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:11:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:11:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:10:48', tmtdew=23.04, humidity=21.71, cloud=0.0, wind=24.91, temperature=22.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:11:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:11:29.802 [DEBUG] [Thread-208058] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:11:29.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:11:29.885 [DEBUG] [Thread-208061] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a90
2026-02-15T17:11:29.885 [DEBUG] [Thread-208061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:11:29.900 [DEBUG] [Thread-208061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:11:29.900 [INFO] [Thread-208061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] client lang: <none>
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] server lang: <none>
2026-02-15T17:11:29.908 [DEBUG] [Thread-208061] [transport.py] [_log()] kex follows: False
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] Compression: none
2026-02-15T17:11:29.909 [DEBUG] [Thread-208061] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:11:29.970 [DEBUG] [Thread-208061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:11:29.971 [DEBUG] [Thread-208061] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:11:29.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:11:29.972 [DEBUG] [Thread-208061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:11:29.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:11:30.026 [DEBUG] [Thread-208061] [transport.py] [_log()] userauth is OK
2026-02-15T17:11:30.026 [DEBUG] [Thread-208061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:11:30.026 [DEBUG] [Thread-208061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:11:30.026 [DEBUG] [Thread-208061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:11:30.026 [DEBUG] [Thread-208061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:11:30.043 [INFO] [Thread-208061] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:11:30.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:11:30.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:11:30.912 [DEBUG] [Thread-208061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:11:30.913 [DEBUG] [Thread-208061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:11:30.961 [DEBUG] [Thread-208061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:11:30.961 [DEBUG] [Thread-208061] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:11:30.970 [DEBUG] [Thread-208061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:11:30.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:11:30.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:11:30.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:11:30.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:11:30.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:11:31.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:11:31.009 [DEBUG] [Thread-208061] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:11:42.451 [DEBUG] [Thread-208063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:57.511 [DEBUG] [Thread-208064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:11:58.942 [DEBUG] [Thread-208065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:01.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:12:01.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:12:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:12:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 11, 23), 22.89, 21.91, 0.0, 23.41, 22.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:12:03.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:11:23
2026-02-15T17:12:03.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:12:03.684 [DEBUG] [Thread-208066] [transport.py] [_log()] starting thread (client mode): 0xa2dc11e0
2026-02-15T17:12:03.684 [DEBUG] [Thread-208066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:12:03.704 [DEBUG] [Thread-208066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:12:03.705 [INFO] [Thread-208066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] client lang: <none>
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] server lang: <none>
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] kex follows: False
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] Compression: none
2026-02-15T17:12:03.708 [DEBUG] [Thread-208066] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:12:03.725 [DEBUG] [Thread-208066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:12:03.726 [DEBUG] [Thread-208066] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:12:03.726 [DEBUG] [Thread-208066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:12:03.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:12:03.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:12:03.729 [DEBUG] [Thread-208066] [transport.py] [_log()] userauth is OK
2026-02-15T17:12:03.729 [DEBUG] [Thread-208066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:12:03.729 [DEBUG] [Thread-208066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:12:03.729 [DEBUG] [Thread-208066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:12:03.729 [DEBUG] [Thread-208066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:12:03.747 [INFO] [Thread-208066] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:12:03.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:12:04.391 [DEBUG] [Thread-208066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:12:04.392 [DEBUG] [Thread-208066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:12:04.392 [DEBUG] [Thread-208066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:12:04.432 [DEBUG] [Thread-208066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:12:04.433 [DEBUG] [Thread-208066] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:12:04.435 [DEBUG] [Thread-208066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:12:04.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:12:04.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:12:04.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:12:04.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:12:04.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:12:04.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:12:04.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:12:04.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:12:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:12:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.633081 -999.00  +22.00  20.96     28   +2.80 1 1 1 1 1   887    0 19.02 -24.59 ----- 20.1 21.0 157.6 29.8 26.5 -30.6 26.4 -28.8 27.9 -27.9 28.6 -30.1
2026-02-15T17:12:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:12:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:12:04.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.633081
2026-02-15T17:12:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:12:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:12:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:12:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:12:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:12:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:11:23', tmtdew=22.89, humidity=21.91, cloud=0.0, wind=23.41, temperature=22.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:11:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:12:04.459 [DEBUG] [Thread-208066] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:12:04.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:12:04.550 [DEBUG] [Thread-208069] [transport.py] [_log()] starting thread (client mode): 0xa2d187c0
2026-02-15T17:12:04.550 [DEBUG] [Thread-208069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:12:04.565 [DEBUG] [Thread-208069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:12:04.565 [INFO] [Thread-208069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] client lang: <none>
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] server lang: <none>
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] kex follows: False
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:12:04.573 [DEBUG] [Thread-208069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:12:04.574 [DEBUG] [Thread-208069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:12:04.574 [DEBUG] [Thread-208069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:12:04.574 [DEBUG] [Thread-208069] [transport.py] [_log()] Compression: none
2026-02-15T17:12:04.574 [DEBUG] [Thread-208069] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:12:04.630 [DEBUG] [Thread-208069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:12:04.631 [DEBUG] [Thread-208069] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:12:04.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:12:04.632 [DEBUG] [Thread-208069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:12:04.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:12:04.686 [DEBUG] [Thread-208069] [transport.py] [_log()] userauth is OK
2026-02-15T17:12:04.686 [DEBUG] [Thread-208069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:12:04.687 [DEBUG] [Thread-208069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:12:04.687 [DEBUG] [Thread-208069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:12:04.687 [DEBUG] [Thread-208069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:12:04.706 [INFO] [Thread-208069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:12:04.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:12:04.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:12:05.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:05.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:05.569 [DEBUG] [Thread-208069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:12:05.569 [DEBUG] [Thread-208069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:12:05.617 [DEBUG] [Thread-208069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:12:05.618 [DEBUG] [Thread-208069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:12:05.627 [DEBUG] [Thread-208069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:12:05.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:12:05.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:12:05.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:12:05.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:12:05.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:12:05.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:12:05.665 [DEBUG] [Thread-208069] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:12:12.550 [DEBUG] [Thread-208071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:27.602 [DEBUG] [Thread-208072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:12:35.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:12:35.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:12:38.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 11, 58), 22.46, 22.58, 0.0, 28.64, 22.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:12:38.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:11:58
2026-02-15T17:12:38.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:12:38.693 [DEBUG] [Thread-208073] [transport.py] [_log()] starting thread (client mode): 0xa2d57c10
2026-02-15T17:12:38.693 [DEBUG] [Thread-208073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:12:38.714 [DEBUG] [Thread-208073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:12:38.714 [INFO] [Thread-208073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] client lang: <none>
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] server lang: <none>
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] kex follows: False
2026-02-15T17:12:38.717 [DEBUG] [Thread-208073] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:12:38.718 [DEBUG] [Thread-208073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:12:38.718 [DEBUG] [Thread-208073] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:12:38.718 [DEBUG] [Thread-208073] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:12:38.718 [DEBUG] [Thread-208073] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:12:38.718 [DEBUG] [Thread-208073] [transport.py] [_log()] Compression: none
2026-02-15T17:12:38.718 [DEBUG] [Thread-208073] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:12:38.737 [DEBUG] [Thread-208073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:12:38.738 [DEBUG] [Thread-208073] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:12:38.739 [DEBUG] [Thread-208073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:12:38.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:12:38.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:12:38.742 [DEBUG] [Thread-208073] [transport.py] [_log()] userauth is OK
2026-02-15T17:12:38.742 [DEBUG] [Thread-208073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:12:38.743 [DEBUG] [Thread-208073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:12:38.743 [DEBUG] [Thread-208073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:12:38.743 [DEBUG] [Thread-208073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:12:38.776 [INFO] [Thread-208073] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:12:38.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:12:39.416 [DEBUG] [Thread-208073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:12:39.416 [DEBUG] [Thread-208073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:12:39.417 [DEBUG] [Thread-208073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:12:39.457 [DEBUG] [Thread-208073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:12:39.458 [DEBUG] [Thread-208073] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:12:39.461 [DEBUG] [Thread-208073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:12:39.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:12:39.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:12:39.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:12:39.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:12:39.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:12:39.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:12:39.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:12:39.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:12:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:12:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.633428 -999.00  +22.00  15.54     28   +2.80 1 1 1 1 1   887    0 19.26 -22.65 ----- 19.7 15.5 150.7 25.0 26.5 -30.0 26.2 -28.3 27.9 -28.1 28.6 -29.7
2026-02-15T17:12:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:12:39.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:12:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.633428
2026-02-15T17:12:39.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:12:39.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:12:39.488 [DEBUG] [Thread-208073] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:12:39.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:12:39.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:12:39.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:12:39.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:11:58', tmtdew=22.46, humidity=22.58, cloud=0.0, wind=28.64, temperature=22.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:12:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:12:39.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:12:39.593 [DEBUG] [Thread-208076] [transport.py] [_log()] starting thread (client mode): 0xa2d54a00
2026-02-15T17:12:39.593 [DEBUG] [Thread-208076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:12:39.612 [DEBUG] [Thread-208076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:12:39.612 [INFO] [Thread-208076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:12:39.620 [DEBUG] [Thread-208076] [transport.py] [_log()] client lang: <none>
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] server lang: <none>
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] kex follows: False
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] Compression: none
2026-02-15T17:12:39.621 [DEBUG] [Thread-208076] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:12:39.679 [DEBUG] [Thread-208076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:12:39.679 [DEBUG] [Thread-208076] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:12:39.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:12:39.680 [DEBUG] [Thread-208076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:12:39.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:12:39.734 [DEBUG] [Thread-208076] [transport.py] [_log()] userauth is OK
2026-02-15T17:12:39.735 [DEBUG] [Thread-208076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:12:39.735 [DEBUG] [Thread-208076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:12:39.735 [DEBUG] [Thread-208076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:12:39.735 [DEBUG] [Thread-208076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:12:39.754 [INFO] [Thread-208076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:12:39.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:12:39.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:12:40.607 [DEBUG] [Thread-208076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:12:40.607 [DEBUG] [Thread-208076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:12:40.655 [DEBUG] [Thread-208076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:12:40.656 [DEBUG] [Thread-208076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:12:40.665 [DEBUG] [Thread-208076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:12:40.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:12:40.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:12:40.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:12:40.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:12:40.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:12:40.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:12:40.707 [DEBUG] [Thread-208076] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:12:42.642 [DEBUG] [Thread-208078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:57.701 [DEBUG] [Thread-208079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:12:58.977 [DEBUG] [Thread-208080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:05.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:05.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:10.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:13:10.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:13:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:13:12.744 [DEBUG] [Thread-208081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 12, 34), 23.46, 21.05, 0.0, 28.3, 23.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:13:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:12:34
2026-02-15T17:13:13.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:13:13.540 [DEBUG] [Thread-208082] [transport.py] [_log()] starting thread (client mode): 0xa2d576d0
2026-02-15T17:13:13.540 [DEBUG] [Thread-208082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:13:13.556 [DEBUG] [Thread-208082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:13:13.556 [INFO] [Thread-208082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] client lang: <none>
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] server lang: <none>
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] kex follows: False
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] Compression: none
2026-02-15T17:13:13.559 [DEBUG] [Thread-208082] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:13:13.575 [DEBUG] [Thread-208082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:13:13.576 [DEBUG] [Thread-208082] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:13:13.576 [DEBUG] [Thread-208082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:13:13.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:13:13.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:13:13.578 [DEBUG] [Thread-208082] [transport.py] [_log()] userauth is OK
2026-02-15T17:13:13.578 [DEBUG] [Thread-208082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:13:13.579 [DEBUG] [Thread-208082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:13:13.579 [DEBUG] [Thread-208082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:13:13.579 [DEBUG] [Thread-208082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:13:13.604 [INFO] [Thread-208082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:13:13.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:13:14.190 [DEBUG] [Thread-208082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:13:14.191 [DEBUG] [Thread-208082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:13:14.191 [DEBUG] [Thread-208082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:13:14.231 [DEBUG] [Thread-208082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:13:14.231 [DEBUG] [Thread-208082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:13:14.235 [DEBUG] [Thread-208082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:13:14.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:13:14.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:13:14.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:13:14.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:13:14.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:13:14.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:13:14.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:13:14.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:13:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:13:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.633776 -999.00  +22.10  20.85     28   +2.80 1 1 1 1 1   887    0 18.60 -22.15 ----- 21.3 20.9 143.0 26.8 26.5 -29.5 26.3 -28.4 28.0 -27.6 28.5 -30.6
2026-02-15T17:13:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:13:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:13:14.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.633776
2026-02-15T17:13:14.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:13:14.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:13:14.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:13:14.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:13:14.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:13:14.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:12:34', tmtdew=23.46, humidity=21.05, cloud=0.0, wind=28.3, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:12:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:13:14.263 [DEBUG] [Thread-208082] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:13:14.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:13:14.372 [DEBUG] [Thread-208085] [transport.py] [_log()] starting thread (client mode): 0xa2d687c0
2026-02-15T17:13:14.372 [DEBUG] [Thread-208085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:13:14.393 [DEBUG] [Thread-208085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:13:14.394 [INFO] [Thread-208085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:13:14.401 [DEBUG] [Thread-208085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:14.402 [DEBUG] [Thread-208085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] client lang: <none>
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] server lang: <none>
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] kex follows: False
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:13:14.403 [DEBUG] [Thread-208085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:13:14.404 [DEBUG] [Thread-208085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:13:14.404 [DEBUG] [Thread-208085] [transport.py] [_log()] Compression: none
2026-02-15T17:13:14.404 [DEBUG] [Thread-208085] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:13:14.463 [DEBUG] [Thread-208085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:13:14.464 [DEBUG] [Thread-208085] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:13:14.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:13:14.465 [DEBUG] [Thread-208085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:13:14.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:13:14.527 [DEBUG] [Thread-208085] [transport.py] [_log()] userauth is OK
2026-02-15T17:13:14.527 [DEBUG] [Thread-208085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:13:14.528 [DEBUG] [Thread-208085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:13:14.528 [DEBUG] [Thread-208085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:13:14.528 [DEBUG] [Thread-208085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:13:14.547 [INFO] [Thread-208085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:13:14.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:13:14.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:13:15.369 [DEBUG] [Thread-208085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:13:15.370 [DEBUG] [Thread-208085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:13:15.417 [DEBUG] [Thread-208085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:13:15.418 [DEBUG] [Thread-208085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:13:15.427 [DEBUG] [Thread-208085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:13:15.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:13:15.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:13:15.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:13:15.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:13:15.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:13:15.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:13:15.465 [DEBUG] [Thread-208085] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:13:27.788 [DEBUG] [Thread-208087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:42.841 [DEBUG] [Thread-208088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:45.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:13:45.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:13:45.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:13:48.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 13, 10), 22.41, 22.63, 0.0, 23.17, 22.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:13:48.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:13:10
2026-02-15T17:13:48.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:13:48.879 [DEBUG] [Thread-208089] [transport.py] [_log()] starting thread (client mode): 0xa2d68970
2026-02-15T17:13:48.879 [DEBUG] [Thread-208089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:13:48.900 [DEBUG] [Thread-208089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:13:48.900 [INFO] [Thread-208089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] client lang: <none>
2026-02-15T17:13:48.903 [DEBUG] [Thread-208089] [transport.py] [_log()] server lang: <none>
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] kex follows: False
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] Compression: none
2026-02-15T17:13:48.904 [DEBUG] [Thread-208089] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:13:48.921 [DEBUG] [Thread-208089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:13:48.922 [DEBUG] [Thread-208089] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:13:48.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:13:48.923 [DEBUG] [Thread-208089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:13:48.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:13:48.925 [DEBUG] [Thread-208089] [transport.py] [_log()] userauth is OK
2026-02-15T17:13:48.925 [DEBUG] [Thread-208089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:13:48.925 [DEBUG] [Thread-208089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:13:48.925 [DEBUG] [Thread-208089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:13:48.926 [DEBUG] [Thread-208089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:13:48.949 [INFO] [Thread-208089] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:13:48.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:13:49.592 [DEBUG] [Thread-208089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:13:49.592 [DEBUG] [Thread-208089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:13:49.593 [DEBUG] [Thread-208089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:13:49.633 [DEBUG] [Thread-208089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:13:49.634 [DEBUG] [Thread-208089] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:13:49.637 [DEBUG] [Thread-208089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:13:49.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:13:49.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:13:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:13:49.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:13:49.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:13:49.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:13:49.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:13:49.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:13:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:13:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.634123 -999.00  +22.20  11.37     28   +2.90 1 1 1 1 1   887    0 18.99 -22.74 ----- 15.9 11.4 137.4 23.4 26.5 -29.5 26.4 -28.9 28.1 -26.8 28.6 -29.8
2026-02-15T17:13:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:13:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:13:49.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.634123
2026-02-15T17:13:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:13:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:13:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:13:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:13:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:13:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:13:10', tmtdew=22.41, humidity=22.63, cloud=0.0, wind=23.17, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:13:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:13:49.666 [DEBUG] [Thread-208089] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:13:49.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:13:49.776 [DEBUG] [Thread-208092] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-15T17:13:49.776 [DEBUG] [Thread-208092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:13:49.794 [DEBUG] [Thread-208092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:13:49.794 [INFO] [Thread-208092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:13:49.807 [DEBUG] [Thread-208092] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:13:49.807 [DEBUG] [Thread-208092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:13:49.807 [DEBUG] [Thread-208092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:13:49.807 [DEBUG] [Thread-208092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:49.807 [DEBUG] [Thread-208092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:13:49.807 [DEBUG] [Thread-208092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] client lang: <none>
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] server lang: <none>
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] kex follows: False
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] Compression: none
2026-02-15T17:13:49.808 [DEBUG] [Thread-208092] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:13:49.877 [DEBUG] [Thread-208092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:13:49.877 [DEBUG] [Thread-208092] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:13:49.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:13:49.878 [DEBUG] [Thread-208092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:13:49.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:13:49.942 [DEBUG] [Thread-208092] [transport.py] [_log()] userauth is OK
2026-02-15T17:13:49.942 [DEBUG] [Thread-208092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:13:49.943 [DEBUG] [Thread-208092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:13:49.943 [DEBUG] [Thread-208092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:13:49.943 [DEBUG] [Thread-208092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:13:49.973 [INFO] [Thread-208092] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:13:49.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:13:49.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:13:50.849 [DEBUG] [Thread-208092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:13:50.849 [DEBUG] [Thread-208092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:13:50.897 [DEBUG] [Thread-208092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:13:50.898 [DEBUG] [Thread-208092] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:13:50.907 [DEBUG] [Thread-208092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:13:50.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:13:50.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:13:50.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:13:50.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:13:50.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:13:50.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:13:50.944 [DEBUG] [Thread-208092] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:13:57.877 [DEBUG] [Thread-208094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:13:59.013 [DEBUG] [Thread-208095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:05.597 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:05.598 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:12.929 [DEBUG] [Thread-208096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:20.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:14:20.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:14:20.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:14:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 13, 46), 22.63, 22.32, 0.0, 25.21, 22.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:14:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:13:46
2026-02-15T17:14:23.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:14:23.377 [DEBUG] [Thread-208097] [transport.py] [_log()] starting thread (client mode): 0xa2d19f60
2026-02-15T17:14:23.377 [DEBUG] [Thread-208097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:14:23.396 [DEBUG] [Thread-208097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:14:23.396 [INFO] [Thread-208097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:14:23.399 [DEBUG] [Thread-208097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] client lang: <none>
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] server lang: <none>
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] kex follows: False
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] Compression: none
2026-02-15T17:14:23.400 [DEBUG] [Thread-208097] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:14:23.419 [DEBUG] [Thread-208097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:14:23.420 [DEBUG] [Thread-208097] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:14:23.420 [DEBUG] [Thread-208097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:14:23.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:14:23.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:14:23.423 [DEBUG] [Thread-208097] [transport.py] [_log()] userauth is OK
2026-02-15T17:14:23.423 [DEBUG] [Thread-208097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:14:23.423 [DEBUG] [Thread-208097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:14:23.423 [DEBUG] [Thread-208097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:14:23.423 [DEBUG] [Thread-208097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:14:23.439 [INFO] [Thread-208097] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:14:23.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:14:24.055 [DEBUG] [Thread-208097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:14:24.056 [DEBUG] [Thread-208097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:14:24.056 [DEBUG] [Thread-208097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:14:24.096 [DEBUG] [Thread-208097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:14:24.097 [DEBUG] [Thread-208097] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:14:24.100 [DEBUG] [Thread-208097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:14:24.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:14:24.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:14:24.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:14:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:14:24.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:14:24.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:14:24.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:14:24.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:14:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:14:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.634817 -999.00  +22.50  15.54     27   +3.00 1 1 1 1 1   887    0 18.88 -21.45 ----- 20.9 15.5 143.1 20.6 26.6 -28.7 26.3 -27.5 28.1 -27.6 28.7 -28.5
2026-02-15T17:14:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:14:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:14:24.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.634817
2026-02-15T17:14:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:14:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:14:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:14:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:14:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:14:24.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:13:46', tmtdew=22.63, humidity=22.32, cloud=0.0, wind=25.21, temperature=22.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:14:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:14:24.130 [DEBUG] [Thread-208097] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:14:24.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:14:24.224 [DEBUG] [Thread-208100] [transport.py] [_log()] starting thread (client mode): 0xa2d56d10
2026-02-15T17:14:24.224 [DEBUG] [Thread-208100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:14:24.238 [DEBUG] [Thread-208100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:14:24.238 [INFO] [Thread-208100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:14:24.246 [DEBUG] [Thread-208100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:14:24.246 [DEBUG] [Thread-208100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:14:24.246 [DEBUG] [Thread-208100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:14:24.246 [DEBUG] [Thread-208100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] client lang: <none>
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] server lang: <none>
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] kex follows: False
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] Compression: none
2026-02-15T17:14:24.247 [DEBUG] [Thread-208100] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:14:24.310 [DEBUG] [Thread-208100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:14:24.311 [DEBUG] [Thread-208100] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:14:24.311 [DEBUG] [Thread-208100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:14:24.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:14:24.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:14:24.366 [DEBUG] [Thread-208100] [transport.py] [_log()] userauth is OK
2026-02-15T17:14:24.366 [DEBUG] [Thread-208100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:14:24.367 [DEBUG] [Thread-208100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:14:24.367 [DEBUG] [Thread-208100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:14:24.367 [DEBUG] [Thread-208100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:14:24.385 [INFO] [Thread-208100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:14:24.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:14:24.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:14:25.227 [DEBUG] [Thread-208100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:14:25.227 [DEBUG] [Thread-208100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:14:25.276 [DEBUG] [Thread-208100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:14:25.276 [DEBUG] [Thread-208100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:14:25.285 [DEBUG] [Thread-208100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:14:25.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:14:25.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:14:25.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:14:25.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:14:25.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:14:25.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:14:25.323 [DEBUG] [Thread-208100] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:14:27.969 [DEBUG] [Thread-208102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:43.028 [DEBUG] [Thread-208103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:55.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:14:55.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:14:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:14:57.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 14, 23), 22.58, 22.41, 0.0, 24.47, 22.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:14:57.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:14:23
2026-02-15T17:14:57.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:14:57.877 [DEBUG] [Thread-208104] [transport.py] [_log()] starting thread (client mode): 0xa2dc3040
2026-02-15T17:14:57.877 [DEBUG] [Thread-208104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:14:57.897 [DEBUG] [Thread-208104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:14:57.897 [INFO] [Thread-208104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:14:57.900 [DEBUG] [Thread-208104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:14:57.900 [DEBUG] [Thread-208104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] client lang: <none>
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] server lang: <none>
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] kex follows: False
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:14:57.901 [DEBUG] [Thread-208104] [transport.py] [_log()] Compression: none
2026-02-15T17:14:57.902 [DEBUG] [Thread-208104] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:14:57.918 [DEBUG] [Thread-208104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:14:57.919 [DEBUG] [Thread-208104] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:14:57.919 [DEBUG] [Thread-208104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:14:57.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:14:57.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:14:57.921 [DEBUG] [Thread-208104] [transport.py] [_log()] userauth is OK
2026-02-15T17:14:57.921 [DEBUG] [Thread-208104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:14:57.921 [DEBUG] [Thread-208104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:14:57.921 [DEBUG] [Thread-208104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:14:57.921 [DEBUG] [Thread-208104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:14:57.947 [INFO] [Thread-208104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:14:57.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:14:58.060 [DEBUG] [Thread-208106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:58.531 [DEBUG] [Thread-208104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:14:58.531 [DEBUG] [Thread-208104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:14:58.531 [DEBUG] [Thread-208104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:14:58.572 [DEBUG] [Thread-208104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:14:58.572 [DEBUG] [Thread-208104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:14:58.574 [DEBUG] [Thread-208104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:14:58.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:14:58.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:14:58.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:14:58.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:14:58.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:14:58.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:14:58.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:14:58.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:14:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:14:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.635165 -999.00  +22.40  19.48     28   +3.00 1 1 1 1 1   887    0 19.41 -21.69 ----- 22.1 19.5 152.2 28.3 26.6 -29.4 26.4 -28.2 28.1 -27.4 28.6 -30.6
2026-02-15T17:14:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:14:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:14:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.635165
2026-02-15T17:14:58.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:14:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:14:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:14:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:14:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:14:58.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:14:23', tmtdew=22.58, humidity=22.41, cloud=0.0, wind=24.47, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:14:38.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:14:58.596 [DEBUG] [Thread-208104] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:14:58.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:14:58.697 [DEBUG] [Thread-208108] [transport.py] [_log()] starting thread (client mode): 0xa5741810
2026-02-15T17:14:58.697 [DEBUG] [Thread-208108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:14:58.712 [DEBUG] [Thread-208108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:14:58.712 [INFO] [Thread-208108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] client lang: <none>
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] server lang: <none>
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] kex follows: False
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] Compression: none
2026-02-15T17:14:58.719 [DEBUG] [Thread-208108] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:14:58.776 [DEBUG] [Thread-208108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:14:58.776 [DEBUG] [Thread-208108] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:14:58.777 [DEBUG] [Thread-208108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:14:58.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:14:58.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:14:58.834 [DEBUG] [Thread-208108] [transport.py] [_log()] userauth is OK
2026-02-15T17:14:58.834 [DEBUG] [Thread-208108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:14:58.834 [DEBUG] [Thread-208108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:14:58.834 [DEBUG] [Thread-208108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:14:58.834 [DEBUG] [Thread-208108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:14:58.858 [INFO] [Thread-208108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:14:58.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:14:58.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:14:59.058 [DEBUG] [Thread-208110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:14:59.700 [DEBUG] [Thread-208108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:14:59.700 [DEBUG] [Thread-208108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:14:59.748 [DEBUG] [Thread-208108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:14:59.748 [DEBUG] [Thread-208108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:14:59.758 [DEBUG] [Thread-208108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:14:59.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:14: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-02-15T17:14:59.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:14:59.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:14:59.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:14:59.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:14:59.797 [DEBUG] [Thread-208108] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:15:05.741 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:15:05.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:15:13.095 [DEBUG] [Thread-208111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:15:28.154 [DEBUG] [Thread-208112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:15:29.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:15:29.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:15:29.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:15:31.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 14, 59), 22.52, 22.19, 0.0, 30.44, 22.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:15:31.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:14:59
2026-02-15T17:15:32.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:15:32.567 [DEBUG] [Thread-208113] [transport.py] [_log()] starting thread (client mode): 0xa2d1b1f0
2026-02-15T17:15:32.567 [DEBUG] [Thread-208113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:15:32.585 [DEBUG] [Thread-208113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:15:32.585 [INFO] [Thread-208113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:15:32.586 [DEBUG] [Thread-208113] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:15:32.586 [DEBUG] [Thread-208113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:15:32.586 [DEBUG] [Thread-208113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:15:32.586 [DEBUG] [Thread-208113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] client lang: <none>
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] server lang: <none>
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] kex follows: False
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] Compression: none
2026-02-15T17:15:32.587 [DEBUG] [Thread-208113] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:15:32.596 [DEBUG] [Thread-208113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:15:32.597 [DEBUG] [Thread-208113] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:15:32.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:15:32.598 [DEBUG] [Thread-208113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:15:32.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:15:32.600 [DEBUG] [Thread-208113] [transport.py] [_log()] userauth is OK
2026-02-15T17:15:32.601 [DEBUG] [Thread-208113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:15:32.601 [DEBUG] [Thread-208113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:15:32.601 [DEBUG] [Thread-208113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:15:32.601 [DEBUG] [Thread-208113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:15:32.629 [INFO] [Thread-208113] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:15:32.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:15:33.254 [DEBUG] [Thread-208113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:15:33.263 [DEBUG] [Thread-208113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:15:33.264 [DEBUG] [Thread-208113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:15:33.296 [DEBUG] [Thread-208113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:15:33.296 [DEBUG] [Thread-208113] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:15:33.298 [DEBUG] [Thread-208113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:15:33.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:15:33.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:15:33.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:15:33.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:15:33.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:15:33.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:15:33.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:15:33.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:15:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:15:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.635512 -999.00  +22.30  22.89     28   +2.90 1 1 1 1 1   887    0 19.12 -21.70 ----- 21.9 22.9 155.2 30.6 26.5 -29.6 26.4 -27.8 27.9 -29.6 28.6 -29.1
2026-02-15T17:15:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:15:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:15:33.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.635512
2026-02-15T17:15:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:15:33.323 [DEBUG] [Thread-208113] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:15:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:15:33.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:15:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:15:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:15:33.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:14:59', tmtdew=22.52, humidity=22.19, cloud=0.0, wind=30.44, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:15:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:15:33.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:15:33.419 [DEBUG] [Thread-208116] [transport.py] [_log()] starting thread (client mode): 0xa2d54ee0
2026-02-15T17:15:33.419 [DEBUG] [Thread-208116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:15:33.434 [DEBUG] [Thread-208116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:15:33.435 [INFO] [Thread-208116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:15:33.442 [DEBUG] [Thread-208116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] client lang: <none>
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] server lang: <none>
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] kex follows: False
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:15:33.443 [DEBUG] [Thread-208116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:15:33.444 [DEBUG] [Thread-208116] [transport.py] [_log()] Compression: none
2026-02-15T17:15:33.444 [DEBUG] [Thread-208116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:15:33.502 [DEBUG] [Thread-208116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:15:33.503 [DEBUG] [Thread-208116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:15:33.503 [DEBUG] [Thread-208116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:15:33.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:15:33.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:15:33.558 [DEBUG] [Thread-208116] [transport.py] [_log()] userauth is OK
2026-02-15T17:15:33.558 [DEBUG] [Thread-208116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:15:33.558 [DEBUG] [Thread-208116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:15:33.559 [DEBUG] [Thread-208116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:15:33.559 [DEBUG] [Thread-208116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:15:33.582 [INFO] [Thread-208116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:15:33.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:15:33.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:15:34.464 [DEBUG] [Thread-208116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:15:34.464 [DEBUG] [Thread-208116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:15:34.512 [DEBUG] [Thread-208116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:15:34.513 [DEBUG] [Thread-208116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:15:34.522 [DEBUG] [Thread-208116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:15:34.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:15:34.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:15:34.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:15:34.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:15:34.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:15:34.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:15:34.560 [DEBUG] [Thread-208116] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:15:43.190 [DEBUG] [Thread-208118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:15:58.239 [DEBUG] [Thread-208119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:15:59.092 [DEBUG] [Thread-208120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:04.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:16:04.558 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:16:04.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:16:05.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:05.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 15, 34), 23.11, 21.58, 0.0, 25.9, 23.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:16:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:15:34
2026-02-15T17:16:06.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:16:07.067 [DEBUG] [Thread-208121] [transport.py] [_log()] starting thread (client mode): 0xa2d4c4c0
2026-02-15T17:16:07.067 [DEBUG] [Thread-208121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:16:07.081 [DEBUG] [Thread-208121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:16:07.081 [INFO] [Thread-208121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] client lang: <none>
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] server lang: <none>
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] kex follows: False
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:16:07.085 [DEBUG] [Thread-208121] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:16:07.086 [DEBUG] [Thread-208121] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:16:07.086 [DEBUG] [Thread-208121] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:16:07.086 [DEBUG] [Thread-208121] [transport.py] [_log()] Compression: none
2026-02-15T17:16:07.086 [DEBUG] [Thread-208121] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:16:07.101 [DEBUG] [Thread-208121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:16:07.102 [DEBUG] [Thread-208121] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:16:07.102 [DEBUG] [Thread-208121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:16:07.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:16:07.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:16:07.104 [DEBUG] [Thread-208121] [transport.py] [_log()] userauth is OK
2026-02-15T17:16:07.105 [DEBUG] [Thread-208121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:16:07.105 [DEBUG] [Thread-208121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:16:07.105 [DEBUG] [Thread-208121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:16:07.105 [DEBUG] [Thread-208121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:16:07.141 [INFO] [Thread-208121] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:16:07.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:16:07.793 [DEBUG] [Thread-208121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:16:07.794 [DEBUG] [Thread-208121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:16:07.794 [DEBUG] [Thread-208121] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:16:07.834 [DEBUG] [Thread-208121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:16:07.835 [DEBUG] [Thread-208121] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:16:07.838 [DEBUG] [Thread-208121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:16:07.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:16:07.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:16:07.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:16:07.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:16:07.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:16:07.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:16:07.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:16:07.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:16:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:16:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.635859 -999.00  +22.10  22.56     28   +2.90 1 1 1 1 1   887    0 18.98 -23.57 ----- 17.6 22.6 161.8 30.6 26.4 -30.9 26.3 -28.5 27.9 -27.5 28.4 -31.0
2026-02-15T17:16:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:16:07.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:16:07.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.635859
2026-02-15T17:16:07.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:16:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:16:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:16:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:16:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:16:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:15:34', tmtdew=23.11, humidity=21.58, cloud=0.0, wind=25.9, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:15:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:16:07.864 [DEBUG] [Thread-208121] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:16:07.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:16:07.963 [DEBUG] [Thread-208124] [transport.py] [_log()] starting thread (client mode): 0xa2dc1b40
2026-02-15T17:16:07.963 [DEBUG] [Thread-208124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:16:07.977 [DEBUG] [Thread-208124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:16:07.978 [INFO] [Thread-208124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:16:07.985 [DEBUG] [Thread-208124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:16:07.985 [DEBUG] [Thread-208124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:16:07.985 [DEBUG] [Thread-208124] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:16:07.985 [DEBUG] [Thread-208124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:07.985 [DEBUG] [Thread-208124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:07.985 [DEBUG] [Thread-208124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] client lang: <none>
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] server lang: <none>
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] kex follows: False
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] Compression: none
2026-02-15T17:16:07.986 [DEBUG] [Thread-208124] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:16:08.046 [DEBUG] [Thread-208124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:16:08.047 [DEBUG] [Thread-208124] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:16:08.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:16:08.048 [DEBUG] [Thread-208124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:16:08.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:16:08.110 [DEBUG] [Thread-208124] [transport.py] [_log()] userauth is OK
2026-02-15T17:16:08.110 [DEBUG] [Thread-208124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:16:08.110 [DEBUG] [Thread-208124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:16:08.110 [DEBUG] [Thread-208124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:16:08.110 [DEBUG] [Thread-208124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:16:08.135 [INFO] [Thread-208124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:16:08.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:16:08.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:16:08.998 [DEBUG] [Thread-208124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:16:08.998 [DEBUG] [Thread-208124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:16:09.050 [DEBUG] [Thread-208124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:16:09.050 [DEBUG] [Thread-208124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:16:09.064 [DEBUG] [Thread-208124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:16:09.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:16:09.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:16:09.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:16:09.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:16:09.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:16:09.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:16:09.104 [DEBUG] [Thread-208124] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:16:13.276 [DEBUG] [Thread-208126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:28.324 [DEBUG] [Thread-208127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:39.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:16:39.108 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:16:39.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:16:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 16, 11), 22.17, 22.72, 0.0, 24.58, 22.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:16:40.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:16:11
2026-02-15T17:16:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:16:41.474 [DEBUG] [Thread-208128] [transport.py] [_log()] starting thread (client mode): 0xa5742080
2026-02-15T17:16:41.474 [DEBUG] [Thread-208128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:16:41.495 [DEBUG] [Thread-208128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:16:41.495 [INFO] [Thread-208128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] client lang: <none>
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] server lang: <none>
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] kex follows: False
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] Compression: none
2026-02-15T17:16:41.499 [DEBUG] [Thread-208128] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:16:41.517 [DEBUG] [Thread-208128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:16:41.518 [DEBUG] [Thread-208128] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:16:41.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:16:41.519 [DEBUG] [Thread-208128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:16:41.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:16:41.521 [DEBUG] [Thread-208128] [transport.py] [_log()] userauth is OK
2026-02-15T17:16:41.521 [DEBUG] [Thread-208128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:16:41.521 [DEBUG] [Thread-208128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:16:41.521 [DEBUG] [Thread-208128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:16:41.521 [DEBUG] [Thread-208128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:16:41.540 [INFO] [Thread-208128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:16:41.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:16:42.166 [DEBUG] [Thread-208128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:16:42.175 [DEBUG] [Thread-208128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:16:42.176 [DEBUG] [Thread-208128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:16:42.207 [DEBUG] [Thread-208128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:16:42.207 [DEBUG] [Thread-208128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:16:42.210 [DEBUG] [Thread-208128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:16:42.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:16:42.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:16:42.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:16:42.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:16:42.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:16:42.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:16:42.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:16:42.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:16:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:16:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.636206 -999.00  +22.00  14.45     28   +2.90 1 1 1 1 1   887    0 18.33 -26.50 ----- 16.1 14.4 164.2 24.1 26.4 -29.5 26.2 -28.8 27.9 -28.3 28.5 -29.7
2026-02-15T17:16:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:16:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:16:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.636206
2026-02-15T17:16:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:16:42.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:16:42.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:16:42.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:16:42.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:16:42.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:16:11', tmtdew=22.17, humidity=22.72, cloud=0.0, wind=24.58, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:16:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:16:42.237 [DEBUG] [Thread-208128] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:16:42.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:16:42.334 [DEBUG] [Thread-208131] [transport.py] [_log()] starting thread (client mode): 0xa5743d60
2026-02-15T17:16:42.334 [DEBUG] [Thread-208131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:16:42.348 [DEBUG] [Thread-208131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:16:42.348 [INFO] [Thread-208131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] client lang: <none>
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] server lang: <none>
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] kex follows: False
2026-02-15T17:16:42.356 [DEBUG] [Thread-208131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:16:42.357 [DEBUG] [Thread-208131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:16:42.357 [DEBUG] [Thread-208131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:16:42.357 [DEBUG] [Thread-208131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:16:42.357 [DEBUG] [Thread-208131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:16:42.357 [DEBUG] [Thread-208131] [transport.py] [_log()] Compression: none
2026-02-15T17:16:42.357 [DEBUG] [Thread-208131] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:16:42.413 [DEBUG] [Thread-208131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:16:42.414 [DEBUG] [Thread-208131] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:16:42.414 [DEBUG] [Thread-208131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:16:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:16:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:16:42.470 [DEBUG] [Thread-208131] [transport.py] [_log()] userauth is OK
2026-02-15T17:16:42.470 [DEBUG] [Thread-208131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:16:42.470 [DEBUG] [Thread-208131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:16:42.471 [DEBUG] [Thread-208131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:16:42.471 [DEBUG] [Thread-208131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:16:42.489 [INFO] [Thread-208131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:16:42.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:16:42.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:16:43.296 [DEBUG] [Thread-208131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:16:43.296 [DEBUG] [Thread-208131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:16:43.345 [DEBUG] [Thread-208131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:16:43.345 [DEBUG] [Thread-208131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:16:43.354 [DEBUG] [Thread-208131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:16:43.359 [DEBUG] [Thread-208133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:43.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:16:43.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:16:43.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:16:43.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:16:43.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:16:43.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:16:43.388 [DEBUG] [Thread-208131] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:16:58.419 [DEBUG] [Thread-208134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:16:59.134 [DEBUG] [Thread-208135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:06.024 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:06.025 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:13.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:17:13.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:17:13.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:17:13.457 [DEBUG] [Thread-208136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:15.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 16, 46), 22.25, 22.74, 0.0, 25.41, 22.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:17:15.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:16:46
2026-02-15T17:17:16.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:17:16.248 [DEBUG] [Thread-208137] [transport.py] [_log()] starting thread (client mode): 0xa2d1b790
2026-02-15T17:17:16.248 [DEBUG] [Thread-208137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:17:16.269 [DEBUG] [Thread-208137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:17:16.269 [INFO] [Thread-208137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:16.270 [DEBUG] [Thread-208137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] client lang: <none>
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] server lang: <none>
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] kex follows: False
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] Compression: none
2026-02-15T17:17:16.271 [DEBUG] [Thread-208137] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:17:16.281 [DEBUG] [Thread-208137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:17:16.281 [DEBUG] [Thread-208137] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:17:16.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:17:16.282 [DEBUG] [Thread-208137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:17:16.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:17:16.284 [DEBUG] [Thread-208137] [transport.py] [_log()] userauth is OK
2026-02-15T17:17:16.284 [DEBUG] [Thread-208137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:17:16.284 [DEBUG] [Thread-208137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:17:16.285 [DEBUG] [Thread-208137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:17:16.285 [DEBUG] [Thread-208137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:17:16.309 [INFO] [Thread-208137] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:17:16.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:17:16.943 [DEBUG] [Thread-208137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:17:16.943 [DEBUG] [Thread-208137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:17:16.943 [DEBUG] [Thread-208137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:17:16.984 [DEBUG] [Thread-208137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:17:16.985 [DEBUG] [Thread-208137] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:17:16.988 [DEBUG] [Thread-208137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:17:16.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:17:17.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:17:17.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:17:17.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:17:17.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:17:17.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:17:17.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:17:17.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:17:17.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:17:17.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.636553 -999.00  +21.90  23.34     28   +2.80 1 1 1 1 1   887    0 18.25 -28.11 ----- 22.6 23.3 158.7 27.9 26.4 -30.4 26.2 -28.4 27.8 -28.0 28.6 -30.3
2026-02-15T17:17:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:17:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:17:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.636553
2026-02-15T17:17:17.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:17:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:17:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:17:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:17:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:17:17.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:16:46', tmtdew=22.25, humidity=22.74, cloud=0.0, wind=25.41, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:16:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:17:17.014 [DEBUG] [Thread-208137] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:17:17.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:17:17.108 [DEBUG] [Thread-208140] [transport.py] [_log()] starting thread (client mode): 0xa2d55330
2026-02-15T17:17:17.108 [DEBUG] [Thread-208140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:17:17.124 [DEBUG] [Thread-208140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:17:17.124 [INFO] [Thread-208140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] client lang: <none>
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] server lang: <none>
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] kex follows: False
2026-02-15T17:17:17.132 [DEBUG] [Thread-208140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:17:17.133 [DEBUG] [Thread-208140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:17:17.133 [DEBUG] [Thread-208140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:17:17.133 [DEBUG] [Thread-208140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:17:17.133 [DEBUG] [Thread-208140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:17:17.133 [DEBUG] [Thread-208140] [transport.py] [_log()] Compression: none
2026-02-15T17:17:17.133 [DEBUG] [Thread-208140] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:17:17.190 [DEBUG] [Thread-208140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:17:17.190 [DEBUG] [Thread-208140] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:17:17.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:17:17.192 [DEBUG] [Thread-208140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:17:17.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:17:17.246 [DEBUG] [Thread-208140] [transport.py] [_log()] userauth is OK
2026-02-15T17:17:17.246 [DEBUG] [Thread-208140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:17:17.246 [DEBUG] [Thread-208140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:17:17.246 [DEBUG] [Thread-208140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:17:17.246 [DEBUG] [Thread-208140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:17:17.270 [INFO] [Thread-208140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:17:17.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:17:17.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:17:18.131 [DEBUG] [Thread-208140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:17:18.131 [DEBUG] [Thread-208140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:17:18.179 [DEBUG] [Thread-208140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:17:18.180 [DEBUG] [Thread-208140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:17:18.189 [DEBUG] [Thread-208140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:17:18.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:17:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:17:18.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:17:18.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:17:18.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:17:18.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:17:18.229 [DEBUG] [Thread-208140] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:17:28.495 [DEBUG] [Thread-208142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:43.547 [DEBUG] [Thread-208144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:48.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:17:48.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:17:48.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:17:50.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 17, 21), 22.32, 22.61, 0.0, 24.74, 22.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:17:50.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:17:21
2026-02-15T17:17:50.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:17:50.896 [DEBUG] [Thread-208145] [transport.py] [_log()] starting thread (client mode): 0xa575b340
2026-02-15T17:17:50.896 [DEBUG] [Thread-208145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:17:50.916 [DEBUG] [Thread-208145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:17:50.916 [INFO] [Thread-208145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:50.919 [DEBUG] [Thread-208145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] client lang: <none>
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] server lang: <none>
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] kex follows: False
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] Compression: none
2026-02-15T17:17:50.920 [DEBUG] [Thread-208145] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:17:50.938 [DEBUG] [Thread-208145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:17:50.938 [DEBUG] [Thread-208145] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:17:50.939 [DEBUG] [Thread-208145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:17:50.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:17:50.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:17:50.941 [DEBUG] [Thread-208145] [transport.py] [_log()] userauth is OK
2026-02-15T17:17:50.941 [DEBUG] [Thread-208145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:17:50.941 [DEBUG] [Thread-208145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:17:50.941 [DEBUG] [Thread-208145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:17:50.941 [DEBUG] [Thread-208145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:17:50.977 [INFO] [Thread-208145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:17:50.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:17:51.617 [DEBUG] [Thread-208145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:17:51.618 [DEBUG] [Thread-208145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:17:51.618 [DEBUG] [Thread-208145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:17:51.658 [DEBUG] [Thread-208145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:17:51.658 [DEBUG] [Thread-208145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:17:51.661 [DEBUG] [Thread-208145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:17:51.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:17:51.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:17:51.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:17:51.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:17:51.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:17:51.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:17:51.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:17:51.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:17:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:17:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.636901 -999.00  +21.90  22.28     28   +2.90 1 1 1 1 1   887    0 18.78 -30.17 ----- 19.0 22.3 168.4 28.6 26.4 -30.3 26.1 -28.2 27.8 -26.6 28.5 -30.0
2026-02-15T17:17:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:17:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:17:51.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.636901
2026-02-15T17:17:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:17:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:17:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:17:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:17:51.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:17:51.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:17:21', tmtdew=22.32, humidity=22.61, cloud=0.0, wind=24.74, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:17:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:17:51.696 [DEBUG] [Thread-208145] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:17:51.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:17:51.805 [DEBUG] [Thread-208148] [transport.py] [_log()] starting thread (client mode): 0xa2d4ce80
2026-02-15T17:17:51.805 [DEBUG] [Thread-208148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:17:51.819 [DEBUG] [Thread-208148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:17:51.819 [INFO] [Thread-208148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] client lang: <none>
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] server lang: <none>
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] kex follows: False
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] Compression: none
2026-02-15T17:17:51.826 [DEBUG] [Thread-208148] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:17:51.883 [DEBUG] [Thread-208148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:17:51.884 [DEBUG] [Thread-208148] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:17:51.884 [DEBUG] [Thread-208148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:17:51.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:17:51.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:17:51.941 [DEBUG] [Thread-208148] [transport.py] [_log()] userauth is OK
2026-02-15T17:17:51.941 [DEBUG] [Thread-208148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:17:51.942 [DEBUG] [Thread-208148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:17:51.942 [DEBUG] [Thread-208148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:17:51.942 [DEBUG] [Thread-208148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:17:51.961 [INFO] [Thread-208148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:17:51.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:17:51.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:17:52.785 [DEBUG] [Thread-208148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:17:52.785 [DEBUG] [Thread-208148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:17:52.833 [DEBUG] [Thread-208148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:17:52.833 [DEBUG] [Thread-208148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:17:52.842 [DEBUG] [Thread-208148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:17:52.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:17:52.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:17:52.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:17:52.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:17:52.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:17:52.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:17:52.876 [DEBUG] [Thread-208148] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:17:55.352 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:58.585 [DEBUG] [Thread-208150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:17:59.167 [DEBUG] [Thread-208151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:06.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:06.166 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:13.636 [DEBUG] [Thread-208152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:22.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:18:22.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:18:22.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:18:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 17, 57), 22.3, 22.92, 0.0, 31.02, 22.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:18:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:17:57
2026-02-15T17:18:25.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:18:25.388 [DEBUG] [Thread-208153] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-15T17:18:25.388 [DEBUG] [Thread-208153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:18:25.408 [DEBUG] [Thread-208153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:18:25.408 [INFO] [Thread-208153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:18:25.411 [DEBUG] [Thread-208153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:18:25.411 [DEBUG] [Thread-208153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:18:25.411 [DEBUG] [Thread-208153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:18:25.411 [DEBUG] [Thread-208153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:18:25.411 [DEBUG] [Thread-208153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] client lang: <none>
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] server lang: <none>
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] kex follows: False
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] Compression: none
2026-02-15T17:18:25.412 [DEBUG] [Thread-208153] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:18:25.427 [DEBUG] [Thread-208153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:18:25.427 [DEBUG] [Thread-208153] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:18:25.427 [DEBUG] [Thread-208153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:18:25.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:18:25.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:18:25.429 [DEBUG] [Thread-208153] [transport.py] [_log()] userauth is OK
2026-02-15T17:18:25.429 [DEBUG] [Thread-208153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:18:25.429 [DEBUG] [Thread-208153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:18:25.429 [DEBUG] [Thread-208153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:18:25.429 [DEBUG] [Thread-208153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:18:25.446 [INFO] [Thread-208153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:18:25.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:18:26.099 [DEBUG] [Thread-208153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:18:26.099 [DEBUG] [Thread-208153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:18:26.099 [DEBUG] [Thread-208153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:18:26.139 [DEBUG] [Thread-208153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:18:26.140 [DEBUG] [Thread-208153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:18:26.143 [DEBUG] [Thread-208153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:18:26.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:18:26.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:18:26.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:18:26.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:18:26.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:18:26.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:18:26.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:18:26.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:18:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:18:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.637248 -999.00  +22.10  12.61     28   +3.00 1 1 1 1 1   887    0 18.99 -31.30 ----- 20.2 12.6 163.0 24.1 26.4 -29.5 26.1 -27.8 27.7 -27.2 28.5 -29.4
2026-02-15T17:18:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:18:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:18:26.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.637248
2026-02-15T17:18:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:18:26.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:18:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:18:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:18:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:18:26.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:17:57', tmtdew=22.3, humidity=22.92, cloud=0.0, wind=31.02, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:17:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:18:26.169 [DEBUG] [Thread-208153] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:18:26.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:18:26.264 [DEBUG] [Thread-208156] [transport.py] [_log()] starting thread (client mode): 0xa5742d70
2026-02-15T17:18:26.264 [DEBUG] [Thread-208156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:18:26.279 [DEBUG] [Thread-208156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:18:26.279 [INFO] [Thread-208156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:18:26.286 [DEBUG] [Thread-208156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] client lang: <none>
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] server lang: <none>
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] kex follows: False
2026-02-15T17:18:26.287 [DEBUG] [Thread-208156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:18:26.288 [DEBUG] [Thread-208156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:18:26.288 [DEBUG] [Thread-208156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:18:26.288 [DEBUG] [Thread-208156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:18:26.288 [DEBUG] [Thread-208156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:18:26.288 [DEBUG] [Thread-208156] [transport.py] [_log()] Compression: none
2026-02-15T17:18:26.288 [DEBUG] [Thread-208156] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:18:26.345 [DEBUG] [Thread-208156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:18:26.345 [DEBUG] [Thread-208156] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:18:26.345 [DEBUG] [Thread-208156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:18:26.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:18:26.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:18:26.401 [DEBUG] [Thread-208156] [transport.py] [_log()] userauth is OK
2026-02-15T17:18:26.401 [DEBUG] [Thread-208156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:18:26.401 [DEBUG] [Thread-208156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:18:26.401 [DEBUG] [Thread-208156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:18:26.401 [DEBUG] [Thread-208156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:18:26.416 [INFO] [Thread-208156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:18:26.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:18:26.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:18:27.263 [DEBUG] [Thread-208156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:18:27.263 [DEBUG] [Thread-208156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:18:27.310 [DEBUG] [Thread-208156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:18:27.310 [DEBUG] [Thread-208156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:18:27.319 [DEBUG] [Thread-208156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:18:27.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:18:27.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:18:27.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:18:27.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:18:27.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:18:27.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:18:27.358 [DEBUG] [Thread-208156] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:18:28.679 [DEBUG] [Thread-208158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:35.914 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:43.732 [DEBUG] [Thread-208159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:18:57.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:18:57.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:18:58.772 [DEBUG] [Thread-208160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:59.207 [DEBUG] [Thread-208161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:18:59.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 18, 32), 22.3, 22.94, 0.0, 31.23, 22.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:18:59.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:18:32
2026-02-15T17:19:00.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:19:00.264 [DEBUG] [Thread-208162] [transport.py] [_log()] starting thread (client mode): 0xa2d78130
2026-02-15T17:19:00.265 [DEBUG] [Thread-208162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:19:00.279 [DEBUG] [Thread-208162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:19:00.279 [INFO] [Thread-208162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] client lang: <none>
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] server lang: <none>
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] kex follows: False
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:19:00.282 [DEBUG] [Thread-208162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:19:00.283 [DEBUG] [Thread-208162] [transport.py] [_log()] Compression: none
2026-02-15T17:19:00.283 [DEBUG] [Thread-208162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:19:00.300 [DEBUG] [Thread-208162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:19:00.300 [DEBUG] [Thread-208162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:19:00.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:19:00.301 [DEBUG] [Thread-208162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:19:00.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:19:00.303 [DEBUG] [Thread-208162] [transport.py] [_log()] userauth is OK
2026-02-15T17:19:00.304 [DEBUG] [Thread-208162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:19:00.304 [DEBUG] [Thread-208162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:19:00.304 [DEBUG] [Thread-208162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:19:00.304 [DEBUG] [Thread-208162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:19:00.329 [INFO] [Thread-208162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:19:00.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:19:00.972 [DEBUG] [Thread-208162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:19:00.972 [DEBUG] [Thread-208162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:19:00.972 [DEBUG] [Thread-208162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:19:01.014 [DEBUG] [Thread-208162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:19:01.014 [DEBUG] [Thread-208162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:19:01.017 [DEBUG] [Thread-208162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:19:01.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:19:01.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:19:01.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:19:01.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:19:01.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:19:01.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:19:01.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:19:01.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:19:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:19:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.637942 -999.00  +21.90  21.29     28   +2.90 1 1 1 1 1   887    0 18.51 -29.34 ----- 22.1 21.3 140.6 28.9 26.3 -30.1 26.0 -28.3 27.7 -27.9 28.3 -29.9
2026-02-15T17:19:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:19:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:19:01.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.637942
2026-02-15T17:19:01.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:19:01.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:19:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:19:01.044 [DEBUG] [Thread-208162] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:19:01.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:19:01.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:19:01.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:18:32', tmtdew=22.3, humidity=22.94, cloud=0.0, wind=31.23, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:18:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:19:01.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:19:01.154 [DEBUG] [Thread-208165] [transport.py] [_log()] starting thread (client mode): 0xa2d79ae0
2026-02-15T17:19:01.154 [DEBUG] [Thread-208165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:19:01.173 [DEBUG] [Thread-208165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:19:01.173 [INFO] [Thread-208165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:19:01.181 [DEBUG] [Thread-208165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:19:01.181 [DEBUG] [Thread-208165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] client lang: <none>
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] server lang: <none>
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] kex follows: False
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:19:01.182 [DEBUG] [Thread-208165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:19:01.183 [DEBUG] [Thread-208165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:19:01.183 [DEBUG] [Thread-208165] [transport.py] [_log()] Compression: none
2026-02-15T17:19:01.183 [DEBUG] [Thread-208165] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:19:01.237 [DEBUG] [Thread-208165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:19:01.238 [DEBUG] [Thread-208165] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:19:01.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:19:01.239 [DEBUG] [Thread-208165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:19:01.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:19:01.293 [DEBUG] [Thread-208165] [transport.py] [_log()] userauth is OK
2026-02-15T17:19:01.293 [DEBUG] [Thread-208165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:19:01.293 [DEBUG] [Thread-208165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:19:01.293 [DEBUG] [Thread-208165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:19:01.293 [DEBUG] [Thread-208165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:19:01.310 [INFO] [Thread-208165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:19:01.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:19:01.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:19:02.160 [DEBUG] [Thread-208165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:19:02.160 [DEBUG] [Thread-208165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:19:02.208 [DEBUG] [Thread-208165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:19:02.208 [DEBUG] [Thread-208165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:19:02.216 [DEBUG] [Thread-208165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:19:02.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:19:02.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:19:02.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:19:02.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:19:02.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:19:02.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:19:02.248 [DEBUG] [Thread-208165] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:19:06.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:06.308 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:13.806 [DEBUG] [Thread-208167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:28.857 [DEBUG] [Thread-208168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:32.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:19:32.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:19:32.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:19:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 19, 7), 22.34, 22.89, 0.0, 32.06, 22.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:19:34.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:19:07
2026-02-15T17:19:34.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:19:34.663 [DEBUG] [Thread-208169] [transport.py] [_log()] starting thread (client mode): 0xa2d79e10
2026-02-15T17:19:34.663 [DEBUG] [Thread-208169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:19:34.684 [DEBUG] [Thread-208169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:19:34.684 [INFO] [Thread-208169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:19:34.688 [DEBUG] [Thread-208169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:19:34.688 [DEBUG] [Thread-208169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:19:34.688 [DEBUG] [Thread-208169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:19:34.688 [DEBUG] [Thread-208169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:34.688 [DEBUG] [Thread-208169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:34.688 [DEBUG] [Thread-208169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] client lang: <none>
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] server lang: <none>
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] kex follows: False
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] Compression: none
2026-02-15T17:19:34.689 [DEBUG] [Thread-208169] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:19:34.706 [DEBUG] [Thread-208169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:19:34.707 [DEBUG] [Thread-208169] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:19:34.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:19:34.708 [DEBUG] [Thread-208169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:19:34.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:19:34.710 [DEBUG] [Thread-208169] [transport.py] [_log()] userauth is OK
2026-02-15T17:19:34.710 [DEBUG] [Thread-208169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:19:34.710 [DEBUG] [Thread-208169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:19:34.710 [DEBUG] [Thread-208169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:19:34.710 [DEBUG] [Thread-208169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:19:34.727 [INFO] [Thread-208169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:19:34.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:19:35.481 [DEBUG] [Thread-208169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:19:35.482 [DEBUG] [Thread-208169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:19:35.482 [DEBUG] [Thread-208169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:19:35.522 [DEBUG] [Thread-208169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:19:35.523 [DEBUG] [Thread-208169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:19:35.526 [DEBUG] [Thread-208169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:19:35.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:19:35.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:19:35.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:19:35.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:19:35.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:19:35.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:19:35.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:19:35.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:19:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:19:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.638290 -999.00  +21.90  23.30     28   +3.00 1 1 1 1 1   887    0 18.63 -31.57 ----- 25.6 23.3 163.6 29.0 26.2 -29.8 26.0 -28.0 27.6 -27.6 28.3 -29.9
2026-02-15T17:19:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:19:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:19:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.638290
2026-02-15T17:19:35.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:19:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:19:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:19:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:19:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:19:35.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:19:07', tmtdew=22.34, humidity=22.89, cloud=0.0, wind=32.06, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:19:08.256', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:19:35.553 [DEBUG] [Thread-208169] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:19:35.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:19:35.648 [DEBUG] [Thread-208172] [transport.py] [_log()] starting thread (client mode): 0xa5743dc0
2026-02-15T17:19:35.648 [DEBUG] [Thread-208172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:19:35.662 [DEBUG] [Thread-208172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:19:35.662 [INFO] [Thread-208172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:19:35.670 [DEBUG] [Thread-208172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:19:35.670 [DEBUG] [Thread-208172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:19:35.670 [DEBUG] [Thread-208172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:19:35.670 [DEBUG] [Thread-208172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:35.670 [DEBUG] [Thread-208172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] client lang: <none>
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] server lang: <none>
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] kex follows: False
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:19:35.671 [DEBUG] [Thread-208172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:19:35.672 [DEBUG] [Thread-208172] [transport.py] [_log()] Compression: none
2026-02-15T17:19:35.672 [DEBUG] [Thread-208172] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:19:35.730 [DEBUG] [Thread-208172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:19:35.731 [DEBUG] [Thread-208172] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:19:35.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:19:35.732 [DEBUG] [Thread-208172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:19:35.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:19:35.786 [DEBUG] [Thread-208172] [transport.py] [_log()] userauth is OK
2026-02-15T17:19:35.786 [DEBUG] [Thread-208172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:19:35.786 [DEBUG] [Thread-208172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:19:35.786 [DEBUG] [Thread-208172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:19:35.786 [DEBUG] [Thread-208172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:19:35.807 [INFO] [Thread-208172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:19:35.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:19:35.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:19:36.607 [DEBUG] [Thread-208172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:19:36.607 [DEBUG] [Thread-208172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:19:36.655 [DEBUG] [Thread-208172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:19:36.655 [DEBUG] [Thread-208172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:19:36.664 [DEBUG] [Thread-208172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:19:36.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17: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')
2026-02-15T17:19:36.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:19:36.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:19:36.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:19:36.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:19:36.701 [DEBUG] [Thread-208172] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:19:39.081 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:43.893 [DEBUG] [Thread-208174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:58.943 [DEBUG] [Thread-208175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:19:59.257 [DEBUG] [Thread-208176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:03.593 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:06.448 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:06.450 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:06.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:20:06.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:20:06.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:20:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 19, 43), 23.1, 21.61, 0.0, 31.05, 23.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:20:08.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:19:43
2026-02-15T17:20:08.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:20:09.035 [DEBUG] [Thread-208177] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-15T17:20:09.035 [DEBUG] [Thread-208177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:20:09.057 [DEBUG] [Thread-208177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:20:09.057 [INFO] [Thread-208177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] client lang: <none>
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] server lang: <none>
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] kex follows: False
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:20:09.060 [DEBUG] [Thread-208177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:20:09.061 [DEBUG] [Thread-208177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:20:09.061 [DEBUG] [Thread-208177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:20:09.061 [DEBUG] [Thread-208177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:20:09.061 [DEBUG] [Thread-208177] [transport.py] [_log()] Compression: none
2026-02-15T17:20:09.061 [DEBUG] [Thread-208177] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:20:09.078 [DEBUG] [Thread-208177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:20:09.078 [DEBUG] [Thread-208177] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:20:09.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:20:09.080 [DEBUG] [Thread-208177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:20:09.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:20:09.081 [DEBUG] [Thread-208177] [transport.py] [_log()] userauth is OK
2026-02-15T17:20:09.082 [DEBUG] [Thread-208177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:20:09.082 [DEBUG] [Thread-208177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:20:09.082 [DEBUG] [Thread-208177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:20:09.082 [DEBUG] [Thread-208177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:20:09.106 [INFO] [Thread-208177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:20:09.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:20:12.559 [DEBUG] [Thread-208177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:20:12.559 [DEBUG] [Thread-208177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:20:12.560 [DEBUG] [Thread-208177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:20:12.600 [DEBUG] [Thread-208177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:20:12.601 [DEBUG] [Thread-208177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:20:12.604 [DEBUG] [Thread-208177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:20:12.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:20:12.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:20:12.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:20:12.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:20:12.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:20:12.625 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:20:12.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:20:12.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:20:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:20:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.638637 -999.00  +21.80  21.67     28   +3.00 1 1 1 1 1   887    0 18.47 -31.66 ----- 22.6 21.7 171.4 34.2 26.1 -29.8 25.9 -28.4 27.5 -27.5 28.2 -29.1
2026-02-15T17:20:12.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:20:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:20:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.638637
2026-02-15T17:20:12.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:20:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:20:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:20:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:20:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:20:12.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:19:43', tmtdew=23.1, humidity=21.61, cloud=0.0, wind=31.05, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:19:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:20:12.629 [DEBUG] [Thread-208177] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:20:12.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:20:12.728 [DEBUG] [Thread-208180] [transport.py] [_log()] starting thread (client mode): 0xa2d19ae0
2026-02-15T17:20:12.728 [DEBUG] [Thread-208180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:20:12.742 [DEBUG] [Thread-208180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:20:12.743 [INFO] [Thread-208180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:20:12.750 [DEBUG] [Thread-208180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:12.751 [DEBUG] [Thread-208180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] client lang: <none>
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] server lang: <none>
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] kex follows: False
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:20:12.752 [DEBUG] [Thread-208180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:20:12.753 [DEBUG] [Thread-208180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:20:12.753 [DEBUG] [Thread-208180] [transport.py] [_log()] Compression: none
2026-02-15T17:20:12.753 [DEBUG] [Thread-208180] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:20:12.810 [DEBUG] [Thread-208180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:20:12.811 [DEBUG] [Thread-208180] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:20:12.811 [DEBUG] [Thread-208180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:20:12.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:20:12.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:20:12.870 [DEBUG] [Thread-208180] [transport.py] [_log()] userauth is OK
2026-02-15T17:20:12.870 [DEBUG] [Thread-208180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:20:12.870 [DEBUG] [Thread-208180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:20:12.870 [DEBUG] [Thread-208180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:20:12.871 [DEBUG] [Thread-208180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:20:12.890 [INFO] [Thread-208180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:20:12.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:20:12.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:20:13.687 [DEBUG] [Thread-208180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:20:13.687 [DEBUG] [Thread-208180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:20:13.735 [DEBUG] [Thread-208180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:20:13.736 [DEBUG] [Thread-208180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:20:13.745 [DEBUG] [Thread-208180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:20:13.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:20:13.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:20:13.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
2026-02-15T17:20:13.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:20:13.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:20:13.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:20:13.782 [DEBUG] [Thread-208180] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:20:13.976 [DEBUG] [Thread-208182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:26.047 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:29.020 [DEBUG] [Thread-208183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:43.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:20:43.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:20:43.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:20:44.057 [DEBUG] [Thread-208184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 20, 18), 22.09, 22.82, 0.0, 30.12, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:20:45.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:20:18
2026-02-15T17:20:46.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:20:46.196 [DEBUG] [Thread-208185] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T17:20:46.196 [DEBUG] [Thread-208185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:20:46.216 [DEBUG] [Thread-208185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:20:46.217 [INFO] [Thread-208185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:20:46.219 [DEBUG] [Thread-208185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] client lang: <none>
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] server lang: <none>
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] kex follows: False
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] Compression: none
2026-02-15T17:20:46.220 [DEBUG] [Thread-208185] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:20:46.238 [DEBUG] [Thread-208185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:20:46.238 [DEBUG] [Thread-208185] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:20:46.239 [DEBUG] [Thread-208185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:20:46.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:20:46.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:20:46.241 [DEBUG] [Thread-208185] [transport.py] [_log()] userauth is OK
2026-02-15T17:20:46.241 [DEBUG] [Thread-208185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:20:46.241 [DEBUG] [Thread-208185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:20:46.241 [DEBUG] [Thread-208185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:20:46.241 [DEBUG] [Thread-208185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:20:46.266 [INFO] [Thread-208185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:20:46.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:20:46.876 [DEBUG] [Thread-208185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:20:46.877 [DEBUG] [Thread-208185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:20:46.877 [DEBUG] [Thread-208185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:20:46.917 [DEBUG] [Thread-208185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:20:46.918 [DEBUG] [Thread-208185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:20:46.921 [DEBUG] [Thread-208185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:20:46.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:20:46.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:20:46.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:20:46.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:20:46.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:20:46.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:20:46.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:20:46.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:20:46.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:20:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.638984 -999.00  +21.70  24.54     29   +2.90 1 1 1 1 1   887    0 18.58 -29.49 ----- 19.0 24.5 164.4 31.3 26.1 -29.8 25.9 -29.7 27.4 -27.4 28.1 -29.3
2026-02-15T17:20:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:20:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:20:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.638984
2026-02-15T17:20:46.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:20:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:20:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:20:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:20:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:20:46.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:20:18', tmtdew=22.09, humidity=22.82, cloud=0.0, wind=30.12, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:20:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:20:46.950 [DEBUG] [Thread-208185] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:20:47.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:20:47.049 [DEBUG] [Thread-208188] [transport.py] [_log()] starting thread (client mode): 0xa2d4c1f0
2026-02-15T17:20:47.050 [DEBUG] [Thread-208188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:20:47.064 [DEBUG] [Thread-208188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:20:47.064 [INFO] [Thread-208188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:20:47.072 [DEBUG] [Thread-208188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:20:47.072 [DEBUG] [Thread-208188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] client lang: <none>
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] server lang: <none>
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] kex follows: False
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] Compression: none
2026-02-15T17:20:47.073 [DEBUG] [Thread-208188] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:20:47.130 [DEBUG] [Thread-208188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:20:47.130 [DEBUG] [Thread-208188] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:20:47.131 [DEBUG] [Thread-208188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:20:47.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:20:47.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:20:47.186 [DEBUG] [Thread-208188] [transport.py] [_log()] userauth is OK
2026-02-15T17:20:47.186 [DEBUG] [Thread-208188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:20:47.186 [DEBUG] [Thread-208188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:20:47.186 [DEBUG] [Thread-208188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:20:47.186 [DEBUG] [Thread-208188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:20:47.204 [INFO] [Thread-208188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:20:47.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:20:47.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:20:48.029 [DEBUG] [Thread-208188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:20:48.029 [DEBUG] [Thread-208188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:20:48.077 [DEBUG] [Thread-208188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:20:48.077 [DEBUG] [Thread-208188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:20:48.087 [DEBUG] [Thread-208188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:20:48.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:20:48.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:20:48.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:20:48.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:20:48.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:20:48.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:20:48.120 [DEBUG] [Thread-208188] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:20:48.632 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:59.097 [DEBUG] [Thread-208190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:20:59.290 [DEBUG] [Thread-208191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:06.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:06.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:11.185 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:14.145 [DEBUG] [Thread-208192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:18.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:21:18.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:21:18.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:21:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 20, 53), 22.0, 23.39, 0.0, 27.05, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:21:20.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:20:53
2026-02-15T17:21:20.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:21:21.072 [DEBUG] [Thread-208193] [transport.py] [_log()] starting thread (client mode): 0xa57419c0
2026-02-15T17:21:21.072 [DEBUG] [Thread-208193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:21:21.094 [DEBUG] [Thread-208193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:21:21.094 [INFO] [Thread-208193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] client lang: <none>
2026-02-15T17:21:21.098 [DEBUG] [Thread-208193] [transport.py] [_log()] server lang: <none>
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] kex follows: False
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] Compression: none
2026-02-15T17:21:21.099 [DEBUG] [Thread-208193] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:21:21.117 [DEBUG] [Thread-208193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:21:21.118 [DEBUG] [Thread-208193] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:21:21.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:21:21.119 [DEBUG] [Thread-208193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:21:21.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:21:21.121 [DEBUG] [Thread-208193] [transport.py] [_log()] userauth is OK
2026-02-15T17:21:21.121 [DEBUG] [Thread-208193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:21:21.121 [DEBUG] [Thread-208193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:21:21.121 [DEBUG] [Thread-208193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:21:21.122 [DEBUG] [Thread-208193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:21:21.144 [INFO] [Thread-208193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:21:21.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:21:21.786 [DEBUG] [Thread-208193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:21:21.786 [DEBUG] [Thread-208193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:21:21.786 [DEBUG] [Thread-208193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:21:21.828 [DEBUG] [Thread-208193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:21:21.828 [DEBUG] [Thread-208193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:21:21.830 [DEBUG] [Thread-208193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:21:21.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:21:21.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:21:21.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:21:21.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:21:21.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:21:21.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:21:21.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:21:21.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:21:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:21:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.639331 -999.00  +21.80  21.82     29   +3.10 1 1 1 1 1   887    0 18.28 -31.90 ----- 22.4 21.8 169.6 27.7 26.1 -29.3 25.8 -28.8 27.4 -27.2 28.2 -29.0
2026-02-15T17:21:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:21:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:21:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.639331
2026-02-15T17:21:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:21:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:21:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:21:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:21:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:21:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:20:53', tmtdew=22.0, humidity=23.39, cloud=0.0, wind=27.05, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:20:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:21:21.856 [DEBUG] [Thread-208193] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:21:21.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:21:21.951 [DEBUG] [Thread-208196] [transport.py] [_log()] starting thread (client mode): 0xa2d19ea0
2026-02-15T17:21:21.951 [DEBUG] [Thread-208196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:21:21.966 [DEBUG] [Thread-208196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:21:21.966 [INFO] [Thread-208196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:21:21.973 [DEBUG] [Thread-208196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] client lang: <none>
2026-02-15T17:21:21.974 [DEBUG] [Thread-208196] [transport.py] [_log()] server lang: <none>
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] kex follows: False
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] Compression: none
2026-02-15T17:21:21.975 [DEBUG] [Thread-208196] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:21:22.033 [DEBUG] [Thread-208196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:21:22.034 [DEBUG] [Thread-208196] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:21:22.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:21:22.035 [DEBUG] [Thread-208196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:21:22.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:21:22.089 [DEBUG] [Thread-208196] [transport.py] [_log()] userauth is OK
2026-02-15T17:21:22.090 [DEBUG] [Thread-208196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:21:22.090 [DEBUG] [Thread-208196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:21:22.090 [DEBUG] [Thread-208196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:21:22.090 [DEBUG] [Thread-208196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:21:22.111 [INFO] [Thread-208196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:21:22.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:21:22.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:21:22.942 [DEBUG] [Thread-208196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:21:22.942 [DEBUG] [Thread-208196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:21:22.990 [DEBUG] [Thread-208196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:21:22.990 [DEBUG] [Thread-208196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:21:22.998 [DEBUG] [Thread-208196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:21:23.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:21:23.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:21:23.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:21:23.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:21:23.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:21:23.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:21:23.031 [DEBUG] [Thread-208196] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:21:29.178 [DEBUG] [Thread-208198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:33.779 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:44.230 [DEBUG] [Thread-208199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:53.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:21:53.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17: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
2026-02-15T17:21:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 21, 28), 21.91, 23.54, 0.0, 28.28, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:21:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:21:28
2026-02-15T17:21:55.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:21:55.519 [DEBUG] [Thread-208200] [transport.py] [_log()] starting thread (client mode): 0xa2d79990
2026-02-15T17:21:55.519 [DEBUG] [Thread-208200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:21:55.538 [DEBUG] [Thread-208200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:21:55.538 [INFO] [Thread-208200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:55.542 [DEBUG] [Thread-208200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] client lang: <none>
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] server lang: <none>
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] kex follows: False
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] Compression: none
2026-02-15T17:21:55.543 [DEBUG] [Thread-208200] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:21:55.560 [DEBUG] [Thread-208200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:21:55.561 [DEBUG] [Thread-208200] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:21:55.561 [DEBUG] [Thread-208200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:21:55.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:21:55.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:21:55.563 [DEBUG] [Thread-208200] [transport.py] [_log()] userauth is OK
2026-02-15T17:21:55.564 [DEBUG] [Thread-208200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:21:55.564 [DEBUG] [Thread-208200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:21:55.564 [DEBUG] [Thread-208200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:21:55.564 [DEBUG] [Thread-208200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:21:55.585 [INFO] [Thread-208200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:21:55.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:21:56.292 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:56.379 [DEBUG] [Thread-208200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:21:56.380 [DEBUG] [Thread-208200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:21:56.380 [DEBUG] [Thread-208200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:21:56.420 [DEBUG] [Thread-208200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:21:56.421 [DEBUG] [Thread-208200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:21:56.424 [DEBUG] [Thread-208200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:21:56.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:21:56.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:21:56.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:21:56.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:21:56.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:21:56.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:21:56.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:21:56.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:21:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:21:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.639678 -999.00  +21.70  20.04     29   +3.20 1 1 1 1 1   887    0 18.31 -35.27 ----- 27.5 20.0 183.6 28.9 26.0 -30.3 25.6 -31.9 27.4 -28.7 28.0 -30.8
2026-02-15T17:21:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:21:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:21:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.639678
2026-02-15T17:21:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:21:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:21:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:21:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:21:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:21:56.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:21:28', tmtdew=21.91, humidity=23.54, cloud=0.0, wind=28.28, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:21:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:21:56.451 [DEBUG] [Thread-208200] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:21:56.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:21:56.555 [DEBUG] [Thread-208203] [transport.py] [_log()] starting thread (client mode): 0xa2d1abf0
2026-02-15T17:21:56.556 [DEBUG] [Thread-208203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:21:56.574 [DEBUG] [Thread-208203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:21:56.575 [INFO] [Thread-208203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:21:56.582 [DEBUG] [Thread-208203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] client lang: <none>
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] server lang: <none>
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] kex follows: False
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:21:56.583 [DEBUG] [Thread-208203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:21:56.584 [DEBUG] [Thread-208203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:21:56.584 [DEBUG] [Thread-208203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:21:56.584 [DEBUG] [Thread-208203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:21:56.584 [DEBUG] [Thread-208203] [transport.py] [_log()] Compression: none
2026-02-15T17:21:56.584 [DEBUG] [Thread-208203] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:21:56.642 [DEBUG] [Thread-208203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:21:56.642 [DEBUG] [Thread-208203] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:21:56.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:21:56.644 [DEBUG] [Thread-208203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:21:56.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:21:56.698 [DEBUG] [Thread-208203] [transport.py] [_log()] userauth is OK
2026-02-15T17:21:56.699 [DEBUG] [Thread-208203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:21:56.699 [DEBUG] [Thread-208203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:21:56.699 [DEBUG] [Thread-208203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:21:56.699 [DEBUG] [Thread-208203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:21:56.718 [INFO] [Thread-208203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:21:56.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:21:56.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:21:57.563 [DEBUG] [Thread-208203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:21:57.564 [DEBUG] [Thread-208203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:21:57.611 [DEBUG] [Thread-208203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:21:57.612 [DEBUG] [Thread-208203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:21:57.621 [DEBUG] [Thread-208203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:21:57.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:21:57.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:21:57.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:21:57.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:21:57.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:21:57.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:21:57.657 [DEBUG] [Thread-208203] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:21:59.272 [DEBUG] [Thread-208205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:21:59.357 [DEBUG] [Thread-208206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:06.748 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:06.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:14.320 [DEBUG] [Thread-208207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:18.882 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:22:27.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:22: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
2026-02-15T17:22:29.354 [DEBUG] [Thread-208208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:29.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 22, 4), 21.86, 23.61, 0.0, 32.62, 22.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:22:29.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:22:04
2026-02-15T17:22:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:22:30.057 [DEBUG] [Thread-208209] [transport.py] [_log()] starting thread (client mode): 0xa2dc2500
2026-02-15T17:22:30.057 [DEBUG] [Thread-208209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:22:30.077 [DEBUG] [Thread-208209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:22:30.078 [INFO] [Thread-208209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:22:30.080 [DEBUG] [Thread-208209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:22:30.080 [DEBUG] [Thread-208209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] client lang: <none>
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] server lang: <none>
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] kex follows: False
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] Compression: none
2026-02-15T17:22:30.081 [DEBUG] [Thread-208209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:22:30.100 [DEBUG] [Thread-208209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:22:30.101 [DEBUG] [Thread-208209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:22:30.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:22:30.102 [DEBUG] [Thread-208209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:22:30.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:22:30.104 [DEBUG] [Thread-208209] [transport.py] [_log()] userauth is OK
2026-02-15T17:22:30.104 [DEBUG] [Thread-208209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:22:30.104 [DEBUG] [Thread-208209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:22:30.104 [DEBUG] [Thread-208209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:22:30.105 [DEBUG] [Thread-208209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:22:30.141 [INFO] [Thread-208209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:22:30.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:22:30.764 [DEBUG] [Thread-208209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:22:30.774 [DEBUG] [Thread-208209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:22:30.775 [DEBUG] [Thread-208209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:22:30.805 [DEBUG] [Thread-208209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:22:30.806 [DEBUG] [Thread-208209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:22:30.810 [DEBUG] [Thread-208209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:22:30.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:22:30.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:22:30.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:22:30.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:22:30.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:22:30.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:22:30.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:22:30.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:22:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:22:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.640026 -999.00  +21.70  19.04     29   +3.30 1 1 1 1 1   887    0 18.03 -39.53 ----- 30.7 19.0 163.9 31.6 25.9 -30.4 25.5 -32.6 27.3 -28.6 27.9 -31.3
2026-02-15T17:22:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:22:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:22:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.640026
2026-02-15T17:22:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:22:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:22:30.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:22:30.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:22:30.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:22:30.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:22:04', tmtdew=21.86, humidity=23.61, cloud=0.0, wind=32.62, temperature=22.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:21:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:22:30.837 [DEBUG] [Thread-208209] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:22:30.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:22:30.932 [DEBUG] [Thread-208212] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T17:22:30.933 [DEBUG] [Thread-208212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:22:30.947 [DEBUG] [Thread-208212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:22:30.948 [INFO] [Thread-208212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:22:30.955 [DEBUG] [Thread-208212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] client lang: <none>
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] server lang: <none>
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] kex follows: False
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:22:30.956 [DEBUG] [Thread-208212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:22:30.957 [DEBUG] [Thread-208212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:22:30.957 [DEBUG] [Thread-208212] [transport.py] [_log()] Compression: none
2026-02-15T17:22:30.957 [DEBUG] [Thread-208212] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:22:31.013 [DEBUG] [Thread-208212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:22:31.013 [DEBUG] [Thread-208212] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:22:31.014 [DEBUG] [Thread-208212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:22:31.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:22:31.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:22:31.070 [DEBUG] [Thread-208212] [transport.py] [_log()] userauth is OK
2026-02-15T17:22:31.071 [DEBUG] [Thread-208212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:22:31.071 [DEBUG] [Thread-208212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:22:31.071 [DEBUG] [Thread-208212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:22:31.071 [DEBUG] [Thread-208212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:22:31.090 [INFO] [Thread-208212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:22:31.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:22:31.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:22:31.903 [DEBUG] [Thread-208212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:22:31.903 [DEBUG] [Thread-208212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:22:31.951 [DEBUG] [Thread-208212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:22:31.951 [DEBUG] [Thread-208212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:22:31.961 [DEBUG] [Thread-208212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:22:31.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:22:31.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:22:31.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:22:31.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:22:31.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:22:31.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:22:31.997 [DEBUG] [Thread-208212] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:22:41.481 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:44.391 [DEBUG] [Thread-208214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:59.406 [DEBUG] [Thread-208215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:22:59.445 [DEBUG] [Thread-208216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:01.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:23:01.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:23:01.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:23:04.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 22, 39), 22.58, 22.41, 0.0, 32.74, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:23:04.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:22:39
2026-02-15T17:23:04.036 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:04.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:23:04.500 [DEBUG] [Thread-208217] [transport.py] [_log()] starting thread (client mode): 0xa57404c0
2026-02-15T17:23:04.500 [DEBUG] [Thread-208217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:23:04.519 [DEBUG] [Thread-208217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:23:04.520 [INFO] [Thread-208217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:23:04.523 [DEBUG] [Thread-208217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:23:04.523 [DEBUG] [Thread-208217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:23:04.523 [DEBUG] [Thread-208217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:23:04.523 [DEBUG] [Thread-208217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:04.523 [DEBUG] [Thread-208217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] client lang: <none>
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] server lang: <none>
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] kex follows: False
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] Compression: none
2026-02-15T17:23:04.524 [DEBUG] [Thread-208217] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:23:04.540 [DEBUG] [Thread-208217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:23:04.541 [DEBUG] [Thread-208217] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:23:04.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:23:04.542 [DEBUG] [Thread-208217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:23:04.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:23:04.544 [DEBUG] [Thread-208217] [transport.py] [_log()] userauth is OK
2026-02-15T17:23:04.544 [DEBUG] [Thread-208217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:23:04.544 [DEBUG] [Thread-208217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:23:04.544 [DEBUG] [Thread-208217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:23:04.544 [DEBUG] [Thread-208217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:23:04.568 [INFO] [Thread-208217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:23:04.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:23:05.205 [DEBUG] [Thread-208217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:23:05.206 [DEBUG] [Thread-208217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:23:05.206 [DEBUG] [Thread-208217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:23:05.246 [DEBUG] [Thread-208217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:23:05.247 [DEBUG] [Thread-208217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:23:05.250 [DEBUG] [Thread-208217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:23:05.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:23:05.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:23:05.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:23:05.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:23:05.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:23:05.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:23:05.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:23:05.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:23:05.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:23:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.640373 -999.00  +21.60  22.92     30   +3.40 1 1 1 1 1   887    0 17.75 -45.41 ----- 23.8 22.9 159.7 37.8 25.8 -30.0 25.6 -30.4 27.2 -28.8 27.8 -30.5
2026-02-15T17:23:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:23:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:23:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.640373
2026-02-15T17:23:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:23:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:23:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:23:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:23:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:23:05.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:22:39', tmtdew=22.58, humidity=22.41, cloud=0.0, wind=32.74, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:22:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:23:05.276 [DEBUG] [Thread-208217] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:23:05.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:23:05.376 [DEBUG] [Thread-208220] [transport.py] [_log()] starting thread (client mode): 0xa2d18ac0
2026-02-15T17:23:05.376 [DEBUG] [Thread-208220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:23:05.391 [DEBUG] [Thread-208220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:23:05.391 [INFO] [Thread-208220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:23:05.398 [DEBUG] [Thread-208220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:23:05.399 [DEBUG] [Thread-208220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:23:05.399 [DEBUG] [Thread-208220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:23:05.399 [DEBUG] [Thread-208220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:05.399 [DEBUG] [Thread-208220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:05.399 [DEBUG] [Thread-208220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] client lang: <none>
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] server lang: <none>
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] kex follows: False
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:23:05.400 [DEBUG] [Thread-208220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:23:05.401 [DEBUG] [Thread-208220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:23:05.401 [DEBUG] [Thread-208220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:23:05.401 [DEBUG] [Thread-208220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:23:05.401 [DEBUG] [Thread-208220] [transport.py] [_log()] Compression: none
2026-02-15T17:23:05.401 [DEBUG] [Thread-208220] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:23:05.459 [DEBUG] [Thread-208220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:23:05.460 [DEBUG] [Thread-208220] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:23:05.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:23:05.461 [DEBUG] [Thread-208220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:23:05.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:23:05.515 [DEBUG] [Thread-208220] [transport.py] [_log()] userauth is OK
2026-02-15T17:23:05.515 [DEBUG] [Thread-208220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:23:05.515 [DEBUG] [Thread-208220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:23:05.515 [DEBUG] [Thread-208220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:23:05.516 [DEBUG] [Thread-208220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:23:05.536 [INFO] [Thread-208220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:23:05.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:23:05.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:23:06.414 [DEBUG] [Thread-208220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:23:06.414 [DEBUG] [Thread-208220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:23:06.466 [DEBUG] [Thread-208220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:23:06.467 [DEBUG] [Thread-208220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:23:06.477 [DEBUG] [Thread-208220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:23:06.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:23: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')
2026-02-15T17:23:06.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:23:06.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:23:06.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:23:06.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:23:06.519 [DEBUG] [Thread-208220] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:23:06.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:06.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:14.484 [DEBUG] [Thread-208222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:26.506 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:26.922 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:29.417 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:29.533 [DEBUG] [Thread-208223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:30.898 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:31.398 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:31.807 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:33.205 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:33.651 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:34.157 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:35.596 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:35.975 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:36.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:23:36.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:23:36.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:23:37.381 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 23, 14), 21.63, 23.8, 0.0, 31.9, 22.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:23:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:23:14
2026-02-15T17:23:38.467 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:38.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:23:38.954 [DEBUG] [Thread-208224] [transport.py] [_log()] starting thread (client mode): 0xa2dc30a0
2026-02-15T17:23:38.954 [DEBUG] [Thread-208224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:23:38.974 [DEBUG] [Thread-208224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:23:38.974 [INFO] [Thread-208224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:23:38.977 [DEBUG] [Thread-208224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:23:38.977 [DEBUG] [Thread-208224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:23:38.977 [DEBUG] [Thread-208224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:23:38.977 [DEBUG] [Thread-208224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] client lang: <none>
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] server lang: <none>
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] kex follows: False
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] Compression: none
2026-02-15T17:23:38.978 [DEBUG] [Thread-208224] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:23:38.988 [DEBUG] [Thread-208224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:23:38.988 [DEBUG] [Thread-208224] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:23:38.989 [DEBUG] [Thread-208224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:23:38.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:23:38.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:23:38.990 [DEBUG] [Thread-208224] [transport.py] [_log()] userauth is OK
2026-02-15T17:23:38.990 [DEBUG] [Thread-208224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:23:38.990 [DEBUG] [Thread-208224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:23:38.991 [DEBUG] [Thread-208224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:23:38.991 [DEBUG] [Thread-208224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:23:39.014 [INFO] [Thread-208224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:23:39.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:23:39.623 [DEBUG] [Thread-208224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:23:39.623 [DEBUG] [Thread-208224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:23:39.623 [DEBUG] [Thread-208224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:23:39.664 [DEBUG] [Thread-208224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:23:39.664 [DEBUG] [Thread-208224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:23:39.668 [DEBUG] [Thread-208224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:23:39.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:23:39.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:23:39.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:23:39.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:23:39.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:23:39.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:23:39.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:23:39.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:23:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:23:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.640720 -999.00  +21.70  23.85     30   +3.40 1 1 1 1 1   887    0 17.59 -49.60 ----- 24.1 23.9 168.8 35.7 25.8 -30.3 25.6 -28.0 27.2 -27.9 27.8 -29.9
2026-02-15T17:23:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:23:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:23:39.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.640720
2026-02-15T17:23:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:23:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:23:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:23:39.696 [DEBUG] [Thread-208224] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:23:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:23:39.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:23:39.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:23:14', tmtdew=21.63, humidity=23.8, cloud=0.0, wind=31.9, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:22:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:23:39.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:23:39.792 [DEBUG] [Thread-208227] [transport.py] [_log()] starting thread (client mode): 0xa2d19ae0
2026-02-15T17:23:39.792 [DEBUG] [Thread-208227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:23:39.807 [DEBUG] [Thread-208227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:23:39.807 [INFO] [Thread-208227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] client lang: <none>
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] server lang: <none>
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] kex follows: False
2026-02-15T17:23:39.815 [DEBUG] [Thread-208227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:23:39.816 [DEBUG] [Thread-208227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:23:39.816 [DEBUG] [Thread-208227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:23:39.816 [DEBUG] [Thread-208227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:23:39.816 [DEBUG] [Thread-208227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:23:39.816 [DEBUG] [Thread-208227] [transport.py] [_log()] Compression: none
2026-02-15T17:23:39.816 [DEBUG] [Thread-208227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:23:39.875 [DEBUG] [Thread-208227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:23:39.876 [DEBUG] [Thread-208227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:23:39.877 [DEBUG] [Thread-208227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:23:39.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:23:39.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:23:39.938 [DEBUG] [Thread-208227] [transport.py] [_log()] userauth is OK
2026-02-15T17:23:39.939 [DEBUG] [Thread-208227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:23:39.939 [DEBUG] [Thread-208227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:23:39.939 [DEBUG] [Thread-208227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:23:39.939 [DEBUG] [Thread-208227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:23:39.957 [INFO] [Thread-208227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:23:39.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:23:39.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:23:40.827 [DEBUG] [Thread-208227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:23:40.827 [DEBUG] [Thread-208227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:23:40.875 [DEBUG] [Thread-208227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:23:40.875 [DEBUG] [Thread-208227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:23:40.884 [DEBUG] [Thread-208227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:23:40.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:23:40.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:23:40.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:23:40.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:23:40.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:23:40.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:23:40.922 [DEBUG] [Thread-208227] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:23:44.573 [DEBUG] [Thread-208229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:46.889 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:53.410 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:59.460 [DEBUG] [Thread-208230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:59.632 [DEBUG] [Thread-208231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:23:59.820 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:06.248 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:07.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:07.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:10.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:24:10.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:24:10.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:24:12.778 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:12.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 23, 49), 21.59, 23.95, 0.0, 26.93, 22.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:24:12.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:23:49
2026-02-15T17:24:13.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:24:13.321 [DEBUG] [Thread-208232] [transport.py] [_log()] starting thread (client mode): 0xa2dc04f0
2026-02-15T17:24:13.321 [DEBUG] [Thread-208232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:24:13.341 [DEBUG] [Thread-208232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:24:13.341 [INFO] [Thread-208232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:24:13.344 [DEBUG] [Thread-208232] [transport.py] [_log()] client lang: <none>
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] server lang: <none>
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] kex follows: False
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] Compression: none
2026-02-15T17:24:13.345 [DEBUG] [Thread-208232] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:24:13.362 [DEBUG] [Thread-208232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:24:13.362 [DEBUG] [Thread-208232] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:24:13.363 [DEBUG] [Thread-208232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:24:13.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:24:13.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:24:13.365 [DEBUG] [Thread-208232] [transport.py] [_log()] userauth is OK
2026-02-15T17:24:13.365 [DEBUG] [Thread-208232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:24:13.365 [DEBUG] [Thread-208232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:24:13.365 [DEBUG] [Thread-208232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:24:13.365 [DEBUG] [Thread-208232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:24:13.383 [INFO] [Thread-208232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:24:13.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:24:14.014 [DEBUG] [Thread-208232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:24:14.023 [DEBUG] [Thread-208232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:24:14.024 [DEBUG] [Thread-208232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:24:14.055 [DEBUG] [Thread-208232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:24:14.056 [DEBUG] [Thread-208232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:24:14.059 [DEBUG] [Thread-208232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:24:14.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:24:14.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:24:14.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:24:14.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:24:14.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:24:14.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:24:14.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:24:14.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:24:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:24:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.641067 -999.00  +21.60  18.01     30   +3.30 1 1 1 1 1   887    0 17.81 -50.02 ----- 24.7 18.0 148.4 26.6 25.7 -30.0 25.5 -27.8 27.0 -27.5 27.7 -29.1
2026-02-15T17:24:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:24:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:24:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.641067
2026-02-15T17:24:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:24:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:24:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:24:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:24:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:24:14.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:23:49', tmtdew=21.59, humidity=23.95, cloud=0.0, wind=26.93, temperature=22.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:23:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:24:14.089 [DEBUG] [Thread-208232] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:24:14.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:24:14.185 [DEBUG] [Thread-208235] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b80
2026-02-15T17:24:14.186 [DEBUG] [Thread-208235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:24:14.200 [DEBUG] [Thread-208235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:24:14.200 [INFO] [Thread-208235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:24:14.208 [DEBUG] [Thread-208235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:24:14.208 [DEBUG] [Thread-208235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] client lang: <none>
2026-02-15T17:24:14.209 [DEBUG] [Thread-208235] [transport.py] [_log()] server lang: <none>
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] kex follows: False
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:24:14.210 [DEBUG] [Thread-208235] [transport.py] [_log()] Compression: none
2026-02-15T17:24:14.211 [DEBUG] [Thread-208235] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:24:14.267 [DEBUG] [Thread-208235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:24:14.267 [DEBUG] [Thread-208235] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:24:14.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:24:14.269 [DEBUG] [Thread-208235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:24:14.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:24:14.323 [DEBUG] [Thread-208235] [transport.py] [_log()] userauth is OK
2026-02-15T17:24:14.323 [DEBUG] [Thread-208235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:24:14.323 [DEBUG] [Thread-208235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:24:14.324 [DEBUG] [Thread-208235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:24:14.324 [DEBUG] [Thread-208235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:24:14.344 [INFO] [Thread-208235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:24:14.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:24:14.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:24:14.671 [DEBUG] [Thread-208237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:15.176 [DEBUG] [Thread-208235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:24:15.176 [DEBUG] [Thread-208235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:24:15.223 [DEBUG] [Thread-208235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:24:15.223 [DEBUG] [Thread-208235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:24:15.232 [DEBUG] [Thread-208235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:24:15.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:24:15.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:24: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') -> 00000000
2026-02-15T17:24:15.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:24:15.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:24:15.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:24:15.266 [DEBUG] [Thread-208235] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:24:19.175 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:25.582 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:29.724 [DEBUG] [Thread-208238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:32.030 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:38.473 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:44.758 [DEBUG] [Thread-208239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:44.912 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:45.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:24:45.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:24:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:24:46.061 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 24, 25), 21.5, 24.07, 0.0, 25.78, 21.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:24:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:24:25
2026-02-15T17:24:47.452 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:47.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:24:47.675 [DEBUG] [Thread-208240] [transport.py] [_log()] starting thread (client mode): 0xa2d7b880
2026-02-15T17:24:47.676 [DEBUG] [Thread-208240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:24:47.694 [DEBUG] [Thread-208240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:24:47.695 [INFO] [Thread-208240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:24:47.698 [DEBUG] [Thread-208240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:24:47.698 [DEBUG] [Thread-208240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:24:47.698 [DEBUG] [Thread-208240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:24:47.698 [DEBUG] [Thread-208240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:47.698 [DEBUG] [Thread-208240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] client lang: <none>
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] server lang: <none>
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] kex follows: False
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] Compression: none
2026-02-15T17:24:47.699 [DEBUG] [Thread-208240] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:24:47.715 [DEBUG] [Thread-208240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:24:47.715 [DEBUG] [Thread-208240] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:24:47.716 [DEBUG] [Thread-208240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:24:47.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:24:47.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:24:47.717 [DEBUG] [Thread-208240] [transport.py] [_log()] userauth is OK
2026-02-15T17:24:47.717 [DEBUG] [Thread-208240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:24:47.718 [DEBUG] [Thread-208240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:24:47.718 [DEBUG] [Thread-208240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:24:47.718 [DEBUG] [Thread-208240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:24:47.732 [INFO] [Thread-208240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:24:47.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:24:47.856 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:48.320 [DEBUG] [Thread-208240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:24:48.321 [DEBUG] [Thread-208240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:24:48.321 [DEBUG] [Thread-208240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:24:48.343 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:48.361 [DEBUG] [Thread-208240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:24:48.362 [DEBUG] [Thread-208240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:24:48.365 [DEBUG] [Thread-208240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:24:48.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:24:48.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:24:48.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:24:48.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:24:48.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:24:48.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:24:48.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:24:48.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:24:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:24:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.642109 -999.00  +21.50  21.42     30   +3.40 1 1 1 1 1   887    0 18.10 -52.73 ----- 24.8 21.4 147.4 26.2 25.6 -29.4 25.4 -28.2 26.9 -27.1 27.6 -29.7
2026-02-15T17:24:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:24:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:24:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.642109
2026-02-15T17:24:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:24:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:24:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:24:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:24:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:24:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:24:25', tmtdew=21.5, humidity=24.07, cloud=0.0, wind=25.78, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:24:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:24:48.390 [DEBUG] [Thread-208240] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:24:48.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:24:48.490 [DEBUG] [Thread-208243] [transport.py] [_log()] starting thread (client mode): 0xa2d571f0
2026-02-15T17:24:48.490 [DEBUG] [Thread-208243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:24:48.511 [DEBUG] [Thread-208243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:24:48.512 [INFO] [Thread-208243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:24:48.528 [DEBUG] [Thread-208243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:24:48.528 [DEBUG] [Thread-208243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:24:48.528 [DEBUG] [Thread-208243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:24:48.528 [DEBUG] [Thread-208243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:48.528 [DEBUG] [Thread-208243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] client lang: <none>
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] server lang: <none>
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] kex follows: False
2026-02-15T17:24:48.529 [DEBUG] [Thread-208243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:24:48.530 [DEBUG] [Thread-208243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:24:48.530 [DEBUG] [Thread-208243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:24:48.530 [DEBUG] [Thread-208243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:24:48.530 [DEBUG] [Thread-208243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:24:48.530 [DEBUG] [Thread-208243] [transport.py] [_log()] Compression: none
2026-02-15T17:24:48.530 [DEBUG] [Thread-208243] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:24:48.594 [DEBUG] [Thread-208243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:24:48.595 [DEBUG] [Thread-208243] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:24:48.595 [DEBUG] [Thread-208243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:24:48.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:24:48.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:24:48.664 [DEBUG] [Thread-208243] [transport.py] [_log()] userauth is OK
2026-02-15T17:24:48.664 [DEBUG] [Thread-208243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:24:48.664 [DEBUG] [Thread-208243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:24:48.664 [DEBUG] [Thread-208243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:24:48.664 [DEBUG] [Thread-208243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:24:48.691 [INFO] [Thread-208243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:24:48.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:24:48.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:24:48.906 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:49.405 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:49.507 [DEBUG] [Thread-208243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:24:49.507 [DEBUG] [Thread-208243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:24:49.555 [DEBUG] [Thread-208243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:24:49.555 [DEBUG] [Thread-208243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:24:49.564 [DEBUG] [Thread-208243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:24:49.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:24:49.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')
2026-02-15T17:24:49.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:24:49.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:24:49.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:24:49.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:24:49.604 [DEBUG] [Thread-208243] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:24:49.891 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:50.380 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:50.790 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:51.181 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:51.598 [DEBUG] [Thread-208143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:59.532 [DEBUG] [Thread-208245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:24:59.793 [DEBUG] [Thread-208246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:07.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:07.177 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:14.840 [DEBUG] [Thread-208247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:19.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:25:19.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:25:19.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:25:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 25), 21.27, 24.44, 0.0, 31.05, 21.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:25:21.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:25:00
2026-02-15T17:25:22.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:25:22.557 [DEBUG] [Thread-208248] [transport.py] [_log()] starting thread (client mode): 0xa2d56ef0
2026-02-15T17:25:22.557 [DEBUG] [Thread-208248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:25:22.575 [DEBUG] [Thread-208248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:25:22.575 [INFO] [Thread-208248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] client lang: <none>
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] server lang: <none>
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] kex follows: False
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] Compression: none
2026-02-15T17:25:22.578 [DEBUG] [Thread-208248] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:25:22.586 [DEBUG] [Thread-208248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:25:22.587 [DEBUG] [Thread-208248] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:25:22.587 [DEBUG] [Thread-208248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:25:22.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:25:22.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:25:22.588 [DEBUG] [Thread-208248] [transport.py] [_log()] userauth is OK
2026-02-15T17:25:22.588 [DEBUG] [Thread-208248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:25:22.588 [DEBUG] [Thread-208248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:25:22.588 [DEBUG] [Thread-208248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:25:22.588 [DEBUG] [Thread-208248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:25:22.606 [INFO] [Thread-208248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:25:22.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:25:23.176 [DEBUG] [Thread-208248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:25:23.176 [DEBUG] [Thread-208248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:25:23.176 [DEBUG] [Thread-208248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:25:23.217 [DEBUG] [Thread-208248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:25:23.218 [DEBUG] [Thread-208248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:25:23.221 [DEBUG] [Thread-208248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:25:23.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:25:23.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:25:23.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:25:23.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:25:23.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:25:23.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:25:23.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:25:23.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:25:23.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:25:23.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.642456 -999.00  +21.40  16.41     30   +3.30 1 1 1 1 1   887    0 17.66 -56.70 ----- 13.5 16.4 159.6 26.5 25.6 -29.4 25.3 -28.6 26.9 -27.2 27.6 -29.7
2026-02-15T17:25:23.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:25:23.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:25:23.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.642456
2026-02-15T17:25:23.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:25:23.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:25:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:25:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:25:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:25:23.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:25:00', tmtdew=21.27, humidity=24.44, cloud=0.0, wind=31.05, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:25:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:25:23.254 [DEBUG] [Thread-208248] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:25:23.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:25:23.352 [DEBUG] [Thread-208251] [transport.py] [_log()] starting thread (client mode): 0xa2dc3940
2026-02-15T17:25:23.352 [DEBUG] [Thread-208251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:25:23.370 [DEBUG] [Thread-208251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:25:23.370 [INFO] [Thread-208251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:25:23.378 [DEBUG] [Thread-208251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:25:23.378 [DEBUG] [Thread-208251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] client lang: <none>
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] server lang: <none>
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] kex follows: False
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:25:23.379 [DEBUG] [Thread-208251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:25:23.380 [DEBUG] [Thread-208251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:25:23.380 [DEBUG] [Thread-208251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:25:23.380 [DEBUG] [Thread-208251] [transport.py] [_log()] Compression: none
2026-02-15T17:25:23.380 [DEBUG] [Thread-208251] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:25:23.435 [DEBUG] [Thread-208251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:25:23.436 [DEBUG] [Thread-208251] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:25:23.436 [DEBUG] [Thread-208251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:25:23.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:25:23.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:25:23.491 [DEBUG] [Thread-208251] [transport.py] [_log()] userauth is OK
2026-02-15T17:25:23.491 [DEBUG] [Thread-208251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:25:23.491 [DEBUG] [Thread-208251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:25:23.492 [DEBUG] [Thread-208251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:25:23.492 [DEBUG] [Thread-208251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:25:23.510 [INFO] [Thread-208251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:25:23.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:25:23.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:25:24.329 [DEBUG] [Thread-208251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:25:24.329 [DEBUG] [Thread-208251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:25:24.377 [DEBUG] [Thread-208251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:25:24.378 [DEBUG] [Thread-208251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:25:24.386 [DEBUG] [Thread-208251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:25:24.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:25:24.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:25:24.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:25:24.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:25:24.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:25:24.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:25:24.421 [DEBUG] [Thread-208251] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:25:29.877 [DEBUG] [Thread-208253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:44.927 [DEBUG] [Thread-208254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:54.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:25:54.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:25:54.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:25:56.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 25, 36), 22.33, 22.77, 0.0, 31.16, 22.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:25:56.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:25:36
2026-02-15T17:25:56.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:25:56.843 [DEBUG] [Thread-208255] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd00
2026-02-15T17:25:56.843 [DEBUG] [Thread-208255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:25:56.864 [DEBUG] [Thread-208255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:25:56.864 [INFO] [Thread-208255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] client lang: <none>
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] server lang: <none>
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] kex follows: False
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] Compression: none
2026-02-15T17:25:56.867 [DEBUG] [Thread-208255] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:25:56.885 [DEBUG] [Thread-208255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:25:56.885 [DEBUG] [Thread-208255] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:25:56.886 [DEBUG] [Thread-208255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:25:56.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:25:56.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:25:56.888 [DEBUG] [Thread-208255] [transport.py] [_log()] userauth is OK
2026-02-15T17:25:56.888 [DEBUG] [Thread-208255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:25:56.888 [DEBUG] [Thread-208255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:25:56.888 [DEBUG] [Thread-208255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:25:56.888 [DEBUG] [Thread-208255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:25:56.903 [INFO] [Thread-208255] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:25:56.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:25:57.553 [DEBUG] [Thread-208255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:25:57.553 [DEBUG] [Thread-208255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:25:57.553 [DEBUG] [Thread-208255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:25:57.594 [DEBUG] [Thread-208255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:25:57.595 [DEBUG] [Thread-208255] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:25:57.598 [DEBUG] [Thread-208255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:25:57.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:25:57.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:25:57.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:25:57.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:25:57.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:25:57.623 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:25:57.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:25:57.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:25:57.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:25:57.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.642803 -999.00  +21.60  17.73     30   +3.40 1 1 1 1 1   887    0 17.32 -60.66 ----- 20.5 17.7 151.0 21.8 25.6 -28.9 25.4 -27.3 27.0 -26.3 27.6 -28.7
2026-02-15T17:25:57.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:25:57.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:25:57.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.642803
2026-02-15T17:25:57.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:25:57.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:25:57.626 [DEBUG] [Thread-208255] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:25:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:25:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:25:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:25:57.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:25:36', tmtdew=22.33, humidity=22.77, cloud=0.0, wind=31.16, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:25:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:25:57.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:25:57.725 [DEBUG] [Thread-208258] [transport.py] [_log()] starting thread (client mode): 0xa2dc0a60
2026-02-15T17:25:57.725 [DEBUG] [Thread-208258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:25:57.740 [DEBUG] [Thread-208258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:25:57.740 [INFO] [Thread-208258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:25:57.751 [DEBUG] [Thread-208258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:25:57.751 [DEBUG] [Thread-208258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:25:57.751 [DEBUG] [Thread-208258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] client lang: <none>
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] server lang: <none>
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] kex follows: False
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:25:57.752 [DEBUG] [Thread-208258] [transport.py] [_log()] Compression: none
2026-02-15T17:25:57.753 [DEBUG] [Thread-208258] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:25:57.808 [DEBUG] [Thread-208258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:25:57.808 [DEBUG] [Thread-208258] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:25:57.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:25:57.809 [DEBUG] [Thread-208258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:25:57.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:25:57.865 [DEBUG] [Thread-208258] [transport.py] [_log()] userauth is OK
2026-02-15T17:25:57.865 [DEBUG] [Thread-208258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:25:57.866 [DEBUG] [Thread-208258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:25:57.866 [DEBUG] [Thread-208258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:25:57.866 [DEBUG] [Thread-208258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:25:57.885 [INFO] [Thread-208258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:25:57.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:25:57.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:25:58.735 [DEBUG] [Thread-208258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:25:58.736 [DEBUG] [Thread-208258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:25:58.783 [DEBUG] [Thread-208258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:25:58.783 [DEBUG] [Thread-208258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:25:58.792 [DEBUG] [Thread-208258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:25:58.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:25:58.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:25:58.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:25:58.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:25:58.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:25:58.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:25:58.827 [DEBUG] [Thread-208258] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:25:59.601 [DEBUG] [Thread-208260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:25:59.964 [DEBUG] [Thread-208261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:26:07.318 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:26:07.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:26:15.018 [DEBUG] [Thread-208262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:26:28.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:26:28.848 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:26:28.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:26:30.057 [DEBUG] [Thread-208263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:26:30.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 26, 12), 21.28, 24.44, 0.0, 28.09, 21.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:26:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:26:12
2026-02-15T17:26:31.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:26:31.173 [DEBUG] [Thread-208264] [transport.py] [_log()] starting thread (client mode): 0xa2dc39a0
2026-02-15T17:26:31.173 [DEBUG] [Thread-208264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:26:31.190 [DEBUG] [Thread-208264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:26:31.190 [INFO] [Thread-208264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] client lang: <none>
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] server lang: <none>
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] kex follows: False
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] Compression: none
2026-02-15T17:26:31.191 [DEBUG] [Thread-208264] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:26:31.211 [DEBUG] [Thread-208264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:26:31.212 [DEBUG] [Thread-208264] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:26:31.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:26:31.213 [DEBUG] [Thread-208264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:26:31.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:26:31.215 [DEBUG] [Thread-208264] [transport.py] [_log()] userauth is OK
2026-02-15T17:26:31.215 [DEBUG] [Thread-208264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:26:31.216 [DEBUG] [Thread-208264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:26:31.216 [DEBUG] [Thread-208264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:26:31.216 [DEBUG] [Thread-208264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:26:31.236 [INFO] [Thread-208264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:26:31.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:26:31.879 [DEBUG] [Thread-208264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:26:31.880 [DEBUG] [Thread-208264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:26:31.880 [DEBUG] [Thread-208264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:26:31.920 [DEBUG] [Thread-208264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:26:31.920 [DEBUG] [Thread-208264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:26:31.924 [DEBUG] [Thread-208264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:26:31.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:26:31.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:26:31.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:26:31.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:26:31.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:26:31.946 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:26:31.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:26:31.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:26:31.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:26:31.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.643151 -999.00  +21.70  19.79     30   +3.40 1 1 1 1 1   887    0 17.16 -66.36 ----- 19.8 19.8 140.6 28.8 25.6 -28.9 25.4 -28.2 27.0 -27.1 27.6 -29.0
2026-02-15T17:26:31.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:26:31.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:26:31.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.643151
2026-02-15T17:26:31.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:26:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:26:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:26:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:26:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:26:31.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:26:12', tmtdew=21.28, humidity=24.44, cloud=0.0, wind=28.09, temperature=21.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:26:08.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:26:31.949 [DEBUG] [Thread-208264] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:26:32.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:26:32.044 [DEBUG] [Thread-208267] [transport.py] [_log()] starting thread (client mode): 0xa2d68f70
2026-02-15T17:26:32.044 [DEBUG] [Thread-208267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:26:32.059 [DEBUG] [Thread-208267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:26:32.059 [INFO] [Thread-208267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:26:32.066 [DEBUG] [Thread-208267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] client lang: <none>
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] server lang: <none>
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] kex follows: False
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] Compression: none
2026-02-15T17:26:32.067 [DEBUG] [Thread-208267] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:26:32.127 [DEBUG] [Thread-208267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:26:32.128 [DEBUG] [Thread-208267] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:26:32.128 [DEBUG] [Thread-208267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:26:32.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:26:32.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:26:32.183 [DEBUG] [Thread-208267] [transport.py] [_log()] userauth is OK
2026-02-15T17:26:32.184 [DEBUG] [Thread-208267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:26:32.184 [DEBUG] [Thread-208267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:26:32.184 [DEBUG] [Thread-208267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:26:32.184 [DEBUG] [Thread-208267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:26:32.202 [INFO] [Thread-208267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:26:32.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:26:32.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:26:33.029 [DEBUG] [Thread-208267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:26:33.029 [DEBUG] [Thread-208267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:26:33.077 [DEBUG] [Thread-208267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:26:33.077 [DEBUG] [Thread-208267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:26:33.085 [DEBUG] [Thread-208267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:26:33.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:26:33.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:26:33.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:26:33.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:26:33.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:26:33.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:26:33.122 [DEBUG] [Thread-208267] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:26:45.094 [DEBUG] [Thread-208269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:26:59.648 [DEBUG] [Thread-208270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:00.145 [DEBUG] [Thread-208271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:03.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:27:03.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:27:03.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:27:05.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 26, 47), 21.47, 24.1, 0.0, 25.06, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:27:05.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:26:47
2026-02-15T17:27:05.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:27:05.513 [DEBUG] [Thread-208272] [transport.py] [_log()] starting thread (client mode): 0xa2d56200
2026-02-15T17:27:05.513 [DEBUG] [Thread-208272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:27:05.534 [DEBUG] [Thread-208272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:27:05.535 [INFO] [Thread-208272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] client lang: <none>
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] server lang: <none>
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] kex follows: False
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:27:05.538 [DEBUG] [Thread-208272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:27:05.539 [DEBUG] [Thread-208272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:27:05.539 [DEBUG] [Thread-208272] [transport.py] [_log()] Compression: none
2026-02-15T17:27:05.539 [DEBUG] [Thread-208272] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:27:05.556 [DEBUG] [Thread-208272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:27:05.557 [DEBUG] [Thread-208272] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:27:05.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:27:05.558 [DEBUG] [Thread-208272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:27:05.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:27:05.560 [DEBUG] [Thread-208272] [transport.py] [_log()] userauth is OK
2026-02-15T17:27:05.560 [DEBUG] [Thread-208272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:27:05.560 [DEBUG] [Thread-208272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:27:05.560 [DEBUG] [Thread-208272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:27:05.560 [DEBUG] [Thread-208272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:27:05.587 [INFO] [Thread-208272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:27:05.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:27:06.222 [DEBUG] [Thread-208272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:27:06.223 [DEBUG] [Thread-208272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:27:06.223 [DEBUG] [Thread-208272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:27:06.263 [DEBUG] [Thread-208272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:27:06.264 [DEBUG] [Thread-208272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:27:06.267 [DEBUG] [Thread-208272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:27:06.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:27:06.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:27:06.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:27:06.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:27:06.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:27:06.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:27:06.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:27:06.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:27:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:27:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.643498 -999.00  +21.60  23.07     30   +3.30 1 1 1 1 1   887    0 17.17 -68.10 ----- 16.4 23.1 141.8 32.8 25.6 -29.3 25.6 -28.2 27.1 -28.1 27.6 -29.5
2026-02-15T17:27:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:27:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:27:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.643498
2026-02-15T17:27:06.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:27:06.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:27:06.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:27:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:27:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:27:06.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:26:47', tmtdew=21.47, humidity=24.1, cloud=0.0, wind=25.06, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:26:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:27:06.293 [DEBUG] [Thread-208272] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:27:06.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:27:06.382 [DEBUG] [Thread-208275] [transport.py] [_log()] starting thread (client mode): 0xa2dc1d80
2026-02-15T17:27:06.382 [DEBUG] [Thread-208275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:27:06.397 [DEBUG] [Thread-208275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:27:06.397 [INFO] [Thread-208275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:06.404 [DEBUG] [Thread-208275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] client lang: <none>
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] server lang: <none>
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] kex follows: False
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] Compression: none
2026-02-15T17:27:06.405 [DEBUG] [Thread-208275] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:27:06.464 [DEBUG] [Thread-208275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:27:06.465 [DEBUG] [Thread-208275] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:27:06.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:27:06.466 [DEBUG] [Thread-208275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:27:06.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:27:06.523 [DEBUG] [Thread-208275] [transport.py] [_log()] userauth is OK
2026-02-15T17:27:06.524 [DEBUG] [Thread-208275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:27:06.524 [DEBUG] [Thread-208275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:27:06.524 [DEBUG] [Thread-208275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:27:06.524 [DEBUG] [Thread-208275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:27:06.547 [INFO] [Thread-208275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:27:06.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:27:06.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:27:07.418 [DEBUG] [Thread-208275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:27:07.419 [DEBUG] [Thread-208275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:27:07.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:07.461 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:07.466 [DEBUG] [Thread-208275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:27:07.466 [DEBUG] [Thread-208275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:27:07.475 [DEBUG] [Thread-208275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:27:07.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:27:07.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:27:07.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:27:07.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:27:07.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:27:07.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:27:07.516 [DEBUG] [Thread-208275] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:27:15.183 [DEBUG] [Thread-208277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:30.235 [DEBUG] [Thread-208278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:37.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:27:37.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:27:37.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 27, 24), 21.48, 24.09, 0.0, 24.74, 21.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:27:40.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:27:24
2026-02-15T17:27:40.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:27:40.673 [DEBUG] [Thread-208279] [transport.py] [_log()] starting thread (client mode): 0xa2dc2b60
2026-02-15T17:27:40.673 [DEBUG] [Thread-208279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:27:40.685 [DEBUG] [Thread-208279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:27:40.685 [INFO] [Thread-208279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] client lang: <none>
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] server lang: <none>
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] kex follows: False
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] Compression: none
2026-02-15T17:27:40.688 [DEBUG] [Thread-208279] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:27:40.703 [DEBUG] [Thread-208279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:27:40.704 [DEBUG] [Thread-208279] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:27:40.704 [DEBUG] [Thread-208279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:27:40.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:27:40.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:27:40.706 [DEBUG] [Thread-208279] [transport.py] [_log()] userauth is OK
2026-02-15T17:27:40.706 [DEBUG] [Thread-208279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:27:40.706 [DEBUG] [Thread-208279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:27:40.706 [DEBUG] [Thread-208279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:27:40.706 [DEBUG] [Thread-208279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:27:40.728 [INFO] [Thread-208279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:27:40.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:27:41.345 [DEBUG] [Thread-208279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:27:41.346 [DEBUG] [Thread-208279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:27:41.346 [DEBUG] [Thread-208279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:27:41.387 [DEBUG] [Thread-208279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:27:41.387 [DEBUG] [Thread-208279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:27:41.390 [DEBUG] [Thread-208279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:27:41.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:27:41.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:27:41.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:27:41.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:27:41.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:27:41.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:27:41.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:27:41.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:27:41.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:27:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.643845 -999.00  +21.50  18.74     30   +3.30 1 1 1 1 1   887    0 16.74 -71.86 ----- 17.3 18.7 162.4 24.4 25.5 -29.6 25.4 -28.0 26.9 -27.9 27.5 -29.1
2026-02-15T17:27:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:27:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:27:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.643845
2026-02-15T17:27:41.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:27:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:27:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:27:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:27:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:27:41.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:27:24', tmtdew=21.48, humidity=24.09, cloud=0.0, wind=24.74, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:27:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:27:41.414 [DEBUG] [Thread-208279] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:27:41.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:27:41.510 [DEBUG] [Thread-208282] [transport.py] [_log()] starting thread (client mode): 0xa575a290
2026-02-15T17:27:41.510 [DEBUG] [Thread-208282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:27:41.525 [DEBUG] [Thread-208282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:27:41.525 [INFO] [Thread-208282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] client lang: <none>
2026-02-15T17:27:41.532 [DEBUG] [Thread-208282] [transport.py] [_log()] server lang: <none>
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] kex follows: False
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] Compression: none
2026-02-15T17:27:41.533 [DEBUG] [Thread-208282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:27:41.594 [DEBUG] [Thread-208282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:27:41.595 [DEBUG] [Thread-208282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:27:41.595 [DEBUG] [Thread-208282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:27:41.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:27:41.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:27:41.651 [DEBUG] [Thread-208282] [transport.py] [_log()] userauth is OK
2026-02-15T17:27:41.651 [DEBUG] [Thread-208282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:27:41.651 [DEBUG] [Thread-208282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:27:41.651 [DEBUG] [Thread-208282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:27:41.651 [DEBUG] [Thread-208282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:27:41.670 [INFO] [Thread-208282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:27:41.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:27:41.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:27:42.513 [DEBUG] [Thread-208282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:27:42.513 [DEBUG] [Thread-208282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:27:42.561 [DEBUG] [Thread-208282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:27:42.561 [DEBUG] [Thread-208282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:27:42.570 [DEBUG] [Thread-208282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:27:42.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:27:42.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:27:42.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:27:42.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:27:42.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:27:42.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:27:42.608 [DEBUG] [Thread-208282] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:27:45.268 [DEBUG] [Thread-208284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:27:59.709 [DEBUG] [Thread-208285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:00.316 [DEBUG] [Thread-208286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:07.604 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:07.605 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:12.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:28:12.616 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:28:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:28:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 27, 59), 21.43, 24.29, 0.0, 21.7, 21.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:28:14.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:27:59
2026-02-15T17:28:14.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:28:15.145 [DEBUG] [Thread-208287] [transport.py] [_log()] starting thread (client mode): 0xa2dc2200
2026-02-15T17:28:15.145 [DEBUG] [Thread-208287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:28:15.172 [DEBUG] [Thread-208287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:28:15.172 [INFO] [Thread-208287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] client lang: <none>
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] server lang: <none>
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] kex follows: False
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:28:15.176 [DEBUG] [Thread-208287] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:28:15.177 [DEBUG] [Thread-208287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:28:15.177 [DEBUG] [Thread-208287] [transport.py] [_log()] Compression: none
2026-02-15T17:28:15.177 [DEBUG] [Thread-208287] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:28:15.195 [DEBUG] [Thread-208287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:28:15.195 [DEBUG] [Thread-208287] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:28:15.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:28:15.197 [DEBUG] [Thread-208287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:28:15.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:28:15.199 [DEBUG] [Thread-208287] [transport.py] [_log()] userauth is OK
2026-02-15T17:28:15.199 [DEBUG] [Thread-208287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:28:15.199 [DEBUG] [Thread-208287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:28:15.199 [DEBUG] [Thread-208287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:28:15.200 [DEBUG] [Thread-208287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:28:15.223 [INFO] [Thread-208287] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:28:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:28:15.355 [DEBUG] [Thread-208289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:15.849 [DEBUG] [Thread-208287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:28:15.849 [DEBUG] [Thread-208287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:28:15.849 [DEBUG] [Thread-208287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:28:15.889 [DEBUG] [Thread-208287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:28:15.890 [DEBUG] [Thread-208287] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:28:15.893 [DEBUG] [Thread-208287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:28:15.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:28:15.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:28:15.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:28:15.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:28:15.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:28:15.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:28:15.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:28:15.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:28:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:28:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.644192 -999.00  +21.30  21.51     30   +3.30 1 1 1 1 1   887    0 16.47 -74.98 ----- 15.1 21.5 141.2 26.8 25.5 -29.3 25.5 -28.3 26.9 -27.8 27.5 -29.5
2026-02-15T17:28:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:28:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:28:15.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.644192
2026-02-15T17:28:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:28:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:28:15.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:28:15.920 [DEBUG] [Thread-208287] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:28:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:28:15.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:28:15.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:27:59', tmtdew=21.43, humidity=24.29, cloud=0.0, wind=21.7, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:27:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:28:16.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:28:16.023 [DEBUG] [Thread-208291] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-15T17:28:16.023 [DEBUG] [Thread-208291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:28:16.045 [DEBUG] [Thread-208291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:28:16.045 [INFO] [Thread-208291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:28:16.058 [DEBUG] [Thread-208291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] client lang: <none>
2026-02-15T17:28:16.059 [DEBUG] [Thread-208291] [transport.py] [_log()] server lang: <none>
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] kex follows: False
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] Compression: none
2026-02-15T17:28:16.060 [DEBUG] [Thread-208291] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:28:16.126 [DEBUG] [Thread-208291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:28:16.127 [DEBUG] [Thread-208291] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:28:16.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:28:16.137 [DEBUG] [Thread-208291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:28:16.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:28:16.199 [DEBUG] [Thread-208291] [transport.py] [_log()] userauth is OK
2026-02-15T17:28:16.199 [DEBUG] [Thread-208291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:28:16.200 [DEBUG] [Thread-208291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:28:16.200 [DEBUG] [Thread-208291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:28:16.200 [DEBUG] [Thread-208291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:28:16.226 [INFO] [Thread-208291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:28:16.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:28:16.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:28:17.106 [DEBUG] [Thread-208291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:28:17.106 [DEBUG] [Thread-208291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:28:17.153 [DEBUG] [Thread-208291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:28:17.154 [DEBUG] [Thread-208291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:28:17.163 [DEBUG] [Thread-208291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:28:17.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:28:17.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:28:17.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:28:17.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:28:17.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:28:17.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:28:17.199 [DEBUG] [Thread-208291] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:28:30.393 [DEBUG] [Thread-208293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:45.446 [DEBUG] [Thread-208294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:28:47.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:28:47.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:28:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:28:49.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 28, 35), 22.63, 22.34, 0.0, 19.76, 22.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:28:49.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:28:35
2026-02-15T17:28:49.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:28:49.548 [DEBUG] [Thread-208295] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-15T17:28:49.549 [DEBUG] [Thread-208295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:28:49.568 [DEBUG] [Thread-208295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:28:49.569 [INFO] [Thread-208295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:28:49.571 [DEBUG] [Thread-208295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] client lang: <none>
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] server lang: <none>
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] kex follows: False
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] Compression: none
2026-02-15T17:28:49.572 [DEBUG] [Thread-208295] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:28:49.593 [DEBUG] [Thread-208295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:28:49.593 [DEBUG] [Thread-208295] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:28:49.594 [DEBUG] [Thread-208295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:28:49.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:28:49.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:28:49.596 [DEBUG] [Thread-208295] [transport.py] [_log()] userauth is OK
2026-02-15T17:28:49.596 [DEBUG] [Thread-208295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:28:49.597 [DEBUG] [Thread-208295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:28:49.597 [DEBUG] [Thread-208295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:28:49.597 [DEBUG] [Thread-208295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:28:49.631 [INFO] [Thread-208295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:28:49.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:28:50.260 [DEBUG] [Thread-208295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:28:50.261 [DEBUG] [Thread-208295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:28:50.261 [DEBUG] [Thread-208295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:28:50.301 [DEBUG] [Thread-208295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:28:50.301 [DEBUG] [Thread-208295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:28:50.304 [DEBUG] [Thread-208295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:28:50.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:28:50.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:28:50.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:28:50.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:28:50.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:28:50.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:28:50.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:28:50.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:28:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:28:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.644539 -999.00  +21.40  13.51     30   +3.30 1 1 1 1 1   887    0 16.77 -76.47 ----- 16.6 13.5 154.6 22.6 25.5 -29.1 25.4 -27.9 26.9 -27.2 27.5 -29.5
2026-02-15T17:28:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:28:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:28:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.644539
2026-02-15T17:28:50.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:28:50.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:28:50.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:28:50.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:28:50.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:28:50.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:28:35', tmtdew=22.63, humidity=22.34, cloud=0.0, wind=19.76, temperature=22.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:28:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:28:50.329 [DEBUG] [Thread-208295] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:28:50.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:28:50.425 [DEBUG] [Thread-208298] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd00
2026-02-15T17:28:50.426 [DEBUG] [Thread-208298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:28:50.441 [DEBUG] [Thread-208298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:28:50.441 [INFO] [Thread-208298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] client lang: <none>
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] server lang: <none>
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] kex follows: False
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:28:50.449 [DEBUG] [Thread-208298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:28:50.450 [DEBUG] [Thread-208298] [transport.py] [_log()] Compression: none
2026-02-15T17:28:50.450 [DEBUG] [Thread-208298] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:28:50.508 [DEBUG] [Thread-208298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:28:50.509 [DEBUG] [Thread-208298] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:28:50.509 [DEBUG] [Thread-208298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:28:50.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:28:50.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:28:50.564 [DEBUG] [Thread-208298] [transport.py] [_log()] userauth is OK
2026-02-15T17:28:50.564 [DEBUG] [Thread-208298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:28:50.564 [DEBUG] [Thread-208298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:28:50.564 [DEBUG] [Thread-208298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:28:50.564 [DEBUG] [Thread-208298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:28:50.583 [INFO] [Thread-208298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:28:50.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:28:50.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:28:51.423 [DEBUG] [Thread-208298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:28:51.423 [DEBUG] [Thread-208298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:28:51.471 [DEBUG] [Thread-208298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:28:51.471 [DEBUG] [Thread-208298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:28:51.480 [DEBUG] [Thread-208298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:28:51.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:28:51.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:28:51.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:28:51.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:28:51.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:28:51.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:28:51.517 [DEBUG] [Thread-208298] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:28:59.794 [DEBUG] [Thread-208300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:00.480 [DEBUG] [Thread-208301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:07.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:07.746 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:15.541 [DEBUG] [Thread-208302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:21.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:29:21.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:29:21.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:29:23.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 29, 10), 21.9, 23.36, 0.0, 20.08, 22.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:29:23.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:29:10
2026-02-15T17:29:23.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:29:23.900 [DEBUG] [Thread-208303] [transport.py] [_log()] starting thread (client mode): 0xa2d57370
2026-02-15T17:29:23.900 [DEBUG] [Thread-208303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:29:23.921 [DEBUG] [Thread-208303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:29:23.921 [INFO] [Thread-208303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] client lang: <none>
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] server lang: <none>
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] kex follows: False
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:29:23.932 [DEBUG] [Thread-208303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:29:23.933 [DEBUG] [Thread-208303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:29:23.933 [DEBUG] [Thread-208303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:29:23.933 [DEBUG] [Thread-208303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:29:23.933 [DEBUG] [Thread-208303] [transport.py] [_log()] Compression: none
2026-02-15T17:29:23.933 [DEBUG] [Thread-208303] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:29:23.950 [DEBUG] [Thread-208303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:29:23.951 [DEBUG] [Thread-208303] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:29:23.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:29:23.952 [DEBUG] [Thread-208303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:29:23.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:29:23.954 [DEBUG] [Thread-208303] [transport.py] [_log()] userauth is OK
2026-02-15T17:29:23.954 [DEBUG] [Thread-208303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:29:23.954 [DEBUG] [Thread-208303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:29:23.954 [DEBUG] [Thread-208303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:29:23.955 [DEBUG] [Thread-208303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:29:23.987 [INFO] [Thread-208303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:29:23.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:29:24.587 [DEBUG] [Thread-208303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:29:24.587 [DEBUG] [Thread-208303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:29:24.587 [DEBUG] [Thread-208303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:29:24.628 [DEBUG] [Thread-208303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:29:24.628 [DEBUG] [Thread-208303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:29:24.631 [DEBUG] [Thread-208303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:29:24.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:29:24.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:29:24.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:29:24.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:29:24.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:29:24.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:29:24.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:29:24.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:29:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:29:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.645234 -999.00  +21.70  18.66     29   +3.20 1 1 1 1 1   887    0 16.62 -80.55 ----- 14.1 18.7 152.8 26.8 25.6 -28.6 25.5 -27.3 27.1 -26.8 27.6 -29.0
2026-02-15T17:29:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:29:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:29:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.645234
2026-02-15T17:29:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:29:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:29:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:29:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:29:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:29:24.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:29:10', tmtdew=21.9, humidity=23.36, cloud=0.0, wind=20.08, temperature=22.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:29:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:29:24.655 [DEBUG] [Thread-208303] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:29:24.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:29:24.749 [DEBUG] [Thread-208306] [transport.py] [_log()] starting thread (client mode): 0xa575a470
2026-02-15T17:29:24.749 [DEBUG] [Thread-208306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:29:24.768 [DEBUG] [Thread-208306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:29:24.769 [INFO] [Thread-208306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] client lang: <none>
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] server lang: <none>
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] kex follows: False
2026-02-15T17:29:24.781 [DEBUG] [Thread-208306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:29:24.782 [DEBUG] [Thread-208306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:29:24.782 [DEBUG] [Thread-208306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:29:24.782 [DEBUG] [Thread-208306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:29:24.782 [DEBUG] [Thread-208306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:29:24.782 [DEBUG] [Thread-208306] [transport.py] [_log()] Compression: none
2026-02-15T17:29:24.782 [DEBUG] [Thread-208306] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:29:24.839 [DEBUG] [Thread-208306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:29:24.840 [DEBUG] [Thread-208306] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:29:24.840 [DEBUG] [Thread-208306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:29:24.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:29:24.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:29:24.895 [DEBUG] [Thread-208306] [transport.py] [_log()] userauth is OK
2026-02-15T17:29:24.896 [DEBUG] [Thread-208306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:29:24.896 [DEBUG] [Thread-208306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:29:24.896 [DEBUG] [Thread-208306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:29:24.896 [DEBUG] [Thread-208306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:29:24.916 [INFO] [Thread-208306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:29:24.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:29:24.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:29:25.793 [DEBUG] [Thread-208306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:29:25.793 [DEBUG] [Thread-208306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:29:25.840 [DEBUG] [Thread-208306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:29:25.840 [DEBUG] [Thread-208306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:29:25.852 [DEBUG] [Thread-208306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:29:25.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:29: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')
2026-02-15T17:29:25.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:29:25.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:29:25.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:29:25.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:29:25.883 [DEBUG] [Thread-208306] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:29:30.578 [DEBUG] [Thread-208308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:45.630 [DEBUG] [Thread-208309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:29:55.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:29:55.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:29:55.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
2026-02-15T17:29:57.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 29, 46), 22.35, 22.77, 0.0, 19.32, 22.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:29:57.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:29:46
2026-02-15T17:29:58.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:29:58.213 [DEBUG] [Thread-208310] [transport.py] [_log()] starting thread (client mode): 0xa5758790
2026-02-15T17:29:58.213 [DEBUG] [Thread-208310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:29:58.233 [DEBUG] [Thread-208310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:29:58.233 [INFO] [Thread-208310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:29:58.236 [DEBUG] [Thread-208310] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:29:58.236 [DEBUG] [Thread-208310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:29:58.236 [DEBUG] [Thread-208310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:29:58.236 [DEBUG] [Thread-208310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] client lang: <none>
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] server lang: <none>
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] kex follows: False
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] Compression: none
2026-02-15T17:29:58.237 [DEBUG] [Thread-208310] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:29:58.252 [DEBUG] [Thread-208310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:29:58.252 [DEBUG] [Thread-208310] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:29:58.253 [DEBUG] [Thread-208310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:29:58.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:29:58.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:29:58.254 [DEBUG] [Thread-208310] [transport.py] [_log()] userauth is OK
2026-02-15T17:29:58.254 [DEBUG] [Thread-208310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:29:58.254 [DEBUG] [Thread-208310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:29:58.254 [DEBUG] [Thread-208310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:29:58.254 [DEBUG] [Thread-208310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:29:58.272 [INFO] [Thread-208310] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:29:58.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:29:58.906 [DEBUG] [Thread-208310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:29:58.906 [DEBUG] [Thread-208310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:29:58.906 [DEBUG] [Thread-208310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:29:58.947 [DEBUG] [Thread-208310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:29:58.947 [DEBUG] [Thread-208310] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:29:58.949 [DEBUG] [Thread-208310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:29:58.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:29:58.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:29:58.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:29:58.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:29:58.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:29:58.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:29:58.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.645581 -999.00  +21.90  16.05     29   +3.20 1 1 1 1 1   887    0 16.51 -79.71 ----- 15.0 16.1 146.0 20.8 25.6 -28.6 25.5 -27.3 27.1 -26.1 27.7 -28.2
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.645581
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:29:58.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:29:46', tmtdew=22.35, humidity=22.77, cloud=0.0, wind=19.32, temperature=22.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:29:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:29:58.970 [DEBUG] [Thread-208310] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:29:59.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:29:59.054 [DEBUG] [Thread-208313] [transport.py] [_log()] starting thread (client mode): 0xa5759000
2026-02-15T17:29:59.055 [DEBUG] [Thread-208313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:29:59.069 [DEBUG] [Thread-208313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:29:59.069 [INFO] [Thread-208313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:29:59.076 [DEBUG] [Thread-208313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] client lang: <none>
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] server lang: <none>
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] kex follows: False
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] Compression: none
2026-02-15T17:29:59.077 [DEBUG] [Thread-208313] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:29:59.135 [DEBUG] [Thread-208313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:29:59.135 [DEBUG] [Thread-208313] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:29:59.135 [DEBUG] [Thread-208313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:29:59.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:29:59.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:29:59.194 [DEBUG] [Thread-208313] [transport.py] [_log()] userauth is OK
2026-02-15T17:29:59.195 [DEBUG] [Thread-208313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:29:59.195 [DEBUG] [Thread-208313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:29:59.195 [DEBUG] [Thread-208313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:29:59.195 [DEBUG] [Thread-208313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:29:59.219 [INFO] [Thread-208313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:29:59.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:29:59.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:29:59.831 [DEBUG] [Thread-208315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:00.049 [DEBUG] [Thread-208313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:30:00.049 [DEBUG] [Thread-208313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:30:00.097 [DEBUG] [Thread-208313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:30:00.098 [DEBUG] [Thread-208313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:30:00.107 [DEBUG] [Thread-208313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:30:00.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:30: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')
2026-02-15T17:30:00.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:30:00.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:30:00.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:30:00.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:30:00.150 [DEBUG] [Thread-208313] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:30:00.667 [DEBUG] [Thread-208316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:07.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:07.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:15.714 [DEBUG] [Thread-208317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:30.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:30:30.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:30:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:30:30.751 [DEBUG] [Thread-208318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:31.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 30, 21), 22.2, 22.97, 0.0, 20.54, 22.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:30:31.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:30:21
2026-02-15T17:30:32.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:30:32.470 [DEBUG] [Thread-208319] [transport.py] [_log()] starting thread (client mode): 0xa2d1b460
2026-02-15T17:30:32.470 [DEBUG] [Thread-208319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:30:32.490 [DEBUG] [Thread-208319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:30:32.490 [INFO] [Thread-208319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] client lang: <none>
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] server lang: <none>
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] kex follows: False
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] Compression: none
2026-02-15T17:30:32.494 [DEBUG] [Thread-208319] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:30:32.512 [DEBUG] [Thread-208319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:30:32.512 [DEBUG] [Thread-208319] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:30:32.513 [DEBUG] [Thread-208319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:30:32.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:30:32.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:30:32.515 [DEBUG] [Thread-208319] [transport.py] [_log()] userauth is OK
2026-02-15T17:30:32.515 [DEBUG] [Thread-208319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:30:32.515 [DEBUG] [Thread-208319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:30:32.515 [DEBUG] [Thread-208319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:30:32.515 [DEBUG] [Thread-208319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:30:32.548 [INFO] [Thread-208319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:30:32.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:30:33.180 [DEBUG] [Thread-208319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:30:33.180 [DEBUG] [Thread-208319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:30:33.181 [DEBUG] [Thread-208319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:30:33.221 [DEBUG] [Thread-208319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:30:33.222 [DEBUG] [Thread-208319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:30:33.224 [DEBUG] [Thread-208319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:30:33.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:30:33.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:30:33.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:30:33.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:30:33.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:30:33.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:30:33.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:30:33.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:30:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:30:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.645928 -999.00  +22.10  12.65     29   +3.20 1 1 1 1 1   887    0 16.36 -75.10 ----- 18.0 12.7 148.7 17.0 25.7 -28.6 25.5 -27.0 27.2 -26.2 27.7 -27.9
2026-02-15T17:30:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:30:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:30:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.645928
2026-02-15T17:30:33.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:30:33.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:30:33.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:30:33.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:30:33.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:30:33.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:30:21', tmtdew=22.2, humidity=22.97, cloud=0.0, wind=20.54, temperature=22.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:30:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:30:33.248 [DEBUG] [Thread-208319] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:30:33.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:30:33.351 [DEBUG] [Thread-208322] [transport.py] [_log()] starting thread (client mode): 0xa2d18d60
2026-02-15T17:30:33.351 [DEBUG] [Thread-208322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:30:33.365 [DEBUG] [Thread-208322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:30:33.366 [INFO] [Thread-208322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:30:33.373 [DEBUG] [Thread-208322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:30:33.373 [DEBUG] [Thread-208322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:30:33.373 [DEBUG] [Thread-208322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:30:33.373 [DEBUG] [Thread-208322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:30:33.373 [DEBUG] [Thread-208322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] client lang: <none>
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] server lang: <none>
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] kex follows: False
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:30:33.374 [DEBUG] [Thread-208322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:30:33.375 [DEBUG] [Thread-208322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:30:33.375 [DEBUG] [Thread-208322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:30:33.375 [DEBUG] [Thread-208322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:30:33.375 [DEBUG] [Thread-208322] [transport.py] [_log()] Compression: none
2026-02-15T17:30:33.375 [DEBUG] [Thread-208322] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:30:33.431 [DEBUG] [Thread-208322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:30:33.431 [DEBUG] [Thread-208322] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:30:33.431 [DEBUG] [Thread-208322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:30:33.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:30:33.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:30:33.487 [DEBUG] [Thread-208322] [transport.py] [_log()] userauth is OK
2026-02-15T17:30:33.488 [DEBUG] [Thread-208322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:30:33.488 [DEBUG] [Thread-208322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:30:33.488 [DEBUG] [Thread-208322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:30:33.488 [DEBUG] [Thread-208322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:30:33.506 [INFO] [Thread-208322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:30:33.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:30:33.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:30:34.308 [DEBUG] [Thread-208322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:30:34.308 [DEBUG] [Thread-208322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:30:34.356 [DEBUG] [Thread-208322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:30:34.357 [DEBUG] [Thread-208322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:30:34.366 [DEBUG] [Thread-208322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:30:34.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:30:34.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:30:34.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:30:34.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:30:34.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:30:34.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:30:34.408 [DEBUG] [Thread-208322] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:30:45.787 [DEBUG] [Thread-208324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:30:59.871 [DEBUG] [Thread-208325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:00.843 [DEBUG] [Thread-208326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:04.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:31:04.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:31:04.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:31:06.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 30, 56), 21.92, 23.22, 0.0, 25.51, 21.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:31:06.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:30:56
2026-02-15T17:31:06.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:31:06.747 [DEBUG] [Thread-208327] [transport.py] [_log()] starting thread (client mode): 0xa5758220
2026-02-15T17:31:06.748 [DEBUG] [Thread-208327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:31:06.767 [DEBUG] [Thread-208327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:31:06.767 [INFO] [Thread-208327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:31:06.770 [DEBUG] [Thread-208327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:31:06.770 [DEBUG] [Thread-208327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:31:06.770 [DEBUG] [Thread-208327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:31:06.770 [DEBUG] [Thread-208327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:06.770 [DEBUG] [Thread-208327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:06.770 [DEBUG] [Thread-208327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] client lang: <none>
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] server lang: <none>
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] kex follows: False
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] Compression: none
2026-02-15T17:31:06.771 [DEBUG] [Thread-208327] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:31:06.786 [DEBUG] [Thread-208327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:31:06.787 [DEBUG] [Thread-208327] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:31:06.787 [DEBUG] [Thread-208327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:31:06.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:31:06.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:31:06.789 [DEBUG] [Thread-208327] [transport.py] [_log()] userauth is OK
2026-02-15T17:31:06.790 [DEBUG] [Thread-208327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:31:06.790 [DEBUG] [Thread-208327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:31:06.790 [DEBUG] [Thread-208327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:31:06.790 [DEBUG] [Thread-208327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:31:06.813 [INFO] [Thread-208327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:31:06.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:31:07.454 [DEBUG] [Thread-208327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:31:07.455 [DEBUG] [Thread-208327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:31:07.455 [DEBUG] [Thread-208327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:31:07.496 [DEBUG] [Thread-208327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:31:07.496 [DEBUG] [Thread-208327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:31:07.499 [DEBUG] [Thread-208327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:31:07.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:31:07.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:31:07.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:31:07.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:31:07.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:31:07.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:31:07.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:31:07.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.646276 -999.00  +22.20  18.33     28   +3.30 1 1 1 1 1   887    0 16.84 -74.11 ----- 17.9 18.3 149.4 25.1 25.7 -28.6 25.6 -27.2 27.2 -26.3 27.8 -28.0
2026-02-15T17:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.646276
2026-02-15T17:31:07.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:31:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:31:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:31:07.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:31:07.528 [DEBUG] [Thread-208327] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:31:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:31:07.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:30:56', tmtdew=21.92, humidity=23.22, cloud=0.0, wind=25.51, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:30:38.246', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:31:07.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:31:07.624 [DEBUG] [Thread-208330] [transport.py] [_log()] starting thread (client mode): 0xa5758d90
2026-02-15T17:31:07.624 [DEBUG] [Thread-208330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:31:07.639 [DEBUG] [Thread-208330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:31:07.639 [INFO] [Thread-208330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:31:07.647 [DEBUG] [Thread-208330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:31:07.647 [DEBUG] [Thread-208330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] client lang: <none>
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] server lang: <none>
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] kex follows: False
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:31:07.648 [DEBUG] [Thread-208330] [transport.py] [_log()] Compression: none
2026-02-15T17:31:07.649 [DEBUG] [Thread-208330] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:31:07.705 [DEBUG] [Thread-208330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:31:07.706 [DEBUG] [Thread-208330] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:31:07.706 [DEBUG] [Thread-208330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:31:07.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:31:07.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:31:07.765 [DEBUG] [Thread-208330] [transport.py] [_log()] userauth is OK
2026-02-15T17:31:07.765 [DEBUG] [Thread-208330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:31:07.765 [DEBUG] [Thread-208330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:31:07.765 [DEBUG] [Thread-208330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:31:07.765 [DEBUG] [Thread-208330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:31:07.785 [INFO] [Thread-208330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:31:07.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:31:07.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:31:08.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:08.032 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:08.639 [DEBUG] [Thread-208330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:31:08.639 [DEBUG] [Thread-208330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:31:08.687 [DEBUG] [Thread-208330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:31:08.687 [DEBUG] [Thread-208330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:31:08.697 [DEBUG] [Thread-208330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:31:08.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:31:08.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:31:08.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:31:08.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:31:08.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:31:08.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:31:08.736 [DEBUG] [Thread-208330] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:31:15.883 [DEBUG] [Thread-208332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:30.936 [DEBUG] [Thread-208333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:31:38.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:31:38.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:31:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 30, 56), 21.92, 23.22, 0.0, 25.51, 21.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:31:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:30:56
2026-02-15T17:31:41.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:31:41.280 [DEBUG] [Thread-208334] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-15T17:31:41.280 [DEBUG] [Thread-208334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:31:41.303 [DEBUG] [Thread-208334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:31:41.303 [INFO] [Thread-208334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] client lang: <none>
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] server lang: <none>
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] kex follows: False
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:31:41.307 [DEBUG] [Thread-208334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:31:41.308 [DEBUG] [Thread-208334] [transport.py] [_log()] Compression: none
2026-02-15T17:31:41.308 [DEBUG] [Thread-208334] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:31:41.325 [DEBUG] [Thread-208334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:31:41.326 [DEBUG] [Thread-208334] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:31:41.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:31:41.327 [DEBUG] [Thread-208334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:31:41.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:31:41.330 [DEBUG] [Thread-208334] [transport.py] [_log()] userauth is OK
2026-02-15T17:31:41.330 [DEBUG] [Thread-208334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:31:41.330 [DEBUG] [Thread-208334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:31:41.330 [DEBUG] [Thread-208334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:31:41.330 [DEBUG] [Thread-208334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:31:41.366 [INFO] [Thread-208334] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:31:41.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:31:41.984 [DEBUG] [Thread-208334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:31:41.985 [DEBUG] [Thread-208334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:31:41.985 [DEBUG] [Thread-208334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:31:42.025 [DEBUG] [Thread-208334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:31:42.026 [DEBUG] [Thread-208334] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:31:42.028 [DEBUG] [Thread-208334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:31:42.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:31:42.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:31:42.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:31:42.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:31:42.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:31:42.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:31:42.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:31:42.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:31:42.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:31:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.646623 -999.00  +22.30  20.03     28   +3.20 1 1 1 1 1   887    0 17.17 -72.07 ----- 24.2 20.0 143.8 25.9 25.8 -28.7 25.7 -28.7 27.3 -26.4 27.8 -28.4
2026-02-15T17:31:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:31:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:31:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.646623
2026-02-15T17:31:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:31:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:31:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:31:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:31:42.057 [DEBUG] [Thread-208334] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:31:42.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:31:42.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:30:56', tmtdew=21.92, humidity=23.22, cloud=0.0, wind=25.51, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:31:08.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:31:42.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:31:42.153 [DEBUG] [Thread-208337] [transport.py] [_log()] starting thread (client mode): 0xa5758700
2026-02-15T17:31:42.153 [DEBUG] [Thread-208337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:31:42.167 [DEBUG] [Thread-208337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:31:42.167 [INFO] [Thread-208337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] client lang: <none>
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] server lang: <none>
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] kex follows: False
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] Compression: none
2026-02-15T17:31:42.175 [DEBUG] [Thread-208337] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:31:42.232 [DEBUG] [Thread-208337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:31:42.232 [DEBUG] [Thread-208337] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:31:42.233 [DEBUG] [Thread-208337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:31:42.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:31:42.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:31:42.288 [DEBUG] [Thread-208337] [transport.py] [_log()] userauth is OK
2026-02-15T17:31:42.289 [DEBUG] [Thread-208337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:31:42.289 [DEBUG] [Thread-208337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:31:42.289 [DEBUG] [Thread-208337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:31:42.289 [DEBUG] [Thread-208337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:31:42.310 [INFO] [Thread-208337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:31:42.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:31:42.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:31:43.148 [DEBUG] [Thread-208337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:31:43.149 [DEBUG] [Thread-208337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:31:43.197 [DEBUG] [Thread-208337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:31:43.197 [DEBUG] [Thread-208337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:31:43.205 [DEBUG] [Thread-208337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:31:43.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:31:43.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:31:43.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:31:43.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:31:43.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:31:43.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:31:43.239 [DEBUG] [Thread-208337] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:31:45.976 [DEBUG] [Thread-208339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:31:59.902 [DEBUG] [Thread-208340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:01.022 [DEBUG] [Thread-208341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:08.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:08.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:13.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:32:13.261 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:32:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:32:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 31, 32), 21.93, 23.22, 0.0, 23.54, 22.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:32:15.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:31:32
2026-02-15T17:32:15.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:32:15.797 [DEBUG] [Thread-208342] [transport.py] [_log()] starting thread (client mode): 0xa575b370
2026-02-15T17:32:15.797 [DEBUG] [Thread-208342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:32:15.818 [DEBUG] [Thread-208342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:32:15.818 [INFO] [Thread-208342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] client lang: <none>
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] server lang: <none>
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] kex follows: False
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] Compression: none
2026-02-15T17:32:15.821 [DEBUG] [Thread-208342] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:32:15.840 [DEBUG] [Thread-208342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:32:15.840 [DEBUG] [Thread-208342] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:32:15.841 [DEBUG] [Thread-208342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:32:15.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:32:15.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:32:15.843 [DEBUG] [Thread-208342] [transport.py] [_log()] userauth is OK
2026-02-15T17:32:15.843 [DEBUG] [Thread-208342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:32:15.843 [DEBUG] [Thread-208342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:32:15.843 [DEBUG] [Thread-208342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:32:15.843 [DEBUG] [Thread-208342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:32:15.861 [INFO] [Thread-208342] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:32:15.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:32:16.059 [DEBUG] [Thread-208344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:16.507 [DEBUG] [Thread-208342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:32:16.508 [DEBUG] [Thread-208342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:32:16.508 [DEBUG] [Thread-208342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:32:16.548 [DEBUG] [Thread-208342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:32:16.549 [DEBUG] [Thread-208342] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:32:16.552 [DEBUG] [Thread-208342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:32:16.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:32:16.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:32:16.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:32:16.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:32:16.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:32:16.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:32:16.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:32:16.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:32:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:32:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.646970 -999.00  +21.90  16.32     29   +3.10 1 1 1 1 1   887    0 17.19 -62.16 ----- 16.1 16.3 141.0 27.3 25.7 -29.6 25.7 -28.5 27.2 -26.9 27.8 -29.0
2026-02-15T17:32:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:32:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:32:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.646970
2026-02-15T17:32:16.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:32:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:32:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:32:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:32:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:32:16.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:31:32', tmtdew=21.93, humidity=23.22, cloud=0.0, wind=23.54, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:31:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:32:16.581 [DEBUG] [Thread-208342] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:32:16.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:32:16.695 [DEBUG] [Thread-208346] [transport.py] [_log()] starting thread (client mode): 0xa2d18280
2026-02-15T17:32:16.695 [DEBUG] [Thread-208346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:32:16.710 [DEBUG] [Thread-208346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:32:16.711 [INFO] [Thread-208346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:32:16.719 [DEBUG] [Thread-208346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:32:16.719 [DEBUG] [Thread-208346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:32:16.719 [DEBUG] [Thread-208346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:32:16.719 [DEBUG] [Thread-208346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:16.719 [DEBUG] [Thread-208346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] client lang: <none>
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] server lang: <none>
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] kex follows: False
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] Compression: none
2026-02-15T17:32:16.720 [DEBUG] [Thread-208346] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:32:16.775 [DEBUG] [Thread-208346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:32:16.776 [DEBUG] [Thread-208346] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:32:16.776 [DEBUG] [Thread-208346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:32:16.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:32:16.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:32:16.832 [DEBUG] [Thread-208346] [transport.py] [_log()] userauth is OK
2026-02-15T17:32:16.833 [DEBUG] [Thread-208346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:32:16.833 [DEBUG] [Thread-208346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:32:16.833 [DEBUG] [Thread-208346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:32:16.833 [DEBUG] [Thread-208346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:32:16.852 [INFO] [Thread-208346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:32:16.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:32:16.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:32:17.688 [DEBUG] [Thread-208346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:32:17.689 [DEBUG] [Thread-208346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:32:17.736 [DEBUG] [Thread-208346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:32:17.736 [DEBUG] [Thread-208346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:32:17.746 [DEBUG] [Thread-208346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:32:17.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:32:17.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:32:17.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:32:17.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:32:17.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:32:17.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:32:17.789 [DEBUG] [Thread-208346] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:32:31.101 [DEBUG] [Thread-208348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:46.150 [DEBUG] [Thread-208349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:32:47.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:32:47.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:32:47.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:32:49.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 32, 8), 22.05, 23.06, 0.0, 26.52, 22.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:32:49.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:32:08
2026-02-15T17:32:50.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:32:50.321 [DEBUG] [Thread-208350] [transport.py] [_log()] starting thread (client mode): 0xa2d56140
2026-02-15T17:32:50.321 [DEBUG] [Thread-208350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:32:50.342 [DEBUG] [Thread-208350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:32:50.343 [INFO] [Thread-208350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:32:50.344 [DEBUG] [Thread-208350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:50.345 [DEBUG] [Thread-208350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] client lang: <none>
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] server lang: <none>
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] kex follows: False
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] Compression: none
2026-02-15T17:32:50.346 [DEBUG] [Thread-208350] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:32:50.363 [DEBUG] [Thread-208350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:32:50.364 [DEBUG] [Thread-208350] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:32:50.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:32:50.365 [DEBUG] [Thread-208350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:32:50.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:32:50.368 [DEBUG] [Thread-208350] [transport.py] [_log()] userauth is OK
2026-02-15T17:32:50.368 [DEBUG] [Thread-208350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:32:50.368 [DEBUG] [Thread-208350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:32:50.368 [DEBUG] [Thread-208350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:32:50.368 [DEBUG] [Thread-208350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:32:50.405 [INFO] [Thread-208350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:32:50.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:32:51.036 [DEBUG] [Thread-208350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:32:51.036 [DEBUG] [Thread-208350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:32:51.037 [DEBUG] [Thread-208350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:32:51.077 [DEBUG] [Thread-208350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:32:51.078 [DEBUG] [Thread-208350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:32:51.081 [DEBUG] [Thread-208350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:32:51.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:32:51.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:32:51.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:32:51.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:32:51.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:32:51.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:32:51.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:32:51.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:32:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:32:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.647317 -999.00  +21.60  18.31     29   +3.10 1 1 1 1 1   887    0 17.16 -57.75 ----- 23.3 18.3 145.2 27.2 25.7 -29.1 25.6 -28.5 27.2 -27.3 27.8 -29.1
2026-02-15T17:32:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:32:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:32:51.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.647317
2026-02-15T17:32:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:32:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:32:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:32:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:32:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:32:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:32:08', tmtdew=22.05, humidity=23.06, cloud=0.0, wind=26.52, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:32:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:32:51.109 [DEBUG] [Thread-208350] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:32:51.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:32:51.206 [DEBUG] [Thread-208353] [transport.py] [_log()] starting thread (client mode): 0xa2d57700
2026-02-15T17:32:51.206 [DEBUG] [Thread-208353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:32:51.221 [DEBUG] [Thread-208353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:32:51.221 [INFO] [Thread-208353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] client lang: <none>
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] server lang: <none>
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] kex follows: False
2026-02-15T17:32:51.229 [DEBUG] [Thread-208353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:32:51.230 [DEBUG] [Thread-208353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:32:51.230 [DEBUG] [Thread-208353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:32:51.230 [DEBUG] [Thread-208353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:32:51.230 [DEBUG] [Thread-208353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:32:51.230 [DEBUG] [Thread-208353] [transport.py] [_log()] Compression: none
2026-02-15T17:32:51.230 [DEBUG] [Thread-208353] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:32:51.290 [DEBUG] [Thread-208353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:32:51.291 [DEBUG] [Thread-208353] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:32:51.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:32:51.292 [DEBUG] [Thread-208353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:32:51.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:32:51.347 [DEBUG] [Thread-208353] [transport.py] [_log()] userauth is OK
2026-02-15T17:32:51.348 [DEBUG] [Thread-208353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:32:51.348 [DEBUG] [Thread-208353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:32:51.348 [DEBUG] [Thread-208353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:32:51.348 [DEBUG] [Thread-208353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:32:51.368 [INFO] [Thread-208353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:32:51.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:32:51.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:32:52.235 [DEBUG] [Thread-208353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:32:52.236 [DEBUG] [Thread-208353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:32:52.283 [DEBUG] [Thread-208353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:32:52.283 [DEBUG] [Thread-208353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:32:52.292 [DEBUG] [Thread-208353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:32:52.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:32:52.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:32:52.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:32:52.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:32:52.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:32:52.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:32:52.326 [DEBUG] [Thread-208353] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:32:59.949 [DEBUG] [Thread-208355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:01.188 [DEBUG] [Thread-208356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:08.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:08.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:16.235 [DEBUG] [Thread-208357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:33:22.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:33:22.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:33:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 32, 44), 21.81, 23.54, 0.0, 25.04, 22.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:33:24.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:32:44
2026-02-15T17:33:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:33:24.949 [DEBUG] [Thread-208358] [transport.py] [_log()] starting thread (client mode): 0xa2d6a980
2026-02-15T17:33:24.949 [DEBUG] [Thread-208358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:33:24.969 [DEBUG] [Thread-208358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:33:24.969 [INFO] [Thread-208358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] client lang: <none>
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] server lang: <none>
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] kex follows: False
2026-02-15T17:33:24.972 [DEBUG] [Thread-208358] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:33:24.973 [DEBUG] [Thread-208358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:33:24.973 [DEBUG] [Thread-208358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:33:24.973 [DEBUG] [Thread-208358] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:33:24.973 [DEBUG] [Thread-208358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:33:24.973 [DEBUG] [Thread-208358] [transport.py] [_log()] Compression: none
2026-02-15T17:33:24.973 [DEBUG] [Thread-208358] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:33:24.989 [DEBUG] [Thread-208358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:33:24.990 [DEBUG] [Thread-208358] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:33:24.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:33:24.990 [DEBUG] [Thread-208358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:33:24.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:33:24.992 [DEBUG] [Thread-208358] [transport.py] [_log()] userauth is OK
2026-02-15T17:33:24.993 [DEBUG] [Thread-208358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:33:24.993 [DEBUG] [Thread-208358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:33:24.993 [DEBUG] [Thread-208358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:33:24.993 [DEBUG] [Thread-208358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:33:25.016 [INFO] [Thread-208358] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:33:25.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:33:25.660 [DEBUG] [Thread-208358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:33:25.660 [DEBUG] [Thread-208358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:33:25.660 [DEBUG] [Thread-208358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:33:25.701 [DEBUG] [Thread-208358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:33:25.701 [DEBUG] [Thread-208358] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:33:25.703 [DEBUG] [Thread-208358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:33:25.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:33:25.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:33:25.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:33:25.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:33:25.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:33:25.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:33:25.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.647664 -999.00  +21.60  16.73     29   +3.20 1 1 1 1 1   887    0 17.59 -56.23 ----- 25.4 16.7 149.4 33.3 25.6 -28.9 25.6 -28.4 27.1 -28.0 27.6 -29.5
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.647664
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:33:25.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:32:44', tmtdew=21.81, humidity=23.54, cloud=0.0, wind=25.04, temperature=22.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:32:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:33:25.723 [DEBUG] [Thread-208358] [transport.py] [_log()] EOF in transport thread
2026-02-15T17: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-02-15T17:33:25.808 [DEBUG] [Thread-208361] [transport.py] [_log()] starting thread (client mode): 0xa575b310
2026-02-15T17:33:25.808 [DEBUG] [Thread-208361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:33:25.822 [DEBUG] [Thread-208361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:33:25.822 [INFO] [Thread-208361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:33:25.829 [DEBUG] [Thread-208361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:33:25.829 [DEBUG] [Thread-208361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] client lang: <none>
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] server lang: <none>
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] kex follows: False
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] Compression: none
2026-02-15T17:33:25.830 [DEBUG] [Thread-208361] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:33:25.886 [DEBUG] [Thread-208361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:33:25.886 [DEBUG] [Thread-208361] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:33:25.887 [DEBUG] [Thread-208361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:33:25.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:33:25.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:33:25.944 [DEBUG] [Thread-208361] [transport.py] [_log()] userauth is OK
2026-02-15T17:33:25.944 [DEBUG] [Thread-208361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:33:25.944 [DEBUG] [Thread-208361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:33:25.944 [DEBUG] [Thread-208361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:33:25.944 [DEBUG] [Thread-208361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:33:25.957 [INFO] [Thread-208361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:33:25.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:33:25.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:33:26.836 [DEBUG] [Thread-208361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:33:26.837 [DEBUG] [Thread-208361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:33:26.884 [DEBUG] [Thread-208361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:33:26.884 [DEBUG] [Thread-208361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:33:26.893 [DEBUG] [Thread-208361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:33:26.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:33:26.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17: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') -> 00000000
2026-02-15T17:33:26.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:33:26.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:33:26.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:33:26.933 [DEBUG] [Thread-208361] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:33:31.270 [DEBUG] [Thread-208363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:46.324 [DEBUG] [Thread-208364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:33:56.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:33:56.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:33:56.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:33:58.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 33, 19), 21.73, 23.64, 0.0, 24.81, 21.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:33:58.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:33:19
2026-02-15T17:33:59.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:33:59.556 [DEBUG] [Thread-208365] [transport.py] [_log()] starting thread (client mode): 0xa2d55d80
2026-02-15T17:33:59.556 [DEBUG] [Thread-208365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:33:59.577 [DEBUG] [Thread-208365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:33:59.577 [INFO] [Thread-208365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:33:59.581 [DEBUG] [Thread-208365] [transport.py] [_log()] client lang: <none>
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] server lang: <none>
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] kex follows: False
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] Compression: none
2026-02-15T17:33:59.582 [DEBUG] [Thread-208365] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:33:59.600 [DEBUG] [Thread-208365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:33:59.601 [DEBUG] [Thread-208365] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:33:59.601 [DEBUG] [Thread-208365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:33:59.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:33:59.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:33:59.603 [DEBUG] [Thread-208365] [transport.py] [_log()] userauth is OK
2026-02-15T17:33:59.603 [DEBUG] [Thread-208365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:33:59.603 [DEBUG] [Thread-208365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:33:59.604 [DEBUG] [Thread-208365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:33:59.604 [DEBUG] [Thread-208365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:33:59.639 [INFO] [Thread-208365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:33:59.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:33:59.981 [DEBUG] [Thread-208367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:34:00.426 [DEBUG] [Thread-208365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:34:00.426 [DEBUG] [Thread-208365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:34:00.427 [DEBUG] [Thread-208365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:34:00.467 [DEBUG] [Thread-208365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:34:00.468 [DEBUG] [Thread-208365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:34:00.471 [DEBUG] [Thread-208365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:34:00.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:34:00.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:34:00.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:34:00.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:34:00.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:34:00.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:34:00.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:34:00.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:34:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:34:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.648012 -999.00  +21.70  20.62     29   +3.20 1 1 1 1 1   887    0 16.56 -56.71 ----- 18.3 20.6 163.7 29.9 25.6 -29.2 25.6 -28.6 27.1 -27.6 27.6 -29.1
2026-02-15T17:34:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:34:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:34:00.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.648012
2026-02-15T17:34:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:34:00.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:34:00.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:34:00.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:34:00.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:34:00.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:33:19', tmtdew=21.73, humidity=23.64, cloud=0.0, wind=24.81, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:33:08.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:34:00.501 [DEBUG] [Thread-208365] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:34:00.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:34:00.595 [DEBUG] [Thread-208369] [transport.py] [_log()] starting thread (client mode): 0xa2d56ef0
2026-02-15T17:34:00.595 [DEBUG] [Thread-208369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:34:00.610 [DEBUG] [Thread-208369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:34:00.610 [INFO] [Thread-208369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:34:00.617 [DEBUG] [Thread-208369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:34:00.618 [DEBUG] [Thread-208369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] client lang: <none>
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] server lang: <none>
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] kex follows: False
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:34:00.619 [DEBUG] [Thread-208369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:34:00.620 [DEBUG] [Thread-208369] [transport.py] [_log()] Compression: none
2026-02-15T17:34:00.620 [DEBUG] [Thread-208369] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:34:00.677 [DEBUG] [Thread-208369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:34:00.678 [DEBUG] [Thread-208369] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:34:00.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:34:00.679 [DEBUG] [Thread-208369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:34:00.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:34:00.736 [DEBUG] [Thread-208369] [transport.py] [_log()] userauth is OK
2026-02-15T17:34:00.737 [DEBUG] [Thread-208369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:34:00.737 [DEBUG] [Thread-208369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:34:00.737 [DEBUG] [Thread-208369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:34:00.737 [DEBUG] [Thread-208369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:34:00.757 [INFO] [Thread-208369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:34:00.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:34:00.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:34:01.360 [DEBUG] [Thread-208371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:34:01.618 [DEBUG] [Thread-208369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:34:01.619 [DEBUG] [Thread-208369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:34:01.666 [DEBUG] [Thread-208369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:34:01.666 [DEBUG] [Thread-208369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:34:01.675 [DEBUG] [Thread-208369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:34:01.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:34:01.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:34:01.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:34:01.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:34:01.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:34:01.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:34:01.716 [DEBUG] [Thread-208369] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:34:08.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:34:08.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:34:16.411 [DEBUG] [Thread-208372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:34:31.447 [DEBUG] [Thread-208373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:34:31.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:34:31.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:34:31.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:34:33.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 33, 55), 21.61, 23.74, 0.0, 29.22, 21.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:34:33.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:33:55
2026-02-15T17:34:34.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:34:34.327 [DEBUG] [Thread-208374] [transport.py] [_log()] starting thread (client mode): 0xa2d4e5f0
2026-02-15T17:34:34.327 [DEBUG] [Thread-208374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:34:34.340 [DEBUG] [Thread-208374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:34:34.341 [INFO] [Thread-208374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] client lang: <none>
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] server lang: <none>
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] kex follows: False
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] Compression: none
2026-02-15T17:34:34.344 [DEBUG] [Thread-208374] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:34:34.359 [DEBUG] [Thread-208374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:34:34.360 [DEBUG] [Thread-208374] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:34:34.360 [DEBUG] [Thread-208374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:34:34.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:34:34.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:34:34.362 [DEBUG] [Thread-208374] [transport.py] [_log()] userauth is OK
2026-02-15T17:34:34.362 [DEBUG] [Thread-208374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:34:34.362 [DEBUG] [Thread-208374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:34:34.362 [DEBUG] [Thread-208374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:34:34.363 [DEBUG] [Thread-208374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:34:34.399 [INFO] [Thread-208374] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:34:34.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:34:35.062 [DEBUG] [Thread-208374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:34:35.063 [DEBUG] [Thread-208374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:34:35.063 [DEBUG] [Thread-208374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:34:35.103 [DEBUG] [Thread-208374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:34:35.103 [DEBUG] [Thread-208374] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:34:35.107 [DEBUG] [Thread-208374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:34:35.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:34:35.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:34:35.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:34:35.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:34:35.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:34:35.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:34:35.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:34:35.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:34:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:34:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.648706 -999.00  +21.70  22.38     29   +3.10 1 1 1 1 1   887    0 17.73 -50.90 ----- 19.9 22.4 174.8 31.1 25.6 -29.7 25.5 -28.4 27.1 -27.5 27.6 -29.4
2026-02-15T17:34:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:34:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:34:35.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.648706
2026-02-15T17:34:35.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:34:35.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:34:35.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:34:35.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:34:35.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:34:35.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:33:55', tmtdew=21.61, humidity=23.74, cloud=0.0, wind=29.22, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:34:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:34:35.132 [DEBUG] [Thread-208374] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:34:35.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:34:35.227 [DEBUG] [Thread-208377] [transport.py] [_log()] starting thread (client mode): 0xa5758880
2026-02-15T17:34:35.227 [DEBUG] [Thread-208377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:34:35.244 [DEBUG] [Thread-208377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:34:35.244 [INFO] [Thread-208377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:34:35.253 [DEBUG] [Thread-208377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:34:35.254 [DEBUG] [Thread-208377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:34:35.254 [DEBUG] [Thread-208377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:34:35.254 [DEBUG] [Thread-208377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:34:35.254 [DEBUG] [Thread-208377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:34:35.254 [DEBUG] [Thread-208377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:34:35.254 [DEBUG] [Thread-208377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:34:35.255 [DEBUG] [Thread-208377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:34:35.255 [DEBUG] [Thread-208377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:34:35.255 [DEBUG] [Thread-208377] [transport.py] [_log()] client lang: <none>
2026-02-15T17:34:35.255 [DEBUG] [Thread-208377] [transport.py] [_log()] server lang: <none>
2026-02-15T17:34:35.255 [DEBUG] [Thread-208377] [transport.py] [_log()] kex follows: False
2026-02-15T17:34:35.255 [DEBUG] [Thread-208377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:34:35.256 [DEBUG] [Thread-208377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:34:35.256 [DEBUG] [Thread-208377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:34:35.256 [DEBUG] [Thread-208377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:34:35.256 [DEBUG] [Thread-208377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:34:35.256 [DEBUG] [Thread-208377] [transport.py] [_log()] Compression: none
2026-02-15T17:34:35.256 [DEBUG] [Thread-208377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:34:35.313 [DEBUG] [Thread-208377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:34:35.313 [DEBUG] [Thread-208377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:34:35.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:34:35.315 [DEBUG] [Thread-208377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:34:35.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:34:35.374 [DEBUG] [Thread-208377] [transport.py] [_log()] userauth is OK
2026-02-15T17:34:35.374 [DEBUG] [Thread-208377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:34:35.374 [DEBUG] [Thread-208377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:34:35.374 [DEBUG] [Thread-208377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:34:35.375 [DEBUG] [Thread-208377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:34:35.395 [INFO] [Thread-208377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:34:35.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:34:35.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:34:36.242 [DEBUG] [Thread-208377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:34:36.242 [DEBUG] [Thread-208377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:34:36.289 [DEBUG] [Thread-208377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:34:36.289 [DEBUG] [Thread-208377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:34:36.299 [DEBUG] [Thread-208377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:34:36.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:34:36.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:34:36.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:34:36.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:34:36.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:34:36.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:34:36.335 [DEBUG] [Thread-208377] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:34:46.480 [DEBUG] [Thread-208379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:00.016 [DEBUG] [Thread-208380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:01.524 [DEBUG] [Thread-208381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:06.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:35:06.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:35:06.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:35:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 34, 30), 21.61, 23.75, 0.0, 26.08, 21.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:35:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:34:30
2026-02-15T17:35:08.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:08.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:08.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:35:09.010 [DEBUG] [Thread-208382] [transport.py] [_log()] starting thread (client mode): 0xa2d6beb0
2026-02-15T17:35:09.010 [DEBUG] [Thread-208382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:35:09.029 [DEBUG] [Thread-208382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:35:09.029 [INFO] [Thread-208382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:35:09.032 [DEBUG] [Thread-208382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] client lang: <none>
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] server lang: <none>
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] kex follows: False
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] Compression: none
2026-02-15T17:35:09.033 [DEBUG] [Thread-208382] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:35:09.042 [DEBUG] [Thread-208382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:35:09.042 [DEBUG] [Thread-208382] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:35:09.043 [DEBUG] [Thread-208382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:35:09.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:35:09.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:35:09.044 [DEBUG] [Thread-208382] [transport.py] [_log()] userauth is OK
2026-02-15T17:35:09.044 [DEBUG] [Thread-208382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:35:09.044 [DEBUG] [Thread-208382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:35:09.044 [DEBUG] [Thread-208382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:35:09.045 [DEBUG] [Thread-208382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:35:09.062 [INFO] [Thread-208382] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:35:09.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:35:15.732 [DEBUG] [Thread-208382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:35:15.732 [DEBUG] [Thread-208382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:35:15.733 [DEBUG] [Thread-208382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:35:15.773 [DEBUG] [Thread-208382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:35:15.773 [DEBUG] [Thread-208382] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:35:15.777 [DEBUG] [Thread-208382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:35:15.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:35:15.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:35:15.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:35:15.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:35:15.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:35:15.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:35:15.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:35:15.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:35:15.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:35:15.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.649053 -999.00  +21.70  17.86     29   +3.10 1 1 1 1 1   887    0 17.18 -51.50 ----- 16.9 17.9 166.0 27.0 25.6 -29.7 25.4 -27.8 27.0 -26.9 27.6 -30.1
2026-02-15T17:35:15.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:35:15.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:35:15.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.649053
2026-02-15T17:35:15.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:35:15.869 [DEBUG] [Thread-208382] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:35:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:35:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:35:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:35:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:35:15.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:34:30', tmtdew=21.61, humidity=23.75, cloud=0.0, wind=26.08, temperature=21.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:34:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:35:15.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:35:15.967 [DEBUG] [Thread-208385] [transport.py] [_log()] starting thread (client mode): 0xa2d55ab0
2026-02-15T17:35:15.967 [DEBUG] [Thread-208385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:35:15.986 [DEBUG] [Thread-208385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:35:15.986 [INFO] [Thread-208385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:35:15.994 [DEBUG] [Thread-208385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:35:15.994 [DEBUG] [Thread-208385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:35:15.994 [DEBUG] [Thread-208385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:35:15.994 [DEBUG] [Thread-208385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:15.994 [DEBUG] [Thread-208385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:15.994 [DEBUG] [Thread-208385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] client lang: <none>
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] server lang: <none>
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] kex follows: False
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] Compression: none
2026-02-15T17:35:15.995 [DEBUG] [Thread-208385] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:35:16.052 [DEBUG] [Thread-208385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:35:16.053 [DEBUG] [Thread-208385] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:35:16.054 [DEBUG] [Thread-208385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:35:16.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:35:16.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:35:16.110 [DEBUG] [Thread-208385] [transport.py] [_log()] userauth is OK
2026-02-15T17:35:16.110 [DEBUG] [Thread-208385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:35:16.110 [DEBUG] [Thread-208385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:35:16.110 [DEBUG] [Thread-208385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:35:16.110 [DEBUG] [Thread-208385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:35:16.128 [INFO] [Thread-208385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:35:16.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:35:16.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:35:16.560 [DEBUG] [Thread-208387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:16.961 [DEBUG] [Thread-208385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:35:16.961 [DEBUG] [Thread-208385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:35:17.009 [DEBUG] [Thread-208385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:35:17.010 [DEBUG] [Thread-208385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:35:17.018 [DEBUG] [Thread-208385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:35:17.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:35:17.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:35:17.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:35:17.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:35:17.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:35:17.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:35:17.055 [DEBUG] [Thread-208385] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:35:31.610 [DEBUG] [Thread-208388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:46.649 [DEBUG] [Thread-208389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:35:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:35:47.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:35:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:35:49.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 35, 5), 21.69, 23.65, 0.0, 23.27, 21.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:35:49.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:35:05
2026-02-15T17:35:49.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:35:49.654 [DEBUG] [Thread-208390] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-15T17:35:49.654 [DEBUG] [Thread-208390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:35:49.674 [DEBUG] [Thread-208390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:35:49.674 [INFO] [Thread-208390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] client lang: <none>
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] server lang: <none>
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] kex follows: False
2026-02-15T17:35:49.677 [DEBUG] [Thread-208390] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:35:49.678 [DEBUG] [Thread-208390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:35:49.678 [DEBUG] [Thread-208390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:35:49.678 [DEBUG] [Thread-208390] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:35:49.678 [DEBUG] [Thread-208390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:35:49.678 [DEBUG] [Thread-208390] [transport.py] [_log()] Compression: none
2026-02-15T17:35:49.678 [DEBUG] [Thread-208390] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:35:49.696 [DEBUG] [Thread-208390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:35:49.696 [DEBUG] [Thread-208390] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:35:49.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:35:49.697 [DEBUG] [Thread-208390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:35:49.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:35:49.699 [DEBUG] [Thread-208390] [transport.py] [_log()] userauth is OK
2026-02-15T17:35:49.700 [DEBUG] [Thread-208390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:35:49.700 [DEBUG] [Thread-208390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:35:49.700 [DEBUG] [Thread-208390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:35:49.700 [DEBUG] [Thread-208390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:35:49.724 [INFO] [Thread-208390] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:35:49.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:35:50.318 [DEBUG] [Thread-208390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:35:50.318 [DEBUG] [Thread-208390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:35:50.319 [DEBUG] [Thread-208390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:35:50.359 [DEBUG] [Thread-208390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:35:50.360 [DEBUG] [Thread-208390] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:35:50.363 [DEBUG] [Thread-208390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:35:50.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:35:50.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:35:50.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:35:50.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:35:50.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:35:50.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:35:50.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:35:50.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:35:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:35:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.649400 -999.00  +21.60  20.14     29   +3.10 1 1 1 1 1   887    0 17.17 -49.70 ----- 20.3 20.1 165.3 23.8 25.6 -28.9 25.5 -27.9 27.1 -27.1 27.6 -28.8
2026-02-15T17:35:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:35:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:35:50.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.649400
2026-02-15T17:35:50.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:35:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:35:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:35:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:35:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:35:50.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:35:05', tmtdew=21.69, humidity=23.65, cloud=0.0, wind=23.27, temperature=21.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:35:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:35:50.389 [DEBUG] [Thread-208390] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:35:50.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:35:50.485 [DEBUG] [Thread-208393] [transport.py] [_log()] starting thread (client mode): 0xa5759f60
2026-02-15T17:35:50.485 [DEBUG] [Thread-208393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:35:50.499 [DEBUG] [Thread-208393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:35:50.499 [INFO] [Thread-208393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:35:50.507 [DEBUG] [Thread-208393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:35:50.507 [DEBUG] [Thread-208393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:35:50.507 [DEBUG] [Thread-208393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] client lang: <none>
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] server lang: <none>
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] kex follows: False
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] Compression: none
2026-02-15T17:35:50.508 [DEBUG] [Thread-208393] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:35:50.565 [DEBUG] [Thread-208393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:35:50.566 [DEBUG] [Thread-208393] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:35:50.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:35:50.567 [DEBUG] [Thread-208393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:35:50.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:35:50.622 [DEBUG] [Thread-208393] [transport.py] [_log()] userauth is OK
2026-02-15T17:35:50.623 [DEBUG] [Thread-208393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:35:50.623 [DEBUG] [Thread-208393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:35:50.623 [DEBUG] [Thread-208393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:35:50.623 [DEBUG] [Thread-208393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:35:50.642 [INFO] [Thread-208393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:35:50.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:35:50.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:35:51.545 [DEBUG] [Thread-208393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:35:51.546 [DEBUG] [Thread-208393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:35:51.593 [DEBUG] [Thread-208393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:35:51.593 [DEBUG] [Thread-208393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:35:51.606 [DEBUG] [Thread-208393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:35:51.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:35:51.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:35:51.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:35:51.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:35:51.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:35:51.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:35:51.643 [DEBUG] [Thread-208393] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:36:00.070 [DEBUG] [Thread-208395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:01.688 [DEBUG] [Thread-208396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:08.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:08.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:16.737 [DEBUG] [Thread-208397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:21.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:36:21.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:36:21.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:36:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 35, 41), 23.28, 21.42, 0.0, 26.0, 23.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:36:23.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:35:41
2026-02-15T17:36:24.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:36:24.178 [DEBUG] [Thread-208398] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-15T17:36:24.178 [DEBUG] [Thread-208398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:36:24.199 [DEBUG] [Thread-208398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:36:24.199 [INFO] [Thread-208398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:36:24.202 [DEBUG] [Thread-208398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:36:24.202 [DEBUG] [Thread-208398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:36:24.202 [DEBUG] [Thread-208398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:36:24.202 [DEBUG] [Thread-208398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] client lang: <none>
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] server lang: <none>
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] kex follows: False
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:36:24.203 [DEBUG] [Thread-208398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:36:24.204 [DEBUG] [Thread-208398] [transport.py] [_log()] Compression: none
2026-02-15T17:36:24.204 [DEBUG] [Thread-208398] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:36:24.224 [DEBUG] [Thread-208398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:36:24.224 [DEBUG] [Thread-208398] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:36:24.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:36:24.226 [DEBUG] [Thread-208398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:36:24.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:36:24.227 [DEBUG] [Thread-208398] [transport.py] [_log()] userauth is OK
2026-02-15T17:36:24.228 [DEBUG] [Thread-208398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:36:24.228 [DEBUG] [Thread-208398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:36:24.228 [DEBUG] [Thread-208398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:36:24.228 [DEBUG] [Thread-208398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:36:24.264 [INFO] [Thread-208398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:36:24.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:36:24.916 [DEBUG] [Thread-208398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:36:24.916 [DEBUG] [Thread-208398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:36:24.917 [DEBUG] [Thread-208398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:36:24.957 [DEBUG] [Thread-208398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:36:24.957 [DEBUG] [Thread-208398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:36:24.960 [DEBUG] [Thread-208398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:36:24.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:36:24.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:36:24.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:36:24.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:36:24.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:36:24.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:36:24.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:36:24.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:36:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:36:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.649748 -999.00  +21.50  18.51     29   +3.10 1 1 1 1 1   887    0 17.10 -53.54 ----- 23.6 18.5 166.8 27.6 25.6 -29.7 25.4 -28.4 26.9 -27.2 27.5 -29.2
2026-02-15T17:36:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:36:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:36:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.649748
2026-02-15T17:36:24.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:36:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:36:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:36:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:36:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:36:24.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:35:41', tmtdew=23.28, humidity=21.42, cloud=0.0, wind=26.0, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:35:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:36:24.988 [DEBUG] [Thread-208398] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:36:25.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:36:25.081 [DEBUG] [Thread-208401] [transport.py] [_log()] starting thread (client mode): 0xa575ad10
2026-02-15T17:36:25.081 [DEBUG] [Thread-208401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:36:25.095 [DEBUG] [Thread-208401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:36:25.095 [INFO] [Thread-208401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] client lang: <none>
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] server lang: <none>
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] kex follows: False
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:36:25.103 [DEBUG] [Thread-208401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:36:25.104 [DEBUG] [Thread-208401] [transport.py] [_log()] Compression: none
2026-02-15T17:36:25.104 [DEBUG] [Thread-208401] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:36:25.160 [DEBUG] [Thread-208401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:36:25.160 [DEBUG] [Thread-208401] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:36:25.161 [DEBUG] [Thread-208401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:36:25.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:36:25.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:36:25.216 [DEBUG] [Thread-208401] [transport.py] [_log()] userauth is OK
2026-02-15T17:36:25.217 [DEBUG] [Thread-208401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:36:25.217 [DEBUG] [Thread-208401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:36:25.217 [DEBUG] [Thread-208401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:36:25.217 [DEBUG] [Thread-208401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:36:25.235 [INFO] [Thread-208401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:36:25.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:36:25.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:36:26.082 [DEBUG] [Thread-208401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:36:26.083 [DEBUG] [Thread-208401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:36:26.130 [DEBUG] [Thread-208401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:36:26.130 [DEBUG] [Thread-208401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:36:26.143 [DEBUG] [Thread-208401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:36:26.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:36:26.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:36:26.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:36:26.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:36:26.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:36:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:36:26.187 [DEBUG] [Thread-208401] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:36:31.773 [DEBUG] [Thread-208403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:46.827 [DEBUG] [Thread-208404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:36:56.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:36:56.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:36:56.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:36:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 36, 16), 21.81, 23.37, 0.0, 19.37, 21.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:36:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:36:16
2026-02-15T17:36:58.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:36:59.121 [DEBUG] [Thread-208405] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ea0
2026-02-15T17:36:59.121 [DEBUG] [Thread-208405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:36:59.139 [DEBUG] [Thread-208405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:36:59.139 [INFO] [Thread-208405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] client lang: <none>
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] server lang: <none>
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] kex follows: False
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:36:59.140 [DEBUG] [Thread-208405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:36:59.141 [DEBUG] [Thread-208405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:36:59.141 [DEBUG] [Thread-208405] [transport.py] [_log()] Compression: none
2026-02-15T17:36:59.141 [DEBUG] [Thread-208405] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:36:59.155 [DEBUG] [Thread-208405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:36:59.165 [DEBUG] [Thread-208405] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:36:59.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:36:59.166 [DEBUG] [Thread-208405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:36:59.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:36:59.168 [DEBUG] [Thread-208405] [transport.py] [_log()] userauth is OK
2026-02-15T17:36:59.169 [DEBUG] [Thread-208405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:36:59.169 [DEBUG] [Thread-208405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:36:59.169 [DEBUG] [Thread-208405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:36:59.169 [DEBUG] [Thread-208405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:36:59.193 [INFO] [Thread-208405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:36:59.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:36:59.907 [DEBUG] [Thread-208405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:36:59.908 [DEBUG] [Thread-208405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:36:59.908 [DEBUG] [Thread-208405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:36:59.948 [DEBUG] [Thread-208405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:36:59.949 [DEBUG] [Thread-208405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:36:59.952 [DEBUG] [Thread-208405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:36:59.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:36:59.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:36:59.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:36:59.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:36:59.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:36:59.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:36:59.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:36:59.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:36:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:36:59.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.650095 -999.00  +21.50  20.93     30   +3.10 1 1 1 1 1   887    0 17.26 -52.95 ----- 19.6 20.9 173.0 28.2 25.4 -29.5 25.4 -28.0 26.9 -27.5 27.5 -29.4
2026-02-15T17:36:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:36:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:36:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.650095
2026-02-15T17:36:59.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:36:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:36:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:36:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:36:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:36:59.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:36:16', tmtdew=21.81, humidity=23.37, cloud=0.0, wind=19.37, temperature=21.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:36:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:36:59.975 [DEBUG] [Thread-208405] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:37:00.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:37:00.069 [DEBUG] [Thread-208408] [transport.py] [_log()] starting thread (client mode): 0xa2dc0ca0
2026-02-15T17:37:00.069 [DEBUG] [Thread-208408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:37:00.084 [DEBUG] [Thread-208408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:37:00.084 [INFO] [Thread-208408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:37:00.091 [DEBUG] [Thread-208408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:37:00.091 [DEBUG] [Thread-208408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] client lang: <none>
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] server lang: <none>
2026-02-15T17:37:00.092 [DEBUG] [Thread-208408] [transport.py] [_log()] kex follows: False
2026-02-15T17:37:00.093 [DEBUG] [Thread-208408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:37:00.093 [DEBUG] [Thread-208408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:37:00.093 [DEBUG] [Thread-208408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:37:00.093 [DEBUG] [Thread-208408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:37:00.093 [DEBUG] [Thread-208408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:37:00.094 [DEBUG] [Thread-208408] [transport.py] [_log()] Compression: none
2026-02-15T17:37:00.094 [DEBUG] [Thread-208408] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:37:00.116 [DEBUG] [Thread-208410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:37:00.147 [DEBUG] [Thread-208408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:37:00.148 [DEBUG] [Thread-208408] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:37:00.148 [DEBUG] [Thread-208408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:37:00.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:37:00.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:37:00.205 [DEBUG] [Thread-208408] [transport.py] [_log()] userauth is OK
2026-02-15T17:37:00.205 [DEBUG] [Thread-208408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:37:00.205 [DEBUG] [Thread-208408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:37:00.205 [DEBUG] [Thread-208408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:37:00.205 [DEBUG] [Thread-208408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:37:00.224 [INFO] [Thread-208408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:37:00.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:37:00.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:37:01.051 [DEBUG] [Thread-208408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:37:01.052 [DEBUG] [Thread-208408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:37:01.099 [DEBUG] [Thread-208408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:37:01.099 [DEBUG] [Thread-208408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:37:01.109 [DEBUG] [Thread-208408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:37:01.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:37:01.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:37:01.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:37:01.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:37:01.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:37:01.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:37:01.146 [DEBUG] [Thread-208408] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:37:01.860 [DEBUG] [Thread-208411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:37:08.887 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:37:08.888 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:37:16.904 [DEBUG] [Thread-208412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:37:31.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:37:31.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:37:31.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:37:31.941 [DEBUG] [Thread-208413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:37:33.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 36, 52), 21.75, 23.56, 0.0, 27.08, 21.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:37:33.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:36:52
2026-02-15T17:37:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:37:33.858 [DEBUG] [Thread-208414] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d90
2026-02-15T17:37:33.858 [DEBUG] [Thread-208414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:37:33.868 [DEBUG] [Thread-208414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:37:33.868 [INFO] [Thread-208414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:37:33.869 [DEBUG] [Thread-208414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] client lang: <none>
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] server lang: <none>
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] kex follows: False
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] Compression: none
2026-02-15T17:37:33.870 [DEBUG] [Thread-208414] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:37:33.877 [DEBUG] [Thread-208414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:37:33.877 [DEBUG] [Thread-208414] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:37:33.877 [DEBUG] [Thread-208414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:37:33.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:37:33.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:37:33.878 [DEBUG] [Thread-208414] [transport.py] [_log()] userauth is OK
2026-02-15T17:37:33.878 [DEBUG] [Thread-208414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:37:33.878 [DEBUG] [Thread-208414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:37:33.878 [DEBUG] [Thread-208414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:37:33.878 [DEBUG] [Thread-208414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:37:33.887 [INFO] [Thread-208414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:37:33.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:37:34.498 [DEBUG] [Thread-208414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:37:34.499 [DEBUG] [Thread-208414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:37:34.499 [DEBUG] [Thread-208414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:37:34.539 [DEBUG] [Thread-208414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:37:34.540 [DEBUG] [Thread-208414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:37:34.543 [DEBUG] [Thread-208414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:37:34.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:37:34.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:37:34.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:37:34.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:37:34.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:37:34.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:37:34.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:37:34.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:37:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:37:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.650789 -999.00  +21.60  16.32     29   +3.20 1 1 1 1 1   887    0 16.86 -57.72 ----- 15.5 16.3 150.6 23.4 25.4 -28.7 25.0 -28.7 26.7 -27.0 27.4 -29.0
2026-02-15T17:37:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:37:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:37:34.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.650789
2026-02-15T17:37:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:37:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:37:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:37:34.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:37:34.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:37:34.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:36:52', tmtdew=21.75, humidity=23.56, cloud=0.0, wind=27.08, temperature=21.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:37:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:37:34.562 [DEBUG] [Thread-208414] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:37:34.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:37:34.657 [DEBUG] [Thread-208417] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T17:37:34.657 [DEBUG] [Thread-208417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:37:34.672 [DEBUG] [Thread-208417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:37:34.672 [INFO] [Thread-208417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:37:34.680 [DEBUG] [Thread-208417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:37:34.680 [DEBUG] [Thread-208417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:37:34.680 [DEBUG] [Thread-208417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:37:34.680 [DEBUG] [Thread-208417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:37:34.680 [DEBUG] [Thread-208417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] client lang: <none>
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] server lang: <none>
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] kex follows: False
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:37:34.681 [DEBUG] [Thread-208417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:37:34.682 [DEBUG] [Thread-208417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:37:34.682 [DEBUG] [Thread-208417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:37:34.682 [DEBUG] [Thread-208417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:37:34.682 [DEBUG] [Thread-208417] [transport.py] [_log()] Compression: none
2026-02-15T17:37:34.682 [DEBUG] [Thread-208417] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:37:34.737 [DEBUG] [Thread-208417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:37:34.738 [DEBUG] [Thread-208417] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:37:34.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:37:34.739 [DEBUG] [Thread-208417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:37:34.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:37:34.793 [DEBUG] [Thread-208417] [transport.py] [_log()] userauth is OK
2026-02-15T17:37:34.793 [DEBUG] [Thread-208417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:37:34.793 [DEBUG] [Thread-208417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:37:34.793 [DEBUG] [Thread-208417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:37:34.793 [DEBUG] [Thread-208417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:37:34.818 [INFO] [Thread-208417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:37:34.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:37:34.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:37:35.696 [DEBUG] [Thread-208417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:37:35.696 [DEBUG] [Thread-208417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:37:35.749 [DEBUG] [Thread-208417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:37:35.749 [DEBUG] [Thread-208417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:37:35.763 [DEBUG] [Thread-208417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:37:35.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:37:35.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:37:35.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:37:35.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:37:35.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:37:35.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:37:35.809 [DEBUG] [Thread-208417] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:37:46.978 [DEBUG] [Thread-208419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:00.149 [DEBUG] [Thread-208420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:02.029 [DEBUG] [Thread-208421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:05.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:38:05.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:38:05.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:38:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 37, 28), 21.51, 23.87, 0.0, 24.3, 21.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:38:08.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:37:28
2026-02-15T17:38:08.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:38:08.575 [DEBUG] [Thread-208422] [transport.py] [_log()] starting thread (client mode): 0xa575a8f0
2026-02-15T17:38:08.576 [DEBUG] [Thread-208422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:38:08.594 [DEBUG] [Thread-208422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:38:08.594 [INFO] [Thread-208422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] client lang: <none>
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] server lang: <none>
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] kex follows: False
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:38:08.596 [DEBUG] [Thread-208422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:38:08.597 [DEBUG] [Thread-208422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:38:08.597 [DEBUG] [Thread-208422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:38:08.597 [DEBUG] [Thread-208422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:38:08.597 [DEBUG] [Thread-208422] [transport.py] [_log()] Compression: none
2026-02-15T17:38:08.597 [DEBUG] [Thread-208422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:38:08.607 [DEBUG] [Thread-208422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:38:08.607 [DEBUG] [Thread-208422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:38:08.608 [DEBUG] [Thread-208422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:38:08.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:38:08.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:38:08.610 [DEBUG] [Thread-208422] [transport.py] [_log()] userauth is OK
2026-02-15T17:38:08.610 [DEBUG] [Thread-208422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:38:08.610 [DEBUG] [Thread-208422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:38:08.610 [DEBUG] [Thread-208422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:38:08.610 [DEBUG] [Thread-208422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:38:08.628 [INFO] [Thread-208422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:38:08.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:38:09.029 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:09.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:09.274 [DEBUG] [Thread-208422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:38:09.274 [DEBUG] [Thread-208422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:38:09.275 [DEBUG] [Thread-208422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:38:09.315 [DEBUG] [Thread-208422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:38:09.316 [DEBUG] [Thread-208422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:38:09.319 [DEBUG] [Thread-208422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:38:09.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:38:09.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:38:09.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:38:09.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:38:09.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:38:09.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:38:09.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:38:09.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:38:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:38:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.651137 -999.00  +21.70  14.96     29   +3.20 1 1 1 1 1   887    0 17.01 -61.41 ----- 19.9 15.0 159.8 25.3 25.5 -29.1 25.3 -27.2 26.9 -26.4 27.4 -29.4
2026-02-15T17:38:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:38:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:38:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.651137
2026-02-15T17:38:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:38:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:38:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:38:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:38:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:38:09.348 [DEBUG] [Thread-208422] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:38:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:37:28', tmtdew=21.51, humidity=23.87, cloud=0.0, wind=24.3, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:37:38.237', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:38:09.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:38:09.454 [DEBUG] [Thread-208425] [transport.py] [_log()] starting thread (client mode): 0xa5741240
2026-02-15T17:38:09.454 [DEBUG] [Thread-208425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:38:09.469 [DEBUG] [Thread-208425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:38:09.470 [INFO] [Thread-208425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:38:09.477 [DEBUG] [Thread-208425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:38:09.478 [DEBUG] [Thread-208425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:38:09.478 [DEBUG] [Thread-208425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:38:09.478 [DEBUG] [Thread-208425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:09.478 [DEBUG] [Thread-208425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:09.478 [DEBUG] [Thread-208425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:09.478 [DEBUG] [Thread-208425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] client lang: <none>
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] server lang: <none>
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] kex follows: False
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:38:09.479 [DEBUG] [Thread-208425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:38:09.480 [DEBUG] [Thread-208425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:38:09.480 [DEBUG] [Thread-208425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:38:09.480 [DEBUG] [Thread-208425] [transport.py] [_log()] Compression: none
2026-02-15T17:38:09.480 [DEBUG] [Thread-208425] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:38:09.537 [DEBUG] [Thread-208425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:38:09.537 [DEBUG] [Thread-208425] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:38:09.538 [DEBUG] [Thread-208425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:38:09.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:38:09.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:38:09.593 [DEBUG] [Thread-208425] [transport.py] [_log()] userauth is OK
2026-02-15T17:38:09.593 [DEBUG] [Thread-208425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:38:09.593 [DEBUG] [Thread-208425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:38:09.593 [DEBUG] [Thread-208425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:38:09.593 [DEBUG] [Thread-208425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:38:09.618 [INFO] [Thread-208425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:38:09.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:38:09.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:38:10.451 [DEBUG] [Thread-208425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:38:10.451 [DEBUG] [Thread-208425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:38:10.499 [DEBUG] [Thread-208425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:38:10.499 [DEBUG] [Thread-208425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:38:10.509 [DEBUG] [Thread-208425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:38:10.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:38:10.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:38:10.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:38:10.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:38:10.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:38:10.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:38:10.546 [DEBUG] [Thread-208425] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:38:17.063 [DEBUG] [Thread-208427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:32.110 [DEBUG] [Thread-208428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:38:40.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:38:40.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:38:40.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:38:42.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 38, 3), 21.51, 23.89, 0.0, 24.72, 21.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:38:42.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:38:03
2026-02-15T17:38:43.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:38:43.539 [DEBUG] [Thread-208429] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3b0
2026-02-15T17:38:43.539 [DEBUG] [Thread-208429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:38:43.559 [DEBUG] [Thread-208429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:38:43.559 [INFO] [Thread-208429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:38:43.562 [DEBUG] [Thread-208429] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:38:43.562 [DEBUG] [Thread-208429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:38:43.562 [DEBUG] [Thread-208429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:38:43.562 [DEBUG] [Thread-208429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:43.562 [DEBUG] [Thread-208429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:43.562 [DEBUG] [Thread-208429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] client lang: <none>
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] server lang: <none>
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] kex follows: False
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] Compression: none
2026-02-15T17:38:43.563 [DEBUG] [Thread-208429] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:38:43.582 [DEBUG] [Thread-208429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:38:43.583 [DEBUG] [Thread-208429] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:38:43.584 [DEBUG] [Thread-208429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:38:43.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:38:43.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:38:43.586 [DEBUG] [Thread-208429] [transport.py] [_log()] userauth is OK
2026-02-15T17:38:43.586 [DEBUG] [Thread-208429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:38:43.586 [DEBUG] [Thread-208429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:38:43.586 [DEBUG] [Thread-208429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:38:43.586 [DEBUG] [Thread-208429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:38:43.611 [INFO] [Thread-208429] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:38:43.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:38:44.204 [DEBUG] [Thread-208429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:38:44.204 [DEBUG] [Thread-208429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:38:44.205 [DEBUG] [Thread-208429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:38:44.245 [DEBUG] [Thread-208429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:38:44.246 [DEBUG] [Thread-208429] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:38:44.249 [DEBUG] [Thread-208429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:38:44.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:38:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:38:44.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:38:44.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:38:44.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:38:44.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:38:44.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:38:44.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:38:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:38:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.651484 -999.00  +21.60  16.26     30   +3.30 1 1 1 1 1   887    0 17.33 -63.45 ----- 15.0 16.3 149.8 28.7 25.4 -29.4 25.3 -28.1 26.9 -27.1 27.4 -29.1
2026-02-15T17:38:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:38:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:38:44.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.651484
2026-02-15T17:38:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:38:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:38:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:38:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:38:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:38:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:38:03', tmtdew=21.51, humidity=23.89, cloud=0.0, wind=24.72, temperature=21.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:38:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:38:44.278 [DEBUG] [Thread-208429] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:38:44.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:38:44.374 [DEBUG] [Thread-208432] [transport.py] [_log()] starting thread (client mode): 0xa57436a0
2026-02-15T17:38:44.374 [DEBUG] [Thread-208432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:38:44.389 [DEBUG] [Thread-208432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:38:44.389 [INFO] [Thread-208432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:38:44.397 [DEBUG] [Thread-208432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:38:44.397 [DEBUG] [Thread-208432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] client lang: <none>
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] server lang: <none>
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] kex follows: False
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:38:44.398 [DEBUG] [Thread-208432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:38:44.399 [DEBUG] [Thread-208432] [transport.py] [_log()] Compression: none
2026-02-15T17:38:44.399 [DEBUG] [Thread-208432] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:38:44.459 [DEBUG] [Thread-208432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:38:44.460 [DEBUG] [Thread-208432] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:38:44.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:38:44.461 [DEBUG] [Thread-208432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:38:44.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:38:44.520 [DEBUG] [Thread-208432] [transport.py] [_log()] userauth is OK
2026-02-15T17:38:44.520 [DEBUG] [Thread-208432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:38:44.520 [DEBUG] [Thread-208432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:38:44.520 [DEBUG] [Thread-208432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:38:44.520 [DEBUG] [Thread-208432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:38:44.539 [INFO] [Thread-208432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:38:44.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:38:44.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:38:45.369 [DEBUG] [Thread-208432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:38:45.369 [DEBUG] [Thread-208432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:38:45.416 [DEBUG] [Thread-208432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:38:45.417 [DEBUG] [Thread-208432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:38:45.426 [DEBUG] [Thread-208432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:38:45.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:38:45.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:38:45.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:38:45.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:38:45.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:38:45.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:38:45.467 [DEBUG] [Thread-208432] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:38:47.147 [DEBUG] [Thread-208434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:00.193 [DEBUG] [Thread-208435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:02.202 [DEBUG] [Thread-208436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:09.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:09.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:15.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:39:15.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:39:15.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:39:17.240 [DEBUG] [Thread-208437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:17.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 38, 39), 22.35, 22.74, 0.0, 23.82, 22.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:39:17.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:38:39
2026-02-15T17:39:17.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:39:18.054 [DEBUG] [Thread-208438] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T17:39:18.055 [DEBUG] [Thread-208438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:39:18.073 [DEBUG] [Thread-208438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:39:18.073 [INFO] [Thread-208438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:39:18.076 [DEBUG] [Thread-208438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:39:18.076 [DEBUG] [Thread-208438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:39:18.076 [DEBUG] [Thread-208438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:39:18.076 [DEBUG] [Thread-208438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:18.076 [DEBUG] [Thread-208438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:18.076 [DEBUG] [Thread-208438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] client lang: <none>
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] server lang: <none>
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] kex follows: False
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] Compression: none
2026-02-15T17:39:18.077 [DEBUG] [Thread-208438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:39:18.095 [DEBUG] [Thread-208438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:39:18.095 [DEBUG] [Thread-208438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:39:18.096 [DEBUG] [Thread-208438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:39:18.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:39:18.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:39:18.097 [DEBUG] [Thread-208438] [transport.py] [_log()] userauth is OK
2026-02-15T17:39:18.098 [DEBUG] [Thread-208438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:39:18.098 [DEBUG] [Thread-208438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:39:18.098 [DEBUG] [Thread-208438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:39:18.098 [DEBUG] [Thread-208438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:39:18.122 [INFO] [Thread-208438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:39:18.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:39:18.786 [DEBUG] [Thread-208438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:39:18.786 [DEBUG] [Thread-208438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:39:18.786 [DEBUG] [Thread-208438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:39:18.827 [DEBUG] [Thread-208438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:39:18.827 [DEBUG] [Thread-208438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:39:18.829 [DEBUG] [Thread-208438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:39:18.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:39:18.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:39:18.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:39:18.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:39:18.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:39:18.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:39:18.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:39:18.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:39:18.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:39:18.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.651831 -999.00  +21.60  20.43     29   +3.20 1 1 1 1 1   887    0 16.49 -73.23 ----- 17.2 20.4 174.1 26.9 25.4 -29.5 25.2 -27.8 26.8 -27.7 27.4 -29.5
2026-02-15T17:39:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:39:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:39:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.651831
2026-02-15T17:39:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:39:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:39:18.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:39:18.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:39:18.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:39:18.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:38:39', tmtdew=22.35, humidity=22.74, cloud=0.0, wind=23.82, temperature=22.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:38:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:39:18.852 [DEBUG] [Thread-208438] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:39:18.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:39:18.943 [DEBUG] [Thread-208441] [transport.py] [_log()] starting thread (client mode): 0xa575ac80
2026-02-15T17:39:18.944 [DEBUG] [Thread-208441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:39:18.959 [DEBUG] [Thread-208441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:39:18.959 [INFO] [Thread-208441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:39:18.970 [DEBUG] [Thread-208441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:39:18.970 [DEBUG] [Thread-208441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:39:18.970 [DEBUG] [Thread-208441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:39:18.970 [DEBUG] [Thread-208441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:18.970 [DEBUG] [Thread-208441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:18.970 [DEBUG] [Thread-208441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] client lang: <none>
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] server lang: <none>
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] kex follows: False
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] Compression: none
2026-02-15T17:39:18.971 [DEBUG] [Thread-208441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:39:19.028 [DEBUG] [Thread-208441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:39:19.029 [DEBUG] [Thread-208441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:39:19.030 [DEBUG] [Thread-208441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:39:19.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:39:19.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:39:19.085 [DEBUG] [Thread-208441] [transport.py] [_log()] userauth is OK
2026-02-15T17:39:19.085 [DEBUG] [Thread-208441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:39:19.085 [DEBUG] [Thread-208441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:39:19.085 [DEBUG] [Thread-208441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:39:19.085 [DEBUG] [Thread-208441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:39:19.104 [INFO] [Thread-208441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:39:19.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:39:19.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:39:19.949 [DEBUG] [Thread-208441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:39:19.950 [DEBUG] [Thread-208441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:39:19.997 [DEBUG] [Thread-208441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:39:19.997 [DEBUG] [Thread-208441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:39:20.011 [DEBUG] [Thread-208441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:39:20.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:39:20.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:39:20.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:39:20.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:39:20.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:39:20.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:39:20.052 [DEBUG] [Thread-208441] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:39:32.275 [DEBUG] [Thread-208443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:47.328 [DEBUG] [Thread-208444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:39:50.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:39:50.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:39:50.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:39:51.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 39, 15), 21.39, 24.35, 0.0, 27.67, 21.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:39:51.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:39:15
2026-02-15T17:39:52.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:39:52.445 [DEBUG] [Thread-208445] [transport.py] [_log()] starting thread (client mode): 0xa5740fd0
2026-02-15T17:39:52.445 [DEBUG] [Thread-208445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:39:52.465 [DEBUG] [Thread-208445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:39:52.465 [INFO] [Thread-208445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] client lang: <none>
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] server lang: <none>
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] kex follows: False
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:39:52.468 [DEBUG] [Thread-208445] [transport.py] [_log()] Compression: none
2026-02-15T17:39:52.469 [DEBUG] [Thread-208445] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:39:52.482 [DEBUG] [Thread-208445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:39:52.483 [DEBUG] [Thread-208445] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:39:52.483 [DEBUG] [Thread-208445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:39:52.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:39:52.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:39:52.484 [DEBUG] [Thread-208445] [transport.py] [_log()] userauth is OK
2026-02-15T17:39:52.484 [DEBUG] [Thread-208445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:39:52.484 [DEBUG] [Thread-208445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:39:52.484 [DEBUG] [Thread-208445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:39:52.484 [DEBUG] [Thread-208445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:39:52.497 [INFO] [Thread-208445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:39:52.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:39:53.182 [DEBUG] [Thread-208445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:39:53.182 [DEBUG] [Thread-208445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:39:53.183 [DEBUG] [Thread-208445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:39:53.224 [DEBUG] [Thread-208445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:39:53.224 [DEBUG] [Thread-208445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:39:53.227 [DEBUG] [Thread-208445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:39:53.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:39:53.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:39:53.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:39:53.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:39:53.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:39:53.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:39:53.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:39:53.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:39:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:39:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.652525 -999.00  +21.50  19.72     30   +3.30 1 1 1 1 1   887    0 16.23 -71.77 ----- 25.1 19.7 147.5 25.8 25.3 -28.7 25.1 -29.2 26.7 -26.8 27.3 -28.5
2026-02-15T17:39:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:39:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:39:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.652525
2026-02-15T17:39:53.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:39:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:39:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:39:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:39:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:39:53.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:39:15', tmtdew=21.39, humidity=24.35, cloud=0.0, wind=27.67, temperature=21.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:39:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:39:53.253 [DEBUG] [Thread-208445] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:39:53.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:39:53.351 [DEBUG] [Thread-208448] [transport.py] [_log()] starting thread (client mode): 0xa2d7a320
2026-02-15T17:39:53.351 [DEBUG] [Thread-208448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:39:53.365 [DEBUG] [Thread-208448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:39:53.365 [INFO] [Thread-208448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] client lang: <none>
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] server lang: <none>
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] kex follows: False
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:39:53.373 [DEBUG] [Thread-208448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:39:53.374 [DEBUG] [Thread-208448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:39:53.374 [DEBUG] [Thread-208448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:39:53.374 [DEBUG] [Thread-208448] [transport.py] [_log()] Compression: none
2026-02-15T17:39:53.374 [DEBUG] [Thread-208448] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:39:53.433 [DEBUG] [Thread-208448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:39:53.433 [DEBUG] [Thread-208448] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:39:53.434 [DEBUG] [Thread-208448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:39:53.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:39:53.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:39:53.489 [DEBUG] [Thread-208448] [transport.py] [_log()] userauth is OK
2026-02-15T17:39:53.490 [DEBUG] [Thread-208448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:39:53.490 [DEBUG] [Thread-208448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:39:53.490 [DEBUG] [Thread-208448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:39:53.490 [DEBUG] [Thread-208448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:39:53.512 [INFO] [Thread-208448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:39:53.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:39:53.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:39:54.327 [DEBUG] [Thread-208448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:39:54.327 [DEBUG] [Thread-208448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:39:54.374 [DEBUG] [Thread-208448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:39:54.374 [DEBUG] [Thread-208448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:39:54.383 [DEBUG] [Thread-208448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:39:54.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:39:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:39:54.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:39:54.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:39:54.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:39:54.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:39:54.418 [DEBUG] [Thread-208448] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:40:00.226 [DEBUG] [Thread-208450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:02.369 [DEBUG] [Thread-208451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:09.315 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:09.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:17.425 [DEBUG] [Thread-208452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:24.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:40:24.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:40:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:40:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 39, 50), 21.08, 24.57, 0.0, 31.3, 21.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:40:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:39:50
2026-02-15T17:40:26.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:40:26.870 [DEBUG] [Thread-208453] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-15T17:40:26.870 [DEBUG] [Thread-208453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:40:26.889 [DEBUG] [Thread-208453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:40:26.889 [INFO] [Thread-208453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] client lang: <none>
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] server lang: <none>
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] kex follows: False
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:40:26.892 [DEBUG] [Thread-208453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:40:26.893 [DEBUG] [Thread-208453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:40:26.893 [DEBUG] [Thread-208453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:40:26.893 [DEBUG] [Thread-208453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:40:26.893 [DEBUG] [Thread-208453] [transport.py] [_log()] Compression: none
2026-02-15T17:40:26.893 [DEBUG] [Thread-208453] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:40:26.909 [DEBUG] [Thread-208453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:40:26.910 [DEBUG] [Thread-208453] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:40:26.910 [DEBUG] [Thread-208453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:40:26.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:40:26.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:40:26.912 [DEBUG] [Thread-208453] [transport.py] [_log()] userauth is OK
2026-02-15T17:40:26.912 [DEBUG] [Thread-208453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:40:26.912 [DEBUG] [Thread-208453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:40:26.913 [DEBUG] [Thread-208453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:40:26.913 [DEBUG] [Thread-208453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:40:26.930 [INFO] [Thread-208453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:40:26.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:40:27.553 [DEBUG] [Thread-208453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:40:27.554 [DEBUG] [Thread-208453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:40:27.554 [DEBUG] [Thread-208453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:40:27.594 [DEBUG] [Thread-208453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:40:27.594 [DEBUG] [Thread-208453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:40:27.597 [DEBUG] [Thread-208453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:40:27.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:40:27.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:40:27.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:40:27.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:40:27.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:40:27.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:40:27.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:40:27.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:40:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:40:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.652872 -999.00  +21.40  24.77     30   +3.30 1 1 1 1 1   887    0 16.64 -71.92 ----- 20.9 24.8 147.0 29.2 25.2 -30.2 25.1 -28.9 26.7 -28.0 27.2 -29.8
2026-02-15T17:40:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:40:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:40:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.652872
2026-02-15T17:40:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:40:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:40:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:40:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:40:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:40:27.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:39:50', tmtdew=21.08, humidity=24.57, cloud=0.0, wind=31.3, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:40:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:40:27.622 [DEBUG] [Thread-208453] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:40:27.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:40:27.719 [DEBUG] [Thread-208456] [transport.py] [_log()] starting thread (client mode): 0xa2d7a0e0
2026-02-15T17:40:27.719 [DEBUG] [Thread-208456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:40:27.734 [DEBUG] [Thread-208456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:40:27.734 [INFO] [Thread-208456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:40:27.741 [DEBUG] [Thread-208456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:40:27.741 [DEBUG] [Thread-208456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] client lang: <none>
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] server lang: <none>
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] kex follows: False
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] Compression: none
2026-02-15T17:40:27.742 [DEBUG] [Thread-208456] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:40:27.800 [DEBUG] [Thread-208456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:40:27.800 [DEBUG] [Thread-208456] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:40:27.801 [DEBUG] [Thread-208456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:40:27.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:40:27.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:40:27.857 [DEBUG] [Thread-208456] [transport.py] [_log()] userauth is OK
2026-02-15T17:40:27.857 [DEBUG] [Thread-208456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:40:27.857 [DEBUG] [Thread-208456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:40:27.857 [DEBUG] [Thread-208456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:40:27.857 [DEBUG] [Thread-208456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:40:27.878 [INFO] [Thread-208456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:40:27.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:40:27.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:40:28.725 [DEBUG] [Thread-208456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:40:28.725 [DEBUG] [Thread-208456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:40:28.773 [DEBUG] [Thread-208456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:40:28.773 [DEBUG] [Thread-208456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:40:28.782 [DEBUG] [Thread-208456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:40:28.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:40:28.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:40:28.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:40:28.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:40:28.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:40:28.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:40:28.816 [DEBUG] [Thread-208456] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:40:32.457 [DEBUG] [Thread-208458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:47.509 [DEBUG] [Thread-208459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:40:58.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:40:58.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:40:58.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:41:00.261 [DEBUG] [Thread-208460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:41:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 40, 25), 20.93, 24.8, 0.0, 30.15, 21.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:41:00.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:40:25
2026-02-15T17:41:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:41:01.166 [DEBUG] [Thread-208461] [transport.py] [_log()] starting thread (client mode): 0xa2dc1f60
2026-02-15T17:41:01.167 [DEBUG] [Thread-208461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:41:01.186 [DEBUG] [Thread-208461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:41:01.186 [INFO] [Thread-208461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:41:01.189 [DEBUG] [Thread-208461] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] client lang: <none>
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] server lang: <none>
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] kex follows: False
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] Compression: none
2026-02-15T17:41:01.190 [DEBUG] [Thread-208461] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:41:01.210 [DEBUG] [Thread-208461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:41:01.211 [DEBUG] [Thread-208461] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:41:01.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:41:01.212 [DEBUG] [Thread-208461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:41:01.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:41:01.215 [DEBUG] [Thread-208461] [transport.py] [_log()] userauth is OK
2026-02-15T17:41:01.215 [DEBUG] [Thread-208461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:41:01.215 [DEBUG] [Thread-208461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:41:01.215 [DEBUG] [Thread-208461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:41:01.215 [DEBUG] [Thread-208461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:41:01.239 [INFO] [Thread-208461] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:41:01.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:41:01.893 [DEBUG] [Thread-208461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:41:01.894 [DEBUG] [Thread-208461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:41:01.894 [DEBUG] [Thread-208461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:41:01.935 [DEBUG] [Thread-208461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:41:01.935 [DEBUG] [Thread-208461] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:41:01.938 [DEBUG] [Thread-208461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:41:01.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:41:01.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:41:01.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:41:01.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:41:01.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:41:01.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:41:01.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:41:01.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:41:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:41:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.653220 -999.00  +21.30  20.43     30   +3.30 1 1 1 1 1   887    0 16.80 -69.32 ----- 20.8 20.4 154.6 28.1 25.2 -29.8 25.1 -28.3 26.6 -27.8 27.1 -29.3
2026-02-15T17:41:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:41:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:41:01.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.653220
2026-02-15T17:41:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:41:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:41:01.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:41:01.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:41:01.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:41:01.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:40:25', tmtdew=20.93, humidity=24.8, cloud=0.0, wind=30.15, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:40:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:41:01.966 [DEBUG] [Thread-208461] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:41:02.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:41:02.058 [DEBUG] [Thread-208464] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-15T17:41:02.058 [DEBUG] [Thread-208464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:41:02.073 [DEBUG] [Thread-208464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:41:02.073 [INFO] [Thread-208464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:41:02.084 [DEBUG] [Thread-208464] [transport.py] [_log()] client lang: <none>
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] server lang: <none>
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] kex follows: False
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] Compression: none
2026-02-15T17:41:02.085 [DEBUG] [Thread-208464] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:41:02.140 [DEBUG] [Thread-208464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:41:02.141 [DEBUG] [Thread-208464] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:41:02.142 [DEBUG] [Thread-208464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:41:02.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:41:02.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:41:02.197 [DEBUG] [Thread-208464] [transport.py] [_log()] userauth is OK
2026-02-15T17:41:02.197 [DEBUG] [Thread-208464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:41:02.197 [DEBUG] [Thread-208464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:41:02.197 [DEBUG] [Thread-208464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:41:02.197 [DEBUG] [Thread-208464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:41:02.220 [INFO] [Thread-208464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:41:02.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:41:02.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:41:02.548 [DEBUG] [Thread-208466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:41:03.056 [DEBUG] [Thread-208464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:41:03.057 [DEBUG] [Thread-208464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:41:03.104 [DEBUG] [Thread-208464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:41:03.104 [DEBUG] [Thread-208464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:41:03.112 [DEBUG] [Thread-208464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:41:03.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:41:03.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:41:03.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:41:03.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:41:03.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:41:03.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:41:03.149 [DEBUG] [Thread-208464] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:41:09.458 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:41:09.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:41:17.606 [DEBUG] [Thread-208467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:41:32.639 [DEBUG] [Thread-208468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:41:33.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:41:33.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:41:33.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:41:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 41, 1), 20.84, 24.92, 0.0, 30.08, 21.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:41:35.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:41:01
2026-02-15T17:41:35.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:41:35.496 [DEBUG] [Thread-208469] [transport.py] [_log()] starting thread (client mode): 0xa2d4ca30
2026-02-15T17:41:35.496 [DEBUG] [Thread-208469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:41:35.515 [DEBUG] [Thread-208469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:41:35.516 [INFO] [Thread-208469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] client lang: <none>
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] server lang: <none>
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] kex follows: False
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] Compression: none
2026-02-15T17:41:35.519 [DEBUG] [Thread-208469] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:41:35.528 [DEBUG] [Thread-208469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:41:35.529 [DEBUG] [Thread-208469] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:41:35.529 [DEBUG] [Thread-208469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:41:35.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:41:35.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:41:35.531 [DEBUG] [Thread-208469] [transport.py] [_log()] userauth is OK
2026-02-15T17:41:35.531 [DEBUG] [Thread-208469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:41:35.532 [DEBUG] [Thread-208469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:41:35.532 [DEBUG] [Thread-208469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:41:35.532 [DEBUG] [Thread-208469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:41:35.560 [INFO] [Thread-208469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:41:35.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:41:36.198 [DEBUG] [Thread-208469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:41:36.199 [DEBUG] [Thread-208469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:41:36.199 [DEBUG] [Thread-208469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:41:36.239 [DEBUG] [Thread-208469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:41:36.240 [DEBUG] [Thread-208469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:41:36.243 [DEBUG] [Thread-208469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:41:36.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:41:36.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:41:36.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:41:36.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:41:36.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:41:36.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:41:36.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:41:36.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:41:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:41:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.653567 -999.00  +21.20  19.74     30   +3.20 1 1 1 1 1   887    0 16.68 -62.97 ----- 18.3 19.7 163.0 24.3 25.1 -29.5 25.0 -28.1 26.6 -27.3 27.1 -29.2
2026-02-15T17:41:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:41:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:41:36.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.653567
2026-02-15T17:41:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:41:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:41:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:41:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:41:36.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:41:36.269 [DEBUG] [Thread-208469] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:41:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:41:01', tmtdew=20.84, humidity=24.92, cloud=0.0, wind=30.08, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:41:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:41:36.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:41:36.370 [DEBUG] [Thread-208472] [transport.py] [_log()] starting thread (client mode): 0xa57d7d90
2026-02-15T17:41:36.371 [DEBUG] [Thread-208472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:41:36.389 [DEBUG] [Thread-208472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:41:36.389 [INFO] [Thread-208472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:41:36.400 [DEBUG] [Thread-208472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] client lang: <none>
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] server lang: <none>
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] kex follows: False
2026-02-15T17:41:36.401 [DEBUG] [Thread-208472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:41:36.402 [DEBUG] [Thread-208472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:41:36.402 [DEBUG] [Thread-208472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:41:36.402 [DEBUG] [Thread-208472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:41:36.402 [DEBUG] [Thread-208472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:41:36.402 [DEBUG] [Thread-208472] [transport.py] [_log()] Compression: none
2026-02-15T17:41:36.402 [DEBUG] [Thread-208472] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:41:36.457 [DEBUG] [Thread-208472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:41:36.458 [DEBUG] [Thread-208472] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:41:36.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:41:36.459 [DEBUG] [Thread-208472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:41:36.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:41:36.518 [DEBUG] [Thread-208472] [transport.py] [_log()] userauth is OK
2026-02-15T17:41:36.518 [DEBUG] [Thread-208472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:41:36.518 [DEBUG] [Thread-208472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:41:36.519 [DEBUG] [Thread-208472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:41:36.519 [DEBUG] [Thread-208472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:41:36.537 [INFO] [Thread-208472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:41:36.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:41:36.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:41:37.359 [DEBUG] [Thread-208472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:41:37.359 [DEBUG] [Thread-208472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:41:37.408 [DEBUG] [Thread-208472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:41:37.408 [DEBUG] [Thread-208472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:41:37.418 [DEBUG] [Thread-208472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:41:37.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:41:37.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:41:37.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:41:37.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:41:37.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:41:37.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:41:37.454 [DEBUG] [Thread-208472] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:41:47.676 [DEBUG] [Thread-208474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:00.301 [DEBUG] [Thread-208475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:02.728 [DEBUG] [Thread-208476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:07.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:42:07.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:42:07.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:42:09.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 41, 36), 21.53, 23.87, 0.0, 30.06, 21.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:42:09.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:41:36
2026-02-15T17:42:09.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:09.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:09.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:42:09.895 [DEBUG] [Thread-208477] [transport.py] [_log()] starting thread (client mode): 0xa2d4ca30
2026-02-15T17:42:09.895 [DEBUG] [Thread-208477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:42:09.916 [DEBUG] [Thread-208477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:42:09.916 [INFO] [Thread-208477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] client lang: <none>
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] server lang: <none>
2026-02-15T17:42:09.919 [DEBUG] [Thread-208477] [transport.py] [_log()] kex follows: False
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] Compression: none
2026-02-15T17:42:09.920 [DEBUG] [Thread-208477] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:42:09.937 [DEBUG] [Thread-208477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:42:09.938 [DEBUG] [Thread-208477] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:42:09.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:42:09.939 [DEBUG] [Thread-208477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:42:09.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:42:09.941 [DEBUG] [Thread-208477] [transport.py] [_log()] userauth is OK
2026-02-15T17:42:09.942 [DEBUG] [Thread-208477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:42:09.942 [DEBUG] [Thread-208477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:42:09.942 [DEBUG] [Thread-208477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:42:09.942 [DEBUG] [Thread-208477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:42:09.967 [INFO] [Thread-208477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:42:09.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:42:10.559 [DEBUG] [Thread-208477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:42:10.559 [DEBUG] [Thread-208477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:42:10.560 [DEBUG] [Thread-208477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:42:10.600 [DEBUG] [Thread-208477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:42:10.601 [DEBUG] [Thread-208477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:42:10.604 [DEBUG] [Thread-208477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:42:10.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:42:10.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:42:10.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:42:10.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:42:10.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:42:10.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:42:10.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:42:10.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:42:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:42:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.653914 -999.00  +21.30  19.30     30   +3.20 1 1 1 1 1   887    0 16.27 -61.36 ----- 22.6 19.3 162.0 24.9 25.1 -29.0 25.0 -28.0 26.5 -27.3 27.1 -29.1
2026-02-15T17:42:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:42:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:42:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.653914
2026-02-15T17:42:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:42:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:42:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:42:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:42:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:42:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:41:36', tmtdew=21.53, humidity=23.87, cloud=0.0, wind=30.06, temperature=21.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:41:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:42:10.633 [DEBUG] [Thread-208477] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:42:10.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:42:10.722 [DEBUG] [Thread-208480] [transport.py] [_log()] starting thread (client mode): 0xa57d40a0
2026-02-15T17:42:10.722 [DEBUG] [Thread-208480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:42:10.737 [DEBUG] [Thread-208480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:42:10.737 [INFO] [Thread-208480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] client lang: <none>
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] server lang: <none>
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] kex follows: False
2026-02-15T17:42:10.745 [DEBUG] [Thread-208480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:42:10.746 [DEBUG] [Thread-208480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:42:10.746 [DEBUG] [Thread-208480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:42:10.746 [DEBUG] [Thread-208480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:42:10.746 [DEBUG] [Thread-208480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:42:10.746 [DEBUG] [Thread-208480] [transport.py] [_log()] Compression: none
2026-02-15T17:42:10.746 [DEBUG] [Thread-208480] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:42:10.805 [DEBUG] [Thread-208480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:42:10.805 [DEBUG] [Thread-208480] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:42:10.806 [DEBUG] [Thread-208480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:42:10.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:42:10.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:42:10.861 [DEBUG] [Thread-208480] [transport.py] [_log()] userauth is OK
2026-02-15T17:42:10.861 [DEBUG] [Thread-208480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:42:10.861 [DEBUG] [Thread-208480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:42:10.861 [DEBUG] [Thread-208480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:42:10.861 [DEBUG] [Thread-208480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:42:10.880 [INFO] [Thread-208480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:42:10.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:42:10.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:42:11.670 [DEBUG] [Thread-208480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:42:11.670 [DEBUG] [Thread-208480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:42:11.718 [DEBUG] [Thread-208480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:42:11.718 [DEBUG] [Thread-208480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:42:11.728 [DEBUG] [Thread-208480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:42:11.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:42:11.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:42:11.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:42:11.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:42:11.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:42:11.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:42:11.761 [DEBUG] [Thread-208480] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:42:17.762 [DEBUG] [Thread-208482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:32.815 [DEBUG] [Thread-208483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:42:41.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:42:41.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:42:41.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:42:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 42, 11), 21.12, 24.37, 0.0, 25.16, 21.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:42:43.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:42:11
2026-02-15T17:42:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:42:44.407 [DEBUG] [Thread-208484] [transport.py] [_log()] starting thread (client mode): 0xa57d68c0
2026-02-15T17:42:44.407 [DEBUG] [Thread-208484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:42:44.428 [DEBUG] [Thread-208484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:42:44.428 [INFO] [Thread-208484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] client lang: <none>
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] server lang: <none>
2026-02-15T17:42:44.431 [DEBUG] [Thread-208484] [transport.py] [_log()] kex follows: False
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] Compression: none
2026-02-15T17:42:44.432 [DEBUG] [Thread-208484] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:42:44.449 [DEBUG] [Thread-208484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:42:44.450 [DEBUG] [Thread-208484] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:42:44.450 [DEBUG] [Thread-208484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:42:44.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:42:44.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:42:44.452 [DEBUG] [Thread-208484] [transport.py] [_log()] userauth is OK
2026-02-15T17:42:44.453 [DEBUG] [Thread-208484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:42:44.453 [DEBUG] [Thread-208484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:42:44.453 [DEBUG] [Thread-208484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:42:44.453 [DEBUG] [Thread-208484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:42:44.472 [INFO] [Thread-208484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:42:44.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:42:45.130 [DEBUG] [Thread-208484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:42:45.130 [DEBUG] [Thread-208484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:42:45.130 [DEBUG] [Thread-208484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:42:45.171 [DEBUG] [Thread-208484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:42:45.171 [DEBUG] [Thread-208484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:42:45.175 [DEBUG] [Thread-208484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:42:45.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:42:45.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:42:45.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:42:45.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:42:45.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:42:45.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:42:45.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:42:45.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:42:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:42:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.654261 -999.00  +21.20  21.10     30   +3.20 1 1 1 1 1   887    0 16.88 -60.71 ----- 19.1 21.1 154.6 28.9 25.1 -29.7 25.0 -28.5 26.4 -28.2 27.0 -29.5
2026-02-15T17:42:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:42:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:42:45.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.654261
2026-02-15T17:42:45.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:42:45.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:42:45.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:42:45.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:42:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:42:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:42:11', tmtdew=21.12, humidity=24.37, cloud=0.0, wind=25.16, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:42:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:42:45.207 [DEBUG] [Thread-208484] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:42:45.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:42:45.306 [DEBUG] [Thread-208487] [transport.py] [_log()] starting thread (client mode): 0xa57430a0
2026-02-15T17:42:45.306 [DEBUG] [Thread-208487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:42:45.321 [DEBUG] [Thread-208487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:42:45.321 [INFO] [Thread-208487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] client lang: <none>
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] server lang: <none>
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] kex follows: False
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:42:45.329 [DEBUG] [Thread-208487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:42:45.330 [DEBUG] [Thread-208487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:42:45.330 [DEBUG] [Thread-208487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:42:45.330 [DEBUG] [Thread-208487] [transport.py] [_log()] Compression: none
2026-02-15T17:42:45.330 [DEBUG] [Thread-208487] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:42:45.388 [DEBUG] [Thread-208487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:42:45.389 [DEBUG] [Thread-208487] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:42:45.390 [DEBUG] [Thread-208487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:42:45.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:42:45.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:42:45.445 [DEBUG] [Thread-208487] [transport.py] [_log()] userauth is OK
2026-02-15T17:42:45.445 [DEBUG] [Thread-208487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:42:45.445 [DEBUG] [Thread-208487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:42:45.445 [DEBUG] [Thread-208487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:42:45.446 [DEBUG] [Thread-208487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:42:45.464 [INFO] [Thread-208487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:42:45.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:42:45.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:42:46.325 [DEBUG] [Thread-208487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:42:46.325 [DEBUG] [Thread-208487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:42:46.373 [DEBUG] [Thread-208487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:42:46.374 [DEBUG] [Thread-208487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:42:46.383 [DEBUG] [Thread-208487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:42:46.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:42:46.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:42:46.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:42:46.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:42:46.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:42:46.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:42:46.420 [DEBUG] [Thread-208487] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:42:47.849 [DEBUG] [Thread-208489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:00.338 [DEBUG] [Thread-208490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:02.901 [DEBUG] [Thread-208491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:09.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:09.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:16.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:43:16.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:43:16.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:43:17.938 [DEBUG] [Thread-208492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 42, 46), 21.06, 24.78, 0.0, 25.97, 21.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:43:18.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:42:46
2026-02-15T17:43:18.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:43:18.964 [DEBUG] [Thread-208493] [transport.py] [_log()] starting thread (client mode): 0xa2d4ca30
2026-02-15T17:43:18.964 [DEBUG] [Thread-208493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:43:18.984 [DEBUG] [Thread-208493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:43:18.985 [INFO] [Thread-208493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:43:18.988 [DEBUG] [Thread-208493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] client lang: <none>
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] server lang: <none>
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] kex follows: False
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] Compression: none
2026-02-15T17:43:18.989 [DEBUG] [Thread-208493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:43:19.009 [DEBUG] [Thread-208493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:43:19.010 [DEBUG] [Thread-208493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:43:19.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:43:19.011 [DEBUG] [Thread-208493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:43:19.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:43:19.013 [DEBUG] [Thread-208493] [transport.py] [_log()] userauth is OK
2026-02-15T17:43:19.013 [DEBUG] [Thread-208493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:43:19.013 [DEBUG] [Thread-208493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:43:19.014 [DEBUG] [Thread-208493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:43:19.014 [DEBUG] [Thread-208493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:43:19.039 [INFO] [Thread-208493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:43:19.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:43:19.683 [DEBUG] [Thread-208493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:43:19.683 [DEBUG] [Thread-208493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:43:19.684 [DEBUG] [Thread-208493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:43:19.724 [DEBUG] [Thread-208493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:43:19.725 [DEBUG] [Thread-208493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:43:19.728 [DEBUG] [Thread-208493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:43:19.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:43:19.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:43:19.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:43:19.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:43:19.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:43:19.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:43:19.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:43:19.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:43:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:43:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.654609 -999.00  +21.20  19.04     30   +3.20 1 1 1 1 1   887    0 16.90 -57.37 ----- 19.4 19.0 164.4 22.5 25.1 -28.7 24.9 -27.6 26.4 -26.7 26.9 -29.1
2026-02-15T17:43:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:43:19.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:43:19.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.654609
2026-02-15T17:43:19.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:43:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:43:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:43:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:43:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:43:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:42:46', tmtdew=21.06, humidity=24.78, cloud=0.0, wind=25.97, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:42:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:43:19.756 [DEBUG] [Thread-208493] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:43:19.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:43:19.868 [DEBUG] [Thread-208496] [transport.py] [_log()] starting thread (client mode): 0xa57d4340
2026-02-15T17:43:19.869 [DEBUG] [Thread-208496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:43:19.884 [DEBUG] [Thread-208496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:43:19.884 [INFO] [Thread-208496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:43:19.895 [DEBUG] [Thread-208496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] client lang: <none>
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] server lang: <none>
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] kex follows: False
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:43:19.896 [DEBUG] [Thread-208496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:43:19.897 [DEBUG] [Thread-208496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:43:19.897 [DEBUG] [Thread-208496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:43:19.897 [DEBUG] [Thread-208496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:43:19.897 [DEBUG] [Thread-208496] [transport.py] [_log()] Compression: none
2026-02-15T17:43:19.897 [DEBUG] [Thread-208496] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:43:19.955 [DEBUG] [Thread-208496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:43:19.955 [DEBUG] [Thread-208496] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:43:19.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:43:19.957 [DEBUG] [Thread-208496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:43:19.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:43:20.024 [DEBUG] [Thread-208496] [transport.py] [_log()] userauth is OK
2026-02-15T17:43:20.024 [DEBUG] [Thread-208496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:43:20.024 [DEBUG] [Thread-208496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:43:20.025 [DEBUG] [Thread-208496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:43:20.025 [DEBUG] [Thread-208496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:43:20.044 [INFO] [Thread-208496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:43:20.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:43:20.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:43:20.878 [DEBUG] [Thread-208496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:43:20.878 [DEBUG] [Thread-208496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:43:20.928 [DEBUG] [Thread-208496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:43:20.928 [DEBUG] [Thread-208496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:43:20.939 [DEBUG] [Thread-208496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:43:20.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:43:20.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:43:20.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:43:20.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:43:20.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:43:20.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:43:20.976 [DEBUG] [Thread-208496] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:43:32.975 [DEBUG] [Thread-208498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:48.022 [DEBUG] [Thread-208499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:43:50.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:43:50.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:43:51.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:43:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 43, 22), 21.08, 24.77, 0.0, 25.34, 21.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:43:53.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:43:22
2026-02-15T17:43:53.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:43:53.620 [DEBUG] [Thread-208500] [transport.py] [_log()] starting thread (client mode): 0xa57d6bf0
2026-02-15T17:43:53.620 [DEBUG] [Thread-208500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:43:53.642 [DEBUG] [Thread-208500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:43:53.642 [INFO] [Thread-208500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] client lang: <none>
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] server lang: <none>
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] kex follows: False
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] Compression: none
2026-02-15T17:43:53.645 [DEBUG] [Thread-208500] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:43:53.663 [DEBUG] [Thread-208500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:43:53.664 [DEBUG] [Thread-208500] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:43:53.664 [DEBUG] [Thread-208500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:43:53.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:43:53.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:43:53.666 [DEBUG] [Thread-208500] [transport.py] [_log()] userauth is OK
2026-02-15T17:43:53.666 [DEBUG] [Thread-208500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:43:53.666 [DEBUG] [Thread-208500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:43:53.667 [DEBUG] [Thread-208500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:43:53.667 [DEBUG] [Thread-208500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:43:53.687 [INFO] [Thread-208500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:43:53.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:43:54.327 [DEBUG] [Thread-208500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:43:54.328 [DEBUG] [Thread-208500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:43:54.328 [DEBUG] [Thread-208500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:43:54.368 [DEBUG] [Thread-208500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:43:54.368 [DEBUG] [Thread-208500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:43:54.370 [DEBUG] [Thread-208500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:43:54.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:43:54.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:43:54.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:43:54.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:43:54.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:43:54.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:43:54.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.654956 -999.00  +21.20  17.57     30   +3.10 1 1 1 1 1   887    0 16.56 -58.68 ----- 17.4 17.6 163.0 28.8 25.0 -29.8 24.9 -29.0 26.4 -27.1 26.9 -29.5
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.654956
2026-02-15T17:43:54.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:43:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:43:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:43:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:43:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:43:54.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:43:22', tmtdew=21.08, humidity=24.77, cloud=0.0, wind=25.34, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:43:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:43:54.389 [DEBUG] [Thread-208500] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:43:54.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:43:54.473 [DEBUG] [Thread-208503] [transport.py] [_log()] starting thread (client mode): 0xa2dc0400
2026-02-15T17:43:54.474 [DEBUG] [Thread-208503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:43:54.488 [DEBUG] [Thread-208503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:43:54.488 [INFO] [Thread-208503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] client lang: <none>
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] server lang: <none>
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] kex follows: False
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] Compression: none
2026-02-15T17:43:54.496 [DEBUG] [Thread-208503] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:43:54.550 [DEBUG] [Thread-208503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:43:54.551 [DEBUG] [Thread-208503] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:43:54.551 [DEBUG] [Thread-208503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:43:54.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:43:54.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:43:54.614 [DEBUG] [Thread-208503] [transport.py] [_log()] userauth is OK
2026-02-15T17:43:54.614 [DEBUG] [Thread-208503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:43:54.614 [DEBUG] [Thread-208503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:43:54.614 [DEBUG] [Thread-208503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:43:54.614 [DEBUG] [Thread-208503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:43:54.627 [INFO] [Thread-208503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:43:54.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:43:54.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:43:55.437 [DEBUG] [Thread-208503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:43:55.437 [DEBUG] [Thread-208503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:43:55.484 [DEBUG] [Thread-208503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:43:55.484 [DEBUG] [Thread-208503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:43:55.493 [DEBUG] [Thread-208503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:43:55.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:43:55.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:43:55.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:43:55.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:43:55.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:43:55.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:43:55.529 [DEBUG] [Thread-208503] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:44:00.371 [DEBUG] [Thread-208505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:44:03.056 [DEBUG] [Thread-208506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:44:09.896 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:44:09.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:44:18.101 [DEBUG] [Thread-208507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:44:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:44:25.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:44:25.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:44:27.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 43, 57), 20.87, 24.77, 0.0, 25.87, 21.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:44:27.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:43:57
2026-02-15T17:44:28.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:44:28.526 [DEBUG] [Thread-208508] [transport.py] [_log()] starting thread (client mode): 0xa57d48e0
2026-02-15T17:44:28.526 [DEBUG] [Thread-208508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:44:28.546 [DEBUG] [Thread-208508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:44:28.546 [INFO] [Thread-208508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] client lang: <none>
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] server lang: <none>
2026-02-15T17:44:28.549 [DEBUG] [Thread-208508] [transport.py] [_log()] kex follows: False
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] Compression: none
2026-02-15T17:44:28.550 [DEBUG] [Thread-208508] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:44:28.566 [DEBUG] [Thread-208508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:44:28.567 [DEBUG] [Thread-208508] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:44:28.567 [DEBUG] [Thread-208508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:44:28.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:44:28.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:44:28.569 [DEBUG] [Thread-208508] [transport.py] [_log()] userauth is OK
2026-02-15T17:44:28.570 [DEBUG] [Thread-208508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:44:28.570 [DEBUG] [Thread-208508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:44:28.570 [DEBUG] [Thread-208508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:44:28.570 [DEBUG] [Thread-208508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:44:28.594 [INFO] [Thread-208508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:44:28.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:44:29.353 [DEBUG] [Thread-208508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:44:29.353 [DEBUG] [Thread-208508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:44:29.354 [DEBUG] [Thread-208508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:44:29.394 [DEBUG] [Thread-208508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:44:29.395 [DEBUG] [Thread-208508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:44:29.398 [DEBUG] [Thread-208508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:44:29.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:44:29.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:44:29.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:44:29.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:44:29.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:44:29.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:44:29.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:44:29.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:44:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:44:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.655303 -999.00  +21.10  21.20     30   +3.10 1 1 1 1 1   887    0 17.00 -57.03 ----- 19.7 21.2 162.5 25.4 25.0 -29.3 24.9 -27.3 26.3 -27.6 26.9 -29.1
2026-02-15T17:44:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:44:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:44:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.655303
2026-02-15T17:44:29.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:44:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:44:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:44:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:44:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:44:29.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:43:57', tmtdew=20.87, humidity=24.77, cloud=0.0, wind=25.87, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:43:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:44:29.427 [DEBUG] [Thread-208508] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:44:29.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:44:29.524 [DEBUG] [Thread-208511] [transport.py] [_log()] starting thread (client mode): 0xa57d5ae0
2026-02-15T17:44:29.524 [DEBUG] [Thread-208511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:44:29.541 [DEBUG] [Thread-208511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:44:29.542 [INFO] [Thread-208511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:44:29.549 [DEBUG] [Thread-208511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:44:29.549 [DEBUG] [Thread-208511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] client lang: <none>
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] server lang: <none>
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] kex follows: False
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:44:29.550 [DEBUG] [Thread-208511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:44:29.551 [DEBUG] [Thread-208511] [transport.py] [_log()] Compression: none
2026-02-15T17:44:29.551 [DEBUG] [Thread-208511] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:44:29.609 [DEBUG] [Thread-208511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:44:29.610 [DEBUG] [Thread-208511] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:44:29.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:44:29.611 [DEBUG] [Thread-208511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:44:29.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:44:29.665 [DEBUG] [Thread-208511] [transport.py] [_log()] userauth is OK
2026-02-15T17:44:29.665 [DEBUG] [Thread-208511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:44:29.665 [DEBUG] [Thread-208511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:44:29.665 [DEBUG] [Thread-208511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:44:29.666 [DEBUG] [Thread-208511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:44:29.686 [INFO] [Thread-208511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:44:29.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:44:29.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:44:30.557 [DEBUG] [Thread-208511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:44:30.557 [DEBUG] [Thread-208511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:44:30.605 [DEBUG] [Thread-208511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:44:30.606 [DEBUG] [Thread-208511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:44:30.618 [DEBUG] [Thread-208511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:44:30.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:44:30.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:44:30.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:44:30.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:44:30.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:44:30.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:44:30.656 [DEBUG] [Thread-208511] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:44:33.136 [DEBUG] [Thread-208513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:44:48.179 [DEBUG] [Thread-208514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45:00.418 [DEBUG] [Thread-208515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45:00.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:45:00.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:45:00.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:45:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 44, 33), 21.79, 23.5, 0.0, 24.49, 22.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:45:02.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:44:33
2026-02-15T17:45:02.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:45:03.089 [DEBUG] [Thread-208516] [transport.py] [_log()] starting thread (client mode): 0xa2d78fd0
2026-02-15T17:45:03.089 [DEBUG] [Thread-208516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:45:03.109 [DEBUG] [Thread-208516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:45:03.109 [INFO] [Thread-208516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:45:03.110 [DEBUG] [Thread-208516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:45:03.110 [DEBUG] [Thread-208516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] client lang: <none>
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] server lang: <none>
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] kex follows: False
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] Compression: none
2026-02-15T17:45:03.111 [DEBUG] [Thread-208516] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:45:03.118 [DEBUG] [Thread-208516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:45:03.118 [DEBUG] [Thread-208516] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:45:03.118 [DEBUG] [Thread-208516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:45:03.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:45:03.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:45:03.119 [DEBUG] [Thread-208516] [transport.py] [_log()] userauth is OK
2026-02-15T17:45:03.119 [DEBUG] [Thread-208516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:45:03.119 [DEBUG] [Thread-208516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:45:03.119 [DEBUG] [Thread-208516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:45:03.119 [DEBUG] [Thread-208516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:45:03.128 [INFO] [Thread-208516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:45:03.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:45:03.216 [DEBUG] [Thread-208518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45:09.832 [DEBUG] [Thread-208516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:45:09.833 [DEBUG] [Thread-208516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:45:09.833 [DEBUG] [Thread-208516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:45:09.873 [DEBUG] [Thread-208516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:45:09.874 [DEBUG] [Thread-208516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:45:09.877 [DEBUG] [Thread-208516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:45:09.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:45:09.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:45:09.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:45:09.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:45:09.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:45:09.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:45:09.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:45:09.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:45:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:45:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.655998 -999.00  +21.20  21.22     30   +3.20 1 1 1 1 1   887    0 16.76 -47.04 ----- 18.8 21.2 170.0 24.2 24.9 -28.6 24.8 -28.7 26.2 -26.4 26.9 -28.2
2026-02-15T17:45:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:45:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:45:09.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.655998
2026-02-15T17:45:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:45:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:45:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:45:09.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:45:09.998 [DEBUG] [Thread-208516] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:45:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:45:09.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:44:33', tmtdew=21.79, humidity=23.5, cloud=0.0, wind=24.49, temperature=22.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:44:38.227', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:45:10.045 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45:10.046 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45: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-02-15T17:45:10.099 [DEBUG] [Thread-208520] [transport.py] [_log()] starting thread (client mode): 0xa2d79bd0
2026-02-15T17:45:10.099 [DEBUG] [Thread-208520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:45:10.114 [DEBUG] [Thread-208520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:45:10.115 [INFO] [Thread-208520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:10.122 [DEBUG] [Thread-208520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] client lang: <none>
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] server lang: <none>
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] kex follows: False
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] Compression: none
2026-02-15T17:45:10.123 [DEBUG] [Thread-208520] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:45:10.181 [DEBUG] [Thread-208520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:45:10.182 [DEBUG] [Thread-208520] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:45:10.191 [DEBUG] [Thread-208520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:45:10.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:45:10.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:45:10.240 [DEBUG] [Thread-208520] [transport.py] [_log()] userauth is OK
2026-02-15T17:45:10.240 [DEBUG] [Thread-208520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:45:10.241 [DEBUG] [Thread-208520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:45:10.241 [DEBUG] [Thread-208520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:45:10.241 [DEBUG] [Thread-208520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:45:10.258 [INFO] [Thread-208520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:45:10.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:45:10.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:45:11.073 [DEBUG] [Thread-208520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:45:11.074 [DEBUG] [Thread-208520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:45:11.121 [DEBUG] [Thread-208520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:45:11.122 [DEBUG] [Thread-208520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:45:11.131 [DEBUG] [Thread-208520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:45:11.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:45:11.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:45:11.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:45:11.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:45:11.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:45:11.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:45:11.168 [DEBUG] [Thread-208520] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:45:18.250 [DEBUG] [Thread-208522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45:33.298 [DEBUG] [Thread-208523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:45:41.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:45:41.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:45:41.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:45:43.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 45, 8), 20.9, 24.82, 0.0, 25.5, 21.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:45:43.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:45:08
2026-02-15T17:45:43.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:45:43.542 [DEBUG] [Thread-208524] [transport.py] [_log()] starting thread (client mode): 0xa5741150
2026-02-15T17:45:43.542 [DEBUG] [Thread-208524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:45:43.564 [DEBUG] [Thread-208524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:45:43.565 [INFO] [Thread-208524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] client lang: <none>
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] server lang: <none>
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] kex follows: False
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] Compression: none
2026-02-15T17:45:43.566 [DEBUG] [Thread-208524] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:45:43.576 [DEBUG] [Thread-208524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:45:43.577 [DEBUG] [Thread-208524] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:45:43.577 [DEBUG] [Thread-208524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:45:43.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:45:43.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:45:43.580 [DEBUG] [Thread-208524] [transport.py] [_log()] userauth is OK
2026-02-15T17:45:43.580 [DEBUG] [Thread-208524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:45:43.580 [DEBUG] [Thread-208524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:45:43.580 [DEBUG] [Thread-208524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:45:43.580 [DEBUG] [Thread-208524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:45:43.616 [INFO] [Thread-208524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:45:43.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:45:44.251 [DEBUG] [Thread-208524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:45:44.252 [DEBUG] [Thread-208524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:45:44.252 [DEBUG] [Thread-208524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:45:44.293 [DEBUG] [Thread-208524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:45:44.294 [DEBUG] [Thread-208524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:45:44.296 [DEBUG] [Thread-208524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:45:44.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:45:44.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:45:44.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:45:44.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:45:44.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:45:44.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:45:44.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:45:44.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:45:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:45:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.656344 -999.00  +21.20  21.12     30   +3.20 1 1 1 1 1   887    0 16.80 -47.37 ----- 21.8 21.1 171.4 29.5 24.9 -29.2 24.6 -30.4 26.2 -27.2 26.7 -29.2
2026-02-15T17:45:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:45:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:45:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.656344
2026-02-15T17:45:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:45:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:45:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:45:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:45:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:45:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:45:08', tmtdew=20.9, humidity=24.82, cloud=0.0, wind=25.5, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:45:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:45:44.319 [DEBUG] [Thread-208524] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:45:44.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:45:44.413 [DEBUG] [Thread-208527] [transport.py] [_log()] starting thread (client mode): 0xa57d4790
2026-02-15T17:45:44.413 [DEBUG] [Thread-208527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:45:44.427 [DEBUG] [Thread-208527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:45:44.428 [INFO] [Thread-208527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:45:44.435 [DEBUG] [Thread-208527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] client lang: <none>
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] server lang: <none>
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] kex follows: False
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:45:44.436 [DEBUG] [Thread-208527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:45:44.437 [DEBUG] [Thread-208527] [transport.py] [_log()] Compression: none
2026-02-15T17:45:44.437 [DEBUG] [Thread-208527] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:45:44.492 [DEBUG] [Thread-208527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:45:44.493 [DEBUG] [Thread-208527] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:45:44.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:45:44.494 [DEBUG] [Thread-208527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:45:44.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:45:44.549 [DEBUG] [Thread-208527] [transport.py] [_log()] userauth is OK
2026-02-15T17:45:44.549 [DEBUG] [Thread-208527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:45:44.549 [DEBUG] [Thread-208527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:45:44.549 [DEBUG] [Thread-208527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:45:44.549 [DEBUG] [Thread-208527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:45:44.568 [INFO] [Thread-208527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:45:44.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:45:44.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:45:45.375 [DEBUG] [Thread-208527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:45:45.376 [DEBUG] [Thread-208527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:45:45.423 [DEBUG] [Thread-208527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:45:45.424 [DEBUG] [Thread-208527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:45:45.433 [DEBUG] [Thread-208527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:45:45.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:45:45.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:45:45.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:45:45.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:45:45.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:45:45.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:45:45.470 [DEBUG] [Thread-208527] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:45:48.334 [DEBUG] [Thread-208529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:00.476 [DEBUG] [Thread-208530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:03.393 [DEBUG] [Thread-208531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:10.188 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:10.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:15.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:46:15.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:46:15.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
2026-02-15T17:46:17.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 45, 43), 21.01, 24.78, 0.0, 23.17, 21.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:46:17.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:45:43
2026-02-15T17:46:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:46:18.066 [DEBUG] [Thread-208532] [transport.py] [_log()] starting thread (client mode): 0xa2d7a020
2026-02-15T17:46:18.066 [DEBUG] [Thread-208532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:46:18.086 [DEBUG] [Thread-208532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:46:18.086 [INFO] [Thread-208532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:46:18.089 [DEBUG] [Thread-208532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] client lang: <none>
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] server lang: <none>
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] kex follows: False
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] Compression: none
2026-02-15T17:46:18.090 [DEBUG] [Thread-208532] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:46:18.106 [DEBUG] [Thread-208532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:46:18.107 [DEBUG] [Thread-208532] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:46:18.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:46:18.108 [DEBUG] [Thread-208532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:46:18.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:46:18.110 [DEBUG] [Thread-208532] [transport.py] [_log()] userauth is OK
2026-02-15T17:46:18.110 [DEBUG] [Thread-208532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:46:18.110 [DEBUG] [Thread-208532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:46:18.110 [DEBUG] [Thread-208532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:46:18.111 [DEBUG] [Thread-208532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:46:18.128 [INFO] [Thread-208532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:46:18.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:46:18.430 [DEBUG] [Thread-208534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:18.879 [DEBUG] [Thread-208532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:46:18.880 [DEBUG] [Thread-208532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:46:18.880 [DEBUG] [Thread-208532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:46:18.922 [DEBUG] [Thread-208532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:46:18.922 [DEBUG] [Thread-208532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:46:18.924 [DEBUG] [Thread-208532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:46:18.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:46:18.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:46:18.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:46:18.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:46:18.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:46:18.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:46:18.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:46:18.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.656692 -999.00  +21.30  14.34     30   +3.30 1 1 1 1 1   887    0 17.52 -41.46 ----- 11.0 14.3 165.2 28.4 24.9 -28.8 24.7 -29.9 26.3 -26.6 26.8 -28.7
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.656692
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:46:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:45:43', tmtdew=21.01, humidity=24.78, cloud=0.0, wind=23.17, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:45:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:46:18.942 [DEBUG] [Thread-208532] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:46:19.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:46:19.028 [DEBUG] [Thread-208536] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-15T17:46:19.029 [DEBUG] [Thread-208536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:46:19.043 [DEBUG] [Thread-208536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:46:19.043 [INFO] [Thread-208536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:46:19.050 [DEBUG] [Thread-208536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] client lang: <none>
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] server lang: <none>
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] kex follows: False
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] Compression: none
2026-02-15T17:46:19.051 [DEBUG] [Thread-208536] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:46:19.107 [DEBUG] [Thread-208536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:46:19.107 [DEBUG] [Thread-208536] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:46:19.107 [DEBUG] [Thread-208536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:46:19.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:46:19.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:46:19.165 [DEBUG] [Thread-208536] [transport.py] [_log()] userauth is OK
2026-02-15T17:46:19.165 [DEBUG] [Thread-208536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:46:19.165 [DEBUG] [Thread-208536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:46:19.165 [DEBUG] [Thread-208536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:46:19.166 [DEBUG] [Thread-208536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:46:19.185 [INFO] [Thread-208536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:46:19.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:46:19.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:46:20.018 [DEBUG] [Thread-208536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:46:20.018 [DEBUG] [Thread-208536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:46:20.066 [DEBUG] [Thread-208536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:46:20.066 [DEBUG] [Thread-208536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:46:20.075 [DEBUG] [Thread-208536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:46:20.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:46:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:46: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') -> 00000000
2026-02-15T17:46:20.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:46:20.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:46:20.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:46:20.113 [DEBUG] [Thread-208536] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:46:33.469 [DEBUG] [Thread-208538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:48.532 [DEBUG] [Thread-208539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:46:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:46:50.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:46:50.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:46:52.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 46, 19), 21.0, 24.83, 0.0, 24.76, 21.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:46:52.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:46:19
2026-02-15T17:46:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:46:52.563 [DEBUG] [Thread-208540] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-15T17:46:52.563 [DEBUG] [Thread-208540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:46:52.583 [DEBUG] [Thread-208540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:46:52.583 [INFO] [Thread-208540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] client lang: <none>
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] server lang: <none>
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] kex follows: False
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] Compression: none
2026-02-15T17:46:52.586 [DEBUG] [Thread-208540] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:46:52.602 [DEBUG] [Thread-208540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:46:52.602 [DEBUG] [Thread-208540] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:46:52.602 [DEBUG] [Thread-208540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:46:52.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:46:52.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:46:52.604 [DEBUG] [Thread-208540] [transport.py] [_log()] userauth is OK
2026-02-15T17:46:52.604 [DEBUG] [Thread-208540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:46:52.604 [DEBUG] [Thread-208540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:46:52.604 [DEBUG] [Thread-208540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:46:52.604 [DEBUG] [Thread-208540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:46:52.624 [INFO] [Thread-208540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:46:52.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:46:53.272 [DEBUG] [Thread-208540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:46:53.272 [DEBUG] [Thread-208540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:46:53.272 [DEBUG] [Thread-208540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:46:53.314 [DEBUG] [Thread-208540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:46:53.314 [DEBUG] [Thread-208540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:46:53.316 [DEBUG] [Thread-208540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:46:53.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:46:53.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:46:53.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:46:53.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:46:53.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:46:53.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:46:53.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.657039 -999.00  +21.30  20.24     30   +3.30 1 1 1 1 1   887    0 17.27 -38.72 ----- 20.0 20.2 157.8 26.6 24.8 -28.7 24.5 -31.1 26.2 -26.6 26.7 -28.2
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.657039
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:46:53.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:46:19', tmtdew=21.0, humidity=24.83, cloud=0.0, wind=24.76, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:46:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:46:53.336 [DEBUG] [Thread-208540] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:46:53.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:46:53.419 [DEBUG] [Thread-208543] [transport.py] [_log()] starting thread (client mode): 0xa2d54280
2026-02-15T17:46:53.419 [DEBUG] [Thread-208543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:46:53.434 [DEBUG] [Thread-208543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:46:53.434 [INFO] [Thread-208543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] client lang: <none>
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] server lang: <none>
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] kex follows: False
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] Compression: none
2026-02-15T17:46:53.441 [DEBUG] [Thread-208543] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:46:53.499 [DEBUG] [Thread-208543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:46:53.499 [DEBUG] [Thread-208543] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:46:53.499 [DEBUG] [Thread-208543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:46:53.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:46:53.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:46:53.556 [DEBUG] [Thread-208543] [transport.py] [_log()] userauth is OK
2026-02-15T17:46:53.556 [DEBUG] [Thread-208543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:46:53.557 [DEBUG] [Thread-208543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:46:53.557 [DEBUG] [Thread-208543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:46:53.557 [DEBUG] [Thread-208543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:46:53.575 [INFO] [Thread-208543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:46:53.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:46:53.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:46:54.397 [DEBUG] [Thread-208543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:46:54.397 [DEBUG] [Thread-208543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:46:54.445 [DEBUG] [Thread-208543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:46:54.445 [DEBUG] [Thread-208543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:46:54.454 [DEBUG] [Thread-208543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:46:54.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:46:54.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:46:54.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:46:54.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:46:54.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:46:54.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:46:54.488 [DEBUG] [Thread-208543] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:47:00.521 [DEBUG] [Thread-208545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:03.568 [DEBUG] [Thread-208546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:10.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:10.334 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:18.621 [DEBUG] [Thread-208547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:47:24.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:47:24.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:47:26.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 46, 54), 21.09, 24.7, 0.0, 29.43, 21.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:47:26.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:46:54
2026-02-15T17:47:27.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:47:27.478 [DEBUG] [Thread-208548] [transport.py] [_log()] starting thread (client mode): 0xa2dc39a0
2026-02-15T17:47:27.478 [DEBUG] [Thread-208548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:47:27.498 [DEBUG] [Thread-208548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:47:27.498 [INFO] [Thread-208548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] client lang: <none>
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] server lang: <none>
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] kex follows: False
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] Compression: none
2026-02-15T17:47:27.502 [DEBUG] [Thread-208548] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:47:27.520 [DEBUG] [Thread-208548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:47:27.520 [DEBUG] [Thread-208548] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:47:27.521 [DEBUG] [Thread-208548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:47:27.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:47:27.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:47:27.523 [DEBUG] [Thread-208548] [transport.py] [_log()] userauth is OK
2026-02-15T17:47:27.523 [DEBUG] [Thread-208548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:47:27.523 [DEBUG] [Thread-208548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:47:27.523 [DEBUG] [Thread-208548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:47:27.523 [DEBUG] [Thread-208548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:47:27.549 [INFO] [Thread-208548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:47:27.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:47:28.176 [DEBUG] [Thread-208548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:47:28.177 [DEBUG] [Thread-208548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:47:28.177 [DEBUG] [Thread-208548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:47:28.217 [DEBUG] [Thread-208548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:47:28.218 [DEBUG] [Thread-208548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:47:28.221 [DEBUG] [Thread-208548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:47:28.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:47:28.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:47:28.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:47:28.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:47:28.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:47:28.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:47:28.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:47:28.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:47:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:47:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.657386 -999.00  +21.30  18.84     30   +3.20 1 1 1 1 1   887    0 17.26 -38.92 ----- 26.2 18.8 136.0 27.3 24.9 -28.7 24.8 -27.4 26.3 -26.9 26.8 -29.5
2026-02-15T17:47:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:47:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:47:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.657386
2026-02-15T17:47:28.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:47:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:47:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:47:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:47:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:47:28.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:46:54', tmtdew=21.09, humidity=24.7, cloud=0.0, wind=29.43, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:46:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:47:28.248 [DEBUG] [Thread-208548] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:47:28.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:47:28.341 [DEBUG] [Thread-208551] [transport.py] [_log()] starting thread (client mode): 0xa57d5480
2026-02-15T17:47:28.342 [DEBUG] [Thread-208551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:47:28.357 [DEBUG] [Thread-208551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:47:28.357 [INFO] [Thread-208551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:47:28.364 [DEBUG] [Thread-208551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:47:28.364 [DEBUG] [Thread-208551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] client lang: <none>
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] server lang: <none>
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] kex follows: False
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] Compression: none
2026-02-15T17:47:28.365 [DEBUG] [Thread-208551] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:47:28.429 [DEBUG] [Thread-208551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:47:28.430 [DEBUG] [Thread-208551] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:47:28.431 [DEBUG] [Thread-208551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:47:28.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:47:28.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:47:28.489 [DEBUG] [Thread-208551] [transport.py] [_log()] userauth is OK
2026-02-15T17:47:28.489 [DEBUG] [Thread-208551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:47:28.489 [DEBUG] [Thread-208551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:47:28.490 [DEBUG] [Thread-208551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:47:28.490 [DEBUG] [Thread-208551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:47:28.514 [INFO] [Thread-208551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:47:28.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:47:28.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:47:29.369 [DEBUG] [Thread-208551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:47:29.369 [DEBUG] [Thread-208551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:47:29.418 [DEBUG] [Thread-208551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:47:29.418 [DEBUG] [Thread-208551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:47:29.427 [DEBUG] [Thread-208551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:47:29.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:47:29.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:47:29.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:47:29.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:47:29.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:47:29.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:47:29.465 [DEBUG] [Thread-208551] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:47:33.660 [DEBUG] [Thread-208553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:48.716 [DEBUG] [Thread-208554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:47:59.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:47:59.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:47:59.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:48:00.559 [DEBUG] [Thread-208555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:48:01.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 47, 29), 20.97, 24.87, 0.0, 25.99, 21.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:48:01.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:47:29
2026-02-15T17:48:01.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:48:01.989 [DEBUG] [Thread-208556] [transport.py] [_log()] starting thread (client mode): 0xa2d7a710
2026-02-15T17:48:01.989 [DEBUG] [Thread-208556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:48:02.008 [DEBUG] [Thread-208556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:48:02.008 [INFO] [Thread-208556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] client lang: <none>
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] server lang: <none>
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] kex follows: False
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] Compression: none
2026-02-15T17:48:02.011 [DEBUG] [Thread-208556] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:48:02.027 [DEBUG] [Thread-208556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:48:02.027 [DEBUG] [Thread-208556] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:48:02.028 [DEBUG] [Thread-208556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:48:02.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:48:02.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:48:02.030 [DEBUG] [Thread-208556] [transport.py] [_log()] userauth is OK
2026-02-15T17:48:02.030 [DEBUG] [Thread-208556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:48:02.030 [DEBUG] [Thread-208556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:48:02.030 [DEBUG] [Thread-208556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:48:02.030 [DEBUG] [Thread-208556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:48:02.049 [INFO] [Thread-208556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:48:02.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:48:02.650 [DEBUG] [Thread-208556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:48:02.650 [DEBUG] [Thread-208556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:48:02.650 [DEBUG] [Thread-208556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:48:02.691 [DEBUG] [Thread-208556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:48:02.691 [DEBUG] [Thread-208556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:48:02.693 [DEBUG] [Thread-208556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:48:02.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:48:02.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:48:02.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:48:02.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:48:02.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:48:02.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:48:02.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:48:02.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.657734 -999.00  +21.10  18.50     30   +3.20 1 1 1 1 1   887    0 16.86 -35.20 ----- 18.5 18.5 138.2 31.2 24.8 -28.8 24.8 -28.3 26.2 -27.5 26.6 -29.2
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.657734
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:48:02.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:47:29', tmtdew=20.97, humidity=24.87, cloud=0.0, wind=25.99, temperature=21.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:47:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:48:02.706 [DEBUG] [Thread-208556] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:48:02.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:48:02.790 [DEBUG] [Thread-208559] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-15T17:48:02.791 [DEBUG] [Thread-208559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:48:02.805 [DEBUG] [Thread-208559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:48:02.805 [INFO] [Thread-208559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:48:02.813 [DEBUG] [Thread-208559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:48:02.813 [DEBUG] [Thread-208559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:48:02.813 [DEBUG] [Thread-208559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:48:02.813 [DEBUG] [Thread-208559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:02.813 [DEBUG] [Thread-208559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] client lang: <none>
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] server lang: <none>
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] kex follows: False
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] Compression: none
2026-02-15T17:48:02.814 [DEBUG] [Thread-208559] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:48:02.873 [DEBUG] [Thread-208559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:48:02.874 [DEBUG] [Thread-208559] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:48:02.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:48:02.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:48:02.875 [DEBUG] [Thread-208559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:48:02.936 [DEBUG] [Thread-208559] [transport.py] [_log()] userauth is OK
2026-02-15T17:48:02.936 [DEBUG] [Thread-208559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:48:02.936 [DEBUG] [Thread-208559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:48:02.937 [DEBUG] [Thread-208559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:48:02.937 [DEBUG] [Thread-208559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:48:02.956 [INFO] [Thread-208559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:48:02.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:48:02.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:48:03.756 [DEBUG] [Thread-208561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:48:03.798 [DEBUG] [Thread-208559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:48:03.798 [DEBUG] [Thread-208559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:48:03.846 [DEBUG] [Thread-208559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:48:03.846 [DEBUG] [Thread-208559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:48:03.856 [DEBUG] [Thread-208559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:48:03.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:48:03.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:48:03.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:48:03.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:48:03.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:48:03.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:48:03.892 [DEBUG] [Thread-208559] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:48:10.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:48:10.475 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:48:18.809 [DEBUG] [Thread-208562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:48:33.845 [DEBUG] [Thread-208563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:48:33.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:48:33.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:48:33.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:48:35.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 48, 5), 20.95, 24.92, 0.0, 28.92, 21.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:48:35.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:48:05
2026-02-15T17:48:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:48:36.284 [DEBUG] [Thread-208564] [transport.py] [_log()] starting thread (client mode): 0xa5743c40
2026-02-15T17:48:36.284 [DEBUG] [Thread-208564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:48:36.298 [DEBUG] [Thread-208564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:48:36.298 [INFO] [Thread-208564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] client lang: <none>
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] server lang: <none>
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] kex follows: False
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:48:36.299 [DEBUG] [Thread-208564] [transport.py] [_log()] Compression: none
2026-02-15T17:48:36.300 [DEBUG] [Thread-208564] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:48:36.310 [DEBUG] [Thread-208564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:48:36.311 [DEBUG] [Thread-208564] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:48:36.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:48:36.312 [DEBUG] [Thread-208564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:48:36.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:48:36.313 [DEBUG] [Thread-208564] [transport.py] [_log()] userauth is OK
2026-02-15T17:48:36.314 [DEBUG] [Thread-208564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:48:36.314 [DEBUG] [Thread-208564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:48:36.314 [DEBUG] [Thread-208564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:48:36.314 [DEBUG] [Thread-208564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:48:36.335 [INFO] [Thread-208564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:48:36.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:48:36.944 [DEBUG] [Thread-208564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:48:36.944 [DEBUG] [Thread-208564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:48:36.944 [DEBUG] [Thread-208564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:48:36.984 [DEBUG] [Thread-208564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:48:36.985 [DEBUG] [Thread-208564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:48:36.988 [DEBUG] [Thread-208564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:48:36.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:48:36.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:48:36.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:48:36.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:48:37.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:48:37.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:48:37.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:48:37.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:48:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:48:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.658428 -999.00  +21.30  18.17     30   +3.30 1 1 1 1 1   887    0 17.50 -32.03 ----- 24.6 18.2 168.8 25.7 24.9 -28.8 24.9 -27.6 26.4 -27.0 26.8 -28.5
2026-02-15T17:48:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:48:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:48:37.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.658428
2026-02-15T17:48:37.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:48:37.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:48:37.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:48:37.009 [DEBUG] [Thread-208564] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:48:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:48:37.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:48:37.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:48:05', tmtdew=20.95, humidity=24.92, cloud=0.0, wind=28.92, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:48:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:48:37.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:48:37.109 [DEBUG] [Thread-208567] [transport.py] [_log()] starting thread (client mode): 0xa2d57af0
2026-02-15T17:48:37.109 [DEBUG] [Thread-208567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:48:37.124 [DEBUG] [Thread-208567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:48:37.125 [INFO] [Thread-208567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:48:37.132 [DEBUG] [Thread-208567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] client lang: <none>
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] server lang: <none>
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] kex follows: False
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] Compression: none
2026-02-15T17:48:37.133 [DEBUG] [Thread-208567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:48:37.192 [DEBUG] [Thread-208567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:48:37.193 [DEBUG] [Thread-208567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:48:37.194 [DEBUG] [Thread-208567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:48:37.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:48:37.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:48:37.249 [DEBUG] [Thread-208567] [transport.py] [_log()] userauth is OK
2026-02-15T17:48:37.249 [DEBUG] [Thread-208567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:48:37.249 [DEBUG] [Thread-208567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:48:37.250 [DEBUG] [Thread-208567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:48:37.250 [DEBUG] [Thread-208567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:48:37.268 [INFO] [Thread-208567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:48:37.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:48:37.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:48:38.104 [DEBUG] [Thread-208567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:48:38.104 [DEBUG] [Thread-208567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:48:38.152 [DEBUG] [Thread-208567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:48:38.152 [DEBUG] [Thread-208567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:48:38.164 [DEBUG] [Thread-208567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:48:38.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:48:38.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:48:38.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:48:38.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:48:38.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:48:38.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:48:38.201 [DEBUG] [Thread-208567] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:48:48.884 [DEBUG] [Thread-208569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:00.600 [DEBUG] [Thread-208570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:03.936 [DEBUG] [Thread-208571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:08.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:49:08.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:49:08.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:49:10.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 48, 41), 21.66, 23.73, 0.0, 31.01, 22.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:49:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:48:41
2026-02-15T17:49:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:49:10.545 [DEBUG] [Thread-208572] [transport.py] [_log()] starting thread (client mode): 0xa5743040
2026-02-15T17:49:10.545 [DEBUG] [Thread-208572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:49:10.565 [DEBUG] [Thread-208572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:49:10.565 [INFO] [Thread-208572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] client lang: <none>
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] server lang: <none>
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] kex follows: False
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] Compression: none
2026-02-15T17:49:10.566 [DEBUG] [Thread-208572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:49:10.576 [DEBUG] [Thread-208572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:49:10.577 [DEBUG] [Thread-208572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:49:10.577 [DEBUG] [Thread-208572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:49:10.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:49:10.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:49:10.579 [DEBUG] [Thread-208572] [transport.py] [_log()] userauth is OK
2026-02-15T17:49:10.579 [DEBUG] [Thread-208572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:49:10.579 [DEBUG] [Thread-208572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:49:10.579 [DEBUG] [Thread-208572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:49:10.579 [DEBUG] [Thread-208572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:49:10.603 [INFO] [Thread-208572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:49:10.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:49:10.617 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:10.618 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:11.259 [DEBUG] [Thread-208572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:49:11.259 [DEBUG] [Thread-208572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:49:11.260 [DEBUG] [Thread-208572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:49:11.300 [DEBUG] [Thread-208572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:49:11.300 [DEBUG] [Thread-208572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:49:11.304 [DEBUG] [Thread-208572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:49:11.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:49:11.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:49:11.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:49:11.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:49:11.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:49:11.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:49:11.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:49:11.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:49:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:49:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.658775 -999.00  +21.30  17.21     30   +3.20 1 1 1 1 1   887    0 17.29 -29.50 ----- 22.1 17.2 150.6 32.8 24.9 -29.1 -999.0 -999.0 26.4 -26.7 26.9 -28.9
2026-02-15T17:49:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:49:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:49:11.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.658775
2026-02-15T17:49:11.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:49:11.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:49:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:49:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:49:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:49:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:48:41', tmtdew=21.66, humidity=23.73, cloud=0.0, wind=31.01, temperature=22.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:48:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:49:11.329 [DEBUG] [Thread-208572] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:49:11.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:49:11.424 [DEBUG] [Thread-208575] [transport.py] [_log()] starting thread (client mode): 0xa57d5d50
2026-02-15T17:49:11.425 [DEBUG] [Thread-208575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:49:11.439 [DEBUG] [Thread-208575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:49:11.439 [INFO] [Thread-208575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] client lang: <none>
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] server lang: <none>
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] kex follows: False
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:49:11.448 [DEBUG] [Thread-208575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:49:11.449 [DEBUG] [Thread-208575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:49:11.449 [DEBUG] [Thread-208575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:49:11.449 [DEBUG] [Thread-208575] [transport.py] [_log()] Compression: none
2026-02-15T17:49:11.449 [DEBUG] [Thread-208575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:49:11.507 [DEBUG] [Thread-208575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:49:11.508 [DEBUG] [Thread-208575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:49:11.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:49:11.509 [DEBUG] [Thread-208575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:49:11.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:49:11.565 [DEBUG] [Thread-208575] [transport.py] [_log()] userauth is OK
2026-02-15T17:49:11.565 [DEBUG] [Thread-208575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:49:11.565 [DEBUG] [Thread-208575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:49:11.565 [DEBUG] [Thread-208575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:49:11.566 [DEBUG] [Thread-208575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:49:11.584 [INFO] [Thread-208575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:49:11.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:49:11.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:49:12.420 [DEBUG] [Thread-208575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:49:12.420 [DEBUG] [Thread-208575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:49:12.468 [DEBUG] [Thread-208575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:49:12.468 [DEBUG] [Thread-208575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:49:12.477 [DEBUG] [Thread-208575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:49:12.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:49:12.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:49:12.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:49:12.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:49:12.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:49:12.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:49:12.514 [DEBUG] [Thread-208575] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:49:18.971 [DEBUG] [Thread-208577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:34.022 [DEBUG] [Thread-208578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:49:42.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:49:42.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:49:42.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:49:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 49, 16), 21.3, 24.3, 0.0, 23.08, 21.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:49:44.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:49:16
2026-02-15T17:49:44.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:49:44.847 [DEBUG] [Thread-208579] [transport.py] [_log()] starting thread (client mode): 0xa57d77f0
2026-02-15T17:49:44.847 [DEBUG] [Thread-208579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:49:44.870 [DEBUG] [Thread-208579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:49:44.870 [INFO] [Thread-208579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:49:44.873 [DEBUG] [Thread-208579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:49:44.873 [DEBUG] [Thread-208579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] client lang: <none>
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] server lang: <none>
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] kex follows: False
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] Compression: none
2026-02-15T17:49:44.874 [DEBUG] [Thread-208579] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:49:44.893 [DEBUG] [Thread-208579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:49:44.893 [DEBUG] [Thread-208579] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:49:44.894 [DEBUG] [Thread-208579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:49:44.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:49:44.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:49:44.896 [DEBUG] [Thread-208579] [transport.py] [_log()] userauth is OK
2026-02-15T17:49:44.896 [DEBUG] [Thread-208579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:49:44.896 [DEBUG] [Thread-208579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:49:44.896 [DEBUG] [Thread-208579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:49:44.896 [DEBUG] [Thread-208579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:49:44.932 [INFO] [Thread-208579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:49:44.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:49:45.601 [DEBUG] [Thread-208579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:49:45.601 [DEBUG] [Thread-208579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:49:45.602 [DEBUG] [Thread-208579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:49:45.642 [DEBUG] [Thread-208579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:49:45.643 [DEBUG] [Thread-208579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:49:45.646 [DEBUG] [Thread-208579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:49:45.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:49:45.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:49:45.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:49:45.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:49:45.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:49:45.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:49:45.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:49:45.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:49:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:49:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.659122 -999.00  +21.30  21.07     30   +3.30 1 1 1 1 1   887    0 17.39 -28.56 ----- 21.0 21.1 161.6 25.5 24.8 -28.9 24.9 -28.0 26.4 -27.0 26.7 -29.1
2026-02-15T17:49:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:49:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:49:45.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.659122
2026-02-15T17:49:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:49:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:49:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:49:45.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:49:45.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:49:45.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:49:16', tmtdew=21.3, humidity=24.3, cloud=0.0, wind=23.08, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:49:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:49:45.683 [DEBUG] [Thread-208579] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:49:45.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:49:45.779 [DEBUG] [Thread-208582] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-15T17:49:45.779 [DEBUG] [Thread-208582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:49:45.794 [DEBUG] [Thread-208582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:49:45.794 [INFO] [Thread-208582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:49:45.801 [DEBUG] [Thread-208582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] client lang: <none>
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] server lang: <none>
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] kex follows: False
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] Compression: none
2026-02-15T17:49:45.802 [DEBUG] [Thread-208582] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:49:45.865 [DEBUG] [Thread-208582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:49:45.866 [DEBUG] [Thread-208582] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:49:45.867 [DEBUG] [Thread-208582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:49:45.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:49:45.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:49:45.925 [DEBUG] [Thread-208582] [transport.py] [_log()] userauth is OK
2026-02-15T17:49:45.925 [DEBUG] [Thread-208582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:49:45.926 [DEBUG] [Thread-208582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:49:45.926 [DEBUG] [Thread-208582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:49:45.926 [DEBUG] [Thread-208582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:49:45.945 [INFO] [Thread-208582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:49:45.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:49:45.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:49:46.825 [DEBUG] [Thread-208582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:49:46.825 [DEBUG] [Thread-208582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:49:46.873 [DEBUG] [Thread-208582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:49:46.873 [DEBUG] [Thread-208582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:49:46.883 [DEBUG] [Thread-208582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:49:46.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:49:46.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:49:46.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:49:46.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:49:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:49:46.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:49:46.919 [DEBUG] [Thread-208582] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:49:49.061 [DEBUG] [Thread-208584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:00.644 [DEBUG] [Thread-208585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:04.112 [DEBUG] [Thread-208586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:10.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:10.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:16.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:50:16.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:50:16.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:50:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 49, 52), 20.86, 24.97, 0.0, 25.85, 21.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:50:18.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:49:52
2026-02-15T17:50:19.153 [DEBUG] [Thread-208587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:19.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:50:19.419 [DEBUG] [Thread-208588] [transport.py] [_log()] starting thread (client mode): 0xa57431c0
2026-02-15T17:50:19.420 [DEBUG] [Thread-208588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:50:19.440 [DEBUG] [Thread-208588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:50:19.440 [INFO] [Thread-208588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] client lang: <none>
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] server lang: <none>
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] kex follows: False
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] Compression: none
2026-02-15T17:50:19.443 [DEBUG] [Thread-208588] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:50:19.459 [DEBUG] [Thread-208588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:50:19.459 [DEBUG] [Thread-208588] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:50:19.459 [DEBUG] [Thread-208588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:50:19.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:50:19.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:50:19.460 [DEBUG] [Thread-208588] [transport.py] [_log()] userauth is OK
2026-02-15T17:50:19.460 [DEBUG] [Thread-208588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:50:19.460 [DEBUG] [Thread-208588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:50:19.460 [DEBUG] [Thread-208588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:50:19.460 [DEBUG] [Thread-208588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:50:19.486 [INFO] [Thread-208588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:50:19.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:50:20.137 [DEBUG] [Thread-208588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:50:20.137 [DEBUG] [Thread-208588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:50:20.138 [DEBUG] [Thread-208588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:50:20.178 [DEBUG] [Thread-208588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:50:20.179 [DEBUG] [Thread-208588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:50:20.182 [DEBUG] [Thread-208588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:50:20.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:50:20.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:50:20.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:50:20.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:50:20.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:50:20.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:50:20.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:50:20.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:50:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:50:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.659817 -999.00  +21.20  20.33     31   +3.40 1 1 1 1 1   887    0 17.24 -29.30 ----- 18.4 20.3 162.2 27.3 24.8 -29.2 24.7 -27.9 26.2 -26.5 26.6 -29.0
2026-02-15T17:50:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:50:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:50:20.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.659817
2026-02-15T17:50:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:50:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:50:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:50:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:50:20.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:50:20.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:49:52', tmtdew=20.86, humidity=24.97, cloud=0.0, wind=25.85, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:50:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:50:20.209 [DEBUG] [Thread-208588] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:50:20.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:50:20.305 [DEBUG] [Thread-208591] [transport.py] [_log()] starting thread (client mode): 0xa2d1a530
2026-02-15T17:50:20.305 [DEBUG] [Thread-208591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:50:20.321 [DEBUG] [Thread-208591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:50:20.321 [INFO] [Thread-208591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] client lang: <none>
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] server lang: <none>
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] kex follows: False
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:50:20.329 [DEBUG] [Thread-208591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:50:20.330 [DEBUG] [Thread-208591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:50:20.330 [DEBUG] [Thread-208591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:50:20.330 [DEBUG] [Thread-208591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:50:20.330 [DEBUG] [Thread-208591] [transport.py] [_log()] Compression: none
2026-02-15T17:50:20.330 [DEBUG] [Thread-208591] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:50:20.389 [DEBUG] [Thread-208591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:50:20.389 [DEBUG] [Thread-208591] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:50:20.390 [DEBUG] [Thread-208591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:50:20.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:50:20.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:50:20.445 [DEBUG] [Thread-208591] [transport.py] [_log()] userauth is OK
2026-02-15T17:50:20.445 [DEBUG] [Thread-208591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:50:20.445 [DEBUG] [Thread-208591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:50:20.445 [DEBUG] [Thread-208591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:50:20.446 [DEBUG] [Thread-208591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:50:20.464 [INFO] [Thread-208591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:50:20.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:50:20.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:50:21.293 [DEBUG] [Thread-208591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:50:21.293 [DEBUG] [Thread-208591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:50:21.341 [DEBUG] [Thread-208591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:50:21.342 [DEBUG] [Thread-208591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:50:21.351 [DEBUG] [Thread-208591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:50:21.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:50:21.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:50:21.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:50:21.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:50:21.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:50:21.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:50:21.387 [DEBUG] [Thread-208591] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:50:34.188 [DEBUG] [Thread-208593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:49.243 [DEBUG] [Thread-208594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:50:51.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:50:51.400 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:50:51.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:50:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 50, 27), 20.8, 25.07, 0.0, 26.57, 21.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:50:53.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:50:27
2026-02-15T17:50:53.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:50:54.000 [DEBUG] [Thread-208595] [transport.py] [_log()] starting thread (client mode): 0xa2d4f250
2026-02-15T17:50:54.000 [DEBUG] [Thread-208595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:50:54.021 [DEBUG] [Thread-208595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:50:54.021 [INFO] [Thread-208595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:50:54.024 [DEBUG] [Thread-208595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:50:54.024 [DEBUG] [Thread-208595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:50:54.024 [DEBUG] [Thread-208595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] client lang: <none>
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] server lang: <none>
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] kex follows: False
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:50:54.025 [DEBUG] [Thread-208595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:50:54.026 [DEBUG] [Thread-208595] [transport.py] [_log()] Compression: none
2026-02-15T17:50:54.026 [DEBUG] [Thread-208595] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:50:54.044 [DEBUG] [Thread-208595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:50:54.044 [DEBUG] [Thread-208595] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:50:54.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:50:54.045 [DEBUG] [Thread-208595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:50:54.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:50:54.048 [DEBUG] [Thread-208595] [transport.py] [_log()] userauth is OK
2026-02-15T17:50:54.048 [DEBUG] [Thread-208595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:50:54.048 [DEBUG] [Thread-208595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:50:54.048 [DEBUG] [Thread-208595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:50:54.048 [DEBUG] [Thread-208595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:50:54.073 [INFO] [Thread-208595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:50:54.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:50:54.715 [DEBUG] [Thread-208595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:50:54.715 [DEBUG] [Thread-208595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:50:54.715 [DEBUG] [Thread-208595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:50:54.756 [DEBUG] [Thread-208595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:50:54.756 [DEBUG] [Thread-208595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:50:54.760 [DEBUG] [Thread-208595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:50:54.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:50:54.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:50:54.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:50:54.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:50:54.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:50:54.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:50:54.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:50:54.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:50:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:50:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.660164 -999.00  +21.00  21.41     31   +3.40 1 1 1 1 1   887    0 16.81 -30.85 ----- 18.0 21.4 160.0 30.7 24.7 -29.1 24.7 -27.9 26.1 -27.3 26.6 -29.0
2026-02-15T17:50:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:50:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:50:54.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.660164
2026-02-15T17:50:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:50:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:50:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:50:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:50:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:50:54.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:50:27', tmtdew=20.8, humidity=25.07, cloud=0.0, wind=26.57, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:50:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:50:54.786 [DEBUG] [Thread-208595] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:50:54.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:50:54.891 [DEBUG] [Thread-208598] [transport.py] [_log()] starting thread (client mode): 0xa57d6f80
2026-02-15T17:50:54.891 [DEBUG] [Thread-208598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:50:54.916 [DEBUG] [Thread-208598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:50:54.917 [INFO] [Thread-208598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:50:54.932 [DEBUG] [Thread-208598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:50:54.932 [DEBUG] [Thread-208598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:50:54.932 [DEBUG] [Thread-208598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:50:54.932 [DEBUG] [Thread-208598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:54.932 [DEBUG] [Thread-208598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] client lang: <none>
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] server lang: <none>
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] kex follows: False
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:50:54.933 [DEBUG] [Thread-208598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:50:54.934 [DEBUG] [Thread-208598] [transport.py] [_log()] Compression: none
2026-02-15T17:50:54.934 [DEBUG] [Thread-208598] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:50:54.997 [DEBUG] [Thread-208598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:50:54.998 [DEBUG] [Thread-208598] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:50:54.998 [DEBUG] [Thread-208598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:50:54.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:50:54.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:50:55.071 [DEBUG] [Thread-208598] [transport.py] [_log()] userauth is OK
2026-02-15T17:50:55.071 [DEBUG] [Thread-208598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:50:55.071 [DEBUG] [Thread-208598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:50:55.071 [DEBUG] [Thread-208598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:50:55.071 [DEBUG] [Thread-208598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:50:55.090 [INFO] [Thread-208598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:50:55.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:50:55.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:50:55.894 [DEBUG] [Thread-208598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:50:55.894 [DEBUG] [Thread-208598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:50:55.942 [DEBUG] [Thread-208598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:50:55.943 [DEBUG] [Thread-208598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:50:55.952 [DEBUG] [Thread-208598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:50:55.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:50:55.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:50:55.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:50:55.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:50:55.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:50:55.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:50:55.991 [DEBUG] [Thread-208598] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:51:00.702 [DEBUG] [Thread-208600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:51:04.279 [DEBUG] [Thread-208601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:51:10.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:51:10.901 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:51:19.327 [DEBUG] [Thread-208602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:51:26.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:51:26.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:51:26.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:51:28.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 51, 2), 20.8, 25.08, 0.0, 25.67, 21.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:51:28.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:51:02
2026-02-15T17:51:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:51:28.566 [DEBUG] [Thread-208603] [transport.py] [_log()] starting thread (client mode): 0xa2d56fb0
2026-02-15T17:51:28.566 [DEBUG] [Thread-208603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:51:28.587 [DEBUG] [Thread-208603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:51:28.587 [INFO] [Thread-208603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:51:28.599 [DEBUG] [Thread-208603] [transport.py] [_log()] client lang: <none>
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] server lang: <none>
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] kex follows: False
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] Compression: none
2026-02-15T17:51:28.600 [DEBUG] [Thread-208603] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:51:28.619 [DEBUG] [Thread-208603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:51:28.620 [DEBUG] [Thread-208603] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:51:28.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:51:28.621 [DEBUG] [Thread-208603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:51:28.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:51:28.623 [DEBUG] [Thread-208603] [transport.py] [_log()] userauth is OK
2026-02-15T17:51:28.623 [DEBUG] [Thread-208603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:51:28.624 [DEBUG] [Thread-208603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:51:28.624 [DEBUG] [Thread-208603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:51:28.624 [DEBUG] [Thread-208603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:51:28.660 [INFO] [Thread-208603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:51:28.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:51:29.303 [DEBUG] [Thread-208603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:51:29.312 [DEBUG] [Thread-208603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:51:29.313 [DEBUG] [Thread-208603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:51:29.344 [DEBUG] [Thread-208603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:51:29.345 [DEBUG] [Thread-208603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:51:29.348 [DEBUG] [Thread-208603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:51:29.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:51:29.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:51:29.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:51:29.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:51:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:51:29.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:51:29.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:51:29.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:51:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:51:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.660511 -999.00  +21.10  23.03     31   +3.50 1 1 1 1 1   887    0 17.46 -31.21 ----- 20.1 23.0 167.6 27.1 24.7 -28.6 24.6 -27.5 26.1 -26.7 26.6 -28.5
2026-02-15T17:51:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:51:29.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:51:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.660511
2026-02-15T17:51:29.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:51:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:51:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:51:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:51:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:51:29.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:51:02', tmtdew=20.8, humidity=25.08, cloud=0.0, wind=25.67, temperature=21.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:51:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:51:29.377 [DEBUG] [Thread-208603] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:51:29.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:51:29.472 [DEBUG] [Thread-208606] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T17:51:29.472 [DEBUG] [Thread-208606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:51:29.487 [DEBUG] [Thread-208606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:51:29.487 [INFO] [Thread-208606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:51:29.497 [DEBUG] [Thread-208606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] client lang: <none>
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] server lang: <none>
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] kex follows: False
2026-02-15T17:51:29.498 [DEBUG] [Thread-208606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:51:29.499 [DEBUG] [Thread-208606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:51:29.499 [DEBUG] [Thread-208606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:51:29.499 [DEBUG] [Thread-208606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:51:29.499 [DEBUG] [Thread-208606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:51:29.499 [DEBUG] [Thread-208606] [transport.py] [_log()] Compression: none
2026-02-15T17:51:29.500 [DEBUG] [Thread-208606] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:51:29.566 [DEBUG] [Thread-208606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:51:29.567 [DEBUG] [Thread-208606] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:51:29.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:51:29.568 [DEBUG] [Thread-208606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:51:29.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:51:29.625 [DEBUG] [Thread-208606] [transport.py] [_log()] userauth is OK
2026-02-15T17:51:29.626 [DEBUG] [Thread-208606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:51:29.626 [DEBUG] [Thread-208606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:51:29.626 [DEBUG] [Thread-208606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:51:29.626 [DEBUG] [Thread-208606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:51:29.645 [INFO] [Thread-208606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:51:29.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:51:29.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:51:30.513 [DEBUG] [Thread-208606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:51:30.513 [DEBUG] [Thread-208606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:51:30.561 [DEBUG] [Thread-208606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:51:30.562 [DEBUG] [Thread-208606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:51:30.571 [DEBUG] [Thread-208606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:51:30.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:51:30.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:51:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:51:30.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:51:30.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:51:30.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:51:30.608 [DEBUG] [Thread-208606] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:51:34.363 [DEBUG] [Thread-208608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:51:49.416 [DEBUG] [Thread-208609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:00.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:52:00.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:52:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:52:00.735 [DEBUG] [Thread-208610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:02.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 51, 37), 21.6, 23.9, 0.0, 22.16, 22.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:52:02.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:51:37
2026-02-15T17:52:02.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:52:03.150 [DEBUG] [Thread-208611] [transport.py] [_log()] starting thread (client mode): 0xa575ba60
2026-02-15T17:52:03.150 [DEBUG] [Thread-208611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:52:03.170 [DEBUG] [Thread-208611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:52:03.170 [INFO] [Thread-208611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] client lang: <none>
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] server lang: <none>
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] kex follows: False
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] Compression: none
2026-02-15T17:52:03.173 [DEBUG] [Thread-208611] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:52:03.201 [DEBUG] [Thread-208611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:52:03.202 [DEBUG] [Thread-208611] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:52:03.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:52:03.203 [DEBUG] [Thread-208611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:52:03.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:52:03.205 [DEBUG] [Thread-208611] [transport.py] [_log()] userauth is OK
2026-02-15T17:52:03.205 [DEBUG] [Thread-208611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:52:03.205 [DEBUG] [Thread-208611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:52:03.205 [DEBUG] [Thread-208611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:52:03.205 [DEBUG] [Thread-208611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:52:03.240 [INFO] [Thread-208611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:52:03.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:52:03.875 [DEBUG] [Thread-208611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:52:03.876 [DEBUG] [Thread-208611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:52:03.876 [DEBUG] [Thread-208611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:52:03.916 [DEBUG] [Thread-208611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:52:03.917 [DEBUG] [Thread-208611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:52:03.920 [DEBUG] [Thread-208611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:52:03.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:52:03.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:52:03.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:52:03.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:52:03.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:52:03.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:52:03.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:52:03.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.660859 -999.00  +21.00  20.30     31   +3.40 1 1 1 1 1   887    0 17.44 -31.99 ----- 18.4 20.3 181.4 27.0 24.6 -29.2 24.6 -31.6 26.0 -27.8 26.5 -29.2
2026-02-15T17:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:52:03.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.660859
2026-02-15T17:52:03.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:52:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:52:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:52:03.948 [DEBUG] [Thread-208611] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:52:03.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:52:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:52:03.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:51:37', tmtdew=21.6, humidity=23.9, cloud=0.0, wind=22.16, temperature=22.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:51:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:52:04.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:52:04.042 [DEBUG] [Thread-208614] [transport.py] [_log()] starting thread (client mode): 0xa575a6e0
2026-02-15T17:52:04.043 [DEBUG] [Thread-208614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:52:04.057 [DEBUG] [Thread-208614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:52:04.058 [INFO] [Thread-208614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] client lang: <none>
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] server lang: <none>
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] kex follows: False
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:52:04.065 [DEBUG] [Thread-208614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:52:04.066 [DEBUG] [Thread-208614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:52:04.066 [DEBUG] [Thread-208614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:52:04.066 [DEBUG] [Thread-208614] [transport.py] [_log()] Compression: none
2026-02-15T17:52:04.066 [DEBUG] [Thread-208614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:52:04.125 [DEBUG] [Thread-208614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:52:04.125 [DEBUG] [Thread-208614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:52:04.126 [DEBUG] [Thread-208614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:52:04.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:52:04.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:52:04.181 [DEBUG] [Thread-208614] [transport.py] [_log()] userauth is OK
2026-02-15T17:52:04.181 [DEBUG] [Thread-208614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:52:04.182 [DEBUG] [Thread-208614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:52:04.182 [DEBUG] [Thread-208614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:52:04.182 [DEBUG] [Thread-208614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:52:04.200 [INFO] [Thread-208614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:52:04.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:52:04.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:52:04.453 [DEBUG] [Thread-208616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:05.045 [DEBUG] [Thread-208614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:52:05.045 [DEBUG] [Thread-208614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:52:05.093 [DEBUG] [Thread-208614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:52:05.093 [DEBUG] [Thread-208614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:52:05.102 [DEBUG] [Thread-208614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:52:05.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:52:05.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:52:05.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:52:05.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:52:05.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:52:05.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:52:05.136 [DEBUG] [Thread-208614] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:52:11.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:11.043 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:19.507 [DEBUG] [Thread-208617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:34.546 [DEBUG] [Thread-208618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:52:35.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:52:35.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:52:35.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:52:37.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 52, 13), 20.74, 25.22, 0.0, 24.28, 21.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:52:37.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:52:13
2026-02-15T17:52:37.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:52:37.720 [DEBUG] [Thread-208619] [transport.py] [_log()] starting thread (client mode): 0xa57591b0
2026-02-15T17:52:37.720 [DEBUG] [Thread-208619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:52:37.740 [DEBUG] [Thread-208619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:52:37.740 [INFO] [Thread-208619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:52:37.741 [DEBUG] [Thread-208619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] client lang: <none>
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] server lang: <none>
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] kex follows: False
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] Compression: none
2026-02-15T17:52:37.742 [DEBUG] [Thread-208619] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:52:37.761 [DEBUG] [Thread-208619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:52:37.761 [DEBUG] [Thread-208619] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:52:37.762 [DEBUG] [Thread-208619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:52:37.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:52:37.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:52:37.764 [DEBUG] [Thread-208619] [transport.py] [_log()] userauth is OK
2026-02-15T17:52:37.764 [DEBUG] [Thread-208619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:52:37.764 [DEBUG] [Thread-208619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:52:37.764 [DEBUG] [Thread-208619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:52:37.764 [DEBUG] [Thread-208619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:52:37.783 [INFO] [Thread-208619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:52:37.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:52:38.416 [DEBUG] [Thread-208619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:52:38.416 [DEBUG] [Thread-208619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:52:38.417 [DEBUG] [Thread-208619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:52:38.457 [DEBUG] [Thread-208619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:52:38.458 [DEBUG] [Thread-208619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:52:38.461 [DEBUG] [Thread-208619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:52:38.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:52:38.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:52:38.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:52:38.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:52:38.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:52:38.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:52:38.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:52:38.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:52:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:52:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.661206 -999.00  +20.90  21.44     31   +3.40 1 1 1 1 1   887    0 17.12 -32.79 ----- 20.4 21.4 177.8 27.0 24.6 -29.1 24.4 -29.1 26.1 -26.9 26.5 -29.5
2026-02-15T17:52:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:52:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:52:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.661206
2026-02-15T17:52:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:52:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:52:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:52:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:52:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:52:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:52:13', tmtdew=20.74, humidity=25.22, cloud=0.0, wind=24.28, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:52:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:52:38.487 [DEBUG] [Thread-208619] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:52:38.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:52:38.583 [DEBUG] [Thread-208622] [transport.py] [_log()] starting thread (client mode): 0xa575b130
2026-02-15T17:52:38.583 [DEBUG] [Thread-208622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:52:38.598 [DEBUG] [Thread-208622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:52:38.598 [INFO] [Thread-208622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:52:38.606 [DEBUG] [Thread-208622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] client lang: <none>
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] server lang: <none>
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] kex follows: False
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] Compression: none
2026-02-15T17:52:38.607 [DEBUG] [Thread-208622] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:52:38.665 [DEBUG] [Thread-208622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:52:38.665 [DEBUG] [Thread-208622] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:52:38.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:52:38.667 [DEBUG] [Thread-208622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:52:38.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:52:38.721 [DEBUG] [Thread-208622] [transport.py] [_log()] userauth is OK
2026-02-15T17:52:38.722 [DEBUG] [Thread-208622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:52:38.722 [DEBUG] [Thread-208622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:52:38.722 [DEBUG] [Thread-208622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:52:38.722 [DEBUG] [Thread-208622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:52:38.741 [INFO] [Thread-208622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:52:38.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:52:38.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:52:39.561 [DEBUG] [Thread-208622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:52:39.561 [DEBUG] [Thread-208622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:52:39.609 [DEBUG] [Thread-208622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:52:39.610 [DEBUG] [Thread-208622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:52:39.619 [DEBUG] [Thread-208622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:52:39.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:52:39.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:52:39.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:52:39.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:52:39.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:52:39.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:52:39.656 [DEBUG] [Thread-208622] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:52:49.585 [DEBUG] [Thread-208624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:00.778 [DEBUG] [Thread-208625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:04.647 [DEBUG] [Thread-208626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:09.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:53:09.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:53:09.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:53:11.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:11.186 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 52, 48), 20.5, 25.45, 0.0, 24.68, 21.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:53:11.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:52:48
2026-02-15T17:53:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:53:12.050 [DEBUG] [Thread-208627] [transport.py] [_log()] starting thread (client mode): 0xa2d180a0
2026-02-15T17:53:12.050 [DEBUG] [Thread-208627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:53:12.071 [DEBUG] [Thread-208627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:53:12.071 [INFO] [Thread-208627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:53:12.074 [DEBUG] [Thread-208627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] client lang: <none>
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] server lang: <none>
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] kex follows: False
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:53:12.075 [DEBUG] [Thread-208627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:53:12.076 [DEBUG] [Thread-208627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:53:12.076 [DEBUG] [Thread-208627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:53:12.076 [DEBUG] [Thread-208627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:53:12.076 [DEBUG] [Thread-208627] [transport.py] [_log()] Compression: none
2026-02-15T17:53:12.076 [DEBUG] [Thread-208627] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:53:12.093 [DEBUG] [Thread-208627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:53:12.093 [DEBUG] [Thread-208627] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:53:12.094 [DEBUG] [Thread-208627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:53:12.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:53:12.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:53:12.095 [DEBUG] [Thread-208627] [transport.py] [_log()] userauth is OK
2026-02-15T17:53:12.096 [DEBUG] [Thread-208627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:53:12.096 [DEBUG] [Thread-208627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:53:12.096 [DEBUG] [Thread-208627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:53:12.096 [DEBUG] [Thread-208627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:53:12.120 [INFO] [Thread-208627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:53:12.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:53:12.795 [DEBUG] [Thread-208627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:53:12.795 [DEBUG] [Thread-208627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:53:12.796 [DEBUG] [Thread-208627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:53:12.836 [DEBUG] [Thread-208627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:53:12.836 [DEBUG] [Thread-208627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:53:12.838 [DEBUG] [Thread-208627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:53:12.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:53:12.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:53:12.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:53:12.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:53:12.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:53:12.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:53:12.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.661553 -999.00  +20.90  21.84     32   +3.70 1 1 1 1 1   887    0 16.86 -36.93 ----- 19.0 21.8 148.3 31.0 24.6 -29.1 24.5 -27.8 26.0 -27.0 26.5 -28.5
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.661553
2026-02-15T17:53:12.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:53:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:53:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:53:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:53:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:53:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:52:48', tmtdew=20.5, humidity=25.45, cloud=0.0, wind=24.68, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:52:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:53:12.855 [DEBUG] [Thread-208627] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:53:12.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:53:12.942 [DEBUG] [Thread-208630] [transport.py] [_log()] starting thread (client mode): 0xa57597e0
2026-02-15T17:53:12.942 [DEBUG] [Thread-208630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:53:12.956 [DEBUG] [Thread-208630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:53:12.956 [INFO] [Thread-208630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] client lang: <none>
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] server lang: <none>
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] kex follows: False
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] Compression: none
2026-02-15T17:53:12.964 [DEBUG] [Thread-208630] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:53:13.020 [DEBUG] [Thread-208630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:53:13.020 [DEBUG] [Thread-208630] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:53:13.021 [DEBUG] [Thread-208630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:53:13.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:53:13.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:53:13.076 [DEBUG] [Thread-208630] [transport.py] [_log()] userauth is OK
2026-02-15T17:53:13.076 [DEBUG] [Thread-208630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:53:13.076 [DEBUG] [Thread-208630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:53:13.076 [DEBUG] [Thread-208630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:53:13.076 [DEBUG] [Thread-208630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:53:13.099 [INFO] [Thread-208630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:53:13.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:53:13.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:53:13.935 [DEBUG] [Thread-208630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:53:13.935 [DEBUG] [Thread-208630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:53:13.983 [DEBUG] [Thread-208630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:53:13.983 [DEBUG] [Thread-208630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:53:13.992 [DEBUG] [Thread-208630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:53:14.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:53:14.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:53:14.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:53:14.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:53:14.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:53:14.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:53:14.026 [DEBUG] [Thread-208630] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:53:19.680 [DEBUG] [Thread-208632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:34.735 [DEBUG] [Thread-208633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:53:44.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:53:44.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:53:44.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:53:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 53, 23), 20.44, 25.55, 0.0, 22.66, 21.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:53:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:53:23
2026-02-15T17:53:46.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:53:46.435 [DEBUG] [Thread-208634] [transport.py] [_log()] starting thread (client mode): 0xa2d1af50
2026-02-15T17:53:46.435 [DEBUG] [Thread-208634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:53:46.455 [DEBUG] [Thread-208634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:53:46.455 [INFO] [Thread-208634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] client lang: <none>
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] server lang: <none>
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] kex follows: False
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:53:46.456 [DEBUG] [Thread-208634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:53:46.457 [DEBUG] [Thread-208634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:53:46.457 [DEBUG] [Thread-208634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:53:46.457 [DEBUG] [Thread-208634] [transport.py] [_log()] Compression: none
2026-02-15T17:53:46.457 [DEBUG] [Thread-208634] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:53:46.475 [DEBUG] [Thread-208634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:53:46.476 [DEBUG] [Thread-208634] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:53:46.476 [DEBUG] [Thread-208634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:53:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:53:46.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:53:46.479 [DEBUG] [Thread-208634] [transport.py] [_log()] userauth is OK
2026-02-15T17:53:46.479 [DEBUG] [Thread-208634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:53:46.479 [DEBUG] [Thread-208634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:53:46.479 [DEBUG] [Thread-208634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:53:46.479 [DEBUG] [Thread-208634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:53:46.504 [INFO] [Thread-208634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:53:46.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:53:47.090 [DEBUG] [Thread-208634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:53:47.091 [DEBUG] [Thread-208634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:53:47.091 [DEBUG] [Thread-208634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:53:47.132 [DEBUG] [Thread-208634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:53:47.132 [DEBUG] [Thread-208634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:53:47.135 [DEBUG] [Thread-208634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:53:47.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:53:47.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:53:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:53:47.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:53:47.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:53:47.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:53:47.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:53:47.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:53:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:53:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.661900 -999.00  +20.80  18.22     32   +3.80 1 1 1 1 1   887    0 16.92 -42.05 ----- 19.1 18.2 157.2 28.0 24.6 -28.9 24.5 -28.0 26.0 -26.8 26.4 -28.9
2026-02-15T17:53:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:53:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:53:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.661900
2026-02-15T17:53:47.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:53:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:53:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:53:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:53:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:53:47.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:53:23', tmtdew=20.44, humidity=25.55, cloud=0.0, wind=22.66, temperature=21.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:53:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:53:47.162 [DEBUG] [Thread-208634] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:53:47.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:53:47.259 [DEBUG] [Thread-208637] [transport.py] [_log()] starting thread (client mode): 0xa2d7a740
2026-02-15T17:53:47.259 [DEBUG] [Thread-208637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:53:47.277 [DEBUG] [Thread-208637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:53:47.278 [INFO] [Thread-208637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] client lang: <none>
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] server lang: <none>
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] kex follows: False
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:53:47.286 [DEBUG] [Thread-208637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:53:47.287 [DEBUG] [Thread-208637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:53:47.287 [DEBUG] [Thread-208637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:53:47.287 [DEBUG] [Thread-208637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:53:47.287 [DEBUG] [Thread-208637] [transport.py] [_log()] Compression: none
2026-02-15T17:53:47.287 [DEBUG] [Thread-208637] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:53:47.345 [DEBUG] [Thread-208637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:53:47.345 [DEBUG] [Thread-208637] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:53:47.346 [DEBUG] [Thread-208637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:53:47.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:53:47.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:53:47.401 [DEBUG] [Thread-208637] [transport.py] [_log()] userauth is OK
2026-02-15T17:53:47.401 [DEBUG] [Thread-208637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:53:47.401 [DEBUG] [Thread-208637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:53:47.401 [DEBUG] [Thread-208637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:53:47.401 [DEBUG] [Thread-208637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:53:47.420 [INFO] [Thread-208637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:53:47.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:53:47.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:53:48.286 [DEBUG] [Thread-208637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:53:48.287 [DEBUG] [Thread-208637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:53:48.335 [DEBUG] [Thread-208637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:53:48.335 [DEBUG] [Thread-208637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:53:48.344 [DEBUG] [Thread-208637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:53:48.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:53:48.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:53:48.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:53:48.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:53:48.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:53:48.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:53:48.385 [DEBUG] [Thread-208637] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:53:49.775 [DEBUG] [Thread-208639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:00.823 [DEBUG] [Thread-208640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:04.826 [DEBUG] [Thread-208641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:11.326 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:11.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:18.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:54:18.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:54:18.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:54:19.862 [DEBUG] [Thread-208642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 53, 59), 20.2, 26.2, 0.0, 26.73, 21.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:54:20.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:53:59
2026-02-15T17:54:20.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:54:20.762 [DEBUG] [Thread-208643] [transport.py] [_log()] starting thread (client mode): 0xa2d54d60
2026-02-15T17:54:20.762 [DEBUG] [Thread-208643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:54:20.781 [DEBUG] [Thread-208643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:54:20.781 [INFO] [Thread-208643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] client lang: <none>
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] server lang: <none>
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] kex follows: False
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] Compression: none
2026-02-15T17:54:20.785 [DEBUG] [Thread-208643] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:54:20.801 [DEBUG] [Thread-208643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:54:20.801 [DEBUG] [Thread-208643] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:54:20.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:54:20.802 [DEBUG] [Thread-208643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:54:20.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:54:20.804 [DEBUG] [Thread-208643] [transport.py] [_log()] userauth is OK
2026-02-15T17:54:20.805 [DEBUG] [Thread-208643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:54:20.805 [DEBUG] [Thread-208643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:54:20.805 [DEBUG] [Thread-208643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:54:20.805 [DEBUG] [Thread-208643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:54:20.831 [INFO] [Thread-208643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:54:20.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:54:21.466 [DEBUG] [Thread-208643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:54:21.466 [DEBUG] [Thread-208643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:54:21.467 [DEBUG] [Thread-208643] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:54:21.507 [DEBUG] [Thread-208643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:54:21.508 [DEBUG] [Thread-208643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:54:21.511 [DEBUG] [Thread-208643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:54:21.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:54:21.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:54:21.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:54:21.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:54:21.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:54:21.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:54:21.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:54:21.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:54:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:54:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.662247 -999.00  +20.70  20.17     32   +3.80 1 1 1 1 1   887    0 16.24 -49.17 ----- 21.9 20.2 147.2 23.5 24.4 -29.3 24.4 -28.5 25.9 -27.2 26.4 -29.3
2026-02-15T17:54:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:54:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:54:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.662247
2026-02-15T17:54:21.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:54:21.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:54:21.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:54:21.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:54:21.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:54:21.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:53:59', tmtdew=20.2, humidity=26.2, cloud=0.0, wind=26.73, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:53:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:54:21.537 [DEBUG] [Thread-208643] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:54:21.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:54:21.635 [DEBUG] [Thread-208646] [transport.py] [_log()] starting thread (client mode): 0xa57583a0
2026-02-15T17:54:21.635 [DEBUG] [Thread-208646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:54:21.654 [DEBUG] [Thread-208646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:54:21.654 [INFO] [Thread-208646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:54:21.664 [DEBUG] [Thread-208646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:54:21.665 [DEBUG] [Thread-208646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] client lang: <none>
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] server lang: <none>
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] kex follows: False
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:54:21.666 [DEBUG] [Thread-208646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:54:21.667 [DEBUG] [Thread-208646] [transport.py] [_log()] Compression: none
2026-02-15T17:54:21.667 [DEBUG] [Thread-208646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:54:21.724 [DEBUG] [Thread-208646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:54:21.725 [DEBUG] [Thread-208646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:54:21.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:54:21.726 [DEBUG] [Thread-208646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:54:21.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:54:21.781 [DEBUG] [Thread-208646] [transport.py] [_log()] userauth is OK
2026-02-15T17:54:21.781 [DEBUG] [Thread-208646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:54:21.781 [DEBUG] [Thread-208646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:54:21.782 [DEBUG] [Thread-208646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:54:21.782 [DEBUG] [Thread-208646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:54:21.801 [INFO] [Thread-208646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:54:21.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:54:21.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:54:22.643 [DEBUG] [Thread-208646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:54:22.643 [DEBUG] [Thread-208646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:54:22.691 [DEBUG] [Thread-208646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:54:22.692 [DEBUG] [Thread-208646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:54:22.701 [DEBUG] [Thread-208646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:54:22.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:54:22.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:54:22.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:54:22.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:54:22.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:54:22.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:54:22.739 [DEBUG] [Thread-208646] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:54:34.899 [DEBUG] [Thread-208648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:49.945 [DEBUG] [Thread-208649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:54:52.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:54:52.761 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:54:52.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:54:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 54, 34), 21.1, 24.73, 0.0, 31.93, 22.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:54:54.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:54:34
2026-02-15T17:54:55.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:54:55.404 [DEBUG] [Thread-208650] [transport.py] [_log()] starting thread (client mode): 0xa575a8f0
2026-02-15T17:54:55.404 [DEBUG] [Thread-208650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:54:55.426 [DEBUG] [Thread-208650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:54:55.426 [INFO] [Thread-208650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:54:55.427 [DEBUG] [Thread-208650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:54:55.427 [DEBUG] [Thread-208650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:54:55.427 [DEBUG] [Thread-208650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] client lang: <none>
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] server lang: <none>
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] kex follows: False
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] Compression: none
2026-02-15T17:54:55.428 [DEBUG] [Thread-208650] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:54:55.437 [DEBUG] [Thread-208650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:54:55.438 [DEBUG] [Thread-208650] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:54:55.438 [DEBUG] [Thread-208650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:54:55.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:54:55.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:54:55.440 [DEBUG] [Thread-208650] [transport.py] [_log()] userauth is OK
2026-02-15T17:54:55.440 [DEBUG] [Thread-208650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:54:55.441 [DEBUG] [Thread-208650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:54:55.441 [DEBUG] [Thread-208650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:54:55.441 [DEBUG] [Thread-208650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:54:55.468 [INFO] [Thread-208650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:54:55.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:54:56.122 [DEBUG] [Thread-208650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:54:56.122 [DEBUG] [Thread-208650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:54:56.123 [DEBUG] [Thread-208650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:54:56.163 [DEBUG] [Thread-208650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:54:56.163 [DEBUG] [Thread-208650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:54:56.167 [DEBUG] [Thread-208650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:54:56.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:54:56.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:54:56.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:54:56.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:54:56.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:54:56.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:54:56.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:54:56.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:54:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:54:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.662595 -999.00  +20.70  16.93     32   +3.80 1 1 1 1 1   887    0 16.20 -56.17 ----- 16.1 16.9 155.0 27.1 24.4 -29.2 24.4 -28.4 25.8 -27.3 26.2 -29.0
2026-02-15T17:54:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:54:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:54:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.662595
2026-02-15T17:54:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:54:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:54:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:54:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:54:56.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:54:56.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:54:34', tmtdew=21.1, humidity=24.73, cloud=0.0, wind=31.93, temperature=22.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:54:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:54:56.197 [DEBUG] [Thread-208650] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:54:56.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:54:56.293 [DEBUG] [Thread-208653] [transport.py] [_log()] starting thread (client mode): 0xa5758610
2026-02-15T17:54:56.294 [DEBUG] [Thread-208653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:54:56.309 [DEBUG] [Thread-208653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:54:56.309 [INFO] [Thread-208653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:54:56.317 [DEBUG] [Thread-208653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] client lang: <none>
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] server lang: <none>
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] kex follows: False
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:54:56.318 [DEBUG] [Thread-208653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:54:56.319 [DEBUG] [Thread-208653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:54:56.319 [DEBUG] [Thread-208653] [transport.py] [_log()] Compression: none
2026-02-15T17:54:56.319 [DEBUG] [Thread-208653] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:54:56.374 [DEBUG] [Thread-208653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:54:56.375 [DEBUG] [Thread-208653] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:54:56.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:54:56.376 [DEBUG] [Thread-208653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:54:56.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:54:56.430 [DEBUG] [Thread-208653] [transport.py] [_log()] userauth is OK
2026-02-15T17:54:56.431 [DEBUG] [Thread-208653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:54:56.431 [DEBUG] [Thread-208653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:54:56.431 [DEBUG] [Thread-208653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:54:56.431 [DEBUG] [Thread-208653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:54:56.450 [INFO] [Thread-208653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:54:56.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:54:56.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:54:57.282 [DEBUG] [Thread-208653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:54:57.282 [DEBUG] [Thread-208653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:54:57.330 [DEBUG] [Thread-208653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:54:57.331 [DEBUG] [Thread-208653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:54:57.340 [DEBUG] [Thread-208653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:54:57.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:54:57.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:54:57.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:54:57.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:54:57.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:54:57.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:54:57.380 [DEBUG] [Thread-208653] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:55:00.856 [DEBUG] [Thread-208655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:55:04.984 [DEBUG] [Thread-208656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:55:11.469 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:55:11.470 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:55:20.035 [DEBUG] [Thread-208657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:55:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:55:27.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:55:27.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:55:29.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 55, 9), 20.01, 26.66, 0.0, 29.18, 21.03, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:55:29.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:55:09
2026-02-15T17:55:29.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:55:29.722 [DEBUG] [Thread-208658] [transport.py] [_log()] starting thread (client mode): 0xa5759f30
2026-02-15T17:55:29.722 [DEBUG] [Thread-208658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:55:29.742 [DEBUG] [Thread-208658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:55:29.743 [INFO] [Thread-208658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:55:29.746 [DEBUG] [Thread-208658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:55:29.746 [DEBUG] [Thread-208658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:55:29.746 [DEBUG] [Thread-208658] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:55:29.746 [DEBUG] [Thread-208658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:55:29.746 [DEBUG] [Thread-208658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:55:29.746 [DEBUG] [Thread-208658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] client lang: <none>
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] server lang: <none>
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] kex follows: False
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] Compression: none
2026-02-15T17:55:29.747 [DEBUG] [Thread-208658] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:55:29.765 [DEBUG] [Thread-208658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:55:29.766 [DEBUG] [Thread-208658] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:55:29.766 [DEBUG] [Thread-208658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:55:29.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:55:29.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:55:29.769 [DEBUG] [Thread-208658] [transport.py] [_log()] userauth is OK
2026-02-15T17:55:29.769 [DEBUG] [Thread-208658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:55:29.769 [DEBUG] [Thread-208658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:55:29.769 [DEBUG] [Thread-208658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:55:29.769 [DEBUG] [Thread-208658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:55:29.806 [INFO] [Thread-208658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:55:29.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:55:30.427 [DEBUG] [Thread-208658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:55:30.427 [DEBUG] [Thread-208658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:55:30.428 [DEBUG] [Thread-208658] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:55:30.468 [DEBUG] [Thread-208658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:55:30.468 [DEBUG] [Thread-208658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:55:30.471 [DEBUG] [Thread-208658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:55:30.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:55:30.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:55:30.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:55:30.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:55:30.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:55:30.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:55:30.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:55:30.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:55:30.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:55:30.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.662942 -999.00  +20.90  16.33     32   +3.80 1 1 1 1 1   887    0 16.29 -58.59 ----- 16.4 16.3 158.6 21.7 24.4 -28.9 24.4 -27.8 25.9 -26.4 26.3 -28.5
2026-02-15T17:55:30.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:55:30.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:55:30.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.662942
2026-02-15T17:55:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:55:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:55:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:55:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:55:30.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:55:30.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:55:09', tmtdew=20.01, humidity=26.66, cloud=0.0, wind=29.18, temperature=21.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:54:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:55:30.497 [DEBUG] [Thread-208658] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:55:30.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:55:30.596 [DEBUG] [Thread-208661] [transport.py] [_log()] starting thread (client mode): 0xa2dc1630
2026-02-15T17:55:30.596 [DEBUG] [Thread-208661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:55:30.610 [DEBUG] [Thread-208661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:55:30.610 [INFO] [Thread-208661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:55:30.618 [DEBUG] [Thread-208661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:55:30.618 [DEBUG] [Thread-208661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:55:30.619 [DEBUG] [Thread-208661] [transport.py] [_log()] client lang: <none>
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] server lang: <none>
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] kex follows: False
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:55:30.620 [DEBUG] [Thread-208661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:55:30.621 [DEBUG] [Thread-208661] [transport.py] [_log()] Compression: none
2026-02-15T17:55:30.621 [DEBUG] [Thread-208661] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:55:30.677 [DEBUG] [Thread-208661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:55:30.677 [DEBUG] [Thread-208661] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:55:30.678 [DEBUG] [Thread-208661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:55:30.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:55:30.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:55:30.736 [DEBUG] [Thread-208661] [transport.py] [_log()] userauth is OK
2026-02-15T17:55:30.737 [DEBUG] [Thread-208661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:55:30.737 [DEBUG] [Thread-208661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:55:30.737 [DEBUG] [Thread-208661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:55:30.737 [DEBUG] [Thread-208661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:55:30.756 [INFO] [Thread-208661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:55:30.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:55:30.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:55:31.565 [DEBUG] [Thread-208661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:55:31.566 [DEBUG] [Thread-208661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:55:31.613 [DEBUG] [Thread-208661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:55:31.614 [DEBUG] [Thread-208661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:55:31.623 [DEBUG] [Thread-208661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:55:31.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:55:31.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:55:31.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:55:31.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:55:31.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:55:31.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:55:31.659 [DEBUG] [Thread-208661] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:55:35.069 [DEBUG] [Thread-208663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:55:50.122 [DEBUG] [Thread-208664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:00.891 [DEBUG] [Thread-208665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:56:01.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:56:01.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:56:04.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 55, 44), 20.1, 26.51, 0.0, 25.44, 21.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:56:04.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:55:44
2026-02-15T17:56:04.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:56:04.688 [DEBUG] [Thread-208666] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T17:56:04.688 [DEBUG] [Thread-208666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:56:04.709 [DEBUG] [Thread-208666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:56:04.709 [INFO] [Thread-208666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:56:04.712 [DEBUG] [Thread-208666] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:56:04.712 [DEBUG] [Thread-208666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:56:04.712 [DEBUG] [Thread-208666] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] client lang: <none>
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] server lang: <none>
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] kex follows: False
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] Compression: none
2026-02-15T17:56:04.713 [DEBUG] [Thread-208666] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:56:04.730 [DEBUG] [Thread-208666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:56:04.731 [DEBUG] [Thread-208666] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:56:04.731 [DEBUG] [Thread-208666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:56:04.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:56:04.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:56:04.733 [DEBUG] [Thread-208666] [transport.py] [_log()] userauth is OK
2026-02-15T17:56:04.733 [DEBUG] [Thread-208666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:56:04.734 [DEBUG] [Thread-208666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:56:04.734 [DEBUG] [Thread-208666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:56:04.734 [DEBUG] [Thread-208666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:56:04.752 [INFO] [Thread-208666] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:56:04.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:56:05.161 [DEBUG] [Thread-208668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:06.872 [DEBUG] [Thread-208666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:56:06.872 [DEBUG] [Thread-208666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:56:06.873 [DEBUG] [Thread-208666] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:56:06.914 [DEBUG] [Thread-208666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:56:06.914 [DEBUG] [Thread-208666] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:56:06.916 [DEBUG] [Thread-208666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:56:06.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:56:06.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:56:06.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:56:06.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:56:06.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:56:06.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:56:06.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.663636 -999.00  +21.00  17.19     32   +3.70 1 1 1 1 1   887    0 15.97 -70.65 ----- 16.6 17.2 142.0 26.9 24.4 -28.3 24.4 -27.3 25.9 -26.9 26.3 -28.4
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.663636
2026-02-15T17:56:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:56:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:56:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:56:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:56:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:56:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:55:44', tmtdew=20.1, humidity=26.51, cloud=0.0, wind=25.44, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:55:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:56:06.935 [DEBUG] [Thread-208666] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:56:07.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:56:07.020 [DEBUG] [Thread-208670] [transport.py] [_log()] starting thread (client mode): 0xa2d540d0
2026-02-15T17:56:07.021 [DEBUG] [Thread-208670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:56:07.035 [DEBUG] [Thread-208670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:56:07.035 [INFO] [Thread-208670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:56:07.043 [DEBUG] [Thread-208670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:56:07.043 [DEBUG] [Thread-208670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:56:07.043 [DEBUG] [Thread-208670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:56:07.043 [DEBUG] [Thread-208670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:07.043 [DEBUG] [Thread-208670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] client lang: <none>
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] server lang: <none>
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] kex follows: False
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] Compression: none
2026-02-15T17:56:07.044 [DEBUG] [Thread-208670] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:56:07.102 [DEBUG] [Thread-208670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:56:07.103 [DEBUG] [Thread-208670] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:56:07.104 [DEBUG] [Thread-208670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:56:07.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:56:07.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:56:07.164 [DEBUG] [Thread-208670] [transport.py] [_log()] userauth is OK
2026-02-15T17:56:07.164 [DEBUG] [Thread-208670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:56:07.164 [DEBUG] [Thread-208670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:56:07.164 [DEBUG] [Thread-208670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:56:07.164 [DEBUG] [Thread-208670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:56:07.190 [INFO] [Thread-208670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:56:07.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:56:07.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:56:08.040 [DEBUG] [Thread-208670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:56:08.040 [DEBUG] [Thread-208670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:56:08.088 [DEBUG] [Thread-208670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:56:08.089 [DEBUG] [Thread-208670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:56:08.098 [DEBUG] [Thread-208670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:56:08.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:56:08.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:56:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:56:08.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:56:08.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:56:08.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:56:08.138 [DEBUG] [Thread-208670] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:56:11.613 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:11.614 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:20.202 [DEBUG] [Thread-208672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:35.254 [DEBUG] [Thread-208673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:56:38.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:56:38.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:56:38.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:56:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 56, 20), 20.18, 26.38, 0.0, 28.51, 21.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:56:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:56:20
2026-02-15T17:56:40.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:56:40.828 [DEBUG] [Thread-208674] [transport.py] [_log()] starting thread (client mode): 0xa57d6ef0
2026-02-15T17:56:40.829 [DEBUG] [Thread-208674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:56:40.849 [DEBUG] [Thread-208674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:56:40.849 [INFO] [Thread-208674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:56:40.852 [DEBUG] [Thread-208674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:56:40.852 [DEBUG] [Thread-208674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:56:40.852 [DEBUG] [Thread-208674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:56:40.852 [DEBUG] [Thread-208674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] client lang: <none>
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] server lang: <none>
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] kex follows: False
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] Compression: none
2026-02-15T17:56:40.853 [DEBUG] [Thread-208674] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:56:40.874 [DEBUG] [Thread-208674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:56:40.874 [DEBUG] [Thread-208674] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:56:40.875 [DEBUG] [Thread-208674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:56:40.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:56:40.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:56:40.877 [DEBUG] [Thread-208674] [transport.py] [_log()] userauth is OK
2026-02-15T17:56:40.877 [DEBUG] [Thread-208674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:56:40.877 [DEBUG] [Thread-208674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:56:40.877 [DEBUG] [Thread-208674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:56:40.878 [DEBUG] [Thread-208674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:56:40.901 [INFO] [Thread-208674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:56:40.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:56:41.541 [DEBUG] [Thread-208674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:56:41.542 [DEBUG] [Thread-208674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:56:41.542 [DEBUG] [Thread-208674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:56:41.582 [DEBUG] [Thread-208674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:56:41.582 [DEBUG] [Thread-208674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:56:41.586 [DEBUG] [Thread-208674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:56:41.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:56:41.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:56:41.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:56:41.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:56:41.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:56:41.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:56:41.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:56:41.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:56:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:56:41.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.663984 -999.00  +20.80  20.76     32   +3.50 1 1 1 1 1   887    0 15.80 -73.53 ----- 20.2 20.8 145.2 29.1 24.4 -29.2 24.4 -28.2 25.8 -27.7 26.2 -29.4
2026-02-15T17:56:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:56:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:56:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.663984
2026-02-15T17:56:41.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:56:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:56:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:56:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:56:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:56:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:56:20', tmtdew=20.18, humidity=26.38, cloud=0.0, wind=28.51, temperature=21.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:56:08.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:56:41.610 [DEBUG] [Thread-208674] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:56:41.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:56:41.717 [DEBUG] [Thread-208677] [transport.py] [_log()] starting thread (client mode): 0xa57d5fc0
2026-02-15T17:56:41.717 [DEBUG] [Thread-208677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:56:41.731 [DEBUG] [Thread-208677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:56:41.731 [INFO] [Thread-208677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] client lang: <none>
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] server lang: <none>
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] kex follows: False
2026-02-15T17:56:41.739 [DEBUG] [Thread-208677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:56:41.740 [DEBUG] [Thread-208677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:56:41.740 [DEBUG] [Thread-208677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:56:41.740 [DEBUG] [Thread-208677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:56:41.740 [DEBUG] [Thread-208677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:56:41.740 [DEBUG] [Thread-208677] [transport.py] [_log()] Compression: none
2026-02-15T17:56:41.740 [DEBUG] [Thread-208677] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:56:41.796 [DEBUG] [Thread-208677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:56:41.796 [DEBUG] [Thread-208677] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:56:41.797 [DEBUG] [Thread-208677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:56:41.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:56:41.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:56:41.856 [DEBUG] [Thread-208677] [transport.py] [_log()] userauth is OK
2026-02-15T17:56:41.856 [DEBUG] [Thread-208677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:56:41.857 [DEBUG] [Thread-208677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:56:41.857 [DEBUG] [Thread-208677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:56:41.857 [DEBUG] [Thread-208677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:56:41.876 [INFO] [Thread-208677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:56:41.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:56:41.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:56:42.699 [DEBUG] [Thread-208677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:56:42.700 [DEBUG] [Thread-208677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:56:42.748 [DEBUG] [Thread-208677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:56:42.748 [DEBUG] [Thread-208677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:56:42.758 [DEBUG] [Thread-208677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:56:42.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:56:42.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:56:42.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:56:42.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:56:42.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:56:42.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:56:42.806 [DEBUG] [Thread-208677] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:56:50.292 [DEBUG] [Thread-208679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:00.948 [DEBUG] [Thread-208680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:05.352 [DEBUG] [Thread-208681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:11.770 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:11.771 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:12.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:57:12.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:57:12.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:57:14.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 56, 55), 20.05, 26.38, 0.0, 23.7, 20.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:57:14.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:56:55
2026-02-15T17:57:15.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:57:15.233 [DEBUG] [Thread-208682] [transport.py] [_log()] starting thread (client mode): 0xa2d56380
2026-02-15T17:57:15.233 [DEBUG] [Thread-208682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:57:15.254 [DEBUG] [Thread-208682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:57:15.255 [INFO] [Thread-208682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] client lang: <none>
2026-02-15T17:57:15.258 [DEBUG] [Thread-208682] [transport.py] [_log()] server lang: <none>
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] kex follows: False
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] Compression: none
2026-02-15T17:57:15.259 [DEBUG] [Thread-208682] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:57:15.276 [DEBUG] [Thread-208682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:57:15.276 [DEBUG] [Thread-208682] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:57:15.277 [DEBUG] [Thread-208682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:57:15.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:57:15.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:57:15.279 [DEBUG] [Thread-208682] [transport.py] [_log()] userauth is OK
2026-02-15T17:57:15.279 [DEBUG] [Thread-208682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:57:15.280 [DEBUG] [Thread-208682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:57:15.280 [DEBUG] [Thread-208682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:57:15.280 [DEBUG] [Thread-208682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:57:15.305 [INFO] [Thread-208682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:57:15.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:57:15.955 [DEBUG] [Thread-208682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:57:15.955 [DEBUG] [Thread-208682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:57:15.955 [DEBUG] [Thread-208682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:57:15.996 [DEBUG] [Thread-208682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:57:15.997 [DEBUG] [Thread-208682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:57:16.000 [DEBUG] [Thread-208682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:57:16.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:57:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:57:16.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:57:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:57:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:57:16.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:57:16.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:57:16.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:57:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:57:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.664331 -999.00  +20.80  24.56     31   +3.40 1 1 1 1 1   887    0 16.50 -67.22 ----- 19.6 24.6 142.0 30.2 24.4 -29.3 24.4 -28.3 25.8 -27.1 26.2 -29.4
2026-02-15T17:57:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:57:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:57:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.664331
2026-02-15T17:57:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:57:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:57:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:57:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:57:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:57:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:56:55', tmtdew=20.05, humidity=26.38, cloud=0.0, wind=23.7, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:56:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:57:16.027 [DEBUG] [Thread-208682] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:57:16.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:57:16.123 [DEBUG] [Thread-208685] [transport.py] [_log()] starting thread (client mode): 0xa2d57460
2026-02-15T17:57:16.123 [DEBUG] [Thread-208685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:57:16.138 [DEBUG] [Thread-208685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:57:16.138 [INFO] [Thread-208685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:57:16.145 [DEBUG] [Thread-208685] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:16.146 [DEBUG] [Thread-208685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] client lang: <none>
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] server lang: <none>
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] kex follows: False
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:57:16.147 [DEBUG] [Thread-208685] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:57:16.148 [DEBUG] [Thread-208685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:57:16.149 [DEBUG] [Thread-208685] [transport.py] [_log()] Compression: none
2026-02-15T17:57:16.149 [DEBUG] [Thread-208685] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:57:16.208 [DEBUG] [Thread-208685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:57:16.209 [DEBUG] [Thread-208685] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:57:16.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:57:16.210 [DEBUG] [Thread-208685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:57:16.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:57:16.265 [DEBUG] [Thread-208685] [transport.py] [_log()] userauth is OK
2026-02-15T17:57:16.265 [DEBUG] [Thread-208685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:57:16.265 [DEBUG] [Thread-208685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:57:16.265 [DEBUG] [Thread-208685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:57:16.266 [DEBUG] [Thread-208685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:57:16.284 [INFO] [Thread-208685] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:57:16.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:57:16.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:57:17.113 [DEBUG] [Thread-208685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:57:17.113 [DEBUG] [Thread-208685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:57:17.161 [DEBUG] [Thread-208685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:57:17.162 [DEBUG] [Thread-208685] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:57:17.170 [DEBUG] [Thread-208685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:57:17.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:57:17.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:57:17.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:57:17.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:57:17.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:57:17.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:57:17.211 [DEBUG] [Thread-208685] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:57:20.389 [DEBUG] [Thread-208687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:35.445 [DEBUG] [Thread-208688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:47.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:57:47.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:57:47.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:57:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 57, 30), 20.02, 26.45, 0.0, 22.3, 20.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:57:49.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:57:30
2026-02-15T17:57:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:57:49.612 [DEBUG] [Thread-208689] [transport.py] [_log()] starting thread (client mode): 0xa2d18940
2026-02-15T17:57:49.612 [DEBUG] [Thread-208689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:57:49.632 [DEBUG] [Thread-208689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:57:49.632 [INFO] [Thread-208689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:49.633 [DEBUG] [Thread-208689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] client lang: <none>
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] server lang: <none>
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] kex follows: False
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] Compression: none
2026-02-15T17:57:49.634 [DEBUG] [Thread-208689] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:57:49.653 [DEBUG] [Thread-208689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:57:49.654 [DEBUG] [Thread-208689] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:57:49.655 [DEBUG] [Thread-208689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:57:49.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:57:49.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:57:49.657 [DEBUG] [Thread-208689] [transport.py] [_log()] userauth is OK
2026-02-15T17:57:49.658 [DEBUG] [Thread-208689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:57:49.658 [DEBUG] [Thread-208689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:57:49.658 [DEBUG] [Thread-208689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:57:49.658 [DEBUG] [Thread-208689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:57:49.695 [INFO] [Thread-208689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:57:49.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:57:50.291 [DEBUG] [Thread-208689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:57:50.291 [DEBUG] [Thread-208689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:57:50.292 [DEBUG] [Thread-208689] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:57:50.332 [DEBUG] [Thread-208689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:57:50.332 [DEBUG] [Thread-208689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:57:50.336 [DEBUG] [Thread-208689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:57:50.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:57:50.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:57:50.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:57:50.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:57:50.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:57:50.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:57:50.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:57:50.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:57:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:57:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.664678 -999.00  +20.70  17.19     32   +3.40 1 1 1 1 1   887    0 15.63 -65.72 ----- 21.8 17.2 147.4 28.0 24.3 -29.1 24.4 -27.9 25.8 -26.7 26.2 -28.8
2026-02-15T17:57:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:57:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:57:50.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.664678
2026-02-15T17:57:50.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:57:50.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:57:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:57:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:57:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:57:50.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:57:30', tmtdew=20.02, humidity=26.45, cloud=0.0, wind=22.3, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:57:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:57:50.361 [DEBUG] [Thread-208689] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:57:50.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:57:50.457 [DEBUG] [Thread-208692] [transport.py] [_log()] starting thread (client mode): 0xa575bf10
2026-02-15T17:57:50.457 [DEBUG] [Thread-208692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:57:50.472 [DEBUG] [Thread-208692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:57:50.472 [INFO] [Thread-208692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:57:50.479 [DEBUG] [Thread-208692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] client lang: <none>
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] server lang: <none>
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] kex follows: False
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] Compression: none
2026-02-15T17:57:50.480 [DEBUG] [Thread-208692] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:57:50.482 [DEBUG] [Thread-208694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:57:50.539 [DEBUG] [Thread-208692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:57:50.539 [DEBUG] [Thread-208692] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:57:50.540 [DEBUG] [Thread-208692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:57:50.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:57:50.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:57:50.595 [DEBUG] [Thread-208692] [transport.py] [_log()] userauth is OK
2026-02-15T17:57:50.595 [DEBUG] [Thread-208692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:57:50.595 [DEBUG] [Thread-208692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:57:50.595 [DEBUG] [Thread-208692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:57:50.595 [DEBUG] [Thread-208692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:57:50.614 [INFO] [Thread-208692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:57:50.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:57:50.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:57:51.485 [DEBUG] [Thread-208692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:57:51.485 [DEBUG] [Thread-208692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:57:51.533 [DEBUG] [Thread-208692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:57:51.533 [DEBUG] [Thread-208692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:57:51.542 [DEBUG] [Thread-208692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:57:51.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:57:51.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:57: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') -> 00000000
2026-02-15T17:57:51.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:57:51.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:57:51.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:57:51.578 [DEBUG] [Thread-208692] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:58:00.988 [DEBUG] [Thread-208695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:05.524 [DEBUG] [Thread-208696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:11.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:11.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:20.562 [DEBUG] [Thread-208697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:21.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:58:21.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:58:21.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:58:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 58, 6), 20.09, 26.33, 0.0, 23.2, 20.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:58:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:58:06
2026-02-15T17:58:23.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:58:23.946 [DEBUG] [Thread-208698] [transport.py] [_log()] starting thread (client mode): 0xa57d6bf0
2026-02-15T17:58:23.946 [DEBUG] [Thread-208698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:58:23.967 [DEBUG] [Thread-208698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:58:23.967 [INFO] [Thread-208698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] client lang: <none>
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] server lang: <none>
2026-02-15T17:58:23.970 [DEBUG] [Thread-208698] [transport.py] [_log()] kex follows: False
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] Compression: none
2026-02-15T17:58:23.971 [DEBUG] [Thread-208698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:58:23.986 [DEBUG] [Thread-208698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:58:23.986 [DEBUG] [Thread-208698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:58:23.986 [DEBUG] [Thread-208698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:58:23.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:58:23.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:58:23.988 [DEBUG] [Thread-208698] [transport.py] [_log()] userauth is OK
2026-02-15T17:58:23.988 [DEBUG] [Thread-208698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:58:23.988 [DEBUG] [Thread-208698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:58:23.988 [DEBUG] [Thread-208698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:58:23.988 [DEBUG] [Thread-208698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:58:23.997 [INFO] [Thread-208698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:58:23.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:58:24.643 [DEBUG] [Thread-208698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:58:24.643 [DEBUG] [Thread-208698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:58:24.644 [DEBUG] [Thread-208698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:58:24.684 [DEBUG] [Thread-208698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:58:24.684 [DEBUG] [Thread-208698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:58:24.687 [DEBUG] [Thread-208698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:58:24.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:58:24.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:58:24.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:58:24.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:58:24.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:58:24.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:58:24.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:58:24.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:58:24.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:58:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.665025 -999.00  +20.70  14.90     32   +3.50 1 1 1 1 1   887    0 16.17 -68.05 ----- 24.2 14.9 151.6 23.6 24.2 -29.0 24.4 -28.7 25.7 -27.1 26.1 -28.8
2026-02-15T17:58:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:58:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:58:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.665025
2026-02-15T17:58:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:58:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:58:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:58:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:58:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:58:24.712 [DEBUG] [Thread-208698] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:58:24.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:58:06', tmtdew=20.09, humidity=26.33, cloud=0.0, wind=23.2, temperature=20.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:57:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:58:24.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:58:24.809 [DEBUG] [Thread-208701] [transport.py] [_log()] starting thread (client mode): 0xa5741fc0
2026-02-15T17:58:24.809 [DEBUG] [Thread-208701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:58:24.830 [DEBUG] [Thread-208701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:58:24.830 [INFO] [Thread-208701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:58:24.844 [DEBUG] [Thread-208701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:58:24.844 [DEBUG] [Thread-208701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:58:24.844 [DEBUG] [Thread-208701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:58:24.844 [DEBUG] [Thread-208701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] client lang: <none>
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] server lang: <none>
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] kex follows: False
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] Compression: none
2026-02-15T17:58:24.845 [DEBUG] [Thread-208701] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:58:24.906 [DEBUG] [Thread-208701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:58:24.906 [DEBUG] [Thread-208701] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:58:24.907 [DEBUG] [Thread-208701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:58:24.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:58:24.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:58:24.970 [DEBUG] [Thread-208701] [transport.py] [_log()] userauth is OK
2026-02-15T17:58:24.970 [DEBUG] [Thread-208701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:58:24.971 [DEBUG] [Thread-208701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:58:24.971 [DEBUG] [Thread-208701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:58:24.971 [DEBUG] [Thread-208701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:58:24.993 [INFO] [Thread-208701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:58:24.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:58:24.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:58:25.902 [DEBUG] [Thread-208701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:58:25.902 [DEBUG] [Thread-208701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:58:25.953 [DEBUG] [Thread-208701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:58:25.953 [DEBUG] [Thread-208701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:58:25.962 [DEBUG] [Thread-208701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:58:25.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:58: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')
2026-02-15T17:58:25.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:58:25.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:58:25.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:58:25.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:58:25.999 [DEBUG] [Thread-208701] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:58:35.601 [DEBUG] [Thread-208703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:50.661 [DEBUG] [Thread-208704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:58:56.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:58:56.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:58:56.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:58:58.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 58, 41), 21.06, 24.66, 0.0, 24.56, 21.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:58:58.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:58:41
2026-02-15T17:58:58.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:58:58.678 [DEBUG] [Thread-208705] [transport.py] [_log()] starting thread (client mode): 0xa5759060
2026-02-15T17:58:58.678 [DEBUG] [Thread-208705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:58:58.699 [DEBUG] [Thread-208705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:58:58.699 [INFO] [Thread-208705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] client lang: <none>
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] server lang: <none>
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] kex follows: False
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:58:58.702 [DEBUG] [Thread-208705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:58:58.703 [DEBUG] [Thread-208705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:58:58.703 [DEBUG] [Thread-208705] [transport.py] [_log()] Compression: none
2026-02-15T17:58:58.703 [DEBUG] [Thread-208705] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:58:58.722 [DEBUG] [Thread-208705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:58:58.723 [DEBUG] [Thread-208705] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:58:58.723 [DEBUG] [Thread-208705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:58:58.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:58:58.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:58:58.725 [DEBUG] [Thread-208705] [transport.py] [_log()] userauth is OK
2026-02-15T17:58:58.726 [DEBUG] [Thread-208705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:58:58.726 [DEBUG] [Thread-208705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:58:58.726 [DEBUG] [Thread-208705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:58:58.726 [DEBUG] [Thread-208705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:58:58.749 [INFO] [Thread-208705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:58:58.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:58:59.473 [DEBUG] [Thread-208705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:58:59.473 [DEBUG] [Thread-208705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:58:59.474 [DEBUG] [Thread-208705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:58:59.514 [DEBUG] [Thread-208705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:58:59.515 [DEBUG] [Thread-208705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:58:59.517 [DEBUG] [Thread-208705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:58:59.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:58:59.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:58:59.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:58:59.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:58:59.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:58:59.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:58:59.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:58:59.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:58:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:58:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.665372 -999.00  +20.70  17.47     32   +3.50 1 1 1 1 1   887    0 16.00 -70.69 ----- 20.1 17.5 139.6 30.0 24.2 -28.8 24.3 -28.2 25.7 -26.6 26.1 -28.6
2026-02-15T17:58:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:58:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:58:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.665372
2026-02-15T17:58:59.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:58:59.541 [DEBUG] [Thread-208705] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:58:59.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:58:59.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:58:59.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:58:59.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:58:59.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:58:41', tmtdew=21.06, humidity=24.66, cloud=0.0, wind=24.56, temperature=21.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:58:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:58:59.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:58:59.638 [DEBUG] [Thread-208708] [transport.py] [_log()] starting thread (client mode): 0xa5743520
2026-02-15T17:58:59.639 [DEBUG] [Thread-208708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:58:59.655 [DEBUG] [Thread-208708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:58:59.655 [INFO] [Thread-208708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:58:59.662 [DEBUG] [Thread-208708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] client lang: <none>
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] server lang: <none>
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] kex follows: False
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:58:59.663 [DEBUG] [Thread-208708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:58:59.664 [DEBUG] [Thread-208708] [transport.py] [_log()] Compression: none
2026-02-15T17:58:59.664 [DEBUG] [Thread-208708] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:58:59.722 [DEBUG] [Thread-208708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:58:59.723 [DEBUG] [Thread-208708] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:58:59.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:58:59.724 [DEBUG] [Thread-208708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:58:59.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:58:59.778 [DEBUG] [Thread-208708] [transport.py] [_log()] userauth is OK
2026-02-15T17:58:59.778 [DEBUG] [Thread-208708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:58:59.778 [DEBUG] [Thread-208708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:58:59.778 [DEBUG] [Thread-208708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:58:59.778 [DEBUG] [Thread-208708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:58:59.797 [INFO] [Thread-208708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:58:59.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:58:59.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:59:00.640 [DEBUG] [Thread-208708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:59:00.640 [DEBUG] [Thread-208708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:59:00.688 [DEBUG] [Thread-208708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:59:00.689 [DEBUG] [Thread-208708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:59:00.698 [DEBUG] [Thread-208708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:59:00.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:59:00.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:59:00.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:59:00.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:59:00.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:59:00.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:59:00.735 [DEBUG] [Thread-208708] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:59:01.035 [DEBUG] [Thread-208710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:59:05.696 [DEBUG] [Thread-208711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:59:12.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:59:12.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:59:20.750 [DEBUG] [Thread-208712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:59:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T17:59:30.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T17:59:30.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T17:59:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 59, 16), 20.16, 26.11, 0.0, 21.67, 20.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T17:59:32.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:59:16
2026-02-15T17:59:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T17:59:33.156 [DEBUG] [Thread-208713] [transport.py] [_log()] starting thread (client mode): 0xa2d56530
2026-02-15T17:59:33.156 [DEBUG] [Thread-208713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:59:33.176 [DEBUG] [Thread-208713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T17:59:33.176 [INFO] [Thread-208713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:59:33.179 [DEBUG] [Thread-208713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] client lang: <none>
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] server lang: <none>
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] kex follows: False
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] Compression: none
2026-02-15T17:59:33.180 [DEBUG] [Thread-208713] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:59:33.198 [DEBUG] [Thread-208713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:59:33.199 [DEBUG] [Thread-208713] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:59:33.200 [DEBUG] [Thread-208713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T17:59:33.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T17:59:33.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:59:33.202 [DEBUG] [Thread-208713] [transport.py] [_log()] userauth is OK
2026-02-15T17:59:33.202 [DEBUG] [Thread-208713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:59:33.203 [DEBUG] [Thread-208713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:59:33.203 [DEBUG] [Thread-208713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T17:59:33.203 [DEBUG] [Thread-208713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:59:33.227 [INFO] [Thread-208713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:59:33.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:59:33.861 [DEBUG] [Thread-208713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:59:33.861 [DEBUG] [Thread-208713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:59:33.861 [DEBUG] [Thread-208713] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T17:59:33.902 [DEBUG] [Thread-208713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:59:33.902 [DEBUG] [Thread-208713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:59:33.905 [DEBUG] [Thread-208713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:59:33.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:59:33.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T17:59:33.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T17:59:33.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T17:59:33.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:59:33.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T17:59:33.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:59:33.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:59:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T17:59:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.665720 -999.00  +20.70  19.35     32   +3.60 1 1 1 1 1   887    0 15.63 -79.24 ----- 21.3 19.4 162.5 28.1 24.2 -28.7 24.3 -28.4 25.7 -26.3 26.1 -28.8
2026-02-15T17:59:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T17:59:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T17:59:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.665720
2026-02-15T17:59:33.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T17:59:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T17:59:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T17:59:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T17:59:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T17:59:33.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:59:16', tmtdew=20.16, humidity=26.11, cloud=0.0, wind=21.67, temperature=20.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:58:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T17:59:33.931 [DEBUG] [Thread-208713] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:59:34.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T17:59:34.026 [DEBUG] [Thread-208716] [transport.py] [_log()] starting thread (client mode): 0xa57d6f80
2026-02-15T17:59:34.026 [DEBUG] [Thread-208716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T17:59:34.040 [DEBUG] [Thread-208716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T17:59:34.040 [INFO] [Thread-208716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] client lang: <none>
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] server lang: <none>
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] kex follows: False
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T17:59:34.048 [DEBUG] [Thread-208716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T17:59:34.049 [DEBUG] [Thread-208716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T17:59:34.049 [DEBUG] [Thread-208716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T17:59:34.049 [DEBUG] [Thread-208716] [transport.py] [_log()] Compression: none
2026-02-15T17:59:34.049 [DEBUG] [Thread-208716] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T17:59:34.107 [DEBUG] [Thread-208716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T17:59:34.108 [DEBUG] [Thread-208716] [transport.py] [_log()] Switch to new keys ...
2026-02-15T17:59:34.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T17:59:34.109 [DEBUG] [Thread-208716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T17:59:34.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T17:59:34.163 [DEBUG] [Thread-208716] [transport.py] [_log()] userauth is OK
2026-02-15T17:59:34.163 [DEBUG] [Thread-208716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T17:59:34.164 [DEBUG] [Thread-208716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T17:59:34.164 [DEBUG] [Thread-208716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T17:59:34.164 [DEBUG] [Thread-208716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T17:59:34.183 [INFO] [Thread-208716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T17:59:34.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T17:59:34.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T17:59:34.997 [DEBUG] [Thread-208716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T17:59:34.998 [DEBUG] [Thread-208716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T17:59:35.045 [DEBUG] [Thread-208716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T17:59:35.046 [DEBUG] [Thread-208716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T17:59:35.055 [DEBUG] [Thread-208716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T17:59:35.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T17:59:35.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T17:59:35.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T17:59:35.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T17:59:35.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T17:59:35.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T17:59:35.094 [DEBUG] [Thread-208716] [transport.py] [_log()] EOF in transport thread
2026-02-15T17:59:35.788 [DEBUG] [Thread-208718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T17:59:50.834 [DEBUG] [Thread-208719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:01.084 [DEBUG] [Thread-208720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:00:05.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:00:05.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:00:05.870 [DEBUG] [Thread-208721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:06.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 17, 59, 52), 20.23, 26.01, 0.0, 29.06, 21.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:00:06.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 17:59:52
2026-02-15T18:00:07.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:00:07.452 [DEBUG] [Thread-208722] [transport.py] [_log()] starting thread (client mode): 0xa5758220
2026-02-15T18:00:07.452 [DEBUG] [Thread-208722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:00:07.472 [DEBUG] [Thread-208722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:00:07.472 [INFO] [Thread-208722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:07.475 [DEBUG] [Thread-208722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] client lang: <none>
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] server lang: <none>
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] kex follows: False
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] Compression: none
2026-02-15T18:00:07.476 [DEBUG] [Thread-208722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:00:07.493 [DEBUG] [Thread-208722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:00:07.494 [DEBUG] [Thread-208722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:00:07.494 [DEBUG] [Thread-208722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:00:07.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:00:07.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:00:07.496 [DEBUG] [Thread-208722] [transport.py] [_log()] userauth is OK
2026-02-15T18:00:07.496 [DEBUG] [Thread-208722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:00:07.496 [DEBUG] [Thread-208722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:00:07.497 [DEBUG] [Thread-208722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:00:07.497 [DEBUG] [Thread-208722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:00:07.516 [INFO] [Thread-208722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:00:07.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:00:12.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:12.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:16.259 [DEBUG] [Thread-208722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:00:16.259 [DEBUG] [Thread-208722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:00:16.260 [DEBUG] [Thread-208722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:00:16.300 [DEBUG] [Thread-208722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:00:16.301 [DEBUG] [Thread-208722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:00:16.304 [DEBUG] [Thread-208722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:00:16.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:00:16.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:00:16.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:00:16.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:00:16.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:00:16.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:00:16.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:00:16.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:00:16.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:00:16.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.666067 -999.00  +20.70  17.16     32   +3.60 1 1 1 1 1   887    0 15.36 -83.35 ----- 18.7 17.2 155.6 30.7 24.1 -28.9 24.2 -27.5 25.6 -27.3 26.0 -28.7
2026-02-15T18:00:16.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:00:16.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:00:16.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.666067
2026-02-15T18:00:16.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:00:16.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:00:16.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:00:16.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:00:16.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:00:16.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T17:59:52', tmtdew=20.23, humidity=26.01, cloud=0.0, wind=29.06, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T15:59:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:00:16.412 [DEBUG] [Thread-208722] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:00:16.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:00:16.508 [DEBUG] [Thread-208725] [transport.py] [_log()] starting thread (client mode): 0xa5743760
2026-02-15T18:00:16.509 [DEBUG] [Thread-208725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:00:16.523 [DEBUG] [Thread-208725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:00:16.523 [INFO] [Thread-208725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] client lang: <none>
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] server lang: <none>
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] kex follows: False
2026-02-15T18:00:16.531 [DEBUG] [Thread-208725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:00:16.532 [DEBUG] [Thread-208725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:00:16.532 [DEBUG] [Thread-208725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:00:16.532 [DEBUG] [Thread-208725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:00:16.532 [DEBUG] [Thread-208725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:00:16.532 [DEBUG] [Thread-208725] [transport.py] [_log()] Compression: none
2026-02-15T18:00:16.532 [DEBUG] [Thread-208725] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:00:16.588 [DEBUG] [Thread-208725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:00:16.589 [DEBUG] [Thread-208725] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:00:16.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:00:16.590 [DEBUG] [Thread-208725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:00:16.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:00:16.645 [DEBUG] [Thread-208725] [transport.py] [_log()] userauth is OK
2026-02-15T18:00:16.646 [DEBUG] [Thread-208725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:00:16.646 [DEBUG] [Thread-208725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:00:16.646 [DEBUG] [Thread-208725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:00:16.646 [DEBUG] [Thread-208725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:00:16.665 [INFO] [Thread-208725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:00:16.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:00:16.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:00:17.503 [DEBUG] [Thread-208725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:00:17.503 [DEBUG] [Thread-208725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:00:17.555 [DEBUG] [Thread-208725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:00:17.555 [DEBUG] [Thread-208725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:00:17.565 [DEBUG] [Thread-208725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:00:17.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:00:17.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:00:17.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:00:17.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:00:17.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:00:17.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:00:17.602 [DEBUG] [Thread-208725] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:00:20.909 [DEBUG] [Thread-208727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:35.958 [DEBUG] [Thread-208728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:47.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:00:47.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:00:47.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:00:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 0, 28), 20.28, 25.95, 0.0, 29.15, 21.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:00:49.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:00:28
2026-02-15T18:00:49.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:00:49.943 [DEBUG] [Thread-208729] [transport.py] [_log()] starting thread (client mode): 0xa2dc39d0
2026-02-15T18:00:49.943 [DEBUG] [Thread-208729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:00:49.962 [DEBUG] [Thread-208729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:00:49.962 [INFO] [Thread-208729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] client lang: <none>
2026-02-15T18:00:49.964 [DEBUG] [Thread-208729] [transport.py] [_log()] server lang: <none>
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] kex follows: False
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] Compression: none
2026-02-15T18:00:49.965 [DEBUG] [Thread-208729] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:00:49.975 [DEBUG] [Thread-208729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:00:49.976 [DEBUG] [Thread-208729] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:00:49.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:00:49.977 [DEBUG] [Thread-208729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:00:49.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:00:49.979 [DEBUG] [Thread-208729] [transport.py] [_log()] userauth is OK
2026-02-15T18:00:49.980 [DEBUG] [Thread-208729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:00:49.980 [DEBUG] [Thread-208729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:00:49.980 [DEBUG] [Thread-208729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:00:49.980 [DEBUG] [Thread-208729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:00:49.998 [INFO] [Thread-208729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:00:49.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:00:50.595 [DEBUG] [Thread-208729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:00:50.595 [DEBUG] [Thread-208729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:00:50.596 [DEBUG] [Thread-208729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:00:50.636 [DEBUG] [Thread-208729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:00:50.637 [DEBUG] [Thread-208729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:00:50.640 [DEBUG] [Thread-208729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:00:50.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:00:50.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:00:50.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:00:50.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:00:50.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:00:50.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:00:50.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:00:50.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:00:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:00:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.667109 -999.00  +20.70  19.76     32   +3.70 1 1 1 1 1   887    0 15.40 -82.69 ----- 21.1 19.8 170.0 22.7 24.1 -28.5 24.0 -27.5 25.5 -26.5 25.9 -28.7
2026-02-15T18:00:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:00:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:00:50.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.667109
2026-02-15T18:00:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:00:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:00:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:00:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:00:50.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:00:50.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:00:28', tmtdew=20.28, humidity=25.95, cloud=0.0, wind=29.15, temperature=21.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:00:38.218', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:00:50.665 [DEBUG] [Thread-208729] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:00:50.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:00:50.762 [DEBUG] [Thread-208732] [transport.py] [_log()] starting thread (client mode): 0xa2dc0340
2026-02-15T18:00:50.762 [DEBUG] [Thread-208732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:00:50.778 [DEBUG] [Thread-208732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:00:50.778 [INFO] [Thread-208732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:00:50.785 [DEBUG] [Thread-208732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] client lang: <none>
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] server lang: <none>
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] kex follows: False
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:00:50.786 [DEBUG] [Thread-208732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:00:50.787 [DEBUG] [Thread-208732] [transport.py] [_log()] Compression: none
2026-02-15T18:00:50.787 [DEBUG] [Thread-208732] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:00:50.846 [DEBUG] [Thread-208732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:00:50.847 [DEBUG] [Thread-208732] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:00:50.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:00:50.848 [DEBUG] [Thread-208732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:00:50.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:00:50.905 [DEBUG] [Thread-208732] [transport.py] [_log()] userauth is OK
2026-02-15T18:00:50.905 [DEBUG] [Thread-208732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:00:50.906 [DEBUG] [Thread-208732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:00:50.906 [DEBUG] [Thread-208732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:00:50.906 [DEBUG] [Thread-208732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:00:50.924 [INFO] [Thread-208732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:00:50.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:00:50.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:00:51.008 [DEBUG] [Thread-208734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:00:51.835 [DEBUG] [Thread-208732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:00:51.835 [DEBUG] [Thread-208732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:00:51.883 [DEBUG] [Thread-208732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:00:51.883 [DEBUG] [Thread-208732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:00:51.891 [DEBUG] [Thread-208732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:00:51.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:00:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:00:51.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:00:51.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:00:51.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:00:51.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:00:51.923 [DEBUG] [Thread-208732] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:01:01.121 [DEBUG] [Thread-208735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:06.058 [DEBUG] [Thread-208736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:12.340 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:12.341 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:21.093 [DEBUG] [Thread-208737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:21.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:01:21.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:01:21.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:01:24.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 1, 3), 20.35, 25.83, 0.0, 29.73, 21.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:01:24.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:01:03
2026-02-15T18:01:24.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:01:24.724 [DEBUG] [Thread-208738] [transport.py] [_log()] starting thread (client mode): 0xa5743910
2026-02-15T18:01:24.724 [DEBUG] [Thread-208738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:01:24.740 [DEBUG] [Thread-208738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:01:24.740 [INFO] [Thread-208738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] client lang: <none>
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] server lang: <none>
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] kex follows: False
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] Compression: none
2026-02-15T18:01:24.743 [DEBUG] [Thread-208738] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:01:24.756 [DEBUG] [Thread-208738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:01:24.756 [DEBUG] [Thread-208738] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:01:24.756 [DEBUG] [Thread-208738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:01:24.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:01:24.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:01:24.759 [DEBUG] [Thread-208738] [transport.py] [_log()] userauth is OK
2026-02-15T18:01:24.759 [DEBUG] [Thread-208738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:01:24.759 [DEBUG] [Thread-208738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:01:24.759 [DEBUG] [Thread-208738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:01:24.760 [DEBUG] [Thread-208738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:01:24.772 [INFO] [Thread-208738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:01:24.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:01:25.353 [DEBUG] [Thread-208738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:01:25.353 [DEBUG] [Thread-208738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:01:25.353 [DEBUG] [Thread-208738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:01:25.393 [DEBUG] [Thread-208738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:01:25.394 [DEBUG] [Thread-208738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:01:25.397 [DEBUG] [Thread-208738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:01:25.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:01:25.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:01:25.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:01:25.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:01:25.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:01:25.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:01:25.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:01:25.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:01:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:01:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.667456 -999.00  +20.70  24.27     32   +3.70 1 1 1 1 1   887    0 15.31 -73.94 ----- 18.9 24.3 164.4 31.1 24.1 -29.0 24.1 -27.1 25.4 -26.5 25.9 -28.8
2026-02-15T18:01:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:01:25.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:01:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.667456
2026-02-15T18:01:25.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:01:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:01:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:01:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:01:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:01:25.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:01:03', tmtdew=20.35, humidity=25.83, cloud=0.0, wind=29.73, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:01:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:01:25.424 [DEBUG] [Thread-208738] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:01:25.514 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:01:25.525 [DEBUG] [Thread-208741] [transport.py] [_log()] starting thread (client mode): 0xa2dc3130
2026-02-15T18:01:25.525 [DEBUG] [Thread-208741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:01:25.540 [DEBUG] [Thread-208741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:01:25.540 [INFO] [Thread-208741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] client lang: <none>
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] server lang: <none>
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] kex follows: False
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:01:25.548 [DEBUG] [Thread-208741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:01:25.549 [DEBUG] [Thread-208741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:01:25.549 [DEBUG] [Thread-208741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:01:25.549 [DEBUG] [Thread-208741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:01:25.549 [DEBUG] [Thread-208741] [transport.py] [_log()] Compression: none
2026-02-15T18:01:25.549 [DEBUG] [Thread-208741] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:01:25.607 [DEBUG] [Thread-208741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:01:25.607 [DEBUG] [Thread-208741] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:01:25.608 [DEBUG] [Thread-208741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:01:25.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:01:25.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:01:25.662 [DEBUG] [Thread-208741] [transport.py] [_log()] userauth is OK
2026-02-15T18:01:25.662 [DEBUG] [Thread-208741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:01:25.663 [DEBUG] [Thread-208741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:01:25.663 [DEBUG] [Thread-208741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:01:25.663 [DEBUG] [Thread-208741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:01:25.685 [INFO] [Thread-208741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:01:25.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:01:25.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:01:26.545 [DEBUG] [Thread-208741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:01:26.545 [DEBUG] [Thread-208741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:01:26.593 [DEBUG] [Thread-208741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:01:26.593 [DEBUG] [Thread-208741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:01:26.603 [DEBUG] [Thread-208741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:01:26.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:01:26.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:01:26.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:01:26.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:01:26.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:01:26.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:01:26.638 [DEBUG] [Thread-208741] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:01:36.127 [DEBUG] [Thread-208743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:51.176 [DEBUG] [Thread-208744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:01:56.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:01:56.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:01:56.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:01:58.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 1, 38), 20.92, 24.89, 0.0, 31.83, 21.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:01:58.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:01:38
2026-02-15T18:01:59.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:01:59.214 [DEBUG] [Thread-208745] [transport.py] [_log()] starting thread (client mode): 0xa57d6aa0
2026-02-15T18:01:59.214 [DEBUG] [Thread-208745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:01:59.234 [DEBUG] [Thread-208745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:01:59.234 [INFO] [Thread-208745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:01:59.237 [DEBUG] [Thread-208745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:01:59.237 [DEBUG] [Thread-208745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:01:59.237 [DEBUG] [Thread-208745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:01:59.237 [DEBUG] [Thread-208745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:01:59.237 [DEBUG] [Thread-208745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] client lang: <none>
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] server lang: <none>
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] kex follows: False
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:01:59.238 [DEBUG] [Thread-208745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:01:59.239 [DEBUG] [Thread-208745] [transport.py] [_log()] Compression: none
2026-02-15T18:01:59.239 [DEBUG] [Thread-208745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:01:59.268 [DEBUG] [Thread-208745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:01:59.269 [DEBUG] [Thread-208745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:01:59.269 [DEBUG] [Thread-208745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:01:59.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:01:59.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:01:59.271 [DEBUG] [Thread-208745] [transport.py] [_log()] userauth is OK
2026-02-15T18:01:59.272 [DEBUG] [Thread-208745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:01:59.272 [DEBUG] [Thread-208745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:01:59.272 [DEBUG] [Thread-208745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:01:59.272 [DEBUG] [Thread-208745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:01:59.297 [INFO] [Thread-208745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:01:59.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:01:59.935 [DEBUG] [Thread-208745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:01:59.935 [DEBUG] [Thread-208745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:01:59.935 [DEBUG] [Thread-208745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:01:59.976 [DEBUG] [Thread-208745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:01:59.976 [DEBUG] [Thread-208745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:01:59.978 [DEBUG] [Thread-208745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:01:59.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:01:59.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:01:59.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:01:59.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:01:59.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:01:59.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:01:59.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.667803 -999.00  +20.70  20.99     32   +3.70 1 1 1 1 1   887    0 15.63 -72.59 ----- 18.8 21.0 171.4 25.3 24.1 -28.3 24.0 -27.1 25.5 -26.5 25.9 -28.3
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.667803
2026-02-15T18:01:59.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:01:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:01:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:01:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:01:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:01:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:01:38', tmtdew=20.92, humidity=24.89, cloud=0.0, wind=31.83, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:01:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:01:59.998 [DEBUG] [Thread-208745] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:02:00.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:02:00.082 [DEBUG] [Thread-208748] [transport.py] [_log()] starting thread (client mode): 0xa57d6590
2026-02-15T18:02:00.082 [DEBUG] [Thread-208748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:02:00.098 [DEBUG] [Thread-208748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:02:00.098 [INFO] [Thread-208748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] client lang: <none>
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] server lang: <none>
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] kex follows: False
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] Compression: none
2026-02-15T18:02:00.109 [DEBUG] [Thread-208748] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:02:00.163 [DEBUG] [Thread-208748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:02:00.164 [DEBUG] [Thread-208748] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:02:00.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:02:00.165 [DEBUG] [Thread-208748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:02:00.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:02:00.219 [DEBUG] [Thread-208748] [transport.py] [_log()] userauth is OK
2026-02-15T18:02:00.219 [DEBUG] [Thread-208748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:02:00.219 [DEBUG] [Thread-208748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:02:00.219 [DEBUG] [Thread-208748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:02:00.219 [DEBUG] [Thread-208748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:02:00.233 [INFO] [Thread-208748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:02:00.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:02:00.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:02:01.090 [DEBUG] [Thread-208748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:02:01.099 [DEBUG] [Thread-208748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:02:01.138 [DEBUG] [Thread-208748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:02:01.138 [DEBUG] [Thread-208748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:02:01.146 [DEBUG] [Thread-208748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:02:01.154 [DEBUG] [Thread-208750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:02:01.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:02:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:02:01.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:02:01.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:02:01.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:02:01.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:02:01.178 [DEBUG] [Thread-208748] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:02:06.207 [DEBUG] [Thread-208751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:02:12.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:02:12.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:02:21.252 [DEBUG] [Thread-208752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:02:31.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:02:31.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:02:31.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:02:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 2, 14), 19.97, 26.55, 0.0, 25.13, 20.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:02:33.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:02:14
2026-02-15T18:02:33.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:02:33.547 [DEBUG] [Thread-208753] [transport.py] [_log()] starting thread (client mode): 0xa2d19c30
2026-02-15T18:02:33.547 [DEBUG] [Thread-208753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:02:33.567 [DEBUG] [Thread-208753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:02:33.567 [INFO] [Thread-208753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] client lang: <none>
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] server lang: <none>
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] kex follows: False
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] Compression: none
2026-02-15T18:02:33.571 [DEBUG] [Thread-208753] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:02:33.588 [DEBUG] [Thread-208753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:02:33.589 [DEBUG] [Thread-208753] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:02:33.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:02:33.590 [DEBUG] [Thread-208753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:02:33.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:02:33.633 [DEBUG] [Thread-208753] [transport.py] [_log()] userauth is OK
2026-02-15T18:02:33.634 [DEBUG] [Thread-208753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:02:33.634 [DEBUG] [Thread-208753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:02:33.634 [DEBUG] [Thread-208753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:02:33.634 [DEBUG] [Thread-208753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:02:33.672 [INFO] [Thread-208753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:02:33.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:02:34.309 [DEBUG] [Thread-208753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:02:34.309 [DEBUG] [Thread-208753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:02:34.309 [DEBUG] [Thread-208753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:02:34.350 [DEBUG] [Thread-208753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:02:34.350 [DEBUG] [Thread-208753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:02:34.354 [DEBUG] [Thread-208753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:02:34.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:02:34.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:02:34.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:02:34.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:02:34.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:02:34.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:02:34.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:02:34.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:02:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:02:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.668150 -999.00  +20.70  13.85     32   +3.50 1 1 1 1 1   887    0 15.11 -77.29 ----- 22.5 13.8 157.0 22.9 24.1 -28.5 24.1 -27.4 25.5 -26.8 25.9 -28.1
2026-02-15T18:02:34.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:02:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:02:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.668150
2026-02-15T18:02:34.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:02:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:02:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:02:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:02:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:02:34.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:02:14', tmtdew=19.97, humidity=26.55, cloud=0.0, wind=25.13, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:02:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:02:34.380 [DEBUG] [Thread-208753] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:02:34.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:02:34.479 [DEBUG] [Thread-208756] [transport.py] [_log()] starting thread (client mode): 0xa57e1ea0
2026-02-15T18:02:34.479 [DEBUG] [Thread-208756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:02:34.494 [DEBUG] [Thread-208756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:02:34.494 [INFO] [Thread-208756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:02:34.501 [DEBUG] [Thread-208756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] client lang: <none>
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] server lang: <none>
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] kex follows: False
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] Compression: none
2026-02-15T18:02:34.502 [DEBUG] [Thread-208756] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:02:34.560 [DEBUG] [Thread-208756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:02:34.561 [DEBUG] [Thread-208756] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:02:34.561 [DEBUG] [Thread-208756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:02:34.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:02:34.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:02:34.616 [DEBUG] [Thread-208756] [transport.py] [_log()] userauth is OK
2026-02-15T18:02:34.617 [DEBUG] [Thread-208756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:02:34.617 [DEBUG] [Thread-208756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:02:34.617 [DEBUG] [Thread-208756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:02:34.617 [DEBUG] [Thread-208756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:02:34.635 [INFO] [Thread-208756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:02:34.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:02:34.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:02:35.487 [DEBUG] [Thread-208756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:02:35.488 [DEBUG] [Thread-208756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:02:35.535 [DEBUG] [Thread-208756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:02:35.535 [DEBUG] [Thread-208756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:02:35.545 [DEBUG] [Thread-208756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:02:35.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:02:35.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:02:35.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:02:35.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:02:35.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:02:35.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:02:35.582 [DEBUG] [Thread-208756] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:02:36.290 [DEBUG] [Thread-208758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:02:51.342 [DEBUG] [Thread-208759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:01.187 [DEBUG] [Thread-208760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:05.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:03:05.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:03:05.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:03:06.375 [DEBUG] [Thread-208761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 2, 49), 20.34, 25.7, 0.0, 28.57, 21.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:03:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:02:49
2026-02-15T18:03:07.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:03:07.930 [DEBUG] [Thread-208762] [transport.py] [_log()] starting thread (client mode): 0xa57e1d20
2026-02-15T18:03:07.930 [DEBUG] [Thread-208762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:03:07.950 [DEBUG] [Thread-208762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:03:07.950 [INFO] [Thread-208762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:03:07.953 [DEBUG] [Thread-208762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] client lang: <none>
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] server lang: <none>
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] kex follows: False
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] Compression: none
2026-02-15T18:03:07.954 [DEBUG] [Thread-208762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:03:07.971 [DEBUG] [Thread-208762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:03:07.971 [DEBUG] [Thread-208762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:03:07.972 [DEBUG] [Thread-208762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:03:07.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:03:07.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:03:07.974 [DEBUG] [Thread-208762] [transport.py] [_log()] userauth is OK
2026-02-15T18:03:07.974 [DEBUG] [Thread-208762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:03:07.974 [DEBUG] [Thread-208762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:03:07.974 [DEBUG] [Thread-208762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:03:07.974 [DEBUG] [Thread-208762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:03:07.997 [INFO] [Thread-208762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:03:07.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:03:08.650 [DEBUG] [Thread-208762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:03:08.651 [DEBUG] [Thread-208762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:03:08.651 [DEBUG] [Thread-208762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:03:08.691 [DEBUG] [Thread-208762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:03:08.692 [DEBUG] [Thread-208762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:03:08.695 [DEBUG] [Thread-208762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:03:08.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:03:08.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:03:08.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:03:08.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:03:08.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:03:08.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:03:08.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:03:08.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:03:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:03:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.668497 -999.00  +20.70  20.25     32   +3.50 1 1 1 1 1   887    0 15.10 -83.17 ----- 21.5 20.2 148.0 31.7 24.1 -28.4 24.1 -27.5 25.5 -26.5 25.9 -28.2
2026-02-15T18:03:08.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:03:08.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:03:08.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.668497
2026-02-15T18:03:08.728 [DEBUG] [Thread-208762] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:03:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:03:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:03:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:03:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:03:08.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:03:08.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:02:49', tmtdew=20.34, humidity=25.7, cloud=0.0, wind=28.57, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:02:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:03:08.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:03:08.830 [DEBUG] [Thread-208765] [transport.py] [_log()] starting thread (client mode): 0xa2d57160
2026-02-15T18:03:08.831 [DEBUG] [Thread-208765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:03:08.844 [DEBUG] [Thread-208765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:03:08.845 [INFO] [Thread-208765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] client lang: <none>
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] server lang: <none>
2026-02-15T18:03:08.853 [DEBUG] [Thread-208765] [transport.py] [_log()] kex follows: False
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] Compression: none
2026-02-15T18:03:08.854 [DEBUG] [Thread-208765] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:03:08.911 [DEBUG] [Thread-208765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:03:08.912 [DEBUG] [Thread-208765] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:03:08.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:03:08.913 [DEBUG] [Thread-208765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:03:08.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:03:08.970 [DEBUG] [Thread-208765] [transport.py] [_log()] userauth is OK
2026-02-15T18:03:08.970 [DEBUG] [Thread-208765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:03:08.971 [DEBUG] [Thread-208765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:03:08.971 [DEBUG] [Thread-208765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:03:08.971 [DEBUG] [Thread-208765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:03:08.989 [INFO] [Thread-208765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:03:08.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:03:08.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:03:09.867 [DEBUG] [Thread-208765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:03:09.867 [DEBUG] [Thread-208765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:03:09.918 [DEBUG] [Thread-208765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:03:09.918 [DEBUG] [Thread-208765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:03:09.929 [DEBUG] [Thread-208765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:03:09.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:03:09.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:03:09.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:03:09.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:03:09.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:03:09.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:03:09.961 [DEBUG] [Thread-208765] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:03:12.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:12.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:21.416 [DEBUG] [Thread-208767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:36.472 [DEBUG] [Thread-208768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:03:39.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:03:39.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:03:39.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:03:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 3, 24), 20.34, 25.7, 0.0, 28.58, 21.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:03:41.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:03:24
2026-02-15T18:03:42.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:03:42.337 [DEBUG] [Thread-208769] [transport.py] [_log()] starting thread (client mode): 0xa57e0b80
2026-02-15T18:03:42.337 [DEBUG] [Thread-208769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:03:42.347 [DEBUG] [Thread-208769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:03:42.347 [INFO] [Thread-208769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:03:42.350 [DEBUG] [Thread-208769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] client lang: <none>
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] server lang: <none>
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] kex follows: False
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] Compression: none
2026-02-15T18:03:42.351 [DEBUG] [Thread-208769] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:03:42.366 [DEBUG] [Thread-208769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:03:42.366 [DEBUG] [Thread-208769] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:03:42.366 [DEBUG] [Thread-208769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:03:42.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:03:42.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:03:42.368 [DEBUG] [Thread-208769] [transport.py] [_log()] userauth is OK
2026-02-15T18:03:42.368 [DEBUG] [Thread-208769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:03:42.368 [DEBUG] [Thread-208769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:03:42.368 [DEBUG] [Thread-208769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:03:42.368 [DEBUG] [Thread-208769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:03:42.382 [INFO] [Thread-208769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:03:42.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:03:43.017 [DEBUG] [Thread-208769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:03:43.018 [DEBUG] [Thread-208769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:03:43.018 [DEBUG] [Thread-208769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:03:43.059 [DEBUG] [Thread-208769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:03:43.059 [DEBUG] [Thread-208769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:03:43.062 [DEBUG] [Thread-208769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:03:43.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:03:43.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:03:43.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:03:43.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:03:43.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:03:43.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:03:43.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:03:43.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:03:43.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:03:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.668845 -999.00  +20.70  20.03     32   +3.60 1 1 1 1 1   887    0 14.86 -85.18 ----- 22.2 20.0 164.0 27.8 24.0 -29.2 24.1 -27.6 25.4 -26.8 25.8 -29.0
2026-02-15T18:03:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:03:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:03:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.668845
2026-02-15T18:03:43.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:03:43.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:03:43.089 [DEBUG] [Thread-208769] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:03:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:03:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:03:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:03:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:03:24', tmtdew=20.34, humidity=25.7, cloud=0.0, wind=28.58, temperature=21.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:03:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:03:43.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:03:43.195 [DEBUG] [Thread-208772] [transport.py] [_log()] starting thread (client mode): 0xa57e0940
2026-02-15T18:03:43.195 [DEBUG] [Thread-208772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:03:43.212 [DEBUG] [Thread-208772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:03:43.212 [INFO] [Thread-208772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:03:43.221 [DEBUG] [Thread-208772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:03:43.221 [DEBUG] [Thread-208772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] client lang: <none>
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] server lang: <none>
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] kex follows: False
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:03:43.222 [DEBUG] [Thread-208772] [transport.py] [_log()] Compression: none
2026-02-15T18:03:43.223 [DEBUG] [Thread-208772] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:03:43.277 [DEBUG] [Thread-208772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:03:43.278 [DEBUG] [Thread-208772] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:03:43.278 [DEBUG] [Thread-208772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:03:43.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:03:43.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:03:43.334 [DEBUG] [Thread-208772] [transport.py] [_log()] userauth is OK
2026-02-15T18:03:43.335 [DEBUG] [Thread-208772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:03:43.335 [DEBUG] [Thread-208772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:03:43.335 [DEBUG] [Thread-208772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:03:43.335 [DEBUG] [Thread-208772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:03:43.355 [INFO] [Thread-208772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:03:43.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:03:43.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:03:44.194 [DEBUG] [Thread-208772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:03:44.203 [DEBUG] [Thread-208772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:03:44.242 [DEBUG] [Thread-208772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:03:44.242 [DEBUG] [Thread-208772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:03:44.251 [DEBUG] [Thread-208772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:03:44.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:03:44.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:03:44.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-02-15T18:03:44.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:03:44.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:03:44.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:03:44.291 [DEBUG] [Thread-208772] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:03:51.510 [DEBUG] [Thread-208774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:01.238 [DEBUG] [Thread-208775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:06.560 [DEBUG] [Thread-208776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:12.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:12.774 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:14.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:04:14.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:04:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:04:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 3, 59), 20.29, 26.2, 0.0, 27.05, 21.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:04:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:03:59
2026-02-15T18:04:16.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:04:16.823 [DEBUG] [Thread-208777] [transport.py] [_log()] starting thread (client mode): 0xa57e1ab0
2026-02-15T18:04:16.823 [DEBUG] [Thread-208777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:04:16.843 [DEBUG] [Thread-208777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:04:16.843 [INFO] [Thread-208777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:04:16.846 [DEBUG] [Thread-208777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] client lang: <none>
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] server lang: <none>
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] kex follows: False
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] Compression: none
2026-02-15T18:04:16.847 [DEBUG] [Thread-208777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:04:16.866 [DEBUG] [Thread-208777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:04:16.866 [DEBUG] [Thread-208777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:04:16.867 [DEBUG] [Thread-208777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:04:16.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:04:16.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:04:16.909 [DEBUG] [Thread-208777] [transport.py] [_log()] userauth is OK
2026-02-15T18:04:16.911 [DEBUG] [Thread-208777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:04:16.911 [DEBUG] [Thread-208777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:04:16.911 [DEBUG] [Thread-208777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:04:16.912 [DEBUG] [Thread-208777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:04:16.949 [INFO] [Thread-208777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:04:16.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:04:17.604 [DEBUG] [Thread-208777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:04:17.605 [DEBUG] [Thread-208777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:04:17.605 [DEBUG] [Thread-208777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:04:17.645 [DEBUG] [Thread-208777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:04:17.646 [DEBUG] [Thread-208777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:04:17.649 [DEBUG] [Thread-208777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:04:17.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:04:17.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:04:17.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:04:17.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:04:17.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:04:17.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:04:17.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:04:17.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:04:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:04:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.669192 -999.00  +20.70  14.95     32   +3.60 1 1 1 1 1   887    0 15.27 -83.30 ----- 22.2 14.9 170.6 28.4 24.1 -28.6 24.0 -27.1 25.4 -26.4 25.9 -28.1
2026-02-15T18:04:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:04:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:04:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.669192
2026-02-15T18:04:17.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:04:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:03:59', tmtdew=20.29, humidity=26.2, cloud=0.0, wind=27.05, temperature=21.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:03:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:04:17.678 [DEBUG] [Thread-208777] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:04:17.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:04:17.778 [DEBUG] [Thread-208780] [transport.py] [_log()] starting thread (client mode): 0xa57d6d10
2026-02-15T18:04:17.778 [DEBUG] [Thread-208780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:04:17.793 [DEBUG] [Thread-208780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:04:17.794 [INFO] [Thread-208780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:04:17.801 [DEBUG] [Thread-208780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:04:17.801 [DEBUG] [Thread-208780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:04:17.801 [DEBUG] [Thread-208780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] client lang: <none>
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] server lang: <none>
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] kex follows: False
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] Compression: none
2026-02-15T18:04:17.802 [DEBUG] [Thread-208780] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:04:17.860 [DEBUG] [Thread-208780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:04:17.861 [DEBUG] [Thread-208780] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:04:17.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:04:17.862 [DEBUG] [Thread-208780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:04:17.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:04:17.923 [DEBUG] [Thread-208780] [transport.py] [_log()] userauth is OK
2026-02-15T18:04:17.923 [DEBUG] [Thread-208780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:04:17.924 [DEBUG] [Thread-208780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:04:17.924 [DEBUG] [Thread-208780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:04:17.924 [DEBUG] [Thread-208780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:04:17.943 [INFO] [Thread-208780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:04:17.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:04:17.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:04:18.788 [DEBUG] [Thread-208780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:04:18.789 [DEBUG] [Thread-208780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:04:18.843 [DEBUG] [Thread-208780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:04:18.844 [DEBUG] [Thread-208780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:04:18.859 [DEBUG] [Thread-208780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:04:18.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:04:18.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:04:18.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:04:18.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:04:18.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:04:18.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:04:18.925 [DEBUG] [Thread-208780] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:04:21.596 [DEBUG] [Thread-208782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:36.648 [DEBUG] [Thread-208783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:48.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:04:48.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:04:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:04:50.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 4, 34), 21.1, 24.63, 0.0, 30.52, 21.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:04:50.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:04:34
2026-02-15T18:04:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:04:51.273 [DEBUG] [Thread-208784] [transport.py] [_log()] starting thread (client mode): 0xa57d58a0
2026-02-15T18:04:51.274 [DEBUG] [Thread-208784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:04:51.294 [DEBUG] [Thread-208784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:04:51.294 [INFO] [Thread-208784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] client lang: <none>
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] server lang: <none>
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] kex follows: False
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] Compression: none
2026-02-15T18:04:51.298 [DEBUG] [Thread-208784] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:04:51.315 [DEBUG] [Thread-208784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:04:51.316 [DEBUG] [Thread-208784] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:04:51.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:04:51.317 [DEBUG] [Thread-208784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:04:51.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:04:51.319 [DEBUG] [Thread-208784] [transport.py] [_log()] userauth is OK
2026-02-15T18:04:51.320 [DEBUG] [Thread-208784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:04:51.320 [DEBUG] [Thread-208784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:04:51.320 [DEBUG] [Thread-208784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:04:51.320 [DEBUG] [Thread-208784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:04:51.356 [INFO] [Thread-208784] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:04:51.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:04:51.691 [DEBUG] [Thread-208786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:04:51.985 [DEBUG] [Thread-208784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:04:51.985 [DEBUG] [Thread-208784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:04:51.985 [DEBUG] [Thread-208784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:04:52.026 [DEBUG] [Thread-208784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:04:52.026 [DEBUG] [Thread-208784] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:04:52.029 [DEBUG] [Thread-208784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:04:52.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:04:52.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:04:52.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:04:52.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:04:52.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:04:52.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:04:52.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:04:52.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:04:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:04:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.669539 -999.00  +20.70  17.43     32   +3.60 1 1 1 1 1   887    0 15.61 -76.66 ----- 21.4 17.4 165.4 25.9 24.0 -28.8 24.0 -27.2 25.4 -26.2 25.9 -28.6
2026-02-15T18:04:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:04:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:04:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.669539
2026-02-15T18:04:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:04:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:04:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:04:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:04:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:04:52.055 [DEBUG] [Thread-208784] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:04:52.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:04:34', tmtdew=21.1, humidity=24.63, cloud=0.0, wind=30.52, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:04:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:04:52.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:04:52.149 [DEBUG] [Thread-208788] [transport.py] [_log()] starting thread (client mode): 0xa57d7a60
2026-02-15T18:04:52.149 [DEBUG] [Thread-208788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:04:52.164 [DEBUG] [Thread-208788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:04:52.164 [INFO] [Thread-208788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:04:52.171 [DEBUG] [Thread-208788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:04:52.171 [DEBUG] [Thread-208788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:04:52.171 [DEBUG] [Thread-208788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:04:52.171 [DEBUG] [Thread-208788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] client lang: <none>
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] server lang: <none>
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] kex follows: False
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] Compression: none
2026-02-15T18:04:52.172 [DEBUG] [Thread-208788] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:04:52.231 [DEBUG] [Thread-208788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:04:52.232 [DEBUG] [Thread-208788] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:04:52.232 [DEBUG] [Thread-208788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:04:52.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:04:52.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:04:52.287 [DEBUG] [Thread-208788] [transport.py] [_log()] userauth is OK
2026-02-15T18:04:52.287 [DEBUG] [Thread-208788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:04:52.287 [DEBUG] [Thread-208788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:04:52.288 [DEBUG] [Thread-208788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:04:52.288 [DEBUG] [Thread-208788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:04:52.307 [INFO] [Thread-208788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:04:52.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:04:52.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:04:53.137 [DEBUG] [Thread-208788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:04:53.137 [DEBUG] [Thread-208788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:04:53.186 [DEBUG] [Thread-208788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:04:53.186 [DEBUG] [Thread-208788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:04:53.195 [DEBUG] [Thread-208788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:04:53.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:04:53.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:04:53.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:04:53.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:04:53.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:04:53.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:04:53.228 [DEBUG] [Thread-208788] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:05:01.284 [DEBUG] [Thread-208790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:06.729 [DEBUG] [Thread-208791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:12.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:12.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:21.783 [DEBUG] [Thread-208792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:23.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:05:23.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:05:23.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:05:25.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 5, 11), 20.14, 26.41, 0.0, 23.22, 20.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:05:25.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:05:11
2026-02-15T18:05:25.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:05:26.134 [DEBUG] [Thread-208793] [transport.py] [_log()] starting thread (client mode): 0xa2d187c0
2026-02-15T18:05:26.134 [DEBUG] [Thread-208793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:05:26.153 [DEBUG] [Thread-208793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:05:26.153 [INFO] [Thread-208793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:05:26.156 [DEBUG] [Thread-208793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] client lang: <none>
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] server lang: <none>
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] kex follows: False
2026-02-15T18:05:26.157 [DEBUG] [Thread-208793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:05:26.158 [DEBUG] [Thread-208793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:05:26.158 [DEBUG] [Thread-208793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:05:26.158 [DEBUG] [Thread-208793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:05:26.158 [DEBUG] [Thread-208793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:05:26.158 [DEBUG] [Thread-208793] [transport.py] [_log()] Compression: none
2026-02-15T18:05:26.158 [DEBUG] [Thread-208793] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:05:26.177 [DEBUG] [Thread-208793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:05:26.178 [DEBUG] [Thread-208793] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:05:26.178 [DEBUG] [Thread-208793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:05:26.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:05:26.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:05:26.180 [DEBUG] [Thread-208793] [transport.py] [_log()] userauth is OK
2026-02-15T18:05:26.180 [DEBUG] [Thread-208793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:05:26.181 [DEBUG] [Thread-208793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:05:26.181 [DEBUG] [Thread-208793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:05:26.181 [DEBUG] [Thread-208793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:05:26.205 [INFO] [Thread-208793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:05:26.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:05:26.834 [DEBUG] [Thread-208793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:05:26.834 [DEBUG] [Thread-208793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:05:26.835 [DEBUG] [Thread-208793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:05:26.876 [DEBUG] [Thread-208793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:05:26.876 [DEBUG] [Thread-208793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:05:26.879 [DEBUG] [Thread-208793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:05:26.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:05:26.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:05:26.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:05:26.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:05:26.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:05:26.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:05:26.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:05:26.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:05:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:05:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.670233 -999.00  +20.70  21.20     32   +3.60 1 1 1 1 1   887    0 15.08 -78.99 ----- 23.6 21.2 153.8 33.7 23.9 -28.7 24.0 -27.7 25.4 -26.2 25.8 -29.0
2026-02-15T18:05:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:05:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:05:26.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.670233
2026-02-15T18:05:26.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:05:26.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:05:26.907 [DEBUG] [Thread-208793] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:05:26.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:05:26.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:05:26.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:05:26.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:05:11', tmtdew=20.14, humidity=26.41, cloud=0.0, wind=23.22, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:05:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:05:26.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:05:27.006 [DEBUG] [Thread-208796] [transport.py] [_log()] starting thread (client mode): 0xa2d19ea0
2026-02-15T18:05:27.006 [DEBUG] [Thread-208796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:05:27.020 [DEBUG] [Thread-208796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:05:27.020 [INFO] [Thread-208796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:05:27.029 [DEBUG] [Thread-208796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:05:27.029 [DEBUG] [Thread-208796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:05:27.029 [DEBUG] [Thread-208796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:05:27.029 [DEBUG] [Thread-208796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] client lang: <none>
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] server lang: <none>
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] kex follows: False
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:05:27.030 [DEBUG] [Thread-208796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:05:27.031 [DEBUG] [Thread-208796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:05:27.031 [DEBUG] [Thread-208796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:05:27.031 [DEBUG] [Thread-208796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:05:27.031 [DEBUG] [Thread-208796] [transport.py] [_log()] Compression: none
2026-02-15T18:05:27.031 [DEBUG] [Thread-208796] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:05:27.091 [DEBUG] [Thread-208796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:05:27.092 [DEBUG] [Thread-208796] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:05:27.092 [DEBUG] [Thread-208796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:05:27.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:05:27.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:05:27.152 [DEBUG] [Thread-208796] [transport.py] [_log()] userauth is OK
2026-02-15T18:05:27.153 [DEBUG] [Thread-208796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:05:27.153 [DEBUG] [Thread-208796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:05:27.153 [DEBUG] [Thread-208796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:05:27.153 [DEBUG] [Thread-208796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:05:27.172 [INFO] [Thread-208796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:05:27.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:05:27.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:05:28.027 [DEBUG] [Thread-208796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:05:28.028 [DEBUG] [Thread-208796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:05:28.079 [DEBUG] [Thread-208796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:05:28.079 [DEBUG] [Thread-208796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:05:28.088 [DEBUG] [Thread-208796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:05:28.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:05:28.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:05:28.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:05:28.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:05:28.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:05:28.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:05:28.128 [DEBUG] [Thread-208796] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:05:36.818 [DEBUG] [Thread-208798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:51.873 [DEBUG] [Thread-208799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:05:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:05:58.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:05:58.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:05:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 5, 46), 20.06, 26.55, 0.0, 31.78, 20.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:05:59.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:05:46
2026-02-15T18:06:00.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:06:00.489 [DEBUG] [Thread-208800] [transport.py] [_log()] starting thread (client mode): 0xa57e0d00
2026-02-15T18:06:00.489 [DEBUG] [Thread-208800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:06:00.509 [DEBUG] [Thread-208800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:06:00.510 [INFO] [Thread-208800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] client lang: <none>
2026-02-15T18:06:00.511 [DEBUG] [Thread-208800] [transport.py] [_log()] server lang: <none>
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] kex follows: False
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] Compression: none
2026-02-15T18:06:00.512 [DEBUG] [Thread-208800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:06:00.529 [DEBUG] [Thread-208800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:06:00.530 [DEBUG] [Thread-208800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:06:00.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:06:00.531 [DEBUG] [Thread-208800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:06:00.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:06:00.532 [DEBUG] [Thread-208800] [transport.py] [_log()] userauth is OK
2026-02-15T18:06:00.533 [DEBUG] [Thread-208800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:06:00.533 [DEBUG] [Thread-208800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:06:00.533 [DEBUG] [Thread-208800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:06:00.533 [DEBUG] [Thread-208800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:06:00.558 [INFO] [Thread-208800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:06:00.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:06:01.133 [DEBUG] [Thread-208800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:06:01.133 [DEBUG] [Thread-208800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:06:01.134 [DEBUG] [Thread-208800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:06:01.174 [DEBUG] [Thread-208800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:06:01.174 [DEBUG] [Thread-208800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:06:01.177 [DEBUG] [Thread-208800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:06:01.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:06:01.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:06:01.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:06:01.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:06:01.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:06:01.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:06:01.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:06:01.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:06:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:06:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.670581 -999.00  +20.50  25.70     32   +3.60 1 1 1 1 1   887    0 15.51 -80.37 ----- 20.4 25.7 142.8 31.8 23.9 -28.9 23.9 -27.8 25.3 -26.7 25.7 -29.2
2026-02-15T18:06:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:06:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:06:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.670581
2026-02-15T18:06:01.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:06:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:06:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:06:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:06:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:06:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:05:46', tmtdew=20.06, humidity=26.55, cloud=0.0, wind=31.78, temperature=20.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:05:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:06:01.195 [DEBUG] [Thread-208800] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:06:01.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:06:01.292 [DEBUG] [Thread-208803] [transport.py] [_log()] starting thread (client mode): 0xa57d6f80
2026-02-15T18:06:01.292 [DEBUG] [Thread-208803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:06:01.310 [DEBUG] [Thread-208803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:06:01.310 [INFO] [Thread-208803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:06:01.311 [DEBUG] [Thread-208805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:06:01.317 [DEBUG] [Thread-208803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:06:01.317 [DEBUG] [Thread-208803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:06:01.317 [DEBUG] [Thread-208803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] client lang: <none>
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] server lang: <none>
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] kex follows: False
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] Compression: none
2026-02-15T18:06:01.318 [DEBUG] [Thread-208803] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:06:01.376 [DEBUG] [Thread-208803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:06:01.377 [DEBUG] [Thread-208803] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:06:01.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:06:01.378 [DEBUG] [Thread-208803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:06:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:06:01.432 [DEBUG] [Thread-208803] [transport.py] [_log()] userauth is OK
2026-02-15T18:06:01.433 [DEBUG] [Thread-208803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:06:01.433 [DEBUG] [Thread-208803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:06:01.433 [DEBUG] [Thread-208803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:06:01.433 [DEBUG] [Thread-208803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:06:01.452 [INFO] [Thread-208803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:06:01.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:06:01.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:06:02.301 [DEBUG] [Thread-208803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:06:02.301 [DEBUG] [Thread-208803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:06:02.352 [DEBUG] [Thread-208803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:06:02.353 [DEBUG] [Thread-208803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:06:02.364 [DEBUG] [Thread-208803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:06:02.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:06:02.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:06:02.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:06:02.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:06:02.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:06:02.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:06:02.403 [DEBUG] [Thread-208803] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:06:06.901 [DEBUG] [Thread-208806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:06:13.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:06:13.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:06:21.943 [DEBUG] [Thread-208807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:06:32.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:06:32.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:06:32.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:06:34.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 6, 21), 20.03, 26.58, 0.0, 30.28, 20.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:06:34.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:06:21
2026-02-15T18:06:35.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:06:35.258 [DEBUG] [Thread-208808] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-15T18:06:35.258 [DEBUG] [Thread-208808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:06:35.278 [DEBUG] [Thread-208808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:06:35.278 [INFO] [Thread-208808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:06:35.281 [DEBUG] [Thread-208808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:06:35.281 [DEBUG] [Thread-208808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:06:35.281 [DEBUG] [Thread-208808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:06:35.281 [DEBUG] [Thread-208808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:35.281 [DEBUG] [Thread-208808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:35.281 [DEBUG] [Thread-208808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] client lang: <none>
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] server lang: <none>
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] kex follows: False
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] Compression: none
2026-02-15T18:06:35.282 [DEBUG] [Thread-208808] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:06:35.300 [DEBUG] [Thread-208808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:06:35.301 [DEBUG] [Thread-208808] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:06:35.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:06:35.302 [DEBUG] [Thread-208808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:06:35.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:06:35.304 [DEBUG] [Thread-208808] [transport.py] [_log()] userauth is OK
2026-02-15T18:06:35.304 [DEBUG] [Thread-208808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:06:35.305 [DEBUG] [Thread-208808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:06:35.305 [DEBUG] [Thread-208808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:06:35.305 [DEBUG] [Thread-208808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:06:35.329 [INFO] [Thread-208808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:06:35.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:06:35.938 [DEBUG] [Thread-208808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:06:35.938 [DEBUG] [Thread-208808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:06:35.939 [DEBUG] [Thread-208808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:06:35.980 [DEBUG] [Thread-208808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:06:35.980 [DEBUG] [Thread-208808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:06:35.983 [DEBUG] [Thread-208808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:06:35.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:06:35.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:06:35.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:06:35.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:06:36.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:06:36.010 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:06:36.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:06:36.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:06:36.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:06:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.670928 -999.00  +20.50  18.00     33   +3.70 1 1 1 1 1   887    0 15.06 -81.60 ----- 22.7 18.0 162.3 28.0 23.8 -29.0 23.9 -28.3 25.2 -27.4 25.6 -28.6
2026-02-15T18:06:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:06:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:06:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.670928
2026-02-15T18:06:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:06:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:06:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:06:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:06:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:06:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:06:21', tmtdew=20.03, humidity=26.58, cloud=0.0, wind=30.28, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:06:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:06:36.014 [DEBUG] [Thread-208808] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:06:36.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:06:36.110 [DEBUG] [Thread-208811] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-15T18:06:36.110 [DEBUG] [Thread-208811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:06:36.124 [DEBUG] [Thread-208811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:06:36.125 [INFO] [Thread-208811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:06:36.132 [DEBUG] [Thread-208811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:06:36.133 [DEBUG] [Thread-208811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] client lang: <none>
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] server lang: <none>
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] kex follows: False
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:06:36.134 [DEBUG] [Thread-208811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:06:36.135 [DEBUG] [Thread-208811] [transport.py] [_log()] Compression: none
2026-02-15T18:06:36.135 [DEBUG] [Thread-208811] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:06:36.190 [DEBUG] [Thread-208811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:06:36.191 [DEBUG] [Thread-208811] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:06:36.191 [DEBUG] [Thread-208811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:06:36.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:06:36.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:06:36.246 [DEBUG] [Thread-208811] [transport.py] [_log()] userauth is OK
2026-02-15T18:06:36.246 [DEBUG] [Thread-208811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:06:36.247 [DEBUG] [Thread-208811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:06:36.247 [DEBUG] [Thread-208811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:06:36.247 [DEBUG] [Thread-208811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:06:36.267 [INFO] [Thread-208811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:06:36.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:06:36.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:06:36.978 [DEBUG] [Thread-208813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:06:37.103 [DEBUG] [Thread-208811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:06:37.103 [DEBUG] [Thread-208811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:06:37.151 [DEBUG] [Thread-208811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:06:37.151 [DEBUG] [Thread-208811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:06:37.161 [DEBUG] [Thread-208811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:06:37.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:06:37.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:06:37.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:06:37.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:06:37.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:06:37.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:06:37.198 [DEBUG] [Thread-208811] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:06:52.030 [DEBUG] [Thread-208814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:01.347 [DEBUG] [Thread-208815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:07.070 [DEBUG] [Thread-208816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:07.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:07:07.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:07:07.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:07:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 6, 56), 19.82, 26.61, 0.0, 28.32, 20.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:07:09.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:06:56
2026-02-15T18:07:09.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:07:10.002 [DEBUG] [Thread-208817] [transport.py] [_log()] starting thread (client mode): 0xa2d1a920
2026-02-15T18:07:10.002 [DEBUG] [Thread-208817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:07:10.023 [DEBUG] [Thread-208817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:07:10.023 [INFO] [Thread-208817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] client lang: <none>
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] server lang: <none>
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] kex follows: False
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:07:10.026 [DEBUG] [Thread-208817] [transport.py] [_log()] Compression: none
2026-02-15T18:07:10.027 [DEBUG] [Thread-208817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:07:10.046 [DEBUG] [Thread-208817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:07:10.047 [DEBUG] [Thread-208817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:07:10.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:07:10.048 [DEBUG] [Thread-208817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:07:10.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:07:10.050 [DEBUG] [Thread-208817] [transport.py] [_log()] userauth is OK
2026-02-15T18:07:10.050 [DEBUG] [Thread-208817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:07:10.050 [DEBUG] [Thread-208817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:07:10.051 [DEBUG] [Thread-208817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:07:10.051 [DEBUG] [Thread-208817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:07:10.075 [INFO] [Thread-208817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:07:10.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:07:10.715 [DEBUG] [Thread-208817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:07:10.715 [DEBUG] [Thread-208817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:07:10.716 [DEBUG] [Thread-208817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:07:10.757 [DEBUG] [Thread-208817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:07:10.757 [DEBUG] [Thread-208817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:07:10.760 [DEBUG] [Thread-208817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:07:10.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:07:10.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:07:10.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:07:10.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:07:10.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:07:10.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:07:10.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:07:10.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:07:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:07:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.671275 -999.00  +20.50  23.82     33   +3.70 1 1 1 1 1   887    0 15.20 -76.56 ----- 18.1 23.8 145.8 30.2 23.8 -28.5 23.8 -28.2 25.2 -26.9 25.6 -28.6
2026-02-15T18:07:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:07:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:07:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.671275
2026-02-15T18:07:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:07:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:07:10.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:07:10.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:07:10.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:07:10.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:06:56', tmtdew=19.82, humidity=26.61, cloud=0.0, wind=28.32, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:06:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:07:10.786 [DEBUG] [Thread-208817] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:07:10.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:07:10.880 [DEBUG] [Thread-208820] [transport.py] [_log()] starting thread (client mode): 0xa2d18af0
2026-02-15T18:07:10.881 [DEBUG] [Thread-208820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:07:10.895 [DEBUG] [Thread-208820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:07:10.895 [INFO] [Thread-208820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:10.903 [DEBUG] [Thread-208820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] client lang: <none>
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] server lang: <none>
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] kex follows: False
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] Compression: none
2026-02-15T18:07:10.904 [DEBUG] [Thread-208820] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:07:10.962 [DEBUG] [Thread-208820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:07:10.963 [DEBUG] [Thread-208820] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:07:10.964 [DEBUG] [Thread-208820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:07:10.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:07:10.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:07:11.018 [DEBUG] [Thread-208820] [transport.py] [_log()] userauth is OK
2026-02-15T18:07:11.019 [DEBUG] [Thread-208820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:07:11.019 [DEBUG] [Thread-208820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:07:11.019 [DEBUG] [Thread-208820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:07:11.019 [DEBUG] [Thread-208820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:07:11.038 [INFO] [Thread-208820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:07:11.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:07:11.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:07:11.873 [DEBUG] [Thread-208820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:07:11.873 [DEBUG] [Thread-208820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:07:11.921 [DEBUG] [Thread-208820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:07:11.921 [DEBUG] [Thread-208820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:07:11.930 [DEBUG] [Thread-208820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:07:11.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:07:11.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:07:11.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:07:11.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:07:11.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:07:11.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:07:11.967 [DEBUG] [Thread-208820] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:07:13.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:13.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:22.108 [DEBUG] [Thread-208822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:37.159 [DEBUG] [Thread-208823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:07:41.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:07:41.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:07:41.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:07:43.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 7, 32), 20.66, 25.36, 0.0, 28.62, 21.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:07:43.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:07:32
2026-02-15T18:07:44.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:07:44.288 [DEBUG] [Thread-208824] [transport.py] [_log()] starting thread (client mode): 0xa5741de0
2026-02-15T18:07:44.288 [DEBUG] [Thread-208824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:07:44.307 [DEBUG] [Thread-208824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:07:44.308 [INFO] [Thread-208824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] client lang: <none>
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] server lang: <none>
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] kex follows: False
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] Compression: none
2026-02-15T18:07:44.311 [DEBUG] [Thread-208824] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:07:44.328 [DEBUG] [Thread-208824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:07:44.329 [DEBUG] [Thread-208824] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:07:44.329 [DEBUG] [Thread-208824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:07:44.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:07:44.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:07:44.331 [DEBUG] [Thread-208824] [transport.py] [_log()] userauth is OK
2026-02-15T18:07:44.331 [DEBUG] [Thread-208824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:07:44.331 [DEBUG] [Thread-208824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:07:44.331 [DEBUG] [Thread-208824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:07:44.331 [DEBUG] [Thread-208824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:07:44.353 [INFO] [Thread-208824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:07:44.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:07:44.976 [DEBUG] [Thread-208824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:07:44.976 [DEBUG] [Thread-208824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:07:44.977 [DEBUG] [Thread-208824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:07:45.017 [DEBUG] [Thread-208824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:07:45.018 [DEBUG] [Thread-208824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:07:45.020 [DEBUG] [Thread-208824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:07:45.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:07:45.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:07:45.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:07:45.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:07:45.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:07:45.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:07:45.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:07:45.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:07:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:07:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.671622 -999.00  +20.60  17.69     33   +3.80 1 1 1 1 1   887    0 15.11 -74.60 ----- 15.7 17.7 173.2 24.6 23.8 -28.6 23.8 -27.2 25.2 -26.1 25.6 -28.9
2026-02-15T18:07:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:07:45.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:07:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.671622
2026-02-15T18:07:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:07:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:07:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:07:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:07:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:07:45.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:07:32', tmtdew=20.66, humidity=25.36, cloud=0.0, wind=28.62, temperature=21.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:07:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:07:45.046 [DEBUG] [Thread-208824] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:07:45.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:07:45.143 [DEBUG] [Thread-208827] [transport.py] [_log()] starting thread (client mode): 0xa57e0f70
2026-02-15T18:07:45.143 [DEBUG] [Thread-208827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:07:45.158 [DEBUG] [Thread-208827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:07:45.158 [INFO] [Thread-208827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] client lang: <none>
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] server lang: <none>
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] kex follows: False
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:07:45.166 [DEBUG] [Thread-208827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:07:45.167 [DEBUG] [Thread-208827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:07:45.167 [DEBUG] [Thread-208827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:07:45.167 [DEBUG] [Thread-208827] [transport.py] [_log()] Compression: none
2026-02-15T18:07:45.167 [DEBUG] [Thread-208827] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:07:45.227 [DEBUG] [Thread-208827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:07:45.228 [DEBUG] [Thread-208827] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:07:45.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:07:45.229 [DEBUG] [Thread-208827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:07:45.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:07:45.283 [DEBUG] [Thread-208827] [transport.py] [_log()] userauth is OK
2026-02-15T18:07:45.284 [DEBUG] [Thread-208827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:07:45.284 [DEBUG] [Thread-208827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:07:45.284 [DEBUG] [Thread-208827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:07:45.284 [DEBUG] [Thread-208827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:07:45.302 [INFO] [Thread-208827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:07:45.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:07:45.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:07:46.113 [DEBUG] [Thread-208827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:07:46.113 [DEBUG] [Thread-208827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:07:46.161 [DEBUG] [Thread-208827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:07:46.161 [DEBUG] [Thread-208827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:07:46.170 [DEBUG] [Thread-208827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:07:46.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:07:46.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:07:46.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:07:46.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:07:46.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:07:46.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:07:46.205 [DEBUG] [Thread-208827] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:07:52.195 [DEBUG] [Thread-208829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:01.400 [DEBUG] [Thread-208830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:07.244 [DEBUG] [Thread-208831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:13.351 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:13.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:16.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:08:16.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:08:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:08:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 8, 8), 19.91, 26.65, 0.0, 27.45, 20.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:08:18.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:08:08
2026-02-15T18:08:18.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:08:18.622 [DEBUG] [Thread-208832] [transport.py] [_log()] starting thread (client mode): 0xa2dc0220
2026-02-15T18:08:18.623 [DEBUG] [Thread-208832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:08:18.644 [DEBUG] [Thread-208832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:08:18.644 [INFO] [Thread-208832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] client lang: <none>
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] server lang: <none>
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] kex follows: False
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] Compression: none
2026-02-15T18:08:18.648 [DEBUG] [Thread-208832] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:08:18.667 [DEBUG] [Thread-208832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:08:18.668 [DEBUG] [Thread-208832] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:08:18.668 [DEBUG] [Thread-208832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:08:18.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:08:18.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:08:18.671 [DEBUG] [Thread-208832] [transport.py] [_log()] userauth is OK
2026-02-15T18:08:18.671 [DEBUG] [Thread-208832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:08:18.671 [DEBUG] [Thread-208832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:08:18.671 [DEBUG] [Thread-208832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:08:18.671 [DEBUG] [Thread-208832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:08:18.690 [INFO] [Thread-208832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:08:18.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:08:19.321 [DEBUG] [Thread-208832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:08:19.321 [DEBUG] [Thread-208832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:08:19.322 [DEBUG] [Thread-208832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:08:19.362 [DEBUG] [Thread-208832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:08:19.362 [DEBUG] [Thread-208832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:08:19.365 [DEBUG] [Thread-208832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:08:19.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:08:19.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:08:19.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:08:19.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:08:19.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:08:19.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:08:19.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:08:19.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:08:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:08:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.671970 -999.00  +20.60  23.23     32   +3.70 1 1 1 1 1   887    0 15.24 -74.71 ----- 18.8 23.2 170.0 27.9 23.8 -29.0 23.9 -28.1 25.2 -27.0 25.6 -29.0
2026-02-15T18:08:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:08:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:08:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.671970
2026-02-15T18:08:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:08:19.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:08:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:08:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:08:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:08:19.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:08:08', tmtdew=19.91, humidity=26.65, cloud=0.0, wind=27.45, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:07:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:08:19.390 [DEBUG] [Thread-208832] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:08:19.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:08:19.486 [DEBUG] [Thread-208835] [transport.py] [_log()] starting thread (client mode): 0xa2dc1fc0
2026-02-15T18:08:19.486 [DEBUG] [Thread-208835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:08:19.500 [DEBUG] [Thread-208835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:08:19.500 [INFO] [Thread-208835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:08:19.508 [DEBUG] [Thread-208835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:08:19.508 [DEBUG] [Thread-208835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] client lang: <none>
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] server lang: <none>
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] kex follows: False
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] Compression: none
2026-02-15T18:08:19.509 [DEBUG] [Thread-208835] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:08:19.574 [DEBUG] [Thread-208835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:08:19.575 [DEBUG] [Thread-208835] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:08:19.575 [DEBUG] [Thread-208835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:08:19.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:08:19.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:08:19.636 [DEBUG] [Thread-208835] [transport.py] [_log()] userauth is OK
2026-02-15T18:08:19.636 [DEBUG] [Thread-208835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:08:19.636 [DEBUG] [Thread-208835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:08:19.636 [DEBUG] [Thread-208835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:08:19.636 [DEBUG] [Thread-208835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:08:19.656 [INFO] [Thread-208835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:08:19.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:08:19.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:08:20.472 [DEBUG] [Thread-208835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:08:20.472 [DEBUG] [Thread-208835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:08:20.520 [DEBUG] [Thread-208835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:08:20.520 [DEBUG] [Thread-208835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:08:20.529 [DEBUG] [Thread-208835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:08:20.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:08:20.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:08:20.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:08:20.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:08:20.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:08:20.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:08:20.564 [DEBUG] [Thread-208835] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:08:22.283 [DEBUG] [Thread-208837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:37.336 [DEBUG] [Thread-208838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:08:50.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:08:50.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:08:52.374 [DEBUG] [Thread-208839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:08:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 8, 43), 19.9, 26.65, 0.0, 25.92, 20.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:08:52.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:08:43
2026-02-15T18:08:52.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:08:52.883 [DEBUG] [Thread-208840] [transport.py] [_log()] starting thread (client mode): 0xa2dc3760
2026-02-15T18:08:52.883 [DEBUG] [Thread-208840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:08:52.894 [DEBUG] [Thread-208840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:08:52.895 [INFO] [Thread-208840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] client lang: <none>
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] server lang: <none>
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] kex follows: False
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] Compression: none
2026-02-15T18:08:52.896 [DEBUG] [Thread-208840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:08:52.907 [DEBUG] [Thread-208840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:08:52.907 [DEBUG] [Thread-208840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:08:52.907 [DEBUG] [Thread-208840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:08:52.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:08:52.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:08:52.909 [DEBUG] [Thread-208840] [transport.py] [_log()] userauth is OK
2026-02-15T18:08:52.909 [DEBUG] [Thread-208840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:08:52.909 [DEBUG] [Thread-208840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:08:52.909 [DEBUG] [Thread-208840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:08:52.909 [DEBUG] [Thread-208840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:08:52.918 [INFO] [Thread-208840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:08:52.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:08:53.615 [DEBUG] [Thread-208840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:08:53.615 [DEBUG] [Thread-208840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:08:53.616 [DEBUG] [Thread-208840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:08:53.656 [DEBUG] [Thread-208840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:08:53.657 [DEBUG] [Thread-208840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:08:53.660 [DEBUG] [Thread-208840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:08:53.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:08:53.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:08:53.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:08:53.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:08:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:08:53.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:08:53.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:08:53.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:08:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:08:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.672317 -999.00  +20.60  14.18     32   +3.70 1 1 1 1 1   887    0 15.28 -70.69 ----- 22.3 14.2 173.0 24.3 23.8 -28.9 23.8 -27.2 25.2 -26.1 25.6 -28.6
2026-02-15T18:08:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:08:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:08:53.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.672317
2026-02-15T18:08:53.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:08:53.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:08:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:08:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:08:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:08:53.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:08:43', tmtdew=19.9, humidity=26.65, cloud=0.0, wind=25.92, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:08:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:08:53.688 [DEBUG] [Thread-208840] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:08:53.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:08:53.786 [DEBUG] [Thread-208843] [transport.py] [_log()] starting thread (client mode): 0xa2dc0ac0
2026-02-15T18:08:53.786 [DEBUG] [Thread-208843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:08:53.801 [DEBUG] [Thread-208843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:08:53.802 [INFO] [Thread-208843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:08:53.810 [DEBUG] [Thread-208843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] client lang: <none>
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] server lang: <none>
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] kex follows: False
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:08:53.811 [DEBUG] [Thread-208843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:08:53.812 [DEBUG] [Thread-208843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:08:53.812 [DEBUG] [Thread-208843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:08:53.812 [DEBUG] [Thread-208843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:08:53.812 [DEBUG] [Thread-208843] [transport.py] [_log()] Compression: none
2026-02-15T18:08:53.812 [DEBUG] [Thread-208843] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:08:53.868 [DEBUG] [Thread-208843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:08:53.869 [DEBUG] [Thread-208843] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:08:53.870 [DEBUG] [Thread-208843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:08:53.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:08:53.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:08:53.930 [DEBUG] [Thread-208843] [transport.py] [_log()] userauth is OK
2026-02-15T18:08:53.931 [DEBUG] [Thread-208843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:08:53.931 [DEBUG] [Thread-208843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:08:53.931 [DEBUG] [Thread-208843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:08:53.931 [DEBUG] [Thread-208843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:08:53.950 [INFO] [Thread-208843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:08:53.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:08:53.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:08:54.757 [DEBUG] [Thread-208843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:08:54.758 [DEBUG] [Thread-208843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:08:54.805 [DEBUG] [Thread-208843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:08:54.806 [DEBUG] [Thread-208843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:08:54.815 [DEBUG] [Thread-208843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:08:54.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:08:54.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:08:54.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:08:54.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:08:54.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:08:54.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:08:54.853 [DEBUG] [Thread-208843] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:09:01.442 [DEBUG] [Thread-208845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:07.410 [DEBUG] [Thread-208846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:13.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:13.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:22.466 [DEBUG] [Thread-208847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:09:24.846 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:09:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:09:26.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 9, 18), 19.97, 26.55, 0.0, 23.82, 20.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:09:26.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:09:18
2026-02-15T18:09:27.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:09:27.209 [DEBUG] [Thread-208848] [transport.py] [_log()] starting thread (client mode): 0xa2dc15a0
2026-02-15T18:09:27.209 [DEBUG] [Thread-208848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:09:27.230 [DEBUG] [Thread-208848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:09:27.230 [INFO] [Thread-208848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] client lang: <none>
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] server lang: <none>
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] kex follows: False
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:09:27.233 [DEBUG] [Thread-208848] [transport.py] [_log()] Compression: none
2026-02-15T18:09:27.234 [DEBUG] [Thread-208848] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:09:27.251 [DEBUG] [Thread-208848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:09:27.252 [DEBUG] [Thread-208848] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:09:27.252 [DEBUG] [Thread-208848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:09:27.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:09:27.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:09:27.254 [DEBUG] [Thread-208848] [transport.py] [_log()] userauth is OK
2026-02-15T18:09:27.255 [DEBUG] [Thread-208848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:09:27.255 [DEBUG] [Thread-208848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:09:27.255 [DEBUG] [Thread-208848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:09:27.255 [DEBUG] [Thread-208848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:09:27.280 [INFO] [Thread-208848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:09:27.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:09:27.901 [DEBUG] [Thread-208848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:09:27.901 [DEBUG] [Thread-208848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:09:27.901 [DEBUG] [Thread-208848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:09:27.942 [DEBUG] [Thread-208848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:09:27.943 [DEBUG] [Thread-208848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:09:27.946 [DEBUG] [Thread-208848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:09:27.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:09:27.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:09:27.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:09:27.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:09:27.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:09:27.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:09:27.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:09:27.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:09:27.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:09:27.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.673011 -999.00  +20.50  28.93     33   +3.70 1 1 1 1 1   887    0 15.09 -72.03 ----- 21.2 28.9 164.0 34.6 23.7 -29.8 23.8 -27.8 25.1 -27.3 25.4 -29.3
2026-02-15T18:09:27.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:09:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:09:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.673011
2026-02-15T18:09:27.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:09:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:09:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:09:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:09:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:09:27.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:09:18', tmtdew=19.97, humidity=26.55, cloud=0.0, wind=23.82, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:09:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:09:27.972 [DEBUG] [Thread-208848] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:09:28.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:09:28.063 [DEBUG] [Thread-208851] [transport.py] [_log()] starting thread (client mode): 0xa2d54e20
2026-02-15T18:09:28.063 [DEBUG] [Thread-208851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:09:28.081 [DEBUG] [Thread-208851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:09:28.081 [INFO] [Thread-208851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:09:28.090 [DEBUG] [Thread-208851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:09:28.090 [DEBUG] [Thread-208851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:09:28.090 [DEBUG] [Thread-208851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] client lang: <none>
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] server lang: <none>
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] kex follows: False
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] Compression: none
2026-02-15T18:09:28.091 [DEBUG] [Thread-208851] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:09:28.153 [DEBUG] [Thread-208851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:09:28.155 [DEBUG] [Thread-208851] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:09:28.156 [DEBUG] [Thread-208851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:09:28.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:09:28.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:09:28.209 [DEBUG] [Thread-208851] [transport.py] [_log()] userauth is OK
2026-02-15T18:09:28.209 [DEBUG] [Thread-208851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:09:28.210 [DEBUG] [Thread-208851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:09:28.210 [DEBUG] [Thread-208851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:09:28.210 [DEBUG] [Thread-208851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:09:28.228 [INFO] [Thread-208851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:09:28.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:09:28.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:09:29.110 [DEBUG] [Thread-208851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:09:29.110 [DEBUG] [Thread-208851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:09:29.158 [DEBUG] [Thread-208851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:09:29.158 [DEBUG] [Thread-208851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:09:29.167 [DEBUG] [Thread-208851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:09:29.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:09:29.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:09:29.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:09:29.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:09:29.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:09:29.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:09:29.204 [DEBUG] [Thread-208851] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:09:37.503 [DEBUG] [Thread-208853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:52.555 [DEBUG] [Thread-208854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:09:59.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:09:59.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:09:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:10:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 9, 18), 19.97, 26.55, 0.0, 23.82, 20.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:10:01.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:09:18
2026-02-15T18:10:01.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:10:01.473 [DEBUG] [Thread-208855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:10:01.590 [DEBUG] [Thread-208856] [transport.py] [_log()] starting thread (client mode): 0xa2dc11b0
2026-02-15T18:10:01.590 [DEBUG] [Thread-208856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:10:01.610 [DEBUG] [Thread-208856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:10:01.610 [INFO] [Thread-208856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:10:01.613 [DEBUG] [Thread-208856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:10:01.613 [DEBUG] [Thread-208856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] client lang: <none>
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] server lang: <none>
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] kex follows: False
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:10:01.614 [DEBUG] [Thread-208856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:10:01.615 [DEBUG] [Thread-208856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:10:01.615 [DEBUG] [Thread-208856] [transport.py] [_log()] Compression: none
2026-02-15T18:10:01.615 [DEBUG] [Thread-208856] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:10:01.632 [DEBUG] [Thread-208856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:10:01.632 [DEBUG] [Thread-208856] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:10:01.633 [DEBUG] [Thread-208856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:10:01.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:10:01.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:10:01.635 [DEBUG] [Thread-208856] [transport.py] [_log()] userauth is OK
2026-02-15T18:10:01.635 [DEBUG] [Thread-208856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:10:01.635 [DEBUG] [Thread-208856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:10:01.635 [DEBUG] [Thread-208856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:10:01.635 [DEBUG] [Thread-208856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:10:01.670 [INFO] [Thread-208856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:10:01.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:10:02.267 [DEBUG] [Thread-208856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:10:02.267 [DEBUG] [Thread-208856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:10:02.268 [DEBUG] [Thread-208856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:10:02.308 [DEBUG] [Thread-208856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:10:02.309 [DEBUG] [Thread-208856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:10:02.311 [DEBUG] [Thread-208856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:10:02.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:10:02.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:10:02.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:10:02.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:10:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:10:02.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:10:02.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:10:02.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:10:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:10:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.673358 -999.00  +20.50  21.99     33   +3.70 1 1 1 1 1   887    0 15.45 -74.68 ----- 23.1 22.0 161.4 26.2 23.6 -28.9 23.7 -28.3 24.9 -26.8 25.4 -29.1
2026-02-15T18:10:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:10:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:10:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.673358
2026-02-15T18:10:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:10:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:10:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:10:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:10:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:10:02.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:09:18', tmtdew=19.97, humidity=26.55, cloud=0.0, wind=23.82, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:09:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:10:02.333 [DEBUG] [Thread-208856] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:10:02.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:10:02.428 [DEBUG] [Thread-208859] [transport.py] [_log()] starting thread (client mode): 0xa5743fa0
2026-02-15T18:10:02.428 [DEBUG] [Thread-208859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:10:02.443 [DEBUG] [Thread-208859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:10:02.443 [INFO] [Thread-208859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:10:02.450 [DEBUG] [Thread-208859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] client lang: <none>
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] server lang: <none>
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] kex follows: False
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:10:02.451 [DEBUG] [Thread-208859] [transport.py] [_log()] Compression: none
2026-02-15T18:10:02.452 [DEBUG] [Thread-208859] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:10:02.509 [DEBUG] [Thread-208859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:10:02.510 [DEBUG] [Thread-208859] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:10:02.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:10:02.511 [DEBUG] [Thread-208859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:10:02.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:10:02.566 [DEBUG] [Thread-208859] [transport.py] [_log()] userauth is OK
2026-02-15T18:10:02.566 [DEBUG] [Thread-208859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:10:02.566 [DEBUG] [Thread-208859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:10:02.566 [DEBUG] [Thread-208859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:10:02.566 [DEBUG] [Thread-208859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:10:02.585 [INFO] [Thread-208859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:10:02.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:10:02.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:10:03.499 [DEBUG] [Thread-208859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:10:03.499 [DEBUG] [Thread-208859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:10:03.547 [DEBUG] [Thread-208859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:10:03.548 [DEBUG] [Thread-208859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:10:03.557 [DEBUG] [Thread-208859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:10:03.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:10: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')
2026-02-15T18:10:03.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:10:03.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:10:03.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:10:03.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:10:03.599 [DEBUG] [Thread-208859] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:10:07.591 [DEBUG] [Thread-208861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:10:13.639 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:10:13.641 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:10:22.638 [DEBUG] [Thread-208862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:10:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:10:33.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:10:33.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:10:35.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 9, 53), 19.99, 26.43, 0.0, 26.34, 20.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:10:35.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:09:53
2026-02-15T18:10:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:10:36.314 [DEBUG] [Thread-208863] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-15T18:10:36.314 [DEBUG] [Thread-208863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:10:36.335 [DEBUG] [Thread-208863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:10:36.335 [INFO] [Thread-208863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] client lang: <none>
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] server lang: <none>
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] kex follows: False
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] Compression: none
2026-02-15T18:10:36.338 [DEBUG] [Thread-208863] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:10:36.356 [DEBUG] [Thread-208863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:10:36.357 [DEBUG] [Thread-208863] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:10:36.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:10:36.358 [DEBUG] [Thread-208863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:10:36.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:10:36.360 [DEBUG] [Thread-208863] [transport.py] [_log()] userauth is OK
2026-02-15T18:10:36.360 [DEBUG] [Thread-208863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:10:36.361 [DEBUG] [Thread-208863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:10:36.361 [DEBUG] [Thread-208863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:10:36.361 [DEBUG] [Thread-208863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:10:36.396 [INFO] [Thread-208863] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:10:36.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:10:37.039 [DEBUG] [Thread-208863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:10:37.039 [DEBUG] [Thread-208863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:10:37.039 [DEBUG] [Thread-208863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:10:37.081 [DEBUG] [Thread-208863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:10:37.081 [DEBUG] [Thread-208863] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:10:37.084 [DEBUG] [Thread-208863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:10:37.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:10:37.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:10:37.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:10:37.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:10:37.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:10:37.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:10:37.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:10:37.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:10:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:10:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.673705 -999.00  +20.40  25.06     33   +3.60 1 1 1 1 1   887    0 15.07 -74.31 ----- 23.4 25.1 160.8 34.1 23.5 -29.3 23.6 -27.8 24.9 -27.6 25.2 -29.6
2026-02-15T18:10:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:10:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:10:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.673705
2026-02-15T18:10:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:10:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:10:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:10:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:10:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:10:37.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:09:53', tmtdew=19.99, humidity=26.43, cloud=0.0, wind=26.34, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:10:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:10:37.112 [DEBUG] [Thread-208863] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:10:37.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:10:37.209 [DEBUG] [Thread-208866] [transport.py] [_log()] starting thread (client mode): 0xa2d55480
2026-02-15T18:10:37.209 [DEBUG] [Thread-208866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:10:37.223 [DEBUG] [Thread-208866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:10:37.224 [INFO] [Thread-208866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:10:37.231 [DEBUG] [Thread-208866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:10:37.231 [DEBUG] [Thread-208866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:10:37.231 [DEBUG] [Thread-208866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:10:37.231 [DEBUG] [Thread-208866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:37.231 [DEBUG] [Thread-208866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] client lang: <none>
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] server lang: <none>
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] kex follows: False
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] Compression: none
2026-02-15T18:10:37.232 [DEBUG] [Thread-208866] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:10:37.295 [DEBUG] [Thread-208866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:10:37.296 [DEBUG] [Thread-208866] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:10:37.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:10:37.297 [DEBUG] [Thread-208866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:10:37.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:10:37.354 [DEBUG] [Thread-208866] [transport.py] [_log()] userauth is OK
2026-02-15T18:10:37.354 [DEBUG] [Thread-208866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:10:37.354 [DEBUG] [Thread-208866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:10:37.354 [DEBUG] [Thread-208866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:10:37.354 [DEBUG] [Thread-208866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:10:37.374 [INFO] [Thread-208866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:10:37.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:10:37.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:10:37.675 [DEBUG] [Thread-208868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:10:38.212 [DEBUG] [Thread-208866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:10:38.212 [DEBUG] [Thread-208866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:10:38.260 [DEBUG] [Thread-208866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:10:38.261 [DEBUG] [Thread-208866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:10:38.270 [DEBUG] [Thread-208866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:10:38.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:10: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')
2026-02-15T18:10:38.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:10:38.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:10:38.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:10:38.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:10:38.307 [DEBUG] [Thread-208866] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:10:52.737 [DEBUG] [Thread-208869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:01.507 [DEBUG] [Thread-208870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:07.770 [DEBUG] [Thread-208871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:08.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:11:08.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:11:08.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:11:10.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 10, 29), 19.87, 26.61, 0.0, 25.25, 20.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:11:10.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:10:29
2026-02-15T18:11:10.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:11:10.683 [DEBUG] [Thread-208872] [transport.py] [_log()] starting thread (client mode): 0xa2d1a830
2026-02-15T18:11:10.684 [DEBUG] [Thread-208872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:11:10.699 [DEBUG] [Thread-208872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:11:10.699 [INFO] [Thread-208872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] client lang: <none>
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] server lang: <none>
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] kex follows: False
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] Compression: none
2026-02-15T18:11:10.702 [DEBUG] [Thread-208872] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:11:10.721 [DEBUG] [Thread-208872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:11:10.721 [DEBUG] [Thread-208872] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:11:10.722 [DEBUG] [Thread-208872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:11:10.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:11:10.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:11:10.724 [DEBUG] [Thread-208872] [transport.py] [_log()] userauth is OK
2026-02-15T18:11:10.724 [DEBUG] [Thread-208872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:11:10.724 [DEBUG] [Thread-208872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:11:10.724 [DEBUG] [Thread-208872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:11:10.724 [DEBUG] [Thread-208872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:11:10.750 [INFO] [Thread-208872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:11:10.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:11:11.420 [DEBUG] [Thread-208872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:11:11.421 [DEBUG] [Thread-208872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:11:11.421 [DEBUG] [Thread-208872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:11:11.461 [DEBUG] [Thread-208872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:11:11.461 [DEBUG] [Thread-208872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:11:11.464 [DEBUG] [Thread-208872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:11:11.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:11:11.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:11:11.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:11:11.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:11:11.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:11:11.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:11:11.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:11:11.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:11:11.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:11:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.674053 -999.00  +20.40  19.79     33   +3.70 1 1 1 1 1   887    0 15.12 -68.01 ----- 22.5 19.8 172.2 28.4 23.6 -28.9 23.5 -27.5 24.9 -26.4 25.3 -28.6
2026-02-15T18:11:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:11:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:11:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.674053
2026-02-15T18:11:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:11:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:11:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:11:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:11:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:11:11.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:10:29', tmtdew=19.87, humidity=26.61, cloud=0.0, wind=25.25, temperature=20.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:10:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:11:11.489 [DEBUG] [Thread-208872] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:11:11.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:11:11.588 [DEBUG] [Thread-208875] [transport.py] [_log()] starting thread (client mode): 0xa2d54730
2026-02-15T18:11:11.588 [DEBUG] [Thread-208875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:11:11.602 [DEBUG] [Thread-208875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:11:11.602 [INFO] [Thread-208875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] client lang: <none>
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] server lang: <none>
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] kex follows: False
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:11:11.610 [DEBUG] [Thread-208875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:11:11.611 [DEBUG] [Thread-208875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:11:11.611 [DEBUG] [Thread-208875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:11:11.611 [DEBUG] [Thread-208875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:11:11.611 [DEBUG] [Thread-208875] [transport.py] [_log()] Compression: none
2026-02-15T18:11:11.611 [DEBUG] [Thread-208875] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:11:11.669 [DEBUG] [Thread-208875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:11:11.670 [DEBUG] [Thread-208875] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:11:11.670 [DEBUG] [Thread-208875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:11:11.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:11:11.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:11:11.725 [DEBUG] [Thread-208875] [transport.py] [_log()] userauth is OK
2026-02-15T18:11:11.726 [DEBUG] [Thread-208875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:11:11.726 [DEBUG] [Thread-208875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:11:11.726 [DEBUG] [Thread-208875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:11:11.726 [DEBUG] [Thread-208875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:11:11.739 [INFO] [Thread-208875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:11:11.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:11:11.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:11:12.562 [DEBUG] [Thread-208875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:11:12.562 [DEBUG] [Thread-208875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:11:12.614 [DEBUG] [Thread-208875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:11:12.614 [DEBUG] [Thread-208875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:11:12.624 [DEBUG] [Thread-208875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:11:12.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:11:12.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:11:12.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:11:12.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:11:12.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:11:12.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:11:12.673 [DEBUG] [Thread-208875] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:11:13.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:13.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:22.810 [DEBUG] [Thread-208877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:37.861 [DEBUG] [Thread-208878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:11:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:11:42.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:11:42.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:11:45.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 11, 4), 19.8, 26.73, 0.0, 25.81, 20.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:11:45.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:11:04
2026-02-15T18:11:45.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:11:45.939 [DEBUG] [Thread-208879] [transport.py] [_log()] starting thread (client mode): 0xa57e1540
2026-02-15T18:11:45.939 [DEBUG] [Thread-208879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:11:45.961 [DEBUG] [Thread-208879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:11:45.961 [INFO] [Thread-208879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] client lang: <none>
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] server lang: <none>
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] kex follows: False
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] Compression: none
2026-02-15T18:11:45.964 [DEBUG] [Thread-208879] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:11:45.982 [DEBUG] [Thread-208879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:11:45.983 [DEBUG] [Thread-208879] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:11:45.983 [DEBUG] [Thread-208879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:11:45.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:11:45.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:11:45.986 [DEBUG] [Thread-208879] [transport.py] [_log()] userauth is OK
2026-02-15T18:11:45.986 [DEBUG] [Thread-208879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:11:45.986 [DEBUG] [Thread-208879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:11:45.986 [DEBUG] [Thread-208879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:11:45.986 [DEBUG] [Thread-208879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:11:46.005 [INFO] [Thread-208879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:11:46.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:11:46.640 [DEBUG] [Thread-208879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:11:46.641 [DEBUG] [Thread-208879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:11:46.641 [DEBUG] [Thread-208879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:11:46.681 [DEBUG] [Thread-208879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:11:46.681 [DEBUG] [Thread-208879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:11:46.685 [DEBUG] [Thread-208879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:11:46.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:11:46.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:11:46.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:11:46.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:11:46.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:11:46.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:11:46.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:11:46.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:11:46.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:11:46.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.674400 -999.00  +20.40  14.05     33   +3.70 1 1 1 1 1   887    0 15.47 -72.78 ----- 18.0 14.1 160.4 27.7 23.5 -28.8 23.5 -27.3 24.9 -26.1 25.3 -28.4
2026-02-15T18:11:46.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:11:46.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:11:46.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.674400
2026-02-15T18:11:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:11:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:11:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:11:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:11:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:11:46.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:11:04', tmtdew=19.8, humidity=26.73, cloud=0.0, wind=25.81, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:11:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:11:46.714 [DEBUG] [Thread-208879] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:11:46.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:11:46.811 [DEBUG] [Thread-208882] [transport.py] [_log()] starting thread (client mode): 0xa2dc3130
2026-02-15T18:11:46.811 [DEBUG] [Thread-208882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:11:46.827 [DEBUG] [Thread-208882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:11:46.828 [INFO] [Thread-208882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:46.835 [DEBUG] [Thread-208882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] client lang: <none>
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] server lang: <none>
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] kex follows: False
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:11:46.836 [DEBUG] [Thread-208882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:11:46.837 [DEBUG] [Thread-208882] [transport.py] [_log()] Compression: none
2026-02-15T18:11:46.837 [DEBUG] [Thread-208882] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:11:46.895 [DEBUG] [Thread-208882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:11:46.896 [DEBUG] [Thread-208882] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:11:46.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:11:46.897 [DEBUG] [Thread-208882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:11:46.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:11:46.955 [DEBUG] [Thread-208882] [transport.py] [_log()] userauth is OK
2026-02-15T18:11:46.955 [DEBUG] [Thread-208882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:11:46.955 [DEBUG] [Thread-208882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:11:46.955 [DEBUG] [Thread-208882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:11:46.955 [DEBUG] [Thread-208882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:11:46.981 [INFO] [Thread-208882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:11:46.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:11:46.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:11:47.835 [DEBUG] [Thread-208882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:11:47.835 [DEBUG] [Thread-208882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:11:47.883 [DEBUG] [Thread-208882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:11:47.883 [DEBUG] [Thread-208882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:11:47.897 [DEBUG] [Thread-208882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:11:47.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:11: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')
2026-02-15T18:11: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
2026-02-15T18:11:47.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:11:47.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:11:47.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:11:47.931 [DEBUG] [Thread-208882] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:11:52.898 [DEBUG] [Thread-208884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:01.540 [DEBUG] [Thread-208885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:07.950 [DEBUG] [Thread-208886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:13.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:13.923 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:17.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:12:17.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:12:17.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:12:20.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 11, 39), 20.47, 25.66, 0.0, 31.01, 21.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:12:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:11:39
2026-02-15T18:12:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:12:20.866 [DEBUG] [Thread-208887] [transport.py] [_log()] starting thread (client mode): 0xa2d55450
2026-02-15T18:12:20.867 [DEBUG] [Thread-208887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:12:20.886 [DEBUG] [Thread-208887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:12:20.886 [INFO] [Thread-208887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:12:20.889 [DEBUG] [Thread-208887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:12:20.889 [DEBUG] [Thread-208887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:12:20.889 [DEBUG] [Thread-208887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:12:20.889 [DEBUG] [Thread-208887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] client lang: <none>
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] server lang: <none>
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] kex follows: False
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:12:20.890 [DEBUG] [Thread-208887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:12:20.891 [DEBUG] [Thread-208887] [transport.py] [_log()] Compression: none
2026-02-15T18:12:20.891 [DEBUG] [Thread-208887] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:12:20.908 [DEBUG] [Thread-208887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:12:20.909 [DEBUG] [Thread-208887] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:12:20.909 [DEBUG] [Thread-208887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:12:20.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:12:20.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:12:20.911 [DEBUG] [Thread-208887] [transport.py] [_log()] userauth is OK
2026-02-15T18:12:20.911 [DEBUG] [Thread-208887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:12:20.912 [DEBUG] [Thread-208887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:12:20.912 [DEBUG] [Thread-208887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:12:20.912 [DEBUG] [Thread-208887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:12:20.935 [INFO] [Thread-208887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:12:20.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:12:21.686 [DEBUG] [Thread-208887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:12:21.687 [DEBUG] [Thread-208887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:12:21.688 [DEBUG] [Thread-208887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:12:21.727 [DEBUG] [Thread-208887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:12:21.728 [DEBUG] [Thread-208887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:12:21.731 [DEBUG] [Thread-208887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:12:21.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:12:21.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:12:21.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:12:21.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:12:21.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:12:21.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:12:21.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:12:21.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:12:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:12:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.674747 -999.00  +20.30  21.95     33   +3.60 1 1 1 1 1   887    0 14.93 -76.58 ----- 22.5 21.9 164.6 27.9 23.4 -29.0 23.5 -27.3 24.8 -27.6 -999.0 -999.0
2026-02-15T18:12:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:12:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:12:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.674747
2026-02-15T18:12:21.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:12:21.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:12:21.759 [DEBUG] [Thread-208887] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:12:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:12:21.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:12:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:12:21.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:11:39', tmtdew=20.47, humidity=25.66, cloud=0.0, wind=31.01, temperature=21.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:11:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:12:21.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:12:21.855 [DEBUG] [Thread-208890] [transport.py] [_log()] starting thread (client mode): 0xa5759210
2026-02-15T18:12:21.855 [DEBUG] [Thread-208890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:12:21.869 [DEBUG] [Thread-208890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:12:21.869 [INFO] [Thread-208890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:12:21.877 [DEBUG] [Thread-208890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:12:21.877 [DEBUG] [Thread-208890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:12:21.877 [DEBUG] [Thread-208890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:12:21.877 [DEBUG] [Thread-208890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:21.877 [DEBUG] [Thread-208890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:21.877 [DEBUG] [Thread-208890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] client lang: <none>
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] server lang: <none>
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] kex follows: False
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] Compression: none
2026-02-15T18:12:21.878 [DEBUG] [Thread-208890] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:12:21.934 [DEBUG] [Thread-208890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:12:21.935 [DEBUG] [Thread-208890] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:12:21.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:12:21.936 [DEBUG] [Thread-208890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:12:21.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:12:21.991 [DEBUG] [Thread-208890] [transport.py] [_log()] userauth is OK
2026-02-15T18:12:21.992 [DEBUG] [Thread-208890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:12:21.992 [DEBUG] [Thread-208890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:12:21.992 [DEBUG] [Thread-208890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:12:21.992 [DEBUG] [Thread-208890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:12:22.010 [INFO] [Thread-208890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:12:22.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:12:22.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:12:22.838 [DEBUG] [Thread-208890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:12:22.839 [DEBUG] [Thread-208890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:12:22.887 [DEBUG] [Thread-208890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:12:22.887 [DEBUG] [Thread-208890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:12:22.896 [DEBUG] [Thread-208890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:12:22.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:12:22.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:12:22.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:12:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:12:22.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:12:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:12:22.939 [DEBUG] [Thread-208890] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:12:22.986 [DEBUG] [Thread-208892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:38.033 [DEBUG] [Thread-208893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:52.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:12:52.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:12:52.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:12:53.068 [DEBUG] [Thread-208894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:12:55.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 12, 15), 19.7, 26.88, 0.0, 26.13, 20.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:12:55.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:12:15
2026-02-15T18:12:55.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:12:55.727 [DEBUG] [Thread-208895] [transport.py] [_log()] starting thread (client mode): 0xa5758c70
2026-02-15T18:12:55.727 [DEBUG] [Thread-208895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:12:55.747 [DEBUG] [Thread-208895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:12:55.747 [INFO] [Thread-208895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:12:55.750 [DEBUG] [Thread-208895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] client lang: <none>
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] server lang: <none>
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] kex follows: False
2026-02-15T18:12:55.751 [DEBUG] [Thread-208895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:12:55.752 [DEBUG] [Thread-208895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:12:55.752 [DEBUG] [Thread-208895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:12:55.752 [DEBUG] [Thread-208895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:12:55.752 [DEBUG] [Thread-208895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:12:55.752 [DEBUG] [Thread-208895] [transport.py] [_log()] Compression: none
2026-02-15T18:12:55.752 [DEBUG] [Thread-208895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:12:55.771 [DEBUG] [Thread-208895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:12:55.771 [DEBUG] [Thread-208895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:12:55.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:12:55.772 [DEBUG] [Thread-208895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:12:55.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:12:55.774 [DEBUG] [Thread-208895] [transport.py] [_log()] userauth is OK
2026-02-15T18:12:55.775 [DEBUG] [Thread-208895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:12:55.775 [DEBUG] [Thread-208895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:12:55.775 [DEBUG] [Thread-208895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:12:55.775 [DEBUG] [Thread-208895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:12:55.799 [INFO] [Thread-208895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:12:55.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:12:56.416 [DEBUG] [Thread-208895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:12:56.416 [DEBUG] [Thread-208895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:12:56.417 [DEBUG] [Thread-208895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:12:56.458 [DEBUG] [Thread-208895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:12:56.458 [DEBUG] [Thread-208895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:12:56.462 [DEBUG] [Thread-208895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:12:56.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:12:56.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:12:56.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:12:56.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:12:56.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:12:56.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:12:56.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:12:56.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:12:56.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:12:56.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.675095 -999.00  +20.30  22.99     33   +3.60 1 1 1 1 1   887    0 14.88 -77.23 ----- 20.7 23.0 161.0 29.9 23.4 -29.0 23.4 -27.5 24.6 -27.3 25.1 -29.0
2026-02-15T18:12:56.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:12:56.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:12:56.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.675095
2026-02-15T18:12:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:12:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:12:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:12:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:12:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:12:56.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:12:15', tmtdew=19.7, humidity=26.88, cloud=0.0, wind=26.13, temperature=20.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:12:08.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:12:56.488 [DEBUG] [Thread-208895] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:12:56.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:12:56.583 [DEBUG] [Thread-208898] [transport.py] [_log()] starting thread (client mode): 0xa2dc21d0
2026-02-15T18:12:56.584 [DEBUG] [Thread-208898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:12:56.600 [DEBUG] [Thread-208898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:12:56.600 [INFO] [Thread-208898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:12:56.607 [DEBUG] [Thread-208898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] client lang: <none>
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] server lang: <none>
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] kex follows: False
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:12:56.608 [DEBUG] [Thread-208898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:12:56.609 [DEBUG] [Thread-208898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:12:56.609 [DEBUG] [Thread-208898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:12:56.609 [DEBUG] [Thread-208898] [transport.py] [_log()] Compression: none
2026-02-15T18:12:56.609 [DEBUG] [Thread-208898] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:12:56.668 [DEBUG] [Thread-208898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:12:56.668 [DEBUG] [Thread-208898] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:12:56.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:12:56.669 [DEBUG] [Thread-208898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:12:56.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:12:56.724 [DEBUG] [Thread-208898] [transport.py] [_log()] userauth is OK
2026-02-15T18:12:56.724 [DEBUG] [Thread-208898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:12:56.724 [DEBUG] [Thread-208898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:12:56.724 [DEBUG] [Thread-208898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:12:56.724 [DEBUG] [Thread-208898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:12:56.750 [INFO] [Thread-208898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:12:56.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:12:56.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:12:57.605 [DEBUG] [Thread-208898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:12:57.605 [DEBUG] [Thread-208898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:12:57.656 [DEBUG] [Thread-208898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:12:57.656 [DEBUG] [Thread-208898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:12:57.665 [DEBUG] [Thread-208898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:12:57.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:12:57.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:12:57.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:12:57.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:12:57.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:12:57.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:12:57.703 [DEBUG] [Thread-208898] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:13:01.583 [DEBUG] [Thread-208900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:13:08.105 [DEBUG] [Thread-208901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:13:14.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:13:14.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:13:23.157 [DEBUG] [Thread-208902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:13:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:13:27.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:13:27.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:13:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 12, 51), 19.57, 26.83, 0.0, 24.49, 20.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:13:30.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:12:51
2026-02-15T18:13:30.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:13:30.847 [DEBUG] [Thread-208903] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-15T18:13:30.847 [DEBUG] [Thread-208903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:13:30.867 [DEBUG] [Thread-208903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:13:30.867 [INFO] [Thread-208903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:13:30.870 [DEBUG] [Thread-208903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:13:30.870 [DEBUG] [Thread-208903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:13:30.870 [DEBUG] [Thread-208903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:13:30.870 [DEBUG] [Thread-208903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:13:30.870 [DEBUG] [Thread-208903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:13:30.870 [DEBUG] [Thread-208903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] client lang: <none>
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] server lang: <none>
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] kex follows: False
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] Compression: none
2026-02-15T18:13:30.871 [DEBUG] [Thread-208903] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:13:30.890 [DEBUG] [Thread-208903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:13:30.891 [DEBUG] [Thread-208903] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:13:30.891 [DEBUG] [Thread-208903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:13:30.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:13:30.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:13:30.893 [DEBUG] [Thread-208903] [transport.py] [_log()] userauth is OK
2026-02-15T18:13:30.893 [DEBUG] [Thread-208903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:13:30.893 [DEBUG] [Thread-208903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:13:30.893 [DEBUG] [Thread-208903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:13:30.894 [DEBUG] [Thread-208903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:13:30.915 [INFO] [Thread-208903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:13:30.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:13:31.540 [DEBUG] [Thread-208903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:13:31.540 [DEBUG] [Thread-208903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:13:31.541 [DEBUG] [Thread-208903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:13:31.581 [DEBUG] [Thread-208903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:13:31.581 [DEBUG] [Thread-208903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:13:31.584 [DEBUG] [Thread-208903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:13:31.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:13:31.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:13:31.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:13:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:13:31.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:13:31.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:13:31.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:13:31.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:13:31.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:13:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.675442 -999.00  +20.30  20.91     33   +3.60 1 1 1 1 1   887    0 14.93 -74.93 ----- 23.3 20.9 165.8 30.9 23.4 -29.0 23.4 -28.3 24.7 -26.4 25.1 -28.7
2026-02-15T18:13:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:13:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:13:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.675442
2026-02-15T18:13:31.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:13:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:13:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:13:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:13:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:13:31.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:12:51', tmtdew=19.57, humidity=26.83, cloud=0.0, wind=24.49, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:12:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:13:31.612 [DEBUG] [Thread-208903] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:13:31.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:13:31.708 [DEBUG] [Thread-208906] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-15T18:13:31.709 [DEBUG] [Thread-208906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:13:31.724 [DEBUG] [Thread-208906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:13:31.724 [INFO] [Thread-208906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:13:31.732 [DEBUG] [Thread-208906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:13:31.732 [DEBUG] [Thread-208906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:13:31.732 [DEBUG] [Thread-208906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:13:31.732 [DEBUG] [Thread-208906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:13:31.732 [DEBUG] [Thread-208906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] client lang: <none>
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] server lang: <none>
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] kex follows: False
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:13:31.733 [DEBUG] [Thread-208906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:13:31.734 [DEBUG] [Thread-208906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:13:31.734 [DEBUG] [Thread-208906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:13:31.734 [DEBUG] [Thread-208906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:13:31.734 [DEBUG] [Thread-208906] [transport.py] [_log()] Compression: none
2026-02-15T18:13:31.734 [DEBUG] [Thread-208906] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:13:31.792 [DEBUG] [Thread-208906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:13:31.793 [DEBUG] [Thread-208906] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:13:31.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:13:31.794 [DEBUG] [Thread-208906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:13:31.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:13:31.848 [DEBUG] [Thread-208906] [transport.py] [_log()] userauth is OK
2026-02-15T18:13:31.848 [DEBUG] [Thread-208906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:13:31.848 [DEBUG] [Thread-208906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:13:31.849 [DEBUG] [Thread-208906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:13:31.849 [DEBUG] [Thread-208906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:13:31.867 [INFO] [Thread-208906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:13:31.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:13:31.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:13:32.708 [DEBUG] [Thread-208906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:13:32.708 [DEBUG] [Thread-208906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:13:32.757 [DEBUG] [Thread-208906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:13:32.757 [DEBUG] [Thread-208906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:13:32.766 [DEBUG] [Thread-208906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:13:32.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:13: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')
2026-02-15T18:13:32.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:13:32.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:13:32.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:13:32.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:13:32.806 [DEBUG] [Thread-208906] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:13:38.194 [DEBUG] [Thread-208908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:13:53.246 [DEBUG] [Thread-208909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:01.618 [DEBUG] [Thread-208910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:02.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:14:02.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:14:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:14:04.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 13, 27), 19.6, 26.8, 0.0, 26.17, 20.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:14:04.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:13:27
2026-02-15T18:14:05.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:14:05.457 [DEBUG] [Thread-208911] [transport.py] [_log()] starting thread (client mode): 0xa2dc30a0
2026-02-15T18:14:05.457 [DEBUG] [Thread-208911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:14:05.476 [DEBUG] [Thread-208911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:14:05.476 [INFO] [Thread-208911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:14:05.479 [DEBUG] [Thread-208911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] client lang: <none>
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] server lang: <none>
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] kex follows: False
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] Compression: none
2026-02-15T18:14:05.480 [DEBUG] [Thread-208911] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:14:05.498 [DEBUG] [Thread-208911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:14:05.499 [DEBUG] [Thread-208911] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:14:05.499 [DEBUG] [Thread-208911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:14:05.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:14:05.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:14:05.501 [DEBUG] [Thread-208911] [transport.py] [_log()] userauth is OK
2026-02-15T18:14:05.501 [DEBUG] [Thread-208911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:14:05.501 [DEBUG] [Thread-208911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:14:05.502 [DEBUG] [Thread-208911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:14:05.502 [DEBUG] [Thread-208911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:14:05.526 [INFO] [Thread-208911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:14:05.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:14:06.155 [DEBUG] [Thread-208911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:14:06.155 [DEBUG] [Thread-208911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:14:06.156 [DEBUG] [Thread-208911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:14:06.196 [DEBUG] [Thread-208911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:14:06.197 [DEBUG] [Thread-208911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:14:06.200 [DEBUG] [Thread-208911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:14:06.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:14:06.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:14:06.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:14:06.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:14:06.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:14:06.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:14:06.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:14:06.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:14:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:14:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.675789 -999.00  +20.30  19.48     33   +3.60 1 1 1 1 1   887    0 14.96 -75.09 ----- 20.8 19.5 168.6 29.8 23.4 -28.6 23.3 -27.6 24.6 -26.7 25.1 -28.5
2026-02-15T18:14:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:14:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:14:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.675789
2026-02-15T18:14:06.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:14:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:14:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:14:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:14:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:14:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:13:27', tmtdew=19.6, humidity=26.8, cloud=0.0, wind=26.17, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:13:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:14:06.228 [DEBUG] [Thread-208911] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:14:06.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:14:06.323 [DEBUG] [Thread-208914] [transport.py] [_log()] starting thread (client mode): 0xa2d6e230
2026-02-15T18:14:06.323 [DEBUG] [Thread-208914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:14:06.340 [DEBUG] [Thread-208914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:14:06.340 [INFO] [Thread-208914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:14:06.348 [DEBUG] [Thread-208914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:14:06.349 [DEBUG] [Thread-208914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] client lang: <none>
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] server lang: <none>
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] kex follows: False
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] Compression: none
2026-02-15T18:14:06.350 [DEBUG] [Thread-208914] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:14:06.408 [DEBUG] [Thread-208914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:14:06.409 [DEBUG] [Thread-208914] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:14:06.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:14:06.410 [DEBUG] [Thread-208914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:14:06.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:14:06.467 [DEBUG] [Thread-208914] [transport.py] [_log()] userauth is OK
2026-02-15T18:14:06.467 [DEBUG] [Thread-208914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:14:06.467 [DEBUG] [Thread-208914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:14:06.467 [DEBUG] [Thread-208914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:14:06.467 [DEBUG] [Thread-208914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:14:06.488 [INFO] [Thread-208914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:14:06.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:14:06.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:14:07.363 [DEBUG] [Thread-208914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:14:07.363 [DEBUG] [Thread-208914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:14:07.411 [DEBUG] [Thread-208914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:14:07.412 [DEBUG] [Thread-208914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:14:07.421 [DEBUG] [Thread-208914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:14:07.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:14:07.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:14:07.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:14:07.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:14:07.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:14:07.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:14:07.457 [DEBUG] [Thread-208914] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:14:08.283 [DEBUG] [Thread-208916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:14.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:14.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:23.337 [DEBUG] [Thread-208917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:37.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:14:37.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:14: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
2026-02-15T18:14:38.372 [DEBUG] [Thread-208918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:14:39.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 14, 3), 19.62, 26.76, 0.0, 24.51, 20.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:14:39.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:14:03
2026-02-15T18:14:39.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:14:39.924 [DEBUG] [Thread-208919] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0b0
2026-02-15T18:14:39.924 [DEBUG] [Thread-208919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:14:39.944 [DEBUG] [Thread-208919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:14:39.944 [INFO] [Thread-208919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:14:39.954 [DEBUG] [Thread-208919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] client lang: <none>
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] server lang: <none>
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] kex follows: False
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] Compression: none
2026-02-15T18:14:39.955 [DEBUG] [Thread-208919] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:14:39.973 [DEBUG] [Thread-208919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:14:39.974 [DEBUG] [Thread-208919] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:14:39.974 [DEBUG] [Thread-208919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:14:39.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:14:39.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:14:39.976 [DEBUG] [Thread-208919] [transport.py] [_log()] userauth is OK
2026-02-15T18:14:39.976 [DEBUG] [Thread-208919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:14:39.977 [DEBUG] [Thread-208919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:14:39.977 [DEBUG] [Thread-208919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:14:39.977 [DEBUG] [Thread-208919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:14:39.993 [INFO] [Thread-208919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:14:39.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:14:40.621 [DEBUG] [Thread-208919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:14:40.621 [DEBUG] [Thread-208919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:14:40.622 [DEBUG] [Thread-208919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:14:40.662 [DEBUG] [Thread-208919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:14:40.663 [DEBUG] [Thread-208919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:14:40.666 [DEBUG] [Thread-208919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:14:40.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:14:40.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:14:40.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:14:40.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:14:40.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:14:40.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:14:40.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:14:40.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:14:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:14:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.676483 -999.00  +20.20  19.87     33   +3.50 1 1 1 1 1   887    0 14.40 -80.55 ----- 15.2 19.9 165.6 30.2 23.3 -28.6 23.3 -27.0 24.5 -26.6 25.0 -28.7
2026-02-15T18:14:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:14:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:14:40.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.676483
2026-02-15T18:14:40.700 [DEBUG] [Thread-208919] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:14:40.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:14:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:14:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:14:40.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:14:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:14:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:14:03', tmtdew=19.62, humidity=26.76, cloud=0.0, wind=24.51, temperature=20.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:14:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:14:40.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:14:40.802 [DEBUG] [Thread-208922] [transport.py] [_log()] starting thread (client mode): 0xa575ab60
2026-02-15T18:14:40.802 [DEBUG] [Thread-208922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:14:40.817 [DEBUG] [Thread-208922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:14:40.817 [INFO] [Thread-208922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:14:40.824 [DEBUG] [Thread-208922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] client lang: <none>
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] server lang: <none>
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] kex follows: False
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:14:40.825 [DEBUG] [Thread-208922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:14:40.826 [DEBUG] [Thread-208922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:14:40.826 [DEBUG] [Thread-208922] [transport.py] [_log()] Compression: none
2026-02-15T18:14:40.826 [DEBUG] [Thread-208922] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:14:40.888 [DEBUG] [Thread-208922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:14:40.889 [DEBUG] [Thread-208922] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:14:40.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:14:40.890 [DEBUG] [Thread-208922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:14:40.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:14:40.945 [DEBUG] [Thread-208922] [transport.py] [_log()] userauth is OK
2026-02-15T18:14:40.945 [DEBUG] [Thread-208922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:14:40.945 [DEBUG] [Thread-208922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:14:40.945 [DEBUG] [Thread-208922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:14:40.946 [DEBUG] [Thread-208922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:14:40.966 [INFO] [Thread-208922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:14:40.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:14:40.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:14:41.813 [DEBUG] [Thread-208922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:14:41.813 [DEBUG] [Thread-208922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:14:41.862 [DEBUG] [Thread-208922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:14:41.862 [DEBUG] [Thread-208922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:14:41.872 [DEBUG] [Thread-208922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:14:41.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:14:41.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:14:41.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:14:41.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:14:41.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:14:41.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:14:41.910 [DEBUG] [Thread-208922] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:14:53.408 [DEBUG] [Thread-208924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:01.645 [DEBUG] [Thread-208925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:08.459 [DEBUG] [Thread-208926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:11.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:15:11.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:15:11.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:15:13.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 14, 38), 20.84, 25.03, 0.0, 28.23, 21.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:15:13.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:14:38
2026-02-15T18:15:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:15:14.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:14.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:14.419 [DEBUG] [Thread-208927] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T18:15:14.419 [DEBUG] [Thread-208927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:15:14.440 [DEBUG] [Thread-208927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:15:14.441 [INFO] [Thread-208927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:14.443 [DEBUG] [Thread-208927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] client lang: <none>
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] server lang: <none>
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] kex follows: False
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] Compression: none
2026-02-15T18:15:14.444 [DEBUG] [Thread-208927] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:15:14.462 [DEBUG] [Thread-208927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:15:14.463 [DEBUG] [Thread-208927] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:15:14.463 [DEBUG] [Thread-208927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:15:14.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:15:14.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:15:14.465 [DEBUG] [Thread-208927] [transport.py] [_log()] userauth is OK
2026-02-15T18:15:14.465 [DEBUG] [Thread-208927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:15:14.466 [DEBUG] [Thread-208927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:15:14.466 [DEBUG] [Thread-208927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:15:14.466 [DEBUG] [Thread-208927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:15:14.504 [INFO] [Thread-208927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:15:14.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:15:23.043 [DEBUG] [Thread-208927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:15:23.043 [DEBUG] [Thread-208927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:15:23.043 [DEBUG] [Thread-208927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:15:23.084 [DEBUG] [Thread-208927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:15:23.084 [DEBUG] [Thread-208927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:15:23.087 [DEBUG] [Thread-208927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:15:23.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:15:23.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:15:23.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:15:23.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:15:23.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:15:23.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:15:23.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:15:23.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:15:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:15:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.676831 -999.00  +20.30  20.30     33   +3.50 1 1 1 1 1   887    0 14.85 -73.19 ----- 16.2 20.3 160.0 25.6 23.3 -28.4 23.3 -26.9 24.6 -26.2 25.0 -28.2
2026-02-15T18:15:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:15:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:15:23.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.676831
2026-02-15T18:15:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:15:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:15:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:15:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:15:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:15:23.152 [DEBUG] [Thread-208927] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:15:23.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:14:38', tmtdew=20.84, humidity=25.03, cloud=0.0, wind=28.23, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:14:38.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:15:23.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:15:23.246 [DEBUG] [Thread-208930] [transport.py] [_log()] starting thread (client mode): 0xa5743460
2026-02-15T18:15:23.246 [DEBUG] [Thread-208930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:15:23.260 [DEBUG] [Thread-208930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:15:23.260 [INFO] [Thread-208930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:15:23.268 [DEBUG] [Thread-208930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:15:23.268 [DEBUG] [Thread-208930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:15:23.268 [DEBUG] [Thread-208930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:15:23.268 [DEBUG] [Thread-208930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:23.268 [DEBUG] [Thread-208930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:23.268 [DEBUG] [Thread-208930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] client lang: <none>
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] server lang: <none>
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] kex follows: False
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] Compression: none
2026-02-15T18:15:23.269 [DEBUG] [Thread-208930] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:15:23.329 [DEBUG] [Thread-208930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:15:23.329 [DEBUG] [Thread-208930] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:15:23.330 [DEBUG] [Thread-208930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:15:23.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:15:23.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:15:23.385 [DEBUG] [Thread-208930] [transport.py] [_log()] userauth is OK
2026-02-15T18:15:23.386 [DEBUG] [Thread-208930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:15:23.386 [DEBUG] [Thread-208930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:15:23.386 [DEBUG] [Thread-208930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:15:23.386 [DEBUG] [Thread-208930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:15:23.405 [INFO] [Thread-208930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:15:23.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:15:23.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:15:23.497 [DEBUG] [Thread-208932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:24.236 [DEBUG] [Thread-208930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:15:24.236 [DEBUG] [Thread-208930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:15:24.285 [DEBUG] [Thread-208930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:15:24.286 [DEBUG] [Thread-208930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:15:24.295 [DEBUG] [Thread-208930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:15:24.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:15:24.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:15:24.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:15:24.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:15:24.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:15:24.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:15:24.333 [DEBUG] [Thread-208930] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:15:38.551 [DEBUG] [Thread-208933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:53.587 [DEBUG] [Thread-208934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:15:54.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:15:54.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:15:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:15:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 15, 13), 19.94, 26.55, 0.0, 25.07, 20.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:15:56.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:15:13
2026-02-15T18:15:57.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:15:57.299 [DEBUG] [Thread-208935] [transport.py] [_log()] starting thread (client mode): 0xa57e17b0
2026-02-15T18:15:57.300 [DEBUG] [Thread-208935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:15:57.319 [DEBUG] [Thread-208935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:15:57.319 [INFO] [Thread-208935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:15:57.322 [DEBUG] [Thread-208935] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:15:57.322 [DEBUG] [Thread-208935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:15:57.322 [DEBUG] [Thread-208935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] client lang: <none>
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] server lang: <none>
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] kex follows: False
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:15:57.323 [DEBUG] [Thread-208935] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:15:57.324 [DEBUG] [Thread-208935] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:15:57.324 [DEBUG] [Thread-208935] [transport.py] [_log()] Compression: none
2026-02-15T18:15:57.324 [DEBUG] [Thread-208935] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:15:57.345 [DEBUG] [Thread-208935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:15:57.346 [DEBUG] [Thread-208935] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:15:57.347 [DEBUG] [Thread-208935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:15:57.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:15:57.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:15:57.385 [DEBUG] [Thread-208935] [transport.py] [_log()] userauth is OK
2026-02-15T18:15:57.386 [DEBUG] [Thread-208935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:15:57.386 [DEBUG] [Thread-208935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:15:57.386 [DEBUG] [Thread-208935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:15:57.386 [DEBUG] [Thread-208935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:15:57.406 [INFO] [Thread-208935] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:15:57.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:15:57.973 [DEBUG] [Thread-208935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:15:57.974 [DEBUG] [Thread-208935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:15:57.974 [DEBUG] [Thread-208935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:15:58.014 [DEBUG] [Thread-208935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:15:58.015 [DEBUG] [Thread-208935] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:15:58.018 [DEBUG] [Thread-208935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:15:58.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:15:58.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:15:58.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:15:58.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:15:58.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:15:58.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:15:58.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:15:58.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:15:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:15:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.677525 -999.00  +20.50  22.99     32   +3.40 1 1 1 1 1   887    0 14.88 -65.82 ----- 19.5 23.0 164.8 26.4 23.4 -28.7 23.4 -27.2 24.6 -26.6 25.1 -28.5
2026-02-15T18:15:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:15:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:15:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.677525
2026-02-15T18:15:58.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:15:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:15:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:15:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:15:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:15:58.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:15:13', tmtdew=19.94, humidity=26.55, cloud=0.0, wind=25.07, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:15:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:15:58.046 [DEBUG] [Thread-208935] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:15:58.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:15:58.143 [DEBUG] [Thread-208938] [transport.py] [_log()] starting thread (client mode): 0xa575bfa0
2026-02-15T18:15:58.143 [DEBUG] [Thread-208938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:15:58.158 [DEBUG] [Thread-208938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:15:58.158 [INFO] [Thread-208938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:15:58.165 [DEBUG] [Thread-208938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:15:58.165 [DEBUG] [Thread-208938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:15:58.165 [DEBUG] [Thread-208938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:15:58.165 [DEBUG] [Thread-208938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] client lang: <none>
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] server lang: <none>
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] kex follows: False
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:15:58.166 [DEBUG] [Thread-208938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:15:58.167 [DEBUG] [Thread-208938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:15:58.167 [DEBUG] [Thread-208938] [transport.py] [_log()] Compression: none
2026-02-15T18:15:58.167 [DEBUG] [Thread-208938] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:15:58.226 [DEBUG] [Thread-208938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:15:58.227 [DEBUG] [Thread-208938] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:15:58.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:15:58.229 [DEBUG] [Thread-208938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:15:58.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:15:58.286 [DEBUG] [Thread-208938] [transport.py] [_log()] userauth is OK
2026-02-15T18:15:58.286 [DEBUG] [Thread-208938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:15:58.286 [DEBUG] [Thread-208938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:15:58.287 [DEBUG] [Thread-208938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:15:58.287 [DEBUG] [Thread-208938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:15:58.309 [INFO] [Thread-208938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:15:58.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:15:58.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:15:59.185 [DEBUG] [Thread-208938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:15:59.186 [DEBUG] [Thread-208938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:15:59.233 [DEBUG] [Thread-208938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:15:59.234 [DEBUG] [Thread-208938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:15:59.243 [DEBUG] [Thread-208938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:15:59.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:15:59.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:15: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') -> 00000000
2026-02-15T18:15:59.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:15:59.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:15:59.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:15:59.279 [DEBUG] [Thread-208938] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:16:01.697 [DEBUG] [Thread-208940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:16:08.625 [DEBUG] [Thread-208941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:16:14.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:16:14.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:16:23.686 [DEBUG] [Thread-208942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:16:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:16:29.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:16:29.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:16:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 15, 48), 20.03, 26.15, 0.0, 26.78, 20.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:16:31.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:15:48
2026-02-15T18:16:32.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:16:32.373 [DEBUG] [Thread-208943] [transport.py] [_log()] starting thread (client mode): 0xa2d6c520
2026-02-15T18:16:32.373 [DEBUG] [Thread-208943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:16:32.393 [DEBUG] [Thread-208943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:16:32.393 [INFO] [Thread-208943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:16:32.396 [DEBUG] [Thread-208943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:16:32.397 [DEBUG] [Thread-208943] [transport.py] [_log()] client lang: <none>
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] server lang: <none>
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] kex follows: False
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] Compression: none
2026-02-15T18:16:32.398 [DEBUG] [Thread-208943] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:16:32.415 [DEBUG] [Thread-208943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:16:32.416 [DEBUG] [Thread-208943] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:16:32.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:16:32.417 [DEBUG] [Thread-208943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:16:32.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:16:32.419 [DEBUG] [Thread-208943] [transport.py] [_log()] userauth is OK
2026-02-15T18:16:32.419 [DEBUG] [Thread-208943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:16:32.419 [DEBUG] [Thread-208943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:16:32.419 [DEBUG] [Thread-208943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:16:32.419 [DEBUG] [Thread-208943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:16:32.454 [INFO] [Thread-208943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:16:32.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:16:33.047 [DEBUG] [Thread-208943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:16:33.047 [DEBUG] [Thread-208943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:16:33.048 [DEBUG] [Thread-208943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:16:33.088 [DEBUG] [Thread-208943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:16:33.088 [DEBUG] [Thread-208943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:16:33.092 [DEBUG] [Thread-208943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:16:33.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:16:33.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:16:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:16:33.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:16:33.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:16:33.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:16:33.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.677872 -999.00  +20.40  18.45     32   +3.40 1 1 1 1 1   887    0 15.46 -62.21 ----- 16.4 18.4 187.0 26.4 23.3 -28.8 23.4 -27.2 24.6 -27.3 25.0 -29.1
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.677872
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:16:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:16:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:16:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:16:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:16:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:15:48', tmtdew=20.03, humidity=26.15, cloud=0.0, wind=26.78, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:16:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:16:33.112 [DEBUG] [Thread-208943] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:16:33.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:16:33.206 [DEBUG] [Thread-208946] [transport.py] [_log()] starting thread (client mode): 0xa2d6f700
2026-02-15T18:16:33.207 [DEBUG] [Thread-208946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:16:33.222 [DEBUG] [Thread-208946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:16:33.223 [INFO] [Thread-208946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:16:33.230 [DEBUG] [Thread-208946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:16:33.230 [DEBUG] [Thread-208946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:16:33.230 [DEBUG] [Thread-208946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] client lang: <none>
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] server lang: <none>
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] kex follows: False
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] Compression: none
2026-02-15T18:16:33.231 [DEBUG] [Thread-208946] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:16:33.294 [DEBUG] [Thread-208946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:16:33.295 [DEBUG] [Thread-208946] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:16:33.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:16:33.296 [DEBUG] [Thread-208946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:16:33.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:16:33.350 [DEBUG] [Thread-208946] [transport.py] [_log()] userauth is OK
2026-02-15T18:16:33.351 [DEBUG] [Thread-208946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:16:33.351 [DEBUG] [Thread-208946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:16:33.351 [DEBUG] [Thread-208946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:16:33.351 [DEBUG] [Thread-208946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:16:33.370 [INFO] [Thread-208946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:16:33.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:16:33.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:16:34.251 [DEBUG] [Thread-208946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:16:34.252 [DEBUG] [Thread-208946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:16:34.299 [DEBUG] [Thread-208946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:16:34.300 [DEBUG] [Thread-208946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:16:34.309 [DEBUG] [Thread-208946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:16:34.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:16:34.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:16:34.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:16:34.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:16:34.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:16:34.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:16:34.343 [DEBUG] [Thread-208946] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:16:38.723 [DEBUG] [Thread-208948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:16:53.771 [DEBUG] [Thread-208949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:01.762 [DEBUG] [Thread-208950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:17:04.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:17:04.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:17:06.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 16, 25), 20.04, 26.11, 0.0, 27.75, 20.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:17:06.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:16:25
2026-02-15T18:17:06.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:17:06.974 [DEBUG] [Thread-208951] [transport.py] [_log()] starting thread (client mode): 0xa5743520
2026-02-15T18:17:06.974 [DEBUG] [Thread-208951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:17:06.995 [DEBUG] [Thread-208951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:17:06.995 [INFO] [Thread-208951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:17:06.998 [DEBUG] [Thread-208951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:17:06.998 [DEBUG] [Thread-208951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:17:06.998 [DEBUG] [Thread-208951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:17:06.998 [DEBUG] [Thread-208951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:06.998 [DEBUG] [Thread-208951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] client lang: <none>
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] server lang: <none>
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] kex follows: False
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] Compression: none
2026-02-15T18:17:06.999 [DEBUG] [Thread-208951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:17:07.016 [DEBUG] [Thread-208951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:17:07.016 [DEBUG] [Thread-208951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:17:07.016 [DEBUG] [Thread-208951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:17:07.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:17:07.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:17:07.019 [DEBUG] [Thread-208951] [transport.py] [_log()] userauth is OK
2026-02-15T18:17:07.019 [DEBUG] [Thread-208951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:17:07.019 [DEBUG] [Thread-208951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:17:07.019 [DEBUG] [Thread-208951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:17:07.019 [DEBUG] [Thread-208951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:17:07.034 [INFO] [Thread-208951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:17:07.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:17:07.673 [DEBUG] [Thread-208951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:17:07.673 [DEBUG] [Thread-208951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:17:07.674 [DEBUG] [Thread-208951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:17:07.715 [DEBUG] [Thread-208951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:17:07.715 [DEBUG] [Thread-208951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:17:07.718 [DEBUG] [Thread-208951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:17:07.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:17:07.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:17:07.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:17:07.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:17:07.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:17:07.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:17:07.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:17:07.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:17:07.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:17:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.678219 -999.00  +20.40  16.42     32   +3.40 1 1 1 1 1   887    0 14.94 -58.97 ----- 26.7 16.4 176.4 21.9 23.2 -28.5 23.2 -29.0 24.5 -27.0 24.9 -29.1
2026-02-15T18:17:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:17:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:17:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.678219
2026-02-15T18:17:07.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:17:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:17:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:17:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:17:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:17:07.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:16:25', tmtdew=20.04, humidity=26.11, cloud=0.0, wind=27.75, temperature=20.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:16:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:17:07.742 [DEBUG] [Thread-208951] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:17:07.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:17:07.845 [DEBUG] [Thread-208954] [transport.py] [_log()] starting thread (client mode): 0xa5740790
2026-02-15T18:17:07.845 [DEBUG] [Thread-208954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:17:07.860 [DEBUG] [Thread-208954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:17:07.860 [INFO] [Thread-208954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] client lang: <none>
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] server lang: <none>
2026-02-15T18:17:07.868 [DEBUG] [Thread-208954] [transport.py] [_log()] kex follows: False
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] Compression: none
2026-02-15T18:17:07.869 [DEBUG] [Thread-208954] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:17:07.938 [DEBUG] [Thread-208954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:17:07.938 [DEBUG] [Thread-208954] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:17:07.939 [DEBUG] [Thread-208954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:17:07.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:17:07.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:17:07.995 [DEBUG] [Thread-208954] [transport.py] [_log()] userauth is OK
2026-02-15T18:17:07.995 [DEBUG] [Thread-208954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:17:07.995 [DEBUG] [Thread-208954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:17:07.995 [DEBUG] [Thread-208954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:17:07.995 [DEBUG] [Thread-208954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:17:08.013 [INFO] [Thread-208954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:17:08.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:17:08.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:17:08.810 [DEBUG] [Thread-208956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:08.831 [DEBUG] [Thread-208954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:17:08.831 [DEBUG] [Thread-208954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:17:08.879 [DEBUG] [Thread-208954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:17:08.880 [DEBUG] [Thread-208954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:17:08.889 [DEBUG] [Thread-208954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:17:08.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:17:08.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:17:08.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:17:08.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:17:08.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:17:08.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:17:08.926 [DEBUG] [Thread-208954] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:17:14.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:14.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:23.862 [DEBUG] [Thread-208957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:38.896 [DEBUG] [Thread-208958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:17:38.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:17:38.947 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:17:38.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:17:41.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 17, 1), 19.96, 26.25, 0.0, 27.54, 20.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:17:41.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:17:01
2026-02-15T18:17:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:17:41.606 [DEBUG] [Thread-208959] [transport.py] [_log()] starting thread (client mode): 0xa2d6f9a0
2026-02-15T18:17:41.606 [DEBUG] [Thread-208959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:17:41.628 [DEBUG] [Thread-208959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:17:41.628 [INFO] [Thread-208959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:41.631 [DEBUG] [Thread-208959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] client lang: <none>
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] server lang: <none>
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] kex follows: False
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] Compression: none
2026-02-15T18:17:41.632 [DEBUG] [Thread-208959] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:17:41.648 [DEBUG] [Thread-208959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:17:41.648 [DEBUG] [Thread-208959] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:17:41.649 [DEBUG] [Thread-208959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:17:41.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:17:41.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:17:41.651 [DEBUG] [Thread-208959] [transport.py] [_log()] userauth is OK
2026-02-15T18:17:41.651 [DEBUG] [Thread-208959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:17:41.651 [DEBUG] [Thread-208959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:17:41.651 [DEBUG] [Thread-208959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:17:41.651 [DEBUG] [Thread-208959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:17:41.672 [INFO] [Thread-208959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:17:41.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:17:42.310 [DEBUG] [Thread-208959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:17:42.310 [DEBUG] [Thread-208959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:17:42.311 [DEBUG] [Thread-208959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:17:42.351 [DEBUG] [Thread-208959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:17:42.351 [DEBUG] [Thread-208959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:17:42.355 [DEBUG] [Thread-208959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:17:42.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:17:42.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:17:42.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:17:42.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:17:42.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:17:42.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:17:42.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:17:42.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:17:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:17:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.678567 -999.00  +20.40  18.94     32   +3.50 1 1 1 1 1   887    0 15.45 -52.89 ----- 22.6 18.9 160.6 28.4 23.2 -28.4 23.2 -27.2 24.4 -26.3 24.9 -28.4
2026-02-15T18:17:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:17:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:17:42.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.678567
2026-02-15T18:17:42.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:17:42.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:17:42.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:17:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:17:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:17:42.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:17:01', tmtdew=19.96, humidity=26.25, cloud=0.0, wind=27.54, temperature=20.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:17:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:17:42.379 [DEBUG] [Thread-208959] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:17:42.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:17:42.484 [DEBUG] [Thread-208962] [transport.py] [_log()] starting thread (client mode): 0xa2d6c970
2026-02-15T18:17:42.484 [DEBUG] [Thread-208962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:17:42.499 [DEBUG] [Thread-208962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:17:42.499 [INFO] [Thread-208962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] client lang: <none>
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] server lang: <none>
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] kex follows: False
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:17:42.507 [DEBUG] [Thread-208962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:17:42.508 [DEBUG] [Thread-208962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:17:42.508 [DEBUG] [Thread-208962] [transport.py] [_log()] Compression: none
2026-02-15T18:17:42.508 [DEBUG] [Thread-208962] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:17:42.568 [DEBUG] [Thread-208962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:17:42.568 [DEBUG] [Thread-208962] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:17:42.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:17:42.569 [DEBUG] [Thread-208962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:17:42.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:17:42.627 [DEBUG] [Thread-208962] [transport.py] [_log()] userauth is OK
2026-02-15T18:17:42.627 [DEBUG] [Thread-208962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:17:42.627 [DEBUG] [Thread-208962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:17:42.627 [DEBUG] [Thread-208962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:17:42.627 [DEBUG] [Thread-208962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:17:42.646 [INFO] [Thread-208962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:17:42.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:17:42.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:17:43.477 [DEBUG] [Thread-208962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:17:43.477 [DEBUG] [Thread-208962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:17:43.525 [DEBUG] [Thread-208962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:17:43.526 [DEBUG] [Thread-208962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:17:43.535 [DEBUG] [Thread-208962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:17:43.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:17:43.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:17:43.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:17:43.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:17:43.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:17:43.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:17:43.573 [DEBUG] [Thread-208962] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:17:53.928 [DEBUG] [Thread-208964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:01.800 [DEBUG] [Thread-208965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:08.980 [DEBUG] [Thread-208966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:18:13.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:18:13.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:18:14.772 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:14.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 17, 37), 20.56, 25.46, 0.0, 34.4, 21.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:18:15.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:17:37
2026-02-15T18:18:15.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:18:16.070 [DEBUG] [Thread-208967] [transport.py] [_log()] starting thread (client mode): 0xa5743ee0
2026-02-15T18:18:16.070 [DEBUG] [Thread-208967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:18:16.082 [DEBUG] [Thread-208967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:18:16.082 [INFO] [Thread-208967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] client lang: <none>
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] server lang: <none>
2026-02-15T18:18:16.083 [DEBUG] [Thread-208967] [transport.py] [_log()] kex follows: False
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] Compression: none
2026-02-15T18:18:16.084 [DEBUG] [Thread-208967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:18:16.092 [DEBUG] [Thread-208967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:18:16.092 [DEBUG] [Thread-208967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:18:16.093 [DEBUG] [Thread-208967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:18:16.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:18:16.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:18:16.094 [DEBUG] [Thread-208967] [transport.py] [_log()] userauth is OK
2026-02-15T18:18:16.094 [DEBUG] [Thread-208967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:18:16.094 [DEBUG] [Thread-208967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:18:16.094 [DEBUG] [Thread-208967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:18:16.094 [DEBUG] [Thread-208967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:18:16.125 [INFO] [Thread-208967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:18:16.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:18:16.665 [DEBUG] [Thread-208967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:18:16.665 [DEBUG] [Thread-208967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:18:16.665 [DEBUG] [Thread-208967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:18:16.706 [DEBUG] [Thread-208967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:18:16.707 [DEBUG] [Thread-208967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:18:16.710 [DEBUG] [Thread-208967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:18:16.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:18:16.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:18:16.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:18:16.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:18:16.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:18:16.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:18:16.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:18:16.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:18:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:18:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.678913 -999.00  +20.20  20.10     33   +3.40 1 1 1 1 1   887    0 15.29 -58.20 ----- 29.6 20.1 154.4 32.3 23.2 -28.3 23.2 -27.3 24.4 -26.7 24.8 -29.1
2026-02-15T18:18:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:18:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:18:16.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.678913
2026-02-15T18:18:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:18:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:18:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:18:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:18:16.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:18:16.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:17:37', tmtdew=20.56, humidity=25.46, cloud=0.0, wind=34.4, temperature=21.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:17:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:18:16.740 [DEBUG] [Thread-208967] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:18:16.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:18:16.835 [DEBUG] [Thread-208970] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-15T18:18:16.835 [DEBUG] [Thread-208970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:18:16.851 [DEBUG] [Thread-208970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:18:16.851 [INFO] [Thread-208970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] client lang: <none>
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] server lang: <none>
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] kex follows: False
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:18:16.859 [DEBUG] [Thread-208970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:18:16.860 [DEBUG] [Thread-208970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:18:16.860 [DEBUG] [Thread-208970] [transport.py] [_log()] Compression: none
2026-02-15T18:18:16.860 [DEBUG] [Thread-208970] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:18:16.919 [DEBUG] [Thread-208970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:18:16.920 [DEBUG] [Thread-208970] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:18:16.920 [DEBUG] [Thread-208970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:18:16.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:18:16.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:18:16.975 [DEBUG] [Thread-208970] [transport.py] [_log()] userauth is OK
2026-02-15T18:18:16.976 [DEBUG] [Thread-208970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:18:16.976 [DEBUG] [Thread-208970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:18:16.976 [DEBUG] [Thread-208970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:18:16.976 [DEBUG] [Thread-208970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:18:16.995 [INFO] [Thread-208970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:18:16.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:18:16.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:18:17.848 [DEBUG] [Thread-208970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:18:17.849 [DEBUG] [Thread-208970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:18:17.896 [DEBUG] [Thread-208970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:18:17.896 [DEBUG] [Thread-208970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:18:17.905 [DEBUG] [Thread-208970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:18:17.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:18:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:18:17.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:18:17.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:18:17.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:18:17.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:18:17.940 [DEBUG] [Thread-208970] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:18:24.019 [DEBUG] [Thread-208972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:39.071 [DEBUG] [Thread-208973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:18:47.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:18:47.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:18:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:18:50.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 18, 12), 19.92, 26.75, 0.0, 28.64, 20.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:18:50.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:18:12
2026-02-15T18:18:50.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:18:50.792 [DEBUG] [Thread-208974] [transport.py] [_log()] starting thread (client mode): 0xa575a920
2026-02-15T18:18:50.793 [DEBUG] [Thread-208974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:18:50.814 [DEBUG] [Thread-208974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:18:50.814 [INFO] [Thread-208974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] client lang: <none>
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] server lang: <none>
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] kex follows: False
2026-02-15T18:18:50.815 [DEBUG] [Thread-208974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:18:50.816 [DEBUG] [Thread-208974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:18:50.816 [DEBUG] [Thread-208974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:18:50.816 [DEBUG] [Thread-208974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:18:50.816 [DEBUG] [Thread-208974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:18:50.816 [DEBUG] [Thread-208974] [transport.py] [_log()] Compression: none
2026-02-15T18:18:50.816 [DEBUG] [Thread-208974] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:18:50.833 [DEBUG] [Thread-208974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:18:50.834 [DEBUG] [Thread-208974] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:18:50.834 [DEBUG] [Thread-208974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:18:50.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:18:50.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:18:50.836 [DEBUG] [Thread-208974] [transport.py] [_log()] userauth is OK
2026-02-15T18:18:50.836 [DEBUG] [Thread-208974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:18:50.836 [DEBUG] [Thread-208974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:18:50.836 [DEBUG] [Thread-208974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:18:50.836 [DEBUG] [Thread-208974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:18:50.859 [INFO] [Thread-208974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:18:50.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:18:51.464 [DEBUG] [Thread-208974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:18:51.464 [DEBUG] [Thread-208974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:18:51.465 [DEBUG] [Thread-208974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:18:51.505 [DEBUG] [Thread-208974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:18:51.505 [DEBUG] [Thread-208974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:18:51.508 [DEBUG] [Thread-208974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:18:51.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:18:51.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:18:51.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:18:51.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:18:51.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:18:51.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:18:51.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:18:51.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:18:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:18:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.679261 -999.00  +20.20  18.84     33   +3.40 1 1 1 1 1   887    0 15.39 -54.90 ----- 23.8 18.8 139.8 31.9 23.1 -28.3 23.2 -27.3 24.4 -26.5 24.8 -28.6
2026-02-15T18:18:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:18:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:18:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.679261
2026-02-15T18:18:51.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:18:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:18:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:18:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:18:51.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:18:51.531 [DEBUG] [Thread-208974] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:18:51.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:18:12', tmtdew=19.92, humidity=26.75, cloud=0.0, wind=28.64, temperature=20.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:18:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:18:51.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:18:51.627 [DEBUG] [Thread-208977] [transport.py] [_log()] starting thread (client mode): 0xa5759570
2026-02-15T18:18:51.627 [DEBUG] [Thread-208977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:18:51.642 [DEBUG] [Thread-208977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:18:51.642 [INFO] [Thread-208977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:18:51.649 [DEBUG] [Thread-208977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:18:51.649 [DEBUG] [Thread-208977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:18:51.649 [DEBUG] [Thread-208977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] client lang: <none>
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] server lang: <none>
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] kex follows: False
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] Compression: none
2026-02-15T18:18:51.650 [DEBUG] [Thread-208977] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:18:51.706 [DEBUG] [Thread-208977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:18:51.707 [DEBUG] [Thread-208977] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:18:51.707 [DEBUG] [Thread-208977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:18:51.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:18:51.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:18:51.765 [DEBUG] [Thread-208977] [transport.py] [_log()] userauth is OK
2026-02-15T18:18:51.766 [DEBUG] [Thread-208977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:18:51.766 [DEBUG] [Thread-208977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:18:51.766 [DEBUG] [Thread-208977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:18:51.766 [DEBUG] [Thread-208977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:18:51.790 [INFO] [Thread-208977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:18:51.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:18:51.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:18:52.642 [DEBUG] [Thread-208977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:18:52.642 [DEBUG] [Thread-208977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:18:52.691 [DEBUG] [Thread-208977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:18:52.691 [DEBUG] [Thread-208977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:18:52.699 [DEBUG] [Thread-208977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:18:52.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:18:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:18:52.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:18:52.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:18:52.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:18:52.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:18:52.732 [DEBUG] [Thread-208977] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:18:54.104 [DEBUG] [Thread-208979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:01.827 [DEBUG] [Thread-208980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:09.163 [DEBUG] [Thread-208981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:14.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:14.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:22.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:19:22.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:19:22.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:19:24.199 [DEBUG] [Thread-208982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 18, 48), 19.75, 26.76, 0.0, 28.94, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:19:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:18:48
2026-02-15T18:19:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:19:25.130 [DEBUG] [Thread-208983] [transport.py] [_log()] starting thread (client mode): 0xa5742b30
2026-02-15T18:19:25.130 [DEBUG] [Thread-208983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:19:25.151 [DEBUG] [Thread-208983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:19:25.151 [INFO] [Thread-208983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:19:25.154 [DEBUG] [Thread-208983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] client lang: <none>
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] server lang: <none>
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] kex follows: False
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] Compression: none
2026-02-15T18:19:25.155 [DEBUG] [Thread-208983] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:19:25.172 [DEBUG] [Thread-208983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:19:25.173 [DEBUG] [Thread-208983] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:19:25.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:19:25.174 [DEBUG] [Thread-208983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:19:25.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:19:25.176 [DEBUG] [Thread-208983] [transport.py] [_log()] userauth is OK
2026-02-15T18:19:25.176 [DEBUG] [Thread-208983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:19:25.176 [DEBUG] [Thread-208983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:19:25.177 [DEBUG] [Thread-208983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:19:25.177 [DEBUG] [Thread-208983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:19:25.193 [INFO] [Thread-208983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:19:25.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:19:25.802 [DEBUG] [Thread-208983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:19:25.803 [DEBUG] [Thread-208983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:19:25.803 [DEBUG] [Thread-208983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:19:25.843 [DEBUG] [Thread-208983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:19:25.844 [DEBUG] [Thread-208983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:19:25.847 [DEBUG] [Thread-208983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:19:25.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:19:25.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:19:25.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:19:25.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:19:25.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:19:25.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:19:25.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:19:25.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:19:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:19:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.679956 -999.00  +20.30  21.39     32   +3.40 1 1 1 1 1   887    0 15.69 -46.70 ----- 22.1 21.4 142.8 31.0 23.1 -28.8 23.2 -27.3 24.4 -26.2 24.8 -28.7
2026-02-15T18:19:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:19:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:19:25.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.679956
2026-02-15T18:19:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:19:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:19:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:19:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:19:25.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:19:25.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:18:48', tmtdew=19.75, humidity=26.76, cloud=0.0, wind=28.94, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:19:08.198', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:19:25.875 [DEBUG] [Thread-208983] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:19:25.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:19:25.969 [DEBUG] [Thread-208986] [transport.py] [_log()] starting thread (client mode): 0xa2d1bd00
2026-02-15T18:19:25.969 [DEBUG] [Thread-208986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:19:25.983 [DEBUG] [Thread-208986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:19:25.983 [INFO] [Thread-208986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:19:25.991 [DEBUG] [Thread-208986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:19:25.991 [DEBUG] [Thread-208986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:19:25.991 [DEBUG] [Thread-208986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:19:25.991 [DEBUG] [Thread-208986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] client lang: <none>
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] server lang: <none>
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] kex follows: False
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] Compression: none
2026-02-15T18:19:25.992 [DEBUG] [Thread-208986] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:19:26.051 [DEBUG] [Thread-208986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:19:26.052 [DEBUG] [Thread-208986] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:19:26.052 [DEBUG] [Thread-208986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:19:26.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:19:26.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:19:26.108 [DEBUG] [Thread-208986] [transport.py] [_log()] userauth is OK
2026-02-15T18:19:26.108 [DEBUG] [Thread-208986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:19:26.108 [DEBUG] [Thread-208986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:19:26.109 [DEBUG] [Thread-208986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:19:26.109 [DEBUG] [Thread-208986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:19:26.127 [INFO] [Thread-208986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:19:26.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:19:26.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:19:26.980 [DEBUG] [Thread-208986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:19:26.981 [DEBUG] [Thread-208986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:19:27.028 [DEBUG] [Thread-208986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:19:27.028 [DEBUG] [Thread-208986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:19:27.037 [DEBUG] [Thread-208986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:19:27.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:19:27.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:19:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:19:27.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:19:27.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:19:27.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:19:27.071 [DEBUG] [Thread-208986] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:19:39.234 [DEBUG] [Thread-208988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:54.293 [DEBUG] [Thread-208989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:19:57.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:19:57.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:19:57.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:19:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 19, 23), 19.76, 26.75, 0.0, 29.17, 20.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:19:59.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:19:23
2026-02-15T18:19:59.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:19:59.642 [DEBUG] [Thread-208990] [transport.py] [_log()] starting thread (client mode): 0xa2d78fd0
2026-02-15T18:19:59.642 [DEBUG] [Thread-208990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:19:59.661 [DEBUG] [Thread-208990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:19:59.661 [INFO] [Thread-208990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] client lang: <none>
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] server lang: <none>
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] kex follows: False
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:19:59.664 [DEBUG] [Thread-208990] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:19:59.665 [DEBUG] [Thread-208990] [transport.py] [_log()] Compression: none
2026-02-15T18:19:59.665 [DEBUG] [Thread-208990] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:19:59.678 [DEBUG] [Thread-208990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:19:59.678 [DEBUG] [Thread-208990] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:19:59.679 [DEBUG] [Thread-208990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:19:59.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:19:59.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:19:59.681 [DEBUG] [Thread-208990] [transport.py] [_log()] userauth is OK
2026-02-15T18:19:59.681 [DEBUG] [Thread-208990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:19:59.681 [DEBUG] [Thread-208990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:19:59.681 [DEBUG] [Thread-208990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:19:59.681 [DEBUG] [Thread-208990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:19:59.718 [INFO] [Thread-208990] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:19:59.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:20:00.362 [DEBUG] [Thread-208990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:20:00.362 [DEBUG] [Thread-208990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:20:00.363 [DEBUG] [Thread-208990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:20:00.403 [DEBUG] [Thread-208990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:20:00.403 [DEBUG] [Thread-208990] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:20:00.407 [DEBUG] [Thread-208990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:20:00.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:20:00.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:20:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:20:00.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:20:00.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:20:00.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:20:00.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:20:00.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:20:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:20:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.680303 -999.00  +20.20  14.36     32   +3.40 1 1 1 1 1   887    0 15.67 -43.04 ----- 19.3 14.4 154.2 25.9 23.0 -28.5 23.2 -27.3 24.4 -26.5 24.6 -28.5
2026-02-15T18:20:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:20:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:20:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.680303
2026-02-15T18:20:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:20:00.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:20:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:20:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:20:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:20:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:19:23', tmtdew=19.76, humidity=26.75, cloud=0.0, wind=29.17, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:19:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:20:00.432 [DEBUG] [Thread-208990] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:20:00.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:20:00.527 [DEBUG] [Thread-208993] [transport.py] [_log()] starting thread (client mode): 0xa2dc3cd0
2026-02-15T18:20:00.527 [DEBUG] [Thread-208993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:20:00.541 [DEBUG] [Thread-208993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:20:00.541 [INFO] [Thread-208993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:20:00.549 [DEBUG] [Thread-208993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] client lang: <none>
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] server lang: <none>
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] kex follows: False
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] Compression: none
2026-02-15T18:20:00.550 [DEBUG] [Thread-208993] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:20:00.608 [DEBUG] [Thread-208993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:20:00.609 [DEBUG] [Thread-208993] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:20:00.609 [DEBUG] [Thread-208993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:20:00.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:20:00.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:20:00.664 [DEBUG] [Thread-208993] [transport.py] [_log()] userauth is OK
2026-02-15T18:20:00.664 [DEBUG] [Thread-208993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:20:00.664 [DEBUG] [Thread-208993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:20:00.665 [DEBUG] [Thread-208993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:20:00.665 [DEBUG] [Thread-208993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:20:00.683 [INFO] [Thread-208993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:20:00.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:20:00.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:20:01.556 [DEBUG] [Thread-208993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:20:01.556 [DEBUG] [Thread-208993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:20:01.607 [DEBUG] [Thread-208993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:20:01.608 [DEBUG] [Thread-208993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:20:01.620 [DEBUG] [Thread-208993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:20:01.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:20:01.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:20:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:20:01.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:20:01.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:20:01.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:20:01.664 [DEBUG] [Thread-208993] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:20:01.869 [DEBUG] [Thread-208995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:20:09.329 [DEBUG] [Thread-208996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:20:15.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:20:15.059 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:20:24.380 [DEBUG] [Thread-208997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:20:31.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:20:31.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:20:31.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:20:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 19, 58), 19.83, 26.73, 0.0, 27.33, 20.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:20:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:19:58
2026-02-15T18:20:33.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:20:34.026 [DEBUG] [Thread-208998] [transport.py] [_log()] starting thread (client mode): 0xa2d6c6a0
2026-02-15T18:20:34.027 [DEBUG] [Thread-208998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:20:34.051 [DEBUG] [Thread-208998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:20:34.051 [INFO] [Thread-208998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] client lang: <none>
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] server lang: <none>
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] kex follows: False
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] Compression: none
2026-02-15T18:20:34.054 [DEBUG] [Thread-208998] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:20:34.074 [DEBUG] [Thread-208998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:20:34.075 [DEBUG] [Thread-208998] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:20:34.076 [DEBUG] [Thread-208998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:20:34.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:20:34.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:20:34.078 [DEBUG] [Thread-208998] [transport.py] [_log()] userauth is OK
2026-02-15T18:20:34.078 [DEBUG] [Thread-208998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:20:34.078 [DEBUG] [Thread-208998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:20:34.078 [DEBUG] [Thread-208998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:20:34.078 [DEBUG] [Thread-208998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:20:34.107 [INFO] [Thread-208998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:20:34.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:20:34.771 [DEBUG] [Thread-208998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:20:34.771 [DEBUG] [Thread-208998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:20:34.771 [DEBUG] [Thread-208998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:20:34.812 [DEBUG] [Thread-208998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:20:34.812 [DEBUG] [Thread-208998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:20:34.814 [DEBUG] [Thread-208998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:20:34.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:20:34.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:20:34.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:20:34.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:20:34.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:20:34.837 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:20:34.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:20:34.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:20:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:20:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.680650 -999.00  +20.30  19.92     32   +3.40 1 1 1 1 1   887    0 15.58 -40.06 ----- 25.4 19.9 167.8 26.7 23.1 -28.2 23.2 -27.1 24.4 -26.4 24.7 -28.2
2026-02-15T18:20:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:20:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:20:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.680650
2026-02-15T18:20:34.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:20:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:20:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:20:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:20:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:20:34.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:19:58', tmtdew=19.83, humidity=26.73, cloud=0.0, wind=27.33, temperature=20.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:20:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:20:34.840 [DEBUG] [Thread-208998] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:20:34.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:20:34.932 [DEBUG] [Thread-209001] [transport.py] [_log()] starting thread (client mode): 0xa5758d30
2026-02-15T18:20:34.933 [DEBUG] [Thread-209001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:20:34.948 [DEBUG] [Thread-209001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:20:34.948 [INFO] [Thread-209001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:20:34.955 [DEBUG] [Thread-209001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] client lang: <none>
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] server lang: <none>
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] kex follows: False
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:20:34.956 [DEBUG] [Thread-209001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:20:34.957 [DEBUG] [Thread-209001] [transport.py] [_log()] Compression: none
2026-02-15T18:20:34.957 [DEBUG] [Thread-209001] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:20:35.016 [DEBUG] [Thread-209001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:20:35.017 [DEBUG] [Thread-209001] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:20:35.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:20:35.018 [DEBUG] [Thread-209001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:20:35.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:20:35.072 [DEBUG] [Thread-209001] [transport.py] [_log()] userauth is OK
2026-02-15T18:20:35.072 [DEBUG] [Thread-209001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:20:35.073 [DEBUG] [Thread-209001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:20:35.073 [DEBUG] [Thread-209001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:20:35.073 [DEBUG] [Thread-209001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:20:35.092 [INFO] [Thread-209001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:20:35.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:20:35.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:20:35.913 [DEBUG] [Thread-209001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:20:35.913 [DEBUG] [Thread-209001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:20:35.961 [DEBUG] [Thread-209001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:20:35.962 [DEBUG] [Thread-209001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:20:35.971 [DEBUG] [Thread-209001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:20:35.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:20:35.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:20:35.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:20:35.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:20:35.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:20:36.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:20:36.008 [DEBUG] [Thread-209001] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:20:39.414 [DEBUG] [Thread-209003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:20:54.468 [DEBUG] [Thread-209004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:01.928 [DEBUG] [Thread-209005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:06.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:21:06.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:21:06.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:21:08.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 20, 34), 20.68, 25.26, 0.0, 32.39, 21.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:21:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:20:34
2026-02-15T18:21:08.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:21:08.979 [DEBUG] [Thread-209006] [transport.py] [_log()] starting thread (client mode): 0xa5743130
2026-02-15T18:21:08.979 [DEBUG] [Thread-209006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:21:08.999 [DEBUG] [Thread-209006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:21:08.999 [INFO] [Thread-209006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] client lang: <none>
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] server lang: <none>
2026-02-15T18:21:09.002 [DEBUG] [Thread-209006] [transport.py] [_log()] kex follows: False
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] Compression: none
2026-02-15T18:21:09.003 [DEBUG] [Thread-209006] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:21:09.022 [DEBUG] [Thread-209006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:21:09.022 [DEBUG] [Thread-209006] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:21:09.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:21:09.024 [DEBUG] [Thread-209006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:21:09.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:21:09.026 [DEBUG] [Thread-209006] [transport.py] [_log()] userauth is OK
2026-02-15T18:21:09.026 [DEBUG] [Thread-209006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:21:09.026 [DEBUG] [Thread-209006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:21:09.027 [DEBUG] [Thread-209006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:21:09.027 [DEBUG] [Thread-209006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:21:09.041 [INFO] [Thread-209006] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:21:09.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:21:09.505 [DEBUG] [Thread-209008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:09.689 [DEBUG] [Thread-209006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:21:09.689 [DEBUG] [Thread-209006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:21:09.690 [DEBUG] [Thread-209006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:21:09.730 [DEBUG] [Thread-209006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:21:09.730 [DEBUG] [Thread-209006] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:21:09.733 [DEBUG] [Thread-209006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:21:09.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:21:09.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:21:09.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:21:09.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:21:09.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:21:09.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:21:09.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:21:09.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:21:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:21:09.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.680997 -999.00  +20.20  17.52     33   +3.40 1 1 1 1 1   887    0 15.98 -36.46 ----- 19.4 17.5 168.7 33.4 23.0 -28.5 23.1 -27.4 24.3 -26.8 24.7 -28.2
2026-02-15T18:21:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:21:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:21:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.680997
2026-02-15T18:21:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:21:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:21:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:21:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:21:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:21:09.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:20:34', tmtdew=20.68, humidity=25.26, cloud=0.0, wind=32.39, temperature=21.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:20:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:21:09.759 [DEBUG] [Thread-209006] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:21:09.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:21:09.855 [DEBUG] [Thread-209010] [transport.py] [_log()] starting thread (client mode): 0xa2dc1330
2026-02-15T18:21:09.855 [DEBUG] [Thread-209010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:21:09.869 [DEBUG] [Thread-209010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:21:09.869 [INFO] [Thread-209010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:21:09.876 [DEBUG] [Thread-209010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:21:09.876 [DEBUG] [Thread-209010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] client lang: <none>
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] server lang: <none>
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] kex follows: False
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] Compression: none
2026-02-15T18:21:09.877 [DEBUG] [Thread-209010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:21:09.936 [DEBUG] [Thread-209010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:21:09.937 [DEBUG] [Thread-209010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:21:09.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:21:09.938 [DEBUG] [Thread-209010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:21:09.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:21:09.993 [DEBUG] [Thread-209010] [transport.py] [_log()] userauth is OK
2026-02-15T18:21:09.993 [DEBUG] [Thread-209010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:21:09.993 [DEBUG] [Thread-209010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:21:09.994 [DEBUG] [Thread-209010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:21:09.994 [DEBUG] [Thread-209010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:21:10.013 [INFO] [Thread-209010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:21:10.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:21:10.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:21:10.829 [DEBUG] [Thread-209010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:21:10.829 [DEBUG] [Thread-209010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:21:10.878 [DEBUG] [Thread-209010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:21:10.878 [DEBUG] [Thread-209010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:21:10.887 [DEBUG] [Thread-209010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:21:10.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:21:10.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:21:10.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:21:10.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:21:10.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:21:10.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:21:10.924 [DEBUG] [Thread-209010] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:21:15.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:15.201 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:24.541 [DEBUG] [Thread-209012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:39.604 [DEBUG] [Thread-209013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:21:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:21:40.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:21:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:21:42.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 21, 10), 19.8, 26.68, 0.0, 28.57, 20.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:21:42.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:21:10
2026-02-15T18:21:43.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:21:43.510 [DEBUG] [Thread-209014] [transport.py] [_log()] starting thread (client mode): 0xa2dc0640
2026-02-15T18:21:43.510 [DEBUG] [Thread-209014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:21:43.530 [DEBUG] [Thread-209014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:21:43.530 [INFO] [Thread-209014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] client lang: <none>
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] server lang: <none>
2026-02-15T18:21:43.534 [DEBUG] [Thread-209014] [transport.py] [_log()] kex follows: False
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] Compression: none
2026-02-15T18:21:43.535 [DEBUG] [Thread-209014] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:21:43.553 [DEBUG] [Thread-209014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:21:43.554 [DEBUG] [Thread-209014] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:21:43.555 [DEBUG] [Thread-209014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:21:43.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:21:43.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:21:43.559 [DEBUG] [Thread-209014] [transport.py] [_log()] userauth is OK
2026-02-15T18:21:43.559 [DEBUG] [Thread-209014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:21:43.560 [DEBUG] [Thread-209014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:21:43.560 [DEBUG] [Thread-209014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:21:43.560 [DEBUG] [Thread-209014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:21:43.583 [INFO] [Thread-209014] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:21:43.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:21:44.202 [DEBUG] [Thread-209014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:21:44.203 [DEBUG] [Thread-209014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:21:44.203 [DEBUG] [Thread-209014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:21:44.243 [DEBUG] [Thread-209014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:21:44.244 [DEBUG] [Thread-209014] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:21:44.247 [DEBUG] [Thread-209014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:21:44.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:21:44.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:21:44.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:21:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:21:44.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:21:44.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:21:44.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:21:44.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:21:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:21:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.681344 -999.00  +20.20  16.42     33   +3.40 1 1 1 1 1   887    0 15.91 -33.93 ----- 14.6 16.4 159.0 23.1 23.1 -28.2 23.1 -26.9 24.3 -25.9 24.7 -28.3
2026-02-15T18:21:44.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:21:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:21:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.681344
2026-02-15T18:21:44.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:21:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:21:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:21:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:21:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:21:44.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:21:10', tmtdew=19.8, humidity=26.68, cloud=0.0, wind=28.57, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:21:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:21:44.272 [DEBUG] [Thread-209014] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:21:44.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:21:44.370 [DEBUG] [Thread-209017] [transport.py] [_log()] starting thread (client mode): 0xa2dc0b20
2026-02-15T18:21:44.370 [DEBUG] [Thread-209017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:21:44.384 [DEBUG] [Thread-209017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:21:44.384 [INFO] [Thread-209017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] client lang: <none>
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] server lang: <none>
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] kex follows: False
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:21:44.392 [DEBUG] [Thread-209017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:21:44.393 [DEBUG] [Thread-209017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:21:44.393 [DEBUG] [Thread-209017] [transport.py] [_log()] Compression: none
2026-02-15T18:21:44.393 [DEBUG] [Thread-209017] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:21:44.448 [DEBUG] [Thread-209017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:21:44.449 [DEBUG] [Thread-209017] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:21:44.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:21:44.450 [DEBUG] [Thread-209017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:21:44.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:21:44.505 [DEBUG] [Thread-209017] [transport.py] [_log()] userauth is OK
2026-02-15T18:21:44.505 [DEBUG] [Thread-209017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:21:44.506 [DEBUG] [Thread-209017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:21:44.506 [DEBUG] [Thread-209017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:21:44.506 [DEBUG] [Thread-209017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:21:44.527 [INFO] [Thread-209017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:21:44.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:21:44.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:21:45.348 [DEBUG] [Thread-209017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:21:45.349 [DEBUG] [Thread-209017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:21:45.396 [DEBUG] [Thread-209017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:21:45.397 [DEBUG] [Thread-209017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:21:45.406 [DEBUG] [Thread-209017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:21:45.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:21:45.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:21:45.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:21:45.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:21:45.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:21:45.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:21:45.442 [DEBUG] [Thread-209017] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:21:54.643 [DEBUG] [Thread-209019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:01.973 [DEBUG] [Thread-209020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:09.697 [DEBUG] [Thread-209021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:15.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:15.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:15.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:22:15.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:22:15.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:22:17.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 21, 45), 19.86, 26.66, 0.0, 27.61, 20.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:22:17.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:21:45
2026-02-15T18:22:18.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:22:18.455 [DEBUG] [Thread-209022] [transport.py] [_log()] starting thread (client mode): 0xa57e2830
2026-02-15T18:22:18.455 [DEBUG] [Thread-209022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:22:18.476 [DEBUG] [Thread-209022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:22:18.476 [INFO] [Thread-209022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:22:18.478 [DEBUG] [Thread-209022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] client lang: <none>
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] server lang: <none>
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] kex follows: False
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] Compression: none
2026-02-15T18:22:18.479 [DEBUG] [Thread-209022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:22:18.492 [DEBUG] [Thread-209022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:22:18.492 [DEBUG] [Thread-209022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:22:18.492 [DEBUG] [Thread-209022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:22:18.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:22:18.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:22:18.493 [DEBUG] [Thread-209022] [transport.py] [_log()] userauth is OK
2026-02-15T18:22:18.493 [DEBUG] [Thread-209022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:22:18.493 [DEBUG] [Thread-209022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:22:18.493 [DEBUG] [Thread-209022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:22:18.493 [DEBUG] [Thread-209022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:22:18.510 [INFO] [Thread-209022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:22:18.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:22:19.153 [DEBUG] [Thread-209022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:22:19.153 [DEBUG] [Thread-209022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:22:19.154 [DEBUG] [Thread-209022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:22:19.194 [DEBUG] [Thread-209022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:22:19.195 [DEBUG] [Thread-209022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:22:19.198 [DEBUG] [Thread-209022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:22:19.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:22:19.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:22:19.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:22:19.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:22:19.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:22:19.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:22:19.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:22:19.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:22:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:22:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.681692 -999.00  +20.30  20.64     32   +3.40 1 1 1 1 1   887    0 16.32 -28.95 ----- 22.4 20.6 176.4 25.2 23.1 -28.5 23.1 -27.9 24.3 -26.8 24.7 -28.2
2026-02-15T18:22:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:22:19.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:22:19.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.681692
2026-02-15T18:22:19.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:22:19.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:22:19.226 [DEBUG] [Thread-209022] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:22:19.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:22:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:22:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:22:19.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:21:45', tmtdew=19.86, humidity=26.66, cloud=0.0, wind=27.61, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:21:38.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:22:19.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:22:19.323 [DEBUG] [Thread-209025] [transport.py] [_log()] starting thread (client mode): 0xa2dc2d40
2026-02-15T18:22:19.323 [DEBUG] [Thread-209025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:22:19.338 [DEBUG] [Thread-209025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:22:19.338 [INFO] [Thread-209025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:22:19.346 [DEBUG] [Thread-209025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:22:19.346 [DEBUG] [Thread-209025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:22:19.346 [DEBUG] [Thread-209025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:22:19.346 [DEBUG] [Thread-209025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:19.346 [DEBUG] [Thread-209025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] client lang: <none>
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] server lang: <none>
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] kex follows: False
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] Compression: none
2026-02-15T18:22:19.347 [DEBUG] [Thread-209025] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:22:19.405 [DEBUG] [Thread-209025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:22:19.406 [DEBUG] [Thread-209025] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:22:19.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:22:19.407 [DEBUG] [Thread-209025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:22:19.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:22:19.461 [DEBUG] [Thread-209025] [transport.py] [_log()] userauth is OK
2026-02-15T18:22:19.461 [DEBUG] [Thread-209025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:22:19.461 [DEBUG] [Thread-209025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:22:19.461 [DEBUG] [Thread-209025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:22:19.461 [DEBUG] [Thread-209025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:22:19.480 [INFO] [Thread-209025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:22:19.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:22:19.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:22:20.335 [DEBUG] [Thread-209025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:22:20.335 [DEBUG] [Thread-209025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:22:20.383 [DEBUG] [Thread-209025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:22:20.384 [DEBUG] [Thread-209025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:22:20.393 [DEBUG] [Thread-209025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:22:20.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:22:20.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:22:20.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:22:20.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:22:20.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:22:20.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:22:20.428 [DEBUG] [Thread-209025] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:22:24.741 [DEBUG] [Thread-209027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:39.792 [DEBUG] [Thread-209028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:22:50.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:22:50.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:22:50.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 22, 21), 19.85, 26.68, 0.0, 26.71, 20.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:22:52.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:22:21
2026-02-15T18:22:52.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:22:52.802 [DEBUG] [Thread-209029] [transport.py] [_log()] starting thread (client mode): 0xa2d6c730
2026-02-15T18:22:52.802 [DEBUG] [Thread-209029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:22:52.821 [DEBUG] [Thread-209029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:22:52.821 [INFO] [Thread-209029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:22:52.822 [DEBUG] [Thread-209029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] client lang: <none>
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] server lang: <none>
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] kex follows: False
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:22:52.823 [DEBUG] [Thread-209029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:22:52.824 [DEBUG] [Thread-209029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:22:52.824 [DEBUG] [Thread-209029] [transport.py] [_log()] Compression: none
2026-02-15T18:22:52.824 [DEBUG] [Thread-209029] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:22:52.831 [DEBUG] [Thread-209029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:22:52.832 [DEBUG] [Thread-209029] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:22:52.832 [DEBUG] [Thread-209029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:22:52.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:22:52.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:22:52.834 [DEBUG] [Thread-209029] [transport.py] [_log()] userauth is OK
2026-02-15T18:22:52.834 [DEBUG] [Thread-209029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:22:52.834 [DEBUG] [Thread-209029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:22:52.834 [DEBUG] [Thread-209029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:22:52.834 [DEBUG] [Thread-209029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:22:52.846 [INFO] [Thread-209029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:22:52.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:22:53.461 [DEBUG] [Thread-209029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:22:53.461 [DEBUG] [Thread-209029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:22:53.462 [DEBUG] [Thread-209029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:22:53.502 [DEBUG] [Thread-209029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:22:53.503 [DEBUG] [Thread-209029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:22:53.506 [DEBUG] [Thread-209029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:22:53.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:22:53.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:22:53.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:22:53.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:22:53.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:22:53.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:22:53.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:22:53.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:22:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:22:53.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.682039 -999.00  +20.20  25.30     32   +3.30 1 1 1 1 1   887    0 16.36 -25.34 ----- 22.8 25.3 172.4 28.3 23.0 -28.7 23.1 -27.3 24.3 -27.1 24.6 -28.7
2026-02-15T18:22:53.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:22:53.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:22:53.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.682039
2026-02-15T18:22:53.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:22:53.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:22:53.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:22:53.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:22:53.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:22:53.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:22:21', tmtdew=19.85, humidity=26.68, cloud=0.0, wind=26.71, temperature=20.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:22:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:22:53.531 [DEBUG] [Thread-209029] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:22:53.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:22:53.624 [DEBUG] [Thread-209032] [transport.py] [_log()] starting thread (client mode): 0xa57d7220
2026-02-15T18:22:53.624 [DEBUG] [Thread-209032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:22:53.638 [DEBUG] [Thread-209032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:22:53.638 [INFO] [Thread-209032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:22:53.646 [DEBUG] [Thread-209032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:22:53.646 [DEBUG] [Thread-209032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:22:53.646 [DEBUG] [Thread-209032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:22:53.646 [DEBUG] [Thread-209032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] client lang: <none>
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] server lang: <none>
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] kex follows: False
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] Compression: none
2026-02-15T18:22:53.647 [DEBUG] [Thread-209032] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:22:53.704 [DEBUG] [Thread-209032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:22:53.705 [DEBUG] [Thread-209032] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:22:53.706 [DEBUG] [Thread-209032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:22:53.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:22:53.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:22:53.762 [DEBUG] [Thread-209032] [transport.py] [_log()] userauth is OK
2026-02-15T18:22:53.762 [DEBUG] [Thread-209032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:22:53.763 [DEBUG] [Thread-209032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:22:53.763 [DEBUG] [Thread-209032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:22:53.763 [DEBUG] [Thread-209032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:22:53.782 [INFO] [Thread-209032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:22:53.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:22:53.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:22:54.595 [DEBUG] [Thread-209032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:22:54.596 [DEBUG] [Thread-209032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:22:54.643 [DEBUG] [Thread-209032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:22:54.644 [DEBUG] [Thread-209032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:22:54.653 [DEBUG] [Thread-209032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:22:54.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:22:54.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:22:54.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:22:54.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:22:54.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:22:54.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:22:54.689 [DEBUG] [Thread-209032] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:22:54.828 [DEBUG] [Thread-209034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:02.001 [DEBUG] [Thread-209035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:09.880 [DEBUG] [Thread-209036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:15.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:15.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:24.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:23:24.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:23:24.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:23:24.917 [DEBUG] [Thread-209037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:26.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 22, 57), 19.97, 26.23, 0.0, 29.45, 20.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:23:26.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:22:57
2026-02-15T18:23:26.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:23:27.082 [DEBUG] [Thread-209038] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb90
2026-02-15T18:23:27.082 [DEBUG] [Thread-209038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:23:27.104 [DEBUG] [Thread-209038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:23:27.104 [INFO] [Thread-209038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] client lang: <none>
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] server lang: <none>
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] kex follows: False
2026-02-15T18:23:27.105 [DEBUG] [Thread-209038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:23:27.106 [DEBUG] [Thread-209038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:23:27.106 [DEBUG] [Thread-209038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:23:27.106 [DEBUG] [Thread-209038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:23:27.106 [DEBUG] [Thread-209038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:23:27.106 [DEBUG] [Thread-209038] [transport.py] [_log()] Compression: none
2026-02-15T18:23:27.106 [DEBUG] [Thread-209038] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:23:27.114 [DEBUG] [Thread-209038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:23:27.114 [DEBUG] [Thread-209038] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:23:27.115 [DEBUG] [Thread-209038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:23:27.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:23:27.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:23:27.117 [DEBUG] [Thread-209038] [transport.py] [_log()] userauth is OK
2026-02-15T18:23:27.118 [DEBUG] [Thread-209038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:23:27.118 [DEBUG] [Thread-209038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:23:27.118 [DEBUG] [Thread-209038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:23:27.118 [DEBUG] [Thread-209038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:23:27.155 [INFO] [Thread-209038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:23:27.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:23:27.793 [DEBUG] [Thread-209038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:23:27.793 [DEBUG] [Thread-209038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:23:27.794 [DEBUG] [Thread-209038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:23:27.834 [DEBUG] [Thread-209038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:23:27.834 [DEBUG] [Thread-209038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:23:27.838 [DEBUG] [Thread-209038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:23:27.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:23:27.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:23:27.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:23:27.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:23:27.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:23:27.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:23:27.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:23:27.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:23:27.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:23:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.682386 -999.00  +20.20  21.80     32   +3.20 1 1 1 1 1   887    0 15.90 -23.41 ----- 21.8 21.8 165.4 27.4 23.0 -28.9 23.0 -27.8 24.2 -27.2 24.6 -28.8
2026-02-15T18:23:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:23:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:23:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.682386
2026-02-15T18:23:27.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:23:27.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:23:27.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:23:27.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:23:27.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:23:27.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:22:57', tmtdew=19.97, humidity=26.23, cloud=0.0, wind=29.45, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:22:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:23:27.864 [DEBUG] [Thread-209038] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:23:27.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:23:27.967 [DEBUG] [Thread-209041] [transport.py] [_log()] starting thread (client mode): 0xa57d6ef0
2026-02-15T18:23:27.968 [DEBUG] [Thread-209041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:23:27.990 [DEBUG] [Thread-209041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:23:27.990 [INFO] [Thread-209041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:23:27.997 [DEBUG] [Thread-209041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] client lang: <none>
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] server lang: <none>
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] kex follows: False
2026-02-15T18:23:27.998 [DEBUG] [Thread-209041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:23:27.999 [DEBUG] [Thread-209041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:23:27.999 [DEBUG] [Thread-209041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:23:27.999 [DEBUG] [Thread-209041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:23:27.999 [DEBUG] [Thread-209041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:23:27.999 [DEBUG] [Thread-209041] [transport.py] [_log()] Compression: none
2026-02-15T18:23:27.999 [DEBUG] [Thread-209041] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:23:28.058 [DEBUG] [Thread-209041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:23:28.058 [DEBUG] [Thread-209041] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:23:28.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:23:28.058 [DEBUG] [Thread-209041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:23:28.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:23:28.113 [DEBUG] [Thread-209041] [transport.py] [_log()] userauth is OK
2026-02-15T18:23:28.114 [DEBUG] [Thread-209041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:23:28.114 [DEBUG] [Thread-209041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:23:28.114 [DEBUG] [Thread-209041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:23:28.114 [DEBUG] [Thread-209041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:23:28.137 [INFO] [Thread-209041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:23:28.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:23:28.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:23:28.965 [DEBUG] [Thread-209041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:23:28.966 [DEBUG] [Thread-209041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:23:29.013 [DEBUG] [Thread-209041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:23:29.014 [DEBUG] [Thread-209041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:23:29.025 [DEBUG] [Thread-209041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:23:29.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:23:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:23:29.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-02-15T18:23:29.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:23:29.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:23:29.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:23:29.066 [DEBUG] [Thread-209041] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:23:39.952 [DEBUG] [Thread-209043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:55.003 [DEBUG] [Thread-209044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:23:59.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:23:59.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:23:59.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:24:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 23, 33), 20.26, 25.95, 0.0, 34.51, 21.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:24:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:23:33
2026-02-15T18:24:01.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:24:01.759 [DEBUG] [Thread-209045] [transport.py] [_log()] starting thread (client mode): 0xa2dc0520
2026-02-15T18:24:01.759 [DEBUG] [Thread-209045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:24:01.781 [DEBUG] [Thread-209045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:24:01.781 [INFO] [Thread-209045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:24:01.784 [DEBUG] [Thread-209045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] client lang: <none>
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] server lang: <none>
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] kex follows: False
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:24:01.785 [DEBUG] [Thread-209045] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:24:01.786 [DEBUG] [Thread-209045] [transport.py] [_log()] Compression: none
2026-02-15T18:24:01.786 [DEBUG] [Thread-209045] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:24:01.795 [DEBUG] [Thread-209045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:24:01.796 [DEBUG] [Thread-209045] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:24:01.796 [DEBUG] [Thread-209045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:24:01.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:24:01.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:24:01.799 [DEBUG] [Thread-209045] [transport.py] [_log()] userauth is OK
2026-02-15T18:24:01.799 [DEBUG] [Thread-209045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:24:01.799 [DEBUG] [Thread-209045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:24:01.799 [DEBUG] [Thread-209045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:24:01.800 [DEBUG] [Thread-209045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:24:01.819 [INFO] [Thread-209045] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:24:01.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:24:02.033 [DEBUG] [Thread-209047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:24:02.422 [DEBUG] [Thread-209045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:24:02.423 [DEBUG] [Thread-209045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:24:02.423 [DEBUG] [Thread-209045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:24:02.463 [DEBUG] [Thread-209045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:24:02.463 [DEBUG] [Thread-209045] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:24:02.467 [DEBUG] [Thread-209045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:24:02.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:24:02.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:24:02.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:24:02.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:24:02.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:24:02.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:24:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:24:02.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:24:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:24:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.683080 -999.00  +20.10  21.15     33   +3.40 1 1 1 1 1   887    0 16.47 -22.68 ----- 16.3 21.1 143.8 33.2 22.9 -28.2 23.0 -27.6 24.2 -26.3 24.6 -28.8
2026-02-15T18:24:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:24:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:24:02.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.683080
2026-02-15T18:24:02.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:24:02.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:24:02.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:24:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:24:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:24:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:23:33', tmtdew=20.26, humidity=25.95, cloud=0.0, wind=34.51, temperature=21.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:23:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:24:02.495 [DEBUG] [Thread-209045] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:24:02.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:24:02.590 [DEBUG] [Thread-209049] [transport.py] [_log()] starting thread (client mode): 0xa57e3910
2026-02-15T18:24:02.590 [DEBUG] [Thread-209049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:24:02.605 [DEBUG] [Thread-209049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:24:02.605 [INFO] [Thread-209049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:24:02.612 [DEBUG] [Thread-209049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:24:02.613 [DEBUG] [Thread-209049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:24:02.613 [DEBUG] [Thread-209049] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:24:02.613 [DEBUG] [Thread-209049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] client lang: <none>
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] server lang: <none>
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] kex follows: False
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] Compression: none
2026-02-15T18:24:02.614 [DEBUG] [Thread-209049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:24:02.671 [DEBUG] [Thread-209049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:24:02.671 [DEBUG] [Thread-209049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:24:02.672 [DEBUG] [Thread-209049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:24:02.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:24:02.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:24:02.726 [DEBUG] [Thread-209049] [transport.py] [_log()] userauth is OK
2026-02-15T18:24:02.727 [DEBUG] [Thread-209049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:24:02.727 [DEBUG] [Thread-209049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:24:02.727 [DEBUG] [Thread-209049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:24:02.727 [DEBUG] [Thread-209049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:24:02.746 [INFO] [Thread-209049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:24:02.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:24:02.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:24:03.635 [DEBUG] [Thread-209049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:24:03.635 [DEBUG] [Thread-209049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:24:03.683 [DEBUG] [Thread-209049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:24:03.684 [DEBUG] [Thread-209049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:24:03.693 [DEBUG] [Thread-209049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:24:03.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:24:03.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:24:03.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:24:03.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:24:03.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:24:03.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:24:03.730 [DEBUG] [Thread-209049] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:24:10.037 [DEBUG] [Thread-209051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:24:15.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:24:15.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:24:25.087 [DEBUG] [Thread-209052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:24:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:24:33.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:24: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
2026-02-15T18:24:35.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 24, 8), 19.57, 27.16, 0.0, 29.31, 20.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:24:35.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:24:08
2026-02-15T18:24:36.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:24:36.173 [DEBUG] [Thread-209053] [transport.py] [_log()] starting thread (client mode): 0xa57d6020
2026-02-15T18:24:36.173 [DEBUG] [Thread-209053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:24:36.199 [DEBUG] [Thread-209053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:24:36.199 [INFO] [Thread-209053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:24:36.200 [DEBUG] [Thread-209053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] client lang: <none>
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] server lang: <none>
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] kex follows: False
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] Compression: none
2026-02-15T18:24:36.201 [DEBUG] [Thread-209053] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:24:36.213 [DEBUG] [Thread-209053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:24:36.213 [DEBUG] [Thread-209053] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:24:36.214 [DEBUG] [Thread-209053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:24:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:24:36.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:24:36.216 [DEBUG] [Thread-209053] [transport.py] [_log()] userauth is OK
2026-02-15T18:24:36.216 [DEBUG] [Thread-209053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:24:36.216 [DEBUG] [Thread-209053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:24:36.216 [DEBUG] [Thread-209053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:24:36.216 [DEBUG] [Thread-209053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:24:36.236 [INFO] [Thread-209053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:24:36.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:24:36.901 [DEBUG] [Thread-209053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:24:36.902 [DEBUG] [Thread-209053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:24:36.902 [DEBUG] [Thread-209053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:24:36.942 [DEBUG] [Thread-209053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:24:36.942 [DEBUG] [Thread-209053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:24:36.945 [DEBUG] [Thread-209053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:24:36.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:24:36.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:24:36.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:24:36.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:24:36.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:24:36.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:24:36.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:24:36.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:24:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:24:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.683428 -999.00  +20.20  23.23     33   +3.50 1 1 1 1 1   887    0 16.26 -24.27 ----- 17.3 23.2 142.4 29.4 22.9 -28.7 23.1 -27.4 24.2 -27.1 24.5 -28.7
2026-02-15T18:24:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:24:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:24:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.683428
2026-02-15T18:24:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:24:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:24:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:24:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:24:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:24:36.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:24:08', tmtdew=19.57, humidity=27.16, cloud=0.0, wind=29.31, temperature=20.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:24:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:24:36.972 [DEBUG] [Thread-209053] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:24:37.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:24:37.058 [DEBUG] [Thread-209056] [transport.py] [_log()] starting thread (client mode): 0xa2dc0040
2026-02-15T18:24:37.058 [DEBUG] [Thread-209056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:24:37.072 [DEBUG] [Thread-209056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:24:37.073 [INFO] [Thread-209056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] client lang: <none>
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] server lang: <none>
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] kex follows: False
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:24:37.080 [DEBUG] [Thread-209056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:24:37.081 [DEBUG] [Thread-209056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:24:37.081 [DEBUG] [Thread-209056] [transport.py] [_log()] Compression: none
2026-02-15T18:24:37.081 [DEBUG] [Thread-209056] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:24:37.138 [DEBUG] [Thread-209056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:24:37.139 [DEBUG] [Thread-209056] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:24:37.139 [DEBUG] [Thread-209056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:24:37.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:24:37.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:24:37.195 [DEBUG] [Thread-209056] [transport.py] [_log()] userauth is OK
2026-02-15T18:24:37.195 [DEBUG] [Thread-209056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:24:37.195 [DEBUG] [Thread-209056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:24:37.195 [DEBUG] [Thread-209056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:24:37.195 [DEBUG] [Thread-209056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:24:37.214 [INFO] [Thread-209056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:24:37.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:24:37.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:24:38.040 [DEBUG] [Thread-209056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:24:38.040 [DEBUG] [Thread-209056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:24:38.088 [DEBUG] [Thread-209056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:24:38.088 [DEBUG] [Thread-209056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:24:38.097 [DEBUG] [Thread-209056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:24:38.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:24:38.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:24: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') -> 00000000
2026-02-15T18:24:38.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:24:38.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:24:38.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:24:38.132 [DEBUG] [Thread-209056] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:24:40.124 [DEBUG] [Thread-209058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:24:55.180 [DEBUG] [Thread-209059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:02.061 [DEBUG] [Thread-209060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:08.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:25:08.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:25:08.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:25:10.214 [DEBUG] [Thread-209061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 24, 43), 19.44, 27.21, 0.0, 27.93, 20.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:25:10.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:24:43
2026-02-15T18:25:10.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:25:10.818 [DEBUG] [Thread-209062] [transport.py] [_log()] starting thread (client mode): 0xa57d7ca0
2026-02-15T18:25:10.818 [DEBUG] [Thread-209062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:25:10.838 [DEBUG] [Thread-209062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:25:10.838 [INFO] [Thread-209062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] client lang: <none>
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] server lang: <none>
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] kex follows: False
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:25:10.841 [DEBUG] [Thread-209062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:25:10.842 [DEBUG] [Thread-209062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:25:10.842 [DEBUG] [Thread-209062] [transport.py] [_log()] Compression: none
2026-02-15T18:25:10.842 [DEBUG] [Thread-209062] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:25:10.859 [DEBUG] [Thread-209062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:25:10.859 [DEBUG] [Thread-209062] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:25:10.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:25:10.860 [DEBUG] [Thread-209062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:25:10.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:25:10.862 [DEBUG] [Thread-209062] [transport.py] [_log()] userauth is OK
2026-02-15T18:25:10.862 [DEBUG] [Thread-209062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:25:10.863 [DEBUG] [Thread-209062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:25:10.863 [DEBUG] [Thread-209062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:25:10.863 [DEBUG] [Thread-209062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:25:10.887 [INFO] [Thread-209062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:25:10.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:25:15.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:15.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:17.929 [DEBUG] [Thread-209062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:25:17.929 [DEBUG] [Thread-209062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:25:17.930 [DEBUG] [Thread-209062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:25:17.970 [DEBUG] [Thread-209062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:25:17.971 [DEBUG] [Thread-209062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:25:17.974 [DEBUG] [Thread-209062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:25:17.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:25:17.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:25:17.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:25:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:25:17.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:25:17.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:25:17.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:25:17.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:25:17.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:25:17.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.683775 -999.00  +20.10  22.91     33   +3.50 1 1 1 1 1   887    0 15.95 -23.29 ----- 18.3 22.9 139.4 28.0 22.9 -28.3 23.1 -27.6 24.2 -26.6 24.5 -28.4
2026-02-15T18:25:17.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:25:17.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:25:17.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.683775
2026-02-15T18:25:17.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:25:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:25:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:25:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:25:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:25:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:24:43', tmtdew=19.44, humidity=27.21, cloud=0.0, wind=27.93, temperature=20.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:24:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:25:17.997 [DEBUG] [Thread-209062] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:25:18.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:25:18.093 [DEBUG] [Thread-209065] [transport.py] [_log()] starting thread (client mode): 0xa2d6c8e0
2026-02-15T18:25:18.093 [DEBUG] [Thread-209065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:25:18.107 [DEBUG] [Thread-209065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:25:18.108 [INFO] [Thread-209065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:25:18.115 [DEBUG] [Thread-209065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:25:18.115 [DEBUG] [Thread-209065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:25:18.115 [DEBUG] [Thread-209065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:25:18.115 [DEBUG] [Thread-209065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] client lang: <none>
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] server lang: <none>
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] kex follows: False
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] Compression: none
2026-02-15T18:25:18.116 [DEBUG] [Thread-209065] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:25:18.174 [DEBUG] [Thread-209065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:25:18.174 [DEBUG] [Thread-209065] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:25:18.175 [DEBUG] [Thread-209065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:25:18.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:25:18.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:25:18.231 [DEBUG] [Thread-209065] [transport.py] [_log()] userauth is OK
2026-02-15T18:25:18.231 [DEBUG] [Thread-209065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:25:18.231 [DEBUG] [Thread-209065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:25:18.231 [DEBUG] [Thread-209065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:25:18.231 [DEBUG] [Thread-209065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:25:18.250 [INFO] [Thread-209065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:25:18.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:25:18.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:25:19.073 [DEBUG] [Thread-209065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:25:19.073 [DEBUG] [Thread-209065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:25:19.121 [DEBUG] [Thread-209065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:25:19.121 [DEBUG] [Thread-209065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:25:19.129 [DEBUG] [Thread-209065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:25:19.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:25:19.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:25:19.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:25:19.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:25:19.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:25:19.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:25:19.161 [DEBUG] [Thread-209065] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:25:25.250 [DEBUG] [Thread-209067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:40.299 [DEBUG] [Thread-209068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:25:49.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:25:49.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:25:49.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:25:51.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 25, 19), 19.39, 27.29, 0.0, 24.3, 20.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:25:51.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:25:19
2026-02-15T18:25:51.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:25:51.622 [DEBUG] [Thread-209069] [transport.py] [_log()] starting thread (client mode): 0xa2d19ea0
2026-02-15T18:25:51.622 [DEBUG] [Thread-209069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:25:51.641 [DEBUG] [Thread-209069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:25:51.641 [INFO] [Thread-209069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:25:51.644 [DEBUG] [Thread-209069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] client lang: <none>
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] server lang: <none>
2026-02-15T18:25:51.645 [DEBUG] [Thread-209069] [transport.py] [_log()] kex follows: False
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] Compression: none
2026-02-15T18:25:51.646 [DEBUG] [Thread-209069] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:25:51.654 [DEBUG] [Thread-209069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:25:51.654 [DEBUG] [Thread-209069] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:25:51.654 [DEBUG] [Thread-209069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:25:51.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:25:51.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:25:51.656 [DEBUG] [Thread-209069] [transport.py] [_log()] userauth is OK
2026-02-15T18:25:51.656 [DEBUG] [Thread-209069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:25:51.656 [DEBUG] [Thread-209069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:25:51.656 [DEBUG] [Thread-209069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:25:51.656 [DEBUG] [Thread-209069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:25:51.691 [INFO] [Thread-209069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:25:51.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:25:52.328 [DEBUG] [Thread-209069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:25:52.328 [DEBUG] [Thread-209069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:25:52.328 [DEBUG] [Thread-209069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:25:52.369 [DEBUG] [Thread-209069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:25:52.369 [DEBUG] [Thread-209069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:25:52.372 [DEBUG] [Thread-209069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:25:52.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:25:52.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:25:52.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:25:52.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:25:52.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:25:52.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:25:52.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:25:52.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:25:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:25:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.684122 -999.00  +20.10  23.67     33   +3.60 1 1 1 1 1   887    0 15.94 -23.40 ----- 26.6 23.7 166.4 35.9 22.8 -29.0 23.1 -27.3 24.2 -26.3 24.5 -29.1
2026-02-15T18:25:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:25:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:25:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.684122
2026-02-15T18:25:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:25:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:25:52.395 [DEBUG] [Thread-209069] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:25:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:25:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:25:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:25:52.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:25:19', tmtdew=19.39, humidity=27.29, cloud=0.0, wind=24.3, temperature=20.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:25:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:25:52.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:25:52.489 [DEBUG] [Thread-209072] [transport.py] [_log()] starting thread (client mode): 0xa57b0670
2026-02-15T18:25:52.490 [DEBUG] [Thread-209072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:25:52.504 [DEBUG] [Thread-209072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:25:52.504 [INFO] [Thread-209072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:25:52.514 [DEBUG] [Thread-209072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] client lang: <none>
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] server lang: <none>
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] kex follows: False
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:25:52.515 [DEBUG] [Thread-209072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:25:52.516 [DEBUG] [Thread-209072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:25:52.516 [DEBUG] [Thread-209072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:25:52.516 [DEBUG] [Thread-209072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:25:52.516 [DEBUG] [Thread-209072] [transport.py] [_log()] Compression: none
2026-02-15T18:25:52.516 [DEBUG] [Thread-209072] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:25:52.570 [DEBUG] [Thread-209072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:25:52.570 [DEBUG] [Thread-209072] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:25:52.571 [DEBUG] [Thread-209072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:25:52.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:25:52.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:25:52.626 [DEBUG] [Thread-209072] [transport.py] [_log()] userauth is OK
2026-02-15T18:25:52.627 [DEBUG] [Thread-209072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:25:52.627 [DEBUG] [Thread-209072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:25:52.627 [DEBUG] [Thread-209072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:25:52.627 [DEBUG] [Thread-209072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:25:52.648 [INFO] [Thread-209072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:25:52.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:25:52.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:25:53.489 [DEBUG] [Thread-209072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:25:53.490 [DEBUG] [Thread-209072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:25:53.537 [DEBUG] [Thread-209072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:25:53.538 [DEBUG] [Thread-209072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:25:53.547 [DEBUG] [Thread-209072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:25:53.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:25:53.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:25:53.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:25:53.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:25:53.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:25:53.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:25:53.583 [DEBUG] [Thread-209072] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:25:55.338 [DEBUG] [Thread-209074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:02.098 [DEBUG] [Thread-209075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:10.399 [DEBUG] [Thread-209076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:15.910 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:15.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:23.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:26:23.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:26:23.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:26:25.431 [DEBUG] [Thread-209077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 25, 54), 19.14, 27.91, 0.0, 30.07, 20.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:26:25.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:25:54
2026-02-15T18:26:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:26:25.982 [DEBUG] [Thread-209078] [transport.py] [_log()] starting thread (client mode): 0xa57b0700
2026-02-15T18:26:25.983 [DEBUG] [Thread-209078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:26:26.003 [DEBUG] [Thread-209078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:26:26.003 [INFO] [Thread-209078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] client lang: <none>
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] server lang: <none>
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] kex follows: False
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:26:26.006 [DEBUG] [Thread-209078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:26:26.007 [DEBUG] [Thread-209078] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:26:26.007 [DEBUG] [Thread-209078] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:26:26.007 [DEBUG] [Thread-209078] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:26:26.007 [DEBUG] [Thread-209078] [transport.py] [_log()] Compression: none
2026-02-15T18:26:26.007 [DEBUG] [Thread-209078] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:26:26.023 [DEBUG] [Thread-209078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:26:26.024 [DEBUG] [Thread-209078] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:26:26.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:26:26.025 [DEBUG] [Thread-209078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:26:26.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:26:26.026 [DEBUG] [Thread-209078] [transport.py] [_log()] userauth is OK
2026-02-15T18:26:26.026 [DEBUG] [Thread-209078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:26:26.026 [DEBUG] [Thread-209078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:26:26.026 [DEBUG] [Thread-209078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:26:26.026 [DEBUG] [Thread-209078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:26:26.058 [INFO] [Thread-209078] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:26:26.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:26:26.775 [DEBUG] [Thread-209078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:26:26.775 [DEBUG] [Thread-209078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:26:26.775 [DEBUG] [Thread-209078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:26:26.816 [DEBUG] [Thread-209078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:26:26.816 [DEBUG] [Thread-209078] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:26:26.818 [DEBUG] [Thread-209078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:26:26.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:26:26.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:26:26.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:26:26.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:26:26.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:26:26.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:26:26.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.684470 -999.00  +20.00  20.34     33   +3.60 1 1 1 1 1   887    0 16.36 -23.63 ----- 17.8 20.3 166.0 27.7 22.8 -28.7 22.9 -27.5 24.1 -26.6 24.5 -28.5
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.684470
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:26:26.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:25:54', tmtdew=19.14, humidity=27.91, cloud=0.0, wind=30.07, temperature=20.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:25:38.208', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:26:26.836 [DEBUG] [Thread-209078] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:26:26.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:26:26.917 [DEBUG] [Thread-209081] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb60
2026-02-15T18:26:26.917 [DEBUG] [Thread-209081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:26:26.932 [DEBUG] [Thread-209081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:26:26.932 [INFO] [Thread-209081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] client lang: <none>
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] server lang: <none>
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] kex follows: False
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] Compression: none
2026-02-15T18:26:26.940 [DEBUG] [Thread-209081] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:26:26.999 [DEBUG] [Thread-209081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:26:26.999 [DEBUG] [Thread-209081] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:26:26.999 [DEBUG] [Thread-209081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:26:26.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:26:27.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:26:27.055 [DEBUG] [Thread-209081] [transport.py] [_log()] userauth is OK
2026-02-15T18:26:27.055 [DEBUG] [Thread-209081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:26:27.055 [DEBUG] [Thread-209081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:26:27.056 [DEBUG] [Thread-209081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:26:27.056 [DEBUG] [Thread-209081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:26:27.089 [INFO] [Thread-209081] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:26:27.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:26:27.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:26:27.998 [DEBUG] [Thread-209081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:26:27.998 [DEBUG] [Thread-209081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:26:28.046 [DEBUG] [Thread-209081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:26:28.046 [DEBUG] [Thread-209081] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:26:28.054 [DEBUG] [Thread-209081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:26:28.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:26: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')
2026-02-15T18:26:28.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:26:28.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:26:28.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:26:28.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:26:28.087 [DEBUG] [Thread-209081] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:26:40.467 [DEBUG] [Thread-209083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:55.522 [DEBUG] [Thread-209084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:26:58.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:26:58.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:26: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
2026-02-15T18:27:00.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 26, 29), 19.0, 28.16, 0.0, 27.7, 20.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:27:00.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:26:29
2026-02-15T18:27:00.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:27:00.535 [DEBUG] [Thread-209085] [transport.py] [_log()] starting thread (client mode): 0xa2dc36a0
2026-02-15T18:27:00.535 [DEBUG] [Thread-209085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:27:00.557 [DEBUG] [Thread-209085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:27:00.557 [INFO] [Thread-209085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] client lang: <none>
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] server lang: <none>
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] kex follows: False
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:27:00.560 [DEBUG] [Thread-209085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:27:00.561 [DEBUG] [Thread-209085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:27:00.561 [DEBUG] [Thread-209085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:27:00.561 [DEBUG] [Thread-209085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:27:00.561 [DEBUG] [Thread-209085] [transport.py] [_log()] Compression: none
2026-02-15T18:27:00.561 [DEBUG] [Thread-209085] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:27:00.578 [DEBUG] [Thread-209085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:27:00.579 [DEBUG] [Thread-209085] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:27:00.579 [DEBUG] [Thread-209085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:27:00.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:27:00.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:27:00.582 [DEBUG] [Thread-209085] [transport.py] [_log()] userauth is OK
2026-02-15T18:27:00.582 [DEBUG] [Thread-209085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:27:00.582 [DEBUG] [Thread-209085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:27:00.582 [DEBUG] [Thread-209085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:27:00.582 [DEBUG] [Thread-209085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:27:00.607 [INFO] [Thread-209085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:27:00.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:27:01.198 [DEBUG] [Thread-209085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:27:01.199 [DEBUG] [Thread-209085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:27:01.199 [DEBUG] [Thread-209085] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:27:01.240 [DEBUG] [Thread-209085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:27:01.240 [DEBUG] [Thread-209085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:27:01.243 [DEBUG] [Thread-209085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:27:01.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:27:01.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:27:01.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:27:01.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:27:01.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:27:01.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:27:01.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:27:01.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:27:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:27:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.684817 -999.00  +19.90  25.19     34   +3.60 1 1 1 1 1   887    0 15.94 -23.47 ----- 30.0 25.2 140.8 31.3 22.8 -28.7 22.9 -27.6 24.1 -26.8 24.4 -29.4
2026-02-15T18:27:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:27:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:27:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.684817
2026-02-15T18:27:01.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:27:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:27:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:27:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:27:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:27:01.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:26:29', tmtdew=19.0, humidity=28.16, cloud=0.0, wind=27.7, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:26:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:27:01.270 [DEBUG] [Thread-209085] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:27:01.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:27:01.364 [DEBUG] [Thread-209088] [transport.py] [_log()] starting thread (client mode): 0xa57d4f70
2026-02-15T18:27:01.364 [DEBUG] [Thread-209088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:27:01.384 [DEBUG] [Thread-209088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:27:01.384 [INFO] [Thread-209088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:27:01.391 [DEBUG] [Thread-209088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] client lang: <none>
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] server lang: <none>
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] kex follows: False
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:27:01.392 [DEBUG] [Thread-209088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:27:01.393 [DEBUG] [Thread-209088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:27:01.393 [DEBUG] [Thread-209088] [transport.py] [_log()] Compression: none
2026-02-15T18:27:01.393 [DEBUG] [Thread-209088] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:27:01.449 [DEBUG] [Thread-209088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:27:01.449 [DEBUG] [Thread-209088] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:27:01.449 [DEBUG] [Thread-209088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:27:01.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:27:01.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:27:01.507 [DEBUG] [Thread-209088] [transport.py] [_log()] userauth is OK
2026-02-15T18:27:01.507 [DEBUG] [Thread-209088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:27:01.507 [DEBUG] [Thread-209088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:27:01.507 [DEBUG] [Thread-209088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:27:01.507 [DEBUG] [Thread-209088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:27:01.523 [INFO] [Thread-209088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:27:01.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:27:01.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:27:02.143 [DEBUG] [Thread-209090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:27:02.387 [DEBUG] [Thread-209088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:27:02.387 [DEBUG] [Thread-209088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:27:02.435 [DEBUG] [Thread-209088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:27:02.435 [DEBUG] [Thread-209088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:27:02.443 [DEBUG] [Thread-209088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:27:02.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:27:02.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:27:02.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:27:02.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:27:02.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:27:02.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:27:02.475 [DEBUG] [Thread-209088] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:27:10.562 [DEBUG] [Thread-209091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:27:16.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:27:16.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:27:25.623 [DEBUG] [Thread-209092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:27:32.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:27:32.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:27:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:27:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 27, 5), 18.96, 28.22, 0.0, 28.0, 20.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:27:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:27:05
2026-02-15T18:27:34.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:27:34.964 [DEBUG] [Thread-209093] [transport.py] [_log()] starting thread (client mode): 0xa2dc0b20
2026-02-15T18:27:34.964 [DEBUG] [Thread-209093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:27:34.984 [DEBUG] [Thread-209093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:27:34.985 [INFO] [Thread-209093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] client lang: <none>
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] server lang: <none>
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] kex follows: False
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] Compression: none
2026-02-15T18:27:34.988 [DEBUG] [Thread-209093] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:27:35.005 [DEBUG] [Thread-209093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:27:35.005 [DEBUG] [Thread-209093] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:27:35.006 [DEBUG] [Thread-209093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:27:35.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:27:35.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:27:35.007 [DEBUG] [Thread-209093] [transport.py] [_log()] userauth is OK
2026-02-15T18:27:35.008 [DEBUG] [Thread-209093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:27:35.008 [DEBUG] [Thread-209093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:27:35.008 [DEBUG] [Thread-209093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:27:35.008 [DEBUG] [Thread-209093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:27:35.029 [INFO] [Thread-209093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:27:35.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:27:35.677 [DEBUG] [Thread-209093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:27:35.677 [DEBUG] [Thread-209093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:27:35.678 [DEBUG] [Thread-209093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:27:35.718 [DEBUG] [Thread-209093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:27:35.719 [DEBUG] [Thread-209093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:27:35.722 [DEBUG] [Thread-209093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:27:35.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:27:35.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:27:35.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:27:35.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:27:35.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:27:35.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:27:35.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:27:35.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:27:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:27:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.685164 -999.00  +19.80  21.79     34   +3.70 1 1 1 1 1   887    0 16.08 -25.23 ----- 18.8 21.8 138.0 32.3 22.7 -28.4 22.8 -27.5 24.0 -26.6 24.3 -28.2
2026-02-15T18:27:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:27:35.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:27:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.685164
2026-02-15T18:27:35.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:27:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:27:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:27:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:27:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:27:35.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:27:05', tmtdew=18.96, humidity=28.22, cloud=0.0, wind=28.0, temperature=20.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:26:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:27:35.748 [DEBUG] [Thread-209093] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:27:35.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:27:35.846 [DEBUG] [Thread-209096] [transport.py] [_log()] starting thread (client mode): 0xa57d4fd0
2026-02-15T18:27:35.846 [DEBUG] [Thread-209096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:27:35.861 [DEBUG] [Thread-209096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:27:35.862 [INFO] [Thread-209096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:27:35.869 [DEBUG] [Thread-209096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] client lang: <none>
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] server lang: <none>
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] kex follows: False
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:27:35.870 [DEBUG] [Thread-209096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:27:35.871 [DEBUG] [Thread-209096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:27:35.871 [DEBUG] [Thread-209096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:27:35.871 [DEBUG] [Thread-209096] [transport.py] [_log()] Compression: none
2026-02-15T18:27:35.871 [DEBUG] [Thread-209096] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:27:35.928 [DEBUG] [Thread-209096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:27:35.929 [DEBUG] [Thread-209096] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:27:35.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:27:35.930 [DEBUG] [Thread-209096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:27:35.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:27:35.984 [DEBUG] [Thread-209096] [transport.py] [_log()] userauth is OK
2026-02-15T18:27:35.984 [DEBUG] [Thread-209096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:27:35.984 [DEBUG] [Thread-209096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:27:35.985 [DEBUG] [Thread-209096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:27:35.985 [DEBUG] [Thread-209096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:27:36.008 [INFO] [Thread-209096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:27:36.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:27:36.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:27:36.845 [DEBUG] [Thread-209096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:27:36.845 [DEBUG] [Thread-209096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:27:36.884 [DEBUG] [Thread-209096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:27:36.885 [DEBUG] [Thread-209096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:27:36.894 [DEBUG] [Thread-209096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:27:36.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:27:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:27:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:27:36.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:27:36.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:27:36.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:27:36.930 [DEBUG] [Thread-209096] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:27:40.662 [DEBUG] [Thread-209098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:27:55.713 [DEBUG] [Thread-209099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:02.172 [DEBUG] [Thread-209100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:06.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:28:06.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:28:06.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:28:08.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 27, 40), 19.48, 27.35, 0.0, 31.97, 20.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:28:08.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:27:40
2026-02-15T18:28:09.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:28:09.402 [DEBUG] [Thread-209101] [transport.py] [_log()] starting thread (client mode): 0xa57b24d0
2026-02-15T18:28:09.402 [DEBUG] [Thread-209101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:28:09.421 [DEBUG] [Thread-209101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:28:09.421 [INFO] [Thread-209101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] client lang: <none>
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] server lang: <none>
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] kex follows: False
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] Compression: none
2026-02-15T18:28:09.422 [DEBUG] [Thread-209101] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:28:09.434 [DEBUG] [Thread-209101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:28:09.434 [DEBUG] [Thread-209101] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:28:09.435 [DEBUG] [Thread-209101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:28:09.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:28:09.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:28:09.436 [DEBUG] [Thread-209101] [transport.py] [_log()] userauth is OK
2026-02-15T18:28:09.437 [DEBUG] [Thread-209101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:28:09.437 [DEBUG] [Thread-209101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:28:09.437 [DEBUG] [Thread-209101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:28:09.437 [DEBUG] [Thread-209101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:28:09.454 [INFO] [Thread-209101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:28:09.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:28:10.047 [DEBUG] [Thread-209101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:28:10.048 [DEBUG] [Thread-209101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:28:10.048 [DEBUG] [Thread-209101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:28:10.088 [DEBUG] [Thread-209101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:28:10.089 [DEBUG] [Thread-209101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:28:10.091 [DEBUG] [Thread-209101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:28:10.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:28:10.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:28:10.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:28:10.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:28:10.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:28:10.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:28:10.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:28:10.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:28:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:28:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.685858 -999.00  +19.70  24.98     34   +3.60 1 1 1 1 1   887    0 16.23 -29.46 ----- 19.1 25.0 142.4 30.0 22.6 -28.7 22.7 -27.8 23.9 -26.8 24.2 -28.6
2026-02-15T18:28:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:28:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:28:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.685858
2026-02-15T18:28:10.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:28:10.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:28:10.114 [DEBUG] [Thread-209101] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:28:10.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:28:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:28:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:28:10.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:27:40', tmtdew=19.48, humidity=27.35, cloud=0.0, wind=31.97, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:27:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:28:10.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:28:10.208 [DEBUG] [Thread-209104] [transport.py] [_log()] starting thread (client mode): 0xa57b0e50
2026-02-15T18:28:10.208 [DEBUG] [Thread-209104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:28:10.222 [DEBUG] [Thread-209104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:28:10.223 [INFO] [Thread-209104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:28:10.230 [DEBUG] [Thread-209104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:28:10.230 [DEBUG] [Thread-209104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:28:10.231 [DEBUG] [Thread-209104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:28:10.231 [DEBUG] [Thread-209104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:10.231 [DEBUG] [Thread-209104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:10.231 [DEBUG] [Thread-209104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:10.231 [DEBUG] [Thread-209104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] client lang: <none>
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] server lang: <none>
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] kex follows: False
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] Compression: none
2026-02-15T18:28:10.232 [DEBUG] [Thread-209104] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:28:10.288 [DEBUG] [Thread-209104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:28:10.289 [DEBUG] [Thread-209104] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:28:10.289 [DEBUG] [Thread-209104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:28:10.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:28:10.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:28:10.344 [DEBUG] [Thread-209104] [transport.py] [_log()] userauth is OK
2026-02-15T18:28:10.344 [DEBUG] [Thread-209104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:28:10.344 [DEBUG] [Thread-209104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:28:10.344 [DEBUG] [Thread-209104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:28:10.345 [DEBUG] [Thread-209104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:28:10.363 [INFO] [Thread-209104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:28:10.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:28:10.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:28:10.752 [DEBUG] [Thread-209106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:11.183 [DEBUG] [Thread-209104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:28:11.183 [DEBUG] [Thread-209104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:28:11.232 [DEBUG] [Thread-209104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:28:11.232 [DEBUG] [Thread-209104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:28:11.243 [DEBUG] [Thread-209104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:28:11.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:28:11.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:28:11.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:28:11.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:28:11.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:28:11.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:28:11.275 [DEBUG] [Thread-209104] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:28:16.209 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:16.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:25.799 [DEBUG] [Thread-209107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:40.834 [DEBUG] [Thread-209108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:28:41.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:28:41.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:28:41.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:28:43.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 28, 16), 18.97, 28.04, 0.0, 30.3, 20.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:28:43.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:28:16
2026-02-15T18:28:43.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:28:43.699 [DEBUG] [Thread-209109] [transport.py] [_log()] starting thread (client mode): 0xa57b2a70
2026-02-15T18:28:43.699 [DEBUG] [Thread-209109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:28:43.722 [DEBUG] [Thread-209109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:28:43.722 [INFO] [Thread-209109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] client lang: <none>
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] server lang: <none>
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] kex follows: False
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] Compression: none
2026-02-15T18:28:43.723 [DEBUG] [Thread-209109] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:28:43.732 [DEBUG] [Thread-209109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:28:43.732 [DEBUG] [Thread-209109] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:28:43.733 [DEBUG] [Thread-209109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:28:43.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:28:43.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:28:43.734 [DEBUG] [Thread-209109] [transport.py] [_log()] userauth is OK
2026-02-15T18:28:43.735 [DEBUG] [Thread-209109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:28:43.735 [DEBUG] [Thread-209109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:28:43.735 [DEBUG] [Thread-209109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:28:43.735 [DEBUG] [Thread-209109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:28:43.753 [INFO] [Thread-209109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:28:43.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:28:44.344 [DEBUG] [Thread-209109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:28:44.344 [DEBUG] [Thread-209109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:28:44.344 [DEBUG] [Thread-209109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:28:44.385 [DEBUG] [Thread-209109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:28:44.386 [DEBUG] [Thread-209109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:28:44.389 [DEBUG] [Thread-209109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:28:44.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:28:44.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:28:44.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:28:44.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:28:44.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:28:44.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:28:44.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:28:44.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:28:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:28:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.686205 -999.00  +19.70  19.21     34   +3.60 1 1 1 1 1   887    0 15.81 -29.20 ----- 19.3 19.2 156.0 30.6 22.6 -28.6 22.7 -27.8 23.8 -27.1 24.2 -28.7
2026-02-15T18:28:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:28:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:28:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.686205
2026-02-15T18:28:44.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:28:44.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:28:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:28:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:28:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:28:44.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:28:16', tmtdew=18.97, humidity=28.04, cloud=0.0, wind=30.3, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:28:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:28:44.415 [DEBUG] [Thread-209109] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:28:44.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:28:44.512 [DEBUG] [Thread-209112] [transport.py] [_log()] starting thread (client mode): 0xa57b3ac0
2026-02-15T18:28:44.512 [DEBUG] [Thread-209112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:28:44.526 [DEBUG] [Thread-209112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:28:44.527 [INFO] [Thread-209112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:28:44.534 [DEBUG] [Thread-209112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:28:44.535 [DEBUG] [Thread-209112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:28:44.535 [DEBUG] [Thread-209112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:28:44.535 [DEBUG] [Thread-209112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:44.535 [DEBUG] [Thread-209112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] client lang: <none>
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] server lang: <none>
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] kex follows: False
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:28:44.536 [DEBUG] [Thread-209112] [transport.py] [_log()] Compression: none
2026-02-15T18:28:44.537 [DEBUG] [Thread-209112] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:28:44.592 [DEBUG] [Thread-209112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:28:44.593 [DEBUG] [Thread-209112] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:28:44.593 [DEBUG] [Thread-209112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:28:44.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:28:44.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:28:44.648 [DEBUG] [Thread-209112] [transport.py] [_log()] userauth is OK
2026-02-15T18:28:44.648 [DEBUG] [Thread-209112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:28:44.649 [DEBUG] [Thread-209112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:28:44.649 [DEBUG] [Thread-209112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:28:44.649 [DEBUG] [Thread-209112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:28:44.667 [INFO] [Thread-209112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:28:44.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:28:44.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:28:45.493 [DEBUG] [Thread-209112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:28:45.493 [DEBUG] [Thread-209112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:28:45.541 [DEBUG] [Thread-209112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:28:45.542 [DEBUG] [Thread-209112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:28:45.551 [DEBUG] [Thread-209112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:28:45.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:28:45.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:28: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') -> 00000000
2026-02-15T18:28:45.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:28:45.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:28:45.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:28:45.588 [DEBUG] [Thread-209112] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:28:55.869 [DEBUG] [Thread-209114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:02.214 [DEBUG] [Thread-209115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:10.921 [DEBUG] [Thread-209116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:15.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:29:15.611 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:29:15.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:29:16.351 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:16.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 28, 51), 18.83, 28.59, 0.0, 30.86, 19.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:29:17.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:28:51
2026-02-15T18:29:17.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:29:17.983 [DEBUG] [Thread-209117] [transport.py] [_log()] starting thread (client mode): 0xa57b1e10
2026-02-15T18:29:17.984 [DEBUG] [Thread-209117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:29:17.994 [DEBUG] [Thread-209117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:29:17.994 [INFO] [Thread-209117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] client lang: <none>
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] server lang: <none>
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] kex follows: False
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] Compression: none
2026-02-15T18:29:17.996 [DEBUG] [Thread-209117] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:29:18.005 [DEBUG] [Thread-209117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:29:18.006 [DEBUG] [Thread-209117] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:29:18.006 [DEBUG] [Thread-209117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:29:18.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:29:18.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:29:18.007 [DEBUG] [Thread-209117] [transport.py] [_log()] userauth is OK
2026-02-15T18:29:18.007 [DEBUG] [Thread-209117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:29:18.007 [DEBUG] [Thread-209117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:29:18.007 [DEBUG] [Thread-209117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:29:18.007 [DEBUG] [Thread-209117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:29:18.037 [INFO] [Thread-209117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:29:18.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:29:18.681 [DEBUG] [Thread-209117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:29:18.681 [DEBUG] [Thread-209117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:29:18.681 [DEBUG] [Thread-209117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:29:18.721 [DEBUG] [Thread-209117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:29:18.722 [DEBUG] [Thread-209117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:29:18.725 [DEBUG] [Thread-209117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:29:18.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:29:18.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:29:18.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:29:18.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:29:18.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:29:18.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:29:18.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:29:18.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:29:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:29:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.686900 -999.00  +19.70  21.02     34   +3.70 1 1 1 1 1   887    0 15.51 -36.43 ----- 23.4 21.0 146.1 27.0 22.5 -28.8 22.6 -27.6 23.7 -26.5 24.0 -29.2
2026-02-15T18:29:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:29:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:29:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.686900
2026-02-15T18:29:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:29:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:29:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:29:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:29:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:29:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:28:51', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=30.86, temperature=19.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:29:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:29:18.752 [DEBUG] [Thread-209117] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:29: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-02-15T18:29:18.847 [DEBUG] [Thread-209120] [transport.py] [_log()] starting thread (client mode): 0xa57b0e50
2026-02-15T18:29:18.848 [DEBUG] [Thread-209120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:29:18.862 [DEBUG] [Thread-209120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:29:18.863 [INFO] [Thread-209120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:29:18.870 [DEBUG] [Thread-209120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:29:18.870 [DEBUG] [Thread-209120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:29:18.870 [DEBUG] [Thread-209120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:29:18.870 [DEBUG] [Thread-209120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:18.870 [DEBUG] [Thread-209120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] client lang: <none>
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] server lang: <none>
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] kex follows: False
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:29:18.871 [DEBUG] [Thread-209120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:29:18.872 [DEBUG] [Thread-209120] [transport.py] [_log()] Compression: none
2026-02-15T18:29:18.872 [DEBUG] [Thread-209120] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:29:18.927 [DEBUG] [Thread-209120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:29:18.928 [DEBUG] [Thread-209120] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:29:18.928 [DEBUG] [Thread-209120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:29:18.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:29:18.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:29:18.983 [DEBUG] [Thread-209120] [transport.py] [_log()] userauth is OK
2026-02-15T18:29:18.984 [DEBUG] [Thread-209120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:29:18.984 [DEBUG] [Thread-209120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:29:18.984 [DEBUG] [Thread-209120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:29:18.984 [DEBUG] [Thread-209120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:29:19.003 [INFO] [Thread-209120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:29:19.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:29:19.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:29:19.810 [DEBUG] [Thread-209120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:29:19.811 [DEBUG] [Thread-209120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:29:19.858 [DEBUG] [Thread-209120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:29:19.859 [DEBUG] [Thread-209120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:29:19.868 [DEBUG] [Thread-209120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:29:19.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:29: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')
2026-02-15T18:29: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
2026-02-15T18:29:19.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:29:19.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:29:19.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:29:19.905 [DEBUG] [Thread-209120] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:29:25.955 [DEBUG] [Thread-209122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:41.002 [DEBUG] [Thread-209123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:29:49.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:29:49.928 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:29:49.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:29:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 29, 27), 18.85, 28.57, 0.0, 31.28, 19.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:29:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:29:27
2026-02-15T18:29:52.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:29:52.578 [DEBUG] [Thread-209124] [transport.py] [_log()] starting thread (client mode): 0xa57d6aa0
2026-02-15T18:29:52.578 [DEBUG] [Thread-209124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:29:52.598 [DEBUG] [Thread-209124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:29:52.598 [INFO] [Thread-209124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] client lang: <none>
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] server lang: <none>
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] kex follows: False
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] Compression: none
2026-02-15T18:29:52.601 [DEBUG] [Thread-209124] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:29:52.616 [DEBUG] [Thread-209124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:29:52.616 [DEBUG] [Thread-209124] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:29:52.617 [DEBUG] [Thread-209124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:29:52.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:29:52.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:29:52.617 [DEBUG] [Thread-209124] [transport.py] [_log()] userauth is OK
2026-02-15T18:29:52.617 [DEBUG] [Thread-209124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:29:52.617 [DEBUG] [Thread-209124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:29:52.617 [DEBUG] [Thread-209124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:29:52.617 [DEBUG] [Thread-209124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:29:52.627 [INFO] [Thread-209124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:29:52.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:29:53.225 [DEBUG] [Thread-209124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:29:53.226 [DEBUG] [Thread-209124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:29:53.226 [DEBUG] [Thread-209124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:29:53.267 [DEBUG] [Thread-209124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:29:53.267 [DEBUG] [Thread-209124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:29:53.269 [DEBUG] [Thread-209124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:29:53.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:29:53.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:29:53.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:29:53.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:29:53.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:29:53.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:29:53.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:29:53.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.687247 -999.00  +19.70  20.55     35   +3.80 1 1 1 1 1   887    0 15.53 -36.87 ----- 22.5 20.6 156.6 27.1 22.4 -28.2 22.6 -27.8 23.7 -26.3 24.0 -28.6
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.687247
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:29:53.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:29:27', tmtdew=18.85, humidity=28.57, cloud=0.0, wind=31.28, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:29:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:29:53.289 [DEBUG] [Thread-209124] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:29:53.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:29:53.375 [DEBUG] [Thread-209127] [transport.py] [_log()] starting thread (client mode): 0xa57d6b90
2026-02-15T18:29:53.375 [DEBUG] [Thread-209127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:29:53.390 [DEBUG] [Thread-209127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:29:53.390 [INFO] [Thread-209127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] client lang: <none>
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] server lang: <none>
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] kex follows: False
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:29:53.397 [DEBUG] [Thread-209127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:29:53.398 [DEBUG] [Thread-209127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:29:53.398 [DEBUG] [Thread-209127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:29:53.398 [DEBUG] [Thread-209127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:29:53.398 [DEBUG] [Thread-209127] [transport.py] [_log()] Compression: none
2026-02-15T18:29:53.398 [DEBUG] [Thread-209127] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:29:53.453 [DEBUG] [Thread-209127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:29:53.453 [DEBUG] [Thread-209127] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:29:53.453 [DEBUG] [Thread-209127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:29:53.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:29:53.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:29:53.510 [DEBUG] [Thread-209127] [transport.py] [_log()] userauth is OK
2026-02-15T18:29:53.510 [DEBUG] [Thread-209127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:29:53.510 [DEBUG] [Thread-209127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:29:53.510 [DEBUG] [Thread-209127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:29:53.510 [DEBUG] [Thread-209127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:29:53.524 [INFO] [Thread-209127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:29:53.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:29:53.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:29:54.357 [DEBUG] [Thread-209127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:29:54.357 [DEBUG] [Thread-209127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:29:54.406 [DEBUG] [Thread-209127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:29:54.406 [DEBUG] [Thread-209127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:29:54.416 [DEBUG] [Thread-209127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:29:54.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:29:54.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:29:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:29:54.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:29:54.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:29:54.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:29:54.454 [DEBUG] [Thread-209127] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:29:56.040 [DEBUG] [Thread-209129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:02.260 [DEBUG] [Thread-209130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:11.094 [DEBUG] [Thread-209131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:16.494 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:16.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:24.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:30:24.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:30:24.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:30:26.127 [DEBUG] [Thread-209132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 30, 2), 18.84, 28.59, 0.0, 28.44, 19.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:30:26.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:30:02
2026-02-15T18:30:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:30:27.318 [DEBUG] [Thread-209133] [transport.py] [_log()] starting thread (client mode): 0xa57d4dc0
2026-02-15T18:30:27.318 [DEBUG] [Thread-209133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:30:27.339 [DEBUG] [Thread-209133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:30:27.339 [INFO] [Thread-209133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:30:27.342 [DEBUG] [Thread-209133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:30:27.342 [DEBUG] [Thread-209133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:30:27.342 [DEBUG] [Thread-209133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:30:27.342 [DEBUG] [Thread-209133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] client lang: <none>
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] server lang: <none>
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] kex follows: False
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] Compression: none
2026-02-15T18:30:27.343 [DEBUG] [Thread-209133] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:30:27.360 [DEBUG] [Thread-209133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:30:27.360 [DEBUG] [Thread-209133] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:30:27.361 [DEBUG] [Thread-209133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:30:27.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:30:27.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:30:27.363 [DEBUG] [Thread-209133] [transport.py] [_log()] userauth is OK
2026-02-15T18:30:27.363 [DEBUG] [Thread-209133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:30:27.363 [DEBUG] [Thread-209133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:30:27.363 [DEBUG] [Thread-209133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:30:27.363 [DEBUG] [Thread-209133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:30:27.388 [INFO] [Thread-209133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:30:27.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:30:28.024 [DEBUG] [Thread-209133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:30:28.024 [DEBUG] [Thread-209133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:30:28.024 [DEBUG] [Thread-209133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:30:28.065 [DEBUG] [Thread-209133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:30:28.066 [DEBUG] [Thread-209133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:30:28.069 [DEBUG] [Thread-209133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:30:28.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:30:28.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:30:28.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:30:28.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:30:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:30:28.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:30:28.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:30:28.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:30:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:30:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.687594 -999.00  +19.70  25.29     35   +3.80 1 1 1 1 1   887    0 15.21 -44.47 ----- 27.6 25.3 171.8 31.6 22.4 -28.3 22.5 -27.1 23.6 -26.7 23.9 -29.1
2026-02-15T18:30:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:30:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:30:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.687594
2026-02-15T18:30:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:30:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:30:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:30:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:30:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:30:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:30:02', tmtdew=18.84, humidity=28.59, cloud=0.0, wind=28.44, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:30:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:30:28.094 [DEBUG] [Thread-209133] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:30:28.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:30:28.193 [DEBUG] [Thread-209136] [transport.py] [_log()] starting thread (client mode): 0xa57e0820
2026-02-15T18:30:28.193 [DEBUG] [Thread-209136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:30:28.208 [DEBUG] [Thread-209136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:30:28.209 [INFO] [Thread-209136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:30:28.216 [DEBUG] [Thread-209136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:30:28.216 [DEBUG] [Thread-209136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:30:28.216 [DEBUG] [Thread-209136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:30:28.216 [DEBUG] [Thread-209136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:30:28.216 [DEBUG] [Thread-209136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] client lang: <none>
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] server lang: <none>
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] kex follows: False
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] Compression: none
2026-02-15T18:30:28.217 [DEBUG] [Thread-209136] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:30:28.278 [DEBUG] [Thread-209136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:30:28.279 [DEBUG] [Thread-209136] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:30:28.280 [DEBUG] [Thread-209136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:30:28.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:30:28.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:30:28.334 [DEBUG] [Thread-209136] [transport.py] [_log()] userauth is OK
2026-02-15T18:30:28.334 [DEBUG] [Thread-209136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:30:28.335 [DEBUG] [Thread-209136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:30:28.335 [DEBUG] [Thread-209136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:30:28.335 [DEBUG] [Thread-209136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:30:28.353 [INFO] [Thread-209136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:30:28.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:30:28.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:30:29.185 [DEBUG] [Thread-209136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:30:29.185 [DEBUG] [Thread-209136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:30:29.232 [DEBUG] [Thread-209136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:30:29.232 [DEBUG] [Thread-209136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:30:29.241 [DEBUG] [Thread-209136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:30:29.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:30:29.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:30:29.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:30:29.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:30:29.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:30:29.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:30:29.278 [DEBUG] [Thread-209136] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:30:41.160 [DEBUG] [Thread-209138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:56.217 [DEBUG] [Thread-209139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:30:59.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:30:59.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:30:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:31:01.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 30, 38), 19.59, 27.18, 0.0, 32.71, 20.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:31:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:30:38
2026-02-15T18:31:01.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:31:01.677 [DEBUG] [Thread-209140] [transport.py] [_log()] starting thread (client mode): 0xa57d6710
2026-02-15T18:31:01.677 [DEBUG] [Thread-209140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:31:01.696 [DEBUG] [Thread-209140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:31:01.697 [INFO] [Thread-209140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] client lang: <none>
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] server lang: <none>
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] kex follows: False
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] Compression: none
2026-02-15T18:31:01.700 [DEBUG] [Thread-209140] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:31:01.717 [DEBUG] [Thread-209140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:31:01.718 [DEBUG] [Thread-209140] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:31:01.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:31:01.719 [DEBUG] [Thread-209140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:31:01.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:31:01.721 [DEBUG] [Thread-209140] [transport.py] [_log()] userauth is OK
2026-02-15T18:31:01.721 [DEBUG] [Thread-209140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:31:01.721 [DEBUG] [Thread-209140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:31:01.721 [DEBUG] [Thread-209140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:31:01.721 [DEBUG] [Thread-209140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:31:01.756 [INFO] [Thread-209140] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:31:01.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:31:02.310 [DEBUG] [Thread-209142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:31:02.383 [DEBUG] [Thread-209140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:31:02.383 [DEBUG] [Thread-209140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:31:02.384 [DEBUG] [Thread-209140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:31:02.425 [DEBUG] [Thread-209140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:31:02.425 [DEBUG] [Thread-209140] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:31:02.428 [DEBUG] [Thread-209140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:31:02.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:31:02.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:31:02.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:31:02.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:31:02.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:31:02.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:31:02.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:31:02.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.687941 -999.00  +19.60  23.35     35   +3.80 1 1 1 1 1   887    0 15.04 -49.56 ----- 20.1 23.4 171.2 30.4 22.4 -28.3 22.5 -26.9 23.6 -26.6 23.9 -28.8
2026-02-15T18:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.687941
2026-02-15T18:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:31:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:31:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:31:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:31:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:31:02.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:30:38', tmtdew=19.59, humidity=27.18, cloud=0.0, wind=32.71, temperature=20.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:30:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:31:02.454 [DEBUG] [Thread-209140] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:31:02.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:31:02.552 [DEBUG] [Thread-209144] [transport.py] [_log()] starting thread (client mode): 0xa2d57dc0
2026-02-15T18:31:02.552 [DEBUG] [Thread-209144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:31:02.566 [DEBUG] [Thread-209144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:31:02.566 [INFO] [Thread-209144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:31:02.573 [DEBUG] [Thread-209144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] client lang: <none>
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] server lang: <none>
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] kex follows: False
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] Compression: none
2026-02-15T18:31:02.574 [DEBUG] [Thread-209144] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:31:02.634 [DEBUG] [Thread-209144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:31:02.635 [DEBUG] [Thread-209144] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:31:02.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:31:02.636 [DEBUG] [Thread-209144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:31:02.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:31:02.690 [DEBUG] [Thread-209144] [transport.py] [_log()] userauth is OK
2026-02-15T18:31:02.690 [DEBUG] [Thread-209144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:31:02.690 [DEBUG] [Thread-209144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:31:02.690 [DEBUG] [Thread-209144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:31:02.690 [DEBUG] [Thread-209144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:31:02.709 [INFO] [Thread-209144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:31:02.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:31:02.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:31:03.551 [DEBUG] [Thread-209144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:31:03.552 [DEBUG] [Thread-209144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:31:03.599 [DEBUG] [Thread-209144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:31:03.599 [DEBUG] [Thread-209144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:31:03.609 [DEBUG] [Thread-209144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:31:03.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:31:03.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:31:03.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:31:03.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:31:03.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:31:03.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:31:03.645 [DEBUG] [Thread-209144] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:31:11.254 [DEBUG] [Thread-209146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:31:16.637 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:31:16.639 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:31:26.295 [DEBUG] [Thread-209147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:31:33.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:31:33.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:31:33.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:31:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 31, 13), 18.77, 28.61, 0.0, 32.08, 19.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:31:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:31:13
2026-02-15T18:31:35.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:31:36.055 [DEBUG] [Thread-209148] [transport.py] [_log()] starting thread (client mode): 0xa2d78160
2026-02-15T18:31:36.055 [DEBUG] [Thread-209148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:31:36.076 [DEBUG] [Thread-209148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:31:36.076 [INFO] [Thread-209148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] client lang: <none>
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] server lang: <none>
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] kex follows: False
2026-02-15T18:31:36.080 [DEBUG] [Thread-209148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:31:36.081 [DEBUG] [Thread-209148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:31:36.081 [DEBUG] [Thread-209148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:31:36.081 [DEBUG] [Thread-209148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:31:36.081 [DEBUG] [Thread-209148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:31:36.081 [DEBUG] [Thread-209148] [transport.py] [_log()] Compression: none
2026-02-15T18:31:36.081 [DEBUG] [Thread-209148] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:31:36.100 [DEBUG] [Thread-209148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:31:36.101 [DEBUG] [Thread-209148] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:31:36.101 [DEBUG] [Thread-209148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:31:36.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:31:36.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:31:36.103 [DEBUG] [Thread-209148] [transport.py] [_log()] userauth is OK
2026-02-15T18:31:36.103 [DEBUG] [Thread-209148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:31:36.103 [DEBUG] [Thread-209148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:31:36.103 [DEBUG] [Thread-209148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:31:36.103 [DEBUG] [Thread-209148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:31:36.120 [INFO] [Thread-209148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:31:36.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:31:36.740 [DEBUG] [Thread-209148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:31:36.740 [DEBUG] [Thread-209148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:31:36.741 [DEBUG] [Thread-209148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:31:36.781 [DEBUG] [Thread-209148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:31:36.781 [DEBUG] [Thread-209148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:31:36.784 [DEBUG] [Thread-209148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:31:36.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:31:36.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:31:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:31:36.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:31:36.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:31:36.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:31:36.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:31:36.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:31:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:31:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.688289 -999.00  +19.60  26.11     34   +3.70 1 1 1 1 1   887    0 15.05 -55.34 ----- 27.0 26.1 171.8 35.8 22.4 -28.3 22.3 -28.0 23.5 -26.4 23.9 -28.5
2026-02-15T18:31:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:31:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:31:36.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.688289
2026-02-15T18:31:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:31:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:31:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:31:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:31:36.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:31:36.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:31:13', tmtdew=18.77, humidity=28.61, cloud=0.0, wind=32.08, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:31:08.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:31:36.809 [DEBUG] [Thread-209148] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:31:36.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:31:36.908 [DEBUG] [Thread-209151] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T18:31:36.908 [DEBUG] [Thread-209151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:31:36.926 [DEBUG] [Thread-209151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:31:36.927 [INFO] [Thread-209151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:31:36.934 [DEBUG] [Thread-209151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] client lang: <none>
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] server lang: <none>
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] kex follows: False
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] Compression: none
2026-02-15T18:31:36.935 [DEBUG] [Thread-209151] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:31:36.992 [DEBUG] [Thread-209151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:31:36.993 [DEBUG] [Thread-209151] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:31:36.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:31:36.994 [DEBUG] [Thread-209151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:31:36.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:31:37.049 [DEBUG] [Thread-209151] [transport.py] [_log()] userauth is OK
2026-02-15T18:31:37.049 [DEBUG] [Thread-209151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:31:37.049 [DEBUG] [Thread-209151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:31:37.050 [DEBUG] [Thread-209151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:31:37.050 [DEBUG] [Thread-209151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:31:37.071 [INFO] [Thread-209151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:31:37.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:31:37.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:31:37.910 [DEBUG] [Thread-209151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:31:37.910 [DEBUG] [Thread-209151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:31:37.958 [DEBUG] [Thread-209151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:31:37.958 [DEBUG] [Thread-209151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:31:37.966 [DEBUG] [Thread-209151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:31:37.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:31:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:31:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:31:37.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:31:37.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:31:37.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:31:38.001 [DEBUG] [Thread-209151] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:31:41.329 [DEBUG] [Thread-209153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:31:56.379 [DEBUG] [Thread-209154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:02.354 [DEBUG] [Thread-209155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:08.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:32:08.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:32:08.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:32:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 31, 49), 18.63, 28.77, 0.0, 22.44, 19.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:32:10.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:31:49
2026-02-15T18:32:10.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:32:10.773 [DEBUG] [Thread-209156] [transport.py] [_log()] starting thread (client mode): 0xa2d78700
2026-02-15T18:32:10.773 [DEBUG] [Thread-209156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:32:10.793 [DEBUG] [Thread-209156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:32:10.794 [INFO] [Thread-209156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:10.796 [DEBUG] [Thread-209156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] client lang: <none>
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] server lang: <none>
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] kex follows: False
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] Compression: none
2026-02-15T18:32:10.797 [DEBUG] [Thread-209156] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:32:10.813 [DEBUG] [Thread-209156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:32:10.814 [DEBUG] [Thread-209156] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:32:10.814 [DEBUG] [Thread-209156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:32:10.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:32:10.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:32:10.816 [DEBUG] [Thread-209156] [transport.py] [_log()] userauth is OK
2026-02-15T18:32:10.816 [DEBUG] [Thread-209156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:32:10.816 [DEBUG] [Thread-209156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:32:10.816 [DEBUG] [Thread-209156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:32:10.817 [DEBUG] [Thread-209156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:32:10.832 [INFO] [Thread-209156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:32:10.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:32:11.418 [DEBUG] [Thread-209158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:11.461 [DEBUG] [Thread-209156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:32:11.461 [DEBUG] [Thread-209156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:32:11.461 [DEBUG] [Thread-209156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:32:11.503 [DEBUG] [Thread-209156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:32:11.503 [DEBUG] [Thread-209156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:32:11.506 [DEBUG] [Thread-209156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:32:11.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:32:11.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:32:11.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:32:11.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:32:11.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:32:11.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:32:11.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:32:11.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:32:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:32:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.688636 -999.00  +19.50  18.29     35   +3.70 1 1 1 1 1   887    0 14.87 -61.38 ----- 24.0 18.3 164.2 30.7 22.4 -28.4 22.4 -27.2 23.5 -26.1 23.9 -28.4
2026-02-15T18:32:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:32:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:32:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.688636
2026-02-15T18:32:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:32:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:32:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:32:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:32:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:32:11.531 [DEBUG] [Thread-209156] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:32:11.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:31:49', tmtdew=18.63, humidity=28.77, cloud=0.0, wind=22.44, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:31:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:32:11.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:32:11.627 [DEBUG] [Thread-209160] [transport.py] [_log()] starting thread (client mode): 0xa2d56950
2026-02-15T18:32:11.628 [DEBUG] [Thread-209160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:32:11.642 [DEBUG] [Thread-209160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:32:11.642 [INFO] [Thread-209160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:32:11.649 [DEBUG] [Thread-209160] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] client lang: <none>
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] server lang: <none>
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] kex follows: False
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:32:11.650 [DEBUG] [Thread-209160] [transport.py] [_log()] Compression: none
2026-02-15T18:32:11.651 [DEBUG] [Thread-209160] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:32:11.708 [DEBUG] [Thread-209160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:32:11.709 [DEBUG] [Thread-209160] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:32:11.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:32:11.710 [DEBUG] [Thread-209160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:32:11.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:32:11.765 [DEBUG] [Thread-209160] [transport.py] [_log()] userauth is OK
2026-02-15T18:32:11.765 [DEBUG] [Thread-209160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:32:11.766 [DEBUG] [Thread-209160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:32:11.766 [DEBUG] [Thread-209160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:32:11.766 [DEBUG] [Thread-209160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:32:11.784 [INFO] [Thread-209160] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:32:11.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:32:11.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:32:12.614 [DEBUG] [Thread-209160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:32:12.614 [DEBUG] [Thread-209160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:32:12.662 [DEBUG] [Thread-209160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:32:12.662 [DEBUG] [Thread-209160] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:32:12.672 [DEBUG] [Thread-209160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:32:12.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:32:12.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:32:12.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:32:12.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:32:12.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:32:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:32:12.708 [DEBUG] [Thread-209160] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:32:16.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:16.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:26.455 [DEBUG] [Thread-209162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:41.513 [DEBUG] [Thread-209163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:32:42.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:32:42.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:32:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:32:44.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 32, 24), 18.65, 28.74, 0.0, 25.09, 19.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:32:44.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:32:24
2026-02-15T18:32:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:32:45.129 [DEBUG] [Thread-209164] [transport.py] [_log()] starting thread (client mode): 0xa57d4a60
2026-02-15T18:32:45.129 [DEBUG] [Thread-209164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:32:45.148 [DEBUG] [Thread-209164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:32:45.148 [INFO] [Thread-209164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] client lang: <none>
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] server lang: <none>
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] kex follows: False
2026-02-15T18:32:45.151 [DEBUG] [Thread-209164] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:32:45.152 [DEBUG] [Thread-209164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:32:45.152 [DEBUG] [Thread-209164] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:32:45.152 [DEBUG] [Thread-209164] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:32:45.152 [DEBUG] [Thread-209164] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:32:45.152 [DEBUG] [Thread-209164] [transport.py] [_log()] Compression: none
2026-02-15T18:32:45.152 [DEBUG] [Thread-209164] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:32:45.160 [DEBUG] [Thread-209164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:32:45.160 [DEBUG] [Thread-209164] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:32:45.160 [DEBUG] [Thread-209164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:32:45.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:32:45.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:32:45.162 [DEBUG] [Thread-209164] [transport.py] [_log()] userauth is OK
2026-02-15T18:32:45.162 [DEBUG] [Thread-209164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:32:45.162 [DEBUG] [Thread-209164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:32:45.162 [DEBUG] [Thread-209164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:32:45.162 [DEBUG] [Thread-209164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:32:45.179 [INFO] [Thread-209164] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:32:45.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:32:45.823 [DEBUG] [Thread-209164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:32:45.823 [DEBUG] [Thread-209164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:32:45.823 [DEBUG] [Thread-209164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:32:45.864 [DEBUG] [Thread-209164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:32:45.865 [DEBUG] [Thread-209164] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:32:45.868 [DEBUG] [Thread-209164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:32:45.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:32:45.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:32:45.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:32:45.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:32:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:32:45.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:32:45.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:32:45.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:32:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:32:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.688983 -999.00  +19.60  20.48     35   +3.70 1 1 1 1 1   887    0 14.73 -65.15 ----- 20.5 20.5 158.2 28.7 22.3 -28.4 22.4 -26.9 23.4 -26.6 23.8 -28.6
2026-02-15T18:32:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:32:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:32:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.688983
2026-02-15T18:32:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:32:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:32:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:32:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:32:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:32:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:32:24', tmtdew=18.65, humidity=28.74, cloud=0.0, wind=25.09, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:32:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:32:45.892 [DEBUG] [Thread-209164] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:32:45.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:32:45.989 [DEBUG] [Thread-209167] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-15T18:32:45.989 [DEBUG] [Thread-209167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:32:46.004 [DEBUG] [Thread-209167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:32:46.004 [INFO] [Thread-209167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:32:46.012 [DEBUG] [Thread-209167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:32:46.012 [DEBUG] [Thread-209167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] client lang: <none>
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] server lang: <none>
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] kex follows: False
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] Compression: none
2026-02-15T18:32:46.013 [DEBUG] [Thread-209167] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:32:46.068 [DEBUG] [Thread-209167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:32:46.069 [DEBUG] [Thread-209167] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:32:46.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:32:46.070 [DEBUG] [Thread-209167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:32:46.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:32:46.125 [DEBUG] [Thread-209167] [transport.py] [_log()] userauth is OK
2026-02-15T18:32:46.125 [DEBUG] [Thread-209167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:32:46.125 [DEBUG] [Thread-209167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:32:46.125 [DEBUG] [Thread-209167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:32:46.125 [DEBUG] [Thread-209167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:32:46.146 [INFO] [Thread-209167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:32:46.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:32:46.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:32:46.987 [DEBUG] [Thread-209167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:32:46.988 [DEBUG] [Thread-209167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:32:47.035 [DEBUG] [Thread-209167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:32:47.036 [DEBUG] [Thread-209167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:32:47.045 [DEBUG] [Thread-209167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:32:47.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:32:47.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:32:47.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:32:47.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:32:47.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:32:47.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:32:47.080 [DEBUG] [Thread-209167] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:32:56.551 [DEBUG] [Thread-209169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:02.393 [DEBUG] [Thread-209170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:11.603 [DEBUG] [Thread-209171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:16.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:16.921 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:17.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:33:17.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:33:17.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:33:18.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 33), 18.67, 28.71, 0.0, 24.15, 19.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:33:18.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:33:00
2026-02-15T18:33:19.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:33:19.508 [DEBUG] [Thread-209172] [transport.py] [_log()] starting thread (client mode): 0xa2d798a0
2026-02-15T18:33:19.508 [DEBUG] [Thread-209172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:33:19.528 [DEBUG] [Thread-209172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:33:19.528 [INFO] [Thread-209172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:19.531 [DEBUG] [Thread-209172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] client lang: <none>
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] server lang: <none>
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] kex follows: False
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] Compression: none
2026-02-15T18:33:19.532 [DEBUG] [Thread-209172] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:33:19.550 [DEBUG] [Thread-209172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:33:19.551 [DEBUG] [Thread-209172] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:33:19.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:33:19.552 [DEBUG] [Thread-209172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:33:19.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:33:19.554 [DEBUG] [Thread-209172] [transport.py] [_log()] userauth is OK
2026-02-15T18:33:19.554 [DEBUG] [Thread-209172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:33:19.554 [DEBUG] [Thread-209172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:33:19.554 [DEBUG] [Thread-209172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:33:19.555 [DEBUG] [Thread-209172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:33:19.593 [INFO] [Thread-209172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:33:19.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:33:20.215 [DEBUG] [Thread-209172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:33:20.215 [DEBUG] [Thread-209172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:33:20.215 [DEBUG] [Thread-209172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:33:20.256 [DEBUG] [Thread-209172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:33:20.257 [DEBUG] [Thread-209172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:33:20.260 [DEBUG] [Thread-209172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:33:20.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:33:20.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:33:20.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:33:20.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:33:20.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:33:20.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:33:20.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:33:20.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:33:20.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:33:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.689330 -999.00  +19.60  16.36     34   +3.70 1 1 1 1 1   887    0 14.36 -74.13 ----- 17.0 16.4 142.8 30.7 22.2 -28.3 22.4 -27.3 23.4 -26.2 23.8 -28.5
2026-02-15T18:33:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:33:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:33:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.689330
2026-02-15T18:33:20.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:33:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:33:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:33:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:33:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:33:20.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:33:00', tmtdew=18.67, humidity=28.71, cloud=0.0, wind=24.15, temperature=19.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:32:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:33:20.287 [DEBUG] [Thread-209172] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:33:20.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:33:20.382 [DEBUG] [Thread-209175] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-15T18:33:20.382 [DEBUG] [Thread-209175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:33:20.397 [DEBUG] [Thread-209175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:33:20.397 [INFO] [Thread-209175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:33:20.405 [DEBUG] [Thread-209175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:33:20.405 [DEBUG] [Thread-209175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:33:20.405 [DEBUG] [Thread-209175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] client lang: <none>
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] server lang: <none>
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] kex follows: False
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] Compression: none
2026-02-15T18:33:20.406 [DEBUG] [Thread-209175] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:33:20.464 [DEBUG] [Thread-209175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:33:20.465 [DEBUG] [Thread-209175] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:33:20.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:33:20.466 [DEBUG] [Thread-209175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:33:20.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:33:20.520 [DEBUG] [Thread-209175] [transport.py] [_log()] userauth is OK
2026-02-15T18:33:20.521 [DEBUG] [Thread-209175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:33:20.521 [DEBUG] [Thread-209175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:33:20.521 [DEBUG] [Thread-209175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:33:20.521 [DEBUG] [Thread-209175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:33:20.545 [INFO] [Thread-209175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:33:20.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:33:20.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:33:21.370 [DEBUG] [Thread-209175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:33:21.370 [DEBUG] [Thread-209175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:33:21.418 [DEBUG] [Thread-209175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:33:21.419 [DEBUG] [Thread-209175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:33:21.428 [DEBUG] [Thread-209175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:33:21.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:33:21.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:33:21.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:33:21.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:33:21.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:33:21.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:33:21.464 [DEBUG] [Thread-209175] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:33:26.641 [DEBUG] [Thread-209177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:41.692 [DEBUG] [Thread-209178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:33:51.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:33:51.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:33:51.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:33:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 33, 37), 19.36, 27.48, 0.0, 27.45, 20.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:33:53.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:33:37
2026-02-15T18:33:53.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:33:53.852 [DEBUG] [Thread-209179] [transport.py] [_log()] starting thread (client mode): 0xa57d77f0
2026-02-15T18:33:53.853 [DEBUG] [Thread-209179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:33:53.872 [DEBUG] [Thread-209179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:33:53.872 [INFO] [Thread-209179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] client lang: <none>
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] server lang: <none>
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] kex follows: False
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:33:53.873 [DEBUG] [Thread-209179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:33:53.874 [DEBUG] [Thread-209179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:33:53.874 [DEBUG] [Thread-209179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:33:53.874 [DEBUG] [Thread-209179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:33:53.874 [DEBUG] [Thread-209179] [transport.py] [_log()] Compression: none
2026-02-15T18:33:53.874 [DEBUG] [Thread-209179] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:33:53.882 [DEBUG] [Thread-209179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:33:53.882 [DEBUG] [Thread-209179] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:33:53.882 [DEBUG] [Thread-209179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:33:53.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:33:53.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:33:53.884 [DEBUG] [Thread-209179] [transport.py] [_log()] userauth is OK
2026-02-15T18:33:53.884 [DEBUG] [Thread-209179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:33:53.884 [DEBUG] [Thread-209179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:33:53.884 [DEBUG] [Thread-209179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:33:53.884 [DEBUG] [Thread-209179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:33:53.900 [INFO] [Thread-209179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:33:53.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:33:54.512 [DEBUG] [Thread-209179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:33:54.513 [DEBUG] [Thread-209179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:33:54.513 [DEBUG] [Thread-209179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:33:54.553 [DEBUG] [Thread-209179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:33:54.554 [DEBUG] [Thread-209179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:33:54.557 [DEBUG] [Thread-209179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:33:54.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:33:54.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:33:54.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:33:54.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:33:54.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:33:54.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:33:54.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:33:54.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:33:54.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:33:54.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.689678 -999.00  +19.60  21.25     34   +3.70 1 1 1 1 1   887    0 14.72 -76.65 ----- 23.7 21.2 146.4 26.8 22.2 -28.2 22.4 -27.5 23.4 -27.1 23.7 -28.7
2026-02-15T18:33:54.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:33:54.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:33:54.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.689678
2026-02-15T18:33:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:33:54.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:33:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:33:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:33:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:33:54.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:33:37', tmtdew=19.36, humidity=27.48, cloud=0.0, wind=27.45, temperature=20.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:33:08.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:33:54.585 [DEBUG] [Thread-209179] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:33:54.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:33:54.681 [DEBUG] [Thread-209182] [transport.py] [_log()] starting thread (client mode): 0xa57412d0
2026-02-15T18:33:54.681 [DEBUG] [Thread-209182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:33:54.698 [DEBUG] [Thread-209182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:33:54.698 [INFO] [Thread-209182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:33:54.705 [DEBUG] [Thread-209182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:33:54.706 [DEBUG] [Thread-209182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] client lang: <none>
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] server lang: <none>
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] kex follows: False
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] Compression: none
2026-02-15T18:33:54.707 [DEBUG] [Thread-209182] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:33:54.764 [DEBUG] [Thread-209182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:33:54.765 [DEBUG] [Thread-209182] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:33:54.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:33:54.766 [DEBUG] [Thread-209182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:33:54.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:33:54.826 [DEBUG] [Thread-209182] [transport.py] [_log()] userauth is OK
2026-02-15T18:33:54.826 [DEBUG] [Thread-209182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:33:54.827 [DEBUG] [Thread-209182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:33:54.827 [DEBUG] [Thread-209182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:33:54.827 [DEBUG] [Thread-209182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:33:54.845 [INFO] [Thread-209182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:33:54.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:33:54.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:33:55.690 [DEBUG] [Thread-209182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:33:55.691 [DEBUG] [Thread-209182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:33:55.738 [DEBUG] [Thread-209182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:33:55.738 [DEBUG] [Thread-209182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:33:55.746 [DEBUG] [Thread-209182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:33:55.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:33:55.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:33: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') -> 00000000
2026-02-15T18:33:55.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:33:55.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:33:55.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:33:55.781 [DEBUG] [Thread-209182] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:33:56.726 [DEBUG] [Thread-209184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:02.427 [DEBUG] [Thread-209185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:11.778 [DEBUG] [Thread-209186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:17.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:17.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:34:25.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:34:25.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:34:26.815 [DEBUG] [Thread-209187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 34, 13), 18.83, 28.26, 0.0, 28.78, 19.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:34:28.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:34:13
2026-02-15T18:34:28.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:34:28.936 [DEBUG] [Thread-209188] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T18:34:28.937 [DEBUG] [Thread-209188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:34:28.950 [DEBUG] [Thread-209188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:34:28.950 [INFO] [Thread-209188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] client lang: <none>
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] server lang: <none>
2026-02-15T18:34:28.955 [DEBUG] [Thread-209188] [transport.py] [_log()] kex follows: False
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] Compression: none
2026-02-15T18:34:28.956 [DEBUG] [Thread-209188] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:34:28.968 [DEBUG] [Thread-209188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:34:28.969 [DEBUG] [Thread-209188] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:34:28.969 [DEBUG] [Thread-209188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:34:28.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:34:28.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:34:28.971 [DEBUG] [Thread-209188] [transport.py] [_log()] userauth is OK
2026-02-15T18:34:28.971 [DEBUG] [Thread-209188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:34:28.971 [DEBUG] [Thread-209188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:34:28.971 [DEBUG] [Thread-209188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:34:28.971 [DEBUG] [Thread-209188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:34:28.990 [INFO] [Thread-209188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:34:28.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:34:29.714 [DEBUG] [Thread-209188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:34:29.715 [DEBUG] [Thread-209188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:34:29.715 [DEBUG] [Thread-209188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:34:29.756 [DEBUG] [Thread-209188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:34:29.756 [DEBUG] [Thread-209188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:34:29.759 [DEBUG] [Thread-209188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:34:29.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:34:29.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:34:29.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:34:29.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:34:29.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:34:29.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:34:29.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:34:29.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:34:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:34:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.690372 -999.00  +19.50  16.26     35   +3.60 1 1 1 1 1   887    0 14.57 -64.82 ----- 20.6 16.3 159.6 28.5 22.1 -28.3 22.2 -27.2 23.3 -26.5 23.6 -28.1
2026-02-15T18:34:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:34:29.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:34:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.690372
2026-02-15T18:34:29.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:34:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:34:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:34:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:34:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:34:29.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:34:13', tmtdew=18.83, humidity=28.26, cloud=0.0, wind=28.78, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:34:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:34:29.789 [DEBUG] [Thread-209188] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:34:29.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:34:29.885 [DEBUG] [Thread-209191] [transport.py] [_log()] starting thread (client mode): 0xa57d5840
2026-02-15T18:34:29.885 [DEBUG] [Thread-209191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:34:29.900 [DEBUG] [Thread-209191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:34:29.900 [INFO] [Thread-209191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:34:29.908 [DEBUG] [Thread-209191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] client lang: <none>
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] server lang: <none>
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] kex follows: False
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] Compression: none
2026-02-15T18:34:29.909 [DEBUG] [Thread-209191] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:34:29.968 [DEBUG] [Thread-209191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:34:29.968 [DEBUG] [Thread-209191] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:34:29.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:34:29.970 [DEBUG] [Thread-209191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:34:29.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:34:30.024 [DEBUG] [Thread-209191] [transport.py] [_log()] userauth is OK
2026-02-15T18:34:30.024 [DEBUG] [Thread-209191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:34:30.024 [DEBUG] [Thread-209191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:34:30.025 [DEBUG] [Thread-209191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:34:30.025 [DEBUG] [Thread-209191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:34:30.050 [INFO] [Thread-209191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:34:30.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:34:30.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:34:30.897 [DEBUG] [Thread-209191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:34:30.898 [DEBUG] [Thread-209191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:34:30.945 [DEBUG] [Thread-209191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:34:30.945 [DEBUG] [Thread-209191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:34:30.955 [DEBUG] [Thread-209191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:34:30.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:34:30.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:34:30.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:34:30.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:34:30.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:34:30.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:34:30.990 [DEBUG] [Thread-209191] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:34:41.851 [DEBUG] [Thread-209193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:34:56.905 [DEBUG] [Thread-209194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:01.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:35:01.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:35: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
2026-02-15T18:35:02.472 [DEBUG] [Thread-209195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:02.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 34, 48), 18.65, 28.81, 0.0, 24.03, 19.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:35:02.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:34:48
2026-02-15T18:35:03.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:35:03.330 [DEBUG] [Thread-209196] [transport.py] [_log()] starting thread (client mode): 0xa2dc38e0
2026-02-15T18:35:03.330 [DEBUG] [Thread-209196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:35:03.349 [DEBUG] [Thread-209196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:35:03.349 [INFO] [Thread-209196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:35:03.352 [DEBUG] [Thread-209196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] client lang: <none>
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] server lang: <none>
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] kex follows: False
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] Compression: none
2026-02-15T18:35:03.353 [DEBUG] [Thread-209196] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:35:03.361 [DEBUG] [Thread-209196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:35:03.361 [DEBUG] [Thread-209196] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:35:03.362 [DEBUG] [Thread-209196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:35:03.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:35:03.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:35:03.363 [DEBUG] [Thread-209196] [transport.py] [_log()] userauth is OK
2026-02-15T18:35:03.363 [DEBUG] [Thread-209196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:35:03.363 [DEBUG] [Thread-209196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:35:03.364 [DEBUG] [Thread-209196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:35:03.364 [DEBUG] [Thread-209196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:35:03.381 [INFO] [Thread-209196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:35:03.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:35:09.443 [DEBUG] [Thread-209196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:35:09.444 [DEBUG] [Thread-209196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:35:09.444 [DEBUG] [Thread-209196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:35:09.485 [DEBUG] [Thread-209196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:35:09.485 [DEBUG] [Thread-209196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:35:09.489 [DEBUG] [Thread-209196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:35:09.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:35:09.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:35:09.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:35:09.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:35:09.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:35:09.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:35:09.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:35:09.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:35:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:35:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.690719 -999.00  +19.50  16.29     35   +3.60 1 1 1 1 1   887    0 14.60 -66.71 ----- 13.7 16.3 146.8 23.4 22.1 -28.0 22.2 -26.9 23.3 -26.2 23.6 -28.1
2026-02-15T18:35:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:35:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:35:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.690719
2026-02-15T18:35:09.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:35:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:35:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:35:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:35:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:35:09.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:34:48', tmtdew=18.65, humidity=28.81, cloud=0.0, wind=24.03, temperature=19.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:34:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:35:09.517 [DEBUG] [Thread-209196] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:35:09.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:35:09.619 [DEBUG] [Thread-209199] [transport.py] [_log()] starting thread (client mode): 0xa57b3dc0
2026-02-15T18:35:09.620 [DEBUG] [Thread-209199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:35:09.634 [DEBUG] [Thread-209199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:35:09.634 [INFO] [Thread-209199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] client lang: <none>
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] server lang: <none>
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] kex follows: False
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:35:09.642 [DEBUG] [Thread-209199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:35:09.643 [DEBUG] [Thread-209199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:35:09.643 [DEBUG] [Thread-209199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:35:09.643 [DEBUG] [Thread-209199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:35:09.643 [DEBUG] [Thread-209199] [transport.py] [_log()] Compression: none
2026-02-15T18:35:09.643 [DEBUG] [Thread-209199] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:35:09.699 [DEBUG] [Thread-209199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:35:09.700 [DEBUG] [Thread-209199] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:35:09.700 [DEBUG] [Thread-209199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:35:09.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:35:09.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:35:09.758 [DEBUG] [Thread-209199] [transport.py] [_log()] userauth is OK
2026-02-15T18:35:09.759 [DEBUG] [Thread-209199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:35:09.759 [DEBUG] [Thread-209199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:35:09.759 [DEBUG] [Thread-209199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:35:09.759 [DEBUG] [Thread-209199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:35:09.778 [INFO] [Thread-209199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:35:09.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:35:09.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:35:10.611 [DEBUG] [Thread-209199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:35:10.612 [DEBUG] [Thread-209199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:35:10.659 [DEBUG] [Thread-209199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:35:10.659 [DEBUG] [Thread-209199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:35:10.669 [DEBUG] [Thread-209199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:35:10.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:35:10.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:35:10.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:35:10.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:35:10.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:35:10.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:35:10.705 [DEBUG] [Thread-209199] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:35:11.942 [DEBUG] [Thread-209201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:17.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:17.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:26.991 [DEBUG] [Thread-209202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:40.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:35:40.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:35:40.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:35:42.027 [DEBUG] [Thread-209203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:35:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 35, 23), 18.68, 28.76, 0.0, 24.91, 19.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:35:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:35:23
2026-02-15T18:35:42.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:35:43.160 [DEBUG] [Thread-209204] [transport.py] [_log()] starting thread (client mode): 0xa57e26b0
2026-02-15T18:35:43.160 [DEBUG] [Thread-209204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:35:43.179 [DEBUG] [Thread-209204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:35:43.179 [INFO] [Thread-209204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:35:43.183 [DEBUG] [Thread-209204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:35:43.183 [DEBUG] [Thread-209204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:35:43.183 [DEBUG] [Thread-209204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:35:43.183 [DEBUG] [Thread-209204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:43.183 [DEBUG] [Thread-209204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:43.183 [DEBUG] [Thread-209204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] client lang: <none>
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] server lang: <none>
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] kex follows: False
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] Compression: none
2026-02-15T18:35:43.184 [DEBUG] [Thread-209204] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:35:43.201 [DEBUG] [Thread-209204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:35:43.201 [DEBUG] [Thread-209204] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:35:43.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:35:43.202 [DEBUG] [Thread-209204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:35:43.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:35:43.205 [DEBUG] [Thread-209204] [transport.py] [_log()] userauth is OK
2026-02-15T18:35:43.205 [DEBUG] [Thread-209204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:35:43.205 [DEBUG] [Thread-209204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:35:43.205 [DEBUG] [Thread-209204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:35:43.205 [DEBUG] [Thread-209204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:35:43.220 [INFO] [Thread-209204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:35:43.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:35:43.896 [DEBUG] [Thread-209204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:35:43.896 [DEBUG] [Thread-209204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:35:43.896 [DEBUG] [Thread-209204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:35:43.937 [DEBUG] [Thread-209204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:35:43.937 [DEBUG] [Thread-209204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:35:43.941 [DEBUG] [Thread-209204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:35:43.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:35:43.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:35:43.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:35:43.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:35:43.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:35:43.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:35:43.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:35:43.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:35:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:35:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.691067 -999.00  +19.60  16.01     34   +3.60 1 1 1 1 1   887    0 14.50 -62.39 ----- 21.7 16.0 175.5 21.1 22.1 -28.4 22.2 -26.9 23.2 -26.3 23.6 -28.2
2026-02-15T18:35:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:35:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:35:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.691067
2026-02-15T18:35:43.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:35:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:35:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:35:43.965 [DEBUG] [Thread-209204] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:35:43.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:35:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:35:43.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:35:23', tmtdew=18.68, humidity=28.76, cloud=0.0, wind=24.91, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:35:08.189', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:35:44.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:35:44.061 [DEBUG] [Thread-209207] [transport.py] [_log()] starting thread (client mode): 0xa57e1ea0
2026-02-15T18:35:44.061 [DEBUG] [Thread-209207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:35:44.076 [DEBUG] [Thread-209207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:35:44.076 [INFO] [Thread-209207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:35:44.084 [DEBUG] [Thread-209207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:35:44.084 [DEBUG] [Thread-209207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:35:44.084 [DEBUG] [Thread-209207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:35:44.084 [DEBUG] [Thread-209207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] client lang: <none>
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] server lang: <none>
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] kex follows: False
2026-02-15T18:35:44.085 [DEBUG] [Thread-209207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:35:44.086 [DEBUG] [Thread-209207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:35:44.086 [DEBUG] [Thread-209207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:35:44.086 [DEBUG] [Thread-209207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:35:44.086 [DEBUG] [Thread-209207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:35:44.086 [DEBUG] [Thread-209207] [transport.py] [_log()] Compression: none
2026-02-15T18:35:44.086 [DEBUG] [Thread-209207] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:35:44.144 [DEBUG] [Thread-209207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:35:44.144 [DEBUG] [Thread-209207] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:35:44.145 [DEBUG] [Thread-209207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:35:44.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:35:44.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:35:44.200 [DEBUG] [Thread-209207] [transport.py] [_log()] userauth is OK
2026-02-15T18:35:44.200 [DEBUG] [Thread-209207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:35:44.200 [DEBUG] [Thread-209207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:35:44.200 [DEBUG] [Thread-209207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:35:44.201 [DEBUG] [Thread-209207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:35:44.225 [INFO] [Thread-209207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:35:44.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:35:44.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:35:45.054 [DEBUG] [Thread-209207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:35:45.054 [DEBUG] [Thread-209207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:35:45.101 [DEBUG] [Thread-209207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:35:45.101 [DEBUG] [Thread-209207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:35:45.110 [DEBUG] [Thread-209207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:35:45.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:35:45.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:35:45.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:35:45.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:35:45.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:35:45.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:35:45.145 [DEBUG] [Thread-209207] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:35:57.062 [DEBUG] [Thread-209209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:02.506 [DEBUG] [Thread-209210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:12.112 [DEBUG] [Thread-209211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:15.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:36:15.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:36:15.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:36:17.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 35, 59), 18.63, 28.84, 0.0, 22.02, 19.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:36:17.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:35:59
2026-02-15T18:36:17.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:17.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:17.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:36:17.550 [DEBUG] [Thread-209212] [transport.py] [_log()] starting thread (client mode): 0xa575bfa0
2026-02-15T18:36:17.550 [DEBUG] [Thread-209212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:36:17.570 [DEBUG] [Thread-209212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:36:17.570 [INFO] [Thread-209212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:17.571 [DEBUG] [Thread-209212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] client lang: <none>
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] server lang: <none>
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] kex follows: False
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] Compression: none
2026-02-15T18:36:17.572 [DEBUG] [Thread-209212] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:36:17.581 [DEBUG] [Thread-209212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:36:17.582 [DEBUG] [Thread-209212] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:36:17.582 [DEBUG] [Thread-209212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:36:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:36:17.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:36:17.584 [DEBUG] [Thread-209212] [transport.py] [_log()] userauth is OK
2026-02-15T18:36:17.584 [DEBUG] [Thread-209212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:36:17.584 [DEBUG] [Thread-209212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:36:17.584 [DEBUG] [Thread-209212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:36:17.584 [DEBUG] [Thread-209212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:36:17.620 [INFO] [Thread-209212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:36:17.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:36:18.271 [DEBUG] [Thread-209212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:36:18.271 [DEBUG] [Thread-209212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:36:18.272 [DEBUG] [Thread-209212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:36:18.312 [DEBUG] [Thread-209212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:36:18.313 [DEBUG] [Thread-209212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:36:18.316 [DEBUG] [Thread-209212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:36:18.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:36:18.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:36:18.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:36:18.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:36:18.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:36:18.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:36:18.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:36:18.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:36:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:36:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.691414 -999.00  +19.60  23.87     34   +3.60 1 1 1 1 1   887    0 14.65 -64.34 ----- 21.1 23.9 165.6 33.3 22.1 -28.2 22.1 -27.0 23.2 -26.9 23.5 -28.3
2026-02-15T18:36:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:36:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:36:18.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.691414
2026-02-15T18:36:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:36:18.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:36:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:36:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:36:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:36:18.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:35:59', tmtdew=18.63, humidity=28.84, cloud=0.0, wind=22.02, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:35:38.170', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:36:18.342 [DEBUG] [Thread-209212] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:36:18.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:36:18.438 [DEBUG] [Thread-209215] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T18:36:18.438 [DEBUG] [Thread-209215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:36:18.460 [DEBUG] [Thread-209215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:36:18.460 [INFO] [Thread-209215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] client lang: <none>
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] server lang: <none>
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] kex follows: False
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:36:18.468 [DEBUG] [Thread-209215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:36:18.469 [DEBUG] [Thread-209215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:36:18.469 [DEBUG] [Thread-209215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:36:18.469 [DEBUG] [Thread-209215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:36:18.469 [DEBUG] [Thread-209215] [transport.py] [_log()] Compression: none
2026-02-15T18:36:18.469 [DEBUG] [Thread-209215] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:36:18.527 [DEBUG] [Thread-209215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:36:18.527 [DEBUG] [Thread-209215] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:36:18.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:36:18.529 [DEBUG] [Thread-209215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:36:18.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:36:18.583 [DEBUG] [Thread-209215] [transport.py] [_log()] userauth is OK
2026-02-15T18:36:18.583 [DEBUG] [Thread-209215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:36:18.584 [DEBUG] [Thread-209215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:36:18.584 [DEBUG] [Thread-209215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:36:18.584 [DEBUG] [Thread-209215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:36:18.603 [INFO] [Thread-209215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:36:18.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:36:18.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:36:19.440 [DEBUG] [Thread-209215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:36:19.440 [DEBUG] [Thread-209215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:36:19.488 [DEBUG] [Thread-209215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:36:19.489 [DEBUG] [Thread-209215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:36:19.498 [DEBUG] [Thread-209215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:36:19.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:36:19.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:36:19.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:36:19.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:36:19.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:36:19.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:36:19.534 [DEBUG] [Thread-209215] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:36:27.144 [DEBUG] [Thread-209217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:42.194 [DEBUG] [Thread-209218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:36:49.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:36:49.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:36:49.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:36:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 36, 34), 19.42, 27.41, 0.0, 34.72, 20.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:36:51.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:36:34
2026-02-15T18:36:51.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:36:52.115 [DEBUG] [Thread-209219] [transport.py] [_log()] starting thread (client mode): 0xa57e3e20
2026-02-15T18:36:52.115 [DEBUG] [Thread-209219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:36:52.137 [DEBUG] [Thread-209219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:36:52.137 [INFO] [Thread-209219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:36:52.140 [DEBUG] [Thread-209219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:36:52.140 [DEBUG] [Thread-209219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:36:52.140 [DEBUG] [Thread-209219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:36:52.140 [DEBUG] [Thread-209219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] client lang: <none>
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] server lang: <none>
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] kex follows: False
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:36:52.141 [DEBUG] [Thread-209219] [transport.py] [_log()] Compression: none
2026-02-15T18:36:52.142 [DEBUG] [Thread-209219] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:36:52.161 [DEBUG] [Thread-209219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:36:52.161 [DEBUG] [Thread-209219] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:36:52.162 [DEBUG] [Thread-209219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:36:52.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:36:52.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:36:52.164 [DEBUG] [Thread-209219] [transport.py] [_log()] userauth is OK
2026-02-15T18:36:52.164 [DEBUG] [Thread-209219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:36:52.165 [DEBUG] [Thread-209219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:36:52.165 [DEBUG] [Thread-209219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:36:52.165 [DEBUG] [Thread-209219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:36:52.200 [INFO] [Thread-209219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:36:52.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:36:52.798 [DEBUG] [Thread-209219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:36:52.807 [DEBUG] [Thread-209219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:36:52.807 [DEBUG] [Thread-209219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:36:52.839 [DEBUG] [Thread-209219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:36:52.839 [DEBUG] [Thread-209219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:36:52.841 [DEBUG] [Thread-209219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:36:52.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:36:52.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:36:52.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:36:52.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:36:52.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:36:52.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:36:52.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:36:52.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:36:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:36:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.691761 -999.00  +19.50  22.67     34   +3.50 1 1 1 1 1   887    0 14.56 -62.52 ----- 19.9 22.7 162.8 30.9 22.1 -28.1 22.1 -26.8 23.2 -26.2 23.5 -28.0
2026-02-15T18:36:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:36:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:36:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.691761
2026-02-15T18:36:52.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:36:52.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:36:52.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:36:52.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:36:52.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:36:52.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:36:34', tmtdew=19.42, humidity=27.41, cloud=0.0, wind=34.72, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:36:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:36:52.861 [DEBUG] [Thread-209219] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:36:52.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:36:52.949 [DEBUG] [Thread-209222] [transport.py] [_log()] starting thread (client mode): 0xa2d6e7a0
2026-02-15T18:36:52.949 [DEBUG] [Thread-209222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:36:52.963 [DEBUG] [Thread-209222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:36:52.963 [INFO] [Thread-209222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] client lang: <none>
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] server lang: <none>
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] kex follows: False
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] Compression: none
2026-02-15T18:36:52.971 [DEBUG] [Thread-209222] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:36:53.029 [DEBUG] [Thread-209222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:36:53.029 [DEBUG] [Thread-209222] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:36:53.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:36:53.029 [DEBUG] [Thread-209222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:36:53.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:36:53.086 [DEBUG] [Thread-209222] [transport.py] [_log()] userauth is OK
2026-02-15T18:36:53.086 [DEBUG] [Thread-209222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:36:53.086 [DEBUG] [Thread-209222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:36:53.086 [DEBUG] [Thread-209222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:36:53.086 [DEBUG] [Thread-209222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:36:53.100 [INFO] [Thread-209222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:36:53.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:36:53.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:36:53.899 [DEBUG] [Thread-209222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:36:53.899 [DEBUG] [Thread-209222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:36:53.947 [DEBUG] [Thread-209222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:36:53.948 [DEBUG] [Thread-209222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:36:53.957 [DEBUG] [Thread-209222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:36:53.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:36:53.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:36:53.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:36:53.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:36:53.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:36:53.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:36:53.993 [DEBUG] [Thread-209222] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:36:57.232 [DEBUG] [Thread-209224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:02.547 [DEBUG] [Thread-209225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:12.284 [DEBUG] [Thread-209226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:17.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:17.488 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:24.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:37:24.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:37:24.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:37:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 37, 10), 18.82, 28.26, 0.0, 31.34, 19.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:37:25.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:37:10
2026-02-15T18:37:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:37:26.296 [DEBUG] [Thread-209227] [transport.py] [_log()] starting thread (client mode): 0xa57b10c0
2026-02-15T18:37:26.296 [DEBUG] [Thread-209227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:37:26.317 [DEBUG] [Thread-209227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:37:26.317 [INFO] [Thread-209227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] client lang: <none>
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] server lang: <none>
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] kex follows: False
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] Compression: none
2026-02-15T18:37:26.319 [DEBUG] [Thread-209227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:37:26.336 [DEBUG] [Thread-209227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:37:26.336 [DEBUG] [Thread-209227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:37:26.337 [DEBUG] [Thread-209227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:37:26.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:37:26.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:37:26.339 [DEBUG] [Thread-209227] [transport.py] [_log()] userauth is OK
2026-02-15T18:37:26.339 [DEBUG] [Thread-209227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:37:26.339 [DEBUG] [Thread-209227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:37:26.339 [DEBUG] [Thread-209227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:37:26.339 [DEBUG] [Thread-209227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:37:26.357 [INFO] [Thread-209227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:37:26.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:37:27.167 [DEBUG] [Thread-209227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:37:27.168 [DEBUG] [Thread-209227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:37:27.168 [DEBUG] [Thread-209227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:37:27.208 [DEBUG] [Thread-209227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:37:27.209 [DEBUG] [Thread-209227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:37:27.212 [DEBUG] [Thread-209227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:37:27.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:37:27.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:37:27.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:37:27.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:37:27.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:37:27.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:37:27.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:37:27.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:37:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:37:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.692108 -999.00  +19.60  14.77     34   +3.50 1 1 1 1 1   887    0 14.75 -61.66 ----- 22.9 14.8 155.5 21.0 22.0 -28.2 22.1 -26.7 23.1 -26.3 23.5 -28.5
2026-02-15T18:37:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:37:27.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:37:27.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.692108
2026-02-15T18:37:27.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:37:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:37:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:37:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:37:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:37:27.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:37:10', tmtdew=18.82, humidity=28.26, cloud=0.0, wind=31.34, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:36:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:37:27.241 [DEBUG] [Thread-209227] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:37:27.322 [DEBUG] [Thread-209230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:27.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:37:27.336 [DEBUG] [Thread-209231] [transport.py] [_log()] starting thread (client mode): 0xa57d6470
2026-02-15T18:37:27.336 [DEBUG] [Thread-209231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:37:27.352 [DEBUG] [Thread-209231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:37:27.352 [INFO] [Thread-209231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:37:27.359 [DEBUG] [Thread-209231] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:37:27.359 [DEBUG] [Thread-209231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] client lang: <none>
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] server lang: <none>
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] kex follows: False
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] Compression: none
2026-02-15T18:37:27.360 [DEBUG] [Thread-209231] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:37:27.419 [DEBUG] [Thread-209231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:37:27.420 [DEBUG] [Thread-209231] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:37:27.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:37:27.421 [DEBUG] [Thread-209231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:37:27.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:37:27.475 [DEBUG] [Thread-209231] [transport.py] [_log()] userauth is OK
2026-02-15T18:37:27.475 [DEBUG] [Thread-209231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:37:27.475 [DEBUG] [Thread-209231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:37:27.476 [DEBUG] [Thread-209231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:37:27.476 [DEBUG] [Thread-209231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:37:27.494 [INFO] [Thread-209231] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:37:27.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:37:27.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:37:28.386 [DEBUG] [Thread-209231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:37:28.386 [DEBUG] [Thread-209231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:37:28.435 [DEBUG] [Thread-209231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:37:28.435 [DEBUG] [Thread-209231] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:37:28.444 [DEBUG] [Thread-209231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:37:28.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:37:28.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:37:28.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:37:28.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:37:28.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:37:28.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:37:28.482 [DEBUG] [Thread-209231] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:37:42.362 [DEBUG] [Thread-209233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:57.399 [DEBUG] [Thread-209234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:37:58.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:37:58.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:37:58.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:38:00.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 37, 45), 18.84, 28.21, 0.0, 29.33, 19.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:38:00.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:37:45
2026-02-15T18:38:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:38:00.796 [DEBUG] [Thread-209235] [transport.py] [_log()] starting thread (client mode): 0xa2d6cee0
2026-02-15T18:38:00.796 [DEBUG] [Thread-209235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:38:00.817 [DEBUG] [Thread-209235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:38:00.817 [INFO] [Thread-209235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] client lang: <none>
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] server lang: <none>
2026-02-15T18:38:00.820 [DEBUG] [Thread-209235] [transport.py] [_log()] kex follows: False
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] Compression: none
2026-02-15T18:38:00.821 [DEBUG] [Thread-209235] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:38:00.837 [DEBUG] [Thread-209235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:38:00.837 [DEBUG] [Thread-209235] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:38:00.837 [DEBUG] [Thread-209235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:38:00.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:38:00.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:38:00.839 [DEBUG] [Thread-209235] [transport.py] [_log()] userauth is OK
2026-02-15T18:38:00.840 [DEBUG] [Thread-209235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:38:00.840 [DEBUG] [Thread-209235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:38:00.840 [DEBUG] [Thread-209235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:38:00.840 [DEBUG] [Thread-209235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:38:00.863 [INFO] [Thread-209235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:38:00.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:38:01.497 [DEBUG] [Thread-209235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:38:01.497 [DEBUG] [Thread-209235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:38:01.497 [DEBUG] [Thread-209235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:38:01.538 [DEBUG] [Thread-209235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:38:01.538 [DEBUG] [Thread-209235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:38:01.541 [DEBUG] [Thread-209235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:38:01.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:38:01.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:38:01.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:38:01.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:38:01.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:38:01.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:38:01.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:38:01.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:38:01.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:38:01.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.692455 -999.00  +19.60  17.01     34   +3.50 1 1 1 1 1   887    0 14.74 -57.90 ----- 18.9 17.0 165.6 29.6 22.0 -28.1 22.0 -27.6 23.1 -26.3 23.4 -28.1
2026-02-15T18:38:01.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:38:01.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:38:01.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.692455
2026-02-15T18:38:01.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:38:01.571 [DEBUG] [Thread-209235] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:38:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:38:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:38:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:38:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:38:01.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:37:45', tmtdew=18.84, humidity=28.21, cloud=0.0, wind=29.33, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:37:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:38:01.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:38:01.684 [DEBUG] [Thread-209238] [transport.py] [_log()] starting thread (client mode): 0xa57e0df0
2026-02-15T18:38:01.684 [DEBUG] [Thread-209238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:38:01.699 [DEBUG] [Thread-209238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:38:01.699 [INFO] [Thread-209238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:38:01.706 [DEBUG] [Thread-209238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:38:01.706 [DEBUG] [Thread-209238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:38:01.706 [DEBUG] [Thread-209238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] client lang: <none>
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] server lang: <none>
2026-02-15T18:38:01.707 [DEBUG] [Thread-209238] [transport.py] [_log()] kex follows: False
2026-02-15T18:38:01.708 [DEBUG] [Thread-209238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:38:01.708 [DEBUG] [Thread-209238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:38:01.708 [DEBUG] [Thread-209238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:38:01.708 [DEBUG] [Thread-209238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:38:01.708 [DEBUG] [Thread-209238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:38:01.708 [DEBUG] [Thread-209238] [transport.py] [_log()] Compression: none
2026-02-15T18:38:01.709 [DEBUG] [Thread-209238] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:38:01.766 [DEBUG] [Thread-209238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:38:01.766 [DEBUG] [Thread-209238] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:38:01.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:38:01.767 [DEBUG] [Thread-209238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:38:01.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:38:01.822 [DEBUG] [Thread-209238] [transport.py] [_log()] userauth is OK
2026-02-15T18:38:01.822 [DEBUG] [Thread-209238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:38:01.822 [DEBUG] [Thread-209238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:38:01.822 [DEBUG] [Thread-209238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:38:01.823 [DEBUG] [Thread-209238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:38:01.841 [INFO] [Thread-209238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:38:01.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:38:01.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:38:02.575 [DEBUG] [Thread-209240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:38:02.714 [DEBUG] [Thread-209238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:38:02.714 [DEBUG] [Thread-209238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:38:02.763 [DEBUG] [Thread-209238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:38:02.763 [DEBUG] [Thread-209238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:38:02.771 [DEBUG] [Thread-209238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:38:02.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:38:02.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:38:02.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:38:02.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:38:02.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:38:02.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:38:02.804 [DEBUG] [Thread-209238] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:38:12.436 [DEBUG] [Thread-209241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:38:17.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:38:17.630 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:38:27.489 [DEBUG] [Thread-209242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:38:32.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:38:32.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:38:32.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:38:34.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 38, 20), 18.83, 28.26, 0.0, 31.94, 19.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:38:34.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:38:20
2026-02-15T18:38:35.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:38:35.329 [DEBUG] [Thread-209243] [transport.py] [_log()] starting thread (client mode): 0xa2dc12a0
2026-02-15T18:38:35.329 [DEBUG] [Thread-209243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:38:35.349 [DEBUG] [Thread-209243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:38:35.349 [INFO] [Thread-209243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] client lang: <none>
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] server lang: <none>
2026-02-15T18:38:35.352 [DEBUG] [Thread-209243] [transport.py] [_log()] kex follows: False
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] Compression: none
2026-02-15T18:38:35.353 [DEBUG] [Thread-209243] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:38:35.375 [DEBUG] [Thread-209243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:38:35.376 [DEBUG] [Thread-209243] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:38:35.376 [DEBUG] [Thread-209243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:38:35.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:38:35.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:38:35.378 [DEBUG] [Thread-209243] [transport.py] [_log()] userauth is OK
2026-02-15T18:38:35.379 [DEBUG] [Thread-209243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:38:35.379 [DEBUG] [Thread-209243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:38:35.379 [DEBUG] [Thread-209243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:38:35.379 [DEBUG] [Thread-209243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:38:35.403 [INFO] [Thread-209243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:38:35.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:38:36.027 [DEBUG] [Thread-209243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:38:36.027 [DEBUG] [Thread-209243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:38:36.028 [DEBUG] [Thread-209243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:38:36.068 [DEBUG] [Thread-209243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:38:36.069 [DEBUG] [Thread-209243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:38:36.072 [DEBUG] [Thread-209243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:38:36.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:38:36.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:38:36.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:38:36.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:38:36.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:38:36.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:38:36.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:38:36.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:38:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:38:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.692803 -999.00  +19.50  21.61     34   +3.40 1 1 1 1 1   887    0 14.58 -59.30 ----- 23.4 21.6 139.5 27.2 21.9 -28.5 22.0 -27.0 23.0 -26.2 23.4 -28.7
2026-02-15T18:38:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:38:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:38:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.692803
2026-02-15T18:38:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:38:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:38:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:38:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:38:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:38:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:38:20', tmtdew=18.83, humidity=28.26, cloud=0.0, wind=31.94, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:37:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:38:36.098 [DEBUG] [Thread-209243] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:38:36.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:38:36.191 [DEBUG] [Thread-209246] [transport.py] [_log()] starting thread (client mode): 0xa2d6cc10
2026-02-15T18:38:36.191 [DEBUG] [Thread-209246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:38:36.211 [DEBUG] [Thread-209246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:38:36.212 [INFO] [Thread-209246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:38:36.220 [DEBUG] [Thread-209246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:38:36.220 [DEBUG] [Thread-209246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:38:36.220 [DEBUG] [Thread-209246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:38:36.220 [DEBUG] [Thread-209246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:36.220 [DEBUG] [Thread-209246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] client lang: <none>
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] server lang: <none>
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] kex follows: False
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:38:36.221 [DEBUG] [Thread-209246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:38:36.222 [DEBUG] [Thread-209246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:38:36.222 [DEBUG] [Thread-209246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:38:36.222 [DEBUG] [Thread-209246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:38:36.222 [DEBUG] [Thread-209246] [transport.py] [_log()] Compression: none
2026-02-15T18:38:36.222 [DEBUG] [Thread-209246] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:38:36.278 [DEBUG] [Thread-209246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:38:36.279 [DEBUG] [Thread-209246] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:38:36.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:38:36.280 [DEBUG] [Thread-209246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:38:36.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:38:36.335 [DEBUG] [Thread-209246] [transport.py] [_log()] userauth is OK
2026-02-15T18:38:36.336 [DEBUG] [Thread-209246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:38:36.336 [DEBUG] [Thread-209246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:38:36.336 [DEBUG] [Thread-209246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:38:36.336 [DEBUG] [Thread-209246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:38:36.356 [INFO] [Thread-209246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:38:36.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:38:36.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:38:37.201 [DEBUG] [Thread-209246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:38:37.202 [DEBUG] [Thread-209246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:38:37.249 [DEBUG] [Thread-209246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:38:37.250 [DEBUG] [Thread-209246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:38:37.259 [DEBUG] [Thread-209246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:38:37.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:38:37.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:38:37.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:38:37.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:38:37.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:38:37.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:38:37.295 [DEBUG] [Thread-209246] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:38:42.528 [DEBUG] [Thread-209248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:38:57.589 [DEBUG] [Thread-209249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:02.603 [DEBUG] [Thread-209250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:39:07.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:39:07.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 38, 56), 18.76, 28.27, 0.0, 31.57, 19.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:39:09.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:38:56
2026-02-15T18:39:09.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:39:09.746 [DEBUG] [Thread-209251] [transport.py] [_log()] starting thread (client mode): 0xa2d6e260
2026-02-15T18:39:09.746 [DEBUG] [Thread-209251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:39:09.767 [DEBUG] [Thread-209251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:39:09.767 [INFO] [Thread-209251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:39:09.770 [DEBUG] [Thread-209251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:39:09.770 [DEBUG] [Thread-209251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:39:09.770 [DEBUG] [Thread-209251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:39:09.771 [DEBUG] [Thread-209251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:09.771 [DEBUG] [Thread-209251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:09.771 [DEBUG] [Thread-209251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:09.771 [DEBUG] [Thread-209251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:09.771 [DEBUG] [Thread-209251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] client lang: <none>
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] server lang: <none>
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] kex follows: False
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:39:09.780 [DEBUG] [Thread-209251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:39:09.781 [DEBUG] [Thread-209251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:39:09.781 [DEBUG] [Thread-209251] [transport.py] [_log()] Compression: none
2026-02-15T18:39:09.781 [DEBUG] [Thread-209251] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:39:09.799 [DEBUG] [Thread-209251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:39:09.799 [DEBUG] [Thread-209251] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:39:09.800 [DEBUG] [Thread-209251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:39:09.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:39:09.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:39:09.802 [DEBUG] [Thread-209251] [transport.py] [_log()] userauth is OK
2026-02-15T18:39:09.802 [DEBUG] [Thread-209251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:39:09.802 [DEBUG] [Thread-209251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:39:09.802 [DEBUG] [Thread-209251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:39:09.802 [DEBUG] [Thread-209251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:39:09.820 [INFO] [Thread-209251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:39:09.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:39:10.456 [DEBUG] [Thread-209251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:39:10.457 [DEBUG] [Thread-209251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:39:10.457 [DEBUG] [Thread-209251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:39:10.497 [DEBUG] [Thread-209251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:39:10.498 [DEBUG] [Thread-209251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:39:10.501 [DEBUG] [Thread-209251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:39:10.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:39:10.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:39:10.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:39:10.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:39:10.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:39:10.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:39:10.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:39:10.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:39:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:39:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.693150 -999.00  +19.50  23.25     34   +3.40 1 1 1 1 1   887    0 14.63 -54.99 ----- 23.1 23.2 161.8 29.2 21.9 -27.9 22.0 -26.8 23.0 -26.5 23.3 -28.3
2026-02-15T18:39:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:39:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:39:10.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.693150
2026-02-15T18:39:10.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:39:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:39:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:39:10.531 [DEBUG] [Thread-209251] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:39:10.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:39:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:39:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:38:56', tmtdew=18.76, humidity=28.27, cloud=0.0, wind=31.57, temperature=19.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:38:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:39:10.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:39:10.631 [DEBUG] [Thread-209254] [transport.py] [_log()] starting thread (client mode): 0xa57583a0
2026-02-15T18:39:10.632 [DEBUG] [Thread-209254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:39:10.647 [DEBUG] [Thread-209254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:39:10.647 [INFO] [Thread-209254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:39:10.654 [DEBUG] [Thread-209254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] client lang: <none>
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] server lang: <none>
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] kex follows: False
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:39:10.655 [DEBUG] [Thread-209254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:39:10.656 [DEBUG] [Thread-209254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:39:10.656 [DEBUG] [Thread-209254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:39:10.656 [DEBUG] [Thread-209254] [transport.py] [_log()] Compression: none
2026-02-15T18:39:10.656 [DEBUG] [Thread-209254] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:39:10.715 [DEBUG] [Thread-209254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:39:10.715 [DEBUG] [Thread-209254] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:39:10.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:39:10.717 [DEBUG] [Thread-209254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:39:10.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:39:10.770 [DEBUG] [Thread-209254] [transport.py] [_log()] userauth is OK
2026-02-15T18:39:10.771 [DEBUG] [Thread-209254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:39:10.771 [DEBUG] [Thread-209254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:39:10.771 [DEBUG] [Thread-209254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:39:10.771 [DEBUG] [Thread-209254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:39:10.791 [INFO] [Thread-209254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:39:10.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:39:10.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:39:11.647 [DEBUG] [Thread-209254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:39:11.647 [DEBUG] [Thread-209254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:39:11.696 [DEBUG] [Thread-209254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:39:11.696 [DEBUG] [Thread-209254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:39:11.706 [DEBUG] [Thread-209254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:39:11.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:39:11.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:39:11.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:39:11.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:39:11.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:39:11.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:39:11.742 [DEBUG] [Thread-209254] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:39:12.624 [DEBUG] [Thread-209256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:17.771 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:17.773 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:27.688 [DEBUG] [Thread-209257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:41.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:39:41.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:39:41.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:39:42.725 [DEBUG] [Thread-209258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:39:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 39, 32), 18.69, 28.39, 0.0, 31.79, 19.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:39:43.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:39:32
2026-02-15T18:39:44.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:39:44.438 [DEBUG] [Thread-209259] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T18:39:44.438 [DEBUG] [Thread-209259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:39:44.459 [DEBUG] [Thread-209259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:39:44.459 [INFO] [Thread-209259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:44.462 [DEBUG] [Thread-209259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] client lang: <none>
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] server lang: <none>
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] kex follows: False
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] Compression: none
2026-02-15T18:39:44.463 [DEBUG] [Thread-209259] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:39:44.481 [DEBUG] [Thread-209259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:39:44.481 [DEBUG] [Thread-209259] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:39:44.482 [DEBUG] [Thread-209259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:39:44.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:39:44.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:39:44.484 [DEBUG] [Thread-209259] [transport.py] [_log()] userauth is OK
2026-02-15T18:39:44.484 [DEBUG] [Thread-209259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:39:44.484 [DEBUG] [Thread-209259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:39:44.484 [DEBUG] [Thread-209259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:39:44.485 [DEBUG] [Thread-209259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:39:44.508 [INFO] [Thread-209259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:39:44.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:39:45.159 [DEBUG] [Thread-209259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:39:45.159 [DEBUG] [Thread-209259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:39:45.160 [DEBUG] [Thread-209259] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:39:45.200 [DEBUG] [Thread-209259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:39:45.200 [DEBUG] [Thread-209259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:39:45.202 [DEBUG] [Thread-209259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:39:45.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:39:45.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:39:45.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:39:45.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:39:45.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:39:45.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:39:45.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:39:45.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:39:45.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:39:45.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.693497 -999.00  +19.50  18.65     34   +3.40 1 1 1 1 1   887    0 14.85 -56.01 ----- 16.7 18.6 155.6 26.4 21.9 -28.1 22.0 -26.8 22.9 -26.2 23.3 -28.1
2026-02-15T18:39:45.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:39:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:39:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.693497
2026-02-15T18:39:45.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:39:45.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:39:32', tmtdew=18.69, humidity=28.39, cloud=0.0, wind=31.79, temperature=19.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:38:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:39:45.227 [DEBUG] [Thread-209259] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:39:45.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:39:45.324 [DEBUG] [Thread-209262] [transport.py] [_log()] starting thread (client mode): 0xa5759210
2026-02-15T18:39:45.324 [DEBUG] [Thread-209262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:39:45.338 [DEBUG] [Thread-209262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:39:45.339 [INFO] [Thread-209262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:39:45.346 [DEBUG] [Thread-209262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] client lang: <none>
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] server lang: <none>
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] kex follows: False
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:39:45.347 [DEBUG] [Thread-209262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:39:45.348 [DEBUG] [Thread-209262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:39:45.348 [DEBUG] [Thread-209262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:39:45.348 [DEBUG] [Thread-209262] [transport.py] [_log()] Compression: none
2026-02-15T18:39:45.348 [DEBUG] [Thread-209262] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:39:45.406 [DEBUG] [Thread-209262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:39:45.407 [DEBUG] [Thread-209262] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:39:45.408 [DEBUG] [Thread-209262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:39:45.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:39:45.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:39:45.470 [DEBUG] [Thread-209262] [transport.py] [_log()] userauth is OK
2026-02-15T18:39:45.471 [DEBUG] [Thread-209262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:39:45.471 [DEBUG] [Thread-209262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:39:45.471 [DEBUG] [Thread-209262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:39:45.471 [DEBUG] [Thread-209262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:39:45.489 [INFO] [Thread-209262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:39:45.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:39:45.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:39:46.394 [DEBUG] [Thread-209262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:39:46.394 [DEBUG] [Thread-209262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:39:46.446 [DEBUG] [Thread-209262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:39:46.446 [DEBUG] [Thread-209262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:39:46.458 [DEBUG] [Thread-209262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:39:46.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:39:46.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:39:46.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:39:46.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:39:46.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:39:46.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:39:46.502 [DEBUG] [Thread-209262] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:39:57.762 [DEBUG] [Thread-209264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:02.631 [DEBUG] [Thread-209265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:12.823 [DEBUG] [Thread-209266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:40:16.520 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:40:16.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:40:17.915 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:17.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:18.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 40, 7), 18.7, 28.37, 0.0, 30.72, 19.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:40:18.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:40:07
2026-02-15T18:40:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:40:19.190 [DEBUG] [Thread-209267] [transport.py] [_log()] starting thread (client mode): 0xa2d3fc40
2026-02-15T18:40:19.191 [DEBUG] [Thread-209267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:40:19.212 [DEBUG] [Thread-209267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:40:19.212 [INFO] [Thread-209267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:19.215 [DEBUG] [Thread-209267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] client lang: <none>
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] server lang: <none>
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] kex follows: False
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] Compression: none
2026-02-15T18:40:19.216 [DEBUG] [Thread-209267] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:40:19.235 [DEBUG] [Thread-209267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:40:19.236 [DEBUG] [Thread-209267] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:40:19.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:40:19.238 [DEBUG] [Thread-209267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:40:19.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:40:19.240 [DEBUG] [Thread-209267] [transport.py] [_log()] userauth is OK
2026-02-15T18:40:19.240 [DEBUG] [Thread-209267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:40:19.241 [DEBUG] [Thread-209267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:40:19.241 [DEBUG] [Thread-209267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:40:19.241 [DEBUG] [Thread-209267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:40:19.255 [INFO] [Thread-209267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:40:19.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:40:19.856 [DEBUG] [Thread-209267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:40:19.857 [DEBUG] [Thread-209267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:40:19.857 [DEBUG] [Thread-209267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:40:19.897 [DEBUG] [Thread-209267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:40:19.897 [DEBUG] [Thread-209267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:40:19.900 [DEBUG] [Thread-209267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:40:19.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:40:19.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:40:19.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:40:19.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:40:19.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:40:19.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:40:19.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:40:19.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:40:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:40:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.694538 -999.00  +19.50  22.37     35   +3.60 1 1 1 1 1   887    0 14.75 -49.88 ----- 16.8 22.4 163.6 31.5 21.8 -27.6 21.9 -26.7 22.8 -25.8 23.1 -27.9
2026-02-15T18:40:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:40:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:40:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.694538
2026-02-15T18:40:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:40:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:40:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:40:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:40:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:40:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:40:07', tmtdew=18.7, humidity=28.37, cloud=0.0, wind=30.72, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:40:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:40:19.925 [DEBUG] [Thread-209267] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:40:20.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:40:20.030 [DEBUG] [Thread-209270] [transport.py] [_log()] starting thread (client mode): 0xa2d7abc0
2026-02-15T18:40:20.030 [DEBUG] [Thread-209270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:40:20.044 [DEBUG] [Thread-209270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:40:20.044 [INFO] [Thread-209270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] client lang: <none>
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] server lang: <none>
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] kex follows: False
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:40:20.052 [DEBUG] [Thread-209270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:40:20.053 [DEBUG] [Thread-209270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:40:20.053 [DEBUG] [Thread-209270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:40:20.053 [DEBUG] [Thread-209270] [transport.py] [_log()] Compression: none
2026-02-15T18:40:20.053 [DEBUG] [Thread-209270] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:40:20.110 [DEBUG] [Thread-209270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:40:20.111 [DEBUG] [Thread-209270] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:40:20.112 [DEBUG] [Thread-209270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:40:20.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:40:20.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:40:20.166 [DEBUG] [Thread-209270] [transport.py] [_log()] userauth is OK
2026-02-15T18:40:20.167 [DEBUG] [Thread-209270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:40:20.167 [DEBUG] [Thread-209270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:40:20.167 [DEBUG] [Thread-209270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:40:20.167 [DEBUG] [Thread-209270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:40:20.189 [INFO] [Thread-209270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:40:20.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:40:20.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:40:21.022 [DEBUG] [Thread-209270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:40:21.023 [DEBUG] [Thread-209270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:40:21.070 [DEBUG] [Thread-209270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:40:21.071 [DEBUG] [Thread-209270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:40:21.080 [DEBUG] [Thread-209270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:40:21.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:40:21.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:40:21.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:40:21.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:40:21.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:40:21.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:40:21.117 [DEBUG] [Thread-209270] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:40:27.863 [DEBUG] [Thread-209272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:42.917 [DEBUG] [Thread-209273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:40:51.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:40:51.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:40:51.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:40:53.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 40, 43), 18.74, 28.81, 0.0, 32.47, 19.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:40:53.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:40:43
2026-02-15T18:40:53.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:40:53.688 [DEBUG] [Thread-209274] [transport.py] [_log()] starting thread (client mode): 0xa2d3f010
2026-02-15T18:40:53.688 [DEBUG] [Thread-209274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:40:53.717 [DEBUG] [Thread-209274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:40:53.717 [INFO] [Thread-209274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:40:53.719 [DEBUG] [Thread-209274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:40:53.719 [DEBUG] [Thread-209274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:40:53.719 [DEBUG] [Thread-209274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:40:53.719 [DEBUG] [Thread-209274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:53.719 [DEBUG] [Thread-209274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] client lang: <none>
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] server lang: <none>
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] kex follows: False
2026-02-15T18:40:53.720 [DEBUG] [Thread-209274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:40:53.721 [DEBUG] [Thread-209274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:40:53.721 [DEBUG] [Thread-209274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:40:53.721 [DEBUG] [Thread-209274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:40:53.721 [DEBUG] [Thread-209274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:40:53.721 [DEBUG] [Thread-209274] [transport.py] [_log()] Compression: none
2026-02-15T18:40:53.721 [DEBUG] [Thread-209274] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:40:53.740 [DEBUG] [Thread-209274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:40:53.741 [DEBUG] [Thread-209274] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:40:53.741 [DEBUG] [Thread-209274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:40:53.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:40:53.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:40:53.743 [DEBUG] [Thread-209274] [transport.py] [_log()] userauth is OK
2026-02-15T18:40:53.743 [DEBUG] [Thread-209274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:40:53.743 [DEBUG] [Thread-209274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:40:53.743 [DEBUG] [Thread-209274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:40:53.744 [DEBUG] [Thread-209274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:40:53.761 [INFO] [Thread-209274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:40:53.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:40:54.335 [DEBUG] [Thread-209274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:40:54.335 [DEBUG] [Thread-209274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:40:54.336 [DEBUG] [Thread-209274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:40:54.376 [DEBUG] [Thread-209274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:40:54.377 [DEBUG] [Thread-209274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:40:54.380 [DEBUG] [Thread-209274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:40:54.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:40:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:40:54.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:40:54.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:40:54.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:40:54.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:40:54.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:40:54.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.694886 -999.00  +19.50  20.08     34   +3.40 1 1 1 1 1   887    0 14.76 -54.80 ----- 18.6 20.1 164.6 24.7 21.8 -27.9 21.8 -26.6 22.8 -26.2 23.2 -28.1
2026-02-15T18:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:40:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.694886
2026-02-15T18:40:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:40:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:40:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:40:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:40:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:40:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:40:43', tmtdew=18.74, humidity=28.81, cloud=0.0, wind=32.47, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:40:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:40:54.407 [DEBUG] [Thread-209274] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:40:54.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:40:54.503 [DEBUG] [Thread-209277] [transport.py] [_log()] starting thread (client mode): 0xa2d3f0d0
2026-02-15T18:40:54.503 [DEBUG] [Thread-209277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:40:54.520 [DEBUG] [Thread-209277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:40:54.520 [INFO] [Thread-209277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:40:54.528 [DEBUG] [Thread-209277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:40:54.528 [DEBUG] [Thread-209277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:40:54.528 [DEBUG] [Thread-209277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:40:54.528 [DEBUG] [Thread-209277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] client lang: <none>
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] server lang: <none>
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] kex follows: False
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] Compression: none
2026-02-15T18:40:54.529 [DEBUG] [Thread-209277] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:40:54.586 [DEBUG] [Thread-209277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:40:54.587 [DEBUG] [Thread-209277] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:40:54.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:40:54.588 [DEBUG] [Thread-209277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:40:54.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:40:54.643 [DEBUG] [Thread-209277] [transport.py] [_log()] userauth is OK
2026-02-15T18:40:54.643 [DEBUG] [Thread-209277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:40:54.643 [DEBUG] [Thread-209277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:40:54.644 [DEBUG] [Thread-209277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:40:54.644 [DEBUG] [Thread-209277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:40:54.663 [INFO] [Thread-209277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:40:54.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:40:54.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:40:55.475 [DEBUG] [Thread-209277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:40:55.476 [DEBUG] [Thread-209277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:40:55.523 [DEBUG] [Thread-209277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:40:55.523 [DEBUG] [Thread-209277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:40:55.532 [DEBUG] [Thread-209277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:40:55.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:40:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:40:55.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:40:55.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:40:55.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:40:55.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:40:55.569 [DEBUG] [Thread-209277] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:40:57.954 [DEBUG] [Thread-209279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:02.674 [DEBUG] [Thread-209280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:13.005 [DEBUG] [Thread-209281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:18.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:18.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:25.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:41:25.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:41:25.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:41:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 41, 19), 18.79, 28.72, 0.0, 31.04, 19.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:41:27.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:41:19
2026-02-15T18:41:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:41:27.957 [DEBUG] [Thread-209282] [transport.py] [_log()] starting thread (client mode): 0xa2d7a020
2026-02-15T18:41:27.957 [DEBUG] [Thread-209282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:41:27.974 [DEBUG] [Thread-209282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:41:27.974 [INFO] [Thread-209282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:41:27.976 [DEBUG] [Thread-209282] [transport.py] [_log()] client lang: <none>
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] server lang: <none>
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] kex follows: False
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] Compression: none
2026-02-15T18:41:27.977 [DEBUG] [Thread-209282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:41:27.984 [DEBUG] [Thread-209282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:41:27.985 [DEBUG] [Thread-209282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:41:27.985 [DEBUG] [Thread-209282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:41:27.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:41:27.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:41:27.986 [DEBUG] [Thread-209282] [transport.py] [_log()] userauth is OK
2026-02-15T18:41:27.987 [DEBUG] [Thread-209282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:41:27.987 [DEBUG] [Thread-209282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:41:27.987 [DEBUG] [Thread-209282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:41:27.987 [DEBUG] [Thread-209282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:41:28.015 [INFO] [Thread-209282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:41:28.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:41:28.045 [DEBUG] [Thread-209284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:28.646 [DEBUG] [Thread-209282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:41:28.646 [DEBUG] [Thread-209282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:41:28.646 [DEBUG] [Thread-209282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:41:28.686 [DEBUG] [Thread-209282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:41:28.687 [DEBUG] [Thread-209282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:41:28.690 [DEBUG] [Thread-209282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:41:28.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:41:28.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:41:28.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:41:28.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:41:28.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:41:28.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:41:28.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:41:28.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:41:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:41:28.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.695233 -999.00  +19.50  25.87     34   +3.30 1 1 1 1 1   887    0 14.64 -56.55 ----- 28.1 25.9 163.6 30.1 21.8 -27.9 21.8 -26.7 22.8 -26.4 23.1 -27.9
2026-02-15T18:41:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:41:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:41:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.695233
2026-02-15T18:41:28.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:41:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:41:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:41:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:41:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:41:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:41:19', tmtdew=18.79, humidity=28.72, cloud=0.0, wind=31.04, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:41:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:41:28.717 [DEBUG] [Thread-209282] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:41:28.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:41:28.809 [DEBUG] [Thread-209286] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T18:41:28.809 [DEBUG] [Thread-209286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:41:28.824 [DEBUG] [Thread-209286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:41:28.824 [INFO] [Thread-209286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] client lang: <none>
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] server lang: <none>
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] kex follows: False
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:41:28.832 [DEBUG] [Thread-209286] [transport.py] [_log()] Compression: none
2026-02-15T18:41:28.833 [DEBUG] [Thread-209286] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:41:28.890 [DEBUG] [Thread-209286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:41:28.891 [DEBUG] [Thread-209286] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:41:28.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:41:28.892 [DEBUG] [Thread-209286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:41:28.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:41:28.946 [DEBUG] [Thread-209286] [transport.py] [_log()] userauth is OK
2026-02-15T18:41:28.946 [DEBUG] [Thread-209286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:41:28.947 [DEBUG] [Thread-209286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:41:28.947 [DEBUG] [Thread-209286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:41:28.947 [DEBUG] [Thread-209286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:41:28.965 [INFO] [Thread-209286] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:41:28.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:41:28.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:41:29.826 [DEBUG] [Thread-209286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:41:29.826 [DEBUG] [Thread-209286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:41:29.874 [DEBUG] [Thread-209286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:41:29.875 [DEBUG] [Thread-209286] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:41:29.884 [DEBUG] [Thread-209286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:41:29.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:41:29.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:41: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') -> 00000000
2026-02-15T18:41:29.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:41:29.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:41:29.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:41:29.921 [DEBUG] [Thread-209286] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:41:43.083 [DEBUG] [Thread-209288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:58.128 [DEBUG] [Thread-209289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:41:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:41:59.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:41:59.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:42:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 41, 54), 18.94, 28.04, 0.0, 32.18, 19.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:42:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:41:54
2026-02-15T18:42:02.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:42:02.295 [DEBUG] [Thread-209290] [transport.py] [_log()] starting thread (client mode): 0xa2d3d8a0
2026-02-15T18:42:02.295 [DEBUG] [Thread-209290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:42:02.316 [DEBUG] [Thread-209290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:42:02.316 [INFO] [Thread-209290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:42:02.319 [DEBUG] [Thread-209290] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] client lang: <none>
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] server lang: <none>
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] kex follows: False
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] Compression: none
2026-02-15T18:42:02.320 [DEBUG] [Thread-209290] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:42:02.341 [DEBUG] [Thread-209290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:42:02.342 [DEBUG] [Thread-209290] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:42:02.343 [DEBUG] [Thread-209290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:42:02.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:42:02.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:42:02.385 [DEBUG] [Thread-209290] [transport.py] [_log()] userauth is OK
2026-02-15T18:42:02.386 [DEBUG] [Thread-209290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:42:02.386 [DEBUG] [Thread-209290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:42:02.386 [DEBUG] [Thread-209290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:42:02.386 [DEBUG] [Thread-209290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:42:02.416 [INFO] [Thread-209290] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:42:02.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:42:02.711 [DEBUG] [Thread-209292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:42:03.082 [DEBUG] [Thread-209290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:42:03.082 [DEBUG] [Thread-209290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:42:03.083 [DEBUG] [Thread-209290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:42:03.123 [DEBUG] [Thread-209290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:42:03.124 [DEBUG] [Thread-209290] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:42:03.135 [DEBUG] [Thread-209290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:42:03.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:42:03.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:42:03.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:42:03.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:42:03.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:42:03.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:42:03.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:42:03.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:42:03.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:42:03.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.695580 -999.00  +19.40  19.99     34   +3.30 1 1 1 1 1   887    0 14.47 -58.12 ----- 22.1 20.0 149.2 38.6 21.7 -28.3 21.8 -27.1 22.7 -26.5 23.0 -28.7
2026-02-15T18:42:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:42:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:42:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.695580
2026-02-15T18:42:03.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:42:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:42:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:42:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:42:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:42:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:41:54', tmtdew=18.94, humidity=28.04, cloud=0.0, wind=32.18, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:41:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:42:03.161 [DEBUG] [Thread-209290] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:42:03.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:42:03.260 [DEBUG] [Thread-209294] [transport.py] [_log()] starting thread (client mode): 0xa2d6d990
2026-02-15T18:42:03.260 [DEBUG] [Thread-209294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:42:03.276 [DEBUG] [Thread-209294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:42:03.276 [INFO] [Thread-209294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:42:03.283 [DEBUG] [Thread-209294] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] client lang: <none>
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] server lang: <none>
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] kex follows: False
2026-02-15T18:42:03.284 [DEBUG] [Thread-209294] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:42:03.285 [DEBUG] [Thread-209294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:42:03.285 [DEBUG] [Thread-209294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:42:03.285 [DEBUG] [Thread-209294] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:42:03.285 [DEBUG] [Thread-209294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:42:03.285 [DEBUG] [Thread-209294] [transport.py] [_log()] Compression: none
2026-02-15T18:42:03.285 [DEBUG] [Thread-209294] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:42:03.342 [DEBUG] [Thread-209294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:42:03.343 [DEBUG] [Thread-209294] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:42:03.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:42:03.344 [DEBUG] [Thread-209294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:42:03.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:42:03.399 [DEBUG] [Thread-209294] [transport.py] [_log()] userauth is OK
2026-02-15T18:42:03.400 [DEBUG] [Thread-209294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:42:03.400 [DEBUG] [Thread-209294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:42:03.400 [DEBUG] [Thread-209294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:42:03.400 [DEBUG] [Thread-209294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:42:03.420 [INFO] [Thread-209294] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:42:03.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:42:03.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:42:04.245 [DEBUG] [Thread-209294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:42:04.245 [DEBUG] [Thread-209294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:42:04.293 [DEBUG] [Thread-209294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:42:04.294 [DEBUG] [Thread-209294] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:42:04.303 [DEBUG] [Thread-209294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:42:04.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:42:04.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:42:04.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:42:04.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:42:04.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:42:04.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:42:04.340 [DEBUG] [Thread-209294] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:42:13.163 [DEBUG] [Thread-209296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:42:18.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:42:18.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:42:28.222 [DEBUG] [Thread-209297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:42:34.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:42:34.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:42:34.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:42:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 41, 54), 18.94, 28.04, 0.0, 32.18, 19.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:42:36.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:41:54
2026-02-15T18:42:36.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:42:36.921 [DEBUG] [Thread-209298] [transport.py] [_log()] starting thread (client mode): 0xa5758610
2026-02-15T18:42:36.921 [DEBUG] [Thread-209298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:42:36.941 [DEBUG] [Thread-209298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:42:36.941 [INFO] [Thread-209298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:42:36.944 [DEBUG] [Thread-209298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] client lang: <none>
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] server lang: <none>
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] kex follows: False
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:42:36.945 [DEBUG] [Thread-209298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:42:36.946 [DEBUG] [Thread-209298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:42:36.946 [DEBUG] [Thread-209298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:42:36.946 [DEBUG] [Thread-209298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:42:36.946 [DEBUG] [Thread-209298] [transport.py] [_log()] Compression: none
2026-02-15T18:42:36.946 [DEBUG] [Thread-209298] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:42:36.967 [DEBUG] [Thread-209298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:42:36.968 [DEBUG] [Thread-209298] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:42:36.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:42:36.969 [DEBUG] [Thread-209298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:42:36.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:42:36.971 [DEBUG] [Thread-209298] [transport.py] [_log()] userauth is OK
2026-02-15T18:42:36.972 [DEBUG] [Thread-209298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:42:36.972 [DEBUG] [Thread-209298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:42:36.972 [DEBUG] [Thread-209298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:42:36.972 [DEBUG] [Thread-209298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:42:36.996 [INFO] [Thread-209298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:42:36.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:42:37.626 [DEBUG] [Thread-209298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:42:37.627 [DEBUG] [Thread-209298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:42:37.627 [DEBUG] [Thread-209298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:42:37.667 [DEBUG] [Thread-209298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:42:37.668 [DEBUG] [Thread-209298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:42:37.671 [DEBUG] [Thread-209298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:42:37.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:42:37.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:42:37.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:42:37.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:42:37.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:42:37.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:42:37.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:42:37.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:42:37.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:42:37.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.695927 -999.00  +19.30  20.56     34   +3.20 1 1 1 1 1   887    0 14.50 -57.08 ----- 18.4 20.6 151.2 29.4 21.6 -28.0 21.7 -26.8 22.7 -26.1 23.0 -27.6
2026-02-15T18:42:37.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:42:37.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:42:37.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.695927
2026-02-15T18:42:37.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:42:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:42:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:42:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:42:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:42:37.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:41:54', tmtdew=18.94, humidity=28.04, cloud=0.0, wind=32.18, temperature=19.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:42:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:42:37.701 [DEBUG] [Thread-209298] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:42:37.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:42:37.797 [DEBUG] [Thread-209301] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-15T18:42:37.797 [DEBUG] [Thread-209301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:42:37.813 [DEBUG] [Thread-209301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:42:37.813 [INFO] [Thread-209301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:42:37.820 [DEBUG] [Thread-209301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:42:37.821 [DEBUG] [Thread-209301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:42:37.821 [DEBUG] [Thread-209301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:42:37.821 [DEBUG] [Thread-209301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:37.821 [DEBUG] [Thread-209301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:42:37.821 [DEBUG] [Thread-209301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:37.821 [DEBUG] [Thread-209301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] client lang: <none>
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] server lang: <none>
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] kex follows: False
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:42:37.822 [DEBUG] [Thread-209301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:42:37.823 [DEBUG] [Thread-209301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:42:37.823 [DEBUG] [Thread-209301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:42:37.823 [DEBUG] [Thread-209301] [transport.py] [_log()] Compression: none
2026-02-15T18:42:37.823 [DEBUG] [Thread-209301] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:42:37.879 [DEBUG] [Thread-209301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:42:37.880 [DEBUG] [Thread-209301] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:42:37.880 [DEBUG] [Thread-209301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:42:37.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:42:37.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:42:37.938 [DEBUG] [Thread-209301] [transport.py] [_log()] userauth is OK
2026-02-15T18:42:37.939 [DEBUG] [Thread-209301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:42:37.939 [DEBUG] [Thread-209301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:42:37.939 [DEBUG] [Thread-209301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:42:37.939 [DEBUG] [Thread-209301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:42:37.958 [INFO] [Thread-209301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:42:37.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:42:37.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:42:38.811 [DEBUG] [Thread-209301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:42:38.811 [DEBUG] [Thread-209301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:42:38.858 [DEBUG] [Thread-209301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:42:38.859 [DEBUG] [Thread-209301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:42:38.868 [DEBUG] [Thread-209301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:42:38.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:42:38.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:42:38.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:42:38.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:42:38.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:42:38.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:42:38.904 [DEBUG] [Thread-209301] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:42:43.259 [DEBUG] [Thread-209303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:42:58.309 [DEBUG] [Thread-209304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:02.739 [DEBUG] [Thread-209305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:08.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:43:08.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:43:08.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:43:10.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 42, 29), 18.91, 28.07, 0.0, 30.68, 19.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:43:10.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:42:29
2026-02-15T18:43:11.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:43:11.340 [DEBUG] [Thread-209306] [transport.py] [_log()] starting thread (client mode): 0xa2dc3be0
2026-02-15T18:43:11.340 [DEBUG] [Thread-209306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:43:11.354 [DEBUG] [Thread-209306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:43:11.354 [INFO] [Thread-209306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] client lang: <none>
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] server lang: <none>
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] kex follows: False
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:43:11.358 [DEBUG] [Thread-209306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:43:11.359 [DEBUG] [Thread-209306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:43:11.359 [DEBUG] [Thread-209306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:43:11.359 [DEBUG] [Thread-209306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:43:11.359 [DEBUG] [Thread-209306] [transport.py] [_log()] Compression: none
2026-02-15T18:43:11.359 [DEBUG] [Thread-209306] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:43:11.376 [DEBUG] [Thread-209306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:43:11.377 [DEBUG] [Thread-209306] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:43:11.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:43:11.378 [DEBUG] [Thread-209306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:43:11.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:43:11.380 [DEBUG] [Thread-209306] [transport.py] [_log()] userauth is OK
2026-02-15T18:43:11.380 [DEBUG] [Thread-209306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:43:11.380 [DEBUG] [Thread-209306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:43:11.380 [DEBUG] [Thread-209306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:43:11.380 [DEBUG] [Thread-209306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:43:11.398 [INFO] [Thread-209306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:43:11.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:43:11.989 [DEBUG] [Thread-209306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:43:11.989 [DEBUG] [Thread-209306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:43:11.990 [DEBUG] [Thread-209306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:43:12.030 [DEBUG] [Thread-209306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:43:12.031 [DEBUG] [Thread-209306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:43:12.033 [DEBUG] [Thread-209306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:43:12.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:43:12.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:43:12.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:43:12.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:43:12.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:43:12.057 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:43:12.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:43:12.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:43:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:43:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.696275 -999.00  +19.30  21.14     34   +3.40 1 1 1 1 1   887    0 14.49 -55.95 ----- 20.5 21.1 148.4 29.6 21.6 -28.0 21.7 -27.2 22.6 -26.6 22.9 -28.4
2026-02-15T18:43:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:43:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:43:12.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.696275
2026-02-15T18:43:12.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:43:12.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:43:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:43:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:43:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:43:12.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:42:29', tmtdew=18.91, humidity=28.07, cloud=0.0, wind=30.68, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:42:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:43:12.060 [DEBUG] [Thread-209306] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:43:12.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:43:12.152 [DEBUG] [Thread-209309] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T18:43:12.152 [DEBUG] [Thread-209309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:43:12.166 [DEBUG] [Thread-209309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:43:12.167 [INFO] [Thread-209309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] client lang: <none>
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] server lang: <none>
2026-02-15T18:43:12.174 [DEBUG] [Thread-209309] [transport.py] [_log()] kex follows: False
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] Compression: none
2026-02-15T18:43:12.175 [DEBUG] [Thread-209309] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:43:12.235 [DEBUG] [Thread-209309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:43:12.236 [DEBUG] [Thread-209309] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:43:12.236 [DEBUG] [Thread-209309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:43:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:43:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:43:12.294 [DEBUG] [Thread-209309] [transport.py] [_log()] userauth is OK
2026-02-15T18:43:12.295 [DEBUG] [Thread-209309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:43:12.295 [DEBUG] [Thread-209309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:43:12.295 [DEBUG] [Thread-209309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:43:12.295 [DEBUG] [Thread-209309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:43:12.315 [INFO] [Thread-209309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:43:12.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:43:12.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:43:13.160 [DEBUG] [Thread-209309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:43:13.161 [DEBUG] [Thread-209309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:43:13.208 [DEBUG] [Thread-209309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:43:13.208 [DEBUG] [Thread-209309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:43:13.217 [DEBUG] [Thread-209309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:43:13.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:43:13.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:43:13.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:43:13.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:43:13.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:43:13.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:43:13.250 [DEBUG] [Thread-209309] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:43:13.346 [DEBUG] [Thread-209311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:18.343 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:18.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:28.398 [DEBUG] [Thread-209312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:43.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:43:43.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:43:43.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:43:43.435 [DEBUG] [Thread-209313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:43:45.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 43, 5), 18.7, 28.47, 0.0, 33.15, 19.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:43:45.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:43:05
2026-02-15T18:43:45.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:43:45.727 [DEBUG] [Thread-209314] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T18:43:45.727 [DEBUG] [Thread-209314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:43:45.746 [DEBUG] [Thread-209314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:43:45.747 [INFO] [Thread-209314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] client lang: <none>
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] server lang: <none>
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] kex follows: False
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] Compression: none
2026-02-15T18:43:45.750 [DEBUG] [Thread-209314] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:43:45.759 [DEBUG] [Thread-209314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:43:45.759 [DEBUG] [Thread-209314] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:43:45.759 [DEBUG] [Thread-209314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:43:45.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:43:45.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:43:45.761 [DEBUG] [Thread-209314] [transport.py] [_log()] userauth is OK
2026-02-15T18:43:45.761 [DEBUG] [Thread-209314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:43:45.761 [DEBUG] [Thread-209314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:43:45.761 [DEBUG] [Thread-209314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:43:45.761 [DEBUG] [Thread-209314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:43:45.796 [INFO] [Thread-209314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:43:45.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:43:46.402 [DEBUG] [Thread-209314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:43:46.402 [DEBUG] [Thread-209314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:43:46.403 [DEBUG] [Thread-209314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:43:46.443 [DEBUG] [Thread-209314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:43:46.444 [DEBUG] [Thread-209314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:43:46.446 [DEBUG] [Thread-209314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:43:46.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:43:46.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:43:46.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:43:46.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:43:46.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:43:46.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:43:46.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.696622 -999.00  +19.30  22.94     35   +3.60 1 1 1 1 1   887    0 14.50 -60.83 ----- 27.3 22.9 160.4 31.5 21.6 -28.1 21.6 -26.8 22.5 -26.2 22.8 -28.1
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.696622
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:43:46.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:43:05', tmtdew=18.7, humidity=28.47, cloud=0.0, wind=33.15, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:43:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:43:46.460 [DEBUG] [Thread-209314] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:43:46.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:43:46.549 [DEBUG] [Thread-209317] [transport.py] [_log()] starting thread (client mode): 0xa2d3e620
2026-02-15T18:43:46.549 [DEBUG] [Thread-209317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:43:46.564 [DEBUG] [Thread-209317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:43:46.564 [INFO] [Thread-209317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:43:46.571 [DEBUG] [Thread-209317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] client lang: <none>
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] server lang: <none>
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] kex follows: False
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:43:46.572 [DEBUG] [Thread-209317] [transport.py] [_log()] Compression: none
2026-02-15T18:43:46.573 [DEBUG] [Thread-209317] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:43:46.629 [DEBUG] [Thread-209317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:43:46.630 [DEBUG] [Thread-209317] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:43:46.631 [DEBUG] [Thread-209317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:43:46.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:43:46.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:43:46.686 [DEBUG] [Thread-209317] [transport.py] [_log()] userauth is OK
2026-02-15T18:43:46.687 [DEBUG] [Thread-209317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:43:46.687 [DEBUG] [Thread-209317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:43:46.687 [DEBUG] [Thread-209317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:43:46.687 [DEBUG] [Thread-209317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:43:46.705 [INFO] [Thread-209317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:43:46.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:43:46.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:43:47.555 [DEBUG] [Thread-209317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:43:47.556 [DEBUG] [Thread-209317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:43:47.603 [DEBUG] [Thread-209317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:43:47.603 [DEBUG] [Thread-209317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:43:47.612 [DEBUG] [Thread-209317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:43:47.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:43:47.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:43:47.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:43:47.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:43:47.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:43:47.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:43:47.649 [DEBUG] [Thread-209317] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:43:58.471 [DEBUG] [Thread-209319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:02.766 [DEBUG] [Thread-209320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:13.531 [DEBUG] [Thread-209321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:17.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:44:17.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:44:17.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:44:18.486 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:18.487 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 43, 40), 19.02, 28.11, 0.0, 27.03, 20.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:44:19.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:43:40
2026-02-15T18:44:20.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:44:20.474 [DEBUG] [Thread-209322] [transport.py] [_log()] starting thread (client mode): 0xa5742560
2026-02-15T18:44:20.475 [DEBUG] [Thread-209322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:44:20.496 [DEBUG] [Thread-209322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:44:20.496 [INFO] [Thread-209322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:44:20.499 [DEBUG] [Thread-209322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:44:20.499 [DEBUG] [Thread-209322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] client lang: <none>
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] server lang: <none>
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] kex follows: False
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:44:20.500 [DEBUG] [Thread-209322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:44:20.501 [DEBUG] [Thread-209322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:44:20.501 [DEBUG] [Thread-209322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:44:20.501 [DEBUG] [Thread-209322] [transport.py] [_log()] Compression: none
2026-02-15T18:44:20.501 [DEBUG] [Thread-209322] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:44:20.519 [DEBUG] [Thread-209322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:44:20.520 [DEBUG] [Thread-209322] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:44:20.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:44:20.521 [DEBUG] [Thread-209322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:44:20.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:44:20.522 [DEBUG] [Thread-209322] [transport.py] [_log()] userauth is OK
2026-02-15T18:44:20.522 [DEBUG] [Thread-209322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:44:20.522 [DEBUG] [Thread-209322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:44:20.522 [DEBUG] [Thread-209322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:44:20.522 [DEBUG] [Thread-209322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:44:20.534 [INFO] [Thread-209322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:44:20.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:44:21.168 [DEBUG] [Thread-209322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:44:21.169 [DEBUG] [Thread-209322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:44:21.169 [DEBUG] [Thread-209322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:44:21.209 [DEBUG] [Thread-209322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:44:21.209 [DEBUG] [Thread-209322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:44:21.212 [DEBUG] [Thread-209322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:44:21.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:44:21.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:44:21.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:44:21.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:44:21.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:44:21.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:44:21.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:44:21.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:44:21.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:44:21.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.696969 -999.00  +19.20  18.37     35   +3.70 1 1 1 1 1   887    0 14.10 -66.08 ----- 21.8 18.4 165.8 25.3 21.6 -27.8 21.6 -27.3 22.5 -26.5 22.8 -28.4
2026-02-15T18:44:21.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:44:21.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:44:21.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.696969
2026-02-15T18:44:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:44:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:44:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:44:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:44:21.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:44:21.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:43:40', tmtdew=19.02, humidity=28.11, cloud=0.0, wind=27.03, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:43:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:44:21.239 [DEBUG] [Thread-209322] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:44:21.332 [DEBUG] [Thread-209325] [transport.py] [_log()] starting thread (client mode): 0xa2d6f430
2026-02-15T18:44:21.332 [DEBUG] [Thread-209325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:44:21.347 [DEBUG] [Thread-209325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:44:21.347 [INFO] [Thread-209325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:44:21.354 [DEBUG] [Thread-209325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:44:21.354 [DEBUG] [Thread-209325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] client lang: <none>
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] server lang: <none>
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] kex follows: False
2026-02-15T18:44:21.355 [DEBUG] [Thread-209325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:44:21.356 [DEBUG] [Thread-209325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:44:21.356 [DEBUG] [Thread-209325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:44:21.356 [DEBUG] [Thread-209325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:44:21.356 [DEBUG] [Thread-209325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:44:21.356 [DEBUG] [Thread-209325] [transport.py] [_log()] Compression: none
2026-02-15T18:44:21.356 [DEBUG] [Thread-209325] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:44:21.416 [DEBUG] [Thread-209325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:44:21.416 [DEBUG] [Thread-209325] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:44:21.417 [DEBUG] [Thread-209325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:44:21.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:44:21.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:44:21.476 [DEBUG] [Thread-209325] [transport.py] [_log()] userauth is OK
2026-02-15T18:44:21.476 [DEBUG] [Thread-209325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:44:21.476 [DEBUG] [Thread-209325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:44:21.476 [DEBUG] [Thread-209325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:44:21.476 [DEBUG] [Thread-209325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:44:21.499 [INFO] [Thread-209325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:44:21.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:44:21.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:44:22.350 [DEBUG] [Thread-209325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:44:22.351 [DEBUG] [Thread-209325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:44:22.398 [DEBUG] [Thread-209325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:44:22.398 [DEBUG] [Thread-209325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:44:22.407 [DEBUG] [Thread-209325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:44:22.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:44:22.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:44:22.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:44:22.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:44:22.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:44:22.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:44:22.445 [DEBUG] [Thread-209325] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:44:28.565 [DEBUG] [Thread-209327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:43.617 [DEBUG] [Thread-209328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:44:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:44:52.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:44:52.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:44:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 44, 15), 18.24, 29.69, 0.0, 27.9, 19.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:44:54.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:44:15
2026-02-15T18:44:55.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:44:55.339 [DEBUG] [Thread-209329] [transport.py] [_log()] starting thread (client mode): 0xa2dc1bd0
2026-02-15T18:44:55.339 [DEBUG] [Thread-209329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:44:55.360 [DEBUG] [Thread-209329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:44:55.360 [INFO] [Thread-209329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] client lang: <none>
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] server lang: <none>
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] kex follows: False
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:44:55.363 [DEBUG] [Thread-209329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:44:55.364 [DEBUG] [Thread-209329] [transport.py] [_log()] Compression: none
2026-02-15T18:44:55.364 [DEBUG] [Thread-209329] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:44:55.382 [DEBUG] [Thread-209329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:44:55.382 [DEBUG] [Thread-209329] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:44:55.382 [DEBUG] [Thread-209329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:44:55.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:44:55.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:44:55.425 [DEBUG] [Thread-209329] [transport.py] [_log()] userauth is OK
2026-02-15T18:44:55.425 [DEBUG] [Thread-209329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:44:55.425 [DEBUG] [Thread-209329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:44:55.425 [DEBUG] [Thread-209329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:44:55.426 [DEBUG] [Thread-209329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:44:55.458 [INFO] [Thread-209329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:44:55.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:44:56.085 [DEBUG] [Thread-209329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:44:56.086 [DEBUG] [Thread-209329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:44:56.086 [DEBUG] [Thread-209329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:44:56.127 [DEBUG] [Thread-209329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:44:56.127 [DEBUG] [Thread-209329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:44:56.130 [DEBUG] [Thread-209329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:44:56.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:44:56.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:44:56.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:44:56.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:44:56.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:44:56.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:44:56.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:44:56.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:44:56.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:44:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.697663 -999.00  +19.20  19.43     36   +3.80 1 1 1 1 1   887    0 14.12 -64.75 ----- 20.1 19.4 150.2 30.0 21.5 -28.0 21.6 -27.4 22.4 -26.3 22.7 -28.2
2026-02-15T18:44:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:44:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:44:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.697663
2026-02-15T18:44:56.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:44:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:44:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:44:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:44:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:44:56.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:44:15', tmtdew=18.24, humidity=29.69, cloud=0.0, wind=27.9, temperature=19.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:44:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:44:56.159 [DEBUG] [Thread-209329] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:44:56.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:44:56.255 [DEBUG] [Thread-209332] [transport.py] [_log()] starting thread (client mode): 0xa57e1030
2026-02-15T18:44:56.255 [DEBUG] [Thread-209332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:44:56.270 [DEBUG] [Thread-209332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:44:56.270 [INFO] [Thread-209332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:44:56.278 [DEBUG] [Thread-209332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] client lang: <none>
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] server lang: <none>
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] kex follows: False
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] Compression: none
2026-02-15T18:44:56.279 [DEBUG] [Thread-209332] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:44:56.339 [DEBUG] [Thread-209332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:44:56.339 [DEBUG] [Thread-209332] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:44:56.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:44:56.341 [DEBUG] [Thread-209332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:44:56.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:44:56.394 [DEBUG] [Thread-209332] [transport.py] [_log()] userauth is OK
2026-02-15T18:44:56.394 [DEBUG] [Thread-209332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:44:56.395 [DEBUG] [Thread-209332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:44:56.395 [DEBUG] [Thread-209332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:44:56.395 [DEBUG] [Thread-209332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:44:56.413 [INFO] [Thread-209332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:44:56.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:44:56.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:44:57.235 [DEBUG] [Thread-209332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:44:57.235 [DEBUG] [Thread-209332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:44:57.284 [DEBUG] [Thread-209332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:44:57.284 [DEBUG] [Thread-209332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:44:57.293 [DEBUG] [Thread-209332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:44:57.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:44:57.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:44:57.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:44:57.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:44:57.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:44:57.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:44:57.329 [DEBUG] [Thread-209332] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:44:58.654 [DEBUG] [Thread-209334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:02.805 [DEBUG] [Thread-209335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:13.715 [DEBUG] [Thread-209336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:18.629 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:18.630 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:27.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:45:27.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:45:27.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:45:28.754 [DEBUG] [Thread-209337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 44, 51), 18.08, 29.82, 0.0, 29.29, 19.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:45:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:44:51
2026-02-15T18:45:30.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:45:30.301 [DEBUG] [Thread-209338] [transport.py] [_log()] starting thread (client mode): 0xa5741900
2026-02-15T18:45:30.301 [DEBUG] [Thread-209338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:45:30.320 [DEBUG] [Thread-209338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:45:30.320 [INFO] [Thread-209338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:45:30.323 [DEBUG] [Thread-209338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:45:30.323 [DEBUG] [Thread-209338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:45:30.323 [DEBUG] [Thread-209338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] client lang: <none>
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] server lang: <none>
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] kex follows: False
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] Compression: none
2026-02-15T18:45:30.324 [DEBUG] [Thread-209338] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:45:30.343 [DEBUG] [Thread-209338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:45:30.343 [DEBUG] [Thread-209338] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:45:30.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:45:30.345 [DEBUG] [Thread-209338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:45:30.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:45:30.347 [DEBUG] [Thread-209338] [transport.py] [_log()] userauth is OK
2026-02-15T18:45:30.348 [DEBUG] [Thread-209338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:45:30.348 [DEBUG] [Thread-209338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:45:30.348 [DEBUG] [Thread-209338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:45:30.349 [DEBUG] [Thread-209338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:45:30.373 [INFO] [Thread-209338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:45:30.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:45:30.990 [DEBUG] [Thread-209338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:45:30.990 [DEBUG] [Thread-209338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:45:30.991 [DEBUG] [Thread-209338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:45:31.031 [DEBUG] [Thread-209338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:45:31.031 [DEBUG] [Thread-209338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:45:31.034 [DEBUG] [Thread-209338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:45:31.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:45:31.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:45:31.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:45:31.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:45:31.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:45:31.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:45:31.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:45:31.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:45:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:45:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.698010 -999.00  +19.10  26.02     36   +3.80 1 1 1 1 1   887    0 14.26 -74.32 ----- 30.6 26.0 145.6 31.0 21.4 -27.7 21.5 -26.8 22.4 -26.2 22.6 -28.2
2026-02-15T18:45:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:45:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:45:31.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.698010
2026-02-15T18:45:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:45:31.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:45:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:45:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:45:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:45:31.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:44:51', tmtdew=18.08, humidity=29.82, cloud=0.0, wind=29.29, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:45:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:45:31.062 [DEBUG] [Thread-209338] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:45:31.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:45:31.159 [DEBUG] [Thread-209341] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T18:45:31.159 [DEBUG] [Thread-209341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:45:31.173 [DEBUG] [Thread-209341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:45:31.173 [INFO] [Thread-209341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:45:31.180 [DEBUG] [Thread-209341] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:45:31.181 [DEBUG] [Thread-209341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] client lang: <none>
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] server lang: <none>
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] kex follows: False
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:45:31.182 [DEBUG] [Thread-209341] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:45:31.183 [DEBUG] [Thread-209341] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:45:31.183 [DEBUG] [Thread-209341] [transport.py] [_log()] Compression: none
2026-02-15T18:45:31.183 [DEBUG] [Thread-209341] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:45:31.239 [DEBUG] [Thread-209341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:45:31.240 [DEBUG] [Thread-209341] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:45:31.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:45:31.242 [DEBUG] [Thread-209341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:45:31.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:45:31.299 [DEBUG] [Thread-209341] [transport.py] [_log()] userauth is OK
2026-02-15T18:45:31.299 [DEBUG] [Thread-209341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:45:31.299 [DEBUG] [Thread-209341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:45:31.300 [DEBUG] [Thread-209341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:45:31.300 [DEBUG] [Thread-209341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:45:31.319 [INFO] [Thread-209341] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:45:31.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:45:31.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:45:32.226 [DEBUG] [Thread-209341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:45:32.226 [DEBUG] [Thread-209341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:45:32.273 [DEBUG] [Thread-209341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:45:32.274 [DEBUG] [Thread-209341] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:45:32.283 [DEBUG] [Thread-209341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:45:32.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:45:32.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:45:32.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:45:32.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:45:32.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:45:32.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:45:32.320 [DEBUG] [Thread-209341] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:45:43.791 [DEBUG] [Thread-209343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:45:58.841 [DEBUG] [Thread-209344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:46:02.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:46:02.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:46:02.863 [DEBUG] [Thread-209345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:04.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 45, 27), 17.99, 29.99, 0.0, 29.57, 19.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:46:04.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:45:27
2026-02-15T18:46:05.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:46:05.176 [DEBUG] [Thread-209346] [transport.py] [_log()] starting thread (client mode): 0xa2d3f280
2026-02-15T18:46:05.176 [DEBUG] [Thread-209346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:46:05.196 [DEBUG] [Thread-209346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:46:05.196 [INFO] [Thread-209346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] client lang: <none>
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] server lang: <none>
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] kex follows: False
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] Compression: none
2026-02-15T18:46:05.199 [DEBUG] [Thread-209346] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:46:05.215 [DEBUG] [Thread-209346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:46:05.216 [DEBUG] [Thread-209346] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:46:05.216 [DEBUG] [Thread-209346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:46:05.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:46:05.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:46:05.218 [DEBUG] [Thread-209346] [transport.py] [_log()] userauth is OK
2026-02-15T18:46:05.219 [DEBUG] [Thread-209346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:46:05.219 [DEBUG] [Thread-209346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:46:05.219 [DEBUG] [Thread-209346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:46:05.219 [DEBUG] [Thread-209346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:46:05.245 [INFO] [Thread-209346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:46:05.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:46:05.877 [DEBUG] [Thread-209346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:46:05.877 [DEBUG] [Thread-209346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:46:05.878 [DEBUG] [Thread-209346] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:46:05.918 [DEBUG] [Thread-209346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:46:05.919 [DEBUG] [Thread-209346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:46:05.922 [DEBUG] [Thread-209346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:46:05.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:46:05.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:46:05.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:46:05.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:46:05.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:46:05.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:46:05.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:46:05.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:46:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:46:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.698358 -999.00  +19.10  21.18     36   +3.70 1 1 1 1 1   887    0 13.98 -82.20 ----- 21.8 21.2 161.8 31.0 21.4 -27.8 21.5 -26.8 22.3 -26.0 22.6 -27.8
2026-02-15T18:46:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:46:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:46:05.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.698358
2026-02-15T18:46:05.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:46:05.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:46:05.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:46:05.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:46:05.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:46:05.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:45:27', tmtdew=17.99, humidity=29.99, cloud=0.0, wind=29.57, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:45:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:46:05.950 [DEBUG] [Thread-209346] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:46:06.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:46:06.058 [DEBUG] [Thread-209349] [transport.py] [_log()] starting thread (client mode): 0xa57d4430
2026-02-15T18:46:06.058 [DEBUG] [Thread-209349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:46:06.075 [DEBUG] [Thread-209349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:46:06.075 [INFO] [Thread-209349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:46:06.083 [DEBUG] [Thread-209349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:46:06.083 [DEBUG] [Thread-209349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:46:06.083 [DEBUG] [Thread-209349] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:46:06.083 [DEBUG] [Thread-209349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] client lang: <none>
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] server lang: <none>
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] kex follows: False
2026-02-15T18:46:06.084 [DEBUG] [Thread-209349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:46:06.085 [DEBUG] [Thread-209349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:46:06.085 [DEBUG] [Thread-209349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:46:06.085 [DEBUG] [Thread-209349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:46:06.085 [DEBUG] [Thread-209349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:46:06.085 [DEBUG] [Thread-209349] [transport.py] [_log()] Compression: none
2026-02-15T18:46:06.085 [DEBUG] [Thread-209349] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:46:06.143 [DEBUG] [Thread-209349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:46:06.144 [DEBUG] [Thread-209349] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:46:06.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:46:06.145 [DEBUG] [Thread-209349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:46:06.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:46:06.202 [DEBUG] [Thread-209349] [transport.py] [_log()] userauth is OK
2026-02-15T18:46:06.203 [DEBUG] [Thread-209349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:46:06.203 [DEBUG] [Thread-209349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:46:06.203 [DEBUG] [Thread-209349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:46:06.203 [DEBUG] [Thread-209349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:46:06.222 [INFO] [Thread-209349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:46:06.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:46:06.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:46:07.069 [DEBUG] [Thread-209349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:46:07.070 [DEBUG] [Thread-209349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:46:07.117 [DEBUG] [Thread-209349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:46:07.117 [DEBUG] [Thread-209349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:46:07.126 [DEBUG] [Thread-209349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:46:07.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:46:07.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:46:07.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:46:07.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:46:07.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:46:07.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:46:07.161 [DEBUG] [Thread-209349] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:46:13.875 [DEBUG] [Thread-209351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:18.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:18.770 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:28.925 [DEBUG] [Thread-209352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:37.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:46:37.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:46:37.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:46:39.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 46, 2), 17.96, 30.03, 0.0, 27.88, 19.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:46:39.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:46:02
2026-02-15T18:46:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:46:39.992 [DEBUG] [Thread-209353] [transport.py] [_log()] starting thread (client mode): 0xa2d3c9d0
2026-02-15T18:46:39.992 [DEBUG] [Thread-209353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:46:40.011 [DEBUG] [Thread-209353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:46:40.011 [INFO] [Thread-209353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] client lang: <none>
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] server lang: <none>
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] kex follows: False
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:46:40.015 [DEBUG] [Thread-209353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:46:40.016 [DEBUG] [Thread-209353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:46:40.016 [DEBUG] [Thread-209353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:46:40.016 [DEBUG] [Thread-209353] [transport.py] [_log()] Compression: none
2026-02-15T18:46:40.016 [DEBUG] [Thread-209353] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:46:40.031 [DEBUG] [Thread-209353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:46:40.031 [DEBUG] [Thread-209353] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:46:40.031 [DEBUG] [Thread-209353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:46:40.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:46:40.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:46:40.032 [DEBUG] [Thread-209353] [transport.py] [_log()] userauth is OK
2026-02-15T18:46:40.032 [DEBUG] [Thread-209353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:46:40.032 [DEBUG] [Thread-209353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:46:40.032 [DEBUG] [Thread-209353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:46:40.032 [DEBUG] [Thread-209353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:46:40.049 [INFO] [Thread-209353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:46:40.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:46:40.644 [DEBUG] [Thread-209353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:46:40.644 [DEBUG] [Thread-209353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:46:40.645 [DEBUG] [Thread-209353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:46:40.685 [DEBUG] [Thread-209353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:46:40.686 [DEBUG] [Thread-209353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:46:40.689 [DEBUG] [Thread-209353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:46:40.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:46:40.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:46:40.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:46:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:46:40.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:46:40.711 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:46:40.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:46:40.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:46:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:46:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.698705 -999.00  +19.10  19.58     36   +3.70 1 1 1 1 1   887    0 13.99 -69.71 ----- 16.9 19.6 158.0 33.6 21.4 -27.7 21.4 -26.7 22.4 -26.4 22.6 -28.4
2026-02-15T18:46:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:46:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:46:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.698705
2026-02-15T18:46:40.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:46:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:46:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:46:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:46:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:46:40.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:46:02', tmtdew=17.96, humidity=30.03, cloud=0.0, wind=27.88, temperature=19.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:46:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:46:40.714 [DEBUG] [Thread-209353] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:46:40.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:46:40.811 [DEBUG] [Thread-209356] [transport.py] [_log()] starting thread (client mode): 0xa2d3c370
2026-02-15T18:46:40.811 [DEBUG] [Thread-209356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:46:40.825 [DEBUG] [Thread-209356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:46:40.826 [INFO] [Thread-209356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:40.833 [DEBUG] [Thread-209356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] client lang: <none>
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] server lang: <none>
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] kex follows: False
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] Compression: none
2026-02-15T18:46:40.834 [DEBUG] [Thread-209356] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:46:40.890 [DEBUG] [Thread-209356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:46:40.891 [DEBUG] [Thread-209356] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:46:40.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:46:40.892 [DEBUG] [Thread-209356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:46:40.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:46:40.947 [DEBUG] [Thread-209356] [transport.py] [_log()] userauth is OK
2026-02-15T18:46:40.947 [DEBUG] [Thread-209356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:46:40.947 [DEBUG] [Thread-209356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:46:40.947 [DEBUG] [Thread-209356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:46:40.947 [DEBUG] [Thread-209356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:46:40.966 [INFO] [Thread-209356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:46:40.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:46:40.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:46:41.807 [DEBUG] [Thread-209356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:46:41.808 [DEBUG] [Thread-209356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:46:41.855 [DEBUG] [Thread-209356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:46:41.856 [DEBUG] [Thread-209356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:46:41.865 [DEBUG] [Thread-209356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:46:41.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:46:41.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:46:41.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:46:41.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:46:41.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:46:41.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:46:41.900 [DEBUG] [Thread-209356] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:46:43.967 [DEBUG] [Thread-209358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:46:59.031 [DEBUG] [Thread-209359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:02.904 [DEBUG] [Thread-209360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:11.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:47:11.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:47:11.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:47:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 46, 38), 18.32, 29.47, 0.0, 32.96, 19.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:47:13.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:46:38
2026-02-15T18:47:14.067 [DEBUG] [Thread-209361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:14.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:47:14.477 [DEBUG] [Thread-209362] [transport.py] [_log()] starting thread (client mode): 0xa5743760
2026-02-15T18:47:14.477 [DEBUG] [Thread-209362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:47:14.496 [DEBUG] [Thread-209362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:47:14.496 [INFO] [Thread-209362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] client lang: <none>
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] server lang: <none>
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] kex follows: False
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] Compression: none
2026-02-15T18:47:14.499 [DEBUG] [Thread-209362] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:47:14.517 [DEBUG] [Thread-209362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:47:14.517 [DEBUG] [Thread-209362] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:47:14.518 [DEBUG] [Thread-209362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:47:14.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:47:14.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:47:14.520 [DEBUG] [Thread-209362] [transport.py] [_log()] userauth is OK
2026-02-15T18:47:14.521 [DEBUG] [Thread-209362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:47:14.521 [DEBUG] [Thread-209362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:47:14.521 [DEBUG] [Thread-209362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:47:14.521 [DEBUG] [Thread-209362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:47:14.556 [INFO] [Thread-209362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:47:14.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:47:15.204 [DEBUG] [Thread-209362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:47:15.204 [DEBUG] [Thread-209362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:47:15.205 [DEBUG] [Thread-209362] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:47:15.245 [DEBUG] [Thread-209362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:47:15.246 [DEBUG] [Thread-209362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:47:15.249 [DEBUG] [Thread-209362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:47:15.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:47:15.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:47:15.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:47:15.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:47:15.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:47:15.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:47:15.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:47:15.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:47:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:47:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.699053 -999.00  +19.10  19.55     36   +3.80 1 1 1 1 1   887    0 14.26 -63.95 ----- 23.4 19.6 154.9 25.4 21.2 -28.0 21.4 -27.2 22.2 -26.5 22.5 -28.8
2026-02-15T18:47:15.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:47:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:47:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.699053
2026-02-15T18:47:15.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:47:15.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:47:15.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:47:15.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:47:15.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:47:15.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:46:38', tmtdew=18.32, humidity=29.47, cloud=0.0, wind=32.96, temperature=19.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:46:38.179', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:47:15.278 [DEBUG] [Thread-209362] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:47:15.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:47:15.373 [DEBUG] [Thread-209365] [transport.py] [_log()] starting thread (client mode): 0xa57e3d00
2026-02-15T18:47:15.374 [DEBUG] [Thread-209365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:47:15.388 [DEBUG] [Thread-209365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:47:15.388 [INFO] [Thread-209365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] client lang: <none>
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] server lang: <none>
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] kex follows: False
2026-02-15T18:47:15.396 [DEBUG] [Thread-209365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:47:15.397 [DEBUG] [Thread-209365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:47:15.397 [DEBUG] [Thread-209365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:47:15.397 [DEBUG] [Thread-209365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:47:15.397 [DEBUG] [Thread-209365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:47:15.397 [DEBUG] [Thread-209365] [transport.py] [_log()] Compression: none
2026-02-15T18:47:15.397 [DEBUG] [Thread-209365] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:47:15.454 [DEBUG] [Thread-209365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:47:15.455 [DEBUG] [Thread-209365] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:47:15.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:47:15.456 [DEBUG] [Thread-209365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:47:15.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:47:15.511 [DEBUG] [Thread-209365] [transport.py] [_log()] userauth is OK
2026-02-15T18:47:15.511 [DEBUG] [Thread-209365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:47:15.512 [DEBUG] [Thread-209365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:47:15.512 [DEBUG] [Thread-209365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:47:15.512 [DEBUG] [Thread-209365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:47:15.530 [INFO] [Thread-209365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:47:15.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:47:15.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:47:16.353 [DEBUG] [Thread-209365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:47:16.353 [DEBUG] [Thread-209365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:47:16.401 [DEBUG] [Thread-209365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:47:16.401 [DEBUG] [Thread-209365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:47:16.411 [DEBUG] [Thread-209365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:47:16.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:47:16.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:47:16.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:47:16.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:47:16.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:47:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:47:16.443 [DEBUG] [Thread-209365] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:47:18.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:18.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:29.102 [DEBUG] [Thread-209367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:44.167 [DEBUG] [Thread-209368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:47:46.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:47:46.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:47:46.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:47:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 47, 14), 17.72, 30.82, 0.0, 31.42, 19.25, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:47:48.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:47:14
2026-02-15T18:47:48.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:47:48.784 [DEBUG] [Thread-209369] [transport.py] [_log()] starting thread (client mode): 0xa2d18100
2026-02-15T18:47:48.784 [DEBUG] [Thread-209369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:47:48.804 [DEBUG] [Thread-209369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:47:48.804 [INFO] [Thread-209369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] client lang: <none>
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] server lang: <none>
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] kex follows: False
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] Compression: none
2026-02-15T18:47:48.807 [DEBUG] [Thread-209369] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:47:48.826 [DEBUG] [Thread-209369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:47:48.826 [DEBUG] [Thread-209369] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:47:48.827 [DEBUG] [Thread-209369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:47:48.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:47:48.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:47:48.829 [DEBUG] [Thread-209369] [transport.py] [_log()] userauth is OK
2026-02-15T18:47:48.829 [DEBUG] [Thread-209369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:47:48.829 [DEBUG] [Thread-209369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:47:48.829 [DEBUG] [Thread-209369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:47:48.829 [DEBUG] [Thread-209369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:47:48.844 [INFO] [Thread-209369] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:47:48.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:47:49.456 [DEBUG] [Thread-209369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:47:49.456 [DEBUG] [Thread-209369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:47:49.457 [DEBUG] [Thread-209369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:47:49.497 [DEBUG] [Thread-209369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:47:49.498 [DEBUG] [Thread-209369] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:47:49.501 [DEBUG] [Thread-209369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:47:49.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:47:49.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:47:49.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:47:49.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:47:49.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:47:49.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:47:49.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:47:49.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:47:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:47:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.699400 -999.00  +19.00  23.90     36   +3.90 1 1 1 1 1   887    0 14.00 -63.97 ----- 24.5 23.9 153.6 32.7 21.2 -27.8 21.3 -27.0 22.2 -26.6 22.4 -27.7
2026-02-15T18:47:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:47:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:47:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.699400
2026-02-15T18:47:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:47:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:47:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:47:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:47:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:47:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:47:14', tmtdew=17.72, humidity=30.82, cloud=0.0, wind=31.42, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:47:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:47:49.521 [DEBUG] [Thread-209369] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:47:49.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:47:49.623 [DEBUG] [Thread-209372] [transport.py] [_log()] starting thread (client mode): 0xa5741000
2026-02-15T18:47:49.624 [DEBUG] [Thread-209372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:47:49.639 [DEBUG] [Thread-209372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:47:49.639 [INFO] [Thread-209372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] client lang: <none>
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] server lang: <none>
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] kex follows: False
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:47:49.647 [DEBUG] [Thread-209372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:47:49.648 [DEBUG] [Thread-209372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:47:49.648 [DEBUG] [Thread-209372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:47:49.648 [DEBUG] [Thread-209372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:47:49.648 [DEBUG] [Thread-209372] [transport.py] [_log()] Compression: none
2026-02-15T18:47:49.648 [DEBUG] [Thread-209372] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:47:49.707 [DEBUG] [Thread-209372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:47:49.707 [DEBUG] [Thread-209372] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:47:49.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:47:49.709 [DEBUG] [Thread-209372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:47:49.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:47:49.762 [DEBUG] [Thread-209372] [transport.py] [_log()] userauth is OK
2026-02-15T18:47:49.763 [DEBUG] [Thread-209372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:47:49.763 [DEBUG] [Thread-209372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:47:49.763 [DEBUG] [Thread-209372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:47:49.763 [DEBUG] [Thread-209372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:47:49.782 [INFO] [Thread-209372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:47:49.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:47:49.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:47:50.640 [DEBUG] [Thread-209372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:47:50.640 [DEBUG] [Thread-209372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:47:50.688 [DEBUG] [Thread-209372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:47:50.688 [DEBUG] [Thread-209372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:47:50.698 [DEBUG] [Thread-209372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:47:50.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:47:50.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:47:50.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:47:50.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:47:50.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:47:50.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:47:50.734 [DEBUG] [Thread-209372] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:47:59.201 [DEBUG] [Thread-209374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:02.955 [DEBUG] [Thread-209375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:14.243 [DEBUG] [Thread-209376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:19.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:19.057 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:20.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:48:20.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:48:20.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:48:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 47, 50), 17.57, 30.92, 0.0, 35.24, 19.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:48:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:47:50
2026-02-15T18:48:22.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:48:23.097 [DEBUG] [Thread-209377] [transport.py] [_log()] starting thread (client mode): 0xa57e3eb0
2026-02-15T18:48:23.097 [DEBUG] [Thread-209377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:48:23.116 [DEBUG] [Thread-209377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:48:23.116 [INFO] [Thread-209377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:48:23.119 [DEBUG] [Thread-209377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:48:23.119 [DEBUG] [Thread-209377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:48:23.119 [DEBUG] [Thread-209377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:48:23.119 [DEBUG] [Thread-209377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] client lang: <none>
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] server lang: <none>
2026-02-15T18:48:23.120 [DEBUG] [Thread-209377] [transport.py] [_log()] kex follows: False
2026-02-15T18:48:23.128 [DEBUG] [Thread-209377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:48:23.128 [DEBUG] [Thread-209377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:48:23.129 [DEBUG] [Thread-209377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:48:23.129 [DEBUG] [Thread-209377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:48:23.129 [DEBUG] [Thread-209377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:48:23.129 [DEBUG] [Thread-209377] [transport.py] [_log()] Compression: none
2026-02-15T18:48:23.129 [DEBUG] [Thread-209377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:48:23.148 [DEBUG] [Thread-209377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:48:23.149 [DEBUG] [Thread-209377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:48:23.149 [DEBUG] [Thread-209377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:48:23.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:48:23.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:48:23.151 [DEBUG] [Thread-209377] [transport.py] [_log()] userauth is OK
2026-02-15T18:48:23.151 [DEBUG] [Thread-209377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:48:23.152 [DEBUG] [Thread-209377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:48:23.152 [DEBUG] [Thread-209377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:48:23.152 [DEBUG] [Thread-209377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:48:23.176 [INFO] [Thread-209377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:48:23.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:48:23.971 [DEBUG] [Thread-209377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:48:23.972 [DEBUG] [Thread-209377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:48:23.972 [DEBUG] [Thread-209377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:48:24.013 [DEBUG] [Thread-209377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:48:24.013 [DEBUG] [Thread-209377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:48:24.016 [DEBUG] [Thread-209377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:48:24.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:48:24.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:48:24.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:48:24.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:48:24.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:48:24.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:48:24.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:48:24.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:48:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:48:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.699747 -999.00  +18.90  20.30     36   +3.90 1 1 1 1 1   887    0 14.03 -66.50 ----- 19.7 20.3 149.3 35.4 21.1 -27.7 21.3 -27.1 22.1 -26.3 22.4 -28.2
2026-02-15T18:48:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:48:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:48:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.699747
2026-02-15T18:48:24.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:48:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:48:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:48:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:48:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:48:24.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:47:50', tmtdew=17.57, humidity=30.92, cloud=0.0, wind=35.24, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:47:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:48:24.043 [DEBUG] [Thread-209377] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:48:24.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:48:24.140 [DEBUG] [Thread-209380] [transport.py] [_log()] starting thread (client mode): 0xa57d57e0
2026-02-15T18:48:24.140 [DEBUG] [Thread-209380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:48:24.154 [DEBUG] [Thread-209380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:48:24.154 [INFO] [Thread-209380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:48:24.162 [DEBUG] [Thread-209380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:48:24.162 [DEBUG] [Thread-209380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:48:24.162 [DEBUG] [Thread-209380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:48:24.162 [DEBUG] [Thread-209380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:24.162 [DEBUG] [Thread-209380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:24.162 [DEBUG] [Thread-209380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] client lang: <none>
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] server lang: <none>
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] kex follows: False
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] Compression: none
2026-02-15T18:48:24.163 [DEBUG] [Thread-209380] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:48:24.222 [DEBUG] [Thread-209380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:48:24.223 [DEBUG] [Thread-209380] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:48:24.224 [DEBUG] [Thread-209380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:48:24.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:48:24.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:48:24.280 [DEBUG] [Thread-209380] [transport.py] [_log()] userauth is OK
2026-02-15T18:48:24.280 [DEBUG] [Thread-209380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:48:24.280 [DEBUG] [Thread-209380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:48:24.280 [DEBUG] [Thread-209380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:48:24.281 [DEBUG] [Thread-209380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:48:24.299 [INFO] [Thread-209380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:48:24.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:48:24.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:48:25.147 [DEBUG] [Thread-209380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:48:25.147 [DEBUG] [Thread-209380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:48:25.195 [DEBUG] [Thread-209380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:48:25.196 [DEBUG] [Thread-209380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:48:25.205 [DEBUG] [Thread-209380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:48:25.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:48:25.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:48:25.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:48:25.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:48:25.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:48:25.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:48:25.241 [DEBUG] [Thread-209380] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:48:29.281 [DEBUG] [Thread-209382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:44.331 [DEBUG] [Thread-209383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:55.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:48:55.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:48:55.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:48:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 48, 25), 17.59, 30.88, 0.0, 32.34, 19.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:48:57.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:48:25
2026-02-15T18:48:57.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:48:58.019 [DEBUG] [Thread-209384] [transport.py] [_log()] starting thread (client mode): 0xa57d4670
2026-02-15T18:48:58.019 [DEBUG] [Thread-209384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:48:58.039 [DEBUG] [Thread-209384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:48:58.039 [INFO] [Thread-209384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:48:58.043 [DEBUG] [Thread-209384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:48:58.043 [DEBUG] [Thread-209384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:48:58.043 [DEBUG] [Thread-209384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:48:58.043 [DEBUG] [Thread-209384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:58.043 [DEBUG] [Thread-209384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] client lang: <none>
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] server lang: <none>
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] kex follows: False
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] Compression: none
2026-02-15T18:48:58.044 [DEBUG] [Thread-209384] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:48:58.059 [DEBUG] [Thread-209384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:48:58.060 [DEBUG] [Thread-209384] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:48:58.060 [DEBUG] [Thread-209384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:48:58.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:48:58.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:48:58.062 [DEBUG] [Thread-209384] [transport.py] [_log()] userauth is OK
2026-02-15T18:48:58.062 [DEBUG] [Thread-209384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:48:58.062 [DEBUG] [Thread-209384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:48:58.062 [DEBUG] [Thread-209384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:48:58.063 [DEBUG] [Thread-209384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:48:58.088 [INFO] [Thread-209384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:48:58.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:48:58.724 [DEBUG] [Thread-209384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:48:58.725 [DEBUG] [Thread-209384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:48:58.725 [DEBUG] [Thread-209384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:48:58.766 [DEBUG] [Thread-209384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:48:58.766 [DEBUG] [Thread-209384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:48:58.769 [DEBUG] [Thread-209384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:48:58.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:48:58.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:48:58.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:48:58.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:48:58.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:48:58.792 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:48:58.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:48:58.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:48:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:48:58.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.700094 -999.00  +18.90  24.11     36   +3.80 1 1 1 1 1   887    0 14.08 -67.77 ----- 20.2 24.1 142.2 33.7 21.1 -28.0 21.3 -26.8 22.1 -26.2 22.4 -28.5
2026-02-15T18:48:58.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:48:58.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:48:58.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.700094
2026-02-15T18:48:58.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:48:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:48:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:48:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:48:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:48:58.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:48:25', tmtdew=17.59, humidity=30.88, cloud=0.0, wind=32.34, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:48:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:48:58.795 [DEBUG] [Thread-209384] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:48:58.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:48:58.891 [DEBUG] [Thread-209387] [transport.py] [_log()] starting thread (client mode): 0xa57d50f0
2026-02-15T18:48:58.891 [DEBUG] [Thread-209387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:48:58.906 [DEBUG] [Thread-209387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:48:58.906 [INFO] [Thread-209387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] client lang: <none>
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] server lang: <none>
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] kex follows: False
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:48:58.914 [DEBUG] [Thread-209387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:48:58.915 [DEBUG] [Thread-209387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:48:58.915 [DEBUG] [Thread-209387] [transport.py] [_log()] Compression: none
2026-02-15T18:48:58.915 [DEBUG] [Thread-209387] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:48:58.974 [DEBUG] [Thread-209387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:48:58.975 [DEBUG] [Thread-209387] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:48:58.976 [DEBUG] [Thread-209387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:48:58.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:48:58.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:48:59.034 [DEBUG] [Thread-209387] [transport.py] [_log()] userauth is OK
2026-02-15T18:48:59.035 [DEBUG] [Thread-209387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:48:59.035 [DEBUG] [Thread-209387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:48:59.035 [DEBUG] [Thread-209387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:48:59.035 [DEBUG] [Thread-209387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:48:59.053 [INFO] [Thread-209387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:48:59.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:48:59.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:48:59.365 [DEBUG] [Thread-209389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:48:59.862 [DEBUG] [Thread-209387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:48:59.863 [DEBUG] [Thread-209387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:48:59.910 [DEBUG] [Thread-209387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:48:59.911 [DEBUG] [Thread-209387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:48:59.920 [DEBUG] [Thread-209387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:48:59.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:48:59.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:48:59.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:48:59.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:48:59.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:48:59.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:48:59.956 [DEBUG] [Thread-209387] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:49:02.996 [DEBUG] [Thread-209390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:49:14.416 [DEBUG] [Thread-209391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:49:19.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:49:19.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:49:29.453 [DEBUG] [Thread-209392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:49:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:49:29.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:49:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:49:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 48, 25), 17.64, 30.88, 0.0, 30.54, 19.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:49:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:48:25
2026-02-15T18:49:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:49:32.522 [DEBUG] [Thread-209393] [transport.py] [_log()] starting thread (client mode): 0xa57b3340
2026-02-15T18:49:32.522 [DEBUG] [Thread-209393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:49:32.543 [DEBUG] [Thread-209393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:49:32.543 [INFO] [Thread-209393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] client lang: <none>
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] server lang: <none>
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] kex follows: False
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] Compression: none
2026-02-15T18:49:32.546 [DEBUG] [Thread-209393] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:49:32.565 [DEBUG] [Thread-209393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:49:32.565 [DEBUG] [Thread-209393] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:49:32.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:49:32.566 [DEBUG] [Thread-209393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:49:32.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:49:32.568 [DEBUG] [Thread-209393] [transport.py] [_log()] userauth is OK
2026-02-15T18:49:32.569 [DEBUG] [Thread-209393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:49:32.569 [DEBUG] [Thread-209393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:49:32.569 [DEBUG] [Thread-209393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:49:32.569 [DEBUG] [Thread-209393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:49:32.593 [INFO] [Thread-209393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:49:32.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:49:33.216 [DEBUG] [Thread-209393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:49:33.216 [DEBUG] [Thread-209393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:49:33.217 [DEBUG] [Thread-209393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:49:33.257 [DEBUG] [Thread-209393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:49:33.258 [DEBUG] [Thread-209393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:49:33.260 [DEBUG] [Thread-209393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:49:33.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:49:33.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:49:33.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:49:33.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:49:33.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:49:33.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:49:33.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:49:33.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:49:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:49:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.700441 -999.00  +18.90  21.77     36   +3.80 1 1 1 1 1   887    0 14.00 -73.60 ----- 24.4 21.8 143.6 26.2 21.1 -27.6 21.2 -26.8 22.1 -25.7 22.4 -27.8
2026-02-15T18:49:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:49:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:49:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.700441
2026-02-15T18:49:33.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:49:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:49:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:49:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:49:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:49:33.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:48:25', tmtdew=17.64, humidity=30.88, cloud=0.0, wind=30.54, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:48:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:49:33.285 [DEBUG] [Thread-209393] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:49:33.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:49:33.384 [DEBUG] [Thread-209396] [transport.py] [_log()] starting thread (client mode): 0xa57b1fc0
2026-02-15T18:49:33.384 [DEBUG] [Thread-209396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:49:33.401 [DEBUG] [Thread-209396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:49:33.401 [INFO] [Thread-209396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:49:33.409 [DEBUG] [Thread-209396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] client lang: <none>
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] server lang: <none>
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] kex follows: False
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] Compression: none
2026-02-15T18:49:33.410 [DEBUG] [Thread-209396] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:49:33.467 [DEBUG] [Thread-209396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:49:33.468 [DEBUG] [Thread-209396] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:49:33.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:49:33.469 [DEBUG] [Thread-209396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:49:33.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:49:33.522 [DEBUG] [Thread-209396] [transport.py] [_log()] userauth is OK
2026-02-15T18:49:33.523 [DEBUG] [Thread-209396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:49:33.523 [DEBUG] [Thread-209396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:49:33.523 [DEBUG] [Thread-209396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:49:33.523 [DEBUG] [Thread-209396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:49:33.547 [INFO] [Thread-209396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:49:33.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:49:33.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:49:34.455 [DEBUG] [Thread-209396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:49:34.455 [DEBUG] [Thread-209396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:49:34.503 [DEBUG] [Thread-209396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:49:34.504 [DEBUG] [Thread-209396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:49:34.513 [DEBUG] [Thread-209396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:49:34.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:49:34.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:49:34.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:49:34.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:49:34.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:49:34.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:49:34.548 [DEBUG] [Thread-209396] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:49:44.491 [DEBUG] [Thread-209398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:49:59.551 [DEBUG] [Thread-209399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:03.040 [DEBUG] [Thread-209400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:50:04.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:50:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:50:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 49, 36), 18.14, 29.83, 0.0, 32.5, 19.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:50:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:49:36
2026-02-15T18:50:06.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:50:06.841 [DEBUG] [Thread-209401] [transport.py] [_log()] starting thread (client mode): 0xa2d3db40
2026-02-15T18:50:06.841 [DEBUG] [Thread-209401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:50:06.862 [DEBUG] [Thread-209401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:50:06.862 [INFO] [Thread-209401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] client lang: <none>
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] server lang: <none>
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] kex follows: False
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:50:06.865 [DEBUG] [Thread-209401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:50:06.866 [DEBUG] [Thread-209401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:50:06.866 [DEBUG] [Thread-209401] [transport.py] [_log()] Compression: none
2026-02-15T18:50:06.866 [DEBUG] [Thread-209401] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:50:06.882 [DEBUG] [Thread-209401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:50:06.883 [DEBUG] [Thread-209401] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:50:06.884 [DEBUG] [Thread-209401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:50:06.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:50:06.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:50:06.886 [DEBUG] [Thread-209401] [transport.py] [_log()] userauth is OK
2026-02-15T18:50:06.886 [DEBUG] [Thread-209401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:50:06.886 [DEBUG] [Thread-209401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:50:06.886 [DEBUG] [Thread-209401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:50:06.886 [DEBUG] [Thread-209401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:50:06.905 [INFO] [Thread-209401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:50:06.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:50:14.496 [DEBUG] [Thread-209401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:50:14.496 [DEBUG] [Thread-209401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:50:14.496 [DEBUG] [Thread-209401] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:50:14.537 [DEBUG] [Thread-209401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:50:14.538 [DEBUG] [Thread-209401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:50:14.540 [DEBUG] [Thread-209401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:50:14.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:50:14.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:50:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:50:14.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:50:14.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:50:14.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:50:14.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:50:14.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:50:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:50:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.701136 -999.00  +18.90  23.62     36   +3.80 1 1 1 1 1   887    0 13.88 -71.48 ----- 20.0 23.6 150.0 30.8 21.0 -27.5 21.2 -27.0 22.0 -26.1 22.2 -28.4
2026-02-15T18:50:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:50:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:50:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.701136
2026-02-15T18:50:14.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:50:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:50:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:50:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:50:14.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:50:14.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:49:36', tmtdew=18.14, humidity=29.83, cloud=0.0, wind=32.5, temperature=19.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:49:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:50:14.583 [DEBUG] [Thread-209401] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:50:14.586 [DEBUG] [Thread-209404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:14.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:50:14.677 [DEBUG] [Thread-209405] [transport.py] [_log()] starting thread (client mode): 0xa2d3df00
2026-02-15T18:50:14.677 [DEBUG] [Thread-209405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:50:14.691 [DEBUG] [Thread-209405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:50:14.691 [INFO] [Thread-209405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:50:14.698 [DEBUG] [Thread-209405] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] client lang: <none>
2026-02-15T18:50:14.699 [DEBUG] [Thread-209405] [transport.py] [_log()] server lang: <none>
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] kex follows: False
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] Compression: none
2026-02-15T18:50:14.700 [DEBUG] [Thread-209405] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:50:14.759 [DEBUG] [Thread-209405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:50:14.760 [DEBUG] [Thread-209405] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:50:14.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:50:14.761 [DEBUG] [Thread-209405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:50:14.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:50:14.815 [DEBUG] [Thread-209405] [transport.py] [_log()] userauth is OK
2026-02-15T18:50:14.815 [DEBUG] [Thread-209405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:50:14.815 [DEBUG] [Thread-209405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:50:14.815 [DEBUG] [Thread-209405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:50:14.815 [DEBUG] [Thread-209405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:50:14.834 [INFO] [Thread-209405] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:50:14.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:50:14.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:50:15.650 [DEBUG] [Thread-209405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:50:15.650 [DEBUG] [Thread-209405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:50:15.698 [DEBUG] [Thread-209405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:50:15.698 [DEBUG] [Thread-209405] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:50:15.708 [DEBUG] [Thread-209405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:50:15.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:50:15.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:50:15.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:50:15.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:50:15.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:50:15.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:50:15.744 [DEBUG] [Thread-209405] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:50:19.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:19.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:29.635 [DEBUG] [Thread-209407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:44.670 [DEBUG] [Thread-209408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:50:45.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:50:45.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:50:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:50:47.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 50, 11), 17.57, 30.92, 0.0, 34.78, 19.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:50:47.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:50:11
2026-02-15T18:50:47.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:50:48.137 [DEBUG] [Thread-209409] [transport.py] [_log()] starting thread (client mode): 0xa57e3340
2026-02-15T18:50:48.137 [DEBUG] [Thread-209409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:50:48.157 [DEBUG] [Thread-209409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:50:48.157 [INFO] [Thread-209409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] client lang: <none>
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] server lang: <none>
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] kex follows: False
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:50:48.160 [DEBUG] [Thread-209409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:50:48.161 [DEBUG] [Thread-209409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:50:48.161 [DEBUG] [Thread-209409] [transport.py] [_log()] Compression: none
2026-02-15T18:50:48.161 [DEBUG] [Thread-209409] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:50:48.178 [DEBUG] [Thread-209409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:50:48.178 [DEBUG] [Thread-209409] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:50:48.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:50:48.179 [DEBUG] [Thread-209409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:50:48.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:50:48.181 [DEBUG] [Thread-209409] [transport.py] [_log()] userauth is OK
2026-02-15T18:50:48.181 [DEBUG] [Thread-209409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:50:48.181 [DEBUG] [Thread-209409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:50:48.182 [DEBUG] [Thread-209409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:50:48.182 [DEBUG] [Thread-209409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:50:48.208 [INFO] [Thread-209409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:50:48.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:50:48.859 [DEBUG] [Thread-209409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:50:48.860 [DEBUG] [Thread-209409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:50:48.860 [DEBUG] [Thread-209409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:50:48.900 [DEBUG] [Thread-209409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:50:48.900 [DEBUG] [Thread-209409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:50:48.904 [DEBUG] [Thread-209409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:50:48.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:50:48.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:50:48.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:50:48.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:50:48.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:50:48.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:50:48.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:50:48.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:50:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:50:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.701482 -999.00  +18.90  19.68     36   +3.80 1 1 1 1 1   887    0 13.53 -72.63 ----- 19.6 19.7 162.8 33.8 21.0 -27.6 21.1 -26.6 21.9 -26.1 22.2 -27.8
2026-02-15T18:50:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:50:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:50:48.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.701482
2026-02-15T18:50:48.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:50:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:50:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:50:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:50:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:50:48.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:50:11', tmtdew=17.57, humidity=30.92, cloud=0.0, wind=34.78, temperature=19.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:50:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:50:48.931 [DEBUG] [Thread-209409] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:50:49.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:50:49.025 [DEBUG] [Thread-209412] [transport.py] [_log()] starting thread (client mode): 0xa2d187c0
2026-02-15T18:50:49.025 [DEBUG] [Thread-209412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:50:49.039 [DEBUG] [Thread-209412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:50:49.040 [INFO] [Thread-209412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:50:49.047 [DEBUG] [Thread-209412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] client lang: <none>
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] server lang: <none>
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] kex follows: False
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:50:49.048 [DEBUG] [Thread-209412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:50:49.049 [DEBUG] [Thread-209412] [transport.py] [_log()] Compression: none
2026-02-15T18:50:49.049 [DEBUG] [Thread-209412] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:50:49.111 [DEBUG] [Thread-209412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:50:49.112 [DEBUG] [Thread-209412] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:50:49.112 [DEBUG] [Thread-209412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:50:49.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:50:49.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:50:49.167 [DEBUG] [Thread-209412] [transport.py] [_log()] userauth is OK
2026-02-15T18:50:49.167 [DEBUG] [Thread-209412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:50:49.167 [DEBUG] [Thread-209412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:50:49.167 [DEBUG] [Thread-209412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:50:49.168 [DEBUG] [Thread-209412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:50:49.186 [INFO] [Thread-209412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:50:49.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:50:49.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:50:50.006 [DEBUG] [Thread-209412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:50:50.006 [DEBUG] [Thread-209412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:50:50.054 [DEBUG] [Thread-209412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:50:50.055 [DEBUG] [Thread-209412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:50:50.064 [DEBUG] [Thread-209412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:50:50.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:50:50.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:50:50.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:50:50.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:50:50.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:50:50.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:50:50.100 [DEBUG] [Thread-209412] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:50:59.708 [DEBUG] [Thread-209414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:03.082 [DEBUG] [Thread-209415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:14.774 [DEBUG] [Thread-209416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:19.503 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:19.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:20.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:51:20.123 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:51:20.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:51:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 50, 47), 17.61, 30.93, 0.0, 31.25, 19.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:51:22.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:50:47
2026-02-15T18:51:22.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:51:23.114 [DEBUG] [Thread-209417] [transport.py] [_log()] starting thread (client mode): 0xa57d4880
2026-02-15T18:51:23.114 [DEBUG] [Thread-209417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:51:23.134 [DEBUG] [Thread-209417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:51:23.134 [INFO] [Thread-209417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:51:23.137 [DEBUG] [Thread-209417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] client lang: <none>
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] server lang: <none>
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] kex follows: False
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] Compression: none
2026-02-15T18:51:23.138 [DEBUG] [Thread-209417] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:51:23.156 [DEBUG] [Thread-209417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:51:23.156 [DEBUG] [Thread-209417] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:51:23.157 [DEBUG] [Thread-209417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:51:23.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:51:23.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:51:23.159 [DEBUG] [Thread-209417] [transport.py] [_log()] userauth is OK
2026-02-15T18:51:23.159 [DEBUG] [Thread-209417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:51:23.159 [DEBUG] [Thread-209417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:51:23.159 [DEBUG] [Thread-209417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:51:23.159 [DEBUG] [Thread-209417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:51:23.194 [INFO] [Thread-209417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:51:23.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:51:23.846 [DEBUG] [Thread-209417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:51:23.846 [DEBUG] [Thread-209417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:51:23.846 [DEBUG] [Thread-209417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:51:23.887 [DEBUG] [Thread-209417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:51:23.888 [DEBUG] [Thread-209417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:51:23.891 [DEBUG] [Thread-209417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:51:23.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:51:23.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:51:23.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:51:23.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:51:23.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:51:23.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:51:23.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:51:23.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:51:23.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:51:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.701830 -999.00  +18.90  18.22     36   +3.90 1 1 1 1 1   887    0 13.72 -69.22 ----- 19.2 18.2 149.0 27.0 21.0 -27.6 21.1 -26.8 21.9 -25.9 22.2 -27.9
2026-02-15T18:51:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:51:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:51:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.701830
2026-02-15T18:51:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:51:23.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:51:23.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:51:23.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:51:23.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:51:23.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:50:47', tmtdew=17.61, humidity=30.93, cloud=0.0, wind=31.25, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:50:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:51:23.915 [DEBUG] [Thread-209417] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:51:24.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:51:24.011 [DEBUG] [Thread-209420] [transport.py] [_log()] starting thread (client mode): 0xa2d57100
2026-02-15T18:51:24.011 [DEBUG] [Thread-209420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:51:24.026 [DEBUG] [Thread-209420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:51:24.026 [INFO] [Thread-209420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:51:24.034 [DEBUG] [Thread-209420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:51:24.034 [DEBUG] [Thread-209420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:51:24.034 [DEBUG] [Thread-209420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] client lang: <none>
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] server lang: <none>
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] kex follows: False
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] Compression: none
2026-02-15T18:51:24.035 [DEBUG] [Thread-209420] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:51:24.090 [DEBUG] [Thread-209420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:51:24.091 [DEBUG] [Thread-209420] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:51:24.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:51:24.092 [DEBUG] [Thread-209420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:51:24.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:51:24.147 [DEBUG] [Thread-209420] [transport.py] [_log()] userauth is OK
2026-02-15T18:51:24.147 [DEBUG] [Thread-209420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:51:24.148 [DEBUG] [Thread-209420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:51:24.148 [DEBUG] [Thread-209420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:51:24.148 [DEBUG] [Thread-209420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:51:24.167 [INFO] [Thread-209420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:51:24.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:51:24.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:51:24.996 [DEBUG] [Thread-209420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:51:24.996 [DEBUG] [Thread-209420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:51:25.044 [DEBUG] [Thread-209420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:51:25.044 [DEBUG] [Thread-209420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:51:25.053 [DEBUG] [Thread-209420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:51:25.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:51:25.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:51:25.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:51:25.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:51:25.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:51:25.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:51:25.087 [DEBUG] [Thread-209420] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:51:29.813 [DEBUG] [Thread-209422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:44.863 [DEBUG] [Thread-209423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:51:55.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:51:55.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:51:55.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:51:56.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 51, 23), 17.61, 30.93, 0.0, 33.01, 19.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:51:56.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:51:23
2026-02-15T18:51:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:51:57.502 [DEBUG] [Thread-209424] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-15T18:51:57.502 [DEBUG] [Thread-209424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:51:57.522 [DEBUG] [Thread-209424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:51:57.522 [INFO] [Thread-209424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:51:57.525 [DEBUG] [Thread-209424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:51:57.525 [DEBUG] [Thread-209424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] client lang: <none>
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] server lang: <none>
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] kex follows: False
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] Compression: none
2026-02-15T18:51:57.526 [DEBUG] [Thread-209424] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:51:57.543 [DEBUG] [Thread-209424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:51:57.544 [DEBUG] [Thread-209424] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:51:57.544 [DEBUG] [Thread-209424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:51:57.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:51:57.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:51:57.546 [DEBUG] [Thread-209424] [transport.py] [_log()] userauth is OK
2026-02-15T18:51:57.546 [DEBUG] [Thread-209424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:51:57.547 [DEBUG] [Thread-209424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:51:57.547 [DEBUG] [Thread-209424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:51:57.547 [DEBUG] [Thread-209424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:51:57.571 [INFO] [Thread-209424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:51:57.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:51:58.148 [DEBUG] [Thread-209424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:51:58.148 [DEBUG] [Thread-209424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:51:58.148 [DEBUG] [Thread-209424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:51:58.189 [DEBUG] [Thread-209424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:51:58.189 [DEBUG] [Thread-209424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:51:58.191 [DEBUG] [Thread-209424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:51:58.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:51:58.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:51:58.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:51:58.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:51:58.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:51:58.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:51:58.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:51:58.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:51:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:51:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.702525 -999.00  +19.00  18.38     37   +3.90 1 1 1 1 1   887    0 13.69 -68.12 ----- 15.9 18.4 157.2 23.4 21.0 -27.5 21.1 -26.4 21.8 -25.8 22.1 -27.8
2026-02-15T18:51:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:51:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:51:58.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.702525
2026-02-15T18:51:58.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:51:58.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:51:58.211 [DEBUG] [Thread-209424] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:51:58.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:51:58.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:51:58.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:51:58.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:51:23', tmtdew=17.61, humidity=30.93, cloud=0.0, wind=33.01, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:51:38.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:51:58.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:51:58.298 [DEBUG] [Thread-209427] [transport.py] [_log()] starting thread (client mode): 0xa2d544f0
2026-02-15T18:51:58.298 [DEBUG] [Thread-209427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:51:58.313 [DEBUG] [Thread-209427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:51:58.313 [INFO] [Thread-209427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] client lang: <none>
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] server lang: <none>
2026-02-15T18:51:58.320 [DEBUG] [Thread-209427] [transport.py] [_log()] kex follows: False
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] Compression: none
2026-02-15T18:51:58.321 [DEBUG] [Thread-209427] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:51:58.377 [DEBUG] [Thread-209427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:51:58.377 [DEBUG] [Thread-209427] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:51:58.377 [DEBUG] [Thread-209427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:51:58.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:51:58.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:51:58.434 [DEBUG] [Thread-209427] [transport.py] [_log()] userauth is OK
2026-02-15T18:51:58.434 [DEBUG] [Thread-209427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:51:58.434 [DEBUG] [Thread-209427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:51:58.434 [DEBUG] [Thread-209427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:51:58.434 [DEBUG] [Thread-209427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:51:58.448 [INFO] [Thread-209427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:51:58.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:51:58.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:51:59.286 [DEBUG] [Thread-209427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:51:59.286 [DEBUG] [Thread-209427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:51:59.333 [DEBUG] [Thread-209427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:51:59.334 [DEBUG] [Thread-209427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:51:59.343 [DEBUG] [Thread-209427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:51:59.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:51:59.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:51:59.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:51:59.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:51:59.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:51:59.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:51:59.379 [DEBUG] [Thread-209427] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:51:59.900 [DEBUG] [Thread-209429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:52:03.123 [DEBUG] [Thread-209430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:52:14.951 [DEBUG] [Thread-209431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:52:19.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:52:19.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:52:29.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:52:29.402 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:52:29.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:52:29.989 [DEBUG] [Thread-209432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:52:31.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 51, 59), 17.42, 31.13, 0.0, 30.31, 19.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:52:31.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:51:59
2026-02-15T18:52:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:52:31.773 [DEBUG] [Thread-209433] [transport.py] [_log()] starting thread (client mode): 0xa57d5a80
2026-02-15T18:52:31.773 [DEBUG] [Thread-209433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:52:31.795 [DEBUG] [Thread-209433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:52:31.795 [INFO] [Thread-209433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:52:31.796 [DEBUG] [Thread-209433] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] client lang: <none>
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] server lang: <none>
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] kex follows: False
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:52:31.797 [DEBUG] [Thread-209433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:52:31.798 [DEBUG] [Thread-209433] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:52:31.798 [DEBUG] [Thread-209433] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:52:31.798 [DEBUG] [Thread-209433] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:52:31.798 [DEBUG] [Thread-209433] [transport.py] [_log()] Compression: none
2026-02-15T18:52:31.798 [DEBUG] [Thread-209433] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:52:31.808 [DEBUG] [Thread-209433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:52:31.808 [DEBUG] [Thread-209433] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:52:31.809 [DEBUG] [Thread-209433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:52:31.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:52:31.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:52:31.810 [DEBUG] [Thread-209433] [transport.py] [_log()] userauth is OK
2026-02-15T18:52:31.810 [DEBUG] [Thread-209433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:52:31.810 [DEBUG] [Thread-209433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:52:31.810 [DEBUG] [Thread-209433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:52:31.810 [DEBUG] [Thread-209433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:52:31.830 [INFO] [Thread-209433] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:52:31.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:52:32.413 [DEBUG] [Thread-209433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:52:32.414 [DEBUG] [Thread-209433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:52:32.414 [DEBUG] [Thread-209433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:52:32.454 [DEBUG] [Thread-209433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:52:32.454 [DEBUG] [Thread-209433] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:52:32.457 [DEBUG] [Thread-209433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:52:32.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:52:32.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:52:32.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:52:32.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:52:32.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:52:32.483 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:52:32.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:52:32.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:52:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:52:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.702872 -999.00  +19.00  19.65     37   +4.00 1 1 1 1 1   887    0 13.47 -72.46 ----- 21.3 19.6 151.8 32.8 20.9 -27.7 21.0 -26.7 21.8 -25.6 22.1 -28.4
2026-02-15T18:52:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:52:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:52:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.702872
2026-02-15T18:52:32.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:52:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:52:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:52:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:52:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:52:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:51:59', tmtdew=17.42, humidity=31.13, cloud=0.0, wind=30.31, temperature=19.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:52:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:52:32.486 [DEBUG] [Thread-209433] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:52:32.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:52:32.583 [DEBUG] [Thread-209436] [transport.py] [_log()] starting thread (client mode): 0xa2d56830
2026-02-15T18:52:32.583 [DEBUG] [Thread-209436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:52:32.602 [DEBUG] [Thread-209436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:52:32.602 [INFO] [Thread-209436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:52:32.610 [DEBUG] [Thread-209436] [transport.py] [_log()] client lang: <none>
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] server lang: <none>
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] kex follows: False
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] Compression: none
2026-02-15T18:52:32.611 [DEBUG] [Thread-209436] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:52:32.671 [DEBUG] [Thread-209436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:52:32.672 [DEBUG] [Thread-209436] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:52:32.672 [DEBUG] [Thread-209436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:52:32.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:52:32.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:52:32.727 [DEBUG] [Thread-209436] [transport.py] [_log()] userauth is OK
2026-02-15T18:52:32.727 [DEBUG] [Thread-209436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:52:32.728 [DEBUG] [Thread-209436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:52:32.728 [DEBUG] [Thread-209436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:52:32.728 [DEBUG] [Thread-209436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:52:32.746 [INFO] [Thread-209436] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:52:32.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:52:32.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:52:33.592 [DEBUG] [Thread-209436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:52:33.592 [DEBUG] [Thread-209436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:52:33.640 [DEBUG] [Thread-209436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:52:33.641 [DEBUG] [Thread-209436] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:52:33.649 [DEBUG] [Thread-209436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:52:33.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:52:33.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:52:33.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:52:33.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:52:33.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:52:33.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:52:33.686 [DEBUG] [Thread-209436] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:52:45.025 [DEBUG] [Thread-209438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:00.067 [DEBUG] [Thread-209439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:03.172 [DEBUG] [Thread-209440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:03.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:53:03.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:53:03.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:53:06.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 52, 35), 17.95, 30.23, 0.0, 36.27, 19.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:53:06.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:52:35
2026-02-15T18:53:06.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:53:06.749 [DEBUG] [Thread-209441] [transport.py] [_log()] starting thread (client mode): 0xa57d6bc0
2026-02-15T18:53:06.749 [DEBUG] [Thread-209441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:53:06.769 [DEBUG] [Thread-209441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:53:06.769 [INFO] [Thread-209441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] client lang: <none>
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] server lang: <none>
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] kex follows: False
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] Compression: none
2026-02-15T18:53:06.772 [DEBUG] [Thread-209441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:53:06.788 [DEBUG] [Thread-209441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:53:06.788 [DEBUG] [Thread-209441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:53:06.788 [DEBUG] [Thread-209441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:53:06.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:53:06.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:53:06.790 [DEBUG] [Thread-209441] [transport.py] [_log()] userauth is OK
2026-02-15T18:53:06.790 [DEBUG] [Thread-209441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:53:06.790 [DEBUG] [Thread-209441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:53:06.790 [DEBUG] [Thread-209441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:53:06.790 [DEBUG] [Thread-209441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:53:06.805 [INFO] [Thread-209441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:53:06.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:53:07.450 [DEBUG] [Thread-209441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:53:07.451 [DEBUG] [Thread-209441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:53:07.451 [DEBUG] [Thread-209441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:53:07.491 [DEBUG] [Thread-209441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:53:07.491 [DEBUG] [Thread-209441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:53:07.494 [DEBUG] [Thread-209441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:53:07.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:53:07.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:53:07.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:53:07.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:53:07.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:53:07.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:53:07.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:53:07.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:53:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:53:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.703219 -999.00  +18.90  20.30     37   +4.00 1 1 1 1 1   887    0 13.53 -70.66 ----- 25.3 20.3 164.8 28.5 20.9 -27.6 21.0 -26.5 21.8 -26.2 22.1 -28.4
2026-02-15T18:53:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:53:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:53:07.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.703219
2026-02-15T18:53:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:53:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:53:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:53:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:53:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:53:07.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:52:35', tmtdew=17.95, humidity=30.23, cloud=0.0, wind=36.27, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:52:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:53:07.523 [DEBUG] [Thread-209441] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:53:07.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:53:07.619 [DEBUG] [Thread-209444] [transport.py] [_log()] starting thread (client mode): 0xa57d5b10
2026-02-15T18:53:07.620 [DEBUG] [Thread-209444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:53:07.636 [DEBUG] [Thread-209444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:53:07.636 [INFO] [Thread-209444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:53:07.644 [DEBUG] [Thread-209444] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:53:07.644 [DEBUG] [Thread-209444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:53:07.644 [DEBUG] [Thread-209444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:53:07.644 [DEBUG] [Thread-209444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:53:07.644 [DEBUG] [Thread-209444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] client lang: <none>
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] server lang: <none>
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] kex follows: False
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] Compression: none
2026-02-15T18:53:07.645 [DEBUG] [Thread-209444] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:53:07.703 [DEBUG] [Thread-209444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:53:07.703 [DEBUG] [Thread-209444] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:53:07.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:53:07.705 [DEBUG] [Thread-209444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:53:07.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:53:07.759 [DEBUG] [Thread-209444] [transport.py] [_log()] userauth is OK
2026-02-15T18:53:07.759 [DEBUG] [Thread-209444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:53:07.760 [DEBUG] [Thread-209444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:53:07.760 [DEBUG] [Thread-209444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:53:07.760 [DEBUG] [Thread-209444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:53:07.784 [INFO] [Thread-209444] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:53:07.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:53:07.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:53:08.654 [DEBUG] [Thread-209444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:53:08.654 [DEBUG] [Thread-209444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:53:08.702 [DEBUG] [Thread-209444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:53:08.703 [DEBUG] [Thread-209444] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:53:08.712 [DEBUG] [Thread-209444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:53:08.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:53:08.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:53:08.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:53:08.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:53:08.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:53:08.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:53:08.748 [DEBUG] [Thread-209444] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:53:15.102 [DEBUG] [Thread-209446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:19.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:19.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:30.143 [DEBUG] [Thread-209447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:53:38.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:53:38.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:53:38.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:53:40.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 53, 10), 17.25, 31.76, 0.0, 30.79, 19.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:53:40.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:53:10
2026-02-15T18:53:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:53:41.073 [DEBUG] [Thread-209448] [transport.py] [_log()] starting thread (client mode): 0xa57d6e00
2026-02-15T18:53:41.073 [DEBUG] [Thread-209448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:53:41.092 [DEBUG] [Thread-209448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:53:41.093 [INFO] [Thread-209448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:53:41.096 [DEBUG] [Thread-209448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] client lang: <none>
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] server lang: <none>
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] kex follows: False
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] Compression: none
2026-02-15T18:53:41.097 [DEBUG] [Thread-209448] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:53:41.115 [DEBUG] [Thread-209448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:53:41.115 [DEBUG] [Thread-209448] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:53:41.116 [DEBUG] [Thread-209448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:53:41.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:53:41.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:53:41.118 [DEBUG] [Thread-209448] [transport.py] [_log()] userauth is OK
2026-02-15T18:53:41.118 [DEBUG] [Thread-209448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:53:41.118 [DEBUG] [Thread-209448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:53:41.118 [DEBUG] [Thread-209448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:53:41.118 [DEBUG] [Thread-209448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:53:41.143 [INFO] [Thread-209448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:53:41.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:53:41.774 [DEBUG] [Thread-209448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:53:41.774 [DEBUG] [Thread-209448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:53:41.775 [DEBUG] [Thread-209448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:53:41.815 [DEBUG] [Thread-209448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:53:41.816 [DEBUG] [Thread-209448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:53:41.819 [DEBUG] [Thread-209448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:53:41.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:53:41.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:53:41.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:53:41.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:53:41.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:53:41.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:53:41.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:53:41.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:53:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:53:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.703566 -999.00  +18.90  21.09     37   +4.00 1 1 1 1 1   887    0 13.40 -70.56 ----- 20.3 21.1 148.0 27.1 20.9 -27.6 21.0 -26.6 21.8 -26.5 22.0 -28.0
2026-02-15T18:53:41.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:53:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:53:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.703566
2026-02-15T18:53:41.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:53:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:53:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:53:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:53:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:53:41.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:53:10', tmtdew=17.25, humidity=31.76, cloud=0.0, wind=30.79, temperature=19.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:53:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:53:41.845 [DEBUG] [Thread-209448] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:53:41.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:53:45.179 [DEBUG] [Thread-209451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:00.230 [DEBUG] [Thread-209452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:03.216 [DEBUG] [Thread-209453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:15.267 [DEBUG] [Thread-209454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:19.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:19.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:30.303 [DEBUG] [Thread-209455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:54:45.340 [DEBUG] [Thread-209456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:00.375 [DEBUG] [Thread-209457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:03.257 [DEBUG] [Thread-209458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:15.410 [DEBUG] [Thread-209459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:20.074 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:20.075 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:30.446 [DEBUG] [Thread-209460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:45.483 [DEBUG] [Thread-209461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:55:53.667 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T18:56:00.521 [DEBUG] [Thread-209462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:03.302 [DEBUG] [Thread-209463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:15.557 [DEBUG] [Thread-209464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:20.216 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:20.217 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:56:23.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:56:23.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:56:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 56, 9), 17.19, 31.88, 0.0, 36.61, 18.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:56:25.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:56:09
2026-02-15T18:56:25.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:56:26.083 [DEBUG] [Thread-209465] [transport.py] [_log()] starting thread (client mode): 0xa2d1b220
2026-02-15T18:56:26.083 [DEBUG] [Thread-209465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:56:26.103 [DEBUG] [Thread-209465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:56:26.103 [INFO] [Thread-209465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] client lang: <none>
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] server lang: <none>
2026-02-15T18:56:26.106 [DEBUG] [Thread-209465] [transport.py] [_log()] kex follows: False
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] Compression: none
2026-02-15T18:56:26.107 [DEBUG] [Thread-209465] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:56:26.123 [DEBUG] [Thread-209465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:56:26.123 [DEBUG] [Thread-209465] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:56:26.123 [DEBUG] [Thread-209465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:56:26.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:56:26.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:56:26.124 [DEBUG] [Thread-209465] [transport.py] [_log()] userauth is OK
2026-02-15T18:56:26.124 [DEBUG] [Thread-209465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:56:26.124 [DEBUG] [Thread-209465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:56:26.124 [DEBUG] [Thread-209465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:56:26.124 [DEBUG] [Thread-209465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:56:26.140 [INFO] [Thread-209465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:56:26.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:56:26.777 [DEBUG] [Thread-209465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:56:26.777 [DEBUG] [Thread-209465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:56:26.777 [DEBUG] [Thread-209465] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:56:26.818 [DEBUG] [Thread-209465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:56:26.818 [DEBUG] [Thread-209465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:56:26.820 [DEBUG] [Thread-209465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:56:26.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:56:26.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:56:26.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:56:26.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:56:26.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:56:26.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:56:26.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.705650 -999.00  +18.70  22.08     37   +3.90 1 1 1 1 1   887    0 13.81 -64.27 ----- 22.6 22.1 155.4 34.6 20.7 -27.8 20.7 -26.7 21.4 -25.5 21.7 -28.1
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.705650
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:56:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:56:09', tmtdew=17.19, humidity=31.88, cloud=0.0, wind=36.61, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:56:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:56:26.840 [DEBUG] [Thread-209465] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:56:26.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:56:26.924 [DEBUG] [Thread-209468] [transport.py] [_log()] starting thread (client mode): 0xa57d7d00
2026-02-15T18:56:26.924 [DEBUG] [Thread-209468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:56:26.939 [DEBUG] [Thread-209468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:56:26.939 [INFO] [Thread-209468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:56:26.946 [DEBUG] [Thread-209468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] client lang: <none>
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] server lang: <none>
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] kex follows: False
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] Compression: none
2026-02-15T18:56:26.947 [DEBUG] [Thread-209468] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:56:27.001 [DEBUG] [Thread-209468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:56:27.001 [DEBUG] [Thread-209468] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:56:27.002 [DEBUG] [Thread-209468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:56:27.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:56:27.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:56:27.059 [DEBUG] [Thread-209468] [transport.py] [_log()] userauth is OK
2026-02-15T18:56:27.059 [DEBUG] [Thread-209468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:56:27.059 [DEBUG] [Thread-209468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:56:27.059 [DEBUG] [Thread-209468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:56:27.059 [DEBUG] [Thread-209468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:56:27.073 [INFO] [Thread-209468] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:56:27.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:56:27.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:56:27.957 [DEBUG] [Thread-209468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:56:27.957 [DEBUG] [Thread-209468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:56:28.005 [DEBUG] [Thread-209468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:56:28.006 [DEBUG] [Thread-209468] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:56:28.015 [DEBUG] [Thread-209468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:56:28.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:56:28.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:56:28.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:56:28.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:56:28.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:56:28.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:56:28.054 [DEBUG] [Thread-209468] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:56:30.595 [DEBUG] [Thread-209470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:45.639 [DEBUG] [Thread-209471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:56:58.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:56:58.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:56:58.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:56:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 56, 45), 17.18, 31.9, 0.0, 34.76, 18.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:56:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:56:45
2026-02-15T18:57:00.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:57:00.513 [DEBUG] [Thread-209472] [transport.py] [_log()] starting thread (client mode): 0xa2d55e40
2026-02-15T18:57:00.513 [DEBUG] [Thread-209472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:57:00.531 [DEBUG] [Thread-209472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:57:00.531 [INFO] [Thread-209472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] client lang: <none>
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] server lang: <none>
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] kex follows: False
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] Compression: none
2026-02-15T18:57:00.534 [DEBUG] [Thread-209472] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:57:00.554 [DEBUG] [Thread-209472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:57:00.555 [DEBUG] [Thread-209472] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:57:00.555 [DEBUG] [Thread-209472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:57:00.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:57:00.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:57:00.557 [DEBUG] [Thread-209472] [transport.py] [_log()] userauth is OK
2026-02-15T18:57:00.557 [DEBUG] [Thread-209472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:57:00.558 [DEBUG] [Thread-209472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:57:00.558 [DEBUG] [Thread-209472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:57:00.558 [DEBUG] [Thread-209472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:57:00.581 [INFO] [Thread-209472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:57:00.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:57:00.674 [DEBUG] [Thread-209474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:57:01.222 [DEBUG] [Thread-209472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:57:01.222 [DEBUG] [Thread-209472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:57:01.222 [DEBUG] [Thread-209472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:57:01.263 [DEBUG] [Thread-209472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:57:01.263 [DEBUG] [Thread-209472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:57:01.266 [DEBUG] [Thread-209472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:57:01.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:57:01.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:57:01.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:57:01.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:57:01.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:57:01.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:57:01.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:57:01.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:57:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:57:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.705997 -999.00  +18.70  20.68     37   +3.90 1 1 1 1 1   887    0 13.70 -62.04 ----- 22.5 20.7 163.2 32.0 20.6 -27.6 20.7 -26.8 21.4 -26.3 21.6 -27.6
2026-02-15T18:57:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:57:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:57:01.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.705997
2026-02-15T18:57:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:57:01.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:57:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:57:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:57:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:57:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:56:45', tmtdew=17.18, humidity=31.9, cloud=0.0, wind=34.76, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:56:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:57:01.295 [DEBUG] [Thread-209472] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:57:01.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:57:01.387 [DEBUG] [Thread-209476] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-15T18:57:01.387 [DEBUG] [Thread-209476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:57:01.402 [DEBUG] [Thread-209476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:57:01.402 [INFO] [Thread-209476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:57:01.410 [DEBUG] [Thread-209476] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:57:01.410 [DEBUG] [Thread-209476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] client lang: <none>
2026-02-15T18:57:01.411 [DEBUG] [Thread-209476] [transport.py] [_log()] server lang: <none>
2026-02-15T18:57:01.412 [DEBUG] [Thread-209476] [transport.py] [_log()] kex follows: False
2026-02-15T18:57:01.412 [DEBUG] [Thread-209476] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:57:01.412 [DEBUG] [Thread-209476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:57:01.412 [DEBUG] [Thread-209476] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:57:01.412 [DEBUG] [Thread-209476] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:57:01.412 [DEBUG] [Thread-209476] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:57:01.413 [DEBUG] [Thread-209476] [transport.py] [_log()] Compression: none
2026-02-15T18:57:01.413 [DEBUG] [Thread-209476] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:57:01.466 [DEBUG] [Thread-209476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:57:01.466 [DEBUG] [Thread-209476] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:57:01.466 [DEBUG] [Thread-209476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:57:01.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:57:01.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:57:01.523 [DEBUG] [Thread-209476] [transport.py] [_log()] userauth is OK
2026-02-15T18:57:01.523 [DEBUG] [Thread-209476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:57:01.523 [DEBUG] [Thread-209476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:57:01.523 [DEBUG] [Thread-209476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:57:01.523 [DEBUG] [Thread-209476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:57:01.546 [INFO] [Thread-209476] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:57:01.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:57:01.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:57:02.408 [DEBUG] [Thread-209476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:57:02.408 [DEBUG] [Thread-209476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:57:02.456 [DEBUG] [Thread-209476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:57:02.456 [DEBUG] [Thread-209476] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:57:02.465 [DEBUG] [Thread-209476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:57:02.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:57:02.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:57:02.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:57:02.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:57:02.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:57:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:57:02.501 [DEBUG] [Thread-209476] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:57:03.365 [DEBUG] [Thread-209478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:57:15.709 [DEBUG] [Thread-209479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:57:20.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:57:20.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:57:30.761 [DEBUG] [Thread-209480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:57:32.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:57:32.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:57:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:57:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 57, 21), 17.22, 31.81, 0.0, 36.38, 18.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:57:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:57:21
2026-02-15T18:57:34.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:57:34.833 [DEBUG] [Thread-209481] [transport.py] [_log()] starting thread (client mode): 0xa57d6bf0
2026-02-15T18:57:34.833 [DEBUG] [Thread-209481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:57:34.854 [DEBUG] [Thread-209481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:57:34.854 [INFO] [Thread-209481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:57:34.857 [DEBUG] [Thread-209481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] client lang: <none>
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] server lang: <none>
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] kex follows: False
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:57:34.858 [DEBUG] [Thread-209481] [transport.py] [_log()] Compression: none
2026-02-15T18:57:34.859 [DEBUG] [Thread-209481] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:57:34.878 [DEBUG] [Thread-209481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:57:34.879 [DEBUG] [Thread-209481] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:57:34.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:57:34.880 [DEBUG] [Thread-209481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:57:34.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:57:34.882 [DEBUG] [Thread-209481] [transport.py] [_log()] userauth is OK
2026-02-15T18:57:34.882 [DEBUG] [Thread-209481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:57:34.882 [DEBUG] [Thread-209481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:57:34.882 [DEBUG] [Thread-209481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:57:34.882 [DEBUG] [Thread-209481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:57:34.903 [INFO] [Thread-209481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:57:34.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:57:35.543 [DEBUG] [Thread-209481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:57:35.543 [DEBUG] [Thread-209481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:57:35.544 [DEBUG] [Thread-209481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:57:35.584 [DEBUG] [Thread-209481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:57:35.585 [DEBUG] [Thread-209481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:57:35.588 [DEBUG] [Thread-209481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:57:35.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:57:35.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:57:35.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:57:35.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:57:35.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:57:35.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:57:35.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:57:35.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:57:35.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:57:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.706344 -999.00  +18.70  23.09     37   +3.90 1 1 1 1 1   887    0 13.60 -64.26 ----- 19.4 23.1 158.0 28.1 20.6 -27.6 20.6 -26.7 21.3 -25.9 21.6 -28.0
2026-02-15T18:57:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:57:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:57:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.706344
2026-02-15T18:57:35.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:57:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:57:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:57:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:57:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:57:35.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:57:21', tmtdew=17.22, humidity=31.81, cloud=0.0, wind=36.38, temperature=18.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:57:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:57:35.616 [DEBUG] [Thread-209481] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:57:35.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:57:35.714 [DEBUG] [Thread-209484] [transport.py] [_log()] starting thread (client mode): 0xa2d1a500
2026-02-15T18:57:35.714 [DEBUG] [Thread-209484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:57:35.728 [DEBUG] [Thread-209484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:57:35.728 [INFO] [Thread-209484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] client lang: <none>
2026-02-15T18:57:35.736 [DEBUG] [Thread-209484] [transport.py] [_log()] server lang: <none>
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] kex follows: False
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] Compression: none
2026-02-15T18:57:35.737 [DEBUG] [Thread-209484] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:57:35.798 [DEBUG] [Thread-209484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:57:35.798 [DEBUG] [Thread-209484] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:57:35.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:57:35.799 [DEBUG] [Thread-209484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:57:35.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:57:35.856 [DEBUG] [Thread-209484] [transport.py] [_log()] userauth is OK
2026-02-15T18:57:35.856 [DEBUG] [Thread-209484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:57:35.857 [DEBUG] [Thread-209484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:57:35.857 [DEBUG] [Thread-209484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:57:35.857 [DEBUG] [Thread-209484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:57:35.875 [INFO] [Thread-209484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:57:35.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:57:35.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:57:36.694 [DEBUG] [Thread-209484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:57:36.694 [DEBUG] [Thread-209484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:57:36.742 [DEBUG] [Thread-209484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:57:36.743 [DEBUG] [Thread-209484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:57:36.752 [DEBUG] [Thread-209484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:57:36.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:57:36.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:57:36.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:57:36.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:57:36.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:57:36.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:57:36.789 [DEBUG] [Thread-209484] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:57:45.801 [DEBUG] [Thread-209486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:00.857 [DEBUG] [Thread-209487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:03.406 [DEBUG] [Thread-209488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:06.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:58:06.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:58:06.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:58:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 57, 56), 17.2, 31.83, 0.0, 31.81, 18.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:58:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:57:56
2026-02-15T18:58:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:58:09.446 [DEBUG] [Thread-209489] [transport.py] [_log()] starting thread (client mode): 0xa2d55f60
2026-02-15T18:58:09.446 [DEBUG] [Thread-209489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:58:09.465 [DEBUG] [Thread-209489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:58:09.465 [INFO] [Thread-209489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:58:09.468 [DEBUG] [Thread-209489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] client lang: <none>
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] server lang: <none>
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] kex follows: False
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:58:09.469 [DEBUG] [Thread-209489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:58:09.470 [DEBUG] [Thread-209489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:58:09.470 [DEBUG] [Thread-209489] [transport.py] [_log()] Compression: none
2026-02-15T18:58:09.470 [DEBUG] [Thread-209489] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:58:09.479 [DEBUG] [Thread-209489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:58:09.479 [DEBUG] [Thread-209489] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:58:09.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:58:09.480 [DEBUG] [Thread-209489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:58:09.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:58:09.482 [DEBUG] [Thread-209489] [transport.py] [_log()] userauth is OK
2026-02-15T18:58:09.483 [DEBUG] [Thread-209489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:58:09.483 [DEBUG] [Thread-209489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:58:09.483 [DEBUG] [Thread-209489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:58:09.483 [DEBUG] [Thread-209489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:58:09.500 [INFO] [Thread-209489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:58:09.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:58:10.065 [DEBUG] [Thread-209489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:58:10.065 [DEBUG] [Thread-209489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:58:10.075 [DEBUG] [Thread-209489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:58:10.106 [DEBUG] [Thread-209489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:58:10.107 [DEBUG] [Thread-209489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:58:10.109 [DEBUG] [Thread-209489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:58:10.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:58:10.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:58:10.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:58:10.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:58:10.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:58:10.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:58:10.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:58:10.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:58:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:58:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.706691 -999.00  +18.70  21.95     37   +3.90 1 1 1 1 1   887    0 13.61 -64.61 ----- 23.4 21.9 152.8 28.3 20.6 -27.6 20.6 -26.8 21.3 -26.0 21.6 -28.0
2026-02-15T18:58:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:58:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:58:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.706691
2026-02-15T18:58:10.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:58:10.127 [DEBUG] [Thread-209489] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:58:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:58:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:58:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:58:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:58:10.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:57:56', tmtdew=17.2, humidity=31.83, cloud=0.0, wind=31.81, temperature=18.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:57:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:58:10.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:58:10.222 [DEBUG] [Thread-209492] [transport.py] [_log()] starting thread (client mode): 0xa5742ec0
2026-02-15T18:58:10.222 [DEBUG] [Thread-209492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:58:10.238 [DEBUG] [Thread-209492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:58:10.238 [INFO] [Thread-209492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:58:10.248 [DEBUG] [Thread-209492] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:58:10.248 [DEBUG] [Thread-209492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:58:10.248 [DEBUG] [Thread-209492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:58:10.248 [DEBUG] [Thread-209492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:10.248 [DEBUG] [Thread-209492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:10.248 [DEBUG] [Thread-209492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] client lang: <none>
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] server lang: <none>
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] kex follows: False
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:58:10.249 [DEBUG] [Thread-209492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:58:10.250 [DEBUG] [Thread-209492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:58:10.250 [DEBUG] [Thread-209492] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:58:10.250 [DEBUG] [Thread-209492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:58:10.250 [DEBUG] [Thread-209492] [transport.py] [_log()] Compression: none
2026-02-15T18:58:10.250 [DEBUG] [Thread-209492] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:58:10.304 [DEBUG] [Thread-209492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:58:10.305 [DEBUG] [Thread-209492] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:58:10.305 [DEBUG] [Thread-209492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:58:10.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:58:10.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:58:10.360 [DEBUG] [Thread-209492] [transport.py] [_log()] userauth is OK
2026-02-15T18:58:10.360 [DEBUG] [Thread-209492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:58:10.360 [DEBUG] [Thread-209492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:58:10.360 [DEBUG] [Thread-209492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:58:10.360 [DEBUG] [Thread-209492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:58:10.378 [INFO] [Thread-209492] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:58:10.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:58:10.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:58:11.227 [DEBUG] [Thread-209492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:58:11.227 [DEBUG] [Thread-209492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:58:11.276 [DEBUG] [Thread-209492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:58:11.276 [DEBUG] [Thread-209492] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:58:11.285 [DEBUG] [Thread-209492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:58:11.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:58:11.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:58:11.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:58:11.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:58:11.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:58:11.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:58:11.322 [DEBUG] [Thread-209492] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:58:15.892 [DEBUG] [Thread-209494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:20.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:20.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:30.948 [DEBUG] [Thread-209495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:58:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:58:41.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:58:41.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:58:43.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 58, 32), 17.13, 31.98, 0.0, 33.74, 18.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:58:43.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:58:32
2026-02-15T18:58:43.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:58:43.838 [DEBUG] [Thread-209496] [transport.py] [_log()] starting thread (client mode): 0xa5740c70
2026-02-15T18:58:43.838 [DEBUG] [Thread-209496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:58:43.857 [DEBUG] [Thread-209496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:58:43.857 [INFO] [Thread-209496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:58:43.860 [DEBUG] [Thread-209496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] client lang: <none>
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] server lang: <none>
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] kex follows: False
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] Compression: none
2026-02-15T18:58:43.861 [DEBUG] [Thread-209496] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:58:43.877 [DEBUG] [Thread-209496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:58:43.877 [DEBUG] [Thread-209496] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:58:43.878 [DEBUG] [Thread-209496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:58:43.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:58:43.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:58:43.880 [DEBUG] [Thread-209496] [transport.py] [_log()] userauth is OK
2026-02-15T18:58:43.880 [DEBUG] [Thread-209496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:58:43.880 [DEBUG] [Thread-209496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:58:43.880 [DEBUG] [Thread-209496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:58:43.880 [DEBUG] [Thread-209496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:58:43.900 [INFO] [Thread-209496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:58:43.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:58:44.502 [DEBUG] [Thread-209496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:58:44.502 [DEBUG] [Thread-209496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:58:44.503 [DEBUG] [Thread-209496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:58:44.543 [DEBUG] [Thread-209496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:58:44.544 [DEBUG] [Thread-209496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:58:44.547 [DEBUG] [Thread-209496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:58:44.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:58:44.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:58:44.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:58:44.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:58:44.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:58:44.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:58:44.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:58:44.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:58:44.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:58:44.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.707038 -999.00  +18.70  24.39     37   +3.90 1 1 1 1 1   887    0 13.35 -70.22 ----- 25.3 24.4 160.4 28.8 20.6 -27.6 20.6 -26.4 21.2 -25.9 21.6 -28.0
2026-02-15T18:58:44.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:58:44.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:58:44.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.707038
2026-02-15T18:58:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:58:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:58:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:58:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:58:44.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:58:44.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:58:32', tmtdew=17.13, humidity=31.98, cloud=0.0, wind=33.74, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:58:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:58:44.575 [DEBUG] [Thread-209496] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:58:44.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:58:44.671 [DEBUG] [Thread-209499] [transport.py] [_log()] starting thread (client mode): 0xa57b1360
2026-02-15T18:58:44.671 [DEBUG] [Thread-209499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:58:44.685 [DEBUG] [Thread-209499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:58:44.686 [INFO] [Thread-209499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:58:44.693 [DEBUG] [Thread-209499] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] client lang: <none>
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] server lang: <none>
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] kex follows: False
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] Compression: none
2026-02-15T18:58:44.694 [DEBUG] [Thread-209499] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:58:44.752 [DEBUG] [Thread-209499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:58:44.753 [DEBUG] [Thread-209499] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:58:44.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:58:44.754 [DEBUG] [Thread-209499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:58:44.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:58:44.808 [DEBUG] [Thread-209499] [transport.py] [_log()] userauth is OK
2026-02-15T18:58:44.808 [DEBUG] [Thread-209499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:58:44.808 [DEBUG] [Thread-209499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:58:44.808 [DEBUG] [Thread-209499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:58:44.808 [DEBUG] [Thread-209499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:58:44.827 [INFO] [Thread-209499] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:58:44.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:58:44.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:58:45.761 [DEBUG] [Thread-209499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:58:45.761 [DEBUG] [Thread-209499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:58:45.809 [DEBUG] [Thread-209499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:58:45.809 [DEBUG] [Thread-209499] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:58:45.818 [DEBUG] [Thread-209499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:58:45.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:58:45.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:58:45.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:58:45.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:58:45.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:58:45.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:58:45.855 [DEBUG] [Thread-209499] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:58:45.985 [DEBUG] [Thread-209501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:01.043 [DEBUG] [Thread-209502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:03.445 [DEBUG] [Thread-209503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:15.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:59:15.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:59:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:59:16.077 [DEBUG] [Thread-209504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:17.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 59, 7), 17.08, 32.1, 0.0, 32.06, 18.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:59:17.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:59:07
2026-02-15T18:59:18.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:59:18.233 [DEBUG] [Thread-209505] [transport.py] [_log()] starting thread (client mode): 0xa2d18100
2026-02-15T18:59:18.233 [DEBUG] [Thread-209505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:59:18.252 [DEBUG] [Thread-209505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:59:18.252 [INFO] [Thread-209505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:59:18.255 [DEBUG] [Thread-209505] [transport.py] [_log()] client lang: <none>
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] server lang: <none>
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] kex follows: False
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] Compression: none
2026-02-15T18:59:18.256 [DEBUG] [Thread-209505] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:59:18.273 [DEBUG] [Thread-209505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:59:18.273 [DEBUG] [Thread-209505] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:59:18.274 [DEBUG] [Thread-209505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:59:18.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:59:18.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:59:18.276 [DEBUG] [Thread-209505] [transport.py] [_log()] userauth is OK
2026-02-15T18:59:18.276 [DEBUG] [Thread-209505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:59:18.276 [DEBUG] [Thread-209505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:59:18.276 [DEBUG] [Thread-209505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:59:18.277 [DEBUG] [Thread-209505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:59:18.302 [INFO] [Thread-209505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:59:18.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:59:18.926 [DEBUG] [Thread-209505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:59:18.927 [DEBUG] [Thread-209505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:59:18.927 [DEBUG] [Thread-209505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:59:18.968 [DEBUG] [Thread-209505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:59:18.968 [DEBUG] [Thread-209505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:59:18.971 [DEBUG] [Thread-209505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:59:18.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:59:18.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:59:18.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:59:18.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:59:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:59:18.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:59:18.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:59:18.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:59:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:59:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.707386 -999.00  +18.70  22.33     37   +3.90 1 1 1 1 1   887    0 13.14 -73.75 ----- 17.9 22.3 155.0 34.6 20.5 -27.7 20.6 -26.5 21.2 -25.7 21.5 -27.9
2026-02-15T18:59:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:59:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:59:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.707386
2026-02-15T18:59:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:59:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:59:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:59:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:59:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:59:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:59:07', tmtdew=17.08, humidity=32.1, cloud=0.0, wind=32.06, temperature=18.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:58:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:59:18.995 [DEBUG] [Thread-209505] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:59:19.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:59:19.090 [DEBUG] [Thread-209508] [transport.py] [_log()] starting thread (client mode): 0xa57d7ca0
2026-02-15T18:59:19.090 [DEBUG] [Thread-209508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:59:19.104 [DEBUG] [Thread-209508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:59:19.104 [INFO] [Thread-209508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:59:19.111 [DEBUG] [Thread-209508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:59:19.111 [DEBUG] [Thread-209508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] client lang: <none>
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] server lang: <none>
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] kex follows: False
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] Compression: none
2026-02-15T18:59:19.112 [DEBUG] [Thread-209508] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:59:19.171 [DEBUG] [Thread-209508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:59:19.171 [DEBUG] [Thread-209508] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:59:19.172 [DEBUG] [Thread-209508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:59:19.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:59:19.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:59:19.228 [DEBUG] [Thread-209508] [transport.py] [_log()] userauth is OK
2026-02-15T18:59:19.228 [DEBUG] [Thread-209508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:59:19.228 [DEBUG] [Thread-209508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:59:19.228 [DEBUG] [Thread-209508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:59:19.228 [DEBUG] [Thread-209508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:59:19.247 [INFO] [Thread-209508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:59:19.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:59:19.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:59:20.089 [DEBUG] [Thread-209508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:59:20.090 [DEBUG] [Thread-209508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:59:20.137 [DEBUG] [Thread-209508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:59:20.138 [DEBUG] [Thread-209508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:59:20.147 [DEBUG] [Thread-209508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:59:20.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:59:20.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T18:59:20.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:59:20.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:59:20.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:59:20.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:59:20.184 [DEBUG] [Thread-209508] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:59:20.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:20.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:31.112 [DEBUG] [Thread-209510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:46.164 [DEBUG] [Thread-209511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T18:59:50.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T18:59:50.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T18:59:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T18:59:52.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 18, 59, 42), 17.49, 31.09, 0.0, 31.69, 19.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T18:59:52.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 18:59:42
2026-02-15T18:59:52.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T18:59:52.572 [DEBUG] [Thread-209512] [transport.py] [_log()] starting thread (client mode): 0xa5741000
2026-02-15T18:59:52.572 [DEBUG] [Thread-209512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:59:52.593 [DEBUG] [Thread-209512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T18:59:52.593 [INFO] [Thread-209512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T18:59:52.596 [DEBUG] [Thread-209512] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] client lang: <none>
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] server lang: <none>
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] kex follows: False
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] Compression: none
2026-02-15T18:59:52.597 [DEBUG] [Thread-209512] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:59:52.612 [DEBUG] [Thread-209512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:59:52.612 [DEBUG] [Thread-209512] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:59:52.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T18:59:52.612 [DEBUG] [Thread-209512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T18:59:52.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:59:52.613 [DEBUG] [Thread-209512] [transport.py] [_log()] userauth is OK
2026-02-15T18:59:52.613 [DEBUG] [Thread-209512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:59:52.613 [DEBUG] [Thread-209512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:59:52.613 [DEBUG] [Thread-209512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T18:59:52.614 [DEBUG] [Thread-209512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:59:52.624 [INFO] [Thread-209512] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:59:52.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:59:53.216 [DEBUG] [Thread-209512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:59:53.216 [DEBUG] [Thread-209512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:59:53.216 [DEBUG] [Thread-209512] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T18:59:53.257 [DEBUG] [Thread-209512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:59:53.257 [DEBUG] [Thread-209512] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:59:53.258 [DEBUG] [Thread-209512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:59:53.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:59:53.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T18:59:53.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T18:59:53.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T18:59:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:59:53.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T18:59:53.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.707733 -999.00  +18.60  25.52     37   +4.00 1 1 1 1 1   887    0 13.25 -70.89 ----- 20.5 25.5 156.2 35.5 20.5 -27.3 20.5 -26.5 21.1 -26.0 21.5 -27.7
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.707733
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T18:59:53.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T18:59:42', tmtdew=17.49, humidity=31.09, cloud=0.0, wind=31.69, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T16:59:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T18:59:53.276 [DEBUG] [Thread-209512] [transport.py] [_log()] EOF in transport thread
2026-02-15T18:59:53.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T18:59:53.361 [DEBUG] [Thread-209515] [transport.py] [_log()] starting thread (client mode): 0xa2dc3be0
2026-02-15T18:59:53.361 [DEBUG] [Thread-209515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T18:59:53.377 [DEBUG] [Thread-209515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T18:59:53.377 [INFO] [Thread-209515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] client lang: <none>
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] server lang: <none>
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] kex follows: False
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] Compression: none
2026-02-15T18:59:53.384 [DEBUG] [Thread-209515] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T18:59:53.442 [DEBUG] [Thread-209515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T18:59:53.442 [DEBUG] [Thread-209515] [transport.py] [_log()] Switch to new keys ...
2026-02-15T18:59:53.442 [DEBUG] [Thread-209515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T18:59:53.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T18:59:53.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T18:59:53.499 [DEBUG] [Thread-209515] [transport.py] [_log()] userauth is OK
2026-02-15T18:59:53.500 [DEBUG] [Thread-209515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T18:59:53.500 [DEBUG] [Thread-209515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T18:59:53.500 [DEBUG] [Thread-209515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T18:59:53.500 [DEBUG] [Thread-209515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T18:59:53.513 [INFO] [Thread-209515] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T18:59:53.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T18:59:53.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T18:59:54.391 [DEBUG] [Thread-209515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T18:59:54.391 [DEBUG] [Thread-209515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T18:59:54.438 [DEBUG] [Thread-209515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T18:59:54.439 [DEBUG] [Thread-209515] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T18:59:54.447 [DEBUG] [Thread-209515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T18:59:54.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T18:59: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')
2026-02-15T18:59:54.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T18:59:54.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T18:59:54.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T18:59:54.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T18:59:54.482 [DEBUG] [Thread-209515] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:00:01.204 [DEBUG] [Thread-209517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:03.473 [DEBUG] [Thread-209518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:16.263 [DEBUG] [Thread-209519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:20.786 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:20.787 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:24.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:00:24.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:00:24.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:00:26.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 0, 18), 16.98, 32.08, 0.0, 33.23, 18.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:00:26.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:00:18
2026-02-15T19:00:26.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:00:27.150 [DEBUG] [Thread-209520] [transport.py] [_log()] starting thread (client mode): 0xa57d71c0
2026-02-15T19:00:27.150 [DEBUG] [Thread-209520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:00:27.170 [DEBUG] [Thread-209520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:00:27.170 [INFO] [Thread-209520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:00:27.173 [DEBUG] [Thread-209520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] client lang: <none>
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] server lang: <none>
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] kex follows: False
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] Compression: none
2026-02-15T19:00:27.174 [DEBUG] [Thread-209520] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:00:27.192 [DEBUG] [Thread-209520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:00:27.192 [DEBUG] [Thread-209520] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:00:27.193 [DEBUG] [Thread-209520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:00:27.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:00:27.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:00:27.195 [DEBUG] [Thread-209520] [transport.py] [_log()] userauth is OK
2026-02-15T19:00:27.195 [DEBUG] [Thread-209520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:00:27.195 [DEBUG] [Thread-209520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:00:27.195 [DEBUG] [Thread-209520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:00:27.196 [DEBUG] [Thread-209520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:00:27.214 [INFO] [Thread-209520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:00:27.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:00:27.848 [DEBUG] [Thread-209520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:00:27.848 [DEBUG] [Thread-209520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:00:27.849 [DEBUG] [Thread-209520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:00:27.889 [DEBUG] [Thread-209520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:00:27.890 [DEBUG] [Thread-209520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:00:27.893 [DEBUG] [Thread-209520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:00:27.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:00:27.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:00:27.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:00:27.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:00:27.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:00:27.916 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:00:27.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:00:27.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:00:27.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:00:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.708427 -999.00  +18.60  18.68     37   +3.90 1 1 1 1 1   887    0 13.41 -63.82 ----- 22.2 18.7 162.2 34.7 20.4 -27.5 20.4 -26.6 21.1 -25.7 21.4 -27.8
2026-02-15T19:00:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:00:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:00:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.708427
2026-02-15T19:00:27.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:00:27.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:00:27.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:00:27.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:00:27.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:00:27.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:00:18', tmtdew=16.98, humidity=32.08, cloud=0.0, wind=33.23, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:00:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:00:27.919 [DEBUG] [Thread-209520] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:00:28.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:00:28.015 [DEBUG] [Thread-209523] [transport.py] [_log()] starting thread (client mode): 0xa57d4220
2026-02-15T19:00:28.015 [DEBUG] [Thread-209523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:00:28.029 [DEBUG] [Thread-209523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:00:28.029 [INFO] [Thread-209523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:00:28.037 [DEBUG] [Thread-209523] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:00:28.037 [DEBUG] [Thread-209523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:00:28.037 [DEBUG] [Thread-209523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:00:28.037 [DEBUG] [Thread-209523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:00:28.037 [DEBUG] [Thread-209523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] client lang: <none>
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] server lang: <none>
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] kex follows: False
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:00:28.038 [DEBUG] [Thread-209523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:00:28.039 [DEBUG] [Thread-209523] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:00:28.039 [DEBUG] [Thread-209523] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:00:28.039 [DEBUG] [Thread-209523] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:00:28.039 [DEBUG] [Thread-209523] [transport.py] [_log()] Compression: none
2026-02-15T19:00:28.039 [DEBUG] [Thread-209523] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:00:28.096 [DEBUG] [Thread-209523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:00:28.096 [DEBUG] [Thread-209523] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:00:28.097 [DEBUG] [Thread-209523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:00:28.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:00:28.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:00:28.153 [DEBUG] [Thread-209523] [transport.py] [_log()] userauth is OK
2026-02-15T19:00:28.153 [DEBUG] [Thread-209523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:00:28.153 [DEBUG] [Thread-209523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:00:28.153 [DEBUG] [Thread-209523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:00:28.154 [DEBUG] [Thread-209523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:00:28.175 [INFO] [Thread-209523] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:00:28.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:00:28.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:00:29.029 [DEBUG] [Thread-209523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:00:29.029 [DEBUG] [Thread-209523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:00:29.077 [DEBUG] [Thread-209523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:00:29.078 [DEBUG] [Thread-209523] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:00:29.090 [DEBUG] [Thread-209523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:00:29.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:00:29.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:00:29.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:00:29.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:00:29.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:00:29.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:00:29.129 [DEBUG] [Thread-209523] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:00:31.298 [DEBUG] [Thread-209525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:46.354 [DEBUG] [Thread-209526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:00:59.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:00:59.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:00:59.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:01:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 0, 18), 16.98, 32.08, 0.0, 33.23, 18.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:01:01.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:00:18
2026-02-15T19:01:01.391 [DEBUG] [Thread-209527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:01:01.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:01:01.625 [DEBUG] [Thread-209528] [transport.py] [_log()] starting thread (client mode): 0xa57d5600
2026-02-15T19:01:01.625 [DEBUG] [Thread-209528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:01:01.642 [DEBUG] [Thread-209528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:01:01.642 [INFO] [Thread-209528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:01:01.645 [DEBUG] [Thread-209528] [transport.py] [_log()] client lang: <none>
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] server lang: <none>
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] kex follows: False
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] Compression: none
2026-02-15T19:01:01.646 [DEBUG] [Thread-209528] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:01:01.662 [DEBUG] [Thread-209528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:01:01.663 [DEBUG] [Thread-209528] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:01:01.663 [DEBUG] [Thread-209528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:01:01.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:01:01.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:01:01.664 [DEBUG] [Thread-209528] [transport.py] [_log()] userauth is OK
2026-02-15T19:01:01.664 [DEBUG] [Thread-209528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:01:01.664 [DEBUG] [Thread-209528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:01:01.664 [DEBUG] [Thread-209528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:01:01.664 [DEBUG] [Thread-209528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:01:01.686 [INFO] [Thread-209528] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:01:01.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:01:02.331 [DEBUG] [Thread-209528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:01:02.331 [DEBUG] [Thread-209528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:01:02.332 [DEBUG] [Thread-209528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:01:02.372 [DEBUG] [Thread-209528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:01:02.373 [DEBUG] [Thread-209528] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:01:02.376 [DEBUG] [Thread-209528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:01:02.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:01:02.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:01:02.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:01:02.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:01:02.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:01:02.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:01:02.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:01:02.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:01:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:01:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.708774 -999.00  +18.60  21.35     37   +3.90 1 1 1 1 1   887    0 13.19 -68.86 ----- 21.8 21.4 149.4 32.2 20.4 -27.4 20.4 -26.3 21.1 -25.8 21.4 -27.8
2026-02-15T19:01:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:01:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:01:02.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.708774
2026-02-15T19:01:02.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:01:02.404 [DEBUG] [Thread-209528] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:01:02.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:01:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:01:02.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:01:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:01:02.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:00:18', tmtdew=16.98, humidity=32.08, cloud=0.0, wind=33.23, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:00:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:01:02.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:01:02.506 [DEBUG] [Thread-209531] [transport.py] [_log()] starting thread (client mode): 0xa57b34c0
2026-02-15T19:01:02.507 [DEBUG] [Thread-209531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:01:02.521 [DEBUG] [Thread-209531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:01:02.521 [INFO] [Thread-209531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:01:02.529 [DEBUG] [Thread-209531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:01:02.529 [DEBUG] [Thread-209531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:01:02.529 [DEBUG] [Thread-209531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:01:02.529 [DEBUG] [Thread-209531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:02.529 [DEBUG] [Thread-209531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:02.529 [DEBUG] [Thread-209531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] client lang: <none>
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] server lang: <none>
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] kex follows: False
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:01:02.530 [DEBUG] [Thread-209531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:01:02.531 [DEBUG] [Thread-209531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:01:02.531 [DEBUG] [Thread-209531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:01:02.531 [DEBUG] [Thread-209531] [transport.py] [_log()] Compression: none
2026-02-15T19:01:02.531 [DEBUG] [Thread-209531] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:01:02.593 [DEBUG] [Thread-209531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:01:02.594 [DEBUG] [Thread-209531] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:01:02.594 [DEBUG] [Thread-209531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:01:02.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:01:02.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:01:02.652 [DEBUG] [Thread-209531] [transport.py] [_log()] userauth is OK
2026-02-15T19:01:02.653 [DEBUG] [Thread-209531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:01:02.653 [DEBUG] [Thread-209531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:01:02.653 [DEBUG] [Thread-209531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:01:02.653 [DEBUG] [Thread-209531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:01:02.672 [INFO] [Thread-209531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:01:02.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:01:02.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:01:03.499 [DEBUG] [Thread-209531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:01:03.499 [DEBUG] [Thread-209531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:01:03.516 [DEBUG] [Thread-209533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:01:03.548 [DEBUG] [Thread-209531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:01:03.548 [DEBUG] [Thread-209531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:01:03.557 [DEBUG] [Thread-209531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:01:03.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:01:03.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:01:03.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:01:03.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:01:03.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:01:03.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:01:03.594 [DEBUG] [Thread-209531] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:01:16.426 [DEBUG] [Thread-209534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:01:20.928 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:01:20.929 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:01:31.482 [DEBUG] [Thread-209535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:01:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:01:33.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:01:33.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:01:35.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 0, 53), 17.13, 31.88, 0.0, 32.45, 18.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:01:35.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:00:53
2026-02-15T19:01:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:01:36.361 [DEBUG] [Thread-209536] [transport.py] [_log()] starting thread (client mode): 0xa57d5840
2026-02-15T19:01:36.362 [DEBUG] [Thread-209536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:01:36.381 [DEBUG] [Thread-209536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:01:36.381 [INFO] [Thread-209536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:01:36.383 [DEBUG] [Thread-209536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] client lang: <none>
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] server lang: <none>
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] kex follows: False
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] Compression: none
2026-02-15T19:01:36.384 [DEBUG] [Thread-209536] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:01:36.396 [DEBUG] [Thread-209536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:01:36.396 [DEBUG] [Thread-209536] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:01:36.397 [DEBUG] [Thread-209536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:01:36.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:01:36.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:01:36.398 [DEBUG] [Thread-209536] [transport.py] [_log()] userauth is OK
2026-02-15T19:01:36.398 [DEBUG] [Thread-209536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:01:36.398 [DEBUG] [Thread-209536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:01:36.398 [DEBUG] [Thread-209536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:01:36.399 [DEBUG] [Thread-209536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:01:36.414 [INFO] [Thread-209536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:01:36.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:01:37.038 [DEBUG] [Thread-209536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:01:37.038 [DEBUG] [Thread-209536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:01:37.039 [DEBUG] [Thread-209536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:01:37.079 [DEBUG] [Thread-209536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:01:37.080 [DEBUG] [Thread-209536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:01:37.083 [DEBUG] [Thread-209536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:01:37.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:01:37.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:01:37.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:01:37.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:01:37.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:01:37.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:01:37.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:01:37.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:01:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:01:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.709122 -999.00  +18.50  29.66     37   +3.80 1 1 1 1 1   887    0 12.90 -73.23 ----- 22.3 29.7 144.0 33.0 20.4 -27.4 20.4 -26.3 21.0 -25.6 21.3 -27.6
2026-02-15T19:01:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:01:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:01:37.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.709122
2026-02-15T19:01:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:01:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:01:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:01:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:01:37.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:01:37.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:00:53', tmtdew=17.13, humidity=31.88, cloud=0.0, wind=32.45, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:01:08.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:01:37.110 [DEBUG] [Thread-209536] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:01:37.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:01:37.206 [DEBUG] [Thread-209539] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ea0
2026-02-15T19:01:37.206 [DEBUG] [Thread-209539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:01:37.222 [DEBUG] [Thread-209539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:01:37.222 [INFO] [Thread-209539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] client lang: <none>
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] server lang: <none>
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] kex follows: False
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:01:37.230 [DEBUG] [Thread-209539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:01:37.231 [DEBUG] [Thread-209539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:01:37.231 [DEBUG] [Thread-209539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:01:37.231 [DEBUG] [Thread-209539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:01:37.231 [DEBUG] [Thread-209539] [transport.py] [_log()] Compression: none
2026-02-15T19:01:37.231 [DEBUG] [Thread-209539] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:01:37.289 [DEBUG] [Thread-209539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:01:37.289 [DEBUG] [Thread-209539] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:01:37.290 [DEBUG] [Thread-209539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:01:37.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:01:37.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:01:37.345 [DEBUG] [Thread-209539] [transport.py] [_log()] userauth is OK
2026-02-15T19:01:37.346 [DEBUG] [Thread-209539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:01:37.346 [DEBUG] [Thread-209539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:01:37.346 [DEBUG] [Thread-209539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:01:37.346 [DEBUG] [Thread-209539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:01:37.365 [INFO] [Thread-209539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:01:37.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:01:37.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:01:38.235 [DEBUG] [Thread-209539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:01:38.236 [DEBUG] [Thread-209539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:01:38.283 [DEBUG] [Thread-209539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:01:38.283 [DEBUG] [Thread-209539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:01:38.293 [DEBUG] [Thread-209539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:01:38.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:01:38.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:01:38.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:01:38.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:01:38.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:01:38.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:01:38.333 [DEBUG] [Thread-209539] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:01:46.521 [DEBUG] [Thread-209541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:01.573 [DEBUG] [Thread-209542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:03.557 [DEBUG] [Thread-209543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:08.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:02:08.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:02:08.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:02:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 1, 29), 17.13, 31.86, 0.0, 29.82, 18.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:02:10.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:01:29
2026-02-15T19:02:11.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:02:11.303 [DEBUG] [Thread-209544] [transport.py] [_log()] starting thread (client mode): 0xa2d18280
2026-02-15T19:02:11.303 [DEBUG] [Thread-209544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:02:11.323 [DEBUG] [Thread-209544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:02:11.323 [INFO] [Thread-209544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:02:11.326 [DEBUG] [Thread-209544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:02:11.326 [DEBUG] [Thread-209544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:02:11.326 [DEBUG] [Thread-209544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] client lang: <none>
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] server lang: <none>
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] kex follows: False
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] Compression: none
2026-02-15T19:02:11.327 [DEBUG] [Thread-209544] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:02:11.348 [DEBUG] [Thread-209544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:02:11.348 [DEBUG] [Thread-209544] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:02:11.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:02:11.350 [DEBUG] [Thread-209544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:02:11.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:02:11.352 [DEBUG] [Thread-209544] [transport.py] [_log()] userauth is OK
2026-02-15T19:02:11.352 [DEBUG] [Thread-209544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:02:11.352 [DEBUG] [Thread-209544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:02:11.352 [DEBUG] [Thread-209544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:02:11.352 [DEBUG] [Thread-209544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:02:11.377 [INFO] [Thread-209544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:02:11.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:02:12.001 [DEBUG] [Thread-209544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:02:12.002 [DEBUG] [Thread-209544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:02:12.002 [DEBUG] [Thread-209544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:02:12.042 [DEBUG] [Thread-209544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:02:12.043 [DEBUG] [Thread-209544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:02:12.046 [DEBUG] [Thread-209544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:02:12.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:02:12.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:02:12.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:02:12.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:02:12.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:02:12.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:02:12.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:02:12.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:02:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:02:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.709469 -999.00  +18.50  22.76     37   +3.70 1 1 1 1 1   887    0 13.06 -78.49 ----- 20.5 22.8 152.8 31.0 20.3 -27.6 20.4 -26.4 20.9 -25.8 21.2 -27.7
2026-02-15T19:02:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:02:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:02:12.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.709469
2026-02-15T19:02:12.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:02:12.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:02:12.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:02:12.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:02:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:02:12.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:01:29', tmtdew=17.13, humidity=31.86, cloud=0.0, wind=29.82, temperature=18.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:01:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:02:12.071 [DEBUG] [Thread-209544] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:02:12.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:02:12.166 [DEBUG] [Thread-209547] [transport.py] [_log()] starting thread (client mode): 0xa57d7c70
2026-02-15T19:02:12.166 [DEBUG] [Thread-209547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:02:12.181 [DEBUG] [Thread-209547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:02:12.181 [INFO] [Thread-209547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] client lang: <none>
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] server lang: <none>
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] kex follows: False
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:02:12.189 [DEBUG] [Thread-209547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:02:12.190 [DEBUG] [Thread-209547] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:02:12.190 [DEBUG] [Thread-209547] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:02:12.190 [DEBUG] [Thread-209547] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:02:12.190 [DEBUG] [Thread-209547] [transport.py] [_log()] Compression: none
2026-02-15T19:02:12.190 [DEBUG] [Thread-209547] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:02:12.248 [DEBUG] [Thread-209547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:02:12.248 [DEBUG] [Thread-209547] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:02:12.249 [DEBUG] [Thread-209547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:02:12.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:02:12.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:02:12.305 [DEBUG] [Thread-209547] [transport.py] [_log()] userauth is OK
2026-02-15T19:02:12.305 [DEBUG] [Thread-209547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:02:12.305 [DEBUG] [Thread-209547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:02:12.305 [DEBUG] [Thread-209547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:02:12.305 [DEBUG] [Thread-209547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:02:12.329 [INFO] [Thread-209547] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:02:12.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:02:12.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:02:13.230 [DEBUG] [Thread-209547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:02:13.230 [DEBUG] [Thread-209547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:02:13.278 [DEBUG] [Thread-209547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:02:13.278 [DEBUG] [Thread-209547] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:02:13.287 [DEBUG] [Thread-209547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:02:13.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:02:13.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:02:13.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:02:13.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:02:13.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:02:13.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:02:13.320 [DEBUG] [Thread-209547] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:02:16.608 [DEBUG] [Thread-209549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:21.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:21.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:31.668 [DEBUG] [Thread-209550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:43.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:02:43.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:02:43.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:02:45.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 2, 5), 17.14, 31.85, 0.0, 31.49, 18.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:02:45.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:02:05
2026-02-15T19:02:46.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:02:46.672 [DEBUG] [Thread-209551] [transport.py] [_log()] starting thread (client mode): 0xa57d5e70
2026-02-15T19:02:46.672 [DEBUG] [Thread-209551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:02:46.691 [DEBUG] [Thread-209551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:02:46.692 [INFO] [Thread-209551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:02:46.695 [DEBUG] [Thread-209551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:02:46.695 [DEBUG] [Thread-209551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:02:46.695 [DEBUG] [Thread-209551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:02:46.695 [DEBUG] [Thread-209551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:46.695 [DEBUG] [Thread-209551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:46.695 [DEBUG] [Thread-209551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] client lang: <none>
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] server lang: <none>
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] kex follows: False
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] Compression: none
2026-02-15T19:02:46.696 [DEBUG] [Thread-209551] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:02:46.705 [DEBUG] [Thread-209553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:02:46.707 [DEBUG] [Thread-209551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:02:46.708 [DEBUG] [Thread-209551] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:02:46.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:02:46.709 [DEBUG] [Thread-209551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:02:46.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:02:46.711 [DEBUG] [Thread-209551] [transport.py] [_log()] userauth is OK
2026-02-15T19:02:46.711 [DEBUG] [Thread-209551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:02:46.712 [DEBUG] [Thread-209551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:02:46.712 [DEBUG] [Thread-209551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:02:46.712 [DEBUG] [Thread-209551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:02:46.738 [INFO] [Thread-209551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:02:46.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:02:47.347 [DEBUG] [Thread-209551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:02:47.348 [DEBUG] [Thread-209551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:02:47.348 [DEBUG] [Thread-209551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:02:47.388 [DEBUG] [Thread-209551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:02:47.389 [DEBUG] [Thread-209551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:02:47.393 [DEBUG] [Thread-209551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:02:47.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:02:47.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:02:47.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:02:47.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:02:47.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:02:47.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:02:47.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:02:47.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:02:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:02:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.709816 -999.00  +18.50  17.91     37   +3.70 1 1 1 1 1   887    0 13.12 -75.19 ----- 22.8 17.9 154.6 29.3 20.3 -27.4 20.4 -26.2 20.9 -25.9 21.2 -27.7
2026-02-15T19:02:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:02:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:02:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.709816
2026-02-15T19:02:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:02:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:02:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:02:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:02:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:02:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:02:05', tmtdew=17.14, humidity=31.85, cloud=0.0, wind=31.49, temperature=18.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:02:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:02:47.418 [DEBUG] [Thread-209551] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:02:47.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:02:47.513 [DEBUG] [Thread-209555] [transport.py] [_log()] starting thread (client mode): 0xa57b11e0
2026-02-15T19:02:47.513 [DEBUG] [Thread-209555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:02:47.528 [DEBUG] [Thread-209555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:02:47.529 [INFO] [Thread-209555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:02:47.536 [DEBUG] [Thread-209555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:02:47.537 [DEBUG] [Thread-209555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] client lang: <none>
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] server lang: <none>
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] kex follows: False
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:02:47.538 [DEBUG] [Thread-209555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:02:47.539 [DEBUG] [Thread-209555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:02:47.539 [DEBUG] [Thread-209555] [transport.py] [_log()] Compression: none
2026-02-15T19:02:47.539 [DEBUG] [Thread-209555] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:02:47.602 [DEBUG] [Thread-209555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:02:47.602 [DEBUG] [Thread-209555] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:02:47.604 [DEBUG] [Thread-209555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:02:47.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:02:47.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:02:47.661 [DEBUG] [Thread-209555] [transport.py] [_log()] userauth is OK
2026-02-15T19:02:47.661 [DEBUG] [Thread-209555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:02:47.662 [DEBUG] [Thread-209555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:02:47.662 [DEBUG] [Thread-209555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:02:47.662 [DEBUG] [Thread-209555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:02:47.687 [INFO] [Thread-209555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:02:47.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:02:47.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:02:48.539 [DEBUG] [Thread-209555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:02:48.539 [DEBUG] [Thread-209555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:02:48.587 [DEBUG] [Thread-209555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:02:48.588 [DEBUG] [Thread-209555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:02:48.597 [DEBUG] [Thread-209555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:02:48.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:02:48.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:02:48.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:02:48.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:02:48.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:02:48.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:02:48.633 [DEBUG] [Thread-209555] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:03:01.745 [DEBUG] [Thread-209557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:03.593 [DEBUG] [Thread-209558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:16.797 [DEBUG] [Thread-209559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:18.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:03:18.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:03:18.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:03:21.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 2, 41), 17.9, 30.2, 0.0, 35.64, 19.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:03:21.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:02:41
2026-02-15T19:03:21.212 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:21.213 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:21.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:03:21.681 [DEBUG] [Thread-209560] [transport.py] [_log()] starting thread (client mode): 0xa2d3f910
2026-02-15T19:03:21.681 [DEBUG] [Thread-209560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:03:21.700 [DEBUG] [Thread-209560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:03:21.701 [INFO] [Thread-209560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] client lang: <none>
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] server lang: <none>
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] kex follows: False
2026-02-15T19:03:21.704 [DEBUG] [Thread-209560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:03:21.705 [DEBUG] [Thread-209560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:03:21.705 [DEBUG] [Thread-209560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:03:21.705 [DEBUG] [Thread-209560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:03:21.705 [DEBUG] [Thread-209560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:03:21.705 [DEBUG] [Thread-209560] [transport.py] [_log()] Compression: none
2026-02-15T19:03:21.705 [DEBUG] [Thread-209560] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:03:21.722 [DEBUG] [Thread-209560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:03:21.722 [DEBUG] [Thread-209560] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:03:21.722 [DEBUG] [Thread-209560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:03:21.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:03:21.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:03:21.724 [DEBUG] [Thread-209560] [transport.py] [_log()] userauth is OK
2026-02-15T19:03:21.724 [DEBUG] [Thread-209560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:03:21.724 [DEBUG] [Thread-209560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:03:21.724 [DEBUG] [Thread-209560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:03:21.724 [DEBUG] [Thread-209560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:03:21.738 [INFO] [Thread-209560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:03:21.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:03:22.464 [DEBUG] [Thread-209560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:03:22.464 [DEBUG] [Thread-209560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:03:22.465 [DEBUG] [Thread-209560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:03:22.505 [DEBUG] [Thread-209560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:03:22.506 [DEBUG] [Thread-209560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:03:22.508 [DEBUG] [Thread-209560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:03:22.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:03:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:03:22.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:03:22.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:03:22.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:03:22.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:03:22.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:03:22.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:03:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:03:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.710163 -999.00  +18.50  24.86     37   +3.70 1 1 1 1 1   887    0 12.88 -83.33 ----- 25.5 24.9 142.6 34.2 20.2 -27.4 20.3 -26.4 20.9 -25.5 21.2 -27.4
2026-02-15T19:03:22.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:03:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:03:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.710163
2026-02-15T19:03:22.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:03:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:03:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:03:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:03:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:03:22.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:02:41', tmtdew=17.9, humidity=30.2, cloud=0.0, wind=35.64, temperature=19.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:02:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:03:22.534 [DEBUG] [Thread-209560] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:03:22.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:03:22.628 [DEBUG] [Thread-209563] [transport.py] [_log()] starting thread (client mode): 0xa2d3d090
2026-02-15T19:03:22.628 [DEBUG] [Thread-209563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:03:22.643 [DEBUG] [Thread-209563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:03:22.643 [INFO] [Thread-209563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] client lang: <none>
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] server lang: <none>
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] kex follows: False
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:03:22.651 [DEBUG] [Thread-209563] [transport.py] [_log()] Compression: none
2026-02-15T19:03:22.652 [DEBUG] [Thread-209563] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:03:22.708 [DEBUG] [Thread-209563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:03:22.708 [DEBUG] [Thread-209563] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:03:22.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:03:22.709 [DEBUG] [Thread-209563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:03:22.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:03:22.764 [DEBUG] [Thread-209563] [transport.py] [_log()] userauth is OK
2026-02-15T19:03:22.764 [DEBUG] [Thread-209563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:03:22.765 [DEBUG] [Thread-209563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:03:22.765 [DEBUG] [Thread-209563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:03:22.765 [DEBUG] [Thread-209563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:03:22.783 [INFO] [Thread-209563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:03:22.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:03:22.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:03:23.628 [DEBUG] [Thread-209563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:03:23.628 [DEBUG] [Thread-209563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:03:23.677 [DEBUG] [Thread-209563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:03:23.677 [DEBUG] [Thread-209563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:03:23.687 [DEBUG] [Thread-209563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:03:23.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:03:23.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:03:23.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:03:23.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:03:23.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:03:23.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:03:23.724 [DEBUG] [Thread-209563] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:03:31.829 [DEBUG] [Thread-209565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:46.875 [DEBUG] [Thread-209566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:03:53.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:03:53.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:03:53.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:03:55.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 3, 17), 17.26, 31.67, 0.0, 30.88, 18.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:03:55.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:03:17
2026-02-15T19:03:56.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:03:56.661 [DEBUG] [Thread-209567] [transport.py] [_log()] starting thread (client mode): 0xa2d3f730
2026-02-15T19:03:56.661 [DEBUG] [Thread-209567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:03:56.681 [DEBUG] [Thread-209567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:03:56.681 [INFO] [Thread-209567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] client lang: <none>
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] server lang: <none>
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] kex follows: False
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:03:56.684 [DEBUG] [Thread-209567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:03:56.685 [DEBUG] [Thread-209567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:03:56.685 [DEBUG] [Thread-209567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:03:56.685 [DEBUG] [Thread-209567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:03:56.685 [DEBUG] [Thread-209567] [transport.py] [_log()] Compression: none
2026-02-15T19:03:56.685 [DEBUG] [Thread-209567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:03:56.704 [DEBUG] [Thread-209567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:03:56.705 [DEBUG] [Thread-209567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:03:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:03:56.706 [DEBUG] [Thread-209567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:03:56.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:03:56.708 [DEBUG] [Thread-209567] [transport.py] [_log()] userauth is OK
2026-02-15T19:03:56.708 [DEBUG] [Thread-209567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:03:56.708 [DEBUG] [Thread-209567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:03:56.708 [DEBUG] [Thread-209567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:03:56.708 [DEBUG] [Thread-209567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:03:56.732 [INFO] [Thread-209567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:03:56.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:03:57.360 [DEBUG] [Thread-209567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:03:57.361 [DEBUG] [Thread-209567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:03:57.361 [DEBUG] [Thread-209567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:03:57.401 [DEBUG] [Thread-209567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:03:57.402 [DEBUG] [Thread-209567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:03:57.405 [DEBUG] [Thread-209567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:03:57.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:03:57.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:03:57.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:03:57.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:03:57.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:03:57.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:03:57.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:03:57.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:03:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:03:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.710511 -999.00  +18.50  24.40     37   +3.70 1 1 1 1 1   887    0 13.02 -76.61 ----- 26.0 24.4 143.6 31.8 20.2 -27.6 20.3 -27.1 20.9 -25.7 21.2 -27.5
2026-02-15T19:03:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:03:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:03:57.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.710511
2026-02-15T19:03:57.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:03:57.437 [DEBUG] [Thread-209567] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:03:57.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:03:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:03:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:03:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:03:57.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:03:17', tmtdew=17.26, humidity=31.67, cloud=0.0, wind=30.88, temperature=18.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:03:08.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:03:57.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:03:57.538 [DEBUG] [Thread-209570] [transport.py] [_log()] starting thread (client mode): 0xa2d6fb50
2026-02-15T19:03:57.538 [DEBUG] [Thread-209570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:03:57.553 [DEBUG] [Thread-209570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:03:57.554 [INFO] [Thread-209570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:03:57.561 [DEBUG] [Thread-209570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:03:57.561 [DEBUG] [Thread-209570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] client lang: <none>
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] server lang: <none>
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] kex follows: False
2026-02-15T19:03:57.562 [DEBUG] [Thread-209570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:03:57.563 [DEBUG] [Thread-209570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:03:57.563 [DEBUG] [Thread-209570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:03:57.563 [DEBUG] [Thread-209570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:03:57.563 [DEBUG] [Thread-209570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:03:57.563 [DEBUG] [Thread-209570] [transport.py] [_log()] Compression: none
2026-02-15T19:03:57.563 [DEBUG] [Thread-209570] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:03:57.620 [DEBUG] [Thread-209570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:03:57.621 [DEBUG] [Thread-209570] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:03:57.621 [DEBUG] [Thread-209570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:03:57.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:03:57.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:03:57.676 [DEBUG] [Thread-209570] [transport.py] [_log()] userauth is OK
2026-02-15T19:03:57.676 [DEBUG] [Thread-209570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:03:57.677 [DEBUG] [Thread-209570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:03:57.677 [DEBUG] [Thread-209570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:03:57.677 [DEBUG] [Thread-209570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:03:57.700 [INFO] [Thread-209570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:03:57.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:03:57.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:03:58.569 [DEBUG] [Thread-209570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:03:58.569 [DEBUG] [Thread-209570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:03:58.618 [DEBUG] [Thread-209570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:03:58.618 [DEBUG] [Thread-209570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:03:58.627 [DEBUG] [Thread-209570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:03:58.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:03:58.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:03:58.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:03:58.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:03:58.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:03:58.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:03:58.667 [DEBUG] [Thread-209570] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:04:01.909 [DEBUG] [Thread-209572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:04:03.627 [DEBUG] [Thread-209573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:04:16.951 [DEBUG] [Thread-209574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:04:21.353 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:04:21.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:04:28.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:04:28.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:04:28.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:04:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 3, 53), 17.23, 31.31, 0.0, 33.79, 18.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:04:30.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:03:53
2026-02-15T19:04:31.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:04:31.217 [DEBUG] [Thread-209575] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-15T19:04:31.217 [DEBUG] [Thread-209575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:04:31.237 [DEBUG] [Thread-209575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:04:31.237 [INFO] [Thread-209575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:04:31.240 [DEBUG] [Thread-209575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] client lang: <none>
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] server lang: <none>
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] kex follows: False
2026-02-15T19:04:31.241 [DEBUG] [Thread-209575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:04:31.242 [DEBUG] [Thread-209575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:04:31.242 [DEBUG] [Thread-209575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:04:31.242 [DEBUG] [Thread-209575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:04:31.242 [DEBUG] [Thread-209575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:04:31.242 [DEBUG] [Thread-209575] [transport.py] [_log()] Compression: none
2026-02-15T19:04:31.242 [DEBUG] [Thread-209575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:04:31.258 [DEBUG] [Thread-209575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:04:31.259 [DEBUG] [Thread-209575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:04:31.268 [DEBUG] [Thread-209575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:04:31.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:04:31.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:04:31.270 [DEBUG] [Thread-209575] [transport.py] [_log()] userauth is OK
2026-02-15T19:04:31.270 [DEBUG] [Thread-209575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:04:31.270 [DEBUG] [Thread-209575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:04:31.270 [DEBUG] [Thread-209575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:04:31.270 [DEBUG] [Thread-209575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:04:31.294 [INFO] [Thread-209575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:04:31.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:04:31.940 [DEBUG] [Thread-209575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:04:31.941 [DEBUG] [Thread-209575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:04:31.941 [DEBUG] [Thread-209575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:04:31.981 [DEBUG] [Thread-209575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:04:31.981 [DEBUG] [Thread-209575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:04:31.984 [DEBUG] [Thread-209577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:04:31.985 [DEBUG] [Thread-209575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:04:31.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:04:31.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:04:31.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:04:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:04:32.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:04:32.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:04:32.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:04:32.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:04:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:04:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.710858 -999.00  +18.40  28.15     37   +3.70 1 1 1 1 1   887    0 12.79 -84.84 ----- 28.1 28.1 143.2 35.5 20.2 -27.5 20.2 -26.5 20.8 -25.7 21.1 -28.1
2026-02-15T19:04:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:04:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:04:32.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.710858
2026-02-15T19:04:32.013 [DEBUG] [Thread-209575] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:04:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:04:32.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:04:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:04:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:04:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:04:32.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:03:53', tmtdew=17.23, humidity=31.31, cloud=0.0, wind=33.79, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:03:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:04:32.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:04:32.112 [DEBUG] [Thread-209579] [transport.py] [_log()] starting thread (client mode): 0xa2dc2a70
2026-02-15T19:04:32.112 [DEBUG] [Thread-209579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:04:32.126 [DEBUG] [Thread-209579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:04:32.126 [INFO] [Thread-209579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] client lang: <none>
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] server lang: <none>
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] kex follows: False
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] Compression: none
2026-02-15T19:04:32.134 [DEBUG] [Thread-209579] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:04:32.200 [DEBUG] [Thread-209579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:04:32.200 [DEBUG] [Thread-209579] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:04:32.201 [DEBUG] [Thread-209579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:04:32.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:04:32.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:04:32.261 [DEBUG] [Thread-209579] [transport.py] [_log()] userauth is OK
2026-02-15T19:04:32.261 [DEBUG] [Thread-209579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:04:32.261 [DEBUG] [Thread-209579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:04:32.261 [DEBUG] [Thread-209579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:04:32.261 [DEBUG] [Thread-209579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:04:32.286 [INFO] [Thread-209579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:04:32.295 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:04:32.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:04:33.101 [DEBUG] [Thread-209579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:04:33.101 [DEBUG] [Thread-209579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:04:33.150 [DEBUG] [Thread-209579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:04:33.150 [DEBUG] [Thread-209579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:04:33.158 [DEBUG] [Thread-209579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:04:33.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:04:33.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:04:33.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:04:33.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:04:33.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:04:33.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:04:33.190 [DEBUG] [Thread-209579] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:04:47.023 [DEBUG] [Thread-209581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:02.075 [DEBUG] [Thread-209582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:03.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:05:03.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:05:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:05:03.673 [DEBUG] [Thread-209583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:05.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 4, 29), 17.17, 31.48, 0.0, 31.65, 18.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:05:05.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:04:29
2026-02-15T19:05:05.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:05:05.846 [DEBUG] [Thread-209584] [transport.py] [_log()] starting thread (client mode): 0xa2d19ea0
2026-02-15T19:05:05.846 [DEBUG] [Thread-209584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:05:05.867 [DEBUG] [Thread-209584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:05:05.867 [INFO] [Thread-209584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:05:05.870 [DEBUG] [Thread-209584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:05:05.870 [DEBUG] [Thread-209584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] client lang: <none>
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] server lang: <none>
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] kex follows: False
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] Compression: none
2026-02-15T19:05:05.871 [DEBUG] [Thread-209584] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:05:05.888 [DEBUG] [Thread-209584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:05:05.889 [DEBUG] [Thread-209584] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:05:05.889 [DEBUG] [Thread-209584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:05:05.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:05:05.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:05:05.891 [DEBUG] [Thread-209584] [transport.py] [_log()] userauth is OK
2026-02-15T19:05:05.891 [DEBUG] [Thread-209584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:05:05.892 [DEBUG] [Thread-209584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:05:05.892 [DEBUG] [Thread-209584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:05:05.892 [DEBUG] [Thread-209584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:05:05.916 [INFO] [Thread-209584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:05:05.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:05:15.982 [DEBUG] [Thread-209584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:05:15.983 [DEBUG] [Thread-209584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:05:15.983 [DEBUG] [Thread-209584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:05:16.023 [DEBUG] [Thread-209584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:05:16.023 [DEBUG] [Thread-209584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:05:16.026 [DEBUG] [Thread-209584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:05:16.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:05:16.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:05:16.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:05:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:05:16.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:05:16.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:05:16.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:05:16.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:05:16.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:05:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.711205 -999.00  +18.40  21.61     37   +3.80 1 1 1 1 1   887    0 12.84 -80.96 ----- 18.7 21.6 133.6 36.7 20.1 -27.5 20.2 -26.4 20.8 -25.9 21.1 -28.0
2026-02-15T19:05:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:05:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:05:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.711205
2026-02-15T19:05:16.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:05:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:05:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:05:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:05:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:05:16.056 [DEBUG] [Thread-209584] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:05:16.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:04:29', tmtdew=17.17, humidity=31.48, cloud=0.0, wind=31.65, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:04:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:05:16.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:05:16.152 [DEBUG] [Thread-209587] [transport.py] [_log()] starting thread (client mode): 0xa575bbb0
2026-02-15T19:05:16.153 [DEBUG] [Thread-209587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:05:16.171 [DEBUG] [Thread-209587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:05:16.171 [INFO] [Thread-209587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:05:16.178 [DEBUG] [Thread-209587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] client lang: <none>
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] server lang: <none>
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] kex follows: False
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:05:16.179 [DEBUG] [Thread-209587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:05:16.180 [DEBUG] [Thread-209587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:05:16.180 [DEBUG] [Thread-209587] [transport.py] [_log()] Compression: none
2026-02-15T19:05:16.180 [DEBUG] [Thread-209587] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:05:16.239 [DEBUG] [Thread-209587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:05:16.239 [DEBUG] [Thread-209587] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:05:16.240 [DEBUG] [Thread-209587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:05:16.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:05:16.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:05:16.299 [DEBUG] [Thread-209587] [transport.py] [_log()] userauth is OK
2026-02-15T19:05:16.300 [DEBUG] [Thread-209587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:05:16.300 [DEBUG] [Thread-209587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:05:16.300 [DEBUG] [Thread-209587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:05:16.300 [DEBUG] [Thread-209587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:05:16.319 [INFO] [Thread-209587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:05: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-02-15T19:05:16.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:05:17.112 [DEBUG] [Thread-209589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:17.143 [DEBUG] [Thread-209587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:05:17.144 [DEBUG] [Thread-209587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:05:17.191 [DEBUG] [Thread-209587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:05:17.192 [DEBUG] [Thread-209587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:05:17.200 [DEBUG] [Thread-209587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:05:17.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:05:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:05:17.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:05:17.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:05:17.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:05:17.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:05:17.238 [DEBUG] [Thread-209587] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:05:21.498 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:21.499 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:32.162 [DEBUG] [Thread-209590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:47.198 [DEBUG] [Thread-209591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:05:47.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:05:47.259 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:05:47.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:05:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 5, 41), 17.39, 31.26, 0.0, 29.25, 19.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:05:49.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:05:41
2026-02-15T19:05:49.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:05:49.640 [DEBUG] [Thread-209592] [transport.py] [_log()] starting thread (client mode): 0xa2d6e650
2026-02-15T19:05:49.640 [DEBUG] [Thread-209592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:05:49.659 [DEBUG] [Thread-209592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:05:49.659 [INFO] [Thread-209592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:05:49.662 [DEBUG] [Thread-209592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:05:49.662 [DEBUG] [Thread-209592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] client lang: <none>
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] server lang: <none>
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] kex follows: False
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:05:49.663 [DEBUG] [Thread-209592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:05:49.664 [DEBUG] [Thread-209592] [transport.py] [_log()] Compression: none
2026-02-15T19:05:49.664 [DEBUG] [Thread-209592] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:05:49.675 [DEBUG] [Thread-209592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:05:49.675 [DEBUG] [Thread-209592] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:05:49.676 [DEBUG] [Thread-209592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:05:49.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:05:49.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:05:49.677 [DEBUG] [Thread-209592] [transport.py] [_log()] userauth is OK
2026-02-15T19:05:49.677 [DEBUG] [Thread-209592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:05:49.677 [DEBUG] [Thread-209592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:05:49.677 [DEBUG] [Thread-209592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:05:49.678 [DEBUG] [Thread-209592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:05:49.691 [INFO] [Thread-209592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:05:49.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:05:50.279 [DEBUG] [Thread-209592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:05:50.280 [DEBUG] [Thread-209592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:05:50.280 [DEBUG] [Thread-209592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:05:50.321 [DEBUG] [Thread-209592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:05:50.321 [DEBUG] [Thread-209592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:05:50.325 [DEBUG] [Thread-209592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:05:50.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:05:50.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:05:50.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:05:50.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:05:50.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:05:50.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:05:50.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:05:50.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:05:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:05:50.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.712247 -999.00  +18.40  22.58     38   +3.80 1 1 1 1 1   887    0 12.21 -95.43 ----- 25.1 22.6 155.4 32.2 20.0 -27.4 20.1 -26.3 20.6 -26.0 20.9 -27.7
2026-02-15T19:05:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:05:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:05:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.712247
2026-02-15T19:05:50.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:05:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:05:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:05:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:05:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:05:50.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:05:41', tmtdew=17.39, humidity=31.26, cloud=0.0, wind=29.25, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:05:38.141', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:05:50.351 [DEBUG] [Thread-209592] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:05:50.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:05:50.447 [DEBUG] [Thread-209595] [transport.py] [_log()] starting thread (client mode): 0xa2d19f00
2026-02-15T19:05:50.447 [DEBUG] [Thread-209595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:05:50.461 [DEBUG] [Thread-209595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:05:50.462 [INFO] [Thread-209595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:05:50.469 [DEBUG] [Thread-209595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:05:50.469 [DEBUG] [Thread-209595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:05:50.469 [DEBUG] [Thread-209595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:05:50.469 [DEBUG] [Thread-209595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] client lang: <none>
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] server lang: <none>
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] kex follows: False
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] Compression: none
2026-02-15T19:05:50.470 [DEBUG] [Thread-209595] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:05:50.527 [DEBUG] [Thread-209595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:05:50.528 [DEBUG] [Thread-209595] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:05:50.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:05:50.529 [DEBUG] [Thread-209595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:05:50.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:05:50.583 [DEBUG] [Thread-209595] [transport.py] [_log()] userauth is OK
2026-02-15T19:05:50.584 [DEBUG] [Thread-209595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:05:50.584 [DEBUG] [Thread-209595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:05:50.584 [DEBUG] [Thread-209595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:05:50.584 [DEBUG] [Thread-209595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:05:50.603 [INFO] [Thread-209595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:05:50.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:05:50.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:05:51.448 [DEBUG] [Thread-209595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:05:51.448 [DEBUG] [Thread-209595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:05:51.495 [DEBUG] [Thread-209595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:05:51.496 [DEBUG] [Thread-209595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:05:51.505 [DEBUG] [Thread-209595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:05:51.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:05:51.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:05:51.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:05:51.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:05:51.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:05:51.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:05:51.542 [DEBUG] [Thread-209595] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:06:02.235 [DEBUG] [Thread-209597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:04.453 [DEBUG] [Thread-209598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:17.287 [DEBUG] [Thread-209599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:21.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:06:21.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:06:21.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:06:21.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:21.648 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:23.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 5, 41), 17.39, 31.26, 0.0, 29.25, 19.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:06:23.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:05:41
2026-02-15T19:06:23.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:06:23.886 [DEBUG] [Thread-209600] [transport.py] [_log()] starting thread (client mode): 0xa2d18100
2026-02-15T19:06:23.886 [DEBUG] [Thread-209600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:06:23.907 [DEBUG] [Thread-209600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:06:23.907 [INFO] [Thread-209600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:06:23.910 [DEBUG] [Thread-209600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] client lang: <none>
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] server lang: <none>
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] kex follows: False
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] Compression: none
2026-02-15T19:06:23.911 [DEBUG] [Thread-209600] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:06:23.925 [DEBUG] [Thread-209600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:06:23.926 [DEBUG] [Thread-209600] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:06:23.926 [DEBUG] [Thread-209600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:06:23.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:06:23.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:06:23.928 [DEBUG] [Thread-209600] [transport.py] [_log()] userauth is OK
2026-02-15T19:06:23.928 [DEBUG] [Thread-209600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:06:23.928 [DEBUG] [Thread-209600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:06:23.928 [DEBUG] [Thread-209600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:06:23.928 [DEBUG] [Thread-209600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:06:23.948 [INFO] [Thread-209600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:06:23.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:06:24.520 [DEBUG] [Thread-209600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:06:24.520 [DEBUG] [Thread-209600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:06:24.520 [DEBUG] [Thread-209600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:06:24.561 [DEBUG] [Thread-209600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:06:24.561 [DEBUG] [Thread-209600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:06:24.563 [DEBUG] [Thread-209600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:06:24.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:06:24.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:06:24.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:06:24.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:06:24.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:06:24.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:06:24.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:06:24.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:06:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:06:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.712594 -999.00  +18.40  26.32     37   +3.70 1 1 1 1 1   887    0 12.46 -98.90 ----- 25.8 26.3 157.4 33.1 20.0 -27.2 20.1 -26.3 20.6 -25.8 20.9 -27.5
2026-02-15T19:06:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:06:24.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:06:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.712594
2026-02-15T19:06:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:06:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:06:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:06:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:06:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:06:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:05:41', tmtdew=17.39, humidity=31.26, cloud=0.0, wind=29.25, temperature=19.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:06:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:06:24.581 [DEBUG] [Thread-209600] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:06:24.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:06:24.674 [DEBUG] [Thread-209603] [transport.py] [_log()] starting thread (client mode): 0xa2d6ec80
2026-02-15T19:06:24.675 [DEBUG] [Thread-209603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:06:24.689 [DEBUG] [Thread-209603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:06:24.689 [INFO] [Thread-209603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:06:24.696 [DEBUG] [Thread-209603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:24.697 [DEBUG] [Thread-209603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] client lang: <none>
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] server lang: <none>
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] kex follows: False
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:06:24.698 [DEBUG] [Thread-209603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:06:24.699 [DEBUG] [Thread-209603] [transport.py] [_log()] Compression: none
2026-02-15T19:06:24.699 [DEBUG] [Thread-209603] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:06:24.754 [DEBUG] [Thread-209603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:06:24.754 [DEBUG] [Thread-209603] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:06:24.755 [DEBUG] [Thread-209603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:06:24.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:06:24.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:06:24.810 [DEBUG] [Thread-209603] [transport.py] [_log()] userauth is OK
2026-02-15T19:06:24.810 [DEBUG] [Thread-209603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:06:24.811 [DEBUG] [Thread-209603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:06:24.811 [DEBUG] [Thread-209603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:06:24.811 [DEBUG] [Thread-209603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:06:24.829 [INFO] [Thread-209603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:06:24.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:06:24.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:06:25.708 [DEBUG] [Thread-209603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:06:25.708 [DEBUG] [Thread-209603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:06:25.757 [DEBUG] [Thread-209603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:06:25.757 [DEBUG] [Thread-209603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:06:25.767 [DEBUG] [Thread-209603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:06:25.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:06: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')
2026-02-15T19:06:25.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:06:25.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:06:25.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:06:25.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:06:25.801 [DEBUG] [Thread-209603] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:06:32.327 [DEBUG] [Thread-209605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:47.376 [DEBUG] [Thread-209606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:06:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:06:55.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:06:55.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:06:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 6, 16), 16.86, 32.21, 0.0, 30.03, 18.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:06:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:06:16
2026-02-15T19:06:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:06:58.326 [DEBUG] [Thread-209607] [transport.py] [_log()] starting thread (client mode): 0xa2d6df00
2026-02-15T19:06:58.327 [DEBUG] [Thread-209607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:06:58.348 [DEBUG] [Thread-209607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:06:58.348 [INFO] [Thread-209607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:06:58.351 [DEBUG] [Thread-209607] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:06:58.351 [DEBUG] [Thread-209607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] client lang: <none>
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] server lang: <none>
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] kex follows: False
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:06:58.352 [DEBUG] [Thread-209607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:06:58.353 [DEBUG] [Thread-209607] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:06:58.353 [DEBUG] [Thread-209607] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:06:58.353 [DEBUG] [Thread-209607] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:06:58.353 [DEBUG] [Thread-209607] [transport.py] [_log()] Compression: none
2026-02-15T19:06:58.353 [DEBUG] [Thread-209607] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:06:58.372 [DEBUG] [Thread-209607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:06:58.372 [DEBUG] [Thread-209607] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:06:58.373 [DEBUG] [Thread-209607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:06:58.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:06:58.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:06:58.376 [DEBUG] [Thread-209607] [transport.py] [_log()] userauth is OK
2026-02-15T19:06:58.377 [DEBUG] [Thread-209607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:06:58.377 [DEBUG] [Thread-209607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:06:58.377 [DEBUG] [Thread-209607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:06:58.377 [DEBUG] [Thread-209607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:06:58.413 [INFO] [Thread-209607] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:06:58.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:06:59.044 [DEBUG] [Thread-209607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:06:59.044 [DEBUG] [Thread-209607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:06:59.045 [DEBUG] [Thread-209607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:06:59.086 [DEBUG] [Thread-209607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:06:59.086 [DEBUG] [Thread-209607] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:06:59.091 [DEBUG] [Thread-209607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:06:59.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:06:59.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:06:59.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:06:59.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:06:59.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:06:59.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:06:59.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:06:59.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:06:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:06:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.712941 -999.00  +18.40  15.36     38   +3.80 1 1 1 1 1   887    0 12.76 -86.95 ----- 19.8 15.4 152.4 31.4 19.9 -27.5 20.0 -26.4 20.5 -25.6 20.9 -27.6
2026-02-15T19:06:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:06:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:06:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.712941
2026-02-15T19:06:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:06:59.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:06:59.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:06:59.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:06:59.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:06:59.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:06:16', tmtdew=16.86, humidity=32.21, cloud=0.0, wind=30.03, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:06:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:06:59.126 [DEBUG] [Thread-209607] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:06:59.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:06:59.221 [DEBUG] [Thread-209610] [transport.py] [_log()] starting thread (client mode): 0xa2d3d660
2026-02-15T19:06:59.221 [DEBUG] [Thread-209610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:06:59.236 [DEBUG] [Thread-209610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:06:59.236 [INFO] [Thread-209610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:06:59.243 [DEBUG] [Thread-209610] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:06:59.243 [DEBUG] [Thread-209610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] client lang: <none>
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] server lang: <none>
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] kex follows: False
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] Compression: none
2026-02-15T19:06:59.244 [DEBUG] [Thread-209610] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:06:59.302 [DEBUG] [Thread-209610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:06:59.303 [DEBUG] [Thread-209610] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:06:59.304 [DEBUG] [Thread-209610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:06:59.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:06:59.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:06:59.359 [DEBUG] [Thread-209610] [transport.py] [_log()] userauth is OK
2026-02-15T19:06:59.359 [DEBUG] [Thread-209610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:06:59.359 [DEBUG] [Thread-209610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:06:59.359 [DEBUG] [Thread-209610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:06:59.359 [DEBUG] [Thread-209610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:06:59.377 [INFO] [Thread-209610] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:06:59.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:06:59.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:07:00.201 [DEBUG] [Thread-209610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:07:00.202 [DEBUG] [Thread-209610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:07:00.249 [DEBUG] [Thread-209610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:07:00.249 [DEBUG] [Thread-209610] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:07:00.258 [DEBUG] [Thread-209610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:07:00.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:07:00.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:07:00.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:07:00.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:07:00.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:07:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:07:00.295 [DEBUG] [Thread-209610] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:07:02.408 [DEBUG] [Thread-209612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:07:04.486 [DEBUG] [Thread-209613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:07:17.451 [DEBUG] [Thread-209614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:07:21.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:07:21.797 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:07:30.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:07:30.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:07:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:07:32.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 6, 51), 16.89, 32.15, 0.0, 28.41, 18.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:07:32.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:06:51
2026-02-15T19:07:32.488 [DEBUG] [Thread-209615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:07:32.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:07:32.887 [DEBUG] [Thread-209616] [transport.py] [_log()] starting thread (client mode): 0xa2d3d630
2026-02-15T19:07:32.887 [DEBUG] [Thread-209616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:07:32.908 [DEBUG] [Thread-209616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:07:32.908 [INFO] [Thread-209616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:07:32.911 [DEBUG] [Thread-209616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] client lang: <none>
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] server lang: <none>
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] kex follows: False
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] Compression: none
2026-02-15T19:07:32.912 [DEBUG] [Thread-209616] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:07:32.932 [DEBUG] [Thread-209616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:07:32.933 [DEBUG] [Thread-209616] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:07:32.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:07:32.933 [DEBUG] [Thread-209616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:07:32.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:07:32.935 [DEBUG] [Thread-209616] [transport.py] [_log()] userauth is OK
2026-02-15T19:07:32.935 [DEBUG] [Thread-209616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:07:32.935 [DEBUG] [Thread-209616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:07:32.935 [DEBUG] [Thread-209616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:07:32.935 [DEBUG] [Thread-209616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:07:32.958 [INFO] [Thread-209616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:07:32.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:07:33.576 [DEBUG] [Thread-209616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:07:33.576 [DEBUG] [Thread-209616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:07:33.576 [DEBUG] [Thread-209616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:07:33.617 [DEBUG] [Thread-209616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:07:33.617 [DEBUG] [Thread-209616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:07:33.620 [DEBUG] [Thread-209616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:07:33.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:07:33.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:07:33.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:07:33.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:07:33.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:07:33.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:07:33.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:07:33.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:07:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:07:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.713288 -999.00  +18.40  21.11     37   +3.80 1 1 1 1 1   887    0 12.64 -87.40 ----- 20.8 21.1 157.2 27.2 -999.0 -999.0 20.0 -26.4 20.5 -26.0 20.8 -27.7
2026-02-15T19:07:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:07:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:07:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.713288
2026-02-15T19:07:33.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:07:33.644 [DEBUG] [Thread-209616] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:07:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:07:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:07:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:07:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:07:33.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:06:51', tmtdew=16.89, humidity=32.15, cloud=0.0, wind=28.41, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:07:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:07:33.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:07:33.740 [DEBUG] [Thread-209619] [transport.py] [_log()] starting thread (client mode): 0xa5759ff0
2026-02-15T19:07:33.740 [DEBUG] [Thread-209619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:07:33.755 [DEBUG] [Thread-209619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:07:33.755 [INFO] [Thread-209619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] client lang: <none>
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] server lang: <none>
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] kex follows: False
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:07:33.763 [DEBUG] [Thread-209619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:07:33.764 [DEBUG] [Thread-209619] [transport.py] [_log()] Compression: none
2026-02-15T19:07:33.764 [DEBUG] [Thread-209619] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:07:33.823 [DEBUG] [Thread-209619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:07:33.823 [DEBUG] [Thread-209619] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:07:33.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:07:33.824 [DEBUG] [Thread-209619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:07:33.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:07:33.878 [DEBUG] [Thread-209619] [transport.py] [_log()] userauth is OK
2026-02-15T19:07:33.879 [DEBUG] [Thread-209619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:07:33.879 [DEBUG] [Thread-209619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:07:33.879 [DEBUG] [Thread-209619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:07:33.879 [DEBUG] [Thread-209619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:07:33.898 [INFO] [Thread-209619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:07:33.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:07:33.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:07:34.774 [DEBUG] [Thread-209619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:07:34.774 [DEBUG] [Thread-209619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:07:34.822 [DEBUG] [Thread-209619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:07:34.823 [DEBUG] [Thread-209619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:07:34.832 [DEBUG] [Thread-209619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:07:34.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:07:34.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:07:34.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:07:34.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:07:34.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:07:34.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:07:34.866 [DEBUG] [Thread-209619] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:07:47.525 [DEBUG] [Thread-209621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:02.573 [DEBUG] [Thread-209622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:04.531 [DEBUG] [Thread-209623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:04.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:08:04.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:08:04.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:08:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 7, 27), 16.89, 32.15, 0.0, 32.78, 18.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:08:07.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:07:27
2026-02-15T19:08:07.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:08:07.997 [DEBUG] [Thread-209624] [transport.py] [_log()] starting thread (client mode): 0xa57583a0
2026-02-15T19:08:07.997 [DEBUG] [Thread-209624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:08:08.018 [DEBUG] [Thread-209624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:08:08.018 [INFO] [Thread-209624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] client lang: <none>
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] server lang: <none>
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] kex follows: False
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] Compression: none
2026-02-15T19:08:08.021 [DEBUG] [Thread-209624] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:08:08.037 [DEBUG] [Thread-209624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:08:08.038 [DEBUG] [Thread-209624] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:08:08.038 [DEBUG] [Thread-209624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:08:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:08:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:08:08.039 [DEBUG] [Thread-209624] [transport.py] [_log()] userauth is OK
2026-02-15T19:08:08.039 [DEBUG] [Thread-209624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:08:08.040 [DEBUG] [Thread-209624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:08:08.040 [DEBUG] [Thread-209624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:08:08.040 [DEBUG] [Thread-209624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:08:08.064 [INFO] [Thread-209624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:08:08.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:08:08.703 [DEBUG] [Thread-209624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:08:08.703 [DEBUG] [Thread-209624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:08:08.704 [DEBUG] [Thread-209624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:08:08.744 [DEBUG] [Thread-209624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:08:08.744 [DEBUG] [Thread-209624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:08:08.748 [DEBUG] [Thread-209624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:08:08.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:08:08.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:08:08.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:08:08.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:08:08.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:08:08.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:08:08.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:08:08.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:08:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:08:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.713636 -999.00  +18.40  22.59     37   +3.70 1 1 1 1 1   887    0 12.48 -83.68 ----- 28.2 22.6 145.0 34.4 19.9 -27.5 20.0 -26.2 20.5 -25.4 20.8 -27.4
2026-02-15T19:08:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:08:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:08:08.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.713636
2026-02-15T19:08:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:08:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:08:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:08:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:08:08.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:08:08.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:07:27', tmtdew=16.89, humidity=32.15, cloud=0.0, wind=32.78, temperature=18.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:07:38.150', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:08:08.776 [DEBUG] [Thread-209624] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:08:08.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:08:08.868 [DEBUG] [Thread-209627] [transport.py] [_log()] starting thread (client mode): 0xa5743460
2026-02-15T19:08:08.868 [DEBUG] [Thread-209627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:08:08.884 [DEBUG] [Thread-209627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:08:08.884 [INFO] [Thread-209627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:08:08.891 [DEBUG] [Thread-209627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] client lang: <none>
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] server lang: <none>
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] kex follows: False
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] Compression: none
2026-02-15T19:08:08.892 [DEBUG] [Thread-209627] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:08:08.949 [DEBUG] [Thread-209627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:08:08.950 [DEBUG] [Thread-209627] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:08:08.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:08:08.951 [DEBUG] [Thread-209627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:08:08.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:08:09.006 [DEBUG] [Thread-209627] [transport.py] [_log()] userauth is OK
2026-02-15T19:08:09.007 [DEBUG] [Thread-209627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:08:09.007 [DEBUG] [Thread-209627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:08:09.007 [DEBUG] [Thread-209627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:08:09.007 [DEBUG] [Thread-209627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:08:09.026 [INFO] [Thread-209627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:08:09.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:08:09.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:08:09.873 [DEBUG] [Thread-209627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:08:09.874 [DEBUG] [Thread-209627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:08:09.921 [DEBUG] [Thread-209627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:08:09.922 [DEBUG] [Thread-209627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:08:09.931 [DEBUG] [Thread-209627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:08:09.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:08:09.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:08:09.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:08:09.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:08:09.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:08:09.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:08:09.967 [DEBUG] [Thread-209627] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:08:17.604 [DEBUG] [Thread-209629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:21.941 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:21.942 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:32.657 [DEBUG] [Thread-209630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:08:39.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:08:39.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:08: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
2026-02-15T19:08:42.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 8, 3), 16.92, 32.06, 0.0, 32.8, 18.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:08:42.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:08:03
2026-02-15T19:08:42.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:08:43.031 [DEBUG] [Thread-209631] [transport.py] [_log()] starting thread (client mode): 0xa5743520
2026-02-15T19:08:43.031 [DEBUG] [Thread-209631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:08:43.051 [DEBUG] [Thread-209631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:08:43.051 [INFO] [Thread-209631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] client lang: <none>
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] server lang: <none>
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] kex follows: False
2026-02-15T19:08:43.054 [DEBUG] [Thread-209631] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:08:43.055 [DEBUG] [Thread-209631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:08:43.055 [DEBUG] [Thread-209631] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:08:43.055 [DEBUG] [Thread-209631] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:08:43.055 [DEBUG] [Thread-209631] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:08:43.055 [DEBUG] [Thread-209631] [transport.py] [_log()] Compression: none
2026-02-15T19:08:43.055 [DEBUG] [Thread-209631] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:08:43.073 [DEBUG] [Thread-209631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:08:43.074 [DEBUG] [Thread-209631] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:08:43.074 [DEBUG] [Thread-209631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:08:43.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:08:43.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:08:43.076 [DEBUG] [Thread-209631] [transport.py] [_log()] userauth is OK
2026-02-15T19:08:43.076 [DEBUG] [Thread-209631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:08:43.076 [DEBUG] [Thread-209631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:08:43.076 [DEBUG] [Thread-209631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:08:43.076 [DEBUG] [Thread-209631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:08:43.096 [INFO] [Thread-209631] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:08:43.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:08:43.747 [DEBUG] [Thread-209631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:08:43.747 [DEBUG] [Thread-209631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:08:43.748 [DEBUG] [Thread-209631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:08:43.788 [DEBUG] [Thread-209631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:08:43.789 [DEBUG] [Thread-209631] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:08:43.792 [DEBUG] [Thread-209631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:08:43.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:08:43.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:08:43.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:08:43.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:08:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:08:43.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:08:43.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:08:43.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:08:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:08:43.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.713983 -999.00  +18.40  17.05     37   +3.70 1 1 1 1 1   887    0 12.78 -81.78 ----- 22.3 17.1 148.6 31.9 19.9 -27.3 20.0 -26.0 20.4 -25.5 20.7 -27.2
2026-02-15T19:08:43.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:08:43.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:08:43.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.713983
2026-02-15T19:08:43.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:08:43.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:08:43.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:08:43.819 [DEBUG] [Thread-209631] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:08:43.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:08:43.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:08:43.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:08:03', tmtdew=16.92, humidity=32.06, cloud=0.0, wind=32.8, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:08:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:08:43.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:08:43.915 [DEBUG] [Thread-209634] [transport.py] [_log()] starting thread (client mode): 0xa2dc0520
2026-02-15T19:08:43.916 [DEBUG] [Thread-209634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:08:43.930 [DEBUG] [Thread-209634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:08:43.930 [INFO] [Thread-209634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:08:43.938 [DEBUG] [Thread-209634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] client lang: <none>
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] server lang: <none>
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] kex follows: False
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:08:43.939 [DEBUG] [Thread-209634] [transport.py] [_log()] Compression: none
2026-02-15T19:08:43.940 [DEBUG] [Thread-209634] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:08:44.002 [DEBUG] [Thread-209634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:08:44.002 [DEBUG] [Thread-209634] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:08:44.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:08:44.004 [DEBUG] [Thread-209634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:08:44.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:08:44.057 [DEBUG] [Thread-209634] [transport.py] [_log()] userauth is OK
2026-02-15T19:08:44.058 [DEBUG] [Thread-209634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:08:44.058 [DEBUG] [Thread-209634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:08:44.058 [DEBUG] [Thread-209634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:08:44.058 [DEBUG] [Thread-209634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:08:44.081 [INFO] [Thread-209634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:08:44.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:08:44.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:08:44.901 [DEBUG] [Thread-209634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:08:44.901 [DEBUG] [Thread-209634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:08:44.948 [DEBUG] [Thread-209634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:08:44.949 [DEBUG] [Thread-209634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:08:44.958 [DEBUG] [Thread-209634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:08:44.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:08:44.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:08:44.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:08:44.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:08:44.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:08:44.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:08:44.994 [DEBUG] [Thread-209634] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:08:47.696 [DEBUG] [Thread-209636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:02.746 [DEBUG] [Thread-209637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:04.564 [DEBUG] [Thread-209638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:15.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:09:15.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:09:15.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:09:17.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 8, 39), 17.48, 31.03, 0.0, 33.48, 19.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:09:17.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:08:39
2026-02-15T19:09:17.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:09:17.671 [DEBUG] [Thread-209639] [transport.py] [_log()] starting thread (client mode): 0xa5740a90
2026-02-15T19:09:17.671 [DEBUG] [Thread-209639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:09:17.692 [DEBUG] [Thread-209639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:09:17.692 [INFO] [Thread-209639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:17.695 [DEBUG] [Thread-209639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] client lang: <none>
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] server lang: <none>
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] kex follows: False
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] Compression: none
2026-02-15T19:09:17.696 [DEBUG] [Thread-209639] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:09:17.717 [DEBUG] [Thread-209639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:09:17.717 [DEBUG] [Thread-209639] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:09:17.718 [DEBUG] [Thread-209639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:09:17.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:09:17.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:09:17.721 [DEBUG] [Thread-209639] [transport.py] [_log()] userauth is OK
2026-02-15T19:09:17.721 [DEBUG] [Thread-209639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:09:17.721 [DEBUG] [Thread-209639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:09:17.721 [DEBUG] [Thread-209639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:09:17.722 [DEBUG] [Thread-209639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:09:17.758 [INFO] [Thread-209639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:09:17.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:09:17.785 [DEBUG] [Thread-209641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:18.394 [DEBUG] [Thread-209639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:09:18.394 [DEBUG] [Thread-209639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:09:18.394 [DEBUG] [Thread-209639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:09:18.435 [DEBUG] [Thread-209639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:09:18.435 [DEBUG] [Thread-209639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:09:18.438 [DEBUG] [Thread-209639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:09:18.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:09:18.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:09:18.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:09:18.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:09:18.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:09:18.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:09:18.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:09:18.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:09:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:09:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.714330 -999.00  +18.40  18.55     37   +3.70 1 1 1 1 1   887    0 12.68 -79.57 ----- 21.7 18.6 156.8 31.5 19.9 -27.2 20.0 -26.4 20.4 -25.6 20.7 -27.6
2026-02-15T19:09:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:09:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:09:18.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.714330
2026-02-15T19:09:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:09:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:09:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:09:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:09:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:09:18.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:08:39', tmtdew=17.48, humidity=31.03, cloud=0.0, wind=33.48, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:08:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:09:18.470 [DEBUG] [Thread-209639] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:09:18.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:09:18.565 [DEBUG] [Thread-209643] [transport.py] [_log()] starting thread (client mode): 0xa2d194e0
2026-02-15T19:09:18.565 [DEBUG] [Thread-209643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:09:18.580 [DEBUG] [Thread-209643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:09:18.580 [INFO] [Thread-209643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:09:18.587 [DEBUG] [Thread-209643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] client lang: <none>
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] server lang: <none>
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] kex follows: False
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:09:18.588 [DEBUG] [Thread-209643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:09:18.589 [DEBUG] [Thread-209643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:09:18.589 [DEBUG] [Thread-209643] [transport.py] [_log()] Compression: none
2026-02-15T19:09:18.589 [DEBUG] [Thread-209643] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:09:18.646 [DEBUG] [Thread-209643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:09:18.646 [DEBUG] [Thread-209643] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:09:18.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:09:18.647 [DEBUG] [Thread-209643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:09:18.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:09:18.701 [DEBUG] [Thread-209643] [transport.py] [_log()] userauth is OK
2026-02-15T19:09:18.702 [DEBUG] [Thread-209643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:09:18.702 [DEBUG] [Thread-209643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:09:18.702 [DEBUG] [Thread-209643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:09:18.702 [DEBUG] [Thread-209643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:09:18.721 [INFO] [Thread-209643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:09:18.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:09:18.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:09:19.583 [DEBUG] [Thread-209643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:09:19.583 [DEBUG] [Thread-209643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:09:19.631 [DEBUG] [Thread-209643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:09:19.631 [DEBUG] [Thread-209643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:09:19.640 [DEBUG] [Thread-209643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:09:19.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:09:19.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:09:19.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:09:19.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:09:19.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:09:19.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:09:19.675 [DEBUG] [Thread-209643] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:09:22.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:22.085 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:32.820 [DEBUG] [Thread-209645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:47.880 [DEBUG] [Thread-209646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:09:49.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:09:49.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:09:49.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:09:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 9, 15), 17.04, 32.0, 0.0, 25.25, 18.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:09:51.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:09:15
2026-02-15T19:09:52.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:09:52.414 [DEBUG] [Thread-209647] [transport.py] [_log()] starting thread (client mode): 0xa57e0be0
2026-02-15T19:09:52.414 [DEBUG] [Thread-209647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:09:52.435 [DEBUG] [Thread-209647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:09:52.435 [INFO] [Thread-209647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:09:52.438 [DEBUG] [Thread-209647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:09:52.438 [DEBUG] [Thread-209647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] client lang: <none>
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] server lang: <none>
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] kex follows: False
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:09:52.439 [DEBUG] [Thread-209647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:09:52.440 [DEBUG] [Thread-209647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:09:52.440 [DEBUG] [Thread-209647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:09:52.440 [DEBUG] [Thread-209647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:09:52.440 [DEBUG] [Thread-209647] [transport.py] [_log()] Compression: none
2026-02-15T19:09:52.440 [DEBUG] [Thread-209647] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:09:52.459 [DEBUG] [Thread-209647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:09:52.460 [DEBUG] [Thread-209647] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:09:52.460 [DEBUG] [Thread-209647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:09:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:09:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:09:52.463 [DEBUG] [Thread-209647] [transport.py] [_log()] userauth is OK
2026-02-15T19:09:52.463 [DEBUG] [Thread-209647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:09:52.463 [DEBUG] [Thread-209647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:09:52.463 [DEBUG] [Thread-209647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:09:52.463 [DEBUG] [Thread-209647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:09:52.477 [INFO] [Thread-209647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:09:52.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:09:53.060 [DEBUG] [Thread-209647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:09:53.061 [DEBUG] [Thread-209647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:09:53.061 [DEBUG] [Thread-209647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:09:53.102 [DEBUG] [Thread-209647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:09:53.102 [DEBUG] [Thread-209647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:09:53.105 [DEBUG] [Thread-209647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:09:53.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:09:53.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:09:53.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:09:53.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:09:53.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:09:53.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:09:53.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:09:53.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:09:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:09:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.714677 -999.00  +18.40  26.70     37   +3.70 1 1 1 1 1   887    0 12.63 -73.94 ----- 23.9 26.7 146.2 33.7 19.9 -27.3 19.9 -26.5 20.3 -25.5 20.7 -27.5
2026-02-15T19:09:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:09:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:09:53.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.714677
2026-02-15T19:09:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:09:53.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:09:53.133 [DEBUG] [Thread-209647] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:09:53.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:09:53.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:09:53.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:09:53.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:09:15', tmtdew=17.04, humidity=32.0, cloud=0.0, wind=25.25, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:09:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:09:53.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:09:53.225 [DEBUG] [Thread-209650] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-15T19:09:53.226 [DEBUG] [Thread-209650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:09:53.240 [DEBUG] [Thread-209650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:09:53.240 [INFO] [Thread-209650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:09:53.248 [DEBUG] [Thread-209650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:09:53.248 [DEBUG] [Thread-209650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:09:53.248 [DEBUG] [Thread-209650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:09:53.248 [DEBUG] [Thread-209650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:53.248 [DEBUG] [Thread-209650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:09:53.248 [DEBUG] [Thread-209650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] client lang: <none>
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] server lang: <none>
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] kex follows: False
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] Compression: none
2026-02-15T19:09:53.249 [DEBUG] [Thread-209650] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:09:53.304 [DEBUG] [Thread-209650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:09:53.305 [DEBUG] [Thread-209650] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:09:53.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:09:53.306 [DEBUG] [Thread-209650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:09:53.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:09:53.361 [DEBUG] [Thread-209650] [transport.py] [_log()] userauth is OK
2026-02-15T19:09:53.361 [DEBUG] [Thread-209650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:09:53.361 [DEBUG] [Thread-209650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:09:53.361 [DEBUG] [Thread-209650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:09:53.361 [DEBUG] [Thread-209650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:09:53.383 [INFO] [Thread-209650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:09:53.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:09:53.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:09:54.198 [DEBUG] [Thread-209650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:09:54.198 [DEBUG] [Thread-209650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:09:54.246 [DEBUG] [Thread-209650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:09:54.246 [DEBUG] [Thread-209650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:09:54.255 [DEBUG] [Thread-209650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:09:54.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:09:54.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:09:54.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:09:54.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:09:54.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:09:54.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:09:54.288 [DEBUG] [Thread-209650] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:10:02.911 [DEBUG] [Thread-209652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:04.596 [DEBUG] [Thread-209653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:17.959 [DEBUG] [Thread-209654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:22.224 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:22.226 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:24.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:10:24.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:10:24.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:10:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 9, 50), 16.98, 32.16, 0.0, 32.7, 18.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:10:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:09:50
2026-02-15T19:10:26.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:10:26.695 [DEBUG] [Thread-209655] [transport.py] [_log()] starting thread (client mode): 0xa57e1bd0
2026-02-15T19:10:26.695 [DEBUG] [Thread-209655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:10:26.715 [DEBUG] [Thread-209655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:10:26.715 [INFO] [Thread-209655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:10:26.718 [DEBUG] [Thread-209655] [transport.py] [_log()] client lang: <none>
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] server lang: <none>
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] kex follows: False
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] Compression: none
2026-02-15T19:10:26.719 [DEBUG] [Thread-209655] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:10:26.734 [DEBUG] [Thread-209655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:10:26.734 [DEBUG] [Thread-209655] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:10:26.734 [DEBUG] [Thread-209655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:10:26.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:10:26.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:10:26.776 [DEBUG] [Thread-209655] [transport.py] [_log()] userauth is OK
2026-02-15T19:10:26.776 [DEBUG] [Thread-209655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:10:26.776 [DEBUG] [Thread-209655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:10:26.776 [DEBUG] [Thread-209655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:10:26.776 [DEBUG] [Thread-209655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:10:26.791 [INFO] [Thread-209655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:10:26.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:10:27.431 [DEBUG] [Thread-209655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:10:27.431 [DEBUG] [Thread-209655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:10:27.431 [DEBUG] [Thread-209655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:10:27.472 [DEBUG] [Thread-209655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:10:27.473 [DEBUG] [Thread-209655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:10:27.476 [DEBUG] [Thread-209655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:10:27.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:10:27.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:10:27.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:10:27.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:10:27.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:10:27.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:10:27.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:10:27.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:10:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:10:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.715371 -999.00  +18.30  25.62     37   +3.60 1 1 1 1 1   887    0 12.74 -66.39 ----- 23.2 25.6 149.0 37.1 19.8 -27.3 19.9 -26.4 20.3 -25.8 20.6 -27.1
2026-02-15T19:10:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:10:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:10:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.715371
2026-02-15T19:10:27.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:10:27.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:10:27.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:10:27.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:10:27.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:10:27.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:09:50', tmtdew=16.98, humidity=32.16, cloud=0.0, wind=32.7, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:10:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:10:27.506 [DEBUG] [Thread-209655] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:10:27.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:10:27.602 [DEBUG] [Thread-209658] [transport.py] [_log()] starting thread (client mode): 0xa57e26b0
2026-02-15T19:10:27.602 [DEBUG] [Thread-209658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:10:27.616 [DEBUG] [Thread-209658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:10:27.616 [INFO] [Thread-209658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:10:27.623 [DEBUG] [Thread-209658] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] client lang: <none>
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] server lang: <none>
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] kex follows: False
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:10:27.624 [DEBUG] [Thread-209658] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:10:27.625 [DEBUG] [Thread-209658] [transport.py] [_log()] Compression: none
2026-02-15T19:10:27.625 [DEBUG] [Thread-209658] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:10:27.682 [DEBUG] [Thread-209658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:10:27.682 [DEBUG] [Thread-209658] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:10:27.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:10:27.684 [DEBUG] [Thread-209658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:10:27.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:10:27.737 [DEBUG] [Thread-209658] [transport.py] [_log()] userauth is OK
2026-02-15T19:10:27.737 [DEBUG] [Thread-209658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:10:27.738 [DEBUG] [Thread-209658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:10:27.738 [DEBUG] [Thread-209658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:10:27.738 [DEBUG] [Thread-209658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:10:27.757 [INFO] [Thread-209658] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:10:27.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:10:27.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:10:28.598 [DEBUG] [Thread-209658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:10:28.598 [DEBUG] [Thread-209658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:10:28.646 [DEBUG] [Thread-209658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:10:28.646 [DEBUG] [Thread-209658] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:10:28.655 [DEBUG] [Thread-209658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:10:28.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:10:28.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:10:28.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:10:28.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:10:28.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:10:28.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:10:28.692 [DEBUG] [Thread-209658] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:10:32.993 [DEBUG] [Thread-209660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:48.042 [DEBUG] [Thread-209661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:10:58.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:10:58.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:10:58.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:11:00.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 10, 26), 16.99, 32.13, 0.0, 32.32, 18.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:11:00.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:10:26
2026-02-15T19:11:00.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:11:01.020 [DEBUG] [Thread-209662] [transport.py] [_log()] starting thread (client mode): 0xa575bbb0
2026-02-15T19:11:01.020 [DEBUG] [Thread-209662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:11:01.041 [DEBUG] [Thread-209662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:11:01.041 [INFO] [Thread-209662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:11:01.044 [DEBUG] [Thread-209662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:11:01.044 [DEBUG] [Thread-209662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:11:01.044 [DEBUG] [Thread-209662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:11:01.044 [DEBUG] [Thread-209662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:01.044 [DEBUG] [Thread-209662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] client lang: <none>
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] server lang: <none>
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] kex follows: False
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] Compression: none
2026-02-15T19:11:01.045 [DEBUG] [Thread-209662] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:11:01.064 [DEBUG] [Thread-209662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:11:01.064 [DEBUG] [Thread-209662] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:11:01.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:11:01.065 [DEBUG] [Thread-209662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:11:01.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:11:01.068 [DEBUG] [Thread-209662] [transport.py] [_log()] userauth is OK
2026-02-15T19:11:01.068 [DEBUG] [Thread-209662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:11:01.068 [DEBUG] [Thread-209662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:11:01.068 [DEBUG] [Thread-209662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:11:01.068 [DEBUG] [Thread-209662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:11:01.093 [INFO] [Thread-209662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:11:01.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:11:01.733 [DEBUG] [Thread-209662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:11:01.733 [DEBUG] [Thread-209662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:11:01.734 [DEBUG] [Thread-209662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:11:01.774 [DEBUG] [Thread-209662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:11:01.774 [DEBUG] [Thread-209662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:11:01.777 [DEBUG] [Thread-209662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:11:01.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:11:01.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:11:01.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:11:01.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:11:01.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:11:01.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:11:01.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:11:01.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:11:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:11:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.715719 -999.00  +18.30  22.59     37   +3.70 1 1 1 1 1   887    0 13.12 -60.06 ----- 21.0 22.6 146.0 35.8 19.7 -27.1 19.8 -26.1 20.2 -25.8 20.5 -27.4
2026-02-15T19:11:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:11:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:11:01.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.715719
2026-02-15T19:11:01.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:11:01.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:11:01.801 [DEBUG] [Thread-209662] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:11:01.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:11:01.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:11:01.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:11:01.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:10:26', tmtdew=16.99, humidity=32.13, cloud=0.0, wind=32.32, temperature=18.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:10:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:11:01.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:11:01.904 [DEBUG] [Thread-209665] [transport.py] [_log()] starting thread (client mode): 0xa2d6d3f0
2026-02-15T19:11:01.904 [DEBUG] [Thread-209665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:11:01.919 [DEBUG] [Thread-209665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:11:01.919 [INFO] [Thread-209665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:11:01.926 [DEBUG] [Thread-209665] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] client lang: <none>
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] server lang: <none>
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] kex follows: False
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] Compression: none
2026-02-15T19:11:01.927 [DEBUG] [Thread-209665] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:11:01.985 [DEBUG] [Thread-209665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:11:01.986 [DEBUG] [Thread-209665] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:11:01.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:11:01.987 [DEBUG] [Thread-209665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:11:01.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:11:02.041 [DEBUG] [Thread-209665] [transport.py] [_log()] userauth is OK
2026-02-15T19:11:02.041 [DEBUG] [Thread-209665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:11:02.041 [DEBUG] [Thread-209665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:11:02.041 [DEBUG] [Thread-209665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:11:02.041 [DEBUG] [Thread-209665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:11:02.060 [INFO] [Thread-209665] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:11:02.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:11:02.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:11:02.894 [DEBUG] [Thread-209665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:11:02.894 [DEBUG] [Thread-209665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:11:02.942 [DEBUG] [Thread-209665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:11:02.942 [DEBUG] [Thread-209665] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:11:02.950 [DEBUG] [Thread-209665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:11:02.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:11:02.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:11:02.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:11:02.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:11:02.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:11:02.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:11:02.984 [DEBUG] [Thread-209665] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:11:03.076 [DEBUG] [Thread-209667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:11:04.637 [DEBUG] [Thread-209668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:11:18.125 [DEBUG] [Thread-209669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:11:22.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:11:22.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:11:33.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:11:33.006 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:11:33.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:11:33.162 [DEBUG] [Thread-209670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:11:34.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 11, 1), 16.98, 32.13, 0.0, 30.7, 18.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:11:34.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:11:01
2026-02-15T19:11:35.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:11:35.540 [DEBUG] [Thread-209671] [transport.py] [_log()] starting thread (client mode): 0xa57583a0
2026-02-15T19:11:35.540 [DEBUG] [Thread-209671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:11:35.555 [DEBUG] [Thread-209671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:11:35.555 [INFO] [Thread-209671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:11:35.559 [DEBUG] [Thread-209671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] client lang: <none>
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] server lang: <none>
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] kex follows: False
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] Compression: none
2026-02-15T19:11:35.560 [DEBUG] [Thread-209671] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:11:35.578 [DEBUG] [Thread-209671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:11:35.578 [DEBUG] [Thread-209671] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:11:35.579 [DEBUG] [Thread-209671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:11:35.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:11:35.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:11:35.582 [DEBUG] [Thread-209671] [transport.py] [_log()] userauth is OK
2026-02-15T19:11:35.582 [DEBUG] [Thread-209671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:11:35.582 [DEBUG] [Thread-209671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:11:35.582 [DEBUG] [Thread-209671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:11:35.583 [DEBUG] [Thread-209671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:11:35.607 [INFO] [Thread-209671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:11:35.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:11:36.223 [DEBUG] [Thread-209671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:11:36.224 [DEBUG] [Thread-209671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:11:36.224 [DEBUG] [Thread-209671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:11:36.265 [DEBUG] [Thread-209671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:11:36.265 [DEBUG] [Thread-209671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:11:36.268 [DEBUG] [Thread-209671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:11:36.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:11:36.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:11:36.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:11:36.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:11:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:11:36.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:11:36.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:11:36.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:11:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:11:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.716066 -999.00  +18.30  24.45     38   +3.70 1 1 1 1 1   887    0 13.27 -54.00 ----- 23.1 24.4 154.7 31.4 19.7 -27.2 19.8 -26.5 20.2 -25.7 20.4 -27.4
2026-02-15T19:11:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:11:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:11:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.716066
2026-02-15T19:11:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:11:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:11:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:11:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:11:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:11:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:11:01', tmtdew=16.98, humidity=32.13, cloud=0.0, wind=30.7, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:11:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:11:36.293 [DEBUG] [Thread-209671] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:11:36.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:11:36.392 [DEBUG] [Thread-209674] [transport.py] [_log()] starting thread (client mode): 0xa57d5e70
2026-02-15T19:11:36.392 [DEBUG] [Thread-209674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:11:36.406 [DEBUG] [Thread-209674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:11:36.407 [INFO] [Thread-209674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:11:36.414 [DEBUG] [Thread-209674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:11:36.414 [DEBUG] [Thread-209674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] client lang: <none>
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] server lang: <none>
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] kex follows: False
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] Compression: none
2026-02-15T19:11:36.415 [DEBUG] [Thread-209674] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:11:36.473 [DEBUG] [Thread-209674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:11:36.473 [DEBUG] [Thread-209674] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:11:36.474 [DEBUG] [Thread-209674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:11:36.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:11:36.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:11:36.529 [DEBUG] [Thread-209674] [transport.py] [_log()] userauth is OK
2026-02-15T19:11:36.530 [DEBUG] [Thread-209674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:11:36.530 [DEBUG] [Thread-209674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:11:36.530 [DEBUG] [Thread-209674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:11:36.530 [DEBUG] [Thread-209674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:11:36.554 [INFO] [Thread-209674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:11:36.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:11:36.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:11:37.386 [DEBUG] [Thread-209674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:11:37.386 [DEBUG] [Thread-209674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:11:37.434 [DEBUG] [Thread-209674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:11:37.435 [DEBUG] [Thread-209674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:11:37.444 [DEBUG] [Thread-209674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:11:37.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:11:37.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:11:37.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:11:37.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:11:37.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:11:37.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:11:37.480 [DEBUG] [Thread-209674] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:11:48.201 [DEBUG] [Thread-209676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:03.246 [DEBUG] [Thread-209677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:04.676 [DEBUG] [Thread-209678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:07.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:12:07.484 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:12:07.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:12:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 11, 36), 17.26, 31.52, 0.0, 36.02, 19.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:12:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:11:36
2026-02-15T19:12:09.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:12:09.849 [DEBUG] [Thread-209679] [transport.py] [_log()] starting thread (client mode): 0xa2dc0040
2026-02-15T19:12:09.849 [DEBUG] [Thread-209679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:12:09.873 [DEBUG] [Thread-209679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:12:09.873 [INFO] [Thread-209679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] client lang: <none>
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] server lang: <none>
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] kex follows: False
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] Compression: none
2026-02-15T19:12:09.876 [DEBUG] [Thread-209679] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:12:09.890 [DEBUG] [Thread-209679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:12:09.890 [DEBUG] [Thread-209679] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:12:09.891 [DEBUG] [Thread-209679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:12:09.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:12:09.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:12:09.892 [DEBUG] [Thread-209679] [transport.py] [_log()] userauth is OK
2026-02-15T19:12:09.893 [DEBUG] [Thread-209679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:12:09.893 [DEBUG] [Thread-209679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:12:09.893 [DEBUG] [Thread-209679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:12:09.893 [DEBUG] [Thread-209679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:12:09.907 [INFO] [Thread-209679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:12:09.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:12:10.533 [DEBUG] [Thread-209679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:12:10.533 [DEBUG] [Thread-209679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:12:10.534 [DEBUG] [Thread-209679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:12:10.574 [DEBUG] [Thread-209679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:12:10.575 [DEBUG] [Thread-209679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:12:10.577 [DEBUG] [Thread-209679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:12:10.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:12:10.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:12:10.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:12:10.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:12:10.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:12:10.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:12:10.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:12:10.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:12:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:12:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.716413 -999.00  +18.20  23.40     38   +3.80 1 1 1 1 1   887    0 13.45 -50.06 ----- 26.8 23.4 151.0 31.0 19.7 -27.2 19.8 -26.1 20.1 -25.4 20.4 -27.2
2026-02-15T19:12:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:12:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:12:10.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.716413
2026-02-15T19:12:10.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:12:10.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:12:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:12:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:12:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:12:10.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:11:36', tmtdew=17.26, humidity=31.52, cloud=0.0, wind=36.02, temperature=19.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:11:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:12:10.602 [DEBUG] [Thread-209679] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:12:10.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:12:10.698 [DEBUG] [Thread-209682] [transport.py] [_log()] starting thread (client mode): 0xa5758d30
2026-02-15T19:12:10.698 [DEBUG] [Thread-209682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:12:10.714 [DEBUG] [Thread-209682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:12:10.714 [INFO] [Thread-209682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] client lang: <none>
2026-02-15T19:12:10.722 [DEBUG] [Thread-209682] [transport.py] [_log()] server lang: <none>
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] kex follows: False
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] Compression: none
2026-02-15T19:12:10.723 [DEBUG] [Thread-209682] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:12:10.781 [DEBUG] [Thread-209682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:12:10.782 [DEBUG] [Thread-209682] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:12:10.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:12:10.783 [DEBUG] [Thread-209682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:12:10.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:12:10.837 [DEBUG] [Thread-209682] [transport.py] [_log()] userauth is OK
2026-02-15T19:12:10.837 [DEBUG] [Thread-209682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:12:10.838 [DEBUG] [Thread-209682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:12:10.838 [DEBUG] [Thread-209682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:12:10.838 [DEBUG] [Thread-209682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:12:10.855 [INFO] [Thread-209682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:12:10.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:12:10.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:12:11.699 [DEBUG] [Thread-209682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:12:11.700 [DEBUG] [Thread-209682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:12:11.746 [DEBUG] [Thread-209682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:12:11.747 [DEBUG] [Thread-209682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:12:11.755 [DEBUG] [Thread-209682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:12:11.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:12:11.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:12:11.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:12:11.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:12:11.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:12:11.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:12:11.790 [DEBUG] [Thread-209682] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:12:18.284 [DEBUG] [Thread-209684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:22.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:22.508 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:33.333 [DEBUG] [Thread-209685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:12:41.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:12:41.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:12:41.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:12:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 12, 12), 16.87, 32.28, 0.0, 28.94, 18.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:12:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:12:12
2026-02-15T19:12:44.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:12:44.225 [DEBUG] [Thread-209686] [transport.py] [_log()] starting thread (client mode): 0xa575a1a0
2026-02-15T19:12:44.225 [DEBUG] [Thread-209686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:12:44.244 [DEBUG] [Thread-209686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:12:44.244 [INFO] [Thread-209686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:12:44.247 [DEBUG] [Thread-209686] [transport.py] [_log()] client lang: <none>
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] server lang: <none>
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] kex follows: False
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] Compression: none
2026-02-15T19:12:44.248 [DEBUG] [Thread-209686] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:12:44.264 [DEBUG] [Thread-209686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:12:44.264 [DEBUG] [Thread-209686] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:12:44.265 [DEBUG] [Thread-209686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:12:44.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:12:44.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:12:44.267 [DEBUG] [Thread-209686] [transport.py] [_log()] userauth is OK
2026-02-15T19:12:44.267 [DEBUG] [Thread-209686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:12:44.267 [DEBUG] [Thread-209686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:12:44.267 [DEBUG] [Thread-209686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:12:44.267 [DEBUG] [Thread-209686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:12:44.286 [INFO] [Thread-209686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:12:44.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:12:45.292 [DEBUG] [Thread-209686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:12:45.293 [DEBUG] [Thread-209686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:12:45.293 [DEBUG] [Thread-209686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:12:45.333 [DEBUG] [Thread-209686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:12:45.334 [DEBUG] [Thread-209686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:12:45.337 [DEBUG] [Thread-209686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:12:45.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:12:45.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:12:45.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:12:45.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:12:45.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:12:45.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:12:45.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:12:45.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:12:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:12:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.716760 -999.00  +18.20  19.30     38   +3.80 1 1 1 1 1   887    0 13.69 -44.44 ----- 18.6 19.3 140.2 28.1 19.6 -27.0 19.7 -26.1 20.1 -25.6 20.4 -27.1
2026-02-15T19:12:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:12:45.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:12:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.716760
2026-02-15T19:12:45.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:12:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:12:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:12:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:12:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:12:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:12:12', tmtdew=16.87, humidity=32.28, cloud=0.0, wind=28.94, temperature=18.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:12:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:12:45.363 [DEBUG] [Thread-209686] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:12:45.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:12:45.459 [DEBUG] [Thread-209689] [transport.py] [_log()] starting thread (client mode): 0xa2d55780
2026-02-15T19:12:45.459 [DEBUG] [Thread-209689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:12:45.473 [DEBUG] [Thread-209689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:12:45.473 [INFO] [Thread-209689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:12:45.480 [DEBUG] [Thread-209689] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] client lang: <none>
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] server lang: <none>
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] kex follows: False
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:12:45.481 [DEBUG] [Thread-209689] [transport.py] [_log()] Compression: none
2026-02-15T19:12:45.482 [DEBUG] [Thread-209689] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:12:45.541 [DEBUG] [Thread-209689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:12:45.542 [DEBUG] [Thread-209689] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:12:45.542 [DEBUG] [Thread-209689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:12:45.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:12:45.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:12:45.597 [DEBUG] [Thread-209689] [transport.py] [_log()] userauth is OK
2026-02-15T19:12:45.597 [DEBUG] [Thread-209689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:12:45.598 [DEBUG] [Thread-209689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:12:45.598 [DEBUG] [Thread-209689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:12:45.598 [DEBUG] [Thread-209689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:12:45.617 [INFO] [Thread-209689] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:12:45.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:12:45.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:12:46.447 [DEBUG] [Thread-209689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:12:46.447 [DEBUG] [Thread-209689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:12:46.495 [DEBUG] [Thread-209689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:12:46.495 [DEBUG] [Thread-209689] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:12:46.505 [DEBUG] [Thread-209689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:12:46.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:12:46.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:12:46.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:12:46.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:12:46.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:12:46.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:12:46.542 [DEBUG] [Thread-209689] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:12:48.367 [DEBUG] [Thread-209691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:03.416 [DEBUG] [Thread-209692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:04.709 [DEBUG] [Thread-209693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:16.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:13:16.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:13:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:13:18.456 [DEBUG] [Thread-209694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:18.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 12, 47), 16.7, 32.43, 0.0, 29.4, 18.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:13:18.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:12:47
2026-02-15T19:13:19.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:13:19.303 [DEBUG] [Thread-209695] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-15T19:13:19.303 [DEBUG] [Thread-209695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:13:19.322 [DEBUG] [Thread-209695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:13:19.322 [INFO] [Thread-209695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] client lang: <none>
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] server lang: <none>
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] kex follows: False
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] Compression: none
2026-02-15T19:13:19.326 [DEBUG] [Thread-209695] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:13:19.341 [DEBUG] [Thread-209695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:13:19.342 [DEBUG] [Thread-209695] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:13:19.342 [DEBUG] [Thread-209695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:13:19.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:13:19.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:13:19.344 [DEBUG] [Thread-209695] [transport.py] [_log()] userauth is OK
2026-02-15T19:13:19.344 [DEBUG] [Thread-209695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:13:19.344 [DEBUG] [Thread-209695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:13:19.344 [DEBUG] [Thread-209695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:13:19.344 [DEBUG] [Thread-209695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:13:19.375 [INFO] [Thread-209695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:13:19.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:13:19.977 [DEBUG] [Thread-209695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:13:19.977 [DEBUG] [Thread-209695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:13:19.977 [DEBUG] [Thread-209695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:13:20.018 [DEBUG] [Thread-209695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:13:20.019 [DEBUG] [Thread-209695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:13:20.022 [DEBUG] [Thread-209695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:13:20.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:13:20.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:13:20.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:13:20.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:13:20.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:13:20.044 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:13:20.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:13:20.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:13:20.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:13:20.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.717108 -999.00  +18.20  27.64     38   +3.90 1 1 1 1 1   887    0 13.58 -39.06 ----- 26.2 27.6 144.0 33.0 19.6 -27.2 19.7 -26.0 20.1 -25.7 20.4 -27.4
2026-02-15T19:13:20.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:13:20.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:13:20.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.717108
2026-02-15T19:13:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:13:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:13:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:13:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:13:20.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:13:20.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:12:47', tmtdew=16.7, humidity=32.43, cloud=0.0, wind=29.4, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:12:38.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:13:20.047 [DEBUG] [Thread-209695] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:13:20.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:13:20.142 [DEBUG] [Thread-209698] [transport.py] [_log()] starting thread (client mode): 0xa2d6d750
2026-02-15T19:13:20.143 [DEBUG] [Thread-209698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:13:20.162 [DEBUG] [Thread-209698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:13:20.162 [INFO] [Thread-209698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:13:20.169 [DEBUG] [Thread-209698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:13:20.169 [DEBUG] [Thread-209698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:13:20.169 [DEBUG] [Thread-209698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:13:20.169 [DEBUG] [Thread-209698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:20.169 [DEBUG] [Thread-209698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:20.169 [DEBUG] [Thread-209698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] client lang: <none>
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] server lang: <none>
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] kex follows: False
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] Compression: none
2026-02-15T19:13:20.170 [DEBUG] [Thread-209698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:13:20.228 [DEBUG] [Thread-209698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:13:20.228 [DEBUG] [Thread-209698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:13:20.229 [DEBUG] [Thread-209698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:13:20.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:13:20.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:13:20.286 [DEBUG] [Thread-209698] [transport.py] [_log()] userauth is OK
2026-02-15T19:13:20.286 [DEBUG] [Thread-209698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:13:20.286 [DEBUG] [Thread-209698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:13:20.286 [DEBUG] [Thread-209698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:13:20.286 [DEBUG] [Thread-209698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:13:20.305 [INFO] [Thread-209698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:13:20.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:13:20.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:13:21.145 [DEBUG] [Thread-209698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:13:21.146 [DEBUG] [Thread-209698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:13:21.194 [DEBUG] [Thread-209698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:13:21.195 [DEBUG] [Thread-209698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:13:21.204 [DEBUG] [Thread-209698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:13:21.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:13:21.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:13:21.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:13:21.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:13:21.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:13:21.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:13:21.239 [DEBUG] [Thread-209698] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:13:22.660 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:22.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:33.493 [DEBUG] [Thread-209700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:48.548 [DEBUG] [Thread-209701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:13:51.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:13:51.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:13:51.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:13:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 13, 22), 16.68, 32.48, 0.0, 27.95, 18.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:13:53.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:13:22
2026-02-15T19:13:53.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:13:53.756 [DEBUG] [Thread-209702] [transport.py] [_log()] starting thread (client mode): 0xa2d6d3f0
2026-02-15T19:13:53.756 [DEBUG] [Thread-209702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:13:53.769 [DEBUG] [Thread-209702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:13:53.769 [INFO] [Thread-209702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:13:53.772 [DEBUG] [Thread-209702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:13:53.772 [DEBUG] [Thread-209702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:13:53.772 [DEBUG] [Thread-209702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] client lang: <none>
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] server lang: <none>
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] kex follows: False
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] Compression: none
2026-02-15T19:13:53.773 [DEBUG] [Thread-209702] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:13:53.791 [DEBUG] [Thread-209702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:13:53.792 [DEBUG] [Thread-209702] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:13:53.793 [DEBUG] [Thread-209702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:13:53.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:13:53.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:13:53.796 [DEBUG] [Thread-209702] [transport.py] [_log()] userauth is OK
2026-02-15T19:13:53.796 [DEBUG] [Thread-209702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:13:53.797 [DEBUG] [Thread-209702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:13:53.797 [DEBUG] [Thread-209702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:13:53.797 [DEBUG] [Thread-209702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:13:53.821 [INFO] [Thread-209702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:13:53.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:13:54.416 [DEBUG] [Thread-209702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:13:54.416 [DEBUG] [Thread-209702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:13:54.417 [DEBUG] [Thread-209702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:13:54.457 [DEBUG] [Thread-209702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:13:54.458 [DEBUG] [Thread-209702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:13:54.461 [DEBUG] [Thread-209702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:13:54.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:13:54.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:13:54.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:13:54.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:13:54.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:13:54.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:13:54.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:13:54.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:13:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:13:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.717455 -999.00  +18.20  19.11     38   +3.90 1 1 1 1 1   887    0 13.65 -37.93 ----- 20.6 19.1 154.2 29.8 19.6 -27.1 19.6 -26.2 20.0 -25.6 20.3 -26.9
2026-02-15T19:13:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:13:54.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:13:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.717455
2026-02-15T19:13:54.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:13:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:13:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:13:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:13:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:13:54.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:13:22', tmtdew=16.68, humidity=32.48, cloud=0.0, wind=27.95, temperature=18.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:13:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:13:54.487 [DEBUG] [Thread-209702] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:13:54.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:13:54.585 [DEBUG] [Thread-209705] [transport.py] [_log()] starting thread (client mode): 0xa575a440
2026-02-15T19:13:54.585 [DEBUG] [Thread-209705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:13:54.600 [DEBUG] [Thread-209705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:13:54.600 [INFO] [Thread-209705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:13:54.608 [DEBUG] [Thread-209705] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:13:54.608 [DEBUG] [Thread-209705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:13:54.608 [DEBUG] [Thread-209705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:13:54.608 [DEBUG] [Thread-209705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:54.608 [DEBUG] [Thread-209705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] client lang: <none>
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] server lang: <none>
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] kex follows: False
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] Compression: none
2026-02-15T19:13:54.609 [DEBUG] [Thread-209705] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:13:54.664 [DEBUG] [Thread-209705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:13:54.665 [DEBUG] [Thread-209705] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:13:54.665 [DEBUG] [Thread-209705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:13:54.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:13:54.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:13:54.721 [DEBUG] [Thread-209705] [transport.py] [_log()] userauth is OK
2026-02-15T19:13:54.721 [DEBUG] [Thread-209705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:13:54.721 [DEBUG] [Thread-209705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:13:54.721 [DEBUG] [Thread-209705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:13:54.721 [DEBUG] [Thread-209705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:13:54.740 [INFO] [Thread-209705] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:13:54.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:13:54.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:13:55.554 [DEBUG] [Thread-209705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:13:55.554 [DEBUG] [Thread-209705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:13:55.602 [DEBUG] [Thread-209705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:13:55.603 [DEBUG] [Thread-209705] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:13:55.612 [DEBUG] [Thread-209705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:13:55.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:13:55.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:13:55.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:13:55.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:13:55.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:13:55.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:13:55.647 [DEBUG] [Thread-209705] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:14:03.585 [DEBUG] [Thread-209707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:14:04.746 [DEBUG] [Thread-209708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:14:18.636 [DEBUG] [Thread-209709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:14:22.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:14:22.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:14:25.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:14:25.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:14:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:14:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 13, 57), 16.55, 33.04, 0.0, 31.02, 18.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:14:27.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:13:57
2026-02-15T19:14:27.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:14:28.046 [DEBUG] [Thread-209710] [transport.py] [_log()] starting thread (client mode): 0xa57e0ee0
2026-02-15T19:14:28.046 [DEBUG] [Thread-209710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:14:28.065 [DEBUG] [Thread-209710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:14:28.066 [INFO] [Thread-209710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] client lang: <none>
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] server lang: <none>
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] kex follows: False
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] Compression: none
2026-02-15T19:14:28.069 [DEBUG] [Thread-209710] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:14:28.086 [DEBUG] [Thread-209710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:14:28.086 [DEBUG] [Thread-209710] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:14:28.086 [DEBUG] [Thread-209710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:14:28.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:14:28.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:14:28.088 [DEBUG] [Thread-209710] [transport.py] [_log()] userauth is OK
2026-02-15T19:14:28.089 [DEBUG] [Thread-209710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:14:28.089 [DEBUG] [Thread-209710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:14:28.089 [DEBUG] [Thread-209710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:14:28.089 [DEBUG] [Thread-209710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:14:28.104 [INFO] [Thread-209710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:14:28.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:14:28.730 [DEBUG] [Thread-209710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:14:28.730 [DEBUG] [Thread-209710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:14:28.730 [DEBUG] [Thread-209710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:14:28.772 [DEBUG] [Thread-209710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:14:28.773 [DEBUG] [Thread-209710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:14:28.775 [DEBUG] [Thread-209710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:14:28.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:14:28.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:14:28.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:14:28.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:14:28.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:14:28.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:14:28.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:14:28.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:14:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:14:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.717802 -999.00  +18.20  24.88     38   +4.00 1 1 1 1 1   887    0 13.54 -39.15 ----- 18.7 24.9 159.0 30.1 19.6 -27.4 19.6 -26.0 19.9 -25.4 20.2 -27.0
2026-02-15T19:14:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:14:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:14:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.717802
2026-02-15T19:14:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:14:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:14:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:14:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:14:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:14:28.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:13:57', tmtdew=16.55, humidity=33.04, cloud=0.0, wind=31.02, temperature=18.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:13:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:14:28.800 [DEBUG] [Thread-209710] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:14:28.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:14:28.893 [DEBUG] [Thread-209713] [transport.py] [_log()] starting thread (client mode): 0xa2dc0ac0
2026-02-15T19:14:28.893 [DEBUG] [Thread-209713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:14:28.908 [DEBUG] [Thread-209713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:14:28.908 [INFO] [Thread-209713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:14:28.916 [DEBUG] [Thread-209713] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:14:28.917 [DEBUG] [Thread-209713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:14:28.917 [DEBUG] [Thread-209713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:14:28.917 [DEBUG] [Thread-209713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:14:28.917 [DEBUG] [Thread-209713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:14:28.917 [DEBUG] [Thread-209713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] client lang: <none>
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] server lang: <none>
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] kex follows: False
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] Compression: none
2026-02-15T19:14:28.918 [DEBUG] [Thread-209713] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:14:28.977 [DEBUG] [Thread-209713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:14:28.977 [DEBUG] [Thread-209713] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:14:28.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:14:28.978 [DEBUG] [Thread-209713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:14:28.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:14:29.034 [DEBUG] [Thread-209713] [transport.py] [_log()] userauth is OK
2026-02-15T19:14:29.034 [DEBUG] [Thread-209713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:14:29.034 [DEBUG] [Thread-209713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:14:29.034 [DEBUG] [Thread-209713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:14:29.034 [DEBUG] [Thread-209713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:14:29.053 [INFO] [Thread-209713] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:14:29.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:14:29.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:14:29.919 [DEBUG] [Thread-209713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:14:29.919 [DEBUG] [Thread-209713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:14:29.967 [DEBUG] [Thread-209713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:14:29.968 [DEBUG] [Thread-209713] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:14:29.977 [DEBUG] [Thread-209713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:14:29.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:14:29.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:14:29.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:14:30.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:14:30.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:14:30.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:14:30.014 [DEBUG] [Thread-209713] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:14:33.671 [DEBUG] [Thread-209715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:14:48.732 [DEBUG] [Thread-209716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:00.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:15:00.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:15:00.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:15:01.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 14, 34), 16.95, 32.19, 0.0, 37.29, 18.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:15:01.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:14:34
2026-02-15T19:15:02.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:15:02.411 [DEBUG] [Thread-209717] [transport.py] [_log()] starting thread (client mode): 0xa2d18c40
2026-02-15T19:15:02.411 [DEBUG] [Thread-209717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:15:02.432 [DEBUG] [Thread-209717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:15:02.432 [INFO] [Thread-209717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] client lang: <none>
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] server lang: <none>
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] kex follows: False
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] Compression: none
2026-02-15T19:15:02.436 [DEBUG] [Thread-209717] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:15:02.452 [DEBUG] [Thread-209717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:15:02.452 [DEBUG] [Thread-209717] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:15:02.452 [DEBUG] [Thread-209717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:15:02.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:15:02.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:15:02.453 [DEBUG] [Thread-209717] [transport.py] [_log()] userauth is OK
2026-02-15T19:15:02.453 [DEBUG] [Thread-209717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:15:02.453 [DEBUG] [Thread-209717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:15:02.453 [DEBUG] [Thread-209717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:15:02.453 [DEBUG] [Thread-209717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:15:02.462 [INFO] [Thread-209717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:15:02.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:15:03.767 [DEBUG] [Thread-209719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:04.800 [DEBUG] [Thread-209720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:14.981 [DEBUG] [Thread-209717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:15:14.982 [DEBUG] [Thread-209717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:15:14.982 [DEBUG] [Thread-209717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:15:15.022 [DEBUG] [Thread-209717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:15:15.022 [DEBUG] [Thread-209717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:15:15.025 [DEBUG] [Thread-209717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:15:15.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:15:15.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:15:15.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:15:15.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:15:15.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:15:15.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:15:15.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:15:15.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:15:15.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:15:15.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.718496 -999.00  +18.20  22.11     38   +4.00 1 1 1 1 1   886    0 13.41 -40.54 ----- 20.2 22.1 153.4 32.3 19.5 -27.3 19.6 -26.1 19.9 -25.1 20.1 -27.0
2026-02-15T19:15:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:15:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:15:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.718496
2026-02-15T19:15:15.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:15:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:15:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:15:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:15:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:15:15.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:14:34', tmtdew=16.95, humidity=32.19, cloud=0.0, wind=37.29, temperature=18.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:14:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:15:15.054 [DEBUG] [Thread-209717] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:15:15.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:15:15.159 [DEBUG] [Thread-209722] [transport.py] [_log()] starting thread (client mode): 0xa5759c00
2026-02-15T19:15:15.160 [DEBUG] [Thread-209722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:15:15.174 [DEBUG] [Thread-209722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:15:15.174 [INFO] [Thread-209722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:15:15.181 [DEBUG] [Thread-209722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:15:15.181 [DEBUG] [Thread-209722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] client lang: <none>
2026-02-15T19:15:15.182 [DEBUG] [Thread-209722] [transport.py] [_log()] server lang: <none>
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] kex follows: False
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:15:15.183 [DEBUG] [Thread-209722] [transport.py] [_log()] Compression: none
2026-02-15T19:15:15.184 [DEBUG] [Thread-209722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:15:15.240 [DEBUG] [Thread-209722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:15:15.241 [DEBUG] [Thread-209722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:15:15.242 [DEBUG] [Thread-209722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:15:15.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:15:15.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:15:15.297 [DEBUG] [Thread-209722] [transport.py] [_log()] userauth is OK
2026-02-15T19:15:15.297 [DEBUG] [Thread-209722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:15:15.298 [DEBUG] [Thread-209722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:15:15.298 [DEBUG] [Thread-209722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:15:15.298 [DEBUG] [Thread-209722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:15:15.316 [INFO] [Thread-209722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:15:15.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:15:15.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:15:16.132 [DEBUG] [Thread-209722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:15:16.132 [DEBUG] [Thread-209722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:15:16.179 [DEBUG] [Thread-209722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:15:16.179 [DEBUG] [Thread-209722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:15:16.188 [DEBUG] [Thread-209722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:15:16.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:15: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')
2026-02-15T19:15:16.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:15:16.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:15:16.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:15:16.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:15:16.224 [DEBUG] [Thread-209722] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:15:18.805 [DEBUG] [Thread-209724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:22.942 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:22.943 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:33.864 [DEBUG] [Thread-209725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:46.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:15:46.247 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:15:46.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:15:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 15, 9), 16.4, 33.38, 0.0, 31.53, 18.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:15:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:15:09
2026-02-15T19:15:48.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:15:48.912 [DEBUG] [Thread-209726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:15:48.956 [DEBUG] [Thread-209727] [transport.py] [_log()] starting thread (client mode): 0xa2d6d3f0
2026-02-15T19:15:48.957 [DEBUG] [Thread-209727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:15:48.979 [DEBUG] [Thread-209727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:15:48.979 [INFO] [Thread-209727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:15:48.982 [DEBUG] [Thread-209727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:15:48.982 [DEBUG] [Thread-209727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:15:48.982 [DEBUG] [Thread-209727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:15:48.982 [DEBUG] [Thread-209727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:48.982 [DEBUG] [Thread-209727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:48.982 [DEBUG] [Thread-209727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] client lang: <none>
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] server lang: <none>
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] kex follows: False
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:15:48.983 [DEBUG] [Thread-209727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:15:48.984 [DEBUG] [Thread-209727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:15:48.984 [DEBUG] [Thread-209727] [transport.py] [_log()] Compression: none
2026-02-15T19:15:48.984 [DEBUG] [Thread-209727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:15:49.005 [DEBUG] [Thread-209727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:15:49.006 [DEBUG] [Thread-209727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:15:49.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:15:49.007 [DEBUG] [Thread-209727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:15:49.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:15:49.009 [DEBUG] [Thread-209727] [transport.py] [_log()] userauth is OK
2026-02-15T19:15:49.010 [DEBUG] [Thread-209727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:15:49.010 [DEBUG] [Thread-209727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:15:49.010 [DEBUG] [Thread-209727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:15:49.010 [DEBUG] [Thread-209727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:15:49.033 [INFO] [Thread-209727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:15:49.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:15:49.683 [DEBUG] [Thread-209727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:15:49.683 [DEBUG] [Thread-209727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:15:49.683 [DEBUG] [Thread-209727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:15:49.724 [DEBUG] [Thread-209727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:15:49.725 [DEBUG] [Thread-209727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:15:49.728 [DEBUG] [Thread-209727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:15:49.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:15:49.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:15:49.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:15:49.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:15:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:15:49.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:15:49.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:15:49.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:15:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:15:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.718843 -999.00  +18.20  23.30     39   +4.00 1 1 1 1 1   886    0 13.28 -44.51 ----- 25.1 23.3 168.6 31.0 19.4 -27.0 19.5 -26.0 19.9 -25.5 20.1 -26.9
2026-02-15T19:15:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:15:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:15:49.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.718843
2026-02-15T19:15:49.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:15:49.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:15:49.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:15:49.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:15:49.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:15:49.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:15:09', tmtdew=16.4, humidity=33.38, cloud=0.0, wind=31.53, temperature=18.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:15:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:15:49.754 [DEBUG] [Thread-209727] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:15:49.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:15:49.848 [DEBUG] [Thread-209730] [transport.py] [_log()] starting thread (client mode): 0xa57e1330
2026-02-15T19:15:49.848 [DEBUG] [Thread-209730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:15:49.862 [DEBUG] [Thread-209730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:15:49.862 [INFO] [Thread-209730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] client lang: <none>
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] server lang: <none>
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] kex follows: False
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] Compression: none
2026-02-15T19:15:49.870 [DEBUG] [Thread-209730] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:15:49.928 [DEBUG] [Thread-209730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:15:49.929 [DEBUG] [Thread-209730] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:15:49.929 [DEBUG] [Thread-209730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:15:49.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:15:49.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:15:49.985 [DEBUG] [Thread-209730] [transport.py] [_log()] userauth is OK
2026-02-15T19:15:49.985 [DEBUG] [Thread-209730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:15:49.986 [DEBUG] [Thread-209730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:15:49.986 [DEBUG] [Thread-209730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:15:49.986 [DEBUG] [Thread-209730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:15:50.005 [INFO] [Thread-209730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:15: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-02-15T19:15:50.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:15:50.860 [DEBUG] [Thread-209730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:15:50.860 [DEBUG] [Thread-209730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:15:50.908 [DEBUG] [Thread-209730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:15:50.909 [DEBUG] [Thread-209730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:15:50.918 [DEBUG] [Thread-209730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:15:50.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:15:50.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:15:50.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:15:50.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:15:50.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:15:50.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:15:50.954 [DEBUG] [Thread-209730] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:16:03.947 [DEBUG] [Thread-209732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:04.832 [DEBUG] [Thread-209733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:18.996 [DEBUG] [Thread-209734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:20.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:16:20.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:16:20.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:16:23.090 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:23.091 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:23.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 15, 45), 16.3, 33.38, 0.0, 33.49, 18.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:16:23.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:15:45
2026-02-15T19:16:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:16:23.958 [DEBUG] [Thread-209735] [transport.py] [_log()] starting thread (client mode): 0xa57b15d0
2026-02-15T19:16:23.958 [DEBUG] [Thread-209735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:16:23.978 [DEBUG] [Thread-209735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:16:23.978 [INFO] [Thread-209735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:16:23.979 [DEBUG] [Thread-209735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] client lang: <none>
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] server lang: <none>
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] kex follows: False
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:16:23.980 [DEBUG] [Thread-209735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:16:23.981 [DEBUG] [Thread-209735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:16:23.981 [DEBUG] [Thread-209735] [transport.py] [_log()] Compression: none
2026-02-15T19:16:23.981 [DEBUG] [Thread-209735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:16:23.989 [DEBUG] [Thread-209735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:16:23.989 [DEBUG] [Thread-209735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:16:23.989 [DEBUG] [Thread-209735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:16:23.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:16:23.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:16:23.992 [DEBUG] [Thread-209735] [transport.py] [_log()] userauth is OK
2026-02-15T19:16:23.992 [DEBUG] [Thread-209735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:16:23.992 [DEBUG] [Thread-209735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:16:23.992 [DEBUG] [Thread-209735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:16:23.992 [DEBUG] [Thread-209735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:16:24.010 [INFO] [Thread-209735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:16:24.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:16:24.572 [DEBUG] [Thread-209735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:16:24.573 [DEBUG] [Thread-209735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:16:24.573 [DEBUG] [Thread-209735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:16:24.613 [DEBUG] [Thread-209735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:16:24.613 [DEBUG] [Thread-209735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:16:24.616 [DEBUG] [Thread-209735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:16:24.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:16:24.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:16:24.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:16:24.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:16:24.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:16:24.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:16:24.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:16:24.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:16:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:16:24.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.719191 -999.00  +18.20  21.58     39   +4.00 1 1 1 1 1   886    0 13.38 -41.30 ----- 19.0 21.6 160.4 28.8 19.4 -27.1 19.5 -25.9 19.8 -25.1 20.1 -27.0
2026-02-15T19:16:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:16:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:16:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.719191
2026-02-15T19:16:24.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:16:24.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:15:45', tmtdew=16.3, humidity=33.38, cloud=0.0, wind=33.49, temperature=18.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:15:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:16:24.643 [DEBUG] [Thread-209735] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:16:24.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:16:24.734 [DEBUG] [Thread-209738] [transport.py] [_log()] starting thread (client mode): 0xa2dc3040
2026-02-15T19:16:24.734 [DEBUG] [Thread-209738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:16:24.749 [DEBUG] [Thread-209738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:16:24.749 [INFO] [Thread-209738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:16:24.756 [DEBUG] [Thread-209738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:24.757 [DEBUG] [Thread-209738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] client lang: <none>
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] server lang: <none>
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] kex follows: False
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] Compression: none
2026-02-15T19:16:24.758 [DEBUG] [Thread-209738] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:16:24.816 [DEBUG] [Thread-209738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:16:24.816 [DEBUG] [Thread-209738] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:16:24.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:16:24.817 [DEBUG] [Thread-209738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:16:24.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:16:24.879 [DEBUG] [Thread-209738] [transport.py] [_log()] userauth is OK
2026-02-15T19:16:24.879 [DEBUG] [Thread-209738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:16:24.880 [DEBUG] [Thread-209738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:16:24.880 [DEBUG] [Thread-209738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:16:24.880 [DEBUG] [Thread-209738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:16:24.898 [INFO] [Thread-209738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:16:24.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:16:24.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:16:25.736 [DEBUG] [Thread-209738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:16:25.736 [DEBUG] [Thread-209738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:16:25.784 [DEBUG] [Thread-209738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:16:25.784 [DEBUG] [Thread-209738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:16:25.793 [DEBUG] [Thread-209738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:16:25.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:16:25.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:16:25.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:16:25.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:16:25.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:16:25.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:16:25.827 [DEBUG] [Thread-209738] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:16:34.028 [DEBUG] [Thread-209740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:49.079 [DEBUG] [Thread-209741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:16:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:16:55.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:16:55.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:16:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 16, 20), 16.25, 33.49, 0.0, 34.51, 18.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:16:57.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:16:20
2026-02-15T19:16:58.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:16:58.216 [DEBUG] [Thread-209742] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-15T19:16:58.216 [DEBUG] [Thread-209742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:16:58.236 [DEBUG] [Thread-209742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:16:58.236 [INFO] [Thread-209742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] client lang: <none>
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] server lang: <none>
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] kex follows: False
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] Compression: none
2026-02-15T19:16:58.238 [DEBUG] [Thread-209742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:16:58.254 [DEBUG] [Thread-209742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:16:58.254 [DEBUG] [Thread-209742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:16:58.254 [DEBUG] [Thread-209742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:16:58.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:16:58.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:16:58.256 [DEBUG] [Thread-209742] [transport.py] [_log()] userauth is OK
2026-02-15T19:16:58.256 [DEBUG] [Thread-209742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:16:58.256 [DEBUG] [Thread-209742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:16:58.256 [DEBUG] [Thread-209742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:16:58.256 [DEBUG] [Thread-209742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:16:58.265 [INFO] [Thread-209742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:16:58.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:16:58.856 [DEBUG] [Thread-209742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:16:58.857 [DEBUG] [Thread-209742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:16:58.857 [DEBUG] [Thread-209742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:16:58.899 [DEBUG] [Thread-209742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:16:58.899 [DEBUG] [Thread-209742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:16:58.902 [DEBUG] [Thread-209742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:16:58.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:16:58.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:16:58.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:16:58.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:16:58.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:16:58.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:16:58.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:16:58.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.719885 -999.00  +18.10  24.12     39   +4.20 1 1 1 1 1   886    0 13.39 -43.72 ----- 21.2 24.1 156.0 31.0 19.4 -27.1 19.4 -25.8 19.7 -25.5 20.0 -26.7
2026-02-15T19:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:16:58.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.719885
2026-02-15T19:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:16:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:16:58.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:16:58.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:16:58.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:16:58.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:16:20', tmtdew=16.25, humidity=33.49, cloud=0.0, wind=34.51, temperature=18.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:16:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:16:58.925 [DEBUG] [Thread-209742] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:16:59.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:16:59.031 [DEBUG] [Thread-209745] [transport.py] [_log()] starting thread (client mode): 0xa575a1a0
2026-02-15T19:16:59.031 [DEBUG] [Thread-209745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:16:59.045 [DEBUG] [Thread-209745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:16:59.045 [INFO] [Thread-209745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:16:59.053 [DEBUG] [Thread-209745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:16:59.053 [DEBUG] [Thread-209745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:16:59.053 [DEBUG] [Thread-209745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:16:59.053 [DEBUG] [Thread-209745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] client lang: <none>
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] server lang: <none>
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] kex follows: False
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] Compression: none
2026-02-15T19:16:59.054 [DEBUG] [Thread-209745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:16:59.113 [DEBUG] [Thread-209745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:16:59.113 [DEBUG] [Thread-209745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:16:59.114 [DEBUG] [Thread-209745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:16:59.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:16:59.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:16:59.169 [DEBUG] [Thread-209745] [transport.py] [_log()] userauth is OK
2026-02-15T19:16:59.169 [DEBUG] [Thread-209745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:16:59.169 [DEBUG] [Thread-209745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:16:59.169 [DEBUG] [Thread-209745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:16:59.169 [DEBUG] [Thread-209745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:16:59.187 [INFO] [Thread-209745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:16:59.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:16:59.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:17:00.007 [DEBUG] [Thread-209745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:17:00.007 [DEBUG] [Thread-209745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:17:00.055 [DEBUG] [Thread-209745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:17:00.055 [DEBUG] [Thread-209745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:17:00.063 [DEBUG] [Thread-209745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:17:00.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:17:00.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:17:00.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:17:00.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:17:00.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:17:00.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:17:00.096 [DEBUG] [Thread-209745] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:17:04.112 [DEBUG] [Thread-209747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:17:04.867 [DEBUG] [Thread-209748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:17:19.163 [DEBUG] [Thread-209749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:17:23.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:17:23.233 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:17:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:17:30.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:17:30.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 16, 57), 16.06, 34.19, 0.0, 32.45, 18.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:17:31.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:16:57
2026-02-15T19:17:32.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:17:32.440 [DEBUG] [Thread-209750] [transport.py] [_log()] starting thread (client mode): 0xa57b1e10
2026-02-15T19:17:32.440 [DEBUG] [Thread-209750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:17:32.455 [DEBUG] [Thread-209750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:17:32.455 [INFO] [Thread-209750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] client lang: <none>
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] server lang: <none>
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] kex follows: False
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:17:32.456 [DEBUG] [Thread-209750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:17:32.457 [DEBUG] [Thread-209750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:17:32.457 [DEBUG] [Thread-209750] [transport.py] [_log()] Compression: none
2026-02-15T19:17:32.457 [DEBUG] [Thread-209750] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:17:32.465 [DEBUG] [Thread-209750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:17:32.465 [DEBUG] [Thread-209750] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:17:32.466 [DEBUG] [Thread-209750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:17:32.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:17:32.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:17:32.467 [DEBUG] [Thread-209750] [transport.py] [_log()] userauth is OK
2026-02-15T19:17:32.468 [DEBUG] [Thread-209750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:17:32.468 [DEBUG] [Thread-209750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:17:32.468 [DEBUG] [Thread-209750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:17:32.468 [DEBUG] [Thread-209750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:17:32.481 [INFO] [Thread-209750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:17:32.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:17:33.094 [DEBUG] [Thread-209750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:17:33.094 [DEBUG] [Thread-209750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:17:33.094 [DEBUG] [Thread-209750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:17:33.136 [DEBUG] [Thread-209750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:17:33.136 [DEBUG] [Thread-209750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:17:33.140 [DEBUG] [Thread-209750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:17:33.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:17:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:17:33.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:17:33.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:17:33.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:17:33.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:17:33.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:17:33.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:17:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:17:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.720233 -999.00  +18.10  18.54     39   +4.20 1 1 1 1 1   886    0 13.43 -44.70 ----- 18.3 18.5 160.8 33.4 19.3 -27.0 19.4 -25.9 19.6 -25.1 19.9 -27.1
2026-02-15T19:17:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:17:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:17:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.720233
2026-02-15T19:17:33.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:17:33.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:17:33.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:17:33.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:17:33.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:17:33.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:16:57', tmtdew=16.06, humidity=34.19, cloud=0.0, wind=32.45, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:17:08.131', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:17:33.158 [DEBUG] [Thread-209750] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:17:33.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:17:33.259 [DEBUG] [Thread-209753] [transport.py] [_log()] starting thread (client mode): 0xa2d56980
2026-02-15T19:17:33.259 [DEBUG] [Thread-209753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:17:33.273 [DEBUG] [Thread-209753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:17:33.273 [INFO] [Thread-209753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:17:33.281 [DEBUG] [Thread-209753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:17:33.281 [DEBUG] [Thread-209753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:17:33.281 [DEBUG] [Thread-209753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:17:33.281 [DEBUG] [Thread-209753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] client lang: <none>
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] server lang: <none>
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] kex follows: False
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] Compression: none
2026-02-15T19:17:33.282 [DEBUG] [Thread-209753] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:17:33.342 [DEBUG] [Thread-209753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:17:33.342 [DEBUG] [Thread-209753] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:17:33.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:17:33.343 [DEBUG] [Thread-209753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:17:33.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:17:33.401 [DEBUG] [Thread-209753] [transport.py] [_log()] userauth is OK
2026-02-15T19:17:33.401 [DEBUG] [Thread-209753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:17:33.402 [DEBUG] [Thread-209753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:17:33.402 [DEBUG] [Thread-209753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:17:33.402 [DEBUG] [Thread-209753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:17:33.420 [INFO] [Thread-209753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:17:33.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:17:33.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:17:34.198 [DEBUG] [Thread-209755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:17:34.254 [DEBUG] [Thread-209753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:17:34.255 [DEBUG] [Thread-209753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:17:34.303 [DEBUG] [Thread-209753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:17:34.303 [DEBUG] [Thread-209753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:17:34.312 [DEBUG] [Thread-209753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:17:34.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:17:34.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:17:34.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:17:34.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:17:34.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:17:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:17:34.349 [DEBUG] [Thread-209753] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:17:49.246 [DEBUG] [Thread-209756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:04.284 [DEBUG] [Thread-209757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:04.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:18:04.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:18:04.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:18:04.901 [DEBUG] [Thread-209758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:06.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 17, 32), 16.38, 33.45, 0.0, 35.42, 18.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:18:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:17:32
2026-02-15T19:18:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:18:06.954 [DEBUG] [Thread-209759] [transport.py] [_log()] starting thread (client mode): 0xa575b610
2026-02-15T19:18:06.954 [DEBUG] [Thread-209759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:18:06.974 [DEBUG] [Thread-209759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:18:06.974 [INFO] [Thread-209759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:18:06.977 [DEBUG] [Thread-209759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:18:06.977 [DEBUG] [Thread-209759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:18:06.977 [DEBUG] [Thread-209759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:18:06.977 [DEBUG] [Thread-209759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] client lang: <none>
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] server lang: <none>
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] kex follows: False
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:18:06.978 [DEBUG] [Thread-209759] [transport.py] [_log()] Compression: none
2026-02-15T19:18:06.979 [DEBUG] [Thread-209759] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:18:06.997 [DEBUG] [Thread-209759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:18:06.998 [DEBUG] [Thread-209759] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:18:06.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:18:06.999 [DEBUG] [Thread-209759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:18:07.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:18:07.002 [DEBUG] [Thread-209759] [transport.py] [_log()] userauth is OK
2026-02-15T19:18:07.002 [DEBUG] [Thread-209759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:18:07.002 [DEBUG] [Thread-209759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:18:07.002 [DEBUG] [Thread-209759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:18:07.002 [DEBUG] [Thread-209759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:18:07.018 [INFO] [Thread-209759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:18:07.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:18:07.649 [DEBUG] [Thread-209759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:18:07.649 [DEBUG] [Thread-209759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:18:07.650 [DEBUG] [Thread-209759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:18:07.691 [DEBUG] [Thread-209759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:18:07.692 [DEBUG] [Thread-209759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:18:07.695 [DEBUG] [Thread-209759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:18:07.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:18:07.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:18:07.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:18:07.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:18:07.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:18:07.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:18:07.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:18:07.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:18:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:18:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.720580 -999.00  +18.10  19.88     40   +4.30 1 1 1 1 1   886    0 13.22 -50.13 ----- 23.7 19.9 146.2 34.9 19.3 -27.1 19.4 -26.0 19.6 -25.3 19.9 -26.8
2026-02-15T19:18:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:18:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:18:07.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.720580
2026-02-15T19:18:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:18:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:18:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:18:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:18:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:18:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:17:32', tmtdew=16.38, humidity=33.45, cloud=0.0, wind=35.42, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:17:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:18:07.724 [DEBUG] [Thread-209759] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:18:07.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:18:07.819 [DEBUG] [Thread-209762] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T19:18:07.819 [DEBUG] [Thread-209762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:18:07.839 [DEBUG] [Thread-209762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:18:07.840 [INFO] [Thread-209762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:18:07.847 [DEBUG] [Thread-209762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:18:07.847 [DEBUG] [Thread-209762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] client lang: <none>
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] server lang: <none>
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] kex follows: False
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:18:07.848 [DEBUG] [Thread-209762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:18:07.849 [DEBUG] [Thread-209762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:18:07.849 [DEBUG] [Thread-209762] [transport.py] [_log()] Compression: none
2026-02-15T19:18:07.849 [DEBUG] [Thread-209762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:18:07.904 [DEBUG] [Thread-209762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:18:07.905 [DEBUG] [Thread-209762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:18:07.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:18:07.906 [DEBUG] [Thread-209762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:18:07.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:18:07.961 [DEBUG] [Thread-209762] [transport.py] [_log()] userauth is OK
2026-02-15T19:18:07.961 [DEBUG] [Thread-209762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:18:07.961 [DEBUG] [Thread-209762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:18:07.961 [DEBUG] [Thread-209762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:18:07.961 [DEBUG] [Thread-209762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:18:07.980 [INFO] [Thread-209762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:18:07.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:18:07.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:18:08.827 [DEBUG] [Thread-209762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:18:08.827 [DEBUG] [Thread-209762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:18:08.874 [DEBUG] [Thread-209762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:18:08.874 [DEBUG] [Thread-209762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:18:08.884 [DEBUG] [Thread-209762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:18:08.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:18:08.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:18:08.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:18:08.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:18:08.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:18:08.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:18:08.920 [DEBUG] [Thread-209762] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:18:19.319 [DEBUG] [Thread-209764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:23.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:23.375 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:34.366 [DEBUG] [Thread-209765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:18:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:18:38.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:18:38.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:18:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 18, 8), 16.02, 34.29, 0.0, 29.87, 18.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:18:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:18:08
2026-02-15T19:18:41.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:18:41.356 [DEBUG] [Thread-209766] [transport.py] [_log()] starting thread (client mode): 0xa57b2170
2026-02-15T19:18:41.356 [DEBUG] [Thread-209766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:18:41.376 [DEBUG] [Thread-209766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:18:41.376 [INFO] [Thread-209766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:18:41.379 [DEBUG] [Thread-209766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:18:41.379 [DEBUG] [Thread-209766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:18:41.379 [DEBUG] [Thread-209766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:18:41.379 [DEBUG] [Thread-209766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] client lang: <none>
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] server lang: <none>
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] kex follows: False
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:18:41.380 [DEBUG] [Thread-209766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:18:41.381 [DEBUG] [Thread-209766] [transport.py] [_log()] Compression: none
2026-02-15T19:18:41.381 [DEBUG] [Thread-209766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:18:41.397 [DEBUG] [Thread-209766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:18:41.397 [DEBUG] [Thread-209766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:18:41.398 [DEBUG] [Thread-209766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:18:41.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:18:41.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:18:41.400 [DEBUG] [Thread-209766] [transport.py] [_log()] userauth is OK
2026-02-15T19:18:41.400 [DEBUG] [Thread-209766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:18:41.400 [DEBUG] [Thread-209766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:18:41.400 [DEBUG] [Thread-209766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:18:41.400 [DEBUG] [Thread-209766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:18:41.437 [INFO] [Thread-209766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:18:41.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:18:42.077 [DEBUG] [Thread-209766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:18:42.078 [DEBUG] [Thread-209766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:18:42.078 [DEBUG] [Thread-209766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:18:42.118 [DEBUG] [Thread-209766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:18:42.119 [DEBUG] [Thread-209766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:18:42.122 [DEBUG] [Thread-209766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:18:42.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:18:42.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:18:42.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:18:42.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:18:42.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:18:42.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:18:42.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:18:42.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:18:42.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:18:42.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.720927 -999.00  +18.10  17.96     40   +4.30 1 1 1 1 1   885    0 13.07 -56.45 ----- 28.0 18.0 155.8 29.9 19.3 -27.0 19.4 -25.8 19.5 -25.3 19.9 -26.7
2026-02-15T19:18:42.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:18:42.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:18:42.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.720927
2026-02-15T19:18:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:18:42.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:18:42.148 [DEBUG] [Thread-209766] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:18:42.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:18:42.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:18:42.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:18:42.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:18:08', tmtdew=16.02, humidity=34.29, cloud=0.0, wind=29.87, temperature=18.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:18:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:18:42.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:18:42.247 [DEBUG] [Thread-209769] [transport.py] [_log()] starting thread (client mode): 0xa57b3850
2026-02-15T19:18:42.247 [DEBUG] [Thread-209769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:18:42.261 [DEBUG] [Thread-209769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:18:42.261 [INFO] [Thread-209769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:18:42.269 [DEBUG] [Thread-209769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:18:42.269 [DEBUG] [Thread-209769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:18:42.269 [DEBUG] [Thread-209769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:18:42.269 [DEBUG] [Thread-209769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] client lang: <none>
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] server lang: <none>
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] kex follows: False
2026-02-15T19:18:42.270 [DEBUG] [Thread-209769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:18:42.271 [DEBUG] [Thread-209769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:18:42.271 [DEBUG] [Thread-209769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:18:42.271 [DEBUG] [Thread-209769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:18:42.271 [DEBUG] [Thread-209769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:18:42.271 [DEBUG] [Thread-209769] [transport.py] [_log()] Compression: none
2026-02-15T19:18:42.271 [DEBUG] [Thread-209769] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:18:42.329 [DEBUG] [Thread-209769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:18:42.330 [DEBUG] [Thread-209769] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:18:42.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:18:42.331 [DEBUG] [Thread-209769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:18:42.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:18:42.385 [DEBUG] [Thread-209769] [transport.py] [_log()] userauth is OK
2026-02-15T19:18:42.385 [DEBUG] [Thread-209769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:18:42.385 [DEBUG] [Thread-209769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:18:42.385 [DEBUG] [Thread-209769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:18:42.385 [DEBUG] [Thread-209769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:18:42.403 [INFO] [Thread-209769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:18:42.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:18:42.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:18:43.228 [DEBUG] [Thread-209769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:18:43.228 [DEBUG] [Thread-209769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:18:43.276 [DEBUG] [Thread-209769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:18:43.276 [DEBUG] [Thread-209769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:18:43.285 [DEBUG] [Thread-209769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:18:43.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:18:43.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:18:43.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:18:43.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:18:43.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:18:43.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:18:43.318 [DEBUG] [Thread-209769] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:18:49.401 [DEBUG] [Thread-209771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:04.461 [DEBUG] [Thread-209772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:04.947 [DEBUG] [Thread-209773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:13.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:19:13.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:19:13.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:19:15.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 18, 44), 15.92, 34.29, 0.0, 29.66, 18.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:19:15.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:18:44
2026-02-15T19:19:15.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:19:15.917 [DEBUG] [Thread-209774] [transport.py] [_log()] starting thread (client mode): 0xa57b0be0
2026-02-15T19:19:15.917 [DEBUG] [Thread-209774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:19:15.936 [DEBUG] [Thread-209774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:19:15.937 [INFO] [Thread-209774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:19:15.938 [DEBUG] [Thread-209774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:19:15.938 [DEBUG] [Thread-209774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:19:15.938 [DEBUG] [Thread-209774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] client lang: <none>
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] server lang: <none>
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] kex follows: False
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] Compression: none
2026-02-15T19:19:15.939 [DEBUG] [Thread-209774] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:19:15.955 [DEBUG] [Thread-209774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:19:15.956 [DEBUG] [Thread-209774] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:19:15.956 [DEBUG] [Thread-209774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:19:15.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:19:15.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:19:15.958 [DEBUG] [Thread-209774] [transport.py] [_log()] userauth is OK
2026-02-15T19:19:15.958 [DEBUG] [Thread-209774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:19:15.959 [DEBUG] [Thread-209774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:19:15.959 [DEBUG] [Thread-209774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:19:15.959 [DEBUG] [Thread-209774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:19:15.983 [INFO] [Thread-209774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:19:15.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:19:16.602 [DEBUG] [Thread-209774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:19:16.602 [DEBUG] [Thread-209774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:19:16.603 [DEBUG] [Thread-209774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:19:16.643 [DEBUG] [Thread-209774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:19:16.644 [DEBUG] [Thread-209774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:19:16.647 [DEBUG] [Thread-209774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:19:16.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:19:16.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:19:16.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:19:16.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:19:16.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:19:16.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:19:16.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:19:16.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:19:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:19:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.721274 -999.00  +18.00  22.60     40   +4.30 1 1 1 1 1   885    0 12.68 -66.07 ----- 19.4 22.6 164.2 34.3 19.3 -26.9 19.3 -26.5 19.5 -25.4 19.8 -26.9
2026-02-15T19:19:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:19:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:19:16.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.721274
2026-02-15T19:19:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:19:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:19:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:19:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:19:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:19:16.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:18:44', tmtdew=15.92, humidity=34.29, cloud=0.0, wind=29.66, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:18:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:19:16.673 [DEBUG] [Thread-209774] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:19:16.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:19:16.768 [DEBUG] [Thread-209777] [transport.py] [_log()] starting thread (client mode): 0xa2d56410
2026-02-15T19:19:16.768 [DEBUG] [Thread-209777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:19:16.783 [DEBUG] [Thread-209777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:19:16.783 [INFO] [Thread-209777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:19:16.791 [DEBUG] [Thread-209777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:19:16.791 [DEBUG] [Thread-209777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:19:16.791 [DEBUG] [Thread-209777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:19:16.791 [DEBUG] [Thread-209777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:16.791 [DEBUG] [Thread-209777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] client lang: <none>
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] server lang: <none>
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] kex follows: False
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] Compression: none
2026-02-15T19:19:16.792 [DEBUG] [Thread-209777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:19:16.849 [DEBUG] [Thread-209777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:19:16.849 [DEBUG] [Thread-209777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:19:16.850 [DEBUG] [Thread-209777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:19:16.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:19:16.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:19:16.911 [DEBUG] [Thread-209777] [transport.py] [_log()] userauth is OK
2026-02-15T19:19:16.911 [DEBUG] [Thread-209777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:19:16.911 [DEBUG] [Thread-209777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:19:16.912 [DEBUG] [Thread-209777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:19:16.912 [DEBUG] [Thread-209777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:19:16.936 [INFO] [Thread-209777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:19:16.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:19:16.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:19:17.793 [DEBUG] [Thread-209777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:19:17.793 [DEBUG] [Thread-209777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:19:17.842 [DEBUG] [Thread-209777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:19:17.842 [DEBUG] [Thread-209777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:19:17.851 [DEBUG] [Thread-209777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:19:17.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:19:17.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:19:17.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:19:17.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:19:17.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:19:17.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:19:17.887 [DEBUG] [Thread-209777] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:19:19.498 [DEBUG] [Thread-209779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:23.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:23.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:34.561 [DEBUG] [Thread-209780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:47.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:19:47.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:19:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:19:49.600 [DEBUG] [Thread-209781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:19:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 19, 19), 15.92, 34.27, 0.0, 29.89, 18.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:19:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:19:19
2026-02-15T19:19:50.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:19:50.212 [DEBUG] [Thread-209782] [transport.py] [_log()] starting thread (client mode): 0xa2d55f60
2026-02-15T19:19:50.212 [DEBUG] [Thread-209782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:19:50.234 [DEBUG] [Thread-209782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:19:50.234 [INFO] [Thread-209782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:19:50.237 [DEBUG] [Thread-209782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] client lang: <none>
2026-02-15T19:19:50.238 [DEBUG] [Thread-209782] [transport.py] [_log()] server lang: <none>
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] kex follows: False
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] Compression: none
2026-02-15T19:19:50.239 [DEBUG] [Thread-209782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:19:50.259 [DEBUG] [Thread-209782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:19:50.260 [DEBUG] [Thread-209782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:19:50.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:19:50.261 [DEBUG] [Thread-209782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:19:50.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:19:50.264 [DEBUG] [Thread-209782] [transport.py] [_log()] userauth is OK
2026-02-15T19:19:50.264 [DEBUG] [Thread-209782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:19:50.264 [DEBUG] [Thread-209782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:19:50.264 [DEBUG] [Thread-209782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:19:50.264 [DEBUG] [Thread-209782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:19:50.289 [INFO] [Thread-209782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:19:50.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:19:50.927 [DEBUG] [Thread-209782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:19:50.927 [DEBUG] [Thread-209782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:19:50.927 [DEBUG] [Thread-209782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:19:50.968 [DEBUG] [Thread-209782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:19:50.968 [DEBUG] [Thread-209782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:19:50.971 [DEBUG] [Thread-209782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:19:50.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:19:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:19:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:19:50.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:19:50.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:19:50.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:19:50.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:19:50.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:19:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:19:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.721969 -999.00  +18.00  19.33     40   +4.30 1 1 1 1 1   885    0 12.37 -72.25 ----- 17.6 19.3 146.0 30.7 19.2 -26.8 19.2 -26.0 19.4 -25.2 19.7 -26.6
2026-02-15T19:19:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:19:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:19:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.721969
2026-02-15T19:19:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:19:50.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:19:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:19:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:19:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:19:50.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:19:19', tmtdew=15.92, humidity=34.27, cloud=0.0, wind=29.89, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:19:38.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:19:50.989 [DEBUG] [Thread-209782] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:19:51.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:19:51.094 [DEBUG] [Thread-209785] [transport.py] [_log()] starting thread (client mode): 0xa2d57550
2026-02-15T19:19:51.094 [DEBUG] [Thread-209785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:19:51.109 [DEBUG] [Thread-209785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:19:51.109 [INFO] [Thread-209785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:19:51.116 [DEBUG] [Thread-209785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:19:51.117 [DEBUG] [Thread-209785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] client lang: <none>
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] server lang: <none>
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] kex follows: False
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:19:51.118 [DEBUG] [Thread-209785] [transport.py] [_log()] Compression: none
2026-02-15T19:19:51.119 [DEBUG] [Thread-209785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:19:51.176 [DEBUG] [Thread-209785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:19:51.177 [DEBUG] [Thread-209785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:19:51.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:19:51.178 [DEBUG] [Thread-209785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:19:51.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:19:51.233 [DEBUG] [Thread-209785] [transport.py] [_log()] userauth is OK
2026-02-15T19:19:51.233 [DEBUG] [Thread-209785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:19:51.234 [DEBUG] [Thread-209785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:19:51.234 [DEBUG] [Thread-209785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:19:51.234 [DEBUG] [Thread-209785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:19:51.253 [INFO] [Thread-209785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:19:51.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:19:51.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:19:52.046 [DEBUG] [Thread-209785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:19:52.047 [DEBUG] [Thread-209785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:19:52.094 [DEBUG] [Thread-209785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:19:52.095 [DEBUG] [Thread-209785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:19:52.103 [DEBUG] [Thread-209785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:19:52.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:19: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')
2026-02-15T19:19: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
2026-02-15T19:19:52.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:19:52.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:19:52.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:19:52.140 [DEBUG] [Thread-209785] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:20:04.638 [DEBUG] [Thread-209787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:04.992 [DEBUG] [Thread-209788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:19.690 [DEBUG] [Thread-209789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:22.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:20:22.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:20:22.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:20:23.659 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:23.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 19, 54), 15.82, 34.41, 0.0, 27.45, 18.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:20:24.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:19:54
2026-02-15T19:20:24.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:20:24.716 [DEBUG] [Thread-209790] [transport.py] [_log()] starting thread (client mode): 0xa57b2320
2026-02-15T19:20:24.716 [DEBUG] [Thread-209790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:20:24.738 [DEBUG] [Thread-209790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:20:24.738 [INFO] [Thread-209790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:20:24.740 [DEBUG] [Thread-209790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] client lang: <none>
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] server lang: <none>
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] kex follows: False
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] Compression: none
2026-02-15T19:20:24.741 [DEBUG] [Thread-209790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:20:24.761 [DEBUG] [Thread-209790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:20:24.761 [DEBUG] [Thread-209790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:20:24.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:20:24.762 [DEBUG] [Thread-209790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:20:24.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:20:24.764 [DEBUG] [Thread-209790] [transport.py] [_log()] userauth is OK
2026-02-15T19:20:24.764 [DEBUG] [Thread-209790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:20:24.764 [DEBUG] [Thread-209790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:20:24.765 [DEBUG] [Thread-209790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:20:24.765 [DEBUG] [Thread-209790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:20:24.782 [INFO] [Thread-209790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:20:24.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:20:25.372 [DEBUG] [Thread-209790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:20:25.372 [DEBUG] [Thread-209790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:20:25.372 [DEBUG] [Thread-209790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:20:25.413 [DEBUG] [Thread-209790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:20:25.413 [DEBUG] [Thread-209790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:20:25.416 [DEBUG] [Thread-209790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:20:25.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:20:25.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:20:25.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:20:25.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:20:25.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:20:25.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:20:25.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:20:25.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:20:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:20:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.722315 -999.00  +18.00  23.56     40   +4.30 1 1 1 1 1   884    0 12.31 -70.60 ----- 23.4 23.6 158.6 34.6 19.2 -26.8 19.2 -25.8 19.4 -24.9 19.7 -26.5
2026-02-15T19:20:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:20:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:20:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.722315
2026-02-15T19:20:25.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:20:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:20:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:20:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:20:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:20:25.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:19:54', tmtdew=15.82, humidity=34.41, cloud=0.0, wind=27.45, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:20:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:20:25.441 [DEBUG] [Thread-209790] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:20:25.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:20:25.535 [DEBUG] [Thread-209793] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-15T19:20:25.535 [DEBUG] [Thread-209793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:20:25.549 [DEBUG] [Thread-209793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:20:25.549 [INFO] [Thread-209793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] client lang: <none>
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] server lang: <none>
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] kex follows: False
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] Compression: none
2026-02-15T19:20:25.557 [DEBUG] [Thread-209793] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:20:25.619 [DEBUG] [Thread-209793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:20:25.619 [DEBUG] [Thread-209793] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:20:25.619 [DEBUG] [Thread-209793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:20:25.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:20:25.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:20:25.678 [DEBUG] [Thread-209793] [transport.py] [_log()] userauth is OK
2026-02-15T19:20:25.678 [DEBUG] [Thread-209793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:20:25.679 [DEBUG] [Thread-209793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:20:25.679 [DEBUG] [Thread-209793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:20:25.679 [DEBUG] [Thread-209793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:20:25.699 [INFO] [Thread-209793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:20:25.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:20:25.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:20:26.552 [DEBUG] [Thread-209793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:20:26.552 [DEBUG] [Thread-209793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:20:26.600 [DEBUG] [Thread-209793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:20:26.601 [DEBUG] [Thread-209793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:20:26.610 [DEBUG] [Thread-209793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:20:26.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:20:26.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:20:26.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:20:26.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:20:26.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:20:26.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:20:26.645 [DEBUG] [Thread-209793] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:20:34.722 [DEBUG] [Thread-209795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:49.773 [DEBUG] [Thread-209796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:20:56.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:20:56.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:20:56.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:20:58.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 20, 30), 15.79, 34.47, 0.0, 27.77, 18.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:20:58.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:20:30
2026-02-15T19:20:59.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:20:59.163 [DEBUG] [Thread-209797] [transport.py] [_log()] starting thread (client mode): 0xa57e26b0
2026-02-15T19:20:59.163 [DEBUG] [Thread-209797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:20:59.183 [DEBUG] [Thread-209797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:20:59.183 [INFO] [Thread-209797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:20:59.186 [DEBUG] [Thread-209797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:20:59.186 [DEBUG] [Thread-209797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:20:59.186 [DEBUG] [Thread-209797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:20:59.186 [DEBUG] [Thread-209797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:20:59.186 [DEBUG] [Thread-209797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:20:59.186 [DEBUG] [Thread-209797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] client lang: <none>
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] server lang: <none>
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] kex follows: False
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] Compression: none
2026-02-15T19:20:59.187 [DEBUG] [Thread-209797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:20:59.203 [DEBUG] [Thread-209797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:20:59.203 [DEBUG] [Thread-209797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:20:59.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:20:59.204 [DEBUG] [Thread-209797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:20:59.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:20:59.206 [DEBUG] [Thread-209797] [transport.py] [_log()] userauth is OK
2026-02-15T19:20:59.207 [DEBUG] [Thread-209797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:20:59.207 [DEBUG] [Thread-209797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:20:59.207 [DEBUG] [Thread-209797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:20:59.207 [DEBUG] [Thread-209797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:20:59.230 [INFO] [Thread-209797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:20:59.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:20:59.832 [DEBUG] [Thread-209797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:20:59.833 [DEBUG] [Thread-209797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:20:59.833 [DEBUG] [Thread-209797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:20:59.873 [DEBUG] [Thread-209797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:20:59.873 [DEBUG] [Thread-209797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:20:59.876 [DEBUG] [Thread-209797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:20:59.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:20:59.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:20:59.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:20:59.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:20:59.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:20:59.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:20:59.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:20:59.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:20:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:20:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.722663 -999.00  +18.00  20.56     40   +4.30 1 1 1 1 1   884    0 12.10 -78.86 ----- 23.5 20.6 156.8 32.8 19.1 -26.9 19.1 -25.7 19.3 -25.2 19.6 -26.5
2026-02-15T19:20:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:20:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:20:59.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.722663
2026-02-15T19:20:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:20:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:20:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:20:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:20:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:20:59.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:20:30', tmtdew=15.79, humidity=34.47, cloud=0.0, wind=27.77, temperature=18.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:20:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:20:59.904 [DEBUG] [Thread-209797] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:20:59.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:20:59.997 [DEBUG] [Thread-209800] [transport.py] [_log()] starting thread (client mode): 0xa57e0e50
2026-02-15T19:20:59.997 [DEBUG] [Thread-209800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:21:00.013 [DEBUG] [Thread-209800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:21:00.014 [INFO] [Thread-209800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:21:00.021 [DEBUG] [Thread-209800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:21:00.021 [DEBUG] [Thread-209800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:21:00.021 [DEBUG] [Thread-209800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] client lang: <none>
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] server lang: <none>
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] kex follows: False
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] Compression: none
2026-02-15T19:21:00.022 [DEBUG] [Thread-209800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:21:00.079 [DEBUG] [Thread-209800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:21:00.080 [DEBUG] [Thread-209800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:21:00.080 [DEBUG] [Thread-209800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:21:00.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:21:00.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:21:00.136 [DEBUG] [Thread-209800] [transport.py] [_log()] userauth is OK
2026-02-15T19:21:00.137 [DEBUG] [Thread-209800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:21:00.137 [DEBUG] [Thread-209800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:21:00.137 [DEBUG] [Thread-209800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:21:00.137 [DEBUG] [Thread-209800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:21:00.156 [INFO] [Thread-209800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:21:00.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:21:00.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:21:00.980 [DEBUG] [Thread-209800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:21:00.980 [DEBUG] [Thread-209800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:21:01.028 [DEBUG] [Thread-209800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:21:01.028 [DEBUG] [Thread-209800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:21:01.037 [DEBUG] [Thread-209800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:21:01.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:21:01.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:21:01.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:21:01.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:21:01.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:21:01.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:21:01.074 [DEBUG] [Thread-209800] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:21:04.809 [DEBUG] [Thread-209802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:21:05.028 [DEBUG] [Thread-209803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:21:19.866 [DEBUG] [Thread-209804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:21:23.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:21:23.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:21:31.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:21:31.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:21:31.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:21:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 21, 6), 15.79, 34.46, 0.0, 27.26, 18.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:21:32.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:21:06
2026-02-15T19:21:33.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:21:33.433 [DEBUG] [Thread-209805] [transport.py] [_log()] starting thread (client mode): 0xa5759210
2026-02-15T19:21:33.433 [DEBUG] [Thread-209805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:21:33.453 [DEBUG] [Thread-209805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:21:33.453 [INFO] [Thread-209805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:21:33.456 [DEBUG] [Thread-209805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:21:33.456 [DEBUG] [Thread-209805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:21:33.456 [DEBUG] [Thread-209805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] client lang: <none>
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] server lang: <none>
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] kex follows: False
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] Compression: none
2026-02-15T19:21:33.457 [DEBUG] [Thread-209805] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:21:33.474 [DEBUG] [Thread-209805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:21:33.475 [DEBUG] [Thread-209805] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:21:33.475 [DEBUG] [Thread-209805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:21:33.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:21:33.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:21:33.477 [DEBUG] [Thread-209805] [transport.py] [_log()] userauth is OK
2026-02-15T19:21:33.477 [DEBUG] [Thread-209805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:21:33.478 [DEBUG] [Thread-209805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:21:33.478 [DEBUG] [Thread-209805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:21:33.478 [DEBUG] [Thread-209805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:21:33.502 [INFO] [Thread-209805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:21:33.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:21:34.125 [DEBUG] [Thread-209805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:21:34.126 [DEBUG] [Thread-209805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:21:34.126 [DEBUG] [Thread-209805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:21:34.166 [DEBUG] [Thread-209805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:21:34.166 [DEBUG] [Thread-209805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:21:34.170 [DEBUG] [Thread-209805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:21:34.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:21:34.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:21:34.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:21:34.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:21:34.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:21:34.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:21:34.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:21:34.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:21:34.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:21:34.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.723010 -999.00  +18.00  22.04     40   +4.30 1 1 1 1 1   884    0 12.19 -80.73 ----- 25.6 22.0 166.0 29.1 19.1 -26.8 19.1 -26.0 19.3 -25.2 19.6 -26.6
2026-02-15T19:21:34.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:21:34.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:21:34.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.723010
2026-02-15T19:21:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:21:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:21:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:21:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:21:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:21:34.196 [DEBUG] [Thread-209805] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:21:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:21:06', tmtdew=15.79, humidity=34.46, cloud=0.0, wind=27.26, temperature=18.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:21:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:21:34.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:21:34.290 [DEBUG] [Thread-209808] [transport.py] [_log()] starting thread (client mode): 0xa2d56860
2026-02-15T19:21:34.290 [DEBUG] [Thread-209808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:21:34.304 [DEBUG] [Thread-209808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:21:34.304 [INFO] [Thread-209808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:21:34.312 [DEBUG] [Thread-209808] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:21:34.312 [DEBUG] [Thread-209808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:21:34.312 [DEBUG] [Thread-209808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:21:34.312 [DEBUG] [Thread-209808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:21:34.312 [DEBUG] [Thread-209808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:21:34.312 [DEBUG] [Thread-209808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] client lang: <none>
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] server lang: <none>
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] kex follows: False
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] Compression: none
2026-02-15T19:21:34.313 [DEBUG] [Thread-209808] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:21:34.368 [DEBUG] [Thread-209808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:21:34.368 [DEBUG] [Thread-209808] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:21:34.369 [DEBUG] [Thread-209808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:21:34.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:21:34.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:21:34.429 [DEBUG] [Thread-209808] [transport.py] [_log()] userauth is OK
2026-02-15T19:21:34.429 [DEBUG] [Thread-209808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:21:34.430 [DEBUG] [Thread-209808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:21:34.430 [DEBUG] [Thread-209808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:21:34.430 [DEBUG] [Thread-209808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:21:34.449 [INFO] [Thread-209808] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:21:34.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:21:34.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:21:34.902 [DEBUG] [Thread-209810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:21:35.249 [DEBUG] [Thread-209808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:21:35.249 [DEBUG] [Thread-209808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:21:35.297 [DEBUG] [Thread-209808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:21:35.297 [DEBUG] [Thread-209808] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:21:35.306 [DEBUG] [Thread-209808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:21:35.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:21:35.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:21:35.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:21:35.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:21:35.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:21:35.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:21:35.342 [DEBUG] [Thread-209808] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:21:49.955 [DEBUG] [Thread-209811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:04.990 [DEBUG] [Thread-209812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:05.063 [DEBUG] [Thread-209813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:22:05.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:22:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:22:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 21, 41), 16.13, 34.04, 0.0, 24.88, 18.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:22:07.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:21:41
2026-02-15T19:22:08.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:22:08.246 [DEBUG] [Thread-209814] [transport.py] [_log()] starting thread (client mode): 0xa57b2bf0
2026-02-15T19:22:08.247 [DEBUG] [Thread-209814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:22:08.267 [DEBUG] [Thread-209814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:22:08.267 [INFO] [Thread-209814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] client lang: <none>
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] server lang: <none>
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] kex follows: False
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] Compression: none
2026-02-15T19:22:08.270 [DEBUG] [Thread-209814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:22:08.287 [DEBUG] [Thread-209814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:22:08.288 [DEBUG] [Thread-209814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:22:08.288 [DEBUG] [Thread-209814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:22:08.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:22:08.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:22:08.289 [DEBUG] [Thread-209814] [transport.py] [_log()] userauth is OK
2026-02-15T19:22:08.289 [DEBUG] [Thread-209814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:22:08.289 [DEBUG] [Thread-209814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:22:08.289 [DEBUG] [Thread-209814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:22:08.289 [DEBUG] [Thread-209814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:22:08.305 [INFO] [Thread-209814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:22:08.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:22:08.928 [DEBUG] [Thread-209814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:22:08.929 [DEBUG] [Thread-209814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:22:08.929 [DEBUG] [Thread-209814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:22:08.969 [DEBUG] [Thread-209814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:22:08.969 [DEBUG] [Thread-209814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:22:08.972 [DEBUG] [Thread-209814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:22:08.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:22:08.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:22:08.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:22:08.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:22:08.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:22:08.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:22:08.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:22:08.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:22:09.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:22:09.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.723357 -999.00  +17.90  23.40     40   +4.30 1 1 1 1 1   883    0 11.81 -81.47 ----- 21.7 23.4 157.2 31.3 19.1 -26.8 19.1 -25.9 19.2 -25.0 19.5 -26.4
2026-02-15T19:22:09.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:22:09.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:22:09.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.723357
2026-02-15T19:22:09.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:22:09.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:22:09.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:22:09.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:22:09.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:22:09.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:21:41', tmtdew=16.13, humidity=34.04, cloud=0.0, wind=24.88, temperature=18.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:21:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:22:09.002 [DEBUG] [Thread-209814] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:22:09.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:22:09.099 [DEBUG] [Thread-209817] [transport.py] [_log()] starting thread (client mode): 0xa57b2500
2026-02-15T19:22:09.099 [DEBUG] [Thread-209817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:22:09.113 [DEBUG] [Thread-209817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:22:09.113 [INFO] [Thread-209817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:09.121 [DEBUG] [Thread-209817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] client lang: <none>
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] server lang: <none>
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] kex follows: False
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] Compression: none
2026-02-15T19:22:09.122 [DEBUG] [Thread-209817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:22:09.185 [DEBUG] [Thread-209817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:22:09.185 [DEBUG] [Thread-209817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:22:09.186 [DEBUG] [Thread-209817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:22:09.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:22:09.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:22:09.241 [DEBUG] [Thread-209817] [transport.py] [_log()] userauth is OK
2026-02-15T19:22:09.241 [DEBUG] [Thread-209817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:22:09.241 [DEBUG] [Thread-209817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:22:09.242 [DEBUG] [Thread-209817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:22:09.242 [DEBUG] [Thread-209817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:22:09.263 [INFO] [Thread-209817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:22:09.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:22:09.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:22:10.081 [DEBUG] [Thread-209817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:22:10.082 [DEBUG] [Thread-209817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:22:10.129 [DEBUG] [Thread-209817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:22:10.130 [DEBUG] [Thread-209817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:22:10.139 [DEBUG] [Thread-209817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:22:10.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:22:10.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:22:10.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:22:10.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:22:10.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:22:10.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:22:10.176 [DEBUG] [Thread-209817] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:22:20.027 [DEBUG] [Thread-209819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:23.947 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:23.948 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:35.076 [DEBUG] [Thread-209820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:22:40.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:22:40.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:22:40.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:22:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 22, 16), 15.67, 35.12, 0.0, 30.51, 18.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:22:42.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:22:16
2026-02-15T19:22:42.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:22:42.613 [DEBUG] [Thread-209821] [transport.py] [_log()] starting thread (client mode): 0xa575bd00
2026-02-15T19:22:42.614 [DEBUG] [Thread-209821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:22:42.628 [DEBUG] [Thread-209821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:22:42.629 [INFO] [Thread-209821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:22:42.631 [DEBUG] [Thread-209821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] client lang: <none>
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] server lang: <none>
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] kex follows: False
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] Compression: none
2026-02-15T19:22:42.632 [DEBUG] [Thread-209821] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:22:42.651 [DEBUG] [Thread-209821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:22:42.652 [DEBUG] [Thread-209821] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:22:42.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:22:42.653 [DEBUG] [Thread-209821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:22:42.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:22:42.655 [DEBUG] [Thread-209821] [transport.py] [_log()] userauth is OK
2026-02-15T19:22:42.655 [DEBUG] [Thread-209821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:22:42.655 [DEBUG] [Thread-209821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:22:42.656 [DEBUG] [Thread-209821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:22:42.656 [DEBUG] [Thread-209821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:22:42.681 [INFO] [Thread-209821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:22:42.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:22:43.324 [DEBUG] [Thread-209821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:22:43.324 [DEBUG] [Thread-209821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:22:43.324 [DEBUG] [Thread-209821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:22:43.365 [DEBUG] [Thread-209821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:22:43.365 [DEBUG] [Thread-209821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:22:43.368 [DEBUG] [Thread-209821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:22:43.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:22:43.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:22:43.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:22:43.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:22:43.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:22:43.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:22:43.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:22:43.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:22:43.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:22:43.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.723705 -999.00  +17.90  27.93     40   +4.30 1 1 1 1 1   883    0 11.79 -81.77 ----- 31.0 27.9 161.0 34.9 19.0 -26.9 19.0 -25.8 19.2 -25.0 19.5 -26.3
2026-02-15T19:22:43.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:22:43.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:22:43.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.723705
2026-02-15T19:22:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:22:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:22:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:22:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:22:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:22:43.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:22:16', tmtdew=15.67, humidity=35.12, cloud=0.0, wind=30.51, temperature=18.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:22:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:22:43.391 [DEBUG] [Thread-209821] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:22:43.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:22:43.487 [DEBUG] [Thread-209824] [transport.py] [_log()] starting thread (client mode): 0xa57b1a50
2026-02-15T19:22:43.488 [DEBUG] [Thread-209824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:22:43.502 [DEBUG] [Thread-209824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:22:43.502 [INFO] [Thread-209824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] client lang: <none>
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] server lang: <none>
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] kex follows: False
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:22:43.510 [DEBUG] [Thread-209824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:22:43.511 [DEBUG] [Thread-209824] [transport.py] [_log()] Compression: none
2026-02-15T19:22:43.511 [DEBUG] [Thread-209824] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:22:43.568 [DEBUG] [Thread-209824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:22:43.569 [DEBUG] [Thread-209824] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:22:43.569 [DEBUG] [Thread-209824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:22:43.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:22:43.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:22:43.625 [DEBUG] [Thread-209824] [transport.py] [_log()] userauth is OK
2026-02-15T19:22:43.625 [DEBUG] [Thread-209824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:22:43.625 [DEBUG] [Thread-209824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:22:43.625 [DEBUG] [Thread-209824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:22:43.625 [DEBUG] [Thread-209824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:22:43.643 [INFO] [Thread-209824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:22:43.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:22:43.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:22:44.461 [DEBUG] [Thread-209824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:22:44.461 [DEBUG] [Thread-209824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:22:44.509 [DEBUG] [Thread-209824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:22:44.510 [DEBUG] [Thread-209824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:22:44.519 [DEBUG] [Thread-209824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:22:44.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:22:44.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:22:44.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:22:44.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:22:44.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:22:44.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:22:44.556 [DEBUG] [Thread-209824] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:22:50.113 [DEBUG] [Thread-209826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:05.119 [DEBUG] [Thread-209827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:05.162 [DEBUG] [Thread-209828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:14.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:23:14.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:23:14.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:23:16.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 22, 51), 15.65, 35.17, 0.0, 32.59, 18.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:23:16.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:22:51
2026-02-15T19:23:17.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:23:17.358 [DEBUG] [Thread-209829] [transport.py] [_log()] starting thread (client mode): 0xa2d54340
2026-02-15T19:23:17.358 [DEBUG] [Thread-209829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:23:17.378 [DEBUG] [Thread-209829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:23:17.378 [INFO] [Thread-209829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:23:17.381 [DEBUG] [Thread-209829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:23:17.381 [DEBUG] [Thread-209829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:23:17.381 [DEBUG] [Thread-209829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:23:17.381 [DEBUG] [Thread-209829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] client lang: <none>
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] server lang: <none>
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] kex follows: False
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] Compression: none
2026-02-15T19:23:17.382 [DEBUG] [Thread-209829] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:23:17.397 [DEBUG] [Thread-209829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:23:17.398 [DEBUG] [Thread-209829] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:23:17.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:23:17.398 [DEBUG] [Thread-209829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:23:17.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:23:17.401 [DEBUG] [Thread-209829] [transport.py] [_log()] userauth is OK
2026-02-15T19:23:17.401 [DEBUG] [Thread-209829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:23:17.401 [DEBUG] [Thread-209829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:23:17.401 [DEBUG] [Thread-209829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:23:17.401 [DEBUG] [Thread-209829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:23:17.420 [INFO] [Thread-209829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:23:17.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:23:17.997 [DEBUG] [Thread-209829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:23:17.997 [DEBUG] [Thread-209829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:23:17.997 [DEBUG] [Thread-209829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:23:18.038 [DEBUG] [Thread-209829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:23:18.039 [DEBUG] [Thread-209829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:23:18.042 [DEBUG] [Thread-209829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:23:18.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:23:18.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:23:18.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:23:18.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:23:18.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:23:18.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:23:18.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:23:18.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:23:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:23:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.724052 -999.00  +17.90  26.36     40   +4.30 1 1 1 1 1   882    0 11.61 -78.44 ----- 21.1 26.4 157.8 31.9 19.0 -26.8 19.0 -25.6 19.2 -24.9 19.4 -26.3
2026-02-15T19:23:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:23:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:23:18.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.724052
2026-02-15T19:23:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:23:18.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:23:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:23:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:23:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:23:18.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:22:51', tmtdew=15.65, humidity=35.17, cloud=0.0, wind=32.59, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:22:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:23:18.070 [DEBUG] [Thread-209829] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:23:18.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:23:18.166 [DEBUG] [Thread-209832] [transport.py] [_log()] starting thread (client mode): 0xa5742680
2026-02-15T19:23:18.166 [DEBUG] [Thread-209832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:23:18.181 [DEBUG] [Thread-209832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:23:18.181 [INFO] [Thread-209832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:23:18.188 [DEBUG] [Thread-209832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:23:18.188 [DEBUG] [Thread-209832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:23:18.188 [DEBUG] [Thread-209832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] client lang: <none>
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] server lang: <none>
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] kex follows: False
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] Compression: none
2026-02-15T19:23:18.189 [DEBUG] [Thread-209832] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:23:18.253 [DEBUG] [Thread-209832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:23:18.254 [DEBUG] [Thread-209832] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:23:18.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:23:18.255 [DEBUG] [Thread-209832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:23:18.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:23:18.313 [DEBUG] [Thread-209832] [transport.py] [_log()] userauth is OK
2026-02-15T19:23:18.313 [DEBUG] [Thread-209832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:23:18.314 [DEBUG] [Thread-209832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:23:18.314 [DEBUG] [Thread-209832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:23:18.314 [DEBUG] [Thread-209832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:23:18.333 [INFO] [Thread-209832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:23:18.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:23:18.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:23:19.158 [DEBUG] [Thread-209832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:23:19.158 [DEBUG] [Thread-209832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:23:19.207 [DEBUG] [Thread-209832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:23:19.207 [DEBUG] [Thread-209832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:23:19.216 [DEBUG] [Thread-209832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:23:19.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:23:19.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:23:19.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:23:19.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:23:19.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:23:19.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:23:19.251 [DEBUG] [Thread-209832] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:23:20.199 [DEBUG] [Thread-209834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:24.090 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:24.091 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:35.252 [DEBUG] [Thread-209835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:49.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:23:49.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:23: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
2026-02-15T19:23:50.290 [DEBUG] [Thread-209836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:23:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 23, 27), 15.64, 35.17, 0.0, 30.79, 17.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:23:51.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:23:27
2026-02-15T19:23:51.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:23:51.584 [DEBUG] [Thread-209837] [transport.py] [_log()] starting thread (client mode): 0xa57b3430
2026-02-15T19:23:51.584 [DEBUG] [Thread-209837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:23:51.605 [DEBUG] [Thread-209837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:23:51.605 [INFO] [Thread-209837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] client lang: <none>
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] server lang: <none>
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] kex follows: False
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] Compression: none
2026-02-15T19:23:51.608 [DEBUG] [Thread-209837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:23:51.627 [DEBUG] [Thread-209837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:23:51.627 [DEBUG] [Thread-209837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:23:51.628 [DEBUG] [Thread-209837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:23:51.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:23:51.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:23:51.629 [DEBUG] [Thread-209837] [transport.py] [_log()] userauth is OK
2026-02-15T19:23:51.629 [DEBUG] [Thread-209837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:23:51.629 [DEBUG] [Thread-209837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:23:51.630 [DEBUG] [Thread-209837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:23:51.630 [DEBUG] [Thread-209837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:23:51.649 [INFO] [Thread-209837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:23:51.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:23:52.286 [DEBUG] [Thread-209837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:23:52.287 [DEBUG] [Thread-209837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:23:52.287 [DEBUG] [Thread-209837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:23:52.329 [DEBUG] [Thread-209837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:23:52.329 [DEBUG] [Thread-209837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:23:52.332 [DEBUG] [Thread-209837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:23:52.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:23:52.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:23:52.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:23:52.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:23:52.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:23:52.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:23:52.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:23:52.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:23:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:23:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.724399 -999.00  +17.90  17.76     40   +4.30 1 1 1 1 1   882    0 11.74 -82.05 ----- 18.4 17.8 151.8 30.4 19.0 -26.6 19.0 -25.7 19.1 -24.9 19.4 -26.5
2026-02-15T19:23:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:23:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:23:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.724399
2026-02-15T19:23:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:23:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:23:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:23:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:23:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:23:52.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:23:27', tmtdew=15.64, humidity=35.17, cloud=0.0, wind=30.79, temperature=17.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:23:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:23:52.360 [DEBUG] [Thread-209837] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:23:52.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:23:52.457 [DEBUG] [Thread-209840] [transport.py] [_log()] starting thread (client mode): 0xa5741fc0
2026-02-15T19:23:52.457 [DEBUG] [Thread-209840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:23:52.472 [DEBUG] [Thread-209840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:23:52.472 [INFO] [Thread-209840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] client lang: <none>
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] server lang: <none>
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] kex follows: False
2026-02-15T19:23:52.480 [DEBUG] [Thread-209840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:23:52.481 [DEBUG] [Thread-209840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:23:52.481 [DEBUG] [Thread-209840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:23:52.481 [DEBUG] [Thread-209840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:23:52.481 [DEBUG] [Thread-209840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:23:52.481 [DEBUG] [Thread-209840] [transport.py] [_log()] Compression: none
2026-02-15T19:23:52.481 [DEBUG] [Thread-209840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:23:52.536 [DEBUG] [Thread-209840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:23:52.537 [DEBUG] [Thread-209840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:23:52.538 [DEBUG] [Thread-209840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:23:52.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:23:52.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:23:52.593 [DEBUG] [Thread-209840] [transport.py] [_log()] userauth is OK
2026-02-15T19:23:52.593 [DEBUG] [Thread-209840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:23:52.593 [DEBUG] [Thread-209840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:23:52.593 [DEBUG] [Thread-209840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:23:52.593 [DEBUG] [Thread-209840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:23:52.615 [INFO] [Thread-209840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:23:52.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:23:52.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:23:53.426 [DEBUG] [Thread-209840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:23:53.427 [DEBUG] [Thread-209840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:23:53.475 [DEBUG] [Thread-209840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:23:53.475 [DEBUG] [Thread-209840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:23:53.485 [DEBUG] [Thread-209840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:23:53.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:23:53.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:23:53.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:23:53.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:23:53.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:23:53.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:23:53.522 [DEBUG] [Thread-209840] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:24:05.175 [DEBUG] [Thread-209842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:05.325 [DEBUG] [Thread-209843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:20.377 [DEBUG] [Thread-209844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:23.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:24:23.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:24:23.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:24:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 24, 3), 15.64, 35.19, 0.0, 33.35, 18.04, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:24:25.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:24:03
2026-02-15T19:24:25.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:24:26.129 [DEBUG] [Thread-209845] [transport.py] [_log()] starting thread (client mode): 0xa57b0a30
2026-02-15T19:24:26.129 [DEBUG] [Thread-209845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:24:26.149 [DEBUG] [Thread-209845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:24:26.149 [INFO] [Thread-209845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:24:26.150 [DEBUG] [Thread-209845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:24:26.150 [DEBUG] [Thread-209845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:24:26.150 [DEBUG] [Thread-209845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:24:26.150 [DEBUG] [Thread-209845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:24:26.150 [DEBUG] [Thread-209845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] client lang: <none>
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] server lang: <none>
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] kex follows: False
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] Compression: none
2026-02-15T19:24:26.151 [DEBUG] [Thread-209845] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:24:26.158 [DEBUG] [Thread-209845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:24:26.158 [DEBUG] [Thread-209845] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:24:26.158 [DEBUG] [Thread-209845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:24:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:24:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:24:26.159 [DEBUG] [Thread-209845] [transport.py] [_log()] userauth is OK
2026-02-15T19:24:26.160 [DEBUG] [Thread-209845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:24:26.160 [DEBUG] [Thread-209845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:24:26.160 [DEBUG] [Thread-209845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:24:26.160 [DEBUG] [Thread-209845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:24:26.176 [INFO] [Thread-209845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:24:26.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:24:26.816 [DEBUG] [Thread-209845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:24:26.816 [DEBUG] [Thread-209845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:24:26.817 [DEBUG] [Thread-209845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:24:26.857 [DEBUG] [Thread-209845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:24:26.858 [DEBUG] [Thread-209845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:24:26.861 [DEBUG] [Thread-209845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:24:26.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:24:26.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:24:26.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:24:26.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:24:26.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:24:26.887 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:24:26.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:24:26.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:24:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:24:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.724746 -999.00  +17.90  27.23     40   +4.40 1 1 1 1 1   881    0 11.66 -90.31 ----- 22.2 27.2 145.8 34.7 18.9 -26.6 18.9 -25.7 19.1 -24.9 19.3 -26.2
2026-02-15T19:24:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:24:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:24:26.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.724746
2026-02-15T19:24:26.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:24:26.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:24:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:24:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:24:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:24:26.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:24:03', tmtdew=15.64, humidity=35.19, cloud=0.0, wind=33.35, temperature=18.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:23:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:24:26.890 [DEBUG] [Thread-209845] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:24:26.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:24:26.987 [DEBUG] [Thread-209848] [transport.py] [_log()] starting thread (client mode): 0xa57b37c0
2026-02-15T19:24:26.987 [DEBUG] [Thread-209848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:24:27.003 [DEBUG] [Thread-209848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:24:27.003 [INFO] [Thread-209848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:24:27.010 [DEBUG] [Thread-209848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] client lang: <none>
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] server lang: <none>
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] kex follows: False
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:24:27.011 [DEBUG] [Thread-209848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:24:27.012 [DEBUG] [Thread-209848] [transport.py] [_log()] Compression: none
2026-02-15T19:24:27.012 [DEBUG] [Thread-209848] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:24:27.071 [DEBUG] [Thread-209848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:24:27.071 [DEBUG] [Thread-209848] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:24:27.072 [DEBUG] [Thread-209848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:24:27.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:24:27.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:24:27.131 [DEBUG] [Thread-209848] [transport.py] [_log()] userauth is OK
2026-02-15T19:24:27.131 [DEBUG] [Thread-209848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:24:27.131 [DEBUG] [Thread-209848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:24:27.131 [DEBUG] [Thread-209848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:24:27.131 [DEBUG] [Thread-209848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:24:27.150 [INFO] [Thread-209848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:24:27.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:24:27.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:24:28.014 [DEBUG] [Thread-209848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:24:28.014 [DEBUG] [Thread-209848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:24:28.062 [DEBUG] [Thread-209848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:24:28.062 [DEBUG] [Thread-209848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:24:28.071 [DEBUG] [Thread-209848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:24:28.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:24:28.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:24:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:24:28.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:24:28.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:24:28.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:24:28.106 [DEBUG] [Thread-209848] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:24:29.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:29.098 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:35.412 [DEBUG] [Thread-209850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:50.463 [DEBUG] [Thread-209851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:24:58.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:24:58.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:24:58.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:24:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 24, 38), 15.93, 34.48, 0.0, 35.25, 18.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:24:59.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:24:38
2026-02-15T19:25:00.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:25:00.424 [DEBUG] [Thread-209852] [transport.py] [_log()] starting thread (client mode): 0xa57b3130
2026-02-15T19:25:00.424 [DEBUG] [Thread-209852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:25:00.440 [DEBUG] [Thread-209852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:25:00.440 [INFO] [Thread-209852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:25:00.443 [DEBUG] [Thread-209852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:25:00.443 [DEBUG] [Thread-209852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] client lang: <none>
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] server lang: <none>
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] kex follows: False
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] Compression: none
2026-02-15T19:25:00.444 [DEBUG] [Thread-209852] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:25:00.462 [DEBUG] [Thread-209852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:25:00.462 [DEBUG] [Thread-209852] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:25:00.463 [DEBUG] [Thread-209852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:25:00.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:25:00.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:25:00.465 [DEBUG] [Thread-209852] [transport.py] [_log()] userauth is OK
2026-02-15T19:25:00.465 [DEBUG] [Thread-209852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:25:00.465 [DEBUG] [Thread-209852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:25:00.466 [DEBUG] [Thread-209852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:25:00.466 [DEBUG] [Thread-209852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:25:00.490 [INFO] [Thread-209852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:25:00.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:25:01.168 [DEBUG] [Thread-209852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:25:01.169 [DEBUG] [Thread-209852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:25:01.169 [DEBUG] [Thread-209852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:25:01.210 [DEBUG] [Thread-209852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:25:01.211 [DEBUG] [Thread-209852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:25:01.214 [DEBUG] [Thread-209852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:25:01.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:25:01.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:25:01.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:25:01.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:25:01.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:25:01.237 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:25:01.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:25:01.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:25:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:25:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.725094 -999.00  +17.90  21.25     40   +4.30 1 1 1 1 1   880    0 11.67 -96.31 ----- 21.3 21.2 157.3 30.1 18.9 -26.6 18.9 -25.5 19.0 -24.8 19.3 -26.3
2026-02-15T19:25:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:25:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:25:01.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.725094
2026-02-15T19:25:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:25:01.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:25:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:25:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:25:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:25:01.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:24:38', tmtdew=15.93, humidity=34.48, cloud=0.0, wind=35.25, temperature=18.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:24:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:25:01.240 [DEBUG] [Thread-209852] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:25:01.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:25:01.335 [DEBUG] [Thread-209855] [transport.py] [_log()] starting thread (client mode): 0xa2d569b0
2026-02-15T19:25:01.336 [DEBUG] [Thread-209855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:25:01.350 [DEBUG] [Thread-209855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:25:01.350 [INFO] [Thread-209855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:25:01.358 [DEBUG] [Thread-209855] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:25:01.358 [DEBUG] [Thread-209855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:25:01.358 [DEBUG] [Thread-209855] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:25:01.358 [DEBUG] [Thread-209855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:01.358 [DEBUG] [Thread-209855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:01.358 [DEBUG] [Thread-209855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] client lang: <none>
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] server lang: <none>
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] kex follows: False
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] Compression: none
2026-02-15T19:25:01.359 [DEBUG] [Thread-209855] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:25:01.416 [DEBUG] [Thread-209855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:25:01.417 [DEBUG] [Thread-209855] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:25:01.417 [DEBUG] [Thread-209855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:25:01.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:25:01.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:25:01.473 [DEBUG] [Thread-209855] [transport.py] [_log()] userauth is OK
2026-02-15T19:25:01.473 [DEBUG] [Thread-209855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:25:01.473 [DEBUG] [Thread-209855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:25:01.474 [DEBUG] [Thread-209855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:25:01.474 [DEBUG] [Thread-209855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:25:01.492 [INFO] [Thread-209855] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:25:01.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:25:01.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:25:02.347 [DEBUG] [Thread-209855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:25:02.347 [DEBUG] [Thread-209855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:25:02.397 [DEBUG] [Thread-209855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:25:02.397 [DEBUG] [Thread-209855] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:25:02.406 [DEBUG] [Thread-209855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:25:02.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:25: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')
2026-02-15T19:25:02.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:25:02.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:25:02.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:25:02.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:25:02.442 [DEBUG] [Thread-209855] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:25:05.241 [DEBUG] [Thread-209857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:25:05.498 [DEBUG] [Thread-209858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:25:20.547 [DEBUG] [Thread-209859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:25:32.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:25:32.443 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:25:32.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:25:34.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 25, 13), 15.57, 35.35, 0.0, 33.1, 18.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:25:34.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:25:13
2026-02-15T19:25:34.289 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:25:34.290 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:25:34.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:25:34.777 [DEBUG] [Thread-209860] [transport.py] [_log()] starting thread (client mode): 0xa5740dc0
2026-02-15T19:25:34.777 [DEBUG] [Thread-209860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:25:34.791 [DEBUG] [Thread-209860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:25:34.791 [INFO] [Thread-209860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:25:34.794 [DEBUG] [Thread-209860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:25:34.794 [DEBUG] [Thread-209860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] client lang: <none>
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] server lang: <none>
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] kex follows: False
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] Compression: none
2026-02-15T19:25:34.795 [DEBUG] [Thread-209860] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:25:34.802 [DEBUG] [Thread-209860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:25:34.803 [DEBUG] [Thread-209860] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:25:34.803 [DEBUG] [Thread-209860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:25:34.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:25:34.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:25:34.804 [DEBUG] [Thread-209860] [transport.py] [_log()] userauth is OK
2026-02-15T19:25:34.804 [DEBUG] [Thread-209860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:25:34.804 [DEBUG] [Thread-209860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:25:34.804 [DEBUG] [Thread-209860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:25:34.804 [DEBUG] [Thread-209860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:25:34.817 [INFO] [Thread-209860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:25:34.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:25:35.582 [DEBUG] [Thread-209862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:25:36.488 [DEBUG] [Thread-209860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:25:36.488 [DEBUG] [Thread-209860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:25:36.488 [DEBUG] [Thread-209860] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:25:36.528 [DEBUG] [Thread-209860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:25:36.529 [DEBUG] [Thread-209860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:25:36.532 [DEBUG] [Thread-209860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:25:36.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:25:36.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:25:36.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:25:36.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:25:36.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:25:36.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:25:36.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:25:36.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:25:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:25:36.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.725788 -999.00  +17.90  23.62     40   +4.30 1 1 1 1 1   879    0 11.30 -91.62 ----- 23.3 23.6 165.4 31.2 18.9 -26.6 18.9 -25.6 18.9 -24.6 19.2 -26.0
2026-02-15T19:25:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:25:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:25:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.725788
2026-02-15T19:25:36.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:25:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:25:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:25:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:25:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:25:36.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:25:13', tmtdew=15.57, humidity=35.35, cloud=0.0, wind=33.1, temperature=18.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:25:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:25:36.561 [DEBUG] [Thread-209860] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:25:36.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:25:36.657 [DEBUG] [Thread-209864] [transport.py] [_log()] starting thread (client mode): 0xa2d6fa60
2026-02-15T19:25:36.657 [DEBUG] [Thread-209864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:25:36.672 [DEBUG] [Thread-209864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:25:36.672 [INFO] [Thread-209864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:25:36.680 [DEBUG] [Thread-209864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:25:36.680 [DEBUG] [Thread-209864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:25:36.680 [DEBUG] [Thread-209864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:25:36.680 [DEBUG] [Thread-209864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:36.680 [DEBUG] [Thread-209864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:25:36.680 [DEBUG] [Thread-209864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] client lang: <none>
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] server lang: <none>
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] kex follows: False
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] Compression: none
2026-02-15T19:25:36.681 [DEBUG] [Thread-209864] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:25:36.736 [DEBUG] [Thread-209864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:25:36.737 [DEBUG] [Thread-209864] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:25:36.738 [DEBUG] [Thread-209864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:25:36.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:25:36.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:25:36.793 [DEBUG] [Thread-209864] [transport.py] [_log()] userauth is OK
2026-02-15T19:25:36.793 [DEBUG] [Thread-209864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:25:36.793 [DEBUG] [Thread-209864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:25:36.793 [DEBUG] [Thread-209864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:25:36.794 [DEBUG] [Thread-209864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:25:36.812 [INFO] [Thread-209864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:25:36.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:25:36.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:25:37.636 [DEBUG] [Thread-209864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:25:37.636 [DEBUG] [Thread-209864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:25:37.685 [DEBUG] [Thread-209864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:25:37.685 [DEBUG] [Thread-209864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:25:37.694 [DEBUG] [Thread-209864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:25:37.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:25: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')
2026-02-15T19:25:37.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:25:37.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:25:37.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:25:37.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:25:37.733 [DEBUG] [Thread-209864] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:25:50.620 [DEBUG] [Thread-209866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:05.299 [DEBUG] [Thread-209867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:05.679 [DEBUG] [Thread-209868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:07.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:26:07.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:26:07.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:26:09.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 25, 48), 15.57, 35.35, 0.0, 28.9, 17.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:26:09.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:25:48
2026-02-15T19:26:10.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:26:10.201 [DEBUG] [Thread-209869] [transport.py] [_log()] starting thread (client mode): 0xa2d3cfd0
2026-02-15T19:26:10.201 [DEBUG] [Thread-209869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:26:10.222 [DEBUG] [Thread-209869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:26:10.222 [INFO] [Thread-209869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] client lang: <none>
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] server lang: <none>
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] kex follows: False
2026-02-15T19:26:10.225 [DEBUG] [Thread-209869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:26:10.226 [DEBUG] [Thread-209869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:26:10.226 [DEBUG] [Thread-209869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:26:10.226 [DEBUG] [Thread-209869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:26:10.226 [DEBUG] [Thread-209869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:26:10.226 [DEBUG] [Thread-209869] [transport.py] [_log()] Compression: none
2026-02-15T19:26:10.226 [DEBUG] [Thread-209869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:26:10.243 [DEBUG] [Thread-209869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:26:10.243 [DEBUG] [Thread-209869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:26:10.244 [DEBUG] [Thread-209869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:26:10.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:26:10.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:26:10.246 [DEBUG] [Thread-209869] [transport.py] [_log()] userauth is OK
2026-02-15T19:26:10.246 [DEBUG] [Thread-209869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:26:10.246 [DEBUG] [Thread-209869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:26:10.246 [DEBUG] [Thread-209869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:26:10.246 [DEBUG] [Thread-209869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:26:10.264 [INFO] [Thread-209869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:26:10.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:26:10.909 [DEBUG] [Thread-209869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:26:10.909 [DEBUG] [Thread-209869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:26:10.910 [DEBUG] [Thread-209869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:26:10.950 [DEBUG] [Thread-209869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:26:10.951 [DEBUG] [Thread-209869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:26:10.954 [DEBUG] [Thread-209869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:26:10.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:26:10.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:26:10.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:26:10.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:26:10.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:26:10.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:26:10.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:26:10.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:26:10.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:26:10.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.726135 -999.00  +17.90  21.88     40   +4.30 1 1 1 1 1   878    0 10.79 -100.08 ----- 22.0 21.9 156.4 35.1 18.8 -26.5 18.8 -25.5 18.9 -24.6 19.2 -26.1
2026-02-15T19:26:10.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:26:10.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:26:10.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.726135
2026-02-15T19:26:10.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:26:10.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:26:10.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:26:10.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:26:10.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:26:10.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:25:48', tmtdew=15.57, humidity=35.35, cloud=0.0, wind=28.9, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:25:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:26:10.978 [DEBUG] [Thread-209869] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:26:11.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:26:11.073 [DEBUG] [Thread-209872] [transport.py] [_log()] starting thread (client mode): 0xa57b33a0
2026-02-15T19:26:11.073 [DEBUG] [Thread-209872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:26:11.087 [DEBUG] [Thread-209872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:26:11.087 [INFO] [Thread-209872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:26:11.095 [DEBUG] [Thread-209872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:26:11.095 [DEBUG] [Thread-209872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] client lang: <none>
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] server lang: <none>
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] kex follows: False
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] Compression: none
2026-02-15T19:26:11.096 [DEBUG] [Thread-209872] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:26:11.153 [DEBUG] [Thread-209872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:26:11.153 [DEBUG] [Thread-209872] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:26:11.154 [DEBUG] [Thread-209872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:26:11.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:26:11.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:26:11.208 [DEBUG] [Thread-209872] [transport.py] [_log()] userauth is OK
2026-02-15T19:26:11.208 [DEBUG] [Thread-209872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:26:11.209 [DEBUG] [Thread-209872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:26:11.209 [DEBUG] [Thread-209872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:26:11.209 [DEBUG] [Thread-209872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:26:11.223 [INFO] [Thread-209872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:26:11.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:26:11.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:26:12.051 [DEBUG] [Thread-209872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:26:12.052 [DEBUG] [Thread-209872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:26:12.100 [DEBUG] [Thread-209872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:26:12.100 [DEBUG] [Thread-209872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:26:12.109 [DEBUG] [Thread-209872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:26:12.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:26:12.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:26:12.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:26:12.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:26:12.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:26:12.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:26:12.144 [DEBUG] [Thread-209872] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:26:20.715 [DEBUG] [Thread-209874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:35.768 [DEBUG] [Thread-209875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:38.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:38.625 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:26:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:26:42.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:26:42.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:26:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 26, 24), 15.57, 35.34, 0.0, 29.73, 17.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:26:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:26:24
2026-02-15T19:26:44.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:26:44.702 [DEBUG] [Thread-209876] [transport.py] [_log()] starting thread (client mode): 0xa2dc1180
2026-02-15T19:26:44.702 [DEBUG] [Thread-209876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:26:44.723 [DEBUG] [Thread-209876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:26:44.723 [INFO] [Thread-209876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] client lang: <none>
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] server lang: <none>
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] kex follows: False
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] Compression: none
2026-02-15T19:26:44.727 [DEBUG] [Thread-209876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:26:44.745 [DEBUG] [Thread-209876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:26:44.746 [DEBUG] [Thread-209876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:26:44.746 [DEBUG] [Thread-209876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:26:44.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:26:44.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:26:44.748 [DEBUG] [Thread-209876] [transport.py] [_log()] userauth is OK
2026-02-15T19:26:44.748 [DEBUG] [Thread-209876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:26:44.748 [DEBUG] [Thread-209876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:26:44.748 [DEBUG] [Thread-209876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:26:44.748 [DEBUG] [Thread-209876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:26:44.765 [INFO] [Thread-209876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:26:44.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:26:45.431 [DEBUG] [Thread-209876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:26:45.431 [DEBUG] [Thread-209876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:26:45.431 [DEBUG] [Thread-209876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:26:45.472 [DEBUG] [Thread-209876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:26:45.472 [DEBUG] [Thread-209876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:26:45.474 [DEBUG] [Thread-209876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:26:45.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:26:45.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:26:45.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:26:45.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:26:45.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:26:45.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:26:45.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:26:45.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.726482 -999.00  +17.90  24.48     40   +4.40 1 1 1 1 1   877    0 11.32 -94.83 ----- 24.6 24.5 150.4 31.6 18.8 -26.5 18.8 -25.6 18.8 -24.6 19.1 -26.1
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.726482
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:26:45.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:26:24', tmtdew=15.57, humidity=35.34, cloud=0.0, wind=29.73, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:26:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:26:45.499 [DEBUG] [Thread-209876] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:26:45.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:26:45.582 [DEBUG] [Thread-209879] [transport.py] [_log()] starting thread (client mode): 0xa2dc24a0
2026-02-15T19:26:45.582 [DEBUG] [Thread-209879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:26:45.596 [DEBUG] [Thread-209879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:26:45.597 [INFO] [Thread-209879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] client lang: <none>
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] server lang: <none>
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] kex follows: False
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] Compression: none
2026-02-15T19:26:45.604 [DEBUG] [Thread-209879] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:26:45.659 [DEBUG] [Thread-209879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:26:45.659 [DEBUG] [Thread-209879] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:26:45.659 [DEBUG] [Thread-209879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:26:45.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:26:45.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:26:45.716 [DEBUG] [Thread-209879] [transport.py] [_log()] userauth is OK
2026-02-15T19:26:45.716 [DEBUG] [Thread-209879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:26:45.716 [DEBUG] [Thread-209879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:26:45.716 [DEBUG] [Thread-209879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:26:45.716 [DEBUG] [Thread-209879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:26:45.730 [INFO] [Thread-209879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:26:45.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:26:45.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:26:46.590 [DEBUG] [Thread-209879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:26:46.593 [DEBUG] [Thread-209879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:26:46.638 [DEBUG] [Thread-209879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:26:46.639 [DEBUG] [Thread-209879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:26:46.649 [DEBUG] [Thread-209879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:26:46.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:26:46.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:26:46.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:26:46.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:26:46.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:26:46.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:26:46.685 [DEBUG] [Thread-209879] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:26:50.808 [DEBUG] [Thread-209881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:05.355 [DEBUG] [Thread-209882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:05.863 [DEBUG] [Thread-209883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:16.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:27:16.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:27:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:27:18.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 26, 59), 15.51, 35.37, 0.0, 28.0, 17.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:27:18.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:26:59
2026-02-15T19:27:18.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:27:19.128 [DEBUG] [Thread-209884] [transport.py] [_log()] starting thread (client mode): 0xa2d12380
2026-02-15T19:27:19.128 [DEBUG] [Thread-209884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:27:19.149 [DEBUG] [Thread-209884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:27:19.149 [INFO] [Thread-209884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] client lang: <none>
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] server lang: <none>
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] kex follows: False
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:27:19.151 [DEBUG] [Thread-209884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:27:19.152 [DEBUG] [Thread-209884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:27:19.152 [DEBUG] [Thread-209884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:27:19.152 [DEBUG] [Thread-209884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:27:19.152 [DEBUG] [Thread-209884] [transport.py] [_log()] Compression: none
2026-02-15T19:27:19.152 [DEBUG] [Thread-209884] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:27:19.172 [DEBUG] [Thread-209884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:27:19.172 [DEBUG] [Thread-209884] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:27:19.173 [DEBUG] [Thread-209884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:27:19.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:27:19.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:27:19.176 [DEBUG] [Thread-209884] [transport.py] [_log()] userauth is OK
2026-02-15T19:27:19.176 [DEBUG] [Thread-209884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:27:19.176 [DEBUG] [Thread-209884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:27:19.176 [DEBUG] [Thread-209884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:27:19.177 [DEBUG] [Thread-209884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:27:19.201 [INFO] [Thread-209884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:27:19.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:27:19.840 [DEBUG] [Thread-209884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:27:19.840 [DEBUG] [Thread-209884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:27:19.840 [DEBUG] [Thread-209884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:27:19.881 [DEBUG] [Thread-209884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:27:19.881 [DEBUG] [Thread-209884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:27:19.884 [DEBUG] [Thread-209884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:27:19.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:27:19.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:27:19.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:27:19.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:27:19.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:27:19.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:27:19.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:27:19.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:27:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:27:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.726830 -999.00  +17.80  18.55     40   +4.40 1 1 1 1 1   875    0 11.16 -96.61 ----- 25.0 18.6 150.0 24.2 18.8 -26.5 18.8 -25.5 18.8 -24.6 19.0 -25.8
2026-02-15T19:27:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:27:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:27:19.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.726830
2026-02-15T19:27:19.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:27:19.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:27:19.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:27:19.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:27:19.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:27:19.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:26:59', tmtdew=15.51, humidity=35.37, cloud=0.0, wind=28.0, temperature=17.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:26:38.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:27:19.910 [DEBUG] [Thread-209884] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:27:19.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:27:20.006 [DEBUG] [Thread-209887] [transport.py] [_log()] starting thread (client mode): 0xa2d103d0
2026-02-15T19:27:20.006 [DEBUG] [Thread-209887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:27:20.020 [DEBUG] [Thread-209887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:27:20.020 [INFO] [Thread-209887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:27:20.028 [DEBUG] [Thread-209887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] client lang: <none>
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] server lang: <none>
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] kex follows: False
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] Compression: none
2026-02-15T19:27:20.029 [DEBUG] [Thread-209887] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:27:20.085 [DEBUG] [Thread-209887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:27:20.085 [DEBUG] [Thread-209887] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:27:20.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:27:20.086 [DEBUG] [Thread-209887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:27:20.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:27:20.141 [DEBUG] [Thread-209887] [transport.py] [_log()] userauth is OK
2026-02-15T19:27:20.141 [DEBUG] [Thread-209887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:27:20.142 [DEBUG] [Thread-209887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:27:20.142 [DEBUG] [Thread-209887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:27:20.142 [DEBUG] [Thread-209887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:27:20.167 [INFO] [Thread-209887] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:27:20.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:27:20.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:27:20.900 [DEBUG] [Thread-209889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:20.995 [DEBUG] [Thread-209887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:27:20.995 [DEBUG] [Thread-209887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:27:21.045 [DEBUG] [Thread-209887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:27:21.045 [DEBUG] [Thread-209887] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:27:21.054 [DEBUG] [Thread-209887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:27:21.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:27:21.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:27:21.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:27:21.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:27:21.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:27:21.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:27:21.091 [DEBUG] [Thread-209887] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:27:35.958 [DEBUG] [Thread-209890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:42.970 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:42.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:50.995 [DEBUG] [Thread-209891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:27:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:27:51.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:27:51.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:27:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 27, 35), 15.78, 34.81, 0.0, 32.5, 18.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:27:53.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:27:35
2026-02-15T19:27:53.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:27:53.938 [DEBUG] [Thread-209892] [transport.py] [_log()] starting thread (client mode): 0xa2d3e290
2026-02-15T19:27:53.938 [DEBUG] [Thread-209892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:27:53.961 [DEBUG] [Thread-209892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:27:53.961 [INFO] [Thread-209892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] client lang: <none>
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] server lang: <none>
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] kex follows: False
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] Compression: none
2026-02-15T19:27:53.965 [DEBUG] [Thread-209892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:27:53.981 [DEBUG] [Thread-209892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:27:53.982 [DEBUG] [Thread-209892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:27:53.982 [DEBUG] [Thread-209892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:27:53.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:27:53.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:27:53.984 [DEBUG] [Thread-209892] [transport.py] [_log()] userauth is OK
2026-02-15T19:27:53.984 [DEBUG] [Thread-209892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:27:53.984 [DEBUG] [Thread-209892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:27:53.984 [DEBUG] [Thread-209892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:27:53.985 [DEBUG] [Thread-209892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:27:54.019 [INFO] [Thread-209892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:27:54.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:27:54.641 [DEBUG] [Thread-209892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:27:54.642 [DEBUG] [Thread-209892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:27:54.642 [DEBUG] [Thread-209892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:27:54.682 [DEBUG] [Thread-209892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:27:54.683 [DEBUG] [Thread-209892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:27:54.685 [DEBUG] [Thread-209892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:27:54.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:27:54.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:27:54.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:27:54.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:27:54.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:27:54.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:27:54.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:27:54.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:27:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:27:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.727177 -999.00  +17.80  23.51     40   +4.30 1 1 1 1 1   874    0 10.81 -105.03 ----- 19.2 23.5 154.0 27.6 18.7 -26.5 18.7 -25.3 18.7 -24.6 19.0 -25.9
2026-02-15T19:27:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:27:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:27:54.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.727177
2026-02-15T19:27:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:27:54.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:27:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:27:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:27:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:27:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:27:35', tmtdew=15.78, humidity=34.81, cloud=0.0, wind=32.5, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:27:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:27:54.713 [DEBUG] [Thread-209892] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:27:54.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:27:54.807 [DEBUG] [Thread-209895] [transport.py] [_log()] starting thread (client mode): 0xa2d3cb50
2026-02-15T19:27:54.807 [DEBUG] [Thread-209895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:27:54.821 [DEBUG] [Thread-209895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:27:54.821 [INFO] [Thread-209895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:27:54.838 [DEBUG] [Thread-209895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:27:54.838 [DEBUG] [Thread-209895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:27:54.838 [DEBUG] [Thread-209895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:27:54.838 [DEBUG] [Thread-209895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:54.838 [DEBUG] [Thread-209895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:27:54.838 [DEBUG] [Thread-209895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] client lang: <none>
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] server lang: <none>
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] kex follows: False
2026-02-15T19:27:54.839 [DEBUG] [Thread-209895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:27:54.840 [DEBUG] [Thread-209895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:27:54.840 [DEBUG] [Thread-209895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:27:54.840 [DEBUG] [Thread-209895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:27:54.840 [DEBUG] [Thread-209895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:27:54.840 [DEBUG] [Thread-209895] [transport.py] [_log()] Compression: none
2026-02-15T19:27:54.840 [DEBUG] [Thread-209895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:27:54.888 [DEBUG] [Thread-209895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:27:54.888 [DEBUG] [Thread-209895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:27:54.889 [DEBUG] [Thread-209895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:27:54.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:27:54.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:27:54.945 [DEBUG] [Thread-209895] [transport.py] [_log()] userauth is OK
2026-02-15T19:27:54.945 [DEBUG] [Thread-209895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:27:54.946 [DEBUG] [Thread-209895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:27:54.946 [DEBUG] [Thread-209895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:27:54.946 [DEBUG] [Thread-209895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:27:54.966 [INFO] [Thread-209895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:27:54.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:27:54.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:27:55.769 [DEBUG] [Thread-209895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:27:55.769 [DEBUG] [Thread-209895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:27:55.817 [DEBUG] [Thread-209895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:27:55.817 [DEBUG] [Thread-209895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:27:55.825 [DEBUG] [Thread-209895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:27:55.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:27:55.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:27:55.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:27:55.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:27:55.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:27:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:27:55.861 [DEBUG] [Thread-209895] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:28:05.423 [DEBUG] [Thread-209897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:28:06.032 [DEBUG] [Thread-209898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:28:21.083 [DEBUG] [Thread-209899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:28:25.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:28:25.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:28:25.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:28:28.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 28, 11), 15.49, 35.42, 0.0, 33.86, 17.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:28:28.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:28:11
2026-02-15T19:28:28.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:28:28.961 [DEBUG] [Thread-209900] [transport.py] [_log()] starting thread (client mode): 0xa575b610
2026-02-15T19:28:28.962 [DEBUG] [Thread-209900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:28:28.981 [DEBUG] [Thread-209900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:28:28.981 [INFO] [Thread-209900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] client lang: <none>
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] server lang: <none>
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] kex follows: False
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] Compression: none
2026-02-15T19:28:28.983 [DEBUG] [Thread-209900] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:28:29.000 [DEBUG] [Thread-209900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:28:29.000 [DEBUG] [Thread-209900] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:28:29.001 [DEBUG] [Thread-209900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:28:29.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:28:29.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:28:29.003 [DEBUG] [Thread-209900] [transport.py] [_log()] userauth is OK
2026-02-15T19:28:29.003 [DEBUG] [Thread-209900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:28:29.003 [DEBUG] [Thread-209900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:28:29.003 [DEBUG] [Thread-209900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:28:29.003 [DEBUG] [Thread-209900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:28:29.027 [INFO] [Thread-209900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:28:29.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:28:29.657 [DEBUG] [Thread-209900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:28:29.658 [DEBUG] [Thread-209900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:28:29.658 [DEBUG] [Thread-209900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:28:29.698 [DEBUG] [Thread-209900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:28:29.699 [DEBUG] [Thread-209900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:28:29.703 [DEBUG] [Thread-209900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:28:29.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:28:29.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:28:29.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:28:29.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:28:29.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:28:29.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:28:29.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:28:29.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:28:29.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:28:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.727524 -999.00  +17.80  22.14     41   +4.30 1 1 1 1 1   873    0 11.32 -97.40 ----- 23.3 22.1 146.4 33.3 18.7 -26.5 18.6 -25.4 18.6 -24.7 18.9 -25.9
2026-02-15T19:28:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:28:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:28:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.727524
2026-02-15T19:28:29.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:28:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:28:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:28:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:28:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:28:29.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:28:11', tmtdew=15.49, humidity=35.42, cloud=0.0, wind=33.86, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:27:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:28:29.732 [DEBUG] [Thread-209900] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:28:29.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:28:36.117 [DEBUG] [Thread-209903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:28:47.861 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:28:47.862 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:28:51.168 [DEBUG] [Thread-209904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:05.489 [DEBUG] [Thread-209905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:06.199 [DEBUG] [Thread-209906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:21.236 [DEBUG] [Thread-209907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:36.276 [DEBUG] [Thread-209908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:51.315 [DEBUG] [Thread-209909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:53.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:29:53.607 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:05.548 [DEBUG] [Thread-209910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:06.353 [DEBUG] [Thread-209911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:21.393 [DEBUG] [Thread-209912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:36.431 [DEBUG] [Thread-209913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:42.616 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T19:30:51.466 [DEBUG] [Thread-209914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:58.050 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:30:58.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:31:05.627 [DEBUG] [Thread-209915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:31:06.499 [DEBUG] [Thread-209916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:31:12.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:31:12.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:31:12.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:31:15.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 30, 32), 15.35, 35.62, 0.0, 32.2, 17.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:31:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:30:32
2026-02-15T19:31:15.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:31:15.678 [DEBUG] [Thread-209917] [transport.py] [_log()] starting thread (client mode): 0xa57583a0
2026-02-15T19:31:15.678 [DEBUG] [Thread-209917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:31:15.698 [DEBUG] [Thread-209917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:31:15.698 [INFO] [Thread-209917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:31:15.702 [DEBUG] [Thread-209917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:31:15.702 [DEBUG] [Thread-209917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:31:15.702 [DEBUG] [Thread-209917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:31:15.702 [DEBUG] [Thread-209917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:15.702 [DEBUG] [Thread-209917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:15.702 [DEBUG] [Thread-209917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] client lang: <none>
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] server lang: <none>
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] kex follows: False
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] Compression: none
2026-02-15T19:31:15.703 [DEBUG] [Thread-209917] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:31:15.719 [DEBUG] [Thread-209917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:31:15.720 [DEBUG] [Thread-209917] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:31:15.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:31:15.721 [DEBUG] [Thread-209917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:31:15.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:31:15.722 [DEBUG] [Thread-209917] [transport.py] [_log()] userauth is OK
2026-02-15T19:31:15.723 [DEBUG] [Thread-209917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:31:15.723 [DEBUG] [Thread-209917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:31:15.723 [DEBUG] [Thread-209917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:31:15.723 [DEBUG] [Thread-209917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:31:15.744 [INFO] [Thread-209917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:31:15.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:31:16.355 [DEBUG] [Thread-209917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:31:16.356 [DEBUG] [Thread-209917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:31:16.356 [DEBUG] [Thread-209917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:31:16.397 [DEBUG] [Thread-209917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:31:16.397 [DEBUG] [Thread-209917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:31:16.401 [DEBUG] [Thread-209917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:31:16.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:31:16.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:31:16.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:31:16.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:31:16.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:31:16.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:31:16.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:31:16.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:31:16.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:31:16.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.729607 -999.00  +17.70  29.42     41   +4.40 1 1 1 1 1   861    0 11.67 -81.74 ----- 29.4 29.4 157.5 36.1 18.5 -26.3 18.4 -25.4 18.3 -24.4 18.6 -25.8
2026-02-15T19:31:16.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:31:16.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:31:16.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.729607
2026-02-15T19:31:16.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:31:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:31:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:31:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:31:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:31:16.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:30:32', tmtdew=15.35, humidity=35.62, cloud=0.0, wind=32.2, temperature=17.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:30:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:31:16.426 [DEBUG] [Thread-209917] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:31:16.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:31:16.520 [DEBUG] [Thread-209920] [transport.py] [_log()] starting thread (client mode): 0xa575bbb0
2026-02-15T19:31:16.520 [DEBUG] [Thread-209920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:31:16.536 [DEBUG] [Thread-209920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:31:16.536 [INFO] [Thread-209920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:31:16.543 [DEBUG] [Thread-209920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:31:16.543 [DEBUG] [Thread-209920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] client lang: <none>
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] server lang: <none>
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] kex follows: False
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] Compression: none
2026-02-15T19:31:16.544 [DEBUG] [Thread-209920] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:31:16.601 [DEBUG] [Thread-209920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:31:16.602 [DEBUG] [Thread-209920] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:31:16.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:31:16.603 [DEBUG] [Thread-209920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:31:16.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:31:16.658 [DEBUG] [Thread-209920] [transport.py] [_log()] userauth is OK
2026-02-15T19:31:16.658 [DEBUG] [Thread-209920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:31:16.658 [DEBUG] [Thread-209920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:31:16.659 [DEBUG] [Thread-209920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:31:16.659 [DEBUG] [Thread-209920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:31:16.677 [INFO] [Thread-209920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:31:16.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:31:16.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:31:17.493 [DEBUG] [Thread-209920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:31:17.494 [DEBUG] [Thread-209920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:31:17.541 [DEBUG] [Thread-209920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:31:17.542 [DEBUG] [Thread-209920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:31:17.551 [DEBUG] [Thread-209920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:31:17.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:31:17.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:31:17.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:31:17.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:31:17.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:31:17.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:31:17.590 [DEBUG] [Thread-209920] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:31:21.534 [DEBUG] [Thread-209922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:31:36.588 [DEBUG] [Thread-209923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:31:47.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:31:47.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:31:47.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:31:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 31, 7), 15.34, 35.64, 0.0, 31.21, 17.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:31:49.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:31:07
2026-02-15T19:31:50.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:31:50.480 [DEBUG] [Thread-209924] [transport.py] [_log()] starting thread (client mode): 0xa2d3fb20
2026-02-15T19:31:50.481 [DEBUG] [Thread-209924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:31:50.501 [DEBUG] [Thread-209924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:31:50.501 [INFO] [Thread-209924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:31:50.504 [DEBUG] [Thread-209924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:31:50.504 [DEBUG] [Thread-209924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:31:50.504 [DEBUG] [Thread-209924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:31:50.504 [DEBUG] [Thread-209924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:50.504 [DEBUG] [Thread-209924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:50.504 [DEBUG] [Thread-209924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] client lang: <none>
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] server lang: <none>
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] kex follows: False
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] Compression: none
2026-02-15T19:31:50.505 [DEBUG] [Thread-209924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:31:50.527 [DEBUG] [Thread-209924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:31:50.528 [DEBUG] [Thread-209924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:31:50.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:31:50.529 [DEBUG] [Thread-209924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:31:50.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:31:50.531 [DEBUG] [Thread-209924] [transport.py] [_log()] userauth is OK
2026-02-15T19:31:50.531 [DEBUG] [Thread-209924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:31:50.532 [DEBUG] [Thread-209924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:31:50.532 [DEBUG] [Thread-209924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:31:50.532 [DEBUG] [Thread-209924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:31:50.552 [INFO] [Thread-209924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:31:50.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:31:51.176 [DEBUG] [Thread-209924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:31:51.177 [DEBUG] [Thread-209924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:31:51.177 [DEBUG] [Thread-209924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:31:51.217 [DEBUG] [Thread-209924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:31:51.218 [DEBUG] [Thread-209924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:31:51.221 [DEBUG] [Thread-209924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:31:51.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:31:51.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:31:51.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:31:51.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:31:51.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:31:51.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:31:51.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:31:51.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.729955 -999.00  +17.70  20.30     41   +4.40 1 1 1 1 1   858    0 11.59 -80.20 ----- 18.2 20.3 141.8 24.7 18.5 -26.2 18.4 -25.0 18.2 -24.2 18.6 -25.5
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.729955
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:31:51.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:31:07', tmtdew=15.34, humidity=35.64, cloud=0.0, wind=31.21, temperature=17.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:31:08.112', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:31:51.247 [DEBUG] [Thread-209924] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:31:51.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:31:51.338 [DEBUG] [Thread-209927] [transport.py] [_log()] starting thread (client mode): 0xa2dc2920
2026-02-15T19:31:51.338 [DEBUG] [Thread-209927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:31:51.352 [DEBUG] [Thread-209927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:31:51.353 [INFO] [Thread-209927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] client lang: <none>
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] server lang: <none>
2026-02-15T19:31:51.360 [DEBUG] [Thread-209927] [transport.py] [_log()] kex follows: False
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] Compression: none
2026-02-15T19:31:51.361 [DEBUG] [Thread-209927] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:31:51.417 [DEBUG] [Thread-209927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:31:51.418 [DEBUG] [Thread-209927] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:31:51.418 [DEBUG] [Thread-209927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:31:51.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:31:51.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:31:51.473 [DEBUG] [Thread-209927] [transport.py] [_log()] userauth is OK
2026-02-15T19:31:51.474 [DEBUG] [Thread-209927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:31:51.474 [DEBUG] [Thread-209927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:31:51.474 [DEBUG] [Thread-209927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:31:51.474 [DEBUG] [Thread-209927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:31:51.499 [INFO] [Thread-209927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:31:51.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:31:51.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:31:51.623 [DEBUG] [Thread-209929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:31:52.361 [DEBUG] [Thread-209927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:31:52.361 [DEBUG] [Thread-209927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:31:52.409 [DEBUG] [Thread-209927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:31:52.409 [DEBUG] [Thread-209927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:31:52.418 [DEBUG] [Thread-209927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:31:52.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:31:52.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:31:52.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:31:52.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:31:52.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:31:52.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:31:52.452 [DEBUG] [Thread-209927] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:32:03.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:03.511 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:05.684 [DEBUG] [Thread-209930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:06.670 [DEBUG] [Thread-209931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:21.707 [DEBUG] [Thread-209932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:32:22.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:32:22.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:32:24.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 31, 44), 15.23, 36.15, 0.0, 27.17, 17.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:32:24.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:31:44
2026-02-15T19:32:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:32:25.261 [DEBUG] [Thread-209933] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca90
2026-02-15T19:32:25.261 [DEBUG] [Thread-209933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:32:25.279 [DEBUG] [Thread-209933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:32:25.279 [INFO] [Thread-209933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] client lang: <none>
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] server lang: <none>
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] kex follows: False
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:32:25.280 [DEBUG] [Thread-209933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:32:25.281 [DEBUG] [Thread-209933] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:32:25.281 [DEBUG] [Thread-209933] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:32:25.281 [DEBUG] [Thread-209933] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:32:25.281 [DEBUG] [Thread-209933] [transport.py] [_log()] Compression: none
2026-02-15T19:32:25.281 [DEBUG] [Thread-209933] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:32:25.301 [DEBUG] [Thread-209933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:32:25.301 [DEBUG] [Thread-209933] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:32:25.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:32:25.302 [DEBUG] [Thread-209933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:32:25.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:32:25.304 [DEBUG] [Thread-209933] [transport.py] [_log()] userauth is OK
2026-02-15T19:32:25.304 [DEBUG] [Thread-209933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:32:25.305 [DEBUG] [Thread-209933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:32:25.305 [DEBUG] [Thread-209933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:32:25.305 [DEBUG] [Thread-209933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:32:25.329 [INFO] [Thread-209933] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:32:25.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:32:25.897 [DEBUG] [Thread-209933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:32:25.898 [DEBUG] [Thread-209933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:32:25.898 [DEBUG] [Thread-209933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:32:25.938 [DEBUG] [Thread-209933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:32:25.938 [DEBUG] [Thread-209933] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:32:25.941 [DEBUG] [Thread-209933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:32:25.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:32:25.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:32:25.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:32:25.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:32:25.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:32:25.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:32:25.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:32:25.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:32:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:32:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.730302 -999.00  +17.70  21.73     41   +4.40 1 1 1 1 1   855    0 11.59 -77.50 ----- 23.7 21.7 161.5 31.4 18.4 -26.3 18.4 -25.2 18.2 -24.2 18.6 -25.5
2026-02-15T19:32:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:32:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:32:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.730302
2026-02-15T19:32:25.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:32:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:32:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:32:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:32:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:32:25.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:31:44', tmtdew=15.23, humidity=36.15, cloud=0.0, wind=27.17, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:31:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:32:25.970 [DEBUG] [Thread-209933] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:32:26.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:32:26.067 [DEBUG] [Thread-209936] [transport.py] [_log()] starting thread (client mode): 0xa2d3e320
2026-02-15T19:32:26.067 [DEBUG] [Thread-209936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:32:26.081 [DEBUG] [Thread-209936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:32:26.081 [INFO] [Thread-209936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:32:26.089 [DEBUG] [Thread-209936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:32:26.089 [DEBUG] [Thread-209936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:32:26.089 [DEBUG] [Thread-209936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:32:26.089 [DEBUG] [Thread-209936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:32:26.089 [DEBUG] [Thread-209936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:32:26.089 [DEBUG] [Thread-209936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] client lang: <none>
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] server lang: <none>
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] kex follows: False
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:32:26.090 [DEBUG] [Thread-209936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:32:26.091 [DEBUG] [Thread-209936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:32:26.091 [DEBUG] [Thread-209936] [transport.py] [_log()] Compression: none
2026-02-15T19:32:26.091 [DEBUG] [Thread-209936] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:32:26.149 [DEBUG] [Thread-209936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:32:26.150 [DEBUG] [Thread-209936] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:32:26.150 [DEBUG] [Thread-209936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:32:26.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:32:26.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:32:26.205 [DEBUG] [Thread-209936] [transport.py] [_log()] userauth is OK
2026-02-15T19:32:26.206 [DEBUG] [Thread-209936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:32:26.206 [DEBUG] [Thread-209936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:32:26.206 [DEBUG] [Thread-209936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:32:26.206 [DEBUG] [Thread-209936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:32:26.225 [INFO] [Thread-209936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:32:26.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:32:26.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:32:27.071 [DEBUG] [Thread-209936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:32:27.071 [DEBUG] [Thread-209936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:32:27.119 [DEBUG] [Thread-209936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:32:27.119 [DEBUG] [Thread-209936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:32:27.127 [DEBUG] [Thread-209936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:32:27.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:32:27.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:32:27.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:32:27.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:32:27.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:32:27.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:32:27.159 [DEBUG] [Thread-209936] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:32:36.742 [DEBUG] [Thread-209938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:51.803 [DEBUG] [Thread-209939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:32:57.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:32:57.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:32:57.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:32:59.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 32, 20), 15.22, 36.2, 0.0, 29.92, 17.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:32:59.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:32:20
2026-02-15T19:32:59.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:32:59.824 [DEBUG] [Thread-209940] [transport.py] [_log()] starting thread (client mode): 0xa2d13970
2026-02-15T19:32:59.824 [DEBUG] [Thread-209940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:32:59.845 [DEBUG] [Thread-209940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:32:59.846 [INFO] [Thread-209940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:32:59.849 [DEBUG] [Thread-209940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:32:59.849 [DEBUG] [Thread-209940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:32:59.849 [DEBUG] [Thread-209940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] client lang: <none>
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] server lang: <none>
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] kex follows: False
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] Compression: none
2026-02-15T19:32:59.850 [DEBUG] [Thread-209940] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:32:59.867 [DEBUG] [Thread-209940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:32:59.868 [DEBUG] [Thread-209940] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:32:59.868 [DEBUG] [Thread-209940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:32:59.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:32:59.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:32:59.871 [DEBUG] [Thread-209940] [transport.py] [_log()] userauth is OK
2026-02-15T19:32:59.871 [DEBUG] [Thread-209940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:32:59.871 [DEBUG] [Thread-209940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:32:59.871 [DEBUG] [Thread-209940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:32:59.871 [DEBUG] [Thread-209940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:32:59.894 [INFO] [Thread-209940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:32:59.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:33:00.488 [DEBUG] [Thread-209940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:33:00.489 [DEBUG] [Thread-209940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:33:00.489 [DEBUG] [Thread-209940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:33:00.530 [DEBUG] [Thread-209940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:33:00.530 [DEBUG] [Thread-209940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:33:00.534 [DEBUG] [Thread-209940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:33:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:33:00.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:33:00.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:33:00.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:33:00.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:33:00.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:33:00.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:33:00.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:33:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:33:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.730650 -999.00  +17.70  20.76     41   +4.40 1 1 1 1 1   852    0 11.52 -83.64 ----- 16.0 20.8 152.2 34.3 18.4 -26.3 18.4 -25.0 18.2 -24.2 18.5 -25.5
2026-02-15T19:33:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:33:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:33:00.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.730650
2026-02-15T19:33:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:33:00.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:33:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:33:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:33:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:33:00.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:32:20', tmtdew=15.22, humidity=36.2, cloud=0.0, wind=29.92, temperature=17.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:32:08.160', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:33:00.562 [DEBUG] [Thread-209940] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:33:00.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:33:00.664 [DEBUG] [Thread-209943] [transport.py] [_log()] starting thread (client mode): 0xa2d3d0f0
2026-02-15T19:33:00.664 [DEBUG] [Thread-209943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:33:00.678 [DEBUG] [Thread-209943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:33:00.678 [INFO] [Thread-209943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:33:00.685 [DEBUG] [Thread-209943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] client lang: <none>
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] server lang: <none>
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] kex follows: False
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:33:00.686 [DEBUG] [Thread-209943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:33:00.687 [DEBUG] [Thread-209943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:33:00.687 [DEBUG] [Thread-209943] [transport.py] [_log()] Compression: none
2026-02-15T19:33:00.687 [DEBUG] [Thread-209943] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:33:00.746 [DEBUG] [Thread-209943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:33:00.746 [DEBUG] [Thread-209943] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:33:00.747 [DEBUG] [Thread-209943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:33:00.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:33:00.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:33:00.801 [DEBUG] [Thread-209943] [transport.py] [_log()] userauth is OK
2026-02-15T19:33:00.802 [DEBUG] [Thread-209943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:33:00.802 [DEBUG] [Thread-209943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:33:00.802 [DEBUG] [Thread-209943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:33:00.802 [DEBUG] [Thread-209943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:33:00.826 [INFO] [Thread-209943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:33:00.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:33:00.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:33:01.636 [DEBUG] [Thread-209943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:33:01.636 [DEBUG] [Thread-209943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:33:01.685 [DEBUG] [Thread-209943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:33:01.686 [DEBUG] [Thread-209943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:33:01.697 [DEBUG] [Thread-209943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:33:01.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:33:01.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:33:01.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:33:01.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:33:01.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:33:01.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:33:01.733 [DEBUG] [Thread-209943] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:33:05.742 [DEBUG] [Thread-209945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:33:06.839 [DEBUG] [Thread-209946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:33:11.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:33:11.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:33:21.890 [DEBUG] [Thread-209947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:33:31.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:33:31.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:33:31.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:33:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 32, 55), 15.21, 36.22, 0.0, 28.32, 17.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:33:34.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:32:55
2026-02-15T19:33:34.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:33:34.879 [DEBUG] [Thread-209948] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-15T19:33:34.879 [DEBUG] [Thread-209948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:33:34.900 [DEBUG] [Thread-209948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:33:34.900 [INFO] [Thread-209948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:33:34.904 [DEBUG] [Thread-209948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] client lang: <none>
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] server lang: <none>
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] kex follows: False
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] Compression: none
2026-02-15T19:33:34.905 [DEBUG] [Thread-209948] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:33:34.924 [DEBUG] [Thread-209948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:33:34.924 [DEBUG] [Thread-209948] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:33:34.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:33:34.925 [DEBUG] [Thread-209948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:33:34.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:33:34.927 [DEBUG] [Thread-209948] [transport.py] [_log()] userauth is OK
2026-02-15T19:33:34.928 [DEBUG] [Thread-209948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:33:34.928 [DEBUG] [Thread-209948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:33:34.928 [DEBUG] [Thread-209948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:33:34.928 [DEBUG] [Thread-209948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:33:34.952 [INFO] [Thread-209948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:33:34.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:33:35.566 [DEBUG] [Thread-209948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:33:35.566 [DEBUG] [Thread-209948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:33:35.566 [DEBUG] [Thread-209948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:33:35.607 [DEBUG] [Thread-209948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:33:35.608 [DEBUG] [Thread-209948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:33:35.611 [DEBUG] [Thread-209948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:33:35.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:33:35.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:33:35.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:33:35.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:33:35.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:33:35.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:33:35.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:33:35.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:33:35.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:33:35.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.730996 -999.00  +17.60  29.13     41   +4.40 1 1 1 1 1   848    0 11.45 -82.08 ----- 24.7 29.1 155.6 35.2 18.4 -26.2 18.3 -25.1 18.2 -24.2 18.5 -25.4
2026-02-15T19:33:35.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:33:35.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:33:35.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.730996
2026-02-15T19:33:35.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:33:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:33:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:33:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:33:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:33:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:32:55', tmtdew=15.21, humidity=36.22, cloud=0.0, wind=28.32, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:32:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:33:35.638 [DEBUG] [Thread-209948] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:33:35.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:33:35.735 [DEBUG] [Thread-209951] [transport.py] [_log()] starting thread (client mode): 0xa5740ac0
2026-02-15T19:33:35.735 [DEBUG] [Thread-209951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:33:35.751 [DEBUG] [Thread-209951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:33:35.751 [INFO] [Thread-209951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:33:35.759 [DEBUG] [Thread-209951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:33:35.759 [DEBUG] [Thread-209951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] client lang: <none>
2026-02-15T19:33:35.760 [DEBUG] [Thread-209951] [transport.py] [_log()] server lang: <none>
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] kex follows: False
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:33:35.761 [DEBUG] [Thread-209951] [transport.py] [_log()] Compression: none
2026-02-15T19:33:35.762 [DEBUG] [Thread-209951] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:33:35.819 [DEBUG] [Thread-209951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:33:35.820 [DEBUG] [Thread-209951] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:33:35.820 [DEBUG] [Thread-209951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:33:35.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:33:35.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:33:35.878 [DEBUG] [Thread-209951] [transport.py] [_log()] userauth is OK
2026-02-15T19:33:35.879 [DEBUG] [Thread-209951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:33:35.879 [DEBUG] [Thread-209951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:33:35.879 [DEBUG] [Thread-209951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:33:35.879 [DEBUG] [Thread-209951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:33:35.897 [INFO] [Thread-209951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:33:35.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:33:35.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:33:36.731 [DEBUG] [Thread-209951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:33:36.731 [DEBUG] [Thread-209951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:33:36.779 [DEBUG] [Thread-209951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:33:36.779 [DEBUG] [Thread-209951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:33:36.789 [DEBUG] [Thread-209951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:33:36.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:33:36.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:33:36.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:33:36.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:33:36.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:33:36.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:33:36.826 [DEBUG] [Thread-209951] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:33:36.923 [DEBUG] [Thread-209953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:33:51.965 [DEBUG] [Thread-209954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:05.799 [DEBUG] [Thread-209955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:34:06.849 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:34:06.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:34:06.998 [DEBUG] [Thread-209956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 33, 31), 15.21, 36.2, 0.0, 31.51, 17.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:34:09.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:33:31
2026-02-15T19:34:09.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:34:10.076 [DEBUG] [Thread-209957] [transport.py] [_log()] starting thread (client mode): 0xa2dc3cd0
2026-02-15T19:34:10.076 [DEBUG] [Thread-209957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:34:10.096 [DEBUG] [Thread-209957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:34:10.096 [INFO] [Thread-209957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:34:10.098 [DEBUG] [Thread-209957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] client lang: <none>
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] server lang: <none>
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] kex follows: False
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] Compression: none
2026-02-15T19:34:10.099 [DEBUG] [Thread-209957] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:34:10.112 [DEBUG] [Thread-209957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:34:10.112 [DEBUG] [Thread-209957] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:34:10.112 [DEBUG] [Thread-209957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:34:10.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:34:10.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:34:10.114 [DEBUG] [Thread-209957] [transport.py] [_log()] userauth is OK
2026-02-15T19:34:10.114 [DEBUG] [Thread-209957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:34:10.114 [DEBUG] [Thread-209957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:34:10.114 [DEBUG] [Thread-209957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:34:10.114 [DEBUG] [Thread-209957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:34:10.127 [INFO] [Thread-209957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:34:10.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:34:10.966 [DEBUG] [Thread-209957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:34:10.966 [DEBUG] [Thread-209957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:34:10.966 [DEBUG] [Thread-209957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:34:11.006 [DEBUG] [Thread-209957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:34:11.007 [DEBUG] [Thread-209957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:34:11.010 [DEBUG] [Thread-209957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:34:11.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:34:11.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:34:11.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:34:11.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:34:11.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:34:11.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:34:11.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:34:11.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:34:11.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:34:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.731691 -999.00  +17.60  23.36     41   +4.40 1 1 1 1 1   840    0 11.35 -87.08 ----- 28.9 23.4 140.0 31.8 18.4 -26.2 18.3 -24.8 18.1 -24.0 18.4 -25.5
2026-02-15T19:34:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:34:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:34:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.731691
2026-02-15T19:34:11.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:34:11.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:34:11.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:34:11.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:34:11.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:34:11.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:33:31', tmtdew=15.21, humidity=36.2, cloud=0.0, wind=31.51, temperature=17.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:33:38.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:34:11.034 [DEBUG] [Thread-209957] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:34:11.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:34:11.129 [DEBUG] [Thread-209960] [transport.py] [_log()] starting thread (client mode): 0xa2d3d1e0
2026-02-15T19:34:11.129 [DEBUG] [Thread-209960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:34:11.144 [DEBUG] [Thread-209960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:34:11.144 [INFO] [Thread-209960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] client lang: <none>
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] server lang: <none>
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] kex follows: False
2026-02-15T19:34:11.152 [DEBUG] [Thread-209960] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:34:11.153 [DEBUG] [Thread-209960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:34:11.153 [DEBUG] [Thread-209960] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:34:11.153 [DEBUG] [Thread-209960] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:34:11.153 [DEBUG] [Thread-209960] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:34:11.153 [DEBUG] [Thread-209960] [transport.py] [_log()] Compression: none
2026-02-15T19:34:11.153 [DEBUG] [Thread-209960] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:34:11.210 [DEBUG] [Thread-209960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:34:11.210 [DEBUG] [Thread-209960] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:34:11.211 [DEBUG] [Thread-209960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:34:11.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:34:11.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:34:11.266 [DEBUG] [Thread-209960] [transport.py] [_log()] userauth is OK
2026-02-15T19:34:11.266 [DEBUG] [Thread-209960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:34:11.266 [DEBUG] [Thread-209960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:34:11.266 [DEBUG] [Thread-209960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:34:11.267 [DEBUG] [Thread-209960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:34:11.285 [INFO] [Thread-209960] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:34:11.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:34:11.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:34:12.100 [DEBUG] [Thread-209960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:34:12.101 [DEBUG] [Thread-209960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:34:12.152 [DEBUG] [Thread-209960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:34:12.153 [DEBUG] [Thread-209960] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:34:12.166 [DEBUG] [Thread-209960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:34:12.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:34:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:34:12.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:34:12.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:34:12.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:34:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:34:12.203 [DEBUG] [Thread-209960] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:34:16.416 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:16.417 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:22.035 [DEBUG] [Thread-209962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:37.096 [DEBUG] [Thread-209963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:34:42.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:34:42.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:34:42.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:34:44.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 34, 7), 15.19, 36.27, 0.0, 34.85, 17.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:34:44.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:34:07
2026-02-15T19:34:44.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:34:44.963 [DEBUG] [Thread-209964] [transport.py] [_log()] starting thread (client mode): 0xa2d6e860
2026-02-15T19:34:44.964 [DEBUG] [Thread-209964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:34:44.988 [DEBUG] [Thread-209964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:34:44.988 [INFO] [Thread-209964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:34:44.990 [DEBUG] [Thread-209964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:34:44.990 [DEBUG] [Thread-209964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:34:44.990 [DEBUG] [Thread-209964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:34:44.990 [DEBUG] [Thread-209964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:44.990 [DEBUG] [Thread-209964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] client lang: <none>
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] server lang: <none>
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] kex follows: False
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] Compression: none
2026-02-15T19:34:44.991 [DEBUG] [Thread-209964] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:34:45.001 [DEBUG] [Thread-209964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:34:45.002 [DEBUG] [Thread-209964] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:34:45.002 [DEBUG] [Thread-209964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:34:45.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:34:45.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:34:45.045 [DEBUG] [Thread-209964] [transport.py] [_log()] userauth is OK
2026-02-15T19:34:45.046 [DEBUG] [Thread-209964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:34:45.046 [DEBUG] [Thread-209964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:34:45.046 [DEBUG] [Thread-209964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:34:45.046 [DEBUG] [Thread-209964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:34:45.087 [INFO] [Thread-209964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:34:45.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:34:45.705 [DEBUG] [Thread-209964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:34:45.705 [DEBUG] [Thread-209964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:34:45.705 [DEBUG] [Thread-209964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:34:45.746 [DEBUG] [Thread-209964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:34:45.746 [DEBUG] [Thread-209964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:34:45.750 [DEBUG] [Thread-209964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:34:45.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:34:45.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:34:45.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:34:45.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:34:45.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:34:45.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:34:45.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:34:45.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:34:45.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:34:45.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.732038 -999.00  +17.60  20.30     41   +4.40 1 1 1 1 1   835    0 11.32 -81.40 ----- 28.2 20.3 156.7 32.2 18.3 -26.0 18.3 -24.9 18.1 -24.0 18.4 -25.3
2026-02-15T19:34:45.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:34:45.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:34:45.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.732038
2026-02-15T19:34:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:34:45.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:34:45.778 [DEBUG] [Thread-209964] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:34:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:34:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:34:45.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:34:45.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:34:07', tmtdew=15.19, humidity=36.27, cloud=0.0, wind=34.85, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:34:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:34:45.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:34:45.895 [DEBUG] [Thread-209967] [transport.py] [_log()] starting thread (client mode): 0xa2d7b670
2026-02-15T19:34:45.895 [DEBUG] [Thread-209967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:34:45.911 [DEBUG] [Thread-209967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:34:45.911 [INFO] [Thread-209967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:34:45.918 [DEBUG] [Thread-209967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:34:45.918 [DEBUG] [Thread-209967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] client lang: <none>
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] server lang: <none>
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] kex follows: False
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] Compression: none
2026-02-15T19:34:45.919 [DEBUG] [Thread-209967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:34:45.983 [DEBUG] [Thread-209967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:34:45.984 [DEBUG] [Thread-209967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:34:45.985 [DEBUG] [Thread-209967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:34:45.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:34:45.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:34:46.046 [DEBUG] [Thread-209967] [transport.py] [_log()] userauth is OK
2026-02-15T19:34:46.047 [DEBUG] [Thread-209967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:34:46.047 [DEBUG] [Thread-209967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:34:46.047 [DEBUG] [Thread-209967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:34:46.047 [DEBUG] [Thread-209967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:34:46.066 [INFO] [Thread-209967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:34:46.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:34:46.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:34:46.894 [DEBUG] [Thread-209967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:34:46.895 [DEBUG] [Thread-209967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:34:46.942 [DEBUG] [Thread-209967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:34:46.942 [DEBUG] [Thread-209967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:34:46.952 [DEBUG] [Thread-209967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:34:46.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:34:46.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:34:46.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:34:46.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:34:46.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:34:46.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:34:46.988 [DEBUG] [Thread-209967] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:34:52.134 [DEBUG] [Thread-209969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:05.856 [DEBUG] [Thread-209970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:07.186 [DEBUG] [Thread-209971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:16.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:35:16.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:35:16.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:35:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 34, 42), 15.2, 36.24, 0.0, 37.23, 17.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:35:18.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:34:42
2026-02-15T19:35:19.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:35:19.415 [DEBUG] [Thread-209972] [transport.py] [_log()] starting thread (client mode): 0xa2d138b0
2026-02-15T19:35:19.415 [DEBUG] [Thread-209972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:35:19.436 [DEBUG] [Thread-209972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:35:19.436 [INFO] [Thread-209972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:35:19.439 [DEBUG] [Thread-209972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:35:19.439 [DEBUG] [Thread-209972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:35:19.439 [DEBUG] [Thread-209972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:35:19.439 [DEBUG] [Thread-209972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:19.439 [DEBUG] [Thread-209972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] client lang: <none>
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] server lang: <none>
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] kex follows: False
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:35:19.440 [DEBUG] [Thread-209972] [transport.py] [_log()] Compression: none
2026-02-15T19:35:19.441 [DEBUG] [Thread-209972] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:35:19.459 [DEBUG] [Thread-209972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:35:19.460 [DEBUG] [Thread-209972] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:35:19.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:35:19.462 [DEBUG] [Thread-209972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:35:19.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:35:19.463 [DEBUG] [Thread-209972] [transport.py] [_log()] userauth is OK
2026-02-15T19:35:19.463 [DEBUG] [Thread-209972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:35:19.463 [DEBUG] [Thread-209972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:35:19.463 [DEBUG] [Thread-209972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:35:19.464 [DEBUG] [Thread-209972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:35:19.484 [INFO] [Thread-209972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:35:19.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:35:20.414 [DEBUG] [Thread-209972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:35:20.414 [DEBUG] [Thread-209972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:35:20.415 [DEBUG] [Thread-209972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:35:20.429 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:20.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:20.456 [DEBUG] [Thread-209972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:35:20.456 [DEBUG] [Thread-209972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:35:20.459 [DEBUG] [Thread-209972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:35:20.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:35:20.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:35:20.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:35:20.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:35:20.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:35:20.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:35:20.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.732385 -999.00  +17.60  25.92     41   +4.40 1 1 1 1 1   830    0 11.24 -80.34 ----- 25.1 25.9 148.9 34.5 18.2 -26.0 18.2 -25.0 18.0 -23.9 18.3 -25.3
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.732385
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:35:20.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:34:42', tmtdew=15.2, humidity=36.24, cloud=0.0, wind=37.23, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:34:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:35:20.479 [DEBUG] [Thread-209972] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:35:20.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:35:20.567 [DEBUG] [Thread-209975] [transport.py] [_log()] starting thread (client mode): 0xa2d10c40
2026-02-15T19:35:20.568 [DEBUG] [Thread-209975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:35:20.583 [DEBUG] [Thread-209975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:35:20.583 [INFO] [Thread-209975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:35:20.591 [DEBUG] [Thread-209975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:35:20.591 [DEBUG] [Thread-209975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:35:20.591 [DEBUG] [Thread-209975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:35:20.591 [DEBUG] [Thread-209975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:20.591 [DEBUG] [Thread-209975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] client lang: <none>
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] server lang: <none>
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] kex follows: False
2026-02-15T19:35:20.592 [DEBUG] [Thread-209975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:35:20.593 [DEBUG] [Thread-209975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:35:20.593 [DEBUG] [Thread-209975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:35:20.593 [DEBUG] [Thread-209975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:35:20.593 [DEBUG] [Thread-209975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:35:20.593 [DEBUG] [Thread-209975] [transport.py] [_log()] Compression: none
2026-02-15T19:35:20.593 [DEBUG] [Thread-209975] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:35:20.650 [DEBUG] [Thread-209975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:35:20.651 [DEBUG] [Thread-209975] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:35:20.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:35:20.652 [DEBUG] [Thread-209975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:35:20.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:35:20.706 [DEBUG] [Thread-209975] [transport.py] [_log()] userauth is OK
2026-02-15T19:35:20.706 [DEBUG] [Thread-209975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:35:20.706 [DEBUG] [Thread-209975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:35:20.706 [DEBUG] [Thread-209975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:35:20.706 [DEBUG] [Thread-209975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:35:20.726 [INFO] [Thread-209975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:35:20.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:35:20.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:35:21.562 [DEBUG] [Thread-209975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:35:21.562 [DEBUG] [Thread-209975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:35:21.611 [DEBUG] [Thread-209975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:35:21.611 [DEBUG] [Thread-209975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:35:21.620 [DEBUG] [Thread-209975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:35:21.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:35:21.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:35:21.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:35:21.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:35:21.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:35:21.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:35:21.654 [DEBUG] [Thread-209975] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:35:22.224 [DEBUG] [Thread-209977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:37.279 [DEBUG] [Thread-209978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:51.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:35:51.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:35:51.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:35:52.318 [DEBUG] [Thread-209979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:35:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 35, 18), 15.19, 36.27, 0.0, 32.73, 17.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:35:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:35:18
2026-02-15T19:35:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:35:54.226 [DEBUG] [Thread-209980] [transport.py] [_log()] starting thread (client mode): 0xa2d3ff70
2026-02-15T19:35:54.226 [DEBUG] [Thread-209980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:35:54.246 [DEBUG] [Thread-209980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:35:54.246 [INFO] [Thread-209980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:35:54.250 [DEBUG] [Thread-209980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:35:54.250 [DEBUG] [Thread-209980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:35:54.250 [DEBUG] [Thread-209980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:35:54.250 [DEBUG] [Thread-209980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:54.250 [DEBUG] [Thread-209980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:54.250 [DEBUG] [Thread-209980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] client lang: <none>
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] server lang: <none>
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] kex follows: False
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] Compression: none
2026-02-15T19:35:54.251 [DEBUG] [Thread-209980] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:35:54.269 [DEBUG] [Thread-209980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:35:54.270 [DEBUG] [Thread-209980] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:35:54.270 [DEBUG] [Thread-209980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:35:54.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:35:54.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:35:54.272 [DEBUG] [Thread-209980] [transport.py] [_log()] userauth is OK
2026-02-15T19:35:54.273 [DEBUG] [Thread-209980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:35:54.273 [DEBUG] [Thread-209980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:35:54.273 [DEBUG] [Thread-209980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:35:54.273 [DEBUG] [Thread-209980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:35:54.290 [INFO] [Thread-209980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:35:54.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:35:54.891 [DEBUG] [Thread-209980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:35:54.891 [DEBUG] [Thread-209980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:35:54.891 [DEBUG] [Thread-209980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:35:54.932 [DEBUG] [Thread-209980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:35:54.933 [DEBUG] [Thread-209980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:35:54.936 [DEBUG] [Thread-209980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:35:54.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:35:54.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:35:54.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:35:54.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:35:54.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:35:54.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:35:54.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:35:54.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:35:54.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:35:54.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.732732 -999.00  +17.60  21.72     41   +4.40 1 1 1 1 1   824    0 11.29 -81.15 ----- 19.5 21.7 154.4 30.3 18.2 -26.1 18.2 -24.9 18.0 -24.1 18.3 -25.4
2026-02-15T19:35:54.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:35:54.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:35:54.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.732732
2026-02-15T19:35:54.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:35:54.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:35:54.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:35:54.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:35:54.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:35:54.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:35:18', tmtdew=15.19, humidity=36.27, cloud=0.0, wind=32.73, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:35:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:35:54.963 [DEBUG] [Thread-209980] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:35:55.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:35:55.059 [DEBUG] [Thread-209983] [transport.py] [_log()] starting thread (client mode): 0xa5741fc0
2026-02-15T19:35:55.059 [DEBUG] [Thread-209983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:35:55.076 [DEBUG] [Thread-209983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:35:55.076 [INFO] [Thread-209983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:35:55.084 [DEBUG] [Thread-209983] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:35:55.084 [DEBUG] [Thread-209983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:35:55.084 [DEBUG] [Thread-209983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:35:55.084 [DEBUG] [Thread-209983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:55.084 [DEBUG] [Thread-209983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:35:55.084 [DEBUG] [Thread-209983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] client lang: <none>
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] server lang: <none>
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] kex follows: False
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:35:55.085 [DEBUG] [Thread-209983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:35:55.086 [DEBUG] [Thread-209983] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:35:55.086 [DEBUG] [Thread-209983] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:35:55.086 [DEBUG] [Thread-209983] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:35:55.086 [DEBUG] [Thread-209983] [transport.py] [_log()] Compression: none
2026-02-15T19:35:55.086 [DEBUG] [Thread-209983] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:35:55.143 [DEBUG] [Thread-209983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:35:55.144 [DEBUG] [Thread-209983] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:35:55.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:35:55.146 [DEBUG] [Thread-209983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:35:55.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:35:55.202 [DEBUG] [Thread-209983] [transport.py] [_log()] userauth is OK
2026-02-15T19:35:55.203 [DEBUG] [Thread-209983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:35:55.203 [DEBUG] [Thread-209983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:35:55.203 [DEBUG] [Thread-209983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:35:55.203 [DEBUG] [Thread-209983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:35:55.222 [INFO] [Thread-209983] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:35:55.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:35:55.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:35:56.071 [DEBUG] [Thread-209983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:35:56.071 [DEBUG] [Thread-209983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:35:56.119 [DEBUG] [Thread-209983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:35:56.120 [DEBUG] [Thread-209983] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:35:56.129 [DEBUG] [Thread-209983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:35:56.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:35:56.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:35:56.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:35:56.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:35:56.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:35:56.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:35:56.164 [DEBUG] [Thread-209983] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:36:05.913 [DEBUG] [Thread-209985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:36:07.353 [DEBUG] [Thread-209986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:36:22.412 [DEBUG] [Thread-209987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:36:25.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:36:25.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:36:26.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:36:26.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:36:26.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
2026-02-15T19:36:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 35, 53), 15.24, 36.25, 0.0, 34.86, 17.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:36:28.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:35:53
2026-02-15T19:36:28.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:36:29.151 [DEBUG] [Thread-209988] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-15T19:36:29.152 [DEBUG] [Thread-209988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:36:29.172 [DEBUG] [Thread-209988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:36:29.172 [INFO] [Thread-209988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:36:29.175 [DEBUG] [Thread-209988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] client lang: <none>
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] server lang: <none>
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] kex follows: False
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] Compression: none
2026-02-15T19:36:29.176 [DEBUG] [Thread-209988] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:36:29.196 [DEBUG] [Thread-209988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:36:29.197 [DEBUG] [Thread-209988] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:36:29.198 [DEBUG] [Thread-209988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:36:29.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:36:29.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:36:29.241 [DEBUG] [Thread-209988] [transport.py] [_log()] userauth is OK
2026-02-15T19:36:29.241 [DEBUG] [Thread-209988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:36:29.241 [DEBUG] [Thread-209988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:36:29.241 [DEBUG] [Thread-209988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:36:29.242 [DEBUG] [Thread-209988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:36:29.267 [INFO] [Thread-209988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:36:29.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:36:29.925 [DEBUG] [Thread-209988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:36:29.925 [DEBUG] [Thread-209988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:36:29.925 [DEBUG] [Thread-209988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:36:29.965 [DEBUG] [Thread-209988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:36:29.966 [DEBUG] [Thread-209988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:36:29.969 [DEBUG] [Thread-209988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:36:29.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:36:29.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:36:29.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:36:29.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:36:29.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:36:29.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:36:29.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:36:29.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:36:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:36:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.733079 -999.00  +17.60  32.57     41   +4.40 1 1 2 1 1   818    0 11.45 -80.70 ----- 26.4 32.6 145.0 39.2 18.2 -26.1 18.2 -25.0 18.0 -23.9 18.3 -25.2
2026-02-15T19:36:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:36:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:36:29.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.733079
2026-02-15T19:36:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:36:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:36:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:36:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:36:29.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:36:29.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:35:53', tmtdew=15.24, humidity=36.25, cloud=0.0, wind=34.86, temperature=17.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:35:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:36:29.996 [DEBUG] [Thread-209988] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:36:30.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:36:30.091 [DEBUG] [Thread-209991] [transport.py] [_log()] starting thread (client mode): 0xa2d3c1f0
2026-02-15T19:36:30.092 [DEBUG] [Thread-209991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:36:30.106 [DEBUG] [Thread-209991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:36:30.106 [INFO] [Thread-209991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:36:30.113 [DEBUG] [Thread-209991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:36:30.114 [DEBUG] [Thread-209991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:36:30.114 [DEBUG] [Thread-209991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:36:30.114 [DEBUG] [Thread-209991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:36:30.114 [DEBUG] [Thread-209991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] client lang: <none>
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] server lang: <none>
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] kex follows: False
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] Compression: none
2026-02-15T19:36:30.115 [DEBUG] [Thread-209991] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:36:30.175 [DEBUG] [Thread-209991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:36:30.175 [DEBUG] [Thread-209991] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:36:30.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:36:30.176 [DEBUG] [Thread-209991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:36:30.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:36:30.234 [DEBUG] [Thread-209991] [transport.py] [_log()] userauth is OK
2026-02-15T19:36:30.234 [DEBUG] [Thread-209991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:36:30.234 [DEBUG] [Thread-209991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:36:30.234 [DEBUG] [Thread-209991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:36:30.235 [DEBUG] [Thread-209991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:36:30.253 [INFO] [Thread-209991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:36:30.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:36:30.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:36:31.058 [DEBUG] [Thread-209991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:36:31.058 [DEBUG] [Thread-209991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:36:31.106 [DEBUG] [Thread-209991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:36:31.107 [DEBUG] [Thread-209991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:36:31.117 [DEBUG] [Thread-209991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:36:31.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:36:31.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:36:31.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:36:31.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:36:31.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:36:31.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:36:31.155 [DEBUG] [Thread-209991] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:36:37.449 [DEBUG] [Thread-209993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:36:52.505 [DEBUG] [Thread-209994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:01.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:37:01.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:37:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:37:03.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 36, 30), 15.27, 36.17, 0.0, 33.66, 17.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:37:03.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:36:30
2026-02-15T19:37:03.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:37:03.628 [DEBUG] [Thread-209995] [transport.py] [_log()] starting thread (client mode): 0xa2d7abc0
2026-02-15T19:37:03.629 [DEBUG] [Thread-209995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:37:03.649 [DEBUG] [Thread-209995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:37:03.649 [INFO] [Thread-209995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] client lang: <none>
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] server lang: <none>
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] kex follows: False
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:37:03.653 [DEBUG] [Thread-209995] [transport.py] [_log()] Compression: none
2026-02-15T19:37:03.654 [DEBUG] [Thread-209995] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:37:03.672 [DEBUG] [Thread-209995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:37:03.672 [DEBUG] [Thread-209995] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:37:03.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:37:03.674 [DEBUG] [Thread-209995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:37:03.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:37:03.677 [DEBUG] [Thread-209995] [transport.py] [_log()] userauth is OK
2026-02-15T19:37:03.677 [DEBUG] [Thread-209995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:37:03.677 [DEBUG] [Thread-209995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:37:03.678 [DEBUG] [Thread-209995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:37:03.678 [DEBUG] [Thread-209995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:37:03.703 [INFO] [Thread-209995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:37:03.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:37:04.255 [DEBUG] [Thread-209995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:37:04.255 [DEBUG] [Thread-209995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:37:04.256 [DEBUG] [Thread-209995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:37:04.296 [DEBUG] [Thread-209995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:37:04.296 [DEBUG] [Thread-209995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:37:04.300 [DEBUG] [Thread-209995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:37:04.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:37:04.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:37:04.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:37:04.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:37:04.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:37:04.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:37:04.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:37:04.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:37:04.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:37:04.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.733427 -999.00  +17.60  22.92     41   +4.40 1 1 1 1 1   811    0 11.09 -85.58 ----- 28.1 22.9 147.6 34.7 18.2 -26.0 18.1 -25.0 17.9 -23.9 18.2 -25.1
2026-02-15T19:37:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:37:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:37:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.733427
2026-02-15T19:37:04.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:37:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:37:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:37:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:37:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:37:04.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:36:30', tmtdew=15.27, humidity=36.17, cloud=0.0, wind=33.66, temperature=17.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:36:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:37:04.319 [DEBUG] [Thread-209995] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:37:04.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:37:04.414 [DEBUG] [Thread-209998] [transport.py] [_log()] starting thread (client mode): 0xa2d796c0
2026-02-15T19:37:04.414 [DEBUG] [Thread-209998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:37:04.429 [DEBUG] [Thread-209998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:37:04.429 [INFO] [Thread-209998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:37:04.436 [DEBUG] [Thread-209998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:37:04.436 [DEBUG] [Thread-209998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] client lang: <none>
2026-02-15T19:37:04.437 [DEBUG] [Thread-209998] [transport.py] [_log()] server lang: <none>
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] kex follows: False
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:37:04.438 [DEBUG] [Thread-209998] [transport.py] [_log()] Compression: none
2026-02-15T19:37:04.439 [DEBUG] [Thread-209998] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:37:04.495 [DEBUG] [Thread-209998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:37:04.496 [DEBUG] [Thread-209998] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:37:04.496 [DEBUG] [Thread-209998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:37:04.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:37:04.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:37:04.554 [DEBUG] [Thread-209998] [transport.py] [_log()] userauth is OK
2026-02-15T19:37:04.554 [DEBUG] [Thread-209998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:37:04.554 [DEBUG] [Thread-209998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:37:04.555 [DEBUG] [Thread-209998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:37:04.555 [DEBUG] [Thread-209998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:37:04.573 [INFO] [Thread-209998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:37:04.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:37:04.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:37:05.392 [DEBUG] [Thread-209998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:37:05.393 [DEBUG] [Thread-209998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:37:05.440 [DEBUG] [Thread-209998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:37:05.441 [DEBUG] [Thread-209998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:37:05.450 [DEBUG] [Thread-209998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:37:05.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:37:05.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:37:05.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:37:05.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:37:05.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:37:05.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:37:05.487 [DEBUG] [Thread-209998] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:37:05.969 [DEBUG] [Thread-210000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:07.541 [DEBUG] [Thread-210001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:22.599 [DEBUG] [Thread-210002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:30.091 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:30.092 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:35.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:37:35.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:37:35.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:37:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 37, 6), 15.29, 36.12, 0.0, 35.08, 17.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:37:37.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:37:06
2026-02-15T19:37:37.633 [DEBUG] [Thread-210003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:37:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:37:37.863 [DEBUG] [Thread-210004] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T19:37:37.863 [DEBUG] [Thread-210004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:37:37.875 [DEBUG] [Thread-210004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:37:37.875 [INFO] [Thread-210004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] client lang: <none>
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] server lang: <none>
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] kex follows: False
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] Compression: none
2026-02-15T19:37:37.878 [DEBUG] [Thread-210004] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:37:37.896 [DEBUG] [Thread-210004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:37:37.897 [DEBUG] [Thread-210004] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:37:37.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:37:37.898 [DEBUG] [Thread-210004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:37:37.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:37:37.900 [DEBUG] [Thread-210004] [transport.py] [_log()] userauth is OK
2026-02-15T19:37:37.900 [DEBUG] [Thread-210004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:37:37.900 [DEBUG] [Thread-210004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:37:37.900 [DEBUG] [Thread-210004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:37:37.900 [DEBUG] [Thread-210004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:37:37.923 [INFO] [Thread-210004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:37:37.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:37:38.508 [DEBUG] [Thread-210004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:37:38.509 [DEBUG] [Thread-210004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:37:38.509 [DEBUG] [Thread-210004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:37:38.549 [DEBUG] [Thread-210004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:37:38.549 [DEBUG] [Thread-210004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:37:38.552 [DEBUG] [Thread-210004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:37:38.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:37:38.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:37:38.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:37:38.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:37:38.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:37:38.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:37:38.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:37:38.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:37:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:37:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.734121 -999.00  +17.60  26.88     41   +4.30 1 1 1 1 1   796    0 10.77 -88.06 ----- 27.6 26.9 144.6 32.0 -999.0 -999.0 18.1 -24.9 17.9 -23.8 18.2 -25.1
2026-02-15T19:37:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:37:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:37:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.734121
2026-02-15T19:37:38.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:37:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:37:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:37:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:37:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:37:38.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:37:06', tmtdew=15.29, humidity=36.12, cloud=0.0, wind=35.08, temperature=17.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:37:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:37:38.572 [DEBUG] [Thread-210004] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:37:38.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:37:38.668 [DEBUG] [Thread-210007] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T19:37:38.668 [DEBUG] [Thread-210007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:37:38.683 [DEBUG] [Thread-210007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:37:38.683 [INFO] [Thread-210007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:37:38.691 [DEBUG] [Thread-210007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:37:38.691 [DEBUG] [Thread-210007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:37:38.691 [DEBUG] [Thread-210007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:37:38.691 [DEBUG] [Thread-210007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:38.691 [DEBUG] [Thread-210007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] client lang: <none>
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] server lang: <none>
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] kex follows: False
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] Compression: none
2026-02-15T19:37:38.692 [DEBUG] [Thread-210007] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:37:38.750 [DEBUG] [Thread-210007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:37:38.751 [DEBUG] [Thread-210007] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:37:38.751 [DEBUG] [Thread-210007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:37:38.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:37:38.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:37:38.806 [DEBUG] [Thread-210007] [transport.py] [_log()] userauth is OK
2026-02-15T19:37:38.806 [DEBUG] [Thread-210007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:37:38.806 [DEBUG] [Thread-210007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:37:38.806 [DEBUG] [Thread-210007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:37:38.806 [DEBUG] [Thread-210007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:37:38.830 [INFO] [Thread-210007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:37:38.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:37:38.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:37:39.663 [DEBUG] [Thread-210007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:37:39.663 [DEBUG] [Thread-210007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:37:39.710 [DEBUG] [Thread-210007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:37:39.711 [DEBUG] [Thread-210007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:37:39.720 [DEBUG] [Thread-210007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:37:39.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:37:39.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:37:39.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:37:39.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:37:39.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:37:39.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:37:39.757 [DEBUG] [Thread-210007] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:37:52.666 [DEBUG] [Thread-210009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:06.032 [DEBUG] [Thread-210010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:07.706 [DEBUG] [Thread-210011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:09.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:38:09.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:38:09.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:38:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 37, 41), 15.56, 35.31, 0.0, 42.3, 18.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:38:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:37:41
2026-02-15T19:38:12.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:38:12.439 [DEBUG] [Thread-210012] [transport.py] [_log()] starting thread (client mode): 0xa2dc14e0
2026-02-15T19:38:12.440 [DEBUG] [Thread-210012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:38:12.452 [DEBUG] [Thread-210012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:38:12.452 [INFO] [Thread-210012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:38:12.455 [DEBUG] [Thread-210012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:38:12.455 [DEBUG] [Thread-210012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:38:12.455 [DEBUG] [Thread-210012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:38:12.455 [DEBUG] [Thread-210012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:12.455 [DEBUG] [Thread-210012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:12.455 [DEBUG] [Thread-210012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] client lang: <none>
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] server lang: <none>
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] kex follows: False
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] Compression: none
2026-02-15T19:38:12.456 [DEBUG] [Thread-210012] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:38:12.463 [DEBUG] [Thread-210012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:38:12.463 [DEBUG] [Thread-210012] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:38:12.463 [DEBUG] [Thread-210012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:38:12.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:38:12.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:38:12.464 [DEBUG] [Thread-210012] [transport.py] [_log()] userauth is OK
2026-02-15T19:38:12.465 [DEBUG] [Thread-210012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:38:12.465 [DEBUG] [Thread-210012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:38:12.465 [DEBUG] [Thread-210012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:38:12.465 [DEBUG] [Thread-210012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:38:12.475 [INFO] [Thread-210012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:38:12.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:38:13.084 [DEBUG] [Thread-210012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:38:13.084 [DEBUG] [Thread-210012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:38:13.085 [DEBUG] [Thread-210012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:38:13.125 [DEBUG] [Thread-210012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:38:13.125 [DEBUG] [Thread-210012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:38:13.128 [DEBUG] [Thread-210012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:38:13.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:38:13.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:38:13.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:38:13.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:38:13.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:38:13.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:38:13.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:38:13.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:38:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:38:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.734468 -999.00  +17.50  24.67     41   +4.30 1 1 1 1 1   787    0 11.14 -83.86 ----- 27.4 24.7 148.8 46.1 18.1 -26.0 18.1 -24.9 17.9 -24.0 18.1 -25.1
2026-02-15T19:38:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:38:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:38:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.734468
2026-02-15T19:38:13.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:38:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:38:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:38:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:38:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:38:13.150 [DEBUG] [Thread-210012] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:38:13.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:37:41', tmtdew=15.56, humidity=35.31, cloud=0.0, wind=42.3, temperature=18.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:37:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:38:13.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:38:13.241 [DEBUG] [Thread-210015] [transport.py] [_log()] starting thread (client mode): 0xa2d13ee0
2026-02-15T19:38:13.242 [DEBUG] [Thread-210015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:38:13.255 [DEBUG] [Thread-210015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:38:13.255 [INFO] [Thread-210015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:13.263 [DEBUG] [Thread-210015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] client lang: <none>
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] server lang: <none>
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] kex follows: False
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:38:13.264 [DEBUG] [Thread-210015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:38:13.265 [DEBUG] [Thread-210015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:38:13.265 [DEBUG] [Thread-210015] [transport.py] [_log()] Compression: none
2026-02-15T19:38:13.265 [DEBUG] [Thread-210015] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:38:13.322 [DEBUG] [Thread-210015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:38:13.322 [DEBUG] [Thread-210015] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:38:13.323 [DEBUG] [Thread-210015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:38:13.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:38:13.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:38:13.377 [DEBUG] [Thread-210015] [transport.py] [_log()] userauth is OK
2026-02-15T19:38:13.378 [DEBUG] [Thread-210015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:38:13.378 [DEBUG] [Thread-210015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:38:13.378 [DEBUG] [Thread-210015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:38:13.378 [DEBUG] [Thread-210015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:38:13.396 [INFO] [Thread-210015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:38:13.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:38:13.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:38:14.227 [DEBUG] [Thread-210015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:38:14.227 [DEBUG] [Thread-210015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:38:14.275 [DEBUG] [Thread-210015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:38:14.276 [DEBUG] [Thread-210015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:38:14.285 [DEBUG] [Thread-210015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:38:14.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:38:14.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:38:14.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:38:14.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:38:14.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:38:14.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:38:14.321 [DEBUG] [Thread-210015] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:38:22.742 [DEBUG] [Thread-210017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:34.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:34.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:37.797 [DEBUG] [Thread-210018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:38:44.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:38:44.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:38:44.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:38:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 38, 16), 15.31, 36.09, 0.0, 40.51, 17.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:38:46.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:38:16
2026-02-15T19:38:46.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:38:46.759 [DEBUG] [Thread-210019] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ea0
2026-02-15T19:38:46.759 [DEBUG] [Thread-210019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:38:46.779 [DEBUG] [Thread-210019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:38:46.780 [INFO] [Thread-210019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] client lang: <none>
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] server lang: <none>
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] kex follows: False
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] Compression: none
2026-02-15T19:38:46.783 [DEBUG] [Thread-210019] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:38:46.800 [DEBUG] [Thread-210019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:38:46.801 [DEBUG] [Thread-210019] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:38:46.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:38:46.802 [DEBUG] [Thread-210019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:38:46.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:38:46.846 [DEBUG] [Thread-210019] [transport.py] [_log()] userauth is OK
2026-02-15T19:38:46.846 [DEBUG] [Thread-210019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:38:46.846 [DEBUG] [Thread-210019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:38:46.846 [DEBUG] [Thread-210019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:38:46.846 [DEBUG] [Thread-210019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:38:46.866 [INFO] [Thread-210019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:38:46.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:38:47.553 [DEBUG] [Thread-210019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:38:47.554 [DEBUG] [Thread-210019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:38:47.554 [DEBUG] [Thread-210019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:38:47.594 [DEBUG] [Thread-210019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:38:47.595 [DEBUG] [Thread-210019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:38:47.598 [DEBUG] [Thread-210019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:38:47.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:38:47.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:38:47.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:38:47.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:38:47.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:38:47.616 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:38:47.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.735163 -999.00  +17.50  30.07     41   +4.30 1 1 2 1 1   767    0 11.21 -80.27 ----- 20.2 30.1 140.0 35.3 18.1 -25.9 18.0 -24.8 17.9 -23.9 18.1 -25.2
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.735163
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:38:47.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:38:16', tmtdew=15.31, humidity=36.09, cloud=0.0, wind=40.51, temperature=17.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:38:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:38:47.618 [DEBUG] [Thread-210019] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:38:47.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:38:47.705 [DEBUG] [Thread-210022] [transport.py] [_log()] starting thread (client mode): 0xa5742b90
2026-02-15T19:38:47.705 [DEBUG] [Thread-210022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:38:47.719 [DEBUG] [Thread-210022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:38:47.719 [INFO] [Thread-210022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:38:47.726 [DEBUG] [Thread-210022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:38:47.727 [DEBUG] [Thread-210022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] client lang: <none>
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] server lang: <none>
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] kex follows: False
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:38:47.728 [DEBUG] [Thread-210022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:38:47.729 [DEBUG] [Thread-210022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:38:47.729 [DEBUG] [Thread-210022] [transport.py] [_log()] Compression: none
2026-02-15T19:38:47.729 [DEBUG] [Thread-210022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:38:47.786 [DEBUG] [Thread-210022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:38:47.787 [DEBUG] [Thread-210022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:38:47.787 [DEBUG] [Thread-210022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:38:47.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:38:47.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:38:47.845 [DEBUG] [Thread-210022] [transport.py] [_log()] userauth is OK
2026-02-15T19:38:47.846 [DEBUG] [Thread-210022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:38:47.846 [DEBUG] [Thread-210022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:38:47.846 [DEBUG] [Thread-210022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:38:47.846 [DEBUG] [Thread-210022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:38:47.865 [INFO] [Thread-210022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:38:47.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:38:47.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:38:48.686 [DEBUG] [Thread-210022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:38:48.686 [DEBUG] [Thread-210022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:38:48.734 [DEBUG] [Thread-210022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:38:48.735 [DEBUG] [Thread-210022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:38:48.744 [DEBUG] [Thread-210022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:38:48.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:38:48.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:38:48.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:38:48.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:38:48.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:38:48.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:38:48.781 [DEBUG] [Thread-210022] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:38:52.831 [DEBUG] [Thread-210024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:06.102 [DEBUG] [Thread-210025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:07.873 [DEBUG] [Thread-210026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:18.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:39:18.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:39:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:39:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 38, 52), 15.29, 36.14, 0.0, 32.71, 17.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:39:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:38:52
2026-02-15T19:39:21.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:39:21.173 [DEBUG] [Thread-210027] [transport.py] [_log()] starting thread (client mode): 0xa2d10b80
2026-02-15T19:39:21.173 [DEBUG] [Thread-210027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:39:21.196 [DEBUG] [Thread-210027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:39:21.197 [INFO] [Thread-210027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:39:21.200 [DEBUG] [Thread-210027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] client lang: <none>
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] server lang: <none>
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] kex follows: False
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] Compression: none
2026-02-15T19:39:21.201 [DEBUG] [Thread-210027] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:39:21.219 [DEBUG] [Thread-210027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:39:21.220 [DEBUG] [Thread-210027] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:39:21.220 [DEBUG] [Thread-210027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:39:21.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:39:21.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:39:21.222 [DEBUG] [Thread-210027] [transport.py] [_log()] userauth is OK
2026-02-15T19:39:21.222 [DEBUG] [Thread-210027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:39:21.222 [DEBUG] [Thread-210027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:39:21.222 [DEBUG] [Thread-210027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:39:21.222 [DEBUG] [Thread-210027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:39:21.246 [INFO] [Thread-210027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:39:21.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:39:21.876 [DEBUG] [Thread-210027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:39:21.876 [DEBUG] [Thread-210027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:39:21.876 [DEBUG] [Thread-210027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:39:21.916 [DEBUG] [Thread-210027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:39:21.916 [DEBUG] [Thread-210027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:39:21.919 [DEBUG] [Thread-210027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:39:21.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:39:21.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:39:21.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:39:21.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:39:21.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:39:21.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:39:21.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:39:21.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:39:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:39:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.735510 -999.00  +17.50  24.23     41   +4.30 1 1 1 1 1   756    0 11.34 -77.46 ----- 26.0 24.2 151.9 31.7 18.0 -25.9 18.0 -24.9 17.8 -23.8 18.1 -25.2
2026-02-15T19:39:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:39:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:39:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.735510
2026-02-15T19:39:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:39:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:39:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:39:21.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:39:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:39:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:38:52', tmtdew=15.29, humidity=36.14, cloud=0.0, wind=32.71, temperature=17.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:39:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:39:21.945 [DEBUG] [Thread-210027] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:39:22.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:39:22.045 [DEBUG] [Thread-210030] [transport.py] [_log()] starting thread (client mode): 0xa57d6bf0
2026-02-15T19:39:22.045 [DEBUG] [Thread-210030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:39:22.063 [DEBUG] [Thread-210030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:39:22.064 [INFO] [Thread-210030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] client lang: <none>
2026-02-15T19:39:22.071 [DEBUG] [Thread-210030] [transport.py] [_log()] server lang: <none>
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] kex follows: False
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] Compression: none
2026-02-15T19:39:22.072 [DEBUG] [Thread-210030] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:39:22.128 [DEBUG] [Thread-210030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:39:22.129 [DEBUG] [Thread-210030] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:39:22.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:39:22.129 [DEBUG] [Thread-210030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:39:22.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:39:22.185 [DEBUG] [Thread-210030] [transport.py] [_log()] userauth is OK
2026-02-15T19:39:22.185 [DEBUG] [Thread-210030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:39:22.186 [DEBUG] [Thread-210030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:39:22.186 [DEBUG] [Thread-210030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:39:22.186 [DEBUG] [Thread-210030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:39:22.206 [INFO] [Thread-210030] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:39:22.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:39:22.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:39:22.908 [DEBUG] [Thread-210032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:23.015 [DEBUG] [Thread-210030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:39:23.015 [DEBUG] [Thread-210030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:39:23.063 [DEBUG] [Thread-210030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:39:23.063 [DEBUG] [Thread-210030] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:39:23.072 [DEBUG] [Thread-210030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:39:23.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:39:23.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:39:23.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:39:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:39:23.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:39:23.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:39:23.106 [DEBUG] [Thread-210030] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:39:37.953 [DEBUG] [Thread-210033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:38.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:38.664 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:52.984 [DEBUG] [Thread-210034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:39:53.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:39:53.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:39:53.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:39:55.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 39, 27), 15.27, 36.15, 0.0, 35.46, 17.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:39:55.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:39:27
2026-02-15T19:39:55.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:39:55.718 [DEBUG] [Thread-210035] [transport.py] [_log()] starting thread (client mode): 0xa57e36d0
2026-02-15T19:39:55.718 [DEBUG] [Thread-210035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:39:55.739 [DEBUG] [Thread-210035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:39:55.739 [INFO] [Thread-210035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] client lang: <none>
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] server lang: <none>
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] kex follows: False
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] Compression: none
2026-02-15T19:39:55.742 [DEBUG] [Thread-210035] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:39:55.760 [DEBUG] [Thread-210035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:39:55.760 [DEBUG] [Thread-210035] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:39:55.761 [DEBUG] [Thread-210035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:39:55.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:39:55.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:39:55.763 [DEBUG] [Thread-210035] [transport.py] [_log()] userauth is OK
2026-02-15T19:39:55.763 [DEBUG] [Thread-210035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:39:55.763 [DEBUG] [Thread-210035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:39:55.763 [DEBUG] [Thread-210035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:39:55.764 [DEBUG] [Thread-210035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:39:55.788 [INFO] [Thread-210035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:39:55.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:39:56.380 [DEBUG] [Thread-210035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:39:56.380 [DEBUG] [Thread-210035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:39:56.380 [DEBUG] [Thread-210035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:39:56.421 [DEBUG] [Thread-210035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:39:56.421 [DEBUG] [Thread-210035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:39:56.424 [DEBUG] [Thread-210035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:39:56.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:39:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:39:56.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:39:56.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:39:56.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:39:56.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:39:56.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:39:56.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:39:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:39:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.735857 -999.00  +17.50  30.42     41   +4.30 1 1 2 1 1   745    0 11.24 -72.43 ----- 32.8 30.4 141.6 39.5 18.0 -25.9 18.0 -24.9 17.8 -23.7 18.1 -25.2
2026-02-15T19:39:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:39:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:39:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.735857
2026-02-15T19:39:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:39:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:39:56.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:39:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:39:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:39:56.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:39:27', tmtdew=15.27, humidity=36.15, cloud=0.0, wind=35.46, temperature=17.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:39:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:39:56.450 [DEBUG] [Thread-210035] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:39:56.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:39:56.548 [DEBUG] [Thread-210038] [transport.py] [_log()] starting thread (client mode): 0xa57e2920
2026-02-15T19:39:56.548 [DEBUG] [Thread-210038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:39:56.567 [DEBUG] [Thread-210038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:39:56.568 [INFO] [Thread-210038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:39:56.575 [DEBUG] [Thread-210038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] client lang: <none>
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] server lang: <none>
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] kex follows: False
2026-02-15T19:39:56.576 [DEBUG] [Thread-210038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:39:56.577 [DEBUG] [Thread-210038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:39:56.577 [DEBUG] [Thread-210038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:39:56.577 [DEBUG] [Thread-210038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:39:56.577 [DEBUG] [Thread-210038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:39:56.577 [DEBUG] [Thread-210038] [transport.py] [_log()] Compression: none
2026-02-15T19:39:56.577 [DEBUG] [Thread-210038] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:39:56.632 [DEBUG] [Thread-210038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:39:56.633 [DEBUG] [Thread-210038] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:39:56.634 [DEBUG] [Thread-210038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:39:56.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:39:56.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:39:56.689 [DEBUG] [Thread-210038] [transport.py] [_log()] userauth is OK
2026-02-15T19:39:56.689 [DEBUG] [Thread-210038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:39:56.689 [DEBUG] [Thread-210038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:39:56.689 [DEBUG] [Thread-210038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:39:56.689 [DEBUG] [Thread-210038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:39:56.707 [INFO] [Thread-210038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:39:56.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:39:56.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:39:57.520 [DEBUG] [Thread-210038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:39:57.520 [DEBUG] [Thread-210038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:39:57.568 [DEBUG] [Thread-210038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:39:57.569 [DEBUG] [Thread-210038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:39:57.578 [DEBUG] [Thread-210038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:39:57.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:39:57.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:39:57.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:39:57.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:39:57.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:39:57.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:39:57.618 [DEBUG] [Thread-210038] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:40:06.177 [DEBUG] [Thread-210040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:40:08.017 [DEBUG] [Thread-210041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:40:23.069 [DEBUG] [Thread-210042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:40:27.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:40:27.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:40:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:40:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 40, 2), 15.26, 36.19, 0.0, 34.55, 17.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:40:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:40:02
2026-02-15T19:40:29.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:40:30.051 [DEBUG] [Thread-210043] [transport.py] [_log()] starting thread (client mode): 0xa57e2740
2026-02-15T19:40:30.052 [DEBUG] [Thread-210043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:40:30.071 [DEBUG] [Thread-210043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:40:30.071 [INFO] [Thread-210043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:40:30.074 [DEBUG] [Thread-210043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] client lang: <none>
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] server lang: <none>
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] kex follows: False
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] Compression: none
2026-02-15T19:40:30.075 [DEBUG] [Thread-210043] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:40:30.093 [DEBUG] [Thread-210043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:40:30.093 [DEBUG] [Thread-210043] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:40:30.094 [DEBUG] [Thread-210043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:40:30.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:40:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:40:30.137 [DEBUG] [Thread-210043] [transport.py] [_log()] userauth is OK
2026-02-15T19:40:30.138 [DEBUG] [Thread-210043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:40:30.138 [DEBUG] [Thread-210043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:40:30.138 [DEBUG] [Thread-210043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:40:30.138 [DEBUG] [Thread-210043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:40:30.152 [INFO] [Thread-210043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:40:30.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:40:30.712 [DEBUG] [Thread-210043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:40:30.712 [DEBUG] [Thread-210043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:40:30.712 [DEBUG] [Thread-210043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:40:30.753 [DEBUG] [Thread-210043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:40:30.754 [DEBUG] [Thread-210043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:40:30.757 [DEBUG] [Thread-210043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:40:30.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:40:30.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:40:30.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:40:30.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:40:30.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:40:30.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:40:30.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:40:30.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:40:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:40:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.736204 -999.00  +17.50  22.19     41   +4.30 1 1 1 1 1   732    0 11.89 -65.45 ----- 25.1 22.2 143.8 35.8 18.0 -25.8 18.0 -24.9 17.8 -23.8 18.1 -25.2
2026-02-15T19:40:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:40:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:40:30.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.736204
2026-02-15T19:40:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:40:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:40:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:40:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:40:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:40:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:40:02', tmtdew=15.26, humidity=36.19, cloud=0.0, wind=34.55, temperature=17.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:40:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:40:30.788 [DEBUG] [Thread-210043] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:40:30.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:40:30.900 [DEBUG] [Thread-210046] [transport.py] [_log()] starting thread (client mode): 0xa2d55120
2026-02-15T19:40:30.900 [DEBUG] [Thread-210046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:40:30.915 [DEBUG] [Thread-210046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:40:30.915 [INFO] [Thread-210046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:40:30.923 [DEBUG] [Thread-210046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:40:30.923 [DEBUG] [Thread-210046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:40:30.923 [DEBUG] [Thread-210046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:40:30.923 [DEBUG] [Thread-210046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] client lang: <none>
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] server lang: <none>
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] kex follows: False
2026-02-15T19:40:30.924 [DEBUG] [Thread-210046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:40:30.925 [DEBUG] [Thread-210046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:40:30.925 [DEBUG] [Thread-210046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:40:30.925 [DEBUG] [Thread-210046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:40:30.925 [DEBUG] [Thread-210046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:40:30.925 [DEBUG] [Thread-210046] [transport.py] [_log()] Compression: none
2026-02-15T19:40:30.925 [DEBUG] [Thread-210046] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:40:30.981 [DEBUG] [Thread-210046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:40:30.982 [DEBUG] [Thread-210046] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:40:30.982 [DEBUG] [Thread-210046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:40:30.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:40:30.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:40:31.041 [DEBUG] [Thread-210046] [transport.py] [_log()] userauth is OK
2026-02-15T19:40:31.041 [DEBUG] [Thread-210046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:40:31.041 [DEBUG] [Thread-210046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:40:31.041 [DEBUG] [Thread-210046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:40:31.041 [DEBUG] [Thread-210046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:40:31.060 [INFO] [Thread-210046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:40:31.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:40:31.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:40:31.959 [DEBUG] [Thread-210046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:40:31.960 [DEBUG] [Thread-210046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:40:32.007 [DEBUG] [Thread-210046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:40:32.008 [DEBUG] [Thread-210046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:40:32.017 [DEBUG] [Thread-210046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:40:32.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:40:32.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:40:32.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:40:32.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:40:32.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:40:32.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:40:32.051 [DEBUG] [Thread-210046] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:40:38.103 [DEBUG] [Thread-210048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:40:43.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:40:43.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:40:53.151 [DEBUG] [Thread-210049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:41:02.068 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:41:02.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:41:03.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 40, 37), 15.5, 35.44, 0.0, 41.92, 18.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:41:03.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:40:37
2026-02-15T19:41:04.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:41:04.446 [DEBUG] [Thread-210050] [transport.py] [_log()] starting thread (client mode): 0xa57b3d30
2026-02-15T19:41:04.446 [DEBUG] [Thread-210050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:41:04.466 [DEBUG] [Thread-210050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:41:04.467 [INFO] [Thread-210050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:04.468 [DEBUG] [Thread-210050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] client lang: <none>
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] server lang: <none>
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] kex follows: False
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] Compression: none
2026-02-15T19:41:04.469 [DEBUG] [Thread-210050] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:41:04.482 [DEBUG] [Thread-210050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:41:04.482 [DEBUG] [Thread-210050] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:41:04.483 [DEBUG] [Thread-210050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:41:04.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:41:04.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:41:04.485 [DEBUG] [Thread-210050] [transport.py] [_log()] userauth is OK
2026-02-15T19:41:04.485 [DEBUG] [Thread-210050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:41:04.485 [DEBUG] [Thread-210050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:41:04.485 [DEBUG] [Thread-210050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:41:04.486 [DEBUG] [Thread-210050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:41:04.512 [INFO] [Thread-210050] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:41:04.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:41:05.099 [DEBUG] [Thread-210050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:41:05.100 [DEBUG] [Thread-210050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:41:05.100 [DEBUG] [Thread-210050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:41:05.140 [DEBUG] [Thread-210050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:41:05.140 [DEBUG] [Thread-210050] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:41:05.143 [DEBUG] [Thread-210050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:41:05.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:41:05.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:41:05.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:41:05.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:41:05.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:41:05.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:41:05.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:41:05.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:41:05.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:41:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.736552 -999.00  +17.50  27.19     41   +4.20 1 1 1 1 1   719    0 11.92 -56.77 ----- 25.5 27.2 149.0 33.6 18.0 -25.9 18.0 -24.7 17.8 -23.7 18.1 -25.0
2026-02-15T19:41:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:41:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:41:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.736552
2026-02-15T19:41:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:41:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:41:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:41:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:41:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:41:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:40:37', tmtdew=15.5, humidity=35.44, cloud=0.0, wind=41.92, temperature=18.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:40:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:41:05.168 [DEBUG] [Thread-210050] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:41:05.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:41:05.263 [DEBUG] [Thread-210053] [transport.py] [_log()] starting thread (client mode): 0xa57b3520
2026-02-15T19:41:05.263 [DEBUG] [Thread-210053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:41:05.279 [DEBUG] [Thread-210053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:41:05.280 [INFO] [Thread-210053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:41:05.287 [DEBUG] [Thread-210053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:41:05.288 [DEBUG] [Thread-210053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] client lang: <none>
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] server lang: <none>
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] kex follows: False
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:41:05.289 [DEBUG] [Thread-210053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:41:05.290 [DEBUG] [Thread-210053] [transport.py] [_log()] Compression: none
2026-02-15T19:41:05.290 [DEBUG] [Thread-210053] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:41:05.349 [DEBUG] [Thread-210053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:41:05.350 [DEBUG] [Thread-210053] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:41:05.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:41:05.351 [DEBUG] [Thread-210053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:41:05.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:41:05.408 [DEBUG] [Thread-210053] [transport.py] [_log()] userauth is OK
2026-02-15T19:41:05.409 [DEBUG] [Thread-210053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:41:05.409 [DEBUG] [Thread-210053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:41:05.409 [DEBUG] [Thread-210053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:41:05.409 [DEBUG] [Thread-210053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:41:05.428 [INFO] [Thread-210053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:41:05.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:41:05.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:41:06.233 [DEBUG] [Thread-210055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:06.309 [DEBUG] [Thread-210053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:41:06.309 [DEBUG] [Thread-210053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:41:06.357 [DEBUG] [Thread-210053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:41:06.358 [DEBUG] [Thread-210053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:41:06.367 [DEBUG] [Thread-210053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:41:06.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:41: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')
2026-02-15T19:41:06.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:41:06.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:41:06.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:41:06.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:41:06.404 [DEBUG] [Thread-210053] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:41:08.186 [DEBUG] [Thread-210056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:23.234 [DEBUG] [Thread-210057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:41:36.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:41:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:41:38.270 [DEBUG] [Thread-210058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:38.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 41, 13), 15.18, 36.25, 0.0, 33.05, 17.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:41:38.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:41:13
2026-02-15T19:41:38.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:41:38.770 [DEBUG] [Thread-210059] [transport.py] [_log()] starting thread (client mode): 0xa57d6a10
2026-02-15T19:41:38.771 [DEBUG] [Thread-210059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:41:38.793 [DEBUG] [Thread-210059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:41:38.793 [INFO] [Thread-210059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] client lang: <none>
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] server lang: <none>
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] kex follows: False
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:41:38.795 [DEBUG] [Thread-210059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:41:38.796 [DEBUG] [Thread-210059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:41:38.796 [DEBUG] [Thread-210059] [transport.py] [_log()] Compression: none
2026-02-15T19:41:38.796 [DEBUG] [Thread-210059] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:41:38.813 [DEBUG] [Thread-210059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:41:38.813 [DEBUG] [Thread-210059] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:41:38.814 [DEBUG] [Thread-210059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:41:38.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:41:38.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:41:38.816 [DEBUG] [Thread-210059] [transport.py] [_log()] userauth is OK
2026-02-15T19:41:38.816 [DEBUG] [Thread-210059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:41:38.817 [DEBUG] [Thread-210059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:41:38.817 [DEBUG] [Thread-210059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:41:38.817 [DEBUG] [Thread-210059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:41:38.840 [INFO] [Thread-210059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:41:38.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:41:39.479 [DEBUG] [Thread-210059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:41:39.479 [DEBUG] [Thread-210059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:41:39.480 [DEBUG] [Thread-210059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:41:39.521 [DEBUG] [Thread-210059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:41:39.521 [DEBUG] [Thread-210059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:41:39.525 [DEBUG] [Thread-210059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:41:39.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:41:39.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:41:39.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:41:39.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:41:39.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:41:39.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:41:39.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:41:39.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:41:39.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:41:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.736899 -999.00  +17.50  24.38     41   +4.20 1 1 1 1 1   705    0 12.01 -51.65 ----- 19.8 24.4 146.6 31.2 18.0 -26.0 17.9 -24.9 17.8 -23.7 18.0 -25.0
2026-02-15T19:41:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:41:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:41:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.736899
2026-02-15T19:41:39.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:41:39.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:41:39.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:41:39.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:41:39.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:41:39.554 [DEBUG] [Thread-210059] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:41:39.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:41:13', tmtdew=15.18, humidity=36.25, cloud=0.0, wind=33.05, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:41:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:41:39.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:41:39.653 [DEBUG] [Thread-210062] [transport.py] [_log()] starting thread (client mode): 0xa57b28c0
2026-02-15T19:41:39.653 [DEBUG] [Thread-210062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:41:39.672 [DEBUG] [Thread-210062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:41:39.672 [INFO] [Thread-210062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] client lang: <none>
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] server lang: <none>
2026-02-15T19:41:39.680 [DEBUG] [Thread-210062] [transport.py] [_log()] kex follows: False
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] Compression: none
2026-02-15T19:41:39.681 [DEBUG] [Thread-210062] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:41:39.740 [DEBUG] [Thread-210062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:41:39.740 [DEBUG] [Thread-210062] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:41:39.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:41:39.742 [DEBUG] [Thread-210062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:41:39.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:41:39.798 [DEBUG] [Thread-210062] [transport.py] [_log()] userauth is OK
2026-02-15T19:41:39.799 [DEBUG] [Thread-210062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:41:39.799 [DEBUG] [Thread-210062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:41:39.799 [DEBUG] [Thread-210062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:41:39.799 [DEBUG] [Thread-210062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:41:39.817 [INFO] [Thread-210062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:41:39.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:41:39.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:41:40.628 [DEBUG] [Thread-210062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:41:40.628 [DEBUG] [Thread-210062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:41:40.676 [DEBUG] [Thread-210062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:41:40.676 [DEBUG] [Thread-210062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:41:40.686 [DEBUG] [Thread-210062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:41:40.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:41:40.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:41:40.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:41:40.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:41:40.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:41:40.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:41:40.722 [DEBUG] [Thread-210062] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:41:47.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:47.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:41:53.302 [DEBUG] [Thread-210064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:06.291 [DEBUG] [Thread-210065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:08.343 [DEBUG] [Thread-210066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:10.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:42:10.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:42:10.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:42:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 41, 48), 15.18, 36.27, 0.0, 34.05, 17.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:42:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:41:48
2026-02-15T19:42:13.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:42:13.303 [DEBUG] [Thread-210067] [transport.py] [_log()] starting thread (client mode): 0xa2dc1300
2026-02-15T19:42:13.304 [DEBUG] [Thread-210067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:42:13.324 [DEBUG] [Thread-210067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:42:13.324 [INFO] [Thread-210067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:42:13.327 [DEBUG] [Thread-210067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:42:13.327 [DEBUG] [Thread-210067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] client lang: <none>
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] server lang: <none>
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] kex follows: False
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:42:13.328 [DEBUG] [Thread-210067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:42:13.329 [DEBUG] [Thread-210067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:42:13.329 [DEBUG] [Thread-210067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:42:13.329 [DEBUG] [Thread-210067] [transport.py] [_log()] Compression: none
2026-02-15T19:42:13.329 [DEBUG] [Thread-210067] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:42:13.344 [DEBUG] [Thread-210067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:42:13.345 [DEBUG] [Thread-210067] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:42:13.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:42:13.346 [DEBUG] [Thread-210067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:42:13.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:42:13.348 [DEBUG] [Thread-210067] [transport.py] [_log()] userauth is OK
2026-02-15T19:42:13.348 [DEBUG] [Thread-210067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:42:13.348 [DEBUG] [Thread-210067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:42:13.348 [DEBUG] [Thread-210067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:42:13.348 [DEBUG] [Thread-210067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:42:13.372 [INFO] [Thread-210067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:42:13.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:42:14.036 [DEBUG] [Thread-210067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:42:14.036 [DEBUG] [Thread-210067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:42:14.037 [DEBUG] [Thread-210067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:42:14.081 [DEBUG] [Thread-210067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:42:14.081 [DEBUG] [Thread-210067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:42:14.085 [DEBUG] [Thread-210067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:42:14.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:42:14.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:42:14.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:42:14.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:42:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:42:14.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:42:14.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:42:14.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:42:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:42:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.737246 -999.00  +17.40  21.66     41   +4.20 1 1 1 1 1   690    0 12.11 -50.28 ----- 20.3 21.7 149.8 26.8 18.0 -25.8 17.9 -24.9 17.8 -23.8 18.0 -25.0
2026-02-15T19:42:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:42:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:42:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.737246
2026-02-15T19:42:14.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:42:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:42:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:42:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:42:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:42:14.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:41:48', tmtdew=15.18, humidity=36.27, cloud=0.0, wind=34.05, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:41:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:42:14.111 [DEBUG] [Thread-210067] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:42:14.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:42:14.207 [DEBUG] [Thread-210070] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T19:42:14.207 [DEBUG] [Thread-210070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:42:14.222 [DEBUG] [Thread-210070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:42:14.222 [INFO] [Thread-210070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:42:14.229 [DEBUG] [Thread-210070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] client lang: <none>
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] server lang: <none>
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] kex follows: False
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] Compression: none
2026-02-15T19:42:14.230 [DEBUG] [Thread-210070] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:42:14.287 [DEBUG] [Thread-210070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:42:14.288 [DEBUG] [Thread-210070] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:42:14.288 [DEBUG] [Thread-210070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:42:14.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:42:14.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:42:14.344 [DEBUG] [Thread-210070] [transport.py] [_log()] userauth is OK
2026-02-15T19:42:14.344 [DEBUG] [Thread-210070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:42:14.344 [DEBUG] [Thread-210070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:42:14.344 [DEBUG] [Thread-210070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:42:14.344 [DEBUG] [Thread-210070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:42:14.362 [INFO] [Thread-210070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:42:14.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:42:14.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:42:15.247 [DEBUG] [Thread-210070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:42:15.247 [DEBUG] [Thread-210070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:42:15.296 [DEBUG] [Thread-210070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:42:15.296 [DEBUG] [Thread-210070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:42:15.306 [DEBUG] [Thread-210070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:42:15.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:42: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')
2026-02-15T19:42:15.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:42:15.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:42:15.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:42:15.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:42:15.342 [DEBUG] [Thread-210070] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:42:23.379 [DEBUG] [Thread-210072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:38.437 [DEBUG] [Thread-210073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:45.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:42:45.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:42:45.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:42:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 42, 23), 15.17, 36.29, 0.0, 34.64, 17.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:42:47.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:42:23
2026-02-15T19:42:47.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:42:47.699 [DEBUG] [Thread-210074] [transport.py] [_log()] starting thread (client mode): 0xa57d75e0
2026-02-15T19:42:47.699 [DEBUG] [Thread-210074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:42:47.720 [DEBUG] [Thread-210074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:42:47.720 [INFO] [Thread-210074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] client lang: <none>
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] server lang: <none>
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] kex follows: False
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] Compression: none
2026-02-15T19:42:47.724 [DEBUG] [Thread-210074] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:42:47.744 [DEBUG] [Thread-210074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:42:47.744 [DEBUG] [Thread-210074] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:42:47.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:42:47.745 [DEBUG] [Thread-210074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:42:47.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:42:47.747 [DEBUG] [Thread-210074] [transport.py] [_log()] userauth is OK
2026-02-15T19:42:47.747 [DEBUG] [Thread-210074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:42:47.748 [DEBUG] [Thread-210074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:42:47.748 [DEBUG] [Thread-210074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:42:47.748 [DEBUG] [Thread-210074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:42:47.766 [INFO] [Thread-210074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:42:47.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:42:48.417 [DEBUG] [Thread-210074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:42:48.417 [DEBUG] [Thread-210074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:42:48.417 [DEBUG] [Thread-210074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:42:48.457 [DEBUG] [Thread-210074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:42:48.458 [DEBUG] [Thread-210074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:42:48.461 [DEBUG] [Thread-210074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:42:48.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:42:48.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:42:48.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:42:48.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:42:48.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:42:48.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:42:48.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:42:48.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:42:48.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:42:48.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.737593 -999.00  +17.40  22.86     41   +4.20 1 1 1 1 1   674    0 12.13 -46.90 ----- 18.4 22.9 143.6 28.6 17.9 -25.8 17.9 -24.9 17.7 -23.7 18.0 -25.0
2026-02-15T19:42:48.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:42:48.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:42:48.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.737593
2026-02-15T19:42:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:42:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:42:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:42:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:42:48.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:42:48.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:42:23', tmtdew=15.17, humidity=36.29, cloud=0.0, wind=34.64, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:42:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:42:48.488 [DEBUG] [Thread-210074] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:42:48.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:42:48.587 [DEBUG] [Thread-210077] [transport.py] [_log()] starting thread (client mode): 0xa57d5ea0
2026-02-15T19:42:48.587 [DEBUG] [Thread-210077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:42:48.602 [DEBUG] [Thread-210077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:42:48.602 [INFO] [Thread-210077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:42:48.609 [DEBUG] [Thread-210077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] client lang: <none>
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] server lang: <none>
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] kex follows: False
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:42:48.610 [DEBUG] [Thread-210077] [transport.py] [_log()] Compression: none
2026-02-15T19:42:48.611 [DEBUG] [Thread-210077] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:42:48.668 [DEBUG] [Thread-210077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:42:48.669 [DEBUG] [Thread-210077] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:42:48.669 [DEBUG] [Thread-210077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:42:48.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:42:48.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:42:48.724 [DEBUG] [Thread-210077] [transport.py] [_log()] userauth is OK
2026-02-15T19:42:48.724 [DEBUG] [Thread-210077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:42:48.724 [DEBUG] [Thread-210077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:42:48.724 [DEBUG] [Thread-210077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:42:48.724 [DEBUG] [Thread-210077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:42:48.742 [INFO] [Thread-210077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:42:48.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:42:48.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:42:49.556 [DEBUG] [Thread-210077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:42:49.556 [DEBUG] [Thread-210077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:42:49.603 [DEBUG] [Thread-210077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:42:49.604 [DEBUG] [Thread-210077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:42:49.613 [DEBUG] [Thread-210077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:42:49.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:42:49.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')
2026-02-15T19:42:49.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:42:49.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:42:49.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:42:49.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:42:49.650 [DEBUG] [Thread-210077] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:42:51.489 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:51.490 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:42:53.469 [DEBUG] [Thread-210079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:06.359 [DEBUG] [Thread-210080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:08.512 [DEBUG] [Thread-210081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:19.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:43:19.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:43:19.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:43:21.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 42, 58), 15.16, 36.32, 0.0, 30.97, 17.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:43:21.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:42:58
2026-02-15T19:43:21.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:43:21.933 [DEBUG] [Thread-210082] [transport.py] [_log()] starting thread (client mode): 0xa57d4370
2026-02-15T19:43:21.933 [DEBUG] [Thread-210082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:43:21.952 [DEBUG] [Thread-210082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:43:21.952 [INFO] [Thread-210082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:43:21.956 [DEBUG] [Thread-210082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] client lang: <none>
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] server lang: <none>
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] kex follows: False
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] Compression: none
2026-02-15T19:43:21.957 [DEBUG] [Thread-210082] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:43:21.973 [DEBUG] [Thread-210082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:43:21.973 [DEBUG] [Thread-210082] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:43:21.974 [DEBUG] [Thread-210082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:43:21.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:43:21.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:43:21.976 [DEBUG] [Thread-210082] [transport.py] [_log()] userauth is OK
2026-02-15T19:43:21.976 [DEBUG] [Thread-210082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:43:21.976 [DEBUG] [Thread-210082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:43:21.976 [DEBUG] [Thread-210082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:43:21.976 [DEBUG] [Thread-210082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:43:21.994 [INFO] [Thread-210082] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:43:21.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:43:22.636 [DEBUG] [Thread-210082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:43:22.637 [DEBUG] [Thread-210082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:43:22.637 [DEBUG] [Thread-210082] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:43:22.679 [DEBUG] [Thread-210082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:43:22.679 [DEBUG] [Thread-210082] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:43:22.683 [DEBUG] [Thread-210082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:43:22.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:43:22.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:43:22.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:43:22.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:43:22.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:43:22.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:43:22.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:43:22.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:43:22.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.738288 -999.00  +17.40  21.82     41   +4.20 1 1 1 1 1   639    0 11.98 -46.44 ----- 25.4 21.8 150.3 28.8 17.9 -25.8 17.9 -24.9 17.7 -23.7 17.9 -25.0
2026-02-15T19:43:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:43:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:43:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.738288
2026-02-15T19:43:22.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:43:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:43:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:43:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:43:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:43:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:42:58', tmtdew=15.16, humidity=36.32, cloud=0.0, wind=30.97, temperature=17.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:43:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:43:22.711 [DEBUG] [Thread-210082] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:43:22.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:43:22.807 [DEBUG] [Thread-210085] [transport.py] [_log()] starting thread (client mode): 0xa57d5e70
2026-02-15T19:43:22.808 [DEBUG] [Thread-210085] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:43:22.823 [DEBUG] [Thread-210085] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:43:22.823 [INFO] [Thread-210085] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:43:22.830 [DEBUG] [Thread-210085] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:43:22.830 [DEBUG] [Thread-210085] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:43:22.830 [DEBUG] [Thread-210085] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] client lang: <none>
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] server lang: <none>
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] kex follows: False
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] Compression: none
2026-02-15T19:43:22.831 [DEBUG] [Thread-210085] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:43:22.886 [DEBUG] [Thread-210085] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:43:22.887 [DEBUG] [Thread-210085] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:43:22.887 [DEBUG] [Thread-210085] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:43:22.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:43:22.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:43:22.943 [DEBUG] [Thread-210085] [transport.py] [_log()] userauth is OK
2026-02-15T19:43:22.943 [DEBUG] [Thread-210085] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:43:22.943 [DEBUG] [Thread-210085] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:43:22.943 [DEBUG] [Thread-210085] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:43:22.943 [DEBUG] [Thread-210085] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:43:22.966 [INFO] [Thread-210085] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:43:22.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:43:22.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:43:23.551 [DEBUG] [Thread-210087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:23.803 [DEBUG] [Thread-210085] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:43:23.804 [DEBUG] [Thread-210085] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:43:23.851 [DEBUG] [Thread-210085] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:43:23.852 [DEBUG] [Thread-210085] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:43:23.861 [DEBUG] [Thread-210085] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:43:23.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:43:23.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:43:23.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:43:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:43:23.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:43:23.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:43:23.898 [DEBUG] [Thread-210085] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:43:38.601 [DEBUG] [Thread-210088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:53.637 [DEBUG] [Thread-210089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:53.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:43:53.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:43:53.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:43:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 43, 34), 15.36, 35.77, 0.0, 38.46, 17.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:43:55.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:43:34
2026-02-15T19:43:56.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:43:56.454 [DEBUG] [Thread-210090] [transport.py] [_log()] starting thread (client mode): 0xa57d64d0
2026-02-15T19:43:56.454 [DEBUG] [Thread-210090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:43:56.475 [DEBUG] [Thread-210090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:43:56.475 [INFO] [Thread-210090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:43:56.476 [DEBUG] [Thread-210090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:43:56.476 [DEBUG] [Thread-210090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:43:56.476 [DEBUG] [Thread-210090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:43:56.476 [DEBUG] [Thread-210090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] client lang: <none>
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] server lang: <none>
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] kex follows: False
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] Compression: none
2026-02-15T19:43:56.477 [DEBUG] [Thread-210090] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:43:56.495 [DEBUG] [Thread-210090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:43:56.496 [DEBUG] [Thread-210090] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:43:56.496 [DEBUG] [Thread-210090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:43:56.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:43:56.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:43:56.498 [DEBUG] [Thread-210090] [transport.py] [_log()] userauth is OK
2026-02-15T19:43:56.499 [DEBUG] [Thread-210090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:43:56.499 [DEBUG] [Thread-210090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:43:56.499 [DEBUG] [Thread-210090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:43:56.499 [DEBUG] [Thread-210090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:43:56.522 [INFO] [Thread-210090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:43:56.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:43:56.540 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:56.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:43:57.135 [DEBUG] [Thread-210090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:43:57.135 [DEBUG] [Thread-210090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:43:57.135 [DEBUG] [Thread-210090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:43:57.176 [DEBUG] [Thread-210090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:43:57.177 [DEBUG] [Thread-210090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:43:57.180 [DEBUG] [Thread-210090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:43:57.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:43:57.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:43:57.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:43:57.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:43:57.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:43:57.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:43:57.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:43:57.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:43:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:43:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.738635 -999.00  +17.40  19.50     41   +4.30 1 1 1 1 1   621    0 12.05 -45.66 ----- 23.1 19.5 156.2 27.3 17.9 -25.8 17.9 -24.7 17.6 -23.6 17.9 -24.7
2026-02-15T19:43:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:43:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:43:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.738635
2026-02-15T19:43:57.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:43:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:43:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:43:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:43:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:43:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:43:34', tmtdew=15.36, humidity=35.77, cloud=0.0, wind=38.46, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:43:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:43:57.207 [DEBUG] [Thread-210090] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:43:57.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:43:57.306 [DEBUG] [Thread-210093] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-15T19:43:57.306 [DEBUG] [Thread-210093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:43:57.320 [DEBUG] [Thread-210093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:43:57.320 [INFO] [Thread-210093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] client lang: <none>
2026-02-15T19:43:57.327 [DEBUG] [Thread-210093] [transport.py] [_log()] server lang: <none>
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] kex follows: False
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] Compression: none
2026-02-15T19:43:57.328 [DEBUG] [Thread-210093] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:43:57.387 [DEBUG] [Thread-210093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:43:57.388 [DEBUG] [Thread-210093] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:43:57.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:43:57.389 [DEBUG] [Thread-210093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:43:57.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:43:57.447 [DEBUG] [Thread-210093] [transport.py] [_log()] userauth is OK
2026-02-15T19:43:57.447 [DEBUG] [Thread-210093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:43:57.447 [DEBUG] [Thread-210093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:43:57.447 [DEBUG] [Thread-210093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:43:57.447 [DEBUG] [Thread-210093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:43:57.466 [INFO] [Thread-210093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:43:57.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:43:57.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:43:58.267 [DEBUG] [Thread-210093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:43:58.267 [DEBUG] [Thread-210093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:43:58.316 [DEBUG] [Thread-210093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:43:58.316 [DEBUG] [Thread-210093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:43:58.325 [DEBUG] [Thread-210093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:43:58.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:43: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-02-15T19:43: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-02-15T19:43:58.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:43:58.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:43:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:43:58.361 [DEBUG] [Thread-210093] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:44:06.423 [DEBUG] [Thread-210095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:44:08.673 [DEBUG] [Thread-210096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:44:23.738 [DEBUG] [Thread-210097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:44:28.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:44:28.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:44:28.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:44:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 44, 9), 15.09, 36.35, 0.0, 32.27, 17.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:44:30.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:44:09
2026-02-15T19:44:30.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:44:30.791 [DEBUG] [Thread-210098] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-15T19:44:30.791 [DEBUG] [Thread-210098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:44:30.811 [DEBUG] [Thread-210098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:44:30.811 [INFO] [Thread-210098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:44:30.814 [DEBUG] [Thread-210098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:44:30.814 [DEBUG] [Thread-210098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:44:30.814 [DEBUG] [Thread-210098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:44:30.814 [DEBUG] [Thread-210098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] client lang: <none>
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] server lang: <none>
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] kex follows: False
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] Compression: none
2026-02-15T19:44:30.815 [DEBUG] [Thread-210098] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:44:30.833 [DEBUG] [Thread-210098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:44:30.833 [DEBUG] [Thread-210098] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:44:30.834 [DEBUG] [Thread-210098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:44:30.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:44:30.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:44:30.877 [DEBUG] [Thread-210098] [transport.py] [_log()] userauth is OK
2026-02-15T19:44:30.878 [DEBUG] [Thread-210098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:44:30.878 [DEBUG] [Thread-210098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:44:30.878 [DEBUG] [Thread-210098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:44:30.878 [DEBUG] [Thread-210098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:44:30.900 [INFO] [Thread-210098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:44:30.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:44:31.543 [DEBUG] [Thread-210098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:44:31.543 [DEBUG] [Thread-210098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:44:31.544 [DEBUG] [Thread-210098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:44:31.584 [DEBUG] [Thread-210098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:44:31.584 [DEBUG] [Thread-210098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:44:31.588 [DEBUG] [Thread-210098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:44:31.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:44:31.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:44:31.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:44:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:44:31.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:44:31.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:44:31.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.738982 -999.00  +17.40  23.80     41   +4.30 1 1 1 1 1   602    0 12.31 -44.55 ----- 26.8 23.8 146.8 39.6 17.9 -25.6 17.8 -24.7 17.6 -23.6 17.9 -24.9
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.738982
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:44:09', tmtdew=15.09, humidity=36.35, cloud=0.0, wind=32.27, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:44:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:44:31.607 [DEBUG] [Thread-210098] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:44:31.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:44:31.691 [DEBUG] [Thread-210101] [transport.py] [_log()] starting thread (client mode): 0xa2d56b90
2026-02-15T19:44:31.691 [DEBUG] [Thread-210101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:44:31.710 [DEBUG] [Thread-210101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:44:31.711 [INFO] [Thread-210101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:44:31.718 [DEBUG] [Thread-210101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:44:31.718 [DEBUG] [Thread-210101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:44:31.718 [DEBUG] [Thread-210101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:44:31.718 [DEBUG] [Thread-210101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] client lang: <none>
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] server lang: <none>
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] kex follows: False
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] Compression: none
2026-02-15T19:44:31.719 [DEBUG] [Thread-210101] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:44:31.775 [DEBUG] [Thread-210101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:44:31.775 [DEBUG] [Thread-210101] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:44:31.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:44:31.776 [DEBUG] [Thread-210101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:44:31.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:44:31.831 [DEBUG] [Thread-210101] [transport.py] [_log()] userauth is OK
2026-02-15T19:44:31.831 [DEBUG] [Thread-210101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:44:31.831 [DEBUG] [Thread-210101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:44:31.831 [DEBUG] [Thread-210101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:44:31.832 [DEBUG] [Thread-210101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:44:31.852 [INFO] [Thread-210101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:44:31.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:44:31.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:44:32.711 [DEBUG] [Thread-210101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:44:32.711 [DEBUG] [Thread-210101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:44:32.759 [DEBUG] [Thread-210101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:44:32.760 [DEBUG] [Thread-210101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:44:32.769 [DEBUG] [Thread-210101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:44:32.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:44: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')
2026-02-15T19:44:32.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:44:32.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:44:32.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:44:32.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:44:32.806 [DEBUG] [Thread-210101] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:44:38.775 [DEBUG] [Thread-210103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:44:53.828 [DEBUG] [Thread-210104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:00.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:00.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:45:02.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:45:02.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:45:04.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 44, 44), 15.06, 36.44, 0.0, 32.64, 17.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:45:04.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:44:44
2026-02-15T19:45:05.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:45:05.233 [DEBUG] [Thread-210105] [transport.py] [_log()] starting thread (client mode): 0xa2d57550
2026-02-15T19:45:05.233 [DEBUG] [Thread-210105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:45:05.252 [DEBUG] [Thread-210105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:45:05.252 [INFO] [Thread-210105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:45:05.255 [DEBUG] [Thread-210105] [transport.py] [_log()] client lang: <none>
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] server lang: <none>
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] kex follows: False
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] Compression: none
2026-02-15T19:45:05.256 [DEBUG] [Thread-210105] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:45:05.271 [DEBUG] [Thread-210105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:45:05.271 [DEBUG] [Thread-210105] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:45:05.271 [DEBUG] [Thread-210105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:45:05.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:45:05.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:45:05.272 [DEBUG] [Thread-210105] [transport.py] [_log()] userauth is OK
2026-02-15T19:45:05.272 [DEBUG] [Thread-210105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:45:05.272 [DEBUG] [Thread-210105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:45:05.272 [DEBUG] [Thread-210105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:45:05.272 [DEBUG] [Thread-210105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:45:05.286 [INFO] [Thread-210105] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:45:05.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:45:06.479 [DEBUG] [Thread-210107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:08.864 [DEBUG] [Thread-210108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:14.370 [DEBUG] [Thread-210105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:45:14.371 [DEBUG] [Thread-210105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:45:14.371 [DEBUG] [Thread-210105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:45:14.411 [DEBUG] [Thread-210105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:45:14.411 [DEBUG] [Thread-210105] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:45:14.413 [DEBUG] [Thread-210105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:45:14.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:45:14.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:45:14.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:45:14.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:45:14.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:45:14.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:45:14.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:45:14.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.739329 -999.00  +17.40  21.17     41   +4.30 1 1 1 1 1   582    0 12.09 -41.55 ----- 19.6 21.2 150.2 35.2 17.8 -25.7 17.8 -24.7 17.6 -23.6 17.9 -24.7
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.739329
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:45:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:45:14.443 [DEBUG] [Thread-210105] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:45:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:45:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:45:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:45:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:44:44', tmtdew=15.06, humidity=36.44, cloud=0.0, wind=32.64, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:44:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:45:14.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:45:14.548 [DEBUG] [Thread-210110] [transport.py] [_log()] starting thread (client mode): 0xa2dc0340
2026-02-15T19:45:14.548 [DEBUG] [Thread-210110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:45:14.563 [DEBUG] [Thread-210110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:45:14.563 [INFO] [Thread-210110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:14.571 [DEBUG] [Thread-210110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] client lang: <none>
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] server lang: <none>
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] kex follows: False
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] Compression: none
2026-02-15T19:45:14.572 [DEBUG] [Thread-210110] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:45:14.627 [DEBUG] [Thread-210110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:45:14.628 [DEBUG] [Thread-210110] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:45:14.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:45:14.629 [DEBUG] [Thread-210110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:45:14.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:45:14.691 [DEBUG] [Thread-210110] [transport.py] [_log()] userauth is OK
2026-02-15T19:45:14.691 [DEBUG] [Thread-210110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:45:14.691 [DEBUG] [Thread-210110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:45:14.691 [DEBUG] [Thread-210110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:45:14.692 [DEBUG] [Thread-210110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:45:14.713 [INFO] [Thread-210110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:45:14.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:45:14.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:45:15.516 [DEBUG] [Thread-210110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:45:15.516 [DEBUG] [Thread-210110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:45:15.565 [DEBUG] [Thread-210110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:45:15.565 [DEBUG] [Thread-210110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:45:15.574 [DEBUG] [Thread-210110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:45:15.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:45:15.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:45:15.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:45:15.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:45:15.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:45:15.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:45:15.614 [DEBUG] [Thread-210110] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:45:23.899 [DEBUG] [Thread-210112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:38.959 [DEBUG] [Thread-210113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:45:45.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:45:45.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:45:45.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:45:47.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 45, 19), 15.05, 36.45, 0.0, 33.44, 17.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:45:47.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:45:19
2026-02-15T19:45:47.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:45:47.977 [DEBUG] [Thread-210114] [transport.py] [_log()] starting thread (client mode): 0xa2d573d0
2026-02-15T19:45:47.978 [DEBUG] [Thread-210114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:45:47.997 [DEBUG] [Thread-210114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:45:47.998 [INFO] [Thread-210114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] client lang: <none>
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] server lang: <none>
2026-02-15T19:45:48.001 [DEBUG] [Thread-210114] [transport.py] [_log()] kex follows: False
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] Compression: none
2026-02-15T19:45:48.002 [DEBUG] [Thread-210114] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:45:48.021 [DEBUG] [Thread-210114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:45:48.022 [DEBUG] [Thread-210114] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:45:48.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:45:48.023 [DEBUG] [Thread-210114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:45:48.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:45:48.026 [DEBUG] [Thread-210114] [transport.py] [_log()] userauth is OK
2026-02-15T19:45:48.026 [DEBUG] [Thread-210114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:45:48.026 [DEBUG] [Thread-210114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:45:48.026 [DEBUG] [Thread-210114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:45:48.026 [DEBUG] [Thread-210114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:45:48.061 [INFO] [Thread-210114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:45:48.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:45:48.717 [DEBUG] [Thread-210114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:45:48.718 [DEBUG] [Thread-210114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:45:48.718 [DEBUG] [Thread-210114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:45:48.758 [DEBUG] [Thread-210114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:45:48.759 [DEBUG] [Thread-210114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:45:48.767 [DEBUG] [Thread-210114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:45:48.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:45:48.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:45:48.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:45:48.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:45:48.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:45:48.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:45:48.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:45:48.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:45:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:45:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.739676 -999.00  +17.40  23.52     41   +4.30 1 1 1 1 1   561    0 12.32 -39.46 ----- 30.5 23.5 147.8 29.2 17.8 -25.7 17.8 -24.6 17.6 -23.4 17.9 -24.8
2026-02-15T19:45:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:45:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:45:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.739676
2026-02-15T19:45:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:45:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:45:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:45:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:45:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:45:48.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:45:19', tmtdew=15.05, humidity=36.45, cloud=0.0, wind=33.44, temperature=17.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:45:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:45:48.792 [DEBUG] [Thread-210114] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:45:48.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:45:48.887 [DEBUG] [Thread-210117] [transport.py] [_log()] starting thread (client mode): 0xa57d4fd0
2026-02-15T19:45:48.887 [DEBUG] [Thread-210117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:45:48.902 [DEBUG] [Thread-210117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:45:48.902 [INFO] [Thread-210117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:48.910 [DEBUG] [Thread-210117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] client lang: <none>
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] server lang: <none>
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] kex follows: False
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] Compression: none
2026-02-15T19:45:48.911 [DEBUG] [Thread-210117] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:45:48.972 [DEBUG] [Thread-210117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:45:48.972 [DEBUG] [Thread-210117] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:45:48.973 [DEBUG] [Thread-210117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:45:48.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:45:48.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:45:49.031 [DEBUG] [Thread-210117] [transport.py] [_log()] userauth is OK
2026-02-15T19:45:49.031 [DEBUG] [Thread-210117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:45:49.032 [DEBUG] [Thread-210117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:45:49.032 [DEBUG] [Thread-210117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:45:49.032 [DEBUG] [Thread-210117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:45:49.051 [INFO] [Thread-210117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:45:49.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:45:49.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:45:49.869 [DEBUG] [Thread-210117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:45:49.869 [DEBUG] [Thread-210117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:45:49.917 [DEBUG] [Thread-210117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:45:49.918 [DEBUG] [Thread-210117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:45:49.929 [DEBUG] [Thread-210117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:45:49.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:45:49.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:45:49.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:45:49.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:45:49.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:45:49.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:45:49.966 [DEBUG] [Thread-210117] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:45:53.992 [DEBUG] [Thread-210119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:04.911 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:04.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:06.537 [DEBUG] [Thread-210120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:09.032 [DEBUG] [Thread-210121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:19.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:46:19.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:46:20.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:46:22.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 45, 55), 15.04, 36.47, 0.0, 29.29, 17.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:46:22.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:45:55
2026-02-15T19:46:22.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:46:22.627 [DEBUG] [Thread-210122] [transport.py] [_log()] starting thread (client mode): 0xa2d7ace0
2026-02-15T19:46:22.627 [DEBUG] [Thread-210122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:46:22.646 [DEBUG] [Thread-210122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:46:22.646 [INFO] [Thread-210122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] client lang: <none>
2026-02-15T19:46:22.650 [DEBUG] [Thread-210122] [transport.py] [_log()] server lang: <none>
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] kex follows: False
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] Compression: none
2026-02-15T19:46:22.651 [DEBUG] [Thread-210122] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:46:22.668 [DEBUG] [Thread-210122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:46:22.669 [DEBUG] [Thread-210122] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:46:22.669 [DEBUG] [Thread-210122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:46:22.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:46:22.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:46:22.671 [DEBUG] [Thread-210122] [transport.py] [_log()] userauth is OK
2026-02-15T19:46:22.671 [DEBUG] [Thread-210122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:46:22.671 [DEBUG] [Thread-210122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:46:22.672 [DEBUG] [Thread-210122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:46:22.672 [DEBUG] [Thread-210122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:46:22.696 [INFO] [Thread-210122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:46:22.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:46:23.332 [DEBUG] [Thread-210122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:46:23.333 [DEBUG] [Thread-210122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:46:23.333 [DEBUG] [Thread-210122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:46:23.376 [DEBUG] [Thread-210122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:46:23.376 [DEBUG] [Thread-210122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:46:23.380 [DEBUG] [Thread-210122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:46:23.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:46:23.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:46:23.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:46:23.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:46:23.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:46:23.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:46:23.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:46:23.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:46:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:46:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.740024 -999.00  +17.30  24.26     41   +4.30 1 1 1 1 1   540    0 12.16 -40.12 ----- 28.1 24.3 144.5 36.1 17.8 -25.7 17.8 -24.8 17.6 -23.5 17.9 -24.7
2026-02-15T19:46:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:46:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:46:23.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.740024
2026-02-15T19:46:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:46:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:46:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:46:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:46:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:46:23.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:45:55', tmtdew=15.04, humidity=36.47, cloud=0.0, wind=29.29, temperature=17.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:45:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:46:23.407 [DEBUG] [Thread-210122] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:46:23.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:46:23.501 [DEBUG] [Thread-210125] [transport.py] [_log()] starting thread (client mode): 0xa57b2b60
2026-02-15T19:46:23.501 [DEBUG] [Thread-210125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:46:23.516 [DEBUG] [Thread-210125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:46:23.516 [INFO] [Thread-210125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:46:23.524 [DEBUG] [Thread-210125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:46:23.524 [DEBUG] [Thread-210125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:46:23.524 [DEBUG] [Thread-210125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] client lang: <none>
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] server lang: <none>
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] kex follows: False
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] Compression: none
2026-02-15T19:46:23.525 [DEBUG] [Thread-210125] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:46:23.588 [DEBUG] [Thread-210125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:46:23.588 [DEBUG] [Thread-210125] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:46:23.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:46:23.589 [DEBUG] [Thread-210125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:46:23.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:46:23.646 [DEBUG] [Thread-210125] [transport.py] [_log()] userauth is OK
2026-02-15T19:46:23.646 [DEBUG] [Thread-210125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:46:23.646 [DEBUG] [Thread-210125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:46:23.646 [DEBUG] [Thread-210125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:46:23.646 [DEBUG] [Thread-210125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:46:23.660 [INFO] [Thread-210125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:46:23.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:46:23.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:46:24.073 [DEBUG] [Thread-210127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:24.486 [DEBUG] [Thread-210125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:46:24.486 [DEBUG] [Thread-210125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:46:24.540 [DEBUG] [Thread-210125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:46:24.541 [DEBUG] [Thread-210125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:46:24.549 [DEBUG] [Thread-210125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:46:24.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:46:24.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:46:24.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:46:24.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:46:24.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:46:24.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:46:24.584 [DEBUG] [Thread-210125] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:46:39.123 [DEBUG] [Thread-210128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:54.159 [DEBUG] [Thread-210129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:46:54.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:46:54.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:46:54.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:46:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 46, 30), 15.03, 36.47, 0.0, 31.02, 17.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:46:56.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:46:30
2026-02-15T19:46:57.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:46:57.213 [DEBUG] [Thread-210130] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-15T19:46:57.213 [DEBUG] [Thread-210130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:46:57.232 [DEBUG] [Thread-210130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:46:57.232 [INFO] [Thread-210130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] client lang: <none>
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] server lang: <none>
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] kex follows: False
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:46:57.235 [DEBUG] [Thread-210130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:46:57.236 [DEBUG] [Thread-210130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:46:57.236 [DEBUG] [Thread-210130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:46:57.236 [DEBUG] [Thread-210130] [transport.py] [_log()] Compression: none
2026-02-15T19:46:57.236 [DEBUG] [Thread-210130] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:46:57.245 [DEBUG] [Thread-210130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:46:57.245 [DEBUG] [Thread-210130] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:46:57.246 [DEBUG] [Thread-210130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:46:57.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:46:57.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:46:57.247 [DEBUG] [Thread-210130] [transport.py] [_log()] userauth is OK
2026-02-15T19:46:57.247 [DEBUG] [Thread-210130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:46:57.247 [DEBUG] [Thread-210130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:46:57.248 [DEBUG] [Thread-210130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:46:57.248 [DEBUG] [Thread-210130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:46:57.272 [INFO] [Thread-210130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:46:57.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:46:57.923 [DEBUG] [Thread-210130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:46:57.923 [DEBUG] [Thread-210130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:46:57.924 [DEBUG] [Thread-210130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:46:57.964 [DEBUG] [Thread-210130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:46:57.964 [DEBUG] [Thread-210130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:46:57.966 [DEBUG] [Thread-210130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:46:57.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:46:57.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:46:57.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:46:57.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:46:57.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:46:57.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:46:57.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:46:57.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:46:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:46:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.740371 -999.00  +17.30  26.87     42   +4.30 1 1 1 1 1   519    0 12.22 -36.80 ----- 20.1 26.9 147.0 33.7 17.8 -25.7 17.8 -24.7 17.6 -23.6 17.8 -24.8
2026-02-15T19:46:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:46:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:46:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.740371
2026-02-15T19:46:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:46:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:46:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:46:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:46:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:46:57.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:46:30', tmtdew=15.03, humidity=36.47, cloud=0.0, wind=31.02, temperature=17.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:46:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:46:57.985 [DEBUG] [Thread-210130] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:46:58.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:46:58.080 [DEBUG] [Thread-210133] [transport.py] [_log()] starting thread (client mode): 0xa57e30d0
2026-02-15T19:46:58.080 [DEBUG] [Thread-210133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:46:58.096 [DEBUG] [Thread-210133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:46:58.096 [INFO] [Thread-210133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:46:58.104 [DEBUG] [Thread-210133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:46:58.104 [DEBUG] [Thread-210133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:46:58.104 [DEBUG] [Thread-210133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:46:58.104 [DEBUG] [Thread-210133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:58.104 [DEBUG] [Thread-210133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] client lang: <none>
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] server lang: <none>
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] kex follows: False
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] Compression: none
2026-02-15T19:46:58.105 [DEBUG] [Thread-210133] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:46:58.162 [DEBUG] [Thread-210133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:46:58.162 [DEBUG] [Thread-210133] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:46:58.163 [DEBUG] [Thread-210133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:46:58.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:46:58.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:46:58.218 [DEBUG] [Thread-210133] [transport.py] [_log()] userauth is OK
2026-02-15T19:46:58.219 [DEBUG] [Thread-210133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:46:58.219 [DEBUG] [Thread-210133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:46:58.219 [DEBUG] [Thread-210133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:46:58.219 [DEBUG] [Thread-210133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:46:58.241 [INFO] [Thread-210133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:46:58.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:46:58.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:46:59.081 [DEBUG] [Thread-210133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:46:59.082 [DEBUG] [Thread-210133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:46:59.129 [DEBUG] [Thread-210133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:46:59.129 [DEBUG] [Thread-210133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:46:59.139 [DEBUG] [Thread-210133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:46:59.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:46:59.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:46:59.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:46:59.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:46:59.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:46:59.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:46:59.175 [DEBUG] [Thread-210133] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:47:06.595 [DEBUG] [Thread-210135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:47:09.197 [DEBUG] [Thread-210136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:47:09.825 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:47:09.827 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:47:24.248 [DEBUG] [Thread-210137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:47:29.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:47:29.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:47:29.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:47:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 47, 5), 15.02, 36.5, 0.0, 29.7, 17.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:47:31.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:47:05
2026-02-15T19:47:31.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:47:31.568 [DEBUG] [Thread-210138] [transport.py] [_log()] starting thread (client mode): 0xa2dc39d0
2026-02-15T19:47:31.569 [DEBUG] [Thread-210138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:47:31.591 [DEBUG] [Thread-210138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:47:31.591 [INFO] [Thread-210138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:47:31.594 [DEBUG] [Thread-210138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] client lang: <none>
2026-02-15T19:47:31.595 [DEBUG] [Thread-210138] [transport.py] [_log()] server lang: <none>
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] kex follows: False
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] Compression: none
2026-02-15T19:47:31.596 [DEBUG] [Thread-210138] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:47:31.615 [DEBUG] [Thread-210138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:47:31.616 [DEBUG] [Thread-210138] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:47:31.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:47:31.617 [DEBUG] [Thread-210138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:47:31.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:47:31.619 [DEBUG] [Thread-210138] [transport.py] [_log()] userauth is OK
2026-02-15T19:47:31.619 [DEBUG] [Thread-210138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:47:31.619 [DEBUG] [Thread-210138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:47:31.619 [DEBUG] [Thread-210138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:47:31.619 [DEBUG] [Thread-210138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:47:31.643 [INFO] [Thread-210138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:47:31.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:47:32.303 [DEBUG] [Thread-210138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:47:32.303 [DEBUG] [Thread-210138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:47:32.304 [DEBUG] [Thread-210138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:47:32.344 [DEBUG] [Thread-210138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:47:32.345 [DEBUG] [Thread-210138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:47:32.347 [DEBUG] [Thread-210138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:47:32.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:47:32.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:47:32.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:47:32.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:47:32.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:47:32.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:47:32.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:47:32.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:47:32.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:47:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.740718 -999.00  +17.30  29.59     42   +4.30 1 1 1 1 1   497    0 12.22 -36.00 ----- 28.0 29.6 144.2 34.4 17.8 -25.6 17.8 -24.6 17.6 -23.4 17.8 -24.8
2026-02-15T19:47:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:47:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:47:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.740718
2026-02-15T19:47:32.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:47:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:47:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:47:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:47:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:47:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:47:05', tmtdew=15.02, humidity=36.5, cloud=0.0, wind=29.7, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:46:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:47:32.374 [DEBUG] [Thread-210138] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:47:32.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:47:32.474 [DEBUG] [Thread-210141] [transport.py] [_log()] starting thread (client mode): 0xa2d79600
2026-02-15T19:47:32.474 [DEBUG] [Thread-210141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:47:32.498 [DEBUG] [Thread-210141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:47:32.499 [INFO] [Thread-210141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:47:32.506 [DEBUG] [Thread-210141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] client lang: <none>
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] server lang: <none>
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] kex follows: False
2026-02-15T19:47:32.507 [DEBUG] [Thread-210141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:47:32.508 [DEBUG] [Thread-210141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:47:32.508 [DEBUG] [Thread-210141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:47:32.508 [DEBUG] [Thread-210141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:47:32.508 [DEBUG] [Thread-210141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:47:32.508 [DEBUG] [Thread-210141] [transport.py] [_log()] Compression: none
2026-02-15T19:47:32.508 [DEBUG] [Thread-210141] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:47:32.567 [DEBUG] [Thread-210141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:47:32.567 [DEBUG] [Thread-210141] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:47:32.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:47:32.568 [DEBUG] [Thread-210141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:47:32.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:47:32.623 [DEBUG] [Thread-210141] [transport.py] [_log()] userauth is OK
2026-02-15T19:47:32.623 [DEBUG] [Thread-210141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:47:32.624 [DEBUG] [Thread-210141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:47:32.624 [DEBUG] [Thread-210141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:47:32.624 [DEBUG] [Thread-210141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:47:32.642 [INFO] [Thread-210141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:47:32.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:47:32.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:47:33.462 [DEBUG] [Thread-210141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:47:33.462 [DEBUG] [Thread-210141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:47:33.510 [DEBUG] [Thread-210141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:47:33.510 [DEBUG] [Thread-210141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:47:33.520 [DEBUG] [Thread-210141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:47:33.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:47:33.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:47:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:47:33.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:47:33.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:47:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:47:33.560 [DEBUG] [Thread-210141] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:47:39.287 [DEBUG] [Thread-210143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:47:54.348 [DEBUG] [Thread-210144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:03.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:48:03.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:48:03.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:48:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 47, 41), 15.2, 36.14, 0.0, 31.65, 17.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:48:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:47:41
2026-02-15T19:48:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:48:06.067 [DEBUG] [Thread-210145] [transport.py] [_log()] starting thread (client mode): 0xa57b0e20
2026-02-15T19:48:06.067 [DEBUG] [Thread-210145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:48:06.088 [DEBUG] [Thread-210145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:48:06.088 [INFO] [Thread-210145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] client lang: <none>
2026-02-15T19:48:06.092 [DEBUG] [Thread-210145] [transport.py] [_log()] server lang: <none>
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] kex follows: False
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] Compression: none
2026-02-15T19:48:06.093 [DEBUG] [Thread-210145] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:48:06.111 [DEBUG] [Thread-210145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:48:06.111 [DEBUG] [Thread-210145] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:48:06.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:48:06.112 [DEBUG] [Thread-210145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:48:06.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:48:06.114 [DEBUG] [Thread-210145] [transport.py] [_log()] userauth is OK
2026-02-15T19:48:06.114 [DEBUG] [Thread-210145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:48:06.114 [DEBUG] [Thread-210145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:48:06.114 [DEBUG] [Thread-210145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:48:06.114 [DEBUG] [Thread-210145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:48:06.132 [INFO] [Thread-210145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:48:06.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:48:06.672 [DEBUG] [Thread-210147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:06.920 [DEBUG] [Thread-210145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:48:06.920 [DEBUG] [Thread-210145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:48:06.921 [DEBUG] [Thread-210145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:48:06.961 [DEBUG] [Thread-210145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:48:06.961 [DEBUG] [Thread-210145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:48:06.964 [DEBUG] [Thread-210145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:48:06.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:48:06.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:48:06.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:48:06.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:48:06.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:48:06.984 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:48:06.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:48:06.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:48:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:48:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.741066 -999.00  +17.30  24.03     42   +4.30 1 1 1 1 1   475    0 12.25 -33.87 ----- 21.6 24.0 144.2 31.8 17.8 -25.7 17.8 -24.7 17.5 -23.5 17.8 -24.8
2026-02-15T19:48:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:48:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:48:06.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.741066
2026-02-15T19:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:48:06.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:47:41', tmtdew=15.2, humidity=36.14, cloud=0.0, wind=31.65, temperature=17.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:47:08.102', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:48:06.987 [DEBUG] [Thread-210145] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:48:07.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:48:07.083 [DEBUG] [Thread-210149] [transport.py] [_log()] starting thread (client mode): 0xa57d6f80
2026-02-15T19:48:07.084 [DEBUG] [Thread-210149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:48:07.098 [DEBUG] [Thread-210149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:48:07.098 [INFO] [Thread-210149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] client lang: <none>
2026-02-15T19:48:07.105 [DEBUG] [Thread-210149] [transport.py] [_log()] server lang: <none>
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] kex follows: False
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] Compression: none
2026-02-15T19:48:07.106 [DEBUG] [Thread-210149] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:48:07.162 [DEBUG] [Thread-210149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:48:07.163 [DEBUG] [Thread-210149] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:48:07.163 [DEBUG] [Thread-210149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:48:07.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:48:07.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:48:07.218 [DEBUG] [Thread-210149] [transport.py] [_log()] userauth is OK
2026-02-15T19:48:07.218 [DEBUG] [Thread-210149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:48:07.218 [DEBUG] [Thread-210149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:48:07.218 [DEBUG] [Thread-210149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:48:07.219 [DEBUG] [Thread-210149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:48:07.241 [INFO] [Thread-210149] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:48:07.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:48:07.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:48:08.136 [DEBUG] [Thread-210149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:48:08.136 [DEBUG] [Thread-210149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:48:08.184 [DEBUG] [Thread-210149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:48:08.185 [DEBUG] [Thread-210149] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:48:08.193 [DEBUG] [Thread-210149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:48:08.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:48: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')
2026-02-15T19:48:08.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:48:08.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:48:08.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:48:08.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:48:08.227 [DEBUG] [Thread-210149] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:48:09.382 [DEBUG] [Thread-210151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:14.099 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:14.100 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:24.433 [DEBUG] [Thread-210152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:38.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:48:38.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:48:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:48:39.469 [DEBUG] [Thread-210153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:48:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 48, 17), 14.94, 36.6, 0.0, 26.55, 17.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:48:40.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:48:17
2026-02-15T19:48:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:48:40.666 [DEBUG] [Thread-210154] [transport.py] [_log()] starting thread (client mode): 0xa2d7b670
2026-02-15T19:48:40.666 [DEBUG] [Thread-210154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:48:40.686 [DEBUG] [Thread-210154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:48:40.686 [INFO] [Thread-210154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] client lang: <none>
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] server lang: <none>
2026-02-15T19:48:40.689 [DEBUG] [Thread-210154] [transport.py] [_log()] kex follows: False
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] Compression: none
2026-02-15T19:48:40.690 [DEBUG] [Thread-210154] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:48:40.711 [DEBUG] [Thread-210154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:48:40.712 [DEBUG] [Thread-210154] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:48:40.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:48:40.713 [DEBUG] [Thread-210154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:48:40.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:48:40.716 [DEBUG] [Thread-210154] [transport.py] [_log()] userauth is OK
2026-02-15T19:48:40.716 [DEBUG] [Thread-210154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:48:40.716 [DEBUG] [Thread-210154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:48:40.716 [DEBUG] [Thread-210154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:48:40.716 [DEBUG] [Thread-210154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:48:40.740 [INFO] [Thread-210154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:48:40.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:48:41.382 [DEBUG] [Thread-210154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:48:41.382 [DEBUG] [Thread-210154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:48:41.383 [DEBUG] [Thread-210154] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:48:41.423 [DEBUG] [Thread-210154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:48:41.424 [DEBUG] [Thread-210154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:48:41.427 [DEBUG] [Thread-210154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:48:41.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:48:41.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:48:41.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:48:41.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:48:41.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:48:41.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:48:41.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:48:41.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:48:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:48:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.741760 -999.00  +17.30  16.38     42   +4.30 1 1 1 1 1   431    0 12.13 -37.75 ----- 18.9 16.4 155.7 27.1 17.8 -25.6 17.7 -24.7 17.6 -23.6 17.8 -24.9
2026-02-15T19:48:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:48:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:48:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.741760
2026-02-15T19:48:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:48:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:48:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:48:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:48:41.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:48:41.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:48:17', tmtdew=14.94, humidity=36.6, cloud=0.0, wind=26.55, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:48:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:48:41.453 [DEBUG] [Thread-210154] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:48: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-02-15T19:48:41.547 [DEBUG] [Thread-210157] [transport.py] [_log()] starting thread (client mode): 0xa2d56e00
2026-02-15T19:48:41.548 [DEBUG] [Thread-210157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:48:41.562 [DEBUG] [Thread-210157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:48:41.562 [INFO] [Thread-210157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:48:41.570 [DEBUG] [Thread-210157] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:48:41.570 [DEBUG] [Thread-210157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:48:41.570 [DEBUG] [Thread-210157] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:48:41.570 [DEBUG] [Thread-210157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:41.570 [DEBUG] [Thread-210157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:48:41.570 [DEBUG] [Thread-210157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] client lang: <none>
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] server lang: <none>
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] kex follows: False
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:48:41.571 [DEBUG] [Thread-210157] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:48:41.572 [DEBUG] [Thread-210157] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:48:41.572 [DEBUG] [Thread-210157] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:48:41.572 [DEBUG] [Thread-210157] [transport.py] [_log()] Compression: none
2026-02-15T19:48:41.572 [DEBUG] [Thread-210157] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:48:41.626 [DEBUG] [Thread-210157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:48:41.627 [DEBUG] [Thread-210157] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:48:41.627 [DEBUG] [Thread-210157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:48:41.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:48:41.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:48:41.683 [DEBUG] [Thread-210157] [transport.py] [_log()] userauth is OK
2026-02-15T19:48:41.683 [DEBUG] [Thread-210157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:48:41.683 [DEBUG] [Thread-210157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:48:41.683 [DEBUG] [Thread-210157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:48:41.683 [DEBUG] [Thread-210157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:48:41.705 [INFO] [Thread-210157] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:48:41.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:48:41.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:48:42.517 [DEBUG] [Thread-210157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:48:42.517 [DEBUG] [Thread-210157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:48:42.566 [DEBUG] [Thread-210157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:48:42.566 [DEBUG] [Thread-210157] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:48:42.575 [DEBUG] [Thread-210157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:48:42.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:48:42.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:48:42.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:48:42.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:48:42.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:48:42.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:48:42.611 [DEBUG] [Thread-210157] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:48:54.503 [DEBUG] [Thread-210159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:06.739 [DEBUG] [Thread-210160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:09.563 [DEBUG] [Thread-210161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:49:12.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:49:12.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:49:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 48, 52), 14.91, 36.65, 0.0, 32.11, 17.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:49:14.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:48:52
2026-02-15T19:49:14.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:49:14.950 [DEBUG] [Thread-210162] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-15T19:49:14.951 [DEBUG] [Thread-210162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:49:14.973 [DEBUG] [Thread-210162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:49:14.973 [INFO] [Thread-210162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] client lang: <none>
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] server lang: <none>
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] kex follows: False
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:49:14.976 [DEBUG] [Thread-210162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:49:14.977 [DEBUG] [Thread-210162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:49:14.977 [DEBUG] [Thread-210162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:49:14.977 [DEBUG] [Thread-210162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:49:14.977 [DEBUG] [Thread-210162] [transport.py] [_log()] Compression: none
2026-02-15T19:49:14.977 [DEBUG] [Thread-210162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:49:14.987 [DEBUG] [Thread-210162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:49:14.987 [DEBUG] [Thread-210162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:49:14.988 [DEBUG] [Thread-210162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:49:14.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:49:14.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:49:14.991 [DEBUG] [Thread-210162] [transport.py] [_log()] userauth is OK
2026-02-15T19:49:14.991 [DEBUG] [Thread-210162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:49:14.991 [DEBUG] [Thread-210162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:49:14.991 [DEBUG] [Thread-210162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:49:14.992 [DEBUG] [Thread-210162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:49:15.006 [INFO] [Thread-210162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:49:15.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:49:15.650 [DEBUG] [Thread-210162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:49:15.651 [DEBUG] [Thread-210162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:49:15.651 [DEBUG] [Thread-210162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:49:15.692 [DEBUG] [Thread-210162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:49:15.693 [DEBUG] [Thread-210162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:49:15.696 [DEBUG] [Thread-210162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:49:15.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:49:15.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:49:15.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:49:15.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:49:15.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:49:15.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:49:15.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:49:15.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:49:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:49:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.742107 -999.00  +17.30  15.94     42   +4.30 1 1 1 1 1   408    0 12.02 -35.73 ----- 14.3 15.9 147.6 28.1 17.8 -25.7 17.7 -24.6 17.5 -23.7 17.8 -24.8
2026-02-15T19:49:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:49:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:49:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.742107
2026-02-15T19:49:15.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:49:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:49:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:49:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:49:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:49:15.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:48:52', tmtdew=14.91, humidity=36.65, cloud=0.0, wind=32.11, temperature=17.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:48:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:49:15.730 [DEBUG] [Thread-210162] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:49:15.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:49:15.837 [DEBUG] [Thread-210165] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ae0
2026-02-15T19:49:15.837 [DEBUG] [Thread-210165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:49:15.852 [DEBUG] [Thread-210165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:49:15.852 [INFO] [Thread-210165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:49:15.859 [DEBUG] [Thread-210165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] client lang: <none>
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] server lang: <none>
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] kex follows: False
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] Compression: none
2026-02-15T19:49:15.860 [DEBUG] [Thread-210165] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:49:15.919 [DEBUG] [Thread-210165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:49:15.920 [DEBUG] [Thread-210165] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:49:15.920 [DEBUG] [Thread-210165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:49:15.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:49:15.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:49:15.984 [DEBUG] [Thread-210165] [transport.py] [_log()] userauth is OK
2026-02-15T19:49:15.985 [DEBUG] [Thread-210165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:49:15.985 [DEBUG] [Thread-210165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:49:15.985 [DEBUG] [Thread-210165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:49:15.985 [DEBUG] [Thread-210165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:49:16.007 [INFO] [Thread-210165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:49:16.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:49:16.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:49:16.881 [DEBUG] [Thread-210165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:49:16.881 [DEBUG] [Thread-210165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:49:16.928 [DEBUG] [Thread-210165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:49:16.928 [DEBUG] [Thread-210165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:49:16.938 [DEBUG] [Thread-210165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:49:16.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:49:16.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:49:16.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:49:16.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:49:16.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:49:16.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:49:16.973 [DEBUG] [Thread-210165] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:49:18.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:18.321 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:24.601 [DEBUG] [Thread-210167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:39.662 [DEBUG] [Thread-210168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:49:46.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:49:46.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:49:47.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:49:48.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 49, 28), 14.91, 36.67, 0.0, 29.73, 17.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:49:48.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:49:28
2026-02-15T19:49:49.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:49:49.353 [DEBUG] [Thread-210169] [transport.py] [_log()] starting thread (client mode): 0xa2d55240
2026-02-15T19:49:49.353 [DEBUG] [Thread-210169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:49:49.373 [DEBUG] [Thread-210169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:49:49.373 [INFO] [Thread-210169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:49:49.376 [DEBUG] [Thread-210169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:49:49.376 [DEBUG] [Thread-210169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] client lang: <none>
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] server lang: <none>
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] kex follows: False
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:49:49.377 [DEBUG] [Thread-210169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:49:49.378 [DEBUG] [Thread-210169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:49:49.378 [DEBUG] [Thread-210169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:49:49.378 [DEBUG] [Thread-210169] [transport.py] [_log()] Compression: none
2026-02-15T19:49:49.378 [DEBUG] [Thread-210169] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:49:49.397 [DEBUG] [Thread-210169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:49:49.397 [DEBUG] [Thread-210169] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:49:49.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:49:49.398 [DEBUG] [Thread-210169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:49:49.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:49:49.400 [DEBUG] [Thread-210169] [transport.py] [_log()] userauth is OK
2026-02-15T19:49:49.401 [DEBUG] [Thread-210169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:49:49.401 [DEBUG] [Thread-210169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:49:49.401 [DEBUG] [Thread-210169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:49:49.401 [DEBUG] [Thread-210169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:49:49.419 [INFO] [Thread-210169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:49:49.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:49:50.021 [DEBUG] [Thread-210169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:49:50.022 [DEBUG] [Thread-210169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:49:50.022 [DEBUG] [Thread-210169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:49:50.062 [DEBUG] [Thread-210169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:49:50.063 [DEBUG] [Thread-210169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:49:50.066 [DEBUG] [Thread-210169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:49:50.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:49:50.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:49:50.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:49:50.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:49:50.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:49:50.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:49:50.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:49:50.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:49:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:49:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.742454 -999.00  +17.20  17.69     42   +4.30 1 1 1 1 1   386    0 12.31 -34.01 ----- 19.7 17.7 140.6 26.9 17.7 -25.7 17.7 -24.7 17.4 -23.6 17.8 -24.9
2026-02-15T19:49:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:49:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:49:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.742454
2026-02-15T19:49:50.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:49:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:49:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:49:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:49:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:49:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:49:28', tmtdew=14.91, humidity=36.67, cloud=0.0, wind=29.73, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:49:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:49:50.095 [DEBUG] [Thread-210169] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:49:50.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:49:50.192 [DEBUG] [Thread-210172] [transport.py] [_log()] starting thread (client mode): 0xa2d6d1e0
2026-02-15T19:49:50.193 [DEBUG] [Thread-210172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:49:50.207 [DEBUG] [Thread-210172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:49:50.207 [INFO] [Thread-210172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:49:50.214 [DEBUG] [Thread-210172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] client lang: <none>
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] server lang: <none>
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] kex follows: False
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:49:50.215 [DEBUG] [Thread-210172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:49:50.216 [DEBUG] [Thread-210172] [transport.py] [_log()] Compression: none
2026-02-15T19:49:50.216 [DEBUG] [Thread-210172] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:49:50.275 [DEBUG] [Thread-210172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:49:50.276 [DEBUG] [Thread-210172] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:49:50.276 [DEBUG] [Thread-210172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:49:50.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:49:50.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:49:50.331 [DEBUG] [Thread-210172] [transport.py] [_log()] userauth is OK
2026-02-15T19:49:50.331 [DEBUG] [Thread-210172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:49:50.331 [DEBUG] [Thread-210172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:49:50.331 [DEBUG] [Thread-210172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:49:50.331 [DEBUG] [Thread-210172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:49:50.350 [INFO] [Thread-210172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:49:50.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:49:50.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:49:51.202 [DEBUG] [Thread-210172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:49:51.203 [DEBUG] [Thread-210172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:49:51.250 [DEBUG] [Thread-210172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:49:51.250 [DEBUG] [Thread-210172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:49:51.259 [DEBUG] [Thread-210172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:49:51.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:49:51.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:49:51.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:49:51.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:49:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:49:51.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:49:51.293 [DEBUG] [Thread-210172] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:49:54.700 [DEBUG] [Thread-210174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:06.798 [DEBUG] [Thread-210175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:09.754 [DEBUG] [Thread-210176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:21.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:50:21.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:50:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:50:22.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:22.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 50, 4), 14.93, 36.6, 0.0, 31.79, 17.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:50:23.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:50:04
2026-02-15T19:50:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:50:23.700 [DEBUG] [Thread-210177] [transport.py] [_log()] starting thread (client mode): 0xa2dc04c0
2026-02-15T19:50:23.700 [DEBUG] [Thread-210177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:50:23.720 [DEBUG] [Thread-210177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:50:23.720 [INFO] [Thread-210177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:50:23.723 [DEBUG] [Thread-210177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:50:23.723 [DEBUG] [Thread-210177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:50:23.723 [DEBUG] [Thread-210177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:50:23.723 [DEBUG] [Thread-210177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:23.723 [DEBUG] [Thread-210177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] client lang: <none>
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] server lang: <none>
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] kex follows: False
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] Compression: none
2026-02-15T19:50:23.724 [DEBUG] [Thread-210177] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:50:23.742 [DEBUG] [Thread-210177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:50:23.743 [DEBUG] [Thread-210177] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:50:23.743 [DEBUG] [Thread-210177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:50:23.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:50:23.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:50:23.745 [DEBUG] [Thread-210177] [transport.py] [_log()] userauth is OK
2026-02-15T19:50:23.746 [DEBUG] [Thread-210177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:50:23.746 [DEBUG] [Thread-210177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:50:23.746 [DEBUG] [Thread-210177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:50:23.746 [DEBUG] [Thread-210177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:50:23.770 [INFO] [Thread-210177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:50:23.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:50:24.409 [DEBUG] [Thread-210177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:50:24.409 [DEBUG] [Thread-210177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:50:24.409 [DEBUG] [Thread-210177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:50:24.450 [DEBUG] [Thread-210177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:50:24.450 [DEBUG] [Thread-210177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:50:24.452 [DEBUG] [Thread-210177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:50:24.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:50:24.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:50:24.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:50:24.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:50:24.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:50:24.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:50:24.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.742802 -999.00  +17.20  16.73     42   +4.30 1 1 1 1 1   365    0 12.26 -31.47 ----- 23.0 16.7 154.1 29.4 17.7 -25.7 17.6 -24.5 17.4 -23.7 17.7 -24.8
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.742802
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:50:24.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:50:04', tmtdew=14.93, humidity=36.6, cloud=0.0, wind=31.79, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:49:38.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:50:24.472 [DEBUG] [Thread-210177] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:50:24.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:50:24.557 [DEBUG] [Thread-210180] [transport.py] [_log()] starting thread (client mode): 0xa2d56b90
2026-02-15T19:50:24.557 [DEBUG] [Thread-210180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:50:24.571 [DEBUG] [Thread-210180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:50:24.571 [INFO] [Thread-210180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:50:24.582 [DEBUG] [Thread-210180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] client lang: <none>
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] server lang: <none>
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] kex follows: False
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] Compression: none
2026-02-15T19:50:24.583 [DEBUG] [Thread-210180] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:50:24.638 [DEBUG] [Thread-210180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:50:24.639 [DEBUG] [Thread-210180] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:50:24.639 [DEBUG] [Thread-210180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:50:24.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:50:24.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:50:24.698 [DEBUG] [Thread-210180] [transport.py] [_log()] userauth is OK
2026-02-15T19:50:24.698 [DEBUG] [Thread-210180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:50:24.699 [DEBUG] [Thread-210180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:50:24.699 [DEBUG] [Thread-210180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:50:24.699 [DEBUG] [Thread-210180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:50:24.718 [INFO] [Thread-210180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:50:24.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:50:24.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:50:24.789 [DEBUG] [Thread-210182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:25.552 [DEBUG] [Thread-210180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:50:25.552 [DEBUG] [Thread-210180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:50:25.600 [DEBUG] [Thread-210180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:50:25.600 [DEBUG] [Thread-210180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:50:25.608 [DEBUG] [Thread-210180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:50:25.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:50:25.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:50:25.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:50:25.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:50:25.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:50:25.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:50:25.640 [DEBUG] [Thread-210180] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:50:39.837 [DEBUG] [Thread-210183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:54.874 [DEBUG] [Thread-210184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:50:55.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:50:55.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:50:55.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:50:58.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 50, 39), 15.12, 36.34, 0.0, 39.69, 17.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:50:58.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:50:39
2026-02-15T19:50:58.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:50:58.698 [DEBUG] [Thread-210185] [transport.py] [_log()] starting thread (client mode): 0xa2d54520
2026-02-15T19:50:58.698 [DEBUG] [Thread-210185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:50:58.718 [DEBUG] [Thread-210185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:50:58.718 [INFO] [Thread-210185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] client lang: <none>
2026-02-15T19:50:58.722 [DEBUG] [Thread-210185] [transport.py] [_log()] server lang: <none>
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] kex follows: False
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] Compression: none
2026-02-15T19:50:58.723 [DEBUG] [Thread-210185] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:50:58.741 [DEBUG] [Thread-210185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:50:58.741 [DEBUG] [Thread-210185] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:50:58.742 [DEBUG] [Thread-210185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:50:58.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:50:58.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:50:58.744 [DEBUG] [Thread-210185] [transport.py] [_log()] userauth is OK
2026-02-15T19:50:58.744 [DEBUG] [Thread-210185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:50:58.744 [DEBUG] [Thread-210185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:50:58.744 [DEBUG] [Thread-210185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:50:58.744 [DEBUG] [Thread-210185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:50:58.763 [INFO] [Thread-210185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:50:58.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:50:59.561 [DEBUG] [Thread-210185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:50:59.562 [DEBUG] [Thread-210185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:50:59.562 [DEBUG] [Thread-210185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:50:59.602 [DEBUG] [Thread-210185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:50:59.603 [DEBUG] [Thread-210185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:50:59.606 [DEBUG] [Thread-210185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:50:59.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:50:59.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:50:59.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:50:59.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:50:59.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:50:59.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:50:59.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:50:59.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:50:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:50:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.743148 -999.00  +17.20  24.66     42   +4.30 1 1 1 1 1   343    0 12.20 -32.58 ----- 23.3 24.7 153.0 35.4 17.7 -25.6 17.6 -24.6 17.5 -23.6 17.7 -24.6
2026-02-15T19:50:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:50:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:50:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.743148
2026-02-15T19:50:59.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:50:59.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:50:59.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:50:59.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:50:59.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:50:59.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:50:39', tmtdew=15.12, humidity=36.34, cloud=0.0, wind=39.69, temperature=17.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:50:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:50:59.634 [DEBUG] [Thread-210185] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:50:59.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:50:59.734 [DEBUG] [Thread-210188] [transport.py] [_log()] starting thread (client mode): 0xa2d3dea0
2026-02-15T19:50:59.734 [DEBUG] [Thread-210188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:50:59.754 [DEBUG] [Thread-210188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:50:59.754 [INFO] [Thread-210188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] client lang: <none>
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] server lang: <none>
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] kex follows: False
2026-02-15T19:50:59.765 [DEBUG] [Thread-210188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:50:59.766 [DEBUG] [Thread-210188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:50:59.766 [DEBUG] [Thread-210188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:50:59.766 [DEBUG] [Thread-210188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:50:59.766 [DEBUG] [Thread-210188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:50:59.766 [DEBUG] [Thread-210188] [transport.py] [_log()] Compression: none
2026-02-15T19:50:59.766 [DEBUG] [Thread-210188] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:50:59.826 [DEBUG] [Thread-210188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:50:59.827 [DEBUG] [Thread-210188] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:50:59.827 [DEBUG] [Thread-210188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:50:59.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:50:59.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:50:59.883 [DEBUG] [Thread-210188] [transport.py] [_log()] userauth is OK
2026-02-15T19:50:59.883 [DEBUG] [Thread-210188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:50:59.883 [DEBUG] [Thread-210188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:50:59.883 [DEBUG] [Thread-210188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:50:59.883 [DEBUG] [Thread-210188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:50:59.903 [INFO] [Thread-210188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:50:59.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:50:59.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:51:00.737 [DEBUG] [Thread-210188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:51:00.737 [DEBUG] [Thread-210188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:51:00.785 [DEBUG] [Thread-210188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:51:00.786 [DEBUG] [Thread-210188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:51:00.795 [DEBUG] [Thread-210188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:51:00.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:51:00.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:51:00.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:51:00.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:51:00.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:51:00.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:51:00.832 [DEBUG] [Thread-210188] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:51:06.856 [DEBUG] [Thread-210190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:51:09.910 [DEBUG] [Thread-210191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:51:24.956 [DEBUG] [Thread-210192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:51:27.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:51:27.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:51:30.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:51:30.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:51:30.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:51:32.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 51, 14), 14.88, 37.12, 0.0, 32.85, 17.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:51:32.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:51:14
2026-02-15T19:51:33.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:51:33.289 [DEBUG] [Thread-210193] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-15T19:51:33.290 [DEBUG] [Thread-210193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:51:33.309 [DEBUG] [Thread-210193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:51:33.310 [INFO] [Thread-210193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] client lang: <none>
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] server lang: <none>
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] kex follows: False
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:51:33.312 [DEBUG] [Thread-210193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:51:33.313 [DEBUG] [Thread-210193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:51:33.313 [DEBUG] [Thread-210193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:51:33.313 [DEBUG] [Thread-210193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:51:33.313 [DEBUG] [Thread-210193] [transport.py] [_log()] Compression: none
2026-02-15T19:51:33.313 [DEBUG] [Thread-210193] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:51:33.337 [DEBUG] [Thread-210193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:51:33.338 [DEBUG] [Thread-210193] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:51:33.338 [DEBUG] [Thread-210193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:51:33.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:51:33.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:51:33.341 [DEBUG] [Thread-210193] [transport.py] [_log()] userauth is OK
2026-02-15T19:51:33.342 [DEBUG] [Thread-210193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:51:33.342 [DEBUG] [Thread-210193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:51:33.342 [DEBUG] [Thread-210193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:51:33.342 [DEBUG] [Thread-210193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:51:33.361 [INFO] [Thread-210193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:51:33.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:51:33.922 [DEBUG] [Thread-210193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:51:33.923 [DEBUG] [Thread-210193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:51:33.923 [DEBUG] [Thread-210193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:51:33.963 [DEBUG] [Thread-210193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:51:33.964 [DEBUG] [Thread-210193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:51:33.967 [DEBUG] [Thread-210193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:51:33.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:51:33.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:51:33.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:51:33.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:51:34.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:51:34.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:51:34.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:51:34.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:51:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:51:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.743844 -999.00  +17.20  27.69     42   +4.30 1 1 1 1 1   302    0 12.26 -29.26 ----- 28.1 27.7 142.6 31.5 17.6 -25.6 17.6 -24.7 17.4 -23.4 17.7 -24.8
2026-02-15T19:51:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:51:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:51:34.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.743844
2026-02-15T19:51:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:51:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:51:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:51:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:51:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:51:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:51:14', tmtdew=14.88, humidity=37.12, cloud=0.0, wind=32.85, temperature=17.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:51:08.122', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:51:34.005 [DEBUG] [Thread-210193] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:51:34.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:51:34.104 [DEBUG] [Thread-210196] [transport.py] [_log()] starting thread (client mode): 0xa57e1000
2026-02-15T19:51:34.104 [DEBUG] [Thread-210196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:51:34.121 [DEBUG] [Thread-210196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:51:34.121 [INFO] [Thread-210196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:51:34.128 [DEBUG] [Thread-210196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] client lang: <none>
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] server lang: <none>
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] kex follows: False
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:51:34.129 [DEBUG] [Thread-210196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:51:34.130 [DEBUG] [Thread-210196] [transport.py] [_log()] Compression: none
2026-02-15T19:51:34.130 [DEBUG] [Thread-210196] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:51:34.185 [DEBUG] [Thread-210196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:51:34.186 [DEBUG] [Thread-210196] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:51:34.187 [DEBUG] [Thread-210196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:51:34.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:51:34.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:51:34.243 [DEBUG] [Thread-210196] [transport.py] [_log()] userauth is OK
2026-02-15T19:51:34.243 [DEBUG] [Thread-210196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:51:34.243 [DEBUG] [Thread-210196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:51:34.243 [DEBUG] [Thread-210196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:51:34.243 [DEBUG] [Thread-210196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:51:34.263 [INFO] [Thread-210196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:51:34.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:51:34.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:51:35.088 [DEBUG] [Thread-210196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:51:35.088 [DEBUG] [Thread-210196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:51:35.137 [DEBUG] [Thread-210196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:51:35.137 [DEBUG] [Thread-210196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:51:35.145 [DEBUG] [Thread-210196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:51:35.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:51:35.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:51:35.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:51:35.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:51:35.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:51:35.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:51:35.179 [DEBUG] [Thread-210196] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:51:39.995 [DEBUG] [Thread-210198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:51:55.047 [DEBUG] [Thread-210199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:05.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:52:05.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:52:05.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:52:06.912 [DEBUG] [Thread-210200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 51, 50), 14.88, 37.1, 0.0, 31.67, 17.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:52:07.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:51:50
2026-02-15T19:52:07.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:52:07.546 [DEBUG] [Thread-210201] [transport.py] [_log()] starting thread (client mode): 0xa57b1150
2026-02-15T19:52:07.546 [DEBUG] [Thread-210201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:52:07.564 [DEBUG] [Thread-210201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:52:07.564 [INFO] [Thread-210201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] client lang: <none>
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] server lang: <none>
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] kex follows: False
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:52:07.567 [DEBUG] [Thread-210201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:52:07.568 [DEBUG] [Thread-210201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:52:07.568 [DEBUG] [Thread-210201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:52:07.568 [DEBUG] [Thread-210201] [transport.py] [_log()] Compression: none
2026-02-15T19:52:07.568 [DEBUG] [Thread-210201] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:52:07.588 [DEBUG] [Thread-210201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:52:07.589 [DEBUG] [Thread-210201] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:52:07.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:52:07.590 [DEBUG] [Thread-210201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:52:07.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:52:07.592 [DEBUG] [Thread-210201] [transport.py] [_log()] userauth is OK
2026-02-15T19:52:07.592 [DEBUG] [Thread-210201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:52:07.592 [DEBUG] [Thread-210201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:52:07.593 [DEBUG] [Thread-210201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:52:07.593 [DEBUG] [Thread-210201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:52:07.607 [INFO] [Thread-210201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:52:07.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:52:08.210 [DEBUG] [Thread-210201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:52:08.211 [DEBUG] [Thread-210201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:52:08.211 [DEBUG] [Thread-210201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:52:08.252 [DEBUG] [Thread-210201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:52:08.252 [DEBUG] [Thread-210201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:52:08.255 [DEBUG] [Thread-210201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:52:08.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:52:08.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:52:08.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:52:08.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:52:08.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:52:08.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:52:08.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:52:08.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:52:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:52:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.744190 -999.00  +17.20  23.32     42   +4.30 1 1 1 1 1   283    0 12.29 -30.24 ----- 23.9 23.3 149.0 36.5 17.7 -25.4 17.6 -24.5 17.4 -23.4 17.7 -24.6
2026-02-15T19:52:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:52:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:52:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.744190
2026-02-15T19:52:08.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:52:08.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:52:08.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:52:08.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:52:08.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:52:08.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:51:50', tmtdew=14.88, humidity=37.1, cloud=0.0, wind=31.67, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:51:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:52:08.281 [DEBUG] [Thread-210201] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:52:08.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:52:08.376 [DEBUG] [Thread-210204] [transport.py] [_log()] starting thread (client mode): 0xa5741de0
2026-02-15T19:52:08.376 [DEBUG] [Thread-210204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:52:08.391 [DEBUG] [Thread-210204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:52:08.392 [INFO] [Thread-210204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:52:08.400 [DEBUG] [Thread-210204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] client lang: <none>
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] server lang: <none>
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] kex follows: False
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:52:08.401 [DEBUG] [Thread-210204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:52:08.402 [DEBUG] [Thread-210204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:52:08.402 [DEBUG] [Thread-210204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:52:08.402 [DEBUG] [Thread-210204] [transport.py] [_log()] Compression: none
2026-02-15T19:52:08.402 [DEBUG] [Thread-210204] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:52:08.464 [DEBUG] [Thread-210204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:52:08.464 [DEBUG] [Thread-210204] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:52:08.465 [DEBUG] [Thread-210204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:52:08.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:52:08.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:52:08.529 [DEBUG] [Thread-210204] [transport.py] [_log()] userauth is OK
2026-02-15T19:52:08.530 [DEBUG] [Thread-210204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:52:08.530 [DEBUG] [Thread-210204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:52:08.530 [DEBUG] [Thread-210204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:52:08.530 [DEBUG] [Thread-210204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:52:08.549 [INFO] [Thread-210204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:52:08.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:52:08.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:52:09.440 [DEBUG] [Thread-210204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:52:09.441 [DEBUG] [Thread-210204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:52:09.488 [DEBUG] [Thread-210204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:52:09.489 [DEBUG] [Thread-210204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:52:09.498 [DEBUG] [Thread-210204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:52:09.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:52:09.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:52:09.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:52:09.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:52:09.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:52:09.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:52:09.535 [DEBUG] [Thread-210204] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:52:10.082 [DEBUG] [Thread-210206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:25.129 [DEBUG] [Thread-210207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:33.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:33.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:52:39.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:52:39.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:52:40.163 [DEBUG] [Thread-210208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:52:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 52, 25), 14.86, 37.17, 0.0, 32.06, 17.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:52:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:52:25
2026-02-15T19:52:41.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:52:41.971 [DEBUG] [Thread-210209] [transport.py] [_log()] starting thread (client mode): 0xa2d13370
2026-02-15T19:52:41.971 [DEBUG] [Thread-210209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:52:41.991 [DEBUG] [Thread-210209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:52:41.992 [INFO] [Thread-210209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:52:41.994 [DEBUG] [Thread-210209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] client lang: <none>
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] server lang: <none>
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] kex follows: False
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] Compression: none
2026-02-15T19:52:41.995 [DEBUG] [Thread-210209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:52:42.012 [DEBUG] [Thread-210209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:52:42.013 [DEBUG] [Thread-210209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:52:42.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:52:42.014 [DEBUG] [Thread-210209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:52:42.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:52:42.016 [DEBUG] [Thread-210209] [transport.py] [_log()] userauth is OK
2026-02-15T19:52:42.016 [DEBUG] [Thread-210209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:52:42.016 [DEBUG] [Thread-210209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:52:42.017 [DEBUG] [Thread-210209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:52:42.017 [DEBUG] [Thread-210209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:52:42.031 [INFO] [Thread-210209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:52:42.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:52:42.649 [DEBUG] [Thread-210209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:52:42.649 [DEBUG] [Thread-210209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:52:42.650 [DEBUG] [Thread-210209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:52:42.690 [DEBUG] [Thread-210209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:52:42.691 [DEBUG] [Thread-210209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:52:42.694 [DEBUG] [Thread-210209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:52:42.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:52:42.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:52:42.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:52:42.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:52:42.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:52:42.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:52:42.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:52:42.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:52:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:52:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.744711 -999.00  +17.20  25.82     42   +4.30 1 1 1 1 1   255    0 12.18 -32.86 ----- 25.8 25.8 152.8 32.3 17.6 -25.5 17.6 -24.6 17.4 -23.4 17.7 -24.6
2026-02-15T19:52:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:52:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:52:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.744711
2026-02-15T19:52:42.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:52:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:52:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:52:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:52:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:52:42.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:52:25', tmtdew=14.86, humidity=37.17, cloud=0.0, wind=32.06, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:52:23.030', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:52:42.721 [DEBUG] [Thread-210209] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:52:42.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:52:42.817 [DEBUG] [Thread-210212] [transport.py] [_log()] starting thread (client mode): 0xa2d6c610
2026-02-15T19:52:42.818 [DEBUG] [Thread-210212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:52:42.834 [DEBUG] [Thread-210212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:52:42.834 [INFO] [Thread-210212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:52:42.842 [DEBUG] [Thread-210212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] client lang: <none>
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] server lang: <none>
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] kex follows: False
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] Compression: none
2026-02-15T19:52:42.843 [DEBUG] [Thread-210212] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:52:42.906 [DEBUG] [Thread-210212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:52:42.906 [DEBUG] [Thread-210212] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:52:42.906 [DEBUG] [Thread-210212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:52:42.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:52:42.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:52:42.962 [DEBUG] [Thread-210212] [transport.py] [_log()] userauth is OK
2026-02-15T19:52:42.962 [DEBUG] [Thread-210212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:52:42.962 [DEBUG] [Thread-210212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:52:42.962 [DEBUG] [Thread-210212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:52:42.962 [DEBUG] [Thread-210212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:52:42.985 [INFO] [Thread-210212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:52:42.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:52:42.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:52:43.857 [DEBUG] [Thread-210212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:52:43.858 [DEBUG] [Thread-210212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:52:43.905 [DEBUG] [Thread-210212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:52:43.906 [DEBUG] [Thread-210212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:52:43.915 [DEBUG] [Thread-210212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:52:43.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:52:43.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:52:43.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:52:43.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:52:43.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:52:43.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:52:43.952 [DEBUG] [Thread-210212] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:52:55.197 [DEBUG] [Thread-210214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:06.977 [DEBUG] [Thread-210215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:10.251 [DEBUG] [Thread-210216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:13.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:53:13.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:53:13.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:53:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 53), 14.86, 37.17, 0.0, 27.6, 17.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:53:15.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:53:00
2026-02-15T19:53:16.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:53:16.525 [DEBUG] [Thread-210217] [transport.py] [_log()] starting thread (client mode): 0xa2d572b0
2026-02-15T19:53:16.525 [DEBUG] [Thread-210217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:53:16.545 [DEBUG] [Thread-210217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:53:16.545 [INFO] [Thread-210217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:53:16.548 [DEBUG] [Thread-210217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] client lang: <none>
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] server lang: <none>
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] kex follows: False
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] Compression: none
2026-02-15T19:53:16.549 [DEBUG] [Thread-210217] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:53:16.566 [DEBUG] [Thread-210217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:53:16.567 [DEBUG] [Thread-210217] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:53:16.567 [DEBUG] [Thread-210217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:53:16.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:53:16.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:53:16.569 [DEBUG] [Thread-210217] [transport.py] [_log()] userauth is OK
2026-02-15T19:53:16.570 [DEBUG] [Thread-210217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:53:16.570 [DEBUG] [Thread-210217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:53:16.570 [DEBUG] [Thread-210217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:53:16.570 [DEBUG] [Thread-210217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:53:16.594 [INFO] [Thread-210217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:53:16.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:53:17.210 [DEBUG] [Thread-210217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:53:17.210 [DEBUG] [Thread-210217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:53:17.210 [DEBUG] [Thread-210217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:53:17.251 [DEBUG] [Thread-210217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:53:17.251 [DEBUG] [Thread-210217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:53:17.254 [DEBUG] [Thread-210217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:53:17.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:53:17.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:53:17.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:53:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:53:17.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:53:17.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:53:17.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:53:17.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:53:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:53:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.744885 -999.00  +17.20  22.88     42   +4.30 1 1 1 1 1   246    0 12.21 -35.61 ----- 21.6 22.9 143.6 32.3 17.7 -25.4 17.6 -24.4 17.4 -23.4 17.7 -24.9
2026-02-15T19:53:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:53:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:53:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.744885
2026-02-15T19:53:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:53:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:53:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:53:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:53:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:53:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:53:00', tmtdew=14.86, humidity=37.17, cloud=0.0, wind=27.6, temperature=17.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:52:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:53:17.283 [DEBUG] [Thread-210217] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:53:17.286 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:17.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:53:17.387 [DEBUG] [Thread-210220] [transport.py] [_log()] starting thread (client mode): 0xa57b02b0
2026-02-15T19:53:17.388 [DEBUG] [Thread-210220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:53:17.402 [DEBUG] [Thread-210220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:53:17.402 [INFO] [Thread-210220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:53:17.410 [DEBUG] [Thread-210220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:53:17.410 [DEBUG] [Thread-210220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:53:17.410 [DEBUG] [Thread-210220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:53:17.410 [DEBUG] [Thread-210220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] client lang: <none>
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] server lang: <none>
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] kex follows: False
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] Compression: none
2026-02-15T19:53:17.411 [DEBUG] [Thread-210220] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:53:17.469 [DEBUG] [Thread-210220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:53:17.470 [DEBUG] [Thread-210220] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:53:17.470 [DEBUG] [Thread-210220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:53:17.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:53:17.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:53:17.526 [DEBUG] [Thread-210220] [transport.py] [_log()] userauth is OK
2026-02-15T19:53:17.526 [DEBUG] [Thread-210220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:53:17.526 [DEBUG] [Thread-210220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:53:17.526 [DEBUG] [Thread-210220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:53:17.526 [DEBUG] [Thread-210220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:53:17.545 [INFO] [Thread-210220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:53:17.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:53:17.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:53:18.379 [DEBUG] [Thread-210220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:53:18.380 [DEBUG] [Thread-210220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:53:18.427 [DEBUG] [Thread-210220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:53:18.428 [DEBUG] [Thread-210220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:53:18.437 [DEBUG] [Thread-210220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:53:18.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:53:18.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:53:18.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:53:18.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:53:18.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:53:18.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:53:18.475 [DEBUG] [Thread-210220] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:53:23.451 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:25.288 [DEBUG] [Thread-210222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:38.249 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:38.251 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:40.340 [DEBUG] [Thread-210223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:48.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:53:48.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:53:48.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:53:50.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 53, 36), 15.1, 36.37, 0.0, 34.79, 17.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:53:50.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:53:36
2026-02-15T19:53:50.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:53:50.902 [DEBUG] [Thread-210224] [transport.py] [_log()] starting thread (client mode): 0xa2d3da20
2026-02-15T19:53:50.903 [DEBUG] [Thread-210224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:53:50.925 [DEBUG] [Thread-210224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:53:50.925 [INFO] [Thread-210224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:50.929 [DEBUG] [Thread-210224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] client lang: <none>
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] server lang: <none>
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] kex follows: False
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] Compression: none
2026-02-15T19:53:50.930 [DEBUG] [Thread-210224] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:53:50.946 [DEBUG] [Thread-210224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:53:50.947 [DEBUG] [Thread-210224] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:53:50.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:53:50.948 [DEBUG] [Thread-210224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:53:50.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:53:50.951 [DEBUG] [Thread-210224] [transport.py] [_log()] userauth is OK
2026-02-15T19:53:50.951 [DEBUG] [Thread-210224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:53:50.951 [DEBUG] [Thread-210224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:53:50.951 [DEBUG] [Thread-210224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:53:50.951 [DEBUG] [Thread-210224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:53:50.972 [INFO] [Thread-210224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:53:50.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:53:50.980 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:53:51.600 [DEBUG] [Thread-210224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:53:51.600 [DEBUG] [Thread-210224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:53:51.601 [DEBUG] [Thread-210224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:53:51.641 [DEBUG] [Thread-210224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:53:51.642 [DEBUG] [Thread-210224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:53:51.645 [DEBUG] [Thread-210224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:53:51.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:53:51.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:53:51.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:53:51.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:53:51.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:53:51.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:53:51.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:53:51.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:53:51.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:53:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.745579 -999.00  +17.20  22.80     42   +4.30 1 1 1 1 1   212    0 12.29 -29.73 ----- 24.8 22.8 155.2 32.5 17.6 -25.4 17.5 -24.5 17.3 -23.5 17.6 -24.7
2026-02-15T19:53:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:53:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:53:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.745579
2026-02-15T19:53:51.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:53:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:53:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:53:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:53:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:53:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:53:36', tmtdew=15.1, humidity=36.37, cloud=0.0, wind=34.79, temperature=17.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:53:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:53:51.669 [DEBUG] [Thread-210224] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:53:51.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:53:51.765 [DEBUG] [Thread-210227] [transport.py] [_log()] starting thread (client mode): 0xa575a320
2026-02-15T19:53:51.765 [DEBUG] [Thread-210227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:53:51.779 [DEBUG] [Thread-210227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:53:51.779 [INFO] [Thread-210227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:53:51.786 [DEBUG] [Thread-210227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:53:51.787 [DEBUG] [Thread-210227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] client lang: <none>
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] server lang: <none>
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] kex follows: False
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:53:51.788 [DEBUG] [Thread-210227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:53:51.789 [DEBUG] [Thread-210227] [transport.py] [_log()] Compression: none
2026-02-15T19:53:51.789 [DEBUG] [Thread-210227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:53:51.846 [DEBUG] [Thread-210227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:53:51.847 [DEBUG] [Thread-210227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:53:51.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:53:51.848 [DEBUG] [Thread-210227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:53:51.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:53:51.902 [DEBUG] [Thread-210227] [transport.py] [_log()] userauth is OK
2026-02-15T19:53:51.902 [DEBUG] [Thread-210227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:53:51.902 [DEBUG] [Thread-210227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:53:51.902 [DEBUG] [Thread-210227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:53:51.902 [DEBUG] [Thread-210227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:53:51.920 [INFO] [Thread-210227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:53:51.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:53:51.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:53:52.726 [DEBUG] [Thread-210227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:53:52.727 [DEBUG] [Thread-210227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:53:52.776 [DEBUG] [Thread-210227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:53:52.776 [DEBUG] [Thread-210227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:53:52.784 [DEBUG] [Thread-210227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:53:52.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:53:52.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:53: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') -> 00000000
2026-02-15T19:53:52.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:53:52.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:53:52.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:53:52.817 [DEBUG] [Thread-210227] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:53:55.379 [DEBUG] [Thread-210229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:07.073 [DEBUG] [Thread-210230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:10.431 [DEBUG] [Thread-210231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:16.468 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:54:22.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:54:22.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:54:24.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 54, 12), 14.85, 37.19, 0.0, 31.58, 17.34, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:54:24.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:54:12
2026-02-15T19:54:24.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:54:25.083 [DEBUG] [Thread-210232] [transport.py] [_log()] starting thread (client mode): 0xa2d3e8f0
2026-02-15T19:54:25.083 [DEBUG] [Thread-210232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:54:25.103 [DEBUG] [Thread-210232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:54:25.103 [INFO] [Thread-210232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] client lang: <none>
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] server lang: <none>
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] kex follows: False
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:54:25.106 [DEBUG] [Thread-210232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:54:25.107 [DEBUG] [Thread-210232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:54:25.107 [DEBUG] [Thread-210232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:54:25.107 [DEBUG] [Thread-210232] [transport.py] [_log()] Compression: none
2026-02-15T19:54:25.107 [DEBUG] [Thread-210232] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:54:25.124 [DEBUG] [Thread-210232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:54:25.124 [DEBUG] [Thread-210232] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:54:25.125 [DEBUG] [Thread-210232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:54:25.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:54:25.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:54:25.127 [DEBUG] [Thread-210232] [transport.py] [_log()] userauth is OK
2026-02-15T19:54:25.127 [DEBUG] [Thread-210232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:54:25.127 [DEBUG] [Thread-210232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:54:25.127 [DEBUG] [Thread-210232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:54:25.128 [DEBUG] [Thread-210232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:54:25.148 [INFO] [Thread-210232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:54:25.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:54:25.468 [DEBUG] [Thread-210234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:25.800 [DEBUG] [Thread-210232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:54:25.801 [DEBUG] [Thread-210232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:54:25.801 [DEBUG] [Thread-210232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:54:25.841 [DEBUG] [Thread-210232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:54:25.841 [DEBUG] [Thread-210232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:54:25.844 [DEBUG] [Thread-210232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:54:25.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:54:25.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:54:25.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:54:25.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:54:25.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:54:25.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:54:25.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:54:25.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:54:25.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:54:25.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.745927 -999.00  +17.20  20.96     42   +4.30 1 1 1 1 1   196    0 12.19 -30.18 ----- 26.6 21.0 147.1 34.0 17.6 -25.5 17.5 -24.4 17.3 -23.3 17.6 -24.8
2026-02-15T19:54:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:54:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:54:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.745927
2026-02-15T19:54:25.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:54:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:54:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:54:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:54:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:54:25.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:54:12', tmtdew=14.85, humidity=37.19, cloud=0.0, wind=31.58, temperature=17.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:54:08.093', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:54:25.870 [DEBUG] [Thread-210232] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:54:25.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:54:25.969 [DEBUG] [Thread-210236] [transport.py] [_log()] starting thread (client mode): 0xa2d3ceb0
2026-02-15T19:54:25.969 [DEBUG] [Thread-210236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:54:25.984 [DEBUG] [Thread-210236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:54:25.984 [INFO] [Thread-210236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] client lang: <none>
2026-02-15T19:54:25.994 [DEBUG] [Thread-210236] [transport.py] [_log()] server lang: <none>
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] kex follows: False
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] Compression: none
2026-02-15T19:54:25.995 [DEBUG] [Thread-210236] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:54:26.052 [DEBUG] [Thread-210236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:54:26.052 [DEBUG] [Thread-210236] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:54:26.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:54:26.053 [DEBUG] [Thread-210236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:54:26.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:54:26.113 [DEBUG] [Thread-210236] [transport.py] [_log()] userauth is OK
2026-02-15T19:54:26.113 [DEBUG] [Thread-210236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:54:26.114 [DEBUG] [Thread-210236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:54:26.114 [DEBUG] [Thread-210236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:54:26.114 [DEBUG] [Thread-210236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:54:26.133 [INFO] [Thread-210236] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:54:26.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:54:26.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:54:26.884 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:26.973 [DEBUG] [Thread-210236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:54:26.973 [DEBUG] [Thread-210236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:54:27.021 [DEBUG] [Thread-210236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:54:27.021 [DEBUG] [Thread-210236] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:54:27.029 [DEBUG] [Thread-210236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:54:27.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:54:27.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:54:27.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:54:27.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:54:27.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:54:27.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:54:27.062 [DEBUG] [Thread-210236] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:54:32.997 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:40.503 [DEBUG] [Thread-210238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:42.530 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:42.531 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:55.558 [DEBUG] [Thread-210239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:57.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:54:57.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:54:57.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:54:57.461 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:54:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 54, 48), 14.78, 37.24, 0.0, 32.5, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:54:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:54:48
2026-02-15T19:54:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:54:59.611 [DEBUG] [Thread-210240] [transport.py] [_log()] starting thread (client mode): 0xa2d12410
2026-02-15T19:54:59.612 [DEBUG] [Thread-210240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:54:59.629 [DEBUG] [Thread-210240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:54:59.629 [INFO] [Thread-210240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] client lang: <none>
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] server lang: <none>
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] kex follows: False
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:54:59.631 [DEBUG] [Thread-210240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:54:59.632 [DEBUG] [Thread-210240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:54:59.632 [DEBUG] [Thread-210240] [transport.py] [_log()] Compression: none
2026-02-15T19:54:59.632 [DEBUG] [Thread-210240] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:54:59.642 [DEBUG] [Thread-210240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:54:59.643 [DEBUG] [Thread-210240] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:54:59.643 [DEBUG] [Thread-210240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:54:59.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:54:59.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:54:59.645 [DEBUG] [Thread-210240] [transport.py] [_log()] userauth is OK
2026-02-15T19:54:59.645 [DEBUG] [Thread-210240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:54:59.645 [DEBUG] [Thread-210240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:54:59.645 [DEBUG] [Thread-210240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:54:59.645 [DEBUG] [Thread-210240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:54:59.663 [INFO] [Thread-210240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:54:59.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:55:00.319 [DEBUG] [Thread-210240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:55:00.320 [DEBUG] [Thread-210240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:55:00.320 [DEBUG] [Thread-210240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:55:00.360 [DEBUG] [Thread-210240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:55:00.360 [DEBUG] [Thread-210240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:55:00.364 [DEBUG] [Thread-210240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:55:00.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:55:00.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:55:00.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:55:00.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:55:00.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:55:00.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:55:00.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:55:00.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:55:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:55:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.746274 -999.00  +17.20  21.77     42   +4.30 1 1 1 1 1   181    0 12.18 -29.53 ----- 20.6 21.8 160.0 35.9 17.6 -25.5 17.5 -24.4 17.3 -23.3 17.6 -24.7
2026-02-15T19:55:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:55:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:55:00.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.746274
2026-02-15T19:55:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:55:00.387 [DEBUG] [Thread-210240] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:55:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:55:00.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:55:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:55:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:55:00.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:54:48', tmtdew=14.78, humidity=37.24, cloud=0.0, wind=32.5, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:54:38.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:55:00.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:55:00.483 [DEBUG] [Thread-210243] [transport.py] [_log()] starting thread (client mode): 0xa2d12920
2026-02-15T19:55:00.483 [DEBUG] [Thread-210243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:55:00.497 [DEBUG] [Thread-210243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:55:00.497 [INFO] [Thread-210243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:55:00.505 [DEBUG] [Thread-210243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:55:00.505 [DEBUG] [Thread-210243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] client lang: <none>
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] server lang: <none>
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] kex follows: False
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] Compression: none
2026-02-15T19:55:00.506 [DEBUG] [Thread-210243] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:55:00.562 [DEBUG] [Thread-210243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:55:00.563 [DEBUG] [Thread-210243] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:55:00.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:55:00.564 [DEBUG] [Thread-210243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:55:00.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:55:00.618 [DEBUG] [Thread-210243] [transport.py] [_log()] userauth is OK
2026-02-15T19:55:00.619 [DEBUG] [Thread-210243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:55:00.619 [DEBUG] [Thread-210243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:55:00.619 [DEBUG] [Thread-210243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:55:00.619 [DEBUG] [Thread-210243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:55:00.645 [INFO] [Thread-210243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:55:00.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:55:00.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:55:01.473 [DEBUG] [Thread-210243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:55:01.474 [DEBUG] [Thread-210243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:55:01.521 [DEBUG] [Thread-210243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:55:01.521 [DEBUG] [Thread-210243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:55:01.530 [DEBUG] [Thread-210243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:55:01.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:55:01.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:55:01.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:55:01.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:55:01.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:55:01.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:55:01.562 [DEBUG] [Thread-210243] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:55:07.150 [DEBUG] [Thread-210245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:10.595 [DEBUG] [Thread-210246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:20.982 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:25.640 [DEBUG] [Thread-210247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:30.451 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:31.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:55:31.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:55:31.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:55:33.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 55, 23), 14.78, 37.22, 0.0, 30.6, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:55:33.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:55:23
2026-02-15T19:55:33.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:55:33.990 [DEBUG] [Thread-210248] [transport.py] [_log()] starting thread (client mode): 0xa5742f80
2026-02-15T19:55:33.991 [DEBUG] [Thread-210248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:55:34.011 [DEBUG] [Thread-210248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:55:34.011 [INFO] [Thread-210248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:55:34.014 [DEBUG] [Thread-210248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:55:34.014 [DEBUG] [Thread-210248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] client lang: <none>
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] server lang: <none>
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] kex follows: False
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:55:34.015 [DEBUG] [Thread-210248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:55:34.016 [DEBUG] [Thread-210248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:55:34.016 [DEBUG] [Thread-210248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:55:34.016 [DEBUG] [Thread-210248] [transport.py] [_log()] Compression: none
2026-02-15T19:55:34.016 [DEBUG] [Thread-210248] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:55:34.036 [DEBUG] [Thread-210248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:55:34.037 [DEBUG] [Thread-210248] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:55:34.038 [DEBUG] [Thread-210248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:55:34.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:55:34.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:55:34.041 [DEBUG] [Thread-210248] [transport.py] [_log()] userauth is OK
2026-02-15T19:55:34.041 [DEBUG] [Thread-210248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:55:34.041 [DEBUG] [Thread-210248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:55:34.041 [DEBUG] [Thread-210248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:55:34.041 [DEBUG] [Thread-210248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:55:34.066 [INFO] [Thread-210248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:55:34.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:55:34.696 [DEBUG] [Thread-210248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:55:34.696 [DEBUG] [Thread-210248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:55:34.697 [DEBUG] [Thread-210248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:55:34.737 [DEBUG] [Thread-210248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:55:34.737 [DEBUG] [Thread-210248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:55:34.741 [DEBUG] [Thread-210248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:55:34.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:55:34.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:55:34.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:55:34.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:55:34.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:55:34.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:55:34.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:55:34.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:55:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:55:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.746621 -999.00  +17.20  24.58     42   +4.30 1 1 1 1 1   167    0 12.45 -29.69 ----- 17.8 24.6 151.2 34.6 17.6 -25.4 17.5 -24.5 17.3 -23.4 17.6 -24.6
2026-02-15T19:55:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:55:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:55:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.746621
2026-02-15T19:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:55:34.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:55:23', tmtdew=14.78, humidity=37.22, cloud=0.0, wind=30.6, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:55:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:55:34.768 [DEBUG] [Thread-210248] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:55:34.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:55:34.863 [DEBUG] [Thread-210251] [transport.py] [_log()] starting thread (client mode): 0xa5743130
2026-02-15T19:55:34.863 [DEBUG] [Thread-210251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:55:34.877 [DEBUG] [Thread-210251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:55:34.877 [INFO] [Thread-210251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:55:34.884 [DEBUG] [Thread-210251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] client lang: <none>
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] server lang: <none>
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] kex follows: False
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] Compression: none
2026-02-15T19:55:34.885 [DEBUG] [Thread-210251] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:55:34.942 [DEBUG] [Thread-210251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:55:34.943 [DEBUG] [Thread-210251] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:55:34.943 [DEBUG] [Thread-210251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:55:34.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:55:34.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:55:34.998 [DEBUG] [Thread-210251] [transport.py] [_log()] userauth is OK
2026-02-15T19:55:34.998 [DEBUG] [Thread-210251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:55:34.998 [DEBUG] [Thread-210251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:55:34.998 [DEBUG] [Thread-210251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:55:34.999 [DEBUG] [Thread-210251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:55:35.017 [INFO] [Thread-210251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:55:35.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:55:35.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:55:35.828 [DEBUG] [Thread-210251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:55:35.829 [DEBUG] [Thread-210251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:55:35.876 [DEBUG] [Thread-210251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:55:35.877 [DEBUG] [Thread-210251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:55:35.886 [DEBUG] [Thread-210251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:55:35.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:55:35.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:55:35.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:55:35.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:55:35.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:55:35.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:55:35.922 [DEBUG] [Thread-210251] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:55:36.560 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:40.674 [DEBUG] [Thread-210253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:46.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:46.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:55:55.725 [DEBUG] [Thread-210254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:00.149 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:05.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:56:05.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:56:05.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:56:07.219 [DEBUG] [Thread-210255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 55, 58), 14.77, 37.24, 0.0, 29.04, 17.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:56:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:55:58
2026-02-15T19:56:08.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:56:08.424 [DEBUG] [Thread-210256] [transport.py] [_log()] starting thread (client mode): 0xa2d3ce20
2026-02-15T19:56:08.425 [DEBUG] [Thread-210256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:56:08.440 [DEBUG] [Thread-210256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:56:08.440 [INFO] [Thread-210256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:56:08.443 [DEBUG] [Thread-210256] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:56:08.443 [DEBUG] [Thread-210256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:56:08.443 [DEBUG] [Thread-210256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] client lang: <none>
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] server lang: <none>
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] kex follows: False
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] Compression: none
2026-02-15T19:56:08.444 [DEBUG] [Thread-210256] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:56:08.459 [DEBUG] [Thread-210256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:56:08.460 [DEBUG] [Thread-210256] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:56:08.461 [DEBUG] [Thread-210256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:56:08.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:56:08.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:56:08.464 [DEBUG] [Thread-210256] [transport.py] [_log()] userauth is OK
2026-02-15T19:56:08.464 [DEBUG] [Thread-210256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:56:08.464 [DEBUG] [Thread-210256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:56:08.464 [DEBUG] [Thread-210256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:56:08.464 [DEBUG] [Thread-210256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:56:08.492 [INFO] [Thread-210256] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:56:08.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:56:09.064 [DEBUG] [Thread-210256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:56:09.064 [DEBUG] [Thread-210256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:56:09.065 [DEBUG] [Thread-210256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:56:09.106 [DEBUG] [Thread-210256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:56:09.106 [DEBUG] [Thread-210256] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:56:09.110 [DEBUG] [Thread-210256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:56:09.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:56:09.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:56:09.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:56:09.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:56:09.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:56:09.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:56:09.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:56:09.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:56:09.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:56:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.746968 -999.00  +17.20  18.34     42   +4.30 1 1 1 1 1   154    0 12.06 -30.00 ----- 16.4 18.3 151.6 26.5 17.6 -25.5 17.5 -24.6 17.3 -23.4 17.6 -24.5
2026-02-15T19:56:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:56:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:56:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.746968
2026-02-15T19:56:09.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:56:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:56:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:56:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:56:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:56:09.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:55:58', tmtdew=14.77, humidity=37.24, cloud=0.0, wind=29.04, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:55:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:56:09.142 [DEBUG] [Thread-210256] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:56:09.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:56:09.237 [DEBUG] [Thread-210259] [transport.py] [_log()] starting thread (client mode): 0xa2d3c370
2026-02-15T19:56:09.237 [DEBUG] [Thread-210259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:56:09.253 [DEBUG] [Thread-210259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:56:09.253 [INFO] [Thread-210259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] client lang: <none>
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] server lang: <none>
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] kex follows: False
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] Compression: none
2026-02-15T19:56:09.261 [DEBUG] [Thread-210259] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:56:09.318 [DEBUG] [Thread-210259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:56:09.318 [DEBUG] [Thread-210259] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:56:09.319 [DEBUG] [Thread-210259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:56:09.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:56:09.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:56:09.374 [DEBUG] [Thread-210259] [transport.py] [_log()] userauth is OK
2026-02-15T19:56:09.375 [DEBUG] [Thread-210259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:56:09.375 [DEBUG] [Thread-210259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:56:09.375 [DEBUG] [Thread-210259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:56:09.375 [DEBUG] [Thread-210259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:56:09.399 [INFO] [Thread-210259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:56:09.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:56:09.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:56:10.232 [DEBUG] [Thread-210259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:56:10.232 [DEBUG] [Thread-210259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:56:10.279 [DEBUG] [Thread-210259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:56:10.279 [DEBUG] [Thread-210259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:56:10.288 [DEBUG] [Thread-210259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:56:10.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:56:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:56:10.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:56:10.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:56:10.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:56:10.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:56:10.321 [DEBUG] [Thread-210259] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:56:10.766 [DEBUG] [Thread-210261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:23.661 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:25.817 [DEBUG] [Thread-210262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:31.989 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:38.075 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:40.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:56:40.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:56:40.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:56:40.847 [DEBUG] [Thread-210263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:42.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 56, 34), 15.05, 36.47, 0.0, 30.8, 17.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:56:42.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:56:34
2026-02-15T19:56:42.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:56:42.928 [DEBUG] [Thread-210264] [transport.py] [_log()] starting thread (client mode): 0xa2d3f490
2026-02-15T19:56:42.928 [DEBUG] [Thread-210264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:56:42.949 [DEBUG] [Thread-210264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:56:42.949 [INFO] [Thread-210264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:42.951 [DEBUG] [Thread-210264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] client lang: <none>
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] server lang: <none>
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] kex follows: False
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] Compression: none
2026-02-15T19:56:42.952 [DEBUG] [Thread-210264] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:56:42.970 [DEBUG] [Thread-210264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:56:42.970 [DEBUG] [Thread-210264] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:56:42.971 [DEBUG] [Thread-210264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:56:42.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:56:42.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:56:42.972 [DEBUG] [Thread-210264] [transport.py] [_log()] userauth is OK
2026-02-15T19:56:42.972 [DEBUG] [Thread-210264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:56:42.972 [DEBUG] [Thread-210264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:56:42.972 [DEBUG] [Thread-210264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:56:42.972 [DEBUG] [Thread-210264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:56:42.988 [INFO] [Thread-210264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:56:42.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:56:43.629 [DEBUG] [Thread-210264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:56:43.629 [DEBUG] [Thread-210264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:56:43.629 [DEBUG] [Thread-210264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:56:43.670 [DEBUG] [Thread-210264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:56:43.670 [DEBUG] [Thread-210264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:56:43.673 [DEBUG] [Thread-210264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:56:43.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:56:43.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:56:43.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:56:43.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:56:43.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:56:43.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:56:43.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:56:43.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:56:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:56:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.747315 -999.00  +17.20  23.44     42   +4.30 1 1 1 1 1   142    0 11.92 -29.95 ----- 19.1 23.4 153.6 33.4 17.6 -25.4 17.5 -24.4 17.3 -23.3 17.6 -24.6
2026-02-15T19:56:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:56:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:56:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.747315
2026-02-15T19:56:43.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:56:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:56:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:56:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:56:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:56:43.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:56:34', tmtdew=15.05, humidity=36.47, cloud=0.0, wind=30.8, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:56:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:56:43.699 [DEBUG] [Thread-210264] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:56:43.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:56:43.795 [DEBUG] [Thread-210267] [transport.py] [_log()] starting thread (client mode): 0xa57d4d90
2026-02-15T19:56:43.795 [DEBUG] [Thread-210267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:56:43.809 [DEBUG] [Thread-210267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:56:43.810 [INFO] [Thread-210267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:56:43.817 [DEBUG] [Thread-210267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:56:43.817 [DEBUG] [Thread-210267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:56:43.817 [DEBUG] [Thread-210267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:56:43.817 [DEBUG] [Thread-210267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] client lang: <none>
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] server lang: <none>
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] kex follows: False
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] Compression: none
2026-02-15T19:56:43.818 [DEBUG] [Thread-210267] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:56:43.878 [DEBUG] [Thread-210267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:56:43.878 [DEBUG] [Thread-210267] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:56:43.879 [DEBUG] [Thread-210267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:56:43.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:56:43.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:56:43.934 [DEBUG] [Thread-210267] [transport.py] [_log()] userauth is OK
2026-02-15T19:56:43.934 [DEBUG] [Thread-210267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:56:43.935 [DEBUG] [Thread-210267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:56:43.935 [DEBUG] [Thread-210267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:56:43.935 [DEBUG] [Thread-210267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:56:43.954 [INFO] [Thread-210267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:56:43.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:56:43.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:56:44.773 [DEBUG] [Thread-210267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:56:44.773 [DEBUG] [Thread-210267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:56:44.821 [DEBUG] [Thread-210267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:56:44.821 [DEBUG] [Thread-210267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:56:44.830 [DEBUG] [Thread-210267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:56:44.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:56:44.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:56:44.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:56:44.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:56:44.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:56:44.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:56:44.866 [DEBUG] [Thread-210267] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:56:52.372 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:52.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:56:55.881 [DEBUG] [Thread-210269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:01.471 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:07.297 [DEBUG] [Thread-210270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:10.931 [DEBUG] [Thread-210271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:14.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:57:14.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:57:14.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:57:16.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 56, 34), 15.05, 36.47, 0.0, 30.8, 17.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:57:16.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:56:34
2026-02-15T19:57:17.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:57:17.199 [DEBUG] [Thread-210272] [transport.py] [_log()] starting thread (client mode): 0xa2d3d4e0
2026-02-15T19:57:17.200 [DEBUG] [Thread-210272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:57:17.221 [DEBUG] [Thread-210272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:57:17.221 [INFO] [Thread-210272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:17.224 [DEBUG] [Thread-210272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] client lang: <none>
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] server lang: <none>
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] kex follows: False
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] Compression: none
2026-02-15T19:57:17.225 [DEBUG] [Thread-210272] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:57:17.244 [DEBUG] [Thread-210272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:57:17.245 [DEBUG] [Thread-210272] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:57:17.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:57:17.246 [DEBUG] [Thread-210272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:57:17.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:57:17.248 [DEBUG] [Thread-210272] [transport.py] [_log()] userauth is OK
2026-02-15T19:57:17.248 [DEBUG] [Thread-210272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:57:17.248 [DEBUG] [Thread-210272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:57:17.248 [DEBUG] [Thread-210272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:57:17.248 [DEBUG] [Thread-210272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:57:17.274 [INFO] [Thread-210272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:57:17.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:57:17.927 [DEBUG] [Thread-210272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:57:17.927 [DEBUG] [Thread-210272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:57:17.927 [DEBUG] [Thread-210272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:57:17.967 [DEBUG] [Thread-210272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:57:17.967 [DEBUG] [Thread-210272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:57:17.970 [DEBUG] [Thread-210272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:57:17.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:57:17.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:57:17.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:57:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:57:17.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:57:17.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:57:17.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:57:17.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:57:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:57:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.747663 -999.00  +17.10  18.70     42   +4.30 1 1 1 1 1   130    0 12.27 -31.69 ----- 21.4 18.7 144.0 28.1 17.5 -25.4 17.4 -24.5 17.2 -23.3 17.6 -24.7
2026-02-15T19:57:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:57:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:57:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.747663
2026-02-15T19:57:17.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:57:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:57:17.998 [DEBUG] [Thread-210272] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:57:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:57:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:57:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:57:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:56:34', tmtdew=15.05, humidity=36.47, cloud=0.0, wind=30.8, temperature=17.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:56:38.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:57:18.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:57:18.096 [DEBUG] [Thread-210275] [transport.py] [_log()] starting thread (client mode): 0xa2d13520
2026-02-15T19:57:18.096 [DEBUG] [Thread-210275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:57:18.111 [DEBUG] [Thread-210275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:57:18.111 [INFO] [Thread-210275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:57:18.118 [DEBUG] [Thread-210275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] client lang: <none>
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] server lang: <none>
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] kex follows: False
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:57:18.119 [DEBUG] [Thread-210275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:57:18.120 [DEBUG] [Thread-210275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:57:18.120 [DEBUG] [Thread-210275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:57:18.120 [DEBUG] [Thread-210275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:57:18.120 [DEBUG] [Thread-210275] [transport.py] [_log()] Compression: none
2026-02-15T19:57:18.120 [DEBUG] [Thread-210275] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:57:18.177 [DEBUG] [Thread-210275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:57:18.178 [DEBUG] [Thread-210275] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:57:18.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:57:18.179 [DEBUG] [Thread-210275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:57:18.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:57:18.234 [DEBUG] [Thread-210275] [transport.py] [_log()] userauth is OK
2026-02-15T19:57:18.234 [DEBUG] [Thread-210275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:57:18.235 [DEBUG] [Thread-210275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:57:18.235 [DEBUG] [Thread-210275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:57:18.235 [DEBUG] [Thread-210275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:57:18.259 [INFO] [Thread-210275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:57:18.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:57:18.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:57:19.102 [DEBUG] [Thread-210275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:57:19.102 [DEBUG] [Thread-210275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:57:19.151 [DEBUG] [Thread-210275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:57:19.151 [DEBUG] [Thread-210275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:57:19.160 [DEBUG] [Thread-210275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:57:19.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:57:19.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:57:19.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:57:19.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:57:19.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:57:19.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:57:19.197 [DEBUG] [Thread-210275] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:57:24.966 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:25.964 [DEBUG] [Thread-210277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:33.470 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:39.599 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:41.004 [DEBUG] [Thread-210278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:57:49.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:57:49.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:57:51.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 57, 9), 14.77, 37.24, 0.0, 31.0, 17.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:57:51.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:57:09
2026-02-15T19:57:51.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:57:51.878 [DEBUG] [Thread-210279] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-15T19:57:51.879 [DEBUG] [Thread-210279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:57:51.899 [DEBUG] [Thread-210279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:57:51.899 [INFO] [Thread-210279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:51.902 [DEBUG] [Thread-210279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] client lang: <none>
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] server lang: <none>
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] kex follows: False
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] Compression: none
2026-02-15T19:57:51.903 [DEBUG] [Thread-210279] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:57:51.918 [DEBUG] [Thread-210279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:57:51.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:57:51.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] userauth is OK
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:57:51.919 [DEBUG] [Thread-210279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:57:51.935 [INFO] [Thread-210279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:57:51.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:57:52.537 [DEBUG] [Thread-210279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:57:52.537 [DEBUG] [Thread-210279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:57:52.538 [DEBUG] [Thread-210279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:57:52.578 [DEBUG] [Thread-210279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:57:52.578 [DEBUG] [Thread-210279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:57:52.581 [DEBUG] [Thread-210279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:57:52.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:57:52.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:57:52.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:57:52.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:57:52.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:57:52.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:57:52.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:57:52.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:57:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:57:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.748010 -999.00  +17.10  19.57     42   +4.30 1 1 1 1 1   119    0 12.24 -28.88 ----- 23.4 19.6 151.7 27.7 17.5 -25.4 17.5 -24.5 17.2 -23.2 17.5 -24.7
2026-02-15T19:57:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:57:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:57:52.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.748010
2026-02-15T19:57:52.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:57:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:57:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:57:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:57:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:57:52.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:57:09', tmtdew=14.77, humidity=37.24, cloud=0.0, wind=31.0, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:57:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:57:52.608 [DEBUG] [Thread-210279] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:57:52.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:57:52.705 [DEBUG] [Thread-210282] [transport.py] [_log()] starting thread (client mode): 0xa575bd00
2026-02-15T19:57:52.705 [DEBUG] [Thread-210282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:57:52.719 [DEBUG] [Thread-210282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:57:52.719 [INFO] [Thread-210282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:57:52.726 [DEBUG] [Thread-210282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] client lang: <none>
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] server lang: <none>
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] kex follows: False
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] Compression: none
2026-02-15T19:57:52.727 [DEBUG] [Thread-210282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:57:52.784 [DEBUG] [Thread-210282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:57:52.784 [DEBUG] [Thread-210282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:57:52.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:57:52.784 [DEBUG] [Thread-210282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:57:52.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:57:52.841 [DEBUG] [Thread-210282] [transport.py] [_log()] userauth is OK
2026-02-15T19:57:52.842 [DEBUG] [Thread-210282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:57:52.842 [DEBUG] [Thread-210282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:57:52.842 [DEBUG] [Thread-210282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:57:52.842 [DEBUG] [Thread-210282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:57:52.855 [INFO] [Thread-210282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:57:52.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:57:52.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:57:53.673 [DEBUG] [Thread-210282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:57:53.673 [DEBUG] [Thread-210282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:57:53.721 [DEBUG] [Thread-210282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:57:53.722 [DEBUG] [Thread-210282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:57:53.731 [DEBUG] [Thread-210282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:57:53.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:57:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:57:53.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:57:53.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:57:53.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:57:53.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:57:53.766 [DEBUG] [Thread-210282] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:57:56.036 [DEBUG] [Thread-210284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:56.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:57:56.507 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:03.093 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:07.363 [DEBUG] [Thread-210285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:11.087 [DEBUG] [Thread-210286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:23.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:58:23.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:58:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:58:26.125 [DEBUG] [Thread-210287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:26.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 57, 44), 14.77, 37.25, 0.0, 31.62, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:58:26.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:57:44
2026-02-15T19:58:26.521 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:26.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:58:26.726 [DEBUG] [Thread-210288] [transport.py] [_log()] starting thread (client mode): 0xa2d11600
2026-02-15T19:58:26.726 [DEBUG] [Thread-210288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:58:26.747 [DEBUG] [Thread-210288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:58:26.747 [INFO] [Thread-210288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:58:26.750 [DEBUG] [Thread-210288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] client lang: <none>
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] server lang: <none>
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] kex follows: False
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] Compression: none
2026-02-15T19:58:26.751 [DEBUG] [Thread-210288] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:58:26.769 [DEBUG] [Thread-210288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:58:26.770 [DEBUG] [Thread-210288] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:58:26.771 [DEBUG] [Thread-210288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:58:26.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:58:26.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:58:26.774 [DEBUG] [Thread-210288] [transport.py] [_log()] userauth is OK
2026-02-15T19:58:26.774 [DEBUG] [Thread-210288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:58:26.774 [DEBUG] [Thread-210288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:58:26.774 [DEBUG] [Thread-210288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:58:26.775 [DEBUG] [Thread-210288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:58:26.796 [INFO] [Thread-210288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:58:26.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:58:27.456 [DEBUG] [Thread-210288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:58:27.456 [DEBUG] [Thread-210288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:58:27.456 [DEBUG] [Thread-210288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:58:27.496 [DEBUG] [Thread-210288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:58:27.497 [DEBUG] [Thread-210288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:58:27.500 [DEBUG] [Thread-210288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:58:27.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:58:27.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:58:27.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:58:27.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:58:27.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:58:27.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:58:27.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:58:27.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:58:27.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:58:27.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.748357 -999.00  +17.10  16.62     42   +4.30 1 1 1 1 1   109    0 12.20 -29.25 ----- 21.4 16.6 156.7 29.0 17.5 -25.4 17.5 -24.4 17.3 -23.3 17.5 -24.5
2026-02-15T19:58:27.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:58:27.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:58:27.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.748357
2026-02-15T19:58:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:58:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:58:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:58:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:58:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:58:27.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:57:44', tmtdew=14.77, humidity=37.25, cloud=0.0, wind=31.62, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:57:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:58:27.525 [DEBUG] [Thread-210288] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:58:27.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:58:27.620 [DEBUG] [Thread-210291] [transport.py] [_log()] starting thread (client mode): 0xa2d3d0f0
2026-02-15T19:58:27.620 [DEBUG] [Thread-210291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:58:27.636 [DEBUG] [Thread-210291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:58:27.636 [INFO] [Thread-210291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:58:27.643 [DEBUG] [Thread-210291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:58:27.644 [DEBUG] [Thread-210291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:58:27.644 [DEBUG] [Thread-210291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:58:27.644 [DEBUG] [Thread-210291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:58:27.644 [DEBUG] [Thread-210291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:58:27.644 [DEBUG] [Thread-210291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:58:27.644 [DEBUG] [Thread-210291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] client lang: <none>
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] server lang: <none>
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] kex follows: False
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:58:27.645 [DEBUG] [Thread-210291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:58:27.646 [DEBUG] [Thread-210291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:58:27.646 [DEBUG] [Thread-210291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:58:27.646 [DEBUG] [Thread-210291] [transport.py] [_log()] Compression: none
2026-02-15T19:58:27.646 [DEBUG] [Thread-210291] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:58:27.708 [DEBUG] [Thread-210291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:58:27.708 [DEBUG] [Thread-210291] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:58:27.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:58:27.710 [DEBUG] [Thread-210291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:58:27.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:58:27.770 [DEBUG] [Thread-210291] [transport.py] [_log()] userauth is OK
2026-02-15T19:58:27.770 [DEBUG] [Thread-210291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:58:27.770 [DEBUG] [Thread-210291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:58:27.770 [DEBUG] [Thread-210291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:58:27.771 [DEBUG] [Thread-210291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:58:27.790 [INFO] [Thread-210291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:58:27.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:58:27.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:58:28.656 [DEBUG] [Thread-210291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:58:28.657 [DEBUG] [Thread-210291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:58:28.704 [DEBUG] [Thread-210291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:58:28.704 [DEBUG] [Thread-210291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:58:28.714 [DEBUG] [Thread-210291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:58:28.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:58:28.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:58:28.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:58:28.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:58:28.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:58:28.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:58:28.752 [DEBUG] [Thread-210291] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:58:39.084 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:41.161 [DEBUG] [Thread-210293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:44.133 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:56.202 [DEBUG] [Thread-210294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:58:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:58:58.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:58:58.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:59:00.514 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:00.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:01.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 58, 20), 14.77, 37.27, 0.0, 31.12, 17.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:59:01.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:58:20
2026-02-15T19:59:01.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:59:01.825 [DEBUG] [Thread-210295] [transport.py] [_log()] starting thread (client mode): 0xa5743760
2026-02-15T19:59:01.825 [DEBUG] [Thread-210295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:59:01.844 [DEBUG] [Thread-210295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:59:01.844 [INFO] [Thread-210295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:59:01.847 [DEBUG] [Thread-210295] [transport.py] [_log()] client lang: <none>
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] server lang: <none>
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] kex follows: False
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] Compression: none
2026-02-15T19:59:01.848 [DEBUG] [Thread-210295] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:59:01.855 [DEBUG] [Thread-210295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:59:01.855 [DEBUG] [Thread-210295] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:59:01.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:59:01.856 [DEBUG] [Thread-210295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:59:01.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:59:01.856 [DEBUG] [Thread-210295] [transport.py] [_log()] userauth is OK
2026-02-15T19:59:01.856 [DEBUG] [Thread-210295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:59:01.856 [DEBUG] [Thread-210295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:59:01.857 [DEBUG] [Thread-210295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:59:01.857 [DEBUG] [Thread-210295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:59:01.868 [INFO] [Thread-210295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:59:01.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:59:02.466 [DEBUG] [Thread-210295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:59:02.467 [DEBUG] [Thread-210295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:59:02.467 [DEBUG] [Thread-210295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:59:02.507 [DEBUG] [Thread-210295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:59:02.507 [DEBUG] [Thread-210295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:59:02.510 [DEBUG] [Thread-210295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:59:02.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:59:02.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:59:02.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:59:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:59:02.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:59:02.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:59:02.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:59:02.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.749051 -999.00  +17.10  22.43     42   +4.30 1 1 1 1 1    92    0 12.34 -29.00 ----- 23.7 22.4 146.6 33.1 17.4 -25.2 17.4 -24.3 17.2 -23.1 17.5 -24.5
2026-02-15T19:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:59:02.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.749051
2026-02-15T19:59:02.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:59:02.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:59:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:59:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:59:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:59:02.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:58:20', tmtdew=14.77, humidity=37.27, cloud=0.0, wind=31.12, temperature=17.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:58:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:59:02.535 [DEBUG] [Thread-210295] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:59:02.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:59:02.632 [DEBUG] [Thread-210298] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-15T19:59:02.632 [DEBUG] [Thread-210298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:59:02.646 [DEBUG] [Thread-210298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:59:02.646 [INFO] [Thread-210298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:59:02.654 [DEBUG] [Thread-210298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:59:02.654 [DEBUG] [Thread-210298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:59:02.654 [DEBUG] [Thread-210298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:59:02.654 [DEBUG] [Thread-210298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:02.654 [DEBUG] [Thread-210298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] client lang: <none>
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] server lang: <none>
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] kex follows: False
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:59:02.655 [DEBUG] [Thread-210298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:59:02.656 [DEBUG] [Thread-210298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:59:02.656 [DEBUG] [Thread-210298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:59:02.656 [DEBUG] [Thread-210298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:59:02.656 [DEBUG] [Thread-210298] [transport.py] [_log()] Compression: none
2026-02-15T19:59:02.656 [DEBUG] [Thread-210298] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:59:02.715 [DEBUG] [Thread-210298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:59:02.716 [DEBUG] [Thread-210298] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:59:02.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:59:02.718 [DEBUG] [Thread-210298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:59:02.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:59:02.774 [DEBUG] [Thread-210298] [transport.py] [_log()] userauth is OK
2026-02-15T19:59:02.774 [DEBUG] [Thread-210298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:59:02.775 [DEBUG] [Thread-210298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:59:02.775 [DEBUG] [Thread-210298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:59:02.775 [DEBUG] [Thread-210298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:59:02.799 [INFO] [Thread-210298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:59:02.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:59:02.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:59:03.684 [DEBUG] [Thread-210298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:59:03.684 [DEBUG] [Thread-210298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:59:03.732 [DEBUG] [Thread-210298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:59:03.733 [DEBUG] [Thread-210298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:59:03.742 [DEBUG] [Thread-210298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:59:03.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:59:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:59:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:59:03.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:59:03.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:59:03.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:59:03.777 [DEBUG] [Thread-210298] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:59:07.438 [DEBUG] [Thread-210300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:07.691 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:11.239 [DEBUG] [Thread-210301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:26.292 [DEBUG] [Thread-210302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:31.186 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:33.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T19:59:33.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T19:59:33.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T19:59:35.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 58, 56), 14.76, 37.27, 0.0, 30.82, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T19:59:35.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:58:56
2026-02-15T19:59:36.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T19:59:36.390 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:36.397 [DEBUG] [Thread-210303] [transport.py] [_log()] starting thread (client mode): 0xa2d120b0
2026-02-15T19:59:36.397 [DEBUG] [Thread-210303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:59:36.417 [DEBUG] [Thread-210303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T19:59:36.417 [INFO] [Thread-210303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] client lang: <none>
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] server lang: <none>
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] kex follows: False
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:59:36.421 [DEBUG] [Thread-210303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:59:36.422 [DEBUG] [Thread-210303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:59:36.422 [DEBUG] [Thread-210303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:59:36.422 [DEBUG] [Thread-210303] [transport.py] [_log()] Compression: none
2026-02-15T19:59:36.422 [DEBUG] [Thread-210303] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:59:36.443 [DEBUG] [Thread-210303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:59:36.443 [DEBUG] [Thread-210303] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:59:36.444 [DEBUG] [Thread-210303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T19:59:36.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T19:59:36.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:59:36.446 [DEBUG] [Thread-210303] [transport.py] [_log()] userauth is OK
2026-02-15T19:59:36.447 [DEBUG] [Thread-210303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:59:36.447 [DEBUG] [Thread-210303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:59:36.447 [DEBUG] [Thread-210303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T19:59:36.447 [DEBUG] [Thread-210303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:59:36.461 [INFO] [Thread-210303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:59:36.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:59:37.059 [DEBUG] [Thread-210303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:59:37.060 [DEBUG] [Thread-210303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:59:37.060 [DEBUG] [Thread-210303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T19:59:37.101 [DEBUG] [Thread-210303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:59:37.101 [DEBUG] [Thread-210303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:59:37.106 [DEBUG] [Thread-210303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:59:37.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:59:37.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T19:59:37.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T19:59:37.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T19:59:37.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:59:37.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T19:59:37.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:59:37.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:59:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T19:59:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.749399 -999.00  +17.10  24.45     42   +4.30 1 1 1 1 1    84    0 12.48 -26.86 ----- 22.9 24.4 158.8 32.6 17.5 -25.3 17.4 -24.3 17.2 -23.2 17.5 -24.4
2026-02-15T19:59:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T19:59:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T19:59:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.749399
2026-02-15T19:59:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T19:59:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T19:59:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T19:59:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T19:59:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T19:59:37.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:58:56', tmtdew=14.76, humidity=37.27, cloud=0.0, wind=30.82, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:59:08.074', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T19:59:37.131 [DEBUG] [Thread-210303] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:59:37.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T19:59:37.227 [DEBUG] [Thread-210306] [transport.py] [_log()] starting thread (client mode): 0xa2d3dc30
2026-02-15T19:59:37.228 [DEBUG] [Thread-210306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T19:59:37.242 [DEBUG] [Thread-210306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T19:59:37.242 [INFO] [Thread-210306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] client lang: <none>
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] server lang: <none>
2026-02-15T19:59:37.250 [DEBUG] [Thread-210306] [transport.py] [_log()] kex follows: False
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] Compression: none
2026-02-15T19:59:37.251 [DEBUG] [Thread-210306] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T19:59:37.310 [DEBUG] [Thread-210306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T19:59:37.311 [DEBUG] [Thread-210306] [transport.py] [_log()] Switch to new keys ...
2026-02-15T19:59:37.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T19:59:37.312 [DEBUG] [Thread-210306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T19:59:37.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T19:59:37.366 [DEBUG] [Thread-210306] [transport.py] [_log()] userauth is OK
2026-02-15T19:59:37.366 [DEBUG] [Thread-210306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T19:59:37.366 [DEBUG] [Thread-210306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T19:59:37.366 [DEBUG] [Thread-210306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T19:59:37.366 [DEBUG] [Thread-210306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T19:59:37.384 [INFO] [Thread-210306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T19:59:37.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T19:59:37.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T19:59:38.262 [DEBUG] [Thread-210306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T19:59:38.263 [DEBUG] [Thread-210306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T19:59:38.310 [DEBUG] [Thread-210306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T19:59:38.311 [DEBUG] [Thread-210306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T19:59:38.320 [DEBUG] [Thread-210306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T19:59:38.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T19:59:38.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T19:59:38.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T19:59:38.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T19:59:38.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T19:59:38.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T19:59:38.356 [DEBUG] [Thread-210306] [transport.py] [_log()] EOF in transport thread
2026-02-15T19:59:41.328 [DEBUG] [Thread-210308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:41.437 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T19:59:56.381 [DEBUG] [Thread-210309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:04.890 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:07.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:07.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:07.491 [DEBUG] [Thread-210310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:08.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:00:08.379 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:00:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:00:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 19, 59, 33), 15.0, 36.57, 0.0, 33.06, 17.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:00:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 19:59:33
2026-02-15T20:00:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:00:10.827 [DEBUG] [Thread-210311] [transport.py] [_log()] starting thread (client mode): 0xa5758b20
2026-02-15T20:00:10.828 [DEBUG] [Thread-210311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:00:10.847 [DEBUG] [Thread-210311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:00:10.847 [INFO] [Thread-210311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:00:10.850 [DEBUG] [Thread-210311] [transport.py] [_log()] client lang: <none>
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] server lang: <none>
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] kex follows: False
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] Compression: none
2026-02-15T20:00:10.851 [DEBUG] [Thread-210311] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:00:10.869 [DEBUG] [Thread-210311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:00:10.869 [DEBUG] [Thread-210311] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:00:10.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:00:10.871 [DEBUG] [Thread-210311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:00:10.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:00:10.913 [DEBUG] [Thread-210311] [transport.py] [_log()] userauth is OK
2026-02-15T20:00:10.913 [DEBUG] [Thread-210311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:00:10.914 [DEBUG] [Thread-210311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:00:10.914 [DEBUG] [Thread-210311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:00:10.914 [DEBUG] [Thread-210311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:00:10.951 [INFO] [Thread-210311] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:00:10.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:00:11.416 [DEBUG] [Thread-210313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:15.674 [DEBUG] [Thread-210311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:00:15.675 [DEBUG] [Thread-210311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:00:15.675 [DEBUG] [Thread-210311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:00:15.716 [DEBUG] [Thread-210311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:00:15.716 [DEBUG] [Thread-210311] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:00:15.720 [DEBUG] [Thread-210311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:00:15.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:00:15.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:00:15.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:00:15.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:00:15.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:00:15.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:00:15.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:00:15.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:00:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:00:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.749746 -999.00  +17.10  24.29     42   +4.30 1 1 1 1 1    76    0 12.50 -24.36 ----- 23.9 24.3 140.2 32.9 17.5 -25.3 17.4 -24.3 17.2 -23.1 17.5 -24.5
2026-02-15T20:00:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:00:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:00:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.749746
2026-02-15T20:00:15.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:00:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:00:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:00:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:00:15.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:00:15.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T19:59:33', tmtdew=15.0, humidity=36.57, cloud=0.0, wind=33.06, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T17:59:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:00:15.947 [DEBUG] [Thread-210311] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:00:16.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:00:16.034 [DEBUG] [Thread-210315] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-15T20:00:16.034 [DEBUG] [Thread-210315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:00:16.050 [DEBUG] [Thread-210315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:00:16.050 [INFO] [Thread-210315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] client lang: <none>
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] server lang: <none>
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] kex follows: False
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] Compression: none
2026-02-15T20:00:16.057 [DEBUG] [Thread-210315] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:00:16.114 [DEBUG] [Thread-210315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:00:16.115 [DEBUG] [Thread-210315] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:00:16.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:00:16.116 [DEBUG] [Thread-210315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:00:16.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:00:16.170 [DEBUG] [Thread-210315] [transport.py] [_log()] userauth is OK
2026-02-15T20:00:16.170 [DEBUG] [Thread-210315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:00:16.171 [DEBUG] [Thread-210315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:00:16.171 [DEBUG] [Thread-210315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:00:16.171 [DEBUG] [Thread-210315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:00:16.189 [INFO] [Thread-210315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:00:16.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:00:16.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:00:17.012 [DEBUG] [Thread-210315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:00:17.013 [DEBUG] [Thread-210315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:00:17.060 [DEBUG] [Thread-210315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:00:17.061 [DEBUG] [Thread-210315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:00:17.070 [DEBUG] [Thread-210315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:00:17.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:00:17.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:00:17.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:00:17.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:00:17.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:00:17.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:00:17.107 [DEBUG] [Thread-210315] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:00:26.452 [DEBUG] [Thread-210317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:28.332 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:41.502 [DEBUG] [Thread-210318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:00:47.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:00:47.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:00:47.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:00:49.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 0, 9), 14.76, 37.25, 0.0, 30.49, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:00:49.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:00:09
2026-02-15T20:00:49.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:00:49.655 [DEBUG] [Thread-210319] [transport.py] [_log()] starting thread (client mode): 0xa2d56f50
2026-02-15T20:00:49.655 [DEBUG] [Thread-210319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:00:49.674 [DEBUG] [Thread-210319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:00:49.675 [INFO] [Thread-210319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:00:49.677 [DEBUG] [Thread-210319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] client lang: <none>
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] server lang: <none>
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] kex follows: False
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] Compression: none
2026-02-15T20:00:49.678 [DEBUG] [Thread-210319] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:00:49.695 [DEBUG] [Thread-210319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:00:49.696 [DEBUG] [Thread-210319] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:00:49.696 [DEBUG] [Thread-210319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:00:49.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:00:49.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:00:49.698 [DEBUG] [Thread-210319] [transport.py] [_log()] userauth is OK
2026-02-15T20:00:49.698 [DEBUG] [Thread-210319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:00:49.698 [DEBUG] [Thread-210319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:00:49.698 [DEBUG] [Thread-210319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:00:49.698 [DEBUG] [Thread-210319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:00:49.734 [INFO] [Thread-210319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:00:49.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:00:50.358 [DEBUG] [Thread-210319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:00:50.358 [DEBUG] [Thread-210319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:00:50.359 [DEBUG] [Thread-210319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:00:50.399 [DEBUG] [Thread-210319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:00:50.400 [DEBUG] [Thread-210319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:00:50.403 [DEBUG] [Thread-210319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:00:50.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:00:50.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:00:50.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:00:50.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:00:50.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:00:50.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:00:50.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:00:50.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:00:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:00:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.750093 -999.00  +17.10  15.16     42   +4.30 1 1 1 1 1    70    0 12.02 -25.09 ----- 19.3 15.2 146.0 34.5 17.5 -25.3 17.4 -24.3 17.2 -23.2 17.5 -24.5
2026-02-15T20:00:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:00:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:00:50.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.750093
2026-02-15T20:00:50.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:00:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:00:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:00:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:00:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:00:50.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:00:09', tmtdew=14.76, humidity=37.25, cloud=0.0, wind=30.49, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:00:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:00:50.431 [DEBUG] [Thread-210319] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:00:50.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:00:50.526 [DEBUG] [Thread-210322] [transport.py] [_log()] starting thread (client mode): 0xa2d57310
2026-02-15T20:00:50.526 [DEBUG] [Thread-210322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:00:50.541 [DEBUG] [Thread-210322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:00:50.542 [INFO] [Thread-210322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:50.549 [DEBUG] [Thread-210322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] client lang: <none>
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] server lang: <none>
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] kex follows: False
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] Compression: none
2026-02-15T20:00:50.550 [DEBUG] [Thread-210322] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:00:50.606 [DEBUG] [Thread-210322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:00:50.606 [DEBUG] [Thread-210322] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:00:50.607 [DEBUG] [Thread-210322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:00:50.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:00:50.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:00:50.662 [DEBUG] [Thread-210322] [transport.py] [_log()] userauth is OK
2026-02-15T20:00:50.662 [DEBUG] [Thread-210322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:00:50.662 [DEBUG] [Thread-210322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:00:50.663 [DEBUG] [Thread-210322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:00:50.663 [DEBUG] [Thread-210322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:00:50.682 [INFO] [Thread-210322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:00:50.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:00:50.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:00:51.506 [DEBUG] [Thread-210322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:00:51.506 [DEBUG] [Thread-210322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:00:51.554 [DEBUG] [Thread-210322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:00:51.554 [DEBUG] [Thread-210322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:00:51.563 [DEBUG] [Thread-210322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:00:51.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:00:51.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:00:51.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
2026-02-15T20:00:51.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:00:51.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:00:51.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:00:51.597 [DEBUG] [Thread-210322] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:00:56.536 [DEBUG] [Thread-210324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:07.568 [DEBUG] [Thread-210325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:11.276 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:11.277 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:11.596 [DEBUG] [Thread-210326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:21.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:01:21.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:01:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:01:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 0, 44), 14.73, 37.35, 0.0, 29.64, 17.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:01:23.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:00:44
2026-02-15T20:01:24.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:01:24.276 [DEBUG] [Thread-210327] [transport.py] [_log()] starting thread (client mode): 0xa2d10f40
2026-02-15T20:01:24.276 [DEBUG] [Thread-210327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:01:24.295 [DEBUG] [Thread-210327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:01:24.295 [INFO] [Thread-210327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] client lang: <none>
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] server lang: <none>
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] kex follows: False
2026-02-15T20:01:24.297 [DEBUG] [Thread-210327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:01:24.298 [DEBUG] [Thread-210327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:01:24.298 [DEBUG] [Thread-210327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:01:24.298 [DEBUG] [Thread-210327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:01:24.298 [DEBUG] [Thread-210327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:01:24.298 [DEBUG] [Thread-210327] [transport.py] [_log()] Compression: none
2026-02-15T20:01:24.298 [DEBUG] [Thread-210327] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:01:24.308 [DEBUG] [Thread-210327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:01:24.308 [DEBUG] [Thread-210327] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:01:24.309 [DEBUG] [Thread-210327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:01:24.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:01:24.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:01:24.311 [DEBUG] [Thread-210327] [transport.py] [_log()] userauth is OK
2026-02-15T20:01:24.311 [DEBUG] [Thread-210327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:01:24.311 [DEBUG] [Thread-210327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:01:24.311 [DEBUG] [Thread-210327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:01:24.311 [DEBUG] [Thread-210327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:01:24.346 [INFO] [Thread-210327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:01:24.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:01:24.995 [DEBUG] [Thread-210327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:01:24.995 [DEBUG] [Thread-210327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:01:24.995 [DEBUG] [Thread-210327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:01:25.036 [DEBUG] [Thread-210327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:01:25.036 [DEBUG] [Thread-210327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:01:25.039 [DEBUG] [Thread-210327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:01:25.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:01:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:01:25.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:01:25.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:01:25.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:01:25.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:01:25.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:01:25.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:01:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:01:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.750440 -999.00  +17.10  24.96     42   +4.30 1 1 1 1 1    64    0 12.19 -24.58 ----- 22.2 25.0 154.4 30.0 17.5 -25.3 17.4 -24.3 17.1 -23.0 17.4 -24.4
2026-02-15T20:01:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:01:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:01:25.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.750440
2026-02-15T20:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:00:44', tmtdew=14.73, humidity=37.35, cloud=0.0, wind=29.64, temperature=17.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:00:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:01:25.065 [DEBUG] [Thread-210327] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:01:25.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:01:25.159 [DEBUG] [Thread-210330] [transport.py] [_log()] starting thread (client mode): 0xa2d6e560
2026-02-15T20:01:25.159 [DEBUG] [Thread-210330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:01:25.173 [DEBUG] [Thread-210330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:01:25.173 [INFO] [Thread-210330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:01:25.180 [DEBUG] [Thread-210330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] client lang: <none>
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] server lang: <none>
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] kex follows: False
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] Compression: none
2026-02-15T20:01:25.181 [DEBUG] [Thread-210330] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:01:25.237 [DEBUG] [Thread-210330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:01:25.238 [DEBUG] [Thread-210330] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:01:25.238 [DEBUG] [Thread-210330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:01:25.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:01:25.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:01:25.294 [DEBUG] [Thread-210330] [transport.py] [_log()] userauth is OK
2026-02-15T20:01:25.294 [DEBUG] [Thread-210330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:01:25.294 [DEBUG] [Thread-210330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:01:25.294 [DEBUG] [Thread-210330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:01:25.294 [DEBUG] [Thread-210330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:01:25.313 [INFO] [Thread-210330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:01:25.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:01:25.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:01:26.147 [DEBUG] [Thread-210330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:01:26.147 [DEBUG] [Thread-210330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:01:26.195 [DEBUG] [Thread-210330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:01:26.195 [DEBUG] [Thread-210330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:01:26.203 [DEBUG] [Thread-210330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:01:26.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:01:26.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:01:26.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:01:26.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:01:26.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:01:26.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:01:26.235 [DEBUG] [Thread-210330] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:01:26.630 [DEBUG] [Thread-210332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:28.096 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:34.168 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:41.673 [DEBUG] [Thread-210333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:44.570 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:53.967 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:56.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:01:56.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:01:56.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:01:56.707 [DEBUG] [Thread-210334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:01:58.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 1, 19), 14.73, 37.35, 0.0, 30.31, 17.26, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:01:58.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:01:19
2026-02-15T20:01:58.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:01:58.931 [DEBUG] [Thread-210335] [transport.py] [_log()] starting thread (client mode): 0xa2d3d780
2026-02-15T20:01:58.931 [DEBUG] [Thread-210335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:01:58.951 [DEBUG] [Thread-210335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:01:58.951 [INFO] [Thread-210335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] client lang: <none>
2026-02-15T20:01:58.954 [DEBUG] [Thread-210335] [transport.py] [_log()] server lang: <none>
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] kex follows: False
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] Compression: none
2026-02-15T20:01:58.955 [DEBUG] [Thread-210335] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:01:58.976 [DEBUG] [Thread-210335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:01:58.977 [DEBUG] [Thread-210335] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:01:58.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:01:58.979 [DEBUG] [Thread-210335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:01:58.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:01:58.980 [DEBUG] [Thread-210335] [transport.py] [_log()] userauth is OK
2026-02-15T20:01:58.981 [DEBUG] [Thread-210335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:01:58.981 [DEBUG] [Thread-210335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:01:58.981 [DEBUG] [Thread-210335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:01:58.981 [DEBUG] [Thread-210335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:01:59.006 [INFO] [Thread-210335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:01:59.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:01:59.660 [DEBUG] [Thread-210335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:01:59.660 [DEBUG] [Thread-210335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:01:59.660 [DEBUG] [Thread-210335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:01:59.701 [DEBUG] [Thread-210335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:01:59.702 [DEBUG] [Thread-210335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:01:59.705 [DEBUG] [Thread-210335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:01:59.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:01:59.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:01:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:01:59.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:01:59.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:01:59.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:01:59.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:01:59.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:01:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:01:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.750788 -999.00  +17.10  23.27     42   +4.30 1 1 1 1 1    58    0 12.43 -25.11 ----- 21.0 23.3 150.0 33.2 17.4 -25.3 17.4 -24.3 17.2 -23.1 17.4 -24.6
2026-02-15T20:01:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:01:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:01:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.750788
2026-02-15T20:01:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:01:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:01:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:01:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:01:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:01:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:01:19', tmtdew=14.73, humidity=37.35, cloud=0.0, wind=30.31, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:01:08.083', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:01:59.731 [DEBUG] [Thread-210335] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:01:59.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:01:59.828 [DEBUG] [Thread-210338] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T20:01:59.828 [DEBUG] [Thread-210338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:01:59.842 [DEBUG] [Thread-210338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:01:59.842 [INFO] [Thread-210338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] client lang: <none>
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] server lang: <none>
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] kex follows: False
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:01:59.850 [DEBUG] [Thread-210338] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:01:59.851 [DEBUG] [Thread-210338] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:01:59.851 [DEBUG] [Thread-210338] [transport.py] [_log()] Compression: none
2026-02-15T20:01:59.851 [DEBUG] [Thread-210338] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:01:59.910 [DEBUG] [Thread-210338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:01:59.911 [DEBUG] [Thread-210338] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:01:59.911 [DEBUG] [Thread-210338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:01:59.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:01:59.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:01:59.966 [DEBUG] [Thread-210338] [transport.py] [_log()] userauth is OK
2026-02-15T20:01:59.967 [DEBUG] [Thread-210338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:01:59.967 [DEBUG] [Thread-210338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:01:59.967 [DEBUG] [Thread-210338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:01:59.967 [DEBUG] [Thread-210338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:01:59.986 [INFO] [Thread-210338] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:01:59.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:01:59.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:02:00.830 [DEBUG] [Thread-210338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:02:00.831 [DEBUG] [Thread-210338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:02:00.878 [DEBUG] [Thread-210338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:02:00.879 [DEBUG] [Thread-210338] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:02:00.888 [DEBUG] [Thread-210338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:02:00.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:02:00.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:02:00.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:02:00.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:02:00.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:02:00.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:02:00.922 [DEBUG] [Thread-210338] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:02:04.450 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:07.637 [DEBUG] [Thread-210340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:10.549 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:11.744 [DEBUG] [Thread-210341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:15.912 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:15.913 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:18.949 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:26.357 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:26.799 [DEBUG] [Thread-210342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:30.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:02:30.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:02:30.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:02:33.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 1, 55), 14.74, 37.32, 0.0, 29.08, 17.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:02:33.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:01:55
2026-02-15T20:02:33.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:02:33.700 [DEBUG] [Thread-210343] [transport.py] [_log()] starting thread (client mode): 0xa2d55180
2026-02-15T20:02:33.700 [DEBUG] [Thread-210343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:02:33.719 [DEBUG] [Thread-210343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:02:33.720 [INFO] [Thread-210343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] client lang: <none>
2026-02-15T20:02:33.723 [DEBUG] [Thread-210343] [transport.py] [_log()] server lang: <none>
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] kex follows: False
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] Compression: none
2026-02-15T20:02:33.724 [DEBUG] [Thread-210343] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:02:33.742 [DEBUG] [Thread-210343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:02:33.743 [DEBUG] [Thread-210343] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:02:33.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:02:33.745 [DEBUG] [Thread-210343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:02:33.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:02:33.747 [DEBUG] [Thread-210343] [transport.py] [_log()] userauth is OK
2026-02-15T20:02:33.747 [DEBUG] [Thread-210343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:02:33.748 [DEBUG] [Thread-210343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:02:33.748 [DEBUG] [Thread-210343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:02:33.748 [DEBUG] [Thread-210343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:02:33.779 [INFO] [Thread-210343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:02:33.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:02:34.390 [DEBUG] [Thread-210343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:02:34.390 [DEBUG] [Thread-210343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:02:34.390 [DEBUG] [Thread-210343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:02:34.431 [DEBUG] [Thread-210343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:02:34.431 [DEBUG] [Thread-210343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:02:34.433 [DEBUG] [Thread-210343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:02:34.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:02:34.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:02:34.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:02:34.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:02:34.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:02:34.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:02:34.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.751135 -999.00  +17.10  21.78     42   +4.30 1 1 1 1 1    53    0 12.12 -26.33 ----- 18.1 21.8 146.1 30.0 17.4 -25.3 17.4 -24.3 17.2 -23.1 17.4 -24.5
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.751135
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:02:34.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:01:55', tmtdew=14.74, humidity=37.32, cloud=0.0, wind=29.08, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:01:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:02:34.451 [DEBUG] [Thread-210343] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:02:34.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:02:34.535 [DEBUG] [Thread-210346] [transport.py] [_log()] starting thread (client mode): 0xa57e2020
2026-02-15T20:02:34.535 [DEBUG] [Thread-210346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:02:34.551 [DEBUG] [Thread-210346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:02:34.551 [INFO] [Thread-210346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] client lang: <none>
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] server lang: <none>
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] kex follows: False
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:02:34.558 [DEBUG] [Thread-210346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:02:34.559 [DEBUG] [Thread-210346] [transport.py] [_log()] Compression: none
2026-02-15T20:02:34.559 [DEBUG] [Thread-210346] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:02:34.616 [DEBUG] [Thread-210346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:02:34.616 [DEBUG] [Thread-210346] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:02:34.617 [DEBUG] [Thread-210346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:02:34.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:02:34.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:02:34.676 [DEBUG] [Thread-210346] [transport.py] [_log()] userauth is OK
2026-02-15T20:02:34.677 [DEBUG] [Thread-210346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:02:34.677 [DEBUG] [Thread-210346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:02:34.677 [DEBUG] [Thread-210346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:02:34.677 [DEBUG] [Thread-210346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:02:34.701 [INFO] [Thread-210346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:02: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-02-15T20:02:34.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:02:35.570 [DEBUG] [Thread-210346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:02:35.570 [DEBUG] [Thread-210346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:02:35.618 [DEBUG] [Thread-210346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:02:35.619 [DEBUG] [Thread-210346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:02:35.628 [DEBUG] [Thread-210346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:02:35.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:02:35.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:02:35.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:02:35.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:02:35.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:02:35.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:02:35.664 [DEBUG] [Thread-210346] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:02:36.729 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:41.835 [DEBUG] [Thread-210348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:42.796 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:50.243 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:56.887 [DEBUG] [Thread-210349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:02:57.642 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:05.151 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:05.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:03:05.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:03:05.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:03:07.693 [DEBUG] [Thread-210350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:07.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 2, 30), 14.74, 37.3, 0.0, 28.97, 17.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:03:07.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:02:30
2026-02-15T20:03:08.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:03:08.332 [DEBUG] [Thread-210351] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-15T20:03:08.332 [DEBUG] [Thread-210351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:03:08.360 [DEBUG] [Thread-210351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:03:08.360 [INFO] [Thread-210351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:03:08.362 [DEBUG] [Thread-210351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:03:08.362 [DEBUG] [Thread-210351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:03:08.362 [DEBUG] [Thread-210351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:03:08.362 [DEBUG] [Thread-210351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:08.362 [DEBUG] [Thread-210351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:08.362 [DEBUG] [Thread-210351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] client lang: <none>
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] server lang: <none>
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] kex follows: False
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:03:08.363 [DEBUG] [Thread-210351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:03:08.364 [DEBUG] [Thread-210351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:03:08.364 [DEBUG] [Thread-210351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:03:08.364 [DEBUG] [Thread-210351] [transport.py] [_log()] Compression: none
2026-02-15T20:03:08.364 [DEBUG] [Thread-210351] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:03:08.377 [DEBUG] [Thread-210351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:03:08.378 [DEBUG] [Thread-210351] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:03:08.378 [DEBUG] [Thread-210351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:03:08.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:03:08.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:03:08.381 [DEBUG] [Thread-210351] [transport.py] [_log()] userauth is OK
2026-02-15T20:03:08.381 [DEBUG] [Thread-210351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:03:08.381 [DEBUG] [Thread-210351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:03:08.381 [DEBUG] [Thread-210351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:03:08.382 [DEBUG] [Thread-210351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:03:08.399 [INFO] [Thread-210351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:03:08.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:03:09.012 [DEBUG] [Thread-210351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:03:09.013 [DEBUG] [Thread-210351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:03:09.013 [DEBUG] [Thread-210351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:03:09.053 [DEBUG] [Thread-210351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:03:09.054 [DEBUG] [Thread-210351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:03:09.057 [DEBUG] [Thread-210351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:03:09.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:03:09.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:03:09.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:03:09.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:03:09.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:03:09.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:03:09.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:03:09.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:03:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:03:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.751482 -999.00  +17.10  21.37     42   +4.30 1 1 1 1 1    48    0 12.01 -25.47 ----- 17.9 21.4 146.6 30.2 17.4 -25.4 17.4 -24.4 17.1 -23.2 17.4 -24.6
2026-02-15T20:03:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:03:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:03:09.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.751482
2026-02-15T20:03:09.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:03:09.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:03:09.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:03:09.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:03:09.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:03:09.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:02:30', tmtdew=14.74, humidity=37.3, cloud=0.0, wind=28.97, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:02:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:03:09.087 [DEBUG] [Thread-210351] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:03: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-02-15T20:03:09.181 [DEBUG] [Thread-210354] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T20:03:09.181 [DEBUG] [Thread-210354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:03:09.196 [DEBUG] [Thread-210354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:03:09.196 [INFO] [Thread-210354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:03:09.204 [DEBUG] [Thread-210354] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] client lang: <none>
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] server lang: <none>
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] kex follows: False
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] Compression: none
2026-02-15T20:03:09.205 [DEBUG] [Thread-210354] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:03:09.262 [DEBUG] [Thread-210354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:03:09.262 [DEBUG] [Thread-210354] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:03:09.263 [DEBUG] [Thread-210354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:03:09.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:03:09.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:03:09.318 [DEBUG] [Thread-210354] [transport.py] [_log()] userauth is OK
2026-02-15T20:03:09.319 [DEBUG] [Thread-210354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:03:09.319 [DEBUG] [Thread-210354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:03:09.319 [DEBUG] [Thread-210354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:03:09.319 [DEBUG] [Thread-210354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:03:09.338 [INFO] [Thread-210354] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:03:09.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:03:09.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:03:10.155 [DEBUG] [Thread-210354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:03:10.155 [DEBUG] [Thread-210354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:03:10.203 [DEBUG] [Thread-210354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:03:10.203 [DEBUG] [Thread-210354] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:03:10.213 [DEBUG] [Thread-210354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:03:10.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:03:10.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:03:10.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:03:10.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:03:10.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:03:10.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:03:10.251 [DEBUG] [Thread-210354] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:03:11.217 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:11.920 [DEBUG] [Thread-210356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:18.615 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:20.897 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:20.898 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:25.980 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:26.983 [DEBUG] [Thread-210357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:32.414 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:38.520 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:40.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:03:40.263 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:03:40.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:03:42.024 [DEBUG] [Thread-210358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:42.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 3, 6), 14.74, 37.32, 0.0, 28.57, 17.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:03:42.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:03:06
2026-02-15T20:03:43.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:03:43.321 [DEBUG] [Thread-210359] [transport.py] [_log()] starting thread (client mode): 0xa2dc18a0
2026-02-15T20:03:43.321 [DEBUG] [Thread-210359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:03:43.342 [DEBUG] [Thread-210359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:03:43.342 [INFO] [Thread-210359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] client lang: <none>
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] server lang: <none>
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] kex follows: False
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] Compression: none
2026-02-15T20:03:43.345 [DEBUG] [Thread-210359] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:03:43.362 [DEBUG] [Thread-210359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:03:43.363 [DEBUG] [Thread-210359] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:03:43.363 [DEBUG] [Thread-210359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:03:43.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:03:43.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:03:43.365 [DEBUG] [Thread-210359] [transport.py] [_log()] userauth is OK
2026-02-15T20:03:43.365 [DEBUG] [Thread-210359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:03:43.365 [DEBUG] [Thread-210359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:03:43.365 [DEBUG] [Thread-210359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:03:43.366 [DEBUG] [Thread-210359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:03:43.384 [INFO] [Thread-210359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:03:43.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:03:43.939 [DEBUG] [Thread-210359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:03:43.939 [DEBUG] [Thread-210359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:03:43.940 [DEBUG] [Thread-210359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:03:43.981 [DEBUG] [Thread-210359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:03:43.981 [DEBUG] [Thread-210359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:03:43.986 [DEBUG] [Thread-210359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:03:43.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:03:43.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:03:43.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:03:43.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:03:44.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:03:44.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:03:44.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:03:44.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:03:44.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:03:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.752176 -999.00  +17.10  22.52     42   +4.30 1 1 1 1 1    40    0 12.01 -23.41 ----- 21.0 22.5 156.7 30.3 17.4 -25.3 17.3 -24.3 17.1 -23.1 17.4 -24.3
2026-02-15T20:03:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:03:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:03:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.752176
2026-02-15T20:03:44.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:03:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:03:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:03:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:03:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:03:44.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:03:06', tmtdew=14.74, humidity=37.32, cloud=0.0, wind=28.57, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:03:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:03:44.009 [DEBUG] [Thread-210359] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:03:44.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:03:44.104 [DEBUG] [Thread-210362] [transport.py] [_log()] starting thread (client mode): 0xa2d54610
2026-02-15T20:03:44.105 [DEBUG] [Thread-210362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:03:44.119 [DEBUG] [Thread-210362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:03:44.119 [INFO] [Thread-210362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] client lang: <none>
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] server lang: <none>
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] kex follows: False
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:03:44.127 [DEBUG] [Thread-210362] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:03:44.128 [DEBUG] [Thread-210362] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:03:44.128 [DEBUG] [Thread-210362] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:03:44.128 [DEBUG] [Thread-210362] [transport.py] [_log()] Compression: none
2026-02-15T20:03:44.128 [DEBUG] [Thread-210362] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:03:44.186 [DEBUG] [Thread-210362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:03:44.187 [DEBUG] [Thread-210362] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:03:44.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:03:44.188 [DEBUG] [Thread-210362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:03:44.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:03:44.242 [DEBUG] [Thread-210362] [transport.py] [_log()] userauth is OK
2026-02-15T20:03:44.242 [DEBUG] [Thread-210362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:03:44.242 [DEBUG] [Thread-210362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:03:44.242 [DEBUG] [Thread-210362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:03:44.243 [DEBUG] [Thread-210362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:03:44.261 [INFO] [Thread-210362] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:03:44.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:03:44.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:03:45.059 [DEBUG] [Thread-210362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:03:45.059 [DEBUG] [Thread-210362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:03:45.107 [DEBUG] [Thread-210362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:03:45.107 [DEBUG] [Thread-210362] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:03:45.116 [DEBUG] [Thread-210362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:03:45.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:03:45.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:03:45.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:03:45.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:03:45.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:03:45.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:03:45.151 [DEBUG] [Thread-210362] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:03:45.903 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:53.284 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:03:57.060 [DEBUG] [Thread-210364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:04.985 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:07.771 [DEBUG] [Thread-210365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:10.055 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:12.109 [DEBUG] [Thread-210366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:15.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:04:15.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:04:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:04:17.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 3, 42), 15.0, 36.57, 0.0, 35.74, 17.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:04:17.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:03:42
2026-02-15T20:04:17.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:04:17.441 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:17.591 [DEBUG] [Thread-210367] [transport.py] [_log()] starting thread (client mode): 0xa57b10f0
2026-02-15T20:04:17.591 [DEBUG] [Thread-210367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:04:17.611 [DEBUG] [Thread-210367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:04:17.611 [INFO] [Thread-210367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] client lang: <none>
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] server lang: <none>
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] kex follows: False
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] Compression: none
2026-02-15T20:04:17.612 [DEBUG] [Thread-210367] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:04:17.632 [DEBUG] [Thread-210367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:04:17.633 [DEBUG] [Thread-210367] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:04:17.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:04:17.634 [DEBUG] [Thread-210367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:04:17.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:04:17.636 [DEBUG] [Thread-210367] [transport.py] [_log()] userauth is OK
2026-02-15T20:04:17.637 [DEBUG] [Thread-210367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:04:17.637 [DEBUG] [Thread-210367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:04:17.637 [DEBUG] [Thread-210367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:04:17.637 [DEBUG] [Thread-210367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:04:17.662 [INFO] [Thread-210367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:04:17.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:04:18.302 [DEBUG] [Thread-210367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:04:18.302 [DEBUG] [Thread-210367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:04:18.303 [DEBUG] [Thread-210367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:04:18.343 [DEBUG] [Thread-210367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:04:18.344 [DEBUG] [Thread-210367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:04:18.347 [DEBUG] [Thread-210367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:04:18.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:04:18.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:04:18.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:04:18.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:04:18.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:04:18.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:04:18.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:04:18.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:04:18.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:04:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.752871 -999.00  +17.10  24.13     42   +4.30 1 1 1 1 1    33    0 12.30 -21.85 ----- 19.7 24.1 156.4 31.0 17.4 -25.1 17.3 -24.3 17.1 -23.1 17.4 -24.4
2026-02-15T20:04:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:04:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:04:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.752871
2026-02-15T20:04:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:04:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:04:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:04:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:04:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:04:18.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:03:42', tmtdew=15.0, humidity=36.57, cloud=0.0, wind=35.74, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:04:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:04:18.374 [DEBUG] [Thread-210367] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:04:18.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:04:18.461 [DEBUG] [Thread-210370] [transport.py] [_log()] starting thread (client mode): 0xa2d12380
2026-02-15T20:04:18.461 [DEBUG] [Thread-210370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:04:18.476 [DEBUG] [Thread-210370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:04:18.476 [INFO] [Thread-210370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:04:18.483 [DEBUG] [Thread-210370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:04:18.483 [DEBUG] [Thread-210370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:04:18.483 [DEBUG] [Thread-210370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:04:18.483 [DEBUG] [Thread-210370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:18.483 [DEBUG] [Thread-210370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] client lang: <none>
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] server lang: <none>
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] kex follows: False
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:04:18.484 [DEBUG] [Thread-210370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:04:18.485 [DEBUG] [Thread-210370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:04:18.485 [DEBUG] [Thread-210370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:04:18.485 [DEBUG] [Thread-210370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:04:18.485 [DEBUG] [Thread-210370] [transport.py] [_log()] Compression: none
2026-02-15T20:04:18.485 [DEBUG] [Thread-210370] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:04:18.543 [DEBUG] [Thread-210370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:04:18.543 [DEBUG] [Thread-210370] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:04:18.544 [DEBUG] [Thread-210370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:04:18.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:04:18.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:04:18.602 [DEBUG] [Thread-210370] [transport.py] [_log()] userauth is OK
2026-02-15T20:04:18.602 [DEBUG] [Thread-210370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:04:18.603 [DEBUG] [Thread-210370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:04:18.603 [DEBUG] [Thread-210370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:04:18.603 [DEBUG] [Thread-210370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:04:18.621 [INFO] [Thread-210370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:04:18.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:04:18.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:04:19.419 [DEBUG] [Thread-210370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:04:19.419 [DEBUG] [Thread-210370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:04:19.471 [DEBUG] [Thread-210370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:04:19.471 [DEBUG] [Thread-210370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:04:19.483 [DEBUG] [Thread-210370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:04:19.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:04:19.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:04:19.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:04:19.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:04:19.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:04:19.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:04:19.523 [DEBUG] [Thread-210370] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:04:24.833 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:27.145 [DEBUG] [Thread-210372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:27.187 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:27.188 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:29.279 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:34.356 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:41.825 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:42.208 [DEBUG] [Thread-210373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:49.309 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:04:49.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:04:49.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:04:49.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:04:51.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 4, 18), 14.77, 37.24, 0.0, 30.26, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:04:51.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:04:18
2026-02-15T20:04:51.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:04:52.066 [DEBUG] [Thread-210374] [transport.py] [_log()] starting thread (client mode): 0xa2dc1390
2026-02-15T20:04:52.066 [DEBUG] [Thread-210374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:04:52.085 [DEBUG] [Thread-210374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:04:52.085 [INFO] [Thread-210374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:04:52.088 [DEBUG] [Thread-210374] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:04:52.088 [DEBUG] [Thread-210374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] client lang: <none>
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] server lang: <none>
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] kex follows: False
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:04:52.089 [DEBUG] [Thread-210374] [transport.py] [_log()] Compression: none
2026-02-15T20:04:52.090 [DEBUG] [Thread-210374] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:04:52.106 [DEBUG] [Thread-210374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:04:52.106 [DEBUG] [Thread-210374] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:04:52.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:04:52.107 [DEBUG] [Thread-210374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:04:52.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:04:52.109 [DEBUG] [Thread-210374] [transport.py] [_log()] userauth is OK
2026-02-15T20:04:52.109 [DEBUG] [Thread-210374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:04:52.109 [DEBUG] [Thread-210374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:04:52.109 [DEBUG] [Thread-210374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:04:52.109 [DEBUG] [Thread-210374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:04:52.124 [INFO] [Thread-210374] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:04:52.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:04:52.737 [DEBUG] [Thread-210374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:04:52.737 [DEBUG] [Thread-210374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:04:52.737 [DEBUG] [Thread-210374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:04:52.778 [DEBUG] [Thread-210374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:04:52.778 [DEBUG] [Thread-210374] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:04:52.780 [DEBUG] [Thread-210374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:04:52.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:04:52.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:04:52.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:04:52.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:04:52.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:04:52.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:04:52.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:04:52.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:04:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:04:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.753218 -999.00  +17.10  20.85     42   +4.30 1 1 1 1 1    30    0 12.38 -21.35 ----- 16.5 20.9 152.6 27.6 17.4 -25.1 17.3 -24.3 17.1 -23.1 17.4 -24.3
2026-02-15T20:04:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:04:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:04:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.753218
2026-02-15T20:04:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:04:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:04:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:04:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:04:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:04:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:04:18', tmtdew=14.77, humidity=37.24, cloud=0.0, wind=30.26, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:04:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:04:52.805 [DEBUG] [Thread-210374] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:04:52.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:04:52.913 [DEBUG] [Thread-210377] [transport.py] [_log()] starting thread (client mode): 0xa2d12950
2026-02-15T20:04:52.913 [DEBUG] [Thread-210377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:04:52.927 [DEBUG] [Thread-210377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:04:52.927 [INFO] [Thread-210377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:04:52.935 [DEBUG] [Thread-210377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:04:52.935 [DEBUG] [Thread-210377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] client lang: <none>
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] server lang: <none>
2026-02-15T20:04:52.936 [DEBUG] [Thread-210377] [transport.py] [_log()] kex follows: False
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] Compression: none
2026-02-15T20:04:52.937 [DEBUG] [Thread-210377] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:04:52.993 [DEBUG] [Thread-210377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:04:52.994 [DEBUG] [Thread-210377] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:04:52.995 [DEBUG] [Thread-210377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:04:52.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:04:52.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:04:53.049 [DEBUG] [Thread-210377] [transport.py] [_log()] userauth is OK
2026-02-15T20:04:53.050 [DEBUG] [Thread-210377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:04:53.050 [DEBUG] [Thread-210377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:04:53.050 [DEBUG] [Thread-210377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:04:53.050 [DEBUG] [Thread-210377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:04:53.068 [INFO] [Thread-210377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:04:53.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:04:53.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:04:53.885 [DEBUG] [Thread-210377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:04:53.885 [DEBUG] [Thread-210377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:04:53.933 [DEBUG] [Thread-210377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:04:53.934 [DEBUG] [Thread-210377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:04:53.943 [DEBUG] [Thread-210377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:04:53.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:04:53.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:04:53.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:04:53.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:04:53.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:04:53.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:04:53.977 [DEBUG] [Thread-210377] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:04:57.249 [DEBUG] [Thread-210379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:07.837 [DEBUG] [Thread-210380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:12.301 [DEBUG] [Thread-210381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:24.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:05:24.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:05:24.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:05:25.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 4, 53), 14.8, 37.3, 0.0, 28.62, 17.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:05:25.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:04:53
2026-02-15T20:05:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:05:26.370 [DEBUG] [Thread-210382] [transport.py] [_log()] starting thread (client mode): 0xa2d54730
2026-02-15T20:05:26.371 [DEBUG] [Thread-210382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:05:26.392 [DEBUG] [Thread-210382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:05:26.392 [INFO] [Thread-210382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:05:26.393 [DEBUG] [Thread-210382] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:05:26.393 [DEBUG] [Thread-210382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:05:26.393 [DEBUG] [Thread-210382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:05:26.393 [DEBUG] [Thread-210382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:05:26.393 [DEBUG] [Thread-210382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] client lang: <none>
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] server lang: <none>
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] kex follows: False
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] Compression: none
2026-02-15T20:05:26.394 [DEBUG] [Thread-210382] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:05:26.402 [DEBUG] [Thread-210382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:05:26.403 [DEBUG] [Thread-210382] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:05:26.403 [DEBUG] [Thread-210382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:05:26.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:05:26.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:05:26.405 [DEBUG] [Thread-210382] [transport.py] [_log()] userauth is OK
2026-02-15T20:05:26.405 [DEBUG] [Thread-210382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:05:26.405 [DEBUG] [Thread-210382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:05:26.405 [DEBUG] [Thread-210382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:05:26.405 [DEBUG] [Thread-210382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:05:26.430 [INFO] [Thread-210382] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:05:26.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:05:27.028 [DEBUG] [Thread-210382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:05:27.028 [DEBUG] [Thread-210382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:05:27.028 [DEBUG] [Thread-210382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:05:27.069 [DEBUG] [Thread-210382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:05:27.070 [DEBUG] [Thread-210382] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:05:27.073 [DEBUG] [Thread-210382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:05:27.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:05:27.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:05:27.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:05:27.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:05:27.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:05:27.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:05:27.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:05:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:05:27.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:05:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.753576 -999.00  +17.10  21.61     42   +4.30 1 1 1 1 1    27    0 12.40 -20.33 ----- 20.8 21.6 148.0 25.6 17.4 -25.2 17.3 -24.2 17.1 -23.1 17.4 -24.3
2026-02-15T20:05:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:05:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:05:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.753576
2026-02-15T20:05:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:05:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:05:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:05:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:05:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:05:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:04:53', tmtdew=14.8, humidity=37.3, cloud=0.0, wind=28.62, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:05:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:05:27.098 [DEBUG] [Thread-210382] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:05:27.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:05:27.194 [DEBUG] [Thread-210385] [transport.py] [_log()] starting thread (client mode): 0xa575a320
2026-02-15T20:05:27.194 [DEBUG] [Thread-210385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:05:27.209 [DEBUG] [Thread-210385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:05:27.209 [INFO] [Thread-210385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] client lang: <none>
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] server lang: <none>
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] kex follows: False
2026-02-15T20:05:27.217 [DEBUG] [Thread-210385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:05:27.218 [DEBUG] [Thread-210385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:05:27.218 [DEBUG] [Thread-210385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:05:27.218 [DEBUG] [Thread-210385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:05:27.218 [DEBUG] [Thread-210385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:05:27.218 [DEBUG] [Thread-210385] [transport.py] [_log()] Compression: none
2026-02-15T20:05:27.218 [DEBUG] [Thread-210385] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:05:27.274 [DEBUG] [Thread-210385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:05:27.274 [DEBUG] [Thread-210385] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:05:27.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:05:27.276 [DEBUG] [Thread-210385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:05:27.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:05:27.331 [DEBUG] [Thread-210385] [transport.py] [_log()] userauth is OK
2026-02-15T20:05:27.331 [DEBUG] [Thread-210385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:05:27.331 [DEBUG] [Thread-210385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:05:27.332 [DEBUG] [Thread-210385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:05:27.332 [DEBUG] [Thread-210385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:05:27.340 [DEBUG] [Thread-210387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:27.351 [INFO] [Thread-210385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:05:27.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:05:27.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:05:28.167 [DEBUG] [Thread-210385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:05:28.168 [DEBUG] [Thread-210385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:05:28.215 [DEBUG] [Thread-210385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:05:28.216 [DEBUG] [Thread-210385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:05:28.224 [DEBUG] [Thread-210385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:05:28.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:05:28.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:05:28.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:05:28.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:05:28.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:05:28.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:05:28.260 [DEBUG] [Thread-210385] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:05:32.874 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:32.875 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:42.387 [DEBUG] [Thread-210388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:57.423 [DEBUG] [Thread-210389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:05:58.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:05:58.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:05:58.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:06:00.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 5, 29), 14.79, 37.3, 0.0, 28.95, 17.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:06:00.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:05:29
2026-02-15T20:06:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:06:00.582 [DEBUG] [Thread-210390] [transport.py] [_log()] starting thread (client mode): 0xa2d798a0
2026-02-15T20:06:00.583 [DEBUG] [Thread-210390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:06:00.602 [DEBUG] [Thread-210390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:06:00.602 [INFO] [Thread-210390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] client lang: <none>
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] server lang: <none>
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] kex follows: False
2026-02-15T20:06:00.606 [DEBUG] [Thread-210390] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:06:00.607 [DEBUG] [Thread-210390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:06:00.607 [DEBUG] [Thread-210390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:06:00.607 [DEBUG] [Thread-210390] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:06:00.607 [DEBUG] [Thread-210390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:06:00.607 [DEBUG] [Thread-210390] [transport.py] [_log()] Compression: none
2026-02-15T20:06:00.607 [DEBUG] [Thread-210390] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:06:00.625 [DEBUG] [Thread-210390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:06:00.626 [DEBUG] [Thread-210390] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:06:00.626 [DEBUG] [Thread-210390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:06:00.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:06:00.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:06:00.629 [DEBUG] [Thread-210390] [transport.py] [_log()] userauth is OK
2026-02-15T20:06:00.629 [DEBUG] [Thread-210390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:06:00.629 [DEBUG] [Thread-210390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:06:00.629 [DEBUG] [Thread-210390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:06:00.629 [DEBUG] [Thread-210390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:06:00.653 [INFO] [Thread-210390] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:06:00.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:06:01.285 [DEBUG] [Thread-210390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:06:01.285 [DEBUG] [Thread-210390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:06:01.286 [DEBUG] [Thread-210390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:06:01.326 [DEBUG] [Thread-210390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:06:01.327 [DEBUG] [Thread-210390] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:06:01.331 [DEBUG] [Thread-210390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:06:01.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:06:01.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:06:01.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:06:01.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:06:01.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:06:01.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:06:01.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:06:01.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:06:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:06:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.753912 -999.00  +17.10  18.14     42   +4.20 1 1 1 1 1    24    0 12.48 -19.49 ----- 22.1 18.1 147.0 26.9 17.4 -25.3 17.3 -24.2 17.1 -23.1 17.4 -24.4
2026-02-15T20:06:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:06:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:06:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.753912
2026-02-15T20:06:01.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:06:01.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:06:01.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:06:01.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:06:01.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:06:01.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:05:29', tmtdew=14.79, humidity=37.3, cloud=0.0, wind=28.95, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:05:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:06:01.360 [DEBUG] [Thread-210390] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:06:01.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:06:01.451 [DEBUG] [Thread-210393] [transport.py] [_log()] starting thread (client mode): 0xa5772650
2026-02-15T20:06:01.451 [DEBUG] [Thread-210393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:06:01.466 [DEBUG] [Thread-210393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:06:01.466 [INFO] [Thread-210393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:06:01.474 [DEBUG] [Thread-210393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:06:01.474 [DEBUG] [Thread-210393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:06:01.474 [DEBUG] [Thread-210393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:06:01.474 [DEBUG] [Thread-210393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:01.474 [DEBUG] [Thread-210393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] client lang: <none>
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] server lang: <none>
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] kex follows: False
2026-02-15T20:06:01.475 [DEBUG] [Thread-210393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:06:01.476 [DEBUG] [Thread-210393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:06:01.476 [DEBUG] [Thread-210393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:06:01.476 [DEBUG] [Thread-210393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:06:01.476 [DEBUG] [Thread-210393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:06:01.476 [DEBUG] [Thread-210393] [transport.py] [_log()] Compression: none
2026-02-15T20:06:01.476 [DEBUG] [Thread-210393] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:06:01.535 [DEBUG] [Thread-210393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:06:01.536 [DEBUG] [Thread-210393] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:06:01.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:06:01.537 [DEBUG] [Thread-210393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:06:01.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:06:01.594 [DEBUG] [Thread-210393] [transport.py] [_log()] userauth is OK
2026-02-15T20:06:01.594 [DEBUG] [Thread-210393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:06:01.594 [DEBUG] [Thread-210393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:06:01.595 [DEBUG] [Thread-210393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:06:01.595 [DEBUG] [Thread-210393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:06:01.616 [INFO] [Thread-210393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:06:01.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:06:01.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:06:02.453 [DEBUG] [Thread-210393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:06:02.453 [DEBUG] [Thread-210393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:06:02.503 [DEBUG] [Thread-210393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:06:02.503 [DEBUG] [Thread-210393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:06:02.515 [DEBUG] [Thread-210393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:06:02.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:06:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:06:02.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:06:02.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:06:02.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:06:02.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:06:02.559 [DEBUG] [Thread-210393] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:06:07.906 [DEBUG] [Thread-210395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:12.462 [DEBUG] [Thread-210396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:20.881 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:24.056 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:27.514 [DEBUG] [Thread-210397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:32.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:06:32.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:06:32.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:06:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 6, 4), 14.78, 37.34, 0.0, 30.01, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:06:34.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:06:04
2026-02-15T20:06:35.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:06:35.380 [DEBUG] [Thread-210398] [transport.py] [_log()] starting thread (client mode): 0xa57711e0
2026-02-15T20:06:35.380 [DEBUG] [Thread-210398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:06:35.400 [DEBUG] [Thread-210398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:06:35.400 [INFO] [Thread-210398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] client lang: <none>
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] server lang: <none>
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] kex follows: False
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:06:35.401 [DEBUG] [Thread-210398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:06:35.402 [DEBUG] [Thread-210398] [transport.py] [_log()] Compression: none
2026-02-15T20:06:35.402 [DEBUG] [Thread-210398] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:06:35.421 [DEBUG] [Thread-210398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:06:35.421 [DEBUG] [Thread-210398] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:06:35.422 [DEBUG] [Thread-210398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:06:35.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:06:35.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:06:35.423 [DEBUG] [Thread-210398] [transport.py] [_log()] userauth is OK
2026-02-15T20:06:35.424 [DEBUG] [Thread-210398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:06:35.424 [DEBUG] [Thread-210398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:06:35.424 [DEBUG] [Thread-210398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:06:35.424 [DEBUG] [Thread-210398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:06:35.448 [INFO] [Thread-210398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:06:35.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:06:36.089 [DEBUG] [Thread-210398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:06:36.089 [DEBUG] [Thread-210398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:06:36.090 [DEBUG] [Thread-210398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:06:36.130 [DEBUG] [Thread-210398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:06:36.131 [DEBUG] [Thread-210398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:06:36.134 [DEBUG] [Thread-210398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:06:36.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:06:36.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:06:36.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:06:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:06:36.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:06:36.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:06:36.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:06:36.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:06:36.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:06:36.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.754260 -999.00  +17.00  19.27     42   +4.20 1 1 1 1 1    22    0 12.67 -20.45 ----- 18.1 19.3 139.2 26.7 17.4 -25.2 17.3 -24.2 17.0 -23.1 17.4 -24.3
2026-02-15T20:06:36.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:06:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:06:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.754260
2026-02-15T20:06:36.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:06:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:06:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:06:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:06:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:06:36.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:06:04', tmtdew=14.78, humidity=37.34, cloud=0.0, wind=30.01, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:06:08.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:06:36.158 [DEBUG] [Thread-210398] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:06:36.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:06:36.253 [DEBUG] [Thread-210401] [transport.py] [_log()] starting thread (client mode): 0xa2dc3130
2026-02-15T20:06:36.253 [DEBUG] [Thread-210401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:06:36.267 [DEBUG] [Thread-210401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:06:36.268 [INFO] [Thread-210401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:06:36.275 [DEBUG] [Thread-210401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:06:36.276 [DEBUG] [Thread-210401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] client lang: <none>
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] server lang: <none>
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] kex follows: False
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:06:36.277 [DEBUG] [Thread-210401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:06:36.278 [DEBUG] [Thread-210401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:06:36.278 [DEBUG] [Thread-210401] [transport.py] [_log()] Compression: none
2026-02-15T20:06:36.278 [DEBUG] [Thread-210401] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:06:36.334 [DEBUG] [Thread-210401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:06:36.335 [DEBUG] [Thread-210401] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:06:36.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:06:36.337 [DEBUG] [Thread-210401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:06:36.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:06:36.389 [DEBUG] [Thread-210401] [transport.py] [_log()] userauth is OK
2026-02-15T20:06:36.390 [DEBUG] [Thread-210401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:06:36.390 [DEBUG] [Thread-210401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:06:36.390 [DEBUG] [Thread-210401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:06:36.390 [DEBUG] [Thread-210401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:06:36.412 [INFO] [Thread-210401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:06:36.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:06:36.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:06:37.205 [DEBUG] [Thread-210401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:06:37.206 [DEBUG] [Thread-210401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:06:37.254 [DEBUG] [Thread-210401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:06:37.254 [DEBUG] [Thread-210401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:06:37.263 [DEBUG] [Thread-210401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:06:37.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:06:37.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:06:37.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:06:37.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:06:37.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:06:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:06:37.300 [DEBUG] [Thread-210401] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:06:38.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:38.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:42.552 [DEBUG] [Thread-210403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:52.634 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:06:57.605 [DEBUG] [Thread-210404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:07:07.320 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:07:07.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:07:07.979 [DEBUG] [Thread-210405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:09.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 6, 40), 15.04, 36.48, 0.0, 34.12, 17.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:07:09.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:06:40
2026-02-15T20:07:09.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:07:09.755 [DEBUG] [Thread-210406] [transport.py] [_log()] starting thread (client mode): 0xa5771060
2026-02-15T20:07:09.755 [DEBUG] [Thread-210406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:07:09.776 [DEBUG] [Thread-210406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:07:09.776 [INFO] [Thread-210406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:07:09.777 [DEBUG] [Thread-210406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:07:09.777 [DEBUG] [Thread-210406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:07:09.777 [DEBUG] [Thread-210406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:07:09.777 [DEBUG] [Thread-210406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:09.777 [DEBUG] [Thread-210406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] client lang: <none>
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] server lang: <none>
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] kex follows: False
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] Compression: none
2026-02-15T20:07:09.778 [DEBUG] [Thread-210406] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:07:09.791 [DEBUG] [Thread-210406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:07:09.792 [DEBUG] [Thread-210406] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:07:09.793 [DEBUG] [Thread-210406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:07:09.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:07:09.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:07:09.794 [DEBUG] [Thread-210406] [transport.py] [_log()] userauth is OK
2026-02-15T20:07:09.795 [DEBUG] [Thread-210406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:07:09.795 [DEBUG] [Thread-210406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:07:09.795 [DEBUG] [Thread-210406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:07:09.795 [DEBUG] [Thread-210406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:07:09.821 [INFO] [Thread-210406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:07:09.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:07:10.470 [DEBUG] [Thread-210406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:07:10.470 [DEBUG] [Thread-210406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:07:10.471 [DEBUG] [Thread-210406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:07:10.522 [DEBUG] [Thread-210406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:07:10.522 [DEBUG] [Thread-210406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:07:10.525 [DEBUG] [Thread-210406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:07:10.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:07:10.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:07:10.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:07:10.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:07:10.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:07:10.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:07:10.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:07:10.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:07:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:07:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.754607 -999.00  +17.10  20.69     42   +4.20 1 1 1 1 1    20    0 12.41 -19.84 ----- 21.8 20.7 148.4 30.0 17.3 -25.2 17.3 -24.2 17.0 -23.0 17.4 -24.3
2026-02-15T20:07:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:07:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:07:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.754607
2026-02-15T20:07:10.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:07:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:07:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:07:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:07:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:07:10.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:06:40', tmtdew=15.04, humidity=36.48, cloud=0.0, wind=34.12, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:06:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:07:10.552 [DEBUG] [Thread-210406] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:07:10.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:07:10.658 [DEBUG] [Thread-210409] [transport.py] [_log()] starting thread (client mode): 0xa2d7a8c0
2026-02-15T20:07:10.658 [DEBUG] [Thread-210409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:07:10.673 [DEBUG] [Thread-210409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:07:10.673 [INFO] [Thread-210409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:07:10.680 [DEBUG] [Thread-210409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] client lang: <none>
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] server lang: <none>
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] kex follows: False
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:07:10.681 [DEBUG] [Thread-210409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:07:10.682 [DEBUG] [Thread-210409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:07:10.682 [DEBUG] [Thread-210409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:07:10.682 [DEBUG] [Thread-210409] [transport.py] [_log()] Compression: none
2026-02-15T20:07:10.682 [DEBUG] [Thread-210409] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:07:10.738 [DEBUG] [Thread-210409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:07:10.739 [DEBUG] [Thread-210409] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:07:10.739 [DEBUG] [Thread-210409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:07:10.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:07:10.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:07:10.794 [DEBUG] [Thread-210409] [transport.py] [_log()] userauth is OK
2026-02-15T20:07:10.795 [DEBUG] [Thread-210409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:07:10.795 [DEBUG] [Thread-210409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:07:10.795 [DEBUG] [Thread-210409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:07:10.795 [DEBUG] [Thread-210409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:07:10.813 [INFO] [Thread-210409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:07:10.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:07:10.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:07:11.637 [DEBUG] [Thread-210409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:07:11.637 [DEBUG] [Thread-210409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:07:11.686 [DEBUG] [Thread-210409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:07:11.686 [DEBUG] [Thread-210409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:07:11.695 [DEBUG] [Thread-210409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:07:11.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:07:11.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:07:11.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:07:11.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:07:11.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:07:11.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:07:11.732 [DEBUG] [Thread-210409] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:07:12.642 [DEBUG] [Thread-210411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:20.373 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:27.695 [DEBUG] [Thread-210412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:41.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:07:41.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:07:41.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:07:42.734 [DEBUG] [Thread-210413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:43.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 7, 15), 14.81, 37.14, 0.0, 25.69, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:07:43.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:07:15
2026-02-15T20:07:44.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:07:44.390 [DEBUG] [Thread-210414] [transport.py] [_log()] starting thread (client mode): 0xa2d7af80
2026-02-15T20:07:44.390 [DEBUG] [Thread-210414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:07:44.411 [DEBUG] [Thread-210414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:07:44.411 [INFO] [Thread-210414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:07:44.414 [DEBUG] [Thread-210414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:07:44.414 [DEBUG] [Thread-210414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:07:44.414 [DEBUG] [Thread-210414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] client lang: <none>
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] server lang: <none>
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] kex follows: False
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:07:44.415 [DEBUG] [Thread-210414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:07:44.416 [DEBUG] [Thread-210414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:07:44.416 [DEBUG] [Thread-210414] [transport.py] [_log()] Compression: none
2026-02-15T20:07:44.416 [DEBUG] [Thread-210414] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:07:44.434 [DEBUG] [Thread-210414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:07:44.434 [DEBUG] [Thread-210414] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:07:44.435 [DEBUG] [Thread-210414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:07:44.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:07:44.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:07:44.437 [DEBUG] [Thread-210414] [transport.py] [_log()] userauth is OK
2026-02-15T20:07:44.437 [DEBUG] [Thread-210414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:07:44.437 [DEBUG] [Thread-210414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:07:44.438 [DEBUG] [Thread-210414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:07:44.438 [DEBUG] [Thread-210414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:07:44.463 [INFO] [Thread-210414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:07:44.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:07:44.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:44.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:07:45.134 [DEBUG] [Thread-210414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:07:45.134 [DEBUG] [Thread-210414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:07:45.134 [DEBUG] [Thread-210414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:07:45.175 [DEBUG] [Thread-210414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:07:45.175 [DEBUG] [Thread-210414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:07:45.179 [DEBUG] [Thread-210414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:07:45.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:07:45.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:07:45.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:07:45.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:07:45.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:07:45.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:07:45.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:07:45.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:07:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:07:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.754954 -999.00  +17.10  21.16     42   +4.20 1 1 1 1 1    18    0 12.28 -18.99 ----- 17.3 21.2 146.0 27.9 17.3 -25.3 17.3 -24.1 17.1 -23.1 17.3 -24.4
2026-02-15T20:07:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:07:45.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:07:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.754954
2026-02-15T20:07:45.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:07:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:07:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:07:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:07:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:07:45.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:07:15', tmtdew=14.81, humidity=37.14, cloud=0.0, wind=25.69, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:07:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:07:45.210 [DEBUG] [Thread-210414] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:07:45.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:07:45.297 [DEBUG] [Thread-210417] [transport.py] [_log()] starting thread (client mode): 0xa2d78130
2026-02-15T20:07:45.297 [DEBUG] [Thread-210417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:07:45.311 [DEBUG] [Thread-210417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:07:45.312 [INFO] [Thread-210417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:07:45.319 [DEBUG] [Thread-210417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] client lang: <none>
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] server lang: <none>
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] kex follows: False
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] Compression: none
2026-02-15T20:07:45.320 [DEBUG] [Thread-210417] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:07:45.378 [DEBUG] [Thread-210417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:07:45.378 [DEBUG] [Thread-210417] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:07:45.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:07:45.379 [DEBUG] [Thread-210417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:07:45.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:07:45.434 [DEBUG] [Thread-210417] [transport.py] [_log()] userauth is OK
2026-02-15T20:07:45.434 [DEBUG] [Thread-210417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:07:45.435 [DEBUG] [Thread-210417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:07:45.435 [DEBUG] [Thread-210417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:07:45.435 [DEBUG] [Thread-210417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:07:45.459 [INFO] [Thread-210417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:07:45.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:07:45.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:07:46.309 [DEBUG] [Thread-210417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:07:46.309 [DEBUG] [Thread-210417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:07:46.357 [DEBUG] [Thread-210417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:07:46.358 [DEBUG] [Thread-210417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:07:46.367 [DEBUG] [Thread-210417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:07:46.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:07:46.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:07:46.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:07:46.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:07:46.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:07:46.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:07:46.403 [DEBUG] [Thread-210417] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:07:57.770 [DEBUG] [Thread-210419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:08.055 [DEBUG] [Thread-210420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:12.831 [DEBUG] [Thread-210421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:16.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:08:16.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:08:16.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:08:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 7, 51), 14.83, 37.09, 0.0, 30.49, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:08:18.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:07:51
2026-02-15T20:08:18.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:08:18.676 [DEBUG] [Thread-210422] [transport.py] [_log()] starting thread (client mode): 0xa57e2b60
2026-02-15T20:08:18.676 [DEBUG] [Thread-210422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:08:18.698 [DEBUG] [Thread-210422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:08:18.698 [INFO] [Thread-210422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:08:18.701 [DEBUG] [Thread-210422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:08:18.701 [DEBUG] [Thread-210422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:08:18.701 [DEBUG] [Thread-210422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:08:18.701 [DEBUG] [Thread-210422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:18.701 [DEBUG] [Thread-210422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:18.701 [DEBUG] [Thread-210422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] client lang: <none>
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] server lang: <none>
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] kex follows: False
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] Compression: none
2026-02-15T20:08:18.702 [DEBUG] [Thread-210422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:08:18.719 [DEBUG] [Thread-210422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:08:18.719 [DEBUG] [Thread-210422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:08:18.720 [DEBUG] [Thread-210422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:08:18.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:08:18.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:08:18.723 [DEBUG] [Thread-210422] [transport.py] [_log()] userauth is OK
2026-02-15T20:08:18.724 [DEBUG] [Thread-210422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:08:18.724 [DEBUG] [Thread-210422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:08:18.724 [DEBUG] [Thread-210422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:08:18.724 [DEBUG] [Thread-210422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:08:18.748 [INFO] [Thread-210422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:08:18.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:08:19.379 [DEBUG] [Thread-210422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:08:19.380 [DEBUG] [Thread-210422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:08:19.380 [DEBUG] [Thread-210422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:08:19.420 [DEBUG] [Thread-210422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:08:19.420 [DEBUG] [Thread-210422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:08:19.424 [DEBUG] [Thread-210422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:08:19.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:08:19.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:08:19.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:08:19.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:08:19.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:08:19.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:08:19.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:08:19.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:08:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:08:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.755301 -999.00  +17.00  18.77     42   +4.20 1 1 1 1 1    16    0 12.42 -19.15 ----- 18.4 18.8 150.7 31.1 17.3 -25.3 17.3 -24.2 17.0 -22.9 17.3 -24.3
2026-02-15T20:08:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:08:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:08:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.755301
2026-02-15T20:08:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:08:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:08:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:08:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:08:19.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:08:19.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:07:51', tmtdew=14.83, humidity=37.09, cloud=0.0, wind=30.49, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:07:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:08:19.453 [DEBUG] [Thread-210422] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:08:19.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:08:19.551 [DEBUG] [Thread-210425] [transport.py] [_log()] starting thread (client mode): 0xa2d56080
2026-02-15T20:08:19.552 [DEBUG] [Thread-210425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:08:19.567 [DEBUG] [Thread-210425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:08:19.568 [INFO] [Thread-210425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:08:19.576 [DEBUG] [Thread-210425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] client lang: <none>
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] server lang: <none>
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] kex follows: False
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:08:19.577 [DEBUG] [Thread-210425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:08:19.578 [DEBUG] [Thread-210425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:08:19.578 [DEBUG] [Thread-210425] [transport.py] [_log()] Compression: none
2026-02-15T20:08:19.578 [DEBUG] [Thread-210425] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:08:19.634 [DEBUG] [Thread-210425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:08:19.635 [DEBUG] [Thread-210425] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:08:19.635 [DEBUG] [Thread-210425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:08:19.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:08:19.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:08:19.690 [DEBUG] [Thread-210425] [transport.py] [_log()] userauth is OK
2026-02-15T20:08:19.690 [DEBUG] [Thread-210425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:08:19.691 [DEBUG] [Thread-210425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:08:19.691 [DEBUG] [Thread-210425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:08:19.691 [DEBUG] [Thread-210425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:08:19.710 [INFO] [Thread-210425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:08:19.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:08:19.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:08:20.529 [DEBUG] [Thread-210425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:08:20.530 [DEBUG] [Thread-210425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:08:20.577 [DEBUG] [Thread-210425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:08:20.578 [DEBUG] [Thread-210425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:08:20.587 [DEBUG] [Thread-210425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:08:20.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:08:20.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')
2026-02-15T20:08:20.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:08:20.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:08:20.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:08:20.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:08:20.625 [DEBUG] [Thread-210425] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:08:27.871 [DEBUG] [Thread-210427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:42.933 [DEBUG] [Thread-210428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:48.298 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:48.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:08:50.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:08:50.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:08: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-02-15T20:08:52.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 8, 26), 14.81, 37.12, 0.0, 28.8, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:08:52.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:08:26
2026-02-15T20:08:53.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:08:53.235 [DEBUG] [Thread-210429] [transport.py] [_log()] starting thread (client mode): 0xa57e26b0
2026-02-15T20:08:53.235 [DEBUG] [Thread-210429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:08:53.255 [DEBUG] [Thread-210429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:08:53.255 [INFO] [Thread-210429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:53.258 [DEBUG] [Thread-210429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] client lang: <none>
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] server lang: <none>
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] kex follows: False
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] Compression: none
2026-02-15T20:08:53.259 [DEBUG] [Thread-210429] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:08:53.276 [DEBUG] [Thread-210429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:08:53.277 [DEBUG] [Thread-210429] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:08:53.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:08:53.278 [DEBUG] [Thread-210429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:08:53.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:08:53.321 [DEBUG] [Thread-210429] [transport.py] [_log()] userauth is OK
2026-02-15T20:08:53.321 [DEBUG] [Thread-210429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:08:53.321 [DEBUG] [Thread-210429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:08:53.322 [DEBUG] [Thread-210429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:08:53.322 [DEBUG] [Thread-210429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:08:53.359 [INFO] [Thread-210429] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:08:53.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:08:53.964 [DEBUG] [Thread-210429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:08:53.964 [DEBUG] [Thread-210429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:08:53.965 [DEBUG] [Thread-210429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:08:54.006 [DEBUG] [Thread-210429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:08:54.006 [DEBUG] [Thread-210429] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:08:54.009 [DEBUG] [Thread-210429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:08:54.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:08:54.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:08:54.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:08:54.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:08:54.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:08:54.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:08:54.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:08:54.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:08:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:08:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.755648 -999.00  +17.00  23.90     42   +4.10 1 1 1 1 1    15    0 12.51 -19.73 ----- 19.8 23.9 157.2 27.7 17.3 -25.1 17.2 -24.1 17.1 -23.1 17.3 -24.3
2026-02-15T20:08:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:08:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:08:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.755648
2026-02-15T20:08:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:08:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:08:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:08:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:08:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:08:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:08:26', tmtdew=14.81, humidity=37.12, cloud=0.0, wind=28.8, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:08:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:08:54.036 [DEBUG] [Thread-210429] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:08:54.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:08:54.132 [DEBUG] [Thread-210432] [transport.py] [_log()] starting thread (client mode): 0xa57e38e0
2026-02-15T20:08:54.132 [DEBUG] [Thread-210432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:08:54.147 [DEBUG] [Thread-210432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:08:54.147 [INFO] [Thread-210432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:08:54.154 [DEBUG] [Thread-210432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] client lang: <none>
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] server lang: <none>
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] kex follows: False
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] Compression: none
2026-02-15T20:08:54.155 [DEBUG] [Thread-210432] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:08:54.214 [DEBUG] [Thread-210432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:08:54.214 [DEBUG] [Thread-210432] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:08:54.215 [DEBUG] [Thread-210432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:08:54.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:08:54.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:08:54.270 [DEBUG] [Thread-210432] [transport.py] [_log()] userauth is OK
2026-02-15T20:08:54.271 [DEBUG] [Thread-210432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:08:54.271 [DEBUG] [Thread-210432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:08:54.271 [DEBUG] [Thread-210432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:08:54.271 [DEBUG] [Thread-210432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:08:54.290 [INFO] [Thread-210432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:08:54.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:08:54.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:08:55.131 [DEBUG] [Thread-210432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:08:55.132 [DEBUG] [Thread-210432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:08:55.179 [DEBUG] [Thread-210432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:08:55.179 [DEBUG] [Thread-210432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:08:55.188 [DEBUG] [Thread-210432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:08:55.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:08:55.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:08:55.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:08:55.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:08:55.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:08:55.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:08:55.222 [DEBUG] [Thread-210432] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:08:57.968 [DEBUG] [Thread-210434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:08.122 [DEBUG] [Thread-210435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:13.018 [DEBUG] [Thread-210436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:09:25.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:09:25.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:09:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 9, 1), 14.83, 37.07, 0.0, 29.36, 17.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:09:27.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:09:01
2026-02-15T20:09:27.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:09:27.638 [DEBUG] [Thread-210437] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-15T20:09:27.638 [DEBUG] [Thread-210437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:09:27.657 [DEBUG] [Thread-210437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:09:27.657 [INFO] [Thread-210437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:09:27.660 [DEBUG] [Thread-210437] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] client lang: <none>
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] server lang: <none>
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] kex follows: False
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:09:27.661 [DEBUG] [Thread-210437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:09:27.662 [DEBUG] [Thread-210437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:09:27.662 [DEBUG] [Thread-210437] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:09:27.662 [DEBUG] [Thread-210437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:09:27.662 [DEBUG] [Thread-210437] [transport.py] [_log()] Compression: none
2026-02-15T20:09:27.662 [DEBUG] [Thread-210437] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:09:27.679 [DEBUG] [Thread-210437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:09:27.679 [DEBUG] [Thread-210437] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:09:27.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:09:27.680 [DEBUG] [Thread-210437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:09:27.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:09:27.682 [DEBUG] [Thread-210437] [transport.py] [_log()] userauth is OK
2026-02-15T20:09:27.682 [DEBUG] [Thread-210437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:09:27.682 [DEBUG] [Thread-210437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:09:27.682 [DEBUG] [Thread-210437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:09:27.682 [DEBUG] [Thread-210437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:09:27.699 [INFO] [Thread-210437] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:09:27.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:09:28.055 [DEBUG] [Thread-210439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:28.487 [DEBUG] [Thread-210437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:09:28.487 [DEBUG] [Thread-210437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:09:28.488 [DEBUG] [Thread-210437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:09:28.528 [DEBUG] [Thread-210437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:09:28.528 [DEBUG] [Thread-210437] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:09:28.531 [DEBUG] [Thread-210437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:09:28.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:09:28.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:09:28.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:09:28.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:09:28.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:09:28.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:09:28.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:09:28.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:09:28.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:09:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.755996 -999.00  +17.00  18.73     42   +4.20 1 1 1 1 1    13    0 12.35 -19.14 ----- 18.6 18.7 158.8 26.7 17.3 -25.1 17.2 -24.2 17.0 -23.0 17.3 -24.4
2026-02-15T20:09:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:09:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:09:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.755996
2026-02-15T20:09:28.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:09:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:09:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:09:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:09:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:09:28.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:09:01', tmtdew=14.83, humidity=37.07, cloud=0.0, wind=29.36, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:08:38.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:09:28.556 [DEBUG] [Thread-210437] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:09:28.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:09:28.653 [DEBUG] [Thread-210441] [transport.py] [_log()] starting thread (client mode): 0xa57e3d00
2026-02-15T20:09:28.653 [DEBUG] [Thread-210441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:09:28.670 [DEBUG] [Thread-210441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:09:28.671 [INFO] [Thread-210441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:09:28.679 [DEBUG] [Thread-210441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] client lang: <none>
2026-02-15T20:09:28.680 [DEBUG] [Thread-210441] [transport.py] [_log()] server lang: <none>
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] kex follows: False
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] Compression: none
2026-02-15T20:09:28.681 [DEBUG] [Thread-210441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:09:28.737 [DEBUG] [Thread-210441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:09:28.738 [DEBUG] [Thread-210441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:09:28.738 [DEBUG] [Thread-210441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:09:28.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:09:28.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:09:28.794 [DEBUG] [Thread-210441] [transport.py] [_log()] userauth is OK
2026-02-15T20:09:28.794 [DEBUG] [Thread-210441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:09:28.794 [DEBUG] [Thread-210441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:09:28.794 [DEBUG] [Thread-210441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:09:28.794 [DEBUG] [Thread-210441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:09:28.814 [INFO] [Thread-210441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:09:28.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:09:28.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:09:29.649 [DEBUG] [Thread-210441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:09:29.650 [DEBUG] [Thread-210441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:09:29.697 [DEBUG] [Thread-210441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:09:29.697 [DEBUG] [Thread-210441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:09:29.706 [DEBUG] [Thread-210441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:09:29.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:09:29.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:09:29.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:09:29.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:09:29.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:09:29.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:09:29.741 [DEBUG] [Thread-210441] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:09:43.090 [DEBUG] [Thread-210443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:52.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:52.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:58.143 [DEBUG] [Thread-210444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:09:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:09:59.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:09:59.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:10:01.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 9, 37), 15.17, 36.15, 0.0, 32.57, 17.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:10:01.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:09:37
2026-02-15T20:10:02.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:10:02.269 [DEBUG] [Thread-210445] [transport.py] [_log()] starting thread (client mode): 0xa2dc1390
2026-02-15T20:10:02.269 [DEBUG] [Thread-210445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:10:02.289 [DEBUG] [Thread-210445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:10:02.289 [INFO] [Thread-210445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:10:02.290 [DEBUG] [Thread-210445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:10:02.290 [DEBUG] [Thread-210445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:10:02.290 [DEBUG] [Thread-210445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:10:02.290 [DEBUG] [Thread-210445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:02.290 [DEBUG] [Thread-210445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:02.290 [DEBUG] [Thread-210445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] client lang: <none>
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] server lang: <none>
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] kex follows: False
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] Compression: none
2026-02-15T20:10:02.291 [DEBUG] [Thread-210445] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:10:02.300 [DEBUG] [Thread-210445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:10:02.301 [DEBUG] [Thread-210445] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:10:02.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:10:02.303 [DEBUG] [Thread-210445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:10:02.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:10:02.305 [DEBUG] [Thread-210445] [transport.py] [_log()] userauth is OK
2026-02-15T20:10:02.305 [DEBUG] [Thread-210445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:10:02.305 [DEBUG] [Thread-210445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:10:02.305 [DEBUG] [Thread-210445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:10:02.305 [DEBUG] [Thread-210445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:10:02.325 [INFO] [Thread-210445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:10:02.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:10:02.934 [DEBUG] [Thread-210445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:10:02.934 [DEBUG] [Thread-210445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:10:02.935 [DEBUG] [Thread-210445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:10:02.976 [DEBUG] [Thread-210445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:10:02.976 [DEBUG] [Thread-210445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:10:02.977 [DEBUG] [Thread-210445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:10:02.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:10:02.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:10:02.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:10:02.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:10:02.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:10:02.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:10:02.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.756690 -999.00  +17.00  24.13     42   +4.00 1 1 1 1 1    11    0 12.30 -17.99 ----- 28.6 24.1 141.0 31.0 17.3 -25.1 17.2 -24.2 17.0 -23.0 17.3 -24.2
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.756690
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:10:02.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:09:37', tmtdew=15.17, humidity=36.15, cloud=0.0, wind=32.57, temperature=17.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:09:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:10:02.996 [DEBUG] [Thread-210445] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:10:03.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:10:03.080 [DEBUG] [Thread-210448] [transport.py] [_log()] starting thread (client mode): 0xa5773fd0
2026-02-15T20:10:03.081 [DEBUG] [Thread-210448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:10:03.095 [DEBUG] [Thread-210448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:10:03.095 [INFO] [Thread-210448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] client lang: <none>
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] server lang: <none>
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] kex follows: False
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:10:03.102 [DEBUG] [Thread-210448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:10:03.103 [DEBUG] [Thread-210448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:10:03.103 [DEBUG] [Thread-210448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:10:03.103 [DEBUG] [Thread-210448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:10:03.103 [DEBUG] [Thread-210448] [transport.py] [_log()] Compression: none
2026-02-15T20:10:03.103 [DEBUG] [Thread-210448] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:10:03.160 [DEBUG] [Thread-210448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:10:03.160 [DEBUG] [Thread-210448] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:10:03.160 [DEBUG] [Thread-210448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:10:03.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:10:03.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:10:03.217 [DEBUG] [Thread-210448] [transport.py] [_log()] userauth is OK
2026-02-15T20:10:03.217 [DEBUG] [Thread-210448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:10:03.217 [DEBUG] [Thread-210448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:10:03.217 [DEBUG] [Thread-210448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:10:03.217 [DEBUG] [Thread-210448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:10:03.231 [INFO] [Thread-210448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:10:03.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:10:03.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:10:04.056 [DEBUG] [Thread-210448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:10:04.056 [DEBUG] [Thread-210448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:10:04.103 [DEBUG] [Thread-210448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:10:04.103 [DEBUG] [Thread-210448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:10:04.112 [DEBUG] [Thread-210448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:10:04.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:10:04.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:10:04.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:10:04.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:10:04.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:10:04.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:10:04.149 [DEBUG] [Thread-210448] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:10:08.180 [DEBUG] [Thread-210450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:10:13.177 [DEBUG] [Thread-210451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:10:28.223 [DEBUG] [Thread-210452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:10:34.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:10:34.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:10:34.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:10:36.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 10, 12), 14.97, 36.47, 0.0, 32.41, 17.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:10:36.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:10:12
2026-02-15T20:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:10:36.941 [DEBUG] [Thread-210453] [transport.py] [_log()] starting thread (client mode): 0xa2d56860
2026-02-15T20:10:36.942 [DEBUG] [Thread-210453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:10:36.963 [DEBUG] [Thread-210453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:10:36.963 [INFO] [Thread-210453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:36.966 [DEBUG] [Thread-210453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] client lang: <none>
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] server lang: <none>
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] kex follows: False
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] Compression: none
2026-02-15T20:10:36.967 [DEBUG] [Thread-210453] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:10:36.985 [DEBUG] [Thread-210453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:10:36.986 [DEBUG] [Thread-210453] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:10:36.986 [DEBUG] [Thread-210453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:10:36.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:10:36.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:10:36.988 [DEBUG] [Thread-210453] [transport.py] [_log()] userauth is OK
2026-02-15T20:10:36.988 [DEBUG] [Thread-210453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:10:36.988 [DEBUG] [Thread-210453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:10:36.988 [DEBUG] [Thread-210453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:10:36.989 [DEBUG] [Thread-210453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:10:37.024 [INFO] [Thread-210453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:10:37.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:10:37.666 [DEBUG] [Thread-210453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:10:37.666 [DEBUG] [Thread-210453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:10:37.666 [DEBUG] [Thread-210453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:10:37.706 [DEBUG] [Thread-210453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:10:37.707 [DEBUG] [Thread-210453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:10:37.710 [DEBUG] [Thread-210453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:10:37.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:10:37.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:10:37.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:10:37.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:10:37.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:10:37.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:10:37.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:10:37.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:10:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:10:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.757048 -999.00  +17.00  20.47     42   +4.10 1 1 1 1 1    10    0 12.30 -18.02 ----- 26.5 20.5 152.0 32.8 17.3 -25.0 17.2 -24.0 17.0 -22.9 17.3 -24.1
2026-02-15T20:10:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:10:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:10:37.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.757048
2026-02-15T20:10:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:10:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:10:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:10:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:10:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:10:37.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:10:12', tmtdew=14.97, humidity=36.47, cloud=0.0, wind=32.41, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:10:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:10:37.737 [DEBUG] [Thread-210453] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:10:37.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:10:37.833 [DEBUG] [Thread-210456] [transport.py] [_log()] starting thread (client mode): 0xa5770fa0
2026-02-15T20:10:37.833 [DEBUG] [Thread-210456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:10:37.851 [DEBUG] [Thread-210456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:10:37.851 [INFO] [Thread-210456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:10:37.862 [DEBUG] [Thread-210456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:10:37.862 [DEBUG] [Thread-210456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:10:37.862 [DEBUG] [Thread-210456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] client lang: <none>
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] server lang: <none>
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] kex follows: False
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] Compression: none
2026-02-15T20:10:37.863 [DEBUG] [Thread-210456] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:10:37.918 [DEBUG] [Thread-210456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:10:37.918 [DEBUG] [Thread-210456] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:10:37.919 [DEBUG] [Thread-210456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:10:37.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:10:37.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:10:37.975 [DEBUG] [Thread-210456] [transport.py] [_log()] userauth is OK
2026-02-15T20:10:37.975 [DEBUG] [Thread-210456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:10:37.975 [DEBUG] [Thread-210456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:10:37.975 [DEBUG] [Thread-210456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:10:37.975 [DEBUG] [Thread-210456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:10:37.993 [INFO] [Thread-210456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:10:37.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:10:37.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:10:38.798 [DEBUG] [Thread-210456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:10:38.798 [DEBUG] [Thread-210456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:10:38.846 [DEBUG] [Thread-210456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:10:38.847 [DEBUG] [Thread-210456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:10:38.857 [DEBUG] [Thread-210456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:10:38.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:10:38.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:10:38.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:10:38.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:10:38.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:10:38.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:10:38.894 [DEBUG] [Thread-210456] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:10:43.254 [DEBUG] [Thread-210458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:10:56.432 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:10:56.433 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:10:58.298 [DEBUG] [Thread-210459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:11:08.238 [DEBUG] [Thread-210460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:11:08.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:11:08.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:11:08.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:11:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 10, 48), 14.98, 36.46, 0.0, 32.15, 17.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:11:10.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:10:48
2026-02-15T20:11:11.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:11:11.301 [DEBUG] [Thread-210461] [transport.py] [_log()] starting thread (client mode): 0xa2d54610
2026-02-15T20:11:11.301 [DEBUG] [Thread-210461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:11:11.321 [DEBUG] [Thread-210461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:11:11.322 [INFO] [Thread-210461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] client lang: <none>
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] server lang: <none>
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] kex follows: False
2026-02-15T20:11:11.325 [DEBUG] [Thread-210461] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:11:11.326 [DEBUG] [Thread-210461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:11:11.326 [DEBUG] [Thread-210461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:11:11.326 [DEBUG] [Thread-210461] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:11:11.326 [DEBUG] [Thread-210461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:11:11.326 [DEBUG] [Thread-210461] [transport.py] [_log()] Compression: none
2026-02-15T20:11:11.326 [DEBUG] [Thread-210461] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:11:11.346 [DEBUG] [Thread-210461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:11:11.347 [DEBUG] [Thread-210461] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:11:11.347 [DEBUG] [Thread-210461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:11:11.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:11:11.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:11:11.350 [DEBUG] [Thread-210461] [transport.py] [_log()] userauth is OK
2026-02-15T20:11:11.350 [DEBUG] [Thread-210461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:11:11.350 [DEBUG] [Thread-210461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:11:11.350 [DEBUG] [Thread-210461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:11:11.350 [DEBUG] [Thread-210461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:11:11.372 [INFO] [Thread-210461] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:11:11.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:11:12.121 [DEBUG] [Thread-210461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:11:12.121 [DEBUG] [Thread-210461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:11:12.122 [DEBUG] [Thread-210461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:11:12.163 [DEBUG] [Thread-210461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:11:12.163 [DEBUG] [Thread-210461] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:11:12.166 [DEBUG] [Thread-210461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:11:12.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:11:12.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:11:12.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:11:12.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:11:12.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:11:12.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:11:12.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:11:12.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:11:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:11:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.757385 -999.00  +17.10  25.42     41   +4.00 1 1 1 1 1     9    0 12.44 -17.27 ----- 31.0 25.4 157.2 30.2 17.3 -25.1 17.2 -24.0 17.1 -22.9 17.3 -24.1
2026-02-15T20:11:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:11:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:11:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.757385
2026-02-15T20:11:12.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:11:12.189 [DEBUG] [Thread-210461] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:11:12.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:11:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:11:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:11:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:11:12.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:10:48', tmtdew=14.98, humidity=36.46, cloud=0.0, wind=32.15, temperature=17.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:10:38.064', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:11:12.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:11:12.285 [DEBUG] [Thread-210464] [transport.py] [_log()] starting thread (client mode): 0xa2d56260
2026-02-15T20:11:12.285 [DEBUG] [Thread-210464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:11:12.299 [DEBUG] [Thread-210464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:11:12.299 [INFO] [Thread-210464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:11:12.306 [DEBUG] [Thread-210464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] client lang: <none>
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] server lang: <none>
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] kex follows: False
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] Compression: none
2026-02-15T20:11:12.307 [DEBUG] [Thread-210464] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:11:12.363 [DEBUG] [Thread-210464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:11:12.363 [DEBUG] [Thread-210464] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:11:12.363 [DEBUG] [Thread-210464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:11:12.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:11:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:11:12.421 [DEBUG] [Thread-210464] [transport.py] [_log()] userauth is OK
2026-02-15T20:11:12.421 [DEBUG] [Thread-210464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:11:12.421 [DEBUG] [Thread-210464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:11:12.421 [DEBUG] [Thread-210464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:11:12.421 [DEBUG] [Thread-210464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:11:12.434 [INFO] [Thread-210464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:11:12.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:11:12.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:11:13.265 [DEBUG] [Thread-210464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:11:13.265 [DEBUG] [Thread-210464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:11:13.313 [DEBUG] [Thread-210464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:11:13.313 [DEBUG] [Thread-210464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:11:13.321 [DEBUG] [Thread-210464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:11:13.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:11:13.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:11:13.333 [DEBUG] [Thread-210466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:11:13.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:11:13.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:11:13.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:11:13.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:11:13.352 [DEBUG] [Thread-210464] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:11:28.374 [DEBUG] [Thread-210467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:11:43.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:11:43.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:11:43.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:11:43.406 [DEBUG] [Thread-210468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:11:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 11, 23), 14.98, 36.46, 0.0, 33.89, 17.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:11:45.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:11:23
2026-02-15T20:11:46.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:11:46.409 [DEBUG] [Thread-210469] [transport.py] [_log()] starting thread (client mode): 0xa57b1c30
2026-02-15T20:11:46.409 [DEBUG] [Thread-210469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:11:46.429 [DEBUG] [Thread-210469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:11:46.429 [INFO] [Thread-210469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] client lang: <none>
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] server lang: <none>
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] kex follows: False
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:11:46.432 [DEBUG] [Thread-210469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:11:46.433 [DEBUG] [Thread-210469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:11:46.433 [DEBUG] [Thread-210469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:11:46.433 [DEBUG] [Thread-210469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:11:46.433 [DEBUG] [Thread-210469] [transport.py] [_log()] Compression: none
2026-02-15T20:11:46.433 [DEBUG] [Thread-210469] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:11:46.451 [DEBUG] [Thread-210469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:11:46.451 [DEBUG] [Thread-210469] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:11:46.451 [DEBUG] [Thread-210469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:11:46.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:11:46.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:11:46.453 [DEBUG] [Thread-210469] [transport.py] [_log()] userauth is OK
2026-02-15T20:11:46.453 [DEBUG] [Thread-210469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:11:46.453 [DEBUG] [Thread-210469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:11:46.453 [DEBUG] [Thread-210469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:11:46.453 [DEBUG] [Thread-210469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:11:46.475 [INFO] [Thread-210469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:11:46.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:11:47.070 [DEBUG] [Thread-210469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:11:47.071 [DEBUG] [Thread-210469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:11:47.071 [DEBUG] [Thread-210469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:11:47.112 [DEBUG] [Thread-210469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:11:47.113 [DEBUG] [Thread-210469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:11:47.116 [DEBUG] [Thread-210469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:11:47.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:11:47.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:11:47.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:11:47.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:11:47.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:11:47.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:11:47.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:11:47.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:11:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:11:47.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.757732 -999.00  +17.10  22.03     41   +4.00 1 1 1 1 1     8    0 12.52 -14.08 ZNEs. 27.4 22.0 159.9 32.6 17.3 -24.9 17.2 -24.0 17.0 -22.9 17.3 -24.1
2026-02-15T20:11:47.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:11:47.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:11:47.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.757732
2026-02-15T20:11:47.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:11:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:11:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:11:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:11:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:11:47.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:11:23', tmtdew=14.98, humidity=36.46, cloud=0.0, wind=33.89, temperature=17.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:11:08.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:11:47.143 [DEBUG] [Thread-210469] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:11:47.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:11:47.251 [DEBUG] [Thread-210472] [transport.py] [_log()] starting thread (client mode): 0xa57e3b50
2026-02-15T20:11:47.252 [DEBUG] [Thread-210472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:11:47.266 [DEBUG] [Thread-210472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:11:47.266 [INFO] [Thread-210472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:11:47.273 [DEBUG] [Thread-210472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:11:47.274 [DEBUG] [Thread-210472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] client lang: <none>
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] server lang: <none>
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] kex follows: False
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:11:47.275 [DEBUG] [Thread-210472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:11:47.276 [DEBUG] [Thread-210472] [transport.py] [_log()] Compression: none
2026-02-15T20:11:47.276 [DEBUG] [Thread-210472] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:11:47.331 [DEBUG] [Thread-210472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:11:47.332 [DEBUG] [Thread-210472] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:11:47.332 [DEBUG] [Thread-210472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:11:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:11:47.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:11:47.388 [DEBUG] [Thread-210472] [transport.py] [_log()] userauth is OK
2026-02-15T20:11:47.388 [DEBUG] [Thread-210472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:11:47.388 [DEBUG] [Thread-210472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:11:47.388 [DEBUG] [Thread-210472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:11:47.389 [DEBUG] [Thread-210472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:11:47.404 [INFO] [Thread-210472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:11:47.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:11:47.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:11:48.248 [DEBUG] [Thread-210472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:11:48.248 [DEBUG] [Thread-210472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:11:48.302 [DEBUG] [Thread-210472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:11:48.302 [DEBUG] [Thread-210472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:11:48.312 [DEBUG] [Thread-210472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:11:48.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:11:48.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:11: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
2026-02-15T20:11:48.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:11:48.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:11:48.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:11:48.348 [DEBUG] [Thread-210472] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:11:58.445 [DEBUG] [Thread-210474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:00.464 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:00.465 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:08.317 [DEBUG] [Thread-210475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:13.495 [DEBUG] [Thread-210476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:18.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:12:18.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:12:18.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:12:20.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 11, 59), 15.02, 36.46, 0.0, 31.9, 17.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:12:20.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:11:59
2026-02-15T20:12:20.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:12:20.790 [DEBUG] [Thread-210477] [transport.py] [_log()] starting thread (client mode): 0xa57b3040
2026-02-15T20:12:20.790 [DEBUG] [Thread-210477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:12:20.810 [DEBUG] [Thread-210477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:12:20.810 [INFO] [Thread-210477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:12:20.813 [DEBUG] [Thread-210477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:12:20.813 [DEBUG] [Thread-210477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:12:20.813 [DEBUG] [Thread-210477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] client lang: <none>
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] server lang: <none>
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] kex follows: False
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:12:20.814 [DEBUG] [Thread-210477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:12:20.815 [DEBUG] [Thread-210477] [transport.py] [_log()] Compression: none
2026-02-15T20:12:20.815 [DEBUG] [Thread-210477] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:12:20.833 [DEBUG] [Thread-210477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:12:20.833 [DEBUG] [Thread-210477] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:12:20.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:12:20.835 [DEBUG] [Thread-210477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:12:20.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:12:20.837 [DEBUG] [Thread-210477] [transport.py] [_log()] userauth is OK
2026-02-15T20:12:20.837 [DEBUG] [Thread-210477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:12:20.837 [DEBUG] [Thread-210477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:12:20.837 [DEBUG] [Thread-210477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:12:20.837 [DEBUG] [Thread-210477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:12:20.860 [INFO] [Thread-210477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:12:20.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:12:21.492 [DEBUG] [Thread-210477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:12:21.492 [DEBUG] [Thread-210477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:12:21.492 [DEBUG] [Thread-210477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:12:21.534 [DEBUG] [Thread-210477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:12:21.534 [DEBUG] [Thread-210477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:12:21.537 [DEBUG] [Thread-210477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:12:21.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:12:21.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:12:21.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:12:21.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:12:21.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:12:21.561 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:12:21.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:12:21.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:12:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:12:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.758079 -999.00  +17.10  22.90     41   +4.00 1 1 1 1 1     7    0 12.64 -11.30 ZNEs. 16.8 22.9 163.2 27.6 17.3 -25.2 17.2 -24.1 17.0 -23.0 17.3 -24.2
2026-02-15T20:12:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:12:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:12:21.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.758079
2026-02-15T20:12:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:12:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:12:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:12:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:12:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:12:21.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:11:59', tmtdew=15.02, humidity=36.46, cloud=0.0, wind=31.9, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:11:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:12:21.564 [DEBUG] [Thread-210477] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:12:21.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:12:21.656 [DEBUG] [Thread-210480] [transport.py] [_log()] starting thread (client mode): 0xa2d6cfd0
2026-02-15T20:12:21.656 [DEBUG] [Thread-210480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:12:21.670 [DEBUG] [Thread-210480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:12:21.671 [INFO] [Thread-210480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] client lang: <none>
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] server lang: <none>
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] kex follows: False
2026-02-15T20:12:21.678 [DEBUG] [Thread-210480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:12:21.679 [DEBUG] [Thread-210480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:12:21.679 [DEBUG] [Thread-210480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:12:21.679 [DEBUG] [Thread-210480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:12:21.679 [DEBUG] [Thread-210480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:12:21.679 [DEBUG] [Thread-210480] [transport.py] [_log()] Compression: none
2026-02-15T20:12:21.679 [DEBUG] [Thread-210480] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:12:21.737 [DEBUG] [Thread-210480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:12:21.738 [DEBUG] [Thread-210480] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:12:21.738 [DEBUG] [Thread-210480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:12:21.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:12:21.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:12:21.797 [DEBUG] [Thread-210480] [transport.py] [_log()] userauth is OK
2026-02-15T20:12:21.797 [DEBUG] [Thread-210480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:12:21.798 [DEBUG] [Thread-210480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:12:21.798 [DEBUG] [Thread-210480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:12:21.798 [DEBUG] [Thread-210480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:12:21.816 [INFO] [Thread-210480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:12:21.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:12:21.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:12:22.648 [DEBUG] [Thread-210480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:12:22.648 [DEBUG] [Thread-210480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:12:22.699 [DEBUG] [Thread-210480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:12:22.699 [DEBUG] [Thread-210480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:12:22.708 [DEBUG] [Thread-210480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:12:22.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:12:22.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:12:22.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:12:22.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:12:22.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:12:22.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:12:22.743 [DEBUG] [Thread-210480] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:12:28.534 [DEBUG] [Thread-210482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:43.587 [DEBUG] [Thread-210483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:12:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:12:52.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:12:52.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:12:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 12, 34), 15.24, 35.95, 0.0, 36.13, 17.49, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:12:54.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:12:34
2026-02-15T20:12:55.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:12:55.180 [DEBUG] [Thread-210484] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1f0
2026-02-15T20:12:55.180 [DEBUG] [Thread-210484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:12:55.197 [DEBUG] [Thread-210484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:12:55.197 [INFO] [Thread-210484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:55.200 [DEBUG] [Thread-210484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] client lang: <none>
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] server lang: <none>
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] kex follows: False
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] Compression: none
2026-02-15T20:12:55.201 [DEBUG] [Thread-210484] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:12:55.215 [DEBUG] [Thread-210484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:12:55.215 [DEBUG] [Thread-210484] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:12:55.216 [DEBUG] [Thread-210484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:12:55.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:12:55.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:12:55.217 [DEBUG] [Thread-210484] [transport.py] [_log()] userauth is OK
2026-02-15T20:12:55.217 [DEBUG] [Thread-210484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:12:55.217 [DEBUG] [Thread-210484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:12:55.217 [DEBUG] [Thread-210484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:12:55.217 [DEBUG] [Thread-210484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:12:55.236 [INFO] [Thread-210484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:12:55.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:12:56.357 [DEBUG] [Thread-210484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:12:56.357 [DEBUG] [Thread-210484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:12:56.357 [DEBUG] [Thread-210484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:12:56.398 [DEBUG] [Thread-210484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:12:56.398 [DEBUG] [Thread-210484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:12:56.402 [DEBUG] [Thread-210484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:12:56.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:12:56.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:12:56.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:12:56.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:12:56.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:12:56.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:12:56.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:12:56.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:12:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:12:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.758426 -999.00  +17.00  19.27     41   +4.00 1 1 1 1 1     7    0 12.46 -8.58 ZNEs. 20.2 19.3 154.0 25.8 17.3 -25.0 17.2 -24.1 17.0 -23.0 17.3 -24.2
2026-02-15T20:12:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:12:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:12:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.758426
2026-02-15T20:12:56.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:12:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:12:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:12:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:12:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:12:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:12:34', tmtdew=15.24, humidity=35.95, cloud=0.0, wind=36.13, temperature=17.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:12:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:12:56.432 [DEBUG] [Thread-210484] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:12:56.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:12:56.530 [DEBUG] [Thread-210487] [transport.py] [_log()] starting thread (client mode): 0xa57b0310
2026-02-15T20:12:56.530 [DEBUG] [Thread-210487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:12:56.544 [DEBUG] [Thread-210487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:12:56.544 [INFO] [Thread-210487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:12:56.552 [DEBUG] [Thread-210487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:12:56.552 [DEBUG] [Thread-210487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] client lang: <none>
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] server lang: <none>
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] kex follows: False
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] Compression: none
2026-02-15T20:12:56.553 [DEBUG] [Thread-210487] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:12:56.611 [DEBUG] [Thread-210487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:12:56.612 [DEBUG] [Thread-210487] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:12:56.613 [DEBUG] [Thread-210487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:12:56.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:12:56.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:12:56.668 [DEBUG] [Thread-210487] [transport.py] [_log()] userauth is OK
2026-02-15T20:12:56.668 [DEBUG] [Thread-210487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:12:56.668 [DEBUG] [Thread-210487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:12:56.668 [DEBUG] [Thread-210487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:12:56.668 [DEBUG] [Thread-210487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:12:56.692 [INFO] [Thread-210487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:12:56.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:12:56.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:12:57.523 [DEBUG] [Thread-210487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:12:57.524 [DEBUG] [Thread-210487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:12:57.571 [DEBUG] [Thread-210487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:12:57.572 [DEBUG] [Thread-210487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:12:57.581 [DEBUG] [Thread-210487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:12:57.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:12:57.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:12:57.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:12:57.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:12:57.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:12:57.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:12:57.617 [DEBUG] [Thread-210487] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:12:58.625 [DEBUG] [Thread-210489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:04.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:04.752 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:08.386 [DEBUG] [Thread-210490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:13.678 [DEBUG] [Thread-210491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:27.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:13:27.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:13:27.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:13:28.714 [DEBUG] [Thread-210492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:29.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 13, 9), 15.08, 36.42, 0.0, 31.97, 17.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:13:29.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:13:09
2026-02-15T20:13:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:13:29.990 [DEBUG] [Thread-210493] [transport.py] [_log()] starting thread (client mode): 0xa2d56830
2026-02-15T20:13:29.990 [DEBUG] [Thread-210493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:13:30.011 [DEBUG] [Thread-210493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:13:30.011 [INFO] [Thread-210493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:13:30.014 [DEBUG] [Thread-210493] [transport.py] [_log()] client lang: <none>
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] server lang: <none>
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] kex follows: False
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] Compression: none
2026-02-15T20:13:30.015 [DEBUG] [Thread-210493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:13:30.034 [DEBUG] [Thread-210493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:13:30.035 [DEBUG] [Thread-210493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:13:30.035 [DEBUG] [Thread-210493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:13:30.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:13:30.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:13:30.038 [DEBUG] [Thread-210493] [transport.py] [_log()] userauth is OK
2026-02-15T20:13:30.038 [DEBUG] [Thread-210493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:13:30.039 [DEBUG] [Thread-210493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:13:30.039 [DEBUG] [Thread-210493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:13:30.039 [DEBUG] [Thread-210493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:13:30.060 [INFO] [Thread-210493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:13:30.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:13:30.705 [DEBUG] [Thread-210493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:13:30.706 [DEBUG] [Thread-210493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:13:30.706 [DEBUG] [Thread-210493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:13:30.747 [DEBUG] [Thread-210493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:13:30.747 [DEBUG] [Thread-210493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:13:30.750 [DEBUG] [Thread-210493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:13:30.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:13:30.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:13:30.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:13:30.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:13:30.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:13:30.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:13:30.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:13:30.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:13:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:13:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.758773 -999.00  +17.00  22.49     41   +4.00 1 1 1 1 1     6    0 12.50 -7.77 ZNEs. 19.7 22.5 146.6 27.9 17.3 -25.2 17.2 -24.1 17.0 -22.9 17.2 -24.4
2026-02-15T20:13:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:13:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:13:30.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.758773
2026-02-15T20:13:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:13:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:13:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:13:30.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:13:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:13:30.779 [DEBUG] [Thread-210493] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:13:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:13:09', tmtdew=15.08, humidity=36.42, cloud=0.0, wind=31.97, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:12:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:13:30.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:13:30.875 [DEBUG] [Thread-210496] [transport.py] [_log()] starting thread (client mode): 0xa57b0880
2026-02-15T20:13:30.875 [DEBUG] [Thread-210496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:13:30.889 [DEBUG] [Thread-210496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:13:30.890 [INFO] [Thread-210496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] client lang: <none>
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] server lang: <none>
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] kex follows: False
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] Compression: none
2026-02-15T20:13:30.897 [DEBUG] [Thread-210496] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:13:30.954 [DEBUG] [Thread-210496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:13:30.954 [DEBUG] [Thread-210496] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:13:30.955 [DEBUG] [Thread-210496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:13:30.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:13:30.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:13:31.010 [DEBUG] [Thread-210496] [transport.py] [_log()] userauth is OK
2026-02-15T20:13:31.010 [DEBUG] [Thread-210496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:13:31.010 [DEBUG] [Thread-210496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:13:31.010 [DEBUG] [Thread-210496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:13:31.010 [DEBUG] [Thread-210496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:13:31.028 [INFO] [Thread-210496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:13:31.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:13:31.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:13:31.877 [DEBUG] [Thread-210496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:13:31.877 [DEBUG] [Thread-210496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:13:31.924 [DEBUG] [Thread-210496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:13:31.925 [DEBUG] [Thread-210496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:13:31.934 [DEBUG] [Thread-210496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:13:31.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:13:31.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:13:31.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:13:31.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:13:31.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:13:31.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:13:31.970 [DEBUG] [Thread-210496] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:13:43.752 [DEBUG] [Thread-210498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:13:58.800 [DEBUG] [Thread-210499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:01.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:14:01.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:14:02.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:14:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 13, 44), 15.08, 36.44, 0.0, 31.74, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:14:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:13:44
2026-02-15T20:14:04.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:14:04.327 [DEBUG] [Thread-210500] [transport.py] [_log()] starting thread (client mode): 0xa57b0a00
2026-02-15T20:14:04.328 [DEBUG] [Thread-210500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:14:04.342 [DEBUG] [Thread-210500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:14:04.343 [INFO] [Thread-210500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:14:04.345 [DEBUG] [Thread-210500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:14:04.345 [DEBUG] [Thread-210500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] client lang: <none>
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] server lang: <none>
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] kex follows: False
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] Compression: none
2026-02-15T20:14:04.346 [DEBUG] [Thread-210500] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:14:04.355 [DEBUG] [Thread-210500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:14:04.355 [DEBUG] [Thread-210500] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:14:04.356 [DEBUG] [Thread-210500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:14:04.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:14:04.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:14:04.357 [DEBUG] [Thread-210500] [transport.py] [_log()] userauth is OK
2026-02-15T20:14:04.357 [DEBUG] [Thread-210500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:14:04.357 [DEBUG] [Thread-210500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:14:04.357 [DEBUG] [Thread-210500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:14:04.357 [DEBUG] [Thread-210500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:14:04.373 [INFO] [Thread-210500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:14:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:14:04.995 [DEBUG] [Thread-210500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:14:04.996 [DEBUG] [Thread-210500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:14:04.996 [DEBUG] [Thread-210500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:14:05.036 [DEBUG] [Thread-210500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:14:05.037 [DEBUG] [Thread-210500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:14:05.039 [DEBUG] [Thread-210500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:14:05.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:14:05.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:14:05.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:14:05.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:14:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:14:05.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:14:05.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:14:05.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:14:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:14:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.759121 -999.00  +17.00  19.10     42   +4.00 1 1 1 1 1     5    0 12.77 -5.07 ZNES. 19.1 19.1 157.0 28.6 17.2 -25.1 17.2 -24.1 17.0 -23.0 17.3 -24.2
2026-02-15T20:14:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:14:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:14:05.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.759121
2026-02-15T20:14:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:14:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:14:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:14:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:14:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:14:05.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:13:44', tmtdew=15.08, humidity=36.44, cloud=0.0, wind=31.74, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:13:08.054', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:14:05.066 [DEBUG] [Thread-210500] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:14:05.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:14:05.161 [DEBUG] [Thread-210503] [transport.py] [_log()] starting thread (client mode): 0xa2d57c40
2026-02-15T20:14:05.162 [DEBUG] [Thread-210503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:14:05.175 [DEBUG] [Thread-210503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:14:05.175 [INFO] [Thread-210503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:14:05.182 [DEBUG] [Thread-210503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] client lang: <none>
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] server lang: <none>
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] kex follows: False
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:14:05.183 [DEBUG] [Thread-210503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:14:05.184 [DEBUG] [Thread-210503] [transport.py] [_log()] Compression: none
2026-02-15T20:14:05.184 [DEBUG] [Thread-210503] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:14:05.239 [DEBUG] [Thread-210503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:14:05.240 [DEBUG] [Thread-210503] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:14:05.240 [DEBUG] [Thread-210503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:14:05.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:14:05.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:14:05.299 [DEBUG] [Thread-210503] [transport.py] [_log()] userauth is OK
2026-02-15T20:14:05.300 [DEBUG] [Thread-210503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:14:05.300 [DEBUG] [Thread-210503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:14:05.300 [DEBUG] [Thread-210503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:14:05.300 [DEBUG] [Thread-210503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:14:05.322 [INFO] [Thread-210503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:14:05.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:14:05.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:14:05.970 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:06.156 [DEBUG] [Thread-210503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:14:06.156 [DEBUG] [Thread-210503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:14:06.204 [DEBUG] [Thread-210503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:14:06.204 [DEBUG] [Thread-210503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:14:06.214 [DEBUG] [Thread-210503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:14:06.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:14:06.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:14:06.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:14:06.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:14:06.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:14:06.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:14:06.254 [DEBUG] [Thread-210503] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:14:08.467 [DEBUG] [Thread-210505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:08.723 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:08.724 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:13.837 [DEBUG] [Thread-210506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:24.819 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:28.889 [DEBUG] [Thread-210507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:36.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:14:36.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:14:36.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:14:38.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 14, 20), 15.07, 36.47, 0.0, 30.26, 17.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:14:38.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:14:20
2026-02-15T20:14:38.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:14:39.030 [DEBUG] [Thread-210508] [transport.py] [_log()] starting thread (client mode): 0xa57b3400
2026-02-15T20:14:39.031 [DEBUG] [Thread-210508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:14:39.051 [DEBUG] [Thread-210508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:14:39.051 [INFO] [Thread-210508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:39.054 [DEBUG] [Thread-210508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] client lang: <none>
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] server lang: <none>
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] kex follows: False
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] Compression: none
2026-02-15T20:14:39.055 [DEBUG] [Thread-210508] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:14:39.071 [DEBUG] [Thread-210508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:14:39.072 [DEBUG] [Thread-210508] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:14:39.072 [DEBUG] [Thread-210508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:14:39.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:14:39.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:14:39.074 [DEBUG] [Thread-210508] [transport.py] [_log()] userauth is OK
2026-02-15T20:14:39.074 [DEBUG] [Thread-210508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:14:39.074 [DEBUG] [Thread-210508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:14:39.075 [DEBUG] [Thread-210508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:14:39.075 [DEBUG] [Thread-210508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:14:39.095 [INFO] [Thread-210508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:14:39.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:14:39.697 [DEBUG] [Thread-210508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:14:39.697 [DEBUG] [Thread-210508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:14:39.698 [DEBUG] [Thread-210508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:14:39.739 [DEBUG] [Thread-210508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:14:39.740 [DEBUG] [Thread-210508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:14:39.743 [DEBUG] [Thread-210508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:14:39.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:14:39.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:14:39.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:14:39.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:14:39.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:14:39.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:14:39.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:14:39.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:14:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:14:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.759468 -999.00  +17.00  19.09     42   +4.00 1 1 1 1 1     5    0 12.57 -3.60 ZNES. 28.8 19.1 150.2 27.3 17.3 -25.1 17.2 -24.0 17.0 -22.9 17.2 -24.1
2026-02-15T20:14:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:14:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:14:39.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.759468
2026-02-15T20:14:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:14:39.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:14:39.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:14:39.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:14:39.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:14:39.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:14:20', tmtdew=15.07, humidity=36.47, cloud=0.0, wind=30.26, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:13:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:14:39.772 [DEBUG] [Thread-210508] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:14:39.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:14:39.866 [DEBUG] [Thread-210511] [transport.py] [_log()] starting thread (client mode): 0xa2d3e740
2026-02-15T20:14:39.867 [DEBUG] [Thread-210511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:14:39.882 [DEBUG] [Thread-210511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:14:39.883 [INFO] [Thread-210511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:14:39.890 [DEBUG] [Thread-210511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:14:39.890 [DEBUG] [Thread-210511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:14:39.890 [DEBUG] [Thread-210511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:14:39.890 [DEBUG] [Thread-210511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:39.890 [DEBUG] [Thread-210511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:14:39.890 [DEBUG] [Thread-210511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] client lang: <none>
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] server lang: <none>
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] kex follows: False
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] Compression: none
2026-02-15T20:14:39.891 [DEBUG] [Thread-210511] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:14:39.950 [DEBUG] [Thread-210511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:14:39.951 [DEBUG] [Thread-210511] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:14:39.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:14:39.952 [DEBUG] [Thread-210511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:14:39.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:14:40.007 [DEBUG] [Thread-210511] [transport.py] [_log()] userauth is OK
2026-02-15T20:14:40.007 [DEBUG] [Thread-210511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:14:40.007 [DEBUG] [Thread-210511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:14:40.007 [DEBUG] [Thread-210511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:14:40.007 [DEBUG] [Thread-210511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:14:40.026 [INFO] [Thread-210511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:14:40.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:14:40.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:14:40.878 [DEBUG] [Thread-210511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:14:40.878 [DEBUG] [Thread-210511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:14:40.926 [DEBUG] [Thread-210511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:14:40.926 [DEBUG] [Thread-210511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:14:40.935 [DEBUG] [Thread-210511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:14:40.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:14:40.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:14:40.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:14:40.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:14:40.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:14:40.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:14:40.971 [DEBUG] [Thread-210511] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:14:43.522 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:43.924 [DEBUG] [Thread-210513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:14:58.979 [DEBUG] [Thread-210514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:02.168 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:08.543 [DEBUG] [Thread-210515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:10.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:15:10.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:15:11.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:15:12.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 14, 56), 15.05, 36.39, 0.0, 26.13, 17.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:15:12.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:14:56
2026-02-15T20:15:13.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:15:13.298 [DEBUG] [Thread-210516] [transport.py] [_log()] starting thread (client mode): 0xa2d57310
2026-02-15T20:15:13.298 [DEBUG] [Thread-210516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:15:13.319 [DEBUG] [Thread-210516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:15:13.319 [INFO] [Thread-210516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] client lang: <none>
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] server lang: <none>
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] kex follows: False
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:15:13.322 [DEBUG] [Thread-210516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:15:13.323 [DEBUG] [Thread-210516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:15:13.323 [DEBUG] [Thread-210516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:15:13.323 [DEBUG] [Thread-210516] [transport.py] [_log()] Compression: none
2026-02-15T20:15:13.323 [DEBUG] [Thread-210516] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:15:13.340 [DEBUG] [Thread-210516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:15:13.341 [DEBUG] [Thread-210516] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:15:13.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:15:13.342 [DEBUG] [Thread-210516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:15:13.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:15:13.344 [DEBUG] [Thread-210516] [transport.py] [_log()] userauth is OK
2026-02-15T20:15:13.344 [DEBUG] [Thread-210516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:15:13.344 [DEBUG] [Thread-210516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:15:13.344 [DEBUG] [Thread-210516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:15:13.344 [DEBUG] [Thread-210516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:15:13.368 [INFO] [Thread-210516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:15:13.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:15:14.014 [DEBUG] [Thread-210518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:14.892 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:14.893 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:20.028 [DEBUG] [Thread-210516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:15:20.028 [DEBUG] [Thread-210516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:15:20.028 [DEBUG] [Thread-210516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:15:20.068 [DEBUG] [Thread-210516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:15:20.068 [DEBUG] [Thread-210516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:15:20.071 [DEBUG] [Thread-210516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:15:20.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:15:20.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:15:20.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:15:20.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:15:20.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:15:20.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:15:20.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:15:20.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:15:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:15:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.760162 -999.00  +17.00  18.49     41   +3.90 1 1 1 1 1     4    0 13.01 -0.22 ZNES. 22.6 18.5 153.8 34.1 17.3 -24.9 17.2 -24.0 16.9 -22.9 17.2 -24.0
2026-02-15T20:15:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:15:20.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:15:20.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.760162
2026-02-15T20:15:20.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:15:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:15:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:15:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:15:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:15:20.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:14:56', tmtdew=15.05, humidity=36.39, cloud=0.0, wind=26.13, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:14:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:15:20.097 [DEBUG] [Thread-210516] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:15:20.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:15:20.191 [DEBUG] [Thread-210520] [transport.py] [_log()] starting thread (client mode): 0xa5773520
2026-02-15T20:15:20.191 [DEBUG] [Thread-210520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:15:20.206 [DEBUG] [Thread-210520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:15:20.206 [INFO] [Thread-210520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:20.213 [DEBUG] [Thread-210520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] client lang: <none>
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] server lang: <none>
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] kex follows: False
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] Compression: none
2026-02-15T20:15:20.214 [DEBUG] [Thread-210520] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:15:20.272 [DEBUG] [Thread-210520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:15:20.272 [DEBUG] [Thread-210520] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:15:20.273 [DEBUG] [Thread-210520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:15:20.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:15:20.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:15:20.328 [DEBUG] [Thread-210520] [transport.py] [_log()] userauth is OK
2026-02-15T20:15:20.329 [DEBUG] [Thread-210520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:15:20.329 [DEBUG] [Thread-210520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:15:20.329 [DEBUG] [Thread-210520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:15:20.329 [DEBUG] [Thread-210520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:15:20.348 [INFO] [Thread-210520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:15:20.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:15:20.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:15:20.954 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:21.163 [DEBUG] [Thread-210520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:15:21.163 [DEBUG] [Thread-210520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:15:21.211 [DEBUG] [Thread-210520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:15:21.212 [DEBUG] [Thread-210520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:15:21.220 [DEBUG] [Thread-210520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:15:21.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:15: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')
2026-02-15T20:15:21.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:15:21.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:15:21.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:15:21.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:15:21.257 [DEBUG] [Thread-210520] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:15:29.051 [DEBUG] [Thread-210522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:39.730 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:44.107 [DEBUG] [Thread-210523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:51.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:15:51.280 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:15:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:15:53.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 15, 31), 15.04, 36.41, 0.0, 27.05, 17.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:15:53.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:15:31
2026-02-15T20:15:53.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:15:53.634 [DEBUG] [Thread-210524] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-15T20:15:53.634 [DEBUG] [Thread-210524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:15:53.654 [DEBUG] [Thread-210524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:15:53.654 [INFO] [Thread-210524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] client lang: <none>
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] server lang: <none>
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] kex follows: False
2026-02-15T20:15:53.657 [DEBUG] [Thread-210524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:15:53.658 [DEBUG] [Thread-210524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:15:53.658 [DEBUG] [Thread-210524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:15:53.658 [DEBUG] [Thread-210524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:15:53.658 [DEBUG] [Thread-210524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:15:53.658 [DEBUG] [Thread-210524] [transport.py] [_log()] Compression: none
2026-02-15T20:15:53.658 [DEBUG] [Thread-210524] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:15:53.673 [DEBUG] [Thread-210524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:15:53.673 [DEBUG] [Thread-210524] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:15:53.674 [DEBUG] [Thread-210524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:15:53.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:15:53.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:15:53.674 [DEBUG] [Thread-210524] [transport.py] [_log()] userauth is OK
2026-02-15T20:15:53.674 [DEBUG] [Thread-210524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:15:53.674 [DEBUG] [Thread-210524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:15:53.674 [DEBUG] [Thread-210524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:15:53.674 [DEBUG] [Thread-210524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:15:53.691 [INFO] [Thread-210524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:15:53.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:15:54.326 [DEBUG] [Thread-210524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:15:54.326 [DEBUG] [Thread-210524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:15:54.327 [DEBUG] [Thread-210524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:15:54.367 [DEBUG] [Thread-210524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:15:54.368 [DEBUG] [Thread-210524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:15:54.371 [DEBUG] [Thread-210524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:15:54.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:15:54.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:15:54.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:15:54.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:15:54.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:15:54.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:15:54.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:15:54.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:15:54.405 [DEBUG] [Thread-210524] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:15:54.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:15:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.760521 -999.00  +17.00  23.70     41   +3.90 1 1 1 1 1     3    0 12.98 1.98 ZNES. 26.0 23.7 155.0 37.6 17.2 -25.0 17.2 -24.0 17.0 -22.9 17.2 -24.1
2026-02-15T20:15:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:15:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:15:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.760521
2026-02-15T20:15:54.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:15:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:15:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:15:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:15:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:15:54.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:15:31', tmtdew=15.04, humidity=36.41, cloud=0.0, wind=27.05, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:15:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:15:54.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:15:54.505 [DEBUG] [Thread-210527] [transport.py] [_log()] starting thread (client mode): 0xa57b1ff0
2026-02-15T20:15:54.505 [DEBUG] [Thread-210527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:15:54.519 [DEBUG] [Thread-210527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:15:54.520 [INFO] [Thread-210527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:15:54.527 [DEBUG] [Thread-210527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] client lang: <none>
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] server lang: <none>
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] kex follows: False
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:15:54.528 [DEBUG] [Thread-210527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:15:54.529 [DEBUG] [Thread-210527] [transport.py] [_log()] Compression: none
2026-02-15T20:15:54.529 [DEBUG] [Thread-210527] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:15:54.588 [DEBUG] [Thread-210527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:15:54.588 [DEBUG] [Thread-210527] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:15:54.589 [DEBUG] [Thread-210527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:15:54.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:15:54.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:15:54.648 [DEBUG] [Thread-210527] [transport.py] [_log()] userauth is OK
2026-02-15T20:15:54.648 [DEBUG] [Thread-210527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:15:54.648 [DEBUG] [Thread-210527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:15:54.649 [DEBUG] [Thread-210527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:15:54.649 [DEBUG] [Thread-210527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:15:54.667 [INFO] [Thread-210527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:15:54.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:15:54.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:15:55.520 [DEBUG] [Thread-210527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:15:55.520 [DEBUG] [Thread-210527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:15:55.568 [DEBUG] [Thread-210527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:15:55.569 [DEBUG] [Thread-210527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:15:55.578 [DEBUG] [Thread-210527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:15:55.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:15:55.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:15:55.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:15:55.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:15:55.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:15:55.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:15:55.614 [DEBUG] [Thread-210527] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:15:58.392 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:15:59.140 [DEBUG] [Thread-210529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:08.601 [DEBUG] [Thread-210530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:14.201 [DEBUG] [Thread-210531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:17.065 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:19.154 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:19.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:25.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:16:25.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:16:25.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:16:27.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 16, 6), 15.02, 36.47, 0.0, 28.94, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:16:27.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:16:06
2026-02-15T20:16:27.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:16:28.083 [DEBUG] [Thread-210532] [transport.py] [_log()] starting thread (client mode): 0xa2d12a40
2026-02-15T20:16:28.084 [DEBUG] [Thread-210532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:16:28.103 [DEBUG] [Thread-210532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:16:28.103 [INFO] [Thread-210532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:16:28.104 [DEBUG] [Thread-210532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] client lang: <none>
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] server lang: <none>
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] kex follows: False
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] Compression: none
2026-02-15T20:16:28.105 [DEBUG] [Thread-210532] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:16:28.113 [DEBUG] [Thread-210532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:16:28.113 [DEBUG] [Thread-210532] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:16:28.114 [DEBUG] [Thread-210532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:16:28.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:16:28.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:16:28.116 [DEBUG] [Thread-210532] [transport.py] [_log()] userauth is OK
2026-02-15T20:16:28.116 [DEBUG] [Thread-210532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:16:28.116 [DEBUG] [Thread-210532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:16:28.116 [DEBUG] [Thread-210532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:16:28.116 [DEBUG] [Thread-210532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:16:28.151 [INFO] [Thread-210532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:16:28.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:16:28.761 [DEBUG] [Thread-210532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:16:28.761 [DEBUG] [Thread-210532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:16:28.762 [DEBUG] [Thread-210532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:16:28.803 [DEBUG] [Thread-210532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:16:28.803 [DEBUG] [Thread-210532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:16:28.806 [DEBUG] [Thread-210532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:16:28.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:16:28.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:16:28.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:16:28.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:16:28.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:16:28.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:16:28.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:16:28.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:16:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:16:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.760857 -999.00  +17.00  22.36     41   +3.90 1 1 1 1 1     3    0 13.04 3.85 ZNES. 25.5 22.4 154.6 26.5 17.2 -24.9 17.2 -23.8 17.0 -22.8 17.2 -24.1
2026-02-15T20:16:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:16:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:16:28.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.760857
2026-02-15T20:16:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:16:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:16:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:16:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:16:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:16:28.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:16:06', tmtdew=15.02, humidity=36.47, cloud=0.0, wind=28.94, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:15:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[nan, nan, nan, nan, nan, nan, nan, nan, nan, 3.2680000000000007, nan, 2.7669999999999995, nan, nan, nan, nan, nan, nan, 2.387999999999999, 2.1542499999999993, nan, nan, nan, nan, nan, nan, nan, 1.6875, 1.8920000000000003, nan, nan, 2.4025000000000016, nan], zp_timestamp='2026-02-15T03:17:00')
2026-02-15T20:16:28.832 [DEBUG] [Thread-210532] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:16:28.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:16:28.927 [DEBUG] [Thread-210535] [transport.py] [_log()] starting thread (client mode): 0xa2d12f20
2026-02-15T20:16:28.927 [DEBUG] [Thread-210535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:16:28.941 [DEBUG] [Thread-210535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:16:28.941 [INFO] [Thread-210535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:16:28.949 [DEBUG] [Thread-210535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:16:28.949 [DEBUG] [Thread-210535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:16:28.949 [DEBUG] [Thread-210535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] client lang: <none>
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] server lang: <none>
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] kex follows: False
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] Compression: none
2026-02-15T20:16:28.950 [DEBUG] [Thread-210535] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:16:29.010 [DEBUG] [Thread-210535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:16:29.011 [DEBUG] [Thread-210535] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:16:29.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:16:29.012 [DEBUG] [Thread-210535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:16:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:16:29.066 [DEBUG] [Thread-210535] [transport.py] [_log()] userauth is OK
2026-02-15T20:16:29.066 [DEBUG] [Thread-210535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:16:29.066 [DEBUG] [Thread-210535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:16:29.066 [DEBUG] [Thread-210535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:16:29.067 [DEBUG] [Thread-210535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:16:29.085 [INFO] [Thread-210535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:16:29.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:16:29.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:16:29.236 [DEBUG] [Thread-210537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:29.904 [DEBUG] [Thread-210535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:16:29.905 [DEBUG] [Thread-210535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:16:29.952 [DEBUG] [Thread-210535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:16:29.953 [DEBUG] [Thread-210535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:16:29.962 [DEBUG] [Thread-210535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:16:29.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:16:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:16:29.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:16:29.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:16:29.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:16:29.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:16:29.998 [DEBUG] [Thread-210535] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:16:35.747 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:44.286 [DEBUG] [Thread-210538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:54.556 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:16:59.322 [DEBUG] [Thread-210539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:00.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:17:00.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:17:00.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:17:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 16, 42), 15.32, 35.72, 0.0, 31.69, 17.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:17:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:16:42
2026-02-15T20:17:02.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:17:02.646 [DEBUG] [Thread-210540] [transport.py] [_log()] starting thread (client mode): 0xa57d6830
2026-02-15T20:17:02.646 [DEBUG] [Thread-210540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:17:02.665 [DEBUG] [Thread-210540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:17:02.665 [INFO] [Thread-210540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:17:02.678 [DEBUG] [Thread-210540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:17:02.678 [DEBUG] [Thread-210540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] client lang: <none>
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] server lang: <none>
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] kex follows: False
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:17:02.679 [DEBUG] [Thread-210540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:17:02.680 [DEBUG] [Thread-210540] [transport.py] [_log()] Compression: none
2026-02-15T20:17:02.680 [DEBUG] [Thread-210540] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:17:02.702 [DEBUG] [Thread-210540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:17:02.703 [DEBUG] [Thread-210540] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:17:02.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:17:02.704 [DEBUG] [Thread-210540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:17:02.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:17:02.707 [DEBUG] [Thread-210540] [transport.py] [_log()] userauth is OK
2026-02-15T20:17:02.707 [DEBUG] [Thread-210540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:17:02.707 [DEBUG] [Thread-210540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:17:02.708 [DEBUG] [Thread-210540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:17:02.708 [DEBUG] [Thread-210540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:17:02.728 [INFO] [Thread-210540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:17:02.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:17:03.326 [DEBUG] [Thread-210540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:17:03.327 [DEBUG] [Thread-210540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:17:03.327 [DEBUG] [Thread-210540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:17:03.367 [DEBUG] [Thread-210540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:17:03.368 [DEBUG] [Thread-210540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:17:03.371 [DEBUG] [Thread-210540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:17:03.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:17:03.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:17:03.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:17:03.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:17:03.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:17:03.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:17:03.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:17:03.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:17:03.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:17:03.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.761204 -999.00  +17.00  28.34     41   +3.90 1 1 1 1 1     3    0 13.01 5.29 ZNESw 17.7 28.3 141.6 33.6 17.2 -24.9 17.2 -23.9 17.0 -22.6 17.2 -23.9
2026-02-15T20:17:03.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:17:03.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:17:03.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.761204
2026-02-15T20:17:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:17:03.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:17:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:17:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:17:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:17:03.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:16:42', tmtdew=15.32, humidity=35.72, cloud=0.0, wind=31.69, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:16:08.026', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:15:00')
2026-02-15T20:17:03.397 [DEBUG] [Thread-210540] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:17:03.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:17:03.486 [DEBUG] [Thread-210543] [transport.py] [_log()] starting thread (client mode): 0xa5759ff0
2026-02-15T20:17:03.487 [DEBUG] [Thread-210543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:17:03.501 [DEBUG] [Thread-210543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:17:03.501 [INFO] [Thread-210543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] client lang: <none>
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] server lang: <none>
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] kex follows: False
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:17:03.509 [DEBUG] [Thread-210543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:17:03.510 [DEBUG] [Thread-210543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:17:03.510 [DEBUG] [Thread-210543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:17:03.510 [DEBUG] [Thread-210543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:17:03.510 [DEBUG] [Thread-210543] [transport.py] [_log()] Compression: none
2026-02-15T20:17:03.510 [DEBUG] [Thread-210543] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:17:03.569 [DEBUG] [Thread-210543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:17:03.569 [DEBUG] [Thread-210543] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:17:03.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:17:03.571 [DEBUG] [Thread-210543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:17:03.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:17:03.625 [DEBUG] [Thread-210543] [transport.py] [_log()] userauth is OK
2026-02-15T20:17:03.625 [DEBUG] [Thread-210543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:17:03.625 [DEBUG] [Thread-210543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:17:03.625 [DEBUG] [Thread-210543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:17:03.625 [DEBUG] [Thread-210543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:17:03.643 [INFO] [Thread-210543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:17: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-02-15T20:17:03.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:17:04.481 [DEBUG] [Thread-210543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:17:04.481 [DEBUG] [Thread-210543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:17:04.529 [DEBUG] [Thread-210543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:17:04.529 [DEBUG] [Thread-210543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:17:04.538 [DEBUG] [Thread-210543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:17:04.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:17: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-02-15T20:17:04.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:17:04.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:17:04.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:17:04.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:17:04.575 [DEBUG] [Thread-210543] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:17:08.675 [DEBUG] [Thread-210545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:13.416 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:14.360 [DEBUG] [Thread-210546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:25.097 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:25.098 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:29.422 [DEBUG] [Thread-210547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:32.077 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:34.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:17:34.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:17:34.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:17:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 17, 17), 15.11, 36.36, 0.0, 33.75, 17.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:17:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:17:17
2026-02-15T20:17:36.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:17:36.912 [DEBUG] [Thread-210548] [transport.py] [_log()] starting thread (client mode): 0xa2d11300
2026-02-15T20:17:36.912 [DEBUG] [Thread-210548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:17:36.932 [DEBUG] [Thread-210548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:17:36.932 [INFO] [Thread-210548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:17:36.935 [DEBUG] [Thread-210548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:17:36.935 [DEBUG] [Thread-210548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:17:36.935 [DEBUG] [Thread-210548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] client lang: <none>
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] server lang: <none>
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] kex follows: False
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:17:36.936 [DEBUG] [Thread-210548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:17:36.937 [DEBUG] [Thread-210548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:17:36.937 [DEBUG] [Thread-210548] [transport.py] [_log()] Compression: none
2026-02-15T20:17:36.937 [DEBUG] [Thread-210548] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:17:36.957 [DEBUG] [Thread-210548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:17:36.958 [DEBUG] [Thread-210548] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:17:36.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:17:36.959 [DEBUG] [Thread-210548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:17:36.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:17:36.961 [DEBUG] [Thread-210548] [transport.py] [_log()] userauth is OK
2026-02-15T20:17:36.961 [DEBUG] [Thread-210548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:17:36.962 [DEBUG] [Thread-210548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:17:36.962 [DEBUG] [Thread-210548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:17:36.962 [DEBUG] [Thread-210548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:17:36.986 [INFO] [Thread-210548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:17:36.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:17:37.609 [DEBUG] [Thread-210548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:17:37.609 [DEBUG] [Thread-210548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:17:37.610 [DEBUG] [Thread-210548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:17:37.651 [DEBUG] [Thread-210548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:17:37.651 [DEBUG] [Thread-210548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:17:37.654 [DEBUG] [Thread-210548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:17:37.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:17:37.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:17:37.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:17:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:17:37.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:17:37.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:17:37.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:17:37.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.761551 -999.00  +17.00  14.13     41   +3.90 1 1 1 1 1     2    0 13.07 6.31 ZNESw 16.7 14.1 152.6 30.6 17.3 -25.0 17.2 -24.1 16.9 -22.9 17.2 -24.1
2026-02-15T20:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.761551
2026-02-15T20:17:37.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:17:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:17:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:17:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:17:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:17:37.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:17:17', tmtdew=15.11, humidity=36.36, cloud=0.0, wind=33.75, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:16:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:15:00')
2026-02-15T20:17:37.682 [DEBUG] [Thread-210548] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:17:37.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:17:37.781 [DEBUG] [Thread-210551] [transport.py] [_log()] starting thread (client mode): 0xa2d13250
2026-02-15T20:17:37.782 [DEBUG] [Thread-210551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:17:37.796 [DEBUG] [Thread-210551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:17:37.796 [INFO] [Thread-210551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] client lang: <none>
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] server lang: <none>
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] kex follows: False
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:17:37.804 [DEBUG] [Thread-210551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:17:37.805 [DEBUG] [Thread-210551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:17:37.805 [DEBUG] [Thread-210551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:17:37.805 [DEBUG] [Thread-210551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:17:37.805 [DEBUG] [Thread-210551] [transport.py] [_log()] Compression: none
2026-02-15T20:17:37.805 [DEBUG] [Thread-210551] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:17:37.864 [DEBUG] [Thread-210551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:17:37.864 [DEBUG] [Thread-210551] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:17:37.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:17:37.865 [DEBUG] [Thread-210551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:17:37.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:17:37.919 [DEBUG] [Thread-210551] [transport.py] [_log()] userauth is OK
2026-02-15T20:17:37.920 [DEBUG] [Thread-210551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:17:37.920 [DEBUG] [Thread-210551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:17:37.920 [DEBUG] [Thread-210551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:17:37.920 [DEBUG] [Thread-210551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:17:37.944 [INFO] [Thread-210551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:17:37.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:17:37.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:17:38.765 [DEBUG] [Thread-210551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:17:38.765 [DEBUG] [Thread-210551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:17:38.813 [DEBUG] [Thread-210551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:17:38.813 [DEBUG] [Thread-210551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:17:38.823 [DEBUG] [Thread-210551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:17:38.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:17:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:17:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:17:38.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:17:38.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:17:38.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:17:38.861 [DEBUG] [Thread-210551] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:17:44.464 [DEBUG] [Thread-210553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:50.770 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:17:59.521 [DEBUG] [Thread-210554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:08.731 [DEBUG] [Thread-210555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:08.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:18:08.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:18:08.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:18:09.433 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 17, 52), 15.18, 36.33, 0.0, 30.79, 17.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:18:10.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:17:52
2026-02-15T20:18:11.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:18:11.206 [DEBUG] [Thread-210556] [transport.py] [_log()] starting thread (client mode): 0xa57d6c80
2026-02-15T20:18:11.207 [DEBUG] [Thread-210556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:18:11.226 [DEBUG] [Thread-210556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:18:11.227 [INFO] [Thread-210556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] client lang: <none>
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] server lang: <none>
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] kex follows: False
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] Compression: none
2026-02-15T20:18:11.230 [DEBUG] [Thread-210556] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:18:11.238 [DEBUG] [Thread-210556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:18:11.239 [DEBUG] [Thread-210556] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:18:11.239 [DEBUG] [Thread-210556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:18:11.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:18:11.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:18:11.241 [DEBUG] [Thread-210556] [transport.py] [_log()] userauth is OK
2026-02-15T20:18:11.241 [DEBUG] [Thread-210556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:18:11.241 [DEBUG] [Thread-210556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:18:11.241 [DEBUG] [Thread-210556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:18:11.241 [DEBUG] [Thread-210556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:18:11.276 [INFO] [Thread-210556] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:18:11.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:18:12.058 [DEBUG] [Thread-210556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:18:12.059 [DEBUG] [Thread-210556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:18:12.059 [DEBUG] [Thread-210556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:18:12.099 [DEBUG] [Thread-210556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:18:12.100 [DEBUG] [Thread-210556] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:18:12.103 [DEBUG] [Thread-210556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:18:12.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:18:12.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:18:12.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:18:12.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:18:12.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:18:12.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:18:12.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:18:12.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:18:12.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:18:12.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.761898 -999.00  +17.00  21.62     41   +3.90 1 1 1 1 1     2    0 13.57 8.26 ZNES. 19.9 21.6 153.2 27.1 17.2 -25.0 17.2 -23.9 17.0 -22.9 17.2 -24.1
2026-02-15T20:18:12.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:18:12.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:18:12.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.761898
2026-02-15T20:18:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:18:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:18:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:18:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:18:12.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:18:12.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:17:52', tmtdew=15.18, humidity=36.33, cloud=0.0, wind=30.79, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:17:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:15:00')
2026-02-15T20:18:12.130 [DEBUG] [Thread-210556] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:18:12.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:18:12.226 [DEBUG] [Thread-210559] [transport.py] [_log()] starting thread (client mode): 0xa2d13ee0
2026-02-15T20:18:12.226 [DEBUG] [Thread-210559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:18:12.241 [DEBUG] [Thread-210559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:18:12.241 [INFO] [Thread-210559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:18:12.249 [DEBUG] [Thread-210559] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:18:12.249 [DEBUG] [Thread-210559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] client lang: <none>
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] server lang: <none>
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] kex follows: False
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] Compression: none
2026-02-15T20:18:12.250 [DEBUG] [Thread-210559] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:18:12.307 [DEBUG] [Thread-210559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:18:12.308 [DEBUG] [Thread-210559] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:18:12.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:18:12.309 [DEBUG] [Thread-210559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:18:12.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:18:12.366 [DEBUG] [Thread-210559] [transport.py] [_log()] userauth is OK
2026-02-15T20:18:12.367 [DEBUG] [Thread-210559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:18:12.367 [DEBUG] [Thread-210559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:18:12.367 [DEBUG] [Thread-210559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:18:12.367 [DEBUG] [Thread-210559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:18:12.386 [INFO] [Thread-210559] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:18:12.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:18:12.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:18:13.231 [DEBUG] [Thread-210559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:18:13.232 [DEBUG] [Thread-210559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:18:13.280 [DEBUG] [Thread-210559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:18:13.280 [DEBUG] [Thread-210559] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:18:13.289 [DEBUG] [Thread-210559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:18:13.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:18:13.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:18:13.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:18:13.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:18:13.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:18:13.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:18:13.322 [DEBUG] [Thread-210559] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:18:14.556 [DEBUG] [Thread-210561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:25.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:25.297 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:28.094 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:29.604 [DEBUG] [Thread-210562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:43.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:18:43.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:18:43.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:18:44.639 [DEBUG] [Thread-210563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 18, 27), 15.18, 36.33, 0.0, 25.67, 17.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:18:45.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:18:27
2026-02-15T20:18:45.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:18:45.592 [DEBUG] [Thread-210564] [transport.py] [_log()] starting thread (client mode): 0xa5741210
2026-02-15T20:18:45.592 [DEBUG] [Thread-210564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:18:45.613 [DEBUG] [Thread-210564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:18:45.613 [INFO] [Thread-210564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:18:45.616 [DEBUG] [Thread-210564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] client lang: <none>
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] server lang: <none>
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] kex follows: False
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] Compression: none
2026-02-15T20:18:45.617 [DEBUG] [Thread-210564] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:18:45.636 [DEBUG] [Thread-210564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:18:45.636 [DEBUG] [Thread-210564] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:18:45.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:18:45.637 [DEBUG] [Thread-210564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:18:45.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:18:45.640 [DEBUG] [Thread-210564] [transport.py] [_log()] userauth is OK
2026-02-15T20:18:45.640 [DEBUG] [Thread-210564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:18:45.640 [DEBUG] [Thread-210564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:18:45.640 [DEBUG] [Thread-210564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:18:45.640 [DEBUG] [Thread-210564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:18:45.664 [INFO] [Thread-210564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:18:45.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:18:46.288 [DEBUG] [Thread-210564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:18:46.289 [DEBUG] [Thread-210564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:18:46.289 [DEBUG] [Thread-210564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:18:46.329 [DEBUG] [Thread-210564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:18:46.330 [DEBUG] [Thread-210564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:18:46.333 [DEBUG] [Thread-210564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:18:46.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:18:46.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:18:46.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:18:46.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:18:46.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:18:46.356 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:18:46.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:18:46.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:18:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:18:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.762593 -999.00  +17.00  18.69     41   +3.90 1 1 1 1 1     2    0 12.84 10.52 ZNES. 23.8 18.7 154.0 26.8 17.2 -24.8 17.1 -23.8 16.9 -22.8 17.2 -24.0
2026-02-15T20:18:46.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:18:46.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:18:46.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.762593
2026-02-15T20:18:46.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:18:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:18:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:18:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:18:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:18:46.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:18:27', tmtdew=15.18, humidity=36.33, cloud=0.0, wind=25.67, temperature=17.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:18:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:15:00')
2026-02-15T20:18:46.359 [DEBUG] [Thread-210564] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:18:46.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:18:46.456 [DEBUG] [Thread-210567] [transport.py] [_log()] starting thread (client mode): 0xa2d13340
2026-02-15T20:18:46.456 [DEBUG] [Thread-210567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:18:46.471 [DEBUG] [Thread-210567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:18:46.471 [INFO] [Thread-210567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:18:46.478 [DEBUG] [Thread-210567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] client lang: <none>
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] server lang: <none>
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] kex follows: False
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:18:46.479 [DEBUG] [Thread-210567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:18:46.480 [DEBUG] [Thread-210567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:18:46.480 [DEBUG] [Thread-210567] [transport.py] [_log()] Compression: none
2026-02-15T20:18:46.480 [DEBUG] [Thread-210567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:18:46.537 [DEBUG] [Thread-210567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:18:46.538 [DEBUG] [Thread-210567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:18:46.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:18:46.539 [DEBUG] [Thread-210567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:18:46.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:18:46.593 [DEBUG] [Thread-210567] [transport.py] [_log()] userauth is OK
2026-02-15T20:18:46.593 [DEBUG] [Thread-210567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:18:46.593 [DEBUG] [Thread-210567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:18:46.593 [DEBUG] [Thread-210567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:18:46.594 [DEBUG] [Thread-210567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:18:46.618 [INFO] [Thread-210567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:18:46.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:18:46.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:18:46.738 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:18:47.489 [DEBUG] [Thread-210567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:18:47.489 [DEBUG] [Thread-210567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:18:47.537 [DEBUG] [Thread-210567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:18:47.537 [DEBUG] [Thread-210567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:18:47.546 [DEBUG] [Thread-210567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:18:47.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:18:47.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:18:47.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:18:47.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:18:47.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:18:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:18:47.585 [DEBUG] [Thread-210567] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:18:59.672 [DEBUG] [Thread-210569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:05.448 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:08.788 [DEBUG] [Thread-210570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:14.718 [DEBUG] [Thread-210571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:17.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:19:17.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:19:17.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:19:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 19, 2), 15.19, 36.29, 0.0, 28.18, 17.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:19:19.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:19:02
2026-02-15T20:19:19.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:19:19.966 [DEBUG] [Thread-210572] [transport.py] [_log()] starting thread (client mode): 0xa5759ff0
2026-02-15T20:19:19.966 [DEBUG] [Thread-210572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:19:19.987 [DEBUG] [Thread-210572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:19:19.987 [INFO] [Thread-210572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:19:19.990 [DEBUG] [Thread-210572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] client lang: <none>
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] server lang: <none>
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] kex follows: False
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:19:19.991 [DEBUG] [Thread-210572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:19:19.992 [DEBUG] [Thread-210572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:19:19.992 [DEBUG] [Thread-210572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:19:19.992 [DEBUG] [Thread-210572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:19:19.992 [DEBUG] [Thread-210572] [transport.py] [_log()] Compression: none
2026-02-15T20:19:19.992 [DEBUG] [Thread-210572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:19:20.011 [DEBUG] [Thread-210572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:19:20.012 [DEBUG] [Thread-210572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:19:20.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:19:20.013 [DEBUG] [Thread-210572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:19:20.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:19:20.015 [DEBUG] [Thread-210572] [transport.py] [_log()] userauth is OK
2026-02-15T20:19:20.015 [DEBUG] [Thread-210572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:19:20.016 [DEBUG] [Thread-210572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:19:20.016 [DEBUG] [Thread-210572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:19:20.016 [DEBUG] [Thread-210572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:19:20.047 [INFO] [Thread-210572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:19:20.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:19:20.693 [DEBUG] [Thread-210572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:19:20.694 [DEBUG] [Thread-210572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:19:20.694 [DEBUG] [Thread-210572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:19:20.734 [DEBUG] [Thread-210572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:19:20.735 [DEBUG] [Thread-210572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:19:20.738 [DEBUG] [Thread-210572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:19:20.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:19:20.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:19:20.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:19:20.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:19:20.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:19:20.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:19:20.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:19:20.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:19:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:19:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.762940 -999.00  +17.00  22.85     41   +3.90 1 1 1 1 1     1    0 13.25 12.45 ZNES. 21.5 22.9 161.6 29.5 17.2 -24.9 17.1 -23.9 16.9 -22.7 17.2 -23.8
2026-02-15T20:19:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:19:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:19:20.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.762940
2026-02-15T20:19:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:19:20.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:19:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:19:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:19:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:19:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:19:02', tmtdew=15.19, humidity=36.29, cloud=0.0, wind=28.18, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:18:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:15:00')
2026-02-15T20:19:20.768 [DEBUG] [Thread-210572] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:19:20.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:19:20.868 [DEBUG] [Thread-210575] [transport.py] [_log()] starting thread (client mode): 0xa5743340
2026-02-15T20:19:20.869 [DEBUG] [Thread-210575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:19:20.884 [DEBUG] [Thread-210575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:19:20.884 [INFO] [Thread-210575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:19:20.891 [DEBUG] [Thread-210575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:19:20.892 [DEBUG] [Thread-210575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:19:20.892 [DEBUG] [Thread-210575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:19:20.892 [DEBUG] [Thread-210575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:20.892 [DEBUG] [Thread-210575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] client lang: <none>
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] server lang: <none>
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] kex follows: False
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] Compression: none
2026-02-15T20:19:20.893 [DEBUG] [Thread-210575] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:19:20.950 [DEBUG] [Thread-210575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:19:20.950 [DEBUG] [Thread-210575] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:19:20.950 [DEBUG] [Thread-210575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:19:20.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:19:20.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:19:21.008 [DEBUG] [Thread-210575] [transport.py] [_log()] userauth is OK
2026-02-15T20:19:21.008 [DEBUG] [Thread-210575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:19:21.009 [DEBUG] [Thread-210575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:19:21.009 [DEBUG] [Thread-210575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:19:21.009 [DEBUG] [Thread-210575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:19:21.032 [INFO] [Thread-210575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:19:21.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:19:21.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:19:21.853 [DEBUG] [Thread-210575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:19:21.853 [DEBUG] [Thread-210575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:19:21.901 [DEBUG] [Thread-210575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:19:21.902 [DEBUG] [Thread-210575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:19:21.911 [DEBUG] [Thread-210575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:19:21.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:19:21.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:19:21.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:19:21.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:19:21.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:19:21.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:19:21.948 [DEBUG] [Thread-210575] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:19:24.095 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:25.496 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:25.497 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:29.755 [DEBUG] [Thread-210577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:42.779 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:44.809 [DEBUG] [Thread-210578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:19:51.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:19:51.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:19:51.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:19:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 19, 38), 15.32, 35.72, 0.0, 27.24, 17.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:19:53.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:19:38
2026-02-15T20:19:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:19:54.316 [DEBUG] [Thread-210579] [transport.py] [_log()] starting thread (client mode): 0xa2d12950
2026-02-15T20:19:54.316 [DEBUG] [Thread-210579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:19:54.336 [DEBUG] [Thread-210579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:19:54.336 [INFO] [Thread-210579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:19:54.340 [DEBUG] [Thread-210579] [transport.py] [_log()] client lang: <none>
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] server lang: <none>
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] kex follows: False
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] Compression: none
2026-02-15T20:19:54.341 [DEBUG] [Thread-210579] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:19:54.361 [DEBUG] [Thread-210579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:19:54.362 [DEBUG] [Thread-210579] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:19:54.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:19:54.363 [DEBUG] [Thread-210579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:19:54.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:19:54.365 [DEBUG] [Thread-210579] [transport.py] [_log()] userauth is OK
2026-02-15T20:19:54.365 [DEBUG] [Thread-210579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:19:54.365 [DEBUG] [Thread-210579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:19:54.365 [DEBUG] [Thread-210579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:19:54.365 [DEBUG] [Thread-210579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:19:54.401 [INFO] [Thread-210579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:19:54.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:19:55.058 [DEBUG] [Thread-210579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:19:55.059 [DEBUG] [Thread-210579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:19:55.059 [DEBUG] [Thread-210579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:19:55.099 [DEBUG] [Thread-210579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:19:55.099 [DEBUG] [Thread-210579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:19:55.102 [DEBUG] [Thread-210579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:19:55.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:19:55.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:19:55.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:19:55.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:19:55.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:19:55.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:19:55.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:19:55.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:19:55.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:19:55.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.763287 -999.00  +17.00  22.80     41   +3.80 1 1 1 1 1     1    0 13.29 13.02 ZNES. 17.5 22.8 142.0 29.8 17.3 -25.0 17.2 -23.9 16.9 -22.8 17.3 -24.0
2026-02-15T20:19:55.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:19:55.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:19:55.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.763287
2026-02-15T20:19:55.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:19:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:19:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:19:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:19:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:19:55.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:19:38', tmtdew=15.32, humidity=35.72, cloud=0.0, wind=27.24, temperature=17.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:19:07.997', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:19:00')
2026-02-15T20:19:55.128 [DEBUG] [Thread-210579] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:19:55.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:19:55.238 [DEBUG] [Thread-210582] [transport.py] [_log()] starting thread (client mode): 0xa5758ca0
2026-02-15T20:19:55.238 [DEBUG] [Thread-210582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:19:55.255 [DEBUG] [Thread-210582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:19:55.255 [INFO] [Thread-210582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:19:55.263 [DEBUG] [Thread-210582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:19:55.263 [DEBUG] [Thread-210582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:19:55.263 [DEBUG] [Thread-210582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] client lang: <none>
2026-02-15T20:19:55.264 [DEBUG] [Thread-210582] [transport.py] [_log()] server lang: <none>
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] kex follows: False
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:19:55.265 [DEBUG] [Thread-210582] [transport.py] [_log()] Compression: none
2026-02-15T20:19:55.266 [DEBUG] [Thread-210582] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:19:55.328 [DEBUG] [Thread-210582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:19:55.329 [DEBUG] [Thread-210582] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:19:55.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:19:55.330 [DEBUG] [Thread-210582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:19:55.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:19:55.387 [DEBUG] [Thread-210582] [transport.py] [_log()] userauth is OK
2026-02-15T20:19:55.387 [DEBUG] [Thread-210582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:19:55.388 [DEBUG] [Thread-210582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:19:55.388 [DEBUG] [Thread-210582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:19:55.388 [DEBUG] [Thread-210582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:19:55.413 [INFO] [Thread-210582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:19:55.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:19:55.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:19:56.259 [DEBUG] [Thread-210582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:19:56.260 [DEBUG] [Thread-210582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:19:56.307 [DEBUG] [Thread-210582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:19:56.307 [DEBUG] [Thread-210582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:19:56.317 [DEBUG] [Thread-210582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:19:56.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:19:56.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:19:56.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:19:56.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:19:56.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:19:56.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:19:56.356 [DEBUG] [Thread-210582] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:19:59.846 [DEBUG] [Thread-210584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:01.416 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:08.851 [DEBUG] [Thread-210585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:14.897 [DEBUG] [Thread-210586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:20.110 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:25.695 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:25.696 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:26.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:20:26.378 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:20:26.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:20:28.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 20, 13), 15.1, 35.89, 0.0, 33.28, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:20:28.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:20:13
2026-02-15T20:20:28.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:20:29.102 [DEBUG] [Thread-210587] [transport.py] [_log()] starting thread (client mode): 0xa2d3d780
2026-02-15T20:20:29.102 [DEBUG] [Thread-210587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:20:29.121 [DEBUG] [Thread-210587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:20:29.121 [INFO] [Thread-210587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] client lang: <none>
2026-02-15T20:20:29.124 [DEBUG] [Thread-210587] [transport.py] [_log()] server lang: <none>
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] kex follows: False
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] Compression: none
2026-02-15T20:20:29.125 [DEBUG] [Thread-210587] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:20:29.143 [DEBUG] [Thread-210587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:20:29.144 [DEBUG] [Thread-210587] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:20:29.144 [DEBUG] [Thread-210587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:20:29.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:20:29.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:20:29.147 [DEBUG] [Thread-210587] [transport.py] [_log()] userauth is OK
2026-02-15T20:20:29.147 [DEBUG] [Thread-210587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:20:29.147 [DEBUG] [Thread-210587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:20:29.148 [DEBUG] [Thread-210587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:20:29.148 [DEBUG] [Thread-210587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:20:29.167 [INFO] [Thread-210587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:20:29.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:20:29.824 [DEBUG] [Thread-210587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:20:29.824 [DEBUG] [Thread-210587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:20:29.824 [DEBUG] [Thread-210587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:20:29.866 [DEBUG] [Thread-210587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:20:29.866 [DEBUG] [Thread-210587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:20:29.869 [DEBUG] [Thread-210587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:20:29.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:20:29.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:20:29.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:20:29.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:20:29.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:20:29.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:20:29.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:20:29.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:20:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:20:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.763634 -999.00  +17.00  20.56     41   +3.80 1 1 1 1 1     1    0 13.28 14.81 ZNESW 22.4 20.6 144.8 29.2 17.2 -24.9 17.2 -24.0 16.9 -22.8 17.2 -24.1
2026-02-15T20:20:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:20:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:20:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.763634
2026-02-15T20:20:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:20:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:20:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:20:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:20:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:20:29.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:20:13', tmtdew=15.1, humidity=35.89, cloud=0.0, wind=33.28, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:19:37.978', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:19:00')
2026-02-15T20:20:29.897 [DEBUG] [Thread-210587] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:20:29.931 [DEBUG] [Thread-210590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:29.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:20:29.994 [DEBUG] [Thread-210591] [transport.py] [_log()] starting thread (client mode): 0xa57d6260
2026-02-15T20:20:29.994 [DEBUG] [Thread-210591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:20:30.012 [DEBUG] [Thread-210591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:20:30.012 [INFO] [Thread-210591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:20:30.027 [DEBUG] [Thread-210591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] client lang: <none>
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] server lang: <none>
2026-02-15T20:20:30.028 [DEBUG] [Thread-210591] [transport.py] [_log()] kex follows: False
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] Compression: none
2026-02-15T20:20:30.029 [DEBUG] [Thread-210591] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:20:30.082 [DEBUG] [Thread-210591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:20:30.082 [DEBUG] [Thread-210591] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:20:30.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:20:30.084 [DEBUG] [Thread-210591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:20:30.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:20:30.138 [DEBUG] [Thread-210591] [transport.py] [_log()] userauth is OK
2026-02-15T20:20:30.138 [DEBUG] [Thread-210591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:20:30.138 [DEBUG] [Thread-210591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:20:30.139 [DEBUG] [Thread-210591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:20:30.139 [DEBUG] [Thread-210591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:20:30.156 [INFO] [Thread-210591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:20:30.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:20:30.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:20:30.968 [DEBUG] [Thread-210591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:20:30.968 [DEBUG] [Thread-210591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:20:31.016 [DEBUG] [Thread-210591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:20:31.016 [DEBUG] [Thread-210591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:20:31.024 [DEBUG] [Thread-210591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:20:31.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:20:31.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:20:31.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:20:31.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:20:31.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:20:31.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:20:31.056 [DEBUG] [Thread-210591] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:20:38.762 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:44.970 [DEBUG] [Thread-210593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:20:57.407 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:00.003 [DEBUG] [Thread-210594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:21:01.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:21:01.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:21:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 20, 48), 15.12, 36.34, 0.0, 35.43, 17.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:21:03.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:20:48
2026-02-15T20:21:03.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:21:03.707 [DEBUG] [Thread-210595] [transport.py] [_log()] starting thread (client mode): 0xa2d10ac0
2026-02-15T20:21:03.707 [DEBUG] [Thread-210595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:21:03.727 [DEBUG] [Thread-210595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:21:03.727 [INFO] [Thread-210595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:03.730 [DEBUG] [Thread-210595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] client lang: <none>
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] server lang: <none>
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] kex follows: False
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] Compression: none
2026-02-15T20:21:03.731 [DEBUG] [Thread-210595] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:21:03.750 [DEBUG] [Thread-210595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:21:03.751 [DEBUG] [Thread-210595] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:21:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:21:03.752 [DEBUG] [Thread-210595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:21:03.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:21:03.792 [DEBUG] [Thread-210595] [transport.py] [_log()] userauth is OK
2026-02-15T20:21:03.793 [DEBUG] [Thread-210595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:21:03.793 [DEBUG] [Thread-210595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:21:03.793 [DEBUG] [Thread-210595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:21:03.793 [DEBUG] [Thread-210595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:21:03.831 [INFO] [Thread-210595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:21:03.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:21:04.455 [DEBUG] [Thread-210595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:21:04.455 [DEBUG] [Thread-210595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:21:04.455 [DEBUG] [Thread-210595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:21:04.496 [DEBUG] [Thread-210595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:21:04.496 [DEBUG] [Thread-210595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:21:04.498 [DEBUG] [Thread-210595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:21:04.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:21:04.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:21:04.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:21:04.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:21:04.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:21:04.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.764329 -999.00  +17.00  19.14     41   +3.80 1 1 1 1 1     1    0 13.38 17.16 ZNESW 17.4 19.1 154.0 31.0 17.2 -25.0 17.1 -23.8 16.9 -22.8 17.2 -23.9
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:21:04.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.764329
2026-02-15T20:21:04.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:21:04.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:21:04.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:21:04.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:21:04.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:21:04.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:20:48', tmtdew=15.12, humidity=36.34, cloud=0.0, wind=35.43, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:20:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:19:00')
2026-02-15T20:21:04.518 [DEBUG] [Thread-210595] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:21:04.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:21:04.602 [DEBUG] [Thread-210598] [transport.py] [_log()] starting thread (client mode): 0xa2d6c550
2026-02-15T20:21:04.602 [DEBUG] [Thread-210598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:21:04.617 [DEBUG] [Thread-210598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:21:04.617 [INFO] [Thread-210598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:21:04.624 [DEBUG] [Thread-210598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] client lang: <none>
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] server lang: <none>
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] kex follows: False
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:21:04.625 [DEBUG] [Thread-210598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:21:04.626 [DEBUG] [Thread-210598] [transport.py] [_log()] Compression: none
2026-02-15T20:21:04.626 [DEBUG] [Thread-210598] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:21:04.685 [DEBUG] [Thread-210598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:21:04.686 [DEBUG] [Thread-210598] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:21:04.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:21:04.687 [DEBUG] [Thread-210598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:21:04.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:21:04.741 [DEBUG] [Thread-210598] [transport.py] [_log()] userauth is OK
2026-02-15T20:21:04.742 [DEBUG] [Thread-210598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:21:04.742 [DEBUG] [Thread-210598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:21:04.742 [DEBUG] [Thread-210598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:21:04.742 [DEBUG] [Thread-210598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:21:04.760 [INFO] [Thread-210598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:21:04.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:21:04.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:21:05.566 [DEBUG] [Thread-210598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:21:05.566 [DEBUG] [Thread-210598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:21:05.614 [DEBUG] [Thread-210598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:21:05.614 [DEBUG] [Thread-210598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:21:05.624 [DEBUG] [Thread-210598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:21:05.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:21:05.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:21:05.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:21:05.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:21:05.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:21:05.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:21:05.665 [DEBUG] [Thread-210598] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:21:08.906 [DEBUG] [Thread-210600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:15.036 [DEBUG] [Thread-210601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:16.117 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:25.896 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:25.897 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:30.089 [DEBUG] [Thread-210602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:34.927 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:35.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:21:35.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:21:35.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:21:37.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 21, 23), 15.16, 36.24, 0.0, 34.76, 17.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:21:37.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:21:23
2026-02-15T20:21:37.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:21:38.055 [DEBUG] [Thread-210603] [transport.py] [_log()] starting thread (client mode): 0xa2d3ebc0
2026-02-15T20:21:38.056 [DEBUG] [Thread-210603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:21:38.077 [DEBUG] [Thread-210603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:21:38.077 [INFO] [Thread-210603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] client lang: <none>
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] server lang: <none>
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] kex follows: False
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:21:38.079 [DEBUG] [Thread-210603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:21:38.080 [DEBUG] [Thread-210603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:21:38.080 [DEBUG] [Thread-210603] [transport.py] [_log()] Compression: none
2026-02-15T20:21:38.080 [DEBUG] [Thread-210603] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:21:38.098 [DEBUG] [Thread-210603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:21:38.099 [DEBUG] [Thread-210603] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:21:38.099 [DEBUG] [Thread-210603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:21:38.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:21:38.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:21:38.102 [DEBUG] [Thread-210603] [transport.py] [_log()] userauth is OK
2026-02-15T20:21:38.102 [DEBUG] [Thread-210603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:21:38.102 [DEBUG] [Thread-210603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:21:38.102 [DEBUG] [Thread-210603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:21:38.102 [DEBUG] [Thread-210603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:21:38.128 [INFO] [Thread-210603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:21:38.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:21:38.767 [DEBUG] [Thread-210603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:21:38.767 [DEBUG] [Thread-210603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:21:38.767 [DEBUG] [Thread-210603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:21:38.807 [DEBUG] [Thread-210603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:21:38.808 [DEBUG] [Thread-210603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:21:38.811 [DEBUG] [Thread-210603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:21:38.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:21:38.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:21:38.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:21:38.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:21:38.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:21:38.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:21:38.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:21:38.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:21:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:21:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.764676 -999.00  +17.00  18.43     41   +3.80 1 1 1 1 1     1    0 13.40 17.07 ZNESW 20.4 18.4 154.2 32.2 17.2 -24.9 17.1 -23.9 16.9 -22.7 17.2 -24.0
2026-02-15T20:21:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:21:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:21:38.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.764676
2026-02-15T20:21:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:21:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:21:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:21:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:21:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:21:38.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:21:23', tmtdew=15.16, humidity=36.24, cloud=0.0, wind=34.76, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:21:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:19:00')
2026-02-15T20:21:38.837 [DEBUG] [Thread-210603] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:21:38.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:21:38.937 [DEBUG] [Thread-210606] [transport.py] [_log()] starting thread (client mode): 0xa2d3df00
2026-02-15T20:21:38.937 [DEBUG] [Thread-210606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:21:38.951 [DEBUG] [Thread-210606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:21:38.951 [INFO] [Thread-210606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:21:38.958 [DEBUG] [Thread-210606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:21:38.959 [DEBUG] [Thread-210606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:21:38.959 [DEBUG] [Thread-210606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:21:38.959 [DEBUG] [Thread-210606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:38.959 [DEBUG] [Thread-210606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:21:38.959 [DEBUG] [Thread-210606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:38.959 [DEBUG] [Thread-210606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] client lang: <none>
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] server lang: <none>
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] kex follows: False
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:21:38.960 [DEBUG] [Thread-210606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:21:38.961 [DEBUG] [Thread-210606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:21:38.961 [DEBUG] [Thread-210606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:21:38.961 [DEBUG] [Thread-210606] [transport.py] [_log()] Compression: none
2026-02-15T20:21:38.961 [DEBUG] [Thread-210606] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:21:39.021 [DEBUG] [Thread-210606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:21:39.022 [DEBUG] [Thread-210606] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:21:39.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:21:39.023 [DEBUG] [Thread-210606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:21:39.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:21:39.080 [DEBUG] [Thread-210606] [transport.py] [_log()] userauth is OK
2026-02-15T20:21:39.080 [DEBUG] [Thread-210606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:21:39.080 [DEBUG] [Thread-210606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:21:39.081 [DEBUG] [Thread-210606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:21:39.081 [DEBUG] [Thread-210606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:21:39.100 [INFO] [Thread-210606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:21:39.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:21:39.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:21:39.958 [DEBUG] [Thread-210606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:21:39.959 [DEBUG] [Thread-210606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:21:40.005 [DEBUG] [Thread-210606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:21:40.006 [DEBUG] [Thread-210606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:21:40.015 [DEBUG] [Thread-210606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:21:40.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:21:40.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:21:40.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:21:40.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:21:40.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:21:40.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:21:40.052 [DEBUG] [Thread-210606] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:21:45.125 [DEBUG] [Thread-210608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:21:53.592 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:00.175 [DEBUG] [Thread-210609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:08.959 [DEBUG] [Thread-210610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:10.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:22:10.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:22:10.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:22:11.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 21, 58), 15.19, 35.79, 0.0, 24.33, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:22:11.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:21:58
2026-02-15T20:22:12.277 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:12.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:22:12.435 [DEBUG] [Thread-210611] [transport.py] [_log()] starting thread (client mode): 0xa2d3c130
2026-02-15T20:22:12.435 [DEBUG] [Thread-210611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:22:12.454 [DEBUG] [Thread-210611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:22:12.454 [INFO] [Thread-210611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] client lang: <none>
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] server lang: <none>
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] kex follows: False
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:22:12.457 [DEBUG] [Thread-210611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:22:12.458 [DEBUG] [Thread-210611] [transport.py] [_log()] Compression: none
2026-02-15T20:22:12.458 [DEBUG] [Thread-210611] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:22:12.467 [DEBUG] [Thread-210611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:22:12.467 [DEBUG] [Thread-210611] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:22:12.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:22:12.468 [DEBUG] [Thread-210611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:22:12.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:22:12.469 [DEBUG] [Thread-210611] [transport.py] [_log()] userauth is OK
2026-02-15T20:22:12.469 [DEBUG] [Thread-210611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:22:12.469 [DEBUG] [Thread-210611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:22:12.469 [DEBUG] [Thread-210611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:22:12.469 [DEBUG] [Thread-210611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:22:12.481 [INFO] [Thread-210611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:22:12.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:22:13.288 [DEBUG] [Thread-210611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:22:13.288 [DEBUG] [Thread-210611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:22:13.288 [DEBUG] [Thread-210611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:22:13.329 [DEBUG] [Thread-210611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:22:13.329 [DEBUG] [Thread-210611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:22:13.332 [DEBUG] [Thread-210611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:22:13.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:22:13.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:22:13.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:22:13.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:22:13.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:22:13.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:22:13.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:22:13.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:22:13.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:22:13.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.765023 -999.00  +17.00  27.67     41   +3.80 1 1 1 1 1     1    0 13.77 18.53 ZNESW 24.3 27.7 143.0 35.1 17.2 -24.8 17.1 -23.9 16.9 -22.7 17.2 -24.1
2026-02-15T20:22:13.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:22:13.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:22:13.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.765023
2026-02-15T20:22:13.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:22:13.358 [DEBUG] [Thread-210611] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:22:13.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:22:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:22:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:22:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:22:13.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:21:58', tmtdew=15.19, humidity=35.79, cloud=0.0, wind=24.33, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:21:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:19:00')
2026-02-15T20:22:13.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:22:13.454 [DEBUG] [Thread-210614] [transport.py] [_log()] starting thread (client mode): 0xa2d6eda0
2026-02-15T20:22:13.454 [DEBUG] [Thread-210614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:22:13.468 [DEBUG] [Thread-210614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:22:13.468 [INFO] [Thread-210614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:22:13.475 [DEBUG] [Thread-210614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:22:13.475 [DEBUG] [Thread-210614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:22:13.475 [DEBUG] [Thread-210614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] client lang: <none>
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] server lang: <none>
2026-02-15T20:22:13.476 [DEBUG] [Thread-210614] [transport.py] [_log()] kex follows: False
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] Compression: none
2026-02-15T20:22:13.477 [DEBUG] [Thread-210614] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:22:13.539 [DEBUG] [Thread-210614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:22:13.539 [DEBUG] [Thread-210614] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:22:13.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:22:13.540 [DEBUG] [Thread-210614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:22:13.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:22:13.595 [DEBUG] [Thread-210614] [transport.py] [_log()] userauth is OK
2026-02-15T20:22:13.595 [DEBUG] [Thread-210614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:22:13.595 [DEBUG] [Thread-210614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:22:13.596 [DEBUG] [Thread-210614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:22:13.596 [DEBUG] [Thread-210614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:22:13.615 [INFO] [Thread-210614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:22:13.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:22:13.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:22:14.433 [DEBUG] [Thread-210614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:22:14.434 [DEBUG] [Thread-210614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:22:14.482 [DEBUG] [Thread-210614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:22:14.482 [DEBUG] [Thread-210614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:22:14.491 [DEBUG] [Thread-210614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:22:14.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:22:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:22:14.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:22:14.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:22:14.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:22:14.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:22:14.523 [DEBUG] [Thread-210614] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:22:15.206 [DEBUG] [Thread-210616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:26.103 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:26.103 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:30.255 [DEBUG] [Thread-210617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:30.937 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:44.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:22:44.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:22:44.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:22:45.292 [DEBUG] [Thread-210618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:22:46.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 22, 33), 15.43, 35.45, 0.0, 29.89, 17.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:22:46.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:22:33
2026-02-15T20:22:46.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:22:46.933 [DEBUG] [Thread-210619] [transport.py] [_log()] starting thread (client mode): 0xa575b250
2026-02-15T20:22:46.933 [DEBUG] [Thread-210619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:22:46.953 [DEBUG] [Thread-210619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:22:46.953 [INFO] [Thread-210619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] client lang: <none>
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] server lang: <none>
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] kex follows: False
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:22:46.956 [DEBUG] [Thread-210619] [transport.py] [_log()] Compression: none
2026-02-15T20:22:46.957 [DEBUG] [Thread-210619] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:22:46.976 [DEBUG] [Thread-210619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:22:46.977 [DEBUG] [Thread-210619] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:22:46.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:22:46.978 [DEBUG] [Thread-210619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:22:46.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:22:46.980 [DEBUG] [Thread-210619] [transport.py] [_log()] userauth is OK
2026-02-15T20:22:46.980 [DEBUG] [Thread-210619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:22:46.980 [DEBUG] [Thread-210619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:22:46.980 [DEBUG] [Thread-210619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:22:46.980 [DEBUG] [Thread-210619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:22:47.005 [INFO] [Thread-210619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:22:47.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:22:47.624 [DEBUG] [Thread-210619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:22:47.624 [DEBUG] [Thread-210619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:22:47.624 [DEBUG] [Thread-210619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:22:47.666 [DEBUG] [Thread-210619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:22:47.666 [DEBUG] [Thread-210619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:22:47.669 [DEBUG] [Thread-210619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:22:47.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:22:47.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:22:47.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:22:47.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:22:47.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:22:47.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:22:47.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:22:47.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:22:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:22:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.765370 -999.00  +17.00  23.68     41   +3.80 1 1 1 1 1     1    0 13.62 18.99 ZNESW 20.9 23.7 150.3 31.5 17.2 -24.8 17.1 -23.8 16.9 -22.8 17.2 -24.0
2026-02-15T20:22:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:22:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:22:47.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.765370
2026-02-15T20:22:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:22:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:22:47.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:22:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:22:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:22:47.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:22:33', tmtdew=15.43, humidity=35.45, cloud=0.0, wind=29.89, temperature=17.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:22:07.968', atlas_cloud=1, atlas_rain=1, zp_data=[0.024750000000000938, -0.11775000000000091, -0.017249999999998877, -0.04150000000000098, 0.030999999999998806, 0.013250000000001094, -0.011000000000001009, -0.010749999999998039, 0.006499999999999062, -0.01750000000000007, -0.02775000000000105, 0.01750000000000007, 0.02149999999999963, 0.05074999999999896, 0.009999999999999787, -0.15200000000000102, 0.0072499999999990905, -0.0045000000000001705, -0.11600000000000144, -0.06675000000000075, 0.0024999999999977263, 0.07674999999999876, 0.04125000000000156, -0.004250000000000753, -0.002000000000000668, 0.037499999999999645, -0.1957500000000003, -0.17799999999999905, nan, 0.09800000000000075, 0.058000000000001606, 0.008500000000001506, -0.0032500000000013074], zp_timestamp='2026-02-15T18:19:00')
2026-02-15T20:22:47.697 [DEBUG] [Thread-210619] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:22:47.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:22:47.804 [DEBUG] [Thread-210622] [transport.py] [_log()] starting thread (client mode): 0xa575a320
2026-02-15T20:22:47.804 [DEBUG] [Thread-210622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:22:47.819 [DEBUG] [Thread-210622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:22:47.819 [INFO] [Thread-210622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:22:47.826 [DEBUG] [Thread-210622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:22:47.826 [DEBUG] [Thread-210622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:22:47.826 [DEBUG] [Thread-210622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:22:47.826 [DEBUG] [Thread-210622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:47.826 [DEBUG] [Thread-210622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:22:47.826 [DEBUG] [Thread-210622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] client lang: <none>
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] server lang: <none>
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] kex follows: False
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] Compression: none
2026-02-15T20:22:47.827 [DEBUG] [Thread-210622] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:22:47.887 [DEBUG] [Thread-210622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:22:47.888 [DEBUG] [Thread-210622] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:22:47.888 [DEBUG] [Thread-210622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:22:47.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:22:47.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:22:47.943 [DEBUG] [Thread-210622] [transport.py] [_log()] userauth is OK
2026-02-15T20:22:47.943 [DEBUG] [Thread-210622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:22:47.943 [DEBUG] [Thread-210622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:22:47.944 [DEBUG] [Thread-210622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:22:47.944 [DEBUG] [Thread-210622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:22:47.962 [INFO] [Thread-210622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:22:47.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:22:47.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:22:48.858 [DEBUG] [Thread-210622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:22:48.858 [DEBUG] [Thread-210622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:22:48.907 [DEBUG] [Thread-210622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:22:48.907 [DEBUG] [Thread-210622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:22:48.916 [DEBUG] [Thread-210622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:22:48.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:22:48.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:22:48.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:22:48.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:22:48.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:22:48.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:22:48.952 [DEBUG] [Thread-210622] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:22:49.587 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:00.328 [DEBUG] [Thread-210624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:08.317 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:09.019 [DEBUG] [Thread-210625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:15.380 [DEBUG] [Thread-210626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:18.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:23:18.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:23:18.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:23:20.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 23, 9), 15.15, 36.24, 0.0, 30.95, 17.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:23:20.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:23:09
2026-02-15T20:23:21.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:23:21.287 [DEBUG] [Thread-210627] [transport.py] [_log()] starting thread (client mode): 0xa57b3ee0
2026-02-15T20:23:21.287 [DEBUG] [Thread-210627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:23:21.307 [DEBUG] [Thread-210627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:23:21.307 [INFO] [Thread-210627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:23:21.311 [DEBUG] [Thread-210627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:23:21.311 [DEBUG] [Thread-210627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:23:21.311 [DEBUG] [Thread-210627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:23:21.311 [DEBUG] [Thread-210627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] client lang: <none>
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] server lang: <none>
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] kex follows: False
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] Compression: none
2026-02-15T20:23:21.312 [DEBUG] [Thread-210627] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:23:21.322 [DEBUG] [Thread-210627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:23:21.322 [DEBUG] [Thread-210627] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:23:21.323 [DEBUG] [Thread-210627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:23:21.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:23:21.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:23:21.326 [DEBUG] [Thread-210627] [transport.py] [_log()] userauth is OK
2026-02-15T20:23:21.326 [DEBUG] [Thread-210627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:23:21.327 [DEBUG] [Thread-210627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:23:21.327 [DEBUG] [Thread-210627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:23:21.327 [DEBUG] [Thread-210627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:23:21.365 [INFO] [Thread-210627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:23:21.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:23:22.065 [DEBUG] [Thread-210627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:23:22.065 [DEBUG] [Thread-210627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:23:22.065 [DEBUG] [Thread-210627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:23:22.106 [DEBUG] [Thread-210627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:23:22.107 [DEBUG] [Thread-210627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:23:22.110 [DEBUG] [Thread-210627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:23:22.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:23:22.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:23:22.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:23:22.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:23:22.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:23:22.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:23:22.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:23:22.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:23:22.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:23:22.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.765718 -999.00  +17.00  21.77     41   +3.80 1 1 1 1 1     0    0 13.63 19.37 ZNESW 18.9 21.8 144.6 30.2 17.2 -25.0 17.1 -23.9 16.8 -22.7 17.2 -24.1
2026-02-15T20:23:22.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:23:22.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:23:22.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.765718
2026-02-15T20:23:22.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:23:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:23:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:23:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:23:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:23:22.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:23:09', tmtdew=15.15, humidity=36.24, cloud=0.0, wind=30.95, temperature=17.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:22:38.035', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.07225000000000037, 0.016250000000001208, 0.05000000000000071, -0.0835000000000008, -0.004249999999998977, -0.009999999999999787, 0.01624999999999943, -0.012000000000000455, -0.031000000000000583, -0.0027500000000006963, 0.05000000000000071, 0.0884999999999998, 0.09524999999999828, -0.0010000000000012221, -0.07450000000000045, 0.005250000000000199, 0.02099999999999902, -0.014000000000001123, -0.04475000000000051, 0.0779999999999994, 0.12524999999999942, 0.03375000000000128, -0.029249999999999332, 0.04299999999999926, 0.0945000000000018, -0.08825000000000038, 0.009500000000000952, 0.038000000000000256, 0.02149999999999963, 0.02850000000000108, 0.03700000000000081, 0.05074999999999896], zp_timestamp='2026-02-15T18:21:00')
2026-02-15T20:23:22.135 [DEBUG] [Thread-210627] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:23:22.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:23:22.238 [DEBUG] [Thread-210630] [transport.py] [_log()] starting thread (client mode): 0xa57b0a00
2026-02-15T20:23:22.239 [DEBUG] [Thread-210630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:23:22.257 [DEBUG] [Thread-210630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:23:22.257 [INFO] [Thread-210630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:23:22.265 [DEBUG] [Thread-210630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:23:22.266 [DEBUG] [Thread-210630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] client lang: <none>
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] server lang: <none>
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] kex follows: False
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:23:22.267 [DEBUG] [Thread-210630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:23:22.268 [DEBUG] [Thread-210630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:23:22.268 [DEBUG] [Thread-210630] [transport.py] [_log()] Compression: none
2026-02-15T20:23:22.268 [DEBUG] [Thread-210630] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:23:22.322 [DEBUG] [Thread-210630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:23:22.323 [DEBUG] [Thread-210630] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:23:22.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:23:22.325 [DEBUG] [Thread-210630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:23:22.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:23:22.378 [DEBUG] [Thread-210630] [transport.py] [_log()] userauth is OK
2026-02-15T20:23:22.378 [DEBUG] [Thread-210630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:23:22.379 [DEBUG] [Thread-210630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:23:22.379 [DEBUG] [Thread-210630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:23:22.379 [DEBUG] [Thread-210630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:23:22.406 [INFO] [Thread-210630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:23:22.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:23:22.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:23:23.241 [DEBUG] [Thread-210630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:23:23.242 [DEBUG] [Thread-210630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:23:23.290 [DEBUG] [Thread-210630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:23:23.290 [DEBUG] [Thread-210630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:23:23.299 [DEBUG] [Thread-210630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:23:23.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:23:23.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:23:23.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:23:23.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:23:23.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:23:23.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:23:23.341 [DEBUG] [Thread-210630] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:23:26.303 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:26.304 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:26.987 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:30.414 [DEBUG] [Thread-210632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:45.479 [DEBUG] [Thread-210633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:45.622 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:23:53.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:23:53.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:23:53.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:23:55.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 23, 44), 15.18, 35.81, 0.0, 31.48, 17.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:23:55.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:23:44
2026-02-15T20:23:55.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:23:55.708 [DEBUG] [Thread-210634] [transport.py] [_log()] starting thread (client mode): 0xa57b1a20
2026-02-15T20:23:55.708 [DEBUG] [Thread-210634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:23:55.729 [DEBUG] [Thread-210634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:23:55.729 [INFO] [Thread-210634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] client lang: <none>
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] server lang: <none>
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] kex follows: False
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:23:55.732 [DEBUG] [Thread-210634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:23:55.733 [DEBUG] [Thread-210634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:23:55.733 [DEBUG] [Thread-210634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:23:55.733 [DEBUG] [Thread-210634] [transport.py] [_log()] Compression: none
2026-02-15T20:23:55.733 [DEBUG] [Thread-210634] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:23:55.749 [DEBUG] [Thread-210634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:23:55.750 [DEBUG] [Thread-210634] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:23:55.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:23:55.751 [DEBUG] [Thread-210634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:23:55.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:23:55.753 [DEBUG] [Thread-210634] [transport.py] [_log()] userauth is OK
2026-02-15T20:23:55.754 [DEBUG] [Thread-210634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:23:55.754 [DEBUG] [Thread-210634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:23:55.754 [DEBUG] [Thread-210634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:23:55.754 [DEBUG] [Thread-210634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:23:55.779 [INFO] [Thread-210634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:23:55.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:23:56.416 [DEBUG] [Thread-210634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:23:56.417 [DEBUG] [Thread-210634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:23:56.417 [DEBUG] [Thread-210634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:23:56.457 [DEBUG] [Thread-210634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:23:56.457 [DEBUG] [Thread-210634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:23:56.460 [DEBUG] [Thread-210634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:23:56.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:23:56.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:23:56.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:23:56.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:23:56.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:23:56.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:23:56.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:23:56.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:23:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:23:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.766065 -999.00  +17.00  24.48     41   +3.80 1 1 1 1 1     0    0 13.77 22.46 ZNESW 21.5 24.5 144.4 28.4 17.2 -24.8 17.1 -24.0 16.9 -22.7 17.2 -23.9
2026-02-15T20:23:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:23:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:23:56.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.766065
2026-02-15T20:23:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:23:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:23:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:23:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:23:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:23:56.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:23:44', tmtdew=15.18, humidity=35.81, cloud=0.0, wind=31.48, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:23:08.016', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.07225000000000037, 0.016250000000001208, 0.05000000000000071, -0.0835000000000008, -0.004249999999998977, -0.009999999999999787, 0.01624999999999943, -0.012000000000000455, -0.031000000000000583, -0.0027500000000006963, 0.05000000000000071, 0.0884999999999998, 0.09524999999999828, -0.0010000000000012221, -0.07450000000000045, 0.005250000000000199, 0.02099999999999902, -0.014000000000001123, -0.04475000000000051, 0.0779999999999994, 0.12524999999999942, 0.03375000000000128, -0.029249999999999332, 0.04299999999999926, 0.0945000000000018, -0.08825000000000038, 0.009500000000000952, 0.038000000000000256, 0.02149999999999963, 0.02850000000000108, 0.03700000000000081, 0.05074999999999896], zp_timestamp='2026-02-15T18:21:00')
2026-02-15T20:23:56.483 [DEBUG] [Thread-210634] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:23:56.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:23:56.580 [DEBUG] [Thread-210637] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-15T20:23:56.580 [DEBUG] [Thread-210637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:23:56.596 [DEBUG] [Thread-210637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:23:56.596 [INFO] [Thread-210637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:23:56.604 [DEBUG] [Thread-210637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] client lang: <none>
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] server lang: <none>
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] kex follows: False
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] Compression: none
2026-02-15T20:23:56.605 [DEBUG] [Thread-210637] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:23:56.663 [DEBUG] [Thread-210637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:23:56.664 [DEBUG] [Thread-210637] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:23:56.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:23:56.665 [DEBUG] [Thread-210637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:23:56.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:23:56.722 [DEBUG] [Thread-210637] [transport.py] [_log()] userauth is OK
2026-02-15T20:23:56.722 [DEBUG] [Thread-210637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:23:56.722 [DEBUG] [Thread-210637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:23:56.722 [DEBUG] [Thread-210637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:23:56.722 [DEBUG] [Thread-210637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:23:56.742 [INFO] [Thread-210637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:23:56.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:23:56.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:23:57.570 [DEBUG] [Thread-210637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:23:57.570 [DEBUG] [Thread-210637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:23:57.618 [DEBUG] [Thread-210637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:23:57.618 [DEBUG] [Thread-210637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:23:57.627 [DEBUG] [Thread-210637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:23:57.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:23: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')
2026-02-15T20:23:57.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:23:57.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:23:57.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:23:57.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:23:57.664 [DEBUG] [Thread-210637] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:24:00.515 [DEBUG] [Thread-210639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:04.273 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:09.084 [DEBUG] [Thread-210640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:15.570 [DEBUG] [Thread-210641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:22.955 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:26.502 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:26.504 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:27.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:24:27.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:24:27.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:24:29.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 24, 19), 15.2, 35.76, 0.0, 33.03, 17.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:24:29.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:24:19
2026-02-15T20:24:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:24:30.010 [DEBUG] [Thread-210642] [transport.py] [_log()] starting thread (client mode): 0xa57429e0
2026-02-15T20:24:30.011 [DEBUG] [Thread-210642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:24:30.032 [DEBUG] [Thread-210642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:24:30.032 [INFO] [Thread-210642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:24:30.035 [DEBUG] [Thread-210642] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:24:30.035 [DEBUG] [Thread-210642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] client lang: <none>
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] server lang: <none>
2026-02-15T20:24:30.036 [DEBUG] [Thread-210642] [transport.py] [_log()] kex follows: False
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] Compression: none
2026-02-15T20:24:30.037 [DEBUG] [Thread-210642] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:24:30.055 [DEBUG] [Thread-210642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:24:30.056 [DEBUG] [Thread-210642] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:24:30.056 [DEBUG] [Thread-210642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:24:30.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:24:30.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:24:30.060 [DEBUG] [Thread-210642] [transport.py] [_log()] userauth is OK
2026-02-15T20:24:30.060 [DEBUG] [Thread-210642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:24:30.060 [DEBUG] [Thread-210642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:24:30.060 [DEBUG] [Thread-210642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:24:30.060 [DEBUG] [Thread-210642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:24:30.086 [INFO] [Thread-210642] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:24:30.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:24:30.612 [DEBUG] [Thread-210644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:30.662 [DEBUG] [Thread-210642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:24:30.663 [DEBUG] [Thread-210642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:24:30.663 [DEBUG] [Thread-210642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:24:30.704 [DEBUG] [Thread-210642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:24:30.705 [DEBUG] [Thread-210642] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:24:30.708 [DEBUG] [Thread-210642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:24:30.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:24:30.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:24:30.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:24:30.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:24:30.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:24:30.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:24:30.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:24:30.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:24:30.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:24:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.766759 -999.00  +17.00  27.37     41   +3.80 1 1 1 1 1     0    0 13.56 22.25 ZNESW 24.4 27.4 156.8 33.0 17.2 -24.8 17.1 -23.8 16.9 -22.7 17.2 -24.1
2026-02-15T20:24:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:24:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:24:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.766759
2026-02-15T20:24:30.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:24:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:24:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:24:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:24:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:24:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:24:19', tmtdew=15.2, humidity=35.76, cloud=0.0, wind=33.03, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:24:07.978', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.07225000000000037, 0.016250000000001208, 0.05000000000000071, -0.0835000000000008, -0.004249999999998977, -0.009999999999999787, 0.01624999999999943, -0.012000000000000455, -0.031000000000000583, -0.0027500000000006963, 0.05000000000000071, 0.0884999999999998, 0.09524999999999828, -0.0010000000000012221, -0.07450000000000045, 0.005250000000000199, 0.02099999999999902, -0.014000000000001123, -0.04475000000000051, 0.0779999999999994, 0.12524999999999942, 0.03375000000000128, -0.029249999999999332, 0.04299999999999926, 0.0945000000000018, -0.08825000000000038, 0.009500000000000952, 0.038000000000000256, 0.02149999999999963, 0.02850000000000108, 0.03700000000000081, 0.05074999999999896], zp_timestamp='2026-02-15T18:21:00')
2026-02-15T20:24:30.741 [DEBUG] [Thread-210642] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:24:30.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:24:30.837 [DEBUG] [Thread-210646] [transport.py] [_log()] starting thread (client mode): 0xa57b12a0
2026-02-15T20:24:30.838 [DEBUG] [Thread-210646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:24:30.853 [DEBUG] [Thread-210646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:24:30.853 [INFO] [Thread-210646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:24:30.860 [DEBUG] [Thread-210646] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] client lang: <none>
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] server lang: <none>
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] kex follows: False
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:24:30.861 [DEBUG] [Thread-210646] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:24:30.862 [DEBUG] [Thread-210646] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:24:30.862 [DEBUG] [Thread-210646] [transport.py] [_log()] Compression: none
2026-02-15T20:24:30.862 [DEBUG] [Thread-210646] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:24:30.925 [DEBUG] [Thread-210646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:24:30.925 [DEBUG] [Thread-210646] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:24:30.926 [DEBUG] [Thread-210646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:24:30.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:24:30.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:24:30.981 [DEBUG] [Thread-210646] [transport.py] [_log()] userauth is OK
2026-02-15T20:24:30.982 [DEBUG] [Thread-210646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:24:30.982 [DEBUG] [Thread-210646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:24:30.982 [DEBUG] [Thread-210646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:24:30.982 [DEBUG] [Thread-210646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:24:31.000 [INFO] [Thread-210646] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:24:31.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:24:31.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:24:31.832 [DEBUG] [Thread-210646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:24:31.833 [DEBUG] [Thread-210646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:24:31.881 [DEBUG] [Thread-210646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:24:31.881 [DEBUG] [Thread-210646] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:24:31.890 [DEBUG] [Thread-210646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:24:31.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:24:31.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:24:31.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:24:31.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:24:31.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:24:31.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:24:31.924 [DEBUG] [Thread-210646] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:24:41.630 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:24:45.657 [DEBUG] [Thread-210648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:00.351 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:00.718 [DEBUG] [Thread-210649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:25:01.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:25:01.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:25:03.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 24, 54), 15.21, 35.74, 0.0, 31.76, 17.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:25:03.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:24:54
2026-02-15T20:25:04.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:25:04.493 [DEBUG] [Thread-210650] [transport.py] [_log()] starting thread (client mode): 0xa2d6e110
2026-02-15T20:25:04.493 [DEBUG] [Thread-210650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:25:04.515 [DEBUG] [Thread-210650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:25:04.515 [INFO] [Thread-210650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] client lang: <none>
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] server lang: <none>
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] kex follows: False
2026-02-15T20:25:04.518 [DEBUG] [Thread-210650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:25:04.519 [DEBUG] [Thread-210650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:25:04.519 [DEBUG] [Thread-210650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:25:04.519 [DEBUG] [Thread-210650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:25:04.519 [DEBUG] [Thread-210650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:25:04.519 [DEBUG] [Thread-210650] [transport.py] [_log()] Compression: none
2026-02-15T20:25:04.519 [DEBUG] [Thread-210650] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:25:04.536 [DEBUG] [Thread-210650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:25:04.537 [DEBUG] [Thread-210650] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:25:04.537 [DEBUG] [Thread-210650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:25:04.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:25:04.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:25:04.539 [DEBUG] [Thread-210650] [transport.py] [_log()] userauth is OK
2026-02-15T20:25:04.539 [DEBUG] [Thread-210650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:25:04.540 [DEBUG] [Thread-210650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:25:04.540 [DEBUG] [Thread-210650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:25:04.540 [DEBUG] [Thread-210650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:25:04.564 [INFO] [Thread-210650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:25:04.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:25:09.152 [DEBUG] [Thread-210652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:15.097 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:15.755 [DEBUG] [Thread-210653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:17.074 [DEBUG] [Thread-210650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:25:17.074 [DEBUG] [Thread-210650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:25:17.075 [DEBUG] [Thread-210650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:25:17.115 [DEBUG] [Thread-210650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:25:17.115 [DEBUG] [Thread-210650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:25:17.119 [DEBUG] [Thread-210650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:25:17.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:25:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:25:17.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:25:17.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:25:17.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:25:17.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:25:17.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:25:17.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:25:17.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:25:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.767107 -999.00  +17.00  27.16     41   +3.80 1 1 1 1 1     0    0 13.73 24.55 ZNESW 26.3 27.2 146.2 34.8 17.1 -24.8 17.1 -23.7 16.9 -22.7 17.2 -23.9
2026-02-15T20:25:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:25:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:25:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.767107
2026-02-15T20:25:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:25:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:25:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:25:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:25:17.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:25:17.145 [DEBUG] [Thread-210650] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:25:17.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:24:54', tmtdew=15.21, humidity=35.74, cloud=0.0, wind=31.76, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:24:38.045', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.07225000000000037, 0.016250000000001208, 0.05000000000000071, -0.0835000000000008, -0.004249999999998977, -0.009999999999999787, 0.01624999999999943, -0.012000000000000455, -0.031000000000000583, -0.0027500000000006963, 0.05000000000000071, 0.0884999999999998, 0.09524999999999828, -0.0010000000000012221, -0.07450000000000045, 0.005250000000000199, 0.02099999999999902, -0.014000000000001123, -0.04475000000000051, 0.0779999999999994, 0.12524999999999942, 0.03375000000000128, -0.029249999999999332, 0.04299999999999926, 0.0945000000000018, -0.08825000000000038, 0.009500000000000952, 0.038000000000000256, 0.02149999999999963, 0.02850000000000108, 0.03700000000000081, 0.05074999999999896], zp_timestamp='2026-02-15T18:21:00')
2026-02-15T20:25:17.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:25:17.241 [DEBUG] [Thread-210655] [transport.py] [_log()] starting thread (client mode): 0xa2d13ca0
2026-02-15T20:25:17.241 [DEBUG] [Thread-210655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:25:17.256 [DEBUG] [Thread-210655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:25:17.256 [INFO] [Thread-210655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] client lang: <none>
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] server lang: <none>
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] kex follows: False
2026-02-15T20:25:17.264 [DEBUG] [Thread-210655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:25:17.265 [DEBUG] [Thread-210655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:25:17.265 [DEBUG] [Thread-210655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:25:17.265 [DEBUG] [Thread-210655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:25:17.265 [DEBUG] [Thread-210655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:25:17.265 [DEBUG] [Thread-210655] [transport.py] [_log()] Compression: none
2026-02-15T20:25:17.265 [DEBUG] [Thread-210655] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:25:17.326 [DEBUG] [Thread-210655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:25:17.327 [DEBUG] [Thread-210655] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:25:17.327 [DEBUG] [Thread-210655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:25:17.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:25:17.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:25:17.384 [DEBUG] [Thread-210655] [transport.py] [_log()] userauth is OK
2026-02-15T20:25:17.384 [DEBUG] [Thread-210655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:25:17.384 [DEBUG] [Thread-210655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:25:17.384 [DEBUG] [Thread-210655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:25:17.384 [DEBUG] [Thread-210655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:25:17.408 [INFO] [Thread-210655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:25:17.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:25:17.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:25:18.263 [DEBUG] [Thread-210655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:25:18.264 [DEBUG] [Thread-210655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:25:18.311 [DEBUG] [Thread-210655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:25:18.312 [DEBUG] [Thread-210655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:25:18.321 [DEBUG] [Thread-210655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:25:18.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:25:18.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:25:18.333 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:18.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:25:18.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:25:18.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:25:18.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:25:18.366 [DEBUG] [Thread-210655] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:25:19.001 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:23.425 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:26.703 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:26.704 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:29.915 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:30.791 [DEBUG] [Thread-210657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:37.810 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:45.840 [DEBUG] [Thread-210658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:48.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:25:48.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:25:48.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:25:49.272 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 25, 29), 15.24, 35.66, 0.0, 30.47, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:25:50.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:25:29
2026-02-15T20:25:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:25:50.891 [DEBUG] [Thread-210659] [transport.py] [_log()] starting thread (client mode): 0xa2d13970
2026-02-15T20:25:50.891 [DEBUG] [Thread-210659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:25:50.911 [DEBUG] [Thread-210659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:25:50.911 [INFO] [Thread-210659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:25:50.914 [DEBUG] [Thread-210659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:25:50.914 [DEBUG] [Thread-210659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] client lang: <none>
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] server lang: <none>
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] kex follows: False
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] Compression: none
2026-02-15T20:25:50.915 [DEBUG] [Thread-210659] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:25:50.932 [DEBUG] [Thread-210659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:25:50.932 [DEBUG] [Thread-210659] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:25:50.933 [DEBUG] [Thread-210659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:25:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:25:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:25:50.977 [DEBUG] [Thread-210659] [transport.py] [_log()] userauth is OK
2026-02-15T20:25:50.977 [DEBUG] [Thread-210659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:25:50.978 [DEBUG] [Thread-210659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:25:50.978 [DEBUG] [Thread-210659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:25:50.978 [DEBUG] [Thread-210659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:25:50.997 [INFO] [Thread-210659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:25:50.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:25:51.609 [DEBUG] [Thread-210659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:25:51.610 [DEBUG] [Thread-210659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:25:51.610 [DEBUG] [Thread-210659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:25:51.650 [DEBUG] [Thread-210659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:25:51.650 [DEBUG] [Thread-210659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:25:51.653 [DEBUG] [Thread-210659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:25:51.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:25:51.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:25:51.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:25:51.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:25:51.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:25:51.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:25:51.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:25:51.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:25:51.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:25:51.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.767465 -999.00  +17.00  18.98     41   +3.80 1 1 1 1 1     0    0 13.73 25.46 ZNESW 21.1 19.0 153.8 30.8 17.2 -24.8 17.1 -23.9 16.9 -22.6 17.2 -24.1
2026-02-15T20:25:51.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:25:51.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:25:51.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.767465
2026-02-15T20:25:51.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:25:51.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:25:51.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:25:51.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:25:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:25:51.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:25:29', tmtdew=15.24, humidity=35.66, cloud=0.0, wind=30.47, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:25:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:24:00')
2026-02-15T20:25:51.681 [DEBUG] [Thread-210659] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:25:51.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:25:51.779 [DEBUG] [Thread-210662] [transport.py] [_log()] starting thread (client mode): 0xa2d7a020
2026-02-15T20:25:51.780 [DEBUG] [Thread-210662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:25:51.795 [DEBUG] [Thread-210662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:25:51.795 [INFO] [Thread-210662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:25:51.802 [DEBUG] [Thread-210662] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:25:51.803 [DEBUG] [Thread-210662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:25:51.803 [DEBUG] [Thread-210662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:25:51.803 [DEBUG] [Thread-210662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] client lang: <none>
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] server lang: <none>
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] kex follows: False
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] Compression: none
2026-02-15T20:25:51.804 [DEBUG] [Thread-210662] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:25:51.867 [DEBUG] [Thread-210662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:25:51.868 [DEBUG] [Thread-210662] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:25:51.868 [DEBUG] [Thread-210662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:25:51.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:25:51.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:25:51.922 [DEBUG] [Thread-210662] [transport.py] [_log()] userauth is OK
2026-02-15T20:25:51.922 [DEBUG] [Thread-210662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:25:51.922 [DEBUG] [Thread-210662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:25:51.922 [DEBUG] [Thread-210662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:25:51.922 [DEBUG] [Thread-210662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:25:51.936 [INFO] [Thread-210662] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:25:51.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:25:51.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:25:52.743 [DEBUG] [Thread-210662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:25:52.743 [DEBUG] [Thread-210662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:25:52.791 [DEBUG] [Thread-210662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:25:52.791 [DEBUG] [Thread-210662] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:25:52.800 [DEBUG] [Thread-210662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:25:52.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:25:52.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:25:52.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:25:52.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:25:52.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:25:52.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:25:52.833 [DEBUG] [Thread-210662] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:25:53.745 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:25:56.795 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:00.877 [DEBUG] [Thread-210664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:09.216 [DEBUG] [Thread-210665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:13.136 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:15.798 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:15.937 [DEBUG] [Thread-210666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:17.675 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:26:22.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:26:22.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:26:24.650 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:24.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 26, 4), 15.24, 35.66, 0.0, 31.18, 17.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:26:24.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:26:04
2026-02-15T20:26:25.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:26:25.278 [DEBUG] [Thread-210667] [transport.py] [_log()] starting thread (client mode): 0xa5770ac0
2026-02-15T20:26:25.278 [DEBUG] [Thread-210667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:26:25.297 [DEBUG] [Thread-210667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:26:25.297 [INFO] [Thread-210667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:26:25.300 [DEBUG] [Thread-210667] [transport.py] [_log()] client lang: <none>
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] server lang: <none>
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] kex follows: False
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] Compression: none
2026-02-15T20:26:25.301 [DEBUG] [Thread-210667] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:26:25.315 [DEBUG] [Thread-210667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:26:25.316 [DEBUG] [Thread-210667] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:26:25.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:26:25.317 [DEBUG] [Thread-210667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:26:25.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:26:25.320 [DEBUG] [Thread-210667] [transport.py] [_log()] userauth is OK
2026-02-15T20:26:25.321 [DEBUG] [Thread-210667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:26:25.321 [DEBUG] [Thread-210667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:26:25.321 [DEBUG] [Thread-210667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:26:25.321 [DEBUG] [Thread-210667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:26:25.346 [INFO] [Thread-210667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:26:25.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:26:25.971 [DEBUG] [Thread-210667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:26:25.971 [DEBUG] [Thread-210667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:26:25.971 [DEBUG] [Thread-210667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:26:26.012 [DEBUG] [Thread-210667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:26:26.012 [DEBUG] [Thread-210667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:26:26.015 [DEBUG] [Thread-210667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:26:26.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:26:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:26:26.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:26:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:26:26.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:26:26.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:26:26.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:26:26.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:26:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:26:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.767801 -999.00  +17.00  24.80     41   +3.80 1 1 1 1 1     0    0 13.91 28.25 ZNESW 21.7 24.8 156.4 31.5 17.2 -25.0 17.1 -23.8 16.9 -22.6 17.1 -23.9
2026-02-15T20:26:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:26:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:26:26.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.767801
2026-02-15T20:26:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:26:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:26:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:26:26.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:26:26.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:26:26.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:26:04', tmtdew=15.24, humidity=35.66, cloud=0.0, wind=31.18, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:25:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:24:00')
2026-02-15T20:26:26.041 [DEBUG] [Thread-210667] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:26:26.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:26:26.131 [DEBUG] [Thread-210670] [transport.py] [_log()] starting thread (client mode): 0xa2d3e050
2026-02-15T20:26:26.131 [DEBUG] [Thread-210670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:26:26.146 [DEBUG] [Thread-210670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:26:26.146 [INFO] [Thread-210670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:26:26.153 [DEBUG] [Thread-210670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] client lang: <none>
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] server lang: <none>
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] kex follows: False
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] Compression: none
2026-02-15T20:26:26.154 [DEBUG] [Thread-210670] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:26:26.213 [DEBUG] [Thread-210670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:26:26.214 [DEBUG] [Thread-210670] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:26:26.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:26:26.215 [DEBUG] [Thread-210670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:26:26.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:26:26.270 [DEBUG] [Thread-210670] [transport.py] [_log()] userauth is OK
2026-02-15T20:26:26.270 [DEBUG] [Thread-210670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:26:26.270 [DEBUG] [Thread-210670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:26:26.270 [DEBUG] [Thread-210670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:26:26.270 [DEBUG] [Thread-210670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:26:26.283 [INFO] [Thread-210670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:26:26.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:26:26.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:26:26.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:26.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:27.117 [DEBUG] [Thread-210670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:26:27.118 [DEBUG] [Thread-210670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:26:27.165 [DEBUG] [Thread-210670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:26:27.165 [DEBUG] [Thread-210670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:26:27.174 [DEBUG] [Thread-210670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:26:27.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:26:27.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:26:27.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:26:27.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:26:27.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:26:27.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:26:27.208 [DEBUG] [Thread-210670] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:26:29.016 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:30.970 [DEBUG] [Thread-210672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:34.725 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:46.019 [DEBUG] [Thread-210673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:53.567 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:26:57.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:26:57.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:26:57.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:26:59.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 26, 39), 15.44, 35.42, 0.0, 29.0, 17.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:26:59.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:26:39
2026-02-15T20:26:59.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:26:59.963 [DEBUG] [Thread-210674] [transport.py] [_log()] starting thread (client mode): 0xa2dc0520
2026-02-15T20:26:59.963 [DEBUG] [Thread-210674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:26:59.983 [DEBUG] [Thread-210674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:26:59.984 [INFO] [Thread-210674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] client lang: <none>
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] server lang: <none>
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] kex follows: False
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] Compression: none
2026-02-15T20:26:59.987 [DEBUG] [Thread-210674] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:27:00.005 [DEBUG] [Thread-210674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:27:00.006 [DEBUG] [Thread-210674] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:27:00.006 [DEBUG] [Thread-210674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:27:00.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:27:00.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:27:00.008 [DEBUG] [Thread-210674] [transport.py] [_log()] userauth is OK
2026-02-15T20:27:00.009 [DEBUG] [Thread-210674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:27:00.009 [DEBUG] [Thread-210674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:27:00.009 [DEBUG] [Thread-210674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:27:00.009 [DEBUG] [Thread-210674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:27:00.034 [INFO] [Thread-210674] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:27:00.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:27:00.650 [DEBUG] [Thread-210674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:27:00.650 [DEBUG] [Thread-210674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:27:00.651 [DEBUG] [Thread-210674] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:27:00.691 [DEBUG] [Thread-210674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:27:00.692 [DEBUG] [Thread-210674] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:27:00.695 [DEBUG] [Thread-210674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:27:00.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:27:00.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:27:00.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:27:00.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:27:00.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:27:00.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:27:00.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:27:00.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:27:00.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:27:00.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.768160 -999.00  +17.00  18.58     41   +3.70 1 1 1 1 1     0    0 13.90 29.54 ZNESW 20.2 18.6 141.4 25.7 17.1 -24.8 17.1 -23.9 16.9 -22.7 17.1 -23.9
2026-02-15T20:27:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:27:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:27:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.768160
2026-02-15T20:27:00.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:27:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:27:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:27:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:27:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:27:00.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:26:39', tmtdew=15.44, humidity=35.42, cloud=0.0, wind=29.0, temperature=17.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:26:09.024', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:24:00')
2026-02-15T20:27:00.720 [DEBUG] [Thread-210674] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:27:00.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:27:00.810 [DEBUG] [Thread-210677] [transport.py] [_log()] starting thread (client mode): 0xa2d121d0
2026-02-15T20:27:00.810 [DEBUG] [Thread-210677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:27:00.825 [DEBUG] [Thread-210677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:27:00.825 [INFO] [Thread-210677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:27:00.832 [DEBUG] [Thread-210677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] client lang: <none>
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] server lang: <none>
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] kex follows: False
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:27:00.833 [DEBUG] [Thread-210677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:27:00.834 [DEBUG] [Thread-210677] [transport.py] [_log()] Compression: none
2026-02-15T20:27:00.834 [DEBUG] [Thread-210677] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:27:00.892 [DEBUG] [Thread-210677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:27:00.892 [DEBUG] [Thread-210677] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:27:00.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:27:00.894 [DEBUG] [Thread-210677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:27:00.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:27:00.950 [DEBUG] [Thread-210677] [transport.py] [_log()] userauth is OK
2026-02-15T20:27:00.950 [DEBUG] [Thread-210677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:27:00.950 [DEBUG] [Thread-210677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:27:00.950 [DEBUG] [Thread-210677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:27:00.950 [DEBUG] [Thread-210677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:27:00.975 [INFO] [Thread-210677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:27:00.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:27:00.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:27:01.056 [DEBUG] [Thread-210679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:01.788 [DEBUG] [Thread-210677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:27:01.788 [DEBUG] [Thread-210677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:27:01.836 [DEBUG] [Thread-210677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:27:01.836 [DEBUG] [Thread-210677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:27:01.844 [DEBUG] [Thread-210677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:27:01.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:27:01.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:27:01.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:27:01.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:27:01.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:27:01.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:27:01.875 [DEBUG] [Thread-210677] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:27:09.283 [DEBUG] [Thread-210680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:12.114 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:16.109 [DEBUG] [Thread-210681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:27.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:27.108 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:30.949 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:31.145 [DEBUG] [Thread-210682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:31.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:27:31.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:27:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:27:33.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 27, 15), 15.24, 35.76, 0.0, 33.59, 17.03, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:27:33.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:27:15
2026-02-15T20:27:34.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:27:34.451 [DEBUG] [Thread-210683] [transport.py] [_log()] starting thread (client mode): 0xa2d56980
2026-02-15T20:27:34.452 [DEBUG] [Thread-210683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:27:34.471 [DEBUG] [Thread-210683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:27:34.472 [INFO] [Thread-210683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] client lang: <none>
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] server lang: <none>
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] kex follows: False
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:27:34.475 [DEBUG] [Thread-210683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:27:34.476 [DEBUG] [Thread-210683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:27:34.476 [DEBUG] [Thread-210683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:27:34.476 [DEBUG] [Thread-210683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:27:34.476 [DEBUG] [Thread-210683] [transport.py] [_log()] Compression: none
2026-02-15T20:27:34.476 [DEBUG] [Thread-210683] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:27:34.490 [DEBUG] [Thread-210683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:27:34.490 [DEBUG] [Thread-210683] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:27:34.490 [DEBUG] [Thread-210683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:27:34.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:27:34.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:27:34.532 [DEBUG] [Thread-210683] [transport.py] [_log()] userauth is OK
2026-02-15T20:27:34.533 [DEBUG] [Thread-210683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:27:34.533 [DEBUG] [Thread-210683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:27:34.533 [DEBUG] [Thread-210683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:27:34.533 [DEBUG] [Thread-210683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:27:34.563 [INFO] [Thread-210683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:27:34.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:27:35.165 [DEBUG] [Thread-210683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:27:35.165 [DEBUG] [Thread-210683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:27:35.166 [DEBUG] [Thread-210683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:27:35.206 [DEBUG] [Thread-210683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:27:35.207 [DEBUG] [Thread-210683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:27:35.210 [DEBUG] [Thread-210683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:27:35.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:27:35.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:27:35.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:27:35.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:27:35.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:27:35.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:27:35.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:27:35.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:27:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:27:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.768495 -999.00  +17.00  18.09     41   +3.80 1 1 1 1 1     0    0 13.80 31.05 ZNESW 23.2 18.1 156.8 31.1 17.2 -24.9 17.1 -23.8 16.8 -22.6 17.1 -23.7
2026-02-15T20:27:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:27:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:27:35.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.768495
2026-02-15T20:27:35.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:27:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:27:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:27:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:27:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:27:35.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:27:15', tmtdew=15.24, humidity=35.76, cloud=0.0, wind=33.59, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:26:37.968', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:24:00')
2026-02-15T20:27:35.235 [DEBUG] [Thread-210683] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:27:35.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:27:35.327 [DEBUG] [Thread-210686] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T20:27:35.328 [DEBUG] [Thread-210686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:27:35.342 [DEBUG] [Thread-210686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:27:35.343 [INFO] [Thread-210686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:27:35.350 [DEBUG] [Thread-210686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] client lang: <none>
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] server lang: <none>
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] kex follows: False
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] Compression: none
2026-02-15T20:27:35.351 [DEBUG] [Thread-210686] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:27:35.408 [DEBUG] [Thread-210686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:27:35.409 [DEBUG] [Thread-210686] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:27:35.410 [DEBUG] [Thread-210686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:27:35.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:27:35.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:27:35.465 [DEBUG] [Thread-210686] [transport.py] [_log()] userauth is OK
2026-02-15T20:27:35.466 [DEBUG] [Thread-210686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:27:35.466 [DEBUG] [Thread-210686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:27:35.466 [DEBUG] [Thread-210686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:27:35.466 [DEBUG] [Thread-210686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:27:35.486 [INFO] [Thread-210686] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:27:35.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:27:35.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:27:36.046 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:36.291 [DEBUG] [Thread-210686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:27:36.291 [DEBUG] [Thread-210686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:27:36.342 [DEBUG] [Thread-210686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:27:36.342 [DEBUG] [Thread-210686] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:27:36.352 [DEBUG] [Thread-210686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:27:36.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:27:36.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:27:36.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:27:36.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:27:36.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:27:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:27:36.389 [DEBUG] [Thread-210686] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:27:40.139 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:46.183 [DEBUG] [Thread-210688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:27:49.597 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:01.234 [DEBUG] [Thread-210689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:06.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:28:06.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:28:06.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:28:08.280 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 27, 51), 15.21, 35.73, 0.0, 33.37, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:28:08.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:27:51
2026-02-15T20:28:08.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:28:08.857 [DEBUG] [Thread-210690] [transport.py] [_log()] starting thread (client mode): 0xa2d3f8e0
2026-02-15T20:28:08.861 [DEBUG] [Thread-210690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:28:08.877 [DEBUG] [Thread-210690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:28:08.877 [INFO] [Thread-210690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:28:08.880 [DEBUG] [Thread-210690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:28:08.880 [DEBUG] [Thread-210690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:28:08.880 [DEBUG] [Thread-210690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] client lang: <none>
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] server lang: <none>
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] kex follows: False
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] Compression: none
2026-02-15T20:28:08.881 [DEBUG] [Thread-210690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:28:08.898 [DEBUG] [Thread-210690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:28:08.899 [DEBUG] [Thread-210690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:28:08.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:28:08.900 [DEBUG] [Thread-210690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:28:08.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:28:08.902 [DEBUG] [Thread-210690] [transport.py] [_log()] userauth is OK
2026-02-15T20:28:08.902 [DEBUG] [Thread-210690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:28:08.903 [DEBUG] [Thread-210690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:28:08.903 [DEBUG] [Thread-210690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:28:08.903 [DEBUG] [Thread-210690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:28:08.916 [INFO] [Thread-210690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:28:08.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:28:09.361 [DEBUG] [Thread-210692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:09.653 [DEBUG] [Thread-210690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:28:09.653 [DEBUG] [Thread-210690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:28:09.654 [DEBUG] [Thread-210690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:28:09.694 [DEBUG] [Thread-210690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:28:09.695 [DEBUG] [Thread-210690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:28:09.698 [DEBUG] [Thread-210690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:28:09.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:28:09.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:28:09.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:28:09.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:28:09.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:28:09.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:28:09.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:28:09.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:28:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:28:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.769190 -999.00  +17.00  20.51     41   +3.70 1 1 1 1 1     0    0 14.33 33.59 ZNESW 20.2 20.5 153.6 30.0 17.2 -24.8 17.1 -23.9 16.9 -22.6 17.1 -23.9
2026-02-15T20:28:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:28:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:28:09.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.769190
2026-02-15T20:28:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:28:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:28:09.724 [DEBUG] [Thread-210690] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:28:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:28:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:28:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:28:09.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:27:51', tmtdew=15.21, humidity=35.73, cloud=0.0, wind=33.37, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:27:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:24:00')
2026-02-15T20:28:09.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:28:09.819 [DEBUG] [Thread-210694] [transport.py] [_log()] starting thread (client mode): 0xa5770a60
2026-02-15T20:28:09.819 [DEBUG] [Thread-210694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:28:09.833 [DEBUG] [Thread-210694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:28:09.834 [INFO] [Thread-210694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:28:09.841 [DEBUG] [Thread-210694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] client lang: <none>
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] server lang: <none>
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] kex follows: False
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:28:09.842 [DEBUG] [Thread-210694] [transport.py] [_log()] Compression: none
2026-02-15T20:28:09.843 [DEBUG] [Thread-210694] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:28:09.901 [DEBUG] [Thread-210694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:28:09.902 [DEBUG] [Thread-210694] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:28:09.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:28:09.903 [DEBUG] [Thread-210694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:28:09.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:28:09.956 [DEBUG] [Thread-210694] [transport.py] [_log()] userauth is OK
2026-02-15T20:28:09.956 [DEBUG] [Thread-210694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:28:09.956 [DEBUG] [Thread-210694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:28:09.956 [DEBUG] [Thread-210694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:28:09.957 [DEBUG] [Thread-210694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:28:09.979 [INFO] [Thread-210694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:28:09.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:28:09.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:28:10.785 [DEBUG] [Thread-210694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:28:10.785 [DEBUG] [Thread-210694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:28:10.833 [DEBUG] [Thread-210694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:28:10.833 [DEBUG] [Thread-210694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:28:10.841 [DEBUG] [Thread-210694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:28:10.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:28:10.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:28:10.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:28:10.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:28:10.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:28:10.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:28:10.883 [DEBUG] [Thread-210694] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:28:16.269 [DEBUG] [Thread-210696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:26.977 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:27.313 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:27.314 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:31.328 [DEBUG] [Thread-210697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:40.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:28:40.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:28:40.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:28:42.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 28, 26), 15.24, 35.64, 0.0, 33.21, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:28:42.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:28:26
2026-02-15T20:28:43.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:28:43.324 [DEBUG] [Thread-210698] [transport.py] [_log()] starting thread (client mode): 0xa57e06d0
2026-02-15T20:28:43.324 [DEBUG] [Thread-210698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:28:43.345 [DEBUG] [Thread-210698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:28:43.345 [INFO] [Thread-210698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] client lang: <none>
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] server lang: <none>
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] kex follows: False
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] Compression: none
2026-02-15T20:28:43.348 [DEBUG] [Thread-210698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:28:43.366 [DEBUG] [Thread-210698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:28:43.366 [DEBUG] [Thread-210698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:28:43.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:28:43.368 [DEBUG] [Thread-210698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:28:43.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:28:43.370 [DEBUG] [Thread-210698] [transport.py] [_log()] userauth is OK
2026-02-15T20:28:43.371 [DEBUG] [Thread-210698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:28:43.371 [DEBUG] [Thread-210698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:28:43.371 [DEBUG] [Thread-210698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:28:43.371 [DEBUG] [Thread-210698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:28:43.397 [INFO] [Thread-210698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:28:43.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:28:44.031 [DEBUG] [Thread-210698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:28:44.031 [DEBUG] [Thread-210698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:28:44.031 [DEBUG] [Thread-210698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:28:44.072 [DEBUG] [Thread-210698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:28:44.073 [DEBUG] [Thread-210698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:28:44.076 [DEBUG] [Thread-210698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:28:44.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:28:44.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:28:44.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:28:44.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:28:44.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:28:44.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:28:44.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:28:44.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:28:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:28:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.769549 -999.00  +17.00  24.13     41   +3.70 1 1 1 1 1     0    0 14.30 35.99 ZNESW 18.8 24.1 152.4 35.2 17.2 -24.8 17.1 -23.6 16.9 -22.6 17.1 -24.1
2026-02-15T20:28:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:28:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:28:44.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.769549
2026-02-15T20:28:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:28:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:28:44.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:28:44.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:28:44.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:28:44.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:28:26', tmtdew=15.24, humidity=35.64, cloud=0.0, wind=33.21, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:28:09.034', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:24:00')
2026-02-15T20:28:44.106 [DEBUG] [Thread-210698] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:28:44.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:28:44.204 [DEBUG] [Thread-210701] [transport.py] [_log()] starting thread (client mode): 0xa575b610
2026-02-15T20:28:44.204 [DEBUG] [Thread-210701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:28:44.218 [DEBUG] [Thread-210701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:28:44.219 [INFO] [Thread-210701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:28:44.226 [DEBUG] [Thread-210701] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:28:44.226 [DEBUG] [Thread-210701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:28:44.226 [DEBUG] [Thread-210701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:28:44.226 [DEBUG] [Thread-210701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:44.226 [DEBUG] [Thread-210701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] client lang: <none>
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] server lang: <none>
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] kex follows: False
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] Compression: none
2026-02-15T20:28:44.227 [DEBUG] [Thread-210701] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:28:44.284 [DEBUG] [Thread-210701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:28:44.284 [DEBUG] [Thread-210701] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:28:44.285 [DEBUG] [Thread-210701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:28:44.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:28:44.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:28:44.340 [DEBUG] [Thread-210701] [transport.py] [_log()] userauth is OK
2026-02-15T20:28:44.341 [DEBUG] [Thread-210701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:28:44.341 [DEBUG] [Thread-210701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:28:44.341 [DEBUG] [Thread-210701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:28:44.341 [DEBUG] [Thread-210701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:28:44.359 [INFO] [Thread-210701] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:28:44.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:28:44.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:28:45.180 [DEBUG] [Thread-210701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:28:45.180 [DEBUG] [Thread-210701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:28:45.228 [DEBUG] [Thread-210701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:28:45.229 [DEBUG] [Thread-210701] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:28:45.238 [DEBUG] [Thread-210701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:28:45.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:28:45.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:28:45.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:28:45.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:28:45.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:28:45.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:28:45.274 [DEBUG] [Thread-210701] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:28:45.653 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:28:46.360 [DEBUG] [Thread-210703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:01.417 [DEBUG] [Thread-210704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:04.322 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:09.418 [DEBUG] [Thread-210705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:15.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:29:15.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:29:15.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:29:16.455 [DEBUG] [Thread-210706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 29, 1), 15.25, 35.64, 0.0, 33.26, 17.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:29:17.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:29:01
2026-02-15T20:29:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:29:17.757 [DEBUG] [Thread-210707] [transport.py] [_log()] starting thread (client mode): 0xa5759c30
2026-02-15T20:29:17.757 [DEBUG] [Thread-210707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:29:17.778 [DEBUG] [Thread-210707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:29:17.778 [INFO] [Thread-210707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:29:17.780 [DEBUG] [Thread-210707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] client lang: <none>
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] server lang: <none>
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] kex follows: False
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] Compression: none
2026-02-15T20:29:17.781 [DEBUG] [Thread-210707] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:29:17.801 [DEBUG] [Thread-210707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:29:17.802 [DEBUG] [Thread-210707] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:29:17.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:29:17.803 [DEBUG] [Thread-210707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:29:17.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:29:17.805 [DEBUG] [Thread-210707] [transport.py] [_log()] userauth is OK
2026-02-15T20:29:17.805 [DEBUG] [Thread-210707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:29:17.806 [DEBUG] [Thread-210707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:29:17.806 [DEBUG] [Thread-210707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:29:17.806 [DEBUG] [Thread-210707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:29:17.831 [INFO] [Thread-210707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:29:17.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:29:18.428 [DEBUG] [Thread-210707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:29:18.428 [DEBUG] [Thread-210707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:29:18.428 [DEBUG] [Thread-210707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:29:18.469 [DEBUG] [Thread-210707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:29:18.469 [DEBUG] [Thread-210707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:29:18.472 [DEBUG] [Thread-210707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:29:18.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:29:18.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:29:18.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:29:18.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:29:18.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:29:18.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:29:18.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.769896 -999.00  +17.00  16.72     41   +3.70 1 1 1 1 1     0    0 14.41 37.58 ZNESW 18.1 16.7 153.0 36.4 17.2 -24.9 17.1 -23.8 16.9 -22.5 17.2 -24.0
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.769896
2026-02-15T20:29:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:29:18.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:29:01', tmtdew=15.25, humidity=35.64, cloud=0.0, wind=33.26, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:28:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:27:00')
2026-02-15T20:29:18.495 [DEBUG] [Thread-210707] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:29:18.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:29:18.579 [DEBUG] [Thread-210710] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-15T20:29:18.579 [DEBUG] [Thread-210710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:29:18.593 [DEBUG] [Thread-210710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:29:18.593 [INFO] [Thread-210710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:29:18.601 [DEBUG] [Thread-210710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:29:18.601 [DEBUG] [Thread-210710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:29:18.601 [DEBUG] [Thread-210710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:29:18.601 [DEBUG] [Thread-210710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:18.601 [DEBUG] [Thread-210710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] client lang: <none>
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] server lang: <none>
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] kex follows: False
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] Compression: none
2026-02-15T20:29:18.602 [DEBUG] [Thread-210710] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:29:18.660 [DEBUG] [Thread-210710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:29:18.660 [DEBUG] [Thread-210710] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:29:18.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:29:18.661 [DEBUG] [Thread-210710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:29:18.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:29:18.716 [DEBUG] [Thread-210710] [transport.py] [_log()] userauth is OK
2026-02-15T20:29:18.716 [DEBUG] [Thread-210710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:29:18.716 [DEBUG] [Thread-210710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:29:18.716 [DEBUG] [Thread-210710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:29:18.716 [DEBUG] [Thread-210710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:29:18.734 [INFO] [Thread-210710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:29:18.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:29:18.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:29:19.622 [DEBUG] [Thread-210710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:29:19.622 [DEBUG] [Thread-210710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:29:19.670 [DEBUG] [Thread-210710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:29:19.671 [DEBUG] [Thread-210710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:29:19.680 [DEBUG] [Thread-210710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:29:19.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:29:19.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:29:19.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:29:19.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:29:19.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:29:19.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:29:19.716 [DEBUG] [Thread-210710] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:29:23.158 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:27.516 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:27.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:31.490 [DEBUG] [Thread-210712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:41.879 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:46.543 [DEBUG] [Thread-210713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:29:49.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:29:49.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:29:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:29:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 29, 37), 15.5, 35.26, 0.0, 41.42, 17.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:29:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:29:37
2026-02-15T20:29:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:29:52.119 [DEBUG] [Thread-210714] [transport.py] [_log()] starting thread (client mode): 0xa57e2920
2026-02-15T20:29:52.119 [DEBUG] [Thread-210714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:29:52.139 [DEBUG] [Thread-210714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:29:52.139 [INFO] [Thread-210714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] client lang: <none>
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] server lang: <none>
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] kex follows: False
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] Compression: none
2026-02-15T20:29:52.142 [DEBUG] [Thread-210714] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:29:52.158 [DEBUG] [Thread-210714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:29:52.159 [DEBUG] [Thread-210714] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:29:52.159 [DEBUG] [Thread-210714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:29:52.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:29:52.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:29:52.161 [DEBUG] [Thread-210714] [transport.py] [_log()] userauth is OK
2026-02-15T20:29:52.161 [DEBUG] [Thread-210714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:29:52.161 [DEBUG] [Thread-210714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:29:52.161 [DEBUG] [Thread-210714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:29:52.161 [DEBUG] [Thread-210714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:29:52.174 [INFO] [Thread-210714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:29:52.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:29:52.787 [DEBUG] [Thread-210714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:29:52.788 [DEBUG] [Thread-210714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:29:52.788 [DEBUG] [Thread-210714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:29:52.831 [DEBUG] [Thread-210714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:29:52.831 [DEBUG] [Thread-210714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:29:52.833 [DEBUG] [Thread-210714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:29:52.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:29:52.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:29:52.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:29:52.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:29:52.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:29:52.855 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:29:52.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.770231 -999.00  +17.00  27.94     41   +3.70 1 1 1 1 1     0    0 14.43 41.11 ZNESW 22.7 27.9 152.7 31.9 17.2 -24.7 17.1 -23.7 16.9 -22.6 17.1 -23.7
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.770231
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:29:52.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:29:52.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:29:37', tmtdew=15.5, humidity=35.26, cloud=0.0, wind=41.42, temperature=17.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:29:07.958', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:27:00')
2026-02-15T20:29:52.857 [DEBUG] [Thread-210714] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:29:52.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:29:52.946 [DEBUG] [Thread-210717] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T20:29:52.946 [DEBUG] [Thread-210717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:29:52.960 [DEBUG] [Thread-210717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:29:52.961 [INFO] [Thread-210717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:29:52.968 [DEBUG] [Thread-210717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] client lang: <none>
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] server lang: <none>
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] kex follows: False
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] Compression: none
2026-02-15T20:29:52.969 [DEBUG] [Thread-210717] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:29:53.026 [DEBUG] [Thread-210717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:29:53.026 [DEBUG] [Thread-210717] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:29:53.026 [DEBUG] [Thread-210717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:29:53.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:29:53.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:29:53.083 [DEBUG] [Thread-210717] [transport.py] [_log()] userauth is OK
2026-02-15T20:29:53.083 [DEBUG] [Thread-210717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:29:53.083 [DEBUG] [Thread-210717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:29:53.083 [DEBUG] [Thread-210717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:29:53.084 [DEBUG] [Thread-210717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:29:53.107 [INFO] [Thread-210717] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:29:53.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:29:53.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:29:53.931 [DEBUG] [Thread-210717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:29:53.932 [DEBUG] [Thread-210717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:29:53.979 [DEBUG] [Thread-210717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:29:53.979 [DEBUG] [Thread-210717] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:29:53.988 [DEBUG] [Thread-210717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:29:53.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:29:53.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:29:54.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:29:54.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:29:54.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:29:54.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:29:54.025 [DEBUG] [Thread-210717] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:30:00.540 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:01.576 [DEBUG] [Thread-210719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:03.985 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:09.474 [DEBUG] [Thread-210720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:10.567 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:14.654 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:16.616 [DEBUG] [Thread-210721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:19.287 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:24.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:30:24.048 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:30:24.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:30:25.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 30, 13), 15.28, 35.56, 0.0, 32.01, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:30:25.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:30:13
2026-02-15T20:30:26.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:30:26.362 [DEBUG] [Thread-210722] [transport.py] [_log()] starting thread (client mode): 0xa57e1db0
2026-02-15T20:30:26.363 [DEBUG] [Thread-210722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:30:26.382 [DEBUG] [Thread-210722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:30:26.383 [INFO] [Thread-210722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:30:26.386 [DEBUG] [Thread-210722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:30:26.386 [DEBUG] [Thread-210722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:30:26.386 [DEBUG] [Thread-210722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:30:26.386 [DEBUG] [Thread-210722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:30:26.386 [DEBUG] [Thread-210722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] client lang: <none>
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] server lang: <none>
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] kex follows: False
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] Compression: none
2026-02-15T20:30:26.387 [DEBUG] [Thread-210722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:30:26.403 [DEBUG] [Thread-210722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:30:26.404 [DEBUG] [Thread-210722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:30:26.405 [DEBUG] [Thread-210722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:30:26.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:30:26.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:30:26.407 [DEBUG] [Thread-210722] [transport.py] [_log()] userauth is OK
2026-02-15T20:30:26.407 [DEBUG] [Thread-210722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:30:26.407 [DEBUG] [Thread-210722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:30:26.407 [DEBUG] [Thread-210722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:30:26.407 [DEBUG] [Thread-210722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:30:26.429 [INFO] [Thread-210722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:30:26.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:30:27.065 [DEBUG] [Thread-210722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:30:27.065 [DEBUG] [Thread-210722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:30:27.065 [DEBUG] [Thread-210722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:30:27.106 [DEBUG] [Thread-210722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:30:27.107 [DEBUG] [Thread-210722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:30:27.110 [DEBUG] [Thread-210722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:30:27.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:30:27.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:30:27.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:30:27.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:30:27.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:30:27.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:30:27.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:30:27.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:30:27.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:30:27.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.770590 -999.00  +17.00  19.68     41   +3.70 1 1 1 1 1     0    0 14.25 36.49 ZNESW 20.2 19.7 145.2 42.0 17.2 -24.9 17.1 -23.8 16.9 -22.6 17.2 -24.0
2026-02-15T20:30:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:30:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:30:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.770590
2026-02-15T20:30:27.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:30:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:30:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:30:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:30:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:30:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:30:13', tmtdew=15.28, humidity=35.56, cloud=0.0, wind=32.01, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:29:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:27:00')
2026-02-15T20:30:27.137 [DEBUG] [Thread-210722] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:30: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-02-15T20:30:27.244 [DEBUG] [Thread-210725] [transport.py] [_log()] starting thread (client mode): 0xa575afe0
2026-02-15T20:30:27.244 [DEBUG] [Thread-210725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:30:27.259 [DEBUG] [Thread-210725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:30:27.259 [INFO] [Thread-210725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] client lang: <none>
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] server lang: <none>
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] kex follows: False
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:30:27.267 [DEBUG] [Thread-210725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:30:27.268 [DEBUG] [Thread-210725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:30:27.268 [DEBUG] [Thread-210725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:30:27.268 [DEBUG] [Thread-210725] [transport.py] [_log()] Compression: none
2026-02-15T20:30:27.268 [DEBUG] [Thread-210725] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:30:27.327 [DEBUG] [Thread-210725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:30:27.327 [DEBUG] [Thread-210725] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:30:27.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:30:27.329 [DEBUG] [Thread-210725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:30:27.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:30:27.383 [DEBUG] [Thread-210725] [transport.py] [_log()] userauth is OK
2026-02-15T20:30:27.383 [DEBUG] [Thread-210725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:30:27.383 [DEBUG] [Thread-210725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:30:27.383 [DEBUG] [Thread-210725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:30:27.383 [DEBUG] [Thread-210725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:30:27.402 [INFO] [Thread-210725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:30:27.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:30:27.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:30:27.718 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:27.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:28.231 [DEBUG] [Thread-210725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:30:28.231 [DEBUG] [Thread-210725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:30:28.278 [DEBUG] [Thread-210725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:30:28.278 [DEBUG] [Thread-210725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:30:28.288 [DEBUG] [Thread-210725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:30:28.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:30:28.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:30:28.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:30:28.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:30:28.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:30:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:30:28.325 [DEBUG] [Thread-210725] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:30:31.653 [DEBUG] [Thread-210727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:38.086 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:46.704 [DEBUG] [Thread-210728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:56.922 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:30:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:30:58.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:30:58.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:31:00.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 30, 49), 15.28, 35.56, 0.0, 34.46, 17.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:31:00.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:30:49
2026-02-15T20:31:00.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:31:01.023 [DEBUG] [Thread-210729] [transport.py] [_log()] starting thread (client mode): 0xa2d7b820
2026-02-15T20:31:01.023 [DEBUG] [Thread-210729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:31:01.042 [DEBUG] [Thread-210729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:31:01.043 [INFO] [Thread-210729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:31:01.045 [DEBUG] [Thread-210729] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:31:01.045 [DEBUG] [Thread-210729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] client lang: <none>
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] server lang: <none>
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] kex follows: False
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] Compression: none
2026-02-15T20:31:01.046 [DEBUG] [Thread-210729] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:31:01.062 [DEBUG] [Thread-210729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:31:01.063 [DEBUG] [Thread-210729] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:31:01.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:31:01.064 [DEBUG] [Thread-210729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:31:01.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:31:01.066 [DEBUG] [Thread-210729] [transport.py] [_log()] userauth is OK
2026-02-15T20:31:01.066 [DEBUG] [Thread-210729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:31:01.066 [DEBUG] [Thread-210729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:31:01.066 [DEBUG] [Thread-210729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:31:01.066 [DEBUG] [Thread-210729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:31:01.091 [INFO] [Thread-210729] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:31:01.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:31:01.740 [DEBUG] [Thread-210731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:01.877 [DEBUG] [Thread-210729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:31:01.877 [DEBUG] [Thread-210729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:31:01.878 [DEBUG] [Thread-210729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:31:01.918 [DEBUG] [Thread-210729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:31:01.918 [DEBUG] [Thread-210729] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:31:01.921 [DEBUG] [Thread-210729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:31:01.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:31:01.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:31:01.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:31:01.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:31:01.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:31:01.944 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:31:01.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:31:01.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:31:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:31:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.770937 -999.00  +17.00  19.53     41   +3.70 1 1 1 1 1     0    0 14.01 35.21 ZNESW 18.9 19.5 142.6 25.9 17.2 -24.9 17.1 -23.8 16.8 -22.8 17.1 -23.8
2026-02-15T20:31:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:31:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:31:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.770937
2026-02-15T20:31:01.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:31:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:31:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:31:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:31:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:31:01.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:30:49', tmtdew=15.28, humidity=35.56, cloud=0.0, wind=34.46, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:30:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:27:00')
2026-02-15T20:31:01.946 [DEBUG] [Thread-210729] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:31:02.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:31:02.041 [DEBUG] [Thread-210733] [transport.py] [_log()] starting thread (client mode): 0xa57718a0
2026-02-15T20:31:02.041 [DEBUG] [Thread-210733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:31:02.058 [DEBUG] [Thread-210733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:31:02.058 [INFO] [Thread-210733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] client lang: <none>
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] server lang: <none>
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] kex follows: False
2026-02-15T20:31:02.066 [DEBUG] [Thread-210733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:31:02.067 [DEBUG] [Thread-210733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:31:02.067 [DEBUG] [Thread-210733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:31:02.067 [DEBUG] [Thread-210733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:31:02.067 [DEBUG] [Thread-210733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:31:02.067 [DEBUG] [Thread-210733] [transport.py] [_log()] Compression: none
2026-02-15T20:31:02.067 [DEBUG] [Thread-210733] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:31:02.126 [DEBUG] [Thread-210733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:31:02.127 [DEBUG] [Thread-210733] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:31:02.127 [DEBUG] [Thread-210733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:31:02.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:31:02.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:31:02.182 [DEBUG] [Thread-210733] [transport.py] [_log()] userauth is OK
2026-02-15T20:31:02.182 [DEBUG] [Thread-210733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:31:02.183 [DEBUG] [Thread-210733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:31:02.183 [DEBUG] [Thread-210733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:31:02.183 [DEBUG] [Thread-210733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:31:02.201 [INFO] [Thread-210733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:31:02.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:31:02.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:31:03.076 [DEBUG] [Thread-210733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:31:03.076 [DEBUG] [Thread-210733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:31:03.126 [DEBUG] [Thread-210733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:31:03.126 [DEBUG] [Thread-210733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:31:03.138 [DEBUG] [Thread-210733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:31:03.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:31:03.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')
2026-02-15T20:31:03.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:31:03.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:31:03.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:31:03.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:31:03.171 [DEBUG] [Thread-210733] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:31:09.530 [DEBUG] [Thread-210735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:15.578 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:16.778 [DEBUG] [Thread-210736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:27.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:27.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:31.828 [DEBUG] [Thread-210737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:33.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:31:33.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:31:33.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:31:34.237 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:35.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 31, 24), 15.31, 35.5, 0.0, 32.84, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:31:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:31:24
2026-02-15T20:31:36.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:31:36.359 [DEBUG] [Thread-210738] [transport.py] [_log()] starting thread (client mode): 0xa2dc1480
2026-02-15T20:31:36.359 [DEBUG] [Thread-210738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:31:36.381 [DEBUG] [Thread-210738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:31:36.381 [INFO] [Thread-210738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:31:36.384 [DEBUG] [Thread-210738] [transport.py] [_log()] client lang: <none>
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] server lang: <none>
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] kex follows: False
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] Compression: none
2026-02-15T20:31:36.385 [DEBUG] [Thread-210738] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:31:36.404 [DEBUG] [Thread-210738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:31:36.404 [DEBUG] [Thread-210738] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:31:36.405 [DEBUG] [Thread-210738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:31:36.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:31:36.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:31:36.406 [DEBUG] [Thread-210738] [transport.py] [_log()] userauth is OK
2026-02-15T20:31:36.406 [DEBUG] [Thread-210738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:31:36.406 [DEBUG] [Thread-210738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:31:36.406 [DEBUG] [Thread-210738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:31:36.406 [DEBUG] [Thread-210738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:31:36.420 [INFO] [Thread-210738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:31:36.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:31:37.045 [DEBUG] [Thread-210738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:31:37.045 [DEBUG] [Thread-210738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:31:37.045 [DEBUG] [Thread-210738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:31:37.085 [DEBUG] [Thread-210738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:31:37.086 [DEBUG] [Thread-210738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:31:37.089 [DEBUG] [Thread-210738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:31:37.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:31:37.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:31:37.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:31:37.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:31:37.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:31:37.112 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:31:37.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:31:37.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:31:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:31:37.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.771632 -999.00  +16.90  16.20     41   +3.70 1 1 1 1 1     0    0 14.03 34.32 ZNESW 26.4 16.2 162.2 34.5 17.1 -24.8 17.1 -23.8 16.8 -22.7 17.2 -23.9
2026-02-15T20:31:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:31:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:31:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.771632
2026-02-15T20:31:37.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:31:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:31:37.115 [DEBUG] [Thread-210738] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:31:37.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:31:37.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:31:37.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:31:37.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:31:24', tmtdew=15.31, humidity=35.5, cloud=0.0, wind=32.84, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:31:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.0467499999999994, -0.024250000000000327, -0.01950000000000074, -0.0600000000000005, -0.05524999999999913, -0.051000000000000156, -0.004249999999998977, 0.037499999999999645, -0.03500000000000014, 0.021250000000000213, -0.041999999999999815, 0.10099999999999909, -0.02624999999999922, -0.006000000000000227, -0.08000000000000007, 0.017250000000000654, 0.0005000000000006111, -0.04300000000000104, -0.09925000000000139, 0.0799999999999983, 0.0752499999999987, 0.04725000000000179, -0.004250000000000753, 0.006999999999999673, 0.05550000000000033, -0.04124999999999979, -0.0045000000000001705, 0.059499999999999886, -0.0019999999999988916, -0.009000000000000341, -0.013999999999999346, 0.09124999999999872], zp_timestamp='2026-02-15T18:27:00')
2026-02-15T20:31:37.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:31:37.217 [DEBUG] [Thread-210741] [transport.py] [_log()] starting thread (client mode): 0xa2d578b0
2026-02-15T20:31:37.217 [DEBUG] [Thread-210741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:31:37.232 [DEBUG] [Thread-210741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:31:37.232 [INFO] [Thread-210741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:31:37.239 [DEBUG] [Thread-210741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] client lang: <none>
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] server lang: <none>
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] kex follows: False
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:31:37.240 [DEBUG] [Thread-210741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:31:37.241 [DEBUG] [Thread-210741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:31:37.241 [DEBUG] [Thread-210741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:31:37.241 [DEBUG] [Thread-210741] [transport.py] [_log()] Compression: none
2026-02-15T20:31:37.241 [DEBUG] [Thread-210741] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:31:37.298 [DEBUG] [Thread-210741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:31:37.298 [DEBUG] [Thread-210741] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:31:37.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:31:37.300 [DEBUG] [Thread-210741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:31:37.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:31:37.354 [DEBUG] [Thread-210741] [transport.py] [_log()] userauth is OK
2026-02-15T20:31:37.355 [DEBUG] [Thread-210741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:31:37.355 [DEBUG] [Thread-210741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:31:37.355 [DEBUG] [Thread-210741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:31:37.355 [DEBUG] [Thread-210741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:31:37.373 [INFO] [Thread-210741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:31:37.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:31:37.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:31:37.499 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:38.195 [DEBUG] [Thread-210741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:31:38.195 [DEBUG] [Thread-210741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:31:38.242 [DEBUG] [Thread-210741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:31:38.243 [DEBUG] [Thread-210741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:31:38.252 [DEBUG] [Thread-210741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:31:38.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:31:38.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:31:38.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:31:38.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:31:38.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:31:38.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:31:38.288 [DEBUG] [Thread-210741] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:31:46.125 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:46.865 [DEBUG] [Thread-210743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:50.208 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:31:53.018 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:01.918 [DEBUG] [Thread-210744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:08.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:32:08.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:32:08.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:32:09.586 [DEBUG] [Thread-210745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:10.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 31, 24), 15.31, 35.5, 0.0, 32.84, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:32:10.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:31:24
2026-02-15T20:32:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:32:10.748 [DEBUG] [Thread-210746] [transport.py] [_log()] starting thread (client mode): 0xa2d55720
2026-02-15T20:32:10.748 [DEBUG] [Thread-210746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:32:10.769 [DEBUG] [Thread-210746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:32:10.769 [INFO] [Thread-210746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:32:10.771 [DEBUG] [Thread-210746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] client lang: <none>
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] server lang: <none>
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] kex follows: False
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] Compression: none
2026-02-15T20:32:10.772 [DEBUG] [Thread-210746] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:32:10.781 [DEBUG] [Thread-210746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:32:10.781 [DEBUG] [Thread-210746] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:32:10.781 [DEBUG] [Thread-210746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:32:10.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:32:10.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:32:10.784 [DEBUG] [Thread-210746] [transport.py] [_log()] userauth is OK
2026-02-15T20:32:10.784 [DEBUG] [Thread-210746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:32:10.784 [DEBUG] [Thread-210746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:32:10.784 [DEBUG] [Thread-210746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:32:10.784 [DEBUG] [Thread-210746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:32:10.799 [INFO] [Thread-210746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:32:10.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:32:11.468 [DEBUG] [Thread-210746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:32:11.468 [DEBUG] [Thread-210746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:32:11.468 [DEBUG] [Thread-210746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:32:11.510 [DEBUG] [Thread-210746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:32:11.510 [DEBUG] [Thread-210746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:32:11.513 [DEBUG] [Thread-210746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:32:11.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:32:11.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:32:11.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:32:11.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:32:11.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:32:11.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:32:11.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.771979 -999.00  +17.00  31.48     41   +3.70 1 1 2 1 1     0    0 14.02 31.05 ZNESW 23.0 31.5 145.2 37.9 17.1 -24.8 17.1 -23.7 16.9 -22.6 17.1 -23.9
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.771979
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:32:11.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:31:24', tmtdew=15.31, humidity=35.5, cloud=0.0, wind=32.84, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:31:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:30:00')
2026-02-15T20:32:11.541 [DEBUG] [Thread-210746] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:32:11.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:32:11.623 [DEBUG] [Thread-210749] [transport.py] [_log()] starting thread (client mode): 0xa2d54520
2026-02-15T20:32:11.623 [DEBUG] [Thread-210749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:32:11.638 [DEBUG] [Thread-210749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:32:11.638 [INFO] [Thread-210749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:32:11.646 [DEBUG] [Thread-210749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:32:11.646 [DEBUG] [Thread-210749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:32:11.646 [DEBUG] [Thread-210749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:32:11.646 [DEBUG] [Thread-210749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:11.646 [DEBUG] [Thread-210749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] client lang: <none>
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] server lang: <none>
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] kex follows: False
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:32:11.647 [DEBUG] [Thread-210749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:32:11.648 [DEBUG] [Thread-210749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:32:11.648 [DEBUG] [Thread-210749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:32:11.648 [DEBUG] [Thread-210749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:32:11.648 [DEBUG] [Thread-210749] [transport.py] [_log()] Compression: none
2026-02-15T20:32:11.648 [DEBUG] [Thread-210749] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:32:11.706 [DEBUG] [Thread-210749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:32:11.707 [DEBUG] [Thread-210749] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:32:11.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:32:11.709 [DEBUG] [Thread-210749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:32:11.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:32:11.748 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:11.766 [DEBUG] [Thread-210749] [transport.py] [_log()] userauth is OK
2026-02-15T20:32:11.766 [DEBUG] [Thread-210749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:32:11.766 [DEBUG] [Thread-210749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:32:11.766 [DEBUG] [Thread-210749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:32:11.766 [DEBUG] [Thread-210749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:32:11.785 [INFO] [Thread-210749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:32:11.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:32:11.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:32:12.598 [DEBUG] [Thread-210749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:32:12.599 [DEBUG] [Thread-210749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:32:12.646 [DEBUG] [Thread-210749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:32:12.647 [DEBUG] [Thread-210749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:32:12.656 [DEBUG] [Thread-210749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:32:12.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:32:12.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:32:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:32:12.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:32:12.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:32:12.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:32:12.692 [DEBUG] [Thread-210749] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:32:16.958 [DEBUG] [Thread-210751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:28.122 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:28.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:30.427 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:32.016 [DEBUG] [Thread-210752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:42.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:32:42.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:32:42.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:32:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 32, 35), 15.55, 35.12, 0.0, 31.23, 17.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:32:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:32:35
2026-02-15T20:32:44.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:32:45.077 [DEBUG] [Thread-210753] [transport.py] [_log()] starting thread (client mode): 0xa57e0e20
2026-02-15T20:32:45.078 [DEBUG] [Thread-210753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:32:45.098 [DEBUG] [Thread-210753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:32:45.098 [INFO] [Thread-210753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] client lang: <none>
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] server lang: <none>
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] kex follows: False
2026-02-15T20:32:45.101 [DEBUG] [Thread-210753] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:32:45.102 [DEBUG] [Thread-210753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:32:45.102 [DEBUG] [Thread-210753] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:32:45.102 [DEBUG] [Thread-210753] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:32:45.102 [DEBUG] [Thread-210753] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:32:45.102 [DEBUG] [Thread-210753] [transport.py] [_log()] Compression: none
2026-02-15T20:32:45.102 [DEBUG] [Thread-210753] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:32:45.110 [DEBUG] [Thread-210753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:32:45.110 [DEBUG] [Thread-210753] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:32:45.110 [DEBUG] [Thread-210753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:32:45.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:32:45.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:32:45.112 [DEBUG] [Thread-210753] [transport.py] [_log()] userauth is OK
2026-02-15T20:32:45.112 [DEBUG] [Thread-210753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:32:45.112 [DEBUG] [Thread-210753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:32:45.112 [DEBUG] [Thread-210753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:32:45.112 [DEBUG] [Thread-210753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:32:45.132 [INFO] [Thread-210753] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:32:45.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:32:45.774 [DEBUG] [Thread-210753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:32:45.774 [DEBUG] [Thread-210753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:32:45.774 [DEBUG] [Thread-210753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:32:45.815 [DEBUG] [Thread-210753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:32:45.815 [DEBUG] [Thread-210753] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:32:45.819 [DEBUG] [Thread-210753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:32:45.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:32:45.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:32:45.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:32:45.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:32:45.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:32:45.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:32:45.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:32:45.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:32:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:32:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.772326 -999.00  +17.00  26.19     41   +3.60 1 1 1 1 1     0    0 13.75 28.53 ZNESW 22.9 26.2 155.9 33.5 17.1 -24.8 17.1 -23.8 16.9 -22.5 17.2 -23.7
2026-02-15T20:32:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:32:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:32:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.772326
2026-02-15T20:32:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:32:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:32:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:32:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:32:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:32:45.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:32:35', tmtdew=15.55, humidity=35.12, cloud=0.0, wind=31.23, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:32:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:30:00')
2026-02-15T20:32:45.852 [DEBUG] [Thread-210753] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:32:45.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:32:45.947 [DEBUG] [Thread-210756] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-15T20:32:45.948 [DEBUG] [Thread-210756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:32:45.962 [DEBUG] [Thread-210756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:32:45.962 [INFO] [Thread-210756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:32:45.970 [DEBUG] [Thread-210756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] client lang: <none>
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] server lang: <none>
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] kex follows: False
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] Compression: none
2026-02-15T20:32:45.971 [DEBUG] [Thread-210756] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:32:46.029 [DEBUG] [Thread-210756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:32:46.030 [DEBUG] [Thread-210756] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:32:46.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:32:46.032 [DEBUG] [Thread-210756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:32:46.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:32:46.086 [DEBUG] [Thread-210756] [transport.py] [_log()] userauth is OK
2026-02-15T20:32:46.086 [DEBUG] [Thread-210756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:32:46.086 [DEBUG] [Thread-210756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:32:46.086 [DEBUG] [Thread-210756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:32:46.086 [DEBUG] [Thread-210756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:32:46.105 [INFO] [Thread-210756] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:32:46.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:32:46.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:32:46.934 [DEBUG] [Thread-210756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:32:46.934 [DEBUG] [Thread-210756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:32:46.982 [DEBUG] [Thread-210756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:32:46.982 [DEBUG] [Thread-210756] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:32:46.991 [DEBUG] [Thread-210756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:32:47.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:32:47.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:32:47.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:32:47.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:32:47.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:32:47.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:32:47.026 [DEBUG] [Thread-210756] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:32:47.050 [DEBUG] [Thread-210758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:32:49.081 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:02.098 [DEBUG] [Thread-210759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:07.992 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:09.653 [DEBUG] [Thread-210760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:12.843 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:17.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:33:17.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:33:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:33:17.134 [DEBUG] [Thread-210761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 33, 10), 15.34, 35.66, 0.0, 30.05, 17.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:33:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:33:10
2026-02-15T20:33:19.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:33:19.423 [DEBUG] [Thread-210762] [transport.py] [_log()] starting thread (client mode): 0xa57e26e0
2026-02-15T20:33:19.423 [DEBUG] [Thread-210762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:33:19.442 [DEBUG] [Thread-210762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:33:19.442 [INFO] [Thread-210762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:33:19.445 [DEBUG] [Thread-210762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:33:19.445 [DEBUG] [Thread-210762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:33:19.445 [DEBUG] [Thread-210762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] client lang: <none>
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] server lang: <none>
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] kex follows: False
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] Compression: none
2026-02-15T20:33:19.446 [DEBUG] [Thread-210762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:33:19.462 [DEBUG] [Thread-210762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:33:19.463 [DEBUG] [Thread-210762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:33:19.463 [DEBUG] [Thread-210762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:33:19.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:33:19.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:33:19.465 [DEBUG] [Thread-210762] [transport.py] [_log()] userauth is OK
2026-02-15T20:33:19.465 [DEBUG] [Thread-210762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:33:19.465 [DEBUG] [Thread-210762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:33:19.465 [DEBUG] [Thread-210762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:33:19.465 [DEBUG] [Thread-210762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:33:19.480 [INFO] [Thread-210762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:33:19.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:33:20.125 [DEBUG] [Thread-210762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:33:20.125 [DEBUG] [Thread-210762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:33:20.125 [DEBUG] [Thread-210762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:33:20.165 [DEBUG] [Thread-210762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:33:20.166 [DEBUG] [Thread-210762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:33:20.169 [DEBUG] [Thread-210762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:33:20.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:33:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:33:20.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:33:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:33:20.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:33:20.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:33:20.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:33:20.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.772674 -999.00  +17.00  22.88     41   +3.60 1 1 1 1 1     0    0 13.78 28.18 ZNESW 20.2 22.9 158.4 32.4 17.1 -24.8 17.1 -23.7 16.9 -22.6 17.2 -23.9
2026-02-15T20:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.772674
2026-02-15T20:33:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:33:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:33:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:33:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:33:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:33:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:33:10', tmtdew=15.34, humidity=35.66, cloud=0.0, wind=30.05, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:32:39.034', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:30:00')
2026-02-15T20:33:20.197 [DEBUG] [Thread-210762] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:33:20.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:33:20.303 [DEBUG] [Thread-210765] [transport.py] [_log()] starting thread (client mode): 0xa57702e0
2026-02-15T20:33:20.303 [DEBUG] [Thread-210765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:33:20.318 [DEBUG] [Thread-210765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:33:20.318 [INFO] [Thread-210765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:33:20.326 [DEBUG] [Thread-210765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:33:20.326 [DEBUG] [Thread-210765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:33:20.326 [DEBUG] [Thread-210765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] client lang: <none>
2026-02-15T20:33:20.327 [DEBUG] [Thread-210765] [transport.py] [_log()] server lang: <none>
2026-02-15T20:33:20.328 [DEBUG] [Thread-210765] [transport.py] [_log()] kex follows: False
2026-02-15T20:33:20.328 [DEBUG] [Thread-210765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:33:20.328 [DEBUG] [Thread-210765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:33:20.328 [DEBUG] [Thread-210765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:33:20.328 [DEBUG] [Thread-210765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:33:20.328 [DEBUG] [Thread-210765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:33:20.329 [DEBUG] [Thread-210765] [transport.py] [_log()] Compression: none
2026-02-15T20:33:20.329 [DEBUG] [Thread-210765] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:33:20.390 [DEBUG] [Thread-210765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:33:20.391 [DEBUG] [Thread-210765] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:33:20.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:33:20.392 [DEBUG] [Thread-210765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:33:20.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:33:20.449 [DEBUG] [Thread-210765] [transport.py] [_log()] userauth is OK
2026-02-15T20:33:20.450 [DEBUG] [Thread-210765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:33:20.450 [DEBUG] [Thread-210765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:33:20.450 [DEBUG] [Thread-210765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:33:20.450 [DEBUG] [Thread-210765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:33:20.480 [INFO] [Thread-210765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:33:20.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:33:20.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:33:20.680 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:21.277 [DEBUG] [Thread-210765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:33:21.277 [DEBUG] [Thread-210765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:33:21.326 [DEBUG] [Thread-210765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:33:21.326 [DEBUG] [Thread-210765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:33:21.335 [DEBUG] [Thread-210765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:33:21.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:33:21.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:33:21.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:33:21.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:33:21.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:33:21.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:33:21.375 [DEBUG] [Thread-210765] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:33:24.784 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:26.951 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:28.325 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:28.326 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:32.168 [DEBUG] [Thread-210767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:45.887 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:47.222 [DEBUG] [Thread-210768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:33:51.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:33:51.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:33:51.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:33:53.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 33, 46), 15.34, 35.65, 0.0, 28.57, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:33:53.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:33:46
2026-02-15T20:33:53.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:33:53.672 [DEBUG] [Thread-210769] [transport.py] [_log()] starting thread (client mode): 0xa2d55f60
2026-02-15T20:33:53.672 [DEBUG] [Thread-210769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:33:53.693 [DEBUG] [Thread-210769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:33:53.693 [INFO] [Thread-210769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] client lang: <none>
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] server lang: <none>
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] kex follows: False
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:33:53.696 [DEBUG] [Thread-210769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:33:53.697 [DEBUG] [Thread-210769] [transport.py] [_log()] Compression: none
2026-02-15T20:33:53.697 [DEBUG] [Thread-210769] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:33:53.714 [DEBUG] [Thread-210769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:33:53.715 [DEBUG] [Thread-210769] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:33:53.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:33:53.716 [DEBUG] [Thread-210769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:33:53.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:33:53.718 [DEBUG] [Thread-210769] [transport.py] [_log()] userauth is OK
2026-02-15T20:33:53.718 [DEBUG] [Thread-210769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:33:53.718 [DEBUG] [Thread-210769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:33:53.718 [DEBUG] [Thread-210769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:33:53.719 [DEBUG] [Thread-210769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:33:53.743 [INFO] [Thread-210769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:33:53.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:33:54.544 [DEBUG] [Thread-210769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:33:54.544 [DEBUG] [Thread-210769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:33:54.545 [DEBUG] [Thread-210769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:33:54.585 [DEBUG] [Thread-210769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:33:54.586 [DEBUG] [Thread-210769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:33:54.589 [DEBUG] [Thread-210769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:33:54.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:33:54.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:33:54.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:33:54.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:33:54.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:33:54.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:33:54.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:33:54.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:33:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:33:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.773021 -999.00  +17.00  24.30     41   +3.60 1 1 1 1 1     0    0 14.21 27.74 ZNESW 24.1 24.3 146.8 29.6 17.2 -24.8 17.1 -23.7 16.9 -22.7 17.2 -23.9
2026-02-15T20:33:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:33:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:33:54.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.773021
2026-02-15T20:33:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:33:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:33:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:33:54.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:33:54.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:33:54.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:33:46', tmtdew=15.34, humidity=35.65, cloud=0.0, wind=28.57, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:33:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:30:00')
2026-02-15T20:33:54.617 [DEBUG] [Thread-210769] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:33:54.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:33:54.715 [DEBUG] [Thread-210772] [transport.py] [_log()] starting thread (client mode): 0xa2dc2890
2026-02-15T20:33:54.715 [DEBUG] [Thread-210772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:33:54.729 [DEBUG] [Thread-210772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:33:54.729 [INFO] [Thread-210772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:33:54.736 [DEBUG] [Thread-210772] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:33:54.736 [DEBUG] [Thread-210772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:33:54.736 [DEBUG] [Thread-210772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:33:54.736 [DEBUG] [Thread-210772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:54.736 [DEBUG] [Thread-210772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:33:54.736 [DEBUG] [Thread-210772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] client lang: <none>
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] server lang: <none>
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] kex follows: False
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] Compression: none
2026-02-15T20:33:54.737 [DEBUG] [Thread-210772] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:33:54.797 [DEBUG] [Thread-210772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:33:54.798 [DEBUG] [Thread-210772] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:33:54.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:33:54.799 [DEBUG] [Thread-210772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:33:54.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:33:54.856 [DEBUG] [Thread-210772] [transport.py] [_log()] userauth is OK
2026-02-15T20:33:54.856 [DEBUG] [Thread-210772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:33:54.856 [DEBUG] [Thread-210772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:33:54.856 [DEBUG] [Thread-210772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:33:54.856 [DEBUG] [Thread-210772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:33:54.870 [INFO] [Thread-210772] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:33:54.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:33:54.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:33:55.693 [DEBUG] [Thread-210772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:33:55.693 [DEBUG] [Thread-210772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:33:55.740 [DEBUG] [Thread-210772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:33:55.741 [DEBUG] [Thread-210772] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:33:55.750 [DEBUG] [Thread-210772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:33:55.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:33:55.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:33:55.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:33:55.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:33:55.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:33:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:33:55.787 [DEBUG] [Thread-210772] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:34:02.259 [DEBUG] [Thread-210774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:04.870 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:09.711 [DEBUG] [Thread-210775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:17.314 [DEBUG] [Thread-210776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:23.557 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:25.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:34:25.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:34:25.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:34:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 33, 46), 15.34, 35.65, 0.0, 28.57, 17.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:34:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:33:46
2026-02-15T20:34:28.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:34:28.250 [DEBUG] [Thread-210777] [transport.py] [_log()] starting thread (client mode): 0xa2d68880
2026-02-15T20:34:28.251 [DEBUG] [Thread-210777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:34:28.270 [DEBUG] [Thread-210777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:34:28.270 [INFO] [Thread-210777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:34:28.273 [DEBUG] [Thread-210777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] client lang: <none>
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] server lang: <none>
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] kex follows: False
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:34:28.274 [DEBUG] [Thread-210777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:34:28.275 [DEBUG] [Thread-210777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:34:28.275 [DEBUG] [Thread-210777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:34:28.275 [DEBUG] [Thread-210777] [transport.py] [_log()] Compression: none
2026-02-15T20:34:28.275 [DEBUG] [Thread-210777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:34:28.295 [DEBUG] [Thread-210777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:34:28.297 [DEBUG] [Thread-210777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:34:28.298 [DEBUG] [Thread-210777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:34:28.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:34:28.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:34:28.300 [DEBUG] [Thread-210777] [transport.py] [_log()] userauth is OK
2026-02-15T20:34:28.300 [DEBUG] [Thread-210777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:34:28.300 [DEBUG] [Thread-210777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:34:28.300 [DEBUG] [Thread-210777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:34:28.300 [DEBUG] [Thread-210777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:34:28.335 [INFO] [Thread-210777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:34:28.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:34:28.529 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:28.530 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:28.975 [DEBUG] [Thread-210777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:34:28.975 [DEBUG] [Thread-210777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:34:28.976 [DEBUG] [Thread-210777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:34:29.016 [DEBUG] [Thread-210777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:34:29.016 [DEBUG] [Thread-210777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:34:29.020 [DEBUG] [Thread-210777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:34:29.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:34:29.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:34:29.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:34:29.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:34:29.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:34:29.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:34:29.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:34:29.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:34:29.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:34:29.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.773368 -999.00  +17.00  23.38     41   +3.60 1 1 1 1 1     0    0 14.08 26.85 ZNESW 20.9 23.4 153.6 33.0 17.2 -24.8 17.1 -23.7 16.9 -22.6 17.1 -24.0
2026-02-15T20:34:29.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:34:29.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:34:29.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.773368
2026-02-15T20:34:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:34:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:34:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:34:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:34:29.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:34:29.044 [DEBUG] [Thread-210777] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:34:29.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:33:46', tmtdew=15.34, humidity=35.65, cloud=0.0, wind=28.57, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:33:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:30:00')
2026-02-15T20:34:29.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:34:29.139 [DEBUG] [Thread-210780] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-15T20:34:29.139 [DEBUG] [Thread-210780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:34:29.154 [DEBUG] [Thread-210780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:34:29.154 [INFO] [Thread-210780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:34:29.162 [DEBUG] [Thread-210780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:34:29.162 [DEBUG] [Thread-210780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:34:29.162 [DEBUG] [Thread-210780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:34:29.162 [DEBUG] [Thread-210780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:34:29.162 [DEBUG] [Thread-210780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:34:29.162 [DEBUG] [Thread-210780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] client lang: <none>
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] server lang: <none>
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] kex follows: False
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] Compression: none
2026-02-15T20:34:29.163 [DEBUG] [Thread-210780] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:34:29.220 [DEBUG] [Thread-210780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:34:29.220 [DEBUG] [Thread-210780] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:34:29.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:34:29.222 [DEBUG] [Thread-210780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:34:29.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:34:29.276 [DEBUG] [Thread-210780] [transport.py] [_log()] userauth is OK
2026-02-15T20:34:29.277 [DEBUG] [Thread-210780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:34:29.277 [DEBUG] [Thread-210780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:34:29.277 [DEBUG] [Thread-210780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:34:29.277 [DEBUG] [Thread-210780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:34:29.302 [INFO] [Thread-210780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:34:29.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:34:29.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:34:30.154 [DEBUG] [Thread-210780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:34:30.154 [DEBUG] [Thread-210780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:34:30.202 [DEBUG] [Thread-210780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:34:30.203 [DEBUG] [Thread-210780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:34:30.212 [DEBUG] [Thread-210780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:34:30.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:34:30.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:34:30.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:34:30.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:34:30.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:34:30.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:34:30.249 [DEBUG] [Thread-210780] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:34:32.349 [DEBUG] [Thread-210782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:42.217 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:47.401 [DEBUG] [Thread-210783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:47.408 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:34:56.104 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:00.186 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:00.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:35:00.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:35:00.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:35:00.872 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:02.434 [DEBUG] [Thread-210784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:02.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 34, 21), 15.34, 35.65, 0.0, 33.19, 17.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:35:02.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:34:21
2026-02-15T20:35:02.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:35:02.989 [DEBUG] [Thread-210785] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T20:35:02.989 [DEBUG] [Thread-210785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:35:03.007 [DEBUG] [Thread-210785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:35:03.008 [INFO] [Thread-210785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:35:03.011 [DEBUG] [Thread-210785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:35:03.011 [DEBUG] [Thread-210785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:35:03.011 [DEBUG] [Thread-210785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:35:03.011 [DEBUG] [Thread-210785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:03.011 [DEBUG] [Thread-210785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:03.011 [DEBUG] [Thread-210785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] client lang: <none>
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] server lang: <none>
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] kex follows: False
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] Compression: none
2026-02-15T20:35:03.012 [DEBUG] [Thread-210785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:35:03.021 [DEBUG] [Thread-210785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:35:03.022 [DEBUG] [Thread-210785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:35:03.022 [DEBUG] [Thread-210785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:35:03.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:35:03.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:35:03.023 [DEBUG] [Thread-210785] [transport.py] [_log()] userauth is OK
2026-02-15T20:35:03.024 [DEBUG] [Thread-210785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:35:03.024 [DEBUG] [Thread-210785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:35:03.024 [DEBUG] [Thread-210785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:35:03.024 [DEBUG] [Thread-210785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:35:03.047 [INFO] [Thread-210785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:35:03.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:35:07.006 [DEBUG] [Thread-210785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:35:07.007 [DEBUG] [Thread-210785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:35:07.007 [DEBUG] [Thread-210785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:35:07.047 [DEBUG] [Thread-210785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:35:07.047 [DEBUG] [Thread-210785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:35:07.051 [DEBUG] [Thread-210785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:35:07.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:35:07.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:35:07.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:35:07.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:35:07.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:35:07.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:35:07.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:35:07.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:35:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:35:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.774062 -999.00  +17.00  24.18     41   +3.60 1 1 1 1 1     0    0 13.79 25.57 ZNESW 20.0 24.2 150.6 34.9 17.1 -24.8 17.1 -23.6 16.9 -22.6 17.1 -23.6
2026-02-15T20:35:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:35:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:35:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.774062
2026-02-15T20:35:07.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:35:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:35:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:35:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:35:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:35:07.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:34:21', tmtdew=15.34, humidity=35.65, cloud=0.0, wind=33.19, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:34:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:33:00')
2026-02-15T20:35:07.080 [DEBUG] [Thread-210785] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:35:07.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:35:07.175 [DEBUG] [Thread-210788] [transport.py] [_log()] starting thread (client mode): 0xa57b0fa0
2026-02-15T20:35:07.175 [DEBUG] [Thread-210788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:35:07.191 [DEBUG] [Thread-210788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:35:07.191 [INFO] [Thread-210788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:35:07.198 [DEBUG] [Thread-210788] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:07.199 [DEBUG] [Thread-210788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] client lang: <none>
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] server lang: <none>
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] kex follows: False
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:35:07.200 [DEBUG] [Thread-210788] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:35:07.201 [DEBUG] [Thread-210788] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:35:07.201 [DEBUG] [Thread-210788] [transport.py] [_log()] Compression: none
2026-02-15T20:35:07.201 [DEBUG] [Thread-210788] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:35:07.255 [DEBUG] [Thread-210788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:35:07.256 [DEBUG] [Thread-210788] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:35:07.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:35:07.257 [DEBUG] [Thread-210788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:35:07.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:35:07.311 [DEBUG] [Thread-210788] [transport.py] [_log()] userauth is OK
2026-02-15T20:35:07.311 [DEBUG] [Thread-210788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:35:07.311 [DEBUG] [Thread-210788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:35:07.312 [DEBUG] [Thread-210788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:35:07.312 [DEBUG] [Thread-210788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:35:07.330 [INFO] [Thread-210788] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:35:07.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:35:07.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:35:08.219 [DEBUG] [Thread-210788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:35:08.222 [DEBUG] [Thread-210788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:35:08.267 [DEBUG] [Thread-210788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:35:08.267 [DEBUG] [Thread-210788] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:35:08.276 [DEBUG] [Thread-210788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:35:08.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:35:08.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:35:08.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:35:08.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:35:08.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:35:08.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:35:08.310 [DEBUG] [Thread-210788] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:35:09.778 [DEBUG] [Thread-210790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:17.475 [DEBUG] [Thread-210791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:19.786 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:28.728 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:28.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:32.529 [DEBUG] [Thread-210792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:38.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:35:38.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:35:38.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:35:38.710 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:40.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 35, 32), 15.31, 35.6, 0.0, 30.01, 17.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:35:40.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:35:32
2026-02-15T20:35:40.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:35:40.616 [DEBUG] [Thread-210793] [transport.py] [_log()] starting thread (client mode): 0xa5771e70
2026-02-15T20:35:40.616 [DEBUG] [Thread-210793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:35:40.637 [DEBUG] [Thread-210793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:35:40.637 [INFO] [Thread-210793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:35:40.641 [DEBUG] [Thread-210793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] client lang: <none>
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] server lang: <none>
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] kex follows: False
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] Compression: none
2026-02-15T20:35:40.642 [DEBUG] [Thread-210793] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:35:40.660 [DEBUG] [Thread-210793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:35:40.661 [DEBUG] [Thread-210793] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:35:40.661 [DEBUG] [Thread-210793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:35:40.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:35:40.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:35:40.664 [DEBUG] [Thread-210793] [transport.py] [_log()] userauth is OK
2026-02-15T20:35:40.664 [DEBUG] [Thread-210793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:35:40.664 [DEBUG] [Thread-210793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:35:40.664 [DEBUG] [Thread-210793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:35:40.664 [DEBUG] [Thread-210793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:35:40.690 [INFO] [Thread-210793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:35:40.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:35:41.327 [DEBUG] [Thread-210793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:35:41.327 [DEBUG] [Thread-210793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:35:41.328 [DEBUG] [Thread-210793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:35:41.368 [DEBUG] [Thread-210793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:35:41.369 [DEBUG] [Thread-210793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:35:41.372 [DEBUG] [Thread-210793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:35:41.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:35:41.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:35:41.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:35:41.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:35:41.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:35:41.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:35:41.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:35:41.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:35:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:35:41.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.774409 -999.00  +17.00  19.08     41   +3.60 1 1 1 1 1     0    0 13.96 25.23 ZNESW 28.2 19.1 144.8 34.3 17.1 -24.7 17.1 -23.7 16.8 -22.3 17.1 -23.9
2026-02-15T20:35:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:35:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:35:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.774409
2026-02-15T20:35:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:35:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:35:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:35:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:35:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:35:41.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:35:32', tmtdew=15.31, humidity=35.6, cloud=0.0, wind=30.01, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:35:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:33:00')
2026-02-15T20:35:41.402 [DEBUG] [Thread-210793] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:35:41.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:35:41.497 [DEBUG] [Thread-210796] [transport.py] [_log()] starting thread (client mode): 0xa57d4d90
2026-02-15T20:35:41.498 [DEBUG] [Thread-210796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:35:41.512 [DEBUG] [Thread-210796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:35:41.512 [INFO] [Thread-210796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:35:41.520 [DEBUG] [Thread-210796] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:35:41.520 [DEBUG] [Thread-210796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:35:41.520 [DEBUG] [Thread-210796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] client lang: <none>
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] server lang: <none>
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] kex follows: False
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] Compression: none
2026-02-15T20:35:41.521 [DEBUG] [Thread-210796] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:35:41.578 [DEBUG] [Thread-210796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:35:41.578 [DEBUG] [Thread-210796] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:35:41.579 [DEBUG] [Thread-210796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:35:41.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:35:41.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:35:41.635 [DEBUG] [Thread-210796] [transport.py] [_log()] userauth is OK
2026-02-15T20:35:41.635 [DEBUG] [Thread-210796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:35:41.635 [DEBUG] [Thread-210796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:35:41.635 [DEBUG] [Thread-210796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:35:41.635 [DEBUG] [Thread-210796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:35:41.658 [INFO] [Thread-210796] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:35:41.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:35:41.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:35:42.474 [DEBUG] [Thread-210796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:35:42.474 [DEBUG] [Thread-210796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:35:42.522 [DEBUG] [Thread-210796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:35:42.523 [DEBUG] [Thread-210796] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:35:42.532 [DEBUG] [Thread-210796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:35:42.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:35:42.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:35:42.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:35:42.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:35:42.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:35:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:35:42.568 [DEBUG] [Thread-210796] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:35:47.566 [DEBUG] [Thread-210798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:35:57.385 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:02.618 [DEBUG] [Thread-210799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:09.845 [DEBUG] [Thread-210800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:12.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:36:12.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:36:12.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:36:14.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 35, 32), 15.31, 35.6, 0.0, 30.01, 17.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:36:14.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:35:32
2026-02-15T20:36:14.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:36:15.134 [DEBUG] [Thread-210801] [transport.py] [_log()] starting thread (client mode): 0xa5770850
2026-02-15T20:36:15.134 [DEBUG] [Thread-210801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:36:15.155 [DEBUG] [Thread-210801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:36:15.155 [INFO] [Thread-210801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:36:15.158 [DEBUG] [Thread-210801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:36:15.158 [DEBUG] [Thread-210801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] client lang: <none>
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] server lang: <none>
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] kex follows: False
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] Compression: none
2026-02-15T20:36:15.159 [DEBUG] [Thread-210801] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:36:15.176 [DEBUG] [Thread-210801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:36:15.177 [DEBUG] [Thread-210801] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:36:15.177 [DEBUG] [Thread-210801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:36:15.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:36:15.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:36:15.179 [DEBUG] [Thread-210801] [transport.py] [_log()] userauth is OK
2026-02-15T20:36:15.180 [DEBUG] [Thread-210801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:36:15.180 [DEBUG] [Thread-210801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:36:15.180 [DEBUG] [Thread-210801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:36:15.180 [DEBUG] [Thread-210801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:36:15.195 [INFO] [Thread-210801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:36:15.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:36:15.822 [DEBUG] [Thread-210801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:36:15.822 [DEBUG] [Thread-210801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:36:15.823 [DEBUG] [Thread-210801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:36:15.863 [DEBUG] [Thread-210801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:36:15.864 [DEBUG] [Thread-210801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:36:15.868 [DEBUG] [Thread-210801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:36:15.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:36:15.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:36:15.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:36:15.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:36:15.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:36:15.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:36:15.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:36:15.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:36:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:36:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.774757 -999.00  +17.00  23.57     40   +3.60 1 1 1 1 1     0    0 14.11 24.79 ZNESW 23.0 23.6 128.6 32.5 17.1 -24.7 17.1 -23.6 16.9 -22.5 17.1 -23.7
2026-02-15T20:36:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:36:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:36:15.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.774757
2026-02-15T20:36:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:36:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:36:15.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:36:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:36:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:36:15.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:35:32', tmtdew=15.31, humidity=35.6, cloud=0.0, wind=30.01, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T01:26:10', seeing=2.87, atlas_timestamp='2026-02-15T18:35:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:33:00')
2026-02-15T20:36:15.894 [DEBUG] [Thread-210801] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:36:15.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:36:16.001 [DEBUG] [Thread-210804] [transport.py] [_log()] starting thread (client mode): 0xa5771420
2026-02-15T20:36:16.001 [DEBUG] [Thread-210804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:36:16.016 [DEBUG] [Thread-210804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:36:16.016 [INFO] [Thread-210804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:36:16.024 [DEBUG] [Thread-210804] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] client lang: <none>
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] server lang: <none>
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] kex follows: False
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:36:16.025 [DEBUG] [Thread-210804] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:36:16.026 [DEBUG] [Thread-210804] [transport.py] [_log()] Compression: none
2026-02-15T20:36:16.026 [DEBUG] [Thread-210804] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:36:16.053 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:16.083 [DEBUG] [Thread-210804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:36:16.083 [DEBUG] [Thread-210804] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:36:16.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:36:16.085 [DEBUG] [Thread-210804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:36:16.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:36:16.139 [DEBUG] [Thread-210804] [transport.py] [_log()] userauth is OK
2026-02-15T20:36:16.139 [DEBUG] [Thread-210804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:36:16.139 [DEBUG] [Thread-210804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:36:16.139 [DEBUG] [Thread-210804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:36:16.139 [DEBUG] [Thread-210804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:36:16.158 [INFO] [Thread-210804] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:36:16.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:36:16.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:36:16.969 [DEBUG] [Thread-210804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:36:16.969 [DEBUG] [Thread-210804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:36:17.018 [DEBUG] [Thread-210804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:36:17.018 [DEBUG] [Thread-210804] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:36:17.030 [DEBUG] [Thread-210804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:36:17.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:36:17.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:36:17.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:36:17.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:36:17.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:36:17.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:36:17.066 [DEBUG] [Thread-210804] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:36:17.656 [DEBUG] [Thread-210806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:22.709 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:28.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:28.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:32.704 [DEBUG] [Thread-210807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:34.761 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:47.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:36:47.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:36:47.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:36:47.738 [DEBUG] [Thread-210808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:36:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 36, 7), 15.32, 35.58, 0.0, 30.51, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:36:48.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:36:07
2026-02-15T20:36:49.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:36:49.502 [DEBUG] [Thread-210809] [transport.py] [_log()] starting thread (client mode): 0xa2d55180
2026-02-15T20:36:49.502 [DEBUG] [Thread-210809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:36:49.522 [DEBUG] [Thread-210809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:36:49.522 [INFO] [Thread-210809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] client lang: <none>
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] server lang: <none>
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] kex follows: False
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:36:49.526 [DEBUG] [Thread-210809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:36:49.527 [DEBUG] [Thread-210809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:36:49.527 [DEBUG] [Thread-210809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:36:49.527 [DEBUG] [Thread-210809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:36:49.527 [DEBUG] [Thread-210809] [transport.py] [_log()] Compression: none
2026-02-15T20:36:49.527 [DEBUG] [Thread-210809] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:36:49.545 [DEBUG] [Thread-210809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:36:49.546 [DEBUG] [Thread-210809] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:36:49.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:36:49.547 [DEBUG] [Thread-210809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:36:49.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:36:49.549 [DEBUG] [Thread-210809] [transport.py] [_log()] userauth is OK
2026-02-15T20:36:49.549 [DEBUG] [Thread-210809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:36:49.549 [DEBUG] [Thread-210809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:36:49.549 [DEBUG] [Thread-210809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:36:49.549 [DEBUG] [Thread-210809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:36:49.573 [INFO] [Thread-210809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:36:49.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:36:50.190 [DEBUG] [Thread-210809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:36:50.190 [DEBUG] [Thread-210809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:36:50.190 [DEBUG] [Thread-210809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:36:50.232 [DEBUG] [Thread-210809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:36:50.232 [DEBUG] [Thread-210809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:36:50.236 [DEBUG] [Thread-210809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:36:50.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:36:50.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:36:50.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:36:50.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:36:50.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:36:50.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:36:50.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:36:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:36:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:36:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.775104 -999.00  +17.00  23.01     40   +3.60 1 1 1 1 1     0    0 14.05 23.76 ZNESW 21.4 23.0 164.8 28.6 17.1 -24.7 17.1 -23.6 16.9 -22.5 17.1 -23.9
2026-02-15T20:36:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:36:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:36:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.775104
2026-02-15T20:36:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:36:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:36:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:36:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:36:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:36:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:36:07', tmtdew=15.32, humidity=35.58, cloud=0.0, wind=30.51, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:36:42', seeing=2.75, atlas_timestamp='2026-02-15T18:36:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:33:00')
2026-02-15T20:36:50.266 [DEBUG] [Thread-210809] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:36:50.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:36:50.363 [DEBUG] [Thread-210812] [transport.py] [_log()] starting thread (client mode): 0xa2d6cf40
2026-02-15T20:36:50.363 [DEBUG] [Thread-210812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:36:50.379 [DEBUG] [Thread-210812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:36:50.379 [INFO] [Thread-210812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:36:50.388 [DEBUG] [Thread-210812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] client lang: <none>
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] server lang: <none>
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] kex follows: False
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] Compression: none
2026-02-15T20:36:50.389 [DEBUG] [Thread-210812] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:36:50.450 [DEBUG] [Thread-210812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:36:50.451 [DEBUG] [Thread-210812] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:36:50.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:36:50.452 [DEBUG] [Thread-210812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:36:50.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:36:50.506 [DEBUG] [Thread-210812] [transport.py] [_log()] userauth is OK
2026-02-15T20:36:50.507 [DEBUG] [Thread-210812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:36:50.507 [DEBUG] [Thread-210812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:36:50.507 [DEBUG] [Thread-210812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:36:50.507 [DEBUG] [Thread-210812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:36:50.531 [INFO] [Thread-210812] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:36:50.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:36:50.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:36:51.396 [DEBUG] [Thread-210812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:36:51.396 [DEBUG] [Thread-210812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:36:51.444 [DEBUG] [Thread-210812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:36:51.444 [DEBUG] [Thread-210812] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:36:51.453 [DEBUG] [Thread-210812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:36:51.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:36:51.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:36:51.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:36:51.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:36:51.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:36:51.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:36:51.490 [DEBUG] [Thread-210812] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:36:53.709 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:02.775 [DEBUG] [Thread-210814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:09.922 [DEBUG] [Thread-210815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:12.408 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:17.840 [DEBUG] [Thread-210816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:21.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:37:21.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:37:21.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:37:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 36, 42), 15.55, 35.13, 0.0, 35.35, 17.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:37:23.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:36:42
2026-02-15T20:37:23.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:37:23.873 [DEBUG] [Thread-210817] [transport.py] [_log()] starting thread (client mode): 0xa2d6dde0
2026-02-15T20:37:23.873 [DEBUG] [Thread-210817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:37:23.892 [DEBUG] [Thread-210817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:37:23.892 [INFO] [Thread-210817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] client lang: <none>
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] server lang: <none>
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] kex follows: False
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] Compression: none
2026-02-15T20:37:23.895 [DEBUG] [Thread-210817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:37:23.908 [DEBUG] [Thread-210817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:37:23.908 [DEBUG] [Thread-210817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:37:23.908 [DEBUG] [Thread-210817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:37:23.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:37:23.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:37:23.909 [DEBUG] [Thread-210817] [transport.py] [_log()] userauth is OK
2026-02-15T20:37:23.909 [DEBUG] [Thread-210817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:37:23.909 [DEBUG] [Thread-210817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:37:23.909 [DEBUG] [Thread-210817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:37:23.909 [DEBUG] [Thread-210817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:37:23.924 [INFO] [Thread-210817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:37:23.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:37:24.575 [DEBUG] [Thread-210817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:37:24.575 [DEBUG] [Thread-210817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:37:24.575 [DEBUG] [Thread-210817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:37:24.616 [DEBUG] [Thread-210817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:37:24.616 [DEBUG] [Thread-210817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:37:24.618 [DEBUG] [Thread-210817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:37:24.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:37:24.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:37:24.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:37:24.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:37:24.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:37:24.637 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:37:24.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.775451 -999.00  +17.00  22.20     41   +3.60 1 1 1 1 1     0    0 13.88 22.62 ZNESW 18.3 22.2 161.8 27.9 17.1 -24.7 -999.0 -999.0 16.8 -22.5 17.1 -23.7
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.775451
2026-02-15T20:37:24.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:37:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:37:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:37:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:37:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:37:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:36:42', tmtdew=15.55, humidity=35.13, cloud=0.0, wind=35.35, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:37:18', seeing=2.15, atlas_timestamp='2026-02-15T18:36:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.023749999999999716, 0.011250000000000426, -0.024499999999999744, -0.006499999999999062, 0.030250000000000554, -0.04499999999999993, 0.013749999999999929, 0.036999999999999034, -0.013500000000000512, 0.02224999999999966, 0.009000000000000341, 0.09699999999999953, 0.07124999999999915, 0.0024999999999995026, -0.0730000000000004, 0.01774999999999949, 0.016500000000000625, -0.004000000000001336, -0.06575000000000131, 0.05999999999999872, 0.07174999999999798, 0.02575000000000216, -0.017250000000000654, -0.012000000000000455, 0.046499999999999986, -0.017250000000000654, 0.0045000000000001705, 0.15600000000000058, 0.060000000000002274, 0.03500000000000014, 0.015000000000000568, 0.05424999999999969], zp_timestamp='2026-02-15T18:33:00')
2026-02-15T20:37:24.638 [DEBUG] [Thread-210817] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:37:24.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:37:24.722 [DEBUG] [Thread-210820] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-15T20:37:24.722 [DEBUG] [Thread-210820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:37:24.736 [DEBUG] [Thread-210820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:37:24.737 [INFO] [Thread-210820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:24.746 [DEBUG] [Thread-210820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] client lang: <none>
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] server lang: <none>
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] kex follows: False
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] Compression: none
2026-02-15T20:37:24.747 [DEBUG] [Thread-210820] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:37:24.804 [DEBUG] [Thread-210820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:37:24.805 [DEBUG] [Thread-210820] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:37:24.805 [DEBUG] [Thread-210820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:37:24.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:37:24.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:37:24.862 [DEBUG] [Thread-210820] [transport.py] [_log()] userauth is OK
2026-02-15T20:37:24.862 [DEBUG] [Thread-210820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:37:24.862 [DEBUG] [Thread-210820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:37:24.862 [DEBUG] [Thread-210820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:37:24.862 [DEBUG] [Thread-210820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:37:24.875 [INFO] [Thread-210820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:37:24.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:37:24.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:37:25.717 [DEBUG] [Thread-210820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:37:25.717 [DEBUG] [Thread-210820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:37:25.765 [DEBUG] [Thread-210820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:37:25.765 [DEBUG] [Thread-210820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:37:25.773 [DEBUG] [Thread-210820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:37:25.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:37:25.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:37:25.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:37:25.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:37:25.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:37:25.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:37:25.806 [DEBUG] [Thread-210820] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:37:29.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:29.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:31.066 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:32.865 [DEBUG] [Thread-210822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:47.900 [DEBUG] [Thread-210823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:49.617 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:49.715 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:52.776 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:55.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:37:55.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:37:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:37:57.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 37, 17), 15.32, 35.56, 0.0, 29.93, 17.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:37:57.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:37:17
2026-02-15T20:37:57.813 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:37:58.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:37:58.253 [DEBUG] [Thread-210824] [transport.py] [_log()] starting thread (client mode): 0xa57d6470
2026-02-15T20:37:58.253 [DEBUG] [Thread-210824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:37:58.272 [DEBUG] [Thread-210824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:37:58.272 [INFO] [Thread-210824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] client lang: <none>
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] server lang: <none>
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] kex follows: False
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:37:58.275 [DEBUG] [Thread-210824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:37:58.276 [DEBUG] [Thread-210824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:37:58.276 [DEBUG] [Thread-210824] [transport.py] [_log()] Compression: none
2026-02-15T20:37:58.276 [DEBUG] [Thread-210824] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:37:58.290 [DEBUG] [Thread-210824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:37:58.290 [DEBUG] [Thread-210824] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:37:58.290 [DEBUG] [Thread-210824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:37:58.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:37:58.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:37:58.291 [DEBUG] [Thread-210824] [transport.py] [_log()] userauth is OK
2026-02-15T20:37:58.291 [DEBUG] [Thread-210824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:37:58.291 [DEBUG] [Thread-210824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:37:58.291 [DEBUG] [Thread-210824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:37:58.291 [DEBUG] [Thread-210824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:37:58.300 [INFO] [Thread-210824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:37:58.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:37:59.082 [DEBUG] [Thread-210824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:37:59.082 [DEBUG] [Thread-210824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:37:59.083 [DEBUG] [Thread-210824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:37:59.124 [DEBUG] [Thread-210824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:37:59.124 [DEBUG] [Thread-210824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:37:59.126 [DEBUG] [Thread-210824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:37:59.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:37:59.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:37:59.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:37:59.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:37:59.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:37:59.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:37:59.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:37:59.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:37:59.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:37:59.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.775787 -999.00  +17.00  19.63     41   +3.60 1 1 1 1 1     0    0 13.99 24.12 ZNESW 23.4 19.6 147.6 26.6 17.1 -24.7 17.1 -23.8 16.9 -22.5 17.1 -23.9
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.775787
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:37:59.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:37:17', tmtdew=15.32, humidity=35.56, cloud=0.0, wind=29.93, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:37:53', seeing=2.27, atlas_timestamp='2026-02-15T18:37:07.997', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.01425000000000054, -0.029749999999999943, -0.006000000000000227, -0.01750000000000007, -0.018749999999998934, -0.030000000000001137, -0.023749999999999716, -0.012500000000001066, -0.03999999999999915, -0.0007500000000000284, -0.014499999999999957, 0.04699999999999882, 0.036249999999999005, -0.019999999999999574, -0.07000000000000028, -0.01774999999999949, 0.0005000000000006111, -0.034000000000000696, -0.04475000000000051, 0.05599999999999916, 0.036749999999999616, -0.013749999999999929, -0.040249999999998565, 0.022999999999999687, 0.057500000000000995, -0.008250000000000313, -0.0034999999999989484, 0.04899999999999949, -0.006999999999997897, 0.019000000000001904, -0.03249999999999886, 0.005749999999999034], zp_timestamp='2026-02-15T18:36:00')
2026-02-15T20:37:59.146 [DEBUG] [Thread-210824] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:37:59.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:37:59.231 [DEBUG] [Thread-210827] [transport.py] [_log()] starting thread (client mode): 0xa5773d00
2026-02-15T20:37:59.231 [DEBUG] [Thread-210827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:37:59.245 [DEBUG] [Thread-210827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:37:59.246 [INFO] [Thread-210827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] client lang: <none>
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] server lang: <none>
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] kex follows: False
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] Compression: none
2026-02-15T20:37:59.253 [DEBUG] [Thread-210827] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:37:59.307 [DEBUG] [Thread-210827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:37:59.307 [DEBUG] [Thread-210827] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:37:59.307 [DEBUG] [Thread-210827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:37:59.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:37:59.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:37:59.365 [DEBUG] [Thread-210827] [transport.py] [_log()] userauth is OK
2026-02-15T20:37:59.365 [DEBUG] [Thread-210827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:37:59.365 [DEBUG] [Thread-210827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:37:59.365 [DEBUG] [Thread-210827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:37:59.365 [DEBUG] [Thread-210827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:37:59.379 [INFO] [Thread-210827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:37:59.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:37:59.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:38:00.197 [DEBUG] [Thread-210827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:38:00.197 [DEBUG] [Thread-210827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:38:00.245 [DEBUG] [Thread-210827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:38:00.245 [DEBUG] [Thread-210827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:38:00.253 [DEBUG] [Thread-210827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:38:00.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:38:00.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:38:00.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:38:00.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:38:00.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:38:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:38:00.284 [DEBUG] [Thread-210827] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:38:02.925 [DEBUG] [Thread-210829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:04.189 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:08.373 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:10.062 [DEBUG] [Thread-210830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:18.029 [DEBUG] [Thread-210831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:22.633 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:27.005 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:27.039 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:29.331 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:29.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:38:30.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:38:30.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:38:32.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 37, 52), 15.38, 35.53, 0.0, 29.57, 17.05, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:38:32.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:37:52
2026-02-15T20:38:33.056 [DEBUG] [Thread-210832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:33.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:38:33.413 [DEBUG] [Thread-210833] [transport.py] [_log()] starting thread (client mode): 0xa2d6cb80
2026-02-15T20:38:33.414 [DEBUG] [Thread-210833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:38:33.425 [DEBUG] [Thread-210833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:38:33.425 [INFO] [Thread-210833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:38:33.428 [DEBUG] [Thread-210833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:38:33.428 [DEBUG] [Thread-210833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:38:33.428 [DEBUG] [Thread-210833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:38:33.428 [DEBUG] [Thread-210833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:38:33.428 [DEBUG] [Thread-210833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] client lang: <none>
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] server lang: <none>
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] kex follows: False
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] Compression: none
2026-02-15T20:38:33.429 [DEBUG] [Thread-210833] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:38:33.460 [DEBUG] [Thread-210833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:38:33.463 [DEBUG] [Thread-210833] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:38:33.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:38:33.464 [DEBUG] [Thread-210833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:38:33.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:38:33.467 [DEBUG] [Thread-210833] [transport.py] [_log()] userauth is OK
2026-02-15T20:38:33.467 [DEBUG] [Thread-210833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:38:33.467 [DEBUG] [Thread-210833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:38:33.467 [DEBUG] [Thread-210833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:38:33.467 [DEBUG] [Thread-210833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:38:33.500 [INFO] [Thread-210833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:38:33.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:38:34.141 [DEBUG] [Thread-210833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:38:34.141 [DEBUG] [Thread-210833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:38:34.141 [DEBUG] [Thread-210833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:38:34.182 [DEBUG] [Thread-210833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:38:34.182 [DEBUG] [Thread-210833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:38:34.184 [DEBUG] [Thread-210833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:38:34.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:38:34.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:38:34.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:38:34.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:38:34.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:38:34.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:38:34.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:38:34.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:38:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:38:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.776493 -999.00  +17.00  27.06     41   +3.60 1 1 1 1 1     0    0 14.02 22.00 ZNESW 30.7 27.1 151.6 33.3 17.1 -24.8 17.1 -23.7 16.9 -22.5 17.1 -23.7
2026-02-15T20:38:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:38:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:38:34.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.776493
2026-02-15T20:38:34.213 [DEBUG] [Thread-210833] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:38:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:38:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:38:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:38:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:38:34.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:38:34.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:37:52', tmtdew=15.38, humidity=35.53, cloud=0.0, wind=29.57, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:38:28', seeing=2.3, atlas_timestamp='2026-02-15T18:38:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.01425000000000054, -0.029749999999999943, -0.006000000000000227, -0.01750000000000007, -0.018749999999998934, -0.030000000000001137, -0.023749999999999716, -0.012500000000001066, -0.03999999999999915, -0.0007500000000000284, -0.014499999999999957, 0.04699999999999882, 0.036249999999999005, -0.019999999999999574, -0.07000000000000028, -0.01774999999999949, 0.0005000000000006111, -0.034000000000000696, -0.04475000000000051, 0.05599999999999916, 0.036749999999999616, -0.013749999999999929, -0.040249999999998565, 0.022999999999999687, 0.057500000000000995, -0.008250000000000313, -0.0034999999999989484, 0.04899999999999949, -0.006999999999997897, 0.019000000000001904, -0.03249999999999886, 0.005749999999999034], zp_timestamp='2026-02-15T18:36:00')
2026-02-15T20:38:34.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:38:34.319 [DEBUG] [Thread-210836] [transport.py] [_log()] starting thread (client mode): 0xa5771a50
2026-02-15T20:38:34.319 [DEBUG] [Thread-210836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:38:34.333 [DEBUG] [Thread-210836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:38:34.333 [INFO] [Thread-210836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:38:34.340 [DEBUG] [Thread-210836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] client lang: <none>
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] server lang: <none>
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] kex follows: False
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] Compression: none
2026-02-15T20:38:34.341 [DEBUG] [Thread-210836] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:38:34.396 [DEBUG] [Thread-210836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:38:34.397 [DEBUG] [Thread-210836] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:38:34.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:38:34.398 [DEBUG] [Thread-210836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:38:34.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:38:34.453 [DEBUG] [Thread-210836] [transport.py] [_log()] userauth is OK
2026-02-15T20:38:34.453 [DEBUG] [Thread-210836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:38:34.453 [DEBUG] [Thread-210836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:38:34.453 [DEBUG] [Thread-210836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:38:34.453 [DEBUG] [Thread-210836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:38:34.470 [INFO] [Thread-210836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:38:34.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:38:34.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:38:35.282 [DEBUG] [Thread-210836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:38:35.283 [DEBUG] [Thread-210836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:38:35.330 [DEBUG] [Thread-210836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:38:35.331 [DEBUG] [Thread-210836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:38:35.339 [DEBUG] [Thread-210836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:38:35.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:38:35.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:38:35.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:38:35.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:38:35.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:38:35.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:38:35.373 [DEBUG] [Thread-210836] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:38:45.745 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:46.507 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:48.084 [DEBUG] [Thread-210838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:50.918 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:38:57.020 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:01.410 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:03.160 [DEBUG] [Thread-210839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:04.480 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:05.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:39:05.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:39:05.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:39:07.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 38, 27), 15.39, 35.53, 0.0, 34.81, 17.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:39:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:38:27
2026-02-15T20:39:07.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:39:08.167 [DEBUG] [Thread-210840] [transport.py] [_log()] starting thread (client mode): 0xa57b01c0
2026-02-15T20:39:08.167 [DEBUG] [Thread-210840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:39:08.174 [DEBUG] [Thread-210840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:39:08.175 [INFO] [Thread-210840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] client lang: <none>
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] server lang: <none>
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] kex follows: False
2026-02-15T20:39:08.193 [DEBUG] [Thread-210840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:39:08.194 [DEBUG] [Thread-210840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:39:08.194 [DEBUG] [Thread-210840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:39:08.194 [DEBUG] [Thread-210840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:39:08.194 [DEBUG] [Thread-210840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:39:08.194 [DEBUG] [Thread-210840] [transport.py] [_log()] Compression: none
2026-02-15T20:39:08.194 [DEBUG] [Thread-210840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:39:08.219 [DEBUG] [Thread-210840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:39:08.220 [DEBUG] [Thread-210840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:39:08.221 [DEBUG] [Thread-210840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:39:08.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:39:08.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:39:08.224 [DEBUG] [Thread-210840] [transport.py] [_log()] userauth is OK
2026-02-15T20:39:08.224 [DEBUG] [Thread-210840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:39:08.224 [DEBUG] [Thread-210840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:39:08.224 [DEBUG] [Thread-210840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:39:08.224 [DEBUG] [Thread-210840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:39:08.235 [INFO] [Thread-210840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:39:08.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:39:08.864 [DEBUG] [Thread-210840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:39:08.865 [DEBUG] [Thread-210840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:39:08.865 [DEBUG] [Thread-210840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:39:08.905 [DEBUG] [Thread-210840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:39:08.905 [DEBUG] [Thread-210840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:39:08.908 [DEBUG] [Thread-210840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:39:08.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:39:08.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:39:08.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:39:08.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:39:08.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:39:08.929 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:39:08.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:39:08.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:39:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:39:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.776840 -999.00  +17.00  25.01     41   +3.60 1 1 1 1 1     0    0 13.86 19.61 ZNESW 17.2 25.0 149.8 36.7 17.1 -24.8 17.1 -23.7 16.9 -22.5 17.1 -24.0
2026-02-15T20:39:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:39:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:39:08.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.776840
2026-02-15T20:39:08.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:39:08.938 [DEBUG] [Thread-210840] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:39:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:39:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:39:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:39:08.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:39:08.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:38:27', tmtdew=15.39, humidity=35.53, cloud=0.0, wind=34.81, temperature=17.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:39:04', seeing=1.82, atlas_timestamp='2026-02-15T18:38:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.01425000000000054, -0.029749999999999943, -0.006000000000000227, -0.01750000000000007, -0.018749999999998934, -0.030000000000001137, -0.023749999999999716, -0.012500000000001066, -0.03999999999999915, -0.0007500000000000284, -0.014499999999999957, 0.04699999999999882, 0.036249999999999005, -0.019999999999999574, -0.07000000000000028, -0.01774999999999949, 0.0005000000000006111, -0.034000000000000696, -0.04475000000000051, 0.05599999999999916, 0.036749999999999616, -0.013749999999999929, -0.040249999999998565, 0.022999999999999687, 0.057500000000000995, -0.008250000000000313, -0.0034999999999989484, 0.04899999999999949, -0.006999999999997897, 0.019000000000001904, -0.03249999999999886, 0.005749999999999034], zp_timestamp='2026-02-15T18:36:00')
2026-02-15T20:39:09.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:39:09.033 [DEBUG] [Thread-210843] [transport.py] [_log()] starting thread (client mode): 0xa2d10970
2026-02-15T20:39:09.034 [DEBUG] [Thread-210843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:39:09.048 [DEBUG] [Thread-210843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:39:09.048 [INFO] [Thread-210843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:39:09.056 [DEBUG] [Thread-210843] [transport.py] [_log()] client lang: <none>
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] server lang: <none>
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] kex follows: False
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] Compression: none
2026-02-15T20:39:09.057 [DEBUG] [Thread-210843] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:39:09.111 [DEBUG] [Thread-210843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:39:09.111 [DEBUG] [Thread-210843] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:39:09.112 [DEBUG] [Thread-210843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:39:09.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:39:09.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:39:09.169 [DEBUG] [Thread-210843] [transport.py] [_log()] userauth is OK
2026-02-15T20:39:09.169 [DEBUG] [Thread-210843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:39:09.169 [DEBUG] [Thread-210843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:39:09.169 [DEBUG] [Thread-210843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:39:09.169 [DEBUG] [Thread-210843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:39:09.183 [INFO] [Thread-210843] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:39:09.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:39:09.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:39:10.051 [DEBUG] [Thread-210843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:39:10.051 [DEBUG] [Thread-210843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:39:10.098 [DEBUG] [Thread-210843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:39:10.099 [DEBUG] [Thread-210843] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:39:10.106 [DEBUG] [Thread-210843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:39:10.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:39:10.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20: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
2026-02-15T20:39:10.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:39:10.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:39:10.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:39:10.137 [DEBUG] [Thread-210843] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:39:10.368 [DEBUG] [Thread-210845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:18.187 [DEBUG] [Thread-210846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:23.373 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:29.532 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:29.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:33.384 [DEBUG] [Thread-210847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:40.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:39:40.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:39:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:39:42.025 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:39:42.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 39, 3), 15.41, 35.5, 0.0, 32.47, 17.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:39:42.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:39:03
2026-02-15T20:39:42.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:39:42.849 [DEBUG] [Thread-210848] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-15T20:39:42.850 [DEBUG] [Thread-210848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:39:42.860 [DEBUG] [Thread-210848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:39:42.860 [INFO] [Thread-210848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] client lang: <none>
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] server lang: <none>
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] kex follows: False
2026-02-15T20:39:42.866 [DEBUG] [Thread-210848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:39:42.867 [DEBUG] [Thread-210848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:39:42.867 [DEBUG] [Thread-210848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:39:42.867 [DEBUG] [Thread-210848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:39:42.867 [DEBUG] [Thread-210848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:39:42.867 [DEBUG] [Thread-210848] [transport.py] [_log()] Compression: none
2026-02-15T20:39:42.867 [DEBUG] [Thread-210848] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:39:42.923 [DEBUG] [Thread-210848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:39:42.927 [DEBUG] [Thread-210848] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:39:42.929 [DEBUG] [Thread-210848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:39:42.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:39:42.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:39:42.932 [DEBUG] [Thread-210848] [transport.py] [_log()] userauth is OK
2026-02-15T20:39:42.932 [DEBUG] [Thread-210848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:39:42.933 [DEBUG] [Thread-210848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:39:42.933 [DEBUG] [Thread-210848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:39:42.933 [DEBUG] [Thread-210848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:39:42.965 [INFO] [Thread-210848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:39:42.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:39:43.583 [DEBUG] [Thread-210848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:39:43.583 [DEBUG] [Thread-210848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:39:43.584 [DEBUG] [Thread-210848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:39:43.624 [DEBUG] [Thread-210848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:39:43.624 [DEBUG] [Thread-210848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:39:43.626 [DEBUG] [Thread-210848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:39:43.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:39:43.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:39:43.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:39:43.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:39:43.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:39:43.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:39:43.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:39:43.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:39:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:39:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.777187 -999.00  +17.00  22.90     40   +3.60 1 1 1 1 1     0    0 13.88 19.04 ZNESW 24.8 22.9 152.5 30.8 17.1 -24.8 17.1 -23.7 16.8 -22.5 17.1 -23.7
2026-02-15T20:39:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:39:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:39:43.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.777187
2026-02-15T20:39:43.661 [DEBUG] [Thread-210848] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:39:43.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:39:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:39:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:39:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:39:43.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:39:43.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:39:03', tmtdew=15.41, humidity=35.5, cloud=0.0, wind=32.47, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:39:39', seeing=1.99, atlas_timestamp='2026-02-15T18:39:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.01425000000000054, -0.029749999999999943, -0.006000000000000227, -0.01750000000000007, -0.018749999999998934, -0.030000000000001137, -0.023749999999999716, -0.012500000000001066, -0.03999999999999915, -0.0007500000000000284, -0.014499999999999957, 0.04699999999999882, 0.036249999999999005, -0.019999999999999574, -0.07000000000000028, -0.01774999999999949, 0.0005000000000006111, -0.034000000000000696, -0.04475000000000051, 0.05599999999999916, 0.036749999999999616, -0.013749999999999929, -0.040249999999998565, 0.022999999999999687, 0.057500000000000995, -0.008250000000000313, -0.0034999999999989484, 0.04899999999999949, -0.006999999999997897, 0.019000000000001904, -0.03249999999999886, 0.005749999999999034], zp_timestamp='2026-02-15T18:36:00')
2026-02-15T20:39:43.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:39:43.754 [DEBUG] [Thread-210851] [transport.py] [_log()] starting thread (client mode): 0xa57d5840
2026-02-15T20:39:43.754 [DEBUG] [Thread-210851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:39:43.768 [DEBUG] [Thread-210851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:39:43.768 [INFO] [Thread-210851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] client lang: <none>
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] server lang: <none>
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] kex follows: False
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] Compression: none
2026-02-15T20:39:43.776 [DEBUG] [Thread-210851] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:39:43.831 [DEBUG] [Thread-210851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:39:43.831 [DEBUG] [Thread-210851] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:39:43.831 [DEBUG] [Thread-210851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:39:43.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:39:43.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:39:43.888 [DEBUG] [Thread-210851] [transport.py] [_log()] userauth is OK
2026-02-15T20:39:43.888 [DEBUG] [Thread-210851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:39:43.888 [DEBUG] [Thread-210851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:39:43.888 [DEBUG] [Thread-210851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:39:43.888 [DEBUG] [Thread-210851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:39:43.902 [INFO] [Thread-210851] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:39:43.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:39:43.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:39:44.700 [DEBUG] [Thread-210851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:39:44.700 [DEBUG] [Thread-210851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:39:44.748 [DEBUG] [Thread-210851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:39:44.748 [DEBUG] [Thread-210851] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:39:44.756 [DEBUG] [Thread-210851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:39:44.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:39:44.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:39:44.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:39:44.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:39:44.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:39:44.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:39:44.789 [DEBUG] [Thread-210851] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:39:48.416 [DEBUG] [Thread-210853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:00.678 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:03.491 [DEBUG] [Thread-210854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:08.663 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:10.793 [DEBUG] [Thread-210855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:12.747 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:40:14.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:40:14.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:40:16.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 39, 39), 15.64, 34.89, 0.0, 30.41, 17.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:40:16.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:39:39
2026-02-15T20:40:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:40:17.423 [DEBUG] [Thread-210856] [transport.py] [_log()] starting thread (client mode): 0xa2d6fd00
2026-02-15T20:40:17.424 [DEBUG] [Thread-210856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:40:17.433 [DEBUG] [Thread-210856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:40:17.433 [INFO] [Thread-210856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] client lang: <none>
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] server lang: <none>
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] kex follows: False
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] Compression: none
2026-02-15T20:40:17.438 [DEBUG] [Thread-210856] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:40:17.468 [DEBUG] [Thread-210856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:40:17.471 [DEBUG] [Thread-210856] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:40:17.473 [DEBUG] [Thread-210856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:40:17.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:40:17.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:40:17.477 [DEBUG] [Thread-210856] [transport.py] [_log()] userauth is OK
2026-02-15T20:40:17.477 [DEBUG] [Thread-210856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:40:17.478 [DEBUG] [Thread-210856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:40:17.478 [DEBUG] [Thread-210856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:40:17.478 [DEBUG] [Thread-210856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:40:17.501 [INFO] [Thread-210856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:40:17.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:40:18.068 [DEBUG] [Thread-210856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:40:18.068 [DEBUG] [Thread-210856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:40:18.069 [DEBUG] [Thread-210856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:40:18.109 [DEBUG] [Thread-210856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:40:18.109 [DEBUG] [Thread-210856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:40:18.112 [DEBUG] [Thread-210856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:40:18.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:40:18.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:40:18.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:40:18.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:40:18.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:40:18.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:40:18.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:40:18.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:40:18.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:40:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.777535 -999.00  +17.00  25.89     40   +3.60 1 1 1 1 1     0    0 14.05 18.93 ZNESW 24.2 25.9 140.8 36.7 17.1 -24.8 -999.0 -999.0 16.9 -22.5 17.1 -23.8
2026-02-15T20:40:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:40:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:40:18.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.777535
2026-02-15T20:40:18.143 [DEBUG] [Thread-210856] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:40:18.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:40:18.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:40:18.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:40:18.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:40:18.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:40:18.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:39:39', tmtdew=15.64, humidity=34.89, cloud=0.0, wind=30.41, temperature=17.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:39:39', seeing=1.99, atlas_timestamp='2026-02-15T18:39:39.024', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.01425000000000054, -0.029749999999999943, -0.006000000000000227, -0.01750000000000007, -0.018749999999998934, -0.030000000000001137, -0.023749999999999716, -0.012500000000001066, -0.03999999999999915, -0.0007500000000000284, -0.014499999999999957, 0.04699999999999882, 0.036249999999999005, -0.019999999999999574, -0.07000000000000028, -0.01774999999999949, 0.0005000000000006111, -0.034000000000000696, -0.04475000000000051, 0.05599999999999916, 0.036749999999999616, -0.013749999999999929, -0.040249999999998565, 0.022999999999999687, 0.057500000000000995, -0.008250000000000313, -0.0034999999999989484, 0.04899999999999949, -0.006999999999997897, 0.019000000000001904, -0.03249999999999886, 0.005749999999999034], zp_timestamp='2026-02-15T18:36:00')
2026-02-15T20:40:18.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:40:18.256 [DEBUG] [Thread-210859] [transport.py] [_log()] starting thread (client mode): 0xa2d067d0
2026-02-15T20:40:18.256 [DEBUG] [Thread-210859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:40:18.270 [DEBUG] [Thread-210859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:40:18.270 [INFO] [Thread-210859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] client lang: <none>
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] server lang: <none>
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] kex follows: False
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] Compression: none
2026-02-15T20:40:18.278 [DEBUG] [Thread-210859] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:40:18.335 [DEBUG] [Thread-210859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:40:18.336 [DEBUG] [Thread-210859] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:40:18.336 [DEBUG] [Thread-210859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:40:18.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:40:18.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:40:18.392 [DEBUG] [Thread-210859] [transport.py] [_log()] userauth is OK
2026-02-15T20:40:18.392 [DEBUG] [Thread-210859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:40:18.392 [DEBUG] [Thread-210859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:40:18.392 [DEBUG] [Thread-210859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:40:18.392 [DEBUG] [Thread-210859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:40:18.414 [INFO] [Thread-210859] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:40:18.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:40:18.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:40:18.526 [DEBUG] [Thread-210861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:19.219 [DEBUG] [Thread-210859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:40:19.219 [DEBUG] [Thread-210859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:40:19.266 [DEBUG] [Thread-210859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:40:19.266 [DEBUG] [Thread-210859] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:40:19.274 [DEBUG] [Thread-210859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:40:19.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:40:19.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:40:19.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:40:19.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:40:19.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:40:19.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:40:19.308 [DEBUG] [Thread-210859] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:40:19.606 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:29.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:29.734 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:33.621 [DEBUG] [Thread-210862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:38.246 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:48.665 [DEBUG] [Thread-210863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:40:49.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:40:49.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:40:49.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:40:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 40, 14), 15.36, 35.46, 0.0, 31.37, 17.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:40:51.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:40:14
2026-02-15T20:40:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:40:51.764 [DEBUG] [Thread-210864] [transport.py] [_log()] starting thread (client mode): 0xa57d4640
2026-02-15T20:40:51.764 [DEBUG] [Thread-210864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:40:51.773 [DEBUG] [Thread-210864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:40:51.774 [INFO] [Thread-210864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:40:51.779 [DEBUG] [Thread-210864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] client lang: <none>
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] server lang: <none>
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] kex follows: False
2026-02-15T20:40:51.780 [DEBUG] [Thread-210864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:40:51.781 [DEBUG] [Thread-210864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:40:51.782 [DEBUG] [Thread-210864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:40:51.782 [DEBUG] [Thread-210864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:40:51.782 [DEBUG] [Thread-210864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:40:51.782 [DEBUG] [Thread-210864] [transport.py] [_log()] Compression: none
2026-02-15T20:40:51.782 [DEBUG] [Thread-210864] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:40:51.819 [DEBUG] [Thread-210864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:40:51.824 [DEBUG] [Thread-210864] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:40:51.826 [DEBUG] [Thread-210864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:40:51.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:40:51.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:40:51.831 [DEBUG] [Thread-210864] [transport.py] [_log()] userauth is OK
2026-02-15T20:40:51.831 [DEBUG] [Thread-210864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:40:51.831 [DEBUG] [Thread-210864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:40:51.831 [DEBUG] [Thread-210864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:40:51.831 [DEBUG] [Thread-210864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:40:51.851 [INFO] [Thread-210864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:40:51.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:40:52.506 [DEBUG] [Thread-210864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:40:52.506 [DEBUG] [Thread-210864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:40:52.507 [DEBUG] [Thread-210864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:40:52.546 [DEBUG] [Thread-210864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:40:52.546 [DEBUG] [Thread-210864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:40:52.549 [DEBUG] [Thread-210864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:40:52.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:40:52.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:40:52.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:40:52.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:40:52.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:40:52.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:40:52.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:40:52.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:40:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:40:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.778229 -999.00  +17.00  18.81     40   +3.60 1 1 1 1 1     0    0 13.88 18.31 ZNESW 19.5 18.8 162.4 24.1 17.2 -24.9 17.1 -23.8 16.9 -22.7 17.1 -24.0
2026-02-15T20:40:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:40:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:40:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.778229
2026-02-15T20:40:52.579 [DEBUG] [Thread-210864] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:40:52.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:40:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:40:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:40:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:40:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:40:52.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:40:14', tmtdew=15.36, humidity=35.46, cloud=0.0, wind=31.37, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:40:15', seeing=2.69, atlas_timestamp='2026-02-15T18:40:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0032500000000013074, -0.01425000000000054, -0.029749999999999943, -0.006000000000000227, -0.01750000000000007, -0.018749999999998934, -0.030000000000001137, -0.023749999999999716, -0.012500000000001066, -0.03999999999999915, -0.0007500000000000284, -0.014499999999999957, 0.04699999999999882, 0.036249999999999005, -0.019999999999999574, -0.07000000000000028, -0.01774999999999949, 0.0005000000000006111, -0.034000000000000696, -0.04475000000000051, 0.05599999999999916, 0.036749999999999616, -0.013749999999999929, -0.040249999999998565, 0.022999999999999687, 0.057500000000000995, -0.008250000000000313, -0.0034999999999989484, 0.04899999999999949, -0.006999999999997897, 0.019000000000001904, -0.03249999999999886, 0.005749999999999034], zp_timestamp='2026-02-15T18:36:00')
2026-02-15T20:40:52.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:40:52.690 [DEBUG] [Thread-210867] [transport.py] [_log()] starting thread (client mode): 0xa2d3ebf0
2026-02-15T20:40:52.690 [DEBUG] [Thread-210867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:40:52.705 [DEBUG] [Thread-210867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:40:52.705 [INFO] [Thread-210867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] client lang: <none>
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] server lang: <none>
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] kex follows: False
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:40:52.712 [DEBUG] [Thread-210867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:40:52.713 [DEBUG] [Thread-210867] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:40:52.713 [DEBUG] [Thread-210867] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:40:52.713 [DEBUG] [Thread-210867] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:40:52.713 [DEBUG] [Thread-210867] [transport.py] [_log()] Compression: none
2026-02-15T20:40:52.713 [DEBUG] [Thread-210867] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:40:52.771 [DEBUG] [Thread-210867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:40:52.772 [DEBUG] [Thread-210867] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:40:52.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:40:52.772 [DEBUG] [Thread-210867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:40:52.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:40:52.827 [DEBUG] [Thread-210867] [transport.py] [_log()] userauth is OK
2026-02-15T20:40:52.827 [DEBUG] [Thread-210867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:40:52.827 [DEBUG] [Thread-210867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:40:52.827 [DEBUG] [Thread-210867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:40:52.827 [DEBUG] [Thread-210867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:40:52.842 [INFO] [Thread-210867] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:40:52.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:40:52.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:40:53.639 [DEBUG] [Thread-210867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:40:53.639 [DEBUG] [Thread-210867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:40:53.687 [DEBUG] [Thread-210867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:40:53.687 [DEBUG] [Thread-210867] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:40:53.697 [DEBUG] [Thread-210867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:40:53.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:40:53.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:40:53.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:40:53.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:40:53.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:40:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:40:53.733 [DEBUG] [Thread-210867] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:40:56.937 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:03.745 [DEBUG] [Thread-210869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:11.283 [DEBUG] [Thread-210870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:15.602 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:18.922 [DEBUG] [Thread-210871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:23.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:41:23.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:41:23.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
2026-02-15T20:41:25.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 40, 50), 15.35, 35.5, 0.0, 30.97, 16.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:41:25.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:40:50
2026-02-15T20:41:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:41:26.305 [DEBUG] [Thread-210872] [transport.py] [_log()] starting thread (client mode): 0xa2d3e0b0
2026-02-15T20:41:26.306 [DEBUG] [Thread-210872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:41:26.306 [DEBUG] [Thread-210872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:41:26.306 [INFO] [Thread-210872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] client lang: <none>
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] server lang: <none>
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] kex follows: False
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] Compression: none
2026-02-15T20:41:26.311 [DEBUG] [Thread-210872] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:41:26.333 [DEBUG] [Thread-210872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:41:26.333 [DEBUG] [Thread-210872] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:41:26.334 [DEBUG] [Thread-210872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:41:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:41:26.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:41:26.335 [DEBUG] [Thread-210872] [transport.py] [_log()] userauth is OK
2026-02-15T20:41:26.335 [DEBUG] [Thread-210872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:41:26.335 [DEBUG] [Thread-210872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:41:26.335 [DEBUG] [Thread-210872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:41:26.335 [DEBUG] [Thread-210872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:41:26.351 [INFO] [Thread-210872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:41:26.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:41:26.953 [DEBUG] [Thread-210872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:41:26.953 [DEBUG] [Thread-210872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:41:26.954 [DEBUG] [Thread-210872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:41:26.994 [DEBUG] [Thread-210872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:41:26.994 [DEBUG] [Thread-210872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:41:26.996 [DEBUG] [Thread-210872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:41:27.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:41:27.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:41:27.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:41:27.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:41:27.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:41:27.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:41:27.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:41:27.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:41:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:41:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.778576 -999.00  +16.90  32.91     41   +3.60 1 1 2 1 1     0    0 13.88 17.30 ZNESW 22.6 32.9 164.5 38.5 17.1 -24.8 17.1 -23.8 16.8 -22.6 17.1 -23.8
2026-02-15T20:41:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:41:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:41:27.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.778576
2026-02-15T20:41:27.019 [DEBUG] [Thread-210872] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:41:27.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:41:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:41:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:41:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:41:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:41:27.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:40:50', tmtdew=15.35, humidity=35.5, cloud=0.0, wind=30.97, temperature=16.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:40:50', seeing=2.06, atlas_timestamp='2026-02-15T18:41:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:39:00')
2026-02-15T20:41:27.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:41:27.110 [DEBUG] [Thread-210875] [transport.py] [_log()] starting thread (client mode): 0xa2d3dd50
2026-02-15T20:41:27.110 [DEBUG] [Thread-210875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:41:27.125 [DEBUG] [Thread-210875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:41:27.125 [INFO] [Thread-210875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:41:27.132 [DEBUG] [Thread-210875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:41:27.132 [DEBUG] [Thread-210875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] client lang: <none>
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] server lang: <none>
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] kex follows: False
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] Compression: none
2026-02-15T20:41:27.133 [DEBUG] [Thread-210875] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:41:27.190 [DEBUG] [Thread-210875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:41:27.190 [DEBUG] [Thread-210875] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:41:27.191 [DEBUG] [Thread-210875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:41:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:41:27.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:41:27.247 [DEBUG] [Thread-210875] [transport.py] [_log()] userauth is OK
2026-02-15T20:41:27.247 [DEBUG] [Thread-210875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:41:27.247 [DEBUG] [Thread-210875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:41:27.247 [DEBUG] [Thread-210875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:41:27.247 [DEBUG] [Thread-210875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:41:27.263 [INFO] [Thread-210875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:41:27.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:41:27.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:41:28.116 [DEBUG] [Thread-210875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:41:28.116 [DEBUG] [Thread-210875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:41:28.164 [DEBUG] [Thread-210875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:41:28.164 [DEBUG] [Thread-210875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:41:28.172 [DEBUG] [Thread-210875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:41:28.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:41:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:41:28.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:41:28.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:41:28.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:41:28.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:41:28.204 [DEBUG] [Thread-210875] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:41:29.932 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:29.935 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:33.945 [DEBUG] [Thread-210877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:34.377 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:49.025 [DEBUG] [Thread-210878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:53.029 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:41:58.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:41:58.230 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:41:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:42:00.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 41, 25), 15.37, 35.43, 0.0, 30.95, 16.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:42:00.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:41:25
2026-02-15T20:42:00.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:42:00.699 [DEBUG] [Thread-210879] [transport.py] [_log()] starting thread (client mode): 0xa57d4a60
2026-02-15T20:42:00.700 [DEBUG] [Thread-210879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:42:00.711 [DEBUG] [Thread-210879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:42:00.714 [INFO] [Thread-210879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:42:00.751 [DEBUG] [Thread-210879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:42:00.752 [DEBUG] [Thread-210879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:42:00.752 [DEBUG] [Thread-210879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:42:00.752 [DEBUG] [Thread-210879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:00.752 [DEBUG] [Thread-210879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:00.752 [DEBUG] [Thread-210879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:00.752 [DEBUG] [Thread-210879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:00.753 [DEBUG] [Thread-210879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:42:00.753 [DEBUG] [Thread-210879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:42:00.753 [DEBUG] [Thread-210879] [transport.py] [_log()] client lang: <none>
2026-02-15T20:42:00.753 [DEBUG] [Thread-210879] [transport.py] [_log()] server lang: <none>
2026-02-15T20:42:00.753 [DEBUG] [Thread-210879] [transport.py] [_log()] kex follows: False
2026-02-15T20:42:00.753 [DEBUG] [Thread-210879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:42:00.754 [DEBUG] [Thread-210879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:42:00.754 [DEBUG] [Thread-210879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:42:00.755 [DEBUG] [Thread-210879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:42:00.755 [DEBUG] [Thread-210879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:42:00.755 [DEBUG] [Thread-210879] [transport.py] [_log()] Compression: none
2026-02-15T20:42:00.755 [DEBUG] [Thread-210879] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:42:00.797 [DEBUG] [Thread-210879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:42:00.803 [DEBUG] [Thread-210879] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:42:00.805 [DEBUG] [Thread-210879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:42:00.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:42:00.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:42:00.810 [DEBUG] [Thread-210879] [transport.py] [_log()] userauth is OK
2026-02-15T20:42:00.811 [DEBUG] [Thread-210879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:42:00.811 [DEBUG] [Thread-210879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:42:00.811 [DEBUG] [Thread-210879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:42:00.811 [DEBUG] [Thread-210879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:42:00.841 [INFO] [Thread-210879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:42:00.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:42:01.489 [DEBUG] [Thread-210879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:42:01.489 [DEBUG] [Thread-210879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:42:01.490 [DEBUG] [Thread-210879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:42:01.533 [DEBUG] [Thread-210879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:42:01.533 [DEBUG] [Thread-210879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:42:01.537 [DEBUG] [Thread-210879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:42:01.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:42:01.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:42:01.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:42:01.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:42:01.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:42:01.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:42:01.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:42:01.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:42:01.575 [DEBUG] [Thread-210879] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.778923 -999.00  +17.00  20.81     40   +3.60 1 1 1 1 1     0    0 14.05 17.54 ZNESW 21.3 20.8 158.5 33.7 17.1 -24.7 17.0 -23.7 16.8 -22.6 17.1 -23.7
2026-02-15T20:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:42:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:42:01.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.778923
2026-02-15T20:42:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:42:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:42:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:42:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:42:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:42:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:41:25', tmtdew=15.37, humidity=35.43, cloud=0.0, wind=30.95, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:41:25', seeing=2.57, atlas_timestamp='2026-02-15T18:41:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:39:00')
2026-02-15T20:42:01.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:42:01.749 [DEBUG] [Thread-210882] [transport.py] [_log()] starting thread (client mode): 0xa2d7be80
2026-02-15T20:42:01.749 [DEBUG] [Thread-210882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:42:01.764 [DEBUG] [Thread-210882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:42:01.764 [INFO] [Thread-210882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:42:01.771 [DEBUG] [Thread-210882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] client lang: <none>
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] server lang: <none>
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] kex follows: False
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] Compression: none
2026-02-15T20:42:01.772 [DEBUG] [Thread-210882] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:42:01.832 [DEBUG] [Thread-210882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:42:01.832 [DEBUG] [Thread-210882] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:42:01.833 [DEBUG] [Thread-210882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:42:01.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:42:01.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:42:01.887 [DEBUG] [Thread-210882] [transport.py] [_log()] userauth is OK
2026-02-15T20:42:01.887 [DEBUG] [Thread-210882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:42:01.887 [DEBUG] [Thread-210882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:42:01.887 [DEBUG] [Thread-210882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:42:01.887 [DEBUG] [Thread-210882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:42:01.912 [INFO] [Thread-210882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:42:01.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:42:01.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:42:02.748 [DEBUG] [Thread-210882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:42:02.748 [DEBUG] [Thread-210882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:42:02.796 [DEBUG] [Thread-210882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:42:02.796 [DEBUG] [Thread-210882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:42:02.805 [DEBUG] [Thread-210882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:42:02.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:42:02.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:42:02.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:42:02.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:42:02.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:42:02.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:42:02.843 [DEBUG] [Thread-210882] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:42:04.056 [DEBUG] [Thread-210884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:11.579 [DEBUG] [Thread-210885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:11.701 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:19.144 [DEBUG] [Thread-210886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:30.150 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:30.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:30.611 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:32.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:42:32.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:42:32.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:42:34.174 [DEBUG] [Thread-210887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 42, 1), 15.36, 35.46, 0.0, 29.13, 17.03, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:42:34.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:42:01
2026-02-15T20:42:35.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:42:35.398 [DEBUG] [Thread-210888] [transport.py] [_log()] starting thread (client mode): 0xa2d69c60
2026-02-15T20:42:35.398 [DEBUG] [Thread-210888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:42:35.409 [DEBUG] [Thread-210888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:42:35.409 [INFO] [Thread-210888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:42:35.415 [DEBUG] [Thread-210888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] client lang: <none>
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] server lang: <none>
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] kex follows: False
2026-02-15T20:42:35.416 [DEBUG] [Thread-210888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:42:35.417 [DEBUG] [Thread-210888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:42:35.417 [DEBUG] [Thread-210888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:42:35.417 [DEBUG] [Thread-210888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:42:35.417 [DEBUG] [Thread-210888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:42:35.417 [DEBUG] [Thread-210888] [transport.py] [_log()] Compression: none
2026-02-15T20:42:35.417 [DEBUG] [Thread-210888] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:42:35.452 [DEBUG] [Thread-210888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:42:35.456 [DEBUG] [Thread-210888] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:42:35.457 [DEBUG] [Thread-210888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:42:35.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:42:35.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:42:35.462 [DEBUG] [Thread-210888] [transport.py] [_log()] userauth is OK
2026-02-15T20:42:35.463 [DEBUG] [Thread-210888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:42:35.463 [DEBUG] [Thread-210888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:42:35.463 [DEBUG] [Thread-210888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:42:35.463 [DEBUG] [Thread-210888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:42:35.490 [INFO] [Thread-210888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:42:35.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:42:36.074 [DEBUG] [Thread-210888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:42:36.074 [DEBUG] [Thread-210888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:42:36.089 [DEBUG] [Thread-210888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:42:36.114 [DEBUG] [Thread-210888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:42:36.114 [DEBUG] [Thread-210888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:42:36.116 [DEBUG] [Thread-210888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:42:36.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:42:36.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:42:36.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:42:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:42:36.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:42:36.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:42:36.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:42:36.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:42:36.137 [DEBUG] [Thread-210888] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:42:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:42:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.779271 -999.00  +17.00  18.45     40   +3.60 1 1 1 1 1     0    0 13.81 18.57 ZNESW 17.8 18.4 148.8 31.1 17.1 -24.9 17.1 -23.8 16.8 -22.7 17.1 -23.7
2026-02-15T20:42:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:42:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:42:36.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.779271
2026-02-15T20:42:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:42:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:42:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:42:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:42:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:42:36.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:42:01', tmtdew=15.36, humidity=35.46, cloud=0.0, wind=29.13, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:42:01', seeing=1.84, atlas_timestamp='2026-02-15T18:42:09.014', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:39:00')
2026-02-15T20:42:36.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:42:36.234 [DEBUG] [Thread-210891] [transport.py] [_log()] starting thread (client mode): 0xa57d5540
2026-02-15T20:42:36.234 [DEBUG] [Thread-210891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:42:36.248 [DEBUG] [Thread-210891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:42:36.249 [INFO] [Thread-210891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] client lang: <none>
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] server lang: <none>
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] kex follows: False
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] Compression: none
2026-02-15T20:42:36.256 [DEBUG] [Thread-210891] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:42:36.314 [DEBUG] [Thread-210891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:42:36.315 [DEBUG] [Thread-210891] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:42:36.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:42:36.315 [DEBUG] [Thread-210891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:42:36.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:42:36.370 [DEBUG] [Thread-210891] [transport.py] [_log()] userauth is OK
2026-02-15T20:42:36.370 [DEBUG] [Thread-210891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:42:36.370 [DEBUG] [Thread-210891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:42:36.370 [DEBUG] [Thread-210891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:42:36.370 [DEBUG] [Thread-210891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:42:36.389 [INFO] [Thread-210891] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:42:36.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:42:36.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:42:36.685 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:37.209 [DEBUG] [Thread-210891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:42:37.210 [DEBUG] [Thread-210891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:42:37.256 [DEBUG] [Thread-210891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:42:37.257 [DEBUG] [Thread-210891] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:42:37.265 [DEBUG] [Thread-210891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:42:37.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:42:37.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:42:37.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:42:37.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:42:37.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:42:37.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:42:37.299 [DEBUG] [Thread-210891] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:42:44.244 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:48.369 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:49.215 [DEBUG] [Thread-210893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:42:49.455 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:04.339 [DEBUG] [Thread-210894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:07.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:43:07.302 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:43:07.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:43:08.270 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 42, 36), 15.57, 35.06, 0.0, 32.07, 17.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:43:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:42:36
2026-02-15T20:43:09.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:43:09.732 [DEBUG] [Thread-210895] [transport.py] [_log()] starting thread (client mode): 0xa57d4040
2026-02-15T20:43:09.733 [DEBUG] [Thread-210895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:43:09.750 [DEBUG] [Thread-210895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:43:09.751 [INFO] [Thread-210895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:43:09.753 [DEBUG] [Thread-210895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] client lang: <none>
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] server lang: <none>
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] kex follows: False
2026-02-15T20:43:09.754 [DEBUG] [Thread-210895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:43:09.755 [DEBUG] [Thread-210895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:43:09.755 [DEBUG] [Thread-210895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:43:09.755 [DEBUG] [Thread-210895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:43:09.755 [DEBUG] [Thread-210895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:43:09.755 [DEBUG] [Thread-210895] [transport.py] [_log()] Compression: none
2026-02-15T20:43:09.755 [DEBUG] [Thread-210895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:43:09.790 [DEBUG] [Thread-210895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:43:09.794 [DEBUG] [Thread-210895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:43:09.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:43:09.797 [DEBUG] [Thread-210895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:43:09.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:43:09.834 [DEBUG] [Thread-210895] [transport.py] [_log()] userauth is OK
2026-02-15T20:43:09.835 [DEBUG] [Thread-210895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:43:09.835 [DEBUG] [Thread-210895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:43:09.835 [DEBUG] [Thread-210895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:43:09.835 [DEBUG] [Thread-210895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:43:09.864 [INFO] [Thread-210895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:43:09.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:43:10.521 [DEBUG] [Thread-210895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:43:10.521 [DEBUG] [Thread-210895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:43:10.521 [DEBUG] [Thread-210895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:43:10.562 [DEBUG] [Thread-210895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:43:10.562 [DEBUG] [Thread-210895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:43:10.565 [DEBUG] [Thread-210895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:43:10.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:43:10.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:43:10.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:43:10.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:43:10.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:43:10.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:43:10.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:43:10.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:43:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:43:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.779618 -999.00  +16.90  21.73     40   +3.50 1 1 1 1 1     0    0 14.04 18.44 ZNESW 24.6 21.7 162.6 30.6 17.1 -24.8 17.0 -23.7 16.9 -22.6 17.1 -23.8
2026-02-15T20:43:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:43:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:43:10.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.779618
2026-02-15T20:43:10.593 [DEBUG] [Thread-210895] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:43:10.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:43:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:43:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:43:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:43:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:43:10.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:42:36', tmtdew=15.57, humidity=35.06, cloud=0.0, wind=32.07, temperature=17.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:42:37', seeing=2.04, atlas_timestamp='2026-02-15T18:42:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:39:00')
2026-02-15T20:43:10.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:43:10.715 [DEBUG] [Thread-210898] [transport.py] [_log()] starting thread (client mode): 0xa5742f80
2026-02-15T20:43:10.715 [DEBUG] [Thread-210898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:43:10.730 [DEBUG] [Thread-210898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:43:10.730 [INFO] [Thread-210898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:43:10.737 [DEBUG] [Thread-210898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:43:10.737 [DEBUG] [Thread-210898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:43:10.737 [DEBUG] [Thread-210898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:43:10.737 [DEBUG] [Thread-210898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:10.737 [DEBUG] [Thread-210898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:10.737 [DEBUG] [Thread-210898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] client lang: <none>
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] server lang: <none>
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] kex follows: False
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] Compression: none
2026-02-15T20:43:10.738 [DEBUG] [Thread-210898] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:43:10.795 [DEBUG] [Thread-210898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:43:10.796 [DEBUG] [Thread-210898] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:43:10.796 [DEBUG] [Thread-210898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:43:10.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:43:10.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:43:10.851 [DEBUG] [Thread-210898] [transport.py] [_log()] userauth is OK
2026-02-15T20:43:10.851 [DEBUG] [Thread-210898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:43:10.851 [DEBUG] [Thread-210898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:43:10.851 [DEBUG] [Thread-210898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:43:10.851 [DEBUG] [Thread-210898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:43:10.871 [INFO] [Thread-210898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:43:10.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:43:10.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:43:11.689 [DEBUG] [Thread-210898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:43:11.689 [DEBUG] [Thread-210898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:43:11.737 [DEBUG] [Thread-210898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:43:11.737 [DEBUG] [Thread-210898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:43:11.747 [DEBUG] [Thread-210898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:43:11.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:43:11.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:43:11.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
2026-02-15T20:43:11.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:43:11.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:43:11.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:43:11.781 [DEBUG] [Thread-210898] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:43:12.123 [DEBUG] [Thread-210900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:19.377 [DEBUG] [Thread-210901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:26.917 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:30.357 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:30.359 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:34.474 [DEBUG] [Thread-210902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:41.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:43:41.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:43:41.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:43:43.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 43, 12), 15.39, 35.51, 0.0, 28.25, 17.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:43:43.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:43:12
2026-02-15T20:43:44.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:43:44.211 [DEBUG] [Thread-210903] [transport.py] [_log()] starting thread (client mode): 0xa57d4430
2026-02-15T20:43:44.212 [DEBUG] [Thread-210903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:43:44.219 [DEBUG] [Thread-210903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:43:44.219 [INFO] [Thread-210903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:43:44.225 [DEBUG] [Thread-210903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] client lang: <none>
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] server lang: <none>
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] kex follows: False
2026-02-15T20:43:44.226 [DEBUG] [Thread-210903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:43:44.227 [DEBUG] [Thread-210903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:43:44.227 [DEBUG] [Thread-210903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:43:44.227 [DEBUG] [Thread-210903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:43:44.227 [DEBUG] [Thread-210903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:43:44.227 [DEBUG] [Thread-210903] [transport.py] [_log()] Compression: none
2026-02-15T20:43:44.227 [DEBUG] [Thread-210903] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:43:44.258 [DEBUG] [Thread-210903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:43:44.269 [DEBUG] [Thread-210903] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:43:44.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:43:44.272 [DEBUG] [Thread-210903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:43:44.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:43:44.276 [DEBUG] [Thread-210903] [transport.py] [_log()] userauth is OK
2026-02-15T20:43:44.276 [DEBUG] [Thread-210903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:43:44.276 [DEBUG] [Thread-210903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:43:44.276 [DEBUG] [Thread-210903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:43:44.276 [DEBUG] [Thread-210903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:43:44.296 [INFO] [Thread-210903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:43:44.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:43:44.864 [DEBUG] [Thread-210903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:43:44.864 [DEBUG] [Thread-210903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:43:44.864 [DEBUG] [Thread-210903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:43:44.905 [DEBUG] [Thread-210903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:43:44.905 [DEBUG] [Thread-210903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:43:44.906 [DEBUG] [Thread-210903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:43:44.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:43:44.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:43:44.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:43:44.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:43:44.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:43:44.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:43:44.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:43:44.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:43:44.925 [DEBUG] [Thread-210903] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:43:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:43:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.779965 -999.00  +16.90  20.46     40   +3.50 1 1 1 1 1     0    0 13.89 17.46 ZNESW 20.8 20.5 160.6 31.3 17.1 -24.8 17.0 -23.7 16.8 -22.6 17.1 -23.8
2026-02-15T20:43:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:43:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:43:44.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.779965
2026-02-15T20:43:44.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:43:44.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:43:44.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:43:44.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:43:44.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:43:44.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:43:12', tmtdew=15.39, humidity=35.51, cloud=0.0, wind=28.25, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:43:12', seeing=1.97, atlas_timestamp='2026-02-15T18:43:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:39:00')
2026-02-15T20:43:45.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:43:45.040 [DEBUG] [Thread-210906] [transport.py] [_log()] starting thread (client mode): 0xa57d6b30
2026-02-15T20:43:45.040 [DEBUG] [Thread-210906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:43:45.054 [DEBUG] [Thread-210906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:43:45.054 [INFO] [Thread-210906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:43:45.062 [DEBUG] [Thread-210906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:43:45.064 [DEBUG] [Thread-210906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] client lang: <none>
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] server lang: <none>
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] kex follows: False
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] Compression: none
2026-02-15T20:43:45.065 [DEBUG] [Thread-210906] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:43:45.116 [DEBUG] [Thread-210906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:43:45.117 [DEBUG] [Thread-210906] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:43:45.117 [DEBUG] [Thread-210906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:43:45.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:43:45.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:43:45.174 [DEBUG] [Thread-210906] [transport.py] [_log()] userauth is OK
2026-02-15T20:43:45.174 [DEBUG] [Thread-210906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:43:45.174 [DEBUG] [Thread-210906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:43:45.174 [DEBUG] [Thread-210906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:43:45.174 [DEBUG] [Thread-210906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:43:45.188 [INFO] [Thread-210906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:43:45.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:43:45.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:43:45.566 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:43:46.001 [DEBUG] [Thread-210906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:43:46.001 [DEBUG] [Thread-210906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:43:46.049 [DEBUG] [Thread-210906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:43:46.049 [DEBUG] [Thread-210906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:43:46.057 [DEBUG] [Thread-210906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:43:46.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:43:46.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:43:46.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:43:46.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:43:46.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:43:46.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:43:46.092 [DEBUG] [Thread-210906] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:43:49.577 [DEBUG] [Thread-210908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:04.462 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:04.669 [DEBUG] [Thread-210909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:10.965 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:12.443 [DEBUG] [Thread-210910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:16.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:44:16.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:44:16.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:44:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 43, 47), 15.38, 35.53, 0.0, 32.24, 17.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:44:17.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:43:47
2026-02-15T20:44:18.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:44:18.568 [DEBUG] [Thread-210911] [transport.py] [_log()] starting thread (client mode): 0xa5742680
2026-02-15T20:44:18.569 [DEBUG] [Thread-210911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:44:18.569 [DEBUG] [Thread-210911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:44:18.569 [INFO] [Thread-210911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:18.574 [DEBUG] [Thread-210911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:18.575 [DEBUG] [Thread-210911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:44:18.575 [DEBUG] [Thread-210911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:44:18.575 [DEBUG] [Thread-210911] [transport.py] [_log()] client lang: <none>
2026-02-15T20:44:18.575 [DEBUG] [Thread-210911] [transport.py] [_log()] server lang: <none>
2026-02-15T20:44:18.575 [DEBUG] [Thread-210911] [transport.py] [_log()] kex follows: False
2026-02-15T20:44:18.575 [DEBUG] [Thread-210911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:44:18.576 [DEBUG] [Thread-210911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:44:18.576 [DEBUG] [Thread-210911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:44:18.576 [DEBUG] [Thread-210911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:44:18.576 [DEBUG] [Thread-210911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:44:18.576 [DEBUG] [Thread-210911] [transport.py] [_log()] Compression: none
2026-02-15T20:44:18.576 [DEBUG] [Thread-210911] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:44:18.605 [DEBUG] [Thread-210911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:44:18.608 [DEBUG] [Thread-210911] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:44:18.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:44:18.613 [DEBUG] [Thread-210911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:44:18.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:44:18.631 [DEBUG] [Thread-210911] [transport.py] [_log()] userauth is OK
2026-02-15T20:44:18.631 [DEBUG] [Thread-210911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:44:18.632 [DEBUG] [Thread-210911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:44:18.632 [DEBUG] [Thread-210911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:44:18.632 [DEBUG] [Thread-210911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:44:18.650 [INFO] [Thread-210911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:44:18.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:44:19.262 [DEBUG] [Thread-210911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:44:19.262 [DEBUG] [Thread-210911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:44:19.264 [DEBUG] [Thread-210911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:44:19.303 [DEBUG] [Thread-210911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:44:19.304 [DEBUG] [Thread-210911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:44:19.306 [DEBUG] [Thread-210911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:44:19.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:44:19.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:44:19.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:44:19.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:44:19.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:44:19.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:44:19.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:44:19.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:44:19.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:44:19.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.780659 -999.00  +16.90  17.45     41   +3.50 1 1 1 1 1     0    0 13.90 15.19 ZNESW 20.8 17.4 149.0 29.2 17.1 -24.8 17.0 -23.8 16.8 -22.6 17.1 -23.9
2026-02-15T20:44:19.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:44:19.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:44:19.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.780659
2026-02-15T20:44:19.349 [DEBUG] [Thread-210911] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:44:19.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:44:19.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:44:19.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:44:19.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:44:19.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:44:19.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:43:47', tmtdew=15.38, humidity=35.53, cloud=0.0, wind=32.24, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:43:47', seeing=1.89, atlas_timestamp='2026-02-15T18:44:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:42:00')
2026-02-15T20:44:19.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:44:19.478 [DEBUG] [Thread-210914] [transport.py] [_log()] starting thread (client mode): 0xa2d6e020
2026-02-15T20:44:19.478 [DEBUG] [Thread-210914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:44:19.493 [DEBUG] [Thread-210914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:44:19.493 [INFO] [Thread-210914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:44:19.500 [DEBUG] [Thread-210914] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:44:19.500 [DEBUG] [Thread-210914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] client lang: <none>
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] server lang: <none>
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] kex follows: False
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:44:19.501 [DEBUG] [Thread-210914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:44:19.502 [DEBUG] [Thread-210914] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:44:19.502 [DEBUG] [Thread-210914] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:44:19.502 [DEBUG] [Thread-210914] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:44:19.502 [DEBUG] [Thread-210914] [transport.py] [_log()] Compression: none
2026-02-15T20:44:19.502 [DEBUG] [Thread-210914] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:44:19.558 [DEBUG] [Thread-210914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:44:19.559 [DEBUG] [Thread-210914] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:44:19.560 [DEBUG] [Thread-210914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:44:19.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:44:19.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:44:19.614 [DEBUG] [Thread-210914] [transport.py] [_log()] userauth is OK
2026-02-15T20:44:19.614 [DEBUG] [Thread-210914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:44:19.614 [DEBUG] [Thread-210914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:44:19.615 [DEBUG] [Thread-210914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:44:19.615 [DEBUG] [Thread-210914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:44:19.637 [INFO] [Thread-210914] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:44:19.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:44:19.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:44:19.697 [DEBUG] [Thread-210916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:19.737 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:20.446 [DEBUG] [Thread-210914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:44:20.446 [DEBUG] [Thread-210914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:44:20.494 [DEBUG] [Thread-210914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:44:20.495 [DEBUG] [Thread-210914] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:44:20.504 [DEBUG] [Thread-210914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:44:20.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:44:20.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:44:20.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:44:20.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:44:20.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:44:20.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:44:20.541 [DEBUG] [Thread-210914] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:44:23.435 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:23.831 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:30.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:30.559 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:34.791 [DEBUG] [Thread-210917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:42.359 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:49.827 [DEBUG] [Thread-210918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:44:50.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:44:50.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:44:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:44:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 44, 22), 15.38, 35.55, 0.0, 30.9, 16.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:44:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:44:22
2026-02-15T20:44:52.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:44:53.057 [DEBUG] [Thread-210919] [transport.py] [_log()] starting thread (client mode): 0xa2d123b0
2026-02-15T20:44:53.057 [DEBUG] [Thread-210919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:44:53.058 [DEBUG] [Thread-210919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:44:53.058 [INFO] [Thread-210919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] client lang: <none>
2026-02-15T20:44:53.070 [DEBUG] [Thread-210919] [transport.py] [_log()] server lang: <none>
2026-02-15T20:44:53.071 [DEBUG] [Thread-210919] [transport.py] [_log()] kex follows: False
2026-02-15T20:44:53.071 [DEBUG] [Thread-210919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:44:53.072 [DEBUG] [Thread-210919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:44:53.072 [DEBUG] [Thread-210919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:44:53.072 [DEBUG] [Thread-210919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:44:53.072 [DEBUG] [Thread-210919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:44:53.072 [DEBUG] [Thread-210919] [transport.py] [_log()] Compression: none
2026-02-15T20:44:53.072 [DEBUG] [Thread-210919] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:44:53.101 [DEBUG] [Thread-210919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:44:53.123 [DEBUG] [Thread-210919] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:44:53.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:44:53.126 [DEBUG] [Thread-210919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:44:53.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:44:53.129 [DEBUG] [Thread-210919] [transport.py] [_log()] userauth is OK
2026-02-15T20:44:53.130 [DEBUG] [Thread-210919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:44:53.130 [DEBUG] [Thread-210919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:44:53.130 [DEBUG] [Thread-210919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:44:53.130 [DEBUG] [Thread-210919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:44:53.162 [INFO] [Thread-210919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:44:53.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:44:53.723 [DEBUG] [Thread-210919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:44:53.723 [DEBUG] [Thread-210919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:44:53.724 [DEBUG] [Thread-210919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:44:53.765 [DEBUG] [Thread-210919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:44:53.765 [DEBUG] [Thread-210919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:44:53.767 [DEBUG] [Thread-210919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:44:53.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:44:53.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:44:53.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:44:53.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:44:53.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:44:53.783 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:44:53.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:44:53.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:44:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:44:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.781007 -999.00  +16.80  28.03     41   +3.50 1 1 1 1 1     0    0 13.71 13.95 ZNESW 22.3 28.0 140.6 36.0 17.1 -24.8 17.0 -23.8 16.8 -22.6 17.1 -24.0
2026-02-15T20:44:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:44:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:44:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.781007
2026-02-15T20:44:53.789 [DEBUG] [Thread-210919] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:44:53.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:44:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:44:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:44:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:44:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:44:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:44:22', tmtdew=15.38, humidity=35.55, cloud=0.0, wind=30.9, temperature=16.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:44:23', seeing=2.15, atlas_timestamp='2026-02-15T18:44:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:42:00')
2026-02-15T20:44:53.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:44:53.887 [DEBUG] [Thread-210922] [transport.py] [_log()] starting thread (client mode): 0xa2d11210
2026-02-15T20:44:53.887 [DEBUG] [Thread-210922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:44:53.902 [DEBUG] [Thread-210922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:44:53.902 [INFO] [Thread-210922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] client lang: <none>
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] server lang: <none>
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] kex follows: False
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] Compression: none
2026-02-15T20:44:53.910 [DEBUG] [Thread-210922] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:44:53.968 [DEBUG] [Thread-210922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:44:53.968 [DEBUG] [Thread-210922] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:44:53.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:44:53.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:44:53.969 [DEBUG] [Thread-210922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:44:54.025 [DEBUG] [Thread-210922] [transport.py] [_log()] userauth is OK
2026-02-15T20:44:54.025 [DEBUG] [Thread-210922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:44:54.025 [DEBUG] [Thread-210922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:44:54.025 [DEBUG] [Thread-210922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:44:54.025 [DEBUG] [Thread-210922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:44:54.041 [INFO] [Thread-210922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:44:54.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:44:54.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:44:54.874 [DEBUG] [Thread-210922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:44:54.874 [DEBUG] [Thread-210922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:44:54.922 [DEBUG] [Thread-210922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:44:54.922 [DEBUG] [Thread-210922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:44:54.930 [DEBUG] [Thread-210922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:44:54.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:44:54.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:44:54.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:44:54.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:44:54.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:44:54.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:44:54.965 [DEBUG] [Thread-210922] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:45:01.091 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:04.856 [DEBUG] [Thread-210924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:12.794 [DEBUG] [Thread-210925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:19.753 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:19.951 [DEBUG] [Thread-210926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:24.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:45:24.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:45:24.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:45:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 44, 57), 15.35, 35.6, 0.0, 31.73, 16.97, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:45:26.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:44:57
2026-02-15T20:45:27.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:45:27.379 [DEBUG] [Thread-210927] [transport.py] [_log()] starting thread (client mode): 0xa57d7580
2026-02-15T20:45:27.379 [DEBUG] [Thread-210927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:45:27.400 [DEBUG] [Thread-210927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:45:27.400 [INFO] [Thread-210927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:45:27.403 [DEBUG] [Thread-210927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:45:27.403 [DEBUG] [Thread-210927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:45:27.403 [DEBUG] [Thread-210927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] client lang: <none>
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] server lang: <none>
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] kex follows: False
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:45:27.404 [DEBUG] [Thread-210927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:45:27.405 [DEBUG] [Thread-210927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:45:27.405 [DEBUG] [Thread-210927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:45:27.405 [DEBUG] [Thread-210927] [transport.py] [_log()] Compression: none
2026-02-15T20:45:27.405 [DEBUG] [Thread-210927] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:45:27.417 [DEBUG] [Thread-210927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:45:27.418 [DEBUG] [Thread-210927] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:45:27.418 [DEBUG] [Thread-210927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:45:27.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:45:27.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:45:27.419 [DEBUG] [Thread-210927] [transport.py] [_log()] userauth is OK
2026-02-15T20:45:27.419 [DEBUG] [Thread-210927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:45:27.420 [DEBUG] [Thread-210927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:45:27.420 [DEBUG] [Thread-210927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:45:27.420 [DEBUG] [Thread-210927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:45:27.431 [INFO] [Thread-210927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:45:27.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:45:28.019 [DEBUG] [Thread-210927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:45:28.020 [DEBUG] [Thread-210927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:45:28.020 [DEBUG] [Thread-210927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:45:28.060 [DEBUG] [Thread-210927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:45:28.060 [DEBUG] [Thread-210927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:45:28.062 [DEBUG] [Thread-210927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:45:28.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:45:28.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:45:28.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:45:28.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:45:28.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:45:28.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:45:28.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:45:28.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:45:28.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:45:28.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.781354 -999.00  +16.80  15.71     41   +3.50 1 1 1 1 1     0    0 13.65 13.73 ZNESW 21.5 15.7 156.8 24.7 17.1 -24.8 17.0 -23.8 16.8 -22.6 17.1 -24.1
2026-02-15T20:45:28.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:45:28.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:45:28.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.781354
2026-02-15T20:45:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:45:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:45:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:45:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:45:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:45:28.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:44:57', tmtdew=15.35, humidity=35.6, cloud=0.0, wind=31.73, temperature=16.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:44:58', seeing=2.03, atlas_timestamp='2026-02-15T18:45:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:42:00')
2026-02-15T20:45:28.084 [DEBUG] [Thread-210927] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:45:28.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:45:28.173 [DEBUG] [Thread-210930] [transport.py] [_log()] starting thread (client mode): 0xa57d6bc0
2026-02-15T20:45:28.173 [DEBUG] [Thread-210930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:45:28.184 [DEBUG] [Thread-210930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:45:28.184 [INFO] [Thread-210930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] client lang: <none>
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] server lang: <none>
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] kex follows: False
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] Compression: none
2026-02-15T20:45:28.192 [DEBUG] [Thread-210930] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:45:28.248 [DEBUG] [Thread-210930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:45:28.248 [DEBUG] [Thread-210930] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:45:28.248 [DEBUG] [Thread-210930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:45:28.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:45:28.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:45:28.306 [DEBUG] [Thread-210930] [transport.py] [_log()] userauth is OK
2026-02-15T20:45:28.306 [DEBUG] [Thread-210930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:45:28.306 [DEBUG] [Thread-210930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:45:28.306 [DEBUG] [Thread-210930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:45:28.306 [DEBUG] [Thread-210930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:45:28.323 [INFO] [Thread-210930] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:45:28.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:45:28.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:45:29.143 [DEBUG] [Thread-210930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:45:29.143 [DEBUG] [Thread-210930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:45:29.191 [DEBUG] [Thread-210930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:45:29.191 [DEBUG] [Thread-210930] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:45:29.199 [DEBUG] [Thread-210930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:45:29.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:45:29.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:45:29.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:45:29.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:45:29.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:45:29.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:45:29.230 [DEBUG] [Thread-210930] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:45:30.761 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:30.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:34.976 [DEBUG] [Thread-210932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:38.400 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:46.517 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:50.015 [DEBUG] [Thread-210933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:55.201 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:57.314 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:45:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:45:59.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:45:59.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:45:59.308 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:01.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 45, 33), 15.53, 35.13, 0.0, 35.07, 17.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:46:01.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:45:33
2026-02-15T20:46:02.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:46:02.223 [DEBUG] [Thread-210934] [transport.py] [_log()] starting thread (client mode): 0xa57421d0
2026-02-15T20:46:02.224 [DEBUG] [Thread-210934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:46:02.240 [DEBUG] [Thread-210934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:46:02.240 [INFO] [Thread-210934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] client lang: <none>
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] server lang: <none>
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] kex follows: False
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:46:02.243 [DEBUG] [Thread-210934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:46:02.244 [DEBUG] [Thread-210934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:46:02.244 [DEBUG] [Thread-210934] [transport.py] [_log()] Compression: none
2026-02-15T20:46:02.244 [DEBUG] [Thread-210934] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:46:02.266 [DEBUG] [Thread-210934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:46:02.268 [DEBUG] [Thread-210934] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:46:02.269 [DEBUG] [Thread-210934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:46:02.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:46:02.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:46:02.309 [DEBUG] [Thread-210934] [transport.py] [_log()] userauth is OK
2026-02-15T20:46:02.309 [DEBUG] [Thread-210934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:46:02.310 [DEBUG] [Thread-210934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:46:02.310 [DEBUG] [Thread-210934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:46:02.310 [DEBUG] [Thread-210934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:46:02.335 [INFO] [Thread-210934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:46:02.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:46:02.932 [DEBUG] [Thread-210934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:46:02.932 [DEBUG] [Thread-210934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:46:02.932 [DEBUG] [Thread-210934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:46:02.973 [DEBUG] [Thread-210934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:46:02.973 [DEBUG] [Thread-210934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:46:02.975 [DEBUG] [Thread-210934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:46:02.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:46:02.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:46:02.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:46:02.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:46:02.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:46:02.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:46:02.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:46:02.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:46:02.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:46:02.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.781701 -999.00  +16.80  19.38     41   +3.50 1 1 1 1 1     0    0 13.89 13.80 ZNESW 14.9 19.4 150.2 27.0 17.1 -24.8 17.0 -23.7 16.8 -22.7 17.1 -24.0
2026-02-15T20:46:02.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:46:02.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:46:02.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.781701
2026-02-15T20:46:03.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:46:03.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:46:03.003 [DEBUG] [Thread-210934] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:46:03.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:46:03.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:46:03.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:46:03.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:45:33', tmtdew=15.53, humidity=35.13, cloud=0.0, wind=35.07, temperature=17.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:45:33', seeing=1.73, atlas_timestamp='2026-02-15T18:45:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:42:00')
2026-02-15T20:46:03.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:46:03.095 [DEBUG] [Thread-210937] [transport.py] [_log()] starting thread (client mode): 0xa57431c0
2026-02-15T20:46:03.095 [DEBUG] [Thread-210937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:46:03.109 [DEBUG] [Thread-210937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:46:03.110 [INFO] [Thread-210937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:46:03.117 [DEBUG] [Thread-210937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:46:03.117 [DEBUG] [Thread-210937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:46:03.117 [DEBUG] [Thread-210937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] client lang: <none>
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] server lang: <none>
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] kex follows: False
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:46:03.118 [DEBUG] [Thread-210937] [transport.py] [_log()] Compression: none
2026-02-15T20:46:03.119 [DEBUG] [Thread-210937] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:46:03.178 [DEBUG] [Thread-210937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:46:03.178 [DEBUG] [Thread-210937] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:46:03.179 [DEBUG] [Thread-210937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:46:03.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:46:03.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:46:03.234 [DEBUG] [Thread-210937] [transport.py] [_log()] userauth is OK
2026-02-15T20:46:03.235 [DEBUG] [Thread-210937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:46:03.235 [DEBUG] [Thread-210937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:46:03.235 [DEBUG] [Thread-210937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:46:03.235 [DEBUG] [Thread-210937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:46:03.256 [INFO] [Thread-210937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:46:03.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:46:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:46:04.123 [DEBUG] [Thread-210937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:46:04.123 [DEBUG] [Thread-210937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:46:04.171 [DEBUG] [Thread-210937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:46:04.171 [DEBUG] [Thread-210937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:46:04.180 [DEBUG] [Thread-210937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:46:04.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:46:04.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:46:04.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:46:04.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:46:04.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:46:04.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:46:04.215 [DEBUG] [Thread-210937] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:46:05.042 [DEBUG] [Thread-210939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:13.341 [DEBUG] [Thread-210940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:16.274 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:20.094 [DEBUG] [Thread-210941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:30.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:30.964 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:34.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:46:34.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:46:34.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
2026-02-15T20:46:34.921 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:35.121 [DEBUG] [Thread-210942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 46, 8), 15.38, 35.55, 0.0, 27.42, 17.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:46:36.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:46:08
2026-02-15T20:46:36.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:46:36.693 [DEBUG] [Thread-210943] [transport.py] [_log()] starting thread (client mode): 0xa2d3d990
2026-02-15T20:46:36.694 [DEBUG] [Thread-210943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:46:36.694 [DEBUG] [Thread-210943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:46:36.694 [INFO] [Thread-210943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:36.696 [DEBUG] [Thread-210943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] client lang: <none>
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] server lang: <none>
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] kex follows: False
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] Compression: none
2026-02-15T20:46:36.697 [DEBUG] [Thread-210943] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:46:36.705 [DEBUG] [Thread-210943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:46:36.705 [DEBUG] [Thread-210943] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:46:36.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:46:36.705 [DEBUG] [Thread-210943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:46:36.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:46:36.706 [DEBUG] [Thread-210943] [transport.py] [_log()] userauth is OK
2026-02-15T20:46:36.706 [DEBUG] [Thread-210943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:46:36.706 [DEBUG] [Thread-210943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:46:36.706 [DEBUG] [Thread-210943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:46:36.706 [DEBUG] [Thread-210943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:46:36.715 [INFO] [Thread-210943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:46:36.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:46:37.300 [DEBUG] [Thread-210943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:46:37.300 [DEBUG] [Thread-210943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:46:37.300 [DEBUG] [Thread-210943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:46:37.341 [DEBUG] [Thread-210943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:46:37.341 [DEBUG] [Thread-210943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:46:37.344 [DEBUG] [Thread-210943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:46:37.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:46:37.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:46:37.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:46:37.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:46:37.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:46:37.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:46:37.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:46:37.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:46:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:46:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.782048 -999.00  +16.80  19.68     41   +3.50 1 1 1 1 1     0    0 13.42 13.11 ZNESW 17.1 19.7 156.2 29.8 17.1 -24.9 17.0 -23.7 16.8 -22.8 17.1 -23.8
2026-02-15T20:46:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:46:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:46:37.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.782048
2026-02-15T20:46:37.370 [DEBUG] [Thread-210943] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:46:37.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:46:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:46:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:46:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:46:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:46:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:46:08', tmtdew=15.38, humidity=35.55, cloud=0.0, wind=27.42, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:46:08', seeing=2.14, atlas_timestamp='2026-02-15T18:46:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.008250000000000313, 0.0012500000000006395, -0.011749999999999261, -0.002500000000001279, -0.006000000000000227, 0.026250000000000995, -0.02800000000000047, -0.040749999999999176, 0.0004999999999988347, -0.05450000000000088, -0.0002500000000011937, -0.016000000000000014, 0.041499999999999204, 0.03725000000000023, -0.04300000000000104, -0.027000000000001023, 0.02874999999999872, 0.01950000000000074, -0.023000000000001464, -0.045750000000001734, 0.06499999999999773, 0.022749999999998494, -0.025749999999998607, -0.034750000000000725, -1.7763568394002505e-15, 0.0495000000000001, -0.024250000000000327, -0.03149999999999942, 0.1039999999999992, 0.034000000000000696, 0.012500000000001066, 0.002000000000000668, 0.029749999999999943], zp_timestamp='2026-02-15T18:42:00')
2026-02-15T20:46:37.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:46:37.465 [DEBUG] [Thread-210946] [transport.py] [_log()] starting thread (client mode): 0xa2d6db10
2026-02-15T20:46:37.465 [DEBUG] [Thread-210946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:46:37.479 [DEBUG] [Thread-210946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:46:37.479 [INFO] [Thread-210946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] client lang: <none>
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] server lang: <none>
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] kex follows: False
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] Compression: none
2026-02-15T20:46:37.487 [DEBUG] [Thread-210946] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:46:37.542 [DEBUG] [Thread-210946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:46:37.542 [DEBUG] [Thread-210946] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:46:37.542 [DEBUG] [Thread-210946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:46:37.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:46:37.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:46:37.599 [DEBUG] [Thread-210946] [transport.py] [_log()] userauth is OK
2026-02-15T20:46:37.599 [DEBUG] [Thread-210946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:46:37.599 [DEBUG] [Thread-210946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:46:37.599 [DEBUG] [Thread-210946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:46:37.599 [DEBUG] [Thread-210946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:46:37.613 [INFO] [Thread-210946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:46:37.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:46:37.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:46:38.424 [DEBUG] [Thread-210946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:46:38.424 [DEBUG] [Thread-210946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:46:38.471 [DEBUG] [Thread-210946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:46:38.472 [DEBUG] [Thread-210946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:46:38.480 [DEBUG] [Thread-210946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:46:38.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:46:38.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:46:38.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:46:38.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:46:38.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:46:38.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:46:38.512 [DEBUG] [Thread-210946] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:46:50.147 [DEBUG] [Thread-210948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:46:53.581 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:05.279 [DEBUG] [Thread-210949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:08.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:47:08.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:47:08.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:47:10.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 46, 43), 15.33, 35.53, 0.0, 31.87, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:47:10.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:46:43
2026-02-15T20:47:11.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:47:11.225 [DEBUG] [Thread-210950] [transport.py] [_log()] starting thread (client mode): 0xa2d6e170
2026-02-15T20:47:11.226 [DEBUG] [Thread-210950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:47:11.233 [DEBUG] [Thread-210950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:47:11.233 [INFO] [Thread-210950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] client lang: <none>
2026-02-15T20:47:11.236 [DEBUG] [Thread-210950] [transport.py] [_log()] server lang: <none>
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] kex follows: False
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] Compression: none
2026-02-15T20:47:11.237 [DEBUG] [Thread-210950] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:47:11.265 [DEBUG] [Thread-210950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:47:11.269 [DEBUG] [Thread-210950] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:47:11.270 [DEBUG] [Thread-210950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:47:11.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:47:11.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:47:11.275 [DEBUG] [Thread-210950] [transport.py] [_log()] userauth is OK
2026-02-15T20:47:11.275 [DEBUG] [Thread-210950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:47:11.275 [DEBUG] [Thread-210950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:47:11.275 [DEBUG] [Thread-210950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:47:11.275 [DEBUG] [Thread-210950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:47:11.298 [INFO] [Thread-210950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:47:11.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:47:11.964 [DEBUG] [Thread-210950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:47:11.964 [DEBUG] [Thread-210950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:47:11.965 [DEBUG] [Thread-210950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:47:12.005 [DEBUG] [Thread-210950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:47:12.005 [DEBUG] [Thread-210950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:47:12.007 [DEBUG] [Thread-210950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:47:12.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:47:12.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:47:12.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:47:12.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:47:12.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:47:12.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:47:12.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:47:12.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:47:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:47:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.782048 -999.00  +16.80  19.68     41   +3.50 1 1 1 1 1     0    0 13.42 13.11 ZNESW 17.1 19.7 156.2 29.8 17.1 -24.9 17.0 -23.7 16.8 -22.8 17.1 -23.8
2026-02-15T20:47:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:47:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:47:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.782048
2026-02-15T20:47:12.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:47:12.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:47:12.032 [DEBUG] [Thread-210950] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:47:12.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:47:12.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:47:12.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:47:12.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:46:43', tmtdew=15.33, humidity=35.53, cloud=0.0, wind=31.87, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:46:43', seeing=2.41, atlas_timestamp='2026-02-15T18:46:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:46:00')
2026-02-15T20:47:12.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:47:12.118 [DEBUG] [Thread-210953] [transport.py] [_log()] starting thread (client mode): 0xa2d55240
2026-02-15T20:47:12.118 [DEBUG] [Thread-210953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:47:12.133 [DEBUG] [Thread-210953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:47:12.133 [INFO] [Thread-210953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] client lang: <none>
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] server lang: <none>
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] kex follows: False
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] Compression: none
2026-02-15T20:47:12.141 [DEBUG] [Thread-210953] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:47:12.200 [DEBUG] [Thread-210953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:47:12.201 [DEBUG] [Thread-210953] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:47:12.201 [DEBUG] [Thread-210953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:47:12.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:47:12.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:47:12.230 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:12.256 [DEBUG] [Thread-210953] [transport.py] [_log()] userauth is OK
2026-02-15T20:47:12.256 [DEBUG] [Thread-210953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:47:12.257 [DEBUG] [Thread-210953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:47:12.257 [DEBUG] [Thread-210953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:47:12.257 [DEBUG] [Thread-210953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:47:12.280 [INFO] [Thread-210953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:47:12.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:47:12.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:47:13.109 [DEBUG] [Thread-210953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:47:13.109 [DEBUG] [Thread-210953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:47:13.157 [DEBUG] [Thread-210953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:47:13.157 [DEBUG] [Thread-210953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:47:13.166 [DEBUG] [Thread-210953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:47:13.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:47:13.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:47: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') -> 00000000
2026-02-15T20:47:13.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:47:13.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:47:13.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:47:13.202 [DEBUG] [Thread-210953] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:47:14.012 [DEBUG] [Thread-210955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:20.305 [DEBUG] [Thread-210956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:21.969 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:30.711 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:31.056 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:31.164 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:31.165 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:34.823 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:35.367 [DEBUG] [Thread-210957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:43.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:47:43.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:47:43.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:47:45.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 47, 18), 15.32, 35.55, 0.0, 30.63, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:47:45.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:47:18
2026-02-15T20:47:45.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:47:45.762 [DEBUG] [Thread-210958] [transport.py] [_log()] starting thread (client mode): 0xa57b1210
2026-02-15T20:47:45.763 [DEBUG] [Thread-210958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:47:45.776 [DEBUG] [Thread-210958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:47:45.776 [INFO] [Thread-210958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:47:45.780 [DEBUG] [Thread-210958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:47:45.780 [DEBUG] [Thread-210958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:47:45.780 [DEBUG] [Thread-210958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:47:45.780 [DEBUG] [Thread-210958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:45.780 [DEBUG] [Thread-210958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] client lang: <none>
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] server lang: <none>
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] kex follows: False
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:47:45.781 [DEBUG] [Thread-210958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:47:45.782 [DEBUG] [Thread-210958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:47:45.782 [DEBUG] [Thread-210958] [transport.py] [_log()] Compression: none
2026-02-15T20:47:45.782 [DEBUG] [Thread-210958] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:47:45.809 [DEBUG] [Thread-210958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:47:45.812 [DEBUG] [Thread-210958] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:47:45.814 [DEBUG] [Thread-210958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:47:45.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:47:45.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:47:45.819 [DEBUG] [Thread-210958] [transport.py] [_log()] userauth is OK
2026-02-15T20:47:45.819 [DEBUG] [Thread-210958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:47:45.819 [DEBUG] [Thread-210958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:47:45.819 [DEBUG] [Thread-210958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:47:45.820 [DEBUG] [Thread-210958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:47:45.858 [INFO] [Thread-210958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:47:45.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:47:46.609 [DEBUG] [Thread-210958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:47:46.609 [DEBUG] [Thread-210958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:47:46.610 [DEBUG] [Thread-210958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:47:46.650 [DEBUG] [Thread-210958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:47:46.650 [DEBUG] [Thread-210958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:47:46.653 [DEBUG] [Thread-210958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:47:46.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:47:46.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:47:46.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:47:46.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:47:46.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:47:46.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:47:46.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:47:46.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:47:46.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:47:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.782396 -999.00  +16.80  18.33     41   +3.50 1 1 1 1 1     0    0 13.68 11.43 ZNESW 19.5 18.3 153.8 23.0 17.1 -24.8 17.0 -23.8 16.8 -22.6 17.1 -23.9
2026-02-15T20:47:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:47:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:47:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.782396
2026-02-15T20:47:46.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:47:46.681 [DEBUG] [Thread-210958] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:47:46.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:47:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:47:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:47:46.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:47:46.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:47:18', tmtdew=15.32, humidity=35.55, cloud=0.0, wind=30.63, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:47:19', seeing=2.01, atlas_timestamp='2026-02-15T18:46:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:46:00')
2026-02-15T20:47:46.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:47:46.791 [DEBUG] [Thread-210961] [transport.py] [_log()] starting thread (client mode): 0xa57d7580
2026-02-15T20:47:46.792 [DEBUG] [Thread-210961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:47:46.808 [DEBUG] [Thread-210961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:47:46.808 [INFO] [Thread-210961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:47:46.815 [DEBUG] [Thread-210961] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] client lang: <none>
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] server lang: <none>
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] kex follows: False
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] Compression: none
2026-02-15T20:47:46.816 [DEBUG] [Thread-210961] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:47:46.875 [DEBUG] [Thread-210961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:47:46.875 [DEBUG] [Thread-210961] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:47:46.875 [DEBUG] [Thread-210961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:47:46.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:47:46.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:47:46.932 [DEBUG] [Thread-210961] [transport.py] [_log()] userauth is OK
2026-02-15T20:47:46.933 [DEBUG] [Thread-210961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:47:46.933 [DEBUG] [Thread-210961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:47:46.933 [DEBUG] [Thread-210961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:47:46.933 [DEBUG] [Thread-210961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:47:46.955 [INFO] [Thread-210961] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:47:46.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:47:46.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:47:47.815 [DEBUG] [Thread-210961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:47:47.815 [DEBUG] [Thread-210961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:47:47.864 [DEBUG] [Thread-210961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:47:47.864 [DEBUG] [Thread-210961] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:47:47.873 [DEBUG] [Thread-210961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:47:47.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:47:47.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:47:47.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:47:47.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:47:47.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:47:47.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:47:47.908 [DEBUG] [Thread-210961] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:47:50.050 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:47:50.402 [DEBUG] [Thread-210963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:05.467 [DEBUG] [Thread-210964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:09.076 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:14.702 [DEBUG] [Thread-210965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:17.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:48:17.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:48:17.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:48:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 47, 55), 15.31, 35.58, 0.0, 32.38, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:48:19.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:47:55
2026-02-15T20:48:20.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:48:20.497 [DEBUG] [Thread-210966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:20.532 [DEBUG] [Thread-210967] [transport.py] [_log()] starting thread (client mode): 0xa57d5e70
2026-02-15T20:48:20.532 [DEBUG] [Thread-210967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:48:20.548 [DEBUG] [Thread-210967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:48:20.549 [INFO] [Thread-210967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] client lang: <none>
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] server lang: <none>
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] kex follows: False
2026-02-15T20:48:20.552 [DEBUG] [Thread-210967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:48:20.553 [DEBUG] [Thread-210967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:48:20.553 [DEBUG] [Thread-210967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:48:20.553 [DEBUG] [Thread-210967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:48:20.553 [DEBUG] [Thread-210967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:48:20.553 [DEBUG] [Thread-210967] [transport.py] [_log()] Compression: none
2026-02-15T20:48:20.553 [DEBUG] [Thread-210967] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:48:20.581 [DEBUG] [Thread-210967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:48:20.584 [DEBUG] [Thread-210967] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:48:20.586 [DEBUG] [Thread-210967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:48:20.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:48:20.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:48:20.591 [DEBUG] [Thread-210967] [transport.py] [_log()] userauth is OK
2026-02-15T20:48:20.591 [DEBUG] [Thread-210967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:48:20.591 [DEBUG] [Thread-210967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:48:20.591 [DEBUG] [Thread-210967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:48:20.591 [DEBUG] [Thread-210967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:48:20.618 [INFO] [Thread-210967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:48:20.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:48:21.242 [DEBUG] [Thread-210967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:48:21.243 [DEBUG] [Thread-210967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:48:21.244 [DEBUG] [Thread-210967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:48:21.283 [DEBUG] [Thread-210967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:48:21.283 [DEBUG] [Thread-210967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:48:21.287 [DEBUG] [Thread-210967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:48:21.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:48:21.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:48:21.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:48:21.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:48:21.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:48:21.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:48:21.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:48:21.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:48:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:48:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.783090 -999.00  +16.80  23.21     41   +3.50 1 1 1 1 1     0    0 13.34 9.07 ZNESW 23.9 23.2 157.1 29.1 17.1 -24.8 17.0 -23.7 16.8 -22.7 17.0 -23.8
2026-02-15T20:48:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:48:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:48:21.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.783090
2026-02-15T20:48:21.320 [DEBUG] [Thread-210967] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:48:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:48:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:48:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:48:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:48:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:48:21.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:47:55', tmtdew=15.31, humidity=35.58, cloud=0.0, wind=32.38, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:47:55', seeing=2.0, atlas_timestamp='2026-02-15T18:47:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:46:00')
2026-02-15T20:48:21.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:48:21.417 [DEBUG] [Thread-210970] [transport.py] [_log()] starting thread (client mode): 0xa2d047f0
2026-02-15T20:48:21.417 [DEBUG] [Thread-210970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:48:21.428 [DEBUG] [Thread-210970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:48:21.428 [INFO] [Thread-210970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:48:21.435 [DEBUG] [Thread-210970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:48:21.435 [DEBUG] [Thread-210970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:48:21.435 [DEBUG] [Thread-210970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] client lang: <none>
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] server lang: <none>
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] kex follows: False
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] Compression: none
2026-02-15T20:48:21.436 [DEBUG] [Thread-210970] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:48:21.492 [DEBUG] [Thread-210970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:48:21.493 [DEBUG] [Thread-210970] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:48:21.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:48:21.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:48:21.499 [DEBUG] [Thread-210970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:48:21.550 [DEBUG] [Thread-210970] [transport.py] [_log()] userauth is OK
2026-02-15T20:48:21.550 [DEBUG] [Thread-210970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:48:21.550 [DEBUG] [Thread-210970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:48:21.550 [DEBUG] [Thread-210970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:48:21.550 [DEBUG] [Thread-210970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:48:21.573 [INFO] [Thread-210970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:48:21.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:48:21.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:48:22.438 [DEBUG] [Thread-210970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:48:22.438 [DEBUG] [Thread-210970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:48:22.486 [DEBUG] [Thread-210970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:48:22.486 [DEBUG] [Thread-210970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:48:22.496 [DEBUG] [Thread-210970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:48:22.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:48:22.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:48:22.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:48:22.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:48:22.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:48:22.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:48:22.536 [DEBUG] [Thread-210970] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:48:27.734 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:31.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:31.370 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:35.536 [DEBUG] [Thread-210972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:46.382 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:50.656 [DEBUG] [Thread-210973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:48:52.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:48:52.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:48:52.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:48:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 48, 31), 15.3, 35.6, 0.0, 34.14, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:48:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:48:31
2026-02-15T20:48:54.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:48:55.027 [DEBUG] [Thread-210974] [transport.py] [_log()] starting thread (client mode): 0xa2d56170
2026-02-15T20:48:55.028 [DEBUG] [Thread-210974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:48:55.046 [DEBUG] [Thread-210974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:48:55.046 [INFO] [Thread-210974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:48:55.049 [DEBUG] [Thread-210974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:48:55.049 [DEBUG] [Thread-210974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:48:55.049 [DEBUG] [Thread-210974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:48:55.049 [DEBUG] [Thread-210974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] client lang: <none>
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] server lang: <none>
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] kex follows: False
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:48:55.050 [DEBUG] [Thread-210974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:48:55.051 [DEBUG] [Thread-210974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:48:55.051 [DEBUG] [Thread-210974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:48:55.051 [DEBUG] [Thread-210974] [transport.py] [_log()] Compression: none
2026-02-15T20:48:55.051 [DEBUG] [Thread-210974] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:48:55.078 [DEBUG] [Thread-210974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:48:55.083 [DEBUG] [Thread-210974] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:48:55.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:48:55.086 [DEBUG] [Thread-210974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:48:55.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:48:55.088 [DEBUG] [Thread-210974] [transport.py] [_log()] userauth is OK
2026-02-15T20:48:55.088 [DEBUG] [Thread-210974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:48:55.088 [DEBUG] [Thread-210974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:48:55.088 [DEBUG] [Thread-210974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:48:55.088 [DEBUG] [Thread-210974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:48:55.117 [INFO] [Thread-210974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:48:55.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:48:55.719 [DEBUG] [Thread-210974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:48:55.719 [DEBUG] [Thread-210974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:48:55.721 [DEBUG] [Thread-210974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:48:55.760 [DEBUG] [Thread-210974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:48:55.760 [DEBUG] [Thread-210974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:48:55.763 [DEBUG] [Thread-210974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:48:55.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:48:55.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:48:55.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:48:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:48:55.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:48:55.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:48:55.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:48:55.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:48:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:48:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.783437 -999.00  +16.80  23.05     41   +3.50 1 1 1 1 1     0    0 13.47 8.28 ZNESW 22.6 23.1 146.4 29.2 17.1 -24.8 16.9 -23.8 16.8 -22.6 17.1 -23.9
2026-02-15T20:48:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:48:55.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:48:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.783437
2026-02-15T20:48:55.793 [DEBUG] [Thread-210974] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:48:55.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:48:55.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:48:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:48:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:48:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:48:55.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:48:31', tmtdew=15.3, humidity=35.6, cloud=0.0, wind=34.14, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:48:32', seeing=1.5, atlas_timestamp='2026-02-15T18:48:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:46:00')
2026-02-15T20:48:55.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:48:55.894 [DEBUG] [Thread-210977] [transport.py] [_log()] starting thread (client mode): 0xa2d13d00
2026-02-15T20:48:55.895 [DEBUG] [Thread-210977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:48:55.911 [DEBUG] [Thread-210977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:48:55.912 [INFO] [Thread-210977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:48:55.920 [DEBUG] [Thread-210977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] client lang: <none>
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] server lang: <none>
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] kex follows: False
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:48:55.921 [DEBUG] [Thread-210977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:48:55.922 [DEBUG] [Thread-210977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:48:55.922 [DEBUG] [Thread-210977] [transport.py] [_log()] Compression: none
2026-02-15T20:48:55.922 [DEBUG] [Thread-210977] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:48:55.979 [DEBUG] [Thread-210977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:48:55.980 [DEBUG] [Thread-210977] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:48:55.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:48:55.981 [DEBUG] [Thread-210977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:48:55.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:48:56.038 [DEBUG] [Thread-210977] [transport.py] [_log()] userauth is OK
2026-02-15T20:48:56.038 [DEBUG] [Thread-210977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:48:56.038 [DEBUG] [Thread-210977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:48:56.038 [DEBUG] [Thread-210977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:48:56.038 [DEBUG] [Thread-210977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:48:56.060 [INFO] [Thread-210977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:48:56.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:48:56.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:48:56.875 [DEBUG] [Thread-210977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:48:56.875 [DEBUG] [Thread-210977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:48:56.923 [DEBUG] [Thread-210977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:48:56.923 [DEBUG] [Thread-210977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:48:56.934 [DEBUG] [Thread-210977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:48:56.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:48:56.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:48:56.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:48:56.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:48:56.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:48:56.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:48:56.972 [DEBUG] [Thread-210977] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:48:57.380 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:05.079 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:05.690 [DEBUG] [Thread-210979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:15.184 [DEBUG] [Thread-210980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:20.783 [DEBUG] [Thread-210981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:23.939 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:49:27.003 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:49:27.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:49:28.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 49, 7), 15.31, 35.58, 0.0, 31.58, 16.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:49:28.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:49:07
2026-02-15T20:49:29.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:49:29.484 [DEBUG] [Thread-210982] [transport.py] [_log()] starting thread (client mode): 0xa2d6e560
2026-02-15T20:49:29.484 [DEBUG] [Thread-210982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:49:29.497 [DEBUG] [Thread-210982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:49:29.498 [INFO] [Thread-210982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:49:29.504 [DEBUG] [Thread-210982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:49:29.505 [DEBUG] [Thread-210982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:49:29.506 [DEBUG] [Thread-210982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:49:29.506 [DEBUG] [Thread-210982] [transport.py] [_log()] client lang: <none>
2026-02-15T20:49:29.506 [DEBUG] [Thread-210982] [transport.py] [_log()] server lang: <none>
2026-02-15T20:49:29.506 [DEBUG] [Thread-210982] [transport.py] [_log()] kex follows: False
2026-02-15T20:49:29.506 [DEBUG] [Thread-210982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:49:29.507 [DEBUG] [Thread-210982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:49:29.507 [DEBUG] [Thread-210982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:49:29.507 [DEBUG] [Thread-210982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:49:29.508 [DEBUG] [Thread-210982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:49:29.508 [DEBUG] [Thread-210982] [transport.py] [_log()] Compression: none
2026-02-15T20:49:29.508 [DEBUG] [Thread-210982] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:49:29.547 [DEBUG] [Thread-210982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:49:29.554 [DEBUG] [Thread-210982] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:49:29.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:49:29.560 [DEBUG] [Thread-210982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:49:29.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:49:29.565 [DEBUG] [Thread-210982] [transport.py] [_log()] userauth is OK
2026-02-15T20:49:29.565 [DEBUG] [Thread-210982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:49:29.565 [DEBUG] [Thread-210982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:49:29.565 [DEBUG] [Thread-210982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:49:29.565 [DEBUG] [Thread-210982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:49:29.604 [INFO] [Thread-210982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:49:29.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:49:30.247 [DEBUG] [Thread-210982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:49:30.247 [DEBUG] [Thread-210982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:49:30.272 [DEBUG] [Thread-210982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:49:30.288 [DEBUG] [Thread-210982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:49:30.288 [DEBUG] [Thread-210982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:49:30.291 [DEBUG] [Thread-210982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:49:30.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:49:30.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:49:30.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:49:30.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:49:30.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:49:30.322 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:49:30.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:49:30.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:49:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:49:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.783784 -999.00  +16.80  18.88     41   +3.50 1 1 1 1 1     0    0 13.57 7.67 ZNESW 23.4 18.9 158.2 31.5 17.1 -24.8 17.0 -23.7 16.8 -22.6 17.0 -24.0
2026-02-15T20:49:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:49:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:49:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.783784
2026-02-15T20:49:30.330 [DEBUG] [Thread-210982] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:49:30.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:49:30.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:49:30.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:49:30.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:49:30.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:49:30.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:49:07', tmtdew=15.31, humidity=35.58, cloud=0.0, wind=31.58, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:49:07', seeing=1.73, atlas_timestamp='2026-02-15T18:48:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:46:00')
2026-02-15T20:49:30.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:49:30.455 [DEBUG] [Thread-210985] [transport.py] [_log()] starting thread (client mode): 0xa57403d0
2026-02-15T20:49:30.455 [DEBUG] [Thread-210985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:49:30.469 [DEBUG] [Thread-210985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:49:30.469 [INFO] [Thread-210985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] client lang: <none>
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] server lang: <none>
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] kex follows: False
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] Compression: none
2026-02-15T20:49:30.478 [DEBUG] [Thread-210985] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:49:30.534 [DEBUG] [Thread-210985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:49:30.534 [DEBUG] [Thread-210985] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:49:30.535 [DEBUG] [Thread-210985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:49:30.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:49:30.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:49:30.590 [DEBUG] [Thread-210985] [transport.py] [_log()] userauth is OK
2026-02-15T20:49:30.591 [DEBUG] [Thread-210985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:49:30.591 [DEBUG] [Thread-210985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:49:30.591 [DEBUG] [Thread-210985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:49:30.591 [DEBUG] [Thread-210985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:49:30.614 [INFO] [Thread-210985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:49:30.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:49:30.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:49:31.436 [DEBUG] [Thread-210985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:49:31.436 [DEBUG] [Thread-210985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:49:31.484 [DEBUG] [Thread-210985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:49:31.484 [DEBUG] [Thread-210985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:49:31.493 [DEBUG] [Thread-210985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:49:31.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:49:31.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:49:31.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:49:31.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:49:31.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:49:31.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:49:31.530 [DEBUG] [Thread-210985] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:49:31.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:31.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:35.815 [DEBUG] [Thread-210987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:42.951 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:50.423 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:50.944 [DEBUG] [Thread-210988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:53.730 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:49:58.752 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:01.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:50:01.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:50:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:50:01.657 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 49, 42), 15.51, 35.16, 0.0, 32.43, 17.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:50:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:49:42
2026-02-15T20:50:04.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:50:04.257 [DEBUG] [Thread-210989] [transport.py] [_log()] starting thread (client mode): 0xa2d564d0
2026-02-15T20:50:04.257 [DEBUG] [Thread-210989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:50:04.263 [DEBUG] [Thread-210989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:50:04.263 [INFO] [Thread-210989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:50:04.266 [DEBUG] [Thread-210989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] client lang: <none>
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] server lang: <none>
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] kex follows: False
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] Compression: none
2026-02-15T20:50:04.267 [DEBUG] [Thread-210989] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:50:04.294 [DEBUG] [Thread-210989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:50:04.298 [DEBUG] [Thread-210989] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:50:04.300 [DEBUG] [Thread-210989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:50:04.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:50:04.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:50:04.304 [DEBUG] [Thread-210989] [transport.py] [_log()] userauth is OK
2026-02-15T20:50:04.304 [DEBUG] [Thread-210989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:50:04.304 [DEBUG] [Thread-210989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:50:04.304 [DEBUG] [Thread-210989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:50:04.304 [DEBUG] [Thread-210989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:50:04.330 [INFO] [Thread-210989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:50:04.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:50:05.129 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:05.626 [DEBUG] [Thread-210989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:50:05.626 [DEBUG] [Thread-210989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:50:05.627 [DEBUG] [Thread-210989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:50:05.667 [DEBUG] [Thread-210989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:50:05.667 [DEBUG] [Thread-210989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:50:05.670 [DEBUG] [Thread-210989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:50:05.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:50:05.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:50:05.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:50:05.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:50:05.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:50:05.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:50:05.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:50:05.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:50:05.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:50:05.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.784132 -999.00  +16.80  22.49     40   +3.40 1 1 1 1 1     0    0 13.61 6.99 ZNESW 28.6 22.5 143.3 36.0 17.1 -24.8 16.9 -23.8 16.8 -22.7 17.0 -23.8
2026-02-15T20:50:05.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:50:05.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:50:05.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.784132
2026-02-15T20:50:05.704 [DEBUG] [Thread-210989] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:50:05.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:50:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:50:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:50:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:50:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:50:05.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:49:42', tmtdew=15.51, humidity=35.16, cloud=0.0, wind=32.43, temperature=17.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:49:43', seeing=1.64, atlas_timestamp='2026-02-15T18:49:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:47:00')
2026-02-15T20:50:05.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:50:05.816 [DEBUG] [Thread-210992] [transport.py] [_log()] starting thread (client mode): 0xa2dc17e0
2026-02-15T20:50:05.816 [DEBUG] [Thread-210992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:50:05.831 [DEBUG] [Thread-210992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:50:05.832 [INFO] [Thread-210992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] client lang: <none>
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] server lang: <none>
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] kex follows: False
2026-02-15T20:50:05.839 [DEBUG] [Thread-210992] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:50:05.840 [DEBUG] [Thread-210992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:50:05.840 [DEBUG] [Thread-210992] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:50:05.840 [DEBUG] [Thread-210992] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:50:05.840 [DEBUG] [Thread-210992] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:50:05.840 [DEBUG] [Thread-210992] [transport.py] [_log()] Compression: none
2026-02-15T20:50:05.840 [DEBUG] [Thread-210992] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:50:05.899 [DEBUG] [Thread-210992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:50:05.899 [DEBUG] [Thread-210992] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:50:05.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:50:05.900 [DEBUG] [Thread-210992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:50:05.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:50:05.958 [DEBUG] [Thread-210992] [transport.py] [_log()] userauth is OK
2026-02-15T20:50:05.959 [DEBUG] [Thread-210992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:50:05.959 [DEBUG] [Thread-210992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:50:05.959 [DEBUG] [Thread-210992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:50:05.959 [DEBUG] [Thread-210992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:50:05.974 [DEBUG] [Thread-210994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:05.977 [INFO] [Thread-210992] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:50:05.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:50:05.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:50:06.846 [DEBUG] [Thread-210992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:50:06.846 [DEBUG] [Thread-210992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:50:06.894 [DEBUG] [Thread-210992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:50:06.894 [DEBUG] [Thread-210992] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:50:06.904 [DEBUG] [Thread-210992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:50:06.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:50:06.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:50:06.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:50:06.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:50:06.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:50:06.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:50:06.941 [DEBUG] [Thread-210992] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:50:15.427 [DEBUG] [Thread-210995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:20.358 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:21.021 [DEBUG] [Thread-210996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:23.583 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:27.957 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:31.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:31.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:36.047 [DEBUG] [Thread-210997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:36.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:50:36.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:50:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:50:39.012 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 50, 18), 15.25, 35.6, 0.0, 27.07, 16.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:50:39.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:50:18
2026-02-15T20:50:39.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:50:39.704 [DEBUG] [Thread-210998] [transport.py] [_log()] starting thread (client mode): 0xa2d54280
2026-02-15T20:50:39.705 [DEBUG] [Thread-210998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:50:39.716 [DEBUG] [Thread-210998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:50:39.717 [INFO] [Thread-210998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] client lang: <none>
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] server lang: <none>
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] kex follows: False
2026-02-15T20:50:39.720 [DEBUG] [Thread-210998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:50:39.721 [DEBUG] [Thread-210998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:50:39.721 [DEBUG] [Thread-210998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:50:39.721 [DEBUG] [Thread-210998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:50:39.721 [DEBUG] [Thread-210998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:50:39.721 [DEBUG] [Thread-210998] [transport.py] [_log()] Compression: none
2026-02-15T20:50:39.721 [DEBUG] [Thread-210998] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:50:39.748 [DEBUG] [Thread-210998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:50:39.752 [DEBUG] [Thread-210998] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:50:39.753 [DEBUG] [Thread-210998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:50:39.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:50:39.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:50:39.756 [DEBUG] [Thread-210998] [transport.py] [_log()] userauth is OK
2026-02-15T20:50:39.756 [DEBUG] [Thread-210998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:50:39.756 [DEBUG] [Thread-210998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:50:39.756 [DEBUG] [Thread-210998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:50:39.756 [DEBUG] [Thread-210998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:50:39.785 [INFO] [Thread-210998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:50:39.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:50:40.423 [DEBUG] [Thread-210998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:50:40.424 [DEBUG] [Thread-210998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:50:40.424 [DEBUG] [Thread-210998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:50:40.466 [DEBUG] [Thread-210998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:50:40.466 [DEBUG] [Thread-210998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:50:40.468 [DEBUG] [Thread-210998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:50:40.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:50:40.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:50:40.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:50:40.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:50:40.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:50:40.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:50:40.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:50:40.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:50:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:50:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.784479 -999.00  +16.80  26.45     40   +3.40 1 1 1 1 1     0    0 13.42 7.24 ZNESW 25.7 26.4 150.8 37.3 17.1 -24.8 16.9 -23.7 16.8 -22.6 17.0 -23.7
2026-02-15T20:50:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:50:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:50:40.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.784479
2026-02-15T20:50:40.494 [DEBUG] [Thread-210998] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:50:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:50:40.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:50:40.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:50:40.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:50:40.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:50:40.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:50:18', tmtdew=15.25, humidity=35.6, cloud=0.0, wind=27.07, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:50:18', seeing=1.91, atlas_timestamp='2026-02-15T18:49:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:47:00')
2026-02-15T20:50:40.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:50:40.594 [DEBUG] [Thread-211001] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1f0
2026-02-15T20:50:40.594 [DEBUG] [Thread-211001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:50:40.608 [DEBUG] [Thread-211001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:50:40.608 [INFO] [Thread-211001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:50:40.615 [DEBUG] [Thread-211001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:50:40.615 [DEBUG] [Thread-211001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:50:40.615 [DEBUG] [Thread-211001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:50:40.615 [DEBUG] [Thread-211001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:40.615 [DEBUG] [Thread-211001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:50:40.615 [DEBUG] [Thread-211001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] client lang: <none>
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] server lang: <none>
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] kex follows: False
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] Compression: none
2026-02-15T20:50:40.616 [DEBUG] [Thread-211001] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:50:40.670 [DEBUG] [Thread-211001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:50:40.670 [DEBUG] [Thread-211001] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:50:40.670 [DEBUG] [Thread-211001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:50:40.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:50:40.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:50:40.727 [DEBUG] [Thread-211001] [transport.py] [_log()] userauth is OK
2026-02-15T20:50:40.727 [DEBUG] [Thread-211001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:50:40.727 [DEBUG] [Thread-211001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:50:40.727 [DEBUG] [Thread-211001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:50:40.727 [DEBUG] [Thread-211001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:50:40.741 [INFO] [Thread-211001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:50:40.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:50:40.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:50:41.584 [DEBUG] [Thread-211001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:50:41.584 [DEBUG] [Thread-211001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:50:41.631 [DEBUG] [Thread-211001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:50:41.632 [DEBUG] [Thread-211001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:50:41.640 [DEBUG] [Thread-211001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:50:41.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:50:41.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:50:41.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:50:41.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:50:41.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:50:41.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:50:41.673 [DEBUG] [Thread-211001] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:50:47.401 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:51.081 [DEBUG] [Thread-211003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:51.796 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:57.867 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:50:57.935 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:02.327 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:06.188 [DEBUG] [Thread-211004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:51:11.677 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:51: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
2026-02-15T20:51:13.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 50, 53), 15.33, 35.51, 0.0, 28.95, 16.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:51:13.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:50:53
2026-02-15T20:51:13.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:51:14.084 [DEBUG] [Thread-211005] [transport.py] [_log()] starting thread (client mode): 0xa57b19f0
2026-02-15T20:51:14.084 [DEBUG] [Thread-211005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:51:14.097 [DEBUG] [Thread-211005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:51:14.097 [INFO] [Thread-211005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] client lang: <none>
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] server lang: <none>
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] kex follows: False
2026-02-15T20:51:14.101 [DEBUG] [Thread-211005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:51:14.102 [DEBUG] [Thread-211005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:51:14.102 [DEBUG] [Thread-211005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:51:14.102 [DEBUG] [Thread-211005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:51:14.102 [DEBUG] [Thread-211005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:51:14.102 [DEBUG] [Thread-211005] [transport.py] [_log()] Compression: none
2026-02-15T20:51:14.102 [DEBUG] [Thread-211005] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:51:14.133 [DEBUG] [Thread-211005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:51:14.138 [DEBUG] [Thread-211005] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:51:14.139 [DEBUG] [Thread-211005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:51:14.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:51:14.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:51:14.143 [DEBUG] [Thread-211005] [transport.py] [_log()] userauth is OK
2026-02-15T20:51:14.143 [DEBUG] [Thread-211005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:51:14.143 [DEBUG] [Thread-211005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:51:14.143 [DEBUG] [Thread-211005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:51:14.143 [DEBUG] [Thread-211005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:51:14.160 [INFO] [Thread-211005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:51:14.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:51:14.819 [DEBUG] [Thread-211005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:51:14.819 [DEBUG] [Thread-211005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:51:14.820 [DEBUG] [Thread-211005] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:51:14.860 [DEBUG] [Thread-211005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:51:14.860 [DEBUG] [Thread-211005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:51:14.863 [DEBUG] [Thread-211005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:51:14.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:51:14.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:51:14.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:51:14.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:51:14.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:51:14.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:51:14.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:51:14.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:51:14.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:51:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.784826 -999.00  +16.80  25.23     40   +3.40 1 1 1 1 1     0    0 13.39 8.02 ZNESW 22.9 25.2 161.2 33.7 17.0 -24.7 16.9 -23.8 16.7 -22.6 17.0 -23.8
2026-02-15T20:51:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:51:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:51:14.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.784826
2026-02-15T20:51:14.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:51:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:51:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:51:14.891 [DEBUG] [Thread-211005] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:51:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:51:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:51:14.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:50:53', tmtdew=15.33, humidity=35.51, cloud=0.0, wind=28.95, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:50:53', seeing=2.09, atlas_timestamp='2026-02-15T18:50:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:47:00')
2026-02-15T20:51:14.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:51:14.978 [DEBUG] [Thread-211008] [transport.py] [_log()] starting thread (client mode): 0xa2d05ed0
2026-02-15T20:51:14.978 [DEBUG] [Thread-211008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:51:14.992 [DEBUG] [Thread-211008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:51:14.992 [INFO] [Thread-211008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] client lang: <none>
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] server lang: <none>
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] kex follows: False
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] Compression: none
2026-02-15T20:51:15.000 [DEBUG] [Thread-211008] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:51:15.055 [DEBUG] [Thread-211008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:51:15.055 [DEBUG] [Thread-211008] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:51:15.055 [DEBUG] [Thread-211008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:51:15.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:51:15.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:51:15.111 [DEBUG] [Thread-211008] [transport.py] [_log()] userauth is OK
2026-02-15T20:51:15.111 [DEBUG] [Thread-211008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:51:15.111 [DEBUG] [Thread-211008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:51:15.111 [DEBUG] [Thread-211008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:51:15.111 [DEBUG] [Thread-211008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:51:15.127 [INFO] [Thread-211008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:51:15.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:51:15.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:51:15.700 [DEBUG] [Thread-211010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:15.941 [DEBUG] [Thread-211008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:51:15.941 [DEBUG] [Thread-211008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:51:15.989 [DEBUG] [Thread-211008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:51:15.989 [DEBUG] [Thread-211008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:51:15.997 [DEBUG] [Thread-211008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:51:16.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:51:16.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:51:16.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:51:16.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:51:16.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:51:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:51:16.030 [DEBUG] [Thread-211008] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:51:16.715 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:21.213 [DEBUG] [Thread-211011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:32.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:32.034 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:35.807 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:36.264 [DEBUG] [Thread-211012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:51:46.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:51:46.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:51:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 51, 28), 15.32, 35.55, 0.0, 32.2, 16.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:51:47.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:51:28
2026-02-15T20:51:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:51:48.479 [DEBUG] [Thread-211013] [transport.py] [_log()] starting thread (client mode): 0xa57412d0
2026-02-15T20:51:48.479 [DEBUG] [Thread-211013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:51:48.497 [DEBUG] [Thread-211013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:51:48.497 [INFO] [Thread-211013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:48.500 [DEBUG] [Thread-211013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:51:48.501 [DEBUG] [Thread-211013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:51:48.501 [DEBUG] [Thread-211013] [transport.py] [_log()] client lang: <none>
2026-02-15T20:51:48.501 [DEBUG] [Thread-211013] [transport.py] [_log()] server lang: <none>
2026-02-15T20:51:48.501 [DEBUG] [Thread-211013] [transport.py] [_log()] kex follows: False
2026-02-15T20:51:48.501 [DEBUG] [Thread-211013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:51:48.501 [DEBUG] [Thread-211013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:51:48.502 [DEBUG] [Thread-211013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:51:48.502 [DEBUG] [Thread-211013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:51:48.502 [DEBUG] [Thread-211013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:51:48.502 [DEBUG] [Thread-211013] [transport.py] [_log()] Compression: none
2026-02-15T20:51:48.502 [DEBUG] [Thread-211013] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:51:48.523 [DEBUG] [Thread-211013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:51:48.526 [DEBUG] [Thread-211013] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:51:48.526 [DEBUG] [Thread-211013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:51:48.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:51:48.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:51:48.529 [DEBUG] [Thread-211013] [transport.py] [_log()] userauth is OK
2026-02-15T20:51:48.529 [DEBUG] [Thread-211013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:51:48.529 [DEBUG] [Thread-211013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:51:48.529 [DEBUG] [Thread-211013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:51:48.529 [DEBUG] [Thread-211013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:51:48.540 [INFO] [Thread-211013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:51:48.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:51:49.313 [DEBUG] [Thread-211013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:51:49.313 [DEBUG] [Thread-211013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:51:49.314 [DEBUG] [Thread-211013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:51:49.354 [DEBUG] [Thread-211013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:51:49.354 [DEBUG] [Thread-211013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:51:49.356 [DEBUG] [Thread-211013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:51:49.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:51:49.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:51:49.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:51:49.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:51:49.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:51:49.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:51:49.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:51:49.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:51:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:51:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.785520 -999.00  +16.80  19.22     40   +3.40 1 1 1 1 1     0    0 13.60 7.19 ZNESW 29.5 19.2 146.4 34.0 17.0 -24.8 16.9 -23.7 16.7 -22.6 17.1 -23.9
2026-02-15T20:51:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:51:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:51:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.785520
2026-02-15T20:51:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:51:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:51:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:51:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:51:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:51:49.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:51:28', tmtdew=15.32, humidity=35.55, cloud=0.0, wind=32.2, temperature=16.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:51:29', seeing=2.26, atlas_timestamp='2026-02-15T18:51:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:47:00')
2026-02-15T20:51:49.375 [DEBUG] [Thread-211013] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:51:49.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:51:49.462 [DEBUG] [Thread-211016] [transport.py] [_log()] starting thread (client mode): 0xa2d07ac0
2026-02-15T20:51:49.462 [DEBUG] [Thread-211016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:51:49.477 [DEBUG] [Thread-211016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:51:49.477 [INFO] [Thread-211016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:51:49.484 [DEBUG] [Thread-211016] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:51:49.484 [DEBUG] [Thread-211016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:51:49.484 [DEBUG] [Thread-211016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:51:49.484 [DEBUG] [Thread-211016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] client lang: <none>
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] server lang: <none>
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] kex follows: False
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] Compression: none
2026-02-15T20:51:49.485 [DEBUG] [Thread-211016] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:51:49.542 [DEBUG] [Thread-211016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:51:49.542 [DEBUG] [Thread-211016] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:51:49.543 [DEBUG] [Thread-211016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:51:49.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:51:49.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:51:49.600 [DEBUG] [Thread-211016] [transport.py] [_log()] userauth is OK
2026-02-15T20:51:49.600 [DEBUG] [Thread-211016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:51:49.600 [DEBUG] [Thread-211016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:51:49.600 [DEBUG] [Thread-211016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:51:49.600 [DEBUG] [Thread-211016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:51:49.614 [INFO] [Thread-211016] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:51:49.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:51:49.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:51:50.473 [DEBUG] [Thread-211016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:51:50.473 [DEBUG] [Thread-211016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:51:50.521 [DEBUG] [Thread-211016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:51:50.521 [DEBUG] [Thread-211016] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:51:50.529 [DEBUG] [Thread-211016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:51:50.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:51:50.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:51:50.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:51:50.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:51:50.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:51:50.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:51:50.562 [DEBUG] [Thread-211016] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:51:51.295 [DEBUG] [Thread-211018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:51:54.481 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:06.104 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:06.421 [DEBUG] [Thread-211019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:09.140 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:13.143 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:16.180 [DEBUG] [Thread-211020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:20.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:52:20.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:52: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
2026-02-15T20:52:21.461 [DEBUG] [Thread-211021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:22.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 52, 3), 15.33, 35.51, 0.0, 29.96, 16.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:52:22.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:52:03
2026-02-15T20:52:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:52:23.114 [DEBUG] [Thread-211022] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-15T20:52:23.115 [DEBUG] [Thread-211022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:52:23.123 [DEBUG] [Thread-211022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:52:23.123 [INFO] [Thread-211022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:52:23.151 [DEBUG] [Thread-211022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] client lang: <none>
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] server lang: <none>
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] kex follows: False
2026-02-15T20:52:23.152 [DEBUG] [Thread-211022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:52:23.153 [DEBUG] [Thread-211022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:52:23.154 [DEBUG] [Thread-211022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:52:23.154 [DEBUG] [Thread-211022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:52:23.154 [DEBUG] [Thread-211022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:52:23.154 [DEBUG] [Thread-211022] [transport.py] [_log()] Compression: none
2026-02-15T20:52:23.154 [DEBUG] [Thread-211022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:52:23.200 [DEBUG] [Thread-211022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:52:23.208 [DEBUG] [Thread-211022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:52:23.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:52:23.260 [DEBUG] [Thread-211022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:52:23.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:52:23.264 [DEBUG] [Thread-211022] [transport.py] [_log()] userauth is OK
2026-02-15T20:52:23.265 [DEBUG] [Thread-211022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:52:23.265 [DEBUG] [Thread-211022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:52:23.265 [DEBUG] [Thread-211022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:52:23.265 [DEBUG] [Thread-211022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:52:23.309 [INFO] [Thread-211022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:52:23.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:52:23.959 [DEBUG] [Thread-211022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:52:23.960 [DEBUG] [Thread-211022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:52:23.967 [DEBUG] [Thread-211022] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:52:24.000 [DEBUG] [Thread-211022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:52:24.000 [DEBUG] [Thread-211022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:52:24.003 [DEBUG] [Thread-211022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:52:24.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:52:24.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:52:24.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:52:24.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:52:24.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:52:24.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:52:24.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:52:24.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:52:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:52:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.785868 -999.00  +16.80  20.20     40   +3.40 1 1 1 1 1     0    0 13.55 6.85 ZNESW 19.9 20.2 149.5 30.1 17.1 -24.9 16.9 -23.7 16.8 -22.6 17.0 -23.9
2026-02-15T20:52:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:52:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:52:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.785868
2026-02-15T20:52:24.077 [DEBUG] [Thread-211022] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:52:24.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:52:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:52:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:52:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:52:24.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:52:24.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:52:03', tmtdew=15.33, humidity=35.51, cloud=0.0, wind=29.96, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:52:04', seeing=2.12, atlas_timestamp='2026-02-15T18:51:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:47:00')
2026-02-15T20:52:24.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:52:24.198 [DEBUG] [Thread-211025] [transport.py] [_log()] starting thread (client mode): 0xa2d57c40
2026-02-15T20:52:24.198 [DEBUG] [Thread-211025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:52:24.213 [DEBUG] [Thread-211025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:52:24.213 [INFO] [Thread-211025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] client lang: <none>
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] server lang: <none>
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] kex follows: False
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] Compression: none
2026-02-15T20:52:24.221 [DEBUG] [Thread-211025] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:52:24.280 [DEBUG] [Thread-211025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:52:24.281 [DEBUG] [Thread-211025] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:52:24.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:52:24.282 [DEBUG] [Thread-211025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:52:24.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:52:24.336 [DEBUG] [Thread-211025] [transport.py] [_log()] userauth is OK
2026-02-15T20:52:24.336 [DEBUG] [Thread-211025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:52:24.336 [DEBUG] [Thread-211025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:52:24.336 [DEBUG] [Thread-211025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:52:24.336 [DEBUG] [Thread-211025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:52:24.350 [INFO] [Thread-211025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:52:24.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:52:24.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:52:25.208 [DEBUG] [Thread-211025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:52:25.208 [DEBUG] [Thread-211025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:52:25.256 [DEBUG] [Thread-211025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:52:25.256 [DEBUG] [Thread-211025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:52:25.356 [DEBUG] [Thread-211025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:52:25.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:52:25.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:52:25.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:52:25.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:52:25.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:52:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:52:25.393 [DEBUG] [Thread-211025] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:52:31.789 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:32.240 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:32.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:36.490 [DEBUG] [Thread-211027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:50.579 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:51.609 [DEBUG] [Thread-211028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:52:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:52:55.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:52:55.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:52:57.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 52, 39), 15.59, 34.93, 0.0, 32.07, 17.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:52:57.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:52:39
2026-02-15T20:52:57.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:52:57.793 [DEBUG] [Thread-211029] [transport.py] [_log()] starting thread (client mode): 0xa2d07760
2026-02-15T20:52:57.793 [DEBUG] [Thread-211029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:52:57.807 [DEBUG] [Thread-211029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:52:57.808 [INFO] [Thread-211029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] client lang: <none>
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] server lang: <none>
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] kex follows: False
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:52:57.810 [DEBUG] [Thread-211029] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:52:57.811 [DEBUG] [Thread-211029] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:52:57.811 [DEBUG] [Thread-211029] [transport.py] [_log()] Compression: none
2026-02-15T20:52:57.811 [DEBUG] [Thread-211029] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:52:57.826 [DEBUG] [Thread-211029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:52:57.828 [DEBUG] [Thread-211029] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:52:57.828 [DEBUG] [Thread-211029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:52:57.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:52:57.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:52:57.830 [DEBUG] [Thread-211029] [transport.py] [_log()] userauth is OK
2026-02-15T20:52:57.831 [DEBUG] [Thread-211029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:52:57.831 [DEBUG] [Thread-211029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:52:57.831 [DEBUG] [Thread-211029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:52:57.831 [DEBUG] [Thread-211029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:52:57.847 [INFO] [Thread-211029] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:52:57.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:52:58.543 [DEBUG] [Thread-211029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:52:58.543 [DEBUG] [Thread-211029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:52:58.543 [DEBUG] [Thread-211029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:52:58.584 [DEBUG] [Thread-211029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:52:58.584 [DEBUG] [Thread-211029] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:52:58.586 [DEBUG] [Thread-211029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:52:58.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:52:58.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:52:58.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:52:58.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:52:58.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:52:58.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:52:58.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:52:58.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:52:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:52:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.786215 -999.00  +16.80  16.99     40   +3.40 1 1 1 1 1     0    0 13.60 7.15 ZNESW 21.5 17.0 160.8 31.2 17.0 -24.7 16.9 -23.8 16.8 -22.6 17.0 -24.0
2026-02-15T20:52:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:52:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:52:58.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.786215
2026-02-15T20:52:58.614 [DEBUG] [Thread-211029] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:52:58.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:52:58.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:52:58.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:52:58.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:52:58.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:52:58.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:52:39', tmtdew=15.59, humidity=34.93, cloud=0.0, wind=32.07, temperature=17.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:52:39', seeing=2.18, atlas_timestamp='2026-02-15T18:52:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[0.013749999999999929, -0.016750000000000043, 0.02775000000000105, -0.046499999999999986, 0.041499999999999204, 0.009250000000001535, -0.0009999999999994458, 0.015249999999999986, 0.033500000000000085, 0.002000000000000668, 0.0012499999999988631, -0.018000000000000682, 0.06400000000000006, 0.09024999999999928, -0.03200000000000003, -0.009000000000000341, 0.030250000000000554, 0.015499999999999403, -0.015000000000000568, -0.03725000000000023, 0.0649999999999995, 0.061749999999998195, 0.0002500000000011937, -0.030250000000000554, 0.022499999999999076, 0.03049999999999997, 0.021750000000000824, 0.014499999999999957, 0.11350000000000016, 0.012500000000001066, 0.04600000000000115, 0.013000000000001677, 0.023749999999999716], zp_timestamp='2026-02-15T18:47:00')
2026-02-15T20:52:58.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:52:58.718 [DEBUG] [Thread-211032] [transport.py] [_log()] starting thread (client mode): 0xa2dc24d0
2026-02-15T20:52:58.718 [DEBUG] [Thread-211032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:52:58.733 [DEBUG] [Thread-211032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:52:58.733 [INFO] [Thread-211032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] client lang: <none>
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] server lang: <none>
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] kex follows: False
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] Compression: none
2026-02-15T20:52:58.741 [DEBUG] [Thread-211032] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:52:58.801 [DEBUG] [Thread-211032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:52:58.801 [DEBUG] [Thread-211032] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:52:58.802 [DEBUG] [Thread-211032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:52:58.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:52:58.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:52:58.856 [DEBUG] [Thread-211032] [transport.py] [_log()] userauth is OK
2026-02-15T20:52:58.857 [DEBUG] [Thread-211032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:52:58.857 [DEBUG] [Thread-211032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:52:58.857 [DEBUG] [Thread-211032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:52:58.857 [DEBUG] [Thread-211032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:52:58.873 [INFO] [Thread-211032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:52:58.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:52:58.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:52:59.688 [DEBUG] [Thread-211032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:52:59.688 [DEBUG] [Thread-211032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:52:59.736 [DEBUG] [Thread-211032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:52:59.736 [DEBUG] [Thread-211032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:52:59.744 [DEBUG] [Thread-211032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:52:59.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:52:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:52:59.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:52:59.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:52:59.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:52:59.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:52:59.776 [DEBUG] [Thread-211032] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:53:06.646 [DEBUG] [Thread-211034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:09.363 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:16.536 [DEBUG] [Thread-211035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:21.693 [DEBUG] [Thread-211036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:28.030 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:53:29.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:53:29.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:53:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 53, 14), 15.46, 35.41, 0.0, 29.06, 16.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:53:31.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:53:14
2026-02-15T20:53:32.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:53:32.401 [DEBUG] [Thread-211037] [transport.py] [_log()] starting thread (client mode): 0xa5771930
2026-02-15T20:53:32.401 [DEBUG] [Thread-211037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:53:32.412 [DEBUG] [Thread-211037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:53:32.412 [INFO] [Thread-211037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:53:32.419 [DEBUG] [Thread-211037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:53:32.420 [DEBUG] [Thread-211037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:53:32.420 [DEBUG] [Thread-211037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:53:32.420 [DEBUG] [Thread-211037] [transport.py] [_log()] client lang: <none>
2026-02-15T20:53:32.420 [DEBUG] [Thread-211037] [transport.py] [_log()] server lang: <none>
2026-02-15T20:53:32.420 [DEBUG] [Thread-211037] [transport.py] [_log()] kex follows: False
2026-02-15T20:53:32.420 [DEBUG] [Thread-211037] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:53:32.421 [DEBUG] [Thread-211037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:53:32.421 [DEBUG] [Thread-211037] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:53:32.421 [DEBUG] [Thread-211037] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:53:32.421 [DEBUG] [Thread-211037] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:53:32.421 [DEBUG] [Thread-211037] [transport.py] [_log()] Compression: none
2026-02-15T20:53:32.421 [DEBUG] [Thread-211037] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:53:32.451 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:32.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:32.458 [DEBUG] [Thread-211037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:53:32.461 [DEBUG] [Thread-211037] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:53:32.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:53:32.464 [DEBUG] [Thread-211037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:53:32.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:53:32.467 [DEBUG] [Thread-211037] [transport.py] [_log()] userauth is OK
2026-02-15T20:53:32.467 [DEBUG] [Thread-211037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:53:32.467 [DEBUG] [Thread-211037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:53:32.467 [DEBUG] [Thread-211037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:53:32.467 [DEBUG] [Thread-211037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:53:32.489 [INFO] [Thread-211037] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:53:32.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:53:32.707 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:33.092 [DEBUG] [Thread-211037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:53:33.092 [DEBUG] [Thread-211037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:53:33.093 [DEBUG] [Thread-211037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:53:33.134 [DEBUG] [Thread-211037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:53:33.134 [DEBUG] [Thread-211037] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:53:33.137 [DEBUG] [Thread-211037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:53:33.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:53:33.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:53:33.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:53:33.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:53:33.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:53:33.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:53:33.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:53:33.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:53:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:53:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.786562 -999.00  +16.80  17.96     40   +3.40 1 1 1 1 1     0    0 13.53 6.82 ZNESW 17.9 18.0 154.2 29.9 17.1 -24.8 16.9 -23.8 16.7 -22.6 17.0 -23.7
2026-02-15T20:53:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:53:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:53:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.786562
2026-02-15T20:53:33.167 [DEBUG] [Thread-211037] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:53:33.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:53:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:53:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:53:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:53:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:53:33.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:53:14', tmtdew=15.46, humidity=35.41, cloud=0.0, wind=29.06, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:53:14', seeing=3.19, atlas_timestamp='2026-02-15T18:52:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.01774999999999949, -0.0182500000000001, -0.03950000000000031, -0.005499999999999616, 0.02525000000000155, -0.05400000000000027, -0.005749999999999034, 0.027499999999999858, -0.006000000000000227, -0.024750000000000938, -0.016000000000000014, 0.07399999999999984, 0.02474999999999916, -0.040000000000000924, -0.053000000000000824, 0.01624999999999943, -0.018499999999999517, -0.028999999999999915, -0.056250000000000355, 0.04899999999999949, 0.02874999999999872, -0.03275000000000006, -0.03625000000000078, 0.015499999999999403, 0.049999999999998934, 0.0007500000000000284, -0.024499999999999744, 0.10500000000000043, 0.01600000000000179, -0.005999999999998451, -0.03999999999999915, 0.01524999999999821], zp_timestamp='2026-02-15T18:51:00')
2026-02-15T20:53:33.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:53:33.282 [DEBUG] [Thread-211040] [transport.py] [_log()] starting thread (client mode): 0xa2d570d0
2026-02-15T20:53:33.282 [DEBUG] [Thread-211040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:53:33.296 [DEBUG] [Thread-211040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:53:33.296 [INFO] [Thread-211040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] client lang: <none>
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] server lang: <none>
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] kex follows: False
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] Compression: none
2026-02-15T20:53:33.304 [DEBUG] [Thread-211040] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:53:33.362 [DEBUG] [Thread-211040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:53:33.362 [DEBUG] [Thread-211040] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:53:33.362 [DEBUG] [Thread-211040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:53:33.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:53:33.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:53:33.421 [DEBUG] [Thread-211040] [transport.py] [_log()] userauth is OK
2026-02-15T20:53:33.421 [DEBUG] [Thread-211040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:53:33.422 [DEBUG] [Thread-211040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:53:33.422 [DEBUG] [Thread-211040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:53:33.422 [DEBUG] [Thread-211040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:53:33.439 [INFO] [Thread-211040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:53:33.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:53:33.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:53:34.247 [DEBUG] [Thread-211040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:53:34.247 [DEBUG] [Thread-211040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:53:34.295 [DEBUG] [Thread-211040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:53:34.295 [DEBUG] [Thread-211040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:53:34.303 [DEBUG] [Thread-211040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:53:34.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:53:34.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:53:34.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:53:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:53:34.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:53:34.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:53:34.340 [DEBUG] [Thread-211040] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:53:36.718 [DEBUG] [Thread-211042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:46.693 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:53:51.846 [DEBUG] [Thread-211043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:04.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:54:04.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:54:04.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:54:05.347 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:06.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 53, 51), 15.41, 35.43, 0.0, 32.38, 16.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:54:06.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:53:51
2026-02-15T20:54:06.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:54:06.881 [DEBUG] [Thread-211044] [transport.py] [_log()] starting thread (client mode): 0xa2d04a60
2026-02-15T20:54:06.883 [DEBUG] [Thread-211045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:06.884 [DEBUG] [Thread-211044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:54:06.896 [DEBUG] [Thread-211044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:54:06.897 [INFO] [Thread-211044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:54:06.899 [DEBUG] [Thread-211044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:54:06.899 [DEBUG] [Thread-211044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:54:06.899 [DEBUG] [Thread-211044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] client lang: <none>
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] server lang: <none>
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] kex follows: False
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] Compression: none
2026-02-15T20:54:06.900 [DEBUG] [Thread-211044] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:54:06.940 [DEBUG] [Thread-211044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:54:06.942 [DEBUG] [Thread-211044] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:54:06.943 [DEBUG] [Thread-211044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:54:06.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:54:06.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:54:06.948 [DEBUG] [Thread-211044] [transport.py] [_log()] userauth is OK
2026-02-15T20:54:06.948 [DEBUG] [Thread-211044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:54:06.948 [DEBUG] [Thread-211044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:54:06.948 [DEBUG] [Thread-211044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:54:06.949 [DEBUG] [Thread-211044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:54:06.987 [INFO] [Thread-211044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:54:06.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:54:07.623 [DEBUG] [Thread-211044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:54:07.623 [DEBUG] [Thread-211044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:54:07.624 [DEBUG] [Thread-211044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:54:07.664 [DEBUG] [Thread-211044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:54:07.664 [DEBUG] [Thread-211044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:54:07.667 [DEBUG] [Thread-211044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:54:07.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:54:07.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:54:07.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:54:07.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:54:07.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:54:07.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:54:07.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:54:07.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:54:07.700 [DEBUG] [Thread-211044] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:54:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:54:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.786909 -999.00  +16.80  21.56     40   +3.40 1 1 1 1 1     0    0 13.43 6.46 ZNESW 15.7 21.6 145.2 27.8 17.0 -24.7 16.9 -23.8 16.7 -22.6 17.0 -24.0
2026-02-15T20:54:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:54:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:54:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.786909
2026-02-15T20:54:07.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:54:07.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:54:07.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:54:07.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:54:07.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:54:07.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:53:51', tmtdew=15.41, humidity=35.43, cloud=0.0, wind=32.38, temperature=16.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:53:51', seeing=2.69, atlas_timestamp='2026-02-15T18:53:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.01774999999999949, -0.0182500000000001, -0.03950000000000031, -0.005499999999999616, 0.02525000000000155, -0.05400000000000027, -0.005749999999999034, 0.027499999999999858, -0.006000000000000227, -0.024750000000000938, -0.016000000000000014, 0.07399999999999984, 0.02474999999999916, -0.040000000000000924, -0.053000000000000824, 0.01624999999999943, -0.018499999999999517, -0.028999999999999915, -0.056250000000000355, 0.04899999999999949, 0.02874999999999872, -0.03275000000000006, -0.03625000000000078, 0.015499999999999403, 0.049999999999998934, 0.0007500000000000284, -0.024499999999999744, 0.10500000000000043, 0.01600000000000179, -0.005999999999998451, -0.03999999999999915, 0.01524999999999821], zp_timestamp='2026-02-15T18:51:00')
2026-02-15T20:54:07.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:54:07.965 [DEBUG] [Thread-211048] [transport.py] [_log()] starting thread (client mode): 0xa2d54070
2026-02-15T20:54:07.965 [DEBUG] [Thread-211048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:54:07.979 [DEBUG] [Thread-211048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:54:07.980 [INFO] [Thread-211048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:54:07.987 [DEBUG] [Thread-211048] [transport.py] [_log()] client lang: <none>
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] server lang: <none>
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] kex follows: False
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] Compression: none
2026-02-15T20:54:07.988 [DEBUG] [Thread-211048] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:54:08.043 [DEBUG] [Thread-211048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:54:08.044 [DEBUG] [Thread-211048] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:54:08.044 [DEBUG] [Thread-211048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:54:08.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:54:08.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:54:08.101 [DEBUG] [Thread-211048] [transport.py] [_log()] userauth is OK
2026-02-15T20:54:08.101 [DEBUG] [Thread-211048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:54:08.101 [DEBUG] [Thread-211048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:54:08.101 [DEBUG] [Thread-211048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:54:08.101 [DEBUG] [Thread-211048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:54:08.121 [INFO] [Thread-211048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:54:08.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:54:08.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:54:08.961 [DEBUG] [Thread-211048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:54:08.961 [DEBUG] [Thread-211048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:54:09.009 [DEBUG] [Thread-211048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:54:09.009 [DEBUG] [Thread-211048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:54:09.016 [DEBUG] [Thread-211048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:54:09.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:54:09.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:54:09.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:54:09.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:54:09.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:54:09.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:54:09.047 [DEBUG] [Thread-211048] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:54:16.936 [DEBUG] [Thread-211050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:21.910 [DEBUG] [Thread-211051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:24.487 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:32.659 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:32.661 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:37.015 [DEBUG] [Thread-211052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:39.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:54:39.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:54:39.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:54:41.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 54, 26), 15.4, 35.45, 0.0, 33.01, 16.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:54:41.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:54:26
2026-02-15T20:54:41.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:54:41.685 [DEBUG] [Thread-211053] [transport.py] [_log()] starting thread (client mode): 0xa5772770
2026-02-15T20:54:41.685 [DEBUG] [Thread-211053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:54:41.702 [DEBUG] [Thread-211053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:54:41.703 [INFO] [Thread-211053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:54:41.706 [DEBUG] [Thread-211053] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:41.707 [DEBUG] [Thread-211053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] client lang: <none>
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] server lang: <none>
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] kex follows: False
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:54:41.708 [DEBUG] [Thread-211053] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:54:41.709 [DEBUG] [Thread-211053] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:54:41.709 [DEBUG] [Thread-211053] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:54:41.709 [DEBUG] [Thread-211053] [transport.py] [_log()] Compression: none
2026-02-15T20:54:41.709 [DEBUG] [Thread-211053] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:54:41.737 [DEBUG] [Thread-211053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:54:41.740 [DEBUG] [Thread-211053] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:54:41.741 [DEBUG] [Thread-211053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:54:41.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:54:41.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:54:41.744 [DEBUG] [Thread-211053] [transport.py] [_log()] userauth is OK
2026-02-15T20:54:41.744 [DEBUG] [Thread-211053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:54:41.745 [DEBUG] [Thread-211053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:54:41.745 [DEBUG] [Thread-211053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:54:41.745 [DEBUG] [Thread-211053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:54:41.768 [INFO] [Thread-211053] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:54:41.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:54:42.578 [DEBUG] [Thread-211053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:54:42.578 [DEBUG] [Thread-211053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:54:42.579 [DEBUG] [Thread-211053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:54:42.619 [DEBUG] [Thread-211053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:54:42.619 [DEBUG] [Thread-211053] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:54:42.622 [DEBUG] [Thread-211053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:54:42.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:54:42.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:54:42.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:54:42.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:54:42.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:54:42.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:54:42.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:54:42.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:54:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:54:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.787257 -999.00  +16.70  21.29     40   +3.30 1 1 1 1 1     0    0 13.62 6.06 ZNESW 25.3 21.3 142.8 28.6 17.0 -24.8 16.9 -23.8 16.7 -22.6 16.9 -23.9
2026-02-15T20:54:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:54:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:54:42.647 [DEBUG] [Thread-211053] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:54:42.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.787257
2026-02-15T20:54:42.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:54:42.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:54:42.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:54:42.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:54:42.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:54:42.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:54:26', tmtdew=15.4, humidity=35.45, cloud=0.0, wind=33.01, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:54:27', seeing=2.28, atlas_timestamp='2026-02-15T18:53:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.01774999999999949, -0.0182500000000001, -0.03950000000000031, -0.005499999999999616, 0.02525000000000155, -0.05400000000000027, -0.005749999999999034, 0.027499999999999858, -0.006000000000000227, -0.024750000000000938, -0.016000000000000014, 0.07399999999999984, 0.02474999999999916, -0.040000000000000924, -0.053000000000000824, 0.01624999999999943, -0.018499999999999517, -0.028999999999999915, -0.056250000000000355, 0.04899999999999949, 0.02874999999999872, -0.03275000000000006, -0.03625000000000078, 0.015499999999999403, 0.049999999999998934, 0.0007500000000000284, -0.024499999999999744, 0.10500000000000043, 0.01600000000000179, -0.005999999999998451, -0.03999999999999915, 0.01524999999999821], zp_timestamp='2026-02-15T18:51:00')
2026-02-15T20:54:42.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:54:42.753 [DEBUG] [Thread-211056] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-15T20:54:42.753 [DEBUG] [Thread-211056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:54:42.772 [DEBUG] [Thread-211056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:54:42.773 [INFO] [Thread-211056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] client lang: <none>
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] server lang: <none>
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] kex follows: False
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:54:42.780 [DEBUG] [Thread-211056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:54:42.781 [DEBUG] [Thread-211056] [transport.py] [_log()] Compression: none
2026-02-15T20:54:42.781 [DEBUG] [Thread-211056] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:54:42.844 [DEBUG] [Thread-211056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:54:42.844 [DEBUG] [Thread-211056] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:54:42.847 [DEBUG] [Thread-211056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:54:42.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:54:42.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:54:42.901 [DEBUG] [Thread-211056] [transport.py] [_log()] userauth is OK
2026-02-15T20:54:42.901 [DEBUG] [Thread-211056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:54:42.901 [DEBUG] [Thread-211056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:54:42.901 [DEBUG] [Thread-211056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:54:42.901 [DEBUG] [Thread-211056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:54:42.915 [INFO] [Thread-211056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:54:42.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:54:42.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:54:43.428 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:43.735 [DEBUG] [Thread-211056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:54:43.735 [DEBUG] [Thread-211056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:54:43.784 [DEBUG] [Thread-211056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:54:43.784 [DEBUG] [Thread-211056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:54:43.792 [DEBUG] [Thread-211056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:54:43.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:54:43.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:54:43.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:54:43.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:54:43.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:54:43.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:54:43.825 [DEBUG] [Thread-211056] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:54:52.041 [DEBUG] [Thread-211058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:54:55.429 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:02.193 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:07.120 [DEBUG] [Thread-211059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:13.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:55:13.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:55:13.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:55:15.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 55, 2), 15.4, 35.45, 0.0, 31.62, 16.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:55:15.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:55:02
2026-02-15T20:55:16.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:55:16.569 [DEBUG] [Thread-211060] [transport.py] [_log()] starting thread (client mode): 0xa57e2950
2026-02-15T20:55:16.570 [DEBUG] [Thread-211060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:55:16.584 [DEBUG] [Thread-211060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:55:16.584 [INFO] [Thread-211060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:55:16.590 [DEBUG] [Thread-211060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] client lang: <none>
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] server lang: <none>
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] kex follows: False
2026-02-15T20:55:16.591 [DEBUG] [Thread-211060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:55:16.592 [DEBUG] [Thread-211060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:55:16.592 [DEBUG] [Thread-211060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:55:16.592 [DEBUG] [Thread-211060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:55:16.592 [DEBUG] [Thread-211060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:55:16.592 [DEBUG] [Thread-211060] [transport.py] [_log()] Compression: none
2026-02-15T20:55:16.592 [DEBUG] [Thread-211060] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:55:16.636 [DEBUG] [Thread-211060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:55:16.643 [DEBUG] [Thread-211060] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:55:16.645 [DEBUG] [Thread-211060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:55:16.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:55:16.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:55:16.652 [DEBUG] [Thread-211060] [transport.py] [_log()] userauth is OK
2026-02-15T20:55:16.652 [DEBUG] [Thread-211060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:55:16.652 [DEBUG] [Thread-211060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:55:16.652 [DEBUG] [Thread-211060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:55:16.652 [DEBUG] [Thread-211060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:55:16.682 [INFO] [Thread-211060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:55:16.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:55:17.274 [DEBUG] [Thread-211062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:20.837 [DEBUG] [Thread-211060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:55:20.837 [DEBUG] [Thread-211060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:55:20.838 [DEBUG] [Thread-211060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:55:20.859 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:20.879 [DEBUG] [Thread-211060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:55:20.879 [DEBUG] [Thread-211060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:55:20.882 [DEBUG] [Thread-211060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:55:20.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:55:20.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:55:20.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:55:20.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:55:20.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:55:20.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:55:20.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:55:20.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:55:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:55:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.787951 -999.00  +16.70  26.86     40   +3.30 1 1 1 1 1     0    0 13.61 5.73 ZNESW 24.7 26.9 151.8 34.0 17.0 -24.8 16.9 -23.7 16.7 -22.6 17.0 -23.9
2026-02-15T20:55:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:55:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:55:20.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.787951
2026-02-15T20:55:20.917 [DEBUG] [Thread-211060] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:55:20.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:55:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:55:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:55:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:55:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:55:20.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:55:02', tmtdew=15.4, humidity=35.45, cloud=0.0, wind=31.62, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:55:02', seeing=2.32, atlas_timestamp='2026-02-15T18:54:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.01774999999999949, -0.0182500000000001, -0.03950000000000031, -0.005499999999999616, 0.02525000000000155, -0.05400000000000027, -0.005749999999999034, 0.027499999999999858, -0.006000000000000227, -0.024750000000000938, -0.016000000000000014, 0.07399999999999984, 0.02474999999999916, -0.040000000000000924, -0.053000000000000824, 0.01624999999999943, -0.018499999999999517, -0.028999999999999915, -0.056250000000000355, 0.04899999999999949, 0.02874999999999872, -0.03275000000000006, -0.03625000000000078, 0.015499999999999403, 0.049999999999998934, 0.0007500000000000284, -0.024499999999999744, 0.10500000000000043, 0.01600000000000179, -0.005999999999998451, -0.03999999999999915, 0.01524999999999821], zp_timestamp='2026-02-15T18:51:00')
2026-02-15T20:55:21.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:55:21.027 [DEBUG] [Thread-211064] [transport.py] [_log()] starting thread (client mode): 0xa5772e30
2026-02-15T20:55:21.027 [DEBUG] [Thread-211064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:55:21.042 [DEBUG] [Thread-211064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:55:21.042 [INFO] [Thread-211064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:55:21.049 [DEBUG] [Thread-211064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] client lang: <none>
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] server lang: <none>
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] kex follows: False
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] Compression: none
2026-02-15T20:55:21.050 [DEBUG] [Thread-211064] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:55:21.105 [DEBUG] [Thread-211064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:55:21.105 [DEBUG] [Thread-211064] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:55:21.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:55:21.107 [DEBUG] [Thread-211064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:55:21.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:55:21.162 [DEBUG] [Thread-211064] [transport.py] [_log()] userauth is OK
2026-02-15T20:55:21.162 [DEBUG] [Thread-211064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:55:21.162 [DEBUG] [Thread-211064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:55:21.162 [DEBUG] [Thread-211064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:55:21.162 [DEBUG] [Thread-211064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:55:21.181 [INFO] [Thread-211064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:55:21.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:55:21.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:55:21.990 [DEBUG] [Thread-211064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:55:21.990 [DEBUG] [Thread-211064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:55:22.038 [DEBUG] [Thread-211064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:55:22.038 [DEBUG] [Thread-211064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:55:22.046 [DEBUG] [Thread-211064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:55:22.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:55:22.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:55:22.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:55:22.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:55:22.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:55:22.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:55:22.081 [DEBUG] [Thread-211064] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:55:22.151 [DEBUG] [Thread-211066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:32.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:32.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:37.267 [DEBUG] [Thread-211067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:39.518 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:52.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:55:52.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:55:52.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:55:52.296 [DEBUG] [Thread-211068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:55:54.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 55, 37), 15.59, 34.93, 0.0, 35.11, 17.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:55:54.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:55:37
2026-02-15T20:55:54.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:55:54.811 [DEBUG] [Thread-211069] [transport.py] [_log()] starting thread (client mode): 0xa575a320
2026-02-15T20:55:54.812 [DEBUG] [Thread-211069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:55:54.817 [DEBUG] [Thread-211069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:55:54.817 [INFO] [Thread-211069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:55:54.820 [DEBUG] [Thread-211069] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] client lang: <none>
2026-02-15T20:55:54.821 [DEBUG] [Thread-211069] [transport.py] [_log()] server lang: <none>
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] kex follows: False
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] Compression: none
2026-02-15T20:55:54.822 [DEBUG] [Thread-211069] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:55:54.851 [DEBUG] [Thread-211069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:55:54.854 [DEBUG] [Thread-211069] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:55:54.856 [DEBUG] [Thread-211069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:55:54.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:55:54.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:55:54.860 [DEBUG] [Thread-211069] [transport.py] [_log()] userauth is OK
2026-02-15T20:55:54.860 [DEBUG] [Thread-211069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:55:54.860 [DEBUG] [Thread-211069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:55:54.860 [DEBUG] [Thread-211069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:55:54.860 [DEBUG] [Thread-211069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:55:54.899 [INFO] [Thread-211069] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:55:54.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:55:55.534 [DEBUG] [Thread-211069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:55:55.534 [DEBUG] [Thread-211069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:55:55.543 [DEBUG] [Thread-211069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:55:55.574 [DEBUG] [Thread-211069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:55:55.574 [DEBUG] [Thread-211069] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:55:55.577 [DEBUG] [Thread-211069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:55:55.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:55:55.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:55:55.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:55:55.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:55:55.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:55:55.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:55:55.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:55:55.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:55:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:55:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.788298 -999.00  +16.70  18.06     40   +3.30 1 1 1 1 1     0    0 13.56 4.86 ZNESW 17.8 18.1 143.0 31.8 17.0 -24.8 16.9 -23.8 16.7 -22.7 17.0 -23.8
2026-02-15T20:55:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:55:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:55:55.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.788298
2026-02-15T20:55:55.610 [DEBUG] [Thread-211069] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:55:55.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:55:55.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:55:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:55:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:55:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:55:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:55:37', tmtdew=15.59, humidity=34.93, cloud=0.0, wind=35.11, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:55:37', seeing=2.09, atlas_timestamp='2026-02-15T18:55:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.01774999999999949, -0.0182500000000001, -0.03950000000000031, -0.005499999999999616, 0.02525000000000155, -0.05400000000000027, -0.005749999999999034, 0.027499999999999858, -0.006000000000000227, -0.024750000000000938, -0.016000000000000014, 0.07399999999999984, 0.02474999999999916, -0.040000000000000924, -0.053000000000000824, 0.01624999999999943, -0.018499999999999517, -0.028999999999999915, -0.056250000000000355, 0.04899999999999949, 0.02874999999999872, -0.03275000000000006, -0.03625000000000078, 0.015499999999999403, 0.049999999999998934, 0.0007500000000000284, -0.024499999999999744, 0.10500000000000043, 0.01600000000000179, -0.005999999999998451, -0.03999999999999915, 0.01524999999999821], zp_timestamp='2026-02-15T18:51:00')
2026-02-15T20:55:55.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:55:55.716 [DEBUG] [Thread-211072] [transport.py] [_log()] starting thread (client mode): 0xa5772200
2026-02-15T20:55:55.716 [DEBUG] [Thread-211072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:55:55.731 [DEBUG] [Thread-211072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:55:55.731 [INFO] [Thread-211072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:55:55.739 [DEBUG] [Thread-211072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:55:55.739 [DEBUG] [Thread-211072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:55:55.739 [DEBUG] [Thread-211072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:55:55.739 [DEBUG] [Thread-211072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:55.739 [DEBUG] [Thread-211072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:55:55.739 [DEBUG] [Thread-211072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] client lang: <none>
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] server lang: <none>
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] kex follows: False
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:55:55.740 [DEBUG] [Thread-211072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:55:55.741 [DEBUG] [Thread-211072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:55:55.741 [DEBUG] [Thread-211072] [transport.py] [_log()] Compression: none
2026-02-15T20:55:55.741 [DEBUG] [Thread-211072] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:55:55.797 [DEBUG] [Thread-211072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:55:55.798 [DEBUG] [Thread-211072] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:55:55.798 [DEBUG] [Thread-211072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:55:55.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:55:55.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:55:55.854 [DEBUG] [Thread-211072] [transport.py] [_log()] userauth is OK
2026-02-15T20:55:55.854 [DEBUG] [Thread-211072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:55:55.854 [DEBUG] [Thread-211072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:55:55.854 [DEBUG] [Thread-211072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:55:55.854 [DEBUG] [Thread-211072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:55:55.873 [INFO] [Thread-211072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:55:55.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:55:55.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:55:56.727 [DEBUG] [Thread-211072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:55:56.728 [DEBUG] [Thread-211072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:55:56.775 [DEBUG] [Thread-211072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:55:56.775 [DEBUG] [Thread-211072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:55:56.784 [DEBUG] [Thread-211072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:55:56.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:55:56.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:55:56.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:55:56.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:55:56.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:55:56.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:55:56.819 [DEBUG] [Thread-211072] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:55:58.280 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:07.322 [DEBUG] [Thread-211074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:16.945 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:17.613 [DEBUG] [Thread-211075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:18.069 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:22.434 [DEBUG] [Thread-211076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:26.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:56:26.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:56:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:56:28.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 56, 12), 15.35, 35.45, 0.0, 30.74, 16.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:56:28.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:56:12
2026-02-15T20:56:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:56:29.301 [DEBUG] [Thread-211077] [transport.py] [_log()] starting thread (client mode): 0xa57e1780
2026-02-15T20:56:29.302 [DEBUG] [Thread-211077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:56:29.314 [DEBUG] [Thread-211077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:56:29.314 [INFO] [Thread-211077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] client lang: <none>
2026-02-15T20:56:29.320 [DEBUG] [Thread-211077] [transport.py] [_log()] server lang: <none>
2026-02-15T20:56:29.321 [DEBUG] [Thread-211077] [transport.py] [_log()] kex follows: False
2026-02-15T20:56:29.321 [DEBUG] [Thread-211077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:56:29.322 [DEBUG] [Thread-211077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:56:29.322 [DEBUG] [Thread-211077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:56:29.322 [DEBUG] [Thread-211077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:56:29.323 [DEBUG] [Thread-211077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:56:29.323 [DEBUG] [Thread-211077] [transport.py] [_log()] Compression: none
2026-02-15T20:56:29.323 [DEBUG] [Thread-211077] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:56:29.364 [DEBUG] [Thread-211077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:56:29.370 [DEBUG] [Thread-211077] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:56:29.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:56:29.375 [DEBUG] [Thread-211077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:56:29.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:56:29.378 [DEBUG] [Thread-211077] [transport.py] [_log()] userauth is OK
2026-02-15T20:56:29.378 [DEBUG] [Thread-211077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:56:29.378 [DEBUG] [Thread-211077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:56:29.379 [DEBUG] [Thread-211077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:56:29.379 [DEBUG] [Thread-211077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:56:29.405 [INFO] [Thread-211077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:56:29.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:56:30.011 [DEBUG] [Thread-211077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:56:30.011 [DEBUG] [Thread-211077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:56:30.013 [DEBUG] [Thread-211077] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:56:30.052 [DEBUG] [Thread-211077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:56:30.052 [DEBUG] [Thread-211077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:56:30.055 [DEBUG] [Thread-211077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:56:30.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:56:30.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:56:30.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:56:30.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:56:30.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:56:30.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:56:30.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:56:30.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:56:30.080 [DEBUG] [Thread-211077] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:56:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:56:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.788646 -999.00  +16.70  24.57     40   +3.30 1 1 1 1 1     0    0 13.76 4.36 ZNESW 21.7 24.6 155.4 28.9 17.0 -24.7 16.9 -23.7 16.6 -22.5 16.9 -23.8
2026-02-15T20:56:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:56:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:56:30.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.788646
2026-02-15T20:56:30.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:56:30.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:56:30.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:56:30.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:56:30.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:56:30.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:56:12', tmtdew=15.35, humidity=35.45, cloud=0.0, wind=30.74, temperature=16.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:56:13', seeing=2.17, atlas_timestamp='2026-02-15T18:55:39.014', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:54:00')
2026-02-15T20:56:30.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:56:30.213 [DEBUG] [Thread-211080] [transport.py] [_log()] starting thread (client mode): 0xa57d5180
2026-02-15T20:56:30.213 [DEBUG] [Thread-211080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:56:30.228 [DEBUG] [Thread-211080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:56:30.228 [INFO] [Thread-211080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:56:30.236 [DEBUG] [Thread-211080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:56:30.236 [DEBUG] [Thread-211080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:56:30.236 [DEBUG] [Thread-211080] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:56:30.236 [DEBUG] [Thread-211080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:56:30.236 [DEBUG] [Thread-211080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] client lang: <none>
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] server lang: <none>
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] kex follows: False
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:56:30.237 [DEBUG] [Thread-211080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:56:30.238 [DEBUG] [Thread-211080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:56:30.238 [DEBUG] [Thread-211080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:56:30.238 [DEBUG] [Thread-211080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:56:30.238 [DEBUG] [Thread-211080] [transport.py] [_log()] Compression: none
2026-02-15T20:56:30.239 [DEBUG] [Thread-211080] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:56:30.292 [DEBUG] [Thread-211080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:56:30.293 [DEBUG] [Thread-211080] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:56:30.293 [DEBUG] [Thread-211080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:56:30.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:56:30.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:56:30.350 [DEBUG] [Thread-211080] [transport.py] [_log()] userauth is OK
2026-02-15T20:56:30.350 [DEBUG] [Thread-211080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:56:30.350 [DEBUG] [Thread-211080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:56:30.350 [DEBUG] [Thread-211080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:56:30.350 [DEBUG] [Thread-211080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:56:30.368 [INFO] [Thread-211080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:56:30.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:56:30.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:56:31.196 [DEBUG] [Thread-211080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:56:31.197 [DEBUG] [Thread-211080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:56:31.244 [DEBUG] [Thread-211080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:56:31.244 [DEBUG] [Thread-211080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:56:31.253 [DEBUG] [Thread-211080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:56:31.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:56:31.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:56:31.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:56:31.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:56:31.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:56:31.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:56:31.289 [DEBUG] [Thread-211080] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:56:33.076 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:33.080 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:35.623 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:37.468 [DEBUG] [Thread-211082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:52.553 [DEBUG] [Thread-211083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:56:54.456 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:01.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:57:01.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:57:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:57:03.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 56, 47), 15.44, 35.46, 0.0, 32.55, 16.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:57:03.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:56:47
2026-02-15T20:57:03.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:57:03.677 [DEBUG] [Thread-211084] [transport.py] [_log()] starting thread (client mode): 0xa2d56950
2026-02-15T20:57:03.677 [DEBUG] [Thread-211084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:57:03.695 [DEBUG] [Thread-211084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:57:03.695 [INFO] [Thread-211084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:57:03.697 [DEBUG] [Thread-211084] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:57:03.697 [DEBUG] [Thread-211084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] client lang: <none>
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] server lang: <none>
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] kex follows: False
2026-02-15T20:57:03.698 [DEBUG] [Thread-211084] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:57:03.699 [DEBUG] [Thread-211084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:57:03.699 [DEBUG] [Thread-211084] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:57:03.700 [DEBUG] [Thread-211084] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:57:03.700 [DEBUG] [Thread-211084] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:57:03.700 [DEBUG] [Thread-211084] [transport.py] [_log()] Compression: none
2026-02-15T20:57:03.700 [DEBUG] [Thread-211084] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:57:03.720 [DEBUG] [Thread-211084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:57:03.722 [DEBUG] [Thread-211084] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:57:03.722 [DEBUG] [Thread-211084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:57:03.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:57:03.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:57:03.764 [DEBUG] [Thread-211084] [transport.py] [_log()] userauth is OK
2026-02-15T20:57:03.764 [DEBUG] [Thread-211084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:57:03.765 [DEBUG] [Thread-211084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:57:03.765 [DEBUG] [Thread-211084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:57:03.765 [DEBUG] [Thread-211084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:57:03.784 [INFO] [Thread-211084] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:57:03.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:57:04.385 [DEBUG] [Thread-211084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:57:04.385 [DEBUG] [Thread-211084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:57:04.385 [DEBUG] [Thread-211084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:57:04.426 [DEBUG] [Thread-211084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:57:04.426 [DEBUG] [Thread-211084] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:57:04.428 [DEBUG] [Thread-211084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:57:04.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:57:04.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:57:04.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:57:04.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:57:04.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:57:04.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:57:04.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:57:04.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:57:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:57:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.788993 -999.00  +16.70  27.68     40   +3.20 1 1 1 1 1     0    0 13.56 3.92 ZNESW 23.9 27.7 165.0 35.1 16.9 -24.7 16.9 -23.7 16.6 -22.5 16.9 -23.8
2026-02-15T20:57:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:57:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:57:04.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.788993
2026-02-15T20:57:04.453 [DEBUG] [Thread-211084] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:57:04.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:57:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:57:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:57:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:57:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:57:04.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:56:47', tmtdew=15.44, humidity=35.46, cloud=0.0, wind=32.55, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:56:48', seeing=2.14, atlas_timestamp='2026-02-15T18:56:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:54:00')
2026-02-15T20:57:04.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:57:04.544 [DEBUG] [Thread-211087] [transport.py] [_log()] starting thread (client mode): 0xa2dc2890
2026-02-15T20:57:04.544 [DEBUG] [Thread-211087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:57:04.560 [DEBUG] [Thread-211087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:57:04.560 [INFO] [Thread-211087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:57:04.567 [DEBUG] [Thread-211087] [transport.py] [_log()] client lang: <none>
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] server lang: <none>
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] kex follows: False
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] Compression: none
2026-02-15T20:57:04.568 [DEBUG] [Thread-211087] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:57:04.625 [DEBUG] [Thread-211087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:57:04.625 [DEBUG] [Thread-211087] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:57:04.625 [DEBUG] [Thread-211087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:57:04.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:57:04.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:57:04.682 [DEBUG] [Thread-211087] [transport.py] [_log()] userauth is OK
2026-02-15T20:57:04.682 [DEBUG] [Thread-211087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:57:04.682 [DEBUG] [Thread-211087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:57:04.682 [DEBUG] [Thread-211087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:57:04.682 [DEBUG] [Thread-211087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:57:04.698 [INFO] [Thread-211087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:57:04.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:57:04.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:57:05.577 [DEBUG] [Thread-211087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:57:05.577 [DEBUG] [Thread-211087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:57:05.625 [DEBUG] [Thread-211087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:57:05.625 [DEBUG] [Thread-211087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:57:05.633 [DEBUG] [Thread-211087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:57:05.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:57:05.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:57:05.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:57:05.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:57:05.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:57:05.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:57:05.665 [DEBUG] [Thread-211087] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:57:07.582 [DEBUG] [Thread-211089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:13.146 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:18.014 [DEBUG] [Thread-211090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:22.666 [DEBUG] [Thread-211091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:31.801 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:33.291 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:33.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:35.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:57:35.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:57:35.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:57:37.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 57, 23), 15.45, 35.46, 0.0, 30.35, 16.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:57:37.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:57:23
2026-02-15T20:57:37.707 [DEBUG] [Thread-211092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:37.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:57:38.128 [DEBUG] [Thread-211093] [transport.py] [_log()] starting thread (client mode): 0xa2d54070
2026-02-15T20:57:38.128 [DEBUG] [Thread-211093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:57:38.138 [DEBUG] [Thread-211093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:57:38.138 [INFO] [Thread-211093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:57:38.141 [DEBUG] [Thread-211093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:57:38.141 [DEBUG] [Thread-211093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] client lang: <none>
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] server lang: <none>
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] kex follows: False
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] Compression: none
2026-02-15T20:57:38.142 [DEBUG] [Thread-211093] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:57:38.167 [DEBUG] [Thread-211093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:57:38.169 [DEBUG] [Thread-211093] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:57:38.170 [DEBUG] [Thread-211093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:57:38.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:57:38.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:57:38.210 [DEBUG] [Thread-211093] [transport.py] [_log()] userauth is OK
2026-02-15T20:57:38.210 [DEBUG] [Thread-211093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:57:38.211 [DEBUG] [Thread-211093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:57:38.211 [DEBUG] [Thread-211093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:57:38.211 [DEBUG] [Thread-211093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:57:38.248 [INFO] [Thread-211093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:57:38.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:57:38.896 [DEBUG] [Thread-211093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:57:38.897 [DEBUG] [Thread-211093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:57:38.897 [DEBUG] [Thread-211093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:57:38.938 [DEBUG] [Thread-211093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:57:38.938 [DEBUG] [Thread-211093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:57:38.942 [DEBUG] [Thread-211093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:57:38.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:57:38.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:57:38.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:57:38.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:57:38.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:57:38.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:57:38.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:57:38.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:57:38.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:57:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.789340 -999.00  +16.70  19.04     40   +3.20 1 1 1 1 1     0    0 13.35 3.92 ZNESW 20.1 19.0 165.4 32.8 17.0 -24.8 16.9 -23.8 16.6 -22.6 16.9 -23.7
2026-02-15T20:57:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:57:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:57:38.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.789340
2026-02-15T20:57:38.973 [DEBUG] [Thread-211093] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:57:38.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:57:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:57:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:57:38.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:57:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:57:38.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:57:23', tmtdew=15.45, humidity=35.46, cloud=0.0, wind=30.35, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:57:23', seeing=2.5, atlas_timestamp='2026-02-15T18:56:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:54:00')
2026-02-15T20:57:39.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:57:39.081 [DEBUG] [Thread-211096] [transport.py] [_log()] starting thread (client mode): 0xa57e1db0
2026-02-15T20:57:39.081 [DEBUG] [Thread-211096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:57:39.096 [DEBUG] [Thread-211096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:57:39.096 [INFO] [Thread-211096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:57:39.103 [DEBUG] [Thread-211096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] client lang: <none>
2026-02-15T20:57:39.104 [DEBUG] [Thread-211096] [transport.py] [_log()] server lang: <none>
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] kex follows: False
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] Compression: none
2026-02-15T20:57:39.105 [DEBUG] [Thread-211096] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:57:39.161 [DEBUG] [Thread-211096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:57:39.161 [DEBUG] [Thread-211096] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:57:39.161 [DEBUG] [Thread-211096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:57:39.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:57:39.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:57:39.218 [DEBUG] [Thread-211096] [transport.py] [_log()] userauth is OK
2026-02-15T20:57:39.218 [DEBUG] [Thread-211096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:57:39.218 [DEBUG] [Thread-211096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:57:39.219 [DEBUG] [Thread-211096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:57:39.219 [DEBUG] [Thread-211096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:57:39.241 [INFO] [Thread-211096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:57:39.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:57:39.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:57:40.071 [DEBUG] [Thread-211096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:57:40.071 [DEBUG] [Thread-211096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:57:40.119 [DEBUG] [Thread-211096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:57:40.119 [DEBUG] [Thread-211096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:57:40.127 [DEBUG] [Thread-211096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:57:40.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:57:40.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:57:40.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:57:40.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:57:40.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:57:40.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:57:40.162 [DEBUG] [Thread-211096] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:57:40.559 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:50.449 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:57:52.759 [DEBUG] [Thread-211098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:07.914 [DEBUG] [Thread-211099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:09.242 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:58:10.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:58:10.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:58:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 57, 58), 15.4, 35.43, 0.0, 33.44, 16.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:58:12.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:57:58
2026-02-15T20:58:12.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:58:12.608 [DEBUG] [Thread-211100] [transport.py] [_log()] starting thread (client mode): 0xa57d6ef0
2026-02-15T20:58:12.609 [DEBUG] [Thread-211100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:58:12.614 [DEBUG] [Thread-211100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:58:12.614 [INFO] [Thread-211100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] client lang: <none>
2026-02-15T20:58:12.619 [DEBUG] [Thread-211100] [transport.py] [_log()] server lang: <none>
2026-02-15T20:58:12.620 [DEBUG] [Thread-211100] [transport.py] [_log()] kex follows: False
2026-02-15T20:58:12.620 [DEBUG] [Thread-211100] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:58:12.620 [DEBUG] [Thread-211100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:58:12.620 [DEBUG] [Thread-211100] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:58:12.620 [DEBUG] [Thread-211100] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:58:12.621 [DEBUG] [Thread-211100] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:58:12.621 [DEBUG] [Thread-211100] [transport.py] [_log()] Compression: none
2026-02-15T20:58:12.621 [DEBUG] [Thread-211100] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:58:12.655 [DEBUG] [Thread-211100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:58:12.657 [DEBUG] [Thread-211100] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:58:12.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:58:12.660 [DEBUG] [Thread-211100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:58:12.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:58:12.662 [DEBUG] [Thread-211100] [transport.py] [_log()] userauth is OK
2026-02-15T20:58:12.662 [DEBUG] [Thread-211100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:58:12.662 [DEBUG] [Thread-211100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:58:12.662 [DEBUG] [Thread-211100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:58:12.662 [DEBUG] [Thread-211100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:58:12.680 [INFO] [Thread-211100] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:58:12.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:58:13.445 [DEBUG] [Thread-211100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:58:13.446 [DEBUG] [Thread-211100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:58:13.447 [DEBUG] [Thread-211100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:58:13.487 [DEBUG] [Thread-211100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:58:13.487 [DEBUG] [Thread-211100] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:58:13.490 [DEBUG] [Thread-211100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:58:13.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:58:13.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:58:13.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:58:13.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:58:13.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:58:13.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:58:13.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:58:13.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:58:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:58:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.789687 -999.00  +16.70  25.96     40   +3.20 1 1 1 1 1     0    0 13.49 4.20 ZNESW 24.3 26.0 146.0 33.8 17.0 -24.7 16.9 -23.7 16.6 -22.5 16.9 -23.9
2026-02-15T20:58:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:58:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:58:13.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.789687
2026-02-15T20:58:13.519 [DEBUG] [Thread-211100] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:58:13.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:58:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:58:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:58:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:58:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:58:13.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:57:58', tmtdew=15.4, humidity=35.43, cloud=0.0, wind=33.44, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:57:58', seeing=2.27, atlas_timestamp='2026-02-15T18:57:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:54:00')
2026-02-15T20:58:13.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:58:13.615 [DEBUG] [Thread-211103] [transport.py] [_log()] starting thread (client mode): 0xa5772170
2026-02-15T20:58:13.615 [DEBUG] [Thread-211103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:58:13.630 [DEBUG] [Thread-211103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:58:13.630 [INFO] [Thread-211103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] client lang: <none>
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] server lang: <none>
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] kex follows: False
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:58:13.639 [DEBUG] [Thread-211103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:58:13.640 [DEBUG] [Thread-211103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:58:13.640 [DEBUG] [Thread-211103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:58:13.640 [DEBUG] [Thread-211103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:58:13.640 [DEBUG] [Thread-211103] [transport.py] [_log()] Compression: none
2026-02-15T20:58:13.640 [DEBUG] [Thread-211103] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:58:13.693 [DEBUG] [Thread-211103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:58:13.693 [DEBUG] [Thread-211103] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:58:13.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:58:13.695 [DEBUG] [Thread-211103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:58:13.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:58:13.750 [DEBUG] [Thread-211103] [transport.py] [_log()] userauth is OK
2026-02-15T20:58:13.750 [DEBUG] [Thread-211103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:58:13.750 [DEBUG] [Thread-211103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:58:13.750 [DEBUG] [Thread-211103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:58:13.750 [DEBUG] [Thread-211103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:58:13.765 [INFO] [Thread-211103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:58:13.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:58:13.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:58:14.626 [DEBUG] [Thread-211103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:58:14.626 [DEBUG] [Thread-211103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:58:14.675 [DEBUG] [Thread-211103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:58:14.675 [DEBUG] [Thread-211103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:58:14.683 [DEBUG] [Thread-211103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:58:14.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:58:14.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:58:14.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:58:14.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:58:14.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:58:14.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:58:14.716 [DEBUG] [Thread-211103] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:58:18.317 [DEBUG] [Thread-211105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:22.946 [DEBUG] [Thread-211106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:28.315 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:33.498 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:33.499 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:38.002 [DEBUG] [Thread-211107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:44.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:58:44.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:58:44.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:58:46.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 58, 33), 15.62, 34.86, 0.0, 33.45, 17.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:58:46.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:58:33
2026-02-15T20:58:46.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:58:47.038 [DEBUG] [Thread-211108] [transport.py] [_log()] starting thread (client mode): 0xa2d6cfd0
2026-02-15T20:58:47.038 [DEBUG] [Thread-211108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:58:47.055 [DEBUG] [Thread-211108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:58:47.055 [INFO] [Thread-211108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] client lang: <none>
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] server lang: <none>
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] kex follows: False
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] Compression: none
2026-02-15T20:58:47.059 [DEBUG] [Thread-211108] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:58:47.075 [DEBUG] [Thread-211108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:58:47.075 [DEBUG] [Thread-211108] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:58:47.075 [DEBUG] [Thread-211108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:58:47.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:58:47.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:58:47.076 [DEBUG] [Thread-211108] [transport.py] [_log()] userauth is OK
2026-02-15T20:58:47.076 [DEBUG] [Thread-211108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:58:47.076 [DEBUG] [Thread-211108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:58:47.076 [DEBUG] [Thread-211108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:58:47.076 [DEBUG] [Thread-211108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:58:47.085 [INFO] [Thread-211108] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:58:47.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:58:47.243 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:58:47.727 [DEBUG] [Thread-211108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:58:47.727 [DEBUG] [Thread-211108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:58:47.727 [DEBUG] [Thread-211108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:58:47.768 [DEBUG] [Thread-211108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:58:47.768 [DEBUG] [Thread-211108] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:58:47.770 [DEBUG] [Thread-211108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:58:47.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:58:47.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:58:47.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:58:47.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:58:47.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:58:47.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:58:47.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:58:47.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:58:47.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.790382 -999.00  +16.70  23.04     40   +3.20 1 1 1 1 1     0    0 13.53 5.06 ZNESW 23.0 23.0 142.6 27.9 16.9 -24.8 16.8 -23.6 16.6 -22.6 16.9 -23.8
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.790382
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:58:47.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:58:33', tmtdew=15.62, humidity=34.86, cloud=0.0, wind=33.45, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:58:34', seeing=2.35, atlas_timestamp='2026-02-15T18:58:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:54:00')
2026-02-15T20:58:47.791 [DEBUG] [Thread-211108] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:58:47.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:58:47.876 [DEBUG] [Thread-211111] [transport.py] [_log()] starting thread (client mode): 0xa5740a90
2026-02-15T20:58:47.877 [DEBUG] [Thread-211111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:58:47.891 [DEBUG] [Thread-211111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:58:47.891 [INFO] [Thread-211111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] client lang: <none>
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] server lang: <none>
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] kex follows: False
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] Compression: none
2026-02-15T20:58:47.898 [DEBUG] [Thread-211111] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:58:47.957 [DEBUG] [Thread-211111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:58:47.957 [DEBUG] [Thread-211111] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:58:47.957 [DEBUG] [Thread-211111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:58:47.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:58:47.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:58:48.014 [DEBUG] [Thread-211111] [transport.py] [_log()] userauth is OK
2026-02-15T20:58:48.014 [DEBUG] [Thread-211111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:58:48.014 [DEBUG] [Thread-211111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:58:48.014 [DEBUG] [Thread-211111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:58:48.014 [DEBUG] [Thread-211111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:58:48.028 [INFO] [Thread-211111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:58:48.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:58:48.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:58:48.892 [DEBUG] [Thread-211111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:58:48.892 [DEBUG] [Thread-211111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:58:48.939 [DEBUG] [Thread-211111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:58:48.940 [DEBUG] [Thread-211111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:58:48.948 [DEBUG] [Thread-211111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:58:48.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:58:48.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:58:48.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:58:48.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:58:48.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:58:48.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:58:48.980 [DEBUG] [Thread-211111] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:58:53.027 [DEBUG] [Thread-211113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:03.241 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:06.189 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:08.112 [DEBUG] [Thread-211114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:18.737 [DEBUG] [Thread-211115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:19.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:59:19.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:59:19.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:59:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 59, 9), 15.48, 35.37, 0.0, 28.83, 16.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:59:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:59:09
2026-02-15T20:59:21.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:59:21.388 [DEBUG] [Thread-211116] [transport.py] [_log()] starting thread (client mode): 0xa57d50f0
2026-02-15T20:59:21.388 [DEBUG] [Thread-211116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:59:21.391 [DEBUG] [Thread-211116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:59:21.391 [INFO] [Thread-211116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:59:21.393 [DEBUG] [Thread-211116] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] client lang: <none>
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] server lang: <none>
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] kex follows: False
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] Compression: none
2026-02-15T20:59:21.394 [DEBUG] [Thread-211116] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:59:21.410 [DEBUG] [Thread-211116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:59:21.412 [DEBUG] [Thread-211116] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:59:21.412 [DEBUG] [Thread-211116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:59:21.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:59:21.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:59:21.413 [DEBUG] [Thread-211116] [transport.py] [_log()] userauth is OK
2026-02-15T20:59:21.413 [DEBUG] [Thread-211116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:59:21.413 [DEBUG] [Thread-211116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:59:21.413 [DEBUG] [Thread-211116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:59:21.413 [DEBUG] [Thread-211116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:59:21.422 [INFO] [Thread-211116] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:59:21.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:59:22.064 [DEBUG] [Thread-211116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:59:22.064 [DEBUG] [Thread-211116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:59:22.065 [DEBUG] [Thread-211116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:59:22.105 [DEBUG] [Thread-211116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:59:22.105 [DEBUG] [Thread-211116] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:59:22.107 [DEBUG] [Thread-211116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:59:22.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:59:22.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:59:22.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:59:22.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:59:22.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:59:22.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:59:22.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:59:22.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:59:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:59:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.790729 -999.00  +16.60  28.65     40   +3.20 1 1 1 1 1     0    0 13.43 4.92 ZNESW 21.1 28.6 167.6 31.8 17.0 -25.0 16.8 -23.7 16.6 -22.6 16.9 -23.8
2026-02-15T20:59:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:59:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:59:22.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.790729
2026-02-15T20:59:22.135 [DEBUG] [Thread-211116] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:59:22.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:59:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:59:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:59:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:59:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:59:22.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:59:09', tmtdew=15.48, humidity=35.37, cloud=0.0, wind=28.83, temperature=16.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:59:09', seeing=1.96, atlas_timestamp='2026-02-15T18:58:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:57:00')
2026-02-15T20:59:22.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:59:22.244 [DEBUG] [Thread-211119] [transport.py] [_log()] starting thread (client mode): 0xa2d54a00
2026-02-15T20:59:22.244 [DEBUG] [Thread-211119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:59:22.259 [DEBUG] [Thread-211119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:59:22.259 [INFO] [Thread-211119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] client lang: <none>
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] server lang: <none>
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] kex follows: False
2026-02-15T20:59:22.271 [DEBUG] [Thread-211119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:59:22.272 [DEBUG] [Thread-211119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:59:22.272 [DEBUG] [Thread-211119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:59:22.272 [DEBUG] [Thread-211119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:59:22.272 [DEBUG] [Thread-211119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:59:22.272 [DEBUG] [Thread-211119] [transport.py] [_log()] Compression: none
2026-02-15T20:59:22.272 [DEBUG] [Thread-211119] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:59:22.325 [DEBUG] [Thread-211119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:59:22.325 [DEBUG] [Thread-211119] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:59:22.325 [DEBUG] [Thread-211119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:59:22.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:59:22.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:59:22.382 [DEBUG] [Thread-211119] [transport.py] [_log()] userauth is OK
2026-02-15T20:59:22.382 [DEBUG] [Thread-211119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:59:22.382 [DEBUG] [Thread-211119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:59:22.382 [DEBUG] [Thread-211119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:59:22.383 [DEBUG] [Thread-211119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:59:22.397 [INFO] [Thread-211119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:59:22.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:59:22.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:59:23.134 [DEBUG] [Thread-211121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:23.208 [DEBUG] [Thread-211119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:59:23.208 [DEBUG] [Thread-211119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:59:23.259 [DEBUG] [Thread-211119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:59:23.259 [DEBUG] [Thread-211119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:59:23.267 [DEBUG] [Thread-211119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:59:23.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:59:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:59:23.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:59:23.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:59:23.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:59:23.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:59:23.302 [DEBUG] [Thread-211119] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:59:25.189 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:33.700 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:33.701 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:38.200 [DEBUG] [Thread-211122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:44.056 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:53.225 [DEBUG] [Thread-211123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T20:59:53.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T20:59:53.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T20:59:53.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T20:59:55.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 20, 59, 44), 15.48, 35.38, 0.0, 33.59, 16.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T20:59:55.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 20:59:44
2026-02-15T20:59:55.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T20:59:55.968 [DEBUG] [Thread-211124] [transport.py] [_log()] starting thread (client mode): 0xa2d55e40
2026-02-15T20:59:55.969 [DEBUG] [Thread-211124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:59:55.980 [DEBUG] [Thread-211124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T20:59:55.980 [INFO] [Thread-211124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T20:59:55.983 [DEBUG] [Thread-211124] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] client lang: <none>
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] server lang: <none>
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] kex follows: False
2026-02-15T20:59:55.984 [DEBUG] [Thread-211124] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:59:55.985 [DEBUG] [Thread-211124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:59:55.985 [DEBUG] [Thread-211124] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:59:55.985 [DEBUG] [Thread-211124] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:59:55.985 [DEBUG] [Thread-211124] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:59:55.985 [DEBUG] [Thread-211124] [transport.py] [_log()] Compression: none
2026-02-15T20:59:55.985 [DEBUG] [Thread-211124] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:59:56.012 [DEBUG] [Thread-211124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:59:56.015 [DEBUG] [Thread-211124] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:59:56.017 [DEBUG] [Thread-211124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T20:59:56.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T20:59:56.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:59:56.020 [DEBUG] [Thread-211124] [transport.py] [_log()] userauth is OK
2026-02-15T20:59:56.020 [DEBUG] [Thread-211124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:59:56.020 [DEBUG] [Thread-211124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:59:56.020 [DEBUG] [Thread-211124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T20:59:56.020 [DEBUG] [Thread-211124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:59:56.040 [INFO] [Thread-211124] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:59:56.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:59:56.637 [DEBUG] [Thread-211124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:59:56.637 [DEBUG] [Thread-211124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:59:56.638 [DEBUG] [Thread-211124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T20:59:56.678 [DEBUG] [Thread-211124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:59:56.678 [DEBUG] [Thread-211124] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:59:56.680 [DEBUG] [Thread-211124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:59:56.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:59:56.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T20:59:56.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T20:59:56.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T20:59:56.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:59:56.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T20:59:56.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:59:56.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:59:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T20:59:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.791076 -999.00  +16.60  25.23     40   +3.20 1 1 1 1 1     0    0 13.40 4.30 ZNESW 27.5 25.2 144.4 29.7 16.9 -24.8 16.9 -23.7 16.6 -22.6 16.9 -23.9
2026-02-15T20:59:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T20:59:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T20:59:56.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.791076
2026-02-15T20:59:56.707 [DEBUG] [Thread-211124] [transport.py] [_log()] EOF in transport thread
2026-02-15T20:59:56.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T20:59:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T20:59:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T20:59:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T20:59:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T20:59:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T20:59:44', tmtdew=15.48, humidity=35.38, cloud=0.0, wind=33.59, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T20:59:44', seeing=2.01, atlas_timestamp='2026-02-15T18:59:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:57:00')
2026-02-15T20:59:56.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T20:59:56.808 [DEBUG] [Thread-211127] [transport.py] [_log()] starting thread (client mode): 0xa57e0ac0
2026-02-15T20:59:56.808 [DEBUG] [Thread-211127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T20:59:56.822 [DEBUG] [Thread-211127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T20:59:56.822 [INFO] [Thread-211127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] client lang: <none>
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] server lang: <none>
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] kex follows: False
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] Compression: none
2026-02-15T20:59:56.830 [DEBUG] [Thread-211127] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T20:59:56.885 [DEBUG] [Thread-211127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T20:59:56.885 [DEBUG] [Thread-211127] [transport.py] [_log()] Switch to new keys ...
2026-02-15T20:59:56.885 [DEBUG] [Thread-211127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T20:59:56.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T20:59:56.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T20:59:56.942 [DEBUG] [Thread-211127] [transport.py] [_log()] userauth is OK
2026-02-15T20:59:56.942 [DEBUG] [Thread-211127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T20:59:56.942 [DEBUG] [Thread-211127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T20:59:56.942 [DEBUG] [Thread-211127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T20:59:56.942 [DEBUG] [Thread-211127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T20:59:56.956 [INFO] [Thread-211127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T20:59:56.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T20:59:56.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T20:59:57.764 [DEBUG] [Thread-211127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T20:59:57.764 [DEBUG] [Thread-211127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T20:59:57.812 [DEBUG] [Thread-211127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T20:59:57.812 [DEBUG] [Thread-211127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T20:59:57.820 [DEBUG] [Thread-211127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T20:59:57.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T20:59:57.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T20:59:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T20:59:57.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T20:59:57.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T20:59:57.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T20:59:57.852 [DEBUG] [Thread-211127] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:00:03.113 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:08.250 [DEBUG] [Thread-211129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:19.100 [DEBUG] [Thread-211130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:22.090 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:23.356 [DEBUG] [Thread-211131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:27.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:00:27.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:00:27.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:00:29.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 0, 19), 15.49, 35.33, 0.0, 32.78, 16.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:00:29.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:00:19
2026-02-15T21:00:30.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:00:30.396 [DEBUG] [Thread-211132] [transport.py] [_log()] starting thread (client mode): 0xa5742620
2026-02-15T21:00:30.397 [DEBUG] [Thread-211132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:00:30.408 [DEBUG] [Thread-211132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:00:30.411 [INFO] [Thread-211132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:00:30.428 [DEBUG] [Thread-211132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:00:30.430 [DEBUG] [Thread-211132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:00:30.430 [DEBUG] [Thread-211132] [transport.py] [_log()] client lang: <none>
2026-02-15T21:00:30.430 [DEBUG] [Thread-211132] [transport.py] [_log()] server lang: <none>
2026-02-15T21:00:30.430 [DEBUG] [Thread-211132] [transport.py] [_log()] kex follows: False
2026-02-15T21:00:30.430 [DEBUG] [Thread-211132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:00:30.439 [DEBUG] [Thread-211132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:00:30.439 [DEBUG] [Thread-211132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:00:30.439 [DEBUG] [Thread-211132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:00:30.439 [DEBUG] [Thread-211132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:00:30.439 [DEBUG] [Thread-211132] [transport.py] [_log()] Compression: none
2026-02-15T21:00:30.439 [DEBUG] [Thread-211132] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:00:30.481 [DEBUG] [Thread-211132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:00:30.487 [DEBUG] [Thread-211132] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:00:30.489 [DEBUG] [Thread-211132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:00:30.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:00:30.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:00:30.495 [DEBUG] [Thread-211132] [transport.py] [_log()] userauth is OK
2026-02-15T21:00:30.495 [DEBUG] [Thread-211132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:00:30.495 [DEBUG] [Thread-211132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:00:30.496 [DEBUG] [Thread-211132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:00:30.496 [DEBUG] [Thread-211132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:00:30.520 [INFO] [Thread-211132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:00:30.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:00:31.181 [DEBUG] [Thread-211132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:00:31.182 [DEBUG] [Thread-211132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:00:31.182 [DEBUG] [Thread-211132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:00:31.222 [DEBUG] [Thread-211132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:00:31.222 [DEBUG] [Thread-211132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:00:31.225 [DEBUG] [Thread-211132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:00:31.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:00:31.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:00:31.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:00:31.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:00:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:00:31.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:00:31.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:00:31.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:00:31.256 [DEBUG] [Thread-211132] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:00:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:00:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.791423 -999.00  +16.60  20.11     40   +3.20 1 1 1 1 1     0    0 13.63 4.41 ZNESW 24.5 20.1 147.5 30.6 16.9 -24.8 16.9 -23.7 16.6 -22.5 16.9 -23.7
2026-02-15T21:00:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:00:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:00:31.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.791423
2026-02-15T21:00:31.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:00:31.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:00:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:00:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:00:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:00:31.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:00:19', tmtdew=15.49, humidity=35.33, cloud=0.0, wind=32.78, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:00:20', seeing=2.49, atlas_timestamp='2026-02-15T18:59:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:57:00')
2026-02-15T21:00:31.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:00:31.372 [DEBUG] [Thread-211135] [transport.py] [_log()] starting thread (client mode): 0xa2d78130
2026-02-15T21:00:31.372 [DEBUG] [Thread-211135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:00:31.387 [DEBUG] [Thread-211135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:00:31.387 [INFO] [Thread-211135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] client lang: <none>
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] server lang: <none>
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] kex follows: False
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] Compression: none
2026-02-15T21:00:31.395 [DEBUG] [Thread-211135] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:00:31.453 [DEBUG] [Thread-211135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:00:31.453 [DEBUG] [Thread-211135] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:00:31.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:00:31.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:00:31.454 [DEBUG] [Thread-211135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:00:31.510 [DEBUG] [Thread-211135] [transport.py] [_log()] userauth is OK
2026-02-15T21:00:31.511 [DEBUG] [Thread-211135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:00:31.511 [DEBUG] [Thread-211135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:00:31.511 [DEBUG] [Thread-211135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:00:31.511 [DEBUG] [Thread-211135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:00:31.534 [INFO] [Thread-211135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:00:31.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:00:31.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:00:32.358 [DEBUG] [Thread-211135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:00:32.359 [DEBUG] [Thread-211135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:00:32.407 [DEBUG] [Thread-211135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:00:32.407 [DEBUG] [Thread-211135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:00:32.415 [DEBUG] [Thread-211135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:00:32.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:00:32.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:00:32.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:00:32.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:00:32.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:00:32.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:00:32.449 [DEBUG] [Thread-211135] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:00:33.899 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:33.900 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:38.432 [DEBUG] [Thread-211137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:41.016 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:49.231 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:52.389 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:53.555 [DEBUG] [Thread-211138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:57.448 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:00:59.953 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:02.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:01:02.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:01:02.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:01:03.847 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:04.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 0, 54), 15.48, 35.37, 0.0, 29.03, 16.67, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:01:04.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:00:54
2026-02-15T21:01:04.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:01:04.941 [DEBUG] [Thread-211139] [transport.py] [_log()] starting thread (client mode): 0xa5771ea0
2026-02-15T21:01:04.942 [DEBUG] [Thread-211139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:01:04.952 [DEBUG] [Thread-211139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:01:04.952 [INFO] [Thread-211139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:01:04.959 [DEBUG] [Thread-211139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:01:04.959 [DEBUG] [Thread-211139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:01:04.959 [DEBUG] [Thread-211139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:01:04.959 [DEBUG] [Thread-211139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:04.959 [DEBUG] [Thread-211139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:04.959 [DEBUG] [Thread-211139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] client lang: <none>
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] server lang: <none>
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] kex follows: False
2026-02-15T21:01:04.960 [DEBUG] [Thread-211139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:01:04.961 [DEBUG] [Thread-211139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:01:04.961 [DEBUG] [Thread-211139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:01:04.961 [DEBUG] [Thread-211139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:01:04.961 [DEBUG] [Thread-211139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:01:04.961 [DEBUG] [Thread-211139] [transport.py] [_log()] Compression: none
2026-02-15T21:01:04.961 [DEBUG] [Thread-211139] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:01:05.007 [DEBUG] [Thread-211139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:01:05.062 [DEBUG] [Thread-211139] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:01:05.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:01:05.066 [DEBUG] [Thread-211139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:01:05.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:01:05.069 [DEBUG] [Thread-211139] [transport.py] [_log()] userauth is OK
2026-02-15T21:01:05.070 [DEBUG] [Thread-211139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:01:05.070 [DEBUG] [Thread-211139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:01:05.070 [DEBUG] [Thread-211139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:01:05.070 [DEBUG] [Thread-211139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:01:05.100 [INFO] [Thread-211139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:01:05.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:01:05.715 [DEBUG] [Thread-211139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:01:05.716 [DEBUG] [Thread-211139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:01:05.718 [DEBUG] [Thread-211139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:01:05.756 [DEBUG] [Thread-211139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:01:05.756 [DEBUG] [Thread-211139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:01:05.760 [DEBUG] [Thread-211139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:01:05.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:01:05.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:01:05.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:01:05.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:01:05.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:01:05.786 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:01:05.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:01:05.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:01:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:01:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.792118 -999.00  +16.60  25.44     40   +3.10 1 1 1 1 1     0    0 13.27 4.34 ZNESW 34.3 25.4 163.2 35.4 16.9 -24.8 16.8 -23.6 16.6 -22.5 16.9 -23.7
2026-02-15T21:01:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:01:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:01:05.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.792118
2026-02-15T21:01:05.795 [DEBUG] [Thread-211139] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:01:05.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:01:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:01:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:01:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:01:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:01:05.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:00:54', tmtdew=15.48, humidity=35.37, cloud=0.0, wind=29.03, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:00:55', seeing=1.87, atlas_timestamp='2026-02-15T19:00:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:57:00')
2026-02-15T21:01:05.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:01:05.904 [DEBUG] [Thread-211142] [transport.py] [_log()] starting thread (client mode): 0xa57e07c0
2026-02-15T21:01:05.904 [DEBUG] [Thread-211142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:01:05.918 [DEBUG] [Thread-211142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:01:05.919 [INFO] [Thread-211142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:01:05.926 [DEBUG] [Thread-211142] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:01:05.926 [DEBUG] [Thread-211142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:01:05.926 [DEBUG] [Thread-211142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:01:05.926 [DEBUG] [Thread-211142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] client lang: <none>
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] server lang: <none>
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] kex follows: False
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:01:05.927 [DEBUG] [Thread-211142] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:01:05.928 [DEBUG] [Thread-211142] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:01:05.928 [DEBUG] [Thread-211142] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:01:05.928 [DEBUG] [Thread-211142] [transport.py] [_log()] Compression: none
2026-02-15T21:01:05.928 [DEBUG] [Thread-211142] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:01:05.989 [DEBUG] [Thread-211142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:01:05.989 [DEBUG] [Thread-211142] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:01:05.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:01:05.990 [DEBUG] [Thread-211142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:01:05.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:01:06.047 [DEBUG] [Thread-211142] [transport.py] [_log()] userauth is OK
2026-02-15T21:01:06.047 [DEBUG] [Thread-211142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:01:06.047 [DEBUG] [Thread-211142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:01:06.047 [DEBUG] [Thread-211142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:01:06.047 [DEBUG] [Thread-211142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:01:06.067 [INFO] [Thread-211142] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:01:06.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:01:06.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:01:06.906 [DEBUG] [Thread-211142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:01:06.906 [DEBUG] [Thread-211142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:01:06.957 [DEBUG] [Thread-211142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:01:06.957 [DEBUG] [Thread-211142] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:01:06.966 [DEBUG] [Thread-211142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:01:06.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:01:06.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:01:06.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:01:06.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:01:06.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:01:06.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:01:07.004 [DEBUG] [Thread-211142] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:01:08.626 [DEBUG] [Thread-211144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:18.757 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:19.563 [DEBUG] [Thread-211145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:23.254 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:23.702 [DEBUG] [Thread-211146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:27.627 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:34.104 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:34.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:37.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:01:37.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:01:37.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:01:37.405 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:38.778 [DEBUG] [Thread-211147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:38.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 1, 30), 15.49, 35.33, 0.0, 30.75, 16.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:01:38.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:01:30
2026-02-15T21:01:39.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:01:39.465 [DEBUG] [Thread-211148] [transport.py] [_log()] starting thread (client mode): 0xa2d78400
2026-02-15T21:01:39.466 [DEBUG] [Thread-211148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:01:39.466 [DEBUG] [Thread-211148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:01:39.466 [INFO] [Thread-211148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] client lang: <none>
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] server lang: <none>
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] kex follows: False
2026-02-15T21:01:39.471 [DEBUG] [Thread-211148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:01:39.472 [DEBUG] [Thread-211148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:01:39.472 [DEBUG] [Thread-211148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:01:39.472 [DEBUG] [Thread-211148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:01:39.472 [DEBUG] [Thread-211148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:01:39.472 [DEBUG] [Thread-211148] [transport.py] [_log()] Compression: none
2026-02-15T21:01:39.472 [DEBUG] [Thread-211148] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:01:39.499 [DEBUG] [Thread-211148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:01:39.502 [DEBUG] [Thread-211148] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:01:39.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:01:39.504 [DEBUG] [Thread-211148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:01:39.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:01:39.507 [DEBUG] [Thread-211148] [transport.py] [_log()] userauth is OK
2026-02-15T21:01:39.507 [DEBUG] [Thread-211148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:01:39.507 [DEBUG] [Thread-211148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:01:39.507 [DEBUG] [Thread-211148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:01:39.507 [DEBUG] [Thread-211148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:01:39.525 [INFO] [Thread-211148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:01:39.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:01:40.162 [DEBUG] [Thread-211148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:01:40.162 [DEBUG] [Thread-211148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:01:40.169 [DEBUG] [Thread-211148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:01:40.203 [DEBUG] [Thread-211148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:01:40.203 [DEBUG] [Thread-211148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:01:40.206 [DEBUG] [Thread-211148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:01:40.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:01:40.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:01:40.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:01:40.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:01:40.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:01:40.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:01:40.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:01:40.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:01:40.234 [DEBUG] [Thread-211148] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:01:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:01:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.792465 -999.00  +16.60  16.57     40   +3.10 1 1 1 1 1     0    0 13.63 4.28 ZNESW 17.4 16.6 154.1 31.8 16.9 -24.7 16.8 -23.7 16.6 -22.5 16.9 -23.8
2026-02-15T21:01:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:01:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:01:40.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.792465
2026-02-15T21:01:40.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:01:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:01:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:01:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:01:40.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:01:40.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:01:30', tmtdew=15.49, humidity=35.33, cloud=0.0, wind=30.75, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:01:30', seeing=1.94, atlas_timestamp='2026-02-15T19:01:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, -0.0017499999999994742, 0.03074999999999939, 0.009000000000000341, 0.0004999999999988347, 0.047250000000000014, -0.016000000000000014, -0.0012499999999988631, 0.0039999999999995595, 0.0009999999999994458, 0.030249999999998778, 0.0259999999999998, 0.09200000000000053, 0.09675000000000011, -0.040000000000000924, -0.04299999999999926, 0.03924999999999912, -0.011499999999999844, 0.004999999999999005, -0.024750000000000938, 0.07499999999999929, 0.03125, -0.0067499999999984794, -0.028249999999999886, 0.03250000000000064, 0.05150000000000077, 0.014749999999999375, -0.0005000000000006111, 0.14100000000000001, 0.04300000000000104, 0.011000000000001009, 0.017500000000001847, 0.019249999999999545], zp_timestamp='2026-02-15T18:57:00')
2026-02-15T21:01:40.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:01:40.356 [DEBUG] [Thread-211151] [transport.py] [_log()] starting thread (client mode): 0xa2d6e110
2026-02-15T21:01:40.356 [DEBUG] [Thread-211151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:01:40.370 [DEBUG] [Thread-211151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:01:40.371 [INFO] [Thread-211151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:01:40.378 [DEBUG] [Thread-211151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:01:40.378 [DEBUG] [Thread-211151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:01:40.378 [DEBUG] [Thread-211151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:01:40.378 [DEBUG] [Thread-211151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:40.378 [DEBUG] [Thread-211151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] client lang: <none>
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] server lang: <none>
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] kex follows: False
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] Compression: none
2026-02-15T21:01:40.379 [DEBUG] [Thread-211151] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:01:40.438 [DEBUG] [Thread-211151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:01:40.439 [DEBUG] [Thread-211151] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:01:40.439 [DEBUG] [Thread-211151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:01:40.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:01:40.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:01:40.494 [DEBUG] [Thread-211151] [transport.py] [_log()] userauth is OK
2026-02-15T21:01:40.495 [DEBUG] [Thread-211151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:01:40.495 [DEBUG] [Thread-211151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:01:40.495 [DEBUG] [Thread-211151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:01:40.495 [DEBUG] [Thread-211151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:01:40.519 [INFO] [Thread-211151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:01:40.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:01:40.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:01:41.357 [DEBUG] [Thread-211151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:01:41.357 [DEBUG] [Thread-211151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:01:41.405 [DEBUG] [Thread-211151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:01:41.405 [DEBUG] [Thread-211151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:01:41.414 [DEBUG] [Thread-211151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:01:41.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:01:41.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:01:41.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:01:41.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:01:41.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:01:41.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:01:41.452 [DEBUG] [Thread-211151] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:01:47.084 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:51.518 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:53.857 [DEBUG] [Thread-211153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:56.065 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:01:57.607 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:03.072 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:08.986 [DEBUG] [Thread-211154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:02:11.478 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:02: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
2026-02-15T21:02:13.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 2, 5), 15.51, 35.3, 0.0, 31.92, 16.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:02:13.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:02:05
2026-02-15T21:02:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:02:14.010 [DEBUG] [Thread-211155] [transport.py] [_log()] starting thread (client mode): 0xa57b2b60
2026-02-15T21:02:14.011 [DEBUG] [Thread-211155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:02:14.012 [DEBUG] [Thread-211155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:02:14.012 [INFO] [Thread-211155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:02:14.022 [DEBUG] [Thread-211155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] client lang: <none>
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] server lang: <none>
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] kex follows: False
2026-02-15T21:02:14.023 [DEBUG] [Thread-211155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:02:14.024 [DEBUG] [Thread-211155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:02:14.024 [DEBUG] [Thread-211155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:02:14.024 [DEBUG] [Thread-211155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:02:14.025 [DEBUG] [Thread-211155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:02:14.025 [DEBUG] [Thread-211155] [transport.py] [_log()] Compression: none
2026-02-15T21:02:14.025 [DEBUG] [Thread-211155] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:02:14.065 [DEBUG] [Thread-211155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:02:14.074 [DEBUG] [Thread-211155] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:02:14.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:02:14.079 [DEBUG] [Thread-211155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:02:14.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:02:14.084 [DEBUG] [Thread-211155] [transport.py] [_log()] userauth is OK
2026-02-15T21:02:14.084 [DEBUG] [Thread-211155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:02:14.085 [DEBUG] [Thread-211155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:02:14.085 [DEBUG] [Thread-211155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:02:14.085 [DEBUG] [Thread-211155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:02:14.123 [INFO] [Thread-211155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:02:14.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:02:14.777 [DEBUG] [Thread-211155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:02:14.777 [DEBUG] [Thread-211155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:02:14.778 [DEBUG] [Thread-211155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:02:14.818 [DEBUG] [Thread-211155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:02:14.818 [DEBUG] [Thread-211155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:02:14.821 [DEBUG] [Thread-211155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:02:14.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:02:14.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:02:14.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:02:14.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:02:14.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:02:14.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:02:14.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:02:14.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:02:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:02:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.792812 -999.00  +16.60  20.73     40   +3.10 1 1 1 1 1     0    0 13.56 3.97 ZNESW 22.2 20.7 140.6 29.1 16.9 -24.8 16.8 -23.7 16.6 -22.6 16.9 -23.9
2026-02-15T21:02:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:02:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:02:14.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.792812
2026-02-15T21:02:14.853 [DEBUG] [Thread-211155] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:02:14.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:02:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:02:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:02:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:02:14.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:02:14.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:02:05', tmtdew=15.51, humidity=35.3, cloud=0.0, wind=31.92, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:02:05', seeing=1.85, atlas_timestamp='2026-02-15T19:01:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:00:00')
2026-02-15T21:02:14.951 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:14.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:02:14.969 [DEBUG] [Thread-211158] [transport.py] [_log()] starting thread (client mode): 0xa2d55480
2026-02-15T21:02:14.969 [DEBUG] [Thread-211158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:02:14.984 [DEBUG] [Thread-211158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:02:14.984 [INFO] [Thread-211158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:02:14.992 [DEBUG] [Thread-211158] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:02:14.992 [DEBUG] [Thread-211158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:02:14.992 [DEBUG] [Thread-211158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:02:14.992 [DEBUG] [Thread-211158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:14.992 [DEBUG] [Thread-211158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] client lang: <none>
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] server lang: <none>
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] kex follows: False
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:02:14.993 [DEBUG] [Thread-211158] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:02:14.994 [DEBUG] [Thread-211158] [transport.py] [_log()] Compression: none
2026-02-15T21:02:14.994 [DEBUG] [Thread-211158] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:02:15.050 [DEBUG] [Thread-211158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:02:15.050 [DEBUG] [Thread-211158] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:02:15.051 [DEBUG] [Thread-211158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:02:15.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:02:15.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:02:15.110 [DEBUG] [Thread-211158] [transport.py] [_log()] userauth is OK
2026-02-15T21:02:15.110 [DEBUG] [Thread-211158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:02:15.110 [DEBUG] [Thread-211158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:02:15.110 [DEBUG] [Thread-211158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:02:15.110 [DEBUG] [Thread-211158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:02:15.125 [INFO] [Thread-211158] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:02:15.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:02:15.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:02:15.957 [DEBUG] [Thread-211158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:02:15.957 [DEBUG] [Thread-211158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:02:16.005 [DEBUG] [Thread-211158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:02:16.005 [DEBUG] [Thread-211158] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:02:16.013 [DEBUG] [Thread-211158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:02:16.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:02:16.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:02:16.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:02:16.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:02:16.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:02:16.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:02:16.049 [DEBUG] [Thread-211158] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:02:20.003 [DEBUG] [Thread-211160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:24.023 [DEBUG] [Thread-211161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:33.899 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:34.308 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:34.309 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:39.159 [DEBUG] [Thread-211162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:46.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:02:46.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:02:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:02:47.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 2, 5), 15.51, 35.3, 0.0, 31.92, 16.69, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:02:47.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:02:05
2026-02-15T21:02:48.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:02:48.558 [DEBUG] [Thread-211163] [transport.py] [_log()] starting thread (client mode): 0xa2d3c490
2026-02-15T21:02:48.559 [DEBUG] [Thread-211163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:02:48.566 [DEBUG] [Thread-211163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:02:48.566 [INFO] [Thread-211163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:02:48.573 [DEBUG] [Thread-211163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] client lang: <none>
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] server lang: <none>
2026-02-15T21:02:48.574 [DEBUG] [Thread-211163] [transport.py] [_log()] kex follows: False
2026-02-15T21:02:48.575 [DEBUG] [Thread-211163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:02:48.575 [DEBUG] [Thread-211163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:02:48.575 [DEBUG] [Thread-211163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:02:48.575 [DEBUG] [Thread-211163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:02:48.575 [DEBUG] [Thread-211163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:02:48.576 [DEBUG] [Thread-211163] [transport.py] [_log()] Compression: none
2026-02-15T21:02:48.576 [DEBUG] [Thread-211163] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:02:48.619 [DEBUG] [Thread-211163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:02:48.626 [DEBUG] [Thread-211163] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:02:48.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:02:48.630 [DEBUG] [Thread-211163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:02:48.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:02:48.636 [DEBUG] [Thread-211163] [transport.py] [_log()] userauth is OK
2026-02-15T21:02:48.636 [DEBUG] [Thread-211163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:02:48.637 [DEBUG] [Thread-211163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:02:48.637 [DEBUG] [Thread-211163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:02:48.637 [DEBUG] [Thread-211163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:02:48.665 [INFO] [Thread-211163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:02:48.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:02:49.291 [DEBUG] [Thread-211163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:02:49.294 [DEBUG] [Thread-211163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:02:49.297 [DEBUG] [Thread-211163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:02:49.333 [DEBUG] [Thread-211163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:02:49.333 [DEBUG] [Thread-211163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:02:49.337 [DEBUG] [Thread-211163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:02:49.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:02:49.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:02:49.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:02:49.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:02:49.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:02:49.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:02:49.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:02:49.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:02:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:02:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.793159 -999.00  +16.50  18.53     40   +3.10 1 1 1 1 1     0    0 13.44 3.93 ZNESW 25.1 18.5 143.2 28.8 16.9 -24.7 16.8 -23.8 16.6 -22.5 16.9 -23.8
2026-02-15T21:02:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:02:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:02:49.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.793159
2026-02-15T21:02:49.373 [DEBUG] [Thread-211163] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:02:49.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:02:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:02:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:02:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:02:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:02:49.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:02:05', tmtdew=15.51, humidity=35.3, cloud=0.0, wind=31.92, temperature=16.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:02:41', seeing=1.85, atlas_timestamp='2026-02-15T19:02:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:00:00')
2026-02-15T21:02:49.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:02:49.473 [DEBUG] [Thread-211166] [transport.py] [_log()] starting thread (client mode): 0xa2d6d8a0
2026-02-15T21:02:49.474 [DEBUG] [Thread-211166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:02:49.489 [DEBUG] [Thread-211166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:02:49.489 [INFO] [Thread-211166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:02:49.497 [DEBUG] [Thread-211166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] client lang: <none>
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] server lang: <none>
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] kex follows: False
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:02:49.498 [DEBUG] [Thread-211166] [transport.py] [_log()] Compression: none
2026-02-15T21:02:49.499 [DEBUG] [Thread-211166] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:02:49.559 [DEBUG] [Thread-211166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:02:49.559 [DEBUG] [Thread-211166] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:02:49.559 [DEBUG] [Thread-211166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:02:49.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:02:49.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:02:49.614 [DEBUG] [Thread-211166] [transport.py] [_log()] userauth is OK
2026-02-15T21:02:49.615 [DEBUG] [Thread-211166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:02:49.615 [DEBUG] [Thread-211166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:02:49.615 [DEBUG] [Thread-211166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:02:49.615 [DEBUG] [Thread-211166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:02:49.639 [INFO] [Thread-211166] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:02:49.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:02:49.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:02:50.525 [DEBUG] [Thread-211166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:02:50.525 [DEBUG] [Thread-211166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:02:50.573 [DEBUG] [Thread-211166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:02:50.573 [DEBUG] [Thread-211166] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:02:50.582 [DEBUG] [Thread-211166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:02:50.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:02:50.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:02:50.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:02:50.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:02:50.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:02:50.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:02:50.619 [DEBUG] [Thread-211166] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:02:52.863 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:02:54.225 [DEBUG] [Thread-211168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:09.369 [DEBUG] [Thread-211169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:10.362 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:11.850 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:14.455 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:20.423 [DEBUG] [Thread-211170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:20.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:03:20.644 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:03:20.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:03:22.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 2, 40), 15.7, 34.63, 0.0, 33.17, 16.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:03:22.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:02:40
2026-02-15T21:03:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:03:23.314 [DEBUG] [Thread-211171] [transport.py] [_log()] starting thread (client mode): 0xa57e0910
2026-02-15T21:03:23.315 [DEBUG] [Thread-211171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:03:23.318 [DEBUG] [Thread-211171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:03:23.318 [INFO] [Thread-211171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] client lang: <none>
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] server lang: <none>
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] kex follows: False
2026-02-15T21:03:23.323 [DEBUG] [Thread-211171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:03:23.324 [DEBUG] [Thread-211171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:03:23.324 [DEBUG] [Thread-211171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:03:23.324 [DEBUG] [Thread-211171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:03:23.324 [DEBUG] [Thread-211171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:03:23.324 [DEBUG] [Thread-211171] [transport.py] [_log()] Compression: none
2026-02-15T21:03:23.324 [DEBUG] [Thread-211171] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:03:23.363 [DEBUG] [Thread-211171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:03:23.367 [DEBUG] [Thread-211171] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:03:23.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:03:23.369 [DEBUG] [Thread-211171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:03:23.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:03:23.373 [DEBUG] [Thread-211171] [transport.py] [_log()] userauth is OK
2026-02-15T21:03:23.373 [DEBUG] [Thread-211171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:03:23.373 [DEBUG] [Thread-211171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:03:23.374 [DEBUG] [Thread-211171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:03:23.374 [DEBUG] [Thread-211171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:03:23.422 [INFO] [Thread-211171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:03:23.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:03:24.063 [DEBUG] [Thread-211171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:03:24.063 [DEBUG] [Thread-211171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:03:24.064 [DEBUG] [Thread-211171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:03:24.103 [DEBUG] [Thread-211171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:03:24.103 [DEBUG] [Thread-211171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:03:24.106 [DEBUG] [Thread-211171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:03:24.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:03:24.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:03:24.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:03:24.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:03:24.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:03:24.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:03:24.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:03:24.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:03:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:03:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.793507 -999.00  +16.50  21.46     40   +3.10 1 1 1 1 1     0    0 13.52 4.33 ZNESW 29.0 21.5 157.4 31.2 16.8 -24.7 16.8 -23.6 16.6 -22.6 16.8 -23.8
2026-02-15T21:03:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:03:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:03:24.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.793507
2026-02-15T21:03:24.137 [DEBUG] [Thread-211171] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:03:24.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:03:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:03:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:03:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:03:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:03:24.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:02:40', tmtdew=15.7, humidity=34.63, cloud=0.0, wind=33.17, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:03:17', seeing=2.02, atlas_timestamp='2026-02-15T19:02:39.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:00:00')
2026-02-15T21:03:24.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:03:24.261 [DEBUG] [Thread-211174] [transport.py] [_log()] starting thread (client mode): 0xa2d05150
2026-02-15T21:03:24.261 [DEBUG] [Thread-211174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:03:24.275 [DEBUG] [Thread-211174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:03:24.275 [INFO] [Thread-211174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] client lang: <none>
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] server lang: <none>
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] kex follows: False
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] Compression: none
2026-02-15T21:03:24.283 [DEBUG] [Thread-211174] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:03:24.347 [DEBUG] [Thread-211174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:03:24.348 [DEBUG] [Thread-211174] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:03:24.348 [DEBUG] [Thread-211174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:03:24.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:03:24.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:03:24.408 [DEBUG] [Thread-211174] [transport.py] [_log()] userauth is OK
2026-02-15T21:03:24.408 [DEBUG] [Thread-211174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:03:24.409 [DEBUG] [Thread-211174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:03:24.409 [DEBUG] [Thread-211174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:03:24.409 [DEBUG] [Thread-211174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:03:24.432 [INFO] [Thread-211174] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:03:24.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:03:24.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:03:24.532 [DEBUG] [Thread-211176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:25.256 [DEBUG] [Thread-211174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:03:25.256 [DEBUG] [Thread-211174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:03:25.305 [DEBUG] [Thread-211174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:03:25.305 [DEBUG] [Thread-211174] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:03:25.313 [DEBUG] [Thread-211174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:03:25.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:03:25.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:03:25.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:03:25.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:03:25.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:03:25.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:03:25.346 [DEBUG] [Thread-211174] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:03:30.685 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:34.515 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:34.517 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:39.697 [DEBUG] [Thread-211177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:49.533 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:54.793 [DEBUG] [Thread-211178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:03:55.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:03:55.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:03:55.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:03:57.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 3, 16), 15.49, 35.35, 0.0, 28.42, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:03:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:03:16
2026-02-15T21:03:58.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:03:58.383 [DEBUG] [Thread-211179] [transport.py] [_log()] starting thread (client mode): 0xa5741210
2026-02-15T21:03:58.384 [DEBUG] [Thread-211179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:03:58.397 [DEBUG] [Thread-211179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:03:58.403 [INFO] [Thread-211179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:03:58.415 [DEBUG] [Thread-211179] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] client lang: <none>
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] server lang: <none>
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] kex follows: False
2026-02-15T21:03:58.416 [DEBUG] [Thread-211179] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:03:58.417 [DEBUG] [Thread-211179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:03:58.417 [DEBUG] [Thread-211179] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:03:58.417 [DEBUG] [Thread-211179] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:03:58.417 [DEBUG] [Thread-211179] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:03:58.417 [DEBUG] [Thread-211179] [transport.py] [_log()] Compression: none
2026-02-15T21:03:58.417 [DEBUG] [Thread-211179] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:03:58.499 [DEBUG] [Thread-211179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:03:58.506 [DEBUG] [Thread-211179] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:03:58.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:03:58.510 [DEBUG] [Thread-211179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:03:58.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:03:58.514 [DEBUG] [Thread-211179] [transport.py] [_log()] userauth is OK
2026-02-15T21:03:58.514 [DEBUG] [Thread-211179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:03:58.515 [DEBUG] [Thread-211179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:03:58.515 [DEBUG] [Thread-211179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:03:58.515 [DEBUG] [Thread-211179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:03:58.544 [INFO] [Thread-211179] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:03:58.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:03:59.189 [DEBUG] [Thread-211179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:03:59.189 [DEBUG] [Thread-211179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:03:59.196 [DEBUG] [Thread-211179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:03:59.230 [DEBUG] [Thread-211179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:03:59.230 [DEBUG] [Thread-211179] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:03:59.236 [DEBUG] [Thread-211179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:03:59.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:03:59.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:03:59.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:03:59.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:03:59.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:03:59.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:03:59.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:03:59.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:03:59.328 [DEBUG] [Thread-211179] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:03:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:03:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.794201 -999.00  +16.50  21.10     40   +3.00 1 1 1 1 1     0    0 13.46 4.83 ZNESW 22.1 21.1 146.2 32.9 16.9 -24.8 16.8 -23.7 16.5 -22.6 16.8 -23.8
2026-02-15T21:03:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:03:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:03:59.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.794201
2026-02-15T21:03:59.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:03:59.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:03:59.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:03:59.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:03:59.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:03:59.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:03:16', tmtdew=15.49, humidity=35.35, cloud=0.0, wind=28.42, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:03:52', seeing=1.71, atlas_timestamp='2026-02-15T19:03:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:00:00')
2026-02-15T21:03:59.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:03:59.586 [DEBUG] [Thread-211182] [transport.py] [_log()] starting thread (client mode): 0xa2d11540
2026-02-15T21:03:59.586 [DEBUG] [Thread-211182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:03:59.601 [DEBUG] [Thread-211182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:03:59.601 [INFO] [Thread-211182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:03:59.608 [DEBUG] [Thread-211182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:03:59.608 [DEBUG] [Thread-211182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:03:59.608 [DEBUG] [Thread-211182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] client lang: <none>
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] server lang: <none>
2026-02-15T21:03:59.609 [DEBUG] [Thread-211182] [transport.py] [_log()] kex follows: False
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] Compression: none
2026-02-15T21:03:59.610 [DEBUG] [Thread-211182] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:03:59.665 [DEBUG] [Thread-211182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:03:59.665 [DEBUG] [Thread-211182] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:03:59.665 [DEBUG] [Thread-211182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:03:59.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:03:59.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:03:59.723 [DEBUG] [Thread-211182] [transport.py] [_log()] userauth is OK
2026-02-15T21:03:59.723 [DEBUG] [Thread-211182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:03:59.723 [DEBUG] [Thread-211182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:03:59.723 [DEBUG] [Thread-211182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:03:59.723 [DEBUG] [Thread-211182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:03:59.744 [INFO] [Thread-211182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:03:59.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:03:59.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:04:00.550 [DEBUG] [Thread-211182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:04:00.550 [DEBUG] [Thread-211182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:04:00.598 [DEBUG] [Thread-211182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:04:00.598 [DEBUG] [Thread-211182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:04:00.607 [DEBUG] [Thread-211182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:04:00.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:04:00.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:04:00.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:04:00.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:04:00.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:04:00.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:04:00.653 [DEBUG] [Thread-211182] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:04:08.186 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:09.848 [DEBUG] [Thread-211184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:20.752 [DEBUG] [Thread-211185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:24.996 [DEBUG] [Thread-211186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:26.834 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:30.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:04:30.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:04:30.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:04:33.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 3, 52), 15.49, 35.3, 0.0, 34.58, 16.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:04:33.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:03:52
2026-02-15T21:04:33.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:04:33.789 [DEBUG] [Thread-211187] [transport.py] [_log()] starting thread (client mode): 0xa2d07ac0
2026-02-15T21:04:33.789 [DEBUG] [Thread-211187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:04:33.795 [DEBUG] [Thread-211187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:04:33.795 [INFO] [Thread-211187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:04:33.798 [DEBUG] [Thread-211187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:04:33.798 [DEBUG] [Thread-211187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:04:33.798 [DEBUG] [Thread-211187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:04:33.798 [DEBUG] [Thread-211187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] client lang: <none>
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] server lang: <none>
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] kex follows: False
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] Compression: none
2026-02-15T21:04:33.799 [DEBUG] [Thread-211187] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:04:33.829 [DEBUG] [Thread-211187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:04:33.831 [DEBUG] [Thread-211187] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:04:33.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:04:33.834 [DEBUG] [Thread-211187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:04:33.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:04:33.838 [DEBUG] [Thread-211187] [transport.py] [_log()] userauth is OK
2026-02-15T21:04:33.838 [DEBUG] [Thread-211187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:04:33.838 [DEBUG] [Thread-211187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:04:33.838 [DEBUG] [Thread-211187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:04:33.838 [DEBUG] [Thread-211187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:04:33.872 [INFO] [Thread-211187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:04:33.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:04:34.487 [DEBUG] [Thread-211187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:04:34.487 [DEBUG] [Thread-211187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:04:34.492 [DEBUG] [Thread-211187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:04:34.528 [DEBUG] [Thread-211187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:04:34.529 [DEBUG] [Thread-211187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:04:34.532 [DEBUG] [Thread-211187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:04:34.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:04:34.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:04:34.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:04:34.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:04:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:04:34.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:04:34.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:04:34.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:04:34.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:04:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.794548 -999.00  +16.50  16.29     40   +3.00 1 1 1 1 1     0    0 13.47 5.27 ZNESW 18.4 16.3 152.0 24.7 16.8 -24.8 16.8 -23.6 16.4 -22.6 16.8 -23.8
2026-02-15T21:04:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:04:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:04:34.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.794548
2026-02-15T21:04:34.566 [DEBUG] [Thread-211187] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:04:34.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:04:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:04:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:04:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:04:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:04:34.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:03:52', tmtdew=15.49, humidity=35.3, cloud=0.0, wind=34.58, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:04:28', seeing=2.01, atlas_timestamp='2026-02-15T19:04:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:00:00')
2026-02-15T21:04:34.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:04:34.677 [DEBUG] [Thread-211190] [transport.py] [_log()] starting thread (client mode): 0xa2d3ebc0
2026-02-15T21:04:34.677 [DEBUG] [Thread-211190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:04:34.692 [DEBUG] [Thread-211190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:04:34.692 [INFO] [Thread-211190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:04:34.699 [DEBUG] [Thread-211190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:04:34.699 [DEBUG] [Thread-211190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:04:34.699 [DEBUG] [Thread-211190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:04:34.699 [DEBUG] [Thread-211190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:04:34.699 [DEBUG] [Thread-211190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] client lang: <none>
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] server lang: <none>
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] kex follows: False
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] Compression: none
2026-02-15T21:04:34.700 [DEBUG] [Thread-211190] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:04:34.719 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:34.720 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:34.758 [DEBUG] [Thread-211190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:04:34.759 [DEBUG] [Thread-211190] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:04:34.759 [DEBUG] [Thread-211190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:04:34.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:04:34.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:04:34.814 [DEBUG] [Thread-211190] [transport.py] [_log()] userauth is OK
2026-02-15T21:04:34.815 [DEBUG] [Thread-211190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:04:34.815 [DEBUG] [Thread-211190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:04:34.815 [DEBUG] [Thread-211190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:04:34.815 [DEBUG] [Thread-211190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:04:34.836 [INFO] [Thread-211190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:04:34.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:04:34.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:04:35.647 [DEBUG] [Thread-211190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:04:35.648 [DEBUG] [Thread-211190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:04:35.695 [DEBUG] [Thread-211190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:04:35.695 [DEBUG] [Thread-211190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:04:35.704 [DEBUG] [Thread-211190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:04:35.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:04:35.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:04:35.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:04:35.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:04:35.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:04:35.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:04:35.740 [DEBUG] [Thread-211190] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:04:40.085 [DEBUG] [Thread-211192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:45.613 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:04:55.274 [DEBUG] [Thread-211193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:04.511 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:05.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:05:05.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:05:05.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:05:07.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 4, 28), 15.5, 35.32, 0.0, 32.4, 16.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:05:07.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:04:28
2026-02-15T21:05:08.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:05:08.588 [DEBUG] [Thread-211194] [transport.py] [_log()] starting thread (client mode): 0xa2d3e110
2026-02-15T21:05:08.588 [DEBUG] [Thread-211194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:05:08.599 [DEBUG] [Thread-211194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:05:08.599 [INFO] [Thread-211194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:05:08.605 [DEBUG] [Thread-211194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] client lang: <none>
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] server lang: <none>
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] kex follows: False
2026-02-15T21:05:08.606 [DEBUG] [Thread-211194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:05:08.607 [DEBUG] [Thread-211194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:05:08.608 [DEBUG] [Thread-211194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:05:08.608 [DEBUG] [Thread-211194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:05:08.608 [DEBUG] [Thread-211194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:05:08.608 [DEBUG] [Thread-211194] [transport.py] [_log()] Compression: none
2026-02-15T21:05:08.608 [DEBUG] [Thread-211194] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:05:08.652 [DEBUG] [Thread-211194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:05:08.657 [DEBUG] [Thread-211194] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:05:08.659 [DEBUG] [Thread-211194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:05:08.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:05:08.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:05:08.665 [DEBUG] [Thread-211194] [transport.py] [_log()] userauth is OK
2026-02-15T21:05:08.665 [DEBUG] [Thread-211194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:05:08.665 [DEBUG] [Thread-211194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:05:08.665 [DEBUG] [Thread-211194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:05:08.665 [DEBUG] [Thread-211194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:05:08.700 [INFO] [Thread-211194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:05:08.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:05:10.347 [DEBUG] [Thread-211196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:12.140 [DEBUG] [Thread-211194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:05:12.141 [DEBUG] [Thread-211194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:05:12.142 [DEBUG] [Thread-211194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:05:12.181 [DEBUG] [Thread-211194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:05:12.181 [DEBUG] [Thread-211194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:05:12.184 [DEBUG] [Thread-211194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:05:12.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:05:12.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:05:12.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:05:12.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:05:12.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:05:12.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:05:12.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:05:12.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:05:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:05:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.794895 -999.00  +16.50  26.94     40   +3.00 1 1 1 1 1     0    0 13.51 5.55 ZNESW 23.0 26.9 171.2 37.6 16.8 -24.6 16.7 -23.6 16.5 -22.4 16.8 -23.7
2026-02-15T21:05:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:05:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:05:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.794895
2026-02-15T21:05:12.217 [DEBUG] [Thread-211194] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:05:12.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:05:12.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:05:12.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:05:12.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:05:12.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:05:12.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:04:28', tmtdew=15.5, humidity=35.32, cloud=0.0, wind=32.4, temperature=16.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:05:05', seeing=1.74, atlas_timestamp='2026-02-15T19:04:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:03:00')
2026-02-15T21:05:12.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:05:12.317 [DEBUG] [Thread-211198] [transport.py] [_log()] starting thread (client mode): 0xa2d3c100
2026-02-15T21:05:12.317 [DEBUG] [Thread-211198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:05:12.331 [DEBUG] [Thread-211198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:05:12.331 [INFO] [Thread-211198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] client lang: <none>
2026-02-15T21:05:12.339 [DEBUG] [Thread-211198] [transport.py] [_log()] server lang: <none>
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] kex follows: False
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] Compression: none
2026-02-15T21:05:12.340 [DEBUG] [Thread-211198] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:05:12.398 [DEBUG] [Thread-211198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:05:12.399 [DEBUG] [Thread-211198] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:05:12.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:05:12.400 [DEBUG] [Thread-211198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:05:12.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:05:12.454 [DEBUG] [Thread-211198] [transport.py] [_log()] userauth is OK
2026-02-15T21:05:12.455 [DEBUG] [Thread-211198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:05:12.455 [DEBUG] [Thread-211198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:05:12.455 [DEBUG] [Thread-211198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:05:12.455 [DEBUG] [Thread-211198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:05:12.476 [INFO] [Thread-211198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:05:12.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:05:12.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:05:13.318 [DEBUG] [Thread-211198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:05:13.318 [DEBUG] [Thread-211198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:05:13.366 [DEBUG] [Thread-211198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:05:13.366 [DEBUG] [Thread-211198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:05:13.376 [DEBUG] [Thread-211198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:05:13.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:05:13.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:05:13.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:05:13.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:05:13.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:05:13.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:05:13.414 [DEBUG] [Thread-211198] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:05:21.096 [DEBUG] [Thread-211200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:23.149 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:25.451 [DEBUG] [Thread-211201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:34.920 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:34.922 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:40.609 [DEBUG] [Thread-211202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:41.821 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:05:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:05:43.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:05:43.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:05:45.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 5, 4), 15.5, 35.3, 0.0, 32.55, 16.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:05:45.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:05:04
2026-02-15T21:05:46.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:05:46.394 [DEBUG] [Thread-211203] [transport.py] [_log()] starting thread (client mode): 0xa5759420
2026-02-15T21:05:46.395 [DEBUG] [Thread-211203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:05:46.401 [DEBUG] [Thread-211203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:05:46.402 [INFO] [Thread-211203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:05:46.408 [DEBUG] [Thread-211203] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:05:46.409 [DEBUG] [Thread-211203] [transport.py] [_log()] client lang: <none>
2026-02-15T21:05:46.410 [DEBUG] [Thread-211203] [transport.py] [_log()] server lang: <none>
2026-02-15T21:05:46.410 [DEBUG] [Thread-211203] [transport.py] [_log()] kex follows: False
2026-02-15T21:05:46.410 [DEBUG] [Thread-211203] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:05:46.411 [DEBUG] [Thread-211203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:05:46.411 [DEBUG] [Thread-211203] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:05:46.411 [DEBUG] [Thread-211203] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:05:46.411 [DEBUG] [Thread-211203] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:05:46.411 [DEBUG] [Thread-211203] [transport.py] [_log()] Compression: none
2026-02-15T21:05:46.411 [DEBUG] [Thread-211203] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:05:46.455 [DEBUG] [Thread-211203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:05:46.461 [DEBUG] [Thread-211203] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:05:46.463 [DEBUG] [Thread-211203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:05:46.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:05:46.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:05:46.469 [DEBUG] [Thread-211203] [transport.py] [_log()] userauth is OK
2026-02-15T21:05:46.469 [DEBUG] [Thread-211203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:05:46.470 [DEBUG] [Thread-211203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:05:46.470 [DEBUG] [Thread-211203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:05:46.470 [DEBUG] [Thread-211203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:05:46.508 [INFO] [Thread-211203] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:05:46.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:05:47.153 [DEBUG] [Thread-211203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:05:47.153 [DEBUG] [Thread-211203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:05:47.155 [DEBUG] [Thread-211203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:05:47.194 [DEBUG] [Thread-211203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:05:47.194 [DEBUG] [Thread-211203] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:05:47.197 [DEBUG] [Thread-211203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:05:47.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:05:47.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:05:47.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:05:47.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:05:47.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:05:47.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:05:47.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:05:47.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:05:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:05:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.795242 -999.00  +16.50  16.53     40   +3.00 1 1 1 1 1     0    0 13.63 5.71 ZNESW 23.2 16.5 149.8 32.6 16.8 -24.7 16.7 -23.7 16.6 -22.6 16.8 -24.0
2026-02-15T21:05:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:05:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:05:47.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.795242
2026-02-15T21:05:47.236 [DEBUG] [Thread-211203] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:05:47.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:05:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:05:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:05:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:05:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:05:47.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:05:04', tmtdew=15.5, humidity=35.3, cloud=0.0, wind=32.55, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:05:40', seeing=1.55, atlas_timestamp='2026-02-15T19:05:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:03:00')
2026-02-15T21:05:47.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:05:47.346 [DEBUG] [Thread-211206] [transport.py] [_log()] starting thread (client mode): 0xa5742ec0
2026-02-15T21:05:47.346 [DEBUG] [Thread-211206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:05:47.360 [DEBUG] [Thread-211206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:05:47.360 [INFO] [Thread-211206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] client lang: <none>
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] server lang: <none>
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] kex follows: False
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] Compression: none
2026-02-15T21:05:47.368 [DEBUG] [Thread-211206] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:05:47.425 [DEBUG] [Thread-211206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:05:47.425 [DEBUG] [Thread-211206] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:05:47.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:05:47.426 [DEBUG] [Thread-211206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:05:47.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:05:47.482 [DEBUG] [Thread-211206] [transport.py] [_log()] userauth is OK
2026-02-15T21:05:47.482 [DEBUG] [Thread-211206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:05:47.482 [DEBUG] [Thread-211206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:05:47.482 [DEBUG] [Thread-211206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:05:47.482 [DEBUG] [Thread-211206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:05:47.498 [INFO] [Thread-211206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:05:47.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:05:47.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:05:48.332 [DEBUG] [Thread-211206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:05:48.332 [DEBUG] [Thread-211206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:05:48.380 [DEBUG] [Thread-211206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:05:48.380 [DEBUG] [Thread-211206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:05:48.388 [DEBUG] [Thread-211206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:05:48.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:05:48.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:05:48.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:05:48.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:05:48.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:05:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:05:48.425 [DEBUG] [Thread-211206] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:05:55.652 [DEBUG] [Thread-211208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:00.651 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:10.807 [DEBUG] [Thread-211209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:06:18.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:06:18.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:06:19.337 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:20.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 5, 40), 15.76, 34.43, 0.0, 36.13, 16.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:06:20.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:05:40
2026-02-15T21:06:21.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:06:21.396 [DEBUG] [Thread-211210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:21.411 [DEBUG] [Thread-211211] [transport.py] [_log()] starting thread (client mode): 0xa2d10e20
2026-02-15T21:06:21.412 [DEBUG] [Thread-211211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:06:21.417 [DEBUG] [Thread-211211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:06:21.417 [INFO] [Thread-211211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] client lang: <none>
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] server lang: <none>
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] kex follows: False
2026-02-15T21:06:21.421 [DEBUG] [Thread-211211] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:06:21.422 [DEBUG] [Thread-211211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:06:21.422 [DEBUG] [Thread-211211] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:06:21.422 [DEBUG] [Thread-211211] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:06:21.422 [DEBUG] [Thread-211211] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:06:21.422 [DEBUG] [Thread-211211] [transport.py] [_log()] Compression: none
2026-02-15T21:06:21.422 [DEBUG] [Thread-211211] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:06:21.449 [DEBUG] [Thread-211211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:06:21.453 [DEBUG] [Thread-211211] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:06:21.455 [DEBUG] [Thread-211211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:06:21.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:06:21.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:06:21.460 [DEBUG] [Thread-211211] [transport.py] [_log()] userauth is OK
2026-02-15T21:06:21.460 [DEBUG] [Thread-211211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:06:21.460 [DEBUG] [Thread-211211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:06:21.460 [DEBUG] [Thread-211211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:06:21.460 [DEBUG] [Thread-211211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:06:21.482 [INFO] [Thread-211211] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:06:21.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:06:22.124 [DEBUG] [Thread-211211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:06:22.125 [DEBUG] [Thread-211211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:06:22.125 [DEBUG] [Thread-211211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:06:22.166 [DEBUG] [Thread-211211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:06:22.166 [DEBUG] [Thread-211211] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:06:22.170 [DEBUG] [Thread-211211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:06:22.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:06:22.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:06:22.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:06:22.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:06:22.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:06:22.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:06:22.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:06:22.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:06:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:06:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.795590 -999.00  +16.50  15.92     40   +3.00 1 1 1 1 1     0    0 13.82 6.68 ZNESW 17.5 15.9 144.0 27.8 16.8 -24.8 16.7 -23.7 16.5 -22.6 16.8 -23.7
2026-02-15T21:06:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:06:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:06:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.795590
2026-02-15T21:06:22.232 [DEBUG] [Thread-211211] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:06:22.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:06:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:06:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:06:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:06:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:06:22.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:05:40', tmtdew=15.76, humidity=34.43, cloud=0.0, wind=36.13, temperature=16.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:06:16', seeing=1.87, atlas_timestamp='2026-02-15T19:05:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:03:00')
2026-02-15T21:06:22.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:06:22.342 [DEBUG] [Thread-211214] [transport.py] [_log()] starting thread (client mode): 0xa2d79480
2026-02-15T21:06:22.342 [DEBUG] [Thread-211214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:06:22.356 [DEBUG] [Thread-211214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:06:22.356 [INFO] [Thread-211214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:06:22.363 [DEBUG] [Thread-211214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] client lang: <none>
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] server lang: <none>
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] kex follows: False
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] Compression: none
2026-02-15T21:06:22.364 [DEBUG] [Thread-211214] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:06:22.427 [DEBUG] [Thread-211214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:06:22.427 [DEBUG] [Thread-211214] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:06:22.428 [DEBUG] [Thread-211214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:06:22.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:06:22.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:06:22.482 [DEBUG] [Thread-211214] [transport.py] [_log()] userauth is OK
2026-02-15T21:06:22.483 [DEBUG] [Thread-211214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:06:22.483 [DEBUG] [Thread-211214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:06:22.483 [DEBUG] [Thread-211214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:06:22.483 [DEBUG] [Thread-211214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:06:22.503 [INFO] [Thread-211214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:06:22.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:06:22.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:06:23.322 [DEBUG] [Thread-211214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:06:23.322 [DEBUG] [Thread-211214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:06:23.370 [DEBUG] [Thread-211214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:06:23.370 [DEBUG] [Thread-211214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:06:23.378 [DEBUG] [Thread-211214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:06:23.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:06:23.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:06:23.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:06:23.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:06:23.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:06:23.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:06:23.411 [DEBUG] [Thread-211214] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:06:25.829 [DEBUG] [Thread-211216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:35.124 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:35.125 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:37.980 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:40.917 [DEBUG] [Thread-211217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:53.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:06:53.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:06:53.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:06:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 6, 16), 15.59, 34.72, 0.0, 31.57, 16.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:06:55.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:06:16
2026-02-15T21:06:55.967 [DEBUG] [Thread-211218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:06:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:06:56.665 [DEBUG] [Thread-211219] [transport.py] [_log()] starting thread (client mode): 0xa5759c30
2026-02-15T21:06:56.665 [DEBUG] [Thread-211219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:06:56.678 [DEBUG] [Thread-211219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:06:56.679 [INFO] [Thread-211219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:06:56.699 [DEBUG] [Thread-211219] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:06:56.699 [DEBUG] [Thread-211219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:06:56.699 [DEBUG] [Thread-211219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:06:56.699 [DEBUG] [Thread-211219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:56.699 [DEBUG] [Thread-211219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] client lang: <none>
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] server lang: <none>
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] kex follows: False
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:06:56.700 [DEBUG] [Thread-211219] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:06:56.701 [DEBUG] [Thread-211219] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:06:56.701 [DEBUG] [Thread-211219] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:06:56.701 [DEBUG] [Thread-211219] [transport.py] [_log()] Compression: none
2026-02-15T21:06:56.701 [DEBUG] [Thread-211219] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:06:56.738 [DEBUG] [Thread-211219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:06:56.745 [DEBUG] [Thread-211219] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:06:56.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:06:56.750 [DEBUG] [Thread-211219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:06:56.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:06:56.754 [DEBUG] [Thread-211219] [transport.py] [_log()] userauth is OK
2026-02-15T21:06:56.754 [DEBUG] [Thread-211219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:06:56.754 [DEBUG] [Thread-211219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:06:56.754 [DEBUG] [Thread-211219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:06:56.755 [DEBUG] [Thread-211219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:06:56.794 [INFO] [Thread-211219] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:06:56.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:06:57.445 [DEBUG] [Thread-211219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:06:57.445 [DEBUG] [Thread-211219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:06:57.446 [DEBUG] [Thread-211219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:06:57.486 [DEBUG] [Thread-211219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:06:57.486 [DEBUG] [Thread-211219] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:06:57.489 [DEBUG] [Thread-211219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:06:57.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:06:57.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:06:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:06:57.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:06:57.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:06:57.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:06:57.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:06:57.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:06:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:06:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.795937 -999.00  +16.50  23.94     40   +2.90 1 1 1 1 1     0    0 13.69 7.22 ZNESW 23.8 23.9 156.6 33.4 16.8 -24.7 16.7 -23.7 16.5 -22.5 16.8 -24.0
2026-02-15T21:06:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:06:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:06:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.795937
2026-02-15T21:06:57.524 [DEBUG] [Thread-211219] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:06:57.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:06:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:06:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:06:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:06:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:06:57.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:06:16', tmtdew=15.59, humidity=34.72, cloud=0.0, wind=31.57, temperature=16.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:06:52', seeing=2.1, atlas_timestamp='2026-02-15T19:06:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:03:00')
2026-02-15T21:06:57.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:06:57.651 [DEBUG] [Thread-211222] [transport.py] [_log()] starting thread (client mode): 0xa5740a90
2026-02-15T21:06:57.651 [DEBUG] [Thread-211222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:06:57.665 [DEBUG] [Thread-211222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:06:57.665 [INFO] [Thread-211222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:06:57.673 [DEBUG] [Thread-211222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:06:57.673 [DEBUG] [Thread-211222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:06:57.673 [DEBUG] [Thread-211222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:06:57.673 [DEBUG] [Thread-211222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:57.673 [DEBUG] [Thread-211222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:06:57.673 [DEBUG] [Thread-211222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] client lang: <none>
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] server lang: <none>
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] kex follows: False
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] Compression: none
2026-02-15T21:06:57.674 [DEBUG] [Thread-211222] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:06:57.731 [DEBUG] [Thread-211222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:06:57.731 [DEBUG] [Thread-211222] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:06:57.731 [DEBUG] [Thread-211222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:06:57.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:06:57.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:06:57.786 [DEBUG] [Thread-211222] [transport.py] [_log()] userauth is OK
2026-02-15T21:06:57.786 [DEBUG] [Thread-211222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:06:57.786 [DEBUG] [Thread-211222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:06:57.786 [DEBUG] [Thread-211222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:06:57.786 [DEBUG] [Thread-211222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:06:57.809 [INFO] [Thread-211222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:06:57.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:06:57.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:06:58.621 [DEBUG] [Thread-211222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:06:58.621 [DEBUG] [Thread-211222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:06:58.668 [DEBUG] [Thread-211222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:06:58.668 [DEBUG] [Thread-211222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:06:58.676 [DEBUG] [Thread-211222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:06:58.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:06:58.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:06:58.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:06:58.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:06:58.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:06:58.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:06:58.738 [DEBUG] [Thread-211222] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:07:11.024 [DEBUG] [Thread-211224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:07:21.827 [DEBUG] [Thread-211225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:07:26.171 [DEBUG] [Thread-211226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:07:28.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:07:28.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:07:28.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:07:31.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 6, 52), 15.61, 34.67, 0.0, 31.53, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:07:31.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:06:52
2026-02-15T21:07:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:07:31.941 [DEBUG] [Thread-211227] [transport.py] [_log()] starting thread (client mode): 0xa5740730
2026-02-15T21:07:31.942 [DEBUG] [Thread-211227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:07:31.946 [DEBUG] [Thread-211227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:07:31.946 [INFO] [Thread-211227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] client lang: <none>
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] server lang: <none>
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] kex follows: False
2026-02-15T21:07:31.949 [DEBUG] [Thread-211227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:07:31.950 [DEBUG] [Thread-211227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:07:31.950 [DEBUG] [Thread-211227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:07:31.950 [DEBUG] [Thread-211227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:07:31.950 [DEBUG] [Thread-211227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:07:31.950 [DEBUG] [Thread-211227] [transport.py] [_log()] Compression: none
2026-02-15T21:07:31.950 [DEBUG] [Thread-211227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:07:31.975 [DEBUG] [Thread-211227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:07:31.977 [DEBUG] [Thread-211227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:07:31.977 [DEBUG] [Thread-211227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:07:31.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:07:31.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:07:32.022 [DEBUG] [Thread-211227] [transport.py] [_log()] userauth is OK
2026-02-15T21:07:32.022 [DEBUG] [Thread-211227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:07:32.022 [DEBUG] [Thread-211227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:07:32.022 [DEBUG] [Thread-211227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:07:32.022 [DEBUG] [Thread-211227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:07:32.043 [INFO] [Thread-211227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:07:32.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:07:32.661 [DEBUG] [Thread-211227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:07:32.661 [DEBUG] [Thread-211227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:07:32.662 [DEBUG] [Thread-211227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:07:32.702 [DEBUG] [Thread-211227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:07:32.702 [DEBUG] [Thread-211227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:07:32.705 [DEBUG] [Thread-211227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:07:32.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:07:32.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:07:32.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:07:32.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:07:32.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:07:32.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:07:32.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:07:32.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:07:32.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:07:32.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.796632 -999.00  +16.50  20.92     40   +2.90 1 1 1 1 1     0    0 13.48 8.93 ZNESW 21.5 20.9 152.2 32.3 16.8 -24.8 16.7 -23.7 16.5 -22.6 16.8 -23.8
2026-02-15T21:07:32.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:07:32.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:07:32.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.796632
2026-02-15T21:07:32.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:07:32.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:07:32.736 [DEBUG] [Thread-211227] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:07:32.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:07:32.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:07:32.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:07:32.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:06:52', tmtdew=15.61, humidity=34.67, cloud=0.0, wind=31.53, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:06:52', seeing=2.1, atlas_timestamp='2026-02-15T19:07:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:03:00')
2026-02-15T21:07:32.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:07:32.832 [DEBUG] [Thread-211230] [transport.py] [_log()] starting thread (client mode): 0xa5741b10
2026-02-15T21:07:32.832 [DEBUG] [Thread-211230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:07:32.847 [DEBUG] [Thread-211230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:07:32.847 [INFO] [Thread-211230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:07:32.855 [DEBUG] [Thread-211230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] client lang: <none>
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] server lang: <none>
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] kex follows: False
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:07:32.856 [DEBUG] [Thread-211230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:07:32.857 [DEBUG] [Thread-211230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:07:32.857 [DEBUG] [Thread-211230] [transport.py] [_log()] Compression: none
2026-02-15T21:07:32.857 [DEBUG] [Thread-211230] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:07:32.913 [DEBUG] [Thread-211230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:07:32.914 [DEBUG] [Thread-211230] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:07:32.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:07:32.915 [DEBUG] [Thread-211230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:07:32.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:07:32.970 [DEBUG] [Thread-211230] [transport.py] [_log()] userauth is OK
2026-02-15T21:07:32.970 [DEBUG] [Thread-211230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:07:32.970 [DEBUG] [Thread-211230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:07:32.970 [DEBUG] [Thread-211230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:07:32.970 [DEBUG] [Thread-211230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:07:32.985 [INFO] [Thread-211230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:07:32.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:07:32.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:07:33.817 [DEBUG] [Thread-211230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:07:33.817 [DEBUG] [Thread-211230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:07:33.866 [DEBUG] [Thread-211230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:07:33.866 [DEBUG] [Thread-211230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:07:33.874 [DEBUG] [Thread-211230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:07:33.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:07:33.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:07:33.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:07:33.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:07:33.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:07:33.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:07:33.907 [DEBUG] [Thread-211230] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:07:35.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:07:35.333 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:07:41.200 [DEBUG] [Thread-211232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:07:56.301 [DEBUG] [Thread-211233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:03.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:08:03.932 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:08:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:08:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 7, 28), 15.62, 34.63, 0.0, 30.4, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:08:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:07:28
2026-02-15T21:08:06.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:08:06.771 [DEBUG] [Thread-211234] [transport.py] [_log()] starting thread (client mode): 0xa2d3f910
2026-02-15T21:08:06.771 [DEBUG] [Thread-211234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:08:06.780 [DEBUG] [Thread-211234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:08:06.780 [INFO] [Thread-211234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:08:06.786 [DEBUG] [Thread-211234] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] client lang: <none>
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] server lang: <none>
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] kex follows: False
2026-02-15T21:08:06.787 [DEBUG] [Thread-211234] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:08:06.788 [DEBUG] [Thread-211234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:08:06.788 [DEBUG] [Thread-211234] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:08:06.788 [DEBUG] [Thread-211234] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:08:06.788 [DEBUG] [Thread-211234] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:08:06.788 [DEBUG] [Thread-211234] [transport.py] [_log()] Compression: none
2026-02-15T21:08:06.788 [DEBUG] [Thread-211234] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:08:06.821 [DEBUG] [Thread-211234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:08:06.825 [DEBUG] [Thread-211234] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:08:06.826 [DEBUG] [Thread-211234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:08:06.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:08:06.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:08:06.830 [DEBUG] [Thread-211234] [transport.py] [_log()] userauth is OK
2026-02-15T21:08:06.830 [DEBUG] [Thread-211234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:08:06.830 [DEBUG] [Thread-211234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:08:06.830 [DEBUG] [Thread-211234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:08:06.830 [DEBUG] [Thread-211234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:08:06.850 [INFO] [Thread-211234] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:08:06.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:08:07.502 [DEBUG] [Thread-211234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:08:07.502 [DEBUG] [Thread-211234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:08:07.503 [DEBUG] [Thread-211234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:08:07.543 [DEBUG] [Thread-211234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:08:07.543 [DEBUG] [Thread-211234] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:08:07.545 [DEBUG] [Thread-211234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:08:07.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:08:07.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:08:07.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:08:07.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:08:07.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:08:07.567 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:08:07.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:08:07.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:08:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:08:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.796979 -999.00  +16.50  23.06     40   +2.90 1 1 1 1 1     0    0 14.04 10.27 ZNESW 25.6 23.1 164.7 35.6 16.8 -24.8 16.8 -23.7 16.5 -22.6 16.8 -23.6
2026-02-15T21:08:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:08:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:08:07.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.796979
2026-02-15T21:08:07.575 [DEBUG] [Thread-211234] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:08:07.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:08:07.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:08:07.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:08:07.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:08:07.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:08:07.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:07:28', tmtdew=15.62, humidity=34.63, cloud=0.0, wind=30.4, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:07:28', seeing=1.68, atlas_timestamp='2026-02-15T19:07:38.986', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.0467499999999994, -0.011749999999999261, -0.01950000000000074, -0.01950000000000074, 0.006250000000001421, -0.038000000000000256, -0.00274999999999892, -0.012500000000001066, -0.04499999999999993, -0.036749999999999616, -0.04800000000000004, 0.036999999999999034, -0.010749999999999815, -0.0625, -0.05150000000000077, 0.0012499999999988631, -0.02999999999999936, -0.032999999999999474, -0.03675000000000139, 0.03999999999999915, 0.06324999999999825, -0.008250000000000313, -0.03824999999999967, 0.034999999999998366, 0.018500000000001293, -0.047250000000000014, -0.029500000000000526, 0.053000000000000824, 0.013000000000001677, 0.012000000000000455, -0.03549999999999898, -0.006750000000000256], zp_timestamp='2026-02-15T19:03:00')
2026-02-15T21:08:07.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:08:07.677 [DEBUG] [Thread-211237] [transport.py] [_log()] starting thread (client mode): 0xa2d6d720
2026-02-15T21:08:07.677 [DEBUG] [Thread-211237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:08:07.691 [DEBUG] [Thread-211237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:08:07.691 [INFO] [Thread-211237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:08:07.698 [DEBUG] [Thread-211237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:08:07.698 [DEBUG] [Thread-211237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:08:07.698 [DEBUG] [Thread-211237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:08:07.698 [DEBUG] [Thread-211237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] client lang: <none>
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] server lang: <none>
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] kex follows: False
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] Compression: none
2026-02-15T21:08:07.699 [DEBUG] [Thread-211237] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:08:07.758 [DEBUG] [Thread-211237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:08:07.759 [DEBUG] [Thread-211237] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:08:07.760 [DEBUG] [Thread-211237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:08:07.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:08:07.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:08:07.814 [DEBUG] [Thread-211237] [transport.py] [_log()] userauth is OK
2026-02-15T21:08:07.814 [DEBUG] [Thread-211237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:08:07.814 [DEBUG] [Thread-211237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:08:07.815 [DEBUG] [Thread-211237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:08:07.815 [DEBUG] [Thread-211237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:08:07.832 [INFO] [Thread-211237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:08:07.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:08:07.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:08:08.729 [DEBUG] [Thread-211237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:08:08.729 [DEBUG] [Thread-211237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:08:08.777 [DEBUG] [Thread-211237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:08:08.777 [DEBUG] [Thread-211237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:08:08.786 [DEBUG] [Thread-211237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:08:08.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:08:08.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:08:08.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:08:08.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:08:08.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:08:08.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:08:08.820 [DEBUG] [Thread-211237] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:08:11.376 [DEBUG] [Thread-211239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:22.129 [DEBUG] [Thread-211240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:26.484 [DEBUG] [Thread-211241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:35.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:35.543 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:38.727 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:38.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:08:38.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:08:38.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:08:40.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 8, 4), 15.64, 34.58, 0.0, 29.73, 16.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:08:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:08:04
2026-02-15T21:08:41.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:08:41.368 [DEBUG] [Thread-211242] [transport.py] [_log()] starting thread (client mode): 0xa2d79480
2026-02-15T21:08:41.368 [DEBUG] [Thread-211242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:08:41.379 [DEBUG] [Thread-211242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:08:41.379 [INFO] [Thread-211242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] client lang: <none>
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] server lang: <none>
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] kex follows: False
2026-02-15T21:08:41.383 [DEBUG] [Thread-211242] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:08:41.384 [DEBUG] [Thread-211242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:08:41.384 [DEBUG] [Thread-211242] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:08:41.384 [DEBUG] [Thread-211242] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:08:41.384 [DEBUG] [Thread-211242] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:08:41.384 [DEBUG] [Thread-211242] [transport.py] [_log()] Compression: none
2026-02-15T21:08:41.384 [DEBUG] [Thread-211242] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:08:41.413 [DEBUG] [Thread-211242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:08:41.416 [DEBUG] [Thread-211242] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:08:41.417 [DEBUG] [Thread-211242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:08:41.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:08:41.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:08:41.420 [DEBUG] [Thread-211242] [transport.py] [_log()] userauth is OK
2026-02-15T21:08:41.420 [DEBUG] [Thread-211242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:08:41.420 [DEBUG] [Thread-211242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:08:41.420 [DEBUG] [Thread-211242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:08:41.420 [DEBUG] [Thread-211242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:08:41.439 [INFO] [Thread-211242] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:08:41.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:08:41.527 [DEBUG] [Thread-211244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:42.065 [DEBUG] [Thread-211242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:08:42.065 [DEBUG] [Thread-211242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:08:42.065 [DEBUG] [Thread-211242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:08:42.106 [DEBUG] [Thread-211242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:08:42.106 [DEBUG] [Thread-211242] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:08:42.109 [DEBUG] [Thread-211242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:08:42.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:08:42.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:08:42.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:08:42.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:08:42.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:08:42.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:08:42.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:08:42.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:08:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:08:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.797326 -999.00  +16.50  23.99     40   +2.90 1 1 1 1 1     0    0 14.06 12.77 ZNESW 25.9 24.0 144.0 37.7 16.8 -24.7 16.7 -23.6 16.5 -22.5 16.8 -23.8
2026-02-15T21:08:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:08:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:08:42.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.797326
2026-02-15T21:08:42.143 [DEBUG] [Thread-211242] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:08:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:08:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:08:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:08:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:08:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:08:42.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:08:04', tmtdew=15.64, humidity=34.58, cloud=0.0, wind=29.73, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:08:05', seeing=2.06, atlas_timestamp='2026-02-15T19:08:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.016750000000000043, 0.007250000000000867, -0.03550000000000075, -0.01699999999999946, -0.0007500000000000284, -0.0259999999999998, -0.021749999999999048, 0.011499999999999844, -0.009499999999999176, -0.011750000000001037, -0.022500000000000853, 0.04299999999999926, 0.060249999999999915, -0.02800000000000047, -0.038000000000000256, 0.03275000000000006, 0.01249999999999929, -0.016000000000000014, -0.01675000000000182, 0.06550000000000011, 0.05024999999999835, 0.0007500000000000284, -0.03125, 0.034000000000000696, 0.06450000000000067, 0.008750000000000924, -0.0034999999999989484, 0.05450000000000088, 0.05500000000000149, -0.03799999999999848, -0.028999999999999915, 0.007749999999997925], zp_timestamp='2026-02-15T19:07:00')
2026-02-15T21:08:42.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:08:42.248 [DEBUG] [Thread-211246] [transport.py] [_log()] starting thread (client mode): 0xa2d3ff70
2026-02-15T21:08:42.248 [DEBUG] [Thread-211246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:08:42.268 [DEBUG] [Thread-211246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:08:42.268 [INFO] [Thread-211246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:42.275 [DEBUG] [Thread-211246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] client lang: <none>
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] server lang: <none>
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] kex follows: False
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] Compression: none
2026-02-15T21:08:42.276 [DEBUG] [Thread-211246] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:08:42.333 [DEBUG] [Thread-211246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:08:42.333 [DEBUG] [Thread-211246] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:08:42.333 [DEBUG] [Thread-211246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:08:42.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:08:42.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:08:42.391 [DEBUG] [Thread-211246] [transport.py] [_log()] userauth is OK
2026-02-15T21:08:42.391 [DEBUG] [Thread-211246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:08:42.391 [DEBUG] [Thread-211246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:08:42.391 [DEBUG] [Thread-211246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:08:42.391 [DEBUG] [Thread-211246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:08:42.407 [INFO] [Thread-211246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:08:42.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:08:42.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:08:43.236 [DEBUG] [Thread-211246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:08:43.236 [DEBUG] [Thread-211246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:08:43.284 [DEBUG] [Thread-211246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:08:43.284 [DEBUG] [Thread-211246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:08:43.292 [DEBUG] [Thread-211246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:08:43.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:08:43.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:08:43.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:08:43.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:08:43.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:08:43.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:08:43.326 [DEBUG] [Thread-211246] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:08:47.582 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:51.685 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:08:56.603 [DEBUG] [Thread-211248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:11.714 [DEBUG] [Thread-211249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:13.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:09:13.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:09:13.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:09:15.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 8, 40), 15.87, 34.2, 0.0, 35.92, 16.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:09:15.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:08:40
2026-02-15T21:09:15.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:09:15.873 [DEBUG] [Thread-211250] [transport.py] [_log()] starting thread (client mode): 0xa2d3fee0
2026-02-15T21:09:15.873 [DEBUG] [Thread-211250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:09:15.885 [DEBUG] [Thread-211250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:09:15.886 [INFO] [Thread-211250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:09:15.890 [DEBUG] [Thread-211250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:09:15.890 [DEBUG] [Thread-211250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] client lang: <none>
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] server lang: <none>
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] kex follows: False
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:09:15.891 [DEBUG] [Thread-211250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:09:15.892 [DEBUG] [Thread-211250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:09:15.892 [DEBUG] [Thread-211250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:09:15.892 [DEBUG] [Thread-211250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:09:15.892 [DEBUG] [Thread-211250] [transport.py] [_log()] Compression: none
2026-02-15T21:09:15.892 [DEBUG] [Thread-211250] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:09:15.922 [DEBUG] [Thread-211250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:09:15.925 [DEBUG] [Thread-211250] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:09:15.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:09:15.928 [DEBUG] [Thread-211250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:09:15.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:09:15.930 [DEBUG] [Thread-211250] [transport.py] [_log()] userauth is OK
2026-02-15T21:09:15.930 [DEBUG] [Thread-211250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:09:15.930 [DEBUG] [Thread-211250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:09:15.930 [DEBUG] [Thread-211250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:09:15.930 [DEBUG] [Thread-211250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:09:15.949 [INFO] [Thread-211250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:09:15.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:09:16.585 [DEBUG] [Thread-211250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:09:16.585 [DEBUG] [Thread-211250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:09:16.586 [DEBUG] [Thread-211250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:09:16.626 [DEBUG] [Thread-211250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:09:16.626 [DEBUG] [Thread-211250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:09:16.628 [DEBUG] [Thread-211250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:09:16.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:09:16.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:09:16.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:09:16.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:09:16.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:09:16.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:09:16.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:09:16.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:09:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:09:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.797673 -999.00  +16.50  21.92     40   +2.90 1 1 1 1 1     0    0 13.85 13.05 ZNESW 18.8 21.9 153.6 28.0 16.8 -24.7 16.7 -23.7 16.5 -22.5 16.8 -23.9
2026-02-15T21:09:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:09:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:09:16.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.797673
2026-02-15T21:09:16.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:09:16.660 [DEBUG] [Thread-211250] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:09:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:09:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:09:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:09:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:09:16.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:08:40', tmtdew=15.87, humidity=34.2, cloud=0.0, wind=35.92, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:08:40', seeing=2.13, atlas_timestamp='2026-02-15T19:08:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.016750000000000043, 0.007250000000000867, -0.03550000000000075, -0.01699999999999946, -0.0007500000000000284, -0.0259999999999998, -0.021749999999999048, 0.011499999999999844, -0.009499999999999176, -0.011750000000001037, -0.022500000000000853, 0.04299999999999926, 0.060249999999999915, -0.02800000000000047, -0.038000000000000256, 0.03275000000000006, 0.01249999999999929, -0.016000000000000014, -0.01675000000000182, 0.06550000000000011, 0.05024999999999835, 0.0007500000000000284, -0.03125, 0.034000000000000696, 0.06450000000000067, 0.008750000000000924, -0.0034999999999989484, 0.05450000000000088, 0.05500000000000149, -0.03799999999999848, -0.028999999999999915, 0.007749999999997925], zp_timestamp='2026-02-15T19:07:00')
2026-02-15T21:09:16.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:09:16.754 [DEBUG] [Thread-211253] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-15T21:09:16.754 [DEBUG] [Thread-211253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:09:16.769 [DEBUG] [Thread-211253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:09:16.769 [INFO] [Thread-211253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:09:16.776 [DEBUG] [Thread-211253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] client lang: <none>
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] server lang: <none>
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] kex follows: False
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] Compression: none
2026-02-15T21:09:16.777 [DEBUG] [Thread-211253] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:09:16.833 [DEBUG] [Thread-211253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:09:16.833 [DEBUG] [Thread-211253] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:09:16.833 [DEBUG] [Thread-211253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:09:16.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:09:16.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:09:16.890 [DEBUG] [Thread-211253] [transport.py] [_log()] userauth is OK
2026-02-15T21:09:16.890 [DEBUG] [Thread-211253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:09:16.890 [DEBUG] [Thread-211253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:09:16.890 [DEBUG] [Thread-211253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:09:16.890 [DEBUG] [Thread-211253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:09:16.903 [INFO] [Thread-211253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:09:16.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:09:16.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:09:17.750 [DEBUG] [Thread-211253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:09:17.750 [DEBUG] [Thread-211253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:09:17.798 [DEBUG] [Thread-211253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:09:17.798 [DEBUG] [Thread-211253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:09:17.806 [DEBUG] [Thread-211253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:09:17.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:09:17.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:09:17.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:09:17.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:09:17.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:09:17.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:09:17.839 [DEBUG] [Thread-211253] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:09:22.397 [DEBUG] [Thread-211255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:26.754 [DEBUG] [Thread-211256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:35.760 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:35.762 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:41.875 [DEBUG] [Thread-211257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:09:47.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:09:47.842 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:09:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:09:49.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 9, 15), 15.59, 34.57, 0.0, 31.58, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:09:49.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:09:15
2026-02-15T21:09:50.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:09:50.387 [DEBUG] [Thread-211258] [transport.py] [_log()] starting thread (client mode): 0xa57b39d0
2026-02-15T21:09:50.387 [DEBUG] [Thread-211258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:09:50.400 [DEBUG] [Thread-211258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:09:50.400 [INFO] [Thread-211258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:09:50.406 [DEBUG] [Thread-211258] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:09:50.407 [DEBUG] [Thread-211258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:09:50.407 [DEBUG] [Thread-211258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:09:50.407 [DEBUG] [Thread-211258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:50.407 [DEBUG] [Thread-211258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:50.407 [DEBUG] [Thread-211258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:50.407 [DEBUG] [Thread-211258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:50.408 [DEBUG] [Thread-211258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:09:50.408 [DEBUG] [Thread-211258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:09:50.408 [DEBUG] [Thread-211258] [transport.py] [_log()] client lang: <none>
2026-02-15T21:09:50.408 [DEBUG] [Thread-211258] [transport.py] [_log()] server lang: <none>
2026-02-15T21:09:50.408 [DEBUG] [Thread-211258] [transport.py] [_log()] kex follows: False
2026-02-15T21:09:50.408 [DEBUG] [Thread-211258] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:09:50.409 [DEBUG] [Thread-211258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:09:50.409 [DEBUG] [Thread-211258] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:09:50.409 [DEBUG] [Thread-211258] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:09:50.409 [DEBUG] [Thread-211258] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:09:50.410 [DEBUG] [Thread-211258] [transport.py] [_log()] Compression: none
2026-02-15T21:09:50.410 [DEBUG] [Thread-211258] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:09:50.449 [DEBUG] [Thread-211258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:09:50.453 [DEBUG] [Thread-211258] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:09:50.456 [DEBUG] [Thread-211258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:09:50.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:09:50.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:09:50.460 [DEBUG] [Thread-211258] [transport.py] [_log()] userauth is OK
2026-02-15T21:09:50.460 [DEBUG] [Thread-211258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:09:50.460 [DEBUG] [Thread-211258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:09:50.460 [DEBUG] [Thread-211258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:09:50.460 [DEBUG] [Thread-211258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:09:50.478 [INFO] [Thread-211258] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:09:50.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:09:51.100 [DEBUG] [Thread-211258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:09:51.100 [DEBUG] [Thread-211258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:09:51.101 [DEBUG] [Thread-211258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:09:51.141 [DEBUG] [Thread-211258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:09:51.141 [DEBUG] [Thread-211258] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:09:51.144 [DEBUG] [Thread-211258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:09:51.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:09:51.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:09:51.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:09:51.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:09:51.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:09:51.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:09:51.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:09:51.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:09:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:09:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.798020 -999.00  +16.50  21.41     40   +2.90 1 1 1 1 1     0    0 13.72 13.08 ZNESW 17.4 21.4 152.0 30.1 16.8 -24.8 16.7 -23.8 16.4 -22.6 16.8 -23.7
2026-02-15T21:09:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:09:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:09:51.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.798020
2026-02-15T21:09:51.167 [DEBUG] [Thread-211258] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:09:51.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:09:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:09:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:09:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:09:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:09:51.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:09:15', tmtdew=15.59, humidity=34.57, cloud=0.0, wind=31.58, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:09:16', seeing=1.75, atlas_timestamp='2026-02-15T19:09:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.016750000000000043, 0.007250000000000867, -0.03550000000000075, -0.01699999999999946, -0.0007500000000000284, -0.0259999999999998, -0.021749999999999048, 0.011499999999999844, -0.009499999999999176, -0.011750000000001037, -0.022500000000000853, 0.04299999999999926, 0.060249999999999915, -0.02800000000000047, -0.038000000000000256, 0.03275000000000006, 0.01249999999999929, -0.016000000000000014, -0.01675000000000182, 0.06550000000000011, 0.05024999999999835, 0.0007500000000000284, -0.03125, 0.034000000000000696, 0.06450000000000067, 0.008750000000000924, -0.0034999999999989484, 0.05450000000000088, 0.05500000000000149, -0.03799999999999848, -0.028999999999999915, 0.007749999999997925], zp_timestamp='2026-02-15T19:07:00')
2026-02-15T21:09:51.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:09:51.269 [DEBUG] [Thread-211261] [transport.py] [_log()] starting thread (client mode): 0xa57b36d0
2026-02-15T21:09:51.269 [DEBUG] [Thread-211261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:09:51.283 [DEBUG] [Thread-211261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:09:51.283 [INFO] [Thread-211261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] client lang: <none>
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] server lang: <none>
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] kex follows: False
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] Compression: none
2026-02-15T21:09:51.291 [DEBUG] [Thread-211261] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:09:51.353 [DEBUG] [Thread-211261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:09:51.353 [DEBUG] [Thread-211261] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:09:51.353 [DEBUG] [Thread-211261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:09:51.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:09:51.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:09:51.417 [DEBUG] [Thread-211261] [transport.py] [_log()] userauth is OK
2026-02-15T21:09:51.417 [DEBUG] [Thread-211261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:09:51.417 [DEBUG] [Thread-211261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:09:51.417 [DEBUG] [Thread-211261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:09:51.417 [DEBUG] [Thread-211261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:09:51.433 [INFO] [Thread-211261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:09:51.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:09:51.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:09:52.275 [DEBUG] [Thread-211261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:09:52.275 [DEBUG] [Thread-211261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:09:52.324 [DEBUG] [Thread-211261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:09:52.324 [DEBUG] [Thread-211261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:09:52.338 [DEBUG] [Thread-211261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:09:52.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:09: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')
2026-02-15T21:09:52.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:09:52.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:09:52.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:09:52.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:09:52.371 [DEBUG] [Thread-211261] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:09:56.910 [DEBUG] [Thread-211263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:11.994 [DEBUG] [Thread-211264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:10:22.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:10:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:10:22.638 [DEBUG] [Thread-211265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:24.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 9, 51), 15.66, 34.65, 0.0, 27.7, 16.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:10:24.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:09:51
2026-02-15T21:10:25.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:10:25.426 [DEBUG] [Thread-211266] [transport.py] [_log()] starting thread (client mode): 0xa57b0e50
2026-02-15T21:10:25.427 [DEBUG] [Thread-211266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:10:25.427 [DEBUG] [Thread-211266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:10:25.427 [INFO] [Thread-211266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:10:25.431 [DEBUG] [Thread-211266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] client lang: <none>
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] server lang: <none>
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] kex follows: False
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] Compression: none
2026-02-15T21:10:25.432 [DEBUG] [Thread-211266] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:10:25.460 [DEBUG] [Thread-211266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:10:25.462 [DEBUG] [Thread-211266] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:10:25.463 [DEBUG] [Thread-211266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:10:25.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:10:25.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:10:25.467 [DEBUG] [Thread-211266] [transport.py] [_log()] userauth is OK
2026-02-15T21:10:25.467 [DEBUG] [Thread-211266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:10:25.467 [DEBUG] [Thread-211266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:10:25.467 [DEBUG] [Thread-211266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:10:25.467 [DEBUG] [Thread-211266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:10:25.484 [INFO] [Thread-211266] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:10:25.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:10:26.132 [DEBUG] [Thread-211266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:10:26.132 [DEBUG] [Thread-211266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:10:26.133 [DEBUG] [Thread-211266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:10:26.173 [DEBUG] [Thread-211266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:10:26.173 [DEBUG] [Thread-211266] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:10:26.175 [DEBUG] [Thread-211266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:10:26.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:10:26.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:10:26.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:10:26.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:10:26.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:10:26.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:10:26.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:10:26.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:10:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:10:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.798368 -999.00  +16.50  21.09     40   +2.90 1 1 1 1 1     0    0 13.66 14.41 ZNESW 21.2 21.1 145.4 31.9 16.8 -24.8 16.6 -23.6 16.4 -22.6 16.8 -24.0
2026-02-15T21:10:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:10:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:10:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.798368
2026-02-15T21:10:26.203 [DEBUG] [Thread-211266] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:10:26.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:10:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:10:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:10:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:10:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:10:26.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:09:51', tmtdew=15.66, humidity=34.65, cloud=0.0, wind=27.7, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:09:51', seeing=1.95, atlas_timestamp='2026-02-15T19:09:38.995', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.016750000000000043, 0.007250000000000867, -0.03550000000000075, -0.01699999999999946, -0.0007500000000000284, -0.0259999999999998, -0.021749999999999048, 0.011499999999999844, -0.009499999999999176, -0.011750000000001037, -0.022500000000000853, 0.04299999999999926, 0.060249999999999915, -0.02800000000000047, -0.038000000000000256, 0.03275000000000006, 0.01249999999999929, -0.016000000000000014, -0.01675000000000182, 0.06550000000000011, 0.05024999999999835, 0.0007500000000000284, -0.03125, 0.034000000000000696, 0.06450000000000067, 0.008750000000000924, -0.0034999999999989484, 0.05450000000000088, 0.05500000000000149, -0.03799999999999848, -0.028999999999999915, 0.007749999999997925], zp_timestamp='2026-02-15T19:07:00')
2026-02-15T21:10:26.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:10:26.296 [DEBUG] [Thread-211269] [transport.py] [_log()] starting thread (client mode): 0xa2d3f820
2026-02-15T21:10:26.296 [DEBUG] [Thread-211269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:10:26.311 [DEBUG] [Thread-211269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:10:26.311 [INFO] [Thread-211269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] client lang: <none>
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] server lang: <none>
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] kex follows: False
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] Compression: none
2026-02-15T21:10:26.318 [DEBUG] [Thread-211269] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:10:26.377 [DEBUG] [Thread-211269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:10:26.377 [DEBUG] [Thread-211269] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:10:26.377 [DEBUG] [Thread-211269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:10:26.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:10:26.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:10:26.434 [DEBUG] [Thread-211269] [transport.py] [_log()] userauth is OK
2026-02-15T21:10:26.434 [DEBUG] [Thread-211269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:10:26.434 [DEBUG] [Thread-211269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:10:26.434 [DEBUG] [Thread-211269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:10:26.434 [DEBUG] [Thread-211269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:10:26.448 [INFO] [Thread-211269] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:10:26.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:10:26.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:10:27.027 [DEBUG] [Thread-211271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:27.293 [DEBUG] [Thread-211269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:10:27.293 [DEBUG] [Thread-211269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:10:27.341 [DEBUG] [Thread-211269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:10:27.341 [DEBUG] [Thread-211269] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:10:27.349 [DEBUG] [Thread-211269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:10:27.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:10:27.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:10:27.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:10:27.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:10:27.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:10:27.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:10:27.391 [DEBUG] [Thread-211269] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:10:35.961 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:35.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:42.123 [DEBUG] [Thread-211272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:57.148 [DEBUG] [Thread-211273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:10:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:10:57.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:10:57.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:10:59.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 10, 26), 15.62, 34.75, 0.0, 29.06, 16.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:10:59.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:10:26
2026-02-15T21:10:59.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:10:59.796 [DEBUG] [Thread-211274] [transport.py] [_log()] starting thread (client mode): 0xa2d10c40
2026-02-15T21:10:59.796 [DEBUG] [Thread-211274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:10:59.814 [DEBUG] [Thread-211274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:10:59.814 [INFO] [Thread-211274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] client lang: <none>
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] server lang: <none>
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] kex follows: False
2026-02-15T21:10:59.816 [DEBUG] [Thread-211274] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:10:59.817 [DEBUG] [Thread-211274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:10:59.817 [DEBUG] [Thread-211274] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:10:59.817 [DEBUG] [Thread-211274] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:10:59.817 [DEBUG] [Thread-211274] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:10:59.817 [DEBUG] [Thread-211274] [transport.py] [_log()] Compression: none
2026-02-15T21:10:59.817 [DEBUG] [Thread-211274] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:10:59.836 [DEBUG] [Thread-211274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:10:59.837 [DEBUG] [Thread-211274] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:10:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:10:59.838 [DEBUG] [Thread-211274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:10:59.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:10:59.840 [DEBUG] [Thread-211274] [transport.py] [_log()] userauth is OK
2026-02-15T21:10:59.840 [DEBUG] [Thread-211274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:10:59.840 [DEBUG] [Thread-211274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:10:59.840 [DEBUG] [Thread-211274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:10:59.840 [DEBUG] [Thread-211274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:10:59.861 [INFO] [Thread-211274] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:10:59.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:11:00.479 [DEBUG] [Thread-211274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:11:00.479 [DEBUG] [Thread-211274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:11:00.479 [DEBUG] [Thread-211274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:11:00.520 [DEBUG] [Thread-211274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:11:00.520 [DEBUG] [Thread-211274] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:11:00.523 [DEBUG] [Thread-211274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:11:00.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:11:00.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:11:00.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:11:00.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:11:00.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:11:00.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:11:00.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:11:00.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:11:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:11:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.799062 -999.00  +16.50  24.75     40   +2.80 1 1 1 1 1     0    0 14.23 16.81 ZNESW 23.1 24.8 157.8 32.0 16.8 -24.8 16.6 -23.7 16.4 -22.4 16.8 -23.8
2026-02-15T21:11:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:11:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:11:00.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.799062
2026-02-15T21:11:00.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:11:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:11:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:11:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:11:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:11:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:10:26', tmtdew=15.62, humidity=34.75, cloud=0.0, wind=29.06, temperature=16.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:10:27', seeing=1.79, atlas_timestamp='2026-02-15T19:10:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.016750000000000043, 0.007250000000000867, -0.03550000000000075, -0.01699999999999946, -0.0007500000000000284, -0.0259999999999998, -0.021749999999999048, 0.011499999999999844, -0.009499999999999176, -0.011750000000001037, -0.022500000000000853, 0.04299999999999926, 0.060249999999999915, -0.02800000000000047, -0.038000000000000256, 0.03275000000000006, 0.01249999999999929, -0.016000000000000014, -0.01675000000000182, 0.06550000000000011, 0.05024999999999835, 0.0007500000000000284, -0.03125, 0.034000000000000696, 0.06450000000000067, 0.008750000000000924, -0.0034999999999989484, 0.05450000000000088, 0.05500000000000149, -0.03799999999999848, -0.028999999999999915, 0.007749999999997925], zp_timestamp='2026-02-15T19:07:00')
2026-02-15T21:11:00.554 [DEBUG] [Thread-211274] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:11:00.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:11:00.641 [DEBUG] [Thread-211277] [transport.py] [_log()] starting thread (client mode): 0xa2d79ae0
2026-02-15T21:11:00.641 [DEBUG] [Thread-211277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:11:00.655 [DEBUG] [Thread-211277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:11:00.656 [INFO] [Thread-211277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:11:00.663 [DEBUG] [Thread-211277] [transport.py] [_log()] client lang: <none>
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] server lang: <none>
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] kex follows: False
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] Compression: none
2026-02-15T21:11:00.664 [DEBUG] [Thread-211277] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:11:00.720 [DEBUG] [Thread-211277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:11:00.721 [DEBUG] [Thread-211277] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:11:00.721 [DEBUG] [Thread-211277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:11:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:11:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:11:00.778 [DEBUG] [Thread-211277] [transport.py] [_log()] userauth is OK
2026-02-15T21:11:00.778 [DEBUG] [Thread-211277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:11:00.778 [DEBUG] [Thread-211277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:11:00.778 [DEBUG] [Thread-211277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:11:00.778 [DEBUG] [Thread-211277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:11:00.792 [INFO] [Thread-211277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:11:00.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:11:00.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:11:01.613 [DEBUG] [Thread-211277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:11:01.613 [DEBUG] [Thread-211277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:11:01.661 [DEBUG] [Thread-211277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:11:01.661 [DEBUG] [Thread-211277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:11:01.669 [DEBUG] [Thread-211277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:11:01.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:11:01.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:11:01.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:11:01.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:11:01.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:11:01.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:11:01.701 [DEBUG] [Thread-211277] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:11:12.174 [DEBUG] [Thread-211279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:11:22.892 [DEBUG] [Thread-211280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:11:27.259 [DEBUG] [Thread-211281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:11:31.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:11:31.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:11:31.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:11:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 11, 2), 15.62, 34.75, 0.0, 31.99, 16.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:11:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:11:02
2026-02-15T21:11:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:11:34.093 [DEBUG] [Thread-211282] [transport.py] [_log()] starting thread (client mode): 0xa2d10c40
2026-02-15T21:11:34.093 [DEBUG] [Thread-211282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:11:34.108 [DEBUG] [Thread-211282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:11:34.108 [INFO] [Thread-211282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:11:34.112 [DEBUG] [Thread-211282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] client lang: <none>
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] server lang: <none>
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] kex follows: False
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:11:34.113 [DEBUG] [Thread-211282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:11:34.114 [DEBUG] [Thread-211282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:11:34.114 [DEBUG] [Thread-211282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:11:34.114 [DEBUG] [Thread-211282] [transport.py] [_log()] Compression: none
2026-02-15T21:11:34.114 [DEBUG] [Thread-211282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:11:34.145 [DEBUG] [Thread-211282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:11:34.149 [DEBUG] [Thread-211282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:11:34.150 [DEBUG] [Thread-211282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:11:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:11:34.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:11:34.153 [DEBUG] [Thread-211282] [transport.py] [_log()] userauth is OK
2026-02-15T21:11:34.153 [DEBUG] [Thread-211282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:11:34.153 [DEBUG] [Thread-211282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:11:34.153 [DEBUG] [Thread-211282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:11:34.153 [DEBUG] [Thread-211282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:11:34.172 [INFO] [Thread-211282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:11:34.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:11:34.831 [DEBUG] [Thread-211282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:11:34.831 [DEBUG] [Thread-211282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:11:34.831 [DEBUG] [Thread-211282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:11:34.873 [DEBUG] [Thread-211282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:11:34.873 [DEBUG] [Thread-211282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:11:34.876 [DEBUG] [Thread-211282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:11:34.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:11:34.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:11:34.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:11:34.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:11:34.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:11:34.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:11:34.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:11:34.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:11:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:11:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.799409 -999.00  +16.50  24.12     40   +2.80 1 1 1 1 1     0    0 13.96 17.83 ZNESW 18.2 24.1 140.4 30.5 16.8 -24.8 16.6 -23.8 16.4 -22.5 16.8 -23.8
2026-02-15T21:11:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:11:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:11:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.799409
2026-02-15T21:11:34.905 [DEBUG] [Thread-211282] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:11:34.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:11:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:11:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:11:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:11:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:11:34.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:11:02', tmtdew=15.62, humidity=34.75, cloud=0.0, wind=31.99, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:11:02', seeing=1.97, atlas_timestamp='2026-02-15T19:11:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:09:00')
2026-02-15T21:11:34.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:11:35.004 [DEBUG] [Thread-211285] [transport.py] [_log()] starting thread (client mode): 0xa2d12380
2026-02-15T21:11:35.004 [DEBUG] [Thread-211285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:11:35.018 [DEBUG] [Thread-211285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:11:35.018 [INFO] [Thread-211285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] client lang: <none>
2026-02-15T21:11:35.025 [DEBUG] [Thread-211285] [transport.py] [_log()] server lang: <none>
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] kex follows: False
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] Compression: none
2026-02-15T21:11:35.026 [DEBUG] [Thread-211285] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:11:35.081 [DEBUG] [Thread-211285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:11:35.081 [DEBUG] [Thread-211285] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:11:35.081 [DEBUG] [Thread-211285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:11:35.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:11:35.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:11:35.137 [DEBUG] [Thread-211285] [transport.py] [_log()] userauth is OK
2026-02-15T21:11:35.137 [DEBUG] [Thread-211285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:11:35.137 [DEBUG] [Thread-211285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:11:35.137 [DEBUG] [Thread-211285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:11:35.137 [DEBUG] [Thread-211285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:11:35.151 [INFO] [Thread-211285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:11:35.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:11:35.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:11:35.996 [DEBUG] [Thread-211285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:11:35.996 [DEBUG] [Thread-211285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:11:36.045 [DEBUG] [Thread-211285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:11:36.045 [DEBUG] [Thread-211285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:11:36.053 [DEBUG] [Thread-211285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:11:36.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:11:36.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:11:36.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:11:36.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:11:36.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:11:36.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:11:36.085 [DEBUG] [Thread-211285] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:11:36.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:11:36.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:11:42.291 [DEBUG] [Thread-211287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:11:57.408 [DEBUG] [Thread-211288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:06.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:12:06.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:12:06.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:12:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 11, 38), 15.82, 34.3, 0.0, 38.78, 16.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:12:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:11:38
2026-02-15T21:12:08.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:12:08.530 [DEBUG] [Thread-211289] [transport.py] [_log()] starting thread (client mode): 0xa5740f70
2026-02-15T21:12:08.531 [DEBUG] [Thread-211289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:12:08.541 [DEBUG] [Thread-211289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:12:08.541 [INFO] [Thread-211289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] client lang: <none>
2026-02-15T21:12:08.550 [DEBUG] [Thread-211289] [transport.py] [_log()] server lang: <none>
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] kex follows: False
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] Compression: none
2026-02-15T21:12:08.551 [DEBUG] [Thread-211289] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:12:08.584 [DEBUG] [Thread-211289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:12:08.588 [DEBUG] [Thread-211289] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:12:08.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:12:08.590 [DEBUG] [Thread-211289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:12:08.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:12:08.592 [DEBUG] [Thread-211289] [transport.py] [_log()] userauth is OK
2026-02-15T21:12:08.592 [DEBUG] [Thread-211289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:12:08.592 [DEBUG] [Thread-211289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:12:08.592 [DEBUG] [Thread-211289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:12:08.592 [DEBUG] [Thread-211289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:12:08.610 [INFO] [Thread-211289] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:12:08.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:12:09.242 [DEBUG] [Thread-211289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:12:09.242 [DEBUG] [Thread-211289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:12:09.243 [DEBUG] [Thread-211289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:12:09.284 [DEBUG] [Thread-211289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:12:09.284 [DEBUG] [Thread-211289] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:12:09.286 [DEBUG] [Thread-211289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:12:09.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:12:09.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:12:09.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:12:09.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:12:09.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:12:09.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:12:09.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:12:09.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:12:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:12:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.799756 -999.00  +16.50  19.32     40   +2.90 1 1 1 1 1     0    0 13.98 16.41 ZNESW 23.1 19.3 156.0 26.1 16.8 -24.8 16.6 -23.7 16.4 -22.5 16.7 -23.7
2026-02-15T21:12:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:12:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:12:09.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.799756
2026-02-15T21:12:09.313 [DEBUG] [Thread-211289] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:12:09.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:12:09.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:11:38', tmtdew=15.82, humidity=34.3, cloud=0.0, wind=38.78, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:11:38', seeing=2.12, atlas_timestamp='2026-02-15T19:11:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:09:00')
2026-02-15T21:12:09.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:12:09.419 [DEBUG] [Thread-211292] [transport.py] [_log()] starting thread (client mode): 0xa2d54a60
2026-02-15T21:12:09.419 [DEBUG] [Thread-211292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:12:09.433 [DEBUG] [Thread-211292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:12:09.433 [INFO] [Thread-211292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] client lang: <none>
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] server lang: <none>
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] kex follows: False
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] Compression: none
2026-02-15T21:12:09.441 [DEBUG] [Thread-211292] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:12:09.497 [DEBUG] [Thread-211292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:12:09.497 [DEBUG] [Thread-211292] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:12:09.498 [DEBUG] [Thread-211292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:12:09.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:12:09.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:12:09.553 [DEBUG] [Thread-211292] [transport.py] [_log()] userauth is OK
2026-02-15T21:12:09.553 [DEBUG] [Thread-211292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:12:09.554 [DEBUG] [Thread-211292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:12:09.554 [DEBUG] [Thread-211292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:12:09.554 [DEBUG] [Thread-211292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:12:09.571 [INFO] [Thread-211292] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:12:09.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:12:09.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:12:10.409 [DEBUG] [Thread-211292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:12:10.409 [DEBUG] [Thread-211292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:12:10.457 [DEBUG] [Thread-211292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:12:10.457 [DEBUG] [Thread-211292] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:12:10.465 [DEBUG] [Thread-211292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:12:10.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:12:10.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:12:10.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:12:10.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:12:10.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:12:10.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:12:10.499 [DEBUG] [Thread-211292] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:12:12.464 [DEBUG] [Thread-211294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:23.288 [DEBUG] [Thread-211295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:27.580 [DEBUG] [Thread-211296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:36.390 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:36.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:40.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:12:40.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:12:40.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:12:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 12, 13), 15.69, 34.58, 0.0, 32.45, 16.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:12:42.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:12:13
2026-02-15T21:12:42.651 [DEBUG] [Thread-211297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:12:42.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:12:42.952 [DEBUG] [Thread-211298] [transport.py] [_log()] starting thread (client mode): 0xa57421d0
2026-02-15T21:12:42.953 [DEBUG] [Thread-211298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:12:42.956 [DEBUG] [Thread-211298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:12:42.956 [INFO] [Thread-211298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:12:42.962 [DEBUG] [Thread-211298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] client lang: <none>
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] server lang: <none>
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] kex follows: False
2026-02-15T21:12:42.963 [DEBUG] [Thread-211298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:12:42.964 [DEBUG] [Thread-211298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:12:42.964 [DEBUG] [Thread-211298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:12:42.964 [DEBUG] [Thread-211298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:12:42.964 [DEBUG] [Thread-211298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:12:42.964 [DEBUG] [Thread-211298] [transport.py] [_log()] Compression: none
2026-02-15T21:12:42.964 [DEBUG] [Thread-211298] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:12:42.995 [DEBUG] [Thread-211298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:12:43.000 [DEBUG] [Thread-211298] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:12:43.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:12:43.002 [DEBUG] [Thread-211298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:12:43.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:12:43.006 [DEBUG] [Thread-211298] [transport.py] [_log()] userauth is OK
2026-02-15T21:12:43.006 [DEBUG] [Thread-211298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:12:43.006 [DEBUG] [Thread-211298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:12:43.006 [DEBUG] [Thread-211298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:12:43.006 [DEBUG] [Thread-211298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:12:43.020 [INFO] [Thread-211298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:12:43.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:12:43.692 [DEBUG] [Thread-211298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:12:43.692 [DEBUG] [Thread-211298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:12:43.693 [DEBUG] [Thread-211298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:12:43.733 [DEBUG] [Thread-211298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:12:43.733 [DEBUG] [Thread-211298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:12:43.736 [DEBUG] [Thread-211298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:12:43.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:12:43.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:12:43.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:12:43.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:12:43.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:12:43.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:12:43.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:12:43.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:12:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:12:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.800104 -999.00  +16.50  17.96     40   +2.90 1 1 1 1 1     0    0 13.95 17.88 ZNESW 20.6 18.0 151.2 30.1 16.8 -24.7 16.6 -23.6 16.4 -22.5 16.8 -23.8
2026-02-15T21:12:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:12:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:12:43.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.800104
2026-02-15T21:12:43.766 [DEBUG] [Thread-211298] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:12:43.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:12:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:12:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:12:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:12:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:12:43.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:12:13', tmtdew=15.69, humidity=34.58, cloud=0.0, wind=32.45, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:12:13', seeing=2.02, atlas_timestamp='2026-02-15T19:12:08.986', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:09:00')
2026-02-15T21:12:43.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:12:43.860 [DEBUG] [Thread-211301] [transport.py] [_log()] starting thread (client mode): 0xa2d6efb0
2026-02-15T21:12:43.860 [DEBUG] [Thread-211301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:12:43.875 [DEBUG] [Thread-211301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:12:43.875 [INFO] [Thread-211301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] client lang: <none>
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] server lang: <none>
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] kex follows: False
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] Compression: none
2026-02-15T21:12:43.883 [DEBUG] [Thread-211301] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:12:43.943 [DEBUG] [Thread-211301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:12:43.943 [DEBUG] [Thread-211301] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:12:43.943 [DEBUG] [Thread-211301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:12:43.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:12:43.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:12:44.001 [DEBUG] [Thread-211301] [transport.py] [_log()] userauth is OK
2026-02-15T21:12:44.002 [DEBUG] [Thread-211301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:12:44.002 [DEBUG] [Thread-211301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:12:44.002 [DEBUG] [Thread-211301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:12:44.002 [DEBUG] [Thread-211301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:12:44.015 [INFO] [Thread-211301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:12:44.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:12:44.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:12:44.828 [DEBUG] [Thread-211301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:12:44.829 [DEBUG] [Thread-211301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:12:44.880 [DEBUG] [Thread-211301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:12:44.880 [DEBUG] [Thread-211301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:12:44.890 [DEBUG] [Thread-211301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:12:44.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:12:44.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:12:44.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:12:44.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:12:44.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:12:44.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:12:44.926 [DEBUG] [Thread-211301] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:12:57.681 [DEBUG] [Thread-211303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:12.806 [DEBUG] [Thread-211304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:14.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:13:14.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:13:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:13:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 12, 48), 15.63, 34.58, 0.0, 33.63, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:13:16.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:12:48
2026-02-15T21:13:17.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:13:17.360 [DEBUG] [Thread-211305] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ab0
2026-02-15T21:13:17.360 [DEBUG] [Thread-211305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:13:17.365 [DEBUG] [Thread-211305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:13:17.365 [INFO] [Thread-211305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:13:17.368 [DEBUG] [Thread-211305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] client lang: <none>
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] server lang: <none>
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] kex follows: False
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:13:17.369 [DEBUG] [Thread-211305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:13:17.370 [DEBUG] [Thread-211305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:13:17.370 [DEBUG] [Thread-211305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:13:17.370 [DEBUG] [Thread-211305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:13:17.370 [DEBUG] [Thread-211305] [transport.py] [_log()] Compression: none
2026-02-15T21:13:17.370 [DEBUG] [Thread-211305] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:13:17.398 [DEBUG] [Thread-211305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:13:17.402 [DEBUG] [Thread-211305] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:13:17.403 [DEBUG] [Thread-211305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:13:17.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:13:17.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:13:17.406 [DEBUG] [Thread-211305] [transport.py] [_log()] userauth is OK
2026-02-15T21:13:17.407 [DEBUG] [Thread-211305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:13:17.407 [DEBUG] [Thread-211305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:13:17.407 [DEBUG] [Thread-211305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:13:17.407 [DEBUG] [Thread-211305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:13:17.423 [INFO] [Thread-211305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:13:17.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:13:18.028 [DEBUG] [Thread-211305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:13:18.028 [DEBUG] [Thread-211305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:13:18.029 [DEBUG] [Thread-211305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:13:18.069 [DEBUG] [Thread-211305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:13:18.069 [DEBUG] [Thread-211305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:13:18.072 [DEBUG] [Thread-211305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:13:18.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:13:18.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:13:18.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:13:18.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:13:18.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:13:18.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:13:18.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:13:18.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:13:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:13:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.800451 -999.00  +16.50  21.16     40   +2.90 1 1 1 1 1     0    0 13.96 17.52 ZNESW 23.4 21.2 149.0 29.2 16.7 -24.7 16.6 -23.7 16.4 -22.5 16.7 -23.9
2026-02-15T21:13:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:13:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:13:18.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.800451
2026-02-15T21:13:18.103 [DEBUG] [Thread-211305] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:13:18.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:13:18.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:13:18.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:13:18.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:13:18.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:13:18.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:12:48', tmtdew=15.63, humidity=34.58, cloud=0.0, wind=33.63, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:12:48', seeing=2.32, atlas_timestamp='2026-02-15T19:12:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:09:00')
2026-02-15T21:13:18.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:13:18.220 [DEBUG] [Thread-211308] [transport.py] [_log()] starting thread (client mode): 0xa5743d60
2026-02-15T21:13:18.220 [DEBUG] [Thread-211308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:13:18.235 [DEBUG] [Thread-211308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:13:18.236 [INFO] [Thread-211308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:13:18.243 [DEBUG] [Thread-211308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:13:18.243 [DEBUG] [Thread-211308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:13:18.243 [DEBUG] [Thread-211308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:13:18.243 [DEBUG] [Thread-211308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] client lang: <none>
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] server lang: <none>
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] kex follows: False
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:13:18.244 [DEBUG] [Thread-211308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:13:18.245 [DEBUG] [Thread-211308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:13:18.245 [DEBUG] [Thread-211308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:13:18.245 [DEBUG] [Thread-211308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:13:18.245 [DEBUG] [Thread-211308] [transport.py] [_log()] Compression: none
2026-02-15T21:13:18.245 [DEBUG] [Thread-211308] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:13:18.301 [DEBUG] [Thread-211308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:13:18.301 [DEBUG] [Thread-211308] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:13:18.301 [DEBUG] [Thread-211308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:13:18.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:13:18.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:13:18.357 [DEBUG] [Thread-211308] [transport.py] [_log()] userauth is OK
2026-02-15T21:13:18.357 [DEBUG] [Thread-211308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:13:18.357 [DEBUG] [Thread-211308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:13:18.357 [DEBUG] [Thread-211308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:13:18.357 [DEBUG] [Thread-211308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:13:18.377 [INFO] [Thread-211308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:13:18.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:13:18.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:13:19.203 [DEBUG] [Thread-211308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:13:19.203 [DEBUG] [Thread-211308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:13:19.251 [DEBUG] [Thread-211308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:13:19.251 [DEBUG] [Thread-211308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:13:19.259 [DEBUG] [Thread-211308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:13:19.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:13:19.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:13:19.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:13:19.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:13:19.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:13:19.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:13:19.293 [DEBUG] [Thread-211308] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:13:23.721 [DEBUG] [Thread-211310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:27.879 [DEBUG] [Thread-211311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:36.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:36.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:43.138 [DEBUG] [Thread-211312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:13:49.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:13:49.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:13:49.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:13:51.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 13, 23), 15.63, 34.6, 0.0, 32.04, 16.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:13:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:13:23
2026-02-15T21:13:51.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:13:51.779 [DEBUG] [Thread-211313] [transport.py] [_log()] starting thread (client mode): 0xa2d3d660
2026-02-15T21:13:51.780 [DEBUG] [Thread-211313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:13:51.791 [DEBUG] [Thread-211313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:13:51.791 [INFO] [Thread-211313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] client lang: <none>
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] server lang: <none>
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] kex follows: False
2026-02-15T21:13:51.797 [DEBUG] [Thread-211313] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:13:51.798 [DEBUG] [Thread-211313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:13:51.798 [DEBUG] [Thread-211313] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:13:51.798 [DEBUG] [Thread-211313] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:13:51.798 [DEBUG] [Thread-211313] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:13:51.798 [DEBUG] [Thread-211313] [transport.py] [_log()] Compression: none
2026-02-15T21:13:51.798 [DEBUG] [Thread-211313] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:13:51.832 [DEBUG] [Thread-211313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:13:51.836 [DEBUG] [Thread-211313] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:13:51.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:13:51.838 [DEBUG] [Thread-211313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:13:51.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:13:51.841 [DEBUG] [Thread-211313] [transport.py] [_log()] userauth is OK
2026-02-15T21:13:51.842 [DEBUG] [Thread-211313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:13:51.842 [DEBUG] [Thread-211313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:13:51.842 [DEBUG] [Thread-211313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:13:51.842 [DEBUG] [Thread-211313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:13:51.861 [INFO] [Thread-211313] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:13:51.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:13:52.510 [DEBUG] [Thread-211313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:13:52.513 [DEBUG] [Thread-211313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:13:52.532 [DEBUG] [Thread-211313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:13:52.555 [DEBUG] [Thread-211313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:13:52.555 [DEBUG] [Thread-211313] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:13:52.562 [DEBUG] [Thread-211313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:13:52.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:13:52.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:13:52.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:13:52.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:13:52.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:13:52.581 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:13:52.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:13:52.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:13:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:13:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.801145 -999.00  +16.50  18.59     40   +2.80 1 1 1 1 1     0    0 13.98 17.29 ZNESW 19.1 18.6 159.2 27.7 16.7 -24.8 16.6 -23.7 16.4 -22.5 16.7 -24.0
2026-02-15T21:13:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:13:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:13:52.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.801145
2026-02-15T21:13:52.588 [DEBUG] [Thread-211313] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:13:52.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:13:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:13:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:13:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:13:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:13:52.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:13:23', tmtdew=15.63, humidity=34.6, cloud=0.0, wind=32.04, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:13:24', seeing=1.67, atlas_timestamp='2026-02-15T19:13:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:09:00')
2026-02-15T21:13:52.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:13:52.706 [DEBUG] [Thread-211316] [transport.py] [_log()] starting thread (client mode): 0xa5773dc0
2026-02-15T21:13:52.706 [DEBUG] [Thread-211316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:13:52.720 [DEBUG] [Thread-211316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:13:52.721 [INFO] [Thread-211316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:52.730 [DEBUG] [Thread-211316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] client lang: <none>
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] server lang: <none>
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] kex follows: False
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] Compression: none
2026-02-15T21:13:52.731 [DEBUG] [Thread-211316] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:13:52.788 [DEBUG] [Thread-211316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:13:52.788 [DEBUG] [Thread-211316] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:13:52.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:13:52.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:13:52.792 [DEBUG] [Thread-211316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:13:52.845 [DEBUG] [Thread-211316] [transport.py] [_log()] userauth is OK
2026-02-15T21:13:52.845 [DEBUG] [Thread-211316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:13:52.845 [DEBUG] [Thread-211316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:13:52.845 [DEBUG] [Thread-211316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:13:52.845 [DEBUG] [Thread-211316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:13:52.860 [INFO] [Thread-211316] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:13:52.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:13:52.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:13:53.706 [DEBUG] [Thread-211316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:13:53.706 [DEBUG] [Thread-211316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:13:53.753 [DEBUG] [Thread-211316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:13:53.754 [DEBUG] [Thread-211316] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:13:53.762 [DEBUG] [Thread-211316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:13:53.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:13:53.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:13:53.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:13:53.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:13:53.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:13:53.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:13:53.795 [DEBUG] [Thread-211316] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:13:58.260 [DEBUG] [Thread-211318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:13.418 [DEBUG] [Thread-211319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:14.890 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:23.403 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:23.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:14:23.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:14:23.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:14:24.074 [DEBUG] [Thread-211320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 13, 59), 15.67, 34.62, 0.0, 29.48, 16.56, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:14:26.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:13:59
2026-02-15T21:14:26.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:14:26.643 [DEBUG] [Thread-211321] [transport.py] [_log()] starting thread (client mode): 0xa2d54280
2026-02-15T21:14:26.644 [DEBUG] [Thread-211321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:14:26.653 [DEBUG] [Thread-211321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:14:26.653 [INFO] [Thread-211321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:14:26.660 [DEBUG] [Thread-211321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:14:26.661 [DEBUG] [Thread-211321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:14:26.661 [DEBUG] [Thread-211321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:14:26.661 [DEBUG] [Thread-211321] [transport.py] [_log()] client lang: <none>
2026-02-15T21:14:26.661 [DEBUG] [Thread-211321] [transport.py] [_log()] server lang: <none>
2026-02-15T21:14:26.661 [DEBUG] [Thread-211321] [transport.py] [_log()] kex follows: False
2026-02-15T21:14:26.661 [DEBUG] [Thread-211321] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:14:26.662 [DEBUG] [Thread-211321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:14:26.662 [DEBUG] [Thread-211321] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:14:26.662 [DEBUG] [Thread-211321] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:14:26.662 [DEBUG] [Thread-211321] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:14:26.662 [DEBUG] [Thread-211321] [transport.py] [_log()] Compression: none
2026-02-15T21:14:26.663 [DEBUG] [Thread-211321] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:14:26.710 [DEBUG] [Thread-211321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:14:26.718 [DEBUG] [Thread-211321] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:14:26.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:14:26.723 [DEBUG] [Thread-211321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:14:26.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:14:26.728 [DEBUG] [Thread-211321] [transport.py] [_log()] userauth is OK
2026-02-15T21:14:26.729 [DEBUG] [Thread-211321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:14:26.729 [DEBUG] [Thread-211321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:14:26.729 [DEBUG] [Thread-211321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:14:26.729 [DEBUG] [Thread-211321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:14:26.759 [INFO] [Thread-211321] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:14:26.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:14:27.388 [DEBUG] [Thread-211321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:14:27.390 [DEBUG] [Thread-211321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:14:27.394 [DEBUG] [Thread-211321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:14:27.429 [DEBUG] [Thread-211321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:14:27.429 [DEBUG] [Thread-211321] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:14:27.431 [DEBUG] [Thread-211321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:14:27.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:14:27.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:14:27.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:14:27.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:14:27.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:14:27.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:14:27.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:14:27.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:14:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:14:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.801493 -999.00  +16.40  20.21     40   +2.80 1 1 1 1 1     0    0 14.05 16.38 ZNESW 20.2 20.2 157.6 28.8 16.7 -24.8 16.6 -23.8 16.4 -22.6 16.7 -23.8
2026-02-15T21:14:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:14:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:14:27.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.801493
2026-02-15T21:14:27.460 [DEBUG] [Thread-211321] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:14:27.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:14:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:14:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:14:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:14:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:14:27.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:13:59', tmtdew=15.67, humidity=34.62, cloud=0.0, wind=29.48, temperature=16.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:13:59', seeing=1.54, atlas_timestamp='2026-02-15T19:14:08.995', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:13:00')
2026-02-15T21:14:27.479 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:27.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:14:27.564 [DEBUG] [Thread-211324] [transport.py] [_log()] starting thread (client mode): 0xa2d6faf0
2026-02-15T21:14:27.565 [DEBUG] [Thread-211324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:14:27.579 [DEBUG] [Thread-211324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:14:27.579 [INFO] [Thread-211324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:14:27.586 [DEBUG] [Thread-211324] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:14:27.586 [DEBUG] [Thread-211324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] client lang: <none>
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] server lang: <none>
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] kex follows: False
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] Compression: none
2026-02-15T21:14:27.587 [DEBUG] [Thread-211324] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:14:27.644 [DEBUG] [Thread-211324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:14:27.644 [DEBUG] [Thread-211324] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:14:27.644 [DEBUG] [Thread-211324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:14:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:14:27.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:14:27.701 [DEBUG] [Thread-211324] [transport.py] [_log()] userauth is OK
2026-02-15T21:14:27.702 [DEBUG] [Thread-211324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:14:27.702 [DEBUG] [Thread-211324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:14:27.702 [DEBUG] [Thread-211324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:14:27.702 [DEBUG] [Thread-211324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:14:27.716 [INFO] [Thread-211324] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:14:27.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:14:27.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:14:28.451 [DEBUG] [Thread-211326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:28.560 [DEBUG] [Thread-211324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:14:28.561 [DEBUG] [Thread-211324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:14:28.608 [DEBUG] [Thread-211324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:14:28.608 [DEBUG] [Thread-211324] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:14:28.617 [DEBUG] [Thread-211324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:14:28.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:14:28.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:14:28.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:14:28.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:14:28.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:14:28.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:14:28.657 [DEBUG] [Thread-211324] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:14:36.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:36.798 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:43.566 [DEBUG] [Thread-211327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:57.675 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:58.602 [DEBUG] [Thread-211328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:14:58.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:14:58.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:14:58.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:15:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 14, 34), 15.84, 34.27, 0.0, 28.55, 16.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:15:01.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:14:34
2026-02-15T21:15:01.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:15:01.744 [DEBUG] [Thread-211329] [transport.py] [_log()] starting thread (client mode): 0xa57e04f0
2026-02-15T21:15:01.744 [DEBUG] [Thread-211329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:15:01.765 [DEBUG] [Thread-211329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:15:01.765 [INFO] [Thread-211329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] client lang: <none>
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] server lang: <none>
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] kex follows: False
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] Compression: none
2026-02-15T21:15:01.768 [DEBUG] [Thread-211329] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:15:01.784 [DEBUG] [Thread-211329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:15:01.785 [DEBUG] [Thread-211329] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:15:01.785 [DEBUG] [Thread-211329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:15:01.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:15:01.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:15:01.786 [DEBUG] [Thread-211329] [transport.py] [_log()] userauth is OK
2026-02-15T21:15:01.786 [DEBUG] [Thread-211329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:15:01.786 [DEBUG] [Thread-211329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:15:01.786 [DEBUG] [Thread-211329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:15:01.786 [DEBUG] [Thread-211329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:15:01.796 [INFO] [Thread-211329] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:15:01.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:15:02.412 [DEBUG] [Thread-211329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:15:02.412 [DEBUG] [Thread-211329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:15:02.413 [DEBUG] [Thread-211329] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:15:02.454 [DEBUG] [Thread-211329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:15:02.454 [DEBUG] [Thread-211329] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:15:02.457 [DEBUG] [Thread-211329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:15:02.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:15:02.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:15:02.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:15:02.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:15:02.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:15:02.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:15:02.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:15:02.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:15:02.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:15:02.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.801840 -999.00  +16.40  26.01     40   +2.80 1 1 1 1 1     0    0 13.79 15.68 ZNESW 23.5 26.0 159.2 34.5 16.7 -24.7 16.6 -23.7 16.4 -22.5 16.7 -23.7
2026-02-15T21:15:02.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:15:02.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:15:02.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.801840
2026-02-15T21:15:02.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:15:02.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:15:02.488 [DEBUG] [Thread-211329] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:15:02.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:15:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:15:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:15:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:14:34', tmtdew=15.84, humidity=34.27, cloud=0.0, wind=28.55, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:14:34', seeing=1.9, atlas_timestamp='2026-02-15T19:14:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:13:00')
2026-02-15T21:15:02.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:15:02.588 [DEBUG] [Thread-211332] [transport.py] [_log()] starting thread (client mode): 0xa5759ff0
2026-02-15T21:15:02.588 [DEBUG] [Thread-211332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:15:02.605 [DEBUG] [Thread-211332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:15:02.605 [INFO] [Thread-211332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:15:02.613 [DEBUG] [Thread-211332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:15:02.613 [DEBUG] [Thread-211332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] client lang: <none>
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] server lang: <none>
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] kex follows: False
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:15:02.614 [DEBUG] [Thread-211332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:15:02.615 [DEBUG] [Thread-211332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:15:02.615 [DEBUG] [Thread-211332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:15:02.615 [DEBUG] [Thread-211332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:15:02.615 [DEBUG] [Thread-211332] [transport.py] [_log()] Compression: none
2026-02-15T21:15:02.615 [DEBUG] [Thread-211332] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:15:02.673 [DEBUG] [Thread-211332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:15:02.674 [DEBUG] [Thread-211332] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:15:02.674 [DEBUG] [Thread-211332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:15:02.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:15:02.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:15:02.732 [DEBUG] [Thread-211332] [transport.py] [_log()] userauth is OK
2026-02-15T21:15:02.732 [DEBUG] [Thread-211332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:15:02.732 [DEBUG] [Thread-211332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:15:02.732 [DEBUG] [Thread-211332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:15:02.732 [DEBUG] [Thread-211332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:15:02.747 [INFO] [Thread-211332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:15:02.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:15:02.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:15:03.608 [DEBUG] [Thread-211332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:15:03.609 [DEBUG] [Thread-211332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:15:03.661 [DEBUG] [Thread-211332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:15:03.661 [DEBUG] [Thread-211332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:15:03.669 [DEBUG] [Thread-211332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:15:03.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:15:03.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:15:03.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:15:03.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:15:03.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:15:03.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:15:03.701 [DEBUG] [Thread-211332] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:15:13.636 [DEBUG] [Thread-211334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:15:24.157 [DEBUG] [Thread-211335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:15:28.701 [DEBUG] [Thread-211336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:15:33.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:15:33.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:15:33.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:15:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 15, 9), 15.62, 34.62, 0.0, 31.55, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:15:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:15:09
2026-02-15T21:15:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:15:36.104 [DEBUG] [Thread-211337] [transport.py] [_log()] starting thread (client mode): 0xa57e30d0
2026-02-15T21:15:36.104 [DEBUG] [Thread-211337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:15:36.123 [DEBUG] [Thread-211337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:15:36.124 [INFO] [Thread-211337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] client lang: <none>
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] server lang: <none>
2026-02-15T21:15:36.127 [DEBUG] [Thread-211337] [transport.py] [_log()] kex follows: False
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] Compression: none
2026-02-15T21:15:36.128 [DEBUG] [Thread-211337] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:15:36.147 [DEBUG] [Thread-211337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:15:36.148 [DEBUG] [Thread-211337] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:15:36.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:15:36.149 [DEBUG] [Thread-211337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:15:36.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:15:36.152 [DEBUG] [Thread-211337] [transport.py] [_log()] userauth is OK
2026-02-15T21:15:36.152 [DEBUG] [Thread-211337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:15:36.152 [DEBUG] [Thread-211337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:15:36.152 [DEBUG] [Thread-211337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:15:36.153 [DEBUG] [Thread-211337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:15:36.178 [INFO] [Thread-211337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:15:36.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:15:36.872 [DEBUG] [Thread-211337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:15:36.872 [DEBUG] [Thread-211337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:15:36.873 [DEBUG] [Thread-211337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:15:36.913 [DEBUG] [Thread-211337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:15:36.914 [DEBUG] [Thread-211337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:15:36.917 [DEBUG] [Thread-211337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:15:36.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:15:36.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:15:36.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:15:36.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:15:36.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:15:36.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:15:36.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:15:36.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:15:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:15:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.802187 -999.00  +16.50  21.45     40   +2.80 1 1 1 1 1     0    0 14.23 14.19 ZNESW 23.9 21.4 164.4 31.5 16.7 -24.7 16.6 -23.7 16.4 -22.6 16.7 -23.7
2026-02-15T21:15:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:15:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:15:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.802187
2026-02-15T21:15:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:15:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:15:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:15:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:15:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:15:36.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:15:09', tmtdew=15.62, humidity=34.62, cloud=0.0, wind=31.55, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:15:10', seeing=1.63, atlas_timestamp='2026-02-15T19:15:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:13:00')
2026-02-15T21:15:36.942 [DEBUG] [Thread-211337] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:15:37.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:15:37.002 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:15:37.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:15:37.039 [DEBUG] [Thread-211340] [transport.py] [_log()] starting thread (client mode): 0xa57e3520
2026-02-15T21:15:37.039 [DEBUG] [Thread-211340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:15:37.052 [DEBUG] [Thread-211340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:15:37.053 [INFO] [Thread-211340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:15:37.060 [DEBUG] [Thread-211340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:15:37.061 [DEBUG] [Thread-211340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] client lang: <none>
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] server lang: <none>
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] kex follows: False
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:15:37.062 [DEBUG] [Thread-211340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:15:37.063 [DEBUG] [Thread-211340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:15:37.063 [DEBUG] [Thread-211340] [transport.py] [_log()] Compression: none
2026-02-15T21:15:37.063 [DEBUG] [Thread-211340] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:15:37.118 [DEBUG] [Thread-211340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:15:37.118 [DEBUG] [Thread-211340] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:15:37.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:15:37.120 [DEBUG] [Thread-211340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:15:37.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:15:37.173 [DEBUG] [Thread-211340] [transport.py] [_log()] userauth is OK
2026-02-15T21:15:37.173 [DEBUG] [Thread-211340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:15:37.173 [DEBUG] [Thread-211340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:15:37.173 [DEBUG] [Thread-211340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:15:37.173 [DEBUG] [Thread-211340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:15:37.187 [INFO] [Thread-211340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:15:37.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:15:37.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:15:38.001 [DEBUG] [Thread-211340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:15:38.002 [DEBUG] [Thread-211340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:15:38.049 [DEBUG] [Thread-211340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:15:38.049 [DEBUG] [Thread-211340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:15:38.058 [DEBUG] [Thread-211340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:15:38.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:15:38.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:15:38.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:15:38.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:15:38.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:15:38.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:15:38.093 [DEBUG] [Thread-211340] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:15:43.734 [DEBUG] [Thread-211342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:15:58.777 [DEBUG] [Thread-211343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:08.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:16:08.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:16:08.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:16:09.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 15, 46), 15.67, 34.63, 0.0, 30.51, 16.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:16:09.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:15:46
2026-02-15T21:16:10.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:16:10.492 [DEBUG] [Thread-211344] [transport.py] [_log()] starting thread (client mode): 0xa57e3a00
2026-02-15T21:16:10.492 [DEBUG] [Thread-211344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:16:10.511 [DEBUG] [Thread-211344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:16:10.512 [INFO] [Thread-211344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:16:10.515 [DEBUG] [Thread-211344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] client lang: <none>
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] server lang: <none>
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] kex follows: False
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] Compression: none
2026-02-15T21:16:10.516 [DEBUG] [Thread-211344] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:16:10.537 [DEBUG] [Thread-211344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:16:10.538 [DEBUG] [Thread-211344] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:16:10.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:16:10.539 [DEBUG] [Thread-211344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:16:10.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:16:10.541 [DEBUG] [Thread-211344] [transport.py] [_log()] userauth is OK
2026-02-15T21:16:10.541 [DEBUG] [Thread-211344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:16:10.541 [DEBUG] [Thread-211344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:16:10.542 [DEBUG] [Thread-211344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:16:10.542 [DEBUG] [Thread-211344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:16:10.564 [INFO] [Thread-211344] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:16:10.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:16:11.232 [DEBUG] [Thread-211344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:16:11.232 [DEBUG] [Thread-211344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:16:11.233 [DEBUG] [Thread-211344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:16:11.273 [DEBUG] [Thread-211344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:16:11.273 [DEBUG] [Thread-211344] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:16:11.275 [DEBUG] [Thread-211344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:16:11.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:16:11.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:16:11.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:16:11.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:16:11.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:16:11.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:16:11.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.802534 -999.00  +16.50  20.84     40   +2.80 1 1 1 1 1     0    0 13.92 13.76 ZNESW 20.8 20.8 152.6 29.8 16.7 -24.6 16.6 -23.7 16.4 -22.5 16.7 -23.7
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.802534
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:16:11.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:15:46', tmtdew=15.67, humidity=34.63, cloud=0.0, wind=30.51, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:15:46', seeing=1.64, atlas_timestamp='2026-02-15T19:15:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:13:00')
2026-02-15T21:16:11.292 [DEBUG] [Thread-211344] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:16:11.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:16:11.375 [DEBUG] [Thread-211347] [transport.py] [_log()] starting thread (client mode): 0xa2d55930
2026-02-15T21:16:11.376 [DEBUG] [Thread-211347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:16:11.390 [DEBUG] [Thread-211347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:16:11.390 [INFO] [Thread-211347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] client lang: <none>
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] server lang: <none>
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] kex follows: False
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:16:11.398 [DEBUG] [Thread-211347] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:16:11.399 [DEBUG] [Thread-211347] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:16:11.399 [DEBUG] [Thread-211347] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:16:11.399 [DEBUG] [Thread-211347] [transport.py] [_log()] Compression: none
2026-02-15T21:16:11.399 [DEBUG] [Thread-211347] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:16:11.456 [DEBUG] [Thread-211347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:16:11.457 [DEBUG] [Thread-211347] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:16:11.457 [DEBUG] [Thread-211347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:16:11.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:16:11.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:16:11.514 [DEBUG] [Thread-211347] [transport.py] [_log()] userauth is OK
2026-02-15T21:16:11.514 [DEBUG] [Thread-211347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:16:11.514 [DEBUG] [Thread-211347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:16:11.515 [DEBUG] [Thread-211347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:16:11.515 [DEBUG] [Thread-211347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:16:11.534 [INFO] [Thread-211347] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:16:11.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:16:11.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:16:12.324 [DEBUG] [Thread-211347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:16:12.324 [DEBUG] [Thread-211347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:16:12.372 [DEBUG] [Thread-211347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:16:12.372 [DEBUG] [Thread-211347] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:16:12.380 [DEBUG] [Thread-211347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:16:12.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:16:12.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:16:12.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:16:12.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:16:12.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:16:12.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:16:12.414 [DEBUG] [Thread-211347] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:16:13.813 [DEBUG] [Thread-211349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:24.245 [DEBUG] [Thread-211350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:28.854 [DEBUG] [Thread-211351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:32.373 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:37.202 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:37.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:16:42.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:16:42.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:16:43.896 [DEBUG] [Thread-211352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:16:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 16, 21), 15.67, 34.62, 0.0, 29.33, 16.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:16:44.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:16:21
2026-02-15T21:16:44.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:16:44.841 [DEBUG] [Thread-211353] [transport.py] [_log()] starting thread (client mode): 0xa2d56b90
2026-02-15T21:16:44.841 [DEBUG] [Thread-211353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:16:44.855 [DEBUG] [Thread-211353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:16:44.856 [INFO] [Thread-211353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] client lang: <none>
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] server lang: <none>
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] kex follows: False
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] Compression: none
2026-02-15T21:16:44.857 [DEBUG] [Thread-211353] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:16:44.865 [DEBUG] [Thread-211353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:16:44.865 [DEBUG] [Thread-211353] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:16:44.865 [DEBUG] [Thread-211353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:16:44.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:16:44.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:16:44.866 [DEBUG] [Thread-211353] [transport.py] [_log()] userauth is OK
2026-02-15T21:16:44.866 [DEBUG] [Thread-211353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:16:44.866 [DEBUG] [Thread-211353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:16:44.866 [DEBUG] [Thread-211353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:16:44.866 [DEBUG] [Thread-211353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:16:44.894 [INFO] [Thread-211353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:16:44.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:16:45.533 [DEBUG] [Thread-211353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:16:45.533 [DEBUG] [Thread-211353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:16:45.533 [DEBUG] [Thread-211353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:16:45.573 [DEBUG] [Thread-211353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:16:45.574 [DEBUG] [Thread-211353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:16:45.577 [DEBUG] [Thread-211353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:16:45.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:16:45.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:16:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:16:45.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:16:45.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:16:45.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:16:45.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:16:45.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:16:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:16:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.802882 -999.00  +16.40  17.61     40   +2.80 1 1 1 1 1     0    0 13.99 13.57 ZNESW 21.0 17.6 143.3 25.5 16.7 -24.7 16.6 -23.6 16.4 -22.6 16.7 -23.9
2026-02-15T21:16:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:16:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:16:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.802882
2026-02-15T21:16:45.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:16:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:16:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:16:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:16:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:16:45.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:16:21', tmtdew=15.67, humidity=34.62, cloud=0.0, wind=29.33, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:16:22', seeing=1.64, atlas_timestamp='2026-02-15T19:16:09.005', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, -0.01624999999999943, 0.009249999999999758, -0.0065000000000008384, 0.03049999999999997, 0.028250000000001663, -0.011000000000001009, -0.02674999999999983, 0.018499999999999517, -0.016000000000000014, -0.01025000000000098, -0.021000000000000796, 0.06400000000000006, 0.04224999999999923, -0.04400000000000048, -0.048500000000000654, 0.01774999999999949, 0.0, -0.03599999999999959, -0.0037500000000019185, 0.08649999999999736, 0.040749999999999176, 0.007750000000001478, -0.011250000000000426, 0.0389999999999997, 0.06649999999999956, 0.036749999999999616, -0.024499999999999744, 0.03700000000000081, 0.07000000000000028, -0.038999999999997925, -0.018499999999999517, 0.021249999999998437], zp_timestamp='2026-02-15T19:13:00')
2026-02-15T21:16:45.604 [DEBUG] [Thread-211353] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:16:45.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:16:45.699 [DEBUG] [Thread-211356] [transport.py] [_log()] starting thread (client mode): 0xa57e1690
2026-02-15T21:16:45.699 [DEBUG] [Thread-211356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:16:45.713 [DEBUG] [Thread-211356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:16:45.713 [INFO] [Thread-211356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:16:45.720 [DEBUG] [Thread-211356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:16:45.720 [DEBUG] [Thread-211356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] client lang: <none>
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] server lang: <none>
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] kex follows: False
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:16:45.721 [DEBUG] [Thread-211356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:16:45.722 [DEBUG] [Thread-211356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:16:45.722 [DEBUG] [Thread-211356] [transport.py] [_log()] Compression: none
2026-02-15T21:16:45.722 [DEBUG] [Thread-211356] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:16:45.781 [DEBUG] [Thread-211356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:16:45.782 [DEBUG] [Thread-211356] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:16:45.783 [DEBUG] [Thread-211356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:16:45.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:16:45.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:16:45.837 [DEBUG] [Thread-211356] [transport.py] [_log()] userauth is OK
2026-02-15T21:16:45.838 [DEBUG] [Thread-211356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:16:45.838 [DEBUG] [Thread-211356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:16:45.838 [DEBUG] [Thread-211356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:16:45.838 [DEBUG] [Thread-211356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:16:45.857 [INFO] [Thread-211356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:16:45.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:16:45.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:16:46.739 [DEBUG] [Thread-211356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:16:46.739 [DEBUG] [Thread-211356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:16:46.786 [DEBUG] [Thread-211356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:16:46.787 [DEBUG] [Thread-211356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:16:46.796 [DEBUG] [Thread-211356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:16:46.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:16:46.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:16:46.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:16:46.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:16:46.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:16:46.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:16:46.832 [DEBUG] [Thread-211356] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:16:58.931 [DEBUG] [Thread-211358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:13.989 [DEBUG] [Thread-211359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:17:16.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:17:16.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:17:18.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 16, 57), 15.68, 34.6, 0.0, 29.33, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:17:18.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:16:57
2026-02-15T21:17:19.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:17:19.214 [DEBUG] [Thread-211360] [transport.py] [_log()] starting thread (client mode): 0xa2dc3a00
2026-02-15T21:17:19.214 [DEBUG] [Thread-211360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:17:19.235 [DEBUG] [Thread-211360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:17:19.235 [INFO] [Thread-211360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] client lang: <none>
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] server lang: <none>
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] kex follows: False
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] Compression: none
2026-02-15T21:17:19.237 [DEBUG] [Thread-211360] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:17:19.248 [DEBUG] [Thread-211360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:17:19.249 [DEBUG] [Thread-211360] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:17:19.249 [DEBUG] [Thread-211360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:17:19.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:17:19.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:17:19.251 [DEBUG] [Thread-211360] [transport.py] [_log()] userauth is OK
2026-02-15T21:17:19.251 [DEBUG] [Thread-211360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:17:19.251 [DEBUG] [Thread-211360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:17:19.251 [DEBUG] [Thread-211360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:17:19.251 [DEBUG] [Thread-211360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:17:19.275 [INFO] [Thread-211360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:17:19.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:17:19.910 [DEBUG] [Thread-211360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:17:19.910 [DEBUG] [Thread-211360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:17:19.911 [DEBUG] [Thread-211360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:17:19.951 [DEBUG] [Thread-211360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:17:19.952 [DEBUG] [Thread-211360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:17:19.956 [DEBUG] [Thread-211360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:17:19.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:17:19.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:17:19.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:17:19.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:17:19.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:17:19.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:17:19.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:17:19.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:17:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:17:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.803576 -999.00  +16.40  27.49     40   +2.80 1 1 1 1 1     0    0 13.79 13.00 ZNESW 24.9 27.5 156.2 37.2 16.6 -24.6 16.6 -23.6 16.4 -22.6 16.7 -23.7
2026-02-15T21:17:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:17:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:17:19.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.803576
2026-02-15T21:17:19.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:17:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:17:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:17:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:17:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:17:19.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:16:57', tmtdew=15.68, humidity=34.6, cloud=0.0, wind=29.33, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:16:57', seeing=1.83, atlas_timestamp='2026-02-15T19:17:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.15525000000000055, -0.17675000000000018, -0.1172500000000003, -0.17849999999999966, -0.1775000000000002, -0.1637499999999985, -0.1639999999999997, -0.13374999999999915, -0.16400000000000148, -0.1769999999999996, -0.16424999999999912, -0.1590000000000007, -0.07099999999999973, -0.1432500000000001, -0.17950000000000088, -0.1280000000000001, -0.07975000000000065, -0.15949999999999953, -0.2140000000000004, -0.13175000000000026, -0.09200000000000053, -0.1647500000000015, -0.15775000000000006, -0.11425000000000018, -0.06100000000000172, -0.13949999999999996, -0.18825000000000003, -0.09849999999999959, -0.10999999999999943, -0.14849999999999852, -0.20449999999999946, -0.04499999999999993, -0.11125000000000185], zp_timestamp='2026-02-15T19:16:00')
2026-02-15T21:17:19.985 [DEBUG] [Thread-211360] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:17:20.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:17:20.081 [DEBUG] [Thread-211363] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-15T21:17:20.081 [DEBUG] [Thread-211363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:17:20.096 [DEBUG] [Thread-211363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:17:20.096 [INFO] [Thread-211363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:17:20.104 [DEBUG] [Thread-211363] [transport.py] [_log()] client lang: <none>
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] server lang: <none>
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] kex follows: False
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] Compression: none
2026-02-15T21:17:20.105 [DEBUG] [Thread-211363] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:17:20.160 [DEBUG] [Thread-211363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:17:20.161 [DEBUG] [Thread-211363] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:17:20.161 [DEBUG] [Thread-211363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:17:20.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:17:20.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:17:20.218 [DEBUG] [Thread-211363] [transport.py] [_log()] userauth is OK
2026-02-15T21:17:20.218 [DEBUG] [Thread-211363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:17:20.218 [DEBUG] [Thread-211363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:17:20.218 [DEBUG] [Thread-211363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:17:20.218 [DEBUG] [Thread-211363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:17:20.237 [INFO] [Thread-211363] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:17:20.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:17:20.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:17:21.091 [DEBUG] [Thread-211363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:17:21.091 [DEBUG] [Thread-211363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:17:21.139 [DEBUG] [Thread-211363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:17:21.140 [DEBUG] [Thread-211363] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:17:21.149 [DEBUG] [Thread-211363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:17:21.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:17:21.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:17:21.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:17:21.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:17:21.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:17:21.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:17:21.185 [DEBUG] [Thread-211363] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:17:24.325 [DEBUG] [Thread-211365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:29.025 [DEBUG] [Thread-211366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:37.404 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:37.405 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:44.084 [DEBUG] [Thread-211367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:17:51.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:17:51.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:17:51.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:17:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 17, 32), 15.86, 34.17, 0.0, 31.4, 16.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:17:53.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:17:32
2026-02-15T21:17:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:17:53.587 [DEBUG] [Thread-211368] [transport.py] [_log()] starting thread (client mode): 0xa2dc3580
2026-02-15T21:17:53.587 [DEBUG] [Thread-211368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:17:53.607 [DEBUG] [Thread-211368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:17:53.607 [INFO] [Thread-211368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:53.610 [DEBUG] [Thread-211368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] client lang: <none>
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] server lang: <none>
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] kex follows: False
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] Compression: none
2026-02-15T21:17:53.611 [DEBUG] [Thread-211368] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:17:53.627 [DEBUG] [Thread-211368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:17:53.627 [DEBUG] [Thread-211368] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:17:53.627 [DEBUG] [Thread-211368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:17:53.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:17:53.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:17:53.668 [DEBUG] [Thread-211368] [transport.py] [_log()] userauth is OK
2026-02-15T21:17:53.668 [DEBUG] [Thread-211368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:17:53.668 [DEBUG] [Thread-211368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:17:53.668 [DEBUG] [Thread-211368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:17:53.668 [DEBUG] [Thread-211368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:17:53.695 [INFO] [Thread-211368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:17:53.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:17:54.296 [DEBUG] [Thread-211368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:17:54.296 [DEBUG] [Thread-211368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:17:54.296 [DEBUG] [Thread-211368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:17:54.336 [DEBUG] [Thread-211368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:17:54.337 [DEBUG] [Thread-211368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:17:54.340 [DEBUG] [Thread-211368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:17:54.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:17:54.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:17:54.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:17:54.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:17:54.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:17:54.361 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:17:54.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:17:54.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:17:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:17:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.803923 -999.00  +16.40  22.72     40   +2.80 1 1 1 1 1     0    0 14.10 13.27 ZNESW 24.6 22.7 154.2 32.6 16.7 -24.6 16.6 -23.6 16.4 -22.4 16.7 -23.9
2026-02-15T21:17:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:17:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:17:54.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.803923
2026-02-15T21:17:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:17:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:17:54.363 [DEBUG] [Thread-211368] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:17:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:17:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:17:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:17:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:17:32', tmtdew=15.86, humidity=34.17, cloud=0.0, wind=31.4, temperature=16.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:17:33', seeing=2.23, atlas_timestamp='2026-02-15T19:17:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.15525000000000055, -0.17675000000000018, -0.1172500000000003, -0.17849999999999966, -0.1775000000000002, -0.1637499999999985, -0.1639999999999997, -0.13374999999999915, -0.16400000000000148, -0.1769999999999996, -0.16424999999999912, -0.1590000000000007, -0.07099999999999973, -0.1432500000000001, -0.17950000000000088, -0.1280000000000001, -0.07975000000000065, -0.15949999999999953, -0.2140000000000004, -0.13175000000000026, -0.09200000000000053, -0.1647500000000015, -0.15775000000000006, -0.11425000000000018, -0.06100000000000172, -0.13949999999999996, -0.18825000000000003, -0.09849999999999959, -0.10999999999999943, -0.14849999999999852, -0.20449999999999946, -0.04499999999999993, -0.11125000000000185], zp_timestamp='2026-02-15T19:16:00')
2026-02-15T21:17:54.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:17:54.462 [DEBUG] [Thread-211371] [transport.py] [_log()] starting thread (client mode): 0xa5771de0
2026-02-15T21:17:54.462 [DEBUG] [Thread-211371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:17:54.477 [DEBUG] [Thread-211371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:17:54.477 [INFO] [Thread-211371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:17:54.485 [DEBUG] [Thread-211371] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:17:54.485 [DEBUG] [Thread-211371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:17:54.485 [DEBUG] [Thread-211371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:17:54.485 [DEBUG] [Thread-211371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:54.485 [DEBUG] [Thread-211371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] client lang: <none>
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] server lang: <none>
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] kex follows: False
2026-02-15T21:17:54.486 [DEBUG] [Thread-211371] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:17:54.487 [DEBUG] [Thread-211371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:17:54.487 [DEBUG] [Thread-211371] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:17:54.487 [DEBUG] [Thread-211371] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:17:54.487 [DEBUG] [Thread-211371] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:17:54.487 [DEBUG] [Thread-211371] [transport.py] [_log()] Compression: none
2026-02-15T21:17:54.487 [DEBUG] [Thread-211371] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:17:54.545 [DEBUG] [Thread-211371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:17:54.546 [DEBUG] [Thread-211371] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:17:54.546 [DEBUG] [Thread-211371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:17:54.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:17:54.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:17:54.601 [DEBUG] [Thread-211371] [transport.py] [_log()] userauth is OK
2026-02-15T21:17:54.602 [DEBUG] [Thread-211371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:17:54.602 [DEBUG] [Thread-211371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:17:54.602 [DEBUG] [Thread-211371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:17:54.602 [DEBUG] [Thread-211371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:17:54.621 [INFO] [Thread-211371] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:17:54.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:17:54.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:17:55.473 [DEBUG] [Thread-211371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:17:55.473 [DEBUG] [Thread-211371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:17:55.521 [DEBUG] [Thread-211371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:17:55.521 [DEBUG] [Thread-211371] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:17:55.529 [DEBUG] [Thread-211371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:17:55.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:17: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')
2026-02-15T21:17:55.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:17:55.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:17:55.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:17:55.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:17:55.564 [DEBUG] [Thread-211371] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:17:59.125 [DEBUG] [Thread-211373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:06.577 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:14.188 [DEBUG] [Thread-211374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:24.407 [DEBUG] [Thread-211375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:25.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:18:25.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:18:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:18:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 18, 9), 15.71, 34.63, 0.0, 32.29, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:18:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:18:09
2026-02-15T21:18:28.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:18:28.319 [DEBUG] [Thread-211376] [transport.py] [_log()] starting thread (client mode): 0xa5743460
2026-02-15T21:18:28.319 [DEBUG] [Thread-211376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:18:28.339 [DEBUG] [Thread-211376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:18:28.340 [INFO] [Thread-211376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:18:28.342 [DEBUG] [Thread-211376] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:18:28.343 [DEBUG] [Thread-211376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] client lang: <none>
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] server lang: <none>
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] kex follows: False
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] Compression: none
2026-02-15T21:18:28.344 [DEBUG] [Thread-211376] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:18:28.362 [DEBUG] [Thread-211376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:18:28.363 [DEBUG] [Thread-211376] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:18:28.363 [DEBUG] [Thread-211376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:18:28.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:18:28.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:18:28.405 [DEBUG] [Thread-211376] [transport.py] [_log()] userauth is OK
2026-02-15T21:18:28.405 [DEBUG] [Thread-211376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:18:28.405 [DEBUG] [Thread-211376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:18:28.405 [DEBUG] [Thread-211376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:18:28.405 [DEBUG] [Thread-211376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:18:28.430 [INFO] [Thread-211376] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:18:28.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:18:29.027 [DEBUG] [Thread-211376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:18:29.027 [DEBUG] [Thread-211376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:18:29.028 [DEBUG] [Thread-211376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:18:29.068 [DEBUG] [Thread-211376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:18:29.068 [DEBUG] [Thread-211376] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:18:29.072 [DEBUG] [Thread-211376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:18:29.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:18:29.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:18:29.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:18:29.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:18:29.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:18:29.097 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:18:29.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:18:29.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:18:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:18:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.804270 -999.00  +16.40  19.74     40   +2.80 1 1 1 1 1     0    0 13.75 13.24 ZNESW 19.7 19.7 154.2 34.5 16.7 -24.8 16.6 -23.7 16.4 -22.6 16.7 -23.6
2026-02-15T21:18:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:18:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:18:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.804270
2026-02-15T21:18:29.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:18:29.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:18:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:18:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:18:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:18:29.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:18:09', tmtdew=15.71, humidity=34.63, cloud=0.0, wind=32.29, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:18:09', seeing=2.23, atlas_timestamp='2026-02-15T19:18:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.15525000000000055, -0.17675000000000018, -0.1172500000000003, -0.17849999999999966, -0.1775000000000002, -0.1637499999999985, -0.1639999999999997, -0.13374999999999915, -0.16400000000000148, -0.1769999999999996, -0.16424999999999912, -0.1590000000000007, -0.07099999999999973, -0.1432500000000001, -0.17950000000000088, -0.1280000000000001, -0.07975000000000065, -0.15949999999999953, -0.2140000000000004, -0.13175000000000026, -0.09200000000000053, -0.1647500000000015, -0.15775000000000006, -0.11425000000000018, -0.06100000000000172, -0.13949999999999996, -0.18825000000000003, -0.09849999999999959, -0.10999999999999943, -0.14849999999999852, -0.20449999999999946, -0.04499999999999993, -0.11125000000000185], zp_timestamp='2026-02-15T19:16:00')
2026-02-15T21:18:29.100 [DEBUG] [Thread-211376] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:18:29.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:18:29.197 [DEBUG] [Thread-211379] [transport.py] [_log()] starting thread (client mode): 0xa2d55120
2026-02-15T21:18:29.197 [DEBUG] [Thread-211379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:18:29.211 [DEBUG] [Thread-211379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:18:29.212 [INFO] [Thread-211379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:18:29.219 [DEBUG] [Thread-211379] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] client lang: <none>
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] server lang: <none>
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] kex follows: False
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] Compression: none
2026-02-15T21:18:29.220 [DEBUG] [Thread-211379] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:18:29.235 [DEBUG] [Thread-211381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:29.281 [DEBUG] [Thread-211379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:18:29.282 [DEBUG] [Thread-211379] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:18:29.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:18:29.283 [DEBUG] [Thread-211379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:18:29.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:18:29.337 [DEBUG] [Thread-211379] [transport.py] [_log()] userauth is OK
2026-02-15T21:18:29.337 [DEBUG] [Thread-211379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:18:29.337 [DEBUG] [Thread-211379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:18:29.338 [DEBUG] [Thread-211379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:18:29.338 [DEBUG] [Thread-211379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:18:29.356 [INFO] [Thread-211379] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:18:29.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:18:29.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:18:30.219 [DEBUG] [Thread-211379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:18:30.219 [DEBUG] [Thread-211379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:18:30.267 [DEBUG] [Thread-211379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:18:30.267 [DEBUG] [Thread-211379] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:18:30.276 [DEBUG] [Thread-211379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:18:30.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:18:30.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:18:30.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:18:30.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:18:30.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:18:30.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:18:30.320 [DEBUG] [Thread-211379] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:18:37.608 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:37.609 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:44.286 [DEBUG] [Thread-211382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:18:59.325 [DEBUG] [Thread-211383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:00.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:19:00.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:19:00.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:19:02.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 18, 44), 15.66, 34.63, 0.0, 27.76, 16.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:19:02.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:18:44
2026-02-15T21:19:02.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:19:02.674 [DEBUG] [Thread-211384] [transport.py] [_log()] starting thread (client mode): 0xa5743ee0
2026-02-15T21:19:02.674 [DEBUG] [Thread-211384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:19:02.687 [DEBUG] [Thread-211384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:19:02.687 [INFO] [Thread-211384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] client lang: <none>
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] server lang: <none>
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] kex follows: False
2026-02-15T21:19:02.688 [DEBUG] [Thread-211384] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:19:02.689 [DEBUG] [Thread-211384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:19:02.689 [DEBUG] [Thread-211384] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:19:02.689 [DEBUG] [Thread-211384] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:19:02.689 [DEBUG] [Thread-211384] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:19:02.689 [DEBUG] [Thread-211384] [transport.py] [_log()] Compression: none
2026-02-15T21:19:02.689 [DEBUG] [Thread-211384] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:19:02.699 [DEBUG] [Thread-211384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:19:02.699 [DEBUG] [Thread-211384] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:19:02.699 [DEBUG] [Thread-211384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:19:02.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:19:02.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:19:02.700 [DEBUG] [Thread-211384] [transport.py] [_log()] userauth is OK
2026-02-15T21:19:02.700 [DEBUG] [Thread-211384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:19:02.700 [DEBUG] [Thread-211384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:19:02.700 [DEBUG] [Thread-211384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:19:02.700 [DEBUG] [Thread-211384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:19:02.715 [INFO] [Thread-211384] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:19:02.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:19:03.256 [DEBUG] [Thread-211384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:19:03.257 [DEBUG] [Thread-211384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:19:03.257 [DEBUG] [Thread-211384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:19:03.298 [DEBUG] [Thread-211384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:19:03.298 [DEBUG] [Thread-211384] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:19:03.300 [DEBUG] [Thread-211384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:19:03.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:19:03.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:19:03.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:19:03.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:19:03.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:19:03.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:19:03.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:19:03.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:19:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:19:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.804617 -999.00  +16.40  20.35     40   +2.70 1 1 1 1 1     0    0 13.96 12.48 ZNESW 19.5 20.4 162.4 28.4 16.6 -24.9 16.5 -23.7 16.3 -22.4 16.6 -23.8
2026-02-15T21:19:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:19:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:19:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.804617
2026-02-15T21:19:03.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:19:03.328 [DEBUG] [Thread-211384] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:19:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:19:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:19:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:19:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:19:03.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:18:44', tmtdew=15.66, humidity=34.63, cloud=0.0, wind=27.76, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:18:44', seeing=1.62, atlas_timestamp='2026-02-15T19:18:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.15525000000000055, -0.17675000000000018, -0.1172500000000003, -0.17849999999999966, -0.1775000000000002, -0.1637499999999985, -0.1639999999999997, -0.13374999999999915, -0.16400000000000148, -0.1769999999999996, -0.16424999999999912, -0.1590000000000007, -0.07099999999999973, -0.1432500000000001, -0.17950000000000088, -0.1280000000000001, -0.07975000000000065, -0.15949999999999953, -0.2140000000000004, -0.13175000000000026, -0.09200000000000053, -0.1647500000000015, -0.15775000000000006, -0.11425000000000018, -0.06100000000000172, -0.13949999999999996, -0.18825000000000003, -0.09849999999999959, -0.10999999999999943, -0.14849999999999852, -0.20449999999999946, -0.04499999999999993, -0.11125000000000185], zp_timestamp='2026-02-15T19:16:00')
2026-02-15T21:19:03.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:19:03.418 [DEBUG] [Thread-211387] [transport.py] [_log()] starting thread (client mode): 0xa2dc17e0
2026-02-15T21:19:03.418 [DEBUG] [Thread-211387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:19:03.432 [DEBUG] [Thread-211387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:19:03.432 [INFO] [Thread-211387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:19:03.440 [DEBUG] [Thread-211387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:19:03.440 [DEBUG] [Thread-211387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:19:03.440 [DEBUG] [Thread-211387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:19:03.440 [DEBUG] [Thread-211387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] client lang: <none>
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] server lang: <none>
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] kex follows: False
2026-02-15T21:19:03.441 [DEBUG] [Thread-211387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:19:03.442 [DEBUG] [Thread-211387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:19:03.442 [DEBUG] [Thread-211387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:19:03.442 [DEBUG] [Thread-211387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:19:03.442 [DEBUG] [Thread-211387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:19:03.442 [DEBUG] [Thread-211387] [transport.py] [_log()] Compression: none
2026-02-15T21:19:03.442 [DEBUG] [Thread-211387] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:19:03.498 [DEBUG] [Thread-211387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:19:03.499 [DEBUG] [Thread-211387] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:19:03.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:19:03.500 [DEBUG] [Thread-211387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:19:03.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:19:03.557 [DEBUG] [Thread-211387] [transport.py] [_log()] userauth is OK
2026-02-15T21:19:03.557 [DEBUG] [Thread-211387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:19:03.557 [DEBUG] [Thread-211387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:19:03.557 [DEBUG] [Thread-211387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:19:03.557 [DEBUG] [Thread-211387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:19:03.575 [INFO] [Thread-211387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:19:03.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:19:03.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:19:04.443 [DEBUG] [Thread-211387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:19:04.443 [DEBUG] [Thread-211387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:19:04.491 [DEBUG] [Thread-211387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:19:04.491 [DEBUG] [Thread-211387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:19:04.501 [DEBUG] [Thread-211387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:19:04.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:19:04.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:19:04.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:19:04.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:19:04.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:19:04.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:19:04.538 [DEBUG] [Thread-211387] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:19:14.360 [DEBUG] [Thread-211389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:24.459 [DEBUG] [Thread-211390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:29.414 [DEBUG] [Thread-211391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:34.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:19:34.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:19:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:19:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 19, 19), 15.62, 34.7, 0.0, 28.76, 16.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:19:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:19:19
2026-02-15T21:19:36.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:19:36.916 [DEBUG] [Thread-211392] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-15T21:19:36.917 [DEBUG] [Thread-211392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:19:36.938 [DEBUG] [Thread-211392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:19:36.938 [INFO] [Thread-211392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:19:36.939 [DEBUG] [Thread-211392] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:19:36.939 [DEBUG] [Thread-211392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] client lang: <none>
2026-02-15T21:19:36.940 [DEBUG] [Thread-211392] [transport.py] [_log()] server lang: <none>
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] kex follows: False
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] Compression: none
2026-02-15T21:19:36.941 [DEBUG] [Thread-211392] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:19:36.955 [DEBUG] [Thread-211392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:19:36.956 [DEBUG] [Thread-211392] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:19:36.956 [DEBUG] [Thread-211392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:19:36.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:19:36.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:19:36.958 [DEBUG] [Thread-211392] [transport.py] [_log()] userauth is OK
2026-02-15T21:19:36.959 [DEBUG] [Thread-211392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:19:36.959 [DEBUG] [Thread-211392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:19:36.959 [DEBUG] [Thread-211392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:19:36.959 [DEBUG] [Thread-211392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:19:36.983 [INFO] [Thread-211392] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:19:36.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:19:37.567 [DEBUG] [Thread-211392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:19:37.567 [DEBUG] [Thread-211392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:19:37.568 [DEBUG] [Thread-211392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:19:37.608 [DEBUG] [Thread-211392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:19:37.609 [DEBUG] [Thread-211392] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:19:37.611 [DEBUG] [Thread-211392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:19:37.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:19:37.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:19:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:19:37.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:19:37.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:19:37.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:19:37.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:19:37.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:19:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:19:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.804965 -999.00  +16.40  27.49     40   +2.80 1 1 1 1 1     0    0 13.82 11.68 ZNESW 24.0 27.5 147.6 31.6 16.6 -24.6 16.6 -23.7 16.4 -22.4 16.6 -23.8
2026-02-15T21:19:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:19:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:19:37.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.804965
2026-02-15T21:19:37.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:19:37.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:19:37.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:19:37.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:19:37.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:19:37.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:19:19', tmtdew=15.62, humidity=34.7, cloud=0.0, wind=28.76, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:19:19', seeing=1.62, atlas_timestamp='2026-02-15T19:19:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.15525000000000055, -0.17675000000000018, -0.1172500000000003, -0.17849999999999966, -0.1775000000000002, -0.1637499999999985, -0.1639999999999997, -0.13374999999999915, -0.16400000000000148, -0.1769999999999996, -0.16424999999999912, -0.1590000000000007, -0.07099999999999973, -0.1432500000000001, -0.17950000000000088, -0.1280000000000001, -0.07975000000000065, -0.15949999999999953, -0.2140000000000004, -0.13175000000000026, -0.09200000000000053, -0.1647500000000015, -0.15775000000000006, -0.11425000000000018, -0.06100000000000172, -0.13949999999999996, -0.18825000000000003, -0.09849999999999959, -0.10999999999999943, -0.14849999999999852, -0.20449999999999946, -0.04499999999999993, -0.11125000000000185], zp_timestamp='2026-02-15T19:16:00')
2026-02-15T21:19:37.645 [DEBUG] [Thread-211392] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:19:37.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:19:37.739 [DEBUG] [Thread-211395] [transport.py] [_log()] starting thread (client mode): 0xa5740a90
2026-02-15T21:19:37.739 [DEBUG] [Thread-211395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:19:37.754 [DEBUG] [Thread-211395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:19:37.754 [INFO] [Thread-211395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:19:37.762 [DEBUG] [Thread-211395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] client lang: <none>
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] server lang: <none>
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] kex follows: False
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] Compression: none
2026-02-15T21:19:37.763 [DEBUG] [Thread-211395] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:19:37.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:37.814 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:37.821 [DEBUG] [Thread-211395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:19:37.821 [DEBUG] [Thread-211395] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:19:37.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:19:37.823 [DEBUG] [Thread-211395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:19:37.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:19:37.877 [DEBUG] [Thread-211395] [transport.py] [_log()] userauth is OK
2026-02-15T21:19:37.877 [DEBUG] [Thread-211395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:19:37.877 [DEBUG] [Thread-211395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:19:37.877 [DEBUG] [Thread-211395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:19:37.878 [DEBUG] [Thread-211395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:19:37.896 [INFO] [Thread-211395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:19:37.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:19:37.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:19:38.726 [DEBUG] [Thread-211395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:19:38.726 [DEBUG] [Thread-211395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:19:38.774 [DEBUG] [Thread-211395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:19:38.774 [DEBUG] [Thread-211395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:19:38.782 [DEBUG] [Thread-211395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:19:38.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:19:38.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:19:38.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:19:38.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:19:38.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:19:38.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:19:38.814 [DEBUG] [Thread-211395] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:19:41.053 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:44.448 [DEBUG] [Thread-211397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:50.647 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:19:59.492 [DEBUG] [Thread-211398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:00.365 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:04.465 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:08.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:20:08.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:20:08.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 19, 54), 15.57, 34.72, 0.0, 32.25, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:20:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:19:54
2026-02-15T21:20:11.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:20:11.294 [DEBUG] [Thread-211399] [transport.py] [_log()] starting thread (client mode): 0xa5770e50
2026-02-15T21:20:11.294 [DEBUG] [Thread-211399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:20:11.314 [DEBUG] [Thread-211399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:20:11.314 [INFO] [Thread-211399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] client lang: <none>
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] server lang: <none>
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] kex follows: False
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:20:11.316 [DEBUG] [Thread-211399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:20:11.317 [DEBUG] [Thread-211399] [transport.py] [_log()] Compression: none
2026-02-15T21:20:11.317 [DEBUG] [Thread-211399] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:20:11.327 [DEBUG] [Thread-211399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:20:11.327 [DEBUG] [Thread-211399] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:20:11.328 [DEBUG] [Thread-211399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:20:11.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:20:11.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:20:11.328 [DEBUG] [Thread-211399] [transport.py] [_log()] userauth is OK
2026-02-15T21:20:11.328 [DEBUG] [Thread-211399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:20:11.328 [DEBUG] [Thread-211399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:20:11.328 [DEBUG] [Thread-211399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:20:11.328 [DEBUG] [Thread-211399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:20:11.337 [INFO] [Thread-211399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:20:11.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:20:14.537 [DEBUG] [Thread-211401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:17.029 [DEBUG] [Thread-211399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:20:17.030 [DEBUG] [Thread-211399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:20:17.030 [DEBUG] [Thread-211399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:20:17.070 [DEBUG] [Thread-211399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:20:17.070 [DEBUG] [Thread-211399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:20:17.074 [DEBUG] [Thread-211399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:20:17.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:20:17.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:20:17.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:20:17.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:20:17.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:20:17.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:20:17.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:20:17.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:20:17.160 [DEBUG] [Thread-211399] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:20:17.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:20:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.804965 -999.00  +16.40  27.49     40   +2.80 1 1 1 1 1     0    0 13.82 11.68 ZNESW 24.0 27.5 147.6 31.6 16.6 -24.6 16.6 -23.7 16.4 -22.4 16.6 -23.8
2026-02-15T21:20:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:20:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:20:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.804965
2026-02-15T21:20:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:20:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:20:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:20:17.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:20:17.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:20:17.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:19:54', tmtdew=15.57, humidity=34.72, cloud=0.0, wind=32.25, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:19:55', seeing=1.72, atlas_timestamp='2026-02-15T19:19:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.15525000000000055, -0.17675000000000018, -0.1172500000000003, -0.17849999999999966, -0.1775000000000002, -0.1637499999999985, -0.1639999999999997, -0.13374999999999915, -0.16400000000000148, -0.1769999999999996, -0.16424999999999912, -0.1590000000000007, -0.07099999999999973, -0.1432500000000001, -0.17950000000000088, -0.1280000000000001, -0.07975000000000065, -0.15949999999999953, -0.2140000000000004, -0.13175000000000026, -0.09200000000000053, -0.1647500000000015, -0.15775000000000006, -0.11425000000000018, -0.06100000000000172, -0.13949999999999996, -0.18825000000000003, -0.09849999999999959, -0.10999999999999943, -0.14849999999999852, -0.20449999999999946, -0.04499999999999993, -0.11125000000000185], zp_timestamp='2026-02-15T19:16:00')
2026-02-15T21:20:17.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:20:17.263 [DEBUG] [Thread-211403] [transport.py] [_log()] starting thread (client mode): 0xa2d56fb0
2026-02-15T21:20:17.263 [DEBUG] [Thread-211403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:20:17.278 [DEBUG] [Thread-211403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:20:17.278 [INFO] [Thread-211403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] client lang: <none>
2026-02-15T21:20:17.286 [DEBUG] [Thread-211403] [transport.py] [_log()] server lang: <none>
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] kex follows: False
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] Compression: none
2026-02-15T21:20:17.287 [DEBUG] [Thread-211403] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:20:17.346 [DEBUG] [Thread-211403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:20:17.346 [DEBUG] [Thread-211403] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:20:17.347 [DEBUG] [Thread-211403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:20:17.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:20:17.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:20:17.401 [DEBUG] [Thread-211403] [transport.py] [_log()] userauth is OK
2026-02-15T21:20:17.402 [DEBUG] [Thread-211403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:20:17.402 [DEBUG] [Thread-211403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:20:17.402 [DEBUG] [Thread-211403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:20:17.402 [DEBUG] [Thread-211403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:20:17.421 [INFO] [Thread-211403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:20:17.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:20:17.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:20:18.239 [DEBUG] [Thread-211403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:20:18.239 [DEBUG] [Thread-211403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:20:18.287 [DEBUG] [Thread-211403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:20:18.288 [DEBUG] [Thread-211403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:20:18.297 [DEBUG] [Thread-211403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:20:18.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:20:18.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:20:18.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:20:18.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:20:18.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:20:18.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:20:18.333 [DEBUG] [Thread-211403] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:20:24.523 [DEBUG] [Thread-211405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:29.577 [DEBUG] [Thread-211406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:38.021 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:38.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:44.627 [DEBUG] [Thread-211407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:20:48.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:20:48.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:20:48.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:20:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 20, 30), 15.61, 34.65, 0.0, 31.85, 16.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:20:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:20:30
2026-02-15T21:20:51.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:20:51.272 [DEBUG] [Thread-211408] [transport.py] [_log()] starting thread (client mode): 0xa57b2c20
2026-02-15T21:20:51.272 [DEBUG] [Thread-211408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:20:51.292 [DEBUG] [Thread-211408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:20:51.292 [INFO] [Thread-211408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:20:51.295 [DEBUG] [Thread-211408] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:20:51.295 [DEBUG] [Thread-211408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] client lang: <none>
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] server lang: <none>
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] kex follows: False
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] Compression: none
2026-02-15T21:20:51.296 [DEBUG] [Thread-211408] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:20:51.312 [DEBUG] [Thread-211408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:20:51.313 [DEBUG] [Thread-211408] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:20:51.313 [DEBUG] [Thread-211408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:20:51.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:20:51.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:20:51.315 [DEBUG] [Thread-211408] [transport.py] [_log()] userauth is OK
2026-02-15T21:20:51.316 [DEBUG] [Thread-211408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:20:51.316 [DEBUG] [Thread-211408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:20:51.316 [DEBUG] [Thread-211408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:20:51.316 [DEBUG] [Thread-211408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:20:51.337 [INFO] [Thread-211408] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:20:51.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:20:51.957 [DEBUG] [Thread-211408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:20:51.957 [DEBUG] [Thread-211408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:20:51.958 [DEBUG] [Thread-211408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:20:51.999 [DEBUG] [Thread-211408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:20:51.999 [DEBUG] [Thread-211408] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:20:52.000 [DEBUG] [Thread-211408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:20:52.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:20:52.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:20:52.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:20:52.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:20:52.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:20:52.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:20:52.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.805312 -999.00  +16.40  19.16     40   +2.70 1 1 1 1 1     0    0 14.01 11.14 ZNESW 20.7 19.2 157.4 28.9 16.7 -24.7 16.6 -23.7 16.4 -22.5 16.6 -23.8
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.805312
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:20:52.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:20:52.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:20:52.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:20:52.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:20:52.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:20:30', tmtdew=15.61, humidity=34.65, cloud=0.0, wind=31.85, temperature=16.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:20:30', seeing=1.62, atlas_timestamp='2026-02-15T19:19:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:19:00')
2026-02-15T21:20:52.017 [DEBUG] [Thread-211408] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:20: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-02-15T21:20:52.108 [DEBUG] [Thread-211411] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-15T21:20:52.108 [DEBUG] [Thread-211411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:20:52.123 [DEBUG] [Thread-211411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:20:52.123 [INFO] [Thread-211411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] client lang: <none>
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] server lang: <none>
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] kex follows: False
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] Compression: none
2026-02-15T21:20:52.131 [DEBUG] [Thread-211411] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:20:52.190 [DEBUG] [Thread-211411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:20:52.190 [DEBUG] [Thread-211411] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:20:52.191 [DEBUG] [Thread-211411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:20:52.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:20:52.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:20:52.246 [DEBUG] [Thread-211411] [transport.py] [_log()] userauth is OK
2026-02-15T21:20:52.247 [DEBUG] [Thread-211411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:20:52.247 [DEBUG] [Thread-211411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:20:52.247 [DEBUG] [Thread-211411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:20:52.247 [DEBUG] [Thread-211411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:20:52.266 [INFO] [Thread-211411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:20:52.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:20:52.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:20:53.093 [DEBUG] [Thread-211411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:20:53.093 [DEBUG] [Thread-211411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:20:53.141 [DEBUG] [Thread-211411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:20:53.141 [DEBUG] [Thread-211411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:20:53.149 [DEBUG] [Thread-211411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:20:53.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:20:53.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:20:53.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:20:53.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:20:53.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:20:53.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:20:53.181 [DEBUG] [Thread-211411] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:20:59.662 [DEBUG] [Thread-211413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:14.722 [DEBUG] [Thread-211414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:14.908 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:23.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:21:23.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:21:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:21:24.603 [DEBUG] [Thread-211415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 21, 5), 15.62, 34.63, 0.0, 29.87, 16.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:21:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:21:05
2026-02-15T21:21:25.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:21:25.634 [DEBUG] [Thread-211416] [transport.py] [_log()] starting thread (client mode): 0xa2d576d0
2026-02-15T21:21:25.634 [DEBUG] [Thread-211416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:21:25.654 [DEBUG] [Thread-211416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:21:25.654 [INFO] [Thread-211416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] client lang: <none>
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] server lang: <none>
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] kex follows: False
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] Compression: none
2026-02-15T21:21:25.658 [DEBUG] [Thread-211416] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:21:25.674 [DEBUG] [Thread-211416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:21:25.674 [DEBUG] [Thread-211416] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:21:25.674 [DEBUG] [Thread-211416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:21:25.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:21:25.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:21:25.675 [DEBUG] [Thread-211416] [transport.py] [_log()] userauth is OK
2026-02-15T21:21:25.675 [DEBUG] [Thread-211416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:21:25.676 [DEBUG] [Thread-211416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:21:25.676 [DEBUG] [Thread-211416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:21:25.676 [DEBUG] [Thread-211416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:21:25.686 [INFO] [Thread-211416] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:21:25.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:21:26.361 [DEBUG] [Thread-211416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:21:26.361 [DEBUG] [Thread-211416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:21:26.361 [DEBUG] [Thread-211416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:21:26.402 [DEBUG] [Thread-211416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:21:26.402 [DEBUG] [Thread-211416] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:21:26.405 [DEBUG] [Thread-211416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:21:26.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:21:26.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:21:26.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:21:26.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:21:26.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:21:26.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:21:26.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:21:26.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.806006 -999.00  +16.30  19.40     40   +2.70 1 1 1 1 1     0    0 13.69 11.15 ZNESW 17.3 19.4 153.0 23.4 16.6 -24.7 16.5 -23.7 16.3 -22.5 16.6 -23.8
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.806006
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:21:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:21:05', tmtdew=15.62, humidity=34.63, cloud=0.0, wind=29.87, temperature=16.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:21:06', seeing=1.71, atlas_timestamp='2026-02-15T19:20:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:19:00')
2026-02-15T21:21:26.428 [DEBUG] [Thread-211416] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:21:26.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:21:26.511 [DEBUG] [Thread-211419] [transport.py] [_log()] starting thread (client mode): 0xa2d56f50
2026-02-15T21:21:26.511 [DEBUG] [Thread-211419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:21:26.525 [DEBUG] [Thread-211419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:21:26.525 [INFO] [Thread-211419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] client lang: <none>
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] server lang: <none>
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] kex follows: False
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:21:26.533 [DEBUG] [Thread-211419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:21:26.534 [DEBUG] [Thread-211419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:21:26.534 [DEBUG] [Thread-211419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:21:26.534 [DEBUG] [Thread-211419] [transport.py] [_log()] Compression: none
2026-02-15T21:21:26.534 [DEBUG] [Thread-211419] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:21:26.593 [DEBUG] [Thread-211419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:21:26.594 [DEBUG] [Thread-211419] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:21:26.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:21:26.595 [DEBUG] [Thread-211419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:21:26.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:21:26.650 [DEBUG] [Thread-211419] [transport.py] [_log()] userauth is OK
2026-02-15T21:21:26.651 [DEBUG] [Thread-211419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:21:26.651 [DEBUG] [Thread-211419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:21:26.651 [DEBUG] [Thread-211419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:21:26.651 [DEBUG] [Thread-211419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:21:26.671 [INFO] [Thread-211419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:21:26.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:21:26.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:21:27.490 [DEBUG] [Thread-211419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:21:27.490 [DEBUG] [Thread-211419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:21:27.538 [DEBUG] [Thread-211419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:21:27.539 [DEBUG] [Thread-211419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:21:27.548 [DEBUG] [Thread-211419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:21:27.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:21:27.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:21:27.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:21:27.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:21:27.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:21:27.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:21:27.586 [DEBUG] [Thread-211419] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:21:29.768 [DEBUG] [Thread-211421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:38.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:38.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:44.827 [DEBUG] [Thread-211422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:57.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:21:57.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:21:57.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:21:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 21, 41), 15.87, 34.1, 0.0, 26.46, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:21:59.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:21:41
2026-02-15T21:21:59.857 [DEBUG] [Thread-211423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:21:59.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:22:00.053 [DEBUG] [Thread-211424] [transport.py] [_log()] starting thread (client mode): 0xa5773a60
2026-02-15T21:22:00.053 [DEBUG] [Thread-211424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:22:00.073 [DEBUG] [Thread-211424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:22:00.073 [INFO] [Thread-211424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:22:00.076 [DEBUG] [Thread-211424] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:22:00.076 [DEBUG] [Thread-211424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:22:00.076 [DEBUG] [Thread-211424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] client lang: <none>
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] server lang: <none>
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] kex follows: False
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:22:00.077 [DEBUG] [Thread-211424] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:22:00.078 [DEBUG] [Thread-211424] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:22:00.078 [DEBUG] [Thread-211424] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:22:00.078 [DEBUG] [Thread-211424] [transport.py] [_log()] Compression: none
2026-02-15T21:22:00.078 [DEBUG] [Thread-211424] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:22:00.096 [DEBUG] [Thread-211424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:22:00.096 [DEBUG] [Thread-211424] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:22:00.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:22:00.098 [DEBUG] [Thread-211424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:22:00.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:22:00.100 [DEBUG] [Thread-211424] [transport.py] [_log()] userauth is OK
2026-02-15T21:22:00.100 [DEBUG] [Thread-211424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:22:00.100 [DEBUG] [Thread-211424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:22:00.100 [DEBUG] [Thread-211424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:22:00.101 [DEBUG] [Thread-211424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:22:00.120 [INFO] [Thread-211424] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:22:00.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:22:00.752 [DEBUG] [Thread-211424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:22:00.752 [DEBUG] [Thread-211424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:22:00.752 [DEBUG] [Thread-211424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:22:00.794 [DEBUG] [Thread-211424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:22:00.794 [DEBUG] [Thread-211424] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:22:00.798 [DEBUG] [Thread-211424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:22:00.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:22:00.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:22:00.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:22:00.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:22:00.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:22:00.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:22:00.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:22:00.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:22:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:22:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.806353 -999.00  +16.30  24.68     40   +2.80 1 1 1 1 1     0    0 13.75 11.27 ZNESW 24.4 24.7 141.2 32.1 16.6 -24.8 16.6 -23.6 16.3 -22.5 16.6 -23.7
2026-02-15T21:22:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:22:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:22:00.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.806353
2026-02-15T21:22:00.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:22:00.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:22:00.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:22:00.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:22:00.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:22:00.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:21:41', tmtdew=15.87, humidity=34.1, cloud=0.0, wind=26.46, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:21:41', seeing=1.65, atlas_timestamp='2026-02-15T19:21:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:19:00')
2026-02-15T21:22:00.828 [DEBUG] [Thread-211424] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:22:00.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:22:00.924 [DEBUG] [Thread-211427] [transport.py] [_log()] starting thread (client mode): 0xa2d6f340
2026-02-15T21:22:00.924 [DEBUG] [Thread-211427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:22:00.938 [DEBUG] [Thread-211427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:22:00.938 [INFO] [Thread-211427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] client lang: <none>
2026-02-15T21:22:00.946 [DEBUG] [Thread-211427] [transport.py] [_log()] server lang: <none>
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] kex follows: False
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] Compression: none
2026-02-15T21:22:00.947 [DEBUG] [Thread-211427] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:22:01.007 [DEBUG] [Thread-211427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:22:01.007 [DEBUG] [Thread-211427] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:22:01.008 [DEBUG] [Thread-211427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:22:01.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:22:01.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:22:01.063 [DEBUG] [Thread-211427] [transport.py] [_log()] userauth is OK
2026-02-15T21:22:01.063 [DEBUG] [Thread-211427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:22:01.063 [DEBUG] [Thread-211427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:22:01.063 [DEBUG] [Thread-211427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:22:01.064 [DEBUG] [Thread-211427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:22:01.082 [INFO] [Thread-211427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:22:01.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:22:01.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:22:01.927 [DEBUG] [Thread-211427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:22:01.927 [DEBUG] [Thread-211427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:22:01.975 [DEBUG] [Thread-211427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:22:01.975 [DEBUG] [Thread-211427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:22:01.984 [DEBUG] [Thread-211427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:22:01.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:22:01.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:22:02.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:22:02.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:22:02.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:22:02.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:22:02.021 [DEBUG] [Thread-211427] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:22:14.895 [DEBUG] [Thread-211429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:22:24.669 [DEBUG] [Thread-211430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:22:29.956 [DEBUG] [Thread-211431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:22:32.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:22:32.044 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:22:32.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:22:34.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 22, 18), 15.56, 34.73, 0.0, 34.74, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:22:34.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:22:18
2026-02-15T21:22:34.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:22:34.705 [DEBUG] [Thread-211432] [transport.py] [_log()] starting thread (client mode): 0xa57b3730
2026-02-15T21:22:34.705 [DEBUG] [Thread-211432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:22:34.725 [DEBUG] [Thread-211432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:22:34.725 [INFO] [Thread-211432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] client lang: <none>
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] server lang: <none>
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] kex follows: False
2026-02-15T21:22:34.726 [DEBUG] [Thread-211432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:22:34.727 [DEBUG] [Thread-211432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:22:34.727 [DEBUG] [Thread-211432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:22:34.727 [DEBUG] [Thread-211432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:22:34.727 [DEBUG] [Thread-211432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:22:34.727 [DEBUG] [Thread-211432] [transport.py] [_log()] Compression: none
2026-02-15T21:22:34.727 [DEBUG] [Thread-211432] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:22:34.745 [DEBUG] [Thread-211432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:22:34.746 [DEBUG] [Thread-211432] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:22:34.746 [DEBUG] [Thread-211432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:22:34.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:22:34.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:22:34.748 [DEBUG] [Thread-211432] [transport.py] [_log()] userauth is OK
2026-02-15T21:22:34.749 [DEBUG] [Thread-211432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:22:34.749 [DEBUG] [Thread-211432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:22:34.749 [DEBUG] [Thread-211432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:22:34.749 [DEBUG] [Thread-211432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:22:34.772 [INFO] [Thread-211432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:22:34.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:22:35.439 [DEBUG] [Thread-211432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:22:35.439 [DEBUG] [Thread-211432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:22:35.439 [DEBUG] [Thread-211432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:22:35.480 [DEBUG] [Thread-211432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:22:35.480 [DEBUG] [Thread-211432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:22:35.483 [DEBUG] [Thread-211432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:22:35.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:22:35.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:22:35.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:22:35.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:22:35.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:22:35.507 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:22:35.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:22:35.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:22:35.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:22:35.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.806701 -999.00  +16.30  21.92     40   +2.80 1 1 1 1 1     0    0 13.85 11.18 ZNESW 26.3 21.9 138.8 30.9 16.6 -24.7 16.5 -23.6 16.3 -22.5 16.6 -23.7
2026-02-15T21:22:35.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:22:35.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:22:35.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.806701
2026-02-15T21:22:35.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:22:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:22:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:22:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:22:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:22:35.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:22:18', tmtdew=15.56, humidity=34.73, cloud=0.0, wind=34.74, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:22:18', seeing=1.61, atlas_timestamp='2026-02-15T19:21:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:19:00')
2026-02-15T21:22:35.511 [DEBUG] [Thread-211432] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:22:35.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:22:35.605 [DEBUG] [Thread-211435] [transport.py] [_log()] starting thread (client mode): 0xa57b0d60
2026-02-15T21:22:35.605 [DEBUG] [Thread-211435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:22:35.619 [DEBUG] [Thread-211435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:22:35.619 [INFO] [Thread-211435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] client lang: <none>
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] server lang: <none>
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] kex follows: False
2026-02-15T21:22:35.627 [DEBUG] [Thread-211435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:22:35.628 [DEBUG] [Thread-211435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:22:35.628 [DEBUG] [Thread-211435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:22:35.628 [DEBUG] [Thread-211435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:22:35.628 [DEBUG] [Thread-211435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:22:35.628 [DEBUG] [Thread-211435] [transport.py] [_log()] Compression: none
2026-02-15T21:22:35.628 [DEBUG] [Thread-211435] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:22:35.687 [DEBUG] [Thread-211435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:22:35.688 [DEBUG] [Thread-211435] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:22:35.688 [DEBUG] [Thread-211435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:22:35.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:22:35.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:22:35.743 [DEBUG] [Thread-211435] [transport.py] [_log()] userauth is OK
2026-02-15T21:22:35.744 [DEBUG] [Thread-211435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:22:35.744 [DEBUG] [Thread-211435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:22:35.744 [DEBUG] [Thread-211435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:22:35.744 [DEBUG] [Thread-211435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:22:35.763 [INFO] [Thread-211435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:22:35.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:22:35.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:22:36.580 [DEBUG] [Thread-211435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:22:36.580 [DEBUG] [Thread-211435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:22:36.628 [DEBUG] [Thread-211435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:22:36.628 [DEBUG] [Thread-211435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:22:36.636 [DEBUG] [Thread-211435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:22:36.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:22:36.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:22:36.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:22:36.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:22:36.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:22:36.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:22:36.668 [DEBUG] [Thread-211435] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:22:38.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:22:38.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:22:44.992 [DEBUG] [Thread-211437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:22:48.588 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:00.053 [DEBUG] [Thread-211438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:23:06.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:23:06.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:23:08.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 22, 53), 15.63, 34.7, 0.0, 27.77, 16.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:23:08.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:22:53
2026-02-15T21:23:09.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:23:09.440 [DEBUG] [Thread-211439] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-15T21:23:09.440 [DEBUG] [Thread-211439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:23:09.461 [DEBUG] [Thread-211439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:23:09.461 [INFO] [Thread-211439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] client lang: <none>
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] server lang: <none>
2026-02-15T21:23:09.465 [DEBUG] [Thread-211439] [transport.py] [_log()] kex follows: False
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] Compression: none
2026-02-15T21:23:09.466 [DEBUG] [Thread-211439] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:23:09.485 [DEBUG] [Thread-211439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:23:09.486 [DEBUG] [Thread-211439] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:23:09.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:23:09.487 [DEBUG] [Thread-211439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:23:09.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:23:09.489 [DEBUG] [Thread-211439] [transport.py] [_log()] userauth is OK
2026-02-15T21:23:09.489 [DEBUG] [Thread-211439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:23:09.489 [DEBUG] [Thread-211439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:23:09.489 [DEBUG] [Thread-211439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:23:09.490 [DEBUG] [Thread-211439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:23:09.508 [INFO] [Thread-211439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:23:09.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:23:10.314 [DEBUG] [Thread-211439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:23:10.314 [DEBUG] [Thread-211439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:23:10.315 [DEBUG] [Thread-211439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:23:10.355 [DEBUG] [Thread-211439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:23:10.356 [DEBUG] [Thread-211439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:23:10.359 [DEBUG] [Thread-211439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:23:10.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:23:10.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:23:10.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:23:10.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:23:10.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:23:10.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:23:10.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:23:10.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:23:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:23:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.807048 -999.00  +16.40  20.92     40   +2.80 1 1 1 1 1     0    0 13.70 11.17 ZNESW 21.1 20.9 159.8 29.2 16.6 -24.6 16.5 -23.8 16.3 -22.4 16.6 -23.9
2026-02-15T21:23:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:23:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:23:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.807048
2026-02-15T21:23:10.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:23:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:23:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:23:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:23:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:23:10.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:22:53', tmtdew=15.63, humidity=34.7, cloud=0.0, wind=27.77, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:22:53', seeing=1.94, atlas_timestamp='2026-02-15T19:22:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:19:00')
2026-02-15T21:23:10.387 [DEBUG] [Thread-211439] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:23:10.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:23:10.483 [DEBUG] [Thread-211442] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-15T21:23:10.483 [DEBUG] [Thread-211442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:23:10.497 [DEBUG] [Thread-211442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:23:10.498 [INFO] [Thread-211442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:23:10.508 [DEBUG] [Thread-211442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:23:10.508 [DEBUG] [Thread-211442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] client lang: <none>
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] server lang: <none>
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] kex follows: False
2026-02-15T21:23:10.509 [DEBUG] [Thread-211442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:23:10.510 [DEBUG] [Thread-211442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:23:10.510 [DEBUG] [Thread-211442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:23:10.510 [DEBUG] [Thread-211442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:23:10.510 [DEBUG] [Thread-211442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:23:10.510 [DEBUG] [Thread-211442] [transport.py] [_log()] Compression: none
2026-02-15T21:23:10.510 [DEBUG] [Thread-211442] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:23:10.567 [DEBUG] [Thread-211442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:23:10.568 [DEBUG] [Thread-211442] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:23:10.569 [DEBUG] [Thread-211442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:23:10.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:23:10.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:23:10.624 [DEBUG] [Thread-211442] [transport.py] [_log()] userauth is OK
2026-02-15T21:23:10.624 [DEBUG] [Thread-211442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:23:10.624 [DEBUG] [Thread-211442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:23:10.624 [DEBUG] [Thread-211442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:23:10.624 [DEBUG] [Thread-211442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:23:10.642 [INFO] [Thread-211442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:23:10.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:23:10.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:23:11.469 [DEBUG] [Thread-211442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:23:11.469 [DEBUG] [Thread-211442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:23:11.517 [DEBUG] [Thread-211442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:23:11.517 [DEBUG] [Thread-211442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:23:11.526 [DEBUG] [Thread-211442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:23:11.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:23:11.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21: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
2026-02-15T21:23:11.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:23:11.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:23:11.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:23:11.562 [DEBUG] [Thread-211442] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:23:15.083 [DEBUG] [Thread-211444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:24.746 [DEBUG] [Thread-211445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:30.137 [DEBUG] [Thread-211446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:38.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:38.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:23:41.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:23:41.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
2026-02-15T21:23:43.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 23, 28), 15.63, 34.7, 0.0, 27.05, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:23:43.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:23:28
2026-02-15T21:23:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:23:44.067 [DEBUG] [Thread-211447] [transport.py] [_log()] starting thread (client mode): 0xa2d6e200
2026-02-15T21:23:44.067 [DEBUG] [Thread-211447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:23:44.087 [DEBUG] [Thread-211447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:23:44.088 [INFO] [Thread-211447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:23:44.091 [DEBUG] [Thread-211447] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:23:44.091 [DEBUG] [Thread-211447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] client lang: <none>
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] server lang: <none>
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] kex follows: False
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:23:44.092 [DEBUG] [Thread-211447] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:23:44.093 [DEBUG] [Thread-211447] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:23:44.093 [DEBUG] [Thread-211447] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:23:44.093 [DEBUG] [Thread-211447] [transport.py] [_log()] Compression: none
2026-02-15T21:23:44.093 [DEBUG] [Thread-211447] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:23:44.107 [DEBUG] [Thread-211447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:23:44.108 [DEBUG] [Thread-211447] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:23:44.108 [DEBUG] [Thread-211447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:23:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:23:44.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:23:44.119 [DEBUG] [Thread-211447] [transport.py] [_log()] userauth is OK
2026-02-15T21:23:44.119 [DEBUG] [Thread-211447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:23:44.119 [DEBUG] [Thread-211447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:23:44.120 [DEBUG] [Thread-211447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:23:44.120 [DEBUG] [Thread-211447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:23:44.144 [INFO] [Thread-211447] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:23:44.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:23:44.780 [DEBUG] [Thread-211447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:23:44.780 [DEBUG] [Thread-211447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:23:44.781 [DEBUG] [Thread-211447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:23:44.821 [DEBUG] [Thread-211447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:23:44.822 [DEBUG] [Thread-211447] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:23:44.825 [DEBUG] [Thread-211447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:23:44.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:23:44.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:23:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:23:44.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:23:44.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:23:44.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:23:44.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:23:44.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:23:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:23:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.807395 -999.00  +16.30  20.56     40   +2.80 1 1 1 1 1     0    0 14.09 11.11 ZNESW 24.9 20.6 157.8 29.5 16.6 -24.6 16.5 -23.5 16.3 -22.5 16.6 -23.8
2026-02-15T21:23:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:23:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:23:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.807395
2026-02-15T21:23:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:23:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:23:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:23:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:23:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:23:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:23:28', tmtdew=15.63, humidity=34.7, cloud=0.0, wind=27.05, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:23:29', seeing=2.37, atlas_timestamp='2026-02-15T19:22:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:21:00')
2026-02-15T21:23:44.851 [DEBUG] [Thread-211447] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:23:44.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:23:44.947 [DEBUG] [Thread-211450] [transport.py] [_log()] starting thread (client mode): 0xa57421d0
2026-02-15T21:23:44.947 [DEBUG] [Thread-211450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:23:44.962 [DEBUG] [Thread-211450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:23:44.963 [INFO] [Thread-211450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:23:44.970 [DEBUG] [Thread-211450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] client lang: <none>
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] server lang: <none>
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] kex follows: False
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:23:44.971 [DEBUG] [Thread-211450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:23:44.972 [DEBUG] [Thread-211450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:23:44.972 [DEBUG] [Thread-211450] [transport.py] [_log()] Compression: none
2026-02-15T21:23:44.972 [DEBUG] [Thread-211450] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:23:45.028 [DEBUG] [Thread-211450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:23:45.028 [DEBUG] [Thread-211450] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:23:45.029 [DEBUG] [Thread-211450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:23:45.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:23:45.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:23:45.084 [DEBUG] [Thread-211450] [transport.py] [_log()] userauth is OK
2026-02-15T21:23:45.084 [DEBUG] [Thread-211450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:23:45.085 [DEBUG] [Thread-211450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:23:45.085 [DEBUG] [Thread-211450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:23:45.085 [DEBUG] [Thread-211450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:23:45.103 [INFO] [Thread-211450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:23:45.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:23:45.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:23:45.171 [DEBUG] [Thread-211452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:23:45.972 [DEBUG] [Thread-211450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:23:45.972 [DEBUG] [Thread-211450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:23:46.020 [DEBUG] [Thread-211450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:23:46.021 [DEBUG] [Thread-211450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:23:46.030 [DEBUG] [Thread-211450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:23:46.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:23:46.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:23:46.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-02-15T21:23:46.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:23:46.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:23:46.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:23:46.067 [DEBUG] [Thread-211450] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:24:00.233 [DEBUG] [Thread-211453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:15.270 [DEBUG] [Thread-211454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:16.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:24:16.089 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:24:16.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:24:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 24, 4), 15.64, 34.68, 0.0, 29.25, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:24:18.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:24:04
2026-02-15T21:24:18.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:24:18.997 [DEBUG] [Thread-211455] [transport.py] [_log()] starting thread (client mode): 0xa2d572b0
2026-02-15T21:24:18.997 [DEBUG] [Thread-211455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:24:19.016 [DEBUG] [Thread-211455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:24:19.016 [INFO] [Thread-211455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] client lang: <none>
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] server lang: <none>
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] kex follows: False
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] Compression: none
2026-02-15T21:24:19.019 [DEBUG] [Thread-211455] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:24:19.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:24:19.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] userauth is OK
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:24:19.032 [DEBUG] [Thread-211455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:24:19.041 [INFO] [Thread-211455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:24:19.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:24:19.642 [DEBUG] [Thread-211455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:24:19.642 [DEBUG] [Thread-211455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:24:19.643 [DEBUG] [Thread-211455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:24:19.684 [DEBUG] [Thread-211455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:24:19.685 [DEBUG] [Thread-211455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:24:19.688 [DEBUG] [Thread-211455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:24:19.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:24:19.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:24:19.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:24:19.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:24:19.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:24:19.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:24:19.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:24:19.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:24:19.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:24:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.808090 -999.00  +16.30  18.74     40   +2.80 1 1 1 1 1     0    0 13.78 10.10 ZNESW 23.2 18.7 141.4 28.6 16.6 -24.7 16.5 -23.7 16.3 -22.6 16.6 -23.8
2026-02-15T21:24:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:24:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:24:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.808090
2026-02-15T21:24:19.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:24:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:24:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:24:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:24:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:24:19.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:24:04', tmtdew=15.64, humidity=34.68, cloud=0.0, wind=29.25, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:24:04', seeing=1.93, atlas_timestamp='2026-02-15T19:23:38.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:21:00')
2026-02-15T21:24:19.719 [DEBUG] [Thread-211455] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:24:19.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:24:19.815 [DEBUG] [Thread-211458] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-15T21:24:19.815 [DEBUG] [Thread-211458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:24:19.829 [DEBUG] [Thread-211458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:24:19.829 [INFO] [Thread-211458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] client lang: <none>
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] server lang: <none>
2026-02-15T21:24:19.837 [DEBUG] [Thread-211458] [transport.py] [_log()] kex follows: False
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] Compression: none
2026-02-15T21:24:19.838 [DEBUG] [Thread-211458] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:24:19.896 [DEBUG] [Thread-211458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:24:19.897 [DEBUG] [Thread-211458] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:24:19.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:24:19.898 [DEBUG] [Thread-211458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:24:19.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:24:19.952 [DEBUG] [Thread-211458] [transport.py] [_log()] userauth is OK
2026-02-15T21:24:19.953 [DEBUG] [Thread-211458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:24:19.953 [DEBUG] [Thread-211458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:24:19.953 [DEBUG] [Thread-211458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:24:19.953 [DEBUG] [Thread-211458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:24:19.971 [INFO] [Thread-211458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:24:19.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:24:19.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:24:20.815 [DEBUG] [Thread-211458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:24:20.815 [DEBUG] [Thread-211458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:24:20.863 [DEBUG] [Thread-211458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:24:20.863 [DEBUG] [Thread-211458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:24:20.871 [DEBUG] [Thread-211458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:24:20.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:24:20.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:24:20.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:24:20.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:24:20.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:24:20.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:24:20.903 [DEBUG] [Thread-211458] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:24:22.575 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:24.802 [DEBUG] [Thread-211460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:30.305 [DEBUG] [Thread-211461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:38.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:38.832 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:45.375 [DEBUG] [Thread-211462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:24:50.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:24:50.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:24:50.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:24:52.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 24, 40), 15.75, 34.44, 0.0, 31.05, 16.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:24:52.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:24:40
2026-02-15T21:24:53.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:24:53.299 [DEBUG] [Thread-211463] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-15T21:24:53.299 [DEBUG] [Thread-211463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:24:53.320 [DEBUG] [Thread-211463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:24:53.320 [INFO] [Thread-211463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:24:53.323 [DEBUG] [Thread-211463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] client lang: <none>
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] server lang: <none>
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] kex follows: False
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] Compression: none
2026-02-15T21:24:53.324 [DEBUG] [Thread-211463] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:24:53.338 [DEBUG] [Thread-211463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:24:53.338 [DEBUG] [Thread-211463] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:24:53.338 [DEBUG] [Thread-211463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:24:53.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:24:53.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:24:53.339 [DEBUG] [Thread-211463] [transport.py] [_log()] userauth is OK
2026-02-15T21:24:53.339 [DEBUG] [Thread-211463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:24:53.339 [DEBUG] [Thread-211463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:24:53.339 [DEBUG] [Thread-211463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:24:53.339 [DEBUG] [Thread-211463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:24:53.349 [INFO] [Thread-211463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:24:53.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:24:53.980 [DEBUG] [Thread-211463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:24:53.980 [DEBUG] [Thread-211463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:24:53.981 [DEBUG] [Thread-211463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:24:54.021 [DEBUG] [Thread-211463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:24:54.022 [DEBUG] [Thread-211463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:24:54.025 [DEBUG] [Thread-211463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:24:54.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:24:54.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:24:54.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:24:54.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:24:54.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:24:54.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:24:54.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:24:54.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:24:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:24:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.808437 -999.00  +16.30  19.68     40   +2.80 1 1 1 1 1     0    0 14.04 9.40 ZNESW 24.1 19.7 146.4 31.5 16.6 -24.7 16.5 -23.5 16.3 -22.6 16.6 -23.9
2026-02-15T21:24:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:24:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:24:54.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.808437
2026-02-15T21:24:54.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:24:54.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:24:54.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:24:54.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:24:54.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:24:54.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:24:40', tmtdew=15.75, humidity=34.44, cloud=0.0, wind=31.05, temperature=16.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:24:40', seeing=2.83, atlas_timestamp='2026-02-15T19:24:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:21:00')
2026-02-15T21:24:54.052 [DEBUG] [Thread-211463] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:24:54.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:24:54.148 [DEBUG] [Thread-211466] [transport.py] [_log()] starting thread (client mode): 0xa2d56380
2026-02-15T21:24:54.148 [DEBUG] [Thread-211466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:24:54.163 [DEBUG] [Thread-211466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:24:54.164 [INFO] [Thread-211466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:54.171 [DEBUG] [Thread-211466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] client lang: <none>
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] server lang: <none>
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] kex follows: False
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] Compression: none
2026-02-15T21:24:54.172 [DEBUG] [Thread-211466] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:24:54.228 [DEBUG] [Thread-211466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:24:54.229 [DEBUG] [Thread-211466] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:24:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:24:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:24:54.231 [DEBUG] [Thread-211466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:24:54.284 [DEBUG] [Thread-211466] [transport.py] [_log()] userauth is OK
2026-02-15T21:24:54.285 [DEBUG] [Thread-211466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:24:54.285 [DEBUG] [Thread-211466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:24:54.285 [DEBUG] [Thread-211466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:24:54.285 [DEBUG] [Thread-211466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:24:54.303 [INFO] [Thread-211466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:24:54.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:24:54.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:24:55.112 [DEBUG] [Thread-211466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:24:55.112 [DEBUG] [Thread-211466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:24:55.160 [DEBUG] [Thread-211466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:24:55.161 [DEBUG] [Thread-211466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:24:55.170 [DEBUG] [Thread-211466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:24:55.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:24:55.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:24:55.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:24:55.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:24:55.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:24:55.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:24:55.206 [DEBUG] [Thread-211466] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:25:00.412 [DEBUG] [Thread-211468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:15.465 [DEBUG] [Thread-211469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:24.869 [DEBUG] [Thread-211470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:25:25.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:25:25.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:25:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 25, 15), 15.54, 34.78, 0.0, 33.01, 16.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:25:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:25:15
2026-02-15T21:25:27.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:25:27.579 [DEBUG] [Thread-211471] [transport.py] [_log()] starting thread (client mode): 0xa57e07f0
2026-02-15T21:25:27.579 [DEBUG] [Thread-211471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:25:27.579 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:27.600 [DEBUG] [Thread-211471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:25:27.600 [INFO] [Thread-211471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] client lang: <none>
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] server lang: <none>
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] kex follows: False
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] Compression: none
2026-02-15T21:25:27.604 [DEBUG] [Thread-211471] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:25:27.620 [DEBUG] [Thread-211471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:25:27.621 [DEBUG] [Thread-211471] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:25:27.621 [DEBUG] [Thread-211471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:25:27.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:25:27.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:25:27.622 [DEBUG] [Thread-211471] [transport.py] [_log()] userauth is OK
2026-02-15T21:25:27.622 [DEBUG] [Thread-211471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:25:27.622 [DEBUG] [Thread-211471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:25:27.622 [DEBUG] [Thread-211471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:25:27.622 [DEBUG] [Thread-211471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:25:27.638 [INFO] [Thread-211471] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:25:27.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:25:28.250 [DEBUG] [Thread-211471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:25:28.251 [DEBUG] [Thread-211471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:25:28.251 [DEBUG] [Thread-211471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:25:28.291 [DEBUG] [Thread-211471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:25:28.292 [DEBUG] [Thread-211471] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:25:28.295 [DEBUG] [Thread-211471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:25:28.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:25:28.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:25:28.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:25:28.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:25:28.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:25:28.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:25:28.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:25:28.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:25:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:25:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.808784 -999.00  +16.30  24.53     40   +2.80 1 1 1 1 1     0    0 14.05 9.01 ZNESW 20.8 24.5 155.2 31.7 16.6 -24.7 16.5 -23.5 16.2 -22.5 16.6 -23.7
2026-02-15T21:25:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:25:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:25:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.808784
2026-02-15T21:25:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:25:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:25:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:25:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:25:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:25:28.321 [DEBUG] [Thread-211471] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:25:28.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:25:15', tmtdew=15.54, humidity=34.78, cloud=0.0, wind=33.01, temperature=16.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:25:15', seeing=1.77, atlas_timestamp='2026-02-15T19:24:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:21:00')
2026-02-15T21:25:28.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:25:28.418 [DEBUG] [Thread-211474] [transport.py] [_log()] starting thread (client mode): 0xa2d12260
2026-02-15T21:25:28.419 [DEBUG] [Thread-211474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:25:28.437 [DEBUG] [Thread-211474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:25:28.437 [INFO] [Thread-211474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:25:28.448 [DEBUG] [Thread-211474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:25:28.448 [DEBUG] [Thread-211474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:25:28.448 [DEBUG] [Thread-211474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:25:28.448 [DEBUG] [Thread-211474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] client lang: <none>
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] server lang: <none>
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] kex follows: False
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] Compression: none
2026-02-15T21:25:28.449 [DEBUG] [Thread-211474] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:25:28.504 [DEBUG] [Thread-211474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:25:28.505 [DEBUG] [Thread-211474] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:25:28.506 [DEBUG] [Thread-211474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:25:28.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:25:28.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:25:28.561 [DEBUG] [Thread-211474] [transport.py] [_log()] userauth is OK
2026-02-15T21:25:28.562 [DEBUG] [Thread-211474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:25:28.562 [DEBUG] [Thread-211474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:25:28.562 [DEBUG] [Thread-211474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:25:28.562 [DEBUG] [Thread-211474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:25:28.580 [INFO] [Thread-211474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:25:28.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:25:28.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:25:29.453 [DEBUG] [Thread-211474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:25:29.453 [DEBUG] [Thread-211474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:25:29.505 [DEBUG] [Thread-211474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:25:29.505 [DEBUG] [Thread-211474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:25:29.514 [DEBUG] [Thread-211474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:25:29.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:25:29.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:25:29.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:25:29.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:25:29.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:25:29.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:25:29.560 [DEBUG] [Thread-211474] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:25:30.503 [DEBUG] [Thread-211476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:39.036 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:39.037 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:45.563 [DEBUG] [Thread-211477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:55.916 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:25:59.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:25:59.583 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:25:59.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:26:00.602 [DEBUG] [Thread-211478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:01.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 25, 50), 15.54, 34.82, 0.0, 26.71, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:26:01.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:25:50
2026-02-15T21:26:01.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:26:01.898 [DEBUG] [Thread-211479] [transport.py] [_log()] starting thread (client mode): 0xa2d54040
2026-02-15T21:26:01.898 [DEBUG] [Thread-211479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:26:01.918 [DEBUG] [Thread-211479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:26:01.919 [INFO] [Thread-211479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] client lang: <none>
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] server lang: <none>
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] kex follows: False
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:26:01.922 [DEBUG] [Thread-211479] [transport.py] [_log()] Compression: none
2026-02-15T21:26:01.923 [DEBUG] [Thread-211479] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:26:01.941 [DEBUG] [Thread-211479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:26:01.942 [DEBUG] [Thread-211479] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:26:01.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:26:01.943 [DEBUG] [Thread-211479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:26:01.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:26:01.946 [DEBUG] [Thread-211479] [transport.py] [_log()] userauth is OK
2026-02-15T21:26:01.946 [DEBUG] [Thread-211479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:26:01.946 [DEBUG] [Thread-211479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:26:01.946 [DEBUG] [Thread-211479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:26:01.946 [DEBUG] [Thread-211479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:26:01.964 [INFO] [Thread-211479] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:26:01.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:26:02.699 [DEBUG] [Thread-211479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:26:02.699 [DEBUG] [Thread-211479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:26:02.699 [DEBUG] [Thread-211479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:26:02.740 [DEBUG] [Thread-211479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:26:02.740 [DEBUG] [Thread-211479] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:26:02.742 [DEBUG] [Thread-211479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:26:02.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:26:02.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:26:02.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:26:02.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:26:02.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:26:02.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:26:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.809131 -999.00  +16.40  24.68     40   +2.90 1 1 1 1 1     0    0 13.34 7.18 ZNESW 21.8 24.7 154.8 30.7 16.6 -24.6 16.5 -23.5 16.3 -22.4 16.6 -23.6
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.809131
2026-02-15T21:26:02.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:26:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:26:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:26:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:26:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:26:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:25:50', tmtdew=15.54, humidity=34.82, cloud=0.0, wind=26.71, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:25:51', seeing=2.06, atlas_timestamp='2026-02-15T19:25:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020749999999999602, 0.004750000000001364, 0.019750000000000156, -0.007500000000000284, 0.02549999999999919, 0.024250000000000327, 0.03850000000000087, 0.010750000000001592, 0.013499999999998735, -0.0030000000000001137, -0.00975000000000037, -0.0015000000000000568, 0.07850000000000001, 0.051249999999999574, -0.03500000000000014, -0.008500000000001506, 0.051249999999999574, -0.005499999999999616, -0.01950000000000074, -0.0037500000000019185, 0.0625, 0.06574999999999953, -0.03774999999999906, -0.013249999999999318, 0.030999999999998806, 0.0730000000000004, 0.008750000000000924, -0.010500000000000398, 0.08699999999999974, 0.10000000000000142, -0.004999999999999005, -0.009999999999999787, 0.03974999999999973], zp_timestamp='2026-02-15T19:21:00')
2026-02-15T21:26:02.762 [DEBUG] [Thread-211479] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:26:02.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:26:02.846 [DEBUG] [Thread-211482] [transport.py] [_log()] starting thread (client mode): 0xa2d3e650
2026-02-15T21:26:02.846 [DEBUG] [Thread-211482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:26:02.861 [DEBUG] [Thread-211482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:26:02.861 [INFO] [Thread-211482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] client lang: <none>
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] server lang: <none>
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] kex follows: False
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] Compression: none
2026-02-15T21:26:02.869 [DEBUG] [Thread-211482] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:26:02.928 [DEBUG] [Thread-211482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:26:02.929 [DEBUG] [Thread-211482] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:26:02.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:26:02.930 [DEBUG] [Thread-211482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:26:02.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:26:02.985 [DEBUG] [Thread-211482] [transport.py] [_log()] userauth is OK
2026-02-15T21:26:02.985 [DEBUG] [Thread-211482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:26:02.985 [DEBUG] [Thread-211482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:26:02.985 [DEBUG] [Thread-211482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:26:02.985 [DEBUG] [Thread-211482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:26:03.008 [INFO] [Thread-211482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:26:03.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:26:03.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:26:03.851 [DEBUG] [Thread-211482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:26:03.851 [DEBUG] [Thread-211482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:26:03.900 [DEBUG] [Thread-211482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:26:03.901 [DEBUG] [Thread-211482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:26:03.910 [DEBUG] [Thread-211482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:26:03.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:26:03.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:26:03.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:26:03.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:26:03.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:26:03.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:26:03.947 [DEBUG] [Thread-211482] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:26:15.634 [DEBUG] [Thread-211484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:24.953 [DEBUG] [Thread-211485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:30.696 [DEBUG] [Thread-211486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:33.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:26:33.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:26:33.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:26:34.108 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 26, 26), 15.54, 34.78, 0.0, 28.25, 16.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:26:36.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:26:26
2026-02-15T21:26:36.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:26:36.931 [DEBUG] [Thread-211487] [transport.py] [_log()] starting thread (client mode): 0xa57b1630
2026-02-15T21:26:36.931 [DEBUG] [Thread-211487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:26:36.952 [DEBUG] [Thread-211487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:26:36.952 [INFO] [Thread-211487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:36.955 [DEBUG] [Thread-211487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] client lang: <none>
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] server lang: <none>
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] kex follows: False
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] Compression: none
2026-02-15T21:26:36.956 [DEBUG] [Thread-211487] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:26:36.975 [DEBUG] [Thread-211487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:26:36.976 [DEBUG] [Thread-211487] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:26:36.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:26:36.977 [DEBUG] [Thread-211487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:26:36.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:26:36.979 [DEBUG] [Thread-211487] [transport.py] [_log()] userauth is OK
2026-02-15T21:26:36.979 [DEBUG] [Thread-211487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:26:36.979 [DEBUG] [Thread-211487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:26:36.979 [DEBUG] [Thread-211487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:26:36.979 [DEBUG] [Thread-211487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:26:37.004 [INFO] [Thread-211487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:26:37.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:26:37.267 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:37.632 [DEBUG] [Thread-211487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:26:37.633 [DEBUG] [Thread-211487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:26:37.633 [DEBUG] [Thread-211487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:26:37.673 [DEBUG] [Thread-211487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:26:37.673 [DEBUG] [Thread-211487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:26:37.677 [DEBUG] [Thread-211487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:26:37.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:26:37.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:26:37.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:26:37.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:26:37.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:26:37.702 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:26:37.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:26:37.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:26:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:26:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.809478 -999.00  +16.40  23.36     40   +2.80 1 1 1 1 1     0    0 13.81 7.82 ZNESW 16.4 23.4 144.6 32.7 16.6 -24.7 16.5 -23.6 16.3 -22.5 16.6 -23.6
2026-02-15T21:26:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:26:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:26:37.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.809478
2026-02-15T21:26:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:26:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:26:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:26:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:26:37.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:26:37.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:26:26', tmtdew=15.54, humidity=34.78, cloud=0.0, wind=28.25, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:26:26', seeing=1.63, atlas_timestamp='2026-02-15T19:25:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:25:00')
2026-02-15T21:26:37.705 [DEBUG] [Thread-211487] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:26:37.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:26:37.804 [DEBUG] [Thread-211490] [transport.py] [_log()] starting thread (client mode): 0xa2d78130
2026-02-15T21:26:37.804 [DEBUG] [Thread-211490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:26:37.819 [DEBUG] [Thread-211490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:26:37.819 [INFO] [Thread-211490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:26:37.827 [DEBUG] [Thread-211490] [transport.py] [_log()] client lang: <none>
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] server lang: <none>
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] kex follows: False
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] Compression: none
2026-02-15T21:26:37.828 [DEBUG] [Thread-211490] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:26:37.885 [DEBUG] [Thread-211490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:26:37.886 [DEBUG] [Thread-211490] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:26:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:26:37.887 [DEBUG] [Thread-211490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:26:37.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:26:37.945 [DEBUG] [Thread-211490] [transport.py] [_log()] userauth is OK
2026-02-15T21:26:37.945 [DEBUG] [Thread-211490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:26:37.945 [DEBUG] [Thread-211490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:26:37.945 [DEBUG] [Thread-211490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:26:37.945 [DEBUG] [Thread-211490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:26:37.965 [INFO] [Thread-211490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:26:37.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:26:37.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:26:38.794 [DEBUG] [Thread-211490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:26:38.794 [DEBUG] [Thread-211490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:26:38.844 [DEBUG] [Thread-211490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:26:38.845 [DEBUG] [Thread-211490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:26:38.856 [DEBUG] [Thread-211490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:26:38.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:26:38.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:26:38.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:26:38.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:26:38.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:26:38.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:26:38.904 [DEBUG] [Thread-211490] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:26:39.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:39.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:42.335 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:45.733 [DEBUG] [Thread-211492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:26:48.712 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:00.796 [DEBUG] [Thread-211493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:07.167 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:08.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:27:08.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:27:08.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:27:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 26, 26), 15.54, 34.78, 0.0, 28.25, 16.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:27:11.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:26:26
2026-02-15T21:27:11.525 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:11.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:27:12.124 [DEBUG] [Thread-211494] [transport.py] [_log()] starting thread (client mode): 0xa2db75b0
2026-02-15T21:27:12.124 [DEBUG] [Thread-211494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:27:12.143 [DEBUG] [Thread-211494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:27:12.143 [INFO] [Thread-211494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] client lang: <none>
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] server lang: <none>
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] kex follows: False
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] Compression: none
2026-02-15T21:27:12.146 [DEBUG] [Thread-211494] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:27:12.162 [DEBUG] [Thread-211494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:27:12.163 [DEBUG] [Thread-211494] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:27:12.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:27:12.164 [DEBUG] [Thread-211494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:27:12.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:27:12.166 [DEBUG] [Thread-211494] [transport.py] [_log()] userauth is OK
2026-02-15T21:27:12.166 [DEBUG] [Thread-211494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:27:12.166 [DEBUG] [Thread-211494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:27:12.166 [DEBUG] [Thread-211494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:27:12.166 [DEBUG] [Thread-211494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:27:12.190 [INFO] [Thread-211494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:27:12.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:27:12.857 [DEBUG] [Thread-211494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:27:12.857 [DEBUG] [Thread-211494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:27:12.857 [DEBUG] [Thread-211494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:27:12.898 [DEBUG] [Thread-211494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:27:12.898 [DEBUG] [Thread-211494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:27:12.900 [DEBUG] [Thread-211494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:27:12.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:27:12.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:27:12.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:27:12.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:27:12.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:27:12.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:27:12.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.809826 -999.00  +16.30  23.91     40   +2.80 1 1 1 1 1     0    0 13.74 6.47 ZNESW 23.9 23.9 150.8 33.3 16.6 -24.8 16.5 -23.6 16.2 -22.5 16.6 -23.8
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.809826
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:27:12.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:26:26', tmtdew=15.54, humidity=34.78, cloud=0.0, wind=28.25, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:27:04', seeing=1.68, atlas_timestamp='2026-02-15T19:26:08.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:25:00')
2026-02-15T21:27:12.919 [DEBUG] [Thread-211494] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:27:13.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:27:13.013 [DEBUG] [Thread-211497] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc70
2026-02-15T21:27:13.013 [DEBUG] [Thread-211497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:27:13.032 [DEBUG] [Thread-211497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:27:13.032 [INFO] [Thread-211497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] client lang: <none>
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] server lang: <none>
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] kex follows: False
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] Compression: none
2026-02-15T21:27:13.039 [DEBUG] [Thread-211497] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:27:13.100 [DEBUG] [Thread-211497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:27:13.100 [DEBUG] [Thread-211497] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:27:13.101 [DEBUG] [Thread-211497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:27:13.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:27:13.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:27:13.157 [DEBUG] [Thread-211497] [transport.py] [_log()] userauth is OK
2026-02-15T21:27:13.157 [DEBUG] [Thread-211497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:27:13.158 [DEBUG] [Thread-211497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:27:13.158 [DEBUG] [Thread-211497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:27:13.158 [DEBUG] [Thread-211497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:27:13.176 [INFO] [Thread-211497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:27:13.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:27:13.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:27:14.035 [DEBUG] [Thread-211497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:27:14.035 [DEBUG] [Thread-211497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:27:14.082 [DEBUG] [Thread-211497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:27:14.082 [DEBUG] [Thread-211497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:27:14.091 [DEBUG] [Thread-211497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:27:14.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:27:14.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:27:14.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:27:14.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:27:14.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:27:14.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:27:14.122 [DEBUG] [Thread-211497] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:27:15.834 [DEBUG] [Thread-211499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:20.948 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:25.019 [DEBUG] [Thread-211500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:25.325 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:29.715 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:30.884 [DEBUG] [Thread-211501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:31.463 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:35.856 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:39.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:39.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:44.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:27:44.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:27:44.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:27:45.916 [DEBUG] [Thread-211502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:46.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 27, 3), 15.5, 34.9, 0.0, 29.68, 16.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:27:46.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:27:03
2026-02-15T21:27:46.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:27:46.727 [DEBUG] [Thread-211503] [transport.py] [_log()] starting thread (client mode): 0xa2d79480
2026-02-15T21:27:46.727 [DEBUG] [Thread-211503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:27:46.749 [DEBUG] [Thread-211503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:27:46.750 [INFO] [Thread-211503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:27:46.753 [DEBUG] [Thread-211503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:27:46.753 [DEBUG] [Thread-211503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:27:46.753 [DEBUG] [Thread-211503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:27:46.753 [DEBUG] [Thread-211503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:46.753 [DEBUG] [Thread-211503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] client lang: <none>
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] server lang: <none>
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] kex follows: False
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:27:46.754 [DEBUG] [Thread-211503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:27:46.755 [DEBUG] [Thread-211503] [transport.py] [_log()] Compression: none
2026-02-15T21:27:46.755 [DEBUG] [Thread-211503] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:27:46.774 [DEBUG] [Thread-211503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:27:46.775 [DEBUG] [Thread-211503] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:27:46.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:27:46.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:27:46.777 [DEBUG] [Thread-211503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:27:46.778 [DEBUG] [Thread-211503] [transport.py] [_log()] userauth is OK
2026-02-15T21:27:46.778 [DEBUG] [Thread-211503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:27:46.778 [DEBUG] [Thread-211503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:27:46.778 [DEBUG] [Thread-211503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:27:46.778 [DEBUG] [Thread-211503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:27:46.795 [INFO] [Thread-211503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:27:46.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:27:47.452 [DEBUG] [Thread-211503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:27:47.452 [DEBUG] [Thread-211503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:27:47.453 [DEBUG] [Thread-211503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:27:47.493 [DEBUG] [Thread-211503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:27:47.494 [DEBUG] [Thread-211503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:27:47.497 [DEBUG] [Thread-211503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:27:47.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:27:47.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:27:47.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:27:47.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:27:47.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:27:47.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:27:47.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:27:47.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:27:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:27:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.810520 -999.00  +16.30  23.66     40   +2.90 1 1 1 1 1     0    0 13.83 4.59 ZNESW 22.5 23.7 140.6 29.9 16.6 -24.7 16.4 -23.7 16.2 -22.4 16.6 -23.7
2026-02-15T21:27:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:27:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:27:47.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.810520
2026-02-15T21:27:47.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:27:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:27:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:27:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:27:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:27:47.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:27:03', tmtdew=15.5, humidity=34.9, cloud=0.0, wind=29.68, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:27:40', seeing=1.73, atlas_timestamp='2026-02-15T19:27:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:25:00')
2026-02-15T21:27:47.519 [DEBUG] [Thread-211503] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:27:47.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:27:47.614 [DEBUG] [Thread-211506] [transport.py] [_log()] starting thread (client mode): 0xa2d11c90
2026-02-15T21:27:47.615 [DEBUG] [Thread-211506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:27:47.629 [DEBUG] [Thread-211506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:27:47.629 [INFO] [Thread-211506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] client lang: <none>
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] server lang: <none>
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] kex follows: False
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:27:47.637 [DEBUG] [Thread-211506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:27:47.638 [DEBUG] [Thread-211506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:27:47.638 [DEBUG] [Thread-211506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:27:47.638 [DEBUG] [Thread-211506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:27:47.638 [DEBUG] [Thread-211506] [transport.py] [_log()] Compression: none
2026-02-15T21:27:47.638 [DEBUG] [Thread-211506] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:27:47.698 [DEBUG] [Thread-211506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:27:47.698 [DEBUG] [Thread-211506] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:27:47.699 [DEBUG] [Thread-211506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:27:47.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:27:47.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:27:47.754 [DEBUG] [Thread-211506] [transport.py] [_log()] userauth is OK
2026-02-15T21:27:47.754 [DEBUG] [Thread-211506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:27:47.754 [DEBUG] [Thread-211506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:27:47.754 [DEBUG] [Thread-211506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:27:47.754 [DEBUG] [Thread-211506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:27:47.772 [INFO] [Thread-211506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:27:47.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:27:47.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:27:48.630 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:27:48.664 [DEBUG] [Thread-211506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:27:48.665 [DEBUG] [Thread-211506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:27:48.712 [DEBUG] [Thread-211506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:27:48.713 [DEBUG] [Thread-211506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:27:48.723 [DEBUG] [Thread-211506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:27:48.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:27:48.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:27:48.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:27:48.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:27:48.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:27:48.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:27:48.761 [DEBUG] [Thread-211506] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:27:52.754 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:00.952 [DEBUG] [Thread-211508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:16.005 [DEBUG] [Thread-211509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:18.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:28:18.782 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:28:18.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:28:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 27, 40), 15.5, 35.03, 0.0, 33.73, 16.65, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:28:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:27:40
2026-02-15T21:28:21.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:28:21.658 [DEBUG] [Thread-211510] [transport.py] [_log()] starting thread (client mode): 0xa2d11630
2026-02-15T21:28:21.658 [DEBUG] [Thread-211510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:28:21.678 [DEBUG] [Thread-211510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:28:21.678 [INFO] [Thread-211510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:28:21.681 [DEBUG] [Thread-211510] [transport.py] [_log()] client lang: <none>
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] server lang: <none>
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] kex follows: False
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] Compression: none
2026-02-15T21:28:21.682 [DEBUG] [Thread-211510] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:28:21.690 [DEBUG] [Thread-211510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:28:21.691 [DEBUG] [Thread-211510] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:28:21.691 [DEBUG] [Thread-211510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:28:21.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:28:21.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:28:21.693 [DEBUG] [Thread-211510] [transport.py] [_log()] userauth is OK
2026-02-15T21:28:21.693 [DEBUG] [Thread-211510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:28:21.693 [DEBUG] [Thread-211510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:28:21.694 [DEBUG] [Thread-211510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:28:21.694 [DEBUG] [Thread-211510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:28:21.730 [INFO] [Thread-211510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:28:21.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:28:22.378 [DEBUG] [Thread-211510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:28:22.378 [DEBUG] [Thread-211510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:28:22.378 [DEBUG] [Thread-211510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:28:22.419 [DEBUG] [Thread-211510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:28:22.419 [DEBUG] [Thread-211510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:28:22.422 [DEBUG] [Thread-211510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:28:22.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:28:22.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:28:22.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:28:22.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:28:22.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:28:22.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:28:22.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:28:22.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:28:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:28:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.810867 -999.00  +16.30  22.15     40   +2.90 1 1 1 1 1     0    0 13.49 3.38 ZNESW 21.6 22.1 156.8 28.8 16.6 -24.7 16.4 -23.6 16.3 -22.5 16.6 -23.7
2026-02-15T21:28:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:28:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:28:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.810867
2026-02-15T21:28:22.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:28:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:28:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:28:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:28:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:28:22.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:27:40', tmtdew=15.5, humidity=35.03, cloud=0.0, wind=33.73, temperature=16.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:28:16', seeing=1.73, atlas_timestamp='2026-02-15T19:27:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:25:00')
2026-02-15T21:28:22.446 [DEBUG] [Thread-211510] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:28:22.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:28:22.541 [DEBUG] [Thread-211513] [transport.py] [_log()] starting thread (client mode): 0xa2d3fc10
2026-02-15T21:28:22.541 [DEBUG] [Thread-211513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:28:22.555 [DEBUG] [Thread-211513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:28:22.555 [INFO] [Thread-211513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] client lang: <none>
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] server lang: <none>
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] kex follows: False
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:28:22.563 [DEBUG] [Thread-211513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:28:22.564 [DEBUG] [Thread-211513] [transport.py] [_log()] Compression: none
2026-02-15T21:28:22.564 [DEBUG] [Thread-211513] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:28:22.622 [DEBUG] [Thread-211513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:28:22.623 [DEBUG] [Thread-211513] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:28:22.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:28:22.624 [DEBUG] [Thread-211513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:28:22.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:28:22.679 [DEBUG] [Thread-211513] [transport.py] [_log()] userauth is OK
2026-02-15T21:28:22.679 [DEBUG] [Thread-211513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:28:22.679 [DEBUG] [Thread-211513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:28:22.679 [DEBUG] [Thread-211513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:28:22.679 [DEBUG] [Thread-211513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:28:22.697 [INFO] [Thread-211513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:28:22.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:28:22.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:28:23.505 [DEBUG] [Thread-211513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:28:23.505 [DEBUG] [Thread-211513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:28:23.553 [DEBUG] [Thread-211513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:28:23.553 [DEBUG] [Thread-211513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:28:23.563 [DEBUG] [Thread-211513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:28:23.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:28:23.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:28:23.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:28:23.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:28:23.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:28:23.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:28:23.600 [DEBUG] [Thread-211513] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:28:25.101 [DEBUG] [Thread-211515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:31.039 [DEBUG] [Thread-211516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:39.644 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:39.645 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:46.100 [DEBUG] [Thread-211517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:28:53.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:28:53.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:28:53.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:28:56.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 28, 16), 15.43, 34.95, 0.0, 30.81, 16.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:28:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:28:16
2026-02-15T21:28:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:28:56.674 [DEBUG] [Thread-211518] [transport.py] [_log()] starting thread (client mode): 0xa2d78400
2026-02-15T21:28:56.674 [DEBUG] [Thread-211518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:28:56.695 [DEBUG] [Thread-211518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:28:56.695 [INFO] [Thread-211518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:28:56.698 [DEBUG] [Thread-211518] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:28:56.698 [DEBUG] [Thread-211518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:28:56.698 [DEBUG] [Thread-211518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:28:56.698 [DEBUG] [Thread-211518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:56.698 [DEBUG] [Thread-211518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] client lang: <none>
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] server lang: <none>
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] kex follows: False
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] Compression: none
2026-02-15T21:28:56.699 [DEBUG] [Thread-211518] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:28:56.716 [DEBUG] [Thread-211518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:28:56.716 [DEBUG] [Thread-211518] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:28:56.717 [DEBUG] [Thread-211518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:28:56.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:28:56.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:28:56.719 [DEBUG] [Thread-211518] [transport.py] [_log()] userauth is OK
2026-02-15T21:28:56.719 [DEBUG] [Thread-211518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:28:56.719 [DEBUG] [Thread-211518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:28:56.719 [DEBUG] [Thread-211518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:28:56.719 [DEBUG] [Thread-211518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:28:56.738 [INFO] [Thread-211518] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:28:56.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:28:57.503 [DEBUG] [Thread-211518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:28:57.503 [DEBUG] [Thread-211518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:28:57.503 [DEBUG] [Thread-211518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:28:57.544 [DEBUG] [Thread-211518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:28:57.545 [DEBUG] [Thread-211518] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:28:57.548 [DEBUG] [Thread-211518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:28:57.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:28:57.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:28:57.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:28:57.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:28:57.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:28:57.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:28:57.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:28:57.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:28:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:28:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.811215 -999.00  +16.30  23.42     40   +2.90 1 1 1 1 1     0    0 13.48 2.15 ZNESW 20.7 23.4 139.6 33.0 16.6 -24.7 16.4 -23.6 16.2 -22.5 16.6 -23.8
2026-02-15T21:28:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:28:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:28:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.811215
2026-02-15T21:28:57.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:28:57.570 [DEBUG] [Thread-211518] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:28:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:28:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:28:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:28:57.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:28:57.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:28:16', tmtdew=15.43, humidity=34.95, cloud=0.0, wind=30.81, temperature=16.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:28:52', seeing=1.81, atlas_timestamp='2026-02-15T19:28:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:25:00')
2026-02-15T21:28:57.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:28:57.678 [DEBUG] [Thread-211521] [transport.py] [_log()] starting thread (client mode): 0xa2d3c7c0
2026-02-15T21:28:57.678 [DEBUG] [Thread-211521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:28:57.692 [DEBUG] [Thread-211521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:28:57.693 [INFO] [Thread-211521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:28:57.700 [DEBUG] [Thread-211521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:28:57.700 [DEBUG] [Thread-211521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:28:57.700 [DEBUG] [Thread-211521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:28:57.700 [DEBUG] [Thread-211521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] client lang: <none>
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] server lang: <none>
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] kex follows: False
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] Compression: none
2026-02-15T21:28:57.701 [DEBUG] [Thread-211521] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:28:57.756 [DEBUG] [Thread-211521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:28:57.756 [DEBUG] [Thread-211521] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:28:57.756 [DEBUG] [Thread-211521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:28:57.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:28:57.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:28:57.813 [DEBUG] [Thread-211521] [transport.py] [_log()] userauth is OK
2026-02-15T21:28:57.814 [DEBUG] [Thread-211521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:28:57.814 [DEBUG] [Thread-211521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:28:57.814 [DEBUG] [Thread-211521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:28:57.814 [DEBUG] [Thread-211521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:28:57.832 [INFO] [Thread-211521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:28:57.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:28:57.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:28:58.661 [DEBUG] [Thread-211521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:28:58.662 [DEBUG] [Thread-211521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:28:58.709 [DEBUG] [Thread-211521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:28:58.709 [DEBUG] [Thread-211521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:28:58.719 [DEBUG] [Thread-211521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:28:58.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:28:58.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:28:58.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:28:58.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:28:58.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:28:58.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:28:58.754 [DEBUG] [Thread-211521] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:29:01.140 [DEBUG] [Thread-211523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:03.289 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:16.190 [DEBUG] [Thread-211524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:25.156 [DEBUG] [Thread-211525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:28.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:29:28.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:29: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
2026-02-15T21:29:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 28, 51), 15.42, 35.47, 0.0, 27.51, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:29:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:28:51
2026-02-15T21:29:31.222 [DEBUG] [Thread-211526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:31.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:29:31.771 [DEBUG] [Thread-211527] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-15T21:29:31.771 [DEBUG] [Thread-211527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:29:31.790 [DEBUG] [Thread-211527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:29:31.790 [INFO] [Thread-211527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] client lang: <none>
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] server lang: <none>
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] kex follows: False
2026-02-15T21:29:31.793 [DEBUG] [Thread-211527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:29:31.794 [DEBUG] [Thread-211527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:29:31.794 [DEBUG] [Thread-211527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:29:31.794 [DEBUG] [Thread-211527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:29:31.794 [DEBUG] [Thread-211527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:29:31.794 [DEBUG] [Thread-211527] [transport.py] [_log()] Compression: none
2026-02-15T21:29:31.794 [DEBUG] [Thread-211527] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:29:31.809 [DEBUG] [Thread-211527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:29:31.810 [DEBUG] [Thread-211527] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:29:31.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:29:31.811 [DEBUG] [Thread-211527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:29:31.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:29:31.813 [DEBUG] [Thread-211527] [transport.py] [_log()] userauth is OK
2026-02-15T21:29:31.813 [DEBUG] [Thread-211527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:29:31.813 [DEBUG] [Thread-211527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:29:31.813 [DEBUG] [Thread-211527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:29:31.813 [DEBUG] [Thread-211527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:29:31.837 [INFO] [Thread-211527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:29:31.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:29:32.482 [DEBUG] [Thread-211527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:29:32.482 [DEBUG] [Thread-211527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:29:32.482 [DEBUG] [Thread-211527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:29:32.522 [DEBUG] [Thread-211527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:29:32.522 [DEBUG] [Thread-211527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:29:32.525 [DEBUG] [Thread-211527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:29:32.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:29:32.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:29:32.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:29:32.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:29:32.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:29:32.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:29:32.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:29:32.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:29:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:29:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.811562 -999.00  +16.30  22.59     40   +2.90 1 1 1 1 1     0    0 13.54 0.58 ZNESW 22.3 22.6 146.4 29.6 16.6 -24.6 16.4 -23.6 16.3 -22.6 16.5 -23.8
2026-02-15T21:29:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:29:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:29:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.811562
2026-02-15T21:29:32.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:29:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:29:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:29:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:29:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:29:32.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:28:51', tmtdew=15.42, humidity=35.47, cloud=0.0, wind=27.51, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:29:28', seeing=2.02, atlas_timestamp='2026-02-15T19:28:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:28:00')
2026-02-15T21:29:32.551 [DEBUG] [Thread-211527] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:29:32.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:29:32.643 [DEBUG] [Thread-211530] [transport.py] [_log()] starting thread (client mode): 0xa2d6dd80
2026-02-15T21:29:32.644 [DEBUG] [Thread-211530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:29:32.658 [DEBUG] [Thread-211530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:29:32.658 [INFO] [Thread-211530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:29:32.665 [DEBUG] [Thread-211530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:29:32.665 [DEBUG] [Thread-211530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] client lang: <none>
2026-02-15T21:29:32.666 [DEBUG] [Thread-211530] [transport.py] [_log()] server lang: <none>
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] kex follows: False
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] Compression: none
2026-02-15T21:29:32.667 [DEBUG] [Thread-211530] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:29:32.727 [DEBUG] [Thread-211530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:29:32.727 [DEBUG] [Thread-211530] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:29:32.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:29:32.728 [DEBUG] [Thread-211530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:29:32.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:29:32.785 [DEBUG] [Thread-211530] [transport.py] [_log()] userauth is OK
2026-02-15T21:29:32.785 [DEBUG] [Thread-211530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:29:32.786 [DEBUG] [Thread-211530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:29:32.786 [DEBUG] [Thread-211530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:29:32.786 [DEBUG] [Thread-211530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:29:32.804 [INFO] [Thread-211530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:29:32.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:29:32.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:29:33.626 [DEBUG] [Thread-211530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:29:33.626 [DEBUG] [Thread-211530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:29:33.674 [DEBUG] [Thread-211530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:29:33.675 [DEBUG] [Thread-211530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:29:33.684 [DEBUG] [Thread-211530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:29:33.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:29:33.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:29:33.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:29:33.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:29:33.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:29:33.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:29:33.726 [DEBUG] [Thread-211530] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:29:39.846 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:39.848 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:29:46.260 [DEBUG] [Thread-211532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:01.311 [DEBUG] [Thread-211533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:03.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:30:03.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:30:03.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:30:05.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 29, 27), 15.4, 35.52, 0.0, 28.88, 16.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:30:05.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:29:27
2026-02-15T21:30:06.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:30:06.522 [DEBUG] [Thread-211534] [transport.py] [_log()] starting thread (client mode): 0xa2d78160
2026-02-15T21:30:06.522 [DEBUG] [Thread-211534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:30:06.545 [DEBUG] [Thread-211534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:30:06.546 [INFO] [Thread-211534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:30:06.549 [DEBUG] [Thread-211534] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:30:06.549 [DEBUG] [Thread-211534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:30:06.549 [DEBUG] [Thread-211534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:30:06.549 [DEBUG] [Thread-211534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] client lang: <none>
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] server lang: <none>
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] kex follows: False
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] Compression: none
2026-02-15T21:30:06.550 [DEBUG] [Thread-211534] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:30:06.561 [DEBUG] [Thread-211534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:30:06.562 [DEBUG] [Thread-211534] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:30:06.562 [DEBUG] [Thread-211534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:30:06.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:30:06.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:30:06.564 [DEBUG] [Thread-211534] [transport.py] [_log()] userauth is OK
2026-02-15T21:30:06.564 [DEBUG] [Thread-211534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:30:06.565 [DEBUG] [Thread-211534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:30:06.565 [DEBUG] [Thread-211534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:30:06.565 [DEBUG] [Thread-211534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:30:06.589 [INFO] [Thread-211534] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:30:06.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:30:14.110 [DEBUG] [Thread-211534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:30:14.110 [DEBUG] [Thread-211534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:30:14.111 [DEBUG] [Thread-211534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:30:14.151 [DEBUG] [Thread-211534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:30:14.152 [DEBUG] [Thread-211534] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:30:14.155 [DEBUG] [Thread-211534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:30:14.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:30:14.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:30:14.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:30:14.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:30:14.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:30:14.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:30:14.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:30:14.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:30:14.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:30:14.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.811909 -999.00  +16.30  24.00     40   +2.90 1 1 1 1 1     0    0 13.51 -0.99 ZNESW 21.7 24.0 157.2 30.5 16.6 -24.8 16.5 -23.7 16.3 -22.6 16.6 -23.8
2026-02-15T21:30:14.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:30:14.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:30:14.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.811909
2026-02-15T21:30:14.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:30:14.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:30:14.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:30:14.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:30:14.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:30:14.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:29:27', tmtdew=15.4, humidity=35.52, cloud=0.0, wind=28.88, temperature=16.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:29:28', seeing=2.02, atlas_timestamp='2026-02-15T19:29:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:28:00')
2026-02-15T21:30:14.180 [DEBUG] [Thread-211534] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:30:14.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:30:14.277 [DEBUG] [Thread-211537] [transport.py] [_log()] starting thread (client mode): 0xa2d6c4f0
2026-02-15T21:30:14.277 [DEBUG] [Thread-211537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:30:14.292 [DEBUG] [Thread-211537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:30:14.292 [INFO] [Thread-211537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:30:14.300 [DEBUG] [Thread-211537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:30:14.300 [DEBUG] [Thread-211537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] client lang: <none>
2026-02-15T21:30:14.301 [DEBUG] [Thread-211537] [transport.py] [_log()] server lang: <none>
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] kex follows: False
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] Compression: none
2026-02-15T21:30:14.302 [DEBUG] [Thread-211537] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:30:14.358 [DEBUG] [Thread-211537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:30:14.359 [DEBUG] [Thread-211537] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:30:14.360 [DEBUG] [Thread-211537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:30:14.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:30:14.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:30:14.414 [DEBUG] [Thread-211537] [transport.py] [_log()] userauth is OK
2026-02-15T21:30:14.415 [DEBUG] [Thread-211537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:30:14.415 [DEBUG] [Thread-211537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:30:14.415 [DEBUG] [Thread-211537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:30:14.415 [DEBUG] [Thread-211537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:30:14.436 [INFO] [Thread-211537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:30:14.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:30:14.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:30:15.269 [DEBUG] [Thread-211537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:30:15.269 [DEBUG] [Thread-211537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:30:15.317 [DEBUG] [Thread-211537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:30:15.318 [DEBUG] [Thread-211537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:30:15.326 [DEBUG] [Thread-211537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:30:15.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:30:15.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:30:15.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:30:15.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:30:15.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:30:15.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:30:15.361 [DEBUG] [Thread-211537] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:30:16.344 [DEBUG] [Thread-211539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:25.224 [DEBUG] [Thread-211540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:31.401 [DEBUG] [Thread-211541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:37.261 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:40.063 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:40.064 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:30:45.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:30:45.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:30:46.438 [DEBUG] [Thread-211542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:30:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 30, 3), 15.42, 35.47, 0.0, 25.46, 16.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:30:47.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:30:03
2026-02-15T21:30:48.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:30:48.405 [DEBUG] [Thread-211543] [transport.py] [_log()] starting thread (client mode): 0xa2d554e0
2026-02-15T21:30:48.406 [DEBUG] [Thread-211543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:30:48.424 [DEBUG] [Thread-211543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:30:48.424 [INFO] [Thread-211543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] client lang: <none>
2026-02-15T21:30:48.428 [DEBUG] [Thread-211543] [transport.py] [_log()] server lang: <none>
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] kex follows: False
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] Compression: none
2026-02-15T21:30:48.429 [DEBUG] [Thread-211543] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:30:48.447 [DEBUG] [Thread-211543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:30:48.447 [DEBUG] [Thread-211543] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:30:48.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:30:48.449 [DEBUG] [Thread-211543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:30:48.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:30:48.450 [DEBUG] [Thread-211543] [transport.py] [_log()] userauth is OK
2026-02-15T21:30:48.451 [DEBUG] [Thread-211543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:30:48.451 [DEBUG] [Thread-211543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:30:48.451 [DEBUG] [Thread-211543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:30:48.451 [DEBUG] [Thread-211543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:30:48.475 [INFO] [Thread-211543] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:30:48.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:30:49.108 [DEBUG] [Thread-211543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:30:49.108 [DEBUG] [Thread-211543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:30:49.108 [DEBUG] [Thread-211543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:30:49.149 [DEBUG] [Thread-211543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:30:49.150 [DEBUG] [Thread-211543] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:30:49.153 [DEBUG] [Thread-211543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:30:49.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:30:49.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:30:49.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:30:49.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:30:49.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:30:49.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:30:49.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:30:49.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:30:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:30:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.812256 -999.00  +16.30  17.81     40   +2.90 1 1 1 1 1     0    0 13.45 -2.26 ZNESW 16.5 17.8 148.6 29.7 16.6 -24.8 16.5 -23.6 16.3 -22.7 16.6 -23.9
2026-02-15T21:30:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:30:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:30:49.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.812256
2026-02-15T21:30:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:30:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:30:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:30:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:30:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:30:49.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:30:03', tmtdew=15.42, humidity=35.47, cloud=0.0, wind=25.46, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:30:39', seeing=1.64, atlas_timestamp='2026-02-15T19:29:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:28:00')
2026-02-15T21:30:49.181 [DEBUG] [Thread-211543] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:30:49.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:30:49.276 [DEBUG] [Thread-211546] [transport.py] [_log()] starting thread (client mode): 0xa2d3f100
2026-02-15T21:30:49.276 [DEBUG] [Thread-211546] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:30:49.297 [DEBUG] [Thread-211546] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:30:49.297 [INFO] [Thread-211546] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:30:49.304 [DEBUG] [Thread-211546] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:30:49.304 [DEBUG] [Thread-211546] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] client lang: <none>
2026-02-15T21:30:49.305 [DEBUG] [Thread-211546] [transport.py] [_log()] server lang: <none>
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] kex follows: False
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:30:49.306 [DEBUG] [Thread-211546] [transport.py] [_log()] Compression: none
2026-02-15T21:30:49.307 [DEBUG] [Thread-211546] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:30:49.362 [DEBUG] [Thread-211546] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:30:49.363 [DEBUG] [Thread-211546] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:30:49.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:30:49.364 [DEBUG] [Thread-211546] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:30:49.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:30:49.418 [DEBUG] [Thread-211546] [transport.py] [_log()] userauth is OK
2026-02-15T21:30:49.419 [DEBUG] [Thread-211546] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:30:49.419 [DEBUG] [Thread-211546] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:30:49.419 [DEBUG] [Thread-211546] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:30:49.428 [DEBUG] [Thread-211546] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:30:49.449 [INFO] [Thread-211546] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:30:49.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:30:49.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:30:50.335 [DEBUG] [Thread-211546] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:30:50.335 [DEBUG] [Thread-211546] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:30:50.383 [DEBUG] [Thread-211546] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:30:50.384 [DEBUG] [Thread-211546] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:30:50.393 [DEBUG] [Thread-211546] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:30:50.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:30:50.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:30:50.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:30:50.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:30:50.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:30:50.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:30:50.429 [DEBUG] [Thread-211546] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:31:01.471 [DEBUG] [Thread-211548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:16.534 [DEBUG] [Thread-211549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:31:20.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:31:20.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:31:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 30, 39), 15.53, 34.97, 0.0, 30.41, 16.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:31:22.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:30:39
2026-02-15T21:31:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:31:22.987 [DEBUG] [Thread-211550] [transport.py] [_log()] starting thread (client mode): 0xa2d120b0
2026-02-15T21:31:22.987 [DEBUG] [Thread-211550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:31:23.006 [DEBUG] [Thread-211550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:31:23.006 [INFO] [Thread-211550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:31:23.009 [DEBUG] [Thread-211550] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] client lang: <none>
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] server lang: <none>
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] kex follows: False
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:31:23.010 [DEBUG] [Thread-211550] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:31:23.011 [DEBUG] [Thread-211550] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:31:23.011 [DEBUG] [Thread-211550] [transport.py] [_log()] Compression: none
2026-02-15T21:31:23.011 [DEBUG] [Thread-211550] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:31:23.027 [DEBUG] [Thread-211550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:31:23.028 [DEBUG] [Thread-211550] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:31:23.028 [DEBUG] [Thread-211550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:31:23.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:31:23.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:31:23.030 [DEBUG] [Thread-211550] [transport.py] [_log()] userauth is OK
2026-02-15T21:31:23.031 [DEBUG] [Thread-211550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:31:23.031 [DEBUG] [Thread-211550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:31:23.031 [DEBUG] [Thread-211550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:31:23.031 [DEBUG] [Thread-211550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:31:23.049 [INFO] [Thread-211550] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:31:23.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:31:23.706 [DEBUG] [Thread-211550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:31:23.706 [DEBUG] [Thread-211550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:31:23.706 [DEBUG] [Thread-211550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:31:23.748 [DEBUG] [Thread-211550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:31:23.748 [DEBUG] [Thread-211550] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:31:23.752 [DEBUG] [Thread-211550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:31:23.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:31:23.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:31:23.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:31:23.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:31:23.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:31:23.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:31:23.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:31:23.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:31:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:31:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.812951 -999.00  +16.30  24.57     40   +2.90 1 1 1 1 1     0    0 13.33 -4.16 ZNESW 18.0 24.6 164.5 29.6 16.5 -24.8 16.4 -23.7 16.2 -22.5 16.6 -23.8
2026-02-15T21:31:23.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:31:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:31:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.812951
2026-02-15T21:31:23.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:31:23.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:31:23.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:31:23.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:31:23.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:31:23.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:30:39', tmtdew=15.53, humidity=34.97, cloud=0.0, wind=30.41, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:31:15', seeing=1.61, atlas_timestamp='2026-02-15T19:30:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:28:00')
2026-02-15T21:31:23.784 [DEBUG] [Thread-211550] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:31:23.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:31:23.888 [DEBUG] [Thread-211553] [transport.py] [_log()] starting thread (client mode): 0xa2d7abf0
2026-02-15T21:31:23.888 [DEBUG] [Thread-211553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:31:23.903 [DEBUG] [Thread-211553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:31:23.903 [INFO] [Thread-211553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:31:23.911 [DEBUG] [Thread-211553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] client lang: <none>
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] server lang: <none>
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] kex follows: False
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] Compression: none
2026-02-15T21:31:23.912 [DEBUG] [Thread-211553] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:31:23.977 [DEBUG] [Thread-211553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:31:23.977 [DEBUG] [Thread-211553] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:31:23.978 [DEBUG] [Thread-211553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:31:23.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:31:23.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:31:24.034 [DEBUG] [Thread-211553] [transport.py] [_log()] userauth is OK
2026-02-15T21:31:24.034 [DEBUG] [Thread-211553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:31:24.035 [DEBUG] [Thread-211553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:31:24.035 [DEBUG] [Thread-211553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:31:24.035 [DEBUG] [Thread-211553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:31:24.053 [INFO] [Thread-211553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:31:24.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:31:24.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:31:24.884 [DEBUG] [Thread-211553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:31:24.884 [DEBUG] [Thread-211553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:31:24.933 [DEBUG] [Thread-211553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:31:24.933 [DEBUG] [Thread-211553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:31:24.942 [DEBUG] [Thread-211553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:31:24.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:31:24.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:31:24.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:31:24.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:31:24.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:31:24.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:31:24.978 [DEBUG] [Thread-211553] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:31:25.309 [DEBUG] [Thread-211555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:31.576 [DEBUG] [Thread-211556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:40.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:40.266 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:46.625 [DEBUG] [Thread-211557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:31:55.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:31:55.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:31:55.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:31:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 31, 15), 15.3, 35.52, 0.0, 29.8, 16.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:31:57.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:31:15
2026-02-15T21:31:57.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:31:57.630 [DEBUG] [Thread-211558] [transport.py] [_log()] starting thread (client mode): 0xa2d56770
2026-02-15T21:31:57.631 [DEBUG] [Thread-211558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:31:57.650 [DEBUG] [Thread-211558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:31:57.650 [INFO] [Thread-211558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:31:57.654 [DEBUG] [Thread-211558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:31:57.654 [DEBUG] [Thread-211558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:31:57.654 [DEBUG] [Thread-211558] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] client lang: <none>
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] server lang: <none>
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] kex follows: False
2026-02-15T21:31:57.655 [DEBUG] [Thread-211558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:31:57.656 [DEBUG] [Thread-211558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:31:57.656 [DEBUG] [Thread-211558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:31:57.656 [DEBUG] [Thread-211558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:31:57.656 [DEBUG] [Thread-211558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:31:57.656 [DEBUG] [Thread-211558] [transport.py] [_log()] Compression: none
2026-02-15T21:31:57.656 [DEBUG] [Thread-211558] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:31:57.673 [DEBUG] [Thread-211558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:31:57.674 [DEBUG] [Thread-211558] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:31:57.675 [DEBUG] [Thread-211558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:31:57.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:31:57.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:31:57.678 [DEBUG] [Thread-211558] [transport.py] [_log()] userauth is OK
2026-02-15T21:31:57.678 [DEBUG] [Thread-211558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:31:57.678 [DEBUG] [Thread-211558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:31:57.679 [DEBUG] [Thread-211558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:31:57.679 [DEBUG] [Thread-211558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:31:57.704 [INFO] [Thread-211558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:31:57.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:31:58.364 [DEBUG] [Thread-211558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:31:58.365 [DEBUG] [Thread-211558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:31:58.365 [DEBUG] [Thread-211558] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:31:58.405 [DEBUG] [Thread-211558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:31:58.406 [DEBUG] [Thread-211558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:31:58.409 [DEBUG] [Thread-211558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:31:58.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:31:58.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:31:58.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:31:58.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:31:58.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:31:58.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:31:58.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:31:58.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:31:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:31:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.813298 -999.00  +16.30  15.85     40   +2.90 1 1 1 1 1     0    0 13.64 -4.40 ZNESW 14.7 15.8 147.0 28.6 16.6 -24.7 16.4 -23.6 16.1 -22.5 16.5 -23.8
2026-02-15T21:31:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:31:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:31:58.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.813298
2026-02-15T21:31:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:31:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:31:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:31:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:31:58.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:31:58.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:31:15', tmtdew=15.3, humidity=35.52, cloud=0.0, wind=29.8, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:31:51', seeing=1.7, atlas_timestamp='2026-02-15T19:31:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.03824999999999967, 0.006249999999999645, -0.015000000000000568, -0.007999999999999119, -0.02874999999999872, -0.012000000000000455, -0.01774999999999949, -0.03049999999999997, -0.023999999999999133, -0.04374999999999929, -0.007500000000000284, 0.06850000000000023, 0.03074999999999939, -0.05200000000000138, -0.03300000000000125, 0.02624999999999922, -0.011499999999999844, -0.04200000000000159, -0.021750000000000824, 0.07399999999999807, 0.03474999999999895, 0.0012500000000006395, -0.0022500000000000853, 0.018499999999999517, 0.042500000000000426, -0.010249999999999204, -0.02149999999999963, 0.028999999999999915, 0.05100000000000193, -0.03799999999999848, -0.024499999999999744, 0.031749999999998835], zp_timestamp='2026-02-15T19:28:00')
2026-02-15T21:31:58.438 [DEBUG] [Thread-211558] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:31:58.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:31:58.538 [DEBUG] [Thread-211561] [transport.py] [_log()] starting thread (client mode): 0xa2d6fb20
2026-02-15T21:31:58.539 [DEBUG] [Thread-211561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:31:58.553 [DEBUG] [Thread-211561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:31:58.553 [INFO] [Thread-211561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:31:58.561 [DEBUG] [Thread-211561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:31:58.561 [DEBUG] [Thread-211561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:31:58.561 [DEBUG] [Thread-211561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:31:58.561 [DEBUG] [Thread-211561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:58.561 [DEBUG] [Thread-211561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] client lang: <none>
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] server lang: <none>
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] kex follows: False
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:31:58.562 [DEBUG] [Thread-211561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:31:58.563 [DEBUG] [Thread-211561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:31:58.563 [DEBUG] [Thread-211561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:31:58.563 [DEBUG] [Thread-211561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:31:58.563 [DEBUG] [Thread-211561] [transport.py] [_log()] Compression: none
2026-02-15T21:31:58.563 [DEBUG] [Thread-211561] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:31:58.619 [DEBUG] [Thread-211561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:31:58.620 [DEBUG] [Thread-211561] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:31:58.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:31:58.621 [DEBUG] [Thread-211561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:31:58.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:31:58.674 [DEBUG] [Thread-211561] [transport.py] [_log()] userauth is OK
2026-02-15T21:31:58.675 [DEBUG] [Thread-211561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:31:58.675 [DEBUG] [Thread-211561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:31:58.675 [DEBUG] [Thread-211561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:31:58.675 [DEBUG] [Thread-211561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:31:58.694 [INFO] [Thread-211561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:31:58.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:31:58.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:31:59.502 [DEBUG] [Thread-211561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:31:59.503 [DEBUG] [Thread-211561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:31:59.551 [DEBUG] [Thread-211561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:31:59.552 [DEBUG] [Thread-211561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:31:59.561 [DEBUG] [Thread-211561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:31:59.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:31:59.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:31:59.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:31:59.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:31:59.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:31:59.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:31:59.598 [DEBUG] [Thread-211561] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:32:01.662 [DEBUG] [Thread-211563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:11.173 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:16.712 [DEBUG] [Thread-211564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:25.390 [DEBUG] [Thread-211565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:29.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:32:29.620 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:32:29.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:32:31.745 [DEBUG] [Thread-211566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:31.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 31, 50), 15.31, 35.62, 0.0, 29.73, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:32:31.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:31:50
2026-02-15T21:32:32.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:32:32.324 [DEBUG] [Thread-211567] [transport.py] [_log()] starting thread (client mode): 0xa2d7aa10
2026-02-15T21:32:32.324 [DEBUG] [Thread-211567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:32:32.344 [DEBUG] [Thread-211567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:32:32.344 [INFO] [Thread-211567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:32:32.347 [DEBUG] [Thread-211567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] client lang: <none>
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] server lang: <none>
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] kex follows: False
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] Compression: none
2026-02-15T21:32:32.348 [DEBUG] [Thread-211567] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:32:32.367 [DEBUG] [Thread-211567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:32:32.367 [DEBUG] [Thread-211567] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:32:32.368 [DEBUG] [Thread-211567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:32:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:32:32.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:32:32.369 [DEBUG] [Thread-211567] [transport.py] [_log()] userauth is OK
2026-02-15T21:32:32.370 [DEBUG] [Thread-211567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:32:32.370 [DEBUG] [Thread-211567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:32:32.370 [DEBUG] [Thread-211567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:32:32.370 [DEBUG] [Thread-211567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:32:32.395 [INFO] [Thread-211567] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:32:32.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:32:33.047 [DEBUG] [Thread-211567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:32:33.047 [DEBUG] [Thread-211567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:32:33.048 [DEBUG] [Thread-211567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:32:33.089 [DEBUG] [Thread-211567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:32:33.089 [DEBUG] [Thread-211567] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:32:33.092 [DEBUG] [Thread-211567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:32:33.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:32:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:32:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:32:33.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:32:33.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:32:33.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:32:33.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:32:33.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:32:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:32:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.813645 -999.00  +16.30  25.80     40   +2.90 1 1 1 1 1     0    0 13.10 -5.43 ZNESW 21.1 25.8 153.8 33.1 16.5 -24.6 16.4 -23.6 16.1 -22.4 16.5 -23.6
2026-02-15T21:32:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:32:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:32:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.813645
2026-02-15T21:32:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:32:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:32:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:32:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:32:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:32:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:31:50', tmtdew=15.31, humidity=35.62, cloud=0.0, wind=29.73, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:32:26', seeing=1.77, atlas_timestamp='2026-02-15T19:31:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.018749999999998934, 0.03225000000000122, -0.0045000000000001705, 0.027499999999999858, 0.007750000000001478, 0.0009999999999994458, 0.020250000000000767, 0.005499999999999616, -0.0009999999999994458, 0.014249999999998764, 0.025000000000000355, 0.054999999999999716, 0.056250000000000355, -0.03950000000000031, 0.007999999999999119, 0.029249999999999332, 0.032999999999999474, -0.014000000000001123, -0.02275000000000027, 0.09849999999999781, 0.05274999999999963, -0.013749999999999929, 0.0022500000000000853, 0.03999999999999915, 0.08949999999999925, 0.009249999999999758, -0.03200000000000003, 0.04800000000000004, 0.09350000000000058, 0.0259999999999998, 0.010000000000001563, 0.02474999999999916], zp_timestamp='2026-02-15T19:30:00')
2026-02-15T21:32:33.116 [DEBUG] [Thread-211567] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:32:33.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:32:33.220 [DEBUG] [Thread-211570] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T21:32:33.221 [DEBUG] [Thread-211570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:32:33.235 [DEBUG] [Thread-211570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:32:33.235 [INFO] [Thread-211570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:32:33.242 [DEBUG] [Thread-211570] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:32:33.243 [DEBUG] [Thread-211570] [transport.py] [_log()] client lang: <none>
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] server lang: <none>
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] kex follows: False
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:32:33.244 [DEBUG] [Thread-211570] [transport.py] [_log()] Compression: none
2026-02-15T21:32:33.245 [DEBUG] [Thread-211570] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:32:33.302 [DEBUG] [Thread-211570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:32:33.303 [DEBUG] [Thread-211570] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:32:33.303 [DEBUG] [Thread-211570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:32:33.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:32:33.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:32:33.358 [DEBUG] [Thread-211570] [transport.py] [_log()] userauth is OK
2026-02-15T21:32:33.358 [DEBUG] [Thread-211570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:32:33.358 [DEBUG] [Thread-211570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:32:33.359 [DEBUG] [Thread-211570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:32:33.359 [DEBUG] [Thread-211570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:32:33.379 [INFO] [Thread-211570] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:32:33.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:32:33.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:32:34.263 [DEBUG] [Thread-211570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:32:34.263 [DEBUG] [Thread-211570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:32:34.311 [DEBUG] [Thread-211570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:32:34.311 [DEBUG] [Thread-211570] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:32:34.319 [DEBUG] [Thread-211570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:32:34.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:32:34.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:32:34.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:32:34.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:32:34.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:32:34.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:32:34.351 [DEBUG] [Thread-211570] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:32:40.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:40.468 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:32:46.783 [DEBUG] [Thread-211572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:01.837 [DEBUG] [Thread-211573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:04.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:33:04.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:33:04.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:33:06.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 32, 26), 15.32, 35.58, 0.0, 30.91, 16.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:33:06.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:32:26
2026-02-15T21:33:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:33:07.116 [DEBUG] [Thread-211574] [transport.py] [_log()] starting thread (client mode): 0xa57b1ae0
2026-02-15T21:33:07.116 [DEBUG] [Thread-211574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:33:07.137 [DEBUG] [Thread-211574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:33:07.137 [INFO] [Thread-211574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:33:07.140 [DEBUG] [Thread-211574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] client lang: <none>
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] server lang: <none>
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] kex follows: False
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] Compression: none
2026-02-15T21:33:07.141 [DEBUG] [Thread-211574] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:33:07.159 [DEBUG] [Thread-211574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:33:07.160 [DEBUG] [Thread-211574] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:33:07.160 [DEBUG] [Thread-211574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:33:07.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:33:07.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:33:07.162 [DEBUG] [Thread-211574] [transport.py] [_log()] userauth is OK
2026-02-15T21:33:07.162 [DEBUG] [Thread-211574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:33:07.163 [DEBUG] [Thread-211574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:33:07.163 [DEBUG] [Thread-211574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:33:07.163 [DEBUG] [Thread-211574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:33:07.181 [INFO] [Thread-211574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:33:07.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:33:08.019 [DEBUG] [Thread-211574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:33:08.019 [DEBUG] [Thread-211574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:33:08.020 [DEBUG] [Thread-211574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:33:08.060 [DEBUG] [Thread-211574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:33:08.060 [DEBUG] [Thread-211574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:33:08.063 [DEBUG] [Thread-211574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:33:08.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:33:08.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:33:08.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:33:08.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:33:08.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:33:08.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:33:08.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:33:08.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:33:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:33:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.813992 -999.00  +16.30  25.10     41   +3.00 1 1 1 1 1     0    0 13.49 -6.36 ZNESW 21.7 25.1 151.2 31.9 16.5 -24.5 16.4 -23.6 16.2 -22.5 16.5 -23.6
2026-02-15T21:33:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:33:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:33:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.813992
2026-02-15T21:33:08.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:33:08.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:33:08.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:33:08.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:33:08.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:33:08.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:32:26', tmtdew=15.32, humidity=35.58, cloud=0.0, wind=30.91, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:33:02', seeing=1.52, atlas_timestamp='2026-02-15T19:32:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.018749999999998934, 0.03225000000000122, -0.0045000000000001705, 0.027499999999999858, 0.007750000000001478, 0.0009999999999994458, 0.020250000000000767, 0.005499999999999616, -0.0009999999999994458, 0.014249999999998764, 0.025000000000000355, 0.054999999999999716, 0.056250000000000355, -0.03950000000000031, 0.007999999999999119, 0.029249999999999332, 0.032999999999999474, -0.014000000000001123, -0.02275000000000027, 0.09849999999999781, 0.05274999999999963, -0.013749999999999929, 0.0022500000000000853, 0.03999999999999915, 0.08949999999999925, 0.009249999999999758, -0.03200000000000003, 0.04800000000000004, 0.09350000000000058, 0.0259999999999998, 0.010000000000001563, 0.02474999999999916], zp_timestamp='2026-02-15T19:30:00')
2026-02-15T21:33:08.083 [DEBUG] [Thread-211574] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:33:08.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:33:08.175 [DEBUG] [Thread-211577] [transport.py] [_log()] starting thread (client mode): 0xa2d6cee0
2026-02-15T21:33:08.176 [DEBUG] [Thread-211577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:33:08.190 [DEBUG] [Thread-211577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:33:08.190 [INFO] [Thread-211577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:33:08.197 [DEBUG] [Thread-211577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:33:08.197 [DEBUG] [Thread-211577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] client lang: <none>
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] server lang: <none>
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] kex follows: False
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] Compression: none
2026-02-15T21:33:08.198 [DEBUG] [Thread-211577] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:33:08.254 [DEBUG] [Thread-211577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:33:08.255 [DEBUG] [Thread-211577] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:33:08.255 [DEBUG] [Thread-211577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:33:08.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:33:08.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:33:08.310 [DEBUG] [Thread-211577] [transport.py] [_log()] userauth is OK
2026-02-15T21:33:08.310 [DEBUG] [Thread-211577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:33:08.310 [DEBUG] [Thread-211577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:33:08.310 [DEBUG] [Thread-211577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:33:08.310 [DEBUG] [Thread-211577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:33:08.333 [INFO] [Thread-211577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:33:08.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:33:08.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:33:09.145 [DEBUG] [Thread-211577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:33:09.146 [DEBUG] [Thread-211577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:33:09.193 [DEBUG] [Thread-211577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:33:09.194 [DEBUG] [Thread-211577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:33:09.203 [DEBUG] [Thread-211577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:33:09.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:33:09.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:33:09.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:33:09.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:33:09.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:33:09.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:33:09.239 [DEBUG] [Thread-211577] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:33:16.873 [DEBUG] [Thread-211579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:25.464 [DEBUG] [Thread-211580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:31.922 [DEBUG] [Thread-211581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:39.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:33:39.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:33:39.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:33:40.668 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:40.669 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:41.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 33, 2), 15.3, 35.63, 0.0, 30.74, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:33:41.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:33:02
2026-02-15T21:33:42.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:33:42.264 [DEBUG] [Thread-211582] [transport.py] [_log()] starting thread (client mode): 0xa57d7ca0
2026-02-15T21:33:42.264 [DEBUG] [Thread-211582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:33:42.284 [DEBUG] [Thread-211582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:33:42.284 [INFO] [Thread-211582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] client lang: <none>
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] server lang: <none>
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] kex follows: False
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] Compression: none
2026-02-15T21:33:42.285 [DEBUG] [Thread-211582] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:33:42.293 [DEBUG] [Thread-211582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:33:42.294 [DEBUG] [Thread-211582] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:33:42.294 [DEBUG] [Thread-211582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:33:42.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:33:42.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:33:42.296 [DEBUG] [Thread-211582] [transport.py] [_log()] userauth is OK
2026-02-15T21:33:42.297 [DEBUG] [Thread-211582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:33:42.297 [DEBUG] [Thread-211582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:33:42.297 [DEBUG] [Thread-211582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:33:42.297 [DEBUG] [Thread-211582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:33:42.321 [INFO] [Thread-211582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:33:42.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:33:42.958 [DEBUG] [Thread-211582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:33:42.958 [DEBUG] [Thread-211582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:33:42.958 [DEBUG] [Thread-211582] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:33:43.000 [DEBUG] [Thread-211582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:33:43.000 [DEBUG] [Thread-211582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:33:43.002 [DEBUG] [Thread-211582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:33:43.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:33:43.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:33:43.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:33:43.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:33:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:33:43.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:33:43.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:33:43.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:33:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:33:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.814339 -999.00  +16.30  25.43     40   +3.00 1 1 1 1 1     0    0 13.46 -8.21 ZNESW 20.9 25.4 147.8 37.2 16.5 -24.7 16.4 -23.6 16.2 -22.5 16.5 -23.6
2026-02-15T21:33:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:33:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:33:43.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.814339
2026-02-15T21:33:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:33:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:33:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:33:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:33:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:33:43.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:33:02', tmtdew=15.3, humidity=35.63, cloud=0.0, wind=30.74, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:33:38', seeing=1.68, atlas_timestamp='2026-02-15T19:32:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.018749999999998934, 0.03225000000000122, -0.0045000000000001705, 0.027499999999999858, 0.007750000000001478, 0.0009999999999994458, 0.020250000000000767, 0.005499999999999616, -0.0009999999999994458, 0.014249999999998764, 0.025000000000000355, 0.054999999999999716, 0.056250000000000355, -0.03950000000000031, 0.007999999999999119, 0.029249999999999332, 0.032999999999999474, -0.014000000000001123, -0.02275000000000027, 0.09849999999999781, 0.05274999999999963, -0.013749999999999929, 0.0022500000000000853, 0.03999999999999915, 0.08949999999999925, 0.009249999999999758, -0.03200000000000003, 0.04800000000000004, 0.09350000000000058, 0.0259999999999998, 0.010000000000001563, 0.02474999999999916], zp_timestamp='2026-02-15T19:30:00')
2026-02-15T21:33:43.027 [DEBUG] [Thread-211582] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:33:43.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:33:43.123 [DEBUG] [Thread-211585] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-15T21:33:43.123 [DEBUG] [Thread-211585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:33:43.137 [DEBUG] [Thread-211585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:33:43.137 [INFO] [Thread-211585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:33:43.145 [DEBUG] [Thread-211585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:33:43.145 [DEBUG] [Thread-211585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:33:43.145 [DEBUG] [Thread-211585] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:33:43.145 [DEBUG] [Thread-211585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:43.145 [DEBUG] [Thread-211585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] client lang: <none>
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] server lang: <none>
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] kex follows: False
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:33:43.146 [DEBUG] [Thread-211585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:33:43.147 [DEBUG] [Thread-211585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:33:43.147 [DEBUG] [Thread-211585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:33:43.147 [DEBUG] [Thread-211585] [transport.py] [_log()] Compression: none
2026-02-15T21:33:43.147 [DEBUG] [Thread-211585] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:33:43.202 [DEBUG] [Thread-211585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:33:43.202 [DEBUG] [Thread-211585] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:33:43.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:33:43.203 [DEBUG] [Thread-211585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:33:43.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:33:43.259 [DEBUG] [Thread-211585] [transport.py] [_log()] userauth is OK
2026-02-15T21:33:43.260 [DEBUG] [Thread-211585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:33:43.260 [DEBUG] [Thread-211585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:33:43.260 [DEBUG] [Thread-211585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:33:43.260 [DEBUG] [Thread-211585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:33:43.279 [INFO] [Thread-211585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:33:43.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:33:43.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:33:44.087 [DEBUG] [Thread-211585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:33:44.088 [DEBUG] [Thread-211585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:33:44.136 [DEBUG] [Thread-211585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:33:44.136 [DEBUG] [Thread-211585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:33:44.145 [DEBUG] [Thread-211585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:33:44.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:33:44.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:33:44.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:33:44.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:33:44.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:33:44.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:33:44.182 [DEBUG] [Thread-211585] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:33:44.847 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:33:46.958 [DEBUG] [Thread-211587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:02.009 [DEBUG] [Thread-211588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:14.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:34:14.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:34:14.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:34:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 33, 37), 15.4, 35.27, 0.0, 32.67, 16.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:34:16.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:33:37
2026-02-15T21:34:16.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:34:16.853 [DEBUG] [Thread-211589] [transport.py] [_log()] starting thread (client mode): 0xa2d3e350
2026-02-15T21:34:16.853 [DEBUG] [Thread-211589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:34:16.873 [DEBUG] [Thread-211589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:34:16.873 [INFO] [Thread-211589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:34:16.876 [DEBUG] [Thread-211589] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] client lang: <none>
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] server lang: <none>
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] kex follows: False
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] Compression: none
2026-02-15T21:34:16.877 [DEBUG] [Thread-211589] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:34:16.894 [DEBUG] [Thread-211589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:34:16.894 [DEBUG] [Thread-211589] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:34:16.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:34:16.895 [DEBUG] [Thread-211589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:34:16.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:34:16.896 [DEBUG] [Thread-211589] [transport.py] [_log()] userauth is OK
2026-02-15T21:34:16.896 [DEBUG] [Thread-211589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:34:16.896 [DEBUG] [Thread-211589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:34:16.896 [DEBUG] [Thread-211589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:34:16.896 [DEBUG] [Thread-211589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:34:16.909 [INFO] [Thread-211589] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:34:16.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:34:17.042 [DEBUG] [Thread-211591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:17.116 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:17.556 [DEBUG] [Thread-211589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:34:17.556 [DEBUG] [Thread-211589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:34:17.556 [DEBUG] [Thread-211589] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:34:17.597 [DEBUG] [Thread-211589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:34:17.597 [DEBUG] [Thread-211589] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:34:17.600 [DEBUG] [Thread-211589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:34:17.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:34:17.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:34:17.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:34:17.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:34:17.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:34:17.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:34:17.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:34:17.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:34:17.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:34:17.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.815034 -999.00  +16.30  23.90     40   +3.00 1 1 1 1 1     0    0 13.05 -11.36 ZNESW 24.3 23.9 166.3 37.8 16.5 -24.6 16.4 -23.5 16.2 -22.7 16.4 -23.7
2026-02-15T21:34:17.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:34:17.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:34:17.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.815034
2026-02-15T21:34:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:34:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:34:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:34:17.623 [DEBUG] [Thread-211589] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:34:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:34:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:34:17.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:33:37', tmtdew=15.4, humidity=35.27, cloud=0.0, wind=32.67, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:33:38', seeing=1.68, atlas_timestamp='2026-02-15T19:33:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.018749999999998934, 0.03225000000000122, -0.0045000000000001705, 0.027499999999999858, 0.007750000000001478, 0.0009999999999994458, 0.020250000000000767, 0.005499999999999616, -0.0009999999999994458, 0.014249999999998764, 0.025000000000000355, 0.054999999999999716, 0.056250000000000355, -0.03950000000000031, 0.007999999999999119, 0.029249999999999332, 0.032999999999999474, -0.014000000000001123, -0.02275000000000027, 0.09849999999999781, 0.05274999999999963, -0.013749999999999929, 0.0022500000000000853, 0.03999999999999915, 0.08949999999999925, 0.009249999999999758, -0.03200000000000003, 0.04800000000000004, 0.09350000000000058, 0.0259999999999998, 0.010000000000001563, 0.02474999999999916], zp_timestamp='2026-02-15T19:30:00')
2026-02-15T21:34:17.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:34:17.712 [DEBUG] [Thread-211593] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca90
2026-02-15T21:34:17.712 [DEBUG] [Thread-211593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:34:17.726 [DEBUG] [Thread-211593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:34:17.726 [INFO] [Thread-211593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:34:17.734 [DEBUG] [Thread-211593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] client lang: <none>
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] server lang: <none>
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] kex follows: False
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] Compression: none
2026-02-15T21:34:17.735 [DEBUG] [Thread-211593] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:34:17.792 [DEBUG] [Thread-211593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:34:17.792 [DEBUG] [Thread-211593] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:34:17.793 [DEBUG] [Thread-211593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:34:17.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:34:17.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:34:17.852 [DEBUG] [Thread-211593] [transport.py] [_log()] userauth is OK
2026-02-15T21:34:17.853 [DEBUG] [Thread-211593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:34:17.853 [DEBUG] [Thread-211593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:34:17.853 [DEBUG] [Thread-211593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:34:17.853 [DEBUG] [Thread-211593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:34:17.874 [INFO] [Thread-211593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:34:17.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:34:17.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:34:18.711 [DEBUG] [Thread-211593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:34:18.711 [DEBUG] [Thread-211593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:34:18.760 [DEBUG] [Thread-211593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:34:18.760 [DEBUG] [Thread-211593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:34:18.769 [DEBUG] [Thread-211593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:34:18.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:34:18.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:34:18.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:34:18.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:34:18.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:34:18.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:34:18.807 [DEBUG] [Thread-211593] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:34:25.730 [DEBUG] [Thread-211595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:26.639 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:30.733 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:32.091 [DEBUG] [Thread-211596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:40.891 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:40.908 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:47.269 [DEBUG] [Thread-211597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:34:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:34:48.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:34:48.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:34:50.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 34, 14), 15.18, 35.68, 0.0, 29.89, 16.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:34:50.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:34:14
2026-02-15T21:34:51.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:34:51.526 [DEBUG] [Thread-211598] [transport.py] [_log()] starting thread (client mode): 0xa2d79990
2026-02-15T21:34:51.526 [DEBUG] [Thread-211598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:34:51.541 [DEBUG] [Thread-211598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:34:51.542 [INFO] [Thread-211598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:34:51.547 [DEBUG] [Thread-211598] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] client lang: <none>
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] server lang: <none>
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] kex follows: False
2026-02-15T21:34:51.548 [DEBUG] [Thread-211598] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:34:51.549 [DEBUG] [Thread-211598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:34:51.549 [DEBUG] [Thread-211598] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:34:51.549 [DEBUG] [Thread-211598] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:34:51.549 [DEBUG] [Thread-211598] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:34:51.549 [DEBUG] [Thread-211598] [transport.py] [_log()] Compression: none
2026-02-15T21:34:51.549 [DEBUG] [Thread-211598] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:34:51.587 [DEBUG] [Thread-211598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:34:51.591 [DEBUG] [Thread-211598] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:34:51.592 [DEBUG] [Thread-211598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:34:51.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:34:51.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:34:51.595 [DEBUG] [Thread-211598] [transport.py] [_log()] userauth is OK
2026-02-15T21:34:51.595 [DEBUG] [Thread-211598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:34:51.595 [DEBUG] [Thread-211598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:34:51.595 [DEBUG] [Thread-211598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:34:51.595 [DEBUG] [Thread-211598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:34:51.628 [INFO] [Thread-211598] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:34:51.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:34:52.269 [DEBUG] [Thread-211598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:34:52.269 [DEBUG] [Thread-211598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:34:52.270 [DEBUG] [Thread-211598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:34:52.310 [DEBUG] [Thread-211598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:34:52.310 [DEBUG] [Thread-211598] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:34:52.312 [DEBUG] [Thread-211598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:34:52.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:34:52.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:34:52.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:34:52.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:34:52.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:34:52.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:34:52.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:34:52.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:34:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:34:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.815381 -999.00  +16.30  22.96     40   +3.00 1 1 1 1 1     0    0 13.07 -13.06 ZNESW 16.3 23.0 162.8 28.3 16.5 -24.8 16.4 -23.7 16.2 -22.5 16.5 -23.8
2026-02-15T21:34:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:34:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:34:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.815381
2026-02-15T21:34:52.347 [DEBUG] [Thread-211598] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:34:52.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:34:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:34:52.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:34:52.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:34:52.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:34:52.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:34:14', tmtdew=15.18, humidity=35.68, cloud=0.0, wind=29.89, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:34:14', seeing=2.16, atlas_timestamp='2026-02-15T19:34:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.011749999999999261, -0.018749999999998934, 0.03225000000000122, -0.0045000000000001705, 0.027499999999999858, 0.007750000000001478, 0.0009999999999994458, 0.020250000000000767, 0.005499999999999616, -0.0009999999999994458, 0.014249999999998764, 0.025000000000000355, 0.054999999999999716, 0.056250000000000355, -0.03950000000000031, 0.007999999999999119, 0.029249999999999332, 0.032999999999999474, -0.014000000000001123, -0.02275000000000027, 0.09849999999999781, 0.05274999999999963, -0.013749999999999929, 0.0022500000000000853, 0.03999999999999915, 0.08949999999999925, 0.009249999999999758, -0.03200000000000003, 0.04800000000000004, 0.09350000000000058, 0.0259999999999998, 0.010000000000001563, 0.02474999999999916], zp_timestamp='2026-02-15T19:30:00')
2026-02-15T21:34:52.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:34:52.458 [DEBUG] [Thread-211601] [transport.py] [_log()] starting thread (client mode): 0xa5740b50
2026-02-15T21:34:52.458 [DEBUG] [Thread-211601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:34:52.473 [DEBUG] [Thread-211601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:34:52.473 [INFO] [Thread-211601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] client lang: <none>
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] server lang: <none>
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] kex follows: False
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] Compression: none
2026-02-15T21:34:52.481 [DEBUG] [Thread-211601] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:34:52.537 [DEBUG] [Thread-211601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:34:52.537 [DEBUG] [Thread-211601] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:34:52.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:34:52.537 [DEBUG] [Thread-211601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:34:52.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:34:52.594 [DEBUG] [Thread-211601] [transport.py] [_log()] userauth is OK
2026-02-15T21:34:52.594 [DEBUG] [Thread-211601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:34:52.594 [DEBUG] [Thread-211601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:34:52.594 [DEBUG] [Thread-211601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:34:52.594 [DEBUG] [Thread-211601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:34:52.608 [INFO] [Thread-211601] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:34:52.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:34:52.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:34:53.430 [DEBUG] [Thread-211601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:34:53.430 [DEBUG] [Thread-211601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:34:53.477 [DEBUG] [Thread-211601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:34:53.477 [DEBUG] [Thread-211601] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:34:53.485 [DEBUG] [Thread-211601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:34:53.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:34:53.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:34:53.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:34:53.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:34:53.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:34:53.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:34:53.523 [DEBUG] [Thread-211601] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:35:02.365 [DEBUG] [Thread-211603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:17.536 [DEBUG] [Thread-211604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:18.926 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:23.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:35:23.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:35:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:35:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 34, 49), 15.24, 35.67, 0.0, 29.64, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:35:25.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:34:49
2026-02-15T21:35:25.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:35:25.975 [DEBUG] [Thread-211605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:26.101 [DEBUG] [Thread-211606] [transport.py] [_log()] starting thread (client mode): 0xa57d4370
2026-02-15T21:35:26.102 [DEBUG] [Thread-211606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:35:26.114 [DEBUG] [Thread-211606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:35:26.114 [INFO] [Thread-211606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:35:26.118 [DEBUG] [Thread-211606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:35:26.118 [DEBUG] [Thread-211606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:35:26.118 [DEBUG] [Thread-211606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] client lang: <none>
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] server lang: <none>
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] kex follows: False
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:35:26.119 [DEBUG] [Thread-211606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:35:26.120 [DEBUG] [Thread-211606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:35:26.120 [DEBUG] [Thread-211606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:35:26.120 [DEBUG] [Thread-211606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:35:26.120 [DEBUG] [Thread-211606] [transport.py] [_log()] Compression: none
2026-02-15T21:35:26.120 [DEBUG] [Thread-211606] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:35:26.156 [DEBUG] [Thread-211606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:35:26.161 [DEBUG] [Thread-211606] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:35:26.163 [DEBUG] [Thread-211606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:35:26.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:35:26.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:35:26.167 [DEBUG] [Thread-211606] [transport.py] [_log()] userauth is OK
2026-02-15T21:35:26.168 [DEBUG] [Thread-211606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:35:26.168 [DEBUG] [Thread-211606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:35:26.168 [DEBUG] [Thread-211606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:35:26.168 [DEBUG] [Thread-211606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:35:26.188 [INFO] [Thread-211606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:35:26.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:35:26.820 [DEBUG] [Thread-211606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:35:26.820 [DEBUG] [Thread-211606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:35:26.820 [DEBUG] [Thread-211606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:35:26.861 [DEBUG] [Thread-211606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:35:26.861 [DEBUG] [Thread-211606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:35:26.863 [DEBUG] [Thread-211606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:35:26.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:35:26.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:35:26.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:35:26.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:35:26.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:35:26.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:35:26.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:35:26.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:35:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:35:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.815728 -999.00  +16.20  15.93     41   +3.00 1 1 1 1 1     0    0 13.08 -13.13 ZNESW 16.0 15.9 157.4 30.2 16.5 -24.7 16.4 -23.6 16.1 -22.6 16.5 -23.8
2026-02-15T21:35:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:35:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:35:26.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.815728
2026-02-15T21:35:26.892 [DEBUG] [Thread-211606] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:35:26.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:35:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:35:26.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:35:26.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:35:26.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:35:26.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:34:49', tmtdew=15.24, humidity=35.67, cloud=0.0, wind=29.64, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:34:49', seeing=2.11, atlas_timestamp='2026-02-15T19:34:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:34:00')
2026-02-15T21:35:26.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:35:26.993 [DEBUG] [Thread-211609] [transport.py] [_log()] starting thread (client mode): 0xa57e01c0
2026-02-15T21:35:26.993 [DEBUG] [Thread-211609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:35:27.009 [DEBUG] [Thread-211609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:35:27.009 [INFO] [Thread-211609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:35:27.016 [DEBUG] [Thread-211609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:35:27.016 [DEBUG] [Thread-211609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] client lang: <none>
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] server lang: <none>
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] kex follows: False
2026-02-15T21:35:27.017 [DEBUG] [Thread-211609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:35:27.018 [DEBUG] [Thread-211609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:35:27.018 [DEBUG] [Thread-211609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:35:27.018 [DEBUG] [Thread-211609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:35:27.018 [DEBUG] [Thread-211609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:35:27.018 [DEBUG] [Thread-211609] [transport.py] [_log()] Compression: none
2026-02-15T21:35:27.018 [DEBUG] [Thread-211609] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:35:27.075 [DEBUG] [Thread-211609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:35:27.075 [DEBUG] [Thread-211609] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:35:27.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:35:27.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:35:27.077 [DEBUG] [Thread-211609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:35:27.130 [DEBUG] [Thread-211609] [transport.py] [_log()] userauth is OK
2026-02-15T21:35:27.131 [DEBUG] [Thread-211609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:35:27.131 [DEBUG] [Thread-211609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:35:27.131 [DEBUG] [Thread-211609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:35:27.131 [DEBUG] [Thread-211609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:35:27.152 [INFO] [Thread-211609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:35:27.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:35:27.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:35:28.025 [DEBUG] [Thread-211609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:35:28.025 [DEBUG] [Thread-211609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:35:28.073 [DEBUG] [Thread-211609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:35:28.073 [DEBUG] [Thread-211609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:35:28.081 [DEBUG] [Thread-211609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:35:28.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:35:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:35:28.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:35:28.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:35:28.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:35:28.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:35:28.115 [DEBUG] [Thread-211609] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:35:32.615 [DEBUG] [Thread-211611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:41.113 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:41.116 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:47.737 [DEBUG] [Thread-211612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:53.354 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:35:58.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:35:58.159 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:35:58.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:36:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 35, 25), 15.24, 35.67, 0.0, 28.67, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:36:00.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:35:25
2026-02-15T21:36:00.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:36:00.658 [DEBUG] [Thread-211613] [transport.py] [_log()] starting thread (client mode): 0xa57e3130
2026-02-15T21:36:00.658 [DEBUG] [Thread-211613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:36:00.664 [DEBUG] [Thread-211613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:36:00.665 [INFO] [Thread-211613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:36:00.670 [DEBUG] [Thread-211613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] client lang: <none>
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] server lang: <none>
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] kex follows: False
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] Compression: none
2026-02-15T21:36:00.671 [DEBUG] [Thread-211613] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:36:00.709 [DEBUG] [Thread-211613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:36:00.715 [DEBUG] [Thread-211613] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:36:00.717 [DEBUG] [Thread-211613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:36:00.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:36:00.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:36:00.722 [DEBUG] [Thread-211613] [transport.py] [_log()] userauth is OK
2026-02-15T21:36:00.722 [DEBUG] [Thread-211613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:36:00.722 [DEBUG] [Thread-211613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:36:00.723 [DEBUG] [Thread-211613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:36:00.723 [DEBUG] [Thread-211613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:36:00.749 [INFO] [Thread-211613] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:36:00.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:36:01.346 [DEBUG] [Thread-211613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:36:01.346 [DEBUG] [Thread-211613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:36:01.349 [DEBUG] [Thread-211613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:36:01.388 [DEBUG] [Thread-211613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:36:01.388 [DEBUG] [Thread-211613] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:36:01.391 [DEBUG] [Thread-211613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:36:01.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:36:01.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:36:01.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:36:01.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:36:01.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:36:01.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:36:01.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:36:01.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:36:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:36:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.816075 -999.00  +16.20  19.41     41   +3.00 1 1 1 1 1     0    0 12.95 -15.25 ZNESW 20.6 19.4 156.0 29.5 16.6 -24.5 16.4 -23.7 16.1 -22.6 16.5 -23.9
2026-02-15T21:36:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:36:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:36:01.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.816075
2026-02-15T21:36:01.424 [DEBUG] [Thread-211613] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:36:01.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:36:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:36:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:36:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:36:01.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:36:01.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:35:25', tmtdew=15.24, humidity=35.67, cloud=0.0, wind=28.67, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:35:25', seeing=2.31, atlas_timestamp='2026-02-15T19:35:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:34:00')
2026-02-15T21:36:01.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:36:01.538 [DEBUG] [Thread-211616] [transport.py] [_log()] starting thread (client mode): 0xa5740a90
2026-02-15T21:36:01.538 [DEBUG] [Thread-211616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:36:01.552 [DEBUG] [Thread-211616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:36:01.552 [INFO] [Thread-211616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] client lang: <none>
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] server lang: <none>
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] kex follows: False
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] Compression: none
2026-02-15T21:36:01.560 [DEBUG] [Thread-211616] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:36:01.621 [DEBUG] [Thread-211616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:36:01.621 [DEBUG] [Thread-211616] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:36:01.622 [DEBUG] [Thread-211616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:36:01.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:36:01.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:36:01.678 [DEBUG] [Thread-211616] [transport.py] [_log()] userauth is OK
2026-02-15T21:36:01.678 [DEBUG] [Thread-211616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:36:01.678 [DEBUG] [Thread-211616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:36:01.678 [DEBUG] [Thread-211616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:36:01.678 [DEBUG] [Thread-211616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:36:01.695 [INFO] [Thread-211616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:36:01.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:36:01.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:36:02.532 [DEBUG] [Thread-211616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:36:02.532 [DEBUG] [Thread-211616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:36:02.580 [DEBUG] [Thread-211616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:36:02.580 [DEBUG] [Thread-211616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:36:02.588 [DEBUG] [Thread-211616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:36:02.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:36:02.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:36:02.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:36:02.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:36:02.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:36:02.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:36:02.623 [DEBUG] [Thread-211616] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:36:02.803 [DEBUG] [Thread-211618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:17.971 [DEBUG] [Thread-211619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:26.268 [DEBUG] [Thread-211620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:36:32.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:36:32.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:36:33.089 [DEBUG] [Thread-211621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:34.002 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:34.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 35, 25), 15.19, 35.67, 0.0, 30.47, 16.31, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:36:34.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:35:25
2026-02-15T21:36:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:36:35.392 [DEBUG] [Thread-211622] [transport.py] [_log()] starting thread (client mode): 0xa57e2560
2026-02-15T21:36:35.392 [DEBUG] [Thread-211622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:36:35.399 [DEBUG] [Thread-211622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:36:35.399 [INFO] [Thread-211622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] client lang: <none>
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] server lang: <none>
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] kex follows: False
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:36:35.402 [DEBUG] [Thread-211622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:36:35.403 [DEBUG] [Thread-211622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:36:35.403 [DEBUG] [Thread-211622] [transport.py] [_log()] Compression: none
2026-02-15T21:36:35.403 [DEBUG] [Thread-211622] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:36:35.434 [DEBUG] [Thread-211622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:36:35.438 [DEBUG] [Thread-211622] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:36:35.439 [DEBUG] [Thread-211622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:36:35.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:36:35.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:36:35.478 [DEBUG] [Thread-211622] [transport.py] [_log()] userauth is OK
2026-02-15T21:36:35.479 [DEBUG] [Thread-211622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:36:35.479 [DEBUG] [Thread-211622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:36:35.479 [DEBUG] [Thread-211622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:36:35.479 [DEBUG] [Thread-211622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:36:35.504 [INFO] [Thread-211622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:36:35.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:36:36.135 [DEBUG] [Thread-211622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:36:36.135 [DEBUG] [Thread-211622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:36:36.135 [DEBUG] [Thread-211622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:36:36.177 [DEBUG] [Thread-211622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:36:36.177 [DEBUG] [Thread-211622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:36:36.180 [DEBUG] [Thread-211622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:36:36.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:36:36.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:36:36.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:36:36.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:36:36.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:36:36.207 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:36:36.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:36:36.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:36:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:36:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.816423 -999.00  +16.20  20.24     41   +3.00 1 1 1 1 1     0    0 13.01 -17.04 ZNESW 23.9 20.2 148.6 25.4 16.5 -24.8 16.4 -23.6 16.1 -22.5 16.4 -23.8
2026-02-15T21:36:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:36:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:36:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.816423
2026-02-15T21:36:36.216 [DEBUG] [Thread-211622] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:36:36.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:36:36.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:35:25', tmtdew=15.19, humidity=35.67, cloud=0.0, wind=30.47, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:36:00', seeing=1.96, atlas_timestamp='2026-02-15T19:35:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:34:00')
2026-02-15T21:36:36.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:36:36.329 [DEBUG] [Thread-211625] [transport.py] [_log()] starting thread (client mode): 0xa2dc3d30
2026-02-15T21:36:36.329 [DEBUG] [Thread-211625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:36:36.345 [DEBUG] [Thread-211625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:36:36.345 [INFO] [Thread-211625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] client lang: <none>
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] server lang: <none>
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] kex follows: False
2026-02-15T21:36:36.352 [DEBUG] [Thread-211625] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:36:36.353 [DEBUG] [Thread-211625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:36:36.353 [DEBUG] [Thread-211625] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:36:36.353 [DEBUG] [Thread-211625] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:36:36.353 [DEBUG] [Thread-211625] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:36:36.353 [DEBUG] [Thread-211625] [transport.py] [_log()] Compression: none
2026-02-15T21:36:36.353 [DEBUG] [Thread-211625] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:36:36.409 [DEBUG] [Thread-211625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:36:36.409 [DEBUG] [Thread-211625] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:36:36.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:36:36.410 [DEBUG] [Thread-211625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:36:36.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:36:36.466 [DEBUG] [Thread-211625] [transport.py] [_log()] userauth is OK
2026-02-15T21:36:36.466 [DEBUG] [Thread-211625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:36:36.466 [DEBUG] [Thread-211625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:36:36.466 [DEBUG] [Thread-211625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:36:36.466 [DEBUG] [Thread-211625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:36:36.482 [INFO] [Thread-211625] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:36:36.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:36:36.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:36:37.322 [DEBUG] [Thread-211625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:36:37.323 [DEBUG] [Thread-211625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:36:37.370 [DEBUG] [Thread-211625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:36:37.370 [DEBUG] [Thread-211625] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:36:37.379 [DEBUG] [Thread-211625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:36:37.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:36:37.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:36:37.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
2026-02-15T21:36:37.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:36:37.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:36:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:36:37.414 [DEBUG] [Thread-211625] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:36:38.092 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:41.316 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:41.317 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:48.166 [DEBUG] [Thread-211627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:36:52.731 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:03.334 [DEBUG] [Thread-211628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:07.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:37:07.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:37:07.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:37:09.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 36, 35), 15.33, 35.46, 0.0, 28.37, 16.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:37:09.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:36:35
2026-02-15T21:37:10.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:37:10.628 [DEBUG] [Thread-211629] [transport.py] [_log()] starting thread (client mode): 0xa2d12140
2026-02-15T21:37:10.629 [DEBUG] [Thread-211629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:37:10.640 [DEBUG] [Thread-211629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:37:10.640 [INFO] [Thread-211629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] client lang: <none>
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] server lang: <none>
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] kex follows: False
2026-02-15T21:37:10.647 [DEBUG] [Thread-211629] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:37:10.648 [DEBUG] [Thread-211629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:37:10.648 [DEBUG] [Thread-211629] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:37:10.648 [DEBUG] [Thread-211629] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:37:10.648 [DEBUG] [Thread-211629] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:37:10.648 [DEBUG] [Thread-211629] [transport.py] [_log()] Compression: none
2026-02-15T21:37:10.648 [DEBUG] [Thread-211629] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:37:10.684 [DEBUG] [Thread-211629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:37:10.689 [DEBUG] [Thread-211629] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:37:10.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:37:10.692 [DEBUG] [Thread-211629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:37:10.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:37:10.695 [DEBUG] [Thread-211629] [transport.py] [_log()] userauth is OK
2026-02-15T21:37:10.695 [DEBUG] [Thread-211629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:37:10.696 [DEBUG] [Thread-211629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:37:10.696 [DEBUG] [Thread-211629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:37:10.696 [DEBUG] [Thread-211629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:37:10.754 [INFO] [Thread-211629] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:37:10.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:37:11.393 [DEBUG] [Thread-211629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:37:11.393 [DEBUG] [Thread-211629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:37:11.395 [DEBUG] [Thread-211629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:37:11.435 [DEBUG] [Thread-211629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:37:11.435 [DEBUG] [Thread-211629] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:37:11.438 [DEBUG] [Thread-211629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:37:11.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:37:11.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:37:11.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:37:11.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:37:11.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:37:11.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:37:11.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:37:11.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:37:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:37:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.816770 -999.00  +16.20  17.35     41   +3.00 1 1 1 1 1     0    0 12.90 -18.85 ZNESW 23.2 17.4 155.6 29.3 16.5 -24.7 16.4 -23.7 16.2 -22.7 16.4 -23.8
2026-02-15T21:37:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:37:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:37:11.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.816770
2026-02-15T21:37:11.474 [DEBUG] [Thread-211629] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:37:11.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:37:11.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:37:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:37:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:37:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:37:11.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:36:35', tmtdew=15.33, humidity=35.46, cloud=0.0, wind=28.37, temperature=16.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:36:36', seeing=1.6, atlas_timestamp='2026-02-15T19:36:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:34:00')
2026-02-15T21:37:11.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:37:11.597 [DEBUG] [Thread-211632] [transport.py] [_log()] starting thread (client mode): 0xa2d121d0
2026-02-15T21:37:11.597 [DEBUG] [Thread-211632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:37:11.612 [DEBUG] [Thread-211632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:37:11.612 [INFO] [Thread-211632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:37:11.619 [DEBUG] [Thread-211632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:37:11.619 [DEBUG] [Thread-211632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] client lang: <none>
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] server lang: <none>
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] kex follows: False
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] Compression: none
2026-02-15T21:37:11.620 [DEBUG] [Thread-211632] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:37:11.681 [DEBUG] [Thread-211632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:37:11.681 [DEBUG] [Thread-211632] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:37:11.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:37:11.681 [DEBUG] [Thread-211632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:37:11.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:37:11.738 [DEBUG] [Thread-211632] [transport.py] [_log()] userauth is OK
2026-02-15T21:37:11.738 [DEBUG] [Thread-211632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:37:11.738 [DEBUG] [Thread-211632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:37:11.738 [DEBUG] [Thread-211632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:37:11.738 [DEBUG] [Thread-211632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:37:11.752 [INFO] [Thread-211632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:37:11.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:37:11.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:37:12.571 [DEBUG] [Thread-211632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:37:12.571 [DEBUG] [Thread-211632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:37:12.619 [DEBUG] [Thread-211632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:37:12.619 [DEBUG] [Thread-211632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:37:12.629 [DEBUG] [Thread-211632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:37:12.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:37:12.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:37:12.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:37:12.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:37:12.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:37:12.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:37:12.664 [DEBUG] [Thread-211632] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:37:18.437 [DEBUG] [Thread-211634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:26.575 [DEBUG] [Thread-211635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:33.583 [DEBUG] [Thread-211636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:41.521 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:41.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:37:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:37:42.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:37:42.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:37:44.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 37, 11), 15.13, 35.8, 0.0, 27.61, 16.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:37:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:37:11
2026-02-15T21:37:45.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:37:45.368 [DEBUG] [Thread-211637] [transport.py] [_log()] starting thread (client mode): 0xa2d12140
2026-02-15T21:37:45.369 [DEBUG] [Thread-211637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:37:45.377 [DEBUG] [Thread-211637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:37:45.377 [INFO] [Thread-211637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:37:45.383 [DEBUG] [Thread-211637] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] client lang: <none>
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] server lang: <none>
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] kex follows: False
2026-02-15T21:37:45.384 [DEBUG] [Thread-211637] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:37:45.385 [DEBUG] [Thread-211637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:37:45.385 [DEBUG] [Thread-211637] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:37:45.385 [DEBUG] [Thread-211637] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:37:45.385 [DEBUG] [Thread-211637] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:37:45.385 [DEBUG] [Thread-211637] [transport.py] [_log()] Compression: none
2026-02-15T21:37:45.385 [DEBUG] [Thread-211637] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:37:45.423 [DEBUG] [Thread-211637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:37:45.430 [DEBUG] [Thread-211637] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:37:45.432 [DEBUG] [Thread-211637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:37:45.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:37:45.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:37:45.437 [DEBUG] [Thread-211637] [transport.py] [_log()] userauth is OK
2026-02-15T21:37:45.438 [DEBUG] [Thread-211637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:37:45.438 [DEBUG] [Thread-211637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:37:45.438 [DEBUG] [Thread-211637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:37:45.438 [DEBUG] [Thread-211637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:37:45.462 [INFO] [Thread-211637] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:37:45.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:37:46.235 [DEBUG] [Thread-211637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:37:46.235 [DEBUG] [Thread-211637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:37:46.236 [DEBUG] [Thread-211637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:37:46.276 [DEBUG] [Thread-211637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:37:46.276 [DEBUG] [Thread-211637] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:37:46.278 [DEBUG] [Thread-211637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:37:46.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:37:46.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:37:46.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:37:46.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:37:46.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:37:46.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:37:46.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:37:46.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:37:46.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:37:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.817464 -999.00  +16.20  21.17     41   +3.00 1 1 1 1 1     0    0 13.00 -20.66 ZNESW 20.7 21.2 156.7 32.9 16.4 -24.6 16.3 -23.5 16.1 -22.6 16.4 -23.7
2026-02-15T21:37:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:37:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:37:46.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.817464
2026-02-15T21:37:46.309 [DEBUG] [Thread-211637] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:37:46.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:37:46.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:37:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:37:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:37:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:37:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:37:11', tmtdew=15.13, humidity=35.8, cloud=0.0, wind=27.61, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:37:11', seeing=1.87, atlas_timestamp='2026-02-15T19:37:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:34:00')
2026-02-15T21:37:46.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:37:46.442 [DEBUG] [Thread-211640] [transport.py] [_log()] starting thread (client mode): 0xa57e02e0
2026-02-15T21:37:46.442 [DEBUG] [Thread-211640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:37:46.448 [DEBUG] [Thread-211640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:37:46.448 [INFO] [Thread-211640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] client lang: <none>
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] server lang: <none>
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] kex follows: False
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:37:46.457 [DEBUG] [Thread-211640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:37:46.458 [DEBUG] [Thread-211640] [transport.py] [_log()] Compression: none
2026-02-15T21:37:46.458 [DEBUG] [Thread-211640] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:37:46.515 [DEBUG] [Thread-211640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:37:46.515 [DEBUG] [Thread-211640] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:37:46.516 [DEBUG] [Thread-211640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:37:46.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:37:46.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:37:46.570 [DEBUG] [Thread-211640] [transport.py] [_log()] userauth is OK
2026-02-15T21:37:46.570 [DEBUG] [Thread-211640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:37:46.570 [DEBUG] [Thread-211640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:37:46.570 [DEBUG] [Thread-211640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:37:46.570 [DEBUG] [Thread-211640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:37:46.586 [INFO] [Thread-211640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:37:46.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:37:46.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:37:47.405 [DEBUG] [Thread-211640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:37:47.406 [DEBUG] [Thread-211640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:37:47.453 [DEBUG] [Thread-211640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:37:47.453 [DEBUG] [Thread-211640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:37:47.462 [DEBUG] [Thread-211640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:37:47.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:37:47.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:37:47.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:37:47.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:37:47.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:37:47.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:37:47.499 [DEBUG] [Thread-211640] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:37:48.669 [DEBUG] [Thread-211642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:00.626 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:03.786 [DEBUG] [Thread-211643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:11.511 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:15.634 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:17.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:38:17.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:38:17.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:38:18.817 [DEBUG] [Thread-211644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:19.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 37, 47), 15.07, 35.82, 0.0, 27.86, 16.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:38:19.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:37:47
2026-02-15T21:38:19.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:38:20.070 [DEBUG] [Thread-211645] [transport.py] [_log()] starting thread (client mode): 0xa57e1f60
2026-02-15T21:38:20.070 [DEBUG] [Thread-211645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:38:20.086 [DEBUG] [Thread-211645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:38:20.086 [INFO] [Thread-211645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:38:20.091 [DEBUG] [Thread-211645] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:38:20.091 [DEBUG] [Thread-211645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] client lang: <none>
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] server lang: <none>
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] kex follows: False
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:38:20.092 [DEBUG] [Thread-211645] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:38:20.093 [DEBUG] [Thread-211645] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:38:20.093 [DEBUG] [Thread-211645] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:38:20.093 [DEBUG] [Thread-211645] [transport.py] [_log()] Compression: none
2026-02-15T21:38:20.093 [DEBUG] [Thread-211645] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:38:20.126 [DEBUG] [Thread-211645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:38:20.130 [DEBUG] [Thread-211645] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:38:20.132 [DEBUG] [Thread-211645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:38:20.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:38:20.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:38:20.136 [DEBUG] [Thread-211645] [transport.py] [_log()] userauth is OK
2026-02-15T21:38:20.136 [DEBUG] [Thread-211645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:38:20.137 [DEBUG] [Thread-211645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:38:20.137 [DEBUG] [Thread-211645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:38:20.137 [DEBUG] [Thread-211645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:38:20.162 [INFO] [Thread-211645] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:38:20.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:38:20.806 [DEBUG] [Thread-211645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:38:20.806 [DEBUG] [Thread-211645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:38:20.808 [DEBUG] [Thread-211645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:38:20.847 [DEBUG] [Thread-211645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:38:20.848 [DEBUG] [Thread-211645] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:38:20.851 [DEBUG] [Thread-211645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:38:20.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:38:20.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:38:20.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:38:20.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:38:20.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:38:20.875 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:38:20.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:38:20.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:38:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:38:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.817812 -999.00  +16.20  23.45     41   +3.00 1 1 1 1 1     0    0 12.79 -21.32 ZNESW 24.2 23.4 156.2 33.5 16.4 -24.5 16.4 -23.6 16.1 -22.6 16.4 -23.6
2026-02-15T21:38:20.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:38:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:38:20.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.817812
2026-02-15T21:38:20.877 [DEBUG] [Thread-211645] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:38:20.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:38:20.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:38:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:38:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:38:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:38:20.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:37:47', tmtdew=15.07, humidity=35.82, cloud=0.0, wind=27.86, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:37:47', seeing=1.87, atlas_timestamp='2026-02-15T19:37:38.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:36:00')
2026-02-15T21:38:20.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:38:20.983 [DEBUG] [Thread-211648] [transport.py] [_log()] starting thread (client mode): 0xa2d04a60
2026-02-15T21:38:20.983 [DEBUG] [Thread-211648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:38:20.998 [DEBUG] [Thread-211648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:38:20.998 [INFO] [Thread-211648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:21.005 [DEBUG] [Thread-211648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] client lang: <none>
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] server lang: <none>
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] kex follows: False
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] Compression: none
2026-02-15T21:38:21.006 [DEBUG] [Thread-211648] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:38:21.063 [DEBUG] [Thread-211648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:38:21.063 [DEBUG] [Thread-211648] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:38:21.064 [DEBUG] [Thread-211648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:38:21.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:38:21.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:38:21.119 [DEBUG] [Thread-211648] [transport.py] [_log()] userauth is OK
2026-02-15T21:38:21.119 [DEBUG] [Thread-211648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:38:21.119 [DEBUG] [Thread-211648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:38:21.119 [DEBUG] [Thread-211648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:38:21.119 [DEBUG] [Thread-211648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:38:21.142 [INFO] [Thread-211648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:38:21.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:38:21.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:38:21.969 [DEBUG] [Thread-211648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:38:21.970 [DEBUG] [Thread-211648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:38:22.018 [DEBUG] [Thread-211648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:38:22.018 [DEBUG] [Thread-211648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:38:22.027 [DEBUG] [Thread-211648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:38:22.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:38:22.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:38:22.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:38:22.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:38:22.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:38:22.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:38:22.062 [DEBUG] [Thread-211648] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:38:26.182 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:26.971 [DEBUG] [Thread-211650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:33.849 [DEBUG] [Thread-211651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:41.742 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:41.743 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:49.063 [DEBUG] [Thread-211652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:38:52.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:38:52.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:38:52.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:38:53.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 38, 23), 15.05, 35.88, 0.0, 26.66, 16.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:38:53.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:38:23
2026-02-15T21:38:54.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:38:54.551 [DEBUG] [Thread-211653] [transport.py] [_log()] starting thread (client mode): 0xa5772d10
2026-02-15T21:38:54.551 [DEBUG] [Thread-211653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:38:54.560 [DEBUG] [Thread-211653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:38:54.561 [INFO] [Thread-211653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:38:54.566 [DEBUG] [Thread-211653] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] client lang: <none>
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] server lang: <none>
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] kex follows: False
2026-02-15T21:38:54.567 [DEBUG] [Thread-211653] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:38:54.568 [DEBUG] [Thread-211653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:38:54.568 [DEBUG] [Thread-211653] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:38:54.568 [DEBUG] [Thread-211653] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:38:54.568 [DEBUG] [Thread-211653] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:38:54.568 [DEBUG] [Thread-211653] [transport.py] [_log()] Compression: none
2026-02-15T21:38:54.568 [DEBUG] [Thread-211653] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:38:54.609 [DEBUG] [Thread-211653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:38:54.615 [DEBUG] [Thread-211653] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:38:54.617 [DEBUG] [Thread-211653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:38:54.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:38:54.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:38:54.622 [DEBUG] [Thread-211653] [transport.py] [_log()] userauth is OK
2026-02-15T21:38:54.622 [DEBUG] [Thread-211653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:38:54.623 [DEBUG] [Thread-211653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:38:54.623 [DEBUG] [Thread-211653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:38:54.623 [DEBUG] [Thread-211653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:38:54.662 [INFO] [Thread-211653] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:38:54.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:38:55.324 [DEBUG] [Thread-211653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:38:55.324 [DEBUG] [Thread-211653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:38:55.326 [DEBUG] [Thread-211653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:38:55.364 [DEBUG] [Thread-211653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:38:55.364 [DEBUG] [Thread-211653] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:38:55.367 [DEBUG] [Thread-211653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:38:55.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:38:55.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:38:55.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:38:55.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:38:55.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:38:55.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:38:55.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:38:55.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:38:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:38:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.818159 -999.00  +16.20  21.77     41   +3.10 1 1 1 1 1     0    0 12.68 -24.19 ZNESW 20.1 21.8 158.6 32.9 16.4 -24.5 16.4 -23.6 16.1 -22.3 16.4 -23.7
2026-02-15T21:38:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:38:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:38:55.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.818159
2026-02-15T21:38:55.401 [DEBUG] [Thread-211653] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:38:55.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:38:55.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:38:55.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:38:55.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:38:55.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:38:55.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:38:23', tmtdew=15.05, humidity=35.88, cloud=0.0, wind=26.66, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:38:24', seeing=1.72, atlas_timestamp='2026-02-15T19:38:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:36:00')
2026-02-15T21:38:55.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:38:55.540 [DEBUG] [Thread-211656] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a80
2026-02-15T21:38:55.540 [DEBUG] [Thread-211656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:38:55.554 [DEBUG] [Thread-211656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:38:55.555 [INFO] [Thread-211656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:38:55.562 [DEBUG] [Thread-211656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:38:55.562 [DEBUG] [Thread-211656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:38:55.562 [DEBUG] [Thread-211656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:38:55.562 [DEBUG] [Thread-211656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] client lang: <none>
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] server lang: <none>
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] kex follows: False
2026-02-15T21:38:55.563 [DEBUG] [Thread-211656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:38:55.564 [DEBUG] [Thread-211656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:38:55.564 [DEBUG] [Thread-211656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:38:55.564 [DEBUG] [Thread-211656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:38:55.564 [DEBUG] [Thread-211656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:38:55.564 [DEBUG] [Thread-211656] [transport.py] [_log()] Compression: none
2026-02-15T21:38:55.564 [DEBUG] [Thread-211656] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:38:55.618 [DEBUG] [Thread-211656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:38:55.619 [DEBUG] [Thread-211656] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:38:55.619 [DEBUG] [Thread-211656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:38:55.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:38:55.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:38:55.674 [DEBUG] [Thread-211656] [transport.py] [_log()] userauth is OK
2026-02-15T21:38:55.674 [DEBUG] [Thread-211656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:38:55.675 [DEBUG] [Thread-211656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:38:55.675 [DEBUG] [Thread-211656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:38:55.675 [DEBUG] [Thread-211656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:38:55.695 [INFO] [Thread-211656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:38:55.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:38:55.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:38:56.505 [DEBUG] [Thread-211656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:38:56.505 [DEBUG] [Thread-211656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:38:56.553 [DEBUG] [Thread-211656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:38:56.553 [DEBUG] [Thread-211656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:38:56.562 [DEBUG] [Thread-211656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:38:56.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:38:56.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:38:56.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:38:56.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:38:56.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:38:56.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:38:56.598 [DEBUG] [Thread-211656] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:39:04.098 [DEBUG] [Thread-211658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:19.177 [DEBUG] [Thread-211659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:26.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:39:26.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:39: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-02-15T21:39:27.294 [DEBUG] [Thread-211660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 38, 58), 15.07, 35.82, 0.0, 32.22, 16.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:39:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:38:58
2026-02-15T21:39:28.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:39:29.011 [DEBUG] [Thread-211661] [transport.py] [_log()] starting thread (client mode): 0xa5772f20
2026-02-15T21:39:29.011 [DEBUG] [Thread-211661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:39:29.027 [DEBUG] [Thread-211661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:39:29.027 [INFO] [Thread-211661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:39:29.030 [DEBUG] [Thread-211661] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:39:29.030 [DEBUG] [Thread-211661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:39:29.030 [DEBUG] [Thread-211661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] client lang: <none>
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] server lang: <none>
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] kex follows: False
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] Compression: none
2026-02-15T21:39:29.031 [DEBUG] [Thread-211661] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:39:29.049 [DEBUG] [Thread-211661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:39:29.049 [DEBUG] [Thread-211661] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:39:29.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:39:29.052 [DEBUG] [Thread-211661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:39:29.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:39:29.093 [DEBUG] [Thread-211661] [transport.py] [_log()] userauth is OK
2026-02-15T21:39:29.094 [DEBUG] [Thread-211661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:39:29.094 [DEBUG] [Thread-211661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:39:29.094 [DEBUG] [Thread-211661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:39:29.094 [DEBUG] [Thread-211661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:39:29.131 [INFO] [Thread-211661] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:39:29.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:39:29.774 [DEBUG] [Thread-211661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:39:29.774 [DEBUG] [Thread-211661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:39:29.774 [DEBUG] [Thread-211661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:39:29.815 [DEBUG] [Thread-211661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:39:29.816 [DEBUG] [Thread-211661] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:39:29.819 [DEBUG] [Thread-211661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:39:29.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:39:29.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:39:29.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:39:29.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:39:29.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:39:29.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:39:29.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:39:29.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:39:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:39:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.818506 -999.00  +16.20  20.94     41   +3.10 1 1 1 1 1     0    0 12.66 -22.44 ZNESW 19.6 20.9 146.3 27.7 16.4 -24.5 16.3 -23.5 16.1 -22.4 16.4 -23.7
2026-02-15T21:39:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:39:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:39:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.818506
2026-02-15T21:39:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:39:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:39:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:39:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:39:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:39:29.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:38:58', tmtdew=15.07, humidity=35.82, cloud=0.0, wind=32.22, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:38:59', seeing=1.58, atlas_timestamp='2026-02-15T19:38:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:36:00')
2026-02-15T21:39:29.853 [DEBUG] [Thread-211661] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:39:29.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:39:29.954 [DEBUG] [Thread-211664] [transport.py] [_log()] starting thread (client mode): 0xa57e35b0
2026-02-15T21:39:29.955 [DEBUG] [Thread-211664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:39:29.969 [DEBUG] [Thread-211664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:39:29.970 [INFO] [Thread-211664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:39:29.977 [DEBUG] [Thread-211664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:39:29.977 [DEBUG] [Thread-211664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:39:29.977 [DEBUG] [Thread-211664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:39:29.977 [DEBUG] [Thread-211664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] client lang: <none>
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] server lang: <none>
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] kex follows: False
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] Compression: none
2026-02-15T21:39:29.978 [DEBUG] [Thread-211664] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:39:30.035 [DEBUG] [Thread-211664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:39:30.036 [DEBUG] [Thread-211664] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:39:30.036 [DEBUG] [Thread-211664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:39:30.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:39:30.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:39:30.091 [DEBUG] [Thread-211664] [transport.py] [_log()] userauth is OK
2026-02-15T21:39:30.091 [DEBUG] [Thread-211664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:39:30.091 [DEBUG] [Thread-211664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:39:30.091 [DEBUG] [Thread-211664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:39:30.092 [DEBUG] [Thread-211664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:39:30.115 [INFO] [Thread-211664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:39:30.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:39:30.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:39:30.974 [DEBUG] [Thread-211664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:39:30.974 [DEBUG] [Thread-211664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:39:31.022 [DEBUG] [Thread-211664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:39:31.022 [DEBUG] [Thread-211664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:39:31.032 [DEBUG] [Thread-211664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:39:31.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:39:31.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:39:31.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:39:31.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:39:31.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:39:31.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:39:31.078 [DEBUG] [Thread-211664] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:39:34.207 [DEBUG] [Thread-211666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:38.341 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:41.953 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:41.954 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:47.976 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:49.269 [DEBUG] [Thread-211667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:52.089 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:39:59.724 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:01.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:40:01.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:40:01.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:40:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 39, 34), 15.23, 35.7, 0.0, 28.69, 16.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:40:02.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:39:34
2026-02-15T21:40:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:40:03.400 [DEBUG] [Thread-211668] [transport.py] [_log()] starting thread (client mode): 0xa2dc17e0
2026-02-15T21:40:03.401 [DEBUG] [Thread-211668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:40:03.423 [DEBUG] [Thread-211668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:40:03.423 [INFO] [Thread-211668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] client lang: <none>
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] server lang: <none>
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] kex follows: False
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] Compression: none
2026-02-15T21:40:03.425 [DEBUG] [Thread-211668] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:40:03.439 [DEBUG] [Thread-211668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:40:03.439 [DEBUG] [Thread-211668] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:40:03.439 [DEBUG] [Thread-211668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:40:03.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:40:03.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:40:03.442 [DEBUG] [Thread-211668] [transport.py] [_log()] userauth is OK
2026-02-15T21:40:03.442 [DEBUG] [Thread-211668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:40:03.442 [DEBUG] [Thread-211668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:40:03.442 [DEBUG] [Thread-211668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:40:03.442 [DEBUG] [Thread-211668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:40:03.453 [INFO] [Thread-211668] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:40:03.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:40:04.310 [DEBUG] [Thread-211670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:04.600 [DEBUG] [Thread-211668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:40:04.600 [DEBUG] [Thread-211668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:40:04.600 [DEBUG] [Thread-211668] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:40:04.641 [DEBUG] [Thread-211668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:40:04.642 [DEBUG] [Thread-211668] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:40:04.644 [DEBUG] [Thread-211668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:40:04.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:40:04.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:40:04.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:40:04.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:40:04.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:40:04.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:40:04.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.818853 -999.00  +16.20  28.62     41   +3.10 1 1 1 1 1     0    0 12.74 -23.46 ZNESW 26.3 28.6 161.4 31.4 16.4 -24.4 16.4 -23.6 16.1 -22.5 16.4 -23.8
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.818853
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:40:04.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:40:04.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:40:04.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:39:34', tmtdew=15.23, humidity=35.7, cloud=0.0, wind=28.69, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:39:34', seeing=1.9, atlas_timestamp='2026-02-15T19:39:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:36:00')
2026-02-15T21:40:04.676 [DEBUG] [Thread-211668] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:40:04.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:40:04.762 [DEBUG] [Thread-211672] [transport.py] [_log()] starting thread (client mode): 0xa5770280
2026-02-15T21:40:04.762 [DEBUG] [Thread-211672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:40:04.777 [DEBUG] [Thread-211672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:40:04.777 [INFO] [Thread-211672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:40:04.784 [DEBUG] [Thread-211672] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:40:04.784 [DEBUG] [Thread-211672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] client lang: <none>
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] server lang: <none>
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] kex follows: False
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] Compression: none
2026-02-15T21:40:04.785 [DEBUG] [Thread-211672] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:40:04.851 [DEBUG] [Thread-211672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:40:04.852 [DEBUG] [Thread-211672] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:40:04.852 [DEBUG] [Thread-211672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:40:04.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:40:04.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:40:04.910 [DEBUG] [Thread-211672] [transport.py] [_log()] userauth is OK
2026-02-15T21:40:04.911 [DEBUG] [Thread-211672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:40:04.911 [DEBUG] [Thread-211672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:40:04.911 [DEBUG] [Thread-211672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:40:04.911 [DEBUG] [Thread-211672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:40:04.930 [INFO] [Thread-211672] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:40:04.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:40:04.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:40:05.778 [DEBUG] [Thread-211672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:40:05.778 [DEBUG] [Thread-211672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:40:05.825 [DEBUG] [Thread-211672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:40:05.825 [DEBUG] [Thread-211672] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:40:05.834 [DEBUG] [Thread-211672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:40:05.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:40:05.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:40:05.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:40:05.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:40:05.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:40:05.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:40:05.870 [DEBUG] [Thread-211672] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:40:19.342 [DEBUG] [Thread-211674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:27.378 [DEBUG] [Thread-211675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:34.391 [DEBUG] [Thread-211676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:40:35.893 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:40:35.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:40:37.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 40, 9), 15.05, 35.9, 0.0, 28.46, 16.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:40:37.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:40:09
2026-02-15T21:40:38.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:40:38.412 [DEBUG] [Thread-211677] [transport.py] [_log()] starting thread (client mode): 0xa5773e20
2026-02-15T21:40:38.412 [DEBUG] [Thread-211677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:40:38.434 [DEBUG] [Thread-211677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:40:38.434 [INFO] [Thread-211677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:38.437 [DEBUG] [Thread-211677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] client lang: <none>
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] server lang: <none>
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] kex follows: False
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] Compression: none
2026-02-15T21:40:38.438 [DEBUG] [Thread-211677] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:40:38.455 [DEBUG] [Thread-211677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:40:38.456 [DEBUG] [Thread-211677] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:40:38.456 [DEBUG] [Thread-211677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:40:38.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:40:38.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:40:38.458 [DEBUG] [Thread-211677] [transport.py] [_log()] userauth is OK
2026-02-15T21:40:38.459 [DEBUG] [Thread-211677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:40:38.459 [DEBUG] [Thread-211677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:40:38.459 [DEBUG] [Thread-211677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:40:38.459 [DEBUG] [Thread-211677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:40:38.484 [INFO] [Thread-211677] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:40:38.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:40:39.270 [DEBUG] [Thread-211677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:40:39.270 [DEBUG] [Thread-211677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:40:39.271 [DEBUG] [Thread-211677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:40:39.312 [DEBUG] [Thread-211677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:40:39.313 [DEBUG] [Thread-211677] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:40:39.316 [DEBUG] [Thread-211677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:40:39.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:40:39.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:40:39.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:40:39.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:40:39.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:40:39.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:40:39.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:40:39.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:40:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:40:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.819201 -999.00  +16.20  16.41     41   +3.00 1 1 1 1 1     0    0 12.78 -23.42 ZNESW 15.6 16.4 145.8 25.1 16.4 -24.7 16.3 -23.6 16.1 -22.5 16.4 -23.8
2026-02-15T21:40:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:40:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:40:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.819201
2026-02-15T21:40:39.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:40:39.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:40:39.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:40:39.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:40:39.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:40:39.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:40:09', tmtdew=15.05, humidity=35.9, cloud=0.0, wind=28.46, temperature=16.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:40:09', seeing=2.18, atlas_timestamp='2026-02-15T19:39:38.966', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:36:00')
2026-02-15T21:40:39.346 [DEBUG] [Thread-211677] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:40:39.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:40:39.441 [DEBUG] [Thread-211680] [transport.py] [_log()] starting thread (client mode): 0xa2dc04c0
2026-02-15T21:40:39.441 [DEBUG] [Thread-211680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:40:39.456 [DEBUG] [Thread-211680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:40:39.456 [INFO] [Thread-211680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:40:39.464 [DEBUG] [Thread-211680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:40:39.464 [DEBUG] [Thread-211680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:40:39.464 [DEBUG] [Thread-211680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] client lang: <none>
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] server lang: <none>
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] kex follows: False
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:40:39.465 [DEBUG] [Thread-211680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:40:39.466 [DEBUG] [Thread-211680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:40:39.466 [DEBUG] [Thread-211680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:40:39.466 [DEBUG] [Thread-211680] [transport.py] [_log()] Compression: none
2026-02-15T21:40:39.466 [DEBUG] [Thread-211680] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:40:39.523 [DEBUG] [Thread-211680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:40:39.523 [DEBUG] [Thread-211680] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:40:39.524 [DEBUG] [Thread-211680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:40:39.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:40:39.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:40:39.579 [DEBUG] [Thread-211680] [transport.py] [_log()] userauth is OK
2026-02-15T21:40:39.579 [DEBUG] [Thread-211680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:40:39.579 [DEBUG] [Thread-211680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:40:39.579 [DEBUG] [Thread-211680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:40:39.579 [DEBUG] [Thread-211680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:40:39.598 [INFO] [Thread-211680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:40:39.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:40:39.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:40:40.429 [DEBUG] [Thread-211680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:40:40.429 [DEBUG] [Thread-211680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:40:40.477 [DEBUG] [Thread-211680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:40:40.477 [DEBUG] [Thread-211680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:40:40.487 [DEBUG] [Thread-211680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:40:40.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:40:40.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:40:40.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:40:40.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:40:40.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:40:40.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:40:40.528 [DEBUG] [Thread-211680] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:40:42.155 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:42.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:40:49.423 [DEBUG] [Thread-211682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:04.478 [DEBUG] [Thread-211683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:10.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:41:10.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:41:10.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:41:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 40, 44), 15.03, 35.91, 0.0, 29.8, 16.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:41:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:40:44
2026-02-15T21:41:13.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:41:13.616 [DEBUG] [Thread-211684] [transport.py] [_log()] starting thread (client mode): 0xa57421d0
2026-02-15T21:41:13.616 [DEBUG] [Thread-211684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:41:13.630 [DEBUG] [Thread-211684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:41:13.630 [INFO] [Thread-211684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:41:13.633 [DEBUG] [Thread-211684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:41:13.633 [DEBUG] [Thread-211684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:41:13.633 [DEBUG] [Thread-211684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:41:13.633 [DEBUG] [Thread-211684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] client lang: <none>
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] server lang: <none>
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] kex follows: False
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] Compression: none
2026-02-15T21:41:13.634 [DEBUG] [Thread-211684] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:41:13.653 [DEBUG] [Thread-211684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:41:13.654 [DEBUG] [Thread-211684] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:41:13.655 [DEBUG] [Thread-211684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:41:13.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:41:13.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:41:13.658 [DEBUG] [Thread-211684] [transport.py] [_log()] userauth is OK
2026-02-15T21:41:13.658 [DEBUG] [Thread-211684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:41:13.658 [DEBUG] [Thread-211684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:41:13.658 [DEBUG] [Thread-211684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:41:13.658 [DEBUG] [Thread-211684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:41:13.684 [INFO] [Thread-211684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:41:13.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:41:14.356 [DEBUG] [Thread-211684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:41:14.356 [DEBUG] [Thread-211684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:41:14.357 [DEBUG] [Thread-211684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:41:14.397 [DEBUG] [Thread-211684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:41:14.398 [DEBUG] [Thread-211684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:41:14.401 [DEBUG] [Thread-211684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:41:14.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:41:14.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:41:14.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:41:14.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:41:14.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:41:14.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:41:14.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:41:14.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:41:14.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:41:14.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.819895 -999.00  +16.10  16.70     41   +3.00 1 1 1 1 1     0    0 12.65 -25.69 ZNESW 15.9 16.7 150.8 26.9 16.4 -24.7 16.3 -23.6 16.1 -22.5 16.4 -23.8
2026-02-15T21:41:14.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:41:14.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:41:14.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.819895
2026-02-15T21:41:14.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:41:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:41:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:41:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:41:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:41:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:40:44', tmtdew=15.03, humidity=35.91, cloud=0.0, wind=29.8, temperature=16.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:40:45', seeing=2.66, atlas_timestamp='2026-02-15T19:40:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.03575000000000017, -0.003750000000000142, -0.014499999999999957, 0.0389999999999997, 0.0032500000000013074, -0.01750000000000007, 0.00575000000000081, -0.0015000000000000568, 0.021000000000000796, 0.006249999999999645, 0.01699999999999946, 0.047999999999998266, 0.006249999999999645, -0.030000000000001137, 0.015000000000000568, 0.028249999999999886, 0.018499999999999517, -0.032999999999999474, 0.0017499999999994742, 0.05699999999999861, 0.07324999999999804, -0.016750000000000043, -0.023749999999999716, 0.021499999999997854, 0.07600000000000051, 0.0007500000000000284, -0.00849999999999973, 0.045999999999999375, 0.08200000000000074, 0.0259999999999998, -0.014999999999998792, 0.015750000000000597], zp_timestamp='2026-02-15T19:36:00')
2026-02-15T21:41:14.426 [DEBUG] [Thread-211684] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:41:14.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:41:14.521 [DEBUG] [Thread-211687] [transport.py] [_log()] starting thread (client mode): 0xa2d057b0
2026-02-15T21:41:14.522 [DEBUG] [Thread-211687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:41:14.537 [DEBUG] [Thread-211687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:41:14.537 [INFO] [Thread-211687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:41:14.544 [DEBUG] [Thread-211687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:41:14.545 [DEBUG] [Thread-211687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:41:14.545 [DEBUG] [Thread-211687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:41:14.545 [DEBUG] [Thread-211687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:14.545 [DEBUG] [Thread-211687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:14.545 [DEBUG] [Thread-211687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:14.545 [DEBUG] [Thread-211687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] client lang: <none>
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] server lang: <none>
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] kex follows: False
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:41:14.546 [DEBUG] [Thread-211687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:41:14.547 [DEBUG] [Thread-211687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:41:14.547 [DEBUG] [Thread-211687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:41:14.547 [DEBUG] [Thread-211687] [transport.py] [_log()] Compression: none
2026-02-15T21:41:14.547 [DEBUG] [Thread-211687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:41:14.602 [DEBUG] [Thread-211687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:41:14.603 [DEBUG] [Thread-211687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:41:14.603 [DEBUG] [Thread-211687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:41:14.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:41:14.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:41:14.657 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:14.658 [DEBUG] [Thread-211687] [transport.py] [_log()] userauth is OK
2026-02-15T21:41:14.658 [DEBUG] [Thread-211687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:41:14.658 [DEBUG] [Thread-211687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:41:14.659 [DEBUG] [Thread-211687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:41:14.659 [DEBUG] [Thread-211687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:41:14.673 [INFO] [Thread-211687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:41:14.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:41:14.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:41:15.497 [DEBUG] [Thread-211687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:41:15.497 [DEBUG] [Thread-211687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:41:15.547 [DEBUG] [Thread-211687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:41:15.548 [DEBUG] [Thread-211687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:41:15.560 [DEBUG] [Thread-211687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:41:15.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:41:15.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:41:15.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:41:15.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:41:15.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:41:15.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:41:15.597 [DEBUG] [Thread-211687] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:41:19.513 [DEBUG] [Thread-211689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:27.449 [DEBUG] [Thread-211690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:33.445 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:34.588 [DEBUG] [Thread-211691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:42.365 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:42.366 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:45.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:41:45.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:41:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:41:47.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 41, 20), 15.02, 35.96, 0.0, 30.63, 16.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:41:47.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:41:20
2026-02-15T21:41:48.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:41:48.214 [DEBUG] [Thread-211692] [transport.py] [_log()] starting thread (client mode): 0xa57731c0
2026-02-15T21:41:48.214 [DEBUG] [Thread-211692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:41:48.235 [DEBUG] [Thread-211692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:41:48.235 [INFO] [Thread-211692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] client lang: <none>
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] server lang: <none>
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] kex follows: False
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:41:48.238 [DEBUG] [Thread-211692] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:41:48.239 [DEBUG] [Thread-211692] [transport.py] [_log()] Compression: none
2026-02-15T21:41:48.239 [DEBUG] [Thread-211692] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:41:48.255 [DEBUG] [Thread-211692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:41:48.255 [DEBUG] [Thread-211692] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:41:48.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:41:48.256 [DEBUG] [Thread-211692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:41:48.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:41:48.259 [DEBUG] [Thread-211692] [transport.py] [_log()] userauth is OK
2026-02-15T21:41:48.259 [DEBUG] [Thread-211692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:41:48.259 [DEBUG] [Thread-211692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:41:48.259 [DEBUG] [Thread-211692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:41:48.259 [DEBUG] [Thread-211692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:41:48.295 [INFO] [Thread-211692] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:41:48.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:41:48.873 [DEBUG] [Thread-211692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:41:48.874 [DEBUG] [Thread-211692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:41:48.874 [DEBUG] [Thread-211692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:41:48.915 [DEBUG] [Thread-211692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:41:48.915 [DEBUG] [Thread-211692] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:41:48.918 [DEBUG] [Thread-211692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:41:48.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:41:48.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:41:48.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:41:48.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:41:48.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:41:48.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:41:48.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:41:48.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:41:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:41:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.820242 -999.00  +16.10  22.19     41   +3.10 1 1 1 1 1     0    0 12.73 -26.67 ZNESW 23.3 22.2 153.8 29.1 16.4 -24.4 16.3 -23.5 16.1 -22.4 16.4 -23.7
2026-02-15T21:41:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:41:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:41:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.820242
2026-02-15T21:41:48.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:41:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:41:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:41:48.952 [DEBUG] [Thread-211692] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:41:48.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:41:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:41:48.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:41:20', tmtdew=15.02, humidity=35.96, cloud=0.0, wind=30.63, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:41:21', seeing=2.09, atlas_timestamp='2026-02-15T19:41:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:39:00')
2026-02-15T21:41:49.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:41:49.048 [DEBUG] [Thread-211695] [transport.py] [_log()] starting thread (client mode): 0xa5773280
2026-02-15T21:41:49.048 [DEBUG] [Thread-211695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:41:49.065 [DEBUG] [Thread-211695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:41:49.065 [INFO] [Thread-211695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] client lang: <none>
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] server lang: <none>
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] kex follows: False
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:41:49.073 [DEBUG] [Thread-211695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:41:49.074 [DEBUG] [Thread-211695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:41:49.074 [DEBUG] [Thread-211695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:41:49.074 [DEBUG] [Thread-211695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:41:49.074 [DEBUG] [Thread-211695] [transport.py] [_log()] Compression: none
2026-02-15T21:41:49.074 [DEBUG] [Thread-211695] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:41:49.131 [DEBUG] [Thread-211695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:41:49.131 [DEBUG] [Thread-211695] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:41:49.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:41:49.132 [DEBUG] [Thread-211695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:41:49.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:41:49.191 [DEBUG] [Thread-211695] [transport.py] [_log()] userauth is OK
2026-02-15T21:41:49.192 [DEBUG] [Thread-211695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:41:49.192 [DEBUG] [Thread-211695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:41:49.192 [DEBUG] [Thread-211695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:41:49.192 [DEBUG] [Thread-211695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:41:49.211 [INFO] [Thread-211695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:41:49.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:41:49.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:41:49.634 [DEBUG] [Thread-211697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:41:50.088 [DEBUG] [Thread-211695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:41:50.089 [DEBUG] [Thread-211695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:41:50.136 [DEBUG] [Thread-211695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:41:50.136 [DEBUG] [Thread-211695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:41:50.145 [DEBUG] [Thread-211695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:41:50.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:41:50.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:41:50.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:41:50.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:41:50.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:41:50.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:41:50.182 [DEBUG] [Thread-211695] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:42:04.690 [DEBUG] [Thread-211698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:19.730 [DEBUG] [Thread-211699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:20.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:42:20.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:42:20.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:42:20.251 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:22.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 41, 56), 14.95, 36.5, 0.0, 28.6, 16.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:42:22.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:41:56
2026-02-15T21:42:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:42:23.055 [DEBUG] [Thread-211700] [transport.py] [_log()] starting thread (client mode): 0xa5773f40
2026-02-15T21:42:23.055 [DEBUG] [Thread-211700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:42:23.074 [DEBUG] [Thread-211700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:42:23.074 [INFO] [Thread-211700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:23.076 [DEBUG] [Thread-211700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] client lang: <none>
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] server lang: <none>
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] kex follows: False
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] Compression: none
2026-02-15T21:42:23.077 [DEBUG] [Thread-211700] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:42:23.094 [DEBUG] [Thread-211700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:42:23.094 [DEBUG] [Thread-211700] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:42:23.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:42:23.095 [DEBUG] [Thread-211700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:42:23.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:42:23.097 [DEBUG] [Thread-211700] [transport.py] [_log()] userauth is OK
2026-02-15T21:42:23.097 [DEBUG] [Thread-211700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:42:23.097 [DEBUG] [Thread-211700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:42:23.097 [DEBUG] [Thread-211700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:42:23.098 [DEBUG] [Thread-211700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:42:23.122 [INFO] [Thread-211700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:42:23.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:42:23.448 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:23.738 [DEBUG] [Thread-211700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:42:23.738 [DEBUG] [Thread-211700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:42:23.738 [DEBUG] [Thread-211700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:42:23.778 [DEBUG] [Thread-211700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:42:23.779 [DEBUG] [Thread-211700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:42:23.782 [DEBUG] [Thread-211700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:42:23.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:42:23.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:42:23.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:42:23.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:42:23.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:42:23.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:42:23.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:42:23.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:42:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:42:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.820589 -999.00  +16.10  23.57     41   +3.10 1 1 1 1 1     0    0 12.47 -28.51 ZNESW 23.2 23.6 151.6 31.9 16.4 -24.5 16.3 -23.6 16.1 -22.4 16.3 -23.7
2026-02-15T21:42:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:42:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:42:23.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.820589
2026-02-15T21:42:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:42:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:42:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:42:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:42:23.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:42:23.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:41:56', tmtdew=14.95, humidity=36.5, cloud=0.0, wind=28.6, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:41:56', seeing=2.0, atlas_timestamp='2026-02-15T19:41:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:39:00')
2026-02-15T21:42:23.810 [DEBUG] [Thread-211700] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:42:23.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:42:23.907 [DEBUG] [Thread-211703] [transport.py] [_log()] starting thread (client mode): 0xa5772e30
2026-02-15T21:42:23.907 [DEBUG] [Thread-211703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:42:23.922 [DEBUG] [Thread-211703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:42:23.922 [INFO] [Thread-211703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:42:23.930 [DEBUG] [Thread-211703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] client lang: <none>
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] server lang: <none>
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] kex follows: False
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:42:23.931 [DEBUG] [Thread-211703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:42:23.932 [DEBUG] [Thread-211703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:42:23.932 [DEBUG] [Thread-211703] [transport.py] [_log()] Compression: none
2026-02-15T21:42:23.932 [DEBUG] [Thread-211703] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:42:24.007 [DEBUG] [Thread-211703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:42:24.008 [DEBUG] [Thread-211703] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:42:24.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:42:24.009 [DEBUG] [Thread-211703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:42:24.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:42:24.067 [DEBUG] [Thread-211703] [transport.py] [_log()] userauth is OK
2026-02-15T21:42:24.067 [DEBUG] [Thread-211703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:42:24.068 [DEBUG] [Thread-211703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:42:24.068 [DEBUG] [Thread-211703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:42:24.068 [DEBUG] [Thread-211703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:42:24.092 [INFO] [Thread-211703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:42:24.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:42:24.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:42:24.925 [DEBUG] [Thread-211703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:42:24.925 [DEBUG] [Thread-211703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:42:24.973 [DEBUG] [Thread-211703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:42:24.974 [DEBUG] [Thread-211703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:42:24.984 [DEBUG] [Thread-211703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:42:24.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:42:24.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:42:25.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:42:25.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:42:25.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:42:25.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:42:25.031 [DEBUG] [Thread-211703] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:42:27.505 [DEBUG] [Thread-211705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:28.525 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:34.776 [DEBUG] [Thread-211706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:34.952 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:42.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:42.568 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:49.825 [DEBUG] [Thread-211707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:53.369 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:55.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:42:55.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:42:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:42:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 42, 31), 14.95, 36.5, 0.0, 26.68, 16.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:42:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:42:31
2026-02-15T21:42:57.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:42:57.460 [DEBUG] [Thread-211708] [transport.py] [_log()] starting thread (client mode): 0xa57e2d70
2026-02-15T21:42:57.461 [DEBUG] [Thread-211708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:42:57.479 [DEBUG] [Thread-211708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:42:57.480 [INFO] [Thread-211708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] client lang: <none>
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] server lang: <none>
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] kex follows: False
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] Compression: none
2026-02-15T21:42:57.483 [DEBUG] [Thread-211708] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:42:57.491 [DEBUG] [Thread-211708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:42:57.491 [DEBUG] [Thread-211708] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:42:57.492 [DEBUG] [Thread-211708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:42:57.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:42:57.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:42:57.493 [DEBUG] [Thread-211708] [transport.py] [_log()] userauth is OK
2026-02-15T21:42:57.493 [DEBUG] [Thread-211708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:42:57.493 [DEBUG] [Thread-211708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:42:57.493 [DEBUG] [Thread-211708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:42:57.493 [DEBUG] [Thread-211708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:42:57.513 [INFO] [Thread-211708] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:42:57.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:42:57.754 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:42:58.157 [DEBUG] [Thread-211708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:42:58.157 [DEBUG] [Thread-211708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:42:58.157 [DEBUG] [Thread-211708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:42:58.198 [DEBUG] [Thread-211708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:42:58.198 [DEBUG] [Thread-211708] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:42:58.202 [DEBUG] [Thread-211708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:42:58.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:42:58.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:42:58.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:42:58.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:42:58.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:42:58.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:42:58.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:42:58.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.820937 -999.00  +16.10  18.13     41   +3.10 1 1 1 1 1     0    0 12.52 -30.38 ZNESW 18.1 18.1 154.4 23.0 16.4 -24.6 16.3 -23.5 16.1 -22.5 16.4 -23.7
2026-02-15T21:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.820937
2026-02-15T21:42:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:42:58.234 [DEBUG] [Thread-211708] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:42:58.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:42:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:42:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:42:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:42:58.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:42:31', tmtdew=14.95, humidity=36.5, cloud=0.0, wind=26.68, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:42:32', seeing=1.66, atlas_timestamp='2026-02-15T19:42:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:39:00')
2026-02-15T21:42:58.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:42:58.332 [DEBUG] [Thread-211711] [transport.py] [_log()] starting thread (client mode): 0xa5742680
2026-02-15T21:42:58.333 [DEBUG] [Thread-211711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:42:58.348 [DEBUG] [Thread-211711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:42:58.348 [INFO] [Thread-211711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:42:58.358 [DEBUG] [Thread-211711] [transport.py] [_log()] client lang: <none>
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] server lang: <none>
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] kex follows: False
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:42:58.359 [DEBUG] [Thread-211711] [transport.py] [_log()] Compression: none
2026-02-15T21:42:58.360 [DEBUG] [Thread-211711] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:42:58.423 [DEBUG] [Thread-211711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:42:58.423 [DEBUG] [Thread-211711] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:42:58.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:42:58.424 [DEBUG] [Thread-211711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:42:58.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:42:58.479 [DEBUG] [Thread-211711] [transport.py] [_log()] userauth is OK
2026-02-15T21:42:58.479 [DEBUG] [Thread-211711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:42:58.479 [DEBUG] [Thread-211711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:42:58.479 [DEBUG] [Thread-211711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:42:58.480 [DEBUG] [Thread-211711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:42:58.504 [INFO] [Thread-211711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:42:58.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:42:58.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:42:59.316 [DEBUG] [Thread-211711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:42:59.317 [DEBUG] [Thread-211711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:42:59.364 [DEBUG] [Thread-211711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:42:59.365 [DEBUG] [Thread-211711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:42:59.374 [DEBUG] [Thread-211711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:42:59.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:42:59.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:42:59.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:42:59.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:42:59.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:42:59.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:42:59.411 [DEBUG] [Thread-211711] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:43:04.870 [DEBUG] [Thread-211713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:07.046 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:17.212 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:19.918 [DEBUG] [Thread-211714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:21.631 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:27.569 [DEBUG] [Thread-211715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:27.724 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:29.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:43:29.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:43:29.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:43:31.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 43, 7), 14.94, 36.53, 0.0, 24.67, 16.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:43:31.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:43:07
2026-02-15T21:43:31.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:43:31.730 [DEBUG] [Thread-211716] [transport.py] [_log()] starting thread (client mode): 0xa57d6a10
2026-02-15T21:43:31.730 [DEBUG] [Thread-211716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:43:31.740 [DEBUG] [Thread-211716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:43:31.740 [INFO] [Thread-211716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] client lang: <none>
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] server lang: <none>
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] kex follows: False
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] Compression: none
2026-02-15T21:43:31.741 [DEBUG] [Thread-211716] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:43:31.750 [DEBUG] [Thread-211716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:43:31.750 [DEBUG] [Thread-211716] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:43:31.750 [DEBUG] [Thread-211716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:43:31.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:43:31.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:43:31.751 [DEBUG] [Thread-211716] [transport.py] [_log()] userauth is OK
2026-02-15T21:43:31.751 [DEBUG] [Thread-211716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:43:31.751 [DEBUG] [Thread-211716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:43:31.751 [DEBUG] [Thread-211716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:43:31.751 [DEBUG] [Thread-211716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:43:31.761 [INFO] [Thread-211716] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:43:31.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:43:32.124 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:32.469 [DEBUG] [Thread-211716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:43:32.469 [DEBUG] [Thread-211716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:43:32.469 [DEBUG] [Thread-211716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:43:32.510 [DEBUG] [Thread-211716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:43:32.511 [DEBUG] [Thread-211716] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:43:32.514 [DEBUG] [Thread-211716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:43:32.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:43:32.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:43:32.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:43:32.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:43:32.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:43:32.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:43:32.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:43:32.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:43:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:43:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.821284 -999.00  +16.10  20.89     41   +3.10 1 1 1 1 1     0    0 12.53 -31.42 ZNESW 20.1 20.9 164.0 25.6 16.4 -24.5 16.3 -23.5 16.1 -22.5 16.3 -23.7
2026-02-15T21:43:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:43:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:43:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.821284
2026-02-15T21:43:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:43:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:43:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:43:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:43:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:43:32.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:43:07', tmtdew=14.94, humidity=36.53, cloud=0.0, wind=24.67, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:43:08', seeing=1.71, atlas_timestamp='2026-02-15T19:42:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:39:00')
2026-02-15T21:43:32.542 [DEBUG] [Thread-211716] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:43:32.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:43:32.638 [DEBUG] [Thread-211719] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-15T21:43:32.639 [DEBUG] [Thread-211719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:43:32.653 [DEBUG] [Thread-211719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:43:32.653 [INFO] [Thread-211719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] client lang: <none>
2026-02-15T21:43:32.661 [DEBUG] [Thread-211719] [transport.py] [_log()] server lang: <none>
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] kex follows: False
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] Compression: none
2026-02-15T21:43:32.662 [DEBUG] [Thread-211719] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:43:32.717 [DEBUG] [Thread-211719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:43:32.717 [DEBUG] [Thread-211719] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:43:32.717 [DEBUG] [Thread-211719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:43:32.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:43:32.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:43:32.775 [DEBUG] [Thread-211719] [transport.py] [_log()] userauth is OK
2026-02-15T21:43:32.775 [DEBUG] [Thread-211719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:43:32.775 [DEBUG] [Thread-211719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:43:32.776 [DEBUG] [Thread-211719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:43:32.776 [DEBUG] [Thread-211719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:43:32.794 [INFO] [Thread-211719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:43:32.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:43:32.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:43:33.622 [DEBUG] [Thread-211719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:43:33.622 [DEBUG] [Thread-211719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:43:33.671 [DEBUG] [Thread-211719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:43:33.671 [DEBUG] [Thread-211719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:43:33.680 [DEBUG] [Thread-211719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:43:33.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:43:33.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:43:33.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:43:33.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:43:33.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:43:33.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:43:33.724 [DEBUG] [Thread-211719] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:43:34.960 [DEBUG] [Thread-211721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:42.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:42.770 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:43:50.021 [DEBUG] [Thread-211722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:03.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:44:03.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:44:03.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:44:05.065 [DEBUG] [Thread-211723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 43, 45), 14.88, 36.55, 0.0, 29.68, 16.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:44:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:43:45
2026-02-15T21:44:05.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:44:06.136 [DEBUG] [Thread-211724] [transport.py] [_log()] starting thread (client mode): 0xa2d79330
2026-02-15T21:44:06.136 [DEBUG] [Thread-211724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:44:06.157 [DEBUG] [Thread-211724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:44:06.157 [INFO] [Thread-211724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:44:06.160 [DEBUG] [Thread-211724] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:44:06.160 [DEBUG] [Thread-211724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:44:06.160 [DEBUG] [Thread-211724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:44:06.160 [DEBUG] [Thread-211724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:06.160 [DEBUG] [Thread-211724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] client lang: <none>
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] server lang: <none>
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] kex follows: False
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] Compression: none
2026-02-15T21:44:06.161 [DEBUG] [Thread-211724] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:44:06.179 [DEBUG] [Thread-211724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:44:06.180 [DEBUG] [Thread-211724] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:44:06.181 [DEBUG] [Thread-211724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:44:06.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:44:06.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:44:06.182 [DEBUG] [Thread-211724] [transport.py] [_log()] userauth is OK
2026-02-15T21:44:06.183 [DEBUG] [Thread-211724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:44:06.183 [DEBUG] [Thread-211724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:44:06.183 [DEBUG] [Thread-211724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:44:06.183 [DEBUG] [Thread-211724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:44:06.218 [INFO] [Thread-211724] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:44:06.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:44:06.846 [DEBUG] [Thread-211724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:44:06.847 [DEBUG] [Thread-211724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:44:06.847 [DEBUG] [Thread-211724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:44:06.887 [DEBUG] [Thread-211724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:44:06.888 [DEBUG] [Thread-211724] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:44:06.891 [DEBUG] [Thread-211724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:44:06.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:44:06.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:44:06.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:44:06.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:44:06.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:44:06.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:44:06.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:44:06.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:44:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:44:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.821631 -999.00  +16.10  24.72     42   +3.20 1 1 1 1 1     0    0 12.22 -34.00 ZNESW 22.2 24.7 168.5 32.9 16.4 -24.5 16.3 -23.5 16.1 -22.4 16.3 -23.6
2026-02-15T21:44:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:44:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:44:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.821631
2026-02-15T21:44:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:44:06.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:44:06.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:44:06.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:44:06.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:44:06.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:43:45', tmtdew=14.88, humidity=36.55, cloud=0.0, wind=29.68, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:43:45', seeing=1.93, atlas_timestamp='2026-02-15T19:43:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:39:00')
2026-02-15T21:44:06.917 [DEBUG] [Thread-211724] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:44:07.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:44:07.013 [DEBUG] [Thread-211727] [transport.py] [_log()] starting thread (client mode): 0xa2d07ac0
2026-02-15T21:44:07.013 [DEBUG] [Thread-211727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:44:07.027 [DEBUG] [Thread-211727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:44:07.028 [INFO] [Thread-211727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:44:07.035 [DEBUG] [Thread-211727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:44:07.035 [DEBUG] [Thread-211727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:44:07.035 [DEBUG] [Thread-211727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:44:07.035 [DEBUG] [Thread-211727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] client lang: <none>
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] server lang: <none>
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] kex follows: False
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] Compression: none
2026-02-15T21:44:07.036 [DEBUG] [Thread-211727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:44:07.095 [DEBUG] [Thread-211727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:44:07.095 [DEBUG] [Thread-211727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:44:07.096 [DEBUG] [Thread-211727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:44:07.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:44:07.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:44:07.151 [DEBUG] [Thread-211727] [transport.py] [_log()] userauth is OK
2026-02-15T21:44:07.151 [DEBUG] [Thread-211727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:44:07.151 [DEBUG] [Thread-211727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:44:07.151 [DEBUG] [Thread-211727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:44:07.151 [DEBUG] [Thread-211727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:44:07.170 [INFO] [Thread-211727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:44:07.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:44:07.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:44:08.010 [DEBUG] [Thread-211727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:44:08.011 [DEBUG] [Thread-211727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:44:08.058 [DEBUG] [Thread-211727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:44:08.058 [DEBUG] [Thread-211727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:44:08.067 [DEBUG] [Thread-211727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:44:08.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:44:08.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:44:08.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:44:08.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:44:08.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:44:08.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:44:08.102 [DEBUG] [Thread-211727] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:44:20.101 [DEBUG] [Thread-211729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:27.646 [DEBUG] [Thread-211730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:35.162 [DEBUG] [Thread-211731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:38.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:44:38.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:44:38.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:44:39.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 44, 20), 14.86, 36.6, 0.0, 31.11, 16.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:44:39.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:44:20
2026-02-15T21:44:40.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:44:40.446 [DEBUG] [Thread-211732] [transport.py] [_log()] starting thread (client mode): 0xa2d7bfd0
2026-02-15T21:44:40.446 [DEBUG] [Thread-211732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:44:40.466 [DEBUG] [Thread-211732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:44:40.466 [INFO] [Thread-211732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:44:40.469 [DEBUG] [Thread-211732] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:44:40.469 [DEBUG] [Thread-211732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:44:40.469 [DEBUG] [Thread-211732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:44:40.469 [DEBUG] [Thread-211732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:40.469 [DEBUG] [Thread-211732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:40.469 [DEBUG] [Thread-211732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] client lang: <none>
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] server lang: <none>
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] kex follows: False
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] Compression: none
2026-02-15T21:44:40.470 [DEBUG] [Thread-211732] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:44:40.486 [DEBUG] [Thread-211732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:44:40.487 [DEBUG] [Thread-211732] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:44:40.487 [DEBUG] [Thread-211732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:44:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:44:40.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:44:40.489 [DEBUG] [Thread-211732] [transport.py] [_log()] userauth is OK
2026-02-15T21:44:40.489 [DEBUG] [Thread-211732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:44:40.490 [DEBUG] [Thread-211732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:44:40.490 [DEBUG] [Thread-211732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:44:40.490 [DEBUG] [Thread-211732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:44:40.506 [INFO] [Thread-211732] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:44:40.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:44:41.255 [DEBUG] [Thread-211732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:44:41.256 [DEBUG] [Thread-211732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:44:41.256 [DEBUG] [Thread-211732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:44:41.296 [DEBUG] [Thread-211732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:44:41.296 [DEBUG] [Thread-211732] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:44:41.299 [DEBUG] [Thread-211732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:44:41.305 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:41.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:44:41.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:44:41.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:44:41.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:44:41.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:44:41.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:44:41.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:44:41.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:44:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:44:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.822325 -999.00  +16.10  22.87     42   +3.20 1 1 1 1 1     0    0 12.21 -32.49 ZNESW 21.8 22.9 163.2 28.7 16.4 -24.6 16.3 -23.5 16.1 -22.5 16.3 -23.7
2026-02-15T21:44:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:44:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:44:41.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.822325
2026-02-15T21:44:41.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:44:41.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:44:41.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:44:41.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:44:41.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:44:41.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:44:20', tmtdew=14.86, humidity=36.6, cloud=0.0, wind=31.11, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:44:21', seeing=1.93, atlas_timestamp='2026-02-15T19:44:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:43:00')
2026-02-15T21:44:41.327 [DEBUG] [Thread-211732] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:44:41.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:44:41.432 [DEBUG] [Thread-211735] [transport.py] [_log()] starting thread (client mode): 0xa2d78730
2026-02-15T21:44:41.432 [DEBUG] [Thread-211735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:44:41.445 [DEBUG] [Thread-211735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:44:41.445 [INFO] [Thread-211735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:44:41.453 [DEBUG] [Thread-211735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] client lang: <none>
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] server lang: <none>
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] kex follows: False
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] Compression: none
2026-02-15T21:44:41.454 [DEBUG] [Thread-211735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:44:41.511 [DEBUG] [Thread-211735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:44:41.511 [DEBUG] [Thread-211735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:44:41.512 [DEBUG] [Thread-211735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:44:41.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:44:41.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:44:41.567 [DEBUG] [Thread-211735] [transport.py] [_log()] userauth is OK
2026-02-15T21:44:41.567 [DEBUG] [Thread-211735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:44:41.568 [DEBUG] [Thread-211735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:44:41.568 [DEBUG] [Thread-211735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:44:41.568 [DEBUG] [Thread-211735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:44:41.586 [INFO] [Thread-211735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:44:41.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:44:41.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:44:42.420 [DEBUG] [Thread-211735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:44:42.420 [DEBUG] [Thread-211735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:44:42.468 [DEBUG] [Thread-211735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:44:42.468 [DEBUG] [Thread-211735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:44:42.477 [DEBUG] [Thread-211735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:44:42.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:44:42.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:44:42.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:44:42.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:44:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:44:42.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:44:42.509 [DEBUG] [Thread-211735] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:44:42.974 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:42.975 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:44:50.198 [DEBUG] [Thread-211737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:05.244 [DEBUG] [Thread-211738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:12.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:45:12.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:45:12.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:45:14.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 44, 55), 14.83, 36.68, 0.0, 33.08, 16.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:45:14.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:44:55
2026-02-15T21:45:14.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:45:15.142 [DEBUG] [Thread-211739] [transport.py] [_log()] starting thread (client mode): 0xa57b10f0
2026-02-15T21:45:15.142 [DEBUG] [Thread-211739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:45:15.157 [DEBUG] [Thread-211739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:45:15.157 [INFO] [Thread-211739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] client lang: <none>
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] server lang: <none>
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] kex follows: False
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] Compression: none
2026-02-15T21:45:15.160 [DEBUG] [Thread-211739] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:45:15.175 [DEBUG] [Thread-211739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:45:15.176 [DEBUG] [Thread-211739] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:45:15.176 [DEBUG] [Thread-211739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:45:15.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:45:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:45:15.178 [DEBUG] [Thread-211739] [transport.py] [_log()] userauth is OK
2026-02-15T21:45:15.178 [DEBUG] [Thread-211739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:45:15.178 [DEBUG] [Thread-211739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:45:15.178 [DEBUG] [Thread-211739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:45:15.179 [DEBUG] [Thread-211739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:45:15.196 [INFO] [Thread-211739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:45:15.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:45:16.691 [DEBUG] [Thread-211739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:45:16.691 [DEBUG] [Thread-211739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:45:16.691 [DEBUG] [Thread-211739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:45:16.732 [DEBUG] [Thread-211739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:45:16.732 [DEBUG] [Thread-211739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:45:16.736 [DEBUG] [Thread-211739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:45:16.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:45:16.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:45:16.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:45:16.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:45:16.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:45:16.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:45:16.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:45:16.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:45:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:45:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.822673 -999.00  +16.10  22.85     42   +3.20 1 1 1 1 1     0    0 12.30 -33.90 ZNESW 20.6 22.9 151.6 29.3 16.4 -24.7 16.2 -23.6 16.1 -22.4 16.3 -23.7
2026-02-15T21:45:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:45:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:45:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.822673
2026-02-15T21:45:16.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:45:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:45:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:45:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:45:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:45:16.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:44:55', tmtdew=14.83, humidity=36.68, cloud=0.0, wind=33.08, temperature=16.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:44:56', seeing=1.93, atlas_timestamp='2026-02-15T19:44:38.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:43:00')
2026-02-15T21:45:16.771 [DEBUG] [Thread-211739] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:45:16.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:45:16.868 [DEBUG] [Thread-211742] [transport.py] [_log()] starting thread (client mode): 0xa5771ed0
2026-02-15T21:45:16.868 [DEBUG] [Thread-211742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:45:16.882 [DEBUG] [Thread-211742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:45:16.882 [INFO] [Thread-211742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:45:16.889 [DEBUG] [Thread-211742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:45:16.890 [DEBUG] [Thread-211742] [transport.py] [_log()] client lang: <none>
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] server lang: <none>
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] kex follows: False
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:45:16.891 [DEBUG] [Thread-211742] [transport.py] [_log()] Compression: none
2026-02-15T21:45:16.892 [DEBUG] [Thread-211742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:45:16.946 [DEBUG] [Thread-211742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:45:16.947 [DEBUG] [Thread-211742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:45:16.948 [DEBUG] [Thread-211742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:45:16.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:45:16.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:45:17.002 [DEBUG] [Thread-211742] [transport.py] [_log()] userauth is OK
2026-02-15T21:45:17.003 [DEBUG] [Thread-211742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:45:17.003 [DEBUG] [Thread-211742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:45:17.003 [DEBUG] [Thread-211742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:45:17.003 [DEBUG] [Thread-211742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:45:17.025 [INFO] [Thread-211742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:45:17.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:45:17.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:45:17.837 [DEBUG] [Thread-211742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:45:17.837 [DEBUG] [Thread-211742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:45:17.885 [DEBUG] [Thread-211742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:45:17.885 [DEBUG] [Thread-211742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:45:17.894 [DEBUG] [Thread-211742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:45:17.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:45: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')
2026-02-15T21:45:17.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:45:17.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:45:17.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:45:17.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:45:17.928 [DEBUG] [Thread-211742] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:45:20.285 [DEBUG] [Thread-211744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:27.717 [DEBUG] [Thread-211745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:28.452 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:33.489 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:35.334 [DEBUG] [Thread-211746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:37.863 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:43.174 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:43.175 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:45:47.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:45:47.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:45:49.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 45, 31), 14.81, 36.73, 0.0, 33.38, 16.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:45:49.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:45:31
2026-02-15T21:45:50.373 [DEBUG] [Thread-211747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:45:50.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:45:50.584 [DEBUG] [Thread-211748] [transport.py] [_log()] starting thread (client mode): 0xa57d6380
2026-02-15T21:45:50.584 [DEBUG] [Thread-211748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:45:50.603 [DEBUG] [Thread-211748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:45:50.603 [INFO] [Thread-211748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] client lang: <none>
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] server lang: <none>
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] kex follows: False
2026-02-15T21:45:50.606 [DEBUG] [Thread-211748] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:45:50.607 [DEBUG] [Thread-211748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:45:50.607 [DEBUG] [Thread-211748] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:45:50.607 [DEBUG] [Thread-211748] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:45:50.607 [DEBUG] [Thread-211748] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:45:50.607 [DEBUG] [Thread-211748] [transport.py] [_log()] Compression: none
2026-02-15T21:45:50.607 [DEBUG] [Thread-211748] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:45:50.623 [DEBUG] [Thread-211748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:45:50.623 [DEBUG] [Thread-211748] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:45:50.623 [DEBUG] [Thread-211748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:45:50.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:45:50.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:45:50.624 [DEBUG] [Thread-211748] [transport.py] [_log()] userauth is OK
2026-02-15T21:45:50.625 [DEBUG] [Thread-211748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:45:50.625 [DEBUG] [Thread-211748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:45:50.625 [DEBUG] [Thread-211748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:45:50.625 [DEBUG] [Thread-211748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:45:50.642 [INFO] [Thread-211748] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:45:50.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:45:51.282 [DEBUG] [Thread-211748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:45:51.283 [DEBUG] [Thread-211748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:45:51.283 [DEBUG] [Thread-211748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:45:51.323 [DEBUG] [Thread-211748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:45:51.324 [DEBUG] [Thread-211748] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:45:51.327 [DEBUG] [Thread-211748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:45:51.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:45:51.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:45:51.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:45:51.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:45:51.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:45:51.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:45:51.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:45:51.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:45:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:45:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.823020 -999.00  +16.10  22.52     42   +3.20 1 1 1 1 1     0    0 12.39 -34.39 ZNESW 21.3 22.5 158.2 30.4 16.4 -24.5 16.2 -23.5 16.0 -22.4 16.3 -23.7
2026-02-15T21:45:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:45:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:45:51.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.823020
2026-02-15T21:45:51.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:45:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:45:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:45:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:45:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:45:51.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:45:31', tmtdew=14.81, humidity=36.73, cloud=0.0, wind=33.38, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:45:31', seeing=1.53, atlas_timestamp='2026-02-15T19:45:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:43:00')
2026-02-15T21:45:51.355 [DEBUG] [Thread-211748] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:45:51.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:45:51.459 [DEBUG] [Thread-211751] [transport.py] [_log()] starting thread (client mode): 0xa57b2bf0
2026-02-15T21:45:51.459 [DEBUG] [Thread-211751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:45:51.473 [DEBUG] [Thread-211751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:45:51.473 [INFO] [Thread-211751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:45:51.481 [DEBUG] [Thread-211751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:45:51.481 [DEBUG] [Thread-211751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:45:51.481 [DEBUG] [Thread-211751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:45:51.481 [DEBUG] [Thread-211751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:51.481 [DEBUG] [Thread-211751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:45:51.481 [DEBUG] [Thread-211751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] client lang: <none>
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] server lang: <none>
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] kex follows: False
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:45:51.482 [DEBUG] [Thread-211751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:45:51.483 [DEBUG] [Thread-211751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:45:51.483 [DEBUG] [Thread-211751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:45:51.483 [DEBUG] [Thread-211751] [transport.py] [_log()] Compression: none
2026-02-15T21:45:51.483 [DEBUG] [Thread-211751] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:45:51.540 [DEBUG] [Thread-211751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:45:51.541 [DEBUG] [Thread-211751] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:45:51.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:45:51.542 [DEBUG] [Thread-211751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:45:51.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:45:51.599 [DEBUG] [Thread-211751] [transport.py] [_log()] userauth is OK
2026-02-15T21:45:51.599 [DEBUG] [Thread-211751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:45:51.599 [DEBUG] [Thread-211751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:45:51.599 [DEBUG] [Thread-211751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:45:51.599 [DEBUG] [Thread-211751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:45:51.618 [INFO] [Thread-211751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:45:51.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:45:51.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:45:52.443 [DEBUG] [Thread-211751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:45:52.443 [DEBUG] [Thread-211751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:45:52.491 [DEBUG] [Thread-211751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:45:52.491 [DEBUG] [Thread-211751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:45:52.500 [DEBUG] [Thread-211751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:45:52.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:45:52.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:45:52.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:45:52.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:45:52.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:45:52.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:45:52.534 [DEBUG] [Thread-211751] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:45:57.307 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:01.703 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:05.409 [DEBUG] [Thread-211753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:14.966 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:20.459 [DEBUG] [Thread-211754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:21.124 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:22.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:46:22.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:46:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:46:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 46, 6), 14.79, 36.8, 0.0, 35.82, 16.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:46:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:46:06
2026-02-15T21:46:24.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:46:25.037 [DEBUG] [Thread-211755] [transport.py] [_log()] starting thread (client mode): 0xa2d54610
2026-02-15T21:46:25.038 [DEBUG] [Thread-211755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:46:25.057 [DEBUG] [Thread-211755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:46:25.057 [INFO] [Thread-211755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] client lang: <none>
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] server lang: <none>
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] kex follows: False
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] Compression: none
2026-02-15T21:46:25.060 [DEBUG] [Thread-211755] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:46:25.079 [DEBUG] [Thread-211755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:46:25.079 [DEBUG] [Thread-211755] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:46:25.080 [DEBUG] [Thread-211755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:46:25.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:46:25.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:46:25.081 [DEBUG] [Thread-211755] [transport.py] [_log()] userauth is OK
2026-02-15T21:46:25.082 [DEBUG] [Thread-211755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:46:25.082 [DEBUG] [Thread-211755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:46:25.082 [DEBUG] [Thread-211755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:46:25.082 [DEBUG] [Thread-211755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:46:25.105 [INFO] [Thread-211755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:46:25.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:46:25.504 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:25.749 [DEBUG] [Thread-211755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:46:25.749 [DEBUG] [Thread-211755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:46:25.749 [DEBUG] [Thread-211755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:46:25.790 [DEBUG] [Thread-211755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:46:25.790 [DEBUG] [Thread-211755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:46:25.793 [DEBUG] [Thread-211755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:46:25.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:46:25.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:46:25.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:46:25.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:46:25.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:46:25.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:46:25.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.823367 -999.00  +16.10  24.39     42   +3.20 1 1 1 1 1     0    0 12.47 -33.66 ZNESW 23.5 24.4 168.6 29.9 16.4 -24.5 16.3 -23.5 16.0 -22.4 16.3 -23.7
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.823367
2026-02-15T21:46:25.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:46:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:46:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:46:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:46:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:46:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:46:06', tmtdew=14.79, humidity=36.8, cloud=0.0, wind=35.82, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:46:06', seeing=1.71, atlas_timestamp='2026-02-15T19:45:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:43:00')
2026-02-15T21:46:25.813 [DEBUG] [Thread-211755] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:46:25.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:46:25.898 [DEBUG] [Thread-211758] [transport.py] [_log()] starting thread (client mode): 0xa57714e0
2026-02-15T21:46:25.898 [DEBUG] [Thread-211758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:46:25.913 [DEBUG] [Thread-211758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:46:25.913 [INFO] [Thread-211758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] client lang: <none>
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] server lang: <none>
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] kex follows: False
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:46:25.921 [DEBUG] [Thread-211758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:46:25.922 [DEBUG] [Thread-211758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:46:25.922 [DEBUG] [Thread-211758] [transport.py] [_log()] Compression: none
2026-02-15T21:46:25.922 [DEBUG] [Thread-211758] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:46:25.978 [DEBUG] [Thread-211758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:46:25.978 [DEBUG] [Thread-211758] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:46:25.979 [DEBUG] [Thread-211758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:46:25.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:46:25.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:46:26.034 [DEBUG] [Thread-211758] [transport.py] [_log()] userauth is OK
2026-02-15T21:46:26.035 [DEBUG] [Thread-211758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:46:26.035 [DEBUG] [Thread-211758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:46:26.035 [DEBUG] [Thread-211758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:46:26.035 [DEBUG] [Thread-211758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:46:26.054 [INFO] [Thread-211758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:46:26.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:46:26.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:46:26.852 [DEBUG] [Thread-211758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:46:26.852 [DEBUG] [Thread-211758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:46:26.900 [DEBUG] [Thread-211758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:46:26.900 [DEBUG] [Thread-211758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:46:26.908 [DEBUG] [Thread-211758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:46:26.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:46:26.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:46:26.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:46:26.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:46:26.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:46:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:46:26.949 [DEBUG] [Thread-211758] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:46:27.775 [DEBUG] [Thread-211760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:31.653 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:35.493 [DEBUG] [Thread-211761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:36.033 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:43.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:43.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:47.946 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:50.554 [DEBUG] [Thread-211762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:51.007 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:46:56.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:46:56.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:46:56.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:46:58.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 46, 41), 14.86, 36.66, 0.0, 36.91, 16.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:46:58.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:46:41
2026-02-15T21:46:59.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:46:59.299 [DEBUG] [Thread-211763] [transport.py] [_log()] starting thread (client mode): 0xa57b1b40
2026-02-15T21:46:59.299 [DEBUG] [Thread-211763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:46:59.318 [DEBUG] [Thread-211763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:46:59.318 [INFO] [Thread-211763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:46:59.321 [DEBUG] [Thread-211763] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] client lang: <none>
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] server lang: <none>
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] kex follows: False
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] Compression: none
2026-02-15T21:46:59.322 [DEBUG] [Thread-211763] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:46:59.338 [DEBUG] [Thread-211763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:46:59.339 [DEBUG] [Thread-211763] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:46:59.339 [DEBUG] [Thread-211763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:46:59.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:46:59.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:46:59.341 [DEBUG] [Thread-211763] [transport.py] [_log()] userauth is OK
2026-02-15T21:46:59.341 [DEBUG] [Thread-211763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:46:59.342 [DEBUG] [Thread-211763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:46:59.342 [DEBUG] [Thread-211763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:46:59.342 [DEBUG] [Thread-211763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:46:59.374 [INFO] [Thread-211763] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:46:59.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:46:59.960 [DEBUG] [Thread-211763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:46:59.960 [DEBUG] [Thread-211763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:46:59.960 [DEBUG] [Thread-211763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:47:00.001 [DEBUG] [Thread-211763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:47:00.001 [DEBUG] [Thread-211763] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:47:00.005 [DEBUG] [Thread-211763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:47:00.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:47:00.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:47:00.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:47:00.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:47:00.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:47:00.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:47:00.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:47:00.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:47:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:47:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.823715 -999.00  +16.10  14.50     42   +3.20 1 1 1 1 1     0    0 12.35 -34.77 ZNESW 17.2 14.5 148.8 25.7 16.4 -24.6 16.2 -23.6 16.0 -22.4 16.3 -23.8
2026-02-15T21:47:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:47:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:47:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.823715
2026-02-15T21:47:00.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:47:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:47:00.032 [DEBUG] [Thread-211763] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:47:00.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:47:00.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:47:00.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:47:00.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:46:41', tmtdew=14.86, humidity=36.66, cloud=0.0, wind=36.91, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:46:42', seeing=1.68, atlas_timestamp='2026-02-15T19:46:08.976', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.0547500000000003, -0.0007500000000000284, -0.05349999999999966, 0.019000000000000128, -0.021749999999999048, -0.030000000000001137, -0.04574999999999996, -0.03250000000000064, -0.03200000000000003, -0.03775000000000084, -0.02450000000000152, 0.01249999999999929, 0.004249999999998977, -0.0365000000000002, -0.0005000000000006111, 0.017250000000000654, -0.0235000000000003, -0.05850000000000044, -0.03275000000000183, 0.049999999999998934, 0.03074999999999939, -0.0382499999999979, -0.007749999999999702, 0.028499999999999304, 0.037499999999999645, 0.013749999999999929, -0.03149999999999942, 0.028999999999999915, 0.042500000000000426, -0.01699999999999946, 0.009000000000000341, 0.006249999999997868], zp_timestamp='2026-02-15T19:43:00')
2026-02-15T21:47:00.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:47:00.128 [DEBUG] [Thread-211766] [transport.py] [_log()] starting thread (client mode): 0xa575b610
2026-02-15T21:47:00.128 [DEBUG] [Thread-211766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:47:00.143 [DEBUG] [Thread-211766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:47:00.143 [INFO] [Thread-211766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:47:00.151 [DEBUG] [Thread-211766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] client lang: <none>
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] server lang: <none>
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] kex follows: False
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] Compression: none
2026-02-15T21:47:00.152 [DEBUG] [Thread-211766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:47:00.210 [DEBUG] [Thread-211766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:47:00.211 [DEBUG] [Thread-211766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:47:00.212 [DEBUG] [Thread-211766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:47:00.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:47:00.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:47:00.267 [DEBUG] [Thread-211766] [transport.py] [_log()] userauth is OK
2026-02-15T21:47:00.267 [DEBUG] [Thread-211766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:47:00.267 [DEBUG] [Thread-211766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:47:00.267 [DEBUG] [Thread-211766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:47:00.268 [DEBUG] [Thread-211766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:47:00.286 [INFO] [Thread-211766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:47:00.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:47:00.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:47:01.178 [DEBUG] [Thread-211766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:47:01.178 [DEBUG] [Thread-211766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:47:01.226 [DEBUG] [Thread-211766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:47:01.226 [DEBUG] [Thread-211766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:47:01.234 [DEBUG] [Thread-211766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:47:01.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:47:01.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:47:01.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:47:01.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:47:01.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:47:01.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:47:01.265 [DEBUG] [Thread-211766] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:47:05.591 [DEBUG] [Thread-211768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:20.639 [DEBUG] [Thread-211769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:22.477 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:27.852 [DEBUG] [Thread-211770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:31.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:47:31.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:47:31.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:47:32.420 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:33.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 47, 16), 14.73, 36.81, 0.0, 29.98, 16.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:47:33.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:47:16
2026-02-15T21:47:33.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:47:33.619 [DEBUG] [Thread-211771] [transport.py] [_log()] starting thread (client mode): 0xa2d3fee0
2026-02-15T21:47:33.619 [DEBUG] [Thread-211771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:47:33.640 [DEBUG] [Thread-211771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:47:33.640 [INFO] [Thread-211771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] client lang: <none>
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] server lang: <none>
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] kex follows: False
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:47:33.643 [DEBUG] [Thread-211771] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:47:33.644 [DEBUG] [Thread-211771] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:47:33.644 [DEBUG] [Thread-211771] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:47:33.644 [DEBUG] [Thread-211771] [transport.py] [_log()] Compression: none
2026-02-15T21:47:33.644 [DEBUG] [Thread-211771] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:47:33.659 [DEBUG] [Thread-211771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:47:33.659 [DEBUG] [Thread-211771] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:47:33.660 [DEBUG] [Thread-211771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:47:33.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:47:33.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:47:33.660 [DEBUG] [Thread-211771] [transport.py] [_log()] userauth is OK
2026-02-15T21:47:33.660 [DEBUG] [Thread-211771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:47:33.660 [DEBUG] [Thread-211771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:47:33.660 [DEBUG] [Thread-211771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:47:33.660 [DEBUG] [Thread-211771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:47:33.670 [INFO] [Thread-211771] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:47:33.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:47:34.313 [DEBUG] [Thread-211771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:47:34.313 [DEBUG] [Thread-211771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:47:34.313 [DEBUG] [Thread-211771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:47:34.354 [DEBUG] [Thread-211771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:47:34.355 [DEBUG] [Thread-211771] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:47:34.358 [DEBUG] [Thread-211771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:47:34.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:47:34.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:47:34.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:47:34.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:47:34.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:47:34.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:47:34.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:47:34.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:47:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:47:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.824061 -999.00  +16.00  23.40     42   +3.30 1 1 1 1 1     0    0 12.32 -32.98 ZNESW 21.7 23.4 153.6 29.7 16.3 -24.6 16.2 -23.5 16.0 -22.5 16.3 -23.7
2026-02-15T21:47:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:47:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:47:34.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.824061
2026-02-15T21:47:34.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:47:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:47:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:47:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:47:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:47:34.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:47:16', tmtdew=14.73, humidity=36.81, cloud=0.0, wind=29.98, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:47:17', seeing=1.68, atlas_timestamp='2026-02-15T19:46:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.05375000000000085, -0.021749999999999048, -0.03750000000000142, 0.004999999999999005, -0.04574999999999996, -0.049000000000001265, -0.023749999999999716, -0.01550000000000118, -0.009999999999999787, -0.03575000000000017, -0.009999999999999787, 0.007999999999999119, 0.02224999999999966, -0.057000000000000384, -0.009000000000000341, 0.010249999999999204, 0.014499999999999957, -0.068500000000002, -0.020250000000000767, 0.045999999999999375, 0.024749999999997385, -0.03324999999999889, -0.014249999999998764, 0.029500000000000526, 0.04449999999999932, 0.020749999999999602, -0.0005000000000006111, 0.018000000000000682, 0.019000000000000128, -0.033500000000000085, -0.022999999999999687, -0.006250000000001421], zp_timestamp='2026-02-15T19:46:00')
2026-02-15T21:47:34.386 [DEBUG] [Thread-211771] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:47:34.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:47:34.483 [DEBUG] [Thread-211774] [transport.py] [_log()] starting thread (client mode): 0xa2d3fdf0
2026-02-15T21:47:34.483 [DEBUG] [Thread-211774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:47:34.497 [DEBUG] [Thread-211774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:47:34.497 [INFO] [Thread-211774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:47:34.504 [DEBUG] [Thread-211774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] client lang: <none>
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] server lang: <none>
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] kex follows: False
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] Compression: none
2026-02-15T21:47:34.505 [DEBUG] [Thread-211774] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:47:34.567 [DEBUG] [Thread-211774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:47:34.567 [DEBUG] [Thread-211774] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:47:34.568 [DEBUG] [Thread-211774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:47:34.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:47:34.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:47:34.622 [DEBUG] [Thread-211774] [transport.py] [_log()] userauth is OK
2026-02-15T21:47:34.622 [DEBUG] [Thread-211774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:47:34.623 [DEBUG] [Thread-211774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:47:34.623 [DEBUG] [Thread-211774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:47:34.623 [DEBUG] [Thread-211774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:47:34.645 [INFO] [Thread-211774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:47:34.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:47:34.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:47:35.452 [DEBUG] [Thread-211774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:47:35.453 [DEBUG] [Thread-211774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:47:35.503 [DEBUG] [Thread-211774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:47:35.503 [DEBUG] [Thread-211774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:47:35.516 [DEBUG] [Thread-211774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:47:35.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:47:35.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:47:35.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:47:35.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:47:35.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:47:35.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:47:35.564 [DEBUG] [Thread-211774] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:47:35.668 [DEBUG] [Thread-211776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:36.516 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:43.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:43.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:48.615 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:47:50.720 [DEBUG] [Thread-211777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:05.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:48:05.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:48:05.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:48:05.757 [DEBUG] [Thread-211778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:07.016 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 47, 52), 14.68, 37.31, 0.0, 28.69, 16.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:48:08.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:47:52
2026-02-15T21:48:08.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:48:08.624 [DEBUG] [Thread-211779] [transport.py] [_log()] starting thread (client mode): 0xa5741de0
2026-02-15T21:48:08.624 [DEBUG] [Thread-211779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:48:08.644 [DEBUG] [Thread-211779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:48:08.644 [INFO] [Thread-211779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:48:08.647 [DEBUG] [Thread-211779] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:48:08.647 [DEBUG] [Thread-211779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:48:08.647 [DEBUG] [Thread-211779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:48:08.647 [DEBUG] [Thread-211779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:08.647 [DEBUG] [Thread-211779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] client lang: <none>
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] server lang: <none>
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] kex follows: False
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] Compression: none
2026-02-15T21:48:08.648 [DEBUG] [Thread-211779] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:48:08.665 [DEBUG] [Thread-211779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:48:08.665 [DEBUG] [Thread-211779] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:48:08.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:48:08.667 [DEBUG] [Thread-211779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:48:08.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:48:08.709 [DEBUG] [Thread-211779] [transport.py] [_log()] userauth is OK
2026-02-15T21:48:08.710 [DEBUG] [Thread-211779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:48:08.710 [DEBUG] [Thread-211779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:48:08.710 [DEBUG] [Thread-211779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:48:08.710 [DEBUG] [Thread-211779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:48:08.729 [INFO] [Thread-211779] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:48:08.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:48:09.508 [DEBUG] [Thread-211779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:48:09.508 [DEBUG] [Thread-211779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:48:09.508 [DEBUG] [Thread-211779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:48:09.549 [DEBUG] [Thread-211779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:48:09.549 [DEBUG] [Thread-211779] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:48:09.552 [DEBUG] [Thread-211779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:48:09.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:48:09.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:48:09.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:48:09.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:48:09.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:48:09.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:48:09.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:48:09.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:48:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:48:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.824756 -999.00  +16.00  18.08     42   +3.30 1 1 1 1 1     0    0 12.16 -37.63 ZNESW 17.5 18.1 147.0 22.5 16.3 -24.6 16.2 -23.7 16.0 -22.5 16.3 -24.0
2026-02-15T21:48:09.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:48:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:48:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.824756
2026-02-15T21:48:09.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:48:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:48:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:48:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:48:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:48:09.576 [DEBUG] [Thread-211779] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:48:09.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:47:52', tmtdew=14.68, humidity=37.31, cloud=0.0, wind=28.69, temperature=16.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:47:52', seeing=1.68, atlas_timestamp='2026-02-15T19:47:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.05375000000000085, -0.021749999999999048, -0.03750000000000142, 0.004999999999999005, -0.04574999999999996, -0.049000000000001265, -0.023749999999999716, -0.01550000000000118, -0.009999999999999787, -0.03575000000000017, -0.009999999999999787, 0.007999999999999119, 0.02224999999999966, -0.057000000000000384, -0.009000000000000341, 0.010249999999999204, 0.014499999999999957, -0.068500000000002, -0.020250000000000767, 0.045999999999999375, 0.024749999999997385, -0.03324999999999889, -0.014249999999998764, 0.029500000000000526, 0.04449999999999932, 0.020749999999999602, -0.0005000000000006111, 0.018000000000000682, 0.019000000000000128, -0.033500000000000085, -0.022999999999999687, -0.006250000000001421], zp_timestamp='2026-02-15T19:46:00')
2026-02-15T21:48:09.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:48:09.671 [DEBUG] [Thread-211782] [transport.py] [_log()] starting thread (client mode): 0xa5741210
2026-02-15T21:48:09.671 [DEBUG] [Thread-211782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:48:09.686 [DEBUG] [Thread-211782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:48:09.687 [INFO] [Thread-211782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:48:09.694 [DEBUG] [Thread-211782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:09.695 [DEBUG] [Thread-211782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] client lang: <none>
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] server lang: <none>
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] kex follows: False
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:48:09.696 [DEBUG] [Thread-211782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:48:09.697 [DEBUG] [Thread-211782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:48:09.697 [DEBUG] [Thread-211782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:48:09.697 [DEBUG] [Thread-211782] [transport.py] [_log()] Compression: none
2026-02-15T21:48:09.697 [DEBUG] [Thread-211782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:48:09.755 [DEBUG] [Thread-211782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:48:09.756 [DEBUG] [Thread-211782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:48:09.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:48:09.757 [DEBUG] [Thread-211782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:48:09.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:48:09.815 [DEBUG] [Thread-211782] [transport.py] [_log()] userauth is OK
2026-02-15T21:48:09.816 [DEBUG] [Thread-211782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:48:09.816 [DEBUG] [Thread-211782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:48:09.816 [DEBUG] [Thread-211782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:48:09.816 [DEBUG] [Thread-211782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:48:09.835 [INFO] [Thread-211782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:48:09.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:48:09.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:48:10.625 [DEBUG] [Thread-211782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:48:10.626 [DEBUG] [Thread-211782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:48:10.673 [DEBUG] [Thread-211782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:48:10.674 [DEBUG] [Thread-211782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:48:10.683 [DEBUG] [Thread-211782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:48:10.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:48:10.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:48:10.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:48:10.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:48:10.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:48:10.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:48:10.720 [DEBUG] [Thread-211782] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:48:15.251 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:19.335 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:20.793 [DEBUG] [Thread-211784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:27.931 [DEBUG] [Thread-211785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:35.832 [DEBUG] [Thread-211786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:40.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:48:40.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:48:40.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:48:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 48, 28), 14.64, 37.41, 0.0, 31.32, 16.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:48:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:48:28
2026-02-15T21:48:42.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:48:43.067 [DEBUG] [Thread-211787] [transport.py] [_log()] starting thread (client mode): 0xa57b0280
2026-02-15T21:48:43.067 [DEBUG] [Thread-211787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:48:43.087 [DEBUG] [Thread-211787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:48:43.087 [INFO] [Thread-211787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:48:43.088 [DEBUG] [Thread-211787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] client lang: <none>
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] server lang: <none>
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] kex follows: False
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] Compression: none
2026-02-15T21:48:43.089 [DEBUG] [Thread-211787] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:48:43.097 [DEBUG] [Thread-211787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:48:43.097 [DEBUG] [Thread-211787] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:48:43.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:48:43.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:48:43.099 [DEBUG] [Thread-211787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:48:43.099 [DEBUG] [Thread-211787] [transport.py] [_log()] userauth is OK
2026-02-15T21:48:43.099 [DEBUG] [Thread-211787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:48:43.100 [DEBUG] [Thread-211787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:48:43.100 [DEBUG] [Thread-211787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:48:43.100 [DEBUG] [Thread-211787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:48:43.122 [INFO] [Thread-211787] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:48:43.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:48:43.779 [DEBUG] [Thread-211787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:48:43.780 [DEBUG] [Thread-211787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:48:43.781 [DEBUG] [Thread-211787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:48:43.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:43.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:43.820 [DEBUG] [Thread-211787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:48:43.821 [DEBUG] [Thread-211787] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:48:43.824 [DEBUG] [Thread-211787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:48:43.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:48:43.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:48:43.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:48:43.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:48:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:48:43.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:48:43.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:48:43.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:48:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:48:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.825103 -999.00  +16.00  20.20     42   +3.30 1 1 1 1 1     0    0 12.09 -38.84 ZNESW 22.0 20.2 145.6 28.0 16.3 -24.7 16.1 -23.7 15.9 -22.6 16.3 -24.0
2026-02-15T21:48:43.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:48:43.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:48:43.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.825103
2026-02-15T21:48:43.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:48:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:48:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:48:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:48:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:48:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:48:28', tmtdew=14.64, humidity=37.41, cloud=0.0, wind=31.32, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:48:29', seeing=2.01, atlas_timestamp='2026-02-15T19:48:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.05375000000000085, -0.021749999999999048, -0.03750000000000142, 0.004999999999999005, -0.04574999999999996, -0.049000000000001265, -0.023749999999999716, -0.01550000000000118, -0.009999999999999787, -0.03575000000000017, -0.009999999999999787, 0.007999999999999119, 0.02224999999999966, -0.057000000000000384, -0.009000000000000341, 0.010249999999999204, 0.014499999999999957, -0.068500000000002, -0.020250000000000767, 0.045999999999999375, 0.024749999999997385, -0.03324999999999889, -0.014249999999998764, 0.029500000000000526, 0.04449999999999932, 0.020749999999999602, -0.0005000000000006111, 0.018000000000000682, 0.019000000000000128, -0.033500000000000085, -0.022999999999999687, -0.006250000000001421], zp_timestamp='2026-02-15T19:46:00')
2026-02-15T21:48:43.852 [DEBUG] [Thread-211787] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:48:43.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:48:43.947 [DEBUG] [Thread-211790] [transport.py] [_log()] starting thread (client mode): 0xa2d3c6a0
2026-02-15T21:48:43.948 [DEBUG] [Thread-211790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:48:43.962 [DEBUG] [Thread-211790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:48:43.962 [INFO] [Thread-211790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:48:43.970 [DEBUG] [Thread-211790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:48:43.970 [DEBUG] [Thread-211790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] client lang: <none>
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] server lang: <none>
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] kex follows: False
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] Compression: none
2026-02-15T21:48:43.971 [DEBUG] [Thread-211790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:48:44.031 [DEBUG] [Thread-211790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:48:44.032 [DEBUG] [Thread-211790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:48:44.032 [DEBUG] [Thread-211790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:48:44.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:48:44.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:48:44.087 [DEBUG] [Thread-211790] [transport.py] [_log()] userauth is OK
2026-02-15T21:48:44.087 [DEBUG] [Thread-211790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:48:44.087 [DEBUG] [Thread-211790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:48:44.087 [DEBUG] [Thread-211790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:48:44.087 [DEBUG] [Thread-211790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:48:44.106 [INFO] [Thread-211790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:48:44.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:48:44.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:48:44.935 [DEBUG] [Thread-211790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:48:44.936 [DEBUG] [Thread-211790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:48:44.983 [DEBUG] [Thread-211790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:48:44.984 [DEBUG] [Thread-211790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:48:44.993 [DEBUG] [Thread-211790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:48:45.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:48:45.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:48:45.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:48:45.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:48:45.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:48:45.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:48:45.030 [DEBUG] [Thread-211790] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:48:49.850 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:50.868 [DEBUG] [Thread-211792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:48:58.072 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:02.166 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:05.933 [DEBUG] [Thread-211793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:15.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:49:15.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:49:15.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:49:17.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 49, 5), 14.61, 37.5, 0.0, 29.45, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:49:17.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:49:05
2026-02-15T21:49:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:49:18.317 [DEBUG] [Thread-211794] [transport.py] [_log()] starting thread (client mode): 0xa5770b80
2026-02-15T21:49:18.318 [DEBUG] [Thread-211794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:49:18.337 [DEBUG] [Thread-211794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:49:18.337 [INFO] [Thread-211794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] client lang: <none>
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] server lang: <none>
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] kex follows: False
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:49:18.340 [DEBUG] [Thread-211794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:49:18.341 [DEBUG] [Thread-211794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:49:18.341 [DEBUG] [Thread-211794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:49:18.341 [DEBUG] [Thread-211794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:49:18.341 [DEBUG] [Thread-211794] [transport.py] [_log()] Compression: none
2026-02-15T21:49:18.341 [DEBUG] [Thread-211794] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:49:18.358 [DEBUG] [Thread-211794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:49:18.358 [DEBUG] [Thread-211794] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:49:18.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:49:18.359 [DEBUG] [Thread-211794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:49:18.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:49:18.362 [DEBUG] [Thread-211794] [transport.py] [_log()] userauth is OK
2026-02-15T21:49:18.362 [DEBUG] [Thread-211794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:49:18.362 [DEBUG] [Thread-211794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:49:18.362 [DEBUG] [Thread-211794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:49:18.362 [DEBUG] [Thread-211794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:49:18.386 [INFO] [Thread-211794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:49:18.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:49:19.010 [DEBUG] [Thread-211794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:49:19.010 [DEBUG] [Thread-211794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:49:19.011 [DEBUG] [Thread-211794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:49:19.051 [DEBUG] [Thread-211794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:49:19.052 [DEBUG] [Thread-211794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:49:19.054 [DEBUG] [Thread-211794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:49:19.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:49:19.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:49:19.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:49:19.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:49:19.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:49:19.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:49:19.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:49:19.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.825450 -999.00  +16.00  18.99     42   +3.20 1 1 1 1 1     0    0 11.73 -40.87 ZNESW 15.9 19.0 155.0 24.0 16.2 -24.8 16.1 -23.7 15.9 -22.7 16.2 -23.9
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.825450
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:49:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:49:05', tmtdew=14.61, humidity=37.5, cloud=0.0, wind=29.45, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:49:05', seeing=1.57, atlas_timestamp='2026-02-15T19:48:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.05375000000000085, -0.021749999999999048, -0.03750000000000142, 0.004999999999999005, -0.04574999999999996, -0.049000000000001265, -0.023749999999999716, -0.01550000000000118, -0.009999999999999787, -0.03575000000000017, -0.009999999999999787, 0.007999999999999119, 0.02224999999999966, -0.057000000000000384, -0.009000000000000341, 0.010249999999999204, 0.014499999999999957, -0.068500000000002, -0.020250000000000767, 0.045999999999999375, 0.024749999999997385, -0.03324999999999889, -0.014249999999998764, 0.029500000000000526, 0.04449999999999932, 0.020749999999999602, -0.0005000000000006111, 0.018000000000000682, 0.019000000000000128, -0.033500000000000085, -0.022999999999999687, -0.006250000000001421], zp_timestamp='2026-02-15T19:46:00')
2026-02-15T21:49:19.074 [DEBUG] [Thread-211794] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:49:19.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:49:19.158 [DEBUG] [Thread-211797] [transport.py] [_log()] starting thread (client mode): 0xa2d3dc30
2026-02-15T21:49:19.158 [DEBUG] [Thread-211797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:49:19.173 [DEBUG] [Thread-211797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:49:19.173 [INFO] [Thread-211797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:49:19.180 [DEBUG] [Thread-211797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] client lang: <none>
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] server lang: <none>
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] kex follows: False
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:49:19.181 [DEBUG] [Thread-211797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:49:19.182 [DEBUG] [Thread-211797] [transport.py] [_log()] Compression: none
2026-02-15T21:49:19.182 [DEBUG] [Thread-211797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:49:19.238 [DEBUG] [Thread-211797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:49:19.239 [DEBUG] [Thread-211797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:49:19.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:49:19.240 [DEBUG] [Thread-211797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:49:19.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:49:19.295 [DEBUG] [Thread-211797] [transport.py] [_log()] userauth is OK
2026-02-15T21:49:19.295 [DEBUG] [Thread-211797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:49:19.295 [DEBUG] [Thread-211797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:49:19.295 [DEBUG] [Thread-211797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:49:19.295 [DEBUG] [Thread-211797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:49:19.314 [INFO] [Thread-211797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:49:19.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:49:19.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:49:20.128 [DEBUG] [Thread-211797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:49:20.137 [DEBUG] [Thread-211797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:49:20.176 [DEBUG] [Thread-211797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:49:20.176 [DEBUG] [Thread-211797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:49:20.185 [DEBUG] [Thread-211797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:49:20.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:49:20.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:49:20.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:49:20.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:49:20.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:49:20.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:49:20.219 [DEBUG] [Thread-211797] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:49:20.970 [DEBUG] [Thread-211799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:22.489 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:27.999 [DEBUG] [Thread-211800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:32.568 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:36.016 [DEBUG] [Thread-211801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:40.335 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:43.986 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:43.987 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:44.431 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:50.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:49:50.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:49:50.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:49:51.054 [DEBUG] [Thread-211802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:49:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 49, 41), 14.64, 37.19, 0.0, 36.06, 16.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:49:52.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:49:41
2026-02-15T21:49:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:49:53.070 [DEBUG] [Thread-211803] [transport.py] [_log()] starting thread (client mode): 0xa2d56260
2026-02-15T21:49:53.071 [DEBUG] [Thread-211803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:49:53.090 [DEBUG] [Thread-211803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:49:53.090 [INFO] [Thread-211803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:49:53.103 [DEBUG] [Thread-211803] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:49:53.103 [DEBUG] [Thread-211803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:49:53.103 [DEBUG] [Thread-211803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:49:53.103 [DEBUG] [Thread-211803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] client lang: <none>
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] server lang: <none>
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] kex follows: False
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] Compression: none
2026-02-15T21:49:53.104 [DEBUG] [Thread-211803] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:49:53.123 [DEBUG] [Thread-211803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:49:53.123 [DEBUG] [Thread-211803] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:49:53.124 [DEBUG] [Thread-211803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:49:53.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:49:53.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:49:53.126 [DEBUG] [Thread-211803] [transport.py] [_log()] userauth is OK
2026-02-15T21:49:53.126 [DEBUG] [Thread-211803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:49:53.126 [DEBUG] [Thread-211803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:49:53.126 [DEBUG] [Thread-211803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:49:53.126 [DEBUG] [Thread-211803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:49:53.151 [INFO] [Thread-211803] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:49:53.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:49:53.805 [DEBUG] [Thread-211803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:49:53.805 [DEBUG] [Thread-211803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:49:53.806 [DEBUG] [Thread-211803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:49:53.846 [DEBUG] [Thread-211803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:49:53.846 [DEBUG] [Thread-211803] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:49:53.849 [DEBUG] [Thread-211803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:49:53.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:49:53.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:49:53.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:49:53.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:49:53.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:49:53.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:49:53.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:49:53.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:49:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:49:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.825798 -999.00  +16.00  22.70     43   +3.40 1 1 1 1 1     0    0 11.73 -43.22 ZNESW 25.4 22.7 150.9 30.3 16.2 -24.7 16.1 -23.6 15.9 -22.6 16.2 -23.8
2026-02-15T21:49:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:49:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:49:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.825798
2026-02-15T21:49:53.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:49:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:49:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:49:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:49:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:49:53.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:49:41', tmtdew=14.64, humidity=37.19, cloud=0.0, wind=36.06, temperature=16.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:49:41', seeing=1.8, atlas_timestamp='2026-02-15T19:49:08.947', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.05375000000000085, -0.021749999999999048, -0.03750000000000142, 0.004999999999999005, -0.04574999999999996, -0.049000000000001265, -0.023749999999999716, -0.01550000000000118, -0.009999999999999787, -0.03575000000000017, -0.009999999999999787, 0.007999999999999119, 0.02224999999999966, -0.057000000000000384, -0.009000000000000341, 0.010249999999999204, 0.014499999999999957, -0.068500000000002, -0.020250000000000767, 0.045999999999999375, 0.024749999999997385, -0.03324999999999889, -0.014249999999998764, 0.029500000000000526, 0.04449999999999932, 0.020749999999999602, -0.0005000000000006111, 0.018000000000000682, 0.019000000000000128, -0.033500000000000085, -0.022999999999999687, -0.006250000000001421], zp_timestamp='2026-02-15T19:46:00')
2026-02-15T21:49:53.875 [DEBUG] [Thread-211803] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:49:53.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:49:53.970 [DEBUG] [Thread-211806] [transport.py] [_log()] starting thread (client mode): 0xa2d7b190
2026-02-15T21:49:53.970 [DEBUG] [Thread-211806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:49:53.989 [DEBUG] [Thread-211806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:49:53.989 [INFO] [Thread-211806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:49:53.997 [DEBUG] [Thread-211806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:49:53.997 [DEBUG] [Thread-211806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] client lang: <none>
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] server lang: <none>
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] kex follows: False
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:49:53.998 [DEBUG] [Thread-211806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:49:53.999 [DEBUG] [Thread-211806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:49:53.999 [DEBUG] [Thread-211806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:49:53.999 [DEBUG] [Thread-211806] [transport.py] [_log()] Compression: none
2026-02-15T21:49:53.999 [DEBUG] [Thread-211806] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:49:54.054 [DEBUG] [Thread-211806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:49:54.055 [DEBUG] [Thread-211806] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:49:54.055 [DEBUG] [Thread-211806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:49:54.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:49:54.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:49:54.111 [DEBUG] [Thread-211806] [transport.py] [_log()] userauth is OK
2026-02-15T21:49:54.111 [DEBUG] [Thread-211806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:49:54.111 [DEBUG] [Thread-211806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:49:54.112 [DEBUG] [Thread-211806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:49:54.112 [DEBUG] [Thread-211806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:49:54.131 [INFO] [Thread-211806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:49:54.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:49:54.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:49:54.949 [DEBUG] [Thread-211806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:49:54.949 [DEBUG] [Thread-211806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:49:54.997 [DEBUG] [Thread-211806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:49:54.997 [DEBUG] [Thread-211806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:49:55.005 [DEBUG] [Thread-211806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:49:55.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:49:55.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:49:55.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:49:55.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:49:55.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:49:55.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:49:55.038 [DEBUG] [Thread-211806] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:50:06.085 [DEBUG] [Thread-211808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:14.887 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:21.124 [DEBUG] [Thread-211809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:25.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:50:25.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:50:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:50:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 50, 17), 14.44, 37.68, 0.0, 28.27, 16.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:50:27.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:50:17
2026-02-15T21:50:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:50:27.535 [DEBUG] [Thread-211810] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T21:50:27.535 [DEBUG] [Thread-211810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:50:27.555 [DEBUG] [Thread-211810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:50:27.555 [INFO] [Thread-211810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:50:27.558 [DEBUG] [Thread-211810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:50:27.558 [DEBUG] [Thread-211810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:50:27.558 [DEBUG] [Thread-211810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] client lang: <none>
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] server lang: <none>
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] kex follows: False
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] Compression: none
2026-02-15T21:50:27.559 [DEBUG] [Thread-211810] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:50:27.577 [DEBUG] [Thread-211810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:50:27.578 [DEBUG] [Thread-211810] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:50:27.578 [DEBUG] [Thread-211810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:50:27.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:50:27.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:50:27.580 [DEBUG] [Thread-211810] [transport.py] [_log()] userauth is OK
2026-02-15T21:50:27.580 [DEBUG] [Thread-211810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:50:27.581 [DEBUG] [Thread-211810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:50:27.581 [DEBUG] [Thread-211810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:50:27.581 [DEBUG] [Thread-211810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:50:27.606 [INFO] [Thread-211810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:50:27.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:50:28.067 [DEBUG] [Thread-211812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:28.234 [DEBUG] [Thread-211810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:50:28.234 [DEBUG] [Thread-211810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:50:28.234 [DEBUG] [Thread-211810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:50:28.275 [DEBUG] [Thread-211810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:50:28.276 [DEBUG] [Thread-211810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:50:28.279 [DEBUG] [Thread-211810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:50:28.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:50:28.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:50:28.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:50:28.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:50:28.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:50:28.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:50:28.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:50:28.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:50:28.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:50:28.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.826145 -999.00  +16.00  23.30     42   +3.40 1 1 1 1 1     0    0 11.93 -47.38 ZNESW 22.2 23.3 145.5 28.3 16.2 -24.8 16.1 -23.6 15.9 -22.4 16.2 -23.9
2026-02-15T21:50:28.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:50:28.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:50:28.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.826145
2026-02-15T21:50:28.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:50:28.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:50:28.307 [DEBUG] [Thread-211810] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:50:28.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:50:28.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:50:28.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:50:28.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:50:17', tmtdew=14.44, humidity=37.68, cloud=0.0, wind=28.27, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:50:17', seeing=1.89, atlas_timestamp='2026-02-15T19:49:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:49:00')
2026-02-15T21:50:28.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:50:28.404 [DEBUG] [Thread-211814] [transport.py] [_log()] starting thread (client mode): 0xa2d6d990
2026-02-15T21:50:28.404 [DEBUG] [Thread-211814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:50:28.418 [DEBUG] [Thread-211814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:50:28.419 [INFO] [Thread-211814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:50:28.426 [DEBUG] [Thread-211814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] client lang: <none>
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] server lang: <none>
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] kex follows: False
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] Compression: none
2026-02-15T21:50:28.427 [DEBUG] [Thread-211814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:50:28.486 [DEBUG] [Thread-211814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:50:28.487 [DEBUG] [Thread-211814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:50:28.488 [DEBUG] [Thread-211814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:50:28.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:50:28.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:50:28.543 [DEBUG] [Thread-211814] [transport.py] [_log()] userauth is OK
2026-02-15T21:50:28.543 [DEBUG] [Thread-211814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:50:28.543 [DEBUG] [Thread-211814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:50:28.543 [DEBUG] [Thread-211814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:50:28.543 [DEBUG] [Thread-211814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:50:28.565 [INFO] [Thread-211814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:50:28.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:50:28.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:50:29.376 [DEBUG] [Thread-211814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:50:29.376 [DEBUG] [Thread-211814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:50:29.424 [DEBUG] [Thread-211814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:50:29.424 [DEBUG] [Thread-211814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:50:29.433 [DEBUG] [Thread-211814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:50:29.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:50:29.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:50:29.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:50:29.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:50:29.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:50:29.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:50:29.470 [DEBUG] [Thread-211814] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:50:29.480 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:32.530 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:36.157 [DEBUG] [Thread-211816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:44.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:44.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:51.219 [DEBUG] [Thread-211817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:56.336 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:50:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:50:59.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:50:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:51:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 50, 52), 14.41, 37.63, 0.0, 29.73, 16.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:51:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:50:52
2026-02-15T21:51:01.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:51:01.841 [DEBUG] [Thread-211818] [transport.py] [_log()] starting thread (client mode): 0xa2d11f90
2026-02-15T21:51:01.841 [DEBUG] [Thread-211818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:51:01.862 [DEBUG] [Thread-211818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:51:01.863 [INFO] [Thread-211818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] client lang: <none>
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] server lang: <none>
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] kex follows: False
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:51:01.866 [DEBUG] [Thread-211818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:51:01.867 [DEBUG] [Thread-211818] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:51:01.867 [DEBUG] [Thread-211818] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:51:01.867 [DEBUG] [Thread-211818] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:51:01.867 [DEBUG] [Thread-211818] [transport.py] [_log()] Compression: none
2026-02-15T21:51:01.867 [DEBUG] [Thread-211818] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:51:01.884 [DEBUG] [Thread-211818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:51:01.885 [DEBUG] [Thread-211818] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:51:01.885 [DEBUG] [Thread-211818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:51:01.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:51:01.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:51:01.888 [DEBUG] [Thread-211818] [transport.py] [_log()] userauth is OK
2026-02-15T21:51:01.888 [DEBUG] [Thread-211818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:51:01.888 [DEBUG] [Thread-211818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:51:01.888 [DEBUG] [Thread-211818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:51:01.888 [DEBUG] [Thread-211818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:51:01.908 [INFO] [Thread-211818] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:51:01.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:51:02.971 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:03.683 [DEBUG] [Thread-211818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:51:03.683 [DEBUG] [Thread-211818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:51:03.683 [DEBUG] [Thread-211818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:51:03.724 [DEBUG] [Thread-211818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:51:03.724 [DEBUG] [Thread-211818] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:51:03.727 [DEBUG] [Thread-211818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:51:03.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:51:03.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:51:03.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:51:03.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:51:03.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:51:03.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:51:03.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:51:03.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:51:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:51:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.826839 -999.00  +16.00  20.54     42   +3.30 1 1 1 1 1     0    0 11.22 -57.09 ZNESW 21.9 20.5 146.4 28.6 16.2 -24.8 16.1 -23.7 15.9 -22.6 16.2 -23.9
2026-02-15T21:51:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:51:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:51:03.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.826839
2026-02-15T21:51:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:51:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:51:03.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:51:03.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:51:03.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:51:03.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:50:52', tmtdew=14.41, humidity=37.63, cloud=0.0, wind=29.73, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:50:53', seeing=2.04, atlas_timestamp='2026-02-15T19:50:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:49:00')
2026-02-15T21:51:03.762 [DEBUG] [Thread-211818] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:51:03.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:51:03.857 [DEBUG] [Thread-211821] [transport.py] [_log()] starting thread (client mode): 0xa2d12620
2026-02-15T21:51:03.858 [DEBUG] [Thread-211821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:51:03.873 [DEBUG] [Thread-211821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:51:03.873 [INFO] [Thread-211821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] client lang: <none>
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] server lang: <none>
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] kex follows: False
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:51:03.881 [DEBUG] [Thread-211821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:51:03.882 [DEBUG] [Thread-211821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:51:03.882 [DEBUG] [Thread-211821] [transport.py] [_log()] Compression: none
2026-02-15T21:51:03.882 [DEBUG] [Thread-211821] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:51:03.938 [DEBUG] [Thread-211821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:51:03.939 [DEBUG] [Thread-211821] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:51:03.940 [DEBUG] [Thread-211821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:51:03.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:51:03.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:51:03.995 [DEBUG] [Thread-211821] [transport.py] [_log()] userauth is OK
2026-02-15T21:51:03.995 [DEBUG] [Thread-211821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:51:03.995 [DEBUG] [Thread-211821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:51:03.995 [DEBUG] [Thread-211821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:51:03.995 [DEBUG] [Thread-211821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:51:04.014 [INFO] [Thread-211821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:51:04.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:51:04.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:51:04.898 [DEBUG] [Thread-211821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:51:04.898 [DEBUG] [Thread-211821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:51:04.946 [DEBUG] [Thread-211821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:51:04.947 [DEBUG] [Thread-211821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:51:04.956 [DEBUG] [Thread-211821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:51:04.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:51:04.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:51:04.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:51:04.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:51:04.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:51:04.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:51:04.992 [DEBUG] [Thread-211821] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:51:06.258 [DEBUG] [Thread-211823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:10.868 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:14.966 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:21.308 [DEBUG] [Thread-211824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:28.137 [DEBUG] [Thread-211825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:35.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:51:35.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:51:35.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:51:36.344 [DEBUG] [Thread-211826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 50, 52), 14.41, 37.63, 0.0, 29.73, 16.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:51:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:50:52
2026-02-15T21:51:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:51:37.547 [DEBUG] [Thread-211827] [transport.py] [_log()] starting thread (client mode): 0xa2d10d30
2026-02-15T21:51:37.556 [DEBUG] [Thread-211827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:51:37.563 [DEBUG] [Thread-211827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:51:37.563 [INFO] [Thread-211827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] client lang: <none>
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] server lang: <none>
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] kex follows: False
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] Compression: none
2026-02-15T21:51:37.566 [DEBUG] [Thread-211827] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:51:37.582 [DEBUG] [Thread-211827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:51:37.582 [DEBUG] [Thread-211827] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:51:37.583 [DEBUG] [Thread-211827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:51:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:51:37.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:51:37.584 [DEBUG] [Thread-211827] [transport.py] [_log()] userauth is OK
2026-02-15T21:51:37.585 [DEBUG] [Thread-211827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:51:37.585 [DEBUG] [Thread-211827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:51:37.585 [DEBUG] [Thread-211827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:51:37.585 [DEBUG] [Thread-211827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:51:37.605 [INFO] [Thread-211827] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:51:37.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:51:38.213 [DEBUG] [Thread-211827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:51:38.213 [DEBUG] [Thread-211827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:51:38.214 [DEBUG] [Thread-211827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:51:38.254 [DEBUG] [Thread-211827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:51:38.254 [DEBUG] [Thread-211827] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:51:38.257 [DEBUG] [Thread-211827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:51:38.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:51:38.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:51:38.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:51:38.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:51:38.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:51:38.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:51:38.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:51:38.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:51:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:51:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.827187 -999.00  +15.90  24.96     43   +3.40 1 1 1 1 1     0    0 11.18 -57.22 ZNESW 17.6 25.0 145.4 30.8 16.2 -24.8 16.1 -23.5 15.9 -22.7 16.2 -23.8
2026-02-15T21:51:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:51:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:51:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.827187
2026-02-15T21:51:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:51:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:51:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:51:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:51:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:51:38.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:50:52', tmtdew=14.41, humidity=37.63, cloud=0.0, wind=29.73, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:51:28', seeing=1.78, atlas_timestamp='2026-02-15T19:51:08.957', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:49:00')
2026-02-15T21:51:38.282 [DEBUG] [Thread-211827] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:51:38.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:51:38.384 [DEBUG] [Thread-211830] [transport.py] [_log()] starting thread (client mode): 0xa2d129e0
2026-02-15T21:51:38.384 [DEBUG] [Thread-211830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:51:38.398 [DEBUG] [Thread-211830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:51:38.398 [INFO] [Thread-211830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:51:38.406 [DEBUG] [Thread-211830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:51:38.406 [DEBUG] [Thread-211830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:51:38.406 [DEBUG] [Thread-211830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:51:38.406 [DEBUG] [Thread-211830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:38.406 [DEBUG] [Thread-211830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] client lang: <none>
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] server lang: <none>
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] kex follows: False
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] Compression: none
2026-02-15T21:51:38.407 [DEBUG] [Thread-211830] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:51:38.466 [DEBUG] [Thread-211830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:51:38.467 [DEBUG] [Thread-211830] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:51:38.467 [DEBUG] [Thread-211830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:51:38.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:51:38.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:51:38.522 [DEBUG] [Thread-211830] [transport.py] [_log()] userauth is OK
2026-02-15T21:51:38.522 [DEBUG] [Thread-211830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:51:38.522 [DEBUG] [Thread-211830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:51:38.522 [DEBUG] [Thread-211830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:51:38.523 [DEBUG] [Thread-211830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:51:38.544 [INFO] [Thread-211830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:51:38.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:51:38.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:51:39.373 [DEBUG] [Thread-211830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:51:39.373 [DEBUG] [Thread-211830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:51:39.421 [DEBUG] [Thread-211830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:51:39.421 [DEBUG] [Thread-211830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:51:39.430 [DEBUG] [Thread-211830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:51:39.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:51:39.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:51:39.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:51:39.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:51:39.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:51:39.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:51:39.464 [DEBUG] [Thread-211830] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:51:44.398 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:44.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:45.388 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:51.377 [DEBUG] [Thread-211832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:53.217 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:51:57.317 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:06.426 [DEBUG] [Thread-211833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:09.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:52:09.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:52:09.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:52:11.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 51, 28), 14.37, 37.73, 0.0, 30.65, 16.13, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:52:11.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:51:28
2026-02-15T21:52:11.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:52:11.929 [DEBUG] [Thread-211834] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3e0
2026-02-15T21:52:11.929 [DEBUG] [Thread-211834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:52:11.950 [DEBUG] [Thread-211834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:52:11.951 [INFO] [Thread-211834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] client lang: <none>
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] server lang: <none>
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] kex follows: False
2026-02-15T21:52:11.952 [DEBUG] [Thread-211834] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:52:11.953 [DEBUG] [Thread-211834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:52:11.953 [DEBUG] [Thread-211834] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:52:11.953 [DEBUG] [Thread-211834] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:52:11.953 [DEBUG] [Thread-211834] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:52:11.953 [DEBUG] [Thread-211834] [transport.py] [_log()] Compression: none
2026-02-15T21:52:11.953 [DEBUG] [Thread-211834] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:52:11.969 [DEBUG] [Thread-211834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:52:11.970 [DEBUG] [Thread-211834] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:52:11.971 [DEBUG] [Thread-211834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:52:11.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:52:11.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:52:11.972 [DEBUG] [Thread-211834] [transport.py] [_log()] userauth is OK
2026-02-15T21:52:11.973 [DEBUG] [Thread-211834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:52:11.973 [DEBUG] [Thread-211834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:52:11.973 [DEBUG] [Thread-211834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:52:11.973 [DEBUG] [Thread-211834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:52:11.988 [INFO] [Thread-211834] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:52:11.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:52:12.597 [DEBUG] [Thread-211834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:52:12.597 [DEBUG] [Thread-211834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:52:12.597 [DEBUG] [Thread-211834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:52:12.638 [DEBUG] [Thread-211834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:52:12.638 [DEBUG] [Thread-211834] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:52:12.641 [DEBUG] [Thread-211834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:52:12.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:52:12.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:52:12.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:52:12.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:52:12.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:52:12.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:52:12.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:52:12.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:52:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:52:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.827534 -999.00  +15.90  20.77     43   +3.50 1 1 1 1 1     0    0 11.48 -57.57 ZNESW 24.3 20.8 143.5 33.2 16.2 -24.8 16.1 -23.6 15.9 -22.7 16.2 -23.8
2026-02-15T21:52:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:52:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:52:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.827534
2026-02-15T21:52:12.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:52:12.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:52:12.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:52:12.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:52:12.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:52:12.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:51:28', tmtdew=14.37, humidity=37.73, cloud=0.0, wind=30.65, temperature=16.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:52:05', seeing=1.46, atlas_timestamp='2026-02-15T19:51:38.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:49:00')
2026-02-15T21:52:12.667 [DEBUG] [Thread-211834] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:52:12.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:52:12.776 [DEBUG] [Thread-211837] [transport.py] [_log()] starting thread (client mode): 0xa2d6f3a0
2026-02-15T21:52:12.776 [DEBUG] [Thread-211837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:52:12.791 [DEBUG] [Thread-211837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:52:12.792 [INFO] [Thread-211837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:52:12.799 [DEBUG] [Thread-211837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:52:12.800 [DEBUG] [Thread-211837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] client lang: <none>
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] server lang: <none>
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] kex follows: False
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:52:12.801 [DEBUG] [Thread-211837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:52:12.802 [DEBUG] [Thread-211837] [transport.py] [_log()] Compression: none
2026-02-15T21:52:12.802 [DEBUG] [Thread-211837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:52:12.862 [DEBUG] [Thread-211837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:52:12.862 [DEBUG] [Thread-211837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:52:12.863 [DEBUG] [Thread-211837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:52:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:52:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:52:12.918 [DEBUG] [Thread-211837] [transport.py] [_log()] userauth is OK
2026-02-15T21:52:12.918 [DEBUG] [Thread-211837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:52:12.918 [DEBUG] [Thread-211837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:52:12.918 [DEBUG] [Thread-211837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:52:12.918 [DEBUG] [Thread-211837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:52:12.932 [INFO] [Thread-211837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:52:12.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:52:12.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:52:13.793 [DEBUG] [Thread-211837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:52:13.793 [DEBUG] [Thread-211837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:52:13.841 [DEBUG] [Thread-211837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:52:13.841 [DEBUG] [Thread-211837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:52:13.850 [DEBUG] [Thread-211837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:52:13.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:52:13.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:52:13.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:52:13.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:52:13.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:52:13.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:52:13.887 [DEBUG] [Thread-211837] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:52:21.462 [DEBUG] [Thread-211839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:27.713 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:28.205 [DEBUG] [Thread-211840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:30.104 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:35.464 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:36.514 [DEBUG] [Thread-211841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:39.583 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:43.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:52:43.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:52:43.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:52:44.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:44.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:52:46.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 52, 4), 14.38, 37.69, 0.0, 32.22, 16.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:52:46.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:52:04
2026-02-15T21:52:46.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:52:46.702 [DEBUG] [Thread-211842] [transport.py] [_log()] starting thread (client mode): 0xa2d13040
2026-02-15T21:52:46.702 [DEBUG] [Thread-211842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:52:46.722 [DEBUG] [Thread-211842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:52:46.722 [INFO] [Thread-211842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:52:46.725 [DEBUG] [Thread-211842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] client lang: <none>
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] server lang: <none>
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] kex follows: False
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] Compression: none
2026-02-15T21:52:46.726 [DEBUG] [Thread-211842] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:52:46.745 [DEBUG] [Thread-211842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:52:46.746 [DEBUG] [Thread-211842] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:52:46.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:52:46.747 [DEBUG] [Thread-211842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:52:46.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:52:46.750 [DEBUG] [Thread-211842] [transport.py] [_log()] userauth is OK
2026-02-15T21:52:46.750 [DEBUG] [Thread-211842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:52:46.751 [DEBUG] [Thread-211842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:52:46.751 [DEBUG] [Thread-211842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:52:46.751 [DEBUG] [Thread-211842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:52:46.774 [INFO] [Thread-211842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:52:46.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:52:47.384 [DEBUG] [Thread-211842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:52:47.384 [DEBUG] [Thread-211842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:52:47.385 [DEBUG] [Thread-211842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:52:47.425 [DEBUG] [Thread-211842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:52:47.426 [DEBUG] [Thread-211842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:52:47.429 [DEBUG] [Thread-211842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:52:47.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:52:47.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:52:47.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:52:47.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:52:47.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:52:47.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:52:47.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:52:47.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:52:47.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:52:47.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.827881 -999.00  +15.90  17.95     43   +3.50 1 1 1 1 1     0    0 11.61 -60.13 ZNESW 22.3 17.9 154.6 26.4 16.2 -24.8 16.1 -23.5 15.9 -22.6 16.2 -23.8
2026-02-15T21:52:47.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:52:47.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:52:47.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.827881
2026-02-15T21:52:47.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:52:47.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:52:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:52:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:52:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:52:47.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:52:04', tmtdew=14.38, humidity=37.69, cloud=0.0, wind=32.22, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:52:40', seeing=1.65, atlas_timestamp='2026-02-15T19:52:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:49:00')
2026-02-15T21:52:47.456 [DEBUG] [Thread-211842] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:52:47.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:52:47.554 [DEBUG] [Thread-211845] [transport.py] [_log()] starting thread (client mode): 0xa2d3d930
2026-02-15T21:52:47.555 [DEBUG] [Thread-211845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:52:47.569 [DEBUG] [Thread-211845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:52:47.569 [INFO] [Thread-211845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:52:47.577 [DEBUG] [Thread-211845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:52:47.577 [DEBUG] [Thread-211845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:52:47.577 [DEBUG] [Thread-211845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:52:47.577 [DEBUG] [Thread-211845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:47.577 [DEBUG] [Thread-211845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:52:47.577 [DEBUG] [Thread-211845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] client lang: <none>
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] server lang: <none>
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] kex follows: False
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] Compression: none
2026-02-15T21:52:47.578 [DEBUG] [Thread-211845] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:52:47.635 [DEBUG] [Thread-211845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:52:47.636 [DEBUG] [Thread-211845] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:52:47.636 [DEBUG] [Thread-211845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:52:47.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:52:47.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:52:47.690 [DEBUG] [Thread-211845] [transport.py] [_log()] userauth is OK
2026-02-15T21:52:47.691 [DEBUG] [Thread-211845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:52:47.691 [DEBUG] [Thread-211845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:52:47.691 [DEBUG] [Thread-211845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:52:47.691 [DEBUG] [Thread-211845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:52:47.710 [INFO] [Thread-211845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:52:47.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:52:47.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:52:48.571 [DEBUG] [Thread-211845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:52:48.571 [DEBUG] [Thread-211845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:52:48.619 [DEBUG] [Thread-211845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:52:48.620 [DEBUG] [Thread-211845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:52:48.629 [DEBUG] [Thread-211845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:52:48.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:52:48.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:52:48.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:52:48.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:52:48.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:52:48.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:52:48.666 [DEBUG] [Thread-211845] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:52:51.555 [DEBUG] [Thread-211847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:06.612 [DEBUG] [Thread-211848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:10.023 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:18.241 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:18.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:53:18.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:53:18.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:53:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 52, 40), 14.49, 37.59, 0.0, 35.57, 16.39, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:53:20.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:52:40
2026-02-15T21:53:21.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:53:21.296 [DEBUG] [Thread-211849] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3e0
2026-02-15T21:53:21.296 [DEBUG] [Thread-211849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:53:21.316 [DEBUG] [Thread-211849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:53:21.316 [INFO] [Thread-211849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] client lang: <none>
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] server lang: <none>
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] kex follows: False
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] Compression: none
2026-02-15T21:53:21.320 [DEBUG] [Thread-211849] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:53:21.336 [DEBUG] [Thread-211849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:53:21.337 [DEBUG] [Thread-211849] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:53:21.337 [DEBUG] [Thread-211849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:53:21.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:53:21.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:53:21.338 [DEBUG] [Thread-211849] [transport.py] [_log()] userauth is OK
2026-02-15T21:53:21.339 [DEBUG] [Thread-211849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:53:21.339 [DEBUG] [Thread-211849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:53:21.339 [DEBUG] [Thread-211849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:53:21.339 [DEBUG] [Thread-211849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:53:21.351 [INFO] [Thread-211849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:53:21.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:53:21.649 [DEBUG] [Thread-211851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:21.953 [DEBUG] [Thread-211849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:53:21.954 [DEBUG] [Thread-211849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:53:21.954 [DEBUG] [Thread-211849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:53:21.994 [DEBUG] [Thread-211849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:53:21.995 [DEBUG] [Thread-211849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:53:21.998 [DEBUG] [Thread-211849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:53:22.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:53:22.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:53:22.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:53:22.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:53:22.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:53:22.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:53:22.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:53:22.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:53:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:53:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.828228 -999.00  +15.90  23.80     43   +3.50 1 1 1 1 1     0    0 11.45 -62.45 ZNESW 20.1 23.8 155.2 30.6 16.2 -24.6 16.1 -23.6 15.9 -22.5 16.2 -23.8
2026-02-15T21:53:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:53:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:53:22.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.828228
2026-02-15T21:53:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:53:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:53:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:53:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:53:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:53:22.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:52:40', tmtdew=14.49, humidity=37.59, cloud=0.0, wind=35.57, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:53:16', seeing=1.62, atlas_timestamp='2026-02-15T19:52:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:49:00')
2026-02-15T21:53:22.021 [DEBUG] [Thread-211849] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:53:22.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:53:22.118 [DEBUG] [Thread-211853] [transport.py] [_log()] starting thread (client mode): 0xa2d6f550
2026-02-15T21:53:22.118 [DEBUG] [Thread-211853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:53:22.133 [DEBUG] [Thread-211853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:53:22.133 [INFO] [Thread-211853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:53:22.140 [DEBUG] [Thread-211853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:53:22.140 [DEBUG] [Thread-211853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:53:22.140 [DEBUG] [Thread-211853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:53:22.140 [DEBUG] [Thread-211853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:22.140 [DEBUG] [Thread-211853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:22.140 [DEBUG] [Thread-211853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] client lang: <none>
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] server lang: <none>
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] kex follows: False
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] Compression: none
2026-02-15T21:53:22.141 [DEBUG] [Thread-211853] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:53:22.198 [DEBUG] [Thread-211853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:53:22.198 [DEBUG] [Thread-211853] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:53:22.198 [DEBUG] [Thread-211853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:53:22.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:53:22.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:53:22.254 [DEBUG] [Thread-211853] [transport.py] [_log()] userauth is OK
2026-02-15T21:53:22.254 [DEBUG] [Thread-211853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:53:22.254 [DEBUG] [Thread-211853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:53:22.254 [DEBUG] [Thread-211853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:53:22.254 [DEBUG] [Thread-211853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:53:22.271 [INFO] [Thread-211853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:53:22.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:53:22.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:53:22.338 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:23.080 [DEBUG] [Thread-211853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:53:23.080 [DEBUG] [Thread-211853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:53:23.128 [DEBUG] [Thread-211853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:53:23.128 [DEBUG] [Thread-211853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:53:23.136 [DEBUG] [Thread-211853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:53:23.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:53: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')
2026-02-15T21:53:23.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:53:23.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:53:23.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:53:23.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:53:23.170 [DEBUG] [Thread-211853] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:53:28.275 [DEBUG] [Thread-211855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:36.684 [DEBUG] [Thread-211856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:44.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:44.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:51.729 [DEBUG] [Thread-211857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:52.786 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:53:53.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:53:53.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:53:53.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:53:55.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 53, 15), 14.3, 37.78, 0.0, 26.47, 16.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:53:55.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:53:15
2026-02-15T21:53:56.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:53:56.329 [DEBUG] [Thread-211858] [transport.py] [_log()] starting thread (client mode): 0xa2d55690
2026-02-15T21:53:56.329 [DEBUG] [Thread-211858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:53:56.349 [DEBUG] [Thread-211858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:53:56.349 [INFO] [Thread-211858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] client lang: <none>
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] server lang: <none>
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] kex follows: False
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] Compression: none
2026-02-15T21:53:56.352 [DEBUG] [Thread-211858] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:53:56.370 [DEBUG] [Thread-211858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:53:56.370 [DEBUG] [Thread-211858] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:53:56.371 [DEBUG] [Thread-211858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:53:56.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:53:56.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:53:56.373 [DEBUG] [Thread-211858] [transport.py] [_log()] userauth is OK
2026-02-15T21:53:56.373 [DEBUG] [Thread-211858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:53:56.373 [DEBUG] [Thread-211858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:53:56.373 [DEBUG] [Thread-211858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:53:56.373 [DEBUG] [Thread-211858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:53:56.398 [INFO] [Thread-211858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:53:56.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:53:57.196 [DEBUG] [Thread-211858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:53:57.196 [DEBUG] [Thread-211858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:53:57.196 [DEBUG] [Thread-211858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:53:57.237 [DEBUG] [Thread-211858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:53:57.238 [DEBUG] [Thread-211858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:53:57.241 [DEBUG] [Thread-211858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:53:57.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:53:57.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:53:57.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:53:57.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:53:57.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:53:57.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:53:57.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:53:57.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:53:57.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:53:57.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.828575 -999.00  +15.90  19.70     43   +3.50 1 1 1 1 1     0    0 10.96 -63.08 ZNESW 22.1 19.7 163.8 33.6 16.2 -24.7 16.1 -23.6 15.9 -22.6 16.2 -23.9
2026-02-15T21:53:57.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:53:57.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:53:57.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.828575
2026-02-15T21:53:57.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:53:57.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:53:57.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:53:57.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:53:57.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:53:57.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:53:15', tmtdew=14.3, humidity=37.78, cloud=0.0, wind=26.47, temperature=16.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:53:51', seeing=1.62, atlas_timestamp='2026-02-15T19:53:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:52:00')
2026-02-15T21:53:57.267 [DEBUG] [Thread-211858] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:53:57.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:53:57.364 [DEBUG] [Thread-211861] [transport.py] [_log()] starting thread (client mode): 0xa2d546a0
2026-02-15T21:53:57.364 [DEBUG] [Thread-211861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:53:57.378 [DEBUG] [Thread-211861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:53:57.378 [INFO] [Thread-211861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:53:57.386 [DEBUG] [Thread-211861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:53:57.386 [DEBUG] [Thread-211861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:53:57.386 [DEBUG] [Thread-211861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] client lang: <none>
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] server lang: <none>
2026-02-15T21:53:57.387 [DEBUG] [Thread-211861] [transport.py] [_log()] kex follows: False
2026-02-15T21:53:57.388 [DEBUG] [Thread-211861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:53:57.388 [DEBUG] [Thread-211861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:53:57.388 [DEBUG] [Thread-211861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:53:57.388 [DEBUG] [Thread-211861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:53:57.389 [DEBUG] [Thread-211861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:53:57.389 [DEBUG] [Thread-211861] [transport.py] [_log()] Compression: none
2026-02-15T21:53:57.389 [DEBUG] [Thread-211861] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:53:57.447 [DEBUG] [Thread-211861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:53:57.447 [DEBUG] [Thread-211861] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:53:57.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:53:57.448 [DEBUG] [Thread-211861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:53:57.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:53:57.503 [DEBUG] [Thread-211861] [transport.py] [_log()] userauth is OK
2026-02-15T21:53:57.503 [DEBUG] [Thread-211861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:53:57.503 [DEBUG] [Thread-211861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:53:57.503 [DEBUG] [Thread-211861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:53:57.503 [DEBUG] [Thread-211861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:53:57.522 [INFO] [Thread-211861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:53:57.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:53:57.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:53:58.348 [DEBUG] [Thread-211861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:53:58.349 [DEBUG] [Thread-211861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:53:58.396 [DEBUG] [Thread-211861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:53:58.396 [DEBUG] [Thread-211861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:53:58.405 [DEBUG] [Thread-211861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:53:58.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:53:58.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:53:58.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:53:58.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:53:58.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:53:58.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:53:58.441 [DEBUG] [Thread-211861] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:54:03.513 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:06.768 [DEBUG] [Thread-211863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:07.677 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:10.721 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:21.824 [DEBUG] [Thread-211864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:28.350 [DEBUG] [Thread-211865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:28.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:54:28.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:54:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:54:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 53, 51), 14.22, 38.36, 0.0, 27.28, 16.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:54:30.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:53:51
2026-02-15T21:54:31.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:54:31.502 [DEBUG] [Thread-211866] [transport.py] [_log()] starting thread (client mode): 0xa2d12950
2026-02-15T21:54:31.502 [DEBUG] [Thread-211866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:54:31.522 [DEBUG] [Thread-211866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:54:31.522 [INFO] [Thread-211866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] client lang: <none>
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] server lang: <none>
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] kex follows: False
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] Compression: none
2026-02-15T21:54:31.525 [DEBUG] [Thread-211866] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:54:31.543 [DEBUG] [Thread-211866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:54:31.544 [DEBUG] [Thread-211866] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:54:31.544 [DEBUG] [Thread-211866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:54:31.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:54:31.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:54:31.546 [DEBUG] [Thread-211866] [transport.py] [_log()] userauth is OK
2026-02-15T21:54:31.546 [DEBUG] [Thread-211866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:54:31.546 [DEBUG] [Thread-211866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:54:31.546 [DEBUG] [Thread-211866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:54:31.547 [DEBUG] [Thread-211866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:54:31.571 [INFO] [Thread-211866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:54:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:54:32.186 [DEBUG] [Thread-211866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:54:32.187 [DEBUG] [Thread-211866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:54:32.187 [DEBUG] [Thread-211866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:54:32.228 [DEBUG] [Thread-211866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:54:32.228 [DEBUG] [Thread-211866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:54:32.230 [DEBUG] [Thread-211866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:54:32.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:54:32.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:54:32.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:54:32.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:54:32.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:54:32.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:54:32.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:54:32.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.829270 -999.00  +15.90  15.71     43   +3.50 1 1 1 1 1     0    0 10.54 -72.33 ZNESW 17.5 15.7 151.0 26.6 16.2 -24.8 16.1 -23.7 15.8 -22.7 16.1 -24.0
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.829270
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:54:32.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:53:51', tmtdew=14.22, humidity=38.36, cloud=0.0, wind=27.28, temperature=16.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:54:28', seeing=1.8, atlas_timestamp='2026-02-15T19:54:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:52:00')
2026-02-15T21:54:32.250 [DEBUG] [Thread-211866] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:54:32.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:54:32.333 [DEBUG] [Thread-211869] [transport.py] [_log()] starting thread (client mode): 0xa2db4df0
2026-02-15T21:54:32.333 [DEBUG] [Thread-211869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:54:32.347 [DEBUG] [Thread-211869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:54:32.347 [INFO] [Thread-211869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] client lang: <none>
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] server lang: <none>
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] kex follows: False
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] Compression: none
2026-02-15T21:54:32.355 [DEBUG] [Thread-211869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:54:32.413 [DEBUG] [Thread-211869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:54:32.413 [DEBUG] [Thread-211869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:54:32.413 [DEBUG] [Thread-211869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:54:32.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:54:32.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:54:32.470 [DEBUG] [Thread-211869] [transport.py] [_log()] userauth is OK
2026-02-15T21:54:32.470 [DEBUG] [Thread-211869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:54:32.470 [DEBUG] [Thread-211869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:54:32.470 [DEBUG] [Thread-211869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:54:32.470 [DEBUG] [Thread-211869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:54:32.484 [INFO] [Thread-211869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:54:32.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:54:32.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:54:33.352 [DEBUG] [Thread-211869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:54:33.353 [DEBUG] [Thread-211869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:54:33.401 [DEBUG] [Thread-211869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:54:33.401 [DEBUG] [Thread-211869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:54:33.409 [DEBUG] [Thread-211869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:54:33.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:54:33.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:54:33.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:54:33.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:54:33.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:54:33.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:54:33.445 [DEBUG] [Thread-211869] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:54:36.861 [DEBUG] [Thread-211871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:41.172 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:45.015 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:45.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:50.032 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:51.923 [DEBUG] [Thread-211872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:54:54.084 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:03.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:55:03.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:55:03.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:55:05.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 54, 27), 14.12, 38.61, 0.0, 30.08, 15.91, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:55:05.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:54:27
2026-02-15T21:55:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:55:06.319 [DEBUG] [Thread-211873] [transport.py] [_log()] starting thread (client mode): 0xa2d3de40
2026-02-15T21:55:06.319 [DEBUG] [Thread-211873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:55:06.339 [DEBUG] [Thread-211873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:55:06.339 [INFO] [Thread-211873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] client lang: <none>
2026-02-15T21:55:06.342 [DEBUG] [Thread-211873] [transport.py] [_log()] server lang: <none>
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] kex follows: False
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] Compression: none
2026-02-15T21:55:06.343 [DEBUG] [Thread-211873] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:55:06.360 [DEBUG] [Thread-211873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:55:06.361 [DEBUG] [Thread-211873] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:55:06.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:55:06.362 [DEBUG] [Thread-211873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:55:06.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:55:06.364 [DEBUG] [Thread-211873] [transport.py] [_log()] userauth is OK
2026-02-15T21:55:06.364 [DEBUG] [Thread-211873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:55:06.365 [DEBUG] [Thread-211873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:55:06.365 [DEBUG] [Thread-211873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:55:06.365 [DEBUG] [Thread-211873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:55:06.390 [INFO] [Thread-211873] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:55:06.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:55:06.959 [DEBUG] [Thread-211875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:13.173 [DEBUG] [Thread-211873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:55:13.173 [DEBUG] [Thread-211873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:55:13.173 [DEBUG] [Thread-211873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:55:13.214 [DEBUG] [Thread-211873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:55:13.214 [DEBUG] [Thread-211873] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:55:13.218 [DEBUG] [Thread-211873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:55:13.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:55:13.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:55:13.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:55:13.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:55:13.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:55:13.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:55:13.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:55:13.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:55:13.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:55:13.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.829617 -999.00  +15.90  15.13     43   +3.50 1 1 1 1 1     0    0 11.25 -65.59 ZNESW 20.3 15.1 156.2 27.3 16.2 -24.6 16.1 -23.7 15.8 -22.7 16.2 -23.9
2026-02-15T21:55:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:55:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:55:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.829617
2026-02-15T21:55:13.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:55:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:55:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:55:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:55:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:55:13.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:54:27', tmtdew=14.12, humidity=38.61, cloud=0.0, wind=30.08, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:54:28', seeing=1.8, atlas_timestamp='2026-02-15T19:54:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:52:00')
2026-02-15T21:55:13.267 [DEBUG] [Thread-211873] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:55:13.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:55:13.367 [DEBUG] [Thread-211877] [transport.py] [_log()] starting thread (client mode): 0xa2db7f10
2026-02-15T21:55:13.368 [DEBUG] [Thread-211877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:55:13.382 [DEBUG] [Thread-211877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:55:13.382 [INFO] [Thread-211877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:55:13.390 [DEBUG] [Thread-211877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:55:13.390 [DEBUG] [Thread-211877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:55:13.390 [DEBUG] [Thread-211877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:55:13.390 [DEBUG] [Thread-211877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] client lang: <none>
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] server lang: <none>
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] kex follows: False
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] Compression: none
2026-02-15T21:55:13.391 [DEBUG] [Thread-211877] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:55:13.446 [DEBUG] [Thread-211877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:55:13.447 [DEBUG] [Thread-211877] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:55:13.448 [DEBUG] [Thread-211877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:55:13.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:55:13.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:55:13.504 [DEBUG] [Thread-211877] [transport.py] [_log()] userauth is OK
2026-02-15T21:55:13.504 [DEBUG] [Thread-211877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:55:13.504 [DEBUG] [Thread-211877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:55:13.504 [DEBUG] [Thread-211877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:55:13.505 [DEBUG] [Thread-211877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:55:13.525 [INFO] [Thread-211877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:55:13.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:55:13.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:55:14.400 [DEBUG] [Thread-211877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:55:14.400 [DEBUG] [Thread-211877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:55:14.448 [DEBUG] [Thread-211877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:55:14.448 [DEBUG] [Thread-211877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:55:14.457 [DEBUG] [Thread-211877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:55:14.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:55:14.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:55:14.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:55:14.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:55:14.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:55:14.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:55:14.493 [DEBUG] [Thread-211877] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:55:21.994 [DEBUG] [Thread-211879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:24.555 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:28.402 [DEBUG] [Thread-211880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:32.524 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:36.710 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:36.887 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:37.047 [DEBUG] [Thread-211881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:55:44.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:55:44.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:55:45.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:45.222 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:55:46.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 55, 3), 14.11, 38.63, 0.0, 33.65, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:55:46.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:55:03
2026-02-15T21:55:46.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:55:46.921 [DEBUG] [Thread-211882] [transport.py] [_log()] starting thread (client mode): 0xa57b1510
2026-02-15T21:55:46.922 [DEBUG] [Thread-211882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:55:46.942 [DEBUG] [Thread-211882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:55:46.942 [INFO] [Thread-211882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:55:46.945 [DEBUG] [Thread-211882] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] client lang: <none>
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] server lang: <none>
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] kex follows: False
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:55:46.946 [DEBUG] [Thread-211882] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:55:46.947 [DEBUG] [Thread-211882] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:55:46.947 [DEBUG] [Thread-211882] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:55:46.947 [DEBUG] [Thread-211882] [transport.py] [_log()] Compression: none
2026-02-15T21:55:46.947 [DEBUG] [Thread-211882] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:55:46.965 [DEBUG] [Thread-211882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:55:46.966 [DEBUG] [Thread-211882] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:55:46.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:55:46.968 [DEBUG] [Thread-211882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:55:46.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:55:46.971 [DEBUG] [Thread-211882] [transport.py] [_log()] userauth is OK
2026-02-15T21:55:46.971 [DEBUG] [Thread-211882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:55:46.971 [DEBUG] [Thread-211882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:55:46.971 [DEBUG] [Thread-211882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:55:46.972 [DEBUG] [Thread-211882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:55:47.007 [INFO] [Thread-211882] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:55:47.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:55:47.657 [DEBUG] [Thread-211882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:55:47.658 [DEBUG] [Thread-211882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:55:47.658 [DEBUG] [Thread-211882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:55:47.698 [DEBUG] [Thread-211882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:55:47.699 [DEBUG] [Thread-211882] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:55:47.702 [DEBUG] [Thread-211882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:55:47.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:55:47.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:55:47.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:55:47.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:55:47.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:55:47.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:55:47.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:55:47.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:55:47.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:55:47.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.829964 -999.00  +15.90  17.50     43   +3.60 1 1 1 1 1     0    0 11.22 -64.63 ZNESW 23.7 17.5 152.2 29.8 16.1 -24.7 16.1 -23.6 15.9 -22.6 16.1 -23.8
2026-02-15T21:55:47.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:55:47.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:55:47.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.829964
2026-02-15T21:55:47.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:55:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:55:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:55:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:55:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:55:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:55:03', tmtdew=14.11, humidity=38.63, cloud=0.0, wind=33.65, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:55:39', seeing=1.74, atlas_timestamp='2026-02-15T19:55:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:52:00')
2026-02-15T21:55:47.724 [DEBUG] [Thread-211882] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:55:47.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:55:47.815 [DEBUG] [Thread-211885] [transport.py] [_log()] starting thread (client mode): 0xa2d13550
2026-02-15T21:55:47.815 [DEBUG] [Thread-211885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:55:47.830 [DEBUG] [Thread-211885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:55:47.830 [INFO] [Thread-211885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] client lang: <none>
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] server lang: <none>
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] kex follows: False
2026-02-15T21:55:47.838 [DEBUG] [Thread-211885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:55:47.839 [DEBUG] [Thread-211885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:55:47.839 [DEBUG] [Thread-211885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:55:47.839 [DEBUG] [Thread-211885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:55:47.839 [DEBUG] [Thread-211885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:55:47.839 [DEBUG] [Thread-211885] [transport.py] [_log()] Compression: none
2026-02-15T21:55:47.839 [DEBUG] [Thread-211885] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:55:47.898 [DEBUG] [Thread-211885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:55:47.899 [DEBUG] [Thread-211885] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:55:47.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:55:47.900 [DEBUG] [Thread-211885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:55:47.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:55:47.955 [DEBUG] [Thread-211885] [transport.py] [_log()] userauth is OK
2026-02-15T21:55:47.956 [DEBUG] [Thread-211885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:55:47.956 [DEBUG] [Thread-211885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:55:47.956 [DEBUG] [Thread-211885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:55:47.956 [DEBUG] [Thread-211885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:55:47.974 [INFO] [Thread-211885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:55:47.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:55:47.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:55:48.805 [DEBUG] [Thread-211885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:55:48.806 [DEBUG] [Thread-211885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:55:48.853 [DEBUG] [Thread-211885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:55:48.854 [DEBUG] [Thread-211885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:55:48.863 [DEBUG] [Thread-211885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:55:48.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:55:48.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:55:48.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:55:48.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:55:48.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:55:48.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:55:48.900 [DEBUG] [Thread-211885] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:55:52.078 [DEBUG] [Thread-211887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:07.116 [DEBUG] [Thread-211888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:07.252 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:14.356 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:18.451 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:56:18.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:56:18.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:56:21.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 55, 39), 14.33, 37.99, 0.0, 24.77, 16.29, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:56:21.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:55:39
2026-02-15T21:56:21.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:56:21.760 [DEBUG] [Thread-211889] [transport.py] [_log()] starting thread (client mode): 0xa57b1c90
2026-02-15T21:56:21.760 [DEBUG] [Thread-211889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:56:21.778 [DEBUG] [Thread-211889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:56:21.778 [INFO] [Thread-211889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] client lang: <none>
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] server lang: <none>
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] kex follows: False
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] Compression: none
2026-02-15T21:56:21.782 [DEBUG] [Thread-211889] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:56:21.800 [DEBUG] [Thread-211889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:56:21.801 [DEBUG] [Thread-211889] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:56:21.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:56:21.802 [DEBUG] [Thread-211889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:56:21.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:56:21.804 [DEBUG] [Thread-211889] [transport.py] [_log()] userauth is OK
2026-02-15T21:56:21.804 [DEBUG] [Thread-211889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:56:21.804 [DEBUG] [Thread-211889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:56:21.804 [DEBUG] [Thread-211889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:56:21.805 [DEBUG] [Thread-211889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:56:21.830 [INFO] [Thread-211889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:56:21.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:56:22.153 [DEBUG] [Thread-211891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:22.458 [DEBUG] [Thread-211889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:56:22.458 [DEBUG] [Thread-211889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:56:22.458 [DEBUG] [Thread-211889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:56:22.499 [DEBUG] [Thread-211889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:56:22.499 [DEBUG] [Thread-211889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:56:22.502 [DEBUG] [Thread-211889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:56:22.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:56:22.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:56:22.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:56:22.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:56:22.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:56:22.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:56:22.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:56:22.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:56:22.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:56:22.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.830311 -999.00  +15.90  20.02     43   +3.60 1 1 1 1 1     0    0 10.79 -71.85 ZNESW 20.2 20.0 150.9 27.3 16.1 -24.7 16.0 -23.7 15.8 -22.6 16.1 -23.9
2026-02-15T21:56:22.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:56:22.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:56:22.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.830311
2026-02-15T21:56:22.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:56:22.526 [DEBUG] [Thread-211889] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:56:22.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:56:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:56:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:56:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:56:22.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:55:39', tmtdew=14.33, humidity=37.99, cloud=0.0, wind=24.77, temperature=16.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:56:15', seeing=1.91, atlas_timestamp='2026-02-15T19:55:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.028249999999999886, -0.0417500000000004, 0.007250000000000867, -0.02200000000000024, 0.025000000000000355, -0.016749999999998266, 0.0015000000000000568, -0.02874999999999872, -0.013500000000000512, -0.009999999999999787, 0.004249999999998977, -0.02400000000000091, 0.045999999999999375, 0.020749999999999602, -0.0555000000000021, -0.027499999999999858, 0.04224999999999923, 0.027499999999999858, -0.04349999999999987, -0.02775000000000105, 0.05499999999999794, 0.02474999999999916, 0.0027500000000006963, -0.02024999999999899, 0.0389999999999997, 0.04349999999999987, 0.027749999999999275, -0.011499999999999844, 0.008000000000000895, 0.04600000000000115, 0.0010000000000012221, -0.021999999999998465, 0.020749999999999602], zp_timestamp='2026-02-15T19:52:00')
2026-02-15T21:56:22.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:56:22.621 [DEBUG] [Thread-211893] [transport.py] [_log()] starting thread (client mode): 0xa2db5210
2026-02-15T21:56:22.621 [DEBUG] [Thread-211893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:56:22.636 [DEBUG] [Thread-211893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:56:22.636 [INFO] [Thread-211893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:22.644 [DEBUG] [Thread-211893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] client lang: <none>
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] server lang: <none>
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] kex follows: False
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:56:22.645 [DEBUG] [Thread-211893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:56:22.646 [DEBUG] [Thread-211893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:56:22.646 [DEBUG] [Thread-211893] [transport.py] [_log()] Compression: none
2026-02-15T21:56:22.646 [DEBUG] [Thread-211893] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:56:22.704 [DEBUG] [Thread-211893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:56:22.704 [DEBUG] [Thread-211893] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:56:22.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:56:22.705 [DEBUG] [Thread-211893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:56:22.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:56:22.759 [DEBUG] [Thread-211893] [transport.py] [_log()] userauth is OK
2026-02-15T21:56:22.759 [DEBUG] [Thread-211893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:56:22.759 [DEBUG] [Thread-211893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:56:22.759 [DEBUG] [Thread-211893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:56:22.759 [DEBUG] [Thread-211893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:56:22.774 [INFO] [Thread-211893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:56:22.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:56:22.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:56:23.598 [DEBUG] [Thread-211893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:56:23.598 [DEBUG] [Thread-211893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:56:23.646 [DEBUG] [Thread-211893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:56:23.647 [DEBUG] [Thread-211893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:56:23.656 [DEBUG] [Thread-211893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:56:23.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:56:23.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:56:23.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:56:23.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:56:23.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:56:23.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:56:23.692 [DEBUG] [Thread-211893] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:56:28.466 [DEBUG] [Thread-211895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:37.198 [DEBUG] [Thread-211896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:45.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:45.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:48.850 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:52.249 [DEBUG] [Thread-211897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:53.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:56:53.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:56:53.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:56:55.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 56, 14), 14.05, 38.68, 0.0, 34.12, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:56:55.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:56:14
2026-02-15T21:56:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:56:56.293 [DEBUG] [Thread-211898] [transport.py] [_log()] starting thread (client mode): 0xa57d5ea0
2026-02-15T21:56:56.293 [DEBUG] [Thread-211898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:56:56.313 [DEBUG] [Thread-211898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:56:56.313 [INFO] [Thread-211898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:56:56.316 [DEBUG] [Thread-211898] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:56:56.316 [DEBUG] [Thread-211898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:56:56.316 [DEBUG] [Thread-211898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:56:56.316 [DEBUG] [Thread-211898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] client lang: <none>
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] server lang: <none>
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] kex follows: False
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] Compression: none
2026-02-15T21:56:56.317 [DEBUG] [Thread-211898] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:56:56.326 [DEBUG] [Thread-211898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:56:56.326 [DEBUG] [Thread-211898] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:56:56.327 [DEBUG] [Thread-211898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:56:56.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:56:56.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:56:56.328 [DEBUG] [Thread-211898] [transport.py] [_log()] userauth is OK
2026-02-15T21:56:56.328 [DEBUG] [Thread-211898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:56:56.328 [DEBUG] [Thread-211898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:56:56.329 [DEBUG] [Thread-211898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:56:56.329 [DEBUG] [Thread-211898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:56:56.348 [INFO] [Thread-211898] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:56:56.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:56:56.590 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:56:56.992 [DEBUG] [Thread-211898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:56:56.993 [DEBUG] [Thread-211898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:56:56.993 [DEBUG] [Thread-211898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:56:57.034 [DEBUG] [Thread-211898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:56:57.034 [DEBUG] [Thread-211898] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:56:57.037 [DEBUG] [Thread-211898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:56:57.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:56:57.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:56:57.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:56:57.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:56:57.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:56:57.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:56:57.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:56:57.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:56:57.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:56:57.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.830659 -999.00  +15.80  21.74     44   +3.60 1 1 1 1 1     0    0 10.84 -71.77 ZNESW 17.3 21.7 156.2 28.5 16.2 -24.7 16.0 -23.6 15.8 -22.6 16.1 -23.8
2026-02-15T21:56:57.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:56:57.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:56:57.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.830659
2026-02-15T21:56:57.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:56:57.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:56:57.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:56:57.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:56:57.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:56:57.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:56:14', tmtdew=14.05, humidity=38.68, cloud=0.0, wind=34.12, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:56:50', seeing=1.78, atlas_timestamp='2026-02-15T19:56:08.938', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:55:00')
2026-02-15T21:56:57.065 [DEBUG] [Thread-211898] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:56:57.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:56:57.161 [DEBUG] [Thread-211901] [transport.py] [_log()] starting thread (client mode): 0xa57d4220
2026-02-15T21:56:57.161 [DEBUG] [Thread-211901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:56:57.177 [DEBUG] [Thread-211901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:56:57.177 [INFO] [Thread-211901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:56:57.185 [DEBUG] [Thread-211901] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:56:57.185 [DEBUG] [Thread-211901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:56:57.185 [DEBUG] [Thread-211901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:56:57.185 [DEBUG] [Thread-211901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] client lang: <none>
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] server lang: <none>
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] kex follows: False
2026-02-15T21:56:57.186 [DEBUG] [Thread-211901] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:56:57.187 [DEBUG] [Thread-211901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:56:57.187 [DEBUG] [Thread-211901] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:56:57.187 [DEBUG] [Thread-211901] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:56:57.187 [DEBUG] [Thread-211901] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:56:57.187 [DEBUG] [Thread-211901] [transport.py] [_log()] Compression: none
2026-02-15T21:56:57.187 [DEBUG] [Thread-211901] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:56:57.244 [DEBUG] [Thread-211901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:56:57.244 [DEBUG] [Thread-211901] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:56:57.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:56:57.246 [DEBUG] [Thread-211901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:56:57.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:56:57.299 [DEBUG] [Thread-211901] [transport.py] [_log()] userauth is OK
2026-02-15T21:56:57.300 [DEBUG] [Thread-211901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:56:57.300 [DEBUG] [Thread-211901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:56:57.300 [DEBUG] [Thread-211901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:56:57.300 [DEBUG] [Thread-211901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:56:57.323 [INFO] [Thread-211901] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:56:57.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:56:57.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:56:58.167 [DEBUG] [Thread-211901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:56:58.168 [DEBUG] [Thread-211901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:56:58.215 [DEBUG] [Thread-211901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:56:58.216 [DEBUG] [Thread-211901] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:56:58.225 [DEBUG] [Thread-211901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:56:58.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:56:58.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:56:58.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:56:58.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:56:58.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:56:58.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:56:58.260 [DEBUG] [Thread-211901] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:57:00.728 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:07.284 [DEBUG] [Thread-211903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:10.728 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:22.345 [DEBUG] [Thread-211904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:28.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:57:28.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:57:28.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:57:28.532 [DEBUG] [Thread-211905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 56, 50), 14.05, 38.68, 0.0, 29.43, 15.96, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:57:30.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:56:50
2026-02-15T21:57:31.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:57:31.275 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:31.335 [DEBUG] [Thread-211906] [transport.py] [_log()] starting thread (client mode): 0xa2d56b90
2026-02-15T21:57:31.335 [DEBUG] [Thread-211906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:57:31.356 [DEBUG] [Thread-211906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:57:31.356 [INFO] [Thread-211906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:57:31.359 [DEBUG] [Thread-211906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] client lang: <none>
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] server lang: <none>
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] kex follows: False
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] Compression: none
2026-02-15T21:57:31.360 [DEBUG] [Thread-211906] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:57:31.379 [DEBUG] [Thread-211906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:57:31.380 [DEBUG] [Thread-211906] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:57:31.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:57:31.381 [DEBUG] [Thread-211906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:57:31.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:57:31.383 [DEBUG] [Thread-211906] [transport.py] [_log()] userauth is OK
2026-02-15T21:57:31.384 [DEBUG] [Thread-211906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:57:31.384 [DEBUG] [Thread-211906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:57:31.384 [DEBUG] [Thread-211906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:57:31.384 [DEBUG] [Thread-211906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:57:31.408 [INFO] [Thread-211906] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:57:31.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:57:32.035 [DEBUG] [Thread-211906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:57:32.035 [DEBUG] [Thread-211906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:57:32.035 [DEBUG] [Thread-211906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:57:32.077 [DEBUG] [Thread-211906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:57:32.077 [DEBUG] [Thread-211906] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:57:32.080 [DEBUG] [Thread-211906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:57:32.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:57:32.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:57:32.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:57:32.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:57:32.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:57:32.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:57:32.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:57:32.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:57:32.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:57:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.831006 -999.00  +15.90  24.28     44   +3.70 1 1 1 1 1     0    0 10.16 -84.46 ZNESW 18.6 24.3 156.0 29.2 16.1 -24.7 16.0 -23.6 15.8 -22.6 16.1 -23.8
2026-02-15T21:57:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:57:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:57:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.831006
2026-02-15T21:57:32.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:57:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:57:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:57:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:57:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:57:32.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:56:50', tmtdew=14.05, humidity=38.68, cloud=0.0, wind=29.43, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:57:25', seeing=1.67, atlas_timestamp='2026-02-15T19:56:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:55:00')
2026-02-15T21:57:32.107 [DEBUG] [Thread-211906] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:57:32.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:57:32.204 [DEBUG] [Thread-211909] [transport.py] [_log()] starting thread (client mode): 0xa2d10b50
2026-02-15T21:57:32.204 [DEBUG] [Thread-211909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:57:32.219 [DEBUG] [Thread-211909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:57:32.219 [INFO] [Thread-211909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:57:32.227 [DEBUG] [Thread-211909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:57:32.227 [DEBUG] [Thread-211909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:57:32.227 [DEBUG] [Thread-211909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:57:32.227 [DEBUG] [Thread-211909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:57:32.227 [DEBUG] [Thread-211909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:57:32.227 [DEBUG] [Thread-211909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] client lang: <none>
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] server lang: <none>
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] kex follows: False
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] Compression: none
2026-02-15T21:57:32.228 [DEBUG] [Thread-211909] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:57:32.284 [DEBUG] [Thread-211909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:57:32.285 [DEBUG] [Thread-211909] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:57:32.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:57:32.286 [DEBUG] [Thread-211909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:57:32.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:57:32.346 [DEBUG] [Thread-211909] [transport.py] [_log()] userauth is OK
2026-02-15T21:57:32.346 [DEBUG] [Thread-211909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:57:32.346 [DEBUG] [Thread-211909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:57:32.346 [DEBUG] [Thread-211909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:57:32.346 [DEBUG] [Thread-211909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:57:32.363 [INFO] [Thread-211909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:57:32.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:57:32.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:57:33.217 [DEBUG] [Thread-211909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:57:33.218 [DEBUG] [Thread-211909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:57:33.265 [DEBUG] [Thread-211909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:57:33.265 [DEBUG] [Thread-211909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:57:33.274 [DEBUG] [Thread-211909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:57:33.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:57:33.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:57: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
2026-02-15T21:57:33.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:57:33.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:57:33.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:57:33.308 [DEBUG] [Thread-211909] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:57:37.382 [DEBUG] [Thread-211911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:45.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:45.624 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:57:52.432 [DEBUG] [Thread-211912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:03.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:58:03.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:58:03.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:58:05.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 57, 25), 14.03, 38.72, 0.0, 30.49, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:58:05.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:57:25
2026-02-15T21:58:06.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:58:06.442 [DEBUG] [Thread-211913] [transport.py] [_log()] starting thread (client mode): 0xa2d13280
2026-02-15T21:58:06.442 [DEBUG] [Thread-211913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:58:06.463 [DEBUG] [Thread-211913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:58:06.463 [INFO] [Thread-211913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:58:06.466 [DEBUG] [Thread-211913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:58:06.466 [DEBUG] [Thread-211913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] client lang: <none>
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] server lang: <none>
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] kex follows: False
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:58:06.467 [DEBUG] [Thread-211913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:58:06.468 [DEBUG] [Thread-211913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:58:06.468 [DEBUG] [Thread-211913] [transport.py] [_log()] Compression: none
2026-02-15T21:58:06.468 [DEBUG] [Thread-211913] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:58:06.484 [DEBUG] [Thread-211913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:58:06.485 [DEBUG] [Thread-211913] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:58:06.485 [DEBUG] [Thread-211913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:58:06.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:58:06.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:58:06.487 [DEBUG] [Thread-211913] [transport.py] [_log()] userauth is OK
2026-02-15T21:58:06.487 [DEBUG] [Thread-211913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:58:06.487 [DEBUG] [Thread-211913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:58:06.487 [DEBUG] [Thread-211913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:58:06.488 [DEBUG] [Thread-211913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:58:06.511 [INFO] [Thread-211913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:58:06.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:58:07.131 [DEBUG] [Thread-211913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:58:07.131 [DEBUG] [Thread-211913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:58:07.132 [DEBUG] [Thread-211913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:58:07.173 [DEBUG] [Thread-211913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:58:07.173 [DEBUG] [Thread-211913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:58:07.176 [DEBUG] [Thread-211913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:58:07.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:58:07.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:58:07.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:58:07.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:58:07.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:58:07.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:58:07.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:58:07.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:58:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:58:07.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.831700 -999.00  +15.80  18.77     44   +3.60 1 1 1 1 1     0    0 10.00 -84.32 ZNESW 16.0 18.8 145.6 29.3 16.1 -24.8 16.0 -23.7 15.8 -22.7 16.1 -24.0
2026-02-15T21:58:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:58:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:58:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.831700
2026-02-15T21:58:07.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:58:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:58:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:58:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:58:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:58:07.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:57:25', tmtdew=14.03, humidity=38.72, cloud=0.0, wind=30.49, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:58:01', seeing=1.69, atlas_timestamp='2026-02-15T19:57:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:55:00')
2026-02-15T21:58:07.200 [DEBUG] [Thread-211913] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:58:07.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:58:07.296 [DEBUG] [Thread-211916] [transport.py] [_log()] starting thread (client mode): 0xa2d12500
2026-02-15T21:58:07.296 [DEBUG] [Thread-211916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:58:07.313 [DEBUG] [Thread-211916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:58:07.313 [INFO] [Thread-211916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:07.320 [DEBUG] [Thread-211916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] client lang: <none>
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] server lang: <none>
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] kex follows: False
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] Compression: none
2026-02-15T21:58:07.321 [DEBUG] [Thread-211916] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:58:07.379 [DEBUG] [Thread-211916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:58:07.380 [DEBUG] [Thread-211916] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:58:07.380 [DEBUG] [Thread-211916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:58:07.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:58:07.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:58:07.436 [DEBUG] [Thread-211916] [transport.py] [_log()] userauth is OK
2026-02-15T21:58:07.436 [DEBUG] [Thread-211916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:58:07.436 [DEBUG] [Thread-211916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:58:07.436 [DEBUG] [Thread-211916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:58:07.436 [DEBUG] [Thread-211916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:58:07.458 [INFO] [Thread-211916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:58:07.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:58:07.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:58:07.463 [DEBUG] [Thread-211918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:08.313 [DEBUG] [Thread-211916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:58:08.313 [DEBUG] [Thread-211916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:58:08.361 [DEBUG] [Thread-211916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:58:08.362 [DEBUG] [Thread-211916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:58:08.372 [DEBUG] [Thread-211916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:58:08.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:58:08.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:58:08.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:58:08.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:58:08.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:58:08.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:58:08.409 [DEBUG] [Thread-211916] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:58:22.521 [DEBUG] [Thread-211919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:28.589 [DEBUG] [Thread-211920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:37.556 [DEBUG] [Thread-211921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:38.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:58:38.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:58:38.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:58:40.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 58, 1), 13.97, 38.87, 0.0, 29.73, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:58:40.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:58:01
2026-02-15T21:58:41.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:58:41.320 [DEBUG] [Thread-211922] [transport.py] [_log()] starting thread (client mode): 0xa2d56620
2026-02-15T21:58:41.321 [DEBUG] [Thread-211922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:58:41.342 [DEBUG] [Thread-211922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:58:41.343 [INFO] [Thread-211922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] client lang: <none>
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] server lang: <none>
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] kex follows: False
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] Compression: none
2026-02-15T21:58:41.347 [DEBUG] [Thread-211922] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:58:41.364 [DEBUG] [Thread-211922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:58:41.365 [DEBUG] [Thread-211922] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:58:41.365 [DEBUG] [Thread-211922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:58:41.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:58:41.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:58:41.367 [DEBUG] [Thread-211922] [transport.py] [_log()] userauth is OK
2026-02-15T21:58:41.368 [DEBUG] [Thread-211922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:58:41.368 [DEBUG] [Thread-211922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:58:41.368 [DEBUG] [Thread-211922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:58:41.368 [DEBUG] [Thread-211922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:58:41.393 [INFO] [Thread-211922] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:58:41.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:58:42.040 [DEBUG] [Thread-211922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:58:42.040 [DEBUG] [Thread-211922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:58:42.041 [DEBUG] [Thread-211922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:58:42.081 [DEBUG] [Thread-211922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:58:42.081 [DEBUG] [Thread-211922] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:58:42.085 [DEBUG] [Thread-211922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:58:42.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:58:42.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:58:42.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:58:42.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:58:42.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:58:42.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:58:42.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:58:42.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:58:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:58:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.832047 -999.00  +15.80  23.29     44   +3.70 1 1 1 1 1     0    0 10.36 -81.39 ZNESW 18.0 23.3 154.6 27.5 16.1 -24.8 16.0 -23.7 15.8 -22.6 16.1 -23.8
2026-02-15T21:58:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:58:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:58:42.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.832047
2026-02-15T21:58:42.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:58:42.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:58:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:58:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:58:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:58:42.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:58:01', tmtdew=13.97, humidity=38.87, cloud=0.0, wind=29.73, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:58:38', seeing=1.8, atlas_timestamp='2026-02-15T19:58:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:55:00')
2026-02-15T21:58:42.111 [DEBUG] [Thread-211922] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:58:42.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:58:42.207 [DEBUG] [Thread-211925] [transport.py] [_log()] starting thread (client mode): 0xa57722c0
2026-02-15T21:58:42.208 [DEBUG] [Thread-211925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:58:42.221 [DEBUG] [Thread-211925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:58:42.222 [INFO] [Thread-211925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:58:42.230 [DEBUG] [Thread-211925] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] client lang: <none>
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] server lang: <none>
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] kex follows: False
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:58:42.231 [DEBUG] [Thread-211925] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:58:42.232 [DEBUG] [Thread-211925] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:58:42.232 [DEBUG] [Thread-211925] [transport.py] [_log()] Compression: none
2026-02-15T21:58:42.232 [DEBUG] [Thread-211925] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:58:42.289 [DEBUG] [Thread-211925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:58:42.290 [DEBUG] [Thread-211925] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:58:42.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:58:42.291 [DEBUG] [Thread-211925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:58:42.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:58:42.344 [DEBUG] [Thread-211925] [transport.py] [_log()] userauth is OK
2026-02-15T21:58:42.344 [DEBUG] [Thread-211925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:58:42.344 [DEBUG] [Thread-211925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:58:42.344 [DEBUG] [Thread-211925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:58:42.344 [DEBUG] [Thread-211925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:58:42.361 [INFO] [Thread-211925] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:58:42.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:58:42.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:58:43.167 [DEBUG] [Thread-211925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:58:43.167 [DEBUG] [Thread-211925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:58:43.216 [DEBUG] [Thread-211925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:58:43.216 [DEBUG] [Thread-211925] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:58:43.225 [DEBUG] [Thread-211925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:58:43.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:58: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')
2026-02-15T21:58:43.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:58:43.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:58:43.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:58:43.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:58:43.258 [DEBUG] [Thread-211925] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:58:44.375 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:45.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:45.830 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:58:52.596 [DEBUG] [Thread-211927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:07.643 [DEBUG] [Thread-211928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:13.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:59:13.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:59: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-02-15T21:59:15.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 58, 37), 14.06, 38.75, 0.0, 32.07, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:59:15.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:58:37
2026-02-15T21:59:15.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:59:15.987 [DEBUG] [Thread-211929] [transport.py] [_log()] starting thread (client mode): 0xa57d7d00
2026-02-15T21:59:15.987 [DEBUG] [Thread-211929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:59:16.008 [DEBUG] [Thread-211929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:59:16.008 [INFO] [Thread-211929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:59:16.011 [DEBUG] [Thread-211929] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:59:16.011 [DEBUG] [Thread-211929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:59:16.011 [DEBUG] [Thread-211929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:59:16.011 [DEBUG] [Thread-211929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:16.011 [DEBUG] [Thread-211929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] client lang: <none>
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] server lang: <none>
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] kex follows: False
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] Compression: none
2026-02-15T21:59:16.012 [DEBUG] [Thread-211929] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:59:16.030 [DEBUG] [Thread-211929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:59:16.030 [DEBUG] [Thread-211929] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:59:16.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:59:16.031 [DEBUG] [Thread-211929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:59:16.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:59:16.034 [DEBUG] [Thread-211929] [transport.py] [_log()] userauth is OK
2026-02-15T21:59:16.034 [DEBUG] [Thread-211929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:59:16.034 [DEBUG] [Thread-211929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:59:16.034 [DEBUG] [Thread-211929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:59:16.034 [DEBUG] [Thread-211929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:59:16.052 [INFO] [Thread-211929] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:59:16.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:59:16.683 [DEBUG] [Thread-211929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:59:16.684 [DEBUG] [Thread-211929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:59:16.684 [DEBUG] [Thread-211929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:59:16.724 [DEBUG] [Thread-211929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:59:16.724 [DEBUG] [Thread-211929] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:59:16.727 [DEBUG] [Thread-211929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:59:16.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:59:16.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:59:16.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:59:16.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:59:16.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:59:16.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:59:16.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:59:16.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:59:16.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:59:16.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.832395 -999.00  +15.80  20.38     44   +3.70 1 1 1 1 1     0    0 9.78 -90.70 ZNESW 22.2 20.4 146.2 26.0 16.1 -24.9 16.0 -23.7 15.7 -22.6 16.1 -23.8
2026-02-15T21:59:16.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:59:16.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:59:16.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.832395
2026-02-15T21:59:16.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:59:16.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:59:16.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:59:16.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:59:16.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:59:16.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:58:37', tmtdew=14.06, humidity=38.75, cloud=0.0, wind=32.07, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:58:38', seeing=1.8, atlas_timestamp='2026-02-15T19:58:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:55:00')
2026-02-15T21:59:16.753 [DEBUG] [Thread-211929] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:59:16.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:59:16.848 [DEBUG] [Thread-211932] [transport.py] [_log()] starting thread (client mode): 0xa2d6e470
2026-02-15T21:59:16.848 [DEBUG] [Thread-211932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:59:16.862 [DEBUG] [Thread-211932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:59:16.862 [INFO] [Thread-211932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:59:16.869 [DEBUG] [Thread-211932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] client lang: <none>
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] server lang: <none>
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] kex follows: False
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] Compression: none
2026-02-15T21:59:16.870 [DEBUG] [Thread-211932] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:59:16.928 [DEBUG] [Thread-211932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:59:16.928 [DEBUG] [Thread-211932] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:59:16.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:59:16.929 [DEBUG] [Thread-211932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:59:16.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:59:16.984 [DEBUG] [Thread-211932] [transport.py] [_log()] userauth is OK
2026-02-15T21:59:16.985 [DEBUG] [Thread-211932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:59:16.985 [DEBUG] [Thread-211932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:59:16.985 [DEBUG] [Thread-211932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:59:16.985 [DEBUG] [Thread-211932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:59:17.003 [INFO] [Thread-211932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:59:17.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:59:17.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:59:17.827 [DEBUG] [Thread-211932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:59:17.827 [DEBUG] [Thread-211932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:59:17.875 [DEBUG] [Thread-211932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:59:17.876 [DEBUG] [Thread-211932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:59:17.885 [DEBUG] [Thread-211932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:59:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:59: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')
2026-02-15T21:59: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') -> 00000000
2026-02-15T21:59:17.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:59:17.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:59:17.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:59:17.922 [DEBUG] [Thread-211932] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:59:19.746 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:22.684 [DEBUG] [Thread-211934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:22.941 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:27.983 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:28.679 [DEBUG] [Thread-211935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:33.360 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:37.735 [DEBUG] [Thread-211936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:46.032 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:46.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T21:59:47.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T21:59:47.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T21:59:50.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 59, 13), 14.0, 38.81, 0.0, 29.94, 15.98, 0, 0, 0, 2, 0, 0),)
2026-02-15T21:59:50.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:59:13
2026-02-15T21:59:50.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T21:59:50.667 [DEBUG] [Thread-211937] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-15T21:59:50.667 [DEBUG] [Thread-211937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:59:50.688 [DEBUG] [Thread-211937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T21:59:50.689 [INFO] [Thread-211937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:50.692 [DEBUG] [Thread-211937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] client lang: <none>
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] server lang: <none>
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] kex follows: False
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] Compression: none
2026-02-15T21:59:50.693 [DEBUG] [Thread-211937] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:59:50.712 [DEBUG] [Thread-211937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:59:50.713 [DEBUG] [Thread-211937] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:59:50.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T21:59:50.714 [DEBUG] [Thread-211937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T21:59:50.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:59:50.716 [DEBUG] [Thread-211937] [transport.py] [_log()] userauth is OK
2026-02-15T21:59:50.716 [DEBUG] [Thread-211937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:59:50.717 [DEBUG] [Thread-211937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:59:50.717 [DEBUG] [Thread-211937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T21:59:50.717 [DEBUG] [Thread-211937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:59:50.741 [INFO] [Thread-211937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:59:50.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:59:51.513 [DEBUG] [Thread-211937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:59:51.513 [DEBUG] [Thread-211937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:59:51.513 [DEBUG] [Thread-211937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T21:59:51.554 [DEBUG] [Thread-211937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:59:51.554 [DEBUG] [Thread-211937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:59:51.558 [DEBUG] [Thread-211937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:59:51.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:59:51.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T21:59:51.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T21:59:51.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T21:59:51.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:59:51.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T21:59:51.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:59:51.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:59:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T21:59:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.832742 -999.00  +15.80  21.12     44   +3.70 1 1 1 1 1     0    0 10.24 -91.84 ZNESW 18.1 21.1 142.8 28.3 16.1 -25.0 16.0 -23.7 15.8 -22.6 16.1 -23.9
2026-02-15T21:59:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T21:59:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T21:59:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.832742
2026-02-15T21:59:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T21:59:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T21:59:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T21:59:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T21:59:51.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T21:59:51.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:59:13', tmtdew=14.0, humidity=38.81, cloud=0.0, wind=29.94, temperature=15.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:59:14', seeing=2.23, atlas_timestamp='2026-02-15T19:59:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:57:00')
2026-02-15T21:59:51.585 [DEBUG] [Thread-211937] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:59:51.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T21:59:51.681 [DEBUG] [Thread-211940] [transport.py] [_log()] starting thread (client mode): 0xa2d138b0
2026-02-15T21:59:51.681 [DEBUG] [Thread-211940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T21:59:51.696 [DEBUG] [Thread-211940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T21:59:51.696 [INFO] [Thread-211940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] client lang: <none>
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] server lang: <none>
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] kex follows: False
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T21:59:51.703 [DEBUG] [Thread-211940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T21:59:51.704 [DEBUG] [Thread-211940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T21:59:51.704 [DEBUG] [Thread-211940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T21:59:51.704 [DEBUG] [Thread-211940] [transport.py] [_log()] Compression: none
2026-02-15T21:59:51.704 [DEBUG] [Thread-211940] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T21:59:51.763 [DEBUG] [Thread-211940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T21:59:51.763 [DEBUG] [Thread-211940] [transport.py] [_log()] Switch to new keys ...
2026-02-15T21:59:51.763 [DEBUG] [Thread-211940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T21:59:51.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T21:59:51.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T21:59:51.820 [DEBUG] [Thread-211940] [transport.py] [_log()] userauth is OK
2026-02-15T21:59:51.820 [DEBUG] [Thread-211940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T21:59:51.820 [DEBUG] [Thread-211940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T21:59:51.820 [DEBUG] [Thread-211940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T21:59:51.820 [DEBUG] [Thread-211940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T21:59:51.834 [INFO] [Thread-211940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T21:59:51.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T21:59:51.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T21:59:52.660 [DEBUG] [Thread-211940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T21:59:52.660 [DEBUG] [Thread-211940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T21:59:52.708 [DEBUG] [Thread-211940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T21:59:52.709 [DEBUG] [Thread-211940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T21:59:52.718 [DEBUG] [Thread-211940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T21:59:52.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T21:59:52.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T21:59:52.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T21:59:52.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T21:59:52.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T21:59:52.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T21:59:52.754 [DEBUG] [Thread-211940] [transport.py] [_log()] EOF in transport thread
2026-02-15T21:59:52.768 [DEBUG] [Thread-211942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:52.801 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T21:59:57.174 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:07.813 [DEBUG] [Thread-211943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:16.632 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:18.288 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:21.013 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:22.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:00:22.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:00:22.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:00:22.844 [DEBUG] [Thread-211944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 21, 59, 49), 13.85, 39.44, 0.0, 36.21, 15.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:00:24.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 21:59:49
2026-02-15T22:00:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:00:25.191 [DEBUG] [Thread-211945] [transport.py] [_log()] starting thread (client mode): 0xa57b2bf0
2026-02-15T22:00:25.191 [DEBUG] [Thread-211945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:00:25.212 [DEBUG] [Thread-211945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:00:25.213 [INFO] [Thread-211945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] client lang: <none>
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] server lang: <none>
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] kex follows: False
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] Compression: none
2026-02-15T22:00:25.215 [DEBUG] [Thread-211945] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:00:25.230 [DEBUG] [Thread-211945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:00:25.231 [DEBUG] [Thread-211945] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:00:25.231 [DEBUG] [Thread-211945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:00:25.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:00:25.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:00:25.232 [DEBUG] [Thread-211945] [transport.py] [_log()] userauth is OK
2026-02-15T22:00:25.232 [DEBUG] [Thread-211945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:00:25.232 [DEBUG] [Thread-211945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:00:25.232 [DEBUG] [Thread-211945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:00:25.232 [DEBUG] [Thread-211945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:00:25.258 [INFO] [Thread-211945] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:00:25.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:00:25.884 [DEBUG] [Thread-211945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:00:25.884 [DEBUG] [Thread-211945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:00:25.884 [DEBUG] [Thread-211945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:00:25.925 [DEBUG] [Thread-211945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:00:25.925 [DEBUG] [Thread-211945] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:00:25.927 [DEBUG] [Thread-211945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:00:25.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:00:25.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:00:25.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:00:25.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:00:25.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:00:25.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:00:25.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.833089 -999.00  +15.80  19.54     44   +3.80 1 1 1 1 1     0    0 9.86 -93.48 ZNESW 24.3 19.5 147.2 32.7 16.1 -24.8 16.0 -23.8 15.8 -22.5 16.0 -23.9
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.833089
2026-02-15T22:00:25.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:00:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:00:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:00:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:00:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:00:25.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T21:59:49', tmtdew=13.85, humidity=39.44, cloud=0.0, wind=36.21, temperature=15.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T21:59:50', seeing=2.01, atlas_timestamp='2026-02-15T19:59:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021750000000000824, -0.044749999999998735, 0.004250000000000753, -0.017500000000001847, 0.02999999999999936, -0.03074999999999939, -0.015000000000000568, 0.00575000000000081, 0.028499999999999304, 0.0030000000000001137, -0.008749999999999147, 0.011000000000001009, 0.07399999999999984, 0.03824999999999967, -0.036000000000001364, 0.0039999999999995595, 0.014749999999999375, 0.054499999999999105, -0.04300000000000104, 0.003249999999999531, 0.07399999999999807, 0.03474999999999895, -0.013749999999999929, -0.0337499999999995, 0.03999999999999915, 0.06049999999999933, 0.0007500000000000284, 0.0035000000000007248, 0.0730000000000004, 0.07150000000000034, 0.009000000000000341, -0.009999999999999787, 0.038750000000000284], zp_timestamp='2026-02-15T19:57:00')
2026-02-15T22:00:25.948 [DEBUG] [Thread-211945] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:00:26.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:00:27.775 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:28.756 [DEBUG] [Thread-211948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:32.145 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:37.876 [DEBUG] [Thread-211949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:46.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:46.249 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:00:52.927 [DEBUG] [Thread-211950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:07.961 [DEBUG] [Thread-211951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:22.998 [DEBUG] [Thread-211952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:28.820 [DEBUG] [Thread-211953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:31.056 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:34.109 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:38.032 [DEBUG] [Thread-211954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:46.452 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:46.453 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:52.619 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:01:53.067 [DEBUG] [Thread-211955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:08.100 [DEBUG] [Thread-211956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:23.134 [DEBUG] [Thread-211957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:28.871 [DEBUG] [Thread-211958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:38.173 [DEBUG] [Thread-211959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:40.322 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T22:02:46.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:46.653 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:02:53.208 [DEBUG] [Thread-211960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:08.244 [DEBUG] [Thread-211961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:10.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:03:10.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:03:10.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:03:12.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 2, 46), 13.59, 39.72, 0.0, 29.5, 15.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:03:12.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:02:46
2026-02-15T22:03:12.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:03:12.692 [DEBUG] [Thread-211962] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc40
2026-02-15T22:03:12.692 [DEBUG] [Thread-211962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:03:12.712 [DEBUG] [Thread-211962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:03:12.712 [INFO] [Thread-211962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:03:12.715 [DEBUG] [Thread-211962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] client lang: <none>
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] server lang: <none>
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] kex follows: False
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] Compression: none
2026-02-15T22:03:12.716 [DEBUG] [Thread-211962] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:03:12.734 [DEBUG] [Thread-211962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:03:12.735 [DEBUG] [Thread-211962] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:03:12.735 [DEBUG] [Thread-211962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:03:12.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:03:12.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:03:12.778 [DEBUG] [Thread-211962] [transport.py] [_log()] userauth is OK
2026-02-15T22:03:12.778 [DEBUG] [Thread-211962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:03:12.779 [DEBUG] [Thread-211962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:03:12.779 [DEBUG] [Thread-211962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:03:12.779 [DEBUG] [Thread-211962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:03:12.799 [INFO] [Thread-211962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:03:12.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:03:13.410 [DEBUG] [Thread-211962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:03:13.411 [DEBUG] [Thread-211962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:03:13.411 [DEBUG] [Thread-211962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:03:13.451 [DEBUG] [Thread-211962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:03:13.451 [DEBUG] [Thread-211962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:03:13.455 [DEBUG] [Thread-211962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:03:13.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:03:13.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:03:13.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:03:13.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:03:13.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:03:13.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:03:13.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:03:13.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:03:13.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:03:13.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.835172 -999.00  +15.80  19.13     44   +3.80 1 1 1 1 1     0    0 10.36 -73.72 ZNESW 20.1 19.1 157.4 32.0 16.0 -24.8 15.9 -23.7 15.7 -22.7 16.0 -23.9
2026-02-15T22:03:13.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:03:13.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:03:13.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.835172
2026-02-15T22:03:13.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:03:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:03:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:03:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:03:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:03:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:02:46', tmtdew=13.59, humidity=39.72, cloud=0.0, wind=29.5, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:02:47', seeing=2.72, atlas_timestamp='2026-02-15T20:02:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.02474999999999916, 0.011750000000001037, -0.03049999999999997, 0.015499999999999403, 0.01025000000000098, 0.0039999999999995595, -0.014749999999999375, 0.04849999999999888, -0.009999999999999787, -0.008750000000000924, -0.006000000000000227, 0.06899999999999906, 0.03774999999999906, -0.03750000000000142, 0.023999999999999133, 0.04124999999999979, 0.04049999999999976, -0.0600000000000005, -0.008250000000000313, 0.04499999999999815, 0.044749999999998735, -0.03474999999999895, 0.0007500000000000284, 0.027999999999998693, 0.04899999999999949, 0.015750000000000597, -0.010999999999999233, 0.10400000000000098, 0.012000000000000455, 0.017000000000001236, 0.018000000000000682, 0.03674999999999784], zp_timestamp='2026-02-15T20:01:00')
2026-02-15T22:03:13.481 [DEBUG] [Thread-211962] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:03:13.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:03:13.576 [DEBUG] [Thread-211965] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-15T22:03:13.577 [DEBUG] [Thread-211965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:03:13.592 [DEBUG] [Thread-211965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:03:13.592 [INFO] [Thread-211965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:13.600 [DEBUG] [Thread-211965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] client lang: <none>
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] server lang: <none>
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] kex follows: False
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] Compression: none
2026-02-15T22:03:13.601 [DEBUG] [Thread-211965] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:03:13.657 [DEBUG] [Thread-211965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:03:13.657 [DEBUG] [Thread-211965] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:03:13.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:03:13.659 [DEBUG] [Thread-211965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:03:13.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:03:13.713 [DEBUG] [Thread-211965] [transport.py] [_log()] userauth is OK
2026-02-15T22:03:13.714 [DEBUG] [Thread-211965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:03:13.714 [DEBUG] [Thread-211965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:03:13.714 [DEBUG] [Thread-211965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:03:13.714 [DEBUG] [Thread-211965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:03:13.733 [INFO] [Thread-211965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:03:13.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:03:13.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:03:14.590 [DEBUG] [Thread-211965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:03:14.591 [DEBUG] [Thread-211965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:03:14.638 [DEBUG] [Thread-211965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:03:14.639 [DEBUG] [Thread-211965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:03:14.648 [DEBUG] [Thread-211965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:03:14.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:03:14.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:03:14.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:03:14.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:03:14.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:03:14.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:03:14.685 [DEBUG] [Thread-211965] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:03:23.280 [DEBUG] [Thread-211967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:26.343 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:28.929 [DEBUG] [Thread-211968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:38.342 [DEBUG] [Thread-211969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:44.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:03:44.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:03:44.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:03:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 3, 22), 13.6, 39.72, 0.0, 27.03, 15.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:03:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:03:22
2026-02-15T22:03:46.868 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:46.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:03:47.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:03:47.320 [DEBUG] [Thread-211970] [transport.py] [_log()] starting thread (client mode): 0xa5770d30
2026-02-15T22:03:47.320 [DEBUG] [Thread-211970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:03:47.337 [DEBUG] [Thread-211970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:03:47.337 [INFO] [Thread-211970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:03:47.340 [DEBUG] [Thread-211970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:03:47.340 [DEBUG] [Thread-211970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] client lang: <none>
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] server lang: <none>
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] kex follows: False
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] Compression: none
2026-02-15T22:03:47.341 [DEBUG] [Thread-211970] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:03:47.355 [DEBUG] [Thread-211970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:03:47.355 [DEBUG] [Thread-211970] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:03:47.356 [DEBUG] [Thread-211970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:03:47.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:03:47.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:03:47.357 [DEBUG] [Thread-211970] [transport.py] [_log()] userauth is OK
2026-02-15T22:03:47.357 [DEBUG] [Thread-211970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:03:47.357 [DEBUG] [Thread-211970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:03:47.357 [DEBUG] [Thread-211970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:03:47.357 [DEBUG] [Thread-211970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:03:47.366 [INFO] [Thread-211970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:03:47.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:03:47.989 [DEBUG] [Thread-211970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:03:47.989 [DEBUG] [Thread-211970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:03:47.990 [DEBUG] [Thread-211970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:03:48.030 [DEBUG] [Thread-211970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:03:48.030 [DEBUG] [Thread-211970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:03:48.034 [DEBUG] [Thread-211970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:03:48.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:03:48.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:03:48.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:03:48.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:03:48.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:03:48.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:03:48.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:03:48.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:03:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:03:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.835867 -999.00  +15.70  18.80     45   +3.90 1 1 1 1 1     0    0 10.48 -64.44 ZNESW 24.7 18.8 140.8 33.8 16.0 -24.7 15.9 -23.7 15.7 -22.6 16.0 -23.8
2026-02-15T22:03:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:03:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:03:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.835867
2026-02-15T22:03:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:03:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:03:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:03:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:03:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:03:48.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:03:22', tmtdew=13.6, humidity=39.72, cloud=0.0, wind=27.03, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:03:22', seeing=2.48, atlas_timestamp='2026-02-15T20:03:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.02474999999999916, 0.011750000000001037, -0.03049999999999997, 0.015499999999999403, 0.01025000000000098, 0.0039999999999995595, -0.014749999999999375, 0.04849999999999888, -0.009999999999999787, -0.008750000000000924, -0.006000000000000227, 0.06899999999999906, 0.03774999999999906, -0.03750000000000142, 0.023999999999999133, 0.04124999999999979, 0.04049999999999976, -0.0600000000000005, -0.008250000000000313, 0.04499999999999815, 0.044749999999998735, -0.03474999999999895, 0.0007500000000000284, 0.027999999999998693, 0.04899999999999949, 0.015750000000000597, -0.010999999999999233, 0.10400000000000098, 0.012000000000000455, 0.017000000000001236, 0.018000000000000682, 0.03674999999999784], zp_timestamp='2026-02-15T20:01:00')
2026-02-15T22:03:48.059 [DEBUG] [Thread-211970] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:03:48.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:03:48.155 [DEBUG] [Thread-211973] [transport.py] [_log()] starting thread (client mode): 0xa2d3ca00
2026-02-15T22:03:48.155 [DEBUG] [Thread-211973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:03:48.169 [DEBUG] [Thread-211973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:03:48.169 [INFO] [Thread-211973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:03:48.177 [DEBUG] [Thread-211973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] client lang: <none>
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] server lang: <none>
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] kex follows: False
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] Compression: none
2026-02-15T22:03:48.178 [DEBUG] [Thread-211973] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:03:48.238 [DEBUG] [Thread-211973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:03:48.238 [DEBUG] [Thread-211973] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:03:48.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:03:48.239 [DEBUG] [Thread-211973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:03:48.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:03:48.293 [DEBUG] [Thread-211973] [transport.py] [_log()] userauth is OK
2026-02-15T22:03:48.294 [DEBUG] [Thread-211973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:03:48.294 [DEBUG] [Thread-211973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:03:48.294 [DEBUG] [Thread-211973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:03:48.294 [DEBUG] [Thread-211973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:03:48.312 [INFO] [Thread-211973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:03:48.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:03:48.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:03:49.200 [DEBUG] [Thread-211973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:03:49.200 [DEBUG] [Thread-211973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:03:49.247 [DEBUG] [Thread-211973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:03:49.247 [DEBUG] [Thread-211973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:03:49.257 [DEBUG] [Thread-211973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:03:49.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:03:49.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:03:49.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:03:49.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:03:49.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:03:49.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:03:49.294 [DEBUG] [Thread-211973] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:03:53.380 [DEBUG] [Thread-211975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:08.433 [DEBUG] [Thread-211976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:04:19.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:04:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:04:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 3, 57), 13.66, 39.67, 0.0, 28.64, 15.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:04:21.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:03:57
2026-02-15T22:04:21.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:04:21.772 [DEBUG] [Thread-211977] [transport.py] [_log()] starting thread (client mode): 0xa5770b80
2026-02-15T22:04:21.772 [DEBUG] [Thread-211977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:04:21.786 [DEBUG] [Thread-211977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:04:21.786 [INFO] [Thread-211977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:21.788 [DEBUG] [Thread-211977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] client lang: <none>
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] server lang: <none>
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] kex follows: False
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] Compression: none
2026-02-15T22:04:21.789 [DEBUG] [Thread-211977] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:04:21.802 [DEBUG] [Thread-211977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:04:21.803 [DEBUG] [Thread-211977] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:04:21.803 [DEBUG] [Thread-211977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:04:21.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:04:21.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:04:21.805 [DEBUG] [Thread-211977] [transport.py] [_log()] userauth is OK
2026-02-15T22:04:21.805 [DEBUG] [Thread-211977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:04:21.805 [DEBUG] [Thread-211977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:04:21.805 [DEBUG] [Thread-211977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:04:21.805 [DEBUG] [Thread-211977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:04:21.828 [INFO] [Thread-211977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:04:21.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:04:22.473 [DEBUG] [Thread-211977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:04:22.474 [DEBUG] [Thread-211977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:04:22.474 [DEBUG] [Thread-211977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:04:22.514 [DEBUG] [Thread-211977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:04:22.514 [DEBUG] [Thread-211977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:04:22.517 [DEBUG] [Thread-211977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:04:22.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:04:22.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:04:22.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:04:22.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:04:22.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:04:22.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:04:22.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:04:22.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:04:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:04:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.836214 -999.00  +15.80  23.85     45   +3.90 1 1 1 1 1     0    0 10.65 -63.21 ZNESW 26.8 23.9 137.0 30.6 16.0 -24.8 15.9 -23.6 15.7 -22.6 16.0 -23.9
2026-02-15T22:04:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:04:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:04:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.836214
2026-02-15T22:04:22.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:04:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:04:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:04:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:04:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:04:22.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:03:57', tmtdew=13.66, humidity=39.67, cloud=0.0, wind=28.64, temperature=15.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:03:57', seeing=2.14, atlas_timestamp='2026-02-15T20:04:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.02474999999999916, 0.011750000000001037, -0.03049999999999997, 0.015499999999999403, 0.01025000000000098, 0.0039999999999995595, -0.014749999999999375, 0.04849999999999888, -0.009999999999999787, -0.008750000000000924, -0.006000000000000227, 0.06899999999999906, 0.03774999999999906, -0.03750000000000142, 0.023999999999999133, 0.04124999999999979, 0.04049999999999976, -0.0600000000000005, -0.008250000000000313, 0.04499999999999815, 0.044749999999998735, -0.03474999999999895, 0.0007500000000000284, 0.027999999999998693, 0.04899999999999949, 0.015750000000000597, -0.010999999999999233, 0.10400000000000098, 0.012000000000000455, 0.017000000000001236, 0.018000000000000682, 0.03674999999999784], zp_timestamp='2026-02-15T20:01:00')
2026-02-15T22:04:22.544 [DEBUG] [Thread-211977] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:04:22.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:04:22.640 [DEBUG] [Thread-211980] [transport.py] [_log()] starting thread (client mode): 0xa57c05e0
2026-02-15T22:04:22.640 [DEBUG] [Thread-211980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:04:22.654 [DEBUG] [Thread-211980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:04:22.654 [INFO] [Thread-211980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:04:22.662 [DEBUG] [Thread-211980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:04:22.662 [DEBUG] [Thread-211980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:04:22.662 [DEBUG] [Thread-211980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] client lang: <none>
2026-02-15T22:04:22.663 [DEBUG] [Thread-211980] [transport.py] [_log()] server lang: <none>
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] kex follows: False
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] Compression: none
2026-02-15T22:04:22.664 [DEBUG] [Thread-211980] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:04:22.726 [DEBUG] [Thread-211980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:04:22.727 [DEBUG] [Thread-211980] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:04:22.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:04:22.728 [DEBUG] [Thread-211980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:04:22.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:04:22.785 [DEBUG] [Thread-211980] [transport.py] [_log()] userauth is OK
2026-02-15T22:04:22.785 [DEBUG] [Thread-211980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:04:22.785 [DEBUG] [Thread-211980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:04:22.786 [DEBUG] [Thread-211980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:04:22.786 [DEBUG] [Thread-211980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:04:22.809 [INFO] [Thread-211980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:04:22.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:04:22.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:04:23.472 [DEBUG] [Thread-211982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:23.636 [DEBUG] [Thread-211980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:04:23.636 [DEBUG] [Thread-211980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:04:23.684 [DEBUG] [Thread-211980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:04:23.685 [DEBUG] [Thread-211980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:04:23.694 [DEBUG] [Thread-211980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:04:23.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:04:23.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:04:23.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:04:23.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:04:23.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:04:23.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:04:23.733 [DEBUG] [Thread-211980] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:04:28.997 [DEBUG] [Thread-211983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:38.523 [DEBUG] [Thread-211984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:47.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:47.071 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:53.561 [DEBUG] [Thread-211985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:04:53.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:04:53.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:04:53.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:04:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 4, 33), 13.76, 39.51, 0.0, 32.43, 16.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:04:55.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:04:33
2026-02-15T22:04:55.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:04:56.121 [DEBUG] [Thread-211986] [transport.py] [_log()] starting thread (client mode): 0xa57e04c0
2026-02-15T22:04:56.121 [DEBUG] [Thread-211986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:04:56.135 [DEBUG] [Thread-211986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:04:56.135 [INFO] [Thread-211986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:04:56.136 [DEBUG] [Thread-211986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:04:56.136 [DEBUG] [Thread-211986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:04:56.136 [DEBUG] [Thread-211986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:04:56.136 [DEBUG] [Thread-211986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] client lang: <none>
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] server lang: <none>
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] kex follows: False
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] Compression: none
2026-02-15T22:04:56.137 [DEBUG] [Thread-211986] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:04:56.149 [DEBUG] [Thread-211986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:04:56.149 [DEBUG] [Thread-211986] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:04:56.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:04:56.150 [DEBUG] [Thread-211986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:04:56.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:04:56.152 [DEBUG] [Thread-211986] [transport.py] [_log()] userauth is OK
2026-02-15T22:04:56.152 [DEBUG] [Thread-211986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:04:56.152 [DEBUG] [Thread-211986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:04:56.152 [DEBUG] [Thread-211986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:04:56.153 [DEBUG] [Thread-211986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:04:56.184 [INFO] [Thread-211986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:04:56.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:04:56.752 [DEBUG] [Thread-211986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:04:56.753 [DEBUG] [Thread-211986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:04:56.753 [DEBUG] [Thread-211986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:04:56.794 [DEBUG] [Thread-211986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:04:56.794 [DEBUG] [Thread-211986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:04:56.797 [DEBUG] [Thread-211986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:04:56.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:04:56.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:04:56.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:04:56.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:04:56.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:04:56.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:04:56.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:04:56.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:04:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:04:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.836561 -999.00  +15.80  20.84     45   +3.90 1 1 1 1 1     0    0 10.64 -64.64 ZNESW 17.2 20.8 143.6 30.9 16.0 -24.8 15.9 -23.6 15.7 -22.6 16.0 -23.7
2026-02-15T22:04:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:04:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:04:56.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.836561
2026-02-15T22:04:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:04:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:04:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:04:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:04:56.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:04:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:04:33', tmtdew=13.76, humidity=39.51, cloud=0.0, wind=32.43, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:04:33', seeing=1.79, atlas_timestamp='2026-02-15T20:04:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.019249999999999545, -0.02474999999999916, 0.011750000000001037, -0.03049999999999997, 0.015499999999999403, 0.01025000000000098, 0.0039999999999995595, -0.014749999999999375, 0.04849999999999888, -0.009999999999999787, -0.008750000000000924, -0.006000000000000227, 0.06899999999999906, 0.03774999999999906, -0.03750000000000142, 0.023999999999999133, 0.04124999999999979, 0.04049999999999976, -0.0600000000000005, -0.008250000000000313, 0.04499999999999815, 0.044749999999998735, -0.03474999999999895, 0.0007500000000000284, 0.027999999999998693, 0.04899999999999949, 0.015750000000000597, -0.010999999999999233, 0.10400000000000098, 0.012000000000000455, 0.017000000000001236, 0.018000000000000682, 0.03674999999999784], zp_timestamp='2026-02-15T20:01:00')
2026-02-15T22:04:56.818 [DEBUG] [Thread-211986] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:04:56.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:04:56.914 [DEBUG] [Thread-211989] [transport.py] [_log()] starting thread (client mode): 0xa57e1f00
2026-02-15T22:04:56.914 [DEBUG] [Thread-211989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:04:56.928 [DEBUG] [Thread-211989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:04:56.929 [INFO] [Thread-211989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:56.936 [DEBUG] [Thread-211989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] client lang: <none>
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] server lang: <none>
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] kex follows: False
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] Compression: none
2026-02-15T22:04:56.937 [DEBUG] [Thread-211989] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:04:56.993 [DEBUG] [Thread-211989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:04:56.994 [DEBUG] [Thread-211989] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:04:56.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:04:56.995 [DEBUG] [Thread-211989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:04:56.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:04:57.049 [DEBUG] [Thread-211989] [transport.py] [_log()] userauth is OK
2026-02-15T22:04:57.050 [DEBUG] [Thread-211989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:04:57.050 [DEBUG] [Thread-211989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:04:57.050 [DEBUG] [Thread-211989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:04:57.050 [DEBUG] [Thread-211989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:04:57.068 [INFO] [Thread-211989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:04:57.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:04:57.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:04:57.957 [DEBUG] [Thread-211989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:04:57.958 [DEBUG] [Thread-211989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:04:58.005 [DEBUG] [Thread-211989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:04:58.005 [DEBUG] [Thread-211989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:04:58.014 [DEBUG] [Thread-211989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:04:58.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:04:58.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:04:58.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:04:58.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:04:58.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:04:58.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:04:58.053 [DEBUG] [Thread-211989] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:04:58.252 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:00.575 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:03.145 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:06.190 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:08.601 [DEBUG] [Thread-211991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:12.557 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:23.654 [DEBUG] [Thread-211992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:28.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:05:28.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:05:28.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:05:29.066 [DEBUG] [Thread-211993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:30.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 5, 8), 13.6, 39.71, 0.0, 27.42, 15.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:05:30.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:05:08
2026-02-15T22:05:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:05:31.030 [DEBUG] [Thread-211994] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-15T22:05:31.031 [DEBUG] [Thread-211994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:05:31.050 [DEBUG] [Thread-211994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:05:31.050 [INFO] [Thread-211994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:05:31.053 [DEBUG] [Thread-211994] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] client lang: <none>
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] server lang: <none>
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] kex follows: False
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] Compression: none
2026-02-15T22:05:31.054 [DEBUG] [Thread-211994] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:05:31.068 [DEBUG] [Thread-211994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:05:31.069 [DEBUG] [Thread-211994] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:05:31.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:05:31.070 [DEBUG] [Thread-211994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:05:31.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:05:31.072 [DEBUG] [Thread-211994] [transport.py] [_log()] userauth is OK
2026-02-15T22:05:31.072 [DEBUG] [Thread-211994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:05:31.073 [DEBUG] [Thread-211994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:05:31.073 [DEBUG] [Thread-211994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:05:31.073 [DEBUG] [Thread-211994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:05:31.096 [INFO] [Thread-211994] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:05:31.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:05:31.674 [DEBUG] [Thread-211994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:05:31.675 [DEBUG] [Thread-211994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:05:31.675 [DEBUG] [Thread-211994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:05:31.715 [DEBUG] [Thread-211994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:05:31.716 [DEBUG] [Thread-211994] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:05:31.718 [DEBUG] [Thread-211994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:05:31.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:05:31.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:05:31.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:05:31.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:05:31.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:05:31.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:05:31.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:05:31.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:05:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:05:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.836908 -999.00  +15.70  25.11     45   +4.00 1 1 1 1 1     0    0 10.71 -70.40 ZNESW 26.0 25.1 167.8 31.9 16.0 -24.8 15.9 -23.6 15.7 -22.6 16.0 -23.7
2026-02-15T22:05:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:05:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:05:31.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.836908
2026-02-15T22:05:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:05:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:05:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:05:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:05:31.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:05:31.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:05:08', tmtdew=13.6, humidity=39.71, cloud=0.0, wind=27.42, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:05:09', seeing=1.87, atlas_timestamp='2026-02-15T20:05:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:03:00')
2026-02-15T22:05:31.746 [DEBUG] [Thread-211994] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:05:31.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:05:31.849 [DEBUG] [Thread-211997] [transport.py] [_log()] starting thread (client mode): 0xa5743ca0
2026-02-15T22:05:31.849 [DEBUG] [Thread-211997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:05:31.864 [DEBUG] [Thread-211997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:05:31.864 [INFO] [Thread-211997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:05:31.872 [DEBUG] [Thread-211997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:05:31.872 [DEBUG] [Thread-211997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:05:31.872 [DEBUG] [Thread-211997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] client lang: <none>
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] server lang: <none>
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] kex follows: False
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:05:31.873 [DEBUG] [Thread-211997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:05:31.874 [DEBUG] [Thread-211997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:05:31.874 [DEBUG] [Thread-211997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:05:31.874 [DEBUG] [Thread-211997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:05:31.874 [DEBUG] [Thread-211997] [transport.py] [_log()] Compression: none
2026-02-15T22:05:31.874 [DEBUG] [Thread-211997] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:05:31.932 [DEBUG] [Thread-211997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:05:31.933 [DEBUG] [Thread-211997] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:05:31.933 [DEBUG] [Thread-211997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:05:31.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:05:31.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:05:31.990 [DEBUG] [Thread-211997] [transport.py] [_log()] userauth is OK
2026-02-15T22:05:31.990 [DEBUG] [Thread-211997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:05:31.990 [DEBUG] [Thread-211997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:05:31.991 [DEBUG] [Thread-211997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:05:31.991 [DEBUG] [Thread-211997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:05:32.014 [INFO] [Thread-211997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:05:32.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:05:32.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:05:32.839 [DEBUG] [Thread-211997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:05:32.840 [DEBUG] [Thread-211997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:05:32.888 [DEBUG] [Thread-211997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:05:32.888 [DEBUG] [Thread-211997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:05:32.896 [DEBUG] [Thread-211997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:05:32.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:05:32.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:05:32.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:05:32.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:05:32.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:05:32.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:05:32.927 [DEBUG] [Thread-211997] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:05:38.690 [DEBUG] [Thread-211999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:47.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:47.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:05:53.746 [DEBUG] [Thread-212000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:02.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:06:02.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:06:02.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-02-15T22:06:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 5, 44), 13.49, 40.36, 0.0, 33.63, 15.78, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:06:04.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:05:44
2026-02-15T22:06:05.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:06:05.278 [DEBUG] [Thread-212001] [transport.py] [_log()] starting thread (client mode): 0xa57e26e0
2026-02-15T22:06:05.278 [DEBUG] [Thread-212001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:06:05.289 [DEBUG] [Thread-212001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:06:05.290 [INFO] [Thread-212001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:06:05.292 [DEBUG] [Thread-212001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:06:05.292 [DEBUG] [Thread-212001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:06:05.292 [DEBUG] [Thread-212001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] client lang: <none>
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] server lang: <none>
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] kex follows: False
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] Compression: none
2026-02-15T22:06:05.293 [DEBUG] [Thread-212001] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:06:05.301 [DEBUG] [Thread-212001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:06:05.302 [DEBUG] [Thread-212001] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:06:05.302 [DEBUG] [Thread-212001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:06:05.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:06:05.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:06:05.303 [DEBUG] [Thread-212001] [transport.py] [_log()] userauth is OK
2026-02-15T22:06:05.303 [DEBUG] [Thread-212001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:06:05.303 [DEBUG] [Thread-212001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:06:05.303 [DEBUG] [Thread-212001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:06:05.303 [DEBUG] [Thread-212001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:06:05.320 [INFO] [Thread-212001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:06:05.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:06:05.921 [DEBUG] [Thread-212001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:06:05.921 [DEBUG] [Thread-212001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:06:05.922 [DEBUG] [Thread-212001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:06:05.962 [DEBUG] [Thread-212001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:06:05.963 [DEBUG] [Thread-212001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:06:05.966 [DEBUG] [Thread-212001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:06:05.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:06:05.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:06:05.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:06:05.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:06:05.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:06:05.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:06:05.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:06:05.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:06:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:06:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.837256 -999.00  +15.70  21.82     45   +3.90 1 1 1 1 1     0    0 10.34 -73.96 ZNESW 16.4 21.8 145.0 33.6 16.0 -24.8 15.9 -23.7 15.7 -22.6 16.0 -23.9
2026-02-15T22:06:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:06:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:06:05.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.837256
2026-02-15T22:06:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:06:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:06:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:06:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:06:05.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:06:05.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:05:44', tmtdew=13.49, humidity=40.36, cloud=0.0, wind=33.63, temperature=15.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:05:44', seeing=1.54, atlas_timestamp='2026-02-15T20:05:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:03:00')
2026-02-15T22:06:05.985 [DEBUG] [Thread-212001] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:06:06.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:06:06.090 [DEBUG] [Thread-212004] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-15T22:06:06.090 [DEBUG] [Thread-212004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:06:06.105 [DEBUG] [Thread-212004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:06:06.105 [INFO] [Thread-212004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] client lang: <none>
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] server lang: <none>
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] kex follows: False
2026-02-15T22:06:06.113 [DEBUG] [Thread-212004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:06:06.114 [DEBUG] [Thread-212004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:06:06.114 [DEBUG] [Thread-212004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:06:06.114 [DEBUG] [Thread-212004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:06:06.114 [DEBUG] [Thread-212004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:06:06.114 [DEBUG] [Thread-212004] [transport.py] [_log()] Compression: none
2026-02-15T22:06:06.114 [DEBUG] [Thread-212004] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:06:06.171 [DEBUG] [Thread-212004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:06:06.172 [DEBUG] [Thread-212004] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:06:06.172 [DEBUG] [Thread-212004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:06:06.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:06:06.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:06:06.233 [DEBUG] [Thread-212004] [transport.py] [_log()] userauth is OK
2026-02-15T22:06:06.233 [DEBUG] [Thread-212004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:06:06.233 [DEBUG] [Thread-212004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:06:06.233 [DEBUG] [Thread-212004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:06:06.233 [DEBUG] [Thread-212004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:06:06.259 [INFO] [Thread-212004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:06:06.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:06:06.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:06:07.110 [DEBUG] [Thread-212004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:06:07.110 [DEBUG] [Thread-212004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:06:07.158 [DEBUG] [Thread-212004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:06:07.159 [DEBUG] [Thread-212004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:06:07.168 [DEBUG] [Thread-212004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:06:07.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:06:07.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:06:07.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:06:07.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:06:07.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:06:07.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:06:07.205 [DEBUG] [Thread-212004] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:06:08.794 [DEBUG] [Thread-212006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:23.854 [DEBUG] [Thread-212007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:29.137 [DEBUG] [Thread-212008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:34.466 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:37.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:06:37.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:06:37.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:06:38.887 [DEBUG] [Thread-212009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 6, 19), 13.45, 40.49, 0.0, 32.61, 15.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:06:39.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:06:19
2026-02-15T22:06:39.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:06:39.815 [DEBUG] [Thread-212010] [transport.py] [_log()] starting thread (client mode): 0xa5772860
2026-02-15T22:06:39.815 [DEBUG] [Thread-212010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:06:39.834 [DEBUG] [Thread-212010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:06:39.834 [INFO] [Thread-212010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] client lang: <none>
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] server lang: <none>
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] kex follows: False
2026-02-15T22:06:39.837 [DEBUG] [Thread-212010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:06:39.838 [DEBUG] [Thread-212010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:06:39.838 [DEBUG] [Thread-212010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:06:39.838 [DEBUG] [Thread-212010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:06:39.838 [DEBUG] [Thread-212010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:06:39.838 [DEBUG] [Thread-212010] [transport.py] [_log()] Compression: none
2026-02-15T22:06:39.838 [DEBUG] [Thread-212010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:06:39.854 [DEBUG] [Thread-212010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:06:39.854 [DEBUG] [Thread-212010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:06:39.855 [DEBUG] [Thread-212010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:06:39.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:06:39.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:06:39.857 [DEBUG] [Thread-212010] [transport.py] [_log()] userauth is OK
2026-02-15T22:06:39.857 [DEBUG] [Thread-212010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:06:39.857 [DEBUG] [Thread-212010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:06:39.857 [DEBUG] [Thread-212010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:06:39.857 [DEBUG] [Thread-212010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:06:39.889 [INFO] [Thread-212010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:06:39.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:06:40.455 [DEBUG] [Thread-212010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:06:40.455 [DEBUG] [Thread-212010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:06:40.455 [DEBUG] [Thread-212010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:06:40.496 [DEBUG] [Thread-212010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:06:40.496 [DEBUG] [Thread-212010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:06:40.498 [DEBUG] [Thread-212010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:06:40.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:06:40.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:06:40.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:06:40.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:06:40.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:06:40.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:06:40.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:06:40.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:06:40.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:06:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.837603 -999.00  +15.70  22.28     45   +4.00 1 1 1 1 1     0    0 10.33 -74.47 ZNESW 22.0 22.3 140.0 28.8 16.0 -24.8 15.9 -23.7 15.7 -22.5 16.0 -23.9
2026-02-15T22:06:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:06:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:06:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.837603
2026-02-15T22:06:40.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:06:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:06:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:06:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:06:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:06:40.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:06:19', tmtdew=13.45, humidity=40.49, cloud=0.0, wind=32.61, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:06:19', seeing=1.56, atlas_timestamp='2026-02-15T20:06:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:03:00')
2026-02-15T22:06:40.516 [DEBUG] [Thread-212010] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:06:40.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:06:40.612 [DEBUG] [Thread-212013] [transport.py] [_log()] starting thread (client mode): 0xa57e0d90
2026-02-15T22:06:40.613 [DEBUG] [Thread-212013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:06:40.628 [DEBUG] [Thread-212013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:06:40.628 [INFO] [Thread-212013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:06:40.636 [DEBUG] [Thread-212013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:06:40.636 [DEBUG] [Thread-212013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:06:40.636 [DEBUG] [Thread-212013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:06:40.636 [DEBUG] [Thread-212013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] client lang: <none>
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] server lang: <none>
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] kex follows: False
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] Compression: none
2026-02-15T22:06:40.637 [DEBUG] [Thread-212013] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:06:40.694 [DEBUG] [Thread-212013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:06:40.694 [DEBUG] [Thread-212013] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:06:40.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:06:40.696 [DEBUG] [Thread-212013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:06:40.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:06:40.750 [DEBUG] [Thread-212013] [transport.py] [_log()] userauth is OK
2026-02-15T22:06:40.750 [DEBUG] [Thread-212013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:06:40.751 [DEBUG] [Thread-212013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:06:40.751 [DEBUG] [Thread-212013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:06:40.751 [DEBUG] [Thread-212013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:06:40.769 [INFO] [Thread-212013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:06:40.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:06:40.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:06:41.613 [DEBUG] [Thread-212013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:06:41.613 [DEBUG] [Thread-212013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:06:41.661 [DEBUG] [Thread-212013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:06:41.661 [DEBUG] [Thread-212013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:06:41.670 [DEBUG] [Thread-212013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:06:41.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:06:41.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:06:41.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:06:41.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:06:41.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:06:41.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:06:41.704 [DEBUG] [Thread-212013] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:06:47.537 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:47.538 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:06:53.924 [DEBUG] [Thread-212015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:08.981 [DEBUG] [Thread-212016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:11.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:07:11.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:07:11.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-02-15T22:07:13.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 6, 54), 13.48, 40.54, 0.0, 25.51, 15.86, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:07:13.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:06:54
2026-02-15T22:07:13.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:07:14.032 [DEBUG] [Thread-212017] [transport.py] [_log()] starting thread (client mode): 0xa57c2530
2026-02-15T22:07:14.032 [DEBUG] [Thread-212017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:07:14.052 [DEBUG] [Thread-212017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:07:14.052 [INFO] [Thread-212017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:07:14.055 [DEBUG] [Thread-212017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:07:14.055 [DEBUG] [Thread-212017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] client lang: <none>
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] server lang: <none>
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] kex follows: False
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:07:14.056 [DEBUG] [Thread-212017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:07:14.057 [DEBUG] [Thread-212017] [transport.py] [_log()] Compression: none
2026-02-15T22:07:14.057 [DEBUG] [Thread-212017] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:07:14.067 [DEBUG] [Thread-212017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:07:14.068 [DEBUG] [Thread-212017] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:07:14.068 [DEBUG] [Thread-212017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:07:14.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:07:14.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:07:14.110 [DEBUG] [Thread-212017] [transport.py] [_log()] userauth is OK
2026-02-15T22:07:14.110 [DEBUG] [Thread-212017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:07:14.110 [DEBUG] [Thread-212017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:07:14.110 [DEBUG] [Thread-212017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:07:14.110 [DEBUG] [Thread-212017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:07:14.130 [INFO] [Thread-212017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:07:14.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:07:14.727 [DEBUG] [Thread-212017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:07:14.727 [DEBUG] [Thread-212017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:07:14.728 [DEBUG] [Thread-212017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:07:14.768 [DEBUG] [Thread-212017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:07:14.769 [DEBUG] [Thread-212017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:07:14.772 [DEBUG] [Thread-212017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:07:14.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:07:14.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:07:14.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:07:14.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:07:14.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:07:14.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:07:14.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:07:14.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:07:14.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:07:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.838297 -999.00  +15.70  20.93     45   +4.00 1 1 1 1 1     0    0 10.23 -74.95 ZNESW 17.7 20.9 147.6 27.8 16.0 -24.9 15.9 -23.7 15.7 -22.7 16.0 -23.9
2026-02-15T22:07:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:07:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:07:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.838297
2026-02-15T22:07:14.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:07:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:07:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:07:14.800 [DEBUG] [Thread-212017] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:07:14.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:07:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:07:14.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:06:54', tmtdew=13.48, humidity=40.54, cloud=0.0, wind=25.51, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:06:54', seeing=1.56, atlas_timestamp='2026-02-15T20:07:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:03:00')
2026-02-15T22:07:14.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:07:14.902 [DEBUG] [Thread-212020] [transport.py] [_log()] starting thread (client mode): 0xa2db63e0
2026-02-15T22:07:14.902 [DEBUG] [Thread-212020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:07:14.916 [DEBUG] [Thread-212020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:07:14.917 [INFO] [Thread-212020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:07:14.924 [DEBUG] [Thread-212020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] client lang: <none>
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] server lang: <none>
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] kex follows: False
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] Compression: none
2026-02-15T22:07:14.925 [DEBUG] [Thread-212020] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:07:14.982 [DEBUG] [Thread-212020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:07:14.983 [DEBUG] [Thread-212020] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:07:14.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:07:14.984 [DEBUG] [Thread-212020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:07:14.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:07:15.042 [DEBUG] [Thread-212020] [transport.py] [_log()] userauth is OK
2026-02-15T22:07:15.042 [DEBUG] [Thread-212020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:07:15.042 [DEBUG] [Thread-212020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:07:15.042 [DEBUG] [Thread-212020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:07:15.042 [DEBUG] [Thread-212020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:07:15.068 [INFO] [Thread-212020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:07:15.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:07:15.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:07:15.923 [DEBUG] [Thread-212020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:07:15.923 [DEBUG] [Thread-212020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:07:15.973 [DEBUG] [Thread-212020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:07:15.973 [DEBUG] [Thread-212020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:07:15.982 [DEBUG] [Thread-212020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:07:15.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:07:15.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:07: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-02-15T22:07:16.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:07:16.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:07:16.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:07:16.019 [DEBUG] [Thread-212020] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:07:24.018 [DEBUG] [Thread-212022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:29.192 [DEBUG] [Thread-212023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:39.070 [DEBUG] [Thread-212024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:07:46.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:07:46.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:07:47.739 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:47.740 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:07:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 7, 29), 13.45, 40.6, 0.0, 25.78, 15.76, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:07:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:07:29
2026-02-15T22:07:48.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:07:48.421 [DEBUG] [Thread-212025] [transport.py] [_log()] starting thread (client mode): 0xa57c2410
2026-02-15T22:07:48.422 [DEBUG] [Thread-212025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:07:48.441 [DEBUG] [Thread-212025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:07:48.442 [INFO] [Thread-212025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] client lang: <none>
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] server lang: <none>
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] kex follows: False
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] Compression: none
2026-02-15T22:07:48.445 [DEBUG] [Thread-212025] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:07:48.463 [DEBUG] [Thread-212025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:07:48.463 [DEBUG] [Thread-212025] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:07:48.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:07:48.464 [DEBUG] [Thread-212025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:07:48.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:07:48.467 [DEBUG] [Thread-212025] [transport.py] [_log()] userauth is OK
2026-02-15T22:07:48.467 [DEBUG] [Thread-212025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:07:48.467 [DEBUG] [Thread-212025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:07:48.467 [DEBUG] [Thread-212025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:07:48.467 [DEBUG] [Thread-212025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:07:48.493 [INFO] [Thread-212025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:07:48.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:07:49.105 [DEBUG] [Thread-212025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:07:49.106 [DEBUG] [Thread-212025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:07:49.106 [DEBUG] [Thread-212025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:07:49.146 [DEBUG] [Thread-212025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:07:49.147 [DEBUG] [Thread-212025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:07:49.150 [DEBUG] [Thread-212025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:07:49.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:07:49.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:07:49.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:07:49.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:07:49.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:07:49.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:07:49.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:07:49.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:07:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:07:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.838297 -999.00  +15.70  20.93     45   +4.00 1 1 1 1 1     0    0 10.23 -74.95 ZNESW 17.7 20.9 147.6 27.8 16.0 -24.9 15.9 -23.7 15.7 -22.7 16.0 -23.9
2026-02-15T22:07:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:07:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:07:49.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.838297
2026-02-15T22:07:49.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:07:49.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:07:49.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:07:49.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:07:49.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:07:49.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:07:29', tmtdew=13.45, humidity=40.6, cloud=0.0, wind=25.78, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:07:30', seeing=1.56, atlas_timestamp='2026-02-15T20:07:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:03:00')
2026-02-15T22:07:49.176 [DEBUG] [Thread-212025] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:07:49.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:07:49.278 [DEBUG] [Thread-212028] [transport.py] [_log()] starting thread (client mode): 0xa5742560
2026-02-15T22:07:49.278 [DEBUG] [Thread-212028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:07:49.292 [DEBUG] [Thread-212028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:07:49.293 [INFO] [Thread-212028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:07:49.300 [DEBUG] [Thread-212028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] client lang: <none>
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] server lang: <none>
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] kex follows: False
2026-02-15T22:07:49.301 [DEBUG] [Thread-212028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:07:49.302 [DEBUG] [Thread-212028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:07:49.302 [DEBUG] [Thread-212028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:07:49.302 [DEBUG] [Thread-212028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:07:49.302 [DEBUG] [Thread-212028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:07:49.302 [DEBUG] [Thread-212028] [transport.py] [_log()] Compression: none
2026-02-15T22:07:49.302 [DEBUG] [Thread-212028] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:07:49.360 [DEBUG] [Thread-212028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:07:49.360 [DEBUG] [Thread-212028] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:07:49.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:07:49.361 [DEBUG] [Thread-212028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:07:49.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:07:49.417 [DEBUG] [Thread-212028] [transport.py] [_log()] userauth is OK
2026-02-15T22:07:49.417 [DEBUG] [Thread-212028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:07:49.418 [DEBUG] [Thread-212028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:07:49.418 [DEBUG] [Thread-212028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:07:49.418 [DEBUG] [Thread-212028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:07:49.435 [INFO] [Thread-212028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:07:49.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:07:49.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:07:50.279 [DEBUG] [Thread-212028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:07:50.279 [DEBUG] [Thread-212028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:07:50.327 [DEBUG] [Thread-212028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:07:50.328 [DEBUG] [Thread-212028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:07:50.337 [DEBUG] [Thread-212028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:07:50.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:07:50.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:07:50.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:07:50.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:07:50.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:07:50.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:07:50.374 [DEBUG] [Thread-212028] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:07:54.107 [DEBUG] [Thread-212030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:08.573 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:09.161 [DEBUG] [Thread-212031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:20.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:08:20.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:08:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:08:22.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 8, 4), 13.46, 40.6, 0.0, 26.64, 15.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:08:22.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:08:04
2026-02-15T22:08:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:08:22.787 [DEBUG] [Thread-212032] [transport.py] [_log()] starting thread (client mode): 0xa5742620
2026-02-15T22:08:22.787 [DEBUG] [Thread-212032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:08:22.808 [DEBUG] [Thread-212032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:08:22.809 [INFO] [Thread-212032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] client lang: <none>
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] server lang: <none>
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] kex follows: False
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] Compression: none
2026-02-15T22:08:22.812 [DEBUG] [Thread-212032] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:08:22.830 [DEBUG] [Thread-212032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:08:22.830 [DEBUG] [Thread-212032] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:08:22.831 [DEBUG] [Thread-212032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:08:22.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:08:22.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:08:22.833 [DEBUG] [Thread-212032] [transport.py] [_log()] userauth is OK
2026-02-15T22:08:22.833 [DEBUG] [Thread-212032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:08:22.833 [DEBUG] [Thread-212032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:08:22.833 [DEBUG] [Thread-212032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:08:22.833 [DEBUG] [Thread-212032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:08:22.859 [INFO] [Thread-212032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:08:22.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:08:23.466 [DEBUG] [Thread-212032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:08:23.466 [DEBUG] [Thread-212032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:08:23.467 [DEBUG] [Thread-212032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:08:23.507 [DEBUG] [Thread-212032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:08:23.508 [DEBUG] [Thread-212032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:08:23.511 [DEBUG] [Thread-212032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:08:23.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:08:23.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:08:23.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:08:23.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:08:23.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:08:23.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:08:23.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:08:23.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:08:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:08:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.838645 -999.00  +15.60  21.76     45   +3.90 1 1 1 1 1     0    0 9.92 -76.97 ZNESW 16.7 21.8 140.8 26.1 16.0 -24.9 15.8 -23.7 15.7 -22.7 16.0 -24.0
2026-02-15T22:08:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:08:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:08:23.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.838645
2026-02-15T22:08:23.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:08:23.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:08:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:08:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:08:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:08:23.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:08:04', tmtdew=13.46, humidity=40.6, cloud=0.0, wind=26.64, temperature=15.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:08:05', seeing=2.11, atlas_timestamp='2026-02-15T20:07:38.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:03:00')
2026-02-15T22:08:23.538 [DEBUG] [Thread-212032] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:08:23.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:08:23.633 [DEBUG] [Thread-212035] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a80
2026-02-15T22:08:23.633 [DEBUG] [Thread-212035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:08:23.648 [DEBUG] [Thread-212035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:08:23.648 [INFO] [Thread-212035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:08:23.655 [DEBUG] [Thread-212035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] client lang: <none>
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] server lang: <none>
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] kex follows: False
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] Compression: none
2026-02-15T22:08:23.656 [DEBUG] [Thread-212035] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:08:23.714 [DEBUG] [Thread-212035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:08:23.714 [DEBUG] [Thread-212035] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:08:23.715 [DEBUG] [Thread-212035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:08:23.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:08:23.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:08:23.770 [DEBUG] [Thread-212035] [transport.py] [_log()] userauth is OK
2026-02-15T22:08:23.770 [DEBUG] [Thread-212035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:08:23.770 [DEBUG] [Thread-212035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:08:23.770 [DEBUG] [Thread-212035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:08:23.770 [DEBUG] [Thread-212035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:08:23.792 [INFO] [Thread-212035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:08:23.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:08:23.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:08:24.200 [DEBUG] [Thread-212037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:24.594 [DEBUG] [Thread-212035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:08:24.594 [DEBUG] [Thread-212035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:08:24.643 [DEBUG] [Thread-212035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:08:24.643 [DEBUG] [Thread-212035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:08:24.652 [DEBUG] [Thread-212035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:08:24.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:08:24.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:08:24.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:08:24.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:08:24.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:08:24.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:08:24.686 [DEBUG] [Thread-212035] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:08:28.868 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:29.272 [DEBUG] [Thread-212038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:32.065 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:37.087 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:39.251 [DEBUG] [Thread-212039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:42.463 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:47.941 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:47.942 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:54.285 [DEBUG] [Thread-212040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:08:54.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:08:54.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:08:54.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:08:56.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 8, 40), 13.49, 40.27, 0.0, 31.47, 16.03, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:08:56.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:08:40
2026-02-15T22:08:56.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:08:57.126 [DEBUG] [Thread-212041] [transport.py] [_log()] starting thread (client mode): 0xa2dc2890
2026-02-15T22:08:57.126 [DEBUG] [Thread-212041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:08:57.146 [DEBUG] [Thread-212041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:08:57.146 [INFO] [Thread-212041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] client lang: <none>
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] server lang: <none>
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] kex follows: False
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:08:57.149 [DEBUG] [Thread-212041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:08:57.150 [DEBUG] [Thread-212041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:08:57.150 [DEBUG] [Thread-212041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:08:57.150 [DEBUG] [Thread-212041] [transport.py] [_log()] Compression: none
2026-02-15T22:08:57.150 [DEBUG] [Thread-212041] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:08:57.166 [DEBUG] [Thread-212041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:08:57.167 [DEBUG] [Thread-212041] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:08:57.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:08:57.168 [DEBUG] [Thread-212041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:08:57.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:08:57.170 [DEBUG] [Thread-212041] [transport.py] [_log()] userauth is OK
2026-02-15T22:08:57.171 [DEBUG] [Thread-212041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:08:57.171 [DEBUG] [Thread-212041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:08:57.171 [DEBUG] [Thread-212041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:08:57.171 [DEBUG] [Thread-212041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:08:57.189 [INFO] [Thread-212041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:08:57.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:08:57.829 [DEBUG] [Thread-212041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:08:57.829 [DEBUG] [Thread-212041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:08:57.829 [DEBUG] [Thread-212041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:08:57.870 [DEBUG] [Thread-212041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:08:57.870 [DEBUG] [Thread-212041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:08:57.873 [DEBUG] [Thread-212041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:08:57.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:08:57.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:08:57.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:08:57.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:08:57.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:08:57.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:08:57.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:08:57.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:08:57.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:08:57.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.838992 -999.00  +15.60  19.95     45   +3.90 1 1 1 1 1     0    0 9.85 -85.47 ZNESW 20.0 19.9 143.6 25.7 15.9 -24.8 15.8 -23.8 15.6 -22.7 15.9 -23.9
2026-02-15T22:08:57.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:08:57.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:08:57.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.838992
2026-02-15T22:08:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:08:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:08:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:08:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:08:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:08:57.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:08:40', tmtdew=13.49, humidity=40.27, cloud=0.0, wind=31.47, temperature=16.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:08:40', seeing=1.9, atlas_timestamp='2026-02-15T20:08:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:06:00')
2026-02-15T22:08:57.894 [DEBUG] [Thread-212041] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:08:57.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:08:57.977 [DEBUG] [Thread-212044] [transport.py] [_log()] starting thread (client mode): 0xa2db63e0
2026-02-15T22:08:57.977 [DEBUG] [Thread-212044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:08:57.992 [DEBUG] [Thread-212044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:08:57.992 [INFO] [Thread-212044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:08:58.000 [DEBUG] [Thread-212044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:08:58.000 [DEBUG] [Thread-212044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] client lang: <none>
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] server lang: <none>
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] kex follows: False
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] Compression: none
2026-02-15T22:08:58.001 [DEBUG] [Thread-212044] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:08:58.060 [DEBUG] [Thread-212044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:08:58.061 [DEBUG] [Thread-212044] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:08:58.061 [DEBUG] [Thread-212044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:08:58.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:08:58.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:08:58.117 [DEBUG] [Thread-212044] [transport.py] [_log()] userauth is OK
2026-02-15T22:08:58.117 [DEBUG] [Thread-212044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:08:58.117 [DEBUG] [Thread-212044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:08:58.117 [DEBUG] [Thread-212044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:08:58.117 [DEBUG] [Thread-212044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:08:58.131 [INFO] [Thread-212044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:08:58.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:08:58.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:08:58.937 [DEBUG] [Thread-212044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:08:58.937 [DEBUG] [Thread-212044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:08:58.986 [DEBUG] [Thread-212044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:08:58.986 [DEBUG] [Thread-212044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:08:58.996 [DEBUG] [Thread-212044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:08:59.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:08:59.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:08:59.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:08:59.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:08:59.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:08:59.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:08:59.033 [DEBUG] [Thread-212044] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:09:01.910 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:06.277 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:09.321 [DEBUG] [Thread-212046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:24.376 [DEBUG] [Thread-212047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:25.783 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:29.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:09:29.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:09:29.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:09:29.342 [DEBUG] [Thread-212048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:30.171 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:31.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 9, 15), 13.39, 40.65, 0.0, 29.24, 15.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:09:31.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:09:15
2026-02-15T22:09:31.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:09:31.937 [DEBUG] [Thread-212049] [transport.py] [_log()] starting thread (client mode): 0xa2d064d0
2026-02-15T22:09:31.937 [DEBUG] [Thread-212049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:09:31.958 [DEBUG] [Thread-212049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:09:31.958 [INFO] [Thread-212049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] client lang: <none>
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] server lang: <none>
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] kex follows: False
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] Compression: none
2026-02-15T22:09:31.961 [DEBUG] [Thread-212049] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:09:31.980 [DEBUG] [Thread-212049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:09:31.980 [DEBUG] [Thread-212049] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:09:31.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:09:31.981 [DEBUG] [Thread-212049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:09:31.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:09:31.983 [DEBUG] [Thread-212049] [transport.py] [_log()] userauth is OK
2026-02-15T22:09:31.983 [DEBUG] [Thread-212049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:09:31.984 [DEBUG] [Thread-212049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:09:31.984 [DEBUG] [Thread-212049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:09:31.984 [DEBUG] [Thread-212049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:09:31.999 [INFO] [Thread-212049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:09:31.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:09:32.606 [DEBUG] [Thread-212049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:09:32.606 [DEBUG] [Thread-212049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:09:32.606 [DEBUG] [Thread-212049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:09:32.646 [DEBUG] [Thread-212049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:09:32.646 [DEBUG] [Thread-212049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:09:32.649 [DEBUG] [Thread-212049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:09:32.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:09:32.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:09:32.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:09:32.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:09:32.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:09:32.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:09:32.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:09:32.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:09:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:09:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.839339 -999.00  +15.60  31.00     46   +4.10 1 1 2 1 1     0    0 9.87 -81.34 ZNESW 26.0 31.0 140.4 35.3 16.0 -24.8 15.8 -23.6 15.6 -22.6 15.9 -23.7
2026-02-15T22:09:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:09:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:09:32.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.839339
2026-02-15T22:09:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:09:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:09:32.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:09:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:09:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:09:32.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:09:15', tmtdew=13.39, humidity=40.65, cloud=0.0, wind=29.24, temperature=15.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:09:15', seeing=1.99, atlas_timestamp='2026-02-15T20:08:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:06:00')
2026-02-15T22:09:32.676 [DEBUG] [Thread-212049] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:09:32.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:09:32.774 [DEBUG] [Thread-212052] [transport.py] [_log()] starting thread (client mode): 0xa57c3fd0
2026-02-15T22:09:32.774 [DEBUG] [Thread-212052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:09:32.792 [DEBUG] [Thread-212052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:09:32.792 [INFO] [Thread-212052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] client lang: <none>
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] server lang: <none>
2026-02-15T22:09:32.802 [DEBUG] [Thread-212052] [transport.py] [_log()] kex follows: False
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] Compression: none
2026-02-15T22:09:32.803 [DEBUG] [Thread-212052] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:09:32.862 [DEBUG] [Thread-212052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:09:32.862 [DEBUG] [Thread-212052] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:09:32.863 [DEBUG] [Thread-212052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:09:32.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:09:32.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:09:32.921 [DEBUG] [Thread-212052] [transport.py] [_log()] userauth is OK
2026-02-15T22:09:32.922 [DEBUG] [Thread-212052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:09:32.922 [DEBUG] [Thread-212052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:09:32.922 [DEBUG] [Thread-212052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:09:32.922 [DEBUG] [Thread-212052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:09:32.940 [INFO] [Thread-212052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:09:32.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:09:32.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:09:33.741 [DEBUG] [Thread-212052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:09:33.741 [DEBUG] [Thread-212052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:09:33.789 [DEBUG] [Thread-212052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:09:33.790 [DEBUG] [Thread-212052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:09:33.800 [DEBUG] [Thread-212052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:09:33.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:09:33.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:09:33.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:09:33.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:09:33.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:09:33.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:09:33.836 [DEBUG] [Thread-212052] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:09:36.920 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:39.411 [DEBUG] [Thread-212054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:41.300 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:42.267 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:48.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:48.145 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:09:54.464 [DEBUG] [Thread-212055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:10:03.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:10:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:10:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 9, 50), 13.3, 40.62, 0.0, 25.97, 15.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:10:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:09:50
2026-02-15T22:10:06.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:10:06.771 [DEBUG] [Thread-212056] [transport.py] [_log()] starting thread (client mode): 0xa57b3250
2026-02-15T22:10:06.772 [DEBUG] [Thread-212056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:10:06.792 [DEBUG] [Thread-212056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:10:06.792 [INFO] [Thread-212056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:10:06.793 [DEBUG] [Thread-212056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:10:06.793 [DEBUG] [Thread-212056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] client lang: <none>
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] server lang: <none>
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] kex follows: False
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] Compression: none
2026-02-15T22:10:06.794 [DEBUG] [Thread-212056] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:10:06.804 [DEBUG] [Thread-212056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:10:06.805 [DEBUG] [Thread-212056] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:10:06.805 [DEBUG] [Thread-212056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:10:06.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:10:06.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:10:06.807 [DEBUG] [Thread-212056] [transport.py] [_log()] userauth is OK
2026-02-15T22:10:06.807 [DEBUG] [Thread-212056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:10:06.807 [DEBUG] [Thread-212056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:10:06.807 [DEBUG] [Thread-212056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:10:06.807 [DEBUG] [Thread-212056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:10:06.831 [INFO] [Thread-212056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:10:06.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:10:09.502 [DEBUG] [Thread-212058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:09.720 [DEBUG] [Thread-212056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:10:09.720 [DEBUG] [Thread-212056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:10:09.721 [DEBUG] [Thread-212056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:10:09.761 [DEBUG] [Thread-212056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:10:09.762 [DEBUG] [Thread-212056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:10:09.765 [DEBUG] [Thread-212056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:10:09.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:10:09.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:10:09.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:10:09.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:10:09.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:10:09.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:10:09.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:10:09.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:10:09.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:10:09.799 [DEBUG] [Thread-212056] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:10:09.799 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-15T22:10:09.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:09:50', tmtdew=13.3, humidity=40.62, cloud=0.0, wind=25.97, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:09:50', seeing=2.01, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:06:00')
2026-02-15T22:10:09.886 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:10:09.897 [DEBUG] [Thread-212060] [transport.py] [_log()] starting thread (client mode): 0xa57b0670
2026-02-15T22:10:09.897 [DEBUG] [Thread-212060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:10:09.911 [DEBUG] [Thread-212060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:10:09.911 [INFO] [Thread-212060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:10:09.918 [DEBUG] [Thread-212060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] client lang: <none>
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] server lang: <none>
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] kex follows: False
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] Compression: none
2026-02-15T22:10:09.919 [DEBUG] [Thread-212060] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:10:09.978 [DEBUG] [Thread-212060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:10:09.979 [DEBUG] [Thread-212060] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:10:09.979 [DEBUG] [Thread-212060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:10:09.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:10:09.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:10:10.033 [DEBUG] [Thread-212060] [transport.py] [_log()] userauth is OK
2026-02-15T22:10:10.034 [DEBUG] [Thread-212060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:10:10.034 [DEBUG] [Thread-212060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:10:10.034 [DEBUG] [Thread-212060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:10:10.034 [DEBUG] [Thread-212060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:10:10.052 [INFO] [Thread-212060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:10:10.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:10:10.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:10:10.898 [DEBUG] [Thread-212060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:10:10.899 [DEBUG] [Thread-212060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:10:10.946 [DEBUG] [Thread-212060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:10:10.947 [DEBUG] [Thread-212060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:10:10.956 [DEBUG] [Thread-212060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:10:10.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:10:10.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:10: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
2026-02-15T22:10:10.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:10:10.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:10:10.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:10:10.993 [DEBUG] [Thread-212060] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:10:24.547 [DEBUG] [Thread-212062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:29.411 [DEBUG] [Thread-212063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:39.590 [DEBUG] [Thread-212064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:39.992 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:41.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:10:41.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:10:41.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:10:43.040 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:43.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 10, 25), 13.24, 40.77, 0.0, 27.79, 15.68, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:10:43.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:10:25
2026-02-15T22:10:43.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:10:43.687 [DEBUG] [Thread-212065] [transport.py] [_log()] starting thread (client mode): 0xa57716f0
2026-02-15T22:10:43.687 [DEBUG] [Thread-212065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:10:43.702 [DEBUG] [Thread-212065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:10:43.702 [INFO] [Thread-212065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:10:43.705 [DEBUG] [Thread-212065] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:10:43.705 [DEBUG] [Thread-212065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] client lang: <none>
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] server lang: <none>
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] kex follows: False
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] Compression: none
2026-02-15T22:10:43.706 [DEBUG] [Thread-212065] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:10:43.725 [DEBUG] [Thread-212065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:10:43.726 [DEBUG] [Thread-212065] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:10:43.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:10:43.727 [DEBUG] [Thread-212065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:10:43.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:10:43.729 [DEBUG] [Thread-212065] [transport.py] [_log()] userauth is OK
2026-02-15T22:10:43.729 [DEBUG] [Thread-212065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:10:43.729 [DEBUG] [Thread-212065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:10:43.729 [DEBUG] [Thread-212065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:10:43.730 [DEBUG] [Thread-212065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:10:43.746 [INFO] [Thread-212065] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:10:43.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:10:44.338 [DEBUG] [Thread-212065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:10:44.338 [DEBUG] [Thread-212065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:10:44.338 [DEBUG] [Thread-212065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:10:44.378 [DEBUG] [Thread-212065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:10:44.379 [DEBUG] [Thread-212065] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:10:44.382 [DEBUG] [Thread-212065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:10:44.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:10:44.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:10:44.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:10:44.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:10:44.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:10:44.403 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:10:44.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:10:44.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:10:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:10:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.840033 -999.00  +15.70  22.49     46   +4.10 1 1 1 1 1     0    0 9.71 -89.39 ZNESW 18.2 22.5 153.8 33.7 16.0 -24.9 15.9 -23.8 15.6 -22.6 15.9 -23.8
2026-02-15T22:10:44.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:10:44.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:10:44.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.840033
2026-02-15T22:10:44.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:10:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:10:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:10:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:10:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:10:44.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:10:25', tmtdew=13.24, humidity=40.77, cloud=0.0, wind=27.79, temperature=15.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:10:25', seeing=2.3, atlas_timestamp='2026-02-15T20:09:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:06:00')
2026-02-15T22:10:44.406 [DEBUG] [Thread-212065] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:10:44.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:10:44.503 [DEBUG] [Thread-212068] [transport.py] [_log()] starting thread (client mode): 0xa57c1a20
2026-02-15T22:10:44.503 [DEBUG] [Thread-212068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:10:44.518 [DEBUG] [Thread-212068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:10:44.518 [INFO] [Thread-212068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:10:44.525 [DEBUG] [Thread-212068] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:10:44.526 [DEBUG] [Thread-212068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] client lang: <none>
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] server lang: <none>
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] kex follows: False
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:10:44.527 [DEBUG] [Thread-212068] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:10:44.528 [DEBUG] [Thread-212068] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:10:44.528 [DEBUG] [Thread-212068] [transport.py] [_log()] Compression: none
2026-02-15T22:10:44.528 [DEBUG] [Thread-212068] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:10:44.585 [DEBUG] [Thread-212068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:10:44.585 [DEBUG] [Thread-212068] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:10:44.586 [DEBUG] [Thread-212068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:10:44.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:10:44.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:10:44.641 [DEBUG] [Thread-212068] [transport.py] [_log()] userauth is OK
2026-02-15T22:10:44.641 [DEBUG] [Thread-212068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:10:44.641 [DEBUG] [Thread-212068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:10:44.641 [DEBUG] [Thread-212068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:10:44.641 [DEBUG] [Thread-212068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:10:44.655 [INFO] [Thread-212068] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:10:44.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:10:44.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:10:45.487 [DEBUG] [Thread-212068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:10:45.487 [DEBUG] [Thread-212068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:10:45.535 [DEBUG] [Thread-212068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:10:45.535 [DEBUG] [Thread-212068] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:10:45.545 [DEBUG] [Thread-212068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:10:45.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:10:45.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:10:45.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:10:45.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:10:45.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:10:45.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:10:45.584 [DEBUG] [Thread-212068] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:10:48.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:48.346 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:10:54.622 [DEBUG] [Thread-212070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:09.680 [DEBUG] [Thread-212071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:15.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:11:15.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:11:15.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:11:15.878 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:17.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 11), 13.25, 40.75, 0.0, 27.61, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:11:17.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:11:00
2026-02-15T22:11:17.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:11:18.023 [DEBUG] [Thread-212072] [transport.py] [_log()] starting thread (client mode): 0xa57e0ee0
2026-02-15T22:11:18.023 [DEBUG] [Thread-212072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:11:18.043 [DEBUG] [Thread-212072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:11:18.043 [INFO] [Thread-212072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:18.046 [DEBUG] [Thread-212072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] client lang: <none>
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] server lang: <none>
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] kex follows: False
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] Compression: none
2026-02-15T22:11:18.047 [DEBUG] [Thread-212072] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:11:18.065 [DEBUG] [Thread-212072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:11:18.065 [DEBUG] [Thread-212072] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:11:18.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:11:18.066 [DEBUG] [Thread-212072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:11:18.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:11:18.068 [DEBUG] [Thread-212072] [transport.py] [_log()] userauth is OK
2026-02-15T22:11:18.069 [DEBUG] [Thread-212072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:11:18.069 [DEBUG] [Thread-212072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:11:18.069 [DEBUG] [Thread-212072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:11:18.069 [DEBUG] [Thread-212072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:11:18.090 [INFO] [Thread-212072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:11:18.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:11:18.680 [DEBUG] [Thread-212072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:11:18.680 [DEBUG] [Thread-212072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:11:18.681 [DEBUG] [Thread-212072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:11:18.721 [DEBUG] [Thread-212072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:11:18.722 [DEBUG] [Thread-212072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:11:18.725 [DEBUG] [Thread-212072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:11:18.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:11:18.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:11:18.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:11:18.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:11:18.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:11:18.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:11:18.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:11:18.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:11:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:11:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.840728 -999.00  +15.60  23.17     46   +4.10 1 1 1 1 1     0    0 9.68 -83.67 ZNESW 20.7 23.2 162.0 27.4 15.9 -24.7 15.8 -23.7 15.7 -22.6 15.9 -23.9
2026-02-15T22:11:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:11:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:11:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.840728
2026-02-15T22:11:18.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:11:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:11:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:11:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:11:18.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:11:18.752 [DEBUG] [Thread-212072] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:11:18.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:11:00', tmtdew=13.25, humidity=40.75, cloud=0.0, wind=27.61, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:11:01', seeing=2.0, atlas_timestamp='2026-02-15T20:10:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.031749999999998835, -0.005749999999999034, 0.014499999999999957, 0.037499999999999645, -0.03524999999999956, -0.006000000000000227, 0.007750000000001478, -0.008500000000001506, -0.0019999999999988916, -0.02325000000000088, 0.005499999999999616, 0.0389999999999997, 0.016750000000000043, -0.03750000000000142, -0.0030000000000001137, 0.015249999999999986, 0.02800000000000047, -0.057000000000000384, -0.02975000000000172, 0.07099999999999795, 0.016749999999998266, -0.004749999999999588, -0.015249999999999986, 0.026999999999999247, 0.057500000000000995, 0.03175000000000061, -0.03149999999999942, 0.01699999999999946, 0.01600000000000179, 0.04300000000000104, -0.0015000000000000568, 0.021249999999998437], zp_timestamp='2026-02-15T20:06:00')
2026-02-15T22:11:18.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:11:18.848 [DEBUG] [Thread-212075] [transport.py] [_log()] starting thread (client mode): 0xa57c34c0
2026-02-15T22:11:18.848 [DEBUG] [Thread-212075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:11:18.863 [DEBUG] [Thread-212075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:11:18.863 [INFO] [Thread-212075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:11:18.871 [DEBUG] [Thread-212075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:11:18.871 [DEBUG] [Thread-212075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:11:18.871 [DEBUG] [Thread-212075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:11:18.871 [DEBUG] [Thread-212075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] client lang: <none>
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] server lang: <none>
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] kex follows: False
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] Compression: none
2026-02-15T22:11:18.872 [DEBUG] [Thread-212075] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:11:18.931 [DEBUG] [Thread-212075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:11:18.931 [DEBUG] [Thread-212075] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:11:18.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:11:18.933 [DEBUG] [Thread-212075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:11:18.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:11:18.990 [DEBUG] [Thread-212075] [transport.py] [_log()] userauth is OK
2026-02-15T22:11:18.991 [DEBUG] [Thread-212075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:11:18.991 [DEBUG] [Thread-212075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:11:18.991 [DEBUG] [Thread-212075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:11:18.991 [DEBUG] [Thread-212075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:11:19.010 [INFO] [Thread-212075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:11:19.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:11:19.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:11:19.852 [DEBUG] [Thread-212075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:11:19.852 [DEBUG] [Thread-212075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:11:19.900 [DEBUG] [Thread-212075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:11:19.901 [DEBUG] [Thread-212075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:11:19.910 [DEBUG] [Thread-212075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:11:19.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:11:19.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:11:19.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:11:19.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:11:19.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:11:19.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:11:19.947 [DEBUG] [Thread-212075] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:11:24.715 [DEBUG] [Thread-212077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:29.478 [DEBUG] [Thread-212078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:39.757 [DEBUG] [Thread-212079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:48.543 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:48.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:49.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:11:49.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:11:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:11:52.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 11, 37), 13.4, 40.54, 0.0, 30.27, 16.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:11:52.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:11:37
2026-02-15T22:11:52.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:11:52.991 [DEBUG] [Thread-212080] [transport.py] [_log()] starting thread (client mode): 0xa5771ea0
2026-02-15T22:11:52.991 [DEBUG] [Thread-212080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:11:53.012 [DEBUG] [Thread-212080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:11:53.012 [INFO] [Thread-212080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] client lang: <none>
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] server lang: <none>
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] kex follows: False
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] Compression: none
2026-02-15T22:11:53.015 [DEBUG] [Thread-212080] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:11:53.031 [DEBUG] [Thread-212080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:11:53.031 [DEBUG] [Thread-212080] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:11:53.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:11:53.032 [DEBUG] [Thread-212080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:11:53.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:11:53.033 [DEBUG] [Thread-212080] [transport.py] [_log()] userauth is OK
2026-02-15T22:11:53.033 [DEBUG] [Thread-212080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:11:53.033 [DEBUG] [Thread-212080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:11:53.033 [DEBUG] [Thread-212080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:11:53.033 [DEBUG] [Thread-212080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:11:53.048 [INFO] [Thread-212080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:11:53.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:11:53.592 [DEBUG] [Thread-212080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:11:53.593 [DEBUG] [Thread-212080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:11:53.593 [DEBUG] [Thread-212080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:11:53.633 [DEBUG] [Thread-212080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:11:53.634 [DEBUG] [Thread-212080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:11:53.637 [DEBUG] [Thread-212080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:11:53.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:11:53.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:11:53.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:11:53.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:11:53.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:11:53.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:11:53.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:11:53.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:11:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:11:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.841075 -999.00  +15.60  21.48     46   +4.10 1 1 1 1 1     0    0 9.56 -86.32 ZNESW 25.7 21.5 150.6 30.7 15.9 -24.8 15.8 -23.8 15.6 -22.7 15.9 -23.9
2026-02-15T22:11:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:11:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:11:53.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.841075
2026-02-15T22:11:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:11:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:11:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:11:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:11:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:11:53.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:11:37', tmtdew=13.4, humidity=40.54, cloud=0.0, wind=30.27, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:11:37', seeing=1.74, atlas_timestamp='2026-02-15T20:11:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:09:00')
2026-02-15T22:11:53.656 [DEBUG] [Thread-212080] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:11:53.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:11:53.743 [DEBUG] [Thread-212083] [transport.py] [_log()] starting thread (client mode): 0xa2d6f3d0
2026-02-15T22:11:53.743 [DEBUG] [Thread-212083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:11:53.758 [DEBUG] [Thread-212083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:11:53.758 [INFO] [Thread-212083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:11:53.765 [DEBUG] [Thread-212083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:11:53.765 [DEBUG] [Thread-212083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:11:53.765 [DEBUG] [Thread-212083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] client lang: <none>
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] server lang: <none>
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] kex follows: False
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] Compression: none
2026-02-15T22:11:53.766 [DEBUG] [Thread-212083] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:11:53.826 [DEBUG] [Thread-212083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:11:53.827 [DEBUG] [Thread-212083] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:11:53.827 [DEBUG] [Thread-212083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:11:53.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:11:53.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:11:53.882 [DEBUG] [Thread-212083] [transport.py] [_log()] userauth is OK
2026-02-15T22:11:53.882 [DEBUG] [Thread-212083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:11:53.883 [DEBUG] [Thread-212083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:11:53.883 [DEBUG] [Thread-212083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:11:53.883 [DEBUG] [Thread-212083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:11:53.901 [INFO] [Thread-212083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:11:53.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:11:53.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:11:54.726 [DEBUG] [Thread-212083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:11:54.726 [DEBUG] [Thread-212083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:11:54.774 [DEBUG] [Thread-212083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:11:54.775 [DEBUG] [Thread-212083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:11:54.784 [DEBUG] [Thread-212083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:11:54.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:11:54.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:11:54.794 [DEBUG] [Thread-212085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:11:54.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:11:54.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:11:54.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:11:54.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:11:54.820 [DEBUG] [Thread-212083] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:12:09.854 [DEBUG] [Thread-212086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:24.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:12:24.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:12:24.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:12:24.892 [DEBUG] [Thread-212087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:26.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 12, 12), 13.23, 40.82, 0.0, 31.51, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:12:26.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:12:12
2026-02-15T22:12:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:12:27.358 [DEBUG] [Thread-212088] [transport.py] [_log()] starting thread (client mode): 0xa5770be0
2026-02-15T22:12:27.358 [DEBUG] [Thread-212088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:12:27.378 [DEBUG] [Thread-212088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:12:27.378 [INFO] [Thread-212088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] client lang: <none>
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] server lang: <none>
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] kex follows: False
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:12:27.382 [DEBUG] [Thread-212088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:12:27.383 [DEBUG] [Thread-212088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:12:27.383 [DEBUG] [Thread-212088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:12:27.383 [DEBUG] [Thread-212088] [transport.py] [_log()] Compression: none
2026-02-15T22:12:27.383 [DEBUG] [Thread-212088] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:12:27.400 [DEBUG] [Thread-212088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:12:27.401 [DEBUG] [Thread-212088] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:12:27.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:12:27.402 [DEBUG] [Thread-212088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:12:27.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:12:27.404 [DEBUG] [Thread-212088] [transport.py] [_log()] userauth is OK
2026-02-15T22:12:27.405 [DEBUG] [Thread-212088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:12:27.405 [DEBUG] [Thread-212088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:12:27.405 [DEBUG] [Thread-212088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:12:27.405 [DEBUG] [Thread-212088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:12:27.424 [INFO] [Thread-212088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:12:27.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:12:28.249 [DEBUG] [Thread-212088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:12:28.249 [DEBUG] [Thread-212088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:12:28.250 [DEBUG] [Thread-212088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:12:28.290 [DEBUG] [Thread-212088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:12:28.291 [DEBUG] [Thread-212088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:12:28.294 [DEBUG] [Thread-212088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:12:28.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:12:28.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:12:28.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:12:28.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:12:28.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:12:28.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:12:28.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:12:28.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:12:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:12:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.841422 -999.00  +15.60  25.24     46   +4.20 1 1 1 1 1     0    0 9.26 -90.74 ZNESW 27.9 25.2 142.4 32.7 15.9 -24.8 15.8 -23.7 15.6 -22.6 15.9 -23.8
2026-02-15T22:12:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:12:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:12:28.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.841422
2026-02-15T22:12:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:12:28.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:12:28.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:12:28.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:12:28.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:12:28.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:12:12', tmtdew=13.23, humidity=40.82, cloud=0.0, wind=31.51, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:12:13', seeing=1.78, atlas_timestamp='2026-02-15T20:11:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:09:00')
2026-02-15T22:12:28.321 [DEBUG] [Thread-212088] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:12:28.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:12:28.417 [DEBUG] [Thread-212091] [transport.py] [_log()] starting thread (client mode): 0xa5773a30
2026-02-15T22:12:28.417 [DEBUG] [Thread-212091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:12:28.432 [DEBUG] [Thread-212091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:12:28.432 [INFO] [Thread-212091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:12:28.440 [DEBUG] [Thread-212091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:12:28.440 [DEBUG] [Thread-212091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:12:28.440 [DEBUG] [Thread-212091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:12:28.440 [DEBUG] [Thread-212091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:12:28.440 [DEBUG] [Thread-212091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:12:28.440 [DEBUG] [Thread-212091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] client lang: <none>
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] server lang: <none>
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] kex follows: False
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:12:28.441 [DEBUG] [Thread-212091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:12:28.442 [DEBUG] [Thread-212091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:12:28.442 [DEBUG] [Thread-212091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:12:28.442 [DEBUG] [Thread-212091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:12:28.442 [DEBUG] [Thread-212091] [transport.py] [_log()] Compression: none
2026-02-15T22:12:28.442 [DEBUG] [Thread-212091] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:12:28.499 [DEBUG] [Thread-212091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:12:28.500 [DEBUG] [Thread-212091] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:12:28.501 [DEBUG] [Thread-212091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:12:28.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:12:28.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:12:28.559 [DEBUG] [Thread-212091] [transport.py] [_log()] userauth is OK
2026-02-15T22:12:28.559 [DEBUG] [Thread-212091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:12:28.559 [DEBUG] [Thread-212091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:12:28.559 [DEBUG] [Thread-212091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:12:28.559 [DEBUG] [Thread-212091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:12:28.578 [INFO] [Thread-212091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:12:28.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:12:28.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:12:29.441 [DEBUG] [Thread-212091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:12:29.441 [DEBUG] [Thread-212091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:12:29.489 [DEBUG] [Thread-212091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:12:29.489 [DEBUG] [Thread-212091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:12:29.498 [DEBUG] [Thread-212091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:12:29.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:12:29.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:12:29.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:12:29.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:12:29.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:12:29.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:12:29.529 [DEBUG] [Thread-212091] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:12:29.548 [DEBUG] [Thread-212093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:39.926 [DEBUG] [Thread-212094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:48.749 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:48.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:49.358 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:54.978 [DEBUG] [Thread-212095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:12:59.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:12:59.552 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:12:59.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:13:01.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 12, 47), 13.12, 41.47, 0.0, 29.87, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:13:01.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:12:47
2026-02-15T22:13:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:13:01.961 [DEBUG] [Thread-212096] [transport.py] [_log()] starting thread (client mode): 0xa5772680
2026-02-15T22:13:01.961 [DEBUG] [Thread-212096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:13:01.982 [DEBUG] [Thread-212096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:13:01.982 [INFO] [Thread-212096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] client lang: <none>
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] server lang: <none>
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] kex follows: False
2026-02-15T22:13:01.986 [DEBUG] [Thread-212096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:13:01.987 [DEBUG] [Thread-212096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:13:01.987 [DEBUG] [Thread-212096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:13:01.987 [DEBUG] [Thread-212096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:13:01.987 [DEBUG] [Thread-212096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:13:01.987 [DEBUG] [Thread-212096] [transport.py] [_log()] Compression: none
2026-02-15T22:13:01.987 [DEBUG] [Thread-212096] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:13:02.015 [DEBUG] [Thread-212096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:13:02.015 [DEBUG] [Thread-212096] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:13:02.016 [DEBUG] [Thread-212096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:13:02.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:13:02.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:13:02.018 [DEBUG] [Thread-212096] [transport.py] [_log()] userauth is OK
2026-02-15T22:13:02.018 [DEBUG] [Thread-212096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:13:02.018 [DEBUG] [Thread-212096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:13:02.018 [DEBUG] [Thread-212096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:13:02.018 [DEBUG] [Thread-212096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:13:02.042 [INFO] [Thread-212096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:13:02.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:13:02.622 [DEBUG] [Thread-212096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:13:02.622 [DEBUG] [Thread-212096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:13:02.622 [DEBUG] [Thread-212096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:13:02.663 [DEBUG] [Thread-212096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:13:02.663 [DEBUG] [Thread-212096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:13:02.665 [DEBUG] [Thread-212096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:13:02.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:13:02.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:13:02.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:13:02.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:13:02.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:13:02.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:13:02.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.841770 -999.00  +15.60  25.32     46   +4.20 1 1 1 1 1     0    0 8.89 -102.52 ZNESW 23.6 25.3 157.6 32.7 15.9 -24.8 15.8 -23.8 15.6 -22.7 15.9 -23.8
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.841770
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:13:02.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:13:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:13:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:13:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:13:02.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:12:47', tmtdew=13.12, humidity=41.47, cloud=0.0, wind=29.87, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:12:48', seeing=1.78, atlas_timestamp='2026-02-15T20:12:08.928', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:09:00')
2026-02-15T22:13:02.684 [DEBUG] [Thread-212096] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:13:02.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:13:02.771 [DEBUG] [Thread-212099] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3b0
2026-02-15T22:13:02.771 [DEBUG] [Thread-212099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:13:02.785 [DEBUG] [Thread-212099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:13:02.785 [INFO] [Thread-212099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] client lang: <none>
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] server lang: <none>
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] kex follows: False
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] Compression: none
2026-02-15T22:13:02.793 [DEBUG] [Thread-212099] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:13:02.849 [DEBUG] [Thread-212099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:13:02.849 [DEBUG] [Thread-212099] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:13:02.849 [DEBUG] [Thread-212099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:13:02.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:13:02.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:13:02.910 [DEBUG] [Thread-212099] [transport.py] [_log()] userauth is OK
2026-02-15T22:13:02.910 [DEBUG] [Thread-212099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:13:02.910 [DEBUG] [Thread-212099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:13:02.910 [DEBUG] [Thread-212099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:13:02.910 [DEBUG] [Thread-212099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:13:02.924 [INFO] [Thread-212099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:13:02.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:13:02.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:13:03.750 [DEBUG] [Thread-212099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:13:03.750 [DEBUG] [Thread-212099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:13:03.798 [DEBUG] [Thread-212099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:13:03.799 [DEBUG] [Thread-212099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:13:03.808 [DEBUG] [Thread-212099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:13:03.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:13:03.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:13:03.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:13:03.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:13:03.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:13:03.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:13:03.844 [DEBUG] [Thread-212099] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:13:10.011 [DEBUG] [Thread-212101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:13:25.060 [DEBUG] [Thread-212102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:13:29.605 [DEBUG] [Thread-212103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:13:33.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:13:33.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:13:33.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:13:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 13, 24), 13.11, 41.5, 0.0, 29.41, 15.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:13:36.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:13:24
2026-02-15T22:13:36.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:13:36.630 [DEBUG] [Thread-212104] [transport.py] [_log()] starting thread (client mode): 0xa2d6caf0
2026-02-15T22:13:36.630 [DEBUG] [Thread-212104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:13:36.643 [DEBUG] [Thread-212104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:13:36.643 [INFO] [Thread-212104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] client lang: <none>
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] server lang: <none>
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] kex follows: False
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] Compression: none
2026-02-15T22:13:36.646 [DEBUG] [Thread-212104] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:13:36.662 [DEBUG] [Thread-212104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:13:36.663 [DEBUG] [Thread-212104] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:13:36.663 [DEBUG] [Thread-212104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:13:36.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:13:36.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:13:36.665 [DEBUG] [Thread-212104] [transport.py] [_log()] userauth is OK
2026-02-15T22:13:36.665 [DEBUG] [Thread-212104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:13:36.665 [DEBUG] [Thread-212104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:13:36.665 [DEBUG] [Thread-212104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:13:36.665 [DEBUG] [Thread-212104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:13:36.689 [INFO] [Thread-212104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:13:36.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:13:37.251 [DEBUG] [Thread-212104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:13:37.251 [DEBUG] [Thread-212104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:13:37.251 [DEBUG] [Thread-212104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:13:37.292 [DEBUG] [Thread-212104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:13:37.292 [DEBUG] [Thread-212104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:13:37.294 [DEBUG] [Thread-212104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:13:37.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:13:37.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:13:37.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:13:37.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:13:37.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:13:37.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:13:37.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.842117 -999.00  +15.60  23.46     46   +4.20 1 1 1 1 1     0    0 9.25 -97.09 ZNESW 22.1 23.5 145.2 32.6 15.9 -24.7 15.8 -23.8 15.6 -22.7 15.9 -23.9
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.842117
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:13:37.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:13:24', tmtdew=13.11, humidity=41.5, cloud=0.0, wind=29.41, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:13:24', seeing=2.0, atlas_timestamp='2026-02-15T20:12:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:09:00')
2026-02-15T22:13:37.311 [DEBUG] [Thread-212104] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:13:37.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:13:37.397 [DEBUG] [Thread-212107] [transport.py] [_log()] starting thread (client mode): 0xa2d11150
2026-02-15T22:13:37.397 [DEBUG] [Thread-212107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:13:37.411 [DEBUG] [Thread-212107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:13:37.411 [INFO] [Thread-212107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:13:37.419 [DEBUG] [Thread-212107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:13:37.419 [DEBUG] [Thread-212107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:13:37.419 [DEBUG] [Thread-212107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:13:37.419 [DEBUG] [Thread-212107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:37.419 [DEBUG] [Thread-212107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:13:37.419 [DEBUG] [Thread-212107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] client lang: <none>
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] server lang: <none>
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] kex follows: False
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:13:37.420 [DEBUG] [Thread-212107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:13:37.421 [DEBUG] [Thread-212107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:13:37.421 [DEBUG] [Thread-212107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:13:37.421 [DEBUG] [Thread-212107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:13:37.421 [DEBUG] [Thread-212107] [transport.py] [_log()] Compression: none
2026-02-15T22:13:37.421 [DEBUG] [Thread-212107] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:13:37.479 [DEBUG] [Thread-212107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:13:37.480 [DEBUG] [Thread-212107] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:13:37.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:13:37.481 [DEBUG] [Thread-212107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:13:37.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:13:37.541 [DEBUG] [Thread-212107] [transport.py] [_log()] userauth is OK
2026-02-15T22:13:37.542 [DEBUG] [Thread-212107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:13:37.542 [DEBUG] [Thread-212107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:13:37.542 [DEBUG] [Thread-212107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:13:37.542 [DEBUG] [Thread-212107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:13:37.562 [INFO] [Thread-212107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:13:37.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:13:37.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:13:38.380 [DEBUG] [Thread-212107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:13:38.381 [DEBUG] [Thread-212107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:13:38.428 [DEBUG] [Thread-212107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:13:38.429 [DEBUG] [Thread-212107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:13:38.438 [DEBUG] [Thread-212107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:13:38.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:13:38.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:13:38.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:13:38.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:13:38.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:13:38.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:13:38.476 [DEBUG] [Thread-212107] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:13:40.093 [DEBUG] [Thread-212109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:13:48.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:13:48.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:13:55.148 [DEBUG] [Thread-212110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:07.037 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:08.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:14:08.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:14:08.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:14:10.185 [DEBUG] [Thread-212111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 14), 13.11, 41.5, 0.0, 27.05, 15.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:14:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:14:00
2026-02-15T22:14:11.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:14:11.261 [DEBUG] [Thread-212112] [transport.py] [_log()] starting thread (client mode): 0xa2d10cd0
2026-02-15T22:14:11.261 [DEBUG] [Thread-212112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:14:11.280 [DEBUG] [Thread-212112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:14:11.280 [INFO] [Thread-212112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:14:11.284 [DEBUG] [Thread-212112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:14:11.284 [DEBUG] [Thread-212112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:14:11.284 [DEBUG] [Thread-212112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:14:11.284 [DEBUG] [Thread-212112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] client lang: <none>
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] server lang: <none>
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] kex follows: False
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] Compression: none
2026-02-15T22:14:11.285 [DEBUG] [Thread-212112] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:14:11.301 [DEBUG] [Thread-212112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:14:11.301 [DEBUG] [Thread-212112] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:14:11.302 [DEBUG] [Thread-212112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:14:11.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:14:11.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:14:11.304 [DEBUG] [Thread-212112] [transport.py] [_log()] userauth is OK
2026-02-15T22:14:11.304 [DEBUG] [Thread-212112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:14:11.304 [DEBUG] [Thread-212112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:14:11.305 [DEBUG] [Thread-212112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:14:11.305 [DEBUG] [Thread-212112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:14:11.324 [INFO] [Thread-212112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:14:11.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:14:11.593 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:11.939 [DEBUG] [Thread-212112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:14:11.940 [DEBUG] [Thread-212112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:14:11.940 [DEBUG] [Thread-212112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:14:11.980 [DEBUG] [Thread-212112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:14:11.980 [DEBUG] [Thread-212112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:14:11.984 [DEBUG] [Thread-212112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:14:12.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:14:12.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:14:12.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:14:12.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:14:12.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:14:12.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:14:12.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:14:12.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:14:12.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:14:12.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.842464 -999.00  +15.60  19.29     46   +4.10 1 1 1 1 1     0    0 9.07 -98.74 ZNESW 21.8 19.3 143.4 27.9 15.9 -24.8 15.8 -23.8 15.6 -22.8 15.9 -23.8
2026-02-15T22:14:12.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:14:12.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:14:12.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.842464
2026-02-15T22:14:12.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:14:12.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:14:12.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:14:12.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:14:12.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:14:12.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:14:00', tmtdew=13.11, humidity=41.5, cloud=0.0, wind=27.05, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:14:01', seeing=1.7, atlas_timestamp='2026-02-15T20:13:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:09:00')
2026-02-15T22:14:12.020 [DEBUG] [Thread-212112] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:14:12.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:14:12.119 [DEBUG] [Thread-212115] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3e0
2026-02-15T22:14:12.120 [DEBUG] [Thread-212115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:14:12.137 [DEBUG] [Thread-212115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:14:12.137 [INFO] [Thread-212115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] client lang: <none>
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] server lang: <none>
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] kex follows: False
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] Compression: none
2026-02-15T22:14:12.148 [DEBUG] [Thread-212115] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:14:12.208 [DEBUG] [Thread-212115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:14:12.208 [DEBUG] [Thread-212115] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:14:12.209 [DEBUG] [Thread-212115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:14:12.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:14:12.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:14:12.267 [DEBUG] [Thread-212115] [transport.py] [_log()] userauth is OK
2026-02-15T22:14:12.267 [DEBUG] [Thread-212115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:14:12.267 [DEBUG] [Thread-212115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:14:12.267 [DEBUG] [Thread-212115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:14:12.268 [DEBUG] [Thread-212115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:14:12.287 [INFO] [Thread-212115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:14:12.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:14:12.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:14:13.176 [DEBUG] [Thread-212115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:14:13.185 [DEBUG] [Thread-212115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:14:13.225 [DEBUG] [Thread-212115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:14:13.225 [DEBUG] [Thread-212115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:14:13.234 [DEBUG] [Thread-212115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:14:13.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:14:13.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:14:13.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:14:13.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:14:13.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:14:13.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:14:13.273 [DEBUG] [Thread-212115] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:14:14.636 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:21.002 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:22.715 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:25.219 [DEBUG] [Thread-212117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:29.664 [DEBUG] [Thread-212118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:40.270 [DEBUG] [Thread-212119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:43.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:14:43.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:14:43.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:14:45.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 14, 36), 13.18, 41.14, 0.0, 31.58, 15.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:14:45.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:14:36
2026-02-15T22:14:45.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:14:45.626 [DEBUG] [Thread-212120] [transport.py] [_log()] starting thread (client mode): 0xa57727a0
2026-02-15T22:14:45.626 [DEBUG] [Thread-212120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:14:45.645 [DEBUG] [Thread-212120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:14:45.645 [INFO] [Thread-212120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:14:45.648 [DEBUG] [Thread-212120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:14:45.648 [DEBUG] [Thread-212120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] client lang: <none>
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] server lang: <none>
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] kex follows: False
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:14:45.649 [DEBUG] [Thread-212120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:14:45.650 [DEBUG] [Thread-212120] [transport.py] [_log()] Compression: none
2026-02-15T22:14:45.650 [DEBUG] [Thread-212120] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:14:45.666 [DEBUG] [Thread-212120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:14:45.667 [DEBUG] [Thread-212120] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:14:45.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:14:45.668 [DEBUG] [Thread-212120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:14:45.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:14:45.670 [DEBUG] [Thread-212120] [transport.py] [_log()] userauth is OK
2026-02-15T22:14:45.670 [DEBUG] [Thread-212120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:14:45.671 [DEBUG] [Thread-212120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:14:45.671 [DEBUG] [Thread-212120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:14:45.671 [DEBUG] [Thread-212120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:14:45.695 [INFO] [Thread-212120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:14:45.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:14:46.315 [DEBUG] [Thread-212120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:14:46.315 [DEBUG] [Thread-212120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:14:46.316 [DEBUG] [Thread-212120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:14:46.356 [DEBUG] [Thread-212120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:14:46.357 [DEBUG] [Thread-212120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:14:46.360 [DEBUG] [Thread-212120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:14:46.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:14:46.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:14:46.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:14:46.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:14:46.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:14:46.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:14:46.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:14:46.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:14:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:14:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.843158 -999.00  +15.50  20.67     46   +4.20 1 1 1 1 1     0    0 8.68 -96.75 ZNESW 16.4 20.7 150.0 25.4 15.9 -24.9 15.8 -23.9 15.5 -22.7 15.8 -23.9
2026-02-15T22:14:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:14:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:14:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.843158
2026-02-15T22:14:46.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:14:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:14:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:14:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:14:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:14:46.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:14:36', tmtdew=13.18, humidity=41.14, cloud=0.0, wind=31.58, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:14:37', seeing=1.89, atlas_timestamp='2026-02-15T20:14:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:12:00')
2026-02-15T22:14:46.386 [DEBUG] [Thread-212120] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:14:46.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:14:46.481 [DEBUG] [Thread-212123] [transport.py] [_log()] starting thread (client mode): 0xa5772d40
2026-02-15T22:14:46.482 [DEBUG] [Thread-212123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:14:46.496 [DEBUG] [Thread-212123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:14:46.496 [INFO] [Thread-212123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:14:46.504 [DEBUG] [Thread-212123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] client lang: <none>
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] server lang: <none>
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] kex follows: False
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] Compression: none
2026-02-15T22:14:46.505 [DEBUG] [Thread-212123] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:14:46.566 [DEBUG] [Thread-212123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:14:46.567 [DEBUG] [Thread-212123] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:14:46.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:14:46.568 [DEBUG] [Thread-212123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:14:46.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:14:46.623 [DEBUG] [Thread-212123] [transport.py] [_log()] userauth is OK
2026-02-15T22:14:46.624 [DEBUG] [Thread-212123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:14:46.624 [DEBUG] [Thread-212123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:14:46.624 [DEBUG] [Thread-212123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:14:46.624 [DEBUG] [Thread-212123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:14:46.643 [INFO] [Thread-212123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:14:46.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:14:46.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:14:47.461 [DEBUG] [Thread-212123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:14:47.462 [DEBUG] [Thread-212123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:14:47.509 [DEBUG] [Thread-212123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:14:47.510 [DEBUG] [Thread-212123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:14:47.519 [DEBUG] [Thread-212123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:14:47.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:14:47.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:14:47.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:14:47.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:14:47.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:14:47.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:14:47.557 [DEBUG] [Thread-212123] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:14:49.156 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:49.157 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:14:55.307 [DEBUG] [Thread-212125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:10.356 [DEBUG] [Thread-212126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:17.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:15:17.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:15:17.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:15:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 14, 36), 13.18, 41.14, 0.0, 31.58, 15.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:15:19.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:14:36
2026-02-15T22:15:19.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:15:20.125 [DEBUG] [Thread-212127] [transport.py] [_log()] starting thread (client mode): 0xa57b2b90
2026-02-15T22:15:20.125 [DEBUG] [Thread-212127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:15:20.146 [DEBUG] [Thread-212127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:15:20.146 [INFO] [Thread-212127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:15:20.149 [DEBUG] [Thread-212127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:15:20.149 [DEBUG] [Thread-212127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] client lang: <none>
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] server lang: <none>
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] kex follows: False
2026-02-15T22:15:20.150 [DEBUG] [Thread-212127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:15:20.151 [DEBUG] [Thread-212127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:15:20.151 [DEBUG] [Thread-212127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:15:20.151 [DEBUG] [Thread-212127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:15:20.151 [DEBUG] [Thread-212127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:15:20.151 [DEBUG] [Thread-212127] [transport.py] [_log()] Compression: none
2026-02-15T22:15:20.151 [DEBUG] [Thread-212127] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:15:20.168 [DEBUG] [Thread-212127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:15:20.169 [DEBUG] [Thread-212127] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:15:20.169 [DEBUG] [Thread-212127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:15:20.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:15:20.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:15:20.171 [DEBUG] [Thread-212127] [transport.py] [_log()] userauth is OK
2026-02-15T22:15:20.171 [DEBUG] [Thread-212127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:15:20.171 [DEBUG] [Thread-212127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:15:20.171 [DEBUG] [Thread-212127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:15:20.171 [DEBUG] [Thread-212127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:15:20.189 [INFO] [Thread-212127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:15:20.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:15:21.811 [DEBUG] [Thread-212127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:15:21.811 [DEBUG] [Thread-212127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:15:21.812 [DEBUG] [Thread-212127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:15:21.853 [DEBUG] [Thread-212127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:15:21.853 [DEBUG] [Thread-212127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:15:21.857 [DEBUG] [Thread-212127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:15:21.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:15:21.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:15:21.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:15:21.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:15:21.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:15:21.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:15:21.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:15:21.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:15:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:15:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.843506 -999.00  +15.50  22.49     46   +4.20 1 1 1 1 1     0    0 9.19 -96.83 ZNESW 22.2 22.5 141.8 24.7 15.9 -24.9 15.8 -23.8 15.6 -22.7 15.8 -24.0
2026-02-15T22:15:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:15:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:15:21.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.843506
2026-02-15T22:15:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:15:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:15:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:15:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:15:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:15:21.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:14:36', tmtdew=13.18, humidity=41.14, cloud=0.0, wind=31.58, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:15:12', seeing=1.83, atlas_timestamp='2026-02-15T20:14:38.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:12:00')
2026-02-15T22:15:21.897 [DEBUG] [Thread-212127] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:15:21.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:15:21.995 [DEBUG] [Thread-212130] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3b0
2026-02-15T22:15:21.995 [DEBUG] [Thread-212130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:15:22.009 [DEBUG] [Thread-212130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:15:22.010 [INFO] [Thread-212130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:15:22.017 [DEBUG] [Thread-212130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] client lang: <none>
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] server lang: <none>
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] kex follows: False
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] Compression: none
2026-02-15T22:15:22.018 [DEBUG] [Thread-212130] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:15:22.074 [DEBUG] [Thread-212130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:15:22.075 [DEBUG] [Thread-212130] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:15:22.075 [DEBUG] [Thread-212130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:15:22.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:15:22.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:15:22.130 [DEBUG] [Thread-212130] [transport.py] [_log()] userauth is OK
2026-02-15T22:15:22.130 [DEBUG] [Thread-212130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:15:22.131 [DEBUG] [Thread-212130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:15:22.131 [DEBUG] [Thread-212130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:15:22.131 [DEBUG] [Thread-212130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:15:22.149 [INFO] [Thread-212130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:15:22.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:15:22.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:15:22.954 [DEBUG] [Thread-212130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:15:22.954 [DEBUG] [Thread-212130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:15:23.005 [DEBUG] [Thread-212130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:15:23.006 [DEBUG] [Thread-212130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:15:23.018 [DEBUG] [Thread-212130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:15:23.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:15:23.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:15:23.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:15:23.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:15:23.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:15:23.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:15:23.062 [DEBUG] [Thread-212130] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:15:25.392 [DEBUG] [Thread-212132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:29.734 [DEBUG] [Thread-212133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:40.436 [DEBUG] [Thread-212134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:49.357 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:49.358 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:53.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:15:53.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:15:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:15:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 15, 11), 13.03, 41.62, 0.0, 25.92, 15.7, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:15:55.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:15:11
2026-02-15T22:15:55.471 [DEBUG] [Thread-212135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:15:55.822 [DEBUG] [Thread-212136] [transport.py] [_log()] starting thread (client mode): 0xa2d05f00
2026-02-15T22:15:55.822 [DEBUG] [Thread-212136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:15:55.842 [DEBUG] [Thread-212136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:15:55.842 [INFO] [Thread-212136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:15:55.845 [DEBUG] [Thread-212136] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] client lang: <none>
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] server lang: <none>
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] kex follows: False
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] Compression: none
2026-02-15T22:15:55.846 [DEBUG] [Thread-212136] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:15:55.866 [DEBUG] [Thread-212136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:15:55.866 [DEBUG] [Thread-212136] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:15:55.867 [DEBUG] [Thread-212136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:15:55.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:15:55.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:15:55.870 [DEBUG] [Thread-212136] [transport.py] [_log()] userauth is OK
2026-02-15T22:15:55.871 [DEBUG] [Thread-212136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:15:55.871 [DEBUG] [Thread-212136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:15:55.871 [DEBUG] [Thread-212136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:15:55.871 [DEBUG] [Thread-212136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:15:55.891 [INFO] [Thread-212136] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:15:55.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:15:56.344 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:15:56.516 [DEBUG] [Thread-212136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:15:56.516 [DEBUG] [Thread-212136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:15:56.516 [DEBUG] [Thread-212136] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:15:56.557 [DEBUG] [Thread-212136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:15:56.558 [DEBUG] [Thread-212136] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:15:56.561 [DEBUG] [Thread-212136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:15:56.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:15:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:15:56.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:15:56.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:15:56.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:15:56.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:15:56.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:15:56.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:15:56.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:15:56.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.843852 -999.00  +15.50  21.61     46   +4.20 1 1 1 1 1     0    0 9.08 -93.42 ZNESW 20.5 21.6 160.7 25.4 15.9 -25.0 15.8 -23.8 15.6 -22.7 15.8 -23.9
2026-02-15T22:15:56.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:15:56.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:15:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.843852
2026-02-15T22:15:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:15:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:15:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:15:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:15:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:15:56.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:15:11', tmtdew=13.03, humidity=41.62, cloud=0.0, wind=25.92, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:15:48', seeing=1.58, atlas_timestamp='2026-02-15T20:15:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:12:00')
2026-02-15T22:15:56.587 [DEBUG] [Thread-212136] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:15:56.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:15:56.685 [DEBUG] [Thread-212139] [transport.py] [_log()] starting thread (client mode): 0xa2d7a3e0
2026-02-15T22:15:56.685 [DEBUG] [Thread-212139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:15:56.699 [DEBUG] [Thread-212139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:15:56.700 [INFO] [Thread-212139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:15:56.707 [DEBUG] [Thread-212139] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:15:56.708 [DEBUG] [Thread-212139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:15:56.708 [DEBUG] [Thread-212139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:15:56.708 [DEBUG] [Thread-212139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:56.708 [DEBUG] [Thread-212139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] client lang: <none>
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] server lang: <none>
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] kex follows: False
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] Compression: none
2026-02-15T22:15:56.709 [DEBUG] [Thread-212139] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:15:56.766 [DEBUG] [Thread-212139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:15:56.767 [DEBUG] [Thread-212139] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:15:56.767 [DEBUG] [Thread-212139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:15:56.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:15:56.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:15:56.824 [DEBUG] [Thread-212139] [transport.py] [_log()] userauth is OK
2026-02-15T22:15:56.824 [DEBUG] [Thread-212139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:15:56.824 [DEBUG] [Thread-212139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:15:56.824 [DEBUG] [Thread-212139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:15:56.824 [DEBUG] [Thread-212139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:15:56.838 [INFO] [Thread-212139] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:15:56.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:15:56.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:15:57.668 [DEBUG] [Thread-212139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:15:57.668 [DEBUG] [Thread-212139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:15:57.716 [DEBUG] [Thread-212139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:15:57.717 [DEBUG] [Thread-212139] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:15:57.726 [DEBUG] [Thread-212139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:15:57.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:15: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')
2026-02-15T22:15:57.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:15:57.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:15:57.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:15:57.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:15:57.762 [DEBUG] [Thread-212139] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:16:01.693 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:04.852 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:09.913 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:10.510 [DEBUG] [Thread-212141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:15.287 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:25.561 [DEBUG] [Thread-212142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:27.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:16:27.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:16:27.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:16:29.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 15, 47), 12.95, 41.67, 0.0, 27.24, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:16:29.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:15:47
2026-02-15T22:16:29.799 [DEBUG] [Thread-212143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:30.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:16:30.232 [DEBUG] [Thread-212144] [transport.py] [_log()] starting thread (client mode): 0xa57c3700
2026-02-15T22:16:30.232 [DEBUG] [Thread-212144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:16:30.249 [DEBUG] [Thread-212144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:16:30.249 [INFO] [Thread-212144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:16:30.251 [DEBUG] [Thread-212144] [transport.py] [_log()] client lang: <none>
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] server lang: <none>
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] kex follows: False
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] Compression: none
2026-02-15T22:16:30.252 [DEBUG] [Thread-212144] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:16:30.265 [DEBUG] [Thread-212144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:16:30.265 [DEBUG] [Thread-212144] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:16:30.266 [DEBUG] [Thread-212144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:16:30.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:16:30.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:16:30.267 [DEBUG] [Thread-212144] [transport.py] [_log()] userauth is OK
2026-02-15T22:16:30.267 [DEBUG] [Thread-212144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:16:30.268 [DEBUG] [Thread-212144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:16:30.268 [DEBUG] [Thread-212144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:16:30.268 [DEBUG] [Thread-212144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:16:30.286 [INFO] [Thread-212144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:16:30.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:16:30.946 [DEBUG] [Thread-212144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:16:30.946 [DEBUG] [Thread-212144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:16:30.947 [DEBUG] [Thread-212144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:16:30.988 [DEBUG] [Thread-212144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:16:30.988 [DEBUG] [Thread-212144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:16:30.991 [DEBUG] [Thread-212144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:16:31.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:16:31.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:16:31.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:16:31.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:16:31.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:16:31.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:16:31.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:16:31.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:16:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:16:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.844200 -999.00  +15.50  23.80     46   +4.20 1 1 1 1 1     0    0 8.98 -97.67 ZNESW 21.8 23.8 141.0 28.2 15.8 -25.0 15.7 -23.9 15.5 -22.7 15.8 -24.1
2026-02-15T22:16:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:16:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:16:31.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.844200
2026-02-15T22:16:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:16:31.019 [DEBUG] [Thread-212144] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:16:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:16:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:16:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:16:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:16:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:15:47', tmtdew=12.95, humidity=41.67, cloud=0.0, wind=27.24, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:16:23', seeing=1.67, atlas_timestamp='2026-02-15T20:15:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:12:00')
2026-02-15T22:16:31.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:16:31.128 [DEBUG] [Thread-212147] [transport.py] [_log()] starting thread (client mode): 0xa2db4df0
2026-02-15T22:16:31.129 [DEBUG] [Thread-212147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:16:31.143 [DEBUG] [Thread-212147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:16:31.144 [INFO] [Thread-212147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] client lang: <none>
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] server lang: <none>
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] kex follows: False
2026-02-15T22:16:31.153 [DEBUG] [Thread-212147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:16:31.154 [DEBUG] [Thread-212147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:16:31.154 [DEBUG] [Thread-212147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:16:31.154 [DEBUG] [Thread-212147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:16:31.154 [DEBUG] [Thread-212147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:16:31.154 [DEBUG] [Thread-212147] [transport.py] [_log()] Compression: none
2026-02-15T22:16:31.154 [DEBUG] [Thread-212147] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:16:31.210 [DEBUG] [Thread-212147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:16:31.211 [DEBUG] [Thread-212147] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:16:31.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:16:31.212 [DEBUG] [Thread-212147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:16:31.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:16:31.266 [DEBUG] [Thread-212147] [transport.py] [_log()] userauth is OK
2026-02-15T22:16:31.267 [DEBUG] [Thread-212147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:16:31.267 [DEBUG] [Thread-212147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:16:31.267 [DEBUG] [Thread-212147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:16:31.267 [DEBUG] [Thread-212147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:16:31.291 [INFO] [Thread-212147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:16:31.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:16:31.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:16:32.184 [DEBUG] [Thread-212147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:16:32.185 [DEBUG] [Thread-212147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:16:32.234 [DEBUG] [Thread-212147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:16:32.235 [DEBUG] [Thread-212147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:16:32.245 [DEBUG] [Thread-212147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:16:32.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:16:32.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:16:32.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:16:32.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:16:32.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:16:32.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:16:32.285 [DEBUG] [Thread-212147] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:16:34.732 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:39.103 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:40.599 [DEBUG] [Thread-212149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:49.562 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:49.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:55.657 [DEBUG] [Thread-212150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:16:58.547 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:02.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:17:02.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:17:02.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:17:02.907 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 16, 23), 12.95, 41.68, 0.0, 28.02, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:17:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:16:23
2026-02-15T22:17:04.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:17:05.052 [DEBUG] [Thread-212151] [transport.py] [_log()] starting thread (client mode): 0xa57c3d60
2026-02-15T22:17:05.052 [DEBUG] [Thread-212151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:17:05.072 [DEBUG] [Thread-212151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:17:05.072 [INFO] [Thread-212151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:05.075 [DEBUG] [Thread-212151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] client lang: <none>
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] server lang: <none>
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] kex follows: False
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] Compression: none
2026-02-15T22:17:05.076 [DEBUG] [Thread-212151] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:17:05.091 [DEBUG] [Thread-212151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:17:05.091 [DEBUG] [Thread-212151] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:17:05.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:17:05.092 [DEBUG] [Thread-212151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:17:05.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:17:05.133 [DEBUG] [Thread-212151] [transport.py] [_log()] userauth is OK
2026-02-15T22:17:05.133 [DEBUG] [Thread-212151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:17:05.134 [DEBUG] [Thread-212151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:17:05.134 [DEBUG] [Thread-212151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:17:05.134 [DEBUG] [Thread-212151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:17:05.166 [INFO] [Thread-212151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:17:05.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:17:05.804 [DEBUG] [Thread-212151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:17:05.805 [DEBUG] [Thread-212151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:17:05.805 [DEBUG] [Thread-212151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:17:05.846 [DEBUG] [Thread-212151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:17:05.846 [DEBUG] [Thread-212151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:17:05.849 [DEBUG] [Thread-212151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:17:05.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:17:05.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:17:05.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:17:05.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:17:05.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:17:05.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:17:05.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:17:05.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:17:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:17:05.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.844547 -999.00  +15.50  18.17     47   +4.20 1 1 1 1 1     0    0 8.98 -102.03 ZNESW 23.6 18.2 150.8 26.2 15.9 -25.1 15.7 -23.8 15.5 -22.7 15.8 -24.1
2026-02-15T22:17:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:17:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:17:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.844547
2026-02-15T22:17:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:17:05.883 [DEBUG] [Thread-212151] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:17:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:17:05.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:17:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:17:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:17:05.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:16:23', tmtdew=12.95, humidity=41.68, cloud=0.0, wind=28.02, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:16:58', seeing=1.78, atlas_timestamp='2026-02-15T20:16:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.03074999999999939, 0.006249999999999645, -0.010500000000000398, 0.028499999999999304, -0.004749999999999588, -0.030000000000001137, 0.00575000000000081, 0.010499999999998622, -0.0039999999999995595, -0.0017500000000012506, 0.012000000000000455, 0.04550000000000054, 0.04324999999999868, -0.034000000000000696, 0.006999999999999673, 0.05224999999999902, 0.03599999999999959, -0.05250000000000021, 0.0012499999999988631, 0.08699999999999797, 0.021749999999999048, -0.01974999999999838, -0.01774999999999949, 0.02499999999999858, 0.059499999999999886, 0.00575000000000081, -0.023999999999999133, 0.05000000000000071, 0.0070000000000014495, 0.014000000000001123, 0.012000000000000455, 0.01574999999999882], zp_timestamp='2026-02-15T20:12:00')
2026-02-15T22:17:05.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:17:05.984 [DEBUG] [Thread-212154] [transport.py] [_log()] starting thread (client mode): 0xa57c15d0
2026-02-15T22:17:05.984 [DEBUG] [Thread-212154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:17:06.001 [DEBUG] [Thread-212154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:17:06.001 [INFO] [Thread-212154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] client lang: <none>
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] server lang: <none>
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] kex follows: False
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:17:06.009 [DEBUG] [Thread-212154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:17:06.010 [DEBUG] [Thread-212154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:17:06.010 [DEBUG] [Thread-212154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:17:06.010 [DEBUG] [Thread-212154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:17:06.010 [DEBUG] [Thread-212154] [transport.py] [_log()] Compression: none
2026-02-15T22:17:06.010 [DEBUG] [Thread-212154] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:17:06.067 [DEBUG] [Thread-212154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:17:06.068 [DEBUG] [Thread-212154] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:17:06.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:17:06.079 [DEBUG] [Thread-212154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:17:06.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:17:06.126 [DEBUG] [Thread-212154] [transport.py] [_log()] userauth is OK
2026-02-15T22:17:06.127 [DEBUG] [Thread-212154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:17:06.127 [DEBUG] [Thread-212154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:17:06.127 [DEBUG] [Thread-212154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:17:06.127 [DEBUG] [Thread-212154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:17:06.154 [INFO] [Thread-212154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:17:06.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:17:06.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:17:07.006 [DEBUG] [Thread-212154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:17:07.006 [DEBUG] [Thread-212154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:17:07.054 [DEBUG] [Thread-212154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:17:07.055 [DEBUG] [Thread-212154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:17:07.064 [DEBUG] [Thread-212154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:17:07.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:17:07.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:17:07.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:17:07.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:17:07.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:17:07.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:17:07.107 [DEBUG] [Thread-212154] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:17:09.061 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:10.694 [DEBUG] [Thread-212156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:13.436 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:25.748 [DEBUG] [Thread-212157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:29.822 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:29.859 [DEBUG] [Thread-212158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:37.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:17:37.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:17:37.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:17:39.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 16, 58), 12.9, 41.68, 0.0, 25.62, 15.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:17:39.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:16:58
2026-02-15T22:17:40.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:17:40.390 [DEBUG] [Thread-212159] [transport.py] [_log()] starting thread (client mode): 0xa2d78160
2026-02-15T22:17:40.390 [DEBUG] [Thread-212159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:17:40.410 [DEBUG] [Thread-212159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:17:40.410 [INFO] [Thread-212159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:17:40.413 [DEBUG] [Thread-212159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:17:40.413 [DEBUG] [Thread-212159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:17:40.413 [DEBUG] [Thread-212159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] client lang: <none>
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] server lang: <none>
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] kex follows: False
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] Compression: none
2026-02-15T22:17:40.414 [DEBUG] [Thread-212159] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:17:40.431 [DEBUG] [Thread-212159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:17:40.432 [DEBUG] [Thread-212159] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:17:40.432 [DEBUG] [Thread-212159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:17:40.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:17:40.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:17:40.434 [DEBUG] [Thread-212159] [transport.py] [_log()] userauth is OK
2026-02-15T22:17:40.435 [DEBUG] [Thread-212159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:17:40.435 [DEBUG] [Thread-212159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:17:40.435 [DEBUG] [Thread-212159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:17:40.435 [DEBUG] [Thread-212159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:17:40.457 [INFO] [Thread-212159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:17:40.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:17:40.780 [DEBUG] [Thread-212161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:41.088 [DEBUG] [Thread-212159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:17:41.088 [DEBUG] [Thread-212159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:17:41.089 [DEBUG] [Thread-212159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:17:41.129 [DEBUG] [Thread-212159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:17:41.129 [DEBUG] [Thread-212159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:17:41.132 [DEBUG] [Thread-212159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:17:41.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:17:41.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:17:41.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:17:41.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:17:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:17:41.153 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:17:41.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:17:41.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:17:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:17:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.844894 -999.00  +15.50  23.23     47   +4.30 1 1 1 1 1     0    0 8.89 -91.70 ZNESW 21.6 23.2 142.6 31.2 15.8 -24.9 15.7 -23.8 15.5 -22.6 15.8 -24.1
2026-02-15T22:17:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:17:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:17:41.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.844894
2026-02-15T22:17:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:17:41.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:17:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:17:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:17:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:17:41.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:16:58', tmtdew=12.9, humidity=41.68, cloud=0.0, wind=25.62, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:17:34', seeing=1.63, atlas_timestamp='2026-02-15T20:16:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.05074999999999896, -0.007250000000000867, -0.01750000000000007, 0.03850000000000087, 0.009250000000001535, 0.004499999999998394, -0.00274999999999892, 0.0259999999999998, 0.02149999999999963, -0.017750000000001265, 0.044500000000001094, 0.03849999999999909, 0.004249999999998977, -0.008500000000001506, 0.017999999999998906, 0.03125, 0.0389999999999997, -0.02000000000000135, -0.01875000000000071, 0.07699999999999818, 0.03274999999999828, -0.008749999999999147, -0.017750000000001265, 0.06299999999999883, 0.08949999999999925, 0.015249999999999986, -0.005499999999999616, 0.08450000000000024, 0.08250000000000135, 0.07500000000000107, 0.01950000000000074, 0.012750000000000483], zp_timestamp='2026-02-15T20:16:00')
2026-02-15T22:17:41.156 [DEBUG] [Thread-212159] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:17:41.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:17:41.257 [DEBUG] [Thread-212163] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T22:17:41.257 [DEBUG] [Thread-212163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:17:41.271 [DEBUG] [Thread-212163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:17:41.271 [INFO] [Thread-212163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:41.279 [DEBUG] [Thread-212163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] client lang: <none>
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] server lang: <none>
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] kex follows: False
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] Compression: none
2026-02-15T22:17:41.280 [DEBUG] [Thread-212163] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:17:41.338 [DEBUG] [Thread-212163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:17:41.339 [DEBUG] [Thread-212163] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:17:41.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:17:41.340 [DEBUG] [Thread-212163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:17:41.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:17:41.394 [DEBUG] [Thread-212163] [transport.py] [_log()] userauth is OK
2026-02-15T22:17:41.395 [DEBUG] [Thread-212163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:17:41.395 [DEBUG] [Thread-212163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:17:41.395 [DEBUG] [Thread-212163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:17:41.395 [DEBUG] [Thread-212163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:17:41.414 [INFO] [Thread-212163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:17:41.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:17:41.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:17:42.231 [DEBUG] [Thread-212163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:17:42.232 [DEBUG] [Thread-212163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:17:42.280 [DEBUG] [Thread-212163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:17:42.280 [DEBUG] [Thread-212163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:17:42.291 [DEBUG] [Thread-212163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:17:42.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:17:42.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:17:42.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:17:42.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:17:42.322 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:17:42.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:17:42.331 [DEBUG] [Thread-212163] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:17:49.765 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:49.766 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:17:55.817 [DEBUG] [Thread-212165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:10.866 [DEBUG] [Thread-212166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:12.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:18:12.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:18:12.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:18:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 17, 34), 13.01, 41.63, 0.0, 32.18, 15.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:18:14.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:17:34
2026-02-15T22:18:14.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:18:14.954 [DEBUG] [Thread-212167] [transport.py] [_log()] starting thread (client mode): 0xa2d07ac0
2026-02-15T22:18:14.955 [DEBUG] [Thread-212167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:18:14.969 [DEBUG] [Thread-212167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:18:14.970 [INFO] [Thread-212167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] client lang: <none>
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] server lang: <none>
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] kex follows: False
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] Compression: none
2026-02-15T22:18:14.973 [DEBUG] [Thread-212167] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:18:14.983 [DEBUG] [Thread-212167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:18:14.983 [DEBUG] [Thread-212167] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:18:14.983 [DEBUG] [Thread-212167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:18:14.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:18:14.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:18:14.984 [DEBUG] [Thread-212167] [transport.py] [_log()] userauth is OK
2026-02-15T22:18:14.985 [DEBUG] [Thread-212167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:18:14.985 [DEBUG] [Thread-212167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:18:14.985 [DEBUG] [Thread-212167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:18:14.985 [DEBUG] [Thread-212167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:18:14.998 [INFO] [Thread-212167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:18:14.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:18:15.741 [DEBUG] [Thread-212167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:18:15.741 [DEBUG] [Thread-212167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:18:15.741 [DEBUG] [Thread-212167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:18:15.782 [DEBUG] [Thread-212167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:18:15.782 [DEBUG] [Thread-212167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:18:15.784 [DEBUG] [Thread-212167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:18:15.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:18:15.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:18:15.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:18:15.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:18:15.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:18:15.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:18:15.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:18:15.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:18:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:18:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.845589 -999.00  +15.50  25.81     47   +4.40 1 1 1 1 1     0    0 9.41 -85.46 ZNESW 21.6 25.8 144.8 33.9 15.8 -24.9 15.7 -23.8 15.5 -22.5 15.8 -24.0
2026-02-15T22:18:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:18:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:18:15.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.845589
2026-02-15T22:18:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:18:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:18:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:18:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:18:15.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:18:15.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:17:34', tmtdew=13.01, humidity=41.63, cloud=0.0, wind=32.18, temperature=15.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:17:34', seeing=1.63, atlas_timestamp='2026-02-15T20:17:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.05074999999999896, -0.007250000000000867, -0.01750000000000007, 0.03850000000000087, 0.009250000000001535, 0.004499999999998394, -0.00274999999999892, 0.0259999999999998, 0.02149999999999963, -0.017750000000001265, 0.044500000000001094, 0.03849999999999909, 0.004249999999998977, -0.008500000000001506, 0.017999999999998906, 0.03125, 0.0389999999999997, -0.02000000000000135, -0.01875000000000071, 0.07699999999999818, 0.03274999999999828, -0.008749999999999147, -0.017750000000001265, 0.06299999999999883, 0.08949999999999925, 0.015249999999999986, -0.005499999999999616, 0.08450000000000024, 0.08250000000000135, 0.07500000000000107, 0.01950000000000074, 0.012750000000000483], zp_timestamp='2026-02-15T20:16:00')
2026-02-15T22:18:15.809 [DEBUG] [Thread-212167] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:18:15.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:18:15.905 [DEBUG] [Thread-212170] [transport.py] [_log()] starting thread (client mode): 0xa57c1390
2026-02-15T22:18:15.905 [DEBUG] [Thread-212170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:18:15.920 [DEBUG] [Thread-212170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:18:15.920 [INFO] [Thread-212170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:18:15.929 [DEBUG] [Thread-212170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:18:15.929 [DEBUG] [Thread-212170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] client lang: <none>
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] server lang: <none>
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] kex follows: False
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:18:15.930 [DEBUG] [Thread-212170] [transport.py] [_log()] Compression: none
2026-02-15T22:18:15.931 [DEBUG] [Thread-212170] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:18:15.987 [DEBUG] [Thread-212170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:18:15.988 [DEBUG] [Thread-212170] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:18:15.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:18:15.989 [DEBUG] [Thread-212170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:18:15.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:18:16.046 [DEBUG] [Thread-212170] [transport.py] [_log()] userauth is OK
2026-02-15T22:18:16.047 [DEBUG] [Thread-212170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:18:16.047 [DEBUG] [Thread-212170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:18:16.047 [DEBUG] [Thread-212170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:18:16.047 [DEBUG] [Thread-212170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:18:16.065 [INFO] [Thread-212170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:18:16.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:18:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:18:16.930 [DEBUG] [Thread-212170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:18:16.930 [DEBUG] [Thread-212170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:18:16.979 [DEBUG] [Thread-212170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:18:16.979 [DEBUG] [Thread-212170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:18:16.988 [DEBUG] [Thread-212170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:18:16.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:18:16.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:18:17.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:18:17.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:18:17.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:18:17.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:18:17.025 [DEBUG] [Thread-212170] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:18:20.576 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:24.749 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:25.899 [DEBUG] [Thread-212172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:29.914 [DEBUG] [Thread-212173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:40.948 [DEBUG] [Thread-212174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:47.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:18:47.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:18:47.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:18:49.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 18, 10), 12.82, 41.9, 0.0, 28.0, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:18:49.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:18:10
2026-02-15T22:18:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:18:49.969 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:49.969 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:18:50.024 [DEBUG] [Thread-212175] [transport.py] [_log()] starting thread (client mode): 0xa2d12890
2026-02-15T22:18:50.024 [DEBUG] [Thread-212175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:18:50.044 [DEBUG] [Thread-212175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:18:50.044 [INFO] [Thread-212175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] client lang: <none>
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] server lang: <none>
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] kex follows: False
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] Compression: none
2026-02-15T22:18:50.046 [DEBUG] [Thread-212175] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:18:50.059 [DEBUG] [Thread-212175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:18:50.059 [DEBUG] [Thread-212175] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:18:50.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:18:50.060 [DEBUG] [Thread-212175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:18:50.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:18:50.063 [DEBUG] [Thread-212175] [transport.py] [_log()] userauth is OK
2026-02-15T22:18:50.063 [DEBUG] [Thread-212175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:18:50.063 [DEBUG] [Thread-212175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:18:50.063 [DEBUG] [Thread-212175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:18:50.063 [DEBUG] [Thread-212175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:18:50.088 [INFO] [Thread-212175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:18:50.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:18:50.754 [DEBUG] [Thread-212175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:18:50.755 [DEBUG] [Thread-212175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:18:50.755 [DEBUG] [Thread-212175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:18:50.795 [DEBUG] [Thread-212175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:18:50.796 [DEBUG] [Thread-212175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:18:50.799 [DEBUG] [Thread-212175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:18:50.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:18:50.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:18:50.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:18:50.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:18:50.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:18:50.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:18:50.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:18:50.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:18:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:18:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.845936 -999.00  +15.50  23.69     47   +4.40 1 1 1 1 1     0    0 9.39 -82.65 ZNESW 20.5 23.7 133.2 29.3 15.8 -24.8 15.7 -23.8 15.5 -22.7 15.8 -24.0
2026-02-15T22:18:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:18:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:18:50.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.845936
2026-02-15T22:18:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:18:50.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:18:50.828 [DEBUG] [Thread-212175] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:18:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:18:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:18:50.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:18:50.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:18:10', tmtdew=12.82, humidity=41.9, cloud=0.0, wind=28.0, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:18:12', seeing=1.71, atlas_timestamp='2026-02-15T20:18:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.05074999999999896, -0.007250000000000867, -0.01750000000000007, 0.03850000000000087, 0.009250000000001535, 0.004499999999998394, -0.00274999999999892, 0.0259999999999998, 0.02149999999999963, -0.017750000000001265, 0.044500000000001094, 0.03849999999999909, 0.004249999999998977, -0.008500000000001506, 0.017999999999998906, 0.03125, 0.0389999999999997, -0.02000000000000135, -0.01875000000000071, 0.07699999999999818, 0.03274999999999828, -0.008749999999999147, -0.017750000000001265, 0.06299999999999883, 0.08949999999999925, 0.015249999999999986, -0.005499999999999616, 0.08450000000000024, 0.08250000000000135, 0.07500000000000107, 0.01950000000000074, 0.012750000000000483], zp_timestamp='2026-02-15T20:16:00')
2026-02-15T22:18:50.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:18:50.924 [DEBUG] [Thread-212178] [transport.py] [_log()] starting thread (client mode): 0xa57c0040
2026-02-15T22:18:50.925 [DEBUG] [Thread-212178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:18:50.939 [DEBUG] [Thread-212178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:18:50.939 [INFO] [Thread-212178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:18:50.947 [DEBUG] [Thread-212178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:18:50.947 [DEBUG] [Thread-212178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:18:50.947 [DEBUG] [Thread-212178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:18:50.947 [DEBUG] [Thread-212178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:50.947 [DEBUG] [Thread-212178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] client lang: <none>
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] server lang: <none>
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] kex follows: False
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:18:50.948 [DEBUG] [Thread-212178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:18:50.949 [DEBUG] [Thread-212178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:18:50.949 [DEBUG] [Thread-212178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:18:50.949 [DEBUG] [Thread-212178] [transport.py] [_log()] Compression: none
2026-02-15T22:18:50.949 [DEBUG] [Thread-212178] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:18:51.009 [DEBUG] [Thread-212178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:18:51.010 [DEBUG] [Thread-212178] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:18:51.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:18:51.011 [DEBUG] [Thread-212178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:18:51.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:18:51.066 [DEBUG] [Thread-212178] [transport.py] [_log()] userauth is OK
2026-02-15T22:18:51.066 [DEBUG] [Thread-212178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:18:51.067 [DEBUG] [Thread-212178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:18:51.067 [DEBUG] [Thread-212178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:18:51.067 [DEBUG] [Thread-212178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:18:51.085 [INFO] [Thread-212178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:18:51.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:18:51.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:18:51.917 [DEBUG] [Thread-212178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:18:51.917 [DEBUG] [Thread-212178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:18:51.964 [DEBUG] [Thread-212178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:18:51.965 [DEBUG] [Thread-212178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:18:51.974 [DEBUG] [Thread-212178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:18:51.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:18:51.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:18:51.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:18:52.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:18:52.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:18:52.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:18:52.020 [DEBUG] [Thread-212178] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:18:55.984 [DEBUG] [Thread-212180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:03.614 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:11.048 [DEBUG] [Thread-212181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:22.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:19:22.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:19:22.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:19:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 18, 47), 12.81, 41.93, 0.0, 24.67, 15.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:19:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:18:47
2026-02-15T22:19:24.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:19:24.746 [DEBUG] [Thread-212182] [transport.py] [_log()] starting thread (client mode): 0xa2d6f3a0
2026-02-15T22:19:24.746 [DEBUG] [Thread-212182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:19:24.766 [DEBUG] [Thread-212182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:19:24.766 [INFO] [Thread-212182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:19:24.769 [DEBUG] [Thread-212182] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] client lang: <none>
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] server lang: <none>
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] kex follows: False
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:19:24.770 [DEBUG] [Thread-212182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:19:24.771 [DEBUG] [Thread-212182] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:19:24.771 [DEBUG] [Thread-212182] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:19:24.771 [DEBUG] [Thread-212182] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:19:24.771 [DEBUG] [Thread-212182] [transport.py] [_log()] Compression: none
2026-02-15T22:19:24.771 [DEBUG] [Thread-212182] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:19:24.788 [DEBUG] [Thread-212182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:19:24.789 [DEBUG] [Thread-212182] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:19:24.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:19:24.789 [DEBUG] [Thread-212182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:19:24.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:19:24.792 [DEBUG] [Thread-212182] [transport.py] [_log()] userauth is OK
2026-02-15T22:19:24.792 [DEBUG] [Thread-212182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:19:24.792 [DEBUG] [Thread-212182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:19:24.792 [DEBUG] [Thread-212182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:19:24.792 [DEBUG] [Thread-212182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:19:24.826 [INFO] [Thread-212182] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:19:24.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:19:25.476 [DEBUG] [Thread-212182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:19:25.476 [DEBUG] [Thread-212182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:19:25.476 [DEBUG] [Thread-212182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:19:25.517 [DEBUG] [Thread-212182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:19:25.517 [DEBUG] [Thread-212182] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:19:25.519 [DEBUG] [Thread-212182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:19:25.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:19:25.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:19:25.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:19:25.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:19:25.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:19:25.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:19:25.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:19:25.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:19:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:19:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.846283 -999.00  +15.50  19.08     47   +4.30 1 1 1 1 1     0    0 9.03 -82.25 ZNESW 18.6 19.1 139.0 26.8 15.8 -24.9 15.7 -23.8 15.4 -22.6 15.8 -24.1
2026-02-15T22:19:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:19:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:19:25.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.846283
2026-02-15T22:19:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:19:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:19:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:19:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:19:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:19:25.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:18:47', tmtdew=12.81, humidity=41.93, cloud=0.0, wind=24.67, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:18:47', seeing=1.67, atlas_timestamp='2026-02-15T20:18:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.05074999999999896, -0.007250000000000867, -0.01750000000000007, 0.03850000000000087, 0.009250000000001535, 0.004499999999998394, -0.00274999999999892, 0.0259999999999998, 0.02149999999999963, -0.017750000000001265, 0.044500000000001094, 0.03849999999999909, 0.004249999999998977, -0.008500000000001506, 0.017999999999998906, 0.03125, 0.0389999999999997, -0.02000000000000135, -0.01875000000000071, 0.07699999999999818, 0.03274999999999828, -0.008749999999999147, -0.017750000000001265, 0.06299999999999883, 0.08949999999999925, 0.015249999999999986, -0.005499999999999616, 0.08450000000000024, 0.08250000000000135, 0.07500000000000107, 0.01950000000000074, 0.012750000000000483], zp_timestamp='2026-02-15T20:16:00')
2026-02-15T22:19:25.537 [DEBUG] [Thread-212182] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:19:25.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:19:25.618 [DEBUG] [Thread-212185] [transport.py] [_log()] starting thread (client mode): 0xa2d543d0
2026-02-15T22:19:25.618 [DEBUG] [Thread-212185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:19:25.632 [DEBUG] [Thread-212185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:19:25.632 [INFO] [Thread-212185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] client lang: <none>
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] server lang: <none>
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] kex follows: False
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:19:25.640 [DEBUG] [Thread-212185] [transport.py] [_log()] Compression: none
2026-02-15T22:19:25.641 [DEBUG] [Thread-212185] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:19:25.697 [DEBUG] [Thread-212185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:19:25.697 [DEBUG] [Thread-212185] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:19:25.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:19:25.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:19:25.697 [DEBUG] [Thread-212185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:19:25.754 [DEBUG] [Thread-212185] [transport.py] [_log()] userauth is OK
2026-02-15T22:19:25.754 [DEBUG] [Thread-212185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:19:25.754 [DEBUG] [Thread-212185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:19:25.754 [DEBUG] [Thread-212185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:19:25.754 [DEBUG] [Thread-212185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:19:25.768 [INFO] [Thread-212185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:19:25.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:19:25.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:19:26.079 [DEBUG] [Thread-212187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:26.612 [DEBUG] [Thread-212185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:19:26.612 [DEBUG] [Thread-212185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:19:26.660 [DEBUG] [Thread-212185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:19:26.660 [DEBUG] [Thread-212185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:19:26.669 [DEBUG] [Thread-212185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:19:26.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:19:26.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:19:26.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:19:26.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:19:26.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:19:26.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:19:26.708 [DEBUG] [Thread-212185] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:19:29.978 [DEBUG] [Thread-212188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:41.122 [DEBUG] [Thread-212189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:50.170 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:50.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:56.159 [DEBUG] [Thread-212190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:19:56.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:19:56.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:19:56.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:19:58.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 19, 23), 12.82, 41.92, 0.0, 25.53, 15.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:19:58.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:19:23
2026-02-15T22:19:59.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:19:59.238 [DEBUG] [Thread-212191] [transport.py] [_log()] starting thread (client mode): 0xa2d78400
2026-02-15T22:19:59.238 [DEBUG] [Thread-212191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:19:59.258 [DEBUG] [Thread-212191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:19:59.259 [INFO] [Thread-212191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:19:59.262 [DEBUG] [Thread-212191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] client lang: <none>
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] server lang: <none>
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] kex follows: False
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] Compression: none
2026-02-15T22:19:59.263 [DEBUG] [Thread-212191] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:19:59.282 [DEBUG] [Thread-212191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:19:59.283 [DEBUG] [Thread-212191] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:19:59.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:19:59.284 [DEBUG] [Thread-212191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:19:59.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:19:59.286 [DEBUG] [Thread-212191] [transport.py] [_log()] userauth is OK
2026-02-15T22:19:59.287 [DEBUG] [Thread-212191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:19:59.287 [DEBUG] [Thread-212191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:19:59.287 [DEBUG] [Thread-212191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:19:59.287 [DEBUG] [Thread-212191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:19:59.312 [INFO] [Thread-212191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:19:59.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:19:59.957 [DEBUG] [Thread-212191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:19:59.958 [DEBUG] [Thread-212191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:19:59.958 [DEBUG] [Thread-212191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:19:59.998 [DEBUG] [Thread-212191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:19:59.999 [DEBUG] [Thread-212191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:20:00.002 [DEBUG] [Thread-212191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:20:00.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:20:00.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:20:00.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:20:00.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:20:00.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:20:00.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:20:00.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:20:00.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:20:00.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.846631 -999.00  +15.50  18.48     47   +4.40 1 1 1 1 1     0    0 9.59 -71.96 ZNESW 25.9 18.5 145.2 30.9 15.8 -24.9 15.7 -23.9 15.5 -22.6 15.8 -24.0
2026-02-15T22:20:00.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:20:00.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:20:00.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.846631
2026-02-15T22:20:00.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:20:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:20:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:20:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:20:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:20:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:19:23', tmtdew=12.82, humidity=41.92, cloud=0.0, wind=25.53, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:19:24', seeing=1.92, atlas_timestamp='2026-02-15T20:19:08.918', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, -0.05074999999999896, -0.007250000000000867, -0.01750000000000007, 0.03850000000000087, 0.009250000000001535, 0.004499999999998394, -0.00274999999999892, 0.0259999999999998, 0.02149999999999963, -0.017750000000001265, 0.044500000000001094, 0.03849999999999909, 0.004249999999998977, -0.008500000000001506, 0.017999999999998906, 0.03125, 0.0389999999999997, -0.02000000000000135, -0.01875000000000071, 0.07699999999999818, 0.03274999999999828, -0.008749999999999147, -0.017750000000001265, 0.06299999999999883, 0.08949999999999925, 0.015249999999999986, -0.005499999999999616, 0.08450000000000024, 0.08250000000000135, 0.07500000000000107, 0.01950000000000074, 0.012750000000000483], zp_timestamp='2026-02-15T20:16:00')
2026-02-15T22:20:00.025 [DEBUG] [Thread-212191] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:20:00.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:20:00.124 [DEBUG] [Thread-212194] [transport.py] [_log()] starting thread (client mode): 0xa57c05e0
2026-02-15T22:20:00.125 [DEBUG] [Thread-212194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:20:00.138 [DEBUG] [Thread-212194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:20:00.138 [INFO] [Thread-212194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:20:00.146 [DEBUG] [Thread-212194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:20:00.146 [DEBUG] [Thread-212194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] client lang: <none>
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] server lang: <none>
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] kex follows: False
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:20:00.147 [DEBUG] [Thread-212194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:20:00.148 [DEBUG] [Thread-212194] [transport.py] [_log()] Compression: none
2026-02-15T22:20:00.148 [DEBUG] [Thread-212194] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:20:00.206 [DEBUG] [Thread-212194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:20:00.207 [DEBUG] [Thread-212194] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:20:00.207 [DEBUG] [Thread-212194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:20:00.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:20:00.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:20:00.262 [DEBUG] [Thread-212194] [transport.py] [_log()] userauth is OK
2026-02-15T22:20:00.262 [DEBUG] [Thread-212194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:20:00.262 [DEBUG] [Thread-212194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:20:00.262 [DEBUG] [Thread-212194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:20:00.262 [DEBUG] [Thread-212194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:20:00.281 [INFO] [Thread-212194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:20:00.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:20:00.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:20:01.084 [DEBUG] [Thread-212194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:20:01.084 [DEBUG] [Thread-212194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:20:01.132 [DEBUG] [Thread-212194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:20:01.132 [DEBUG] [Thread-212194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:20:01.140 [DEBUG] [Thread-212194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:20:01.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:20:01.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:20:01.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:20:01.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:20:01.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:20:01.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:20:01.171 [DEBUG] [Thread-212194] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:20:11.195 [DEBUG] [Thread-212196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:26.247 [DEBUG] [Thread-212197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:30.044 [DEBUG] [Thread-212198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:31.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:20:31.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:20:31.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:20:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 19, 59), 12.72, 42.55, 0.0, 29.2, 15.53, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:20:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:19:59
2026-02-15T22:20:33.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:20:33.621 [DEBUG] [Thread-212199] [transport.py] [_log()] starting thread (client mode): 0xa2d6c280
2026-02-15T22:20:33.621 [DEBUG] [Thread-212199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:20:33.637 [DEBUG] [Thread-212199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:20:33.637 [INFO] [Thread-212199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:20:33.639 [DEBUG] [Thread-212199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] client lang: <none>
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] server lang: <none>
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] kex follows: False
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] Compression: none
2026-02-15T22:20:33.640 [DEBUG] [Thread-212199] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:20:33.657 [DEBUG] [Thread-212199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:20:33.658 [DEBUG] [Thread-212199] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:20:33.658 [DEBUG] [Thread-212199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:20:33.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:20:33.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:20:33.660 [DEBUG] [Thread-212199] [transport.py] [_log()] userauth is OK
2026-02-15T22:20:33.660 [DEBUG] [Thread-212199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:20:33.661 [DEBUG] [Thread-212199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:20:33.661 [DEBUG] [Thread-212199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:20:33.661 [DEBUG] [Thread-212199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:20:33.685 [INFO] [Thread-212199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:20:33.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:20:34.284 [DEBUG] [Thread-212199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:20:34.284 [DEBUG] [Thread-212199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:20:34.285 [DEBUG] [Thread-212199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:20:34.325 [DEBUG] [Thread-212199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:20:34.325 [DEBUG] [Thread-212199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:20:34.327 [DEBUG] [Thread-212199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:20:34.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:20:34.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:20:34.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:20:34.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:20:34.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:20:34.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:20:34.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:20:34.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:20:34.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.846978 -999.00  +15.50  17.66     47   +4.30 1 1 1 1 1     0    0 9.81 -67.23 ZNESW 15.2 17.7 153.2 28.4 15.8 -24.9 15.6 -23.9 15.4 -22.8 15.7 -23.9
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.846978
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:20:34.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:19:59', tmtdew=12.72, humidity=42.55, cloud=0.0, wind=29.2, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:20:00', seeing=2.13, atlas_timestamp='2026-02-15T20:19:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:18:00')
2026-02-15T22:20:34.348 [DEBUG] [Thread-212199] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:20:34.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:20:34.431 [DEBUG] [Thread-212202] [transport.py] [_log()] starting thread (client mode): 0xa5773dc0
2026-02-15T22:20:34.431 [DEBUG] [Thread-212202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:20:34.445 [DEBUG] [Thread-212202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:20:34.445 [INFO] [Thread-212202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:20:34.453 [DEBUG] [Thread-212202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] client lang: <none>
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] server lang: <none>
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] kex follows: False
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] Compression: none
2026-02-15T22:20:34.454 [DEBUG] [Thread-212202] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:20:34.512 [DEBUG] [Thread-212202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:20:34.513 [DEBUG] [Thread-212202] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:20:34.513 [DEBUG] [Thread-212202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:20:34.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:20:34.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:20:34.570 [DEBUG] [Thread-212202] [transport.py] [_log()] userauth is OK
2026-02-15T22:20:34.571 [DEBUG] [Thread-212202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:20:34.571 [DEBUG] [Thread-212202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:20:34.571 [DEBUG] [Thread-212202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:20:34.571 [DEBUG] [Thread-212202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:20:34.590 [INFO] [Thread-212202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:20:34.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:20:34.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:20:35.429 [DEBUG] [Thread-212202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:20:35.429 [DEBUG] [Thread-212202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:20:35.478 [DEBUG] [Thread-212202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:20:35.478 [DEBUG] [Thread-212202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:20:35.487 [DEBUG] [Thread-212202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:20:35.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:20:35.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:20: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
2026-02-15T22:20:35.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:20:35.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:20:35.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:20:35.523 [DEBUG] [Thread-212202] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:20:37.622 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:41.279 [DEBUG] [Thread-212204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:50.374 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:50.375 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:20:56.337 [DEBUG] [Thread-212205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:05.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:21:05.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:21:05.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:21:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 20, 36), 12.89, 42.0, 0.0, 30.87, 15.93, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:21:07.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:20:36
2026-02-15T22:21:07.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:21:07.882 [DEBUG] [Thread-212206] [transport.py] [_log()] starting thread (client mode): 0xa5740dc0
2026-02-15T22:21:07.882 [DEBUG] [Thread-212206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:21:07.902 [DEBUG] [Thread-212206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:21:07.902 [INFO] [Thread-212206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:07.905 [DEBUG] [Thread-212206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] client lang: <none>
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] server lang: <none>
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] kex follows: False
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] Compression: none
2026-02-15T22:21:07.906 [DEBUG] [Thread-212206] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:21:07.925 [DEBUG] [Thread-212206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:21:07.926 [DEBUG] [Thread-212206] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:21:07.927 [DEBUG] [Thread-212206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:21:07.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:21:07.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:21:07.929 [DEBUG] [Thread-212206] [transport.py] [_log()] userauth is OK
2026-02-15T22:21:07.929 [DEBUG] [Thread-212206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:21:07.929 [DEBUG] [Thread-212206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:21:07.929 [DEBUG] [Thread-212206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:21:07.929 [DEBUG] [Thread-212206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:21:07.953 [INFO] [Thread-212206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:21:07.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:21:08.606 [DEBUG] [Thread-212206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:21:08.606 [DEBUG] [Thread-212206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:21:08.606 [DEBUG] [Thread-212206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:21:08.647 [DEBUG] [Thread-212206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:21:08.648 [DEBUG] [Thread-212206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:21:08.650 [DEBUG] [Thread-212206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:21:08.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:21:08.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:21:08.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:21:08.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:21:08.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:21:08.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:21:08.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:21:08.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:21:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:21:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.847672 -999.00  +15.40  19.97     47   +4.30 1 1 1 1 1     0    0 9.67 -68.16 ZNESW 21.0 20.0 148.6 25.2 15.8 -24.8 15.7 -23.8 15.4 -22.8 15.7 -24.0
2026-02-15T22:21:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:21:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:21:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.847672
2026-02-15T22:21:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:21:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:21:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:21:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:21:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:21:08.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:20:36', tmtdew=12.89, humidity=42.0, cloud=0.0, wind=30.87, temperature=15.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:20:36', seeing=1.93, atlas_timestamp='2026-02-15T20:20:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:18:00')
2026-02-15T22:21:08.677 [DEBUG] [Thread-212206] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:21:08.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:21:08.772 [DEBUG] [Thread-212209] [transport.py] [_log()] starting thread (client mode): 0xa57c1c30
2026-02-15T22:21:08.772 [DEBUG] [Thread-212209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:21:08.786 [DEBUG] [Thread-212209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:21:08.787 [INFO] [Thread-212209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] client lang: <none>
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] server lang: <none>
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] kex follows: False
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:21:08.794 [DEBUG] [Thread-212209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:21:08.795 [DEBUG] [Thread-212209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:21:08.795 [DEBUG] [Thread-212209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:21:08.795 [DEBUG] [Thread-212209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:21:08.795 [DEBUG] [Thread-212209] [transport.py] [_log()] Compression: none
2026-02-15T22:21:08.795 [DEBUG] [Thread-212209] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:21:08.854 [DEBUG] [Thread-212209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:21:08.855 [DEBUG] [Thread-212209] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:21:08.855 [DEBUG] [Thread-212209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:21:08.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:21:08.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:21:08.910 [DEBUG] [Thread-212209] [transport.py] [_log()] userauth is OK
2026-02-15T22:21:08.910 [DEBUG] [Thread-212209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:21:08.910 [DEBUG] [Thread-212209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:21:08.910 [DEBUG] [Thread-212209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:21:08.910 [DEBUG] [Thread-212209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:21:08.932 [INFO] [Thread-212209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:21:08.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:21:08.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:21:09.757 [DEBUG] [Thread-212209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:21:09.757 [DEBUG] [Thread-212209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:21:09.806 [DEBUG] [Thread-212209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:21:09.806 [DEBUG] [Thread-212209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:21:09.815 [DEBUG] [Thread-212209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:21:09.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:21:09.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:21:09.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:21:09.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:21:09.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:21:09.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:21:09.853 [DEBUG] [Thread-212209] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:21:11.373 [DEBUG] [Thread-212211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:26.422 [DEBUG] [Thread-212212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:30.101 [DEBUG] [Thread-212213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:39.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:21:39.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:21:39.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:21:41.455 [DEBUG] [Thread-212214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 21, 11), 12.66, 42.57, 0.0, 31.51, 15.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:21:42.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:21:11
2026-02-15T22:21:42.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:21:42.781 [DEBUG] [Thread-212215] [transport.py] [_log()] starting thread (client mode): 0xa2db5210
2026-02-15T22:21:42.781 [DEBUG] [Thread-212215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:21:42.802 [DEBUG] [Thread-212215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:21:42.802 [INFO] [Thread-212215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:21:42.805 [DEBUG] [Thread-212215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:21:42.805 [DEBUG] [Thread-212215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:21:42.805 [DEBUG] [Thread-212215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:21:42.805 [DEBUG] [Thread-212215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:42.805 [DEBUG] [Thread-212215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:42.805 [DEBUG] [Thread-212215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] client lang: <none>
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] server lang: <none>
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] kex follows: False
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] Compression: none
2026-02-15T22:21:42.806 [DEBUG] [Thread-212215] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:21:42.828 [DEBUG] [Thread-212215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:21:42.828 [DEBUG] [Thread-212215] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:21:42.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:21:42.829 [DEBUG] [Thread-212215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:21:42.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:21:42.832 [DEBUG] [Thread-212215] [transport.py] [_log()] userauth is OK
2026-02-15T22:21:42.832 [DEBUG] [Thread-212215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:21:42.832 [DEBUG] [Thread-212215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:21:42.832 [DEBUG] [Thread-212215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:21:42.833 [DEBUG] [Thread-212215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:21:42.867 [INFO] [Thread-212215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:21:42.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:21:43.525 [DEBUG] [Thread-212215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:21:43.526 [DEBUG] [Thread-212215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:21:43.526 [DEBUG] [Thread-212215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:21:43.566 [DEBUG] [Thread-212215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:21:43.567 [DEBUG] [Thread-212215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:21:43.570 [DEBUG] [Thread-212215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:21:43.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:21:43.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:21:43.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:21:43.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:21:43.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:21:43.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:21:43.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:21:43.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:21:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:21:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.848019 -999.00  +15.40  19.47     47   +4.30 1 1 1 1 1     0    0 9.52 -66.31 ZNESW 22.5 19.5 143.6 23.7 15.8 -24.9 15.7 -23.9 15.5 -22.7 15.8 -24.0
2026-02-15T22:21:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:21:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:21:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.848019
2026-02-15T22:21:43.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:21:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:21:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:21:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:21:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:21:43.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:21:11', tmtdew=12.66, humidity=42.57, cloud=0.0, wind=31.51, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:21:11', seeing=2.07, atlas_timestamp='2026-02-15T20:21:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:18:00')
2026-02-15T22:21:43.600 [DEBUG] [Thread-212215] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:21:43.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:21:43.696 [DEBUG] [Thread-212218] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T22:21:43.696 [DEBUG] [Thread-212218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:21:43.710 [DEBUG] [Thread-212218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:21:43.710 [INFO] [Thread-212218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:21:43.718 [DEBUG] [Thread-212218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:21:43.718 [DEBUG] [Thread-212218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] client lang: <none>
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] server lang: <none>
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] kex follows: False
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] Compression: none
2026-02-15T22:21:43.719 [DEBUG] [Thread-212218] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:21:43.778 [DEBUG] [Thread-212218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:21:43.779 [DEBUG] [Thread-212218] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:21:43.780 [DEBUG] [Thread-212218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:21:43.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:21:43.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:21:43.834 [DEBUG] [Thread-212218] [transport.py] [_log()] userauth is OK
2026-02-15T22:21:43.835 [DEBUG] [Thread-212218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:21:43.835 [DEBUG] [Thread-212218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:21:43.835 [DEBUG] [Thread-212218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:21:43.835 [DEBUG] [Thread-212218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:21:43.853 [INFO] [Thread-212218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:21:43.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:21:43.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:21:44.667 [DEBUG] [Thread-212218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:21:44.668 [DEBUG] [Thread-212218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:21:44.715 [DEBUG] [Thread-212218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:21:44.716 [DEBUG] [Thread-212218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:21:44.725 [DEBUG] [Thread-212218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:21:44.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:21:44.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:21:44.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:21:44.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:21:44.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:21:44.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:21:44.761 [DEBUG] [Thread-212218] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:21:50.575 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:50.577 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:21:56.493 [DEBUG] [Thread-212220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:11.060 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:11.546 [DEBUG] [Thread-212221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:14.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:22:14.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:22:14.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:22:16.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 21, 46), 12.66, 42.58, 0.0, 29.15, 15.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:22:16.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:21:46
2026-02-15T22:22:17.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:22:17.260 [DEBUG] [Thread-212222] [transport.py] [_log()] starting thread (client mode): 0xa5770460
2026-02-15T22:22:17.260 [DEBUG] [Thread-212222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:22:17.280 [DEBUG] [Thread-212222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:22:17.281 [INFO] [Thread-212222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:22:17.284 [DEBUG] [Thread-212222] [transport.py] [_log()] client lang: <none>
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] server lang: <none>
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] kex follows: False
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] Compression: none
2026-02-15T22:22:17.285 [DEBUG] [Thread-212222] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:22:17.303 [DEBUG] [Thread-212222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:22:17.303 [DEBUG] [Thread-212222] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:22:17.304 [DEBUG] [Thread-212222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:22:17.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:22:17.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:22:17.346 [DEBUG] [Thread-212222] [transport.py] [_log()] userauth is OK
2026-02-15T22:22:17.346 [DEBUG] [Thread-212222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:22:17.346 [DEBUG] [Thread-212222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:22:17.346 [DEBUG] [Thread-212222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:22:17.346 [DEBUG] [Thread-212222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:22:17.367 [INFO] [Thread-212222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:22:17.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:22:17.944 [DEBUG] [Thread-212222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:22:17.944 [DEBUG] [Thread-212222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:22:17.944 [DEBUG] [Thread-212222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:22:17.985 [DEBUG] [Thread-212222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:22:17.985 [DEBUG] [Thread-212222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:22:17.987 [DEBUG] [Thread-212222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:22:17.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:22:17.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:22:18.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:22:18.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:22:18.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:22:18.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:22:18.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.848367 -999.00  +15.40  19.75     47   +4.30 1 1 1 1 1     0    0 9.54 -69.49 ZNESW 16.5 19.8 144.0 29.6 15.8 -25.0 15.7 -23.9 15.4 -22.7 15.7 -24.0
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.848367
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:22:18.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:22:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:22:18.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:21:46', tmtdew=12.66, humidity=42.58, cloud=0.0, wind=29.15, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:21:46', seeing=2.03, atlas_timestamp='2026-02-15T20:21:38.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:18:00')
2026-02-15T22:22:18.005 [DEBUG] [Thread-212222] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:22:18.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:22:18.088 [DEBUG] [Thread-212225] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-15T22:22:18.088 [DEBUG] [Thread-212225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:22:18.103 [DEBUG] [Thread-212225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:22:18.103 [INFO] [Thread-212225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] client lang: <none>
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] server lang: <none>
2026-02-15T22:22:18.110 [DEBUG] [Thread-212225] [transport.py] [_log()] kex follows: False
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] Compression: none
2026-02-15T22:22:18.111 [DEBUG] [Thread-212225] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:22:18.169 [DEBUG] [Thread-212225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:22:18.169 [DEBUG] [Thread-212225] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:22:18.169 [DEBUG] [Thread-212225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:22:18.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:22:18.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:22:18.226 [DEBUG] [Thread-212225] [transport.py] [_log()] userauth is OK
2026-02-15T22:22:18.226 [DEBUG] [Thread-212225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:22:18.226 [DEBUG] [Thread-212225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:22:18.226 [DEBUG] [Thread-212225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:22:18.226 [DEBUG] [Thread-212225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:22:18.240 [INFO] [Thread-212225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:22:18.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:22:18.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:22:19.096 [DEBUG] [Thread-212225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:22:19.096 [DEBUG] [Thread-212225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:22:19.147 [DEBUG] [Thread-212225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:22:19.147 [DEBUG] [Thread-212225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:22:19.156 [DEBUG] [Thread-212225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:22:19.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:22:19.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:22:19.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:22:19.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:22:19.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:22:19.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:22:19.193 [DEBUG] [Thread-212225] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:22:26.584 [DEBUG] [Thread-212227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:30.179 [DEBUG] [Thread-212228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:41.645 [DEBUG] [Thread-212229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:22:49.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:22:49.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:22:50.778 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:50.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:22:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 22, 23), 12.68, 42.52, 0.0, 27.91, 15.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:22:51.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:22:23
2026-02-15T22:22:51.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:22:51.775 [DEBUG] [Thread-212230] [transport.py] [_log()] starting thread (client mode): 0xa5742560
2026-02-15T22:22:51.775 [DEBUG] [Thread-212230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:22:51.794 [DEBUG] [Thread-212230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:22:51.794 [INFO] [Thread-212230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] client lang: <none>
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] server lang: <none>
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] kex follows: False
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] Compression: none
2026-02-15T22:22:51.797 [DEBUG] [Thread-212230] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:22:51.812 [DEBUG] [Thread-212230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:22:51.812 [DEBUG] [Thread-212230] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:22:51.812 [DEBUG] [Thread-212230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:22:51.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:22:51.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:22:51.813 [DEBUG] [Thread-212230] [transport.py] [_log()] userauth is OK
2026-02-15T22:22:51.813 [DEBUG] [Thread-212230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:22:51.813 [DEBUG] [Thread-212230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:22:51.813 [DEBUG] [Thread-212230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:22:51.813 [DEBUG] [Thread-212230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:22:51.822 [INFO] [Thread-212230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:22:51.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:22:52.458 [DEBUG] [Thread-212230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:22:52.458 [DEBUG] [Thread-212230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:22:52.458 [DEBUG] [Thread-212230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:22:52.499 [DEBUG] [Thread-212230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:22:52.499 [DEBUG] [Thread-212230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:22:52.502 [DEBUG] [Thread-212230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:22:52.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:22:52.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:22:52.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:22:52.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:22:52.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:22:52.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:22:52.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:22:52.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:22:52.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:22:52.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.848714 -999.00  +15.40  18.17     47   +4.40 1 1 1 1 1     0    0 9.53 -69.55 ZNESW 18.3 18.2 150.4 27.8 15.7 -24.9 15.6 -23.9 15.4 -22.7 15.7 -23.9
2026-02-15T22:22:52.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:22:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:22:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.848714
2026-02-15T22:22:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:22:52.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:22:52.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:22:52.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:22:52.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:22:52.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:22:23', tmtdew=12.68, humidity=42.52, cloud=0.0, wind=27.91, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:22:23', seeing=1.69, atlas_timestamp='2026-02-15T20:22:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:18:00')
2026-02-15T22:22:52.527 [DEBUG] [Thread-212230] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:22:52.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:22:52.621 [DEBUG] [Thread-212233] [transport.py] [_log()] starting thread (client mode): 0xa2d56620
2026-02-15T22:22:52.621 [DEBUG] [Thread-212233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:22:52.635 [DEBUG] [Thread-212233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:22:52.635 [INFO] [Thread-212233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:22:52.643 [DEBUG] [Thread-212233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] client lang: <none>
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] server lang: <none>
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] kex follows: False
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:22:52.644 [DEBUG] [Thread-212233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:22:52.645 [DEBUG] [Thread-212233] [transport.py] [_log()] Compression: none
2026-02-15T22:22:52.645 [DEBUG] [Thread-212233] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:22:52.702 [DEBUG] [Thread-212233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:22:52.702 [DEBUG] [Thread-212233] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:22:52.703 [DEBUG] [Thread-212233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:22:52.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:22:52.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:22:52.758 [DEBUG] [Thread-212233] [transport.py] [_log()] userauth is OK
2026-02-15T22:22:52.758 [DEBUG] [Thread-212233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:22:52.758 [DEBUG] [Thread-212233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:22:52.758 [DEBUG] [Thread-212233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:22:52.758 [DEBUG] [Thread-212233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:22:52.780 [INFO] [Thread-212233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:22:52.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:22:52.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:22:53.602 [DEBUG] [Thread-212233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:22:53.602 [DEBUG] [Thread-212233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:22:53.651 [DEBUG] [Thread-212233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:22:53.651 [DEBUG] [Thread-212233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:22:53.659 [DEBUG] [Thread-212233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:22:53.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:22:53.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:22:53.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:22:53.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:22:53.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:22:53.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:22:53.691 [DEBUG] [Thread-212233] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:22:56.679 [DEBUG] [Thread-212235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:11.733 [DEBUG] [Thread-212236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:23.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:23:23.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:23:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:23:26.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 22, 58), 12.64, 42.63, 0.0, 28.23, 15.55, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:23:26.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:22:58
2026-02-15T22:23:26.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:23:26.690 [DEBUG] [Thread-212237] [transport.py] [_log()] starting thread (client mode): 0xa2d6e200
2026-02-15T22:23:26.690 [DEBUG] [Thread-212237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:23:26.712 [DEBUG] [Thread-212237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:23:26.712 [INFO] [Thread-212237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] client lang: <none>
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] server lang: <none>
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] kex follows: False
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] Compression: none
2026-02-15T22:23:26.715 [DEBUG] [Thread-212237] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:23:26.730 [DEBUG] [Thread-212237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:23:26.730 [DEBUG] [Thread-212237] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:23:26.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:23:26.730 [DEBUG] [Thread-212237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:23:26.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:23:26.731 [DEBUG] [Thread-212237] [transport.py] [_log()] userauth is OK
2026-02-15T22:23:26.731 [DEBUG] [Thread-212237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:23:26.731 [DEBUG] [Thread-212237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:23:26.731 [DEBUG] [Thread-212237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:23:26.731 [DEBUG] [Thread-212237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:23:26.740 [INFO] [Thread-212237] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:23:26.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:23:26.771 [DEBUG] [Thread-212239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:27.508 [DEBUG] [Thread-212237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:23:27.508 [DEBUG] [Thread-212237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:23:27.509 [DEBUG] [Thread-212237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:23:27.549 [DEBUG] [Thread-212237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:23:27.550 [DEBUG] [Thread-212237] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:23:27.553 [DEBUG] [Thread-212237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:23:27.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:23:27.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:23:27.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:23:27.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:23:27.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:23:27.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:23:27.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:23:27.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:23:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:23:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.849061 -999.00  +15.40  18.92     47   +4.40 1 1 1 1 1     0    0 9.49 -65.90 ZNESW 21.8 18.9 157.2 28.6 15.7 -24.8 15.6 -23.8 15.4 -22.7 15.7 -23.9
2026-02-15T22:23:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:23:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:23:27.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.849061
2026-02-15T22:23:27.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:23:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:23:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:23:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:23:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:23:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:22:58', tmtdew=12.64, humidity=42.63, cloud=0.0, wind=28.23, temperature=15.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:22:58', seeing=1.7, atlas_timestamp='2026-02-15T20:22:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:18:00')
2026-02-15T22:23:27.579 [DEBUG] [Thread-212237] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:23:27.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:23:27.674 [DEBUG] [Thread-212241] [transport.py] [_log()] starting thread (client mode): 0xa2d78730
2026-02-15T22:23:27.674 [DEBUG] [Thread-212241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:23:27.689 [DEBUG] [Thread-212241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:23:27.690 [INFO] [Thread-212241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:23:27.697 [DEBUG] [Thread-212241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:23:27.697 [DEBUG] [Thread-212241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:23:27.697 [DEBUG] [Thread-212241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] client lang: <none>
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] server lang: <none>
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] kex follows: False
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] Compression: none
2026-02-15T22:23:27.698 [DEBUG] [Thread-212241] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:23:27.754 [DEBUG] [Thread-212241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:23:27.755 [DEBUG] [Thread-212241] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:23:27.755 [DEBUG] [Thread-212241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:23:27.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:23:27.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:23:27.810 [DEBUG] [Thread-212241] [transport.py] [_log()] userauth is OK
2026-02-15T22:23:27.810 [DEBUG] [Thread-212241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:23:27.810 [DEBUG] [Thread-212241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:23:27.810 [DEBUG] [Thread-212241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:23:27.811 [DEBUG] [Thread-212241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:23:27.829 [INFO] [Thread-212241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:23:27.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:23:27.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:23:28.693 [DEBUG] [Thread-212241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:23:28.693 [DEBUG] [Thread-212241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:23:28.741 [DEBUG] [Thread-212241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:23:28.741 [DEBUG] [Thread-212241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:23:28.749 [DEBUG] [Thread-212241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:23:28.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:23:28.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:23:28.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:23:28.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:23:28.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:23:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:23:28.782 [DEBUG] [Thread-212241] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:23:30.236 [DEBUG] [Thread-212243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:41.801 [DEBUG] [Thread-212244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:44.756 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:49.048 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:50.980 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:50.981 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:56.850 [DEBUG] [Thread-212245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:57.717 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:23:58.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:23:58.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:23:58.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:24:00.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 23, 33), 12.7, 42.53, 0.0, 27.84, 15.83, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:24:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:23:33
2026-02-15T22:24:01.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:24:01.168 [DEBUG] [Thread-212246] [transport.py] [_log()] starting thread (client mode): 0xa57b0880
2026-02-15T22:24:01.168 [DEBUG] [Thread-212246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:24:01.189 [DEBUG] [Thread-212246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:24:01.189 [INFO] [Thread-212246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:01.192 [DEBUG] [Thread-212246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] client lang: <none>
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] server lang: <none>
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] kex follows: False
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] Compression: none
2026-02-15T22:24:01.193 [DEBUG] [Thread-212246] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:24:01.210 [DEBUG] [Thread-212246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:24:01.211 [DEBUG] [Thread-212246] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:24:01.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:24:01.212 [DEBUG] [Thread-212246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:24:01.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:24:01.214 [DEBUG] [Thread-212246] [transport.py] [_log()] userauth is OK
2026-02-15T22:24:01.214 [DEBUG] [Thread-212246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:24:01.214 [DEBUG] [Thread-212246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:24:01.214 [DEBUG] [Thread-212246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:24:01.215 [DEBUG] [Thread-212246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:24:01.239 [INFO] [Thread-212246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:24:01.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:24:01.815 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:01.879 [DEBUG] [Thread-212246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:24:01.879 [DEBUG] [Thread-212246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:24:01.879 [DEBUG] [Thread-212246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:24:01.920 [DEBUG] [Thread-212246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:24:01.920 [DEBUG] [Thread-212246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:24:01.922 [DEBUG] [Thread-212246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:24:01.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:24:01.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:24:01.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:24:01.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:24:01.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:24:01.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:24:01.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.849408 -999.00  +15.40  20.27     48   +4.50 1 1 1 1 1     0    0 9.69 -60.74 ZNESW 20.4 20.3 152.2 29.9 15.8 -24.7 15.6 -23.8 15.4 -22.7 15.8 -23.9
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.849408
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:24:01.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:23:33', tmtdew=12.7, humidity=42.53, cloud=0.0, wind=27.84, temperature=15.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:23:34', seeing=1.75, atlas_timestamp='2026-02-15T20:23:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:22:00')
2026-02-15T22:24:01.943 [DEBUG] [Thread-212246] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:24:02.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:24:02.028 [DEBUG] [Thread-212249] [transport.py] [_log()] starting thread (client mode): 0xa57c0190
2026-02-15T22:24:02.028 [DEBUG] [Thread-212249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:24:02.042 [DEBUG] [Thread-212249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:24:02.042 [INFO] [Thread-212249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:24:02.050 [DEBUG] [Thread-212249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:24:02.050 [DEBUG] [Thread-212249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:24:02.050 [DEBUG] [Thread-212249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:24:02.050 [DEBUG] [Thread-212249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:02.050 [DEBUG] [Thread-212249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:02.050 [DEBUG] [Thread-212249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] client lang: <none>
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] server lang: <none>
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] kex follows: False
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:24:02.051 [DEBUG] [Thread-212249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:24:02.052 [DEBUG] [Thread-212249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:24:02.052 [DEBUG] [Thread-212249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:24:02.052 [DEBUG] [Thread-212249] [transport.py] [_log()] Compression: none
2026-02-15T22:24:02.052 [DEBUG] [Thread-212249] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:24:02.111 [DEBUG] [Thread-212249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:24:02.112 [DEBUG] [Thread-212249] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:24:02.112 [DEBUG] [Thread-212249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:24:02.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:24:02.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:24:02.166 [DEBUG] [Thread-212249] [transport.py] [_log()] userauth is OK
2026-02-15T22:24:02.167 [DEBUG] [Thread-212249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:24:02.167 [DEBUG] [Thread-212249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:24:02.167 [DEBUG] [Thread-212249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:24:02.167 [DEBUG] [Thread-212249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:24:02.186 [INFO] [Thread-212249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:24:02.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:24:02.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:24:03.036 [DEBUG] [Thread-212249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:24:03.036 [DEBUG] [Thread-212249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:24:03.085 [DEBUG] [Thread-212249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:24:03.085 [DEBUG] [Thread-212249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:24:03.094 [DEBUG] [Thread-212249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:24:03.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:24:03.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:24:03.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:24:03.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:24:03.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:24:03.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:24:03.128 [DEBUG] [Thread-212249] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:24:11.888 [DEBUG] [Thread-212251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:26.943 [DEBUG] [Thread-212252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:30.328 [DEBUG] [Thread-212253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:24:33.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:24:33.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:24:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 24, 8), 12.63, 42.67, 0.0, 25.94, 15.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:24:35.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:24:08
2026-02-15T22:24:35.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:24:35.714 [DEBUG] [Thread-212254] [transport.py] [_log()] starting thread (client mode): 0xa2d3ebf0
2026-02-15T22:24:35.715 [DEBUG] [Thread-212254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:24:35.736 [DEBUG] [Thread-212254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:24:35.736 [INFO] [Thread-212254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:24:35.739 [DEBUG] [Thread-212254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:24:35.739 [DEBUG] [Thread-212254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:24:35.739 [DEBUG] [Thread-212254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:24:35.739 [DEBUG] [Thread-212254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:35.739 [DEBUG] [Thread-212254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:35.739 [DEBUG] [Thread-212254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] client lang: <none>
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] server lang: <none>
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] kex follows: False
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:24:35.740 [DEBUG] [Thread-212254] [transport.py] [_log()] Compression: none
2026-02-15T22:24:35.741 [DEBUG] [Thread-212254] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:24:35.750 [DEBUG] [Thread-212254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:24:35.750 [DEBUG] [Thread-212254] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:24:35.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:24:35.751 [DEBUG] [Thread-212254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:24:35.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:24:35.754 [DEBUG] [Thread-212254] [transport.py] [_log()] userauth is OK
2026-02-15T22:24:35.754 [DEBUG] [Thread-212254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:24:35.754 [DEBUG] [Thread-212254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:24:35.754 [DEBUG] [Thread-212254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:24:35.754 [DEBUG] [Thread-212254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:24:35.778 [INFO] [Thread-212254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:24:35.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:24:36.389 [DEBUG] [Thread-212254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:24:36.389 [DEBUG] [Thread-212254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:24:36.389 [DEBUG] [Thread-212254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:24:36.430 [DEBUG] [Thread-212254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:24:36.431 [DEBUG] [Thread-212254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:24:36.434 [DEBUG] [Thread-212254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:24:36.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:24:36.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:24:36.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:24:36.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:24:36.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:24:36.457 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:24:36.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:24:36.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:24:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:24:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.850103 -999.00  +15.40  21.28     47   +4.40 1 1 1 1 1     0    0 9.76 -58.58 ZNESW 19.6 21.3 154.8 24.7 15.7 -24.9 15.7 -23.8 15.4 -22.7 15.7 -23.8
2026-02-15T22:24:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:24:36.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:24:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.850103
2026-02-15T22:24:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:24:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:24:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:24:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:24:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:24:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:24:08', tmtdew=12.63, humidity=42.67, cloud=0.0, wind=25.94, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:24:09', seeing=1.88, atlas_timestamp='2026-02-15T20:24:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:22:00')
2026-02-15T22:24:36.460 [DEBUG] [Thread-212254] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:24:36.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:24:36.557 [DEBUG] [Thread-212257] [transport.py] [_log()] starting thread (client mode): 0xa5770130
2026-02-15T22:24:36.557 [DEBUG] [Thread-212257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:24:36.572 [DEBUG] [Thread-212257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:24:36.572 [INFO] [Thread-212257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:24:36.579 [DEBUG] [Thread-212257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:24:36.579 [DEBUG] [Thread-212257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:24:36.579 [DEBUG] [Thread-212257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:24:36.579 [DEBUG] [Thread-212257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] client lang: <none>
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] server lang: <none>
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] kex follows: False
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] Compression: none
2026-02-15T22:24:36.580 [DEBUG] [Thread-212257] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:24:36.639 [DEBUG] [Thread-212257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:24:36.639 [DEBUG] [Thread-212257] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:24:36.640 [DEBUG] [Thread-212257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:24:36.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:24:36.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:24:36.694 [DEBUG] [Thread-212257] [transport.py] [_log()] userauth is OK
2026-02-15T22:24:36.695 [DEBUG] [Thread-212257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:24:36.695 [DEBUG] [Thread-212257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:24:36.695 [DEBUG] [Thread-212257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:24:36.695 [DEBUG] [Thread-212257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:24:36.714 [INFO] [Thread-212257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:24:36.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:24:36.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:24:37.545 [DEBUG] [Thread-212257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:24:37.545 [DEBUG] [Thread-212257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:24:37.593 [DEBUG] [Thread-212257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:24:37.594 [DEBUG] [Thread-212257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:24:37.603 [DEBUG] [Thread-212257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:24:37.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:24:37.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:24:37.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:24:37.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:24:37.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:24:37.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:24:37.641 [DEBUG] [Thread-212257] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:24:41.988 [DEBUG] [Thread-212259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:51.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:51.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:24:57.043 [DEBUG] [Thread-212260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:25:07.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:25:07.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:25:10.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 24, 44), 12.56, 42.71, 0.0, 25.02, 15.48, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:25:10.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:24:44
2026-02-15T22:25:10.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:25:10.687 [DEBUG] [Thread-212261] [transport.py] [_log()] starting thread (client mode): 0xa57d6260
2026-02-15T22:25:10.687 [DEBUG] [Thread-212261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:25:10.708 [DEBUG] [Thread-212261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:25:10.708 [INFO] [Thread-212261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] client lang: <none>
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] server lang: <none>
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] kex follows: False
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:25:10.711 [DEBUG] [Thread-212261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:25:10.712 [DEBUG] [Thread-212261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:25:10.712 [DEBUG] [Thread-212261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:25:10.712 [DEBUG] [Thread-212261] [transport.py] [_log()] Compression: none
2026-02-15T22:25:10.712 [DEBUG] [Thread-212261] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:25:10.724 [DEBUG] [Thread-212261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:25:10.724 [DEBUG] [Thread-212261] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:25:10.725 [DEBUG] [Thread-212261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:25:10.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:25:10.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:25:10.727 [DEBUG] [Thread-212261] [transport.py] [_log()] userauth is OK
2026-02-15T22:25:10.727 [DEBUG] [Thread-212261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:25:10.727 [DEBUG] [Thread-212261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:25:10.727 [DEBUG] [Thread-212261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:25:10.727 [DEBUG] [Thread-212261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:25:10.752 [INFO] [Thread-212261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:25:10.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:25:12.077 [DEBUG] [Thread-212263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:13.222 [DEBUG] [Thread-212261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:25:13.222 [DEBUG] [Thread-212261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:25:13.223 [DEBUG] [Thread-212261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:25:13.263 [DEBUG] [Thread-212261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:25:13.264 [DEBUG] [Thread-212261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:25:13.266 [DEBUG] [Thread-212261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:25:13.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:25:13.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:25:13.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:25:13.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:25:13.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:25:13.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:25:13.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:25:13.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:25:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:25:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.850450 -999.00  +15.40  22.41     48   +4.50 1 1 1 1 1     0    0 9.73 -57.51 ZNESW 20.6 22.4 132.8 30.4 15.7 -24.7 15.6 -23.7 15.4 -22.7 15.7 -24.0
2026-02-15T22:25:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:25:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:25:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.850450
2026-02-15T22:25:13.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:25:13.296 [DEBUG] [Thread-212261] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:25:13.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:25:13.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:25:13.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:25:13.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:25:13.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:24:44', tmtdew=12.56, humidity=42.71, cloud=0.0, wind=25.02, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:24:45', seeing=2.21, atlas_timestamp='2026-02-15T20:24:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:22:00')
2026-02-15T22:25:13.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:25:13.391 [DEBUG] [Thread-212265] [transport.py] [_log()] starting thread (client mode): 0xa2dc2dd0
2026-02-15T22:25:13.392 [DEBUG] [Thread-212265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:25:13.405 [DEBUG] [Thread-212265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:25:13.405 [INFO] [Thread-212265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:25:13.413 [DEBUG] [Thread-212265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:25:13.413 [DEBUG] [Thread-212265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:25:13.413 [DEBUG] [Thread-212265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:25:13.413 [DEBUG] [Thread-212265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] client lang: <none>
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] server lang: <none>
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] kex follows: False
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] Compression: none
2026-02-15T22:25:13.414 [DEBUG] [Thread-212265] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:25:13.477 [DEBUG] [Thread-212265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:25:13.477 [DEBUG] [Thread-212265] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:25:13.478 [DEBUG] [Thread-212265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:25:13.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:25:13.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:25:13.534 [DEBUG] [Thread-212265] [transport.py] [_log()] userauth is OK
2026-02-15T22:25:13.534 [DEBUG] [Thread-212265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:25:13.534 [DEBUG] [Thread-212265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:25:13.534 [DEBUG] [Thread-212265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:25:13.534 [DEBUG] [Thread-212265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:25:13.547 [INFO] [Thread-212265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:25:13.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:25:13.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:25:14.354 [DEBUG] [Thread-212265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:25:14.355 [DEBUG] [Thread-212265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:25:14.402 [DEBUG] [Thread-212265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:25:14.402 [DEBUG] [Thread-212265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:25:14.410 [DEBUG] [Thread-212265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:25:14.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:25:14.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:25:14.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:25:14.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:25:14.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:25:14.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:25:14.445 [DEBUG] [Thread-212265] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:25:18.373 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:27.110 [DEBUG] [Thread-212267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:30.384 [DEBUG] [Thread-212268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:42.158 [DEBUG] [Thread-212269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:44.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:25:44.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:25:44.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:25:46.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 25, 20), 12.54, 42.78, 0.0, 26.18, 15.43, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:25:46.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:25:20
2026-02-15T22:25:46.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:25:47.106 [DEBUG] [Thread-212270] [transport.py] [_log()] starting thread (client mode): 0xa57b0a30
2026-02-15T22:25:47.106 [DEBUG] [Thread-212270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:25:47.127 [DEBUG] [Thread-212270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:25:47.127 [INFO] [Thread-212270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] client lang: <none>
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] server lang: <none>
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] kex follows: False
2026-02-15T22:25:47.131 [DEBUG] [Thread-212270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:25:47.132 [DEBUG] [Thread-212270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:25:47.132 [DEBUG] [Thread-212270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:25:47.132 [DEBUG] [Thread-212270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:25:47.132 [DEBUG] [Thread-212270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:25:47.132 [DEBUG] [Thread-212270] [transport.py] [_log()] Compression: none
2026-02-15T22:25:47.132 [DEBUG] [Thread-212270] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:25:47.149 [DEBUG] [Thread-212270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:25:47.150 [DEBUG] [Thread-212270] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:25:47.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:25:47.151 [DEBUG] [Thread-212270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:25:47.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:25:47.153 [DEBUG] [Thread-212270] [transport.py] [_log()] userauth is OK
2026-02-15T22:25:47.153 [DEBUG] [Thread-212270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:25:47.153 [DEBUG] [Thread-212270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:25:47.153 [DEBUG] [Thread-212270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:25:47.153 [DEBUG] [Thread-212270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:25:47.176 [INFO] [Thread-212270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:25:47.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:25:47.816 [DEBUG] [Thread-212270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:25:47.816 [DEBUG] [Thread-212270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:25:47.816 [DEBUG] [Thread-212270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:25:47.858 [DEBUG] [Thread-212270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:25:47.858 [DEBUG] [Thread-212270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:25:47.861 [DEBUG] [Thread-212270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:25:47.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:25:47.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:25:47.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:25:47.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:25:47.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:25:47.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:25:47.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:25:47.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:25:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:25:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.850797 -999.00  +15.40  19.58     48   +4.50 1 1 1 1 1     0    0 9.94 -58.31 ZNESW 23.7 19.6 146.7 33.2 15.7 -24.8 15.6 -23.7 15.4 -22.6 15.7 -23.7
2026-02-15T22:25:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:25:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:25:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.850797
2026-02-15T22:25:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:25:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:25:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:25:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:25:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:25:47.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:25:20', tmtdew=12.54, humidity=42.78, cloud=0.0, wind=26.18, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:25:20', seeing=1.56, atlas_timestamp='2026-02-15T20:25:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:22:00')
2026-02-15T22:25:47.882 [DEBUG] [Thread-212270] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:25:47.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:25:47.972 [DEBUG] [Thread-212273] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-15T22:25:47.972 [DEBUG] [Thread-212273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:25:47.986 [DEBUG] [Thread-212273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:25:47.986 [INFO] [Thread-212273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:25:47.993 [DEBUG] [Thread-212273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] client lang: <none>
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] server lang: <none>
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] kex follows: False
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] Compression: none
2026-02-15T22:25:47.994 [DEBUG] [Thread-212273] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:25:48.051 [DEBUG] [Thread-212273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:25:48.051 [DEBUG] [Thread-212273] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:25:48.052 [DEBUG] [Thread-212273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:25:48.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:25:48.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:25:48.106 [DEBUG] [Thread-212273] [transport.py] [_log()] userauth is OK
2026-02-15T22:25:48.106 [DEBUG] [Thread-212273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:25:48.106 [DEBUG] [Thread-212273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:25:48.106 [DEBUG] [Thread-212273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:25:48.106 [DEBUG] [Thread-212273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:25:48.124 [INFO] [Thread-212273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:25:48.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:25:48.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:25:48.973 [DEBUG] [Thread-212273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:25:48.973 [DEBUG] [Thread-212273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:25:49.022 [DEBUG] [Thread-212273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:25:49.022 [DEBUG] [Thread-212273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:25:49.030 [DEBUG] [Thread-212273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:25:49.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:25: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')
2026-02-15T22:25: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
2026-02-15T22:25:49.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:25:49.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:25:49.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:25:49.064 [DEBUG] [Thread-212273] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:25:51.383 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:51.384 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:25:57.191 [DEBUG] [Thread-212275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:12.242 [DEBUG] [Thread-212276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:19.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:26:19.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:26:19.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:26:20.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 25, 55), 12.53, 42.81, 0.0, 22.59, 15.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:26:20.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:25:55
2026-02-15T22:26:21.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:26:21.502 [DEBUG] [Thread-212277] [transport.py] [_log()] starting thread (client mode): 0xa2d6d180
2026-02-15T22:26:21.502 [DEBUG] [Thread-212277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:26:21.521 [DEBUG] [Thread-212277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:26:21.521 [INFO] [Thread-212277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] client lang: <none>
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] server lang: <none>
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] kex follows: False
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] Compression: none
2026-02-15T22:26:21.524 [DEBUG] [Thread-212277] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:26:21.538 [DEBUG] [Thread-212277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:26:21.539 [DEBUG] [Thread-212277] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:26:21.539 [DEBUG] [Thread-212277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:26:21.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:26:21.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:26:21.540 [DEBUG] [Thread-212277] [transport.py] [_log()] userauth is OK
2026-02-15T22:26:21.540 [DEBUG] [Thread-212277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:26:21.540 [DEBUG] [Thread-212277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:26:21.540 [DEBUG] [Thread-212277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:26:21.540 [DEBUG] [Thread-212277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:26:21.555 [INFO] [Thread-212277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:26:21.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:26:22.209 [DEBUG] [Thread-212277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:26:22.209 [DEBUG] [Thread-212277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:26:22.209 [DEBUG] [Thread-212277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:26:22.249 [DEBUG] [Thread-212277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:26:22.250 [DEBUG] [Thread-212277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:26:22.253 [DEBUG] [Thread-212277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:26:22.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:26:22.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:26:22.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:26:22.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:26:22.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:26:22.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:26:22.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:26:22.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:26:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:26:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.851144 -999.00  +15.40  15.62     48   +4.50 1 1 1 1 1     0    0 9.86 -59.15 ZNESW 17.1 15.6 142.6 26.6 15.7 -24.8 15.6 -23.7 15.3 -22.7 15.7 -23.9
2026-02-15T22:26:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:26:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:26:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.851144
2026-02-15T22:26:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:26:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:26:22.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:26:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:26:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:26:22.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:25:55', tmtdew=12.53, humidity=42.81, cloud=0.0, wind=22.59, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:25:55', seeing=1.56, atlas_timestamp='2026-02-15T20:25:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.011250000000000426, -0.006249999999999645, -0.0065000000000008384, 0.03250000000000064, 0.016250000000001208, 0.017999999999998906, -0.02874999999999872, 0.009499999999999176, -0.015499999999999403, -0.04974999999999952, 0.012000000000000455, 0.03049999999999997, 0.029249999999999332, -0.002000000000000668, -0.011000000000001009, 0.05224999999999902, 0.054499999999999105, -0.019000000000000128, -0.017750000000001265, 0.030499999999998195, 0.026749999999998053, -0.012249999999998096, -0.008250000000000313, 0.03799999999999848, 0.06550000000000011, 0.007749999999999702, -0.026999999999999247, 0.10899999999999999, 0.04899999999999949, 0.036000000000001364, 0.036000000000001364, 0.02874999999999872], zp_timestamp='2026-02-15T20:22:00')
2026-02-15T22:26:22.280 [DEBUG] [Thread-212277] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:26:22.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:26:22.374 [DEBUG] [Thread-212280] [transport.py] [_log()] starting thread (client mode): 0xa2d56200
2026-02-15T22:26:22.374 [DEBUG] [Thread-212280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:26:22.389 [DEBUG] [Thread-212280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:26:22.389 [INFO] [Thread-212280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] client lang: <none>
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] server lang: <none>
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] kex follows: False
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:26:22.397 [DEBUG] [Thread-212280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:26:22.398 [DEBUG] [Thread-212280] [transport.py] [_log()] Compression: none
2026-02-15T22:26:22.398 [DEBUG] [Thread-212280] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:26:22.454 [DEBUG] [Thread-212280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:26:22.455 [DEBUG] [Thread-212280] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:26:22.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:26:22.456 [DEBUG] [Thread-212280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:26:22.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:26:22.510 [DEBUG] [Thread-212280] [transport.py] [_log()] userauth is OK
2026-02-15T22:26:22.511 [DEBUG] [Thread-212280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:26:22.511 [DEBUG] [Thread-212280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:26:22.511 [DEBUG] [Thread-212280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:26:22.511 [DEBUG] [Thread-212280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:26:22.529 [INFO] [Thread-212280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:26:22.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:26:22.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:26:23.364 [DEBUG] [Thread-212280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:26:23.365 [DEBUG] [Thread-212280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:26:23.416 [DEBUG] [Thread-212280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:26:23.417 [DEBUG] [Thread-212280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:26:23.426 [DEBUG] [Thread-212280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:26:23.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:26:23.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:26:23.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:26:23.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:26:23.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:26:23.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:26:23.466 [DEBUG] [Thread-212280] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:26:27.274 [DEBUG] [Thread-212282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:30.475 [DEBUG] [Thread-212283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:42.314 [DEBUG] [Thread-212284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:51.584 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:51.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:52.024 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:53.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:26:53.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:26:53.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:26:55.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 26, 31), 12.53, 42.8, 0.0, 24.84, 15.33, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:26:55.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:26:31
2026-02-15T22:26:55.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:26:55.903 [DEBUG] [Thread-212285] [transport.py] [_log()] starting thread (client mode): 0xa2d3e8f0
2026-02-15T22:26:55.903 [DEBUG] [Thread-212285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:26:55.924 [DEBUG] [Thread-212285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:26:55.925 [INFO] [Thread-212285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:26:55.927 [DEBUG] [Thread-212285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] client lang: <none>
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] server lang: <none>
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] kex follows: False
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] Compression: none
2026-02-15T22:26:55.928 [DEBUG] [Thread-212285] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:26:55.946 [DEBUG] [Thread-212285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:26:55.947 [DEBUG] [Thread-212285] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:26:55.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:26:55.948 [DEBUG] [Thread-212285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:26:55.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:26:55.950 [DEBUG] [Thread-212285] [transport.py] [_log()] userauth is OK
2026-02-15T22:26:55.951 [DEBUG] [Thread-212285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:26:55.951 [DEBUG] [Thread-212285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:26:55.951 [DEBUG] [Thread-212285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:26:55.951 [DEBUG] [Thread-212285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:26:55.972 [INFO] [Thread-212285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:26:55.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:26:56.591 [DEBUG] [Thread-212285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:26:56.592 [DEBUG] [Thread-212285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:26:56.592 [DEBUG] [Thread-212285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:26:56.632 [DEBUG] [Thread-212285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:26:56.633 [DEBUG] [Thread-212285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:26:56.636 [DEBUG] [Thread-212285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:26:56.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:26:56.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:26:56.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:26:56.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:26:56.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:26:56.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:26:56.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:26:56.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:26:56.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:26:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.851492 -999.00  +15.40  22.54     48   +4.50 1 1 1 1 1     0    0 9.42 -60.20 ZNESW 23.6 22.5 144.0 28.1 15.7 -24.8 15.6 -23.8 15.3 -22.7 15.7 -23.9
2026-02-15T22:26:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:26:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:26:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.851492
2026-02-15T22:26:56.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:26:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:26:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:26:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:26:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:26:56.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:26:31', tmtdew=12.53, humidity=42.8, cloud=0.0, wind=24.84, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:26:31', seeing=1.61, atlas_timestamp='2026-02-15T20:26:08.909', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:25:00')
2026-02-15T22:26:56.662 [DEBUG] [Thread-212285] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:26:56.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:26:56.757 [DEBUG] [Thread-212288] [transport.py] [_log()] starting thread (client mode): 0xa57b33a0
2026-02-15T22:26:56.757 [DEBUG] [Thread-212288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:26:56.771 [DEBUG] [Thread-212288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:26:56.772 [INFO] [Thread-212288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:26:56.779 [DEBUG] [Thread-212288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:26:56.779 [DEBUG] [Thread-212288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:26:56.779 [DEBUG] [Thread-212288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] client lang: <none>
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] server lang: <none>
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] kex follows: False
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] Compression: none
2026-02-15T22:26:56.780 [DEBUG] [Thread-212288] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:26:56.839 [DEBUG] [Thread-212288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:26:56.839 [DEBUG] [Thread-212288] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:26:56.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:26:56.840 [DEBUG] [Thread-212288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:26:56.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:26:56.895 [DEBUG] [Thread-212288] [transport.py] [_log()] userauth is OK
2026-02-15T22:26:56.895 [DEBUG] [Thread-212288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:26:56.895 [DEBUG] [Thread-212288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:26:56.895 [DEBUG] [Thread-212288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:26:56.895 [DEBUG] [Thread-212288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:26:56.918 [INFO] [Thread-212288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:26:56.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:26:56.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:26:57.349 [DEBUG] [Thread-212290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:26:57.749 [DEBUG] [Thread-212288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:26:57.749 [DEBUG] [Thread-212288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:26:57.797 [DEBUG] [Thread-212288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:26:57.797 [DEBUG] [Thread-212288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:26:57.808 [DEBUG] [Thread-212288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:26:57.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:26:57.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:26:57.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:26:57.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:26:57.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:26:57.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:26:57.843 [DEBUG] [Thread-212288] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:27:12.409 [DEBUG] [Thread-212291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:27:27.444 [DEBUG] [Thread-212292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:27:27.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:27:27.866 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:27:27.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:27:30.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 27, 7), 12.47, 42.96, 0.0, 23.82, 15.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:27:30.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:27:07
2026-02-15T22:27:30.541 [DEBUG] [Thread-212293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:27:30.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:27:30.874 [DEBUG] [Thread-212294] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-15T22:27:30.874 [DEBUG] [Thread-212294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:27:30.894 [DEBUG] [Thread-212294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:27:30.894 [INFO] [Thread-212294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:27:30.897 [DEBUG] [Thread-212294] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:27:30.897 [DEBUG] [Thread-212294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:27:30.897 [DEBUG] [Thread-212294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:27:30.897 [DEBUG] [Thread-212294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] client lang: <none>
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] server lang: <none>
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] kex follows: False
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] Compression: none
2026-02-15T22:27:30.898 [DEBUG] [Thread-212294] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:27:30.914 [DEBUG] [Thread-212294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:27:30.914 [DEBUG] [Thread-212294] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:27:30.915 [DEBUG] [Thread-212294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:27:30.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:27:30.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:27:30.916 [DEBUG] [Thread-212294] [transport.py] [_log()] userauth is OK
2026-02-15T22:27:30.916 [DEBUG] [Thread-212294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:27:30.917 [DEBUG] [Thread-212294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:27:30.917 [DEBUG] [Thread-212294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:27:30.917 [DEBUG] [Thread-212294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:27:30.940 [INFO] [Thread-212294] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:27:30.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:27:31.546 [DEBUG] [Thread-212294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:27:31.546 [DEBUG] [Thread-212294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:27:31.547 [DEBUG] [Thread-212294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:27:31.587 [DEBUG] [Thread-212294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:27:31.587 [DEBUG] [Thread-212294] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:27:31.590 [DEBUG] [Thread-212294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:27:31.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:27:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:27:31.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:27:31.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:27:31.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:27:31.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:27:31.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:27:31.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.851839 -999.00  +15.40  23.64     48   +4.50 1 1 1 1 1     0    0 9.44 -62.99 ZNESW 20.3 23.6 139.4 27.6 15.7 -24.7 15.6 -23.7 15.4 -22.7 15.7 -24.0
2026-02-15T22:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.851839
2026-02-15T22:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:27:31.614 [DEBUG] [Thread-212294] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:27:07', tmtdew=12.47, humidity=42.96, cloud=0.0, wind=23.82, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:27:07', seeing=1.77, atlas_timestamp='2026-02-15T20:26:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:25:00')
2026-02-15T22:27:31.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:27:31.722 [DEBUG] [Thread-212297] [transport.py] [_log()] starting thread (client mode): 0xa2d79600
2026-02-15T22:27:31.722 [DEBUG] [Thread-212297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:27:31.737 [DEBUG] [Thread-212297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:27:31.737 [INFO] [Thread-212297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] client lang: <none>
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] server lang: <none>
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] kex follows: False
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] Compression: none
2026-02-15T22:27:31.745 [DEBUG] [Thread-212297] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:27:31.803 [DEBUG] [Thread-212297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:27:31.803 [DEBUG] [Thread-212297] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:27:31.804 [DEBUG] [Thread-212297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:27:31.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:27:31.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:27:31.858 [DEBUG] [Thread-212297] [transport.py] [_log()] userauth is OK
2026-02-15T22:27:31.859 [DEBUG] [Thread-212297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:27:31.859 [DEBUG] [Thread-212297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:27:31.859 [DEBUG] [Thread-212297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:27:31.859 [DEBUG] [Thread-212297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:27:31.877 [INFO] [Thread-212297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:27:31.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:27:31.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:27:32.692 [DEBUG] [Thread-212297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:27:32.693 [DEBUG] [Thread-212297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:27:32.740 [DEBUG] [Thread-212297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:27:32.740 [DEBUG] [Thread-212297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:27:32.750 [DEBUG] [Thread-212297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:27:32.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:27: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')
2026-02-15T22:27: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
2026-02-15T22:27:32.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:27:32.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:27:32.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:27:32.786 [DEBUG] [Thread-212297] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:27:42.482 [DEBUG] [Thread-212299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:27:51.802 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:27:51.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:27:57.521 [DEBUG] [Thread-212300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:02.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:28:02.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:28:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:28:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 27, 42), 12.57, 42.86, 0.0, 28.3, 15.63, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:28:04.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:27:42
2026-02-15T22:28:05.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:28:05.285 [DEBUG] [Thread-212301] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T22:28:05.285 [DEBUG] [Thread-212301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:28:05.303 [DEBUG] [Thread-212301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:28:05.303 [INFO] [Thread-212301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] client lang: <none>
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] server lang: <none>
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] kex follows: False
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] Compression: none
2026-02-15T22:28:05.306 [DEBUG] [Thread-212301] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:28:05.319 [DEBUG] [Thread-212301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:28:05.320 [DEBUG] [Thread-212301] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:28:05.320 [DEBUG] [Thread-212301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:28:05.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:28:05.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:28:05.322 [DEBUG] [Thread-212301] [transport.py] [_log()] userauth is OK
2026-02-15T22:28:05.322 [DEBUG] [Thread-212301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:28:05.322 [DEBUG] [Thread-212301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:28:05.322 [DEBUG] [Thread-212301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:28:05.322 [DEBUG] [Thread-212301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:28:05.346 [INFO] [Thread-212301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:28:05.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:28:06.118 [DEBUG] [Thread-212301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:28:06.118 [DEBUG] [Thread-212301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:28:06.118 [DEBUG] [Thread-212301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:28:06.159 [DEBUG] [Thread-212301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:28:06.159 [DEBUG] [Thread-212301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:28:06.162 [DEBUG] [Thread-212301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:28:06.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:28:06.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:28:06.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:28:06.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:28:06.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:28:06.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:28:06.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:28:06.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:28:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:28:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.852533 -999.00  +15.40  19.09     48   +4.50 1 1 1 1 1     0    0 9.60 -59.25 ZNESW 18.4 19.1 143.8 26.9 15.7 -24.8 15.6 -23.8 15.4 -22.8 15.6 -23.9
2026-02-15T22:28:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:28:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:28:06.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.852533
2026-02-15T22:28:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:28:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:28:06.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:28:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:28:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:28:06.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:27:42', tmtdew=12.57, humidity=42.86, cloud=0.0, wind=28.3, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:27:42', seeing=1.85, atlas_timestamp='2026-02-15T20:27:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:25:00')
2026-02-15T22:28:06.186 [DEBUG] [Thread-212301] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:28:06.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:28:06.283 [DEBUG] [Thread-212304] [transport.py] [_log()] starting thread (client mode): 0xa2dc14e0
2026-02-15T22:28:06.283 [DEBUG] [Thread-212304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:28:06.298 [DEBUG] [Thread-212304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:28:06.298 [INFO] [Thread-212304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] client lang: <none>
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] server lang: <none>
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] kex follows: False
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] Compression: none
2026-02-15T22:28:06.306 [DEBUG] [Thread-212304] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:28:06.362 [DEBUG] [Thread-212304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:28:06.363 [DEBUG] [Thread-212304] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:28:06.363 [DEBUG] [Thread-212304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:28:06.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:28:06.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:28:06.418 [DEBUG] [Thread-212304] [transport.py] [_log()] userauth is OK
2026-02-15T22:28:06.419 [DEBUG] [Thread-212304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:28:06.419 [DEBUG] [Thread-212304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:28:06.419 [DEBUG] [Thread-212304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:28:06.419 [DEBUG] [Thread-212304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:28:06.438 [INFO] [Thread-212304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:28:06.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:28:06.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:28:07.278 [DEBUG] [Thread-212304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:28:07.279 [DEBUG] [Thread-212304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:28:07.327 [DEBUG] [Thread-212304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:28:07.327 [DEBUG] [Thread-212304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:28:07.336 [DEBUG] [Thread-212304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:28:07.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:28:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:28: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') -> 00000000
2026-02-15T22:28:07.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:28:07.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:28:07.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:28:07.373 [DEBUG] [Thread-212304] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:28:12.561 [DEBUG] [Thread-212306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:25.981 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:27.622 [DEBUG] [Thread-212307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:30.632 [DEBUG] [Thread-212308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:28:37.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:28:37.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:28:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 28, 17), 12.4, 43.53, 0.0, 25.0, 15.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:28:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:28:17
2026-02-15T22:28:39.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:28:39.741 [DEBUG] [Thread-212309] [transport.py] [_log()] starting thread (client mode): 0xa2d78c70
2026-02-15T22:28:39.741 [DEBUG] [Thread-212309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:28:39.761 [DEBUG] [Thread-212309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:28:39.761 [INFO] [Thread-212309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:39.764 [DEBUG] [Thread-212309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] client lang: <none>
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] server lang: <none>
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] kex follows: False
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] Compression: none
2026-02-15T22:28:39.765 [DEBUG] [Thread-212309] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:28:39.784 [DEBUG] [Thread-212309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:28:39.784 [DEBUG] [Thread-212309] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:28:39.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:28:39.785 [DEBUG] [Thread-212309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:28:39.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:28:39.788 [DEBUG] [Thread-212309] [transport.py] [_log()] userauth is OK
2026-02-15T22:28:39.788 [DEBUG] [Thread-212309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:28:39.788 [DEBUG] [Thread-212309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:28:39.788 [DEBUG] [Thread-212309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:28:39.788 [DEBUG] [Thread-212309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:28:39.821 [INFO] [Thread-212309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:28:39.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:28:40.471 [DEBUG] [Thread-212309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:28:40.472 [DEBUG] [Thread-212309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:28:40.472 [DEBUG] [Thread-212309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:28:40.512 [DEBUG] [Thread-212309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:28:40.513 [DEBUG] [Thread-212309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:28:40.516 [DEBUG] [Thread-212309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:28:40.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:28:40.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:28:40.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:28:40.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:28:40.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:28:40.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:28:40.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:28:40.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:28:40.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:28:40.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.852880 -999.00  +15.40  19.76     48   +4.50 1 1 1 1 1     0    0 9.72 -55.08 ZNESW 20.5 19.8 157.6 26.4 15.7 -24.9 15.6 -23.8 15.4 -22.7 15.6 -23.9
2026-02-15T22:28:40.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:28:40.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:28:40.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.852880
2026-02-15T22:28:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:28:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:28:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:28:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:28:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:28:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:28:17', tmtdew=12.4, humidity=43.53, cloud=0.0, wind=25.0, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:28:17', seeing=1.81, atlas_timestamp='2026-02-15T20:28:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:25:00')
2026-02-15T22:28:40.543 [DEBUG] [Thread-212309] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:28:40.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:28:40.640 [DEBUG] [Thread-212312] [transport.py] [_log()] starting thread (client mode): 0xa2db75b0
2026-02-15T22:28:40.640 [DEBUG] [Thread-212312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:28:40.655 [DEBUG] [Thread-212312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:28:40.655 [INFO] [Thread-212312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:28:40.662 [DEBUG] [Thread-212312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] client lang: <none>
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] server lang: <none>
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] kex follows: False
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:28:40.663 [DEBUG] [Thread-212312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:28:40.664 [DEBUG] [Thread-212312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:28:40.664 [DEBUG] [Thread-212312] [transport.py] [_log()] Compression: none
2026-02-15T22:28:40.664 [DEBUG] [Thread-212312] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:28:40.723 [DEBUG] [Thread-212312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:28:40.723 [DEBUG] [Thread-212312] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:28:40.724 [DEBUG] [Thread-212312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:28:40.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:28:40.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:28:40.778 [DEBUG] [Thread-212312] [transport.py] [_log()] userauth is OK
2026-02-15T22:28:40.779 [DEBUG] [Thread-212312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:28:40.779 [DEBUG] [Thread-212312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:28:40.779 [DEBUG] [Thread-212312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:28:40.779 [DEBUG] [Thread-212312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:28:40.797 [INFO] [Thread-212312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:28:40.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:28:40.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:28:41.638 [DEBUG] [Thread-212312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:28:41.639 [DEBUG] [Thread-212312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:28:41.686 [DEBUG] [Thread-212312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:28:41.687 [DEBUG] [Thread-212312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:28:41.696 [DEBUG] [Thread-212312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:28:41.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:28:41.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:28:41.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:28:41.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:28:41.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:28:41.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:28:41.736 [DEBUG] [Thread-212312] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:28:42.657 [DEBUG] [Thread-212314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:52.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:52.003 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:28:57.713 [DEBUG] [Thread-212315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:11.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:29:11.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:29:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:29:12.749 [DEBUG] [Thread-212316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 28, 53), 12.35, 43.53, 0.0, 30.91, 15.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:29:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:28:53
2026-02-15T22:29:14.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:29:14.183 [DEBUG] [Thread-212317] [transport.py] [_log()] starting thread (client mode): 0xa2d79720
2026-02-15T22:29:14.183 [DEBUG] [Thread-212317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:29:14.202 [DEBUG] [Thread-212317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:29:14.202 [INFO] [Thread-212317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:29:14.205 [DEBUG] [Thread-212317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] client lang: <none>
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] server lang: <none>
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] kex follows: False
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:29:14.206 [DEBUG] [Thread-212317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:29:14.207 [DEBUG] [Thread-212317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:29:14.207 [DEBUG] [Thread-212317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:29:14.207 [DEBUG] [Thread-212317] [transport.py] [_log()] Compression: none
2026-02-15T22:29:14.207 [DEBUG] [Thread-212317] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:29:14.223 [DEBUG] [Thread-212317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:29:14.223 [DEBUG] [Thread-212317] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:29:14.223 [DEBUG] [Thread-212317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:29:14.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:29:14.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:29:14.224 [DEBUG] [Thread-212317] [transport.py] [_log()] userauth is OK
2026-02-15T22:29:14.224 [DEBUG] [Thread-212317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:29:14.224 [DEBUG] [Thread-212317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:29:14.224 [DEBUG] [Thread-212317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:29:14.224 [DEBUG] [Thread-212317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:29:14.237 [INFO] [Thread-212317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:29:14.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:29:14.976 [DEBUG] [Thread-212317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:29:14.977 [DEBUG] [Thread-212317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:29:14.977 [DEBUG] [Thread-212317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:29:15.017 [DEBUG] [Thread-212317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:29:15.017 [DEBUG] [Thread-212317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:29:15.021 [DEBUG] [Thread-212317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:29:15.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:29:15.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:29:15.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:29:15.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:29:15.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:29:15.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:29:15.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:29:15.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:29:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:29:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.853228 -999.00  +15.30  20.77     48   +4.50 1 1 1 1 1     0    0 9.96 -54.28 ZNESW 17.9 20.8 150.0 28.3 15.7 -24.8 15.6 -23.8 15.3 -22.6 15.6 -23.9
2026-02-15T22:29:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:29:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:29:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.853228
2026-02-15T22:29:15.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:29:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:29:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:29:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:29:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:29:15.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:28:53', tmtdew=12.35, humidity=43.53, cloud=0.0, wind=30.91, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:28:53', seeing=1.65, atlas_timestamp='2026-02-15T20:28:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:25:00')
2026-02-15T22:29:15.044 [DEBUG] [Thread-212317] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:29:15.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:29:15.137 [DEBUG] [Thread-212320] [transport.py] [_log()] starting thread (client mode): 0xa57d58a0
2026-02-15T22:29:15.137 [DEBUG] [Thread-212320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:29:15.152 [DEBUG] [Thread-212320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:29:15.152 [INFO] [Thread-212320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:29:15.159 [DEBUG] [Thread-212320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:29:15.159 [DEBUG] [Thread-212320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:29:15.159 [DEBUG] [Thread-212320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] client lang: <none>
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] server lang: <none>
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] kex follows: False
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] Compression: none
2026-02-15T22:29:15.160 [DEBUG] [Thread-212320] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:29:15.219 [DEBUG] [Thread-212320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:29:15.219 [DEBUG] [Thread-212320] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:29:15.220 [DEBUG] [Thread-212320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:29:15.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:29:15.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:29:15.274 [DEBUG] [Thread-212320] [transport.py] [_log()] userauth is OK
2026-02-15T22:29:15.275 [DEBUG] [Thread-212320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:29:15.275 [DEBUG] [Thread-212320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:29:15.275 [DEBUG] [Thread-212320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:29:15.275 [DEBUG] [Thread-212320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:29:15.293 [INFO] [Thread-212320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:29:15.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:29:15.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:29:16.118 [DEBUG] [Thread-212320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:29:16.118 [DEBUG] [Thread-212320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:29:16.166 [DEBUG] [Thread-212320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:29:16.167 [DEBUG] [Thread-212320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:29:16.176 [DEBUG] [Thread-212320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:29:16.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:29:16.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:29:16.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:29:16.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:29:16.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:29:16.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:29:16.214 [DEBUG] [Thread-212320] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:29:24.969 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:27.789 [DEBUG] [Thread-212322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:30.705 [DEBUG] [Thread-212323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:33.662 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:37.721 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:42.841 [DEBUG] [Thread-212324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:46.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:29:46.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:29:46.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:29:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 29, 28), 12.34, 43.56, 0.0, 29.2, 15.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:29:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:29:28
2026-02-15T22:29:48.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:29:48.558 [DEBUG] [Thread-212325] [transport.py] [_log()] starting thread (client mode): 0xa57e3130
2026-02-15T22:29:48.558 [DEBUG] [Thread-212325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:29:48.579 [DEBUG] [Thread-212325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:29:48.579 [INFO] [Thread-212325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:29:48.582 [DEBUG] [Thread-212325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] client lang: <none>
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] server lang: <none>
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] kex follows: False
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] Compression: none
2026-02-15T22:29:48.583 [DEBUG] [Thread-212325] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:29:48.601 [DEBUG] [Thread-212325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:29:48.601 [DEBUG] [Thread-212325] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:29:48.602 [DEBUG] [Thread-212325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:29:48.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:29:48.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:29:48.604 [DEBUG] [Thread-212325] [transport.py] [_log()] userauth is OK
2026-02-15T22:29:48.604 [DEBUG] [Thread-212325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:29:48.604 [DEBUG] [Thread-212325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:29:48.604 [DEBUG] [Thread-212325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:29:48.604 [DEBUG] [Thread-212325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:29:48.628 [INFO] [Thread-212325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:29:48.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:29:49.262 [DEBUG] [Thread-212325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:29:49.262 [DEBUG] [Thread-212325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:29:49.263 [DEBUG] [Thread-212325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:29:49.304 [DEBUG] [Thread-212325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:29:49.304 [DEBUG] [Thread-212325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:29:49.307 [DEBUG] [Thread-212325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:29:49.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:29:49.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:29:49.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:29:49.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:29:49.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:29:49.333 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:29:49.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:29:49.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:29:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:29:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.853575 -999.00  +15.30  18.68     48   +4.60 1 1 1 1 1     0    0 9.80 -54.10 ZNESW 18.2 18.7 149.6 30.2 15.6 -24.9 15.5 -23.6 15.3 -22.6 15.6 -23.7
2026-02-15T22:29:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:29:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:29:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.853575
2026-02-15T22:29:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:29:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:29:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:29:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:29:49.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:29:49.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:29:28', tmtdew=12.34, humidity=43.56, cloud=0.0, wind=29.2, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:29:29', seeing=1.85, atlas_timestamp='2026-02-15T20:29:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:28:00')
2026-02-15T22:29:49.336 [DEBUG] [Thread-212325] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:29:49.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:29:49.430 [DEBUG] [Thread-212328] [transport.py] [_log()] starting thread (client mode): 0xa2d7b490
2026-02-15T22:29:49.430 [DEBUG] [Thread-212328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:29:49.447 [DEBUG] [Thread-212328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:29:49.447 [INFO] [Thread-212328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:29:49.454 [DEBUG] [Thread-212328] [transport.py] [_log()] client lang: <none>
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] server lang: <none>
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] kex follows: False
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] Compression: none
2026-02-15T22:29:49.455 [DEBUG] [Thread-212328] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:29:49.515 [DEBUG] [Thread-212328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:29:49.515 [DEBUG] [Thread-212328] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:29:49.516 [DEBUG] [Thread-212328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:29:49.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:29:49.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:29:49.571 [DEBUG] [Thread-212328] [transport.py] [_log()] userauth is OK
2026-02-15T22:29:49.571 [DEBUG] [Thread-212328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:29:49.572 [DEBUG] [Thread-212328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:29:49.572 [DEBUG] [Thread-212328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:29:49.572 [DEBUG] [Thread-212328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:29:49.591 [INFO] [Thread-212328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:29:49.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:29:49.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:29:50.446 [DEBUG] [Thread-212328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:29:50.446 [DEBUG] [Thread-212328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:29:50.494 [DEBUG] [Thread-212328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:29:50.495 [DEBUG] [Thread-212328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:29:50.504 [DEBUG] [Thread-212328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:29:50.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:29:50.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:29:50.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:29:50.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:29:50.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:29:50.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:29:50.541 [DEBUG] [Thread-212328] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:29:52.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:52.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:57.875 [DEBUG] [Thread-212330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:29:59.924 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:12.910 [DEBUG] [Thread-212331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:20.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:30:20.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:30:20.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:30:22.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 30, 4), 12.37, 43.48, 0.0, 28.53, 15.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:30:22.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:30:04
2026-02-15T22:30:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:30:22.875 [DEBUG] [Thread-212332] [transport.py] [_log()] starting thread (client mode): 0xa57d7910
2026-02-15T22:30:22.875 [DEBUG] [Thread-212332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:30:22.894 [DEBUG] [Thread-212332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:30:22.895 [INFO] [Thread-212332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] client lang: <none>
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] server lang: <none>
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] kex follows: False
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] Compression: none
2026-02-15T22:30:22.898 [DEBUG] [Thread-212332] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:30:22.914 [DEBUG] [Thread-212332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:30:22.915 [DEBUG] [Thread-212332] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:30:22.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:30:22.915 [DEBUG] [Thread-212332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:30:22.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:30:22.916 [DEBUG] [Thread-212332] [transport.py] [_log()] userauth is OK
2026-02-15T22:30:22.916 [DEBUG] [Thread-212332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:30:22.916 [DEBUG] [Thread-212332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:30:22.916 [DEBUG] [Thread-212332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:30:22.916 [DEBUG] [Thread-212332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:30:22.925 [INFO] [Thread-212332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:30:22.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:30:23.494 [DEBUG] [Thread-212332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:30:23.494 [DEBUG] [Thread-212332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:30:23.494 [DEBUG] [Thread-212332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:30:23.536 [DEBUG] [Thread-212332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:30:23.536 [DEBUG] [Thread-212332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:30:23.538 [DEBUG] [Thread-212332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:30:23.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:30:23.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:30:23.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:30:23.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:30:23.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:30:23.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:30:23.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:30:23.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:30:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:30:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.853922 -999.00  +15.30  19.53     48   +4.50 1 1 1 1 1     0    0 9.75 -52.13 ZNESW 23.1 19.5 149.4 26.2 15.7 -24.8 15.5 -23.7 15.3 -22.7 15.6 -23.7
2026-02-15T22:30:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:30:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:30:23.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.853922
2026-02-15T22:30:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:30:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:30:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:30:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:30:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:30:23.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:30:04', tmtdew=12.37, humidity=43.48, cloud=0.0, wind=28.53, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:30:04', seeing=1.69, atlas_timestamp='2026-02-15T20:29:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:28:00')
2026-02-15T22:30:23.556 [DEBUG] [Thread-212332] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:30:23.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:30:23.638 [DEBUG] [Thread-212335] [transport.py] [_log()] starting thread (client mode): 0xa57b2080
2026-02-15T22:30:23.638 [DEBUG] [Thread-212335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:30:23.652 [DEBUG] [Thread-212335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:30:23.652 [INFO] [Thread-212335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:23.660 [DEBUG] [Thread-212335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] client lang: <none>
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] server lang: <none>
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] kex follows: False
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:30:23.661 [DEBUG] [Thread-212335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:30:23.662 [DEBUG] [Thread-212335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:30:23.662 [DEBUG] [Thread-212335] [transport.py] [_log()] Compression: none
2026-02-15T22:30:23.662 [DEBUG] [Thread-212335] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:30:23.720 [DEBUG] [Thread-212335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:30:23.721 [DEBUG] [Thread-212335] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:30:23.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:30:23.722 [DEBUG] [Thread-212335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:30:23.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:30:23.779 [DEBUG] [Thread-212335] [transport.py] [_log()] userauth is OK
2026-02-15T22:30:23.780 [DEBUG] [Thread-212335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:30:23.780 [DEBUG] [Thread-212335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:30:23.780 [DEBUG] [Thread-212335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:30:23.780 [DEBUG] [Thread-212335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:30:23.800 [INFO] [Thread-212335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:30:23.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:30:23.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:30:24.611 [DEBUG] [Thread-212335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:30:24.611 [DEBUG] [Thread-212335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:30:24.659 [DEBUG] [Thread-212335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:30:24.659 [DEBUG] [Thread-212335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:30:24.668 [DEBUG] [Thread-212335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:30:24.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:30:24.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:30:24.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:30:24.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:30:24.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:30:24.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:30:24.703 [DEBUG] [Thread-212335] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:30:27.948 [DEBUG] [Thread-212337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:30.771 [DEBUG] [Thread-212338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:42.998 [DEBUG] [Thread-212339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:52.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:52.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:54.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:30:54.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:30:54.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:30:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 30, 39), 12.48, 43.16, 0.0, 26.25, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:30:56.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:30:39
2026-02-15T22:30:56.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:30:57.022 [DEBUG] [Thread-212340] [transport.py] [_log()] starting thread (client mode): 0xa2d7a440
2026-02-15T22:30:57.022 [DEBUG] [Thread-212340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:30:57.043 [DEBUG] [Thread-212340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:30:57.043 [INFO] [Thread-212340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:30:57.046 [DEBUG] [Thread-212340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:30:57.046 [DEBUG] [Thread-212340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] client lang: <none>
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] server lang: <none>
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] kex follows: False
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] Compression: none
2026-02-15T22:30:57.047 [DEBUG] [Thread-212340] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:30:57.063 [DEBUG] [Thread-212340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:30:57.064 [DEBUG] [Thread-212340] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:30:57.064 [DEBUG] [Thread-212340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:30:57.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:30:57.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:30:57.066 [DEBUG] [Thread-212340] [transport.py] [_log()] userauth is OK
2026-02-15T22:30:57.066 [DEBUG] [Thread-212340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:30:57.066 [DEBUG] [Thread-212340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:30:57.067 [DEBUG] [Thread-212340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:30:57.067 [DEBUG] [Thread-212340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:30:57.104 [INFO] [Thread-212340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:30:57.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:30:57.733 [DEBUG] [Thread-212340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:30:57.734 [DEBUG] [Thread-212340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:30:57.734 [DEBUG] [Thread-212340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:30:57.774 [DEBUG] [Thread-212340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:30:57.775 [DEBUG] [Thread-212340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:30:57.778 [DEBUG] [Thread-212340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:30:57.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:30:57.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:30:57.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:30:57.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:30:57.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:30:57.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:30:57.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:30:57.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:30:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:30:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.854616 -999.00  +15.30  13.17     48   +4.50 1 1 1 1 1     0    0 9.85 -51.19 ZNESW 19.5 13.2 154.6 27.9 15.6 -24.9 15.5 -23.7 15.3 -22.6 15.6 -23.9
2026-02-15T22:30:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:30:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:30:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.854616
2026-02-15T22:30:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:30:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:30:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:30:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:30:57.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:30:57.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:30:39', tmtdew=12.48, humidity=43.16, cloud=0.0, wind=26.25, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:30:40', seeing=1.58, atlas_timestamp='2026-02-15T20:30:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:28:00')
2026-02-15T22:30:57.806 [DEBUG] [Thread-212340] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:30:57.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:30:57.903 [DEBUG] [Thread-212343] [transport.py] [_log()] starting thread (client mode): 0xa2db78e0
2026-02-15T22:30:57.903 [DEBUG] [Thread-212343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:30:57.918 [DEBUG] [Thread-212343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:30:57.918 [INFO] [Thread-212343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] client lang: <none>
2026-02-15T22:30:57.926 [DEBUG] [Thread-212343] [transport.py] [_log()] server lang: <none>
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] kex follows: False
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] Compression: none
2026-02-15T22:30:57.927 [DEBUG] [Thread-212343] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:30:57.986 [DEBUG] [Thread-212343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:30:57.987 [DEBUG] [Thread-212343] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:30:57.988 [DEBUG] [Thread-212343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:30:57.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:30:57.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:30:58.033 [DEBUG] [Thread-212345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:30:58.042 [DEBUG] [Thread-212343] [transport.py] [_log()] userauth is OK
2026-02-15T22:30:58.042 [DEBUG] [Thread-212343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:30:58.042 [DEBUG] [Thread-212343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:30:58.042 [DEBUG] [Thread-212343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:30:58.042 [DEBUG] [Thread-212343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:30:58.061 [INFO] [Thread-212343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:30:58.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:30:58.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:30:58.868 [DEBUG] [Thread-212343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:30:58.868 [DEBUG] [Thread-212343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:30:58.915 [DEBUG] [Thread-212343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:30:58.916 [DEBUG] [Thread-212343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:30:58.924 [DEBUG] [Thread-212343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:30:58.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:30:58.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:30:58.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:30:58.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:30:58.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:30:58.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:30:58.956 [DEBUG] [Thread-212343] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:31:13.094 [DEBUG] [Thread-212346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:28.132 [DEBUG] [Thread-212347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:28.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:31:28.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:31:28.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:31:30.841 [DEBUG] [Thread-212348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:31.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 31, 15), 12.33, 43.6, 0.0, 25.73, 15.35, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:31:31.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:31:15
2026-02-15T22:31:31.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:31:31.534 [DEBUG] [Thread-212349] [transport.py] [_log()] starting thread (client mode): 0xa5743910
2026-02-15T22:31:31.534 [DEBUG] [Thread-212349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:31:31.554 [DEBUG] [Thread-212349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:31:31.554 [INFO] [Thread-212349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:31:31.555 [DEBUG] [Thread-212349] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] client lang: <none>
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] server lang: <none>
2026-02-15T22:31:31.556 [DEBUG] [Thread-212349] [transport.py] [_log()] kex follows: False
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] Compression: none
2026-02-15T22:31:31.557 [DEBUG] [Thread-212349] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:31:31.565 [DEBUG] [Thread-212349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:31:31.565 [DEBUG] [Thread-212349] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:31:31.566 [DEBUG] [Thread-212349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:31:31.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:31:31.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:31:31.568 [DEBUG] [Thread-212349] [transport.py] [_log()] userauth is OK
2026-02-15T22:31:31.568 [DEBUG] [Thread-212349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:31:31.568 [DEBUG] [Thread-212349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:31:31.568 [DEBUG] [Thread-212349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:31:31.568 [DEBUG] [Thread-212349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:31:31.592 [INFO] [Thread-212349] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:31:31.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:31:32.152 [DEBUG] [Thread-212349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:31:32.152 [DEBUG] [Thread-212349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:31:32.153 [DEBUG] [Thread-212349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:31:32.193 [DEBUG] [Thread-212349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:31:32.193 [DEBUG] [Thread-212349] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:31:32.195 [DEBUG] [Thread-212349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:31:32.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:31:32.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:31:32.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:31:32.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:31:32.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:31:32.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:31:32.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.854964 -999.00  +15.30  17.88     48   +4.50 1 1 1 1 1     0    0 9.82 -49.68 ZNESW 15.8 17.9 141.0 26.7 15.6 -24.9 15.5 -23.8 15.3 -22.7 15.6 -23.9
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.854964
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:31:32.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:31:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:31:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:31:32.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:31:15', tmtdew=12.33, humidity=43.6, cloud=0.0, wind=25.73, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:31:15', seeing=1.51, atlas_timestamp='2026-02-15T20:31:08.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:28:00')
2026-02-15T22:31:32.214 [DEBUG] [Thread-212349] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:31:32.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:31:32.301 [DEBUG] [Thread-212352] [transport.py] [_log()] starting thread (client mode): 0xa5742f80
2026-02-15T22:31:32.301 [DEBUG] [Thread-212352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:31:32.315 [DEBUG] [Thread-212352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:31:32.316 [INFO] [Thread-212352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:31:32.323 [DEBUG] [Thread-212352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] client lang: <none>
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] server lang: <none>
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] kex follows: False
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] Compression: none
2026-02-15T22:31:32.324 [DEBUG] [Thread-212352] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:31:32.382 [DEBUG] [Thread-212352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:31:32.383 [DEBUG] [Thread-212352] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:31:32.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:31:32.384 [DEBUG] [Thread-212352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:31:32.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:31:32.438 [DEBUG] [Thread-212352] [transport.py] [_log()] userauth is OK
2026-02-15T22:31:32.439 [DEBUG] [Thread-212352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:31:32.439 [DEBUG] [Thread-212352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:31:32.439 [DEBUG] [Thread-212352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:31:32.439 [DEBUG] [Thread-212352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:31:32.457 [INFO] [Thread-212352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:31:32.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:31:32.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:31:33.271 [DEBUG] [Thread-212352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:31:33.272 [DEBUG] [Thread-212352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:31:33.320 [DEBUG] [Thread-212352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:31:33.320 [DEBUG] [Thread-212352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:31:33.328 [DEBUG] [Thread-212352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:31:33.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:31:33.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:31:33.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:31:33.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:31:33.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:31:33.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:31:33.361 [DEBUG] [Thread-212352] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:31:33.709 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:43.165 [DEBUG] [Thread-212354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:52.618 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:52.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:31:58.205 [DEBUG] [Thread-212355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:03.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:32:03.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:32:03.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:32:05.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 31, 50), 12.25, 43.68, 0.0, 27.46, 15.32, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:32:05.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:31:50
2026-02-15T22:32:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:32:05.779 [DEBUG] [Thread-212356] [transport.py] [_log()] starting thread (client mode): 0xa57b2ef0
2026-02-15T22:32:05.779 [DEBUG] [Thread-212356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:32:05.799 [DEBUG] [Thread-212356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:32:05.799 [INFO] [Thread-212356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:05.802 [DEBUG] [Thread-212356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] client lang: <none>
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] server lang: <none>
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] kex follows: False
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] Compression: none
2026-02-15T22:32:05.803 [DEBUG] [Thread-212356] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:32:05.821 [DEBUG] [Thread-212356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:32:05.821 [DEBUG] [Thread-212356] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:32:05.822 [DEBUG] [Thread-212356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:32:05.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:32:05.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:32:05.824 [DEBUG] [Thread-212356] [transport.py] [_log()] userauth is OK
2026-02-15T22:32:05.824 [DEBUG] [Thread-212356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:32:05.824 [DEBUG] [Thread-212356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:32:05.824 [DEBUG] [Thread-212356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:32:05.824 [DEBUG] [Thread-212356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:32:05.847 [INFO] [Thread-212356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:32:05.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:32:06.445 [DEBUG] [Thread-212356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:32:06.445 [DEBUG] [Thread-212356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:32:06.446 [DEBUG] [Thread-212356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:32:06.486 [DEBUG] [Thread-212356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:32:06.486 [DEBUG] [Thread-212356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:32:06.488 [DEBUG] [Thread-212356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:32:06.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:32:06.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:32:06.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:32:06.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:32:06.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:32:06.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:32:06.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:32:06.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:32:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:32:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.855311 -999.00  +15.30  20.35     48   +4.60 1 1 1 1 1     0    0 9.85 -45.72 ZNESW 18.7 20.4 154.0 25.7 15.6 -24.8 15.5 -23.7 15.2 -22.7 15.6 -23.5
2026-02-15T22:32:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:32:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:32:06.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.855311
2026-02-15T22:32:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:32:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:32:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:32:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:32:06.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:32:06.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:31:50', tmtdew=12.25, humidity=43.68, cloud=0.0, wind=27.46, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:31:50', seeing=1.51, atlas_timestamp='2026-02-15T20:31:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, -0.0337499999999995, -0.016750000000000043, -0.019999999999999574, 0.04349999999999987, 0.011250000000000426, -0.025000000000000355, -0.02474999999999916, 0.007999999999999119, -0.019000000000000128, -0.06174999999999997, 0.01699999999999946, 0.02999999999999936, -0.0417500000000004, -0.005000000000000782, -0.03049999999999997, 0.028249999999999886, 0.02000000000000135, -0.03950000000000209, -0.024750000000000938, 0.05299999999999905, -0.0002500000000011937, -0.02874999999999872, -0.003249999999999531, 0.03799999999999848, 0.03950000000000031, -0.02674999999999983, -0.01249999999999929, 0.09699999999999953, 0.058000000000001606, 0.03850000000000087, 0.03500000000000014, -0.0002500000000011937], zp_timestamp='2026-02-15T20:28:00')
2026-02-15T22:32:06.511 [DEBUG] [Thread-212356] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:32:06.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:32:06.609 [DEBUG] [Thread-212359] [transport.py] [_log()] starting thread (client mode): 0xa2d55240
2026-02-15T22:32:06.609 [DEBUG] [Thread-212359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:32:06.623 [DEBUG] [Thread-212359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:32:06.623 [INFO] [Thread-212359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:32:06.631 [DEBUG] [Thread-212359] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:32:06.631 [DEBUG] [Thread-212359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:32:06.631 [DEBUG] [Thread-212359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:32:06.631 [DEBUG] [Thread-212359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:06.631 [DEBUG] [Thread-212359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] client lang: <none>
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] server lang: <none>
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] kex follows: False
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] Compression: none
2026-02-15T22:32:06.632 [DEBUG] [Thread-212359] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:32:06.689 [DEBUG] [Thread-212359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:32:06.690 [DEBUG] [Thread-212359] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:32:06.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:32:06.690 [DEBUG] [Thread-212359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:32:06.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:32:06.746 [DEBUG] [Thread-212359] [transport.py] [_log()] userauth is OK
2026-02-15T22:32:06.746 [DEBUG] [Thread-212359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:32:06.746 [DEBUG] [Thread-212359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:32:06.746 [DEBUG] [Thread-212359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:32:06.746 [DEBUG] [Thread-212359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:32:06.765 [INFO] [Thread-212359] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:32:06.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:32:06.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:32:07.660 [DEBUG] [Thread-212359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:32:07.661 [DEBUG] [Thread-212359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:32:07.708 [DEBUG] [Thread-212359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:32:07.708 [DEBUG] [Thread-212359] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:32:07.717 [DEBUG] [Thread-212359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:32:07.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:32: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')
2026-02-15T22:32:07.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:32:07.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:32:07.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:32:07.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:32:07.751 [DEBUG] [Thread-212359] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:32:13.237 [DEBUG] [Thread-212361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:28.285 [DEBUG] [Thread-212362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:30.909 [DEBUG] [Thread-212363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:37.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:32:37.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:32:37.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:32:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 32, 25), 12.27, 43.61, 0.0, 27.63, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:32:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:32:25
2026-02-15T22:32:40.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:32:40.169 [DEBUG] [Thread-212364] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-15T22:32:40.169 [DEBUG] [Thread-212364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:32:40.189 [DEBUG] [Thread-212364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:32:40.190 [INFO] [Thread-212364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] client lang: <none>
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] server lang: <none>
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] kex follows: False
2026-02-15T22:32:40.193 [DEBUG] [Thread-212364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:32:40.194 [DEBUG] [Thread-212364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:32:40.194 [DEBUG] [Thread-212364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:32:40.194 [DEBUG] [Thread-212364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:32:40.194 [DEBUG] [Thread-212364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:32:40.194 [DEBUG] [Thread-212364] [transport.py] [_log()] Compression: none
2026-02-15T22:32:40.194 [DEBUG] [Thread-212364] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:32:40.212 [DEBUG] [Thread-212364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:32:40.213 [DEBUG] [Thread-212364] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:32:40.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:32:40.214 [DEBUG] [Thread-212364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:32:40.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:32:40.216 [DEBUG] [Thread-212364] [transport.py] [_log()] userauth is OK
2026-02-15T22:32:40.217 [DEBUG] [Thread-212364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:32:40.217 [DEBUG] [Thread-212364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:32:40.217 [DEBUG] [Thread-212364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:32:40.217 [DEBUG] [Thread-212364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:32:40.237 [INFO] [Thread-212364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:32:40.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:32:40.871 [DEBUG] [Thread-212364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:32:40.871 [DEBUG] [Thread-212364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:32:40.871 [DEBUG] [Thread-212364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:32:40.912 [DEBUG] [Thread-212364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:32:40.912 [DEBUG] [Thread-212364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:32:40.915 [DEBUG] [Thread-212364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:32:40.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:32:40.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:32:40.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:32:40.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:32:40.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:32:40.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:32:40.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:32:40.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:32:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:32:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.855658 -999.00  +15.20  19.32     48   +4.50 1 1 1 1 1     0    0 9.78 -44.79 ZNESW 18.2 19.3 142.9 26.2 15.6 -24.8 15.4 -23.7 15.3 -22.6 15.6 -23.9
2026-02-15T22:32:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:32:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:32:40.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.855658
2026-02-15T22:32:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:32:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:32:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:32:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:32:40.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:32:40.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:32:25', tmtdew=12.27, humidity=43.61, cloud=0.0, wind=27.63, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:32:26', seeing=1.64, atlas_timestamp='2026-02-15T20:32:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.03774999999999906, -0.008250000000000313, -0.004000000000001336, 0.03550000000000075, 0.011750000000001037, -0.009000000000000341, -0.0007500000000000284, 0.03149999999999942, 0.02400000000000091, -0.05075000000000074, -0.013500000000000512, 0.05349999999999966, 0.004749999999999588, -0.011000000000001009, -0.01249999999999929, 0.05025000000000013, 0.061500000000000554, -0.017000000000001236, 0.02874999999999872, 0.06550000000000011, 0.00274999999999892, -0.023749999999999716, -0.0072499999999990905, 0.054999999999999716, 0.07099999999999973, -0.00975000000000037, -0.014499999999999957, 0.08800000000000097, 0.028999999999999915, 0.0600000000000005, 0.008000000000000895, 0.016750000000000043], zp_timestamp='2026-02-15T20:30:00')
2026-02-15T22:32:40.945 [DEBUG] [Thread-212364] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:32:41.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:32:41.034 [DEBUG] [Thread-212367] [transport.py] [_log()] starting thread (client mode): 0xa2dc1060
2026-02-15T22:32:41.035 [DEBUG] [Thread-212367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:32:41.049 [DEBUG] [Thread-212367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:32:41.049 [INFO] [Thread-212367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:32:41.056 [DEBUG] [Thread-212367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:32:41.056 [DEBUG] [Thread-212367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:32:41.056 [DEBUG] [Thread-212367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] client lang: <none>
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] server lang: <none>
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] kex follows: False
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] Compression: none
2026-02-15T22:32:41.057 [DEBUG] [Thread-212367] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:32:41.114 [DEBUG] [Thread-212367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:32:41.115 [DEBUG] [Thread-212367] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:32:41.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:32:41.116 [DEBUG] [Thread-212367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:32:41.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:32:41.174 [DEBUG] [Thread-212367] [transport.py] [_log()] userauth is OK
2026-02-15T22:32:41.175 [DEBUG] [Thread-212367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:32:41.175 [DEBUG] [Thread-212367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:32:41.175 [DEBUG] [Thread-212367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:32:41.175 [DEBUG] [Thread-212367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:32:41.200 [INFO] [Thread-212367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:32:41.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:32:41.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:32:42.049 [DEBUG] [Thread-212367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:32:42.049 [DEBUG] [Thread-212367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:32:42.097 [DEBUG] [Thread-212367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:32:42.097 [DEBUG] [Thread-212367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:32:42.105 [DEBUG] [Thread-212367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:32:42.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:32:42.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:32:42.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:32:42.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:32:42.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:32:42.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:32:42.138 [DEBUG] [Thread-212367] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:32:43.320 [DEBUG] [Thread-212369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:52.818 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:52.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:32:58.366 [DEBUG] [Thread-212370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:08.001 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:12.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:33:12.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:33:12.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:33:13.404 [DEBUG] [Thread-212371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:14.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 33, 2), 12.25, 43.66, 0.0, 28.9, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:33:14.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:33:02
2026-02-15T22:33:14.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:33:15.083 [DEBUG] [Thread-212372] [transport.py] [_log()] starting thread (client mode): 0xa2db6590
2026-02-15T22:33:15.083 [DEBUG] [Thread-212372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:33:15.102 [DEBUG] [Thread-212372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:33:15.102 [INFO] [Thread-212372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] client lang: <none>
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] server lang: <none>
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] kex follows: False
2026-02-15T22:33:15.105 [DEBUG] [Thread-212372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:33:15.106 [DEBUG] [Thread-212372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:33:15.106 [DEBUG] [Thread-212372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:33:15.106 [DEBUG] [Thread-212372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:33:15.106 [DEBUG] [Thread-212372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:33:15.106 [DEBUG] [Thread-212372] [transport.py] [_log()] Compression: none
2026-02-15T22:33:15.106 [DEBUG] [Thread-212372] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:33:15.124 [DEBUG] [Thread-212372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:33:15.125 [DEBUG] [Thread-212372] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:33:15.125 [DEBUG] [Thread-212372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:33:15.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:33:15.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:33:15.127 [DEBUG] [Thread-212372] [transport.py] [_log()] userauth is OK
2026-02-15T22:33:15.128 [DEBUG] [Thread-212372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:33:15.128 [DEBUG] [Thread-212372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:33:15.128 [DEBUG] [Thread-212372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:33:15.128 [DEBUG] [Thread-212372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:33:15.148 [INFO] [Thread-212372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:33:15.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:33:15.777 [DEBUG] [Thread-212372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:33:15.777 [DEBUG] [Thread-212372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:33:15.777 [DEBUG] [Thread-212372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:33:15.817 [DEBUG] [Thread-212372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:33:15.818 [DEBUG] [Thread-212372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:33:15.821 [DEBUG] [Thread-212372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:33:15.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:33:15.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:33:15.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:33:15.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:33:15.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:33:15.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:33:15.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:33:15.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:33:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:33:15.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.856005 -999.00  +15.20  18.06     49   +4.60 1 1 1 1 1     0    0 9.90 -45.40 ZNESW 18.0 18.1 151.2 25.1 15.6 -24.7 15.5 -23.8 15.2 -22.5 15.5 -23.8
2026-02-15T22:33:15.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:33:15.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:33:15.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.856005
2026-02-15T22:33:15.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:33:15.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:33:15.849 [DEBUG] [Thread-212372] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:33:15.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:33:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:33:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:33:15.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:33:02', tmtdew=12.25, humidity=43.66, cloud=0.0, wind=28.9, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:33:02', seeing=1.45, atlas_timestamp='2026-02-15T20:32:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.03774999999999906, -0.008250000000000313, -0.004000000000001336, 0.03550000000000075, 0.011750000000001037, -0.009000000000000341, -0.0007500000000000284, 0.03149999999999942, 0.02400000000000091, -0.05075000000000074, -0.013500000000000512, 0.05349999999999966, 0.004749999999999588, -0.011000000000001009, -0.01249999999999929, 0.05025000000000013, 0.061500000000000554, -0.017000000000001236, 0.02874999999999872, 0.06550000000000011, 0.00274999999999892, -0.023749999999999716, -0.0072499999999990905, 0.054999999999999716, 0.07099999999999973, -0.00975000000000037, -0.014499999999999957, 0.08800000000000097, 0.028999999999999915, 0.0600000000000005, 0.008000000000000895, 0.016750000000000043], zp_timestamp='2026-02-15T20:30:00')
2026-02-15T22:33:15.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:33:15.945 [DEBUG] [Thread-212375] [transport.py] [_log()] starting thread (client mode): 0xa57e2d70
2026-02-15T22:33:15.946 [DEBUG] [Thread-212375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:33:15.960 [DEBUG] [Thread-212375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:33:15.960 [INFO] [Thread-212375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:33:15.968 [DEBUG] [Thread-212375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:33:15.968 [DEBUG] [Thread-212375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] client lang: <none>
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] server lang: <none>
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] kex follows: False
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] Compression: none
2026-02-15T22:33:15.969 [DEBUG] [Thread-212375] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:33:16.025 [DEBUG] [Thread-212375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:33:16.026 [DEBUG] [Thread-212375] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:33:16.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:33:16.027 [DEBUG] [Thread-212375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:33:16.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:33:16.082 [DEBUG] [Thread-212375] [transport.py] [_log()] userauth is OK
2026-02-15T22:33:16.083 [DEBUG] [Thread-212375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:33:16.083 [DEBUG] [Thread-212375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:33:16.083 [DEBUG] [Thread-212375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:33:16.083 [DEBUG] [Thread-212375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:33:16.107 [INFO] [Thread-212375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:33:16.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:33:16.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:33:16.968 [DEBUG] [Thread-212375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:33:16.969 [DEBUG] [Thread-212375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:33:17.016 [DEBUG] [Thread-212375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:33:17.016 [DEBUG] [Thread-212375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:33:17.024 [DEBUG] [Thread-212375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:33:17.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:33:17.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:33:17.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:33:17.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:33:17.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:33:17.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:33:17.058 [DEBUG] [Thread-212375] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:33:28.441 [DEBUG] [Thread-212377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:30.963 [DEBUG] [Thread-212378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:43.503 [DEBUG] [Thread-212379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:47.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:33:47.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:33:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:33:48.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 33, 37), 12.35, 43.49, 0.0, 32.32, 15.5, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:33:48.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:33:37
2026-02-15T22:33:49.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:33:49.408 [DEBUG] [Thread-212380] [transport.py] [_log()] starting thread (client mode): 0xa2d55e40
2026-02-15T22:33:49.408 [DEBUG] [Thread-212380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:33:49.428 [DEBUG] [Thread-212380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:33:49.428 [INFO] [Thread-212380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] client lang: <none>
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] server lang: <none>
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] kex follows: False
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] Compression: none
2026-02-15T22:33:49.430 [DEBUG] [Thread-212380] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:33:49.438 [DEBUG] [Thread-212380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:33:49.439 [DEBUG] [Thread-212380] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:33:49.439 [DEBUG] [Thread-212380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:33:49.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:33:49.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:33:49.440 [DEBUG] [Thread-212380] [transport.py] [_log()] userauth is OK
2026-02-15T22:33:49.440 [DEBUG] [Thread-212380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:33:49.440 [DEBUG] [Thread-212380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:33:49.440 [DEBUG] [Thread-212380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:33:49.440 [DEBUG] [Thread-212380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:33:49.452 [INFO] [Thread-212380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:33:49.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:33:50.036 [DEBUG] [Thread-212380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:33:50.036 [DEBUG] [Thread-212380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:33:50.036 [DEBUG] [Thread-212380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:33:50.077 [DEBUG] [Thread-212380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:33:50.077 [DEBUG] [Thread-212380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:33:50.080 [DEBUG] [Thread-212380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:33:50.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:33:50.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:33:50.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:33:50.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:33:50.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:33:50.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:33:50.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:33:50.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:33:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:33:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.856353 -999.00  +15.20  19.68     49   +4.60 1 1 1 1 1     0    0 9.85 -44.63 ZNESW 20.8 19.7 157.2 24.3 15.6 -24.8 15.5 -23.8 15.2 -22.5 15.5 -23.8
2026-02-15T22:33:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:33:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:33:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.856353
2026-02-15T22:33:50.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:33:50.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:33:50.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:33:50.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:33:50.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:33:50.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:33:37', tmtdew=12.35, humidity=43.49, cloud=0.0, wind=32.32, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:33:38', seeing=1.89, atlas_timestamp='2026-02-15T20:33:08.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.03774999999999906, -0.008250000000000313, -0.004000000000001336, 0.03550000000000075, 0.011750000000001037, -0.009000000000000341, -0.0007500000000000284, 0.03149999999999942, 0.02400000000000091, -0.05075000000000074, -0.013500000000000512, 0.05349999999999966, 0.004749999999999588, -0.011000000000001009, -0.01249999999999929, 0.05025000000000013, 0.061500000000000554, -0.017000000000001236, 0.02874999999999872, 0.06550000000000011, 0.00274999999999892, -0.023749999999999716, -0.0072499999999990905, 0.054999999999999716, 0.07099999999999973, -0.00975000000000037, -0.014499999999999957, 0.08800000000000097, 0.028999999999999915, 0.0600000000000005, 0.008000000000000895, 0.016750000000000043], zp_timestamp='2026-02-15T20:30:00')
2026-02-15T22:33:50.104 [DEBUG] [Thread-212380] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:33:50.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:33:50.192 [DEBUG] [Thread-212383] [transport.py] [_log()] starting thread (client mode): 0xa2d3e740
2026-02-15T22:33:50.193 [DEBUG] [Thread-212383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:33:50.208 [DEBUG] [Thread-212383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:33:50.208 [INFO] [Thread-212383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:33:50.215 [DEBUG] [Thread-212383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:33:50.216 [DEBUG] [Thread-212383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] client lang: <none>
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] server lang: <none>
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] kex follows: False
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] Compression: none
2026-02-15T22:33:50.217 [DEBUG] [Thread-212383] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:33:50.274 [DEBUG] [Thread-212383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:33:50.275 [DEBUG] [Thread-212383] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:33:50.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:33:50.276 [DEBUG] [Thread-212383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:33:50.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:33:50.330 [DEBUG] [Thread-212383] [transport.py] [_log()] userauth is OK
2026-02-15T22:33:50.330 [DEBUG] [Thread-212383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:33:50.331 [DEBUG] [Thread-212383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:33:50.331 [DEBUG] [Thread-212383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:33:50.331 [DEBUG] [Thread-212383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:33:50.350 [INFO] [Thread-212383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:33:50.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:33:50.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:33:51.170 [DEBUG] [Thread-212383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:33:51.171 [DEBUG] [Thread-212383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:33:51.218 [DEBUG] [Thread-212383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:33:51.219 [DEBUG] [Thread-212383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:33:51.228 [DEBUG] [Thread-212383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:33:51.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:33:51.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:33:51.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:33:51.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:33:51.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:33:51.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:33:51.264 [DEBUG] [Thread-212383] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:33:53.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:53.019 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:33:58.536 [DEBUG] [Thread-212385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:13.577 [DEBUG] [Thread-212386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:21.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:34:21.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:34:21.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:34:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 34, 12), 12.16, 43.81, 0.0, 27.79, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:34:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:34:12
2026-02-15T22:34:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:34:23.637 [DEBUG] [Thread-212387] [transport.py] [_log()] starting thread (client mode): 0xa2d3f100
2026-02-15T22:34:23.638 [DEBUG] [Thread-212387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:34:23.657 [DEBUG] [Thread-212387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:34:23.657 [INFO] [Thread-212387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] client lang: <none>
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] server lang: <none>
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] kex follows: False
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] Compression: none
2026-02-15T22:34:23.661 [DEBUG] [Thread-212387] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:34:23.677 [DEBUG] [Thread-212387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:34:23.678 [DEBUG] [Thread-212387] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:34:23.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:34:23.679 [DEBUG] [Thread-212387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:34:23.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:34:23.681 [DEBUG] [Thread-212387] [transport.py] [_log()] userauth is OK
2026-02-15T22:34:23.681 [DEBUG] [Thread-212387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:34:23.681 [DEBUG] [Thread-212387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:34:23.681 [DEBUG] [Thread-212387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:34:23.681 [DEBUG] [Thread-212387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:34:23.705 [INFO] [Thread-212387] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:34:23.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:34:24.323 [DEBUG] [Thread-212387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:34:24.324 [DEBUG] [Thread-212387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:34:24.324 [DEBUG] [Thread-212387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:34:24.364 [DEBUG] [Thread-212387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:34:24.365 [DEBUG] [Thread-212387] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:34:24.368 [DEBUG] [Thread-212387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:34:24.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:34:24.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:34:24.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:34:24.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:34:24.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:34:24.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:34:24.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:34:24.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:34:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:34:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.857047 -999.00  +15.20  19.21     49   +4.60 1 1 1 1 1     0    0 9.62 -46.42 ZNESW 22.4 19.2 142.0 24.7 15.6 -24.8 15.4 -23.6 15.2 -22.6 15.5 -23.9
2026-02-15T22:34:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:34:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:34:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.857047
2026-02-15T22:34:24.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:34:24.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:34:24.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:34:24.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:34:24.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:34:24.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:34:12', tmtdew=12.16, humidity=43.81, cloud=0.0, wind=27.79, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:34:13', seeing=1.89, atlas_timestamp='2026-02-15T20:34:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.03774999999999906, -0.008250000000000313, -0.004000000000001336, 0.03550000000000075, 0.011750000000001037, -0.009000000000000341, -0.0007500000000000284, 0.03149999999999942, 0.02400000000000091, -0.05075000000000074, -0.013500000000000512, 0.05349999999999966, 0.004749999999999588, -0.011000000000001009, -0.01249999999999929, 0.05025000000000013, 0.061500000000000554, -0.017000000000001236, 0.02874999999999872, 0.06550000000000011, 0.00274999999999892, -0.023749999999999716, -0.0072499999999990905, 0.054999999999999716, 0.07099999999999973, -0.00975000000000037, -0.014499999999999957, 0.08800000000000097, 0.028999999999999915, 0.0600000000000005, 0.008000000000000895, 0.016750000000000043], zp_timestamp='2026-02-15T20:30:00')
2026-02-15T22:34:24.391 [DEBUG] [Thread-212387] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:34:24.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:34:24.486 [DEBUG] [Thread-212390] [transport.py] [_log()] starting thread (client mode): 0xa57e2da0
2026-02-15T22:34:24.486 [DEBUG] [Thread-212390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:34:24.502 [DEBUG] [Thread-212390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:34:24.502 [INFO] [Thread-212390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:34:24.509 [DEBUG] [Thread-212390] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:34:24.510 [DEBUG] [Thread-212390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:34:24.510 [DEBUG] [Thread-212390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:34:24.510 [DEBUG] [Thread-212390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:24.510 [DEBUG] [Thread-212390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:24.510 [DEBUG] [Thread-212390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:24.510 [DEBUG] [Thread-212390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] client lang: <none>
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] server lang: <none>
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] kex follows: False
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:34:24.511 [DEBUG] [Thread-212390] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:34:24.512 [DEBUG] [Thread-212390] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:34:24.512 [DEBUG] [Thread-212390] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:34:24.512 [DEBUG] [Thread-212390] [transport.py] [_log()] Compression: none
2026-02-15T22:34:24.512 [DEBUG] [Thread-212390] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:34:24.570 [DEBUG] [Thread-212390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:34:24.571 [DEBUG] [Thread-212390] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:34:24.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:34:24.572 [DEBUG] [Thread-212390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:34:24.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:34:24.626 [DEBUG] [Thread-212390] [transport.py] [_log()] userauth is OK
2026-02-15T22:34:24.626 [DEBUG] [Thread-212390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:34:24.626 [DEBUG] [Thread-212390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:34:24.626 [DEBUG] [Thread-212390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:34:24.626 [DEBUG] [Thread-212390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:34:24.642 [INFO] [Thread-212390] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:34:24.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:34:24.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:34:25.501 [DEBUG] [Thread-212390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:34:25.501 [DEBUG] [Thread-212390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:34:25.549 [DEBUG] [Thread-212390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:34:25.549 [DEBUG] [Thread-212390] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:34:25.558 [DEBUG] [Thread-212390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:34:25.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:34:25.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:34:25.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:34:25.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:34:25.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:34:25.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:34:25.592 [DEBUG] [Thread-212390] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:34:28.612 [DEBUG] [Thread-212392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:31.019 [DEBUG] [Thread-212393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:41.387 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:43.662 [DEBUG] [Thread-212394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:53.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:53.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:55.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:34:55.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:34:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:34:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 34, 47), 12.14, 44.2, 0.0, 25.71, 15.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:34:57.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:34:47
2026-02-15T22:34:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:34:58.420 [DEBUG] [Thread-212395] [transport.py] [_log()] starting thread (client mode): 0xa2d047f0
2026-02-15T22:34:58.420 [DEBUG] [Thread-212395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:34:58.440 [DEBUG] [Thread-212395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:34:58.441 [INFO] [Thread-212395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:34:58.443 [DEBUG] [Thread-212395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] client lang: <none>
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] server lang: <none>
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] kex follows: False
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] Compression: none
2026-02-15T22:34:58.444 [DEBUG] [Thread-212395] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:34:58.465 [DEBUG] [Thread-212395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:34:58.466 [DEBUG] [Thread-212395] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:34:58.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:34:58.467 [DEBUG] [Thread-212395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:34:58.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:34:58.469 [DEBUG] [Thread-212395] [transport.py] [_log()] userauth is OK
2026-02-15T22:34:58.469 [DEBUG] [Thread-212395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:34:58.470 [DEBUG] [Thread-212395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:34:58.470 [DEBUG] [Thread-212395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:34:58.470 [DEBUG] [Thread-212395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:34:58.494 [INFO] [Thread-212395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:34:58.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:34:58.696 [DEBUG] [Thread-212397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:34:59.129 [DEBUG] [Thread-212395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:34:59.129 [DEBUG] [Thread-212395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:34:59.130 [DEBUG] [Thread-212395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:34:59.170 [DEBUG] [Thread-212395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:34:59.171 [DEBUG] [Thread-212395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:34:59.174 [DEBUG] [Thread-212395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:34:59.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:34:59.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:34:59.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:34:59.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:34:59.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:34:59.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:34:59.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:34:59.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:34:59.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:34:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.857394 -999.00  +15.20  17.13     49   +4.60 1 1 1 1 1     0    0 9.75 -46.23 ZNESW 15.0 17.1 148.9 27.7 15.5 -24.7 15.4 -23.8 15.2 -22.8 15.5 -23.8
2026-02-15T22:34:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:34:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:34:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.857394
2026-02-15T22:34:59.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:34:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:34:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:34:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:34:59.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:34:59.200 [DEBUG] [Thread-212395] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:34:59.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:34:47', tmtdew=12.14, humidity=44.2, cloud=0.0, wind=25.71, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:34:48', seeing=2.08, atlas_timestamp='2026-02-15T20:34:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.03774999999999906, -0.008250000000000313, -0.004000000000001336, 0.03550000000000075, 0.011750000000001037, -0.009000000000000341, -0.0007500000000000284, 0.03149999999999942, 0.02400000000000091, -0.05075000000000074, -0.013500000000000512, 0.05349999999999966, 0.004749999999999588, -0.011000000000001009, -0.01249999999999929, 0.05025000000000013, 0.061500000000000554, -0.017000000000001236, 0.02874999999999872, 0.06550000000000011, 0.00274999999999892, -0.023749999999999716, -0.0072499999999990905, 0.054999999999999716, 0.07099999999999973, -0.00975000000000037, -0.014499999999999957, 0.08800000000000097, 0.028999999999999915, 0.0600000000000005, 0.008000000000000895, 0.016750000000000043], zp_timestamp='2026-02-15T20:30:00')
2026-02-15T22:34:59.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:34:59.296 [DEBUG] [Thread-212399] [transport.py] [_log()] starting thread (client mode): 0xa2d6d120
2026-02-15T22:34:59.296 [DEBUG] [Thread-212399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:34:59.310 [DEBUG] [Thread-212399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:34:59.310 [INFO] [Thread-212399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:34:59.318 [DEBUG] [Thread-212399] [transport.py] [_log()] client lang: <none>
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] server lang: <none>
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] kex follows: False
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] Compression: none
2026-02-15T22:34:59.319 [DEBUG] [Thread-212399] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:34:59.378 [DEBUG] [Thread-212399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:34:59.379 [DEBUG] [Thread-212399] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:34:59.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:34:59.380 [DEBUG] [Thread-212399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:34:59.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:34:59.434 [DEBUG] [Thread-212399] [transport.py] [_log()] userauth is OK
2026-02-15T22:34:59.435 [DEBUG] [Thread-212399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:34:59.435 [DEBUG] [Thread-212399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:34:59.435 [DEBUG] [Thread-212399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:34:59.435 [DEBUG] [Thread-212399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:34:59.454 [INFO] [Thread-212399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:34:59.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:34:59.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:35:00.304 [DEBUG] [Thread-212399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:35:00.304 [DEBUG] [Thread-212399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:35:00.352 [DEBUG] [Thread-212399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:35:00.353 [DEBUG] [Thread-212399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:35:00.362 [DEBUG] [Thread-212399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:35:00.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:35:00.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:35:00.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:35:00.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:35:00.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:35:00.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:35:00.399 [DEBUG] [Thread-212399] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:35:01.068 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:09.526 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:13.653 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:13.730 [DEBUG] [Thread-212401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:28.793 [DEBUG] [Thread-212402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:30.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:35:30.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:35:30.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:35:31.076 [DEBUG] [Thread-212403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:32.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 35, 23), 12.12, 44.26, 0.0, 25.37, 15.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:35:32.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:35:23
2026-02-15T22:35:33.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:35:33.500 [DEBUG] [Thread-212404] [transport.py] [_log()] starting thread (client mode): 0xa2d6d3f0
2026-02-15T22:35:33.500 [DEBUG] [Thread-212404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:35:33.521 [DEBUG] [Thread-212404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:35:33.521 [INFO] [Thread-212404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:35:33.524 [DEBUG] [Thread-212404] [transport.py] [_log()] client lang: <none>
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] server lang: <none>
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] kex follows: False
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] Compression: none
2026-02-15T22:35:33.525 [DEBUG] [Thread-212404] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:35:33.544 [DEBUG] [Thread-212404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:35:33.545 [DEBUG] [Thread-212404] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:35:33.546 [DEBUG] [Thread-212404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:35:33.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:35:33.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:35:33.590 [DEBUG] [Thread-212404] [transport.py] [_log()] userauth is OK
2026-02-15T22:35:33.590 [DEBUG] [Thread-212404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:35:33.590 [DEBUG] [Thread-212404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:35:33.590 [DEBUG] [Thread-212404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:35:33.590 [DEBUG] [Thread-212404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:35:33.614 [INFO] [Thread-212404] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:35:33.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:35:34.240 [DEBUG] [Thread-212404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:35:34.240 [DEBUG] [Thread-212404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:35:34.241 [DEBUG] [Thread-212404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:35:34.282 [DEBUG] [Thread-212404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:35:34.282 [DEBUG] [Thread-212404] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:35:34.284 [DEBUG] [Thread-212404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:35:34.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:35:34.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:35:34.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:35:34.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:35:34.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:35:34.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:35:34.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:35:34.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.857741 -999.00  +15.20  16.57     49   +4.60 1 1 1 1 1     0    0 9.70 -44.41 ZNESW 15.7 16.6 138.0 25.7 15.5 -24.8 15.4 -23.8 15.2 -22.7 15.5 -24.0
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.857741
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:35:34.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:35:23', tmtdew=12.12, humidity=44.26, cloud=0.0, wind=25.37, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:35:24', seeing=2.07, atlas_timestamp='2026-02-15T20:35:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02725000000000044, -0.03774999999999906, -0.008250000000000313, -0.004000000000001336, 0.03550000000000075, 0.011750000000001037, -0.009000000000000341, -0.0007500000000000284, 0.03149999999999942, 0.02400000000000091, -0.05075000000000074, -0.013500000000000512, 0.05349999999999966, 0.004749999999999588, -0.011000000000001009, -0.01249999999999929, 0.05025000000000013, 0.061500000000000554, -0.017000000000001236, 0.02874999999999872, 0.06550000000000011, 0.00274999999999892, -0.023749999999999716, -0.0072499999999990905, 0.054999999999999716, 0.07099999999999973, -0.00975000000000037, -0.014499999999999957, 0.08800000000000097, 0.028999999999999915, 0.0600000000000005, 0.008000000000000895, 0.016750000000000043], zp_timestamp='2026-02-15T20:30:00')
2026-02-15T22:35:34.303 [DEBUG] [Thread-212404] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:35:34.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:35:34.390 [DEBUG] [Thread-212407] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-15T22:35:34.390 [DEBUG] [Thread-212407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:35:34.404 [DEBUG] [Thread-212407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:35:34.404 [INFO] [Thread-212407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:35:34.412 [DEBUG] [Thread-212407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:35:34.412 [DEBUG] [Thread-212407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:35:34.412 [DEBUG] [Thread-212407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:35:34.412 [DEBUG] [Thread-212407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:35:34.412 [DEBUG] [Thread-212407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:35:34.412 [DEBUG] [Thread-212407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] client lang: <none>
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] server lang: <none>
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] kex follows: False
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:35:34.413 [DEBUG] [Thread-212407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:35:34.414 [DEBUG] [Thread-212407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:35:34.414 [DEBUG] [Thread-212407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:35:34.414 [DEBUG] [Thread-212407] [transport.py] [_log()] Compression: none
2026-02-15T22:35:34.414 [DEBUG] [Thread-212407] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:35:34.470 [DEBUG] [Thread-212407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:35:34.471 [DEBUG] [Thread-212407] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:35:34.472 [DEBUG] [Thread-212407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:35:34.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:35:34.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:35:34.526 [DEBUG] [Thread-212407] [transport.py] [_log()] userauth is OK
2026-02-15T22:35:34.526 [DEBUG] [Thread-212407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:35:34.526 [DEBUG] [Thread-212407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:35:34.527 [DEBUG] [Thread-212407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:35:34.527 [DEBUG] [Thread-212407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:35:34.545 [INFO] [Thread-212407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:35:34.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:35:34.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:35:35.362 [DEBUG] [Thread-212407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:35:35.363 [DEBUG] [Thread-212407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:35:35.410 [DEBUG] [Thread-212407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:35:35.410 [DEBUG] [Thread-212407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:35:35.419 [DEBUG] [Thread-212407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:35:35.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:35:35.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:35:35.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:35:35.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:35:35.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:35:35.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:35:35.454 [DEBUG] [Thread-212407] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:35:43.831 [DEBUG] [Thread-212409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:53.420 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:53.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:35:58.883 [DEBUG] [Thread-212410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:05.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:36:05.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:36:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:36:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 35, 23), 12.12, 44.26, 0.0, 25.37, 15.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:36:07.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:35:23
2026-02-15T22:36:07.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:36:07.875 [DEBUG] [Thread-212411] [transport.py] [_log()] starting thread (client mode): 0xa5772380
2026-02-15T22:36:07.875 [DEBUG] [Thread-212411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:36:07.890 [DEBUG] [Thread-212411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:36:07.890 [INFO] [Thread-212411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:36:07.893 [DEBUG] [Thread-212411] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:36:07.893 [DEBUG] [Thread-212411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:36:07.893 [DEBUG] [Thread-212411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:36:07.893 [DEBUG] [Thread-212411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:07.893 [DEBUG] [Thread-212411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:07.893 [DEBUG] [Thread-212411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] client lang: <none>
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] server lang: <none>
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] kex follows: False
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] Compression: none
2026-02-15T22:36:07.894 [DEBUG] [Thread-212411] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:36:07.913 [DEBUG] [Thread-212411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:36:07.914 [DEBUG] [Thread-212411] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:36:07.914 [DEBUG] [Thread-212411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:36:07.914 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:36:07.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:36:07.916 [DEBUG] [Thread-212411] [transport.py] [_log()] userauth is OK
2026-02-15T22:36:07.916 [DEBUG] [Thread-212411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:36:07.916 [DEBUG] [Thread-212411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:36:07.916 [DEBUG] [Thread-212411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:36:07.917 [DEBUG] [Thread-212411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:36:07.941 [INFO] [Thread-212411] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:36:07.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:36:08.595 [DEBUG] [Thread-212411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:36:08.595 [DEBUG] [Thread-212411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:36:08.596 [DEBUG] [Thread-212411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:36:08.636 [DEBUG] [Thread-212411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:36:08.636 [DEBUG] [Thread-212411] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:36:08.639 [DEBUG] [Thread-212411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:36:08.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:36:08.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:36:08.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:36:08.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:36:08.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:36:08.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:36:08.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:36:08.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:36:08.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:36:08.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.858089 -999.00  +15.10  15.11     49   +4.50 1 1 1 1 1     0    0 9.69 -50.07 ZNESW 16.8 15.1 146.0 21.2 15.5 -24.9 15.4 -23.7 15.2 -22.6 15.4 -24.0
2026-02-15T22:36:08.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:36:08.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:36:08.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.858089
2026-02-15T22:36:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:36:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:36:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:36:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:36:08.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:36:08.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:35:23', tmtdew=12.12, humidity=44.26, cloud=0.0, wind=25.37, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:36:00', seeing=1.62, atlas_timestamp='2026-02-15T20:35:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:34:00')
2026-02-15T22:36:08.662 [DEBUG] [Thread-212411] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:36:08.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:36:08.757 [DEBUG] [Thread-212414] [transport.py] [_log()] starting thread (client mode): 0xa2d07ac0
2026-02-15T22:36:08.758 [DEBUG] [Thread-212414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:36:08.773 [DEBUG] [Thread-212414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:36:08.773 [INFO] [Thread-212414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:36:08.780 [DEBUG] [Thread-212414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] client lang: <none>
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] server lang: <none>
2026-02-15T22:36:08.781 [DEBUG] [Thread-212414] [transport.py] [_log()] kex follows: False
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] Compression: none
2026-02-15T22:36:08.782 [DEBUG] [Thread-212414] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:36:08.838 [DEBUG] [Thread-212414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:36:08.838 [DEBUG] [Thread-212414] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:36:08.839 [DEBUG] [Thread-212414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:36:08.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:36:08.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:36:08.895 [DEBUG] [Thread-212414] [transport.py] [_log()] userauth is OK
2026-02-15T22:36:08.895 [DEBUG] [Thread-212414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:36:08.895 [DEBUG] [Thread-212414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:36:08.895 [DEBUG] [Thread-212414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:36:08.895 [DEBUG] [Thread-212414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:36:08.914 [INFO] [Thread-212414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:36:08.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:36:08.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:36:09.730 [DEBUG] [Thread-212414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:36:09.731 [DEBUG] [Thread-212414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:36:09.779 [DEBUG] [Thread-212414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:36:09.779 [DEBUG] [Thread-212414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:36:09.787 [DEBUG] [Thread-212414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:36:09.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:36:09.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:36:09.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:36:09.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:36:09.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:36:09.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:36:09.820 [DEBUG] [Thread-212414] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:36:13.916 [DEBUG] [Thread-212416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:15.591 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:28.973 [DEBUG] [Thread-212417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:31.132 [DEBUG] [Thread-212418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:39.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:36:39.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:36:39.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:36:42.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 35, 23), 12.17, 43.76, 0.0, 25.37, 15.28, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:36:42.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:35:23
2026-02-15T22:36:42.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:36:42.584 [DEBUG] [Thread-212419] [transport.py] [_log()] starting thread (client mode): 0xa2d6c730
2026-02-15T22:36:42.584 [DEBUG] [Thread-212419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:36:42.604 [DEBUG] [Thread-212419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:36:42.604 [INFO] [Thread-212419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:36:42.607 [DEBUG] [Thread-212419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] client lang: <none>
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] server lang: <none>
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] kex follows: False
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] Compression: none
2026-02-15T22:36:42.608 [DEBUG] [Thread-212419] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:36:42.624 [DEBUG] [Thread-212419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:36:42.624 [DEBUG] [Thread-212419] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:36:42.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:36:42.625 [DEBUG] [Thread-212419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:36:42.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:36:42.627 [DEBUG] [Thread-212419] [transport.py] [_log()] userauth is OK
2026-02-15T22:36:42.627 [DEBUG] [Thread-212419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:36:42.627 [DEBUG] [Thread-212419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:36:42.628 [DEBUG] [Thread-212419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:36:42.628 [DEBUG] [Thread-212419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:36:42.651 [INFO] [Thread-212419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:36:42.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:36:43.283 [DEBUG] [Thread-212419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:36:43.284 [DEBUG] [Thread-212419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:36:43.284 [DEBUG] [Thread-212419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:36:43.325 [DEBUG] [Thread-212419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:36:43.325 [DEBUG] [Thread-212419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:36:43.328 [DEBUG] [Thread-212419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:36:43.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:36:43.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:36:43.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:36:43.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:36:43.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:36:43.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:36:43.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:36:43.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:36:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:36:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.858436 -999.00  +15.10  17.80     49   +4.50 1 1 1 1 1     0    0 9.27 -49.08 ZNESW 23.1 17.8 144.4 22.0 15.5 -24.8 15.4 -23.8 15.2 -22.8 15.5 -23.8
2026-02-15T22:36:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:36:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:36:43.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.858436
2026-02-15T22:36:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:36:43.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:36:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:36:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:36:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:36:43.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:35:23', tmtdew=12.17, humidity=43.76, cloud=0.0, wind=25.37, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:36:35', seeing=1.61, atlas_timestamp='2026-02-15T20:36:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:34:00')
2026-02-15T22:36:43.354 [DEBUG] [Thread-212419] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:36:43.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:36:43.463 [DEBUG] [Thread-212422] [transport.py] [_log()] starting thread (client mode): 0xa2d10160
2026-02-15T22:36:43.463 [DEBUG] [Thread-212422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:36:43.477 [DEBUG] [Thread-212422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:36:43.477 [INFO] [Thread-212422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:36:43.485 [DEBUG] [Thread-212422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:36:43.486 [DEBUG] [Thread-212422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] client lang: <none>
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] server lang: <none>
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] kex follows: False
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:36:43.487 [DEBUG] [Thread-212422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:36:43.488 [DEBUG] [Thread-212422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:36:43.488 [DEBUG] [Thread-212422] [transport.py] [_log()] Compression: none
2026-02-15T22:36:43.488 [DEBUG] [Thread-212422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:36:43.544 [DEBUG] [Thread-212422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:36:43.544 [DEBUG] [Thread-212422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:36:43.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:36:43.545 [DEBUG] [Thread-212422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:36:43.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:36:43.602 [DEBUG] [Thread-212422] [transport.py] [_log()] userauth is OK
2026-02-15T22:36:43.602 [DEBUG] [Thread-212422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:36:43.603 [DEBUG] [Thread-212422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:36:43.603 [DEBUG] [Thread-212422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:36:43.603 [DEBUG] [Thread-212422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:36:43.623 [INFO] [Thread-212422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:36:43.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:36:43.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:36:44.008 [DEBUG] [Thread-212424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:44.496 [DEBUG] [Thread-212422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:36:44.496 [DEBUG] [Thread-212422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:36:44.544 [DEBUG] [Thread-212422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:36:44.545 [DEBUG] [Thread-212422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:36:44.554 [DEBUG] [Thread-212422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:36:44.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:36:44.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:36:44.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:36:44.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:36:44.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:36:44.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:36:44.590 [DEBUG] [Thread-212422] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:36:53.619 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:53.620 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:36:59.059 [DEBUG] [Thread-212425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:14.095 [DEBUG] [Thread-212426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:14.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:37:14.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:37:14.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:37:17.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 36, 35), 12.32, 43.59, 0.0, 27.24, 15.57, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:37:17.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:36:35
2026-02-15T22:37:17.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:37:17.836 [DEBUG] [Thread-212427] [transport.py] [_log()] starting thread (client mode): 0xa57e3610
2026-02-15T22:37:17.836 [DEBUG] [Thread-212427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:37:17.856 [DEBUG] [Thread-212427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:37:17.856 [INFO] [Thread-212427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] client lang: <none>
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] server lang: <none>
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] kex follows: False
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] Compression: none
2026-02-15T22:37:17.860 [DEBUG] [Thread-212427] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:37:17.875 [DEBUG] [Thread-212427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:37:17.875 [DEBUG] [Thread-212427] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:37:17.875 [DEBUG] [Thread-212427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:37:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:37:17.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:37:17.917 [DEBUG] [Thread-212427] [transport.py] [_log()] userauth is OK
2026-02-15T22:37:17.918 [DEBUG] [Thread-212427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:37:17.918 [DEBUG] [Thread-212427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:37:17.918 [DEBUG] [Thread-212427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:37:17.918 [DEBUG] [Thread-212427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:37:17.945 [INFO] [Thread-212427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:37:17.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:37:18.587 [DEBUG] [Thread-212427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:37:18.596 [DEBUG] [Thread-212427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:37:18.597 [DEBUG] [Thread-212427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:37:18.628 [DEBUG] [Thread-212427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:37:18.629 [DEBUG] [Thread-212427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:37:18.632 [DEBUG] [Thread-212427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:37:18.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:37:18.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:37:18.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:37:18.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:37:18.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:37:18.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:37:18.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:37:18.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:37:18.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:37:18.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.858783 -999.00  +15.10  20.09     49   +4.60 1 1 1 1 1     0    0 9.57 -49.15 ZNESW 19.8 20.1 157.0 25.3 15.5 -24.8 15.4 -23.7 15.2 -22.6 15.4 -23.9
2026-02-15T22:37:18.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:37:18.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:37:18.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.858783
2026-02-15T22:37:18.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:37:18.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:37:18.660 [DEBUG] [Thread-212427] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:37:18.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:37:18.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:37:18.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:37:18.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:36:35', tmtdew=12.32, humidity=43.59, cloud=0.0, wind=27.24, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:37:11', seeing=1.92, atlas_timestamp='2026-02-15T20:36:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:34:00')
2026-02-15T22:37:18.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:37:18.757 [DEBUG] [Thread-212430] [transport.py] [_log()] starting thread (client mode): 0xa2d54e20
2026-02-15T22:37:18.758 [DEBUG] [Thread-212430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:37:18.772 [DEBUG] [Thread-212430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:37:18.772 [INFO] [Thread-212430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] client lang: <none>
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] server lang: <none>
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] kex follows: False
2026-02-15T22:37:18.780 [DEBUG] [Thread-212430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:37:18.781 [DEBUG] [Thread-212430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:37:18.781 [DEBUG] [Thread-212430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:37:18.781 [DEBUG] [Thread-212430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:37:18.781 [DEBUG] [Thread-212430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:37:18.781 [DEBUG] [Thread-212430] [transport.py] [_log()] Compression: none
2026-02-15T22:37:18.781 [DEBUG] [Thread-212430] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:37:18.999 [DEBUG] [Thread-212430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:37:19.000 [DEBUG] [Thread-212430] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:37:19.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:37:19.001 [DEBUG] [Thread-212430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:37:19.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:37:19.059 [DEBUG] [Thread-212430] [transport.py] [_log()] userauth is OK
2026-02-15T22:37:19.059 [DEBUG] [Thread-212430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:37:19.059 [DEBUG] [Thread-212430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:37:19.059 [DEBUG] [Thread-212430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:37:19.059 [DEBUG] [Thread-212430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:37:19.079 [INFO] [Thread-212430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:37:19.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:37:19.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:37:19.910 [DEBUG] [Thread-212430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:37:19.911 [DEBUG] [Thread-212430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:37:19.958 [DEBUG] [Thread-212430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:37:19.959 [DEBUG] [Thread-212430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:37:19.968 [DEBUG] [Thread-212430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:37:19.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:37:19.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:37:19.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:37:19.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:37:19.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:37:19.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:37:20.005 [DEBUG] [Thread-212430] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:37:29.129 [DEBUG] [Thread-212432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:31.202 [DEBUG] [Thread-212433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:44.183 [DEBUG] [Thread-212434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:49.361 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:50.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:37:50.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:37:50.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:37:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 37, 10), 12.1, 44.33, 0.0, 23.26, 15.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:37:52.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:37:10
2026-02-15T22:37:52.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:37:53.045 [DEBUG] [Thread-212435] [transport.py] [_log()] starting thread (client mode): 0xa2d6fac0
2026-02-15T22:37:53.046 [DEBUG] [Thread-212435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:37:53.066 [DEBUG] [Thread-212435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:37:53.066 [INFO] [Thread-212435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] client lang: <none>
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] server lang: <none>
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] kex follows: False
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] Compression: none
2026-02-15T22:37:53.070 [DEBUG] [Thread-212435] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:37:53.084 [DEBUG] [Thread-212435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:37:53.084 [DEBUG] [Thread-212435] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:37:53.084 [DEBUG] [Thread-212435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:37:53.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:37:53.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:37:53.085 [DEBUG] [Thread-212435] [transport.py] [_log()] userauth is OK
2026-02-15T22:37:53.085 [DEBUG] [Thread-212435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:37:53.085 [DEBUG] [Thread-212435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:37:53.085 [DEBUG] [Thread-212435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:37:53.085 [DEBUG] [Thread-212435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:37:53.095 [INFO] [Thread-212435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:37:53.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:37:53.729 [DEBUG] [Thread-212435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:37:53.729 [DEBUG] [Thread-212435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:37:53.729 [DEBUG] [Thread-212435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:37:53.770 [DEBUG] [Thread-212435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:37:53.770 [DEBUG] [Thread-212435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:37:53.773 [DEBUG] [Thread-212435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:37:53.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:37:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:37:53.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:37:53.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:37:53.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:37:53.794 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:37:53.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:37:53.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:37:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:37:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.859478 -999.00  +15.20  18.59     49   +4.60 1 1 1 1 1     0    0 9.57 -46.65 ZNESW 18.3 18.6 148.0 25.4 15.5 -24.8 15.4 -23.7 15.2 -22.7 15.4 -23.9
2026-02-15T22:37:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:37:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:37:53.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.859478
2026-02-15T22:37:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:37:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:37:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:37:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:37:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:37:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:37:10', tmtdew=12.1, humidity=44.33, cloud=0.0, wind=23.26, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:37:47', seeing=1.99, atlas_timestamp='2026-02-15T20:37:38.899', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:34:00')
2026-02-15T22:37:53.797 [DEBUG] [Thread-212435] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:37:53.819 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:53.820 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:37:53.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:37:53.893 [DEBUG] [Thread-212438] [transport.py] [_log()] starting thread (client mode): 0xa2d55390
2026-02-15T22:37:53.893 [DEBUG] [Thread-212438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:37:53.907 [DEBUG] [Thread-212438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:37:53.908 [INFO] [Thread-212438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:37:53.915 [DEBUG] [Thread-212438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:37:53.915 [DEBUG] [Thread-212438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] client lang: <none>
2026-02-15T22:37:53.916 [DEBUG] [Thread-212438] [transport.py] [_log()] server lang: <none>
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] kex follows: False
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:37:53.917 [DEBUG] [Thread-212438] [transport.py] [_log()] Compression: none
2026-02-15T22:37:53.918 [DEBUG] [Thread-212438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:37:53.974 [DEBUG] [Thread-212438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:37:53.975 [DEBUG] [Thread-212438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:37:53.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:37:53.977 [DEBUG] [Thread-212438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:37:53.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:37:54.030 [DEBUG] [Thread-212438] [transport.py] [_log()] userauth is OK
2026-02-15T22:37:54.030 [DEBUG] [Thread-212438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:37:54.031 [DEBUG] [Thread-212438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:37:54.031 [DEBUG] [Thread-212438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:37:54.031 [DEBUG] [Thread-212438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:37:54.052 [INFO] [Thread-212438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:37:54.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:37:54.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:37:54.885 [DEBUG] [Thread-212438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:37:54.885 [DEBUG] [Thread-212438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:37:54.933 [DEBUG] [Thread-212438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:37:54.934 [DEBUG] [Thread-212438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:37:54.943 [DEBUG] [Thread-212438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:37:54.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:37:54.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:37:54.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:37:54.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:37:54.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:37:54.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:37:54.980 [DEBUG] [Thread-212438] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:37:59.218 [DEBUG] [Thread-212440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:14.269 [DEBUG] [Thread-212441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:38:24.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:38:25.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:38:27.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 37, 47), 12.14, 43.84, 0.0, 22.53, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:38:27.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:37:47
2026-02-15T22:38:27.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:38:27.711 [DEBUG] [Thread-212442] [transport.py] [_log()] starting thread (client mode): 0xa5770400
2026-02-15T22:38:27.711 [DEBUG] [Thread-212442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:38:27.731 [DEBUG] [Thread-212442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:38:27.731 [INFO] [Thread-212442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:38:27.734 [DEBUG] [Thread-212442] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] client lang: <none>
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] server lang: <none>
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] kex follows: False
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] Compression: none
2026-02-15T22:38:27.735 [DEBUG] [Thread-212442] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:38:27.751 [DEBUG] [Thread-212442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:38:27.752 [DEBUG] [Thread-212442] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:38:27.752 [DEBUG] [Thread-212442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:38:27.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:38:27.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:38:27.753 [DEBUG] [Thread-212442] [transport.py] [_log()] userauth is OK
2026-02-15T22:38:27.753 [DEBUG] [Thread-212442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:38:27.753 [DEBUG] [Thread-212442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:38:27.754 [DEBUG] [Thread-212442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:38:27.754 [DEBUG] [Thread-212442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:38:27.769 [INFO] [Thread-212442] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:38:27.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:38:28.420 [DEBUG] [Thread-212442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:38:28.420 [DEBUG] [Thread-212442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:38:28.420 [DEBUG] [Thread-212442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:38:28.461 [DEBUG] [Thread-212442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:38:28.461 [DEBUG] [Thread-212442] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:38:28.464 [DEBUG] [Thread-212442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:38:28.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:38:28.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:38:28.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:38:28.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:38:28.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:38:28.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:38:28.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:38:28.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:38:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:38:28.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.859825 -999.00  +15.10  20.15     49   +4.60 1 1 1 1 1     0    0 9.65 -45.04 ZNESW 17.6 20.1 148.8 24.7 15.5 -24.8 15.4 -23.7 15.2 -22.7 15.4 -24.1
2026-02-15T22:38:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:38:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:38:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.859825
2026-02-15T22:38:28.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:38:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:38:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:38:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:38:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:38:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:37:47', tmtdew=12.14, humidity=43.84, cloud=0.0, wind=22.53, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:38:23', seeing=1.99, atlas_timestamp='2026-02-15T20:38:08.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:34:00')
2026-02-15T22:38:28.488 [DEBUG] [Thread-212442] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:38:28.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:38:28.587 [DEBUG] [Thread-212445] [transport.py] [_log()] starting thread (client mode): 0xa2d6c2e0
2026-02-15T22:38:28.587 [DEBUG] [Thread-212445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:38:28.601 [DEBUG] [Thread-212445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:38:28.602 [INFO] [Thread-212445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:38:28.609 [DEBUG] [Thread-212445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:38:28.609 [DEBUG] [Thread-212445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:38:28.609 [DEBUG] [Thread-212445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] client lang: <none>
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] server lang: <none>
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] kex follows: False
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] Compression: none
2026-02-15T22:38:28.610 [DEBUG] [Thread-212445] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:38:28.665 [DEBUG] [Thread-212445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:38:28.666 [DEBUG] [Thread-212445] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:38:28.666 [DEBUG] [Thread-212445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:38:28.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:38:28.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:38:28.721 [DEBUG] [Thread-212445] [transport.py] [_log()] userauth is OK
2026-02-15T22:38:28.722 [DEBUG] [Thread-212445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:38:28.722 [DEBUG] [Thread-212445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:38:28.722 [DEBUG] [Thread-212445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:38:28.722 [DEBUG] [Thread-212445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:38:28.744 [INFO] [Thread-212445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:38:28.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:38:28.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:38:29.302 [DEBUG] [Thread-212447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:29.568 [DEBUG] [Thread-212445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:38:29.568 [DEBUG] [Thread-212445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:38:29.616 [DEBUG] [Thread-212445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:38:29.616 [DEBUG] [Thread-212445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:38:29.625 [DEBUG] [Thread-212445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:38:29.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:38:29.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:38:29.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:38:29.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:38:29.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:38:29.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:38:29.658 [DEBUG] [Thread-212445] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:38:31.255 [DEBUG] [Thread-212448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:44.347 [DEBUG] [Thread-212449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:54.058 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:54.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:59.380 [DEBUG] [Thread-212450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:38:59.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:38:59.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:38:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:39:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 38, 23), 12.12, 43.91, 0.0, 24.28, 15.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:39:02.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:38:23
2026-02-15T22:39:02.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:39:03.007 [DEBUG] [Thread-212451] [transport.py] [_log()] starting thread (client mode): 0xa2d05ed0
2026-02-15T22:39:03.007 [DEBUG] [Thread-212451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:39:03.027 [DEBUG] [Thread-212451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:39:03.027 [INFO] [Thread-212451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:39:03.030 [DEBUG] [Thread-212451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:39:03.030 [DEBUG] [Thread-212451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:39:03.030 [DEBUG] [Thread-212451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] client lang: <none>
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] server lang: <none>
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] kex follows: False
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:39:03.031 [DEBUG] [Thread-212451] [transport.py] [_log()] Compression: none
2026-02-15T22:39:03.032 [DEBUG] [Thread-212451] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:39:03.049 [DEBUG] [Thread-212451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:39:03.050 [DEBUG] [Thread-212451] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:39:03.050 [DEBUG] [Thread-212451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:39:03.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:39:03.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:39:03.052 [DEBUG] [Thread-212451] [transport.py] [_log()] userauth is OK
2026-02-15T22:39:03.052 [DEBUG] [Thread-212451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:39:03.052 [DEBUG] [Thread-212451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:39:03.052 [DEBUG] [Thread-212451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:39:03.052 [DEBUG] [Thread-212451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:39:03.076 [INFO] [Thread-212451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:39:03.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:39:03.661 [DEBUG] [Thread-212451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:39:03.662 [DEBUG] [Thread-212451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:39:03.662 [DEBUG] [Thread-212451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:39:03.703 [DEBUG] [Thread-212451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:39:03.703 [DEBUG] [Thread-212451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:39:03.706 [DEBUG] [Thread-212451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:39:03.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:39:03.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:39:03.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:39:03.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:39:03.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:39:03.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:39:03.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:39:03.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:39:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:39:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.860172 -999.00  +15.10  18.04     49   +4.70 1 1 1 1 1     0    0 9.35 -48.02 ZNESW 18.0 18.0 150.1 27.6 15.5 -24.9 15.4 -23.6 15.2 -22.5 15.5 -23.8
2026-02-15T22:39:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:39:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:39:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.860172
2026-02-15T22:39:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:39:03.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:39:03.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:39:03.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:39:03.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:39:03.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:38:23', tmtdew=12.12, humidity=43.91, cloud=0.0, wind=24.28, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:38:58', seeing=1.73, atlas_timestamp='2026-02-15T20:38:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:36:00')
2026-02-15T22:39:03.733 [DEBUG] [Thread-212451] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:39:03.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:39:03.828 [DEBUG] [Thread-212454] [transport.py] [_log()] starting thread (client mode): 0xa2db78e0
2026-02-15T22:39:03.828 [DEBUG] [Thread-212454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:39:03.843 [DEBUG] [Thread-212454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:39:03.843 [INFO] [Thread-212454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:39:03.851 [DEBUG] [Thread-212454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:39:03.851 [DEBUG] [Thread-212454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:39:03.851 [DEBUG] [Thread-212454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:39:03.851 [DEBUG] [Thread-212454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:03.851 [DEBUG] [Thread-212454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:03.851 [DEBUG] [Thread-212454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] client lang: <none>
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] server lang: <none>
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] kex follows: False
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] Compression: none
2026-02-15T22:39:03.852 [DEBUG] [Thread-212454] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:39:03.910 [DEBUG] [Thread-212454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:39:03.911 [DEBUG] [Thread-212454] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:39:03.911 [DEBUG] [Thread-212454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:39:03.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:39:03.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:39:03.966 [DEBUG] [Thread-212454] [transport.py] [_log()] userauth is OK
2026-02-15T22:39:03.966 [DEBUG] [Thread-212454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:39:03.967 [DEBUG] [Thread-212454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:39:03.967 [DEBUG] [Thread-212454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:39:03.967 [DEBUG] [Thread-212454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:39:03.987 [INFO] [Thread-212454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:39:03.987 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:39:03.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:39:04.864 [DEBUG] [Thread-212454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:39:04.864 [DEBUG] [Thread-212454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:39:04.912 [DEBUG] [Thread-212454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:39:04.913 [DEBUG] [Thread-212454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:39:04.922 [DEBUG] [Thread-212454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:39:04.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:39: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')
2026-02-15T22:39:04.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:39:04.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:39:04.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:39:04.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:39:04.959 [DEBUG] [Thread-212454] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:39:14.416 [DEBUG] [Thread-212456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:22.768 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:29.470 [DEBUG] [Thread-212457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:31.312 [DEBUG] [Thread-212458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:34.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:39:34.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:39:34.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:39:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 38, 58), 12.07, 44.39, 0.0, 21.16, 15.17, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:39:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:38:58
2026-02-15T22:39:37.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:39:38.011 [DEBUG] [Thread-212459] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-15T22:39:38.012 [DEBUG] [Thread-212459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:39:38.031 [DEBUG] [Thread-212459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:39:38.031 [INFO] [Thread-212459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] client lang: <none>
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] server lang: <none>
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] kex follows: False
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] Compression: none
2026-02-15T22:39:38.035 [DEBUG] [Thread-212459] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:39:38.052 [DEBUG] [Thread-212459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:39:38.053 [DEBUG] [Thread-212459] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:39:38.053 [DEBUG] [Thread-212459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:39:38.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:39:38.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:39:38.055 [DEBUG] [Thread-212459] [transport.py] [_log()] userauth is OK
2026-02-15T22:39:38.055 [DEBUG] [Thread-212459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:39:38.055 [DEBUG] [Thread-212459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:39:38.055 [DEBUG] [Thread-212459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:39:38.055 [DEBUG] [Thread-212459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:39:38.088 [INFO] [Thread-212459] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:39:38.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:39:38.740 [DEBUG] [Thread-212459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:39:38.740 [DEBUG] [Thread-212459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:39:38.741 [DEBUG] [Thread-212459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:39:38.782 [DEBUG] [Thread-212459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:39:38.782 [DEBUG] [Thread-212459] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:39:38.785 [DEBUG] [Thread-212459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:39:38.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:39:38.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:39:38.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:39:38.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:39:38.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:39:38.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:39:38.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:39:38.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:39:38.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:39:38.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.860519 -999.00  +15.10  16.43     49   +4.60 1 1 1 1 1     0    0 9.57 -47.73 ZNESW 16.5 16.4 146.8 23.3 15.5 -24.8 15.4 -23.6 15.2 -22.7 15.4 -23.8
2026-02-15T22:39:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:39:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:39:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.860519
2026-02-15T22:39:38.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:39:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:39:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:39:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:39:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:39:38.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:38:58', tmtdew=12.07, humidity=44.39, cloud=0.0, wind=21.16, temperature=15.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:38:58', seeing=1.73, atlas_timestamp='2026-02-15T20:39:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:36:00')
2026-02-15T22:39:38.816 [DEBUG] [Thread-212459] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:39:38.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:39:38.912 [DEBUG] [Thread-212462] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc70
2026-02-15T22:39:38.912 [DEBUG] [Thread-212462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:39:38.926 [DEBUG] [Thread-212462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:39:38.927 [INFO] [Thread-212462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:39:38.934 [DEBUG] [Thread-212462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:39:38.934 [DEBUG] [Thread-212462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] client lang: <none>
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] server lang: <none>
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] kex follows: False
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:39:38.935 [DEBUG] [Thread-212462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:39:38.936 [DEBUG] [Thread-212462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:39:38.936 [DEBUG] [Thread-212462] [transport.py] [_log()] Compression: none
2026-02-15T22:39:38.936 [DEBUG] [Thread-212462] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:39:38.995 [DEBUG] [Thread-212462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:39:38.996 [DEBUG] [Thread-212462] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:39:38.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:39:38.997 [DEBUG] [Thread-212462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:39:38.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:39:39.058 [DEBUG] [Thread-212462] [transport.py] [_log()] userauth is OK
2026-02-15T22:39:39.059 [DEBUG] [Thread-212462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:39:39.059 [DEBUG] [Thread-212462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:39:39.059 [DEBUG] [Thread-212462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:39:39.059 [DEBUG] [Thread-212462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:39:39.078 [INFO] [Thread-212462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:39:39.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:39:39.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:39:39.902 [DEBUG] [Thread-212462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:39:39.902 [DEBUG] [Thread-212462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:39:39.949 [DEBUG] [Thread-212462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:39:39.949 [DEBUG] [Thread-212462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:39:39.957 [DEBUG] [Thread-212462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:39:39.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:39:39.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:39:39.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:39:39.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:39:39.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:39:39.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:39:39.990 [DEBUG] [Thread-212462] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:39:44.505 [DEBUG] [Thread-212464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:54.262 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:54.263 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:39:59.555 [DEBUG] [Thread-212465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:10.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:40:10.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:40:10.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:40:12.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 39, 34), 12.18, 43.99, 0.0, 22.94, 15.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:40:12.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:39:34
2026-02-15T22:40:12.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:40:12.958 [DEBUG] [Thread-212466] [transport.py] [_log()] starting thread (client mode): 0xa2d3c790
2026-02-15T22:40:12.958 [DEBUG] [Thread-212466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:40:12.979 [DEBUG] [Thread-212466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:40:12.979 [INFO] [Thread-212466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:40:12.982 [DEBUG] [Thread-212466] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:40:12.982 [DEBUG] [Thread-212466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:40:12.982 [DEBUG] [Thread-212466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:40:12.982 [DEBUG] [Thread-212466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] client lang: <none>
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] server lang: <none>
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] kex follows: False
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] Compression: none
2026-02-15T22:40:12.983 [DEBUG] [Thread-212466] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:40:13.002 [DEBUG] [Thread-212466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:40:13.003 [DEBUG] [Thread-212466] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:40:13.003 [DEBUG] [Thread-212466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:40:13.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:40:13.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:40:13.005 [DEBUG] [Thread-212466] [transport.py] [_log()] userauth is OK
2026-02-15T22:40:13.006 [DEBUG] [Thread-212466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:40:13.006 [DEBUG] [Thread-212466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:40:13.006 [DEBUG] [Thread-212466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:40:13.006 [DEBUG] [Thread-212466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:40:13.021 [INFO] [Thread-212466] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:40:13.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:40:13.726 [DEBUG] [Thread-212466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:40:13.726 [DEBUG] [Thread-212466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:40:13.727 [DEBUG] [Thread-212466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:40:13.767 [DEBUG] [Thread-212466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:40:13.768 [DEBUG] [Thread-212466] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:40:13.771 [DEBUG] [Thread-212466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:40:13.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:40:13.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:40:13.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:40:13.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:40:13.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:40:13.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:40:13.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:40:13.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.860866 -999.00  +15.10  18.24     49   +4.60 1 1 1 1 1     0    0 9.51 -44.90 ZNESW 20.7 18.2 146.2 25.3 15.5 -24.7 15.4 -23.8 15.1 -22.7 15.4 -23.8
2026-02-15T22:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.860866
2026-02-15T22:40:13.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:40:13.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:39:34', tmtdew=12.18, humidity=43.99, cloud=0.0, wind=22.94, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:39:35', seeing=2.01, atlas_timestamp='2026-02-15T20:39:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:36:00')
2026-02-15T22:40:13.797 [DEBUG] [Thread-212466] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:40:13.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:40:13.890 [DEBUG] [Thread-212469] [transport.py] [_log()] starting thread (client mode): 0xa2d6f2e0
2026-02-15T22:40:13.890 [DEBUG] [Thread-212469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:40:13.907 [DEBUG] [Thread-212469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:40:13.908 [INFO] [Thread-212469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:40:13.915 [DEBUG] [Thread-212469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] client lang: <none>
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] server lang: <none>
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] kex follows: False
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] Compression: none
2026-02-15T22:40:13.916 [DEBUG] [Thread-212469] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:40:13.973 [DEBUG] [Thread-212469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:40:13.974 [DEBUG] [Thread-212469] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:40:13.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:40:13.975 [DEBUG] [Thread-212469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:40:13.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:40:14.029 [DEBUG] [Thread-212469] [transport.py] [_log()] userauth is OK
2026-02-15T22:40:14.029 [DEBUG] [Thread-212469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:40:14.029 [DEBUG] [Thread-212469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:40:14.029 [DEBUG] [Thread-212469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:40:14.029 [DEBUG] [Thread-212469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:40:14.044 [INFO] [Thread-212469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:40:14.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:40:14.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:40:14.590 [DEBUG] [Thread-212471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:14.887 [DEBUG] [Thread-212469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:40:14.887 [DEBUG] [Thread-212469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:40:14.936 [DEBUG] [Thread-212469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:40:14.936 [DEBUG] [Thread-212469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:40:14.945 [DEBUG] [Thread-212469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:40:14.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:40:14.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:40:14.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:40:14.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:40:14.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:40:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:40:14.982 [DEBUG] [Thread-212469] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:40:29.641 [DEBUG] [Thread-212472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:31.388 [DEBUG] [Thread-212473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:37.099 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:44.674 [DEBUG] [Thread-212474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:45.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:40:45.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:40:45.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:40:46.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 40, 11), 12.0, 44.63, 0.0, 25.21, 15.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:40:46.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:40:11
2026-02-15T22:40:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:40:47.376 [DEBUG] [Thread-212475] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-15T22:40:47.377 [DEBUG] [Thread-212475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:40:47.398 [DEBUG] [Thread-212475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:40:47.399 [INFO] [Thread-212475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] client lang: <none>
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] server lang: <none>
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] kex follows: False
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] Compression: none
2026-02-15T22:40:47.402 [DEBUG] [Thread-212475] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:40:47.420 [DEBUG] [Thread-212475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:40:47.420 [DEBUG] [Thread-212475] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:40:47.421 [DEBUG] [Thread-212475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:40:47.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:40:47.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:40:47.423 [DEBUG] [Thread-212475] [transport.py] [_log()] userauth is OK
2026-02-15T22:40:47.424 [DEBUG] [Thread-212475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:40:47.424 [DEBUG] [Thread-212475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:40:47.424 [DEBUG] [Thread-212475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:40:47.424 [DEBUG] [Thread-212475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:40:47.463 [INFO] [Thread-212475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:40:47.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:40:48.106 [DEBUG] [Thread-212475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:40:48.106 [DEBUG] [Thread-212475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:40:48.106 [DEBUG] [Thread-212475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:40:48.147 [DEBUG] [Thread-212475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:40:48.147 [DEBUG] [Thread-212475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:40:48.150 [DEBUG] [Thread-212475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:40:48.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:40:48.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:40:48.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:40:48.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:40:48.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:40:48.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:40:48.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:40:48.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:40:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:40:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.860866 -999.00  +15.10  18.24     49   +4.60 1 1 1 1 1     0    0 9.51 -44.90 ZNESW 20.7 18.2 146.2 25.3 15.5 -24.7 15.4 -23.8 15.1 -22.7 15.4 -23.8
2026-02-15T22:40:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:40:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:40:48.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.860866
2026-02-15T22:40:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:40:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:40:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:40:48.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:40:48.171 [DEBUG] [Thread-212475] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:40:48.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:40:48.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:40:11', tmtdew=12.0, humidity=44.63, cloud=0.0, wind=25.21, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:40:11', seeing=2.12, atlas_timestamp='2026-02-15T20:39:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:36:00')
2026-02-15T22:40:48.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:40:48.266 [DEBUG] [Thread-212478] [transport.py] [_log()] starting thread (client mode): 0xa57c0580
2026-02-15T22:40:48.266 [DEBUG] [Thread-212478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:40:48.280 [DEBUG] [Thread-212478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:40:48.281 [INFO] [Thread-212478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:40:48.288 [DEBUG] [Thread-212478] [transport.py] [_log()] client lang: <none>
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] server lang: <none>
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] kex follows: False
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] Compression: none
2026-02-15T22:40:48.289 [DEBUG] [Thread-212478] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:40:48.347 [DEBUG] [Thread-212478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:40:48.347 [DEBUG] [Thread-212478] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:40:48.348 [DEBUG] [Thread-212478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:40:48.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:40:48.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:40:48.405 [DEBUG] [Thread-212478] [transport.py] [_log()] userauth is OK
2026-02-15T22:40:48.406 [DEBUG] [Thread-212478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:40:48.406 [DEBUG] [Thread-212478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:40:48.406 [DEBUG] [Thread-212478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:40:48.406 [DEBUG] [Thread-212478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:40:48.425 [INFO] [Thread-212478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:40:48.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:40:48.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:40:49.260 [DEBUG] [Thread-212478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:40:49.260 [DEBUG] [Thread-212478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:40:49.308 [DEBUG] [Thread-212478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:40:49.309 [DEBUG] [Thread-212478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:40:49.318 [DEBUG] [Thread-212478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:40:49.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:40:49.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:40:49.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:40:49.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:40:49.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:40:49.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:40:49.354 [DEBUG] [Thread-212478] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:40:54.511 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:54.512 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:56.332 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:40:59.714 [DEBUG] [Thread-212480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:14.773 [DEBUG] [Thread-212481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:41:19.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:41:19.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:41:21.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 40, 47), 12.04, 44.51, 0.0, 25.09, 15.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:41:21.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:40:47
2026-02-15T22:41:21.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:41:21.633 [DEBUG] [Thread-212482] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-15T22:41:21.634 [DEBUG] [Thread-212482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:41:21.653 [DEBUG] [Thread-212482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:41:21.653 [INFO] [Thread-212482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:41:21.656 [DEBUG] [Thread-212482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:41:21.656 [DEBUG] [Thread-212482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:41:21.656 [DEBUG] [Thread-212482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:41:21.656 [DEBUG] [Thread-212482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] client lang: <none>
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] server lang: <none>
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] kex follows: False
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] Compression: none
2026-02-15T22:41:21.657 [DEBUG] [Thread-212482] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:41:21.674 [DEBUG] [Thread-212482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:41:21.674 [DEBUG] [Thread-212482] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:41:21.675 [DEBUG] [Thread-212482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:41:21.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:41:21.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:41:21.677 [DEBUG] [Thread-212482] [transport.py] [_log()] userauth is OK
2026-02-15T22:41:21.677 [DEBUG] [Thread-212482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:41:21.677 [DEBUG] [Thread-212482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:41:21.677 [DEBUG] [Thread-212482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:41:21.678 [DEBUG] [Thread-212482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:41:21.702 [INFO] [Thread-212482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:41:21.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:41:22.320 [DEBUG] [Thread-212482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:41:22.320 [DEBUG] [Thread-212482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:41:22.321 [DEBUG] [Thread-212482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:41:22.361 [DEBUG] [Thread-212482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:41:22.361 [DEBUG] [Thread-212482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:41:22.365 [DEBUG] [Thread-212482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:41:22.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:41:22.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:41:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:41:22.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:41:22.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:41:22.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:41:22.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:41:22.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:41:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:41:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.861561 -999.00  +15.20  24.16     49   +4.70 1 1 1 1 1     0    0 9.44 -49.24 ZNESW 17.0 24.2 148.4 31.3 15.5 -24.6 15.4 -23.6 15.2 -22.5 15.4 -23.7
2026-02-15T22:41:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:41:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:41:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.861561
2026-02-15T22:41:22.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:41:22.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:41:22.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:41:22.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:41:22.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:41:22.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:40:47', tmtdew=12.04, humidity=44.51, cloud=0.0, wind=25.09, temperature=15.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:40:47', seeing=2.58, atlas_timestamp='2026-02-15T20:40:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04225000000000101, -0.03824999999999967, 0.004250000000000753, -0.008500000000001506, 0.015499999999999403, -0.005249999999998423, 0.011999999999998678, -0.006249999999997868, -0.0035000000000007248, -0.015000000000000568, -0.05874999999999986, -0.012000000000000455, 0.006999999999999673, -0.021750000000000824, -0.009000000000000341, -0.031000000000000583, 0.02474999999999916, 0.02549999999999919, -0.03500000000000014, -0.023750000000001492, 0.05999999999999872, 0.030249999999998778, -0.030249999999998778, 0.0007500000000000284, 0.03999999999999915, 0.018499999999999517, 0.011749999999999261, -0.03549999999999898, 0.07900000000000063, 0.02850000000000108, 0.03900000000000148, 0.014500000000001734, 0.01624999999999943], zp_timestamp='2026-02-15T20:36:00')
2026-02-15T22:41:22.391 [DEBUG] [Thread-212482] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:41:22.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:41:22.486 [DEBUG] [Thread-212485] [transport.py] [_log()] starting thread (client mode): 0xa2d6fee0
2026-02-15T22:41:22.486 [DEBUG] [Thread-212485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:41:22.501 [DEBUG] [Thread-212485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:41:22.501 [INFO] [Thread-212485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:41:22.508 [DEBUG] [Thread-212485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:41:22.508 [DEBUG] [Thread-212485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:41:22.508 [DEBUG] [Thread-212485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] client lang: <none>
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] server lang: <none>
2026-02-15T22:41:22.509 [DEBUG] [Thread-212485] [transport.py] [_log()] kex follows: False
2026-02-15T22:41:22.510 [DEBUG] [Thread-212485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:41:22.510 [DEBUG] [Thread-212485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:41:22.510 [DEBUG] [Thread-212485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:41:22.510 [DEBUG] [Thread-212485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:41:22.510 [DEBUG] [Thread-212485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:41:22.511 [DEBUG] [Thread-212485] [transport.py] [_log()] Compression: none
2026-02-15T22:41:22.511 [DEBUG] [Thread-212485] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:41:22.566 [DEBUG] [Thread-212485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:41:22.566 [DEBUG] [Thread-212485] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:41:22.567 [DEBUG] [Thread-212485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:41:22.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:41:22.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:41:22.622 [DEBUG] [Thread-212485] [transport.py] [_log()] userauth is OK
2026-02-15T22:41:22.622 [DEBUG] [Thread-212485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:41:22.622 [DEBUG] [Thread-212485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:41:22.622 [DEBUG] [Thread-212485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:41:22.622 [DEBUG] [Thread-212485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:41:22.646 [INFO] [Thread-212485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:41:22.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:41:22.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:41:23.465 [DEBUG] [Thread-212485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:41:23.466 [DEBUG] [Thread-212485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:41:23.513 [DEBUG] [Thread-212485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:41:23.513 [DEBUG] [Thread-212485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:41:23.522 [DEBUG] [Thread-212485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:41:23.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:41:23.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:41:23.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:41:23.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:41:23.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:41:23.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:41:23.564 [DEBUG] [Thread-212485] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:41:29.811 [DEBUG] [Thread-212487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:31.451 [DEBUG] [Thread-212488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:44.851 [DEBUG] [Thread-212489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:53.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:41:53.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:41:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:41:54.712 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:54.714 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:41:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 41, 22), 12.03, 44.54, 0.0, 24.33, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:41:55.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:41:22
2026-02-15T22:41:55.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:41:55.945 [DEBUG] [Thread-212490] [transport.py] [_log()] starting thread (client mode): 0xa5742560
2026-02-15T22:41:55.946 [DEBUG] [Thread-212490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:41:55.965 [DEBUG] [Thread-212490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:41:55.965 [INFO] [Thread-212490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:55.968 [DEBUG] [Thread-212490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] client lang: <none>
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] server lang: <none>
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] kex follows: False
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] Compression: none
2026-02-15T22:41:55.969 [DEBUG] [Thread-212490] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:41:55.986 [DEBUG] [Thread-212490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:41:55.987 [DEBUG] [Thread-212490] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:41:55.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:41:55.988 [DEBUG] [Thread-212490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:41:55.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:41:55.990 [DEBUG] [Thread-212490] [transport.py] [_log()] userauth is OK
2026-02-15T22:41:55.990 [DEBUG] [Thread-212490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:41:55.990 [DEBUG] [Thread-212490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:41:55.990 [DEBUG] [Thread-212490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:41:55.991 [DEBUG] [Thread-212490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:41:56.014 [INFO] [Thread-212490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:41:56.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:41:56.672 [DEBUG] [Thread-212490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:41:56.672 [DEBUG] [Thread-212490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:41:56.672 [DEBUG] [Thread-212490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:41:56.712 [DEBUG] [Thread-212490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:41:56.713 [DEBUG] [Thread-212490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:41:56.716 [DEBUG] [Thread-212490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:41:56.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:41:56.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:41:56.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:41:56.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:41:56.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:41:56.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:41:56.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:41:56.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:41:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:41:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.861908 -999.00  +15.10  16.36     49   +4.60 1 1 1 1 1     0    0 9.05 -57.30 ZNESW 15.5 16.4 157.0 23.0 15.4 -24.7 15.3 -23.7 15.2 -22.6 15.4 -23.8
2026-02-15T22:41:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:41:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:41:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.861908
2026-02-15T22:41:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:41:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:41:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:41:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:41:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:41:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:41:22', tmtdew=12.03, humidity=44.54, cloud=0.0, wind=24.33, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:41:23', seeing=2.27, atlas_timestamp='2026-02-15T20:41:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:40:00')
2026-02-15T22:41:56.742 [DEBUG] [Thread-212490] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:41:56.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:41:56.836 [DEBUG] [Thread-212493] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc70
2026-02-15T22:41:56.836 [DEBUG] [Thread-212493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:41:56.857 [DEBUG] [Thread-212493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:41:56.857 [INFO] [Thread-212493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:41:56.864 [DEBUG] [Thread-212493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:41:56.865 [DEBUG] [Thread-212493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] client lang: <none>
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] server lang: <none>
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] kex follows: False
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:41:56.866 [DEBUG] [Thread-212493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:41:56.867 [DEBUG] [Thread-212493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:41:56.867 [DEBUG] [Thread-212493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:41:56.867 [DEBUG] [Thread-212493] [transport.py] [_log()] Compression: none
2026-02-15T22:41:56.867 [DEBUG] [Thread-212493] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:41:56.922 [DEBUG] [Thread-212493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:41:56.923 [DEBUG] [Thread-212493] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:41:56.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:41:56.924 [DEBUG] [Thread-212493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:41:56.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:41:56.978 [DEBUG] [Thread-212493] [transport.py] [_log()] userauth is OK
2026-02-15T22:41:56.979 [DEBUG] [Thread-212493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:41:56.979 [DEBUG] [Thread-212493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:41:56.979 [DEBUG] [Thread-212493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:41:56.979 [DEBUG] [Thread-212493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:41:56.998 [INFO] [Thread-212493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:41:56.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:41:56.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:41:57.821 [DEBUG] [Thread-212493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:41:57.821 [DEBUG] [Thread-212493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:41:57.869 [DEBUG] [Thread-212493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:41:57.869 [DEBUG] [Thread-212493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:41:57.879 [DEBUG] [Thread-212493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:41:57.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:41:57.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:41:57.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:41:57.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:41:57.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:41:57.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:41:57.915 [DEBUG] [Thread-212493] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:41:59.883 [DEBUG] [Thread-212495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:14.946 [DEBUG] [Thread-212496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:27.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:42:27.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:42:27.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:42:29.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 41, 58), 11.99, 44.51, 0.0, 24.84, 15.2, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:42:29.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:41:58
2026-02-15T22:42:29.982 [DEBUG] [Thread-212497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:30.107 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:30.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:42:30.377 [DEBUG] [Thread-212498] [transport.py] [_log()] starting thread (client mode): 0xa2d125c0
2026-02-15T22:42:30.377 [DEBUG] [Thread-212498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:42:30.398 [DEBUG] [Thread-212498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:42:30.399 [INFO] [Thread-212498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] client lang: <none>
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] server lang: <none>
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] kex follows: False
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] Compression: none
2026-02-15T22:42:30.402 [DEBUG] [Thread-212498] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:42:30.419 [DEBUG] [Thread-212498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:42:30.419 [DEBUG] [Thread-212498] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:42:30.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:42:30.421 [DEBUG] [Thread-212498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:42:30.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:42:30.422 [DEBUG] [Thread-212498] [transport.py] [_log()] userauth is OK
2026-02-15T22:42:30.423 [DEBUG] [Thread-212498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:42:30.423 [DEBUG] [Thread-212498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:42:30.423 [DEBUG] [Thread-212498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:42:30.423 [DEBUG] [Thread-212498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:42:30.447 [INFO] [Thread-212498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:42:30.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:42:31.117 [DEBUG] [Thread-212498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:42:31.117 [DEBUG] [Thread-212498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:42:31.118 [DEBUG] [Thread-212498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:42:31.158 [DEBUG] [Thread-212498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:42:31.159 [DEBUG] [Thread-212498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:42:31.162 [DEBUG] [Thread-212498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:42:31.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:42:31.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:42:31.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:42:31.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:42:31.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:42:31.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:42:31.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:42:31.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:42:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:42:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.862255 -999.00  +15.10  15.16     49   +4.70 1 1 1 1 1     0    0 9.05 -58.36 ZNESW 22.2 15.2 162.6 24.8 15.4 -24.7 15.3 -23.6 15.1 -22.5 15.4 -23.9
2026-02-15T22:42:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:42:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:42:31.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.862255
2026-02-15T22:42:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:42:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:42:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:42:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:42:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:42:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:41:58', tmtdew=11.99, humidity=44.51, cloud=0.0, wind=24.84, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:41:58', seeing=2.42, atlas_timestamp='2026-02-15T20:41:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:40:00')
2026-02-15T22:42:31.190 [DEBUG] [Thread-212498] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:42:31.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:42:31.287 [DEBUG] [Thread-212501] [transport.py] [_log()] starting thread (client mode): 0xa5773640
2026-02-15T22:42:31.287 [DEBUG] [Thread-212501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:42:31.302 [DEBUG] [Thread-212501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:42:31.302 [INFO] [Thread-212501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:42:31.309 [DEBUG] [Thread-212501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] client lang: <none>
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] server lang: <none>
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] kex follows: False
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:42:31.310 [DEBUG] [Thread-212501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:42:31.311 [DEBUG] [Thread-212501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:42:31.311 [DEBUG] [Thread-212501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:42:31.311 [DEBUG] [Thread-212501] [transport.py] [_log()] Compression: none
2026-02-15T22:42:31.311 [DEBUG] [Thread-212501] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:42:31.371 [DEBUG] [Thread-212501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:42:31.372 [DEBUG] [Thread-212501] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:42:31.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:42:31.373 [DEBUG] [Thread-212501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:42:31.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:42:31.430 [DEBUG] [Thread-212501] [transport.py] [_log()] userauth is OK
2026-02-15T22:42:31.431 [DEBUG] [Thread-212501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:42:31.431 [DEBUG] [Thread-212501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:42:31.431 [DEBUG] [Thread-212501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:42:31.431 [DEBUG] [Thread-212501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:42:31.450 [INFO] [Thread-212501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:42:31.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:42:31.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:42:31.534 [DEBUG] [Thread-212503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:32.375 [DEBUG] [Thread-212501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:42:32.375 [DEBUG] [Thread-212501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:42:32.423 [DEBUG] [Thread-212501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:42:32.424 [DEBUG] [Thread-212501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:42:32.433 [DEBUG] [Thread-212501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:42:32.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:42:32.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:42:32.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:42:32.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:42:32.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:42:32.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:42:32.468 [DEBUG] [Thread-212501] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:42:45.018 [DEBUG] [Thread-212504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:53.116 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:54.935 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:54.936 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:42:56.238 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:00.065 [DEBUG] [Thread-212505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:01.329 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:02.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:43:02.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:43:02.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
2026-02-15T22:43:04.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 42, 34), 12.16, 44.06, 0.0, 22.94, 15.4, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:43:04.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:42:34
2026-02-15T22:43:05.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:43:05.528 [DEBUG] [Thread-212506] [transport.py] [_log()] starting thread (client mode): 0xa2d57880
2026-02-15T22:43:05.529 [DEBUG] [Thread-212506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:43:05.549 [DEBUG] [Thread-212506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:43:05.549 [INFO] [Thread-212506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] client lang: <none>
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] server lang: <none>
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] kex follows: False
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] Compression: none
2026-02-15T22:43:05.550 [DEBUG] [Thread-212506] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:43:05.563 [DEBUG] [Thread-212506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:43:05.563 [DEBUG] [Thread-212506] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:43:05.564 [DEBUG] [Thread-212506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:43:05.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:43:05.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:43:05.565 [DEBUG] [Thread-212506] [transport.py] [_log()] userauth is OK
2026-02-15T22:43:05.566 [DEBUG] [Thread-212506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:43:05.566 [DEBUG] [Thread-212506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:43:05.566 [DEBUG] [Thread-212506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:43:05.566 [DEBUG] [Thread-212506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:43:05.601 [INFO] [Thread-212506] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:43:05.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:43:06.376 [DEBUG] [Thread-212506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:43:06.376 [DEBUG] [Thread-212506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:43:06.376 [DEBUG] [Thread-212506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:43:06.417 [DEBUG] [Thread-212506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:43:06.418 [DEBUG] [Thread-212506] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:43:06.421 [DEBUG] [Thread-212506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:43:06.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:43:06.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:43:06.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:43:06.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:43:06.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:43:06.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:43:06.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:43:06.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:43:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:43:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.862602 -999.00  +15.10  19.12     49   +4.70 1 1 1 1 1     0    0 9.14 -55.58 ZNESW 19.0 19.1 160.4 25.5 15.4 -24.6 15.3 -23.6 15.1 -22.6 15.4 -23.7
2026-02-15T22:43:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:43:06.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:43:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.862602
2026-02-15T22:43:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:43:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:43:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:43:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:43:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:43:06.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:42:34', tmtdew=12.16, humidity=44.06, cloud=0.0, wind=22.94, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:42:34', seeing=1.89, atlas_timestamp='2026-02-15T20:42:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:40:00')
2026-02-15T22:43:06.445 [DEBUG] [Thread-212506] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:43:06.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:43:06.539 [DEBUG] [Thread-212509] [transport.py] [_log()] starting thread (client mode): 0xa2d3f820
2026-02-15T22:43:06.540 [DEBUG] [Thread-212509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:43:06.554 [DEBUG] [Thread-212509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:43:06.554 [INFO] [Thread-212509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:43:06.561 [DEBUG] [Thread-212509] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:43:06.561 [DEBUG] [Thread-212509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] client lang: <none>
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] server lang: <none>
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] kex follows: False
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] Compression: none
2026-02-15T22:43:06.562 [DEBUG] [Thread-212509] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:43:06.621 [DEBUG] [Thread-212509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:43:06.622 [DEBUG] [Thread-212509] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:43:06.623 [DEBUG] [Thread-212509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:43:06.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:43:06.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:43:06.678 [DEBUG] [Thread-212509] [transport.py] [_log()] userauth is OK
2026-02-15T22:43:06.678 [DEBUG] [Thread-212509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:43:06.678 [DEBUG] [Thread-212509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:43:06.678 [DEBUG] [Thread-212509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:43:06.679 [DEBUG] [Thread-212509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:43:06.698 [INFO] [Thread-212509] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:43:06.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:43:06.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:43:07.532 [DEBUG] [Thread-212509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:43:07.532 [DEBUG] [Thread-212509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:43:07.580 [DEBUG] [Thread-212509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:43:07.581 [DEBUG] [Thread-212509] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:43:07.590 [DEBUG] [Thread-212509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:43:07.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:43: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-02-15T22:43:07.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:43:07.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:43:07.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:43:07.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:43:07.627 [DEBUG] [Thread-212509] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:43:07.818 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:15.098 [DEBUG] [Thread-212511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:27.156 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:30.156 [DEBUG] [Thread-212512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:31.600 [DEBUG] [Thread-212513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:31.650 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:37.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:43:37.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:43:37.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:43:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 43, 9), 11.94, 44.64, 0.0, 23.22, 15.12, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:43:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:43:09
2026-02-15T22:43:39.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:43:40.068 [DEBUG] [Thread-212514] [transport.py] [_log()] starting thread (client mode): 0xa2d3c0a0
2026-02-15T22:43:40.068 [DEBUG] [Thread-212514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:43:40.088 [DEBUG] [Thread-212514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:43:40.088 [INFO] [Thread-212514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:43:40.091 [DEBUG] [Thread-212514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:43:40.091 [DEBUG] [Thread-212514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:43:40.091 [DEBUG] [Thread-212514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] client lang: <none>
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] server lang: <none>
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] kex follows: False
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] Compression: none
2026-02-15T22:43:40.092 [DEBUG] [Thread-212514] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:43:40.109 [DEBUG] [Thread-212514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:43:40.110 [DEBUG] [Thread-212514] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:43:40.110 [DEBUG] [Thread-212514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:43:40.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:43:40.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:43:40.112 [DEBUG] [Thread-212514] [transport.py] [_log()] userauth is OK
2026-02-15T22:43:40.112 [DEBUG] [Thread-212514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:43:40.113 [DEBUG] [Thread-212514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:43:40.113 [DEBUG] [Thread-212514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:43:40.113 [DEBUG] [Thread-212514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:43:40.138 [INFO] [Thread-212514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:43:40.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:43:40.787 [DEBUG] [Thread-212514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:43:40.787 [DEBUG] [Thread-212514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:43:40.787 [DEBUG] [Thread-212514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:43:40.827 [DEBUG] [Thread-212514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:43:40.828 [DEBUG] [Thread-212514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:43:40.830 [DEBUG] [Thread-212514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:43:40.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:43:40.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:43:40.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:43:40.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:43:40.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:43:40.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:43:40.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:43:40.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:43:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:43:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.862950 -999.00  +15.10  15.45     49   +4.70 1 1 1 1 1     0    0 9.05 -51.15 ZNESW 17.5 15.4 161.0 22.2 15.5 -24.8 15.3 -23.6 15.1 -22.6 15.4 -23.8
2026-02-15T22:43:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:43:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:43:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.862950
2026-02-15T22:43:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:43:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:43:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:43:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:43:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:43:40.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:43:09', tmtdew=11.94, humidity=44.64, cloud=0.0, wind=23.22, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:43:10', seeing=2.54, atlas_timestamp='2026-02-15T20:42:38.880', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:40:00')
2026-02-15T22:43:40.858 [DEBUG] [Thread-212514] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:43:40.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:43:40.952 [DEBUG] [Thread-212517] [transport.py] [_log()] starting thread (client mode): 0xa57e1ae0
2026-02-15T22:43:40.952 [DEBUG] [Thread-212517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:43:40.966 [DEBUG] [Thread-212517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:43:40.967 [INFO] [Thread-212517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:43:40.974 [DEBUG] [Thread-212517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:43:40.974 [DEBUG] [Thread-212517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:43:40.974 [DEBUG] [Thread-212517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:43:40.974 [DEBUG] [Thread-212517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] client lang: <none>
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] server lang: <none>
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] kex follows: False
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] Compression: none
2026-02-15T22:43:40.975 [DEBUG] [Thread-212517] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:43:41.033 [DEBUG] [Thread-212517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:43:41.034 [DEBUG] [Thread-212517] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:43:41.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:43:41.035 [DEBUG] [Thread-212517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:43:41.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:43:41.090 [DEBUG] [Thread-212517] [transport.py] [_log()] userauth is OK
2026-02-15T22:43:41.090 [DEBUG] [Thread-212517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:43:41.090 [DEBUG] [Thread-212517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:43:41.090 [DEBUG] [Thread-212517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:43:41.091 [DEBUG] [Thread-212517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:43:41.109 [INFO] [Thread-212517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:43:41.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:43:41.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:43:41.940 [DEBUG] [Thread-212517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:43:41.941 [DEBUG] [Thread-212517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:43:41.988 [DEBUG] [Thread-212517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:43:41.989 [DEBUG] [Thread-212517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:43:41.998 [DEBUG] [Thread-212517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:43:42.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:43:42.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:43:42.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:43:42.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:43:42.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:43:42.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:43:42.034 [DEBUG] [Thread-212517] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:43:45.198 [DEBUG] [Thread-212519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:50.975 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:55.142 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:55.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:43:55.453 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:00.247 [DEBUG] [Thread-212520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:01.490 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:03.613 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:05.982 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:12.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:44:12.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:44:12.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:44:14.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 43, 44), 11.92, 44.71, 0.0, 22.89, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:44:14.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:43:44
2026-02-15T22:44:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:44:14.883 [DEBUG] [Thread-212521] [transport.py] [_log()] starting thread (client mode): 0xa2d6eef0
2026-02-15T22:44:14.883 [DEBUG] [Thread-212521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:44:14.900 [DEBUG] [Thread-212521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:44:14.900 [INFO] [Thread-212521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] client lang: <none>
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] server lang: <none>
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] kex follows: False
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] Compression: none
2026-02-15T22:44:14.902 [DEBUG] [Thread-212521] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:44:14.915 [DEBUG] [Thread-212521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:44:14.915 [DEBUG] [Thread-212521] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:44:14.915 [DEBUG] [Thread-212521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:44:14.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:44:14.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:44:14.917 [DEBUG] [Thread-212521] [transport.py] [_log()] userauth is OK
2026-02-15T22:44:14.917 [DEBUG] [Thread-212521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:44:14.917 [DEBUG] [Thread-212521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:44:14.917 [DEBUG] [Thread-212521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:44:14.917 [DEBUG] [Thread-212521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:44:14.926 [INFO] [Thread-212521] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:44:14.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:44:15.283 [DEBUG] [Thread-212523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:15.481 [DEBUG] [Thread-212521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:44:15.481 [DEBUG] [Thread-212521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:44:15.482 [DEBUG] [Thread-212521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:44:15.522 [DEBUG] [Thread-212521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:44:15.522 [DEBUG] [Thread-212521] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:44:15.526 [DEBUG] [Thread-212521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:44:15.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:44:15.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:44:15.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:44:15.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:44:15.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:44:15.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:44:15.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:44:15.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:44:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:44:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.863297 -999.00  +15.10  19.76     49   +4.70 1 1 1 1 1     0    0 9.58 -51.37 ZNESW 22.6 19.8 151.8 25.8 15.4 -24.6 15.3 -23.7 15.1 -22.3 15.4 -23.7
2026-02-15T22:44:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:44:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:44:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.863297
2026-02-15T22:44:15.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:44:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:44:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:44:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:44:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:44:15.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:43:44', tmtdew=11.92, humidity=44.71, cloud=0.0, wind=22.89, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:43:45', seeing=2.54, atlas_timestamp='2026-02-15T20:43:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:40:00')
2026-02-15T22:44:15.556 [DEBUG] [Thread-212521] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:44:15.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:44:15.651 [DEBUG] [Thread-212525] [transport.py] [_log()] starting thread (client mode): 0xa57e0880
2026-02-15T22:44:15.651 [DEBUG] [Thread-212525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:44:15.666 [DEBUG] [Thread-212525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:44:15.666 [INFO] [Thread-212525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:44:15.674 [DEBUG] [Thread-212525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:44:15.674 [DEBUG] [Thread-212525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] client lang: <none>
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] server lang: <none>
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] kex follows: False
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] Compression: none
2026-02-15T22:44:15.675 [DEBUG] [Thread-212525] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:44:15.734 [DEBUG] [Thread-212525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:44:15.734 [DEBUG] [Thread-212525] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:44:15.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:44:15.735 [DEBUG] [Thread-212525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:44:15.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:44:15.790 [DEBUG] [Thread-212525] [transport.py] [_log()] userauth is OK
2026-02-15T22:44:15.791 [DEBUG] [Thread-212525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:44:15.791 [DEBUG] [Thread-212525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:44:15.791 [DEBUG] [Thread-212525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:44:15.791 [DEBUG] [Thread-212525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:44:15.811 [INFO] [Thread-212525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:44:15.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:44:15.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:44:16.637 [DEBUG] [Thread-212525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:44:16.638 [DEBUG] [Thread-212525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:44:16.687 [DEBUG] [Thread-212525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:44:16.688 [DEBUG] [Thread-212525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:44:16.703 [DEBUG] [Thread-212525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:44:16.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:44:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:44:16.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:44:16.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:44:16.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:44:16.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:44:16.739 [DEBUG] [Thread-212525] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:44:30.318 [DEBUG] [Thread-212527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:31.657 [DEBUG] [Thread-212528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:45.372 [DEBUG] [Thread-212529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:46.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:44:46.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:44:46.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:44:48.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 44, 20), 11.86, 44.89, 0.0, 27.74, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:44:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:44:20
2026-02-15T22:44:49.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:44:49.285 [DEBUG] [Thread-212530] [transport.py] [_log()] starting thread (client mode): 0xa2d111e0
2026-02-15T22:44:49.286 [DEBUG] [Thread-212530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:44:49.307 [DEBUG] [Thread-212530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:44:49.307 [INFO] [Thread-212530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:44:49.310 [DEBUG] [Thread-212530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:44:49.310 [DEBUG] [Thread-212530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:44:49.310 [DEBUG] [Thread-212530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:44:49.310 [DEBUG] [Thread-212530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:49.310 [DEBUG] [Thread-212530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] client lang: <none>
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] server lang: <none>
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] kex follows: False
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] Compression: none
2026-02-15T22:44:49.311 [DEBUG] [Thread-212530] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:44:49.328 [DEBUG] [Thread-212530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:44:49.329 [DEBUG] [Thread-212530] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:44:49.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:44:49.330 [DEBUG] [Thread-212530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:44:49.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:44:49.332 [DEBUG] [Thread-212530] [transport.py] [_log()] userauth is OK
2026-02-15T22:44:49.333 [DEBUG] [Thread-212530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:44:49.333 [DEBUG] [Thread-212530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:44:49.333 [DEBUG] [Thread-212530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:44:49.333 [DEBUG] [Thread-212530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:44:49.352 [INFO] [Thread-212530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:44:49.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:44:49.958 [DEBUG] [Thread-212530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:44:49.959 [DEBUG] [Thread-212530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:44:49.959 [DEBUG] [Thread-212530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:44:49.999 [DEBUG] [Thread-212530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:44:50.000 [DEBUG] [Thread-212530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:44:50.003 [DEBUG] [Thread-212530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:44:50.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:44:50.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:44:50.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:44:50.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:44:50.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:44:50.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:44:50.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:44:50.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:44:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:44:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.863991 -999.00  +15.10  20.45     49   +4.70 1 1 1 1 1     0    0 9.39 -53.25 ZNESW 14.3 20.4 152.8 28.2 15.4 -24.7 15.3 -23.7 15.1 -22.4 15.4 -23.8
2026-02-15T22:44:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:44:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:44:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.863991
2026-02-15T22:44:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:44:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:44:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:44:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:44:50.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:44:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:44:20', tmtdew=11.86, humidity=44.89, cloud=0.0, wind=27.74, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:44:21', seeing=2.77, atlas_timestamp='2026-02-15T20:44:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:43:00')
2026-02-15T22:44:50.030 [DEBUG] [Thread-212530] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:44:50.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:44:50.125 [DEBUG] [Thread-212533] [transport.py] [_log()] starting thread (client mode): 0xa2d6f2e0
2026-02-15T22:44:50.125 [DEBUG] [Thread-212533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:44:50.142 [DEBUG] [Thread-212533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:44:50.142 [INFO] [Thread-212533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:44:50.150 [DEBUG] [Thread-212533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:44:50.150 [DEBUG] [Thread-212533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:44:50.150 [DEBUG] [Thread-212533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:44:50.150 [DEBUG] [Thread-212533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:50.150 [DEBUG] [Thread-212533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] client lang: <none>
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] server lang: <none>
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] kex follows: False
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] Compression: none
2026-02-15T22:44:50.151 [DEBUG] [Thread-212533] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:44:50.210 [DEBUG] [Thread-212533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:44:50.211 [DEBUG] [Thread-212533] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:44:50.212 [DEBUG] [Thread-212533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:44:50.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:44:50.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:44:50.270 [DEBUG] [Thread-212533] [transport.py] [_log()] userauth is OK
2026-02-15T22:44:50.270 [DEBUG] [Thread-212533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:44:50.271 [DEBUG] [Thread-212533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:44:50.271 [DEBUG] [Thread-212533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:44:50.271 [DEBUG] [Thread-212533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:44:50.290 [INFO] [Thread-212533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:44:50.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:44:50.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:44:51.160 [DEBUG] [Thread-212533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:44:51.160 [DEBUG] [Thread-212533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:44:51.208 [DEBUG] [Thread-212533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:44:51.209 [DEBUG] [Thread-212533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:44:51.218 [DEBUG] [Thread-212533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:44:51.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:44:51.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:44:51.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:44:51.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:44:51.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:44:51.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:44:51.255 [DEBUG] [Thread-212533] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:44:55.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:44:55.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:00.407 [DEBUG] [Thread-212535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:10.328 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:13.401 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:15.455 [DEBUG] [Thread-212536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:21.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:45:21.277 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:45:21.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:45:23.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 44, 55), 11.82, 44.86, 0.0, 26.18, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:45:23.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:44:55
2026-02-15T22:45:23.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:45:23.962 [DEBUG] [Thread-212537] [transport.py] [_log()] starting thread (client mode): 0xa57e0bb0
2026-02-15T22:45:23.963 [DEBUG] [Thread-212537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:45:23.982 [DEBUG] [Thread-212537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:45:23.982 [INFO] [Thread-212537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] client lang: <none>
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] server lang: <none>
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] kex follows: False
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] Compression: none
2026-02-15T22:45:23.985 [DEBUG] [Thread-212537] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:45:24.002 [DEBUG] [Thread-212537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:45:24.003 [DEBUG] [Thread-212537] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:45:24.003 [DEBUG] [Thread-212537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:45:24.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:45:24.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:45:24.005 [DEBUG] [Thread-212537] [transport.py] [_log()] userauth is OK
2026-02-15T22:45:24.006 [DEBUG] [Thread-212537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:45:24.006 [DEBUG] [Thread-212537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:45:24.006 [DEBUG] [Thread-212537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:45:24.006 [DEBUG] [Thread-212537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:45:24.030 [INFO] [Thread-212537] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:45:24.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:45:24.667 [DEBUG] [Thread-212537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:45:24.667 [DEBUG] [Thread-212537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:45:24.667 [DEBUG] [Thread-212537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:45:24.708 [DEBUG] [Thread-212537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:45:24.708 [DEBUG] [Thread-212537] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:45:24.710 [DEBUG] [Thread-212537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:45:24.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:45:24.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:45:24.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:45:24.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:45:24.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:45:24.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:45:24.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.864339 -999.00  +15.10  20.40     49   +4.70 1 1 1 1 1     0    0 9.22 -54.36 ZNESW 18.2 20.4 136.2 24.0 15.4 -24.6 15.3 -23.5 15.1 -22.4 15.4 -23.7
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.864339
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:45:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:44:55', tmtdew=11.82, humidity=44.86, cloud=0.0, wind=26.18, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:44:56', seeing=2.13, atlas_timestamp='2026-02-15T20:44:38.890', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:43:00')
2026-02-15T22:45:24.722 [DEBUG] [Thread-212537] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:45:24.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:45:24.808 [DEBUG] [Thread-212540] [transport.py] [_log()] starting thread (client mode): 0xa2d79420
2026-02-15T22:45:24.808 [DEBUG] [Thread-212540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:45:24.823 [DEBUG] [Thread-212540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:45:24.824 [INFO] [Thread-212540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:45:24.832 [DEBUG] [Thread-212540] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:45:24.832 [DEBUG] [Thread-212540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:45:24.832 [DEBUG] [Thread-212540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] client lang: <none>
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] server lang: <none>
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] kex follows: False
2026-02-15T22:45:24.833 [DEBUG] [Thread-212540] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:45:24.834 [DEBUG] [Thread-212540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:45:24.834 [DEBUG] [Thread-212540] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:45:24.834 [DEBUG] [Thread-212540] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:45:24.834 [DEBUG] [Thread-212540] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:45:24.834 [DEBUG] [Thread-212540] [transport.py] [_log()] Compression: none
2026-02-15T22:45:24.834 [DEBUG] [Thread-212540] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:45:24.889 [DEBUG] [Thread-212540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:45:24.890 [DEBUG] [Thread-212540] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:45:24.890 [DEBUG] [Thread-212540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:45:24.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:45:24.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:45:24.946 [DEBUG] [Thread-212540] [transport.py] [_log()] userauth is OK
2026-02-15T22:45:24.946 [DEBUG] [Thread-212540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:45:24.946 [DEBUG] [Thread-212540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:45:24.946 [DEBUG] [Thread-212540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:45:24.946 [DEBUG] [Thread-212540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:45:24.965 [INFO] [Thread-212540] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:45:24.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:45:24.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:45:25.794 [DEBUG] [Thread-212540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:45:25.794 [DEBUG] [Thread-212540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:45:25.842 [DEBUG] [Thread-212540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:45:25.842 [DEBUG] [Thread-212540] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:45:25.850 [DEBUG] [Thread-212540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:45:25.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:45:25.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:45:25.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:45:25.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:45:25.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:45:25.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:45:25.881 [DEBUG] [Thread-212540] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:45:30.492 [DEBUG] [Thread-212542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:31.725 [DEBUG] [Thread-212543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:37.347 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:45.545 [DEBUG] [Thread-212544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:55.549 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:55.550 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:45:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:45:55.904 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:45:55.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:45:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 45, 30), 11.85, 44.78, 0.0, 23.47, 15.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:45:57.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:45:30
2026-02-15T22:45:58.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:45:58.418 [DEBUG] [Thread-212545] [transport.py] [_log()] starting thread (client mode): 0xa5742b90
2026-02-15T22:45:58.418 [DEBUG] [Thread-212545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:45:58.439 [DEBUG] [Thread-212545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:45:58.439 [INFO] [Thread-212545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:58.440 [DEBUG] [Thread-212545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] client lang: <none>
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] server lang: <none>
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] kex follows: False
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] Compression: none
2026-02-15T22:45:58.441 [DEBUG] [Thread-212545] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:45:58.450 [DEBUG] [Thread-212545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:45:58.451 [DEBUG] [Thread-212545] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:45:58.452 [DEBUG] [Thread-212545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:45:58.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:45:58.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:45:58.454 [DEBUG] [Thread-212545] [transport.py] [_log()] userauth is OK
2026-02-15T22:45:58.455 [DEBUG] [Thread-212545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:45:58.455 [DEBUG] [Thread-212545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:45:58.455 [DEBUG] [Thread-212545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:45:58.455 [DEBUG] [Thread-212545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:45:58.493 [INFO] [Thread-212545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:45:58.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:45:59.146 [DEBUG] [Thread-212545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:45:59.147 [DEBUG] [Thread-212545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:45:59.147 [DEBUG] [Thread-212545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:45:59.187 [DEBUG] [Thread-212545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:45:59.188 [DEBUG] [Thread-212545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:45:59.191 [DEBUG] [Thread-212545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:45:59.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:45:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:45:59.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:45:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:45:59.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:45:59.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:45:59.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:45:59.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:45:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:45:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.864685 -999.00  +15.10  19.37     49   +4.70 1 1 1 1 1     0    0 8.76 -60.22 ZNESW 20.7 19.4 143.8 20.7 15.4 -24.8 15.3 -23.6 15.0 -22.6 15.4 -23.8
2026-02-15T22:45:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:45:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:45:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.864685
2026-02-15T22:45:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:45:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:45:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:45:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:45:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:45:59.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:45:30', tmtdew=11.85, humidity=44.78, cloud=0.0, wind=23.47, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:45:31', seeing=1.8, atlas_timestamp='2026-02-15T20:45:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:43:00')
2026-02-15T22:45:59.219 [DEBUG] [Thread-212545] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:45:59.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:45:59.315 [DEBUG] [Thread-212548] [transport.py] [_log()] starting thread (client mode): 0xa57c2ef0
2026-02-15T22:45:59.315 [DEBUG] [Thread-212548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:45:59.330 [DEBUG] [Thread-212548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:45:59.330 [INFO] [Thread-212548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:45:59.337 [DEBUG] [Thread-212548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:45:59.338 [DEBUG] [Thread-212548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] client lang: <none>
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] server lang: <none>
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] kex follows: False
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] Compression: none
2026-02-15T22:45:59.339 [DEBUG] [Thread-212548] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:45:59.397 [DEBUG] [Thread-212548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:45:59.397 [DEBUG] [Thread-212548] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:45:59.398 [DEBUG] [Thread-212548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:45:59.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:45:59.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:45:59.454 [DEBUG] [Thread-212548] [transport.py] [_log()] userauth is OK
2026-02-15T22:45:59.454 [DEBUG] [Thread-212548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:45:59.454 [DEBUG] [Thread-212548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:45:59.454 [DEBUG] [Thread-212548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:45:59.455 [DEBUG] [Thread-212548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:45:59.478 [INFO] [Thread-212548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:45:59.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:45:59.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:46:00.280 [DEBUG] [Thread-212548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:46:00.281 [DEBUG] [Thread-212548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:46:00.328 [DEBUG] [Thread-212548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:46:00.328 [DEBUG] [Thread-212548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:46:00.337 [DEBUG] [Thread-212548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:46:00.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:46:00.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:46: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') -> 00000000
2026-02-15T22:46:00.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:46:00.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:46:00.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:46:00.378 [DEBUG] [Thread-212548] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:46:00.580 [DEBUG] [Thread-212550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:46:15.646 [DEBUG] [Thread-212551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:46:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:46:30.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:46:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:46:30.683 [DEBUG] [Thread-212552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:46:31.794 [DEBUG] [Thread-212553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:46:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 46, 6), 11.84, 44.81, 0.0, 26.45, 15.1, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:46:32.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:46:06
2026-02-15T22:46:32.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:46:32.811 [DEBUG] [Thread-212554] [transport.py] [_log()] starting thread (client mode): 0xa57c0a00
2026-02-15T22:46:32.812 [DEBUG] [Thread-212554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:46:32.832 [DEBUG] [Thread-212554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:46:32.832 [INFO] [Thread-212554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] client lang: <none>
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] server lang: <none>
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] kex follows: False
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:46:32.835 [DEBUG] [Thread-212554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:46:32.836 [DEBUG] [Thread-212554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:46:32.836 [DEBUG] [Thread-212554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:46:32.836 [DEBUG] [Thread-212554] [transport.py] [_log()] Compression: none
2026-02-15T22:46:32.836 [DEBUG] [Thread-212554] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:46:32.852 [DEBUG] [Thread-212554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:46:32.852 [DEBUG] [Thread-212554] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:46:32.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:46:32.853 [DEBUG] [Thread-212554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:46:32.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:46:32.856 [DEBUG] [Thread-212554] [transport.py] [_log()] userauth is OK
2026-02-15T22:46:32.856 [DEBUG] [Thread-212554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:46:32.856 [DEBUG] [Thread-212554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:46:32.856 [DEBUG] [Thread-212554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:46:32.856 [DEBUG] [Thread-212554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:46:32.882 [INFO] [Thread-212554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:46:32.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:46:33.526 [DEBUG] [Thread-212554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:46:33.526 [DEBUG] [Thread-212554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:46:33.526 [DEBUG] [Thread-212554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:46:33.568 [DEBUG] [Thread-212554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:46:33.568 [DEBUG] [Thread-212554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:46:33.571 [DEBUG] [Thread-212554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:46:33.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:46:33.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:46:33.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:46:33.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:46:33.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:46:33.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:46:33.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:46:33.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:46:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:46:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.865033 -999.00  +15.10  21.18     50   +4.70 1 1 1 1 1     0    0 9.08 -52.74 ZNESW 24.8 21.2 143.4 29.2 15.4 -24.7 15.2 -23.8 15.1 -22.4 15.4 -23.9
2026-02-15T22:46:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:46:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:46:33.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.865033
2026-02-15T22:46:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:46:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:46:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:46:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:46:33.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:46:33.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:46:06', tmtdew=11.84, humidity=44.81, cloud=0.0, wind=26.45, temperature=15.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:46:06', seeing=1.82, atlas_timestamp='2026-02-15T20:45:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:43:00')
2026-02-15T22:46:33.598 [DEBUG] [Thread-212554] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:46:33.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:46:33.696 [DEBUG] [Thread-212557] [transport.py] [_log()] starting thread (client mode): 0xa57b3340
2026-02-15T22:46:33.697 [DEBUG] [Thread-212557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:46:33.711 [DEBUG] [Thread-212557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:46:33.711 [INFO] [Thread-212557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:46:33.719 [DEBUG] [Thread-212557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:46:33.719 [DEBUG] [Thread-212557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:46:33.719 [DEBUG] [Thread-212557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:46:33.719 [DEBUG] [Thread-212557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] client lang: <none>
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] server lang: <none>
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] kex follows: False
2026-02-15T22:46:33.720 [DEBUG] [Thread-212557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:46:33.721 [DEBUG] [Thread-212557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:46:33.721 [DEBUG] [Thread-212557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:46:33.721 [DEBUG] [Thread-212557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:46:33.721 [DEBUG] [Thread-212557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:46:33.721 [DEBUG] [Thread-212557] [transport.py] [_log()] Compression: none
2026-02-15T22:46:33.721 [DEBUG] [Thread-212557] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:46:33.778 [DEBUG] [Thread-212557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:46:33.779 [DEBUG] [Thread-212557] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:46:33.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:46:33.780 [DEBUG] [Thread-212557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:46:33.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:46:33.834 [DEBUG] [Thread-212557] [transport.py] [_log()] userauth is OK
2026-02-15T22:46:33.835 [DEBUG] [Thread-212557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:46:33.835 [DEBUG] [Thread-212557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:46:33.835 [DEBUG] [Thread-212557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:46:33.835 [DEBUG] [Thread-212557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:46:33.860 [INFO] [Thread-212557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:46:33.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:46:33.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:46:34.667 [DEBUG] [Thread-212557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:46:34.667 [DEBUG] [Thread-212557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:46:34.715 [DEBUG] [Thread-212557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:46:34.715 [DEBUG] [Thread-212557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:46:34.725 [DEBUG] [Thread-212557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:46:34.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:46:34.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:46:34.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:46:34.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:46:34.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:46:34.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:46:34.762 [DEBUG] [Thread-212557] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:46:45.717 [DEBUG] [Thread-212559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:46:55.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:46:55.754 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:00.764 [DEBUG] [Thread-212560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:04.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:47:04.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:47:04.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:47:07.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 46, 41), 11.99, 44.55, 0.0, 23.68, 15.3, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:47:07.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:46:41
2026-02-15T22:47:07.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:47:07.548 [DEBUG] [Thread-212561] [transport.py] [_log()] starting thread (client mode): 0xa57b0790
2026-02-15T22:47:07.548 [DEBUG] [Thread-212561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:47:07.569 [DEBUG] [Thread-212561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:47:07.569 [INFO] [Thread-212561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:47:07.572 [DEBUG] [Thread-212561] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:47:07.572 [DEBUG] [Thread-212561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] client lang: <none>
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] server lang: <none>
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] kex follows: False
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:47:07.573 [DEBUG] [Thread-212561] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:47:07.574 [DEBUG] [Thread-212561] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:47:07.574 [DEBUG] [Thread-212561] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:47:07.574 [DEBUG] [Thread-212561] [transport.py] [_log()] Compression: none
2026-02-15T22:47:07.574 [DEBUG] [Thread-212561] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:47:07.592 [DEBUG] [Thread-212561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:47:07.593 [DEBUG] [Thread-212561] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:47:07.594 [DEBUG] [Thread-212561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:47:07.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:47:07.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:47:07.634 [DEBUG] [Thread-212561] [transport.py] [_log()] userauth is OK
2026-02-15T22:47:07.634 [DEBUG] [Thread-212561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:47:07.634 [DEBUG] [Thread-212561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:47:07.635 [DEBUG] [Thread-212561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:47:07.635 [DEBUG] [Thread-212561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:47:07.668 [INFO] [Thread-212561] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:47:07.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:47:08.287 [DEBUG] [Thread-212561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:47:08.288 [DEBUG] [Thread-212561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:47:08.288 [DEBUG] [Thread-212561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:47:08.329 [DEBUG] [Thread-212561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:47:08.330 [DEBUG] [Thread-212561] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:47:08.333 [DEBUG] [Thread-212561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:47:08.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:47:08.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:47:08.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:47:08.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:47:08.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:47:08.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:47:08.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:47:08.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:47:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:47:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.865380 -999.00  +15.10  19.28     50   +4.80 1 1 1 1 1     0    0 9.14 -58.64 ZNESW 18.9 19.3 139.2 26.1 15.4 -24.7 15.2 -23.5 15.0 -22.6 15.3 -23.7
2026-02-15T22:47:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:47:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:47:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.865380
2026-02-15T22:47:08.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:47:08.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:47:08.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:47:08.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:47:08.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:47:08.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:46:41', tmtdew=11.99, humidity=44.55, cloud=0.0, wind=23.68, temperature=15.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:46:42', seeing=1.81, atlas_timestamp='2026-02-15T20:46:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.053249999999998465, -0.023249999999999105, -0.0259999999999998, 0.0045000000000001705, -0.0007500000000000284, 0.0019999999999988916, -0.04475000000000051, -0.025500000000000966, -0.0039999999999995595, -0.04974999999999952, -0.016000000000000014, 0.06299999999999883, -0.00024999999999941735, -0.04499999999999993, -0.017000000000001236, 0.045249999999999346, 0.03799999999999848, -0.03550000000000075, -0.023749999999999716, -0.0015000000000000568, -0.02725000000000044, -0.04925000000000068, -0.00024999999999941735, 0.011999999999998678, 0.008000000000000895, -0.027749999999999275, -0.041499999999999204, 0.05900000000000105, 0.04400000000000048, 0.002500000000001279, 0.02149999999999963, 0.03474999999999895], zp_timestamp='2026-02-15T20:43:00')
2026-02-15T22:47:08.357 [DEBUG] [Thread-212561] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:47:08.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:47:08.451 [DEBUG] [Thread-212564] [transport.py] [_log()] starting thread (client mode): 0xa57720e0
2026-02-15T22:47:08.451 [DEBUG] [Thread-212564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:47:08.466 [DEBUG] [Thread-212564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:47:08.466 [INFO] [Thread-212564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:47:08.473 [DEBUG] [Thread-212564] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:47:08.474 [DEBUG] [Thread-212564] [transport.py] [_log()] client lang: <none>
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] server lang: <none>
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] kex follows: False
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] Compression: none
2026-02-15T22:47:08.475 [DEBUG] [Thread-212564] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:47:08.535 [DEBUG] [Thread-212564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:47:08.536 [DEBUG] [Thread-212564] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:47:08.536 [DEBUG] [Thread-212564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:47:08.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:47:08.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:47:08.594 [DEBUG] [Thread-212564] [transport.py] [_log()] userauth is OK
2026-02-15T22:47:08.595 [DEBUG] [Thread-212564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:47:08.595 [DEBUG] [Thread-212564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:47:08.595 [DEBUG] [Thread-212564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:47:08.595 [DEBUG] [Thread-212564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:47:08.614 [INFO] [Thread-212564] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:47:08.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:47:08.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:47:09.426 [DEBUG] [Thread-212564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:47:09.426 [DEBUG] [Thread-212564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:47:09.474 [DEBUG] [Thread-212564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:47:09.474 [DEBUG] [Thread-212564] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:47:09.482 [DEBUG] [Thread-212564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:47:09.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:47:09.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:47:09.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:47:09.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:47:09.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:47:09.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:47:09.515 [DEBUG] [Thread-212564] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:47:11.760 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:15.798 [DEBUG] [Thread-212566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:30.849 [DEBUG] [Thread-212567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:31.860 [DEBUG] [Thread-212568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:39.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:47:39.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:47:39.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:47:41.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 47, 17), 11.82, 44.88, 0.0, 24.35, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:47:41.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:47:17
2026-02-15T22:47:41.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:47:41.897 [DEBUG] [Thread-212569] [transport.py] [_log()] starting thread (client mode): 0xa2d79cf0
2026-02-15T22:47:41.897 [DEBUG] [Thread-212569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:47:41.916 [DEBUG] [Thread-212569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:47:41.916 [INFO] [Thread-212569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:47:41.919 [DEBUG] [Thread-212569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] client lang: <none>
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] server lang: <none>
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] kex follows: False
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] Compression: none
2026-02-15T22:47:41.920 [DEBUG] [Thread-212569] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:47:41.936 [DEBUG] [Thread-212569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:47:41.937 [DEBUG] [Thread-212569] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:47:41.937 [DEBUG] [Thread-212569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:47:41.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:47:41.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:47:41.939 [DEBUG] [Thread-212569] [transport.py] [_log()] userauth is OK
2026-02-15T22:47:41.939 [DEBUG] [Thread-212569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:47:41.939 [DEBUG] [Thread-212569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:47:41.939 [DEBUG] [Thread-212569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:47:41.939 [DEBUG] [Thread-212569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:47:41.953 [INFO] [Thread-212569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:47:41.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:47:42.719 [DEBUG] [Thread-212569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:47:42.720 [DEBUG] [Thread-212569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:47:42.720 [DEBUG] [Thread-212569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:47:42.760 [DEBUG] [Thread-212569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:47:42.761 [DEBUG] [Thread-212569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:47:42.764 [DEBUG] [Thread-212569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:47:42.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:47:42.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:47:42.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:47:42.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:47:42.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:47:42.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:47:42.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:47:42.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:47:42.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:47:42.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.865727 -999.00  +15.10  20.00     50   +4.80 1 1 1 1 1     0    0 8.72 -60.41 ZNESW 18.6 20.0 164.9 23.5 15.4 -24.8 15.2 -23.6 15.0 -22.3 15.3 -23.8
2026-02-15T22:47:42.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:47:42.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:47:42.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.865727
2026-02-15T22:47:42.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:47:42.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:47:42.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:47:42.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:47:42.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:47:42.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:47:17', tmtdew=11.82, humidity=44.88, cloud=0.0, wind=24.35, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:47:17', seeing=1.64, atlas_timestamp='2026-02-15T20:46:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, 0.0002500000000011937, -0.017249999999998877, -0.010999999999999233, 0.01950000000000074, -0.017249999999998877, -0.006000000000000227, -0.025249999999999773, 0.03149999999999942, -0.025000000000000355, -0.056750000000000966, 0.016000000000000014, 0.07699999999999996, -0.030750000000001165, -0.02200000000000024, -0.002000000000000668, 0.06674999999999898, 0.06099999999999994, -0.036000000000001364, -0.01875000000000071, 0.038999999999997925, 0.013249999999999318, -0.04224999999999923, -0.019249999999999545, 0.007999999999999119, 0.05250000000000021, -0.012249999999999872, -0.0035000000000007248, 0.10599999999999987, 0.10000000000000142, 0.02000000000000135, 0.036000000000001364, 0.032249999999999446], zp_timestamp='2026-02-15T20:46:00')
2026-02-15T22:47:42.792 [DEBUG] [Thread-212569] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:47:42.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:47:42.888 [DEBUG] [Thread-212572] [transport.py] [_log()] starting thread (client mode): 0xa2d56e00
2026-02-15T22:47:42.888 [DEBUG] [Thread-212572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:47:42.902 [DEBUG] [Thread-212572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:47:42.902 [INFO] [Thread-212572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:47:42.909 [DEBUG] [Thread-212572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] client lang: <none>
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] server lang: <none>
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] kex follows: False
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:47:42.910 [DEBUG] [Thread-212572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:47:42.911 [DEBUG] [Thread-212572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:47:42.911 [DEBUG] [Thread-212572] [transport.py] [_log()] Compression: none
2026-02-15T22:47:42.911 [DEBUG] [Thread-212572] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:47:42.968 [DEBUG] [Thread-212572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:47:42.968 [DEBUG] [Thread-212572] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:47:42.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:47:42.969 [DEBUG] [Thread-212572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:47:42.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:47:43.025 [DEBUG] [Thread-212572] [transport.py] [_log()] userauth is OK
2026-02-15T22:47:43.025 [DEBUG] [Thread-212572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:47:43.026 [DEBUG] [Thread-212572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:47:43.026 [DEBUG] [Thread-212572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:47:43.026 [DEBUG] [Thread-212572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:47:43.044 [INFO] [Thread-212572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:47:43.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:47:43.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:47:43.859 [DEBUG] [Thread-212572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:47:43.860 [DEBUG] [Thread-212572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:47:43.907 [DEBUG] [Thread-212572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:47:43.907 [DEBUG] [Thread-212572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:47:43.916 [DEBUG] [Thread-212572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:47:43.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:47:43.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:47:43.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:47:43.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:47:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:47:43.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:47:43.954 [DEBUG] [Thread-212572] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:47:45.884 [DEBUG] [Thread-212574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:55.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:47:55.957 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:00.937 [DEBUG] [Thread-212575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:48:13.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:48:13.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:48:15.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 47, 52), 11.83, 45.34, 0.0, 25.94, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:48:15.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:47:52
2026-02-15T22:48:15.972 [DEBUG] [Thread-212576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:48:16.316 [DEBUG] [Thread-212577] [transport.py] [_log()] starting thread (client mode): 0xa2d11db0
2026-02-15T22:48:16.316 [DEBUG] [Thread-212577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:48:16.335 [DEBUG] [Thread-212577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:48:16.335 [INFO] [Thread-212577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] client lang: <none>
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] server lang: <none>
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] kex follows: False
2026-02-15T22:48:16.339 [DEBUG] [Thread-212577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:48:16.340 [DEBUG] [Thread-212577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:48:16.340 [DEBUG] [Thread-212577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:48:16.340 [DEBUG] [Thread-212577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:48:16.340 [DEBUG] [Thread-212577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:48:16.340 [DEBUG] [Thread-212577] [transport.py] [_log()] Compression: none
2026-02-15T22:48:16.340 [DEBUG] [Thread-212577] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:48:16.355 [DEBUG] [Thread-212577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:48:16.355 [DEBUG] [Thread-212577] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:48:16.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:48:16.356 [DEBUG] [Thread-212577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:48:16.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:48:16.358 [DEBUG] [Thread-212577] [transport.py] [_log()] userauth is OK
2026-02-15T22:48:16.359 [DEBUG] [Thread-212577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:48:16.359 [DEBUG] [Thread-212577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:48:16.359 [DEBUG] [Thread-212577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:48:16.359 [DEBUG] [Thread-212577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:48:16.394 [INFO] [Thread-212577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:48:16.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:48:17.029 [DEBUG] [Thread-212577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:48:17.029 [DEBUG] [Thread-212577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:48:17.029 [DEBUG] [Thread-212577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:48:17.070 [DEBUG] [Thread-212577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:48:17.071 [DEBUG] [Thread-212577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:48:17.074 [DEBUG] [Thread-212577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:48:17.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:48:17.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:48:17.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:48:17.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:48:17.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:48:17.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:48:17.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:48:17.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:48:17.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:48:17.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.866422 -999.00  +15.10  22.67     50   +4.80 1 1 1 1 1     0    0 8.67 -58.90 ZNESW 22.6 22.7 136.0 28.0 15.4 -24.6 15.2 -23.5 15.1 -22.5 15.3 -23.7
2026-02-15T22:48:17.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:48:17.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:48:17.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.866422
2026-02-15T22:48:17.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:48:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:48:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:48:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:48:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:48:17.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:47:52', tmtdew=11.83, humidity=45.34, cloud=0.0, wind=25.94, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:47:52', seeing=1.66, atlas_timestamp='2026-02-15T20:47:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, 0.0002500000000011937, -0.017249999999998877, -0.010999999999999233, 0.01950000000000074, -0.017249999999998877, -0.006000000000000227, -0.025249999999999773, 0.03149999999999942, -0.025000000000000355, -0.056750000000000966, 0.016000000000000014, 0.07699999999999996, -0.030750000000001165, -0.02200000000000024, -0.002000000000000668, 0.06674999999999898, 0.06099999999999994, -0.036000000000001364, -0.01875000000000071, 0.038999999999997925, 0.013249999999999318, -0.04224999999999923, -0.019249999999999545, 0.007999999999999119, 0.05250000000000021, -0.012249999999999872, -0.0035000000000007248, 0.10599999999999987, 0.10000000000000142, 0.02000000000000135, 0.036000000000001364, 0.032249999999999446], zp_timestamp='2026-02-15T20:46:00')
2026-02-15T22:48:17.103 [DEBUG] [Thread-212577] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:48:17.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:48:17.196 [DEBUG] [Thread-212580] [transport.py] [_log()] starting thread (client mode): 0xa2dc3130
2026-02-15T22:48:17.196 [DEBUG] [Thread-212580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:48:17.211 [DEBUG] [Thread-212580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:48:17.211 [INFO] [Thread-212580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:48:17.219 [DEBUG] [Thread-212580] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:48:17.219 [DEBUG] [Thread-212580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:48:17.219 [DEBUG] [Thread-212580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:48:17.219 [DEBUG] [Thread-212580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] client lang: <none>
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] server lang: <none>
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] kex follows: False
2026-02-15T22:48:17.220 [DEBUG] [Thread-212580] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:48:17.221 [DEBUG] [Thread-212580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:48:17.221 [DEBUG] [Thread-212580] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:48:17.221 [DEBUG] [Thread-212580] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:48:17.221 [DEBUG] [Thread-212580] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:48:17.221 [DEBUG] [Thread-212580] [transport.py] [_log()] Compression: none
2026-02-15T22:48:17.221 [DEBUG] [Thread-212580] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:48:17.282 [DEBUG] [Thread-212580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:48:17.282 [DEBUG] [Thread-212580] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:48:17.283 [DEBUG] [Thread-212580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:48:17.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:48:17.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:48:17.342 [DEBUG] [Thread-212580] [transport.py] [_log()] userauth is OK
2026-02-15T22:48:17.342 [DEBUG] [Thread-212580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:48:17.342 [DEBUG] [Thread-212580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:48:17.342 [DEBUG] [Thread-212580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:48:17.342 [DEBUG] [Thread-212580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:48:17.366 [INFO] [Thread-212580] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:48:17.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:48:17.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:48:18.201 [DEBUG] [Thread-212580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:48:18.201 [DEBUG] [Thread-212580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:48:18.250 [DEBUG] [Thread-212580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:48:18.250 [DEBUG] [Thread-212580] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:48:18.259 [DEBUG] [Thread-212580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:48:18.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:48:18.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:48:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:48:18.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:48:18.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:48:18.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:48:18.296 [DEBUG] [Thread-212580] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:48:31.008 [DEBUG] [Thread-212582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:31.919 [DEBUG] [Thread-212583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:45.588 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:46.060 [DEBUG] [Thread-212584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:48.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:48:48.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:48:48.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:48:50.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 48, 27), 11.83, 45.33, 0.0, 24.56, 15.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:48:50.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:48:27
2026-02-15T22:48:50.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:48:50.893 [DEBUG] [Thread-212585] [transport.py] [_log()] starting thread (client mode): 0xa2d56980
2026-02-15T22:48:50.893 [DEBUG] [Thread-212585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:48:50.909 [DEBUG] [Thread-212585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:48:50.909 [INFO] [Thread-212585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] client lang: <none>
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] server lang: <none>
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] kex follows: False
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] Compression: none
2026-02-15T22:48:50.911 [DEBUG] [Thread-212585] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:48:50.920 [DEBUG] [Thread-212585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:48:50.920 [DEBUG] [Thread-212585] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:48:50.920 [DEBUG] [Thread-212585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:48:50.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:48:50.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:48:50.921 [DEBUG] [Thread-212585] [transport.py] [_log()] userauth is OK
2026-02-15T22:48:50.921 [DEBUG] [Thread-212585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:48:50.921 [DEBUG] [Thread-212585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:48:50.921 [DEBUG] [Thread-212585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:48:50.921 [DEBUG] [Thread-212585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:48:50.934 [INFO] [Thread-212585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:48:50.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:48:51.588 [DEBUG] [Thread-212585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:48:51.588 [DEBUG] [Thread-212585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:48:51.589 [DEBUG] [Thread-212585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:48:51.629 [DEBUG] [Thread-212585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:48:51.629 [DEBUG] [Thread-212585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:48:51.632 [DEBUG] [Thread-212585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:48:51.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:48:51.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:48:51.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:48:51.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:48:51.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:48:51.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:48:51.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:48:51.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:48:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:48:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.866769 -999.00  +15.10  16.81     50   +4.80 1 1 1 1 1     0    0 9.04 -56.60 ZNESW 26.9 16.8 144.6 23.9 15.4 -24.6 15.2 -23.5 15.1 -22.6 15.3 -23.6
2026-02-15T22:48:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:48:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:48:51.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.866769
2026-02-15T22:48:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:48:51.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:48:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:48:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:48:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:48:51.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:48:27', tmtdew=11.83, humidity=45.33, cloud=0.0, wind=24.56, temperature=15.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:48:28', seeing=1.62, atlas_timestamp='2026-02-15T20:48:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, 0.0002500000000011937, -0.017249999999998877, -0.010999999999999233, 0.01950000000000074, -0.017249999999998877, -0.006000000000000227, -0.025249999999999773, 0.03149999999999942, -0.025000000000000355, -0.056750000000000966, 0.016000000000000014, 0.07699999999999996, -0.030750000000001165, -0.02200000000000024, -0.002000000000000668, 0.06674999999999898, 0.06099999999999994, -0.036000000000001364, -0.01875000000000071, 0.038999999999997925, 0.013249999999999318, -0.04224999999999923, -0.019249999999999545, 0.007999999999999119, 0.05250000000000021, -0.012249999999999872, -0.0035000000000007248, 0.10599999999999987, 0.10000000000000142, 0.02000000000000135, 0.036000000000001364, 0.032249999999999446], zp_timestamp='2026-02-15T20:46:00')
2026-02-15T22:48:51.660 [DEBUG] [Thread-212585] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:48:51.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:48:51.770 [DEBUG] [Thread-212588] [transport.py] [_log()] starting thread (client mode): 0xa57c1840
2026-02-15T22:48:51.770 [DEBUG] [Thread-212588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:48:51.786 [DEBUG] [Thread-212588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:48:51.786 [INFO] [Thread-212588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:48:51.793 [DEBUG] [Thread-212588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] client lang: <none>
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] server lang: <none>
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] kex follows: False
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:48:51.794 [DEBUG] [Thread-212588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:48:51.795 [DEBUG] [Thread-212588] [transport.py] [_log()] Compression: none
2026-02-15T22:48:51.795 [DEBUG] [Thread-212588] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:48:51.853 [DEBUG] [Thread-212588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:48:51.853 [DEBUG] [Thread-212588] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:48:51.854 [DEBUG] [Thread-212588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:48:51.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:48:51.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:48:51.909 [DEBUG] [Thread-212588] [transport.py] [_log()] userauth is OK
2026-02-15T22:48:51.910 [DEBUG] [Thread-212588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:48:51.910 [DEBUG] [Thread-212588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:48:51.910 [DEBUG] [Thread-212588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:48:51.910 [DEBUG] [Thread-212588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:48:51.928 [INFO] [Thread-212588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:48:51.929 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:48:51.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:48:52.792 [DEBUG] [Thread-212588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:48:52.792 [DEBUG] [Thread-212588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:48:52.841 [DEBUG] [Thread-212588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:48:52.841 [DEBUG] [Thread-212588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:48:52.849 [DEBUG] [Thread-212588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:48:52.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:48:52.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:48:52.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:48:52.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:48:52.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:48:52.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:48:52.880 [DEBUG] [Thread-212588] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:48:56.160 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:48:56.161 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:01.097 [DEBUG] [Thread-212590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:16.156 [DEBUG] [Thread-212591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:22.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:49:22.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:49:22.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:49:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 49, 2), 11.82, 45.36, 0.0, 26.68, 15.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:49:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:49:02
2026-02-15T22:49:25.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:49:25.944 [DEBUG] [Thread-212592] [transport.py] [_log()] starting thread (client mode): 0xa57b1900
2026-02-15T22:49:25.945 [DEBUG] [Thread-212592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:49:25.964 [DEBUG] [Thread-212592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:49:25.964 [INFO] [Thread-212592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] client lang: <none>
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] server lang: <none>
2026-02-15T22:49:25.968 [DEBUG] [Thread-212592] [transport.py] [_log()] kex follows: False
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] Compression: none
2026-02-15T22:49:25.969 [DEBUG] [Thread-212592] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:49:25.985 [DEBUG] [Thread-212592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:49:25.986 [DEBUG] [Thread-212592] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:49:25.986 [DEBUG] [Thread-212592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:49:25.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:49:25.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:49:26.029 [DEBUG] [Thread-212592] [transport.py] [_log()] userauth is OK
2026-02-15T22:49:26.030 [DEBUG] [Thread-212592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:49:26.030 [DEBUG] [Thread-212592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:49:26.030 [DEBUG] [Thread-212592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:49:26.030 [DEBUG] [Thread-212592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:49:26.050 [INFO] [Thread-212592] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:49:26.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:49:26.687 [DEBUG] [Thread-212592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:49:26.687 [DEBUG] [Thread-212592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:49:26.687 [DEBUG] [Thread-212592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:49:26.728 [DEBUG] [Thread-212592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:49:26.728 [DEBUG] [Thread-212592] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:49:26.730 [DEBUG] [Thread-212592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:49:26.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:49:26.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:49:26.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:49:26.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:49:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:49:26.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:49:26.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:49:26.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:49:26.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.867116 -999.00  +15.10  19.17     50   +4.80 1 1 1 1 1     0    0 9.06 -57.05 ZNESW 17.3 19.2 147.2 30.2 15.4 -24.7 15.2 -23.6 15.0 -22.5 15.3 -23.7
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.867116
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:49:26.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:49:02', tmtdew=11.82, humidity=45.36, cloud=0.0, wind=26.68, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:49:03', seeing=1.62, atlas_timestamp='2026-02-15T20:48:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, 0.0002500000000011937, -0.017249999999998877, -0.010999999999999233, 0.01950000000000074, -0.017249999999998877, -0.006000000000000227, -0.025249999999999773, 0.03149999999999942, -0.025000000000000355, -0.056750000000000966, 0.016000000000000014, 0.07699999999999996, -0.030750000000001165, -0.02200000000000024, -0.002000000000000668, 0.06674999999999898, 0.06099999999999994, -0.036000000000001364, -0.01875000000000071, 0.038999999999997925, 0.013249999999999318, -0.04224999999999923, -0.019249999999999545, 0.007999999999999119, 0.05250000000000021, -0.012249999999999872, -0.0035000000000007248, 0.10599999999999987, 0.10000000000000142, 0.02000000000000135, 0.036000000000001364, 0.032249999999999446], zp_timestamp='2026-02-15T20:46:00')
2026-02-15T22:49:26.749 [DEBUG] [Thread-212592] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:49:26.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:49:26.831 [DEBUG] [Thread-212595] [transport.py] [_log()] starting thread (client mode): 0xa2d7b340
2026-02-15T22:49:26.832 [DEBUG] [Thread-212595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:49:26.855 [DEBUG] [Thread-212595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:49:26.855 [INFO] [Thread-212595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:49:26.862 [DEBUG] [Thread-212595] [transport.py] [_log()] client lang: <none>
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] server lang: <none>
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] kex follows: False
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] Compression: none
2026-02-15T22:49:26.863 [DEBUG] [Thread-212595] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:49:26.920 [DEBUG] [Thread-212595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:49:26.920 [DEBUG] [Thread-212595] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:49:26.920 [DEBUG] [Thread-212595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:49:26.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:49:26.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:49:26.977 [DEBUG] [Thread-212595] [transport.py] [_log()] userauth is OK
2026-02-15T22:49:26.977 [DEBUG] [Thread-212595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:49:26.977 [DEBUG] [Thread-212595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:49:26.977 [DEBUG] [Thread-212595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:49:26.978 [DEBUG] [Thread-212595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:49:26.991 [INFO] [Thread-212595] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:49:26.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:49:26.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:49:27.838 [DEBUG] [Thread-212595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:49:27.838 [DEBUG] [Thread-212595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:49:27.887 [DEBUG] [Thread-212595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:49:27.888 [DEBUG] [Thread-212595] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:49:27.897 [DEBUG] [Thread-212595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:49:27.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:49:27.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:49:27.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:49:27.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:49:27.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:49:27.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:49:27.933 [DEBUG] [Thread-212595] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:49:31.191 [DEBUG] [Thread-212597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:31.986 [DEBUG] [Thread-212598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:46.245 [DEBUG] [Thread-212599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:56.360 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:56.361 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:49:57.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:49:57.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:49:57.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:49:59.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 49, 37), 11.88, 44.88, 0.0, 26.04, 15.27, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:49:59.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:49:37
2026-02-15T22:50:00.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:50:00.500 [DEBUG] [Thread-212600] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-15T22:50:00.500 [DEBUG] [Thread-212600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:50:00.520 [DEBUG] [Thread-212600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:50:00.520 [INFO] [Thread-212600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:50:00.523 [DEBUG] [Thread-212600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] client lang: <none>
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] server lang: <none>
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] kex follows: False
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:50:00.524 [DEBUG] [Thread-212600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:50:00.525 [DEBUG] [Thread-212600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:50:00.525 [DEBUG] [Thread-212600] [transport.py] [_log()] Compression: none
2026-02-15T22:50:00.525 [DEBUG] [Thread-212600] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:50:00.542 [DEBUG] [Thread-212600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:50:00.542 [DEBUG] [Thread-212600] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:50:00.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:50:00.543 [DEBUG] [Thread-212600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:50:00.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:50:00.586 [DEBUG] [Thread-212600] [transport.py] [_log()] userauth is OK
2026-02-15T22:50:00.586 [DEBUG] [Thread-212600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:50:00.586 [DEBUG] [Thread-212600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:50:00.586 [DEBUG] [Thread-212600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:50:00.586 [DEBUG] [Thread-212600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:50:00.614 [INFO] [Thread-212600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:50:00.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:50:01.229 [DEBUG] [Thread-212600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:50:01.229 [DEBUG] [Thread-212600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:50:01.230 [DEBUG] [Thread-212600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:50:01.270 [DEBUG] [Thread-212600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:50:01.270 [DEBUG] [Thread-212600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:50:01.273 [DEBUG] [Thread-212600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:50:01.289 [DEBUG] [Thread-212602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:01.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:50:01.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:50:01.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:50:01.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:50:01.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:50:01.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:50:01.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.867463 -999.00  +15.10  17.31     50   +4.80 1 1 1 1 1     0    0 8.84 -57.21 ZNESW 17.4 17.3 144.4 22.7 15.3 -24.7 15.2 -23.5 15.0 -22.5 15.3 -23.7
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.867463
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:50:01.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:50:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:50:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:50:01.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:49:37', tmtdew=11.88, humidity=44.88, cloud=0.0, wind=26.04, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:49:38', seeing=1.43, atlas_timestamp='2026-02-15T20:49:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, 0.0002500000000011937, -0.017249999999998877, -0.010999999999999233, 0.01950000000000074, -0.017249999999998877, -0.006000000000000227, -0.025249999999999773, 0.03149999999999942, -0.025000000000000355, -0.056750000000000966, 0.016000000000000014, 0.07699999999999996, -0.030750000000001165, -0.02200000000000024, -0.002000000000000668, 0.06674999999999898, 0.06099999999999994, -0.036000000000001364, -0.01875000000000071, 0.038999999999997925, 0.013249999999999318, -0.04224999999999923, -0.019249999999999545, 0.007999999999999119, 0.05250000000000021, -0.012249999999999872, -0.0035000000000007248, 0.10599999999999987, 0.10000000000000142, 0.02000000000000135, 0.036000000000001364, 0.032249999999999446], zp_timestamp='2026-02-15T20:46:00')
2026-02-15T22:50:01.296 [DEBUG] [Thread-212600] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:50:01.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:50:01.380 [DEBUG] [Thread-212604] [transport.py] [_log()] starting thread (client mode): 0xa57b2ad0
2026-02-15T22:50:01.380 [DEBUG] [Thread-212604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:50:01.394 [DEBUG] [Thread-212604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:50:01.394 [INFO] [Thread-212604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] client lang: <none>
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] server lang: <none>
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] kex follows: False
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:50:01.402 [DEBUG] [Thread-212604] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:50:01.403 [DEBUG] [Thread-212604] [transport.py] [_log()] Compression: none
2026-02-15T22:50:01.403 [DEBUG] [Thread-212604] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:50:01.460 [DEBUG] [Thread-212604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:50:01.460 [DEBUG] [Thread-212604] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:50:01.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:50:01.460 [DEBUG] [Thread-212604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:50:01.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:50:01.517 [DEBUG] [Thread-212604] [transport.py] [_log()] userauth is OK
2026-02-15T22:50:01.517 [DEBUG] [Thread-212604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:50:01.518 [DEBUG] [Thread-212604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:50:01.518 [DEBUG] [Thread-212604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:50:01.518 [DEBUG] [Thread-212604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:50:01.541 [INFO] [Thread-212604] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:50:01.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:50:01.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:50:02.402 [DEBUG] [Thread-212604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:50:02.402 [DEBUG] [Thread-212604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:50:02.450 [DEBUG] [Thread-212604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:50:02.450 [DEBUG] [Thread-212604] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:50:02.458 [DEBUG] [Thread-212604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:50:02.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:50:02.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')
2026-02-15T22:50:02.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:50:02.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:50:02.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:50:02.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:50:02.489 [DEBUG] [Thread-212604] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:50:16.323 [DEBUG] [Thread-212606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:19.369 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:31.376 [DEBUG] [Thread-212607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:32.038 [DEBUG] [Thread-212608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:32.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:50:32.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:50:32.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:50:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 50, 13), 11.72, 45.51, 0.0, 24.49, 15.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:50:34.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:50:13
2026-02-15T22:50:34.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:50:34.904 [DEBUG] [Thread-212609] [transport.py] [_log()] starting thread (client mode): 0xa5743d60
2026-02-15T22:50:34.904 [DEBUG] [Thread-212609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:50:34.924 [DEBUG] [Thread-212609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:50:34.924 [INFO] [Thread-212609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:50:34.928 [DEBUG] [Thread-212609] [transport.py] [_log()] client lang: <none>
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] server lang: <none>
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] kex follows: False
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] Compression: none
2026-02-15T22:50:34.929 [DEBUG] [Thread-212609] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:50:34.948 [DEBUG] [Thread-212609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:50:34.948 [DEBUG] [Thread-212609] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:50:34.949 [DEBUG] [Thread-212609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:50:34.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:50:34.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:50:34.990 [DEBUG] [Thread-212609] [transport.py] [_log()] userauth is OK
2026-02-15T22:50:34.991 [DEBUG] [Thread-212609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:50:34.991 [DEBUG] [Thread-212609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:50:34.991 [DEBUG] [Thread-212609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:50:34.991 [DEBUG] [Thread-212609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:50:35.011 [INFO] [Thread-212609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:50:35.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:50:35.688 [DEBUG] [Thread-212609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:50:35.688 [DEBUG] [Thread-212609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:50:35.688 [DEBUG] [Thread-212609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:50:35.728 [DEBUG] [Thread-212609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:50:35.728 [DEBUG] [Thread-212609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:50:35.731 [DEBUG] [Thread-212609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:50:35.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:50:35.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:50:35.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:50:35.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:50:35.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:50:35.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:50:35.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:50:35.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:50:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:50:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.867811 -999.00  +15.10  18.78     50   +4.80 1 1 1 1 1     0    0 9.03 -56.28 ZNESW 17.6 18.8 149.3 21.6 15.3 -24.6 15.2 -23.5 15.0 -22.3 15.3 -23.7
2026-02-15T22:50:35.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:50:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:50:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.867811
2026-02-15T22:50:35.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:50:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:50:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:50:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:50:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:50:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:50:13', tmtdew=11.72, humidity=45.51, cloud=0.0, wind=24.49, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:50:13', seeing=1.68, atlas_timestamp='2026-02-15T20:49:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03774999999999906, 0.0002500000000011937, -0.017249999999998877, -0.010999999999999233, 0.01950000000000074, -0.017249999999998877, -0.006000000000000227, -0.025249999999999773, 0.03149999999999942, -0.025000000000000355, -0.056750000000000966, 0.016000000000000014, 0.07699999999999996, -0.030750000000001165, -0.02200000000000024, -0.002000000000000668, 0.06674999999999898, 0.06099999999999994, -0.036000000000001364, -0.01875000000000071, 0.038999999999997925, 0.013249999999999318, -0.04224999999999923, -0.019249999999999545, 0.007999999999999119, 0.05250000000000021, -0.012249999999999872, -0.0035000000000007248, 0.10599999999999987, 0.10000000000000142, 0.02000000000000135, 0.036000000000001364, 0.032249999999999446], zp_timestamp='2026-02-15T20:46:00')
2026-02-15T22:50:35.757 [DEBUG] [Thread-212609] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:50:35.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:50:35.853 [DEBUG] [Thread-212612] [transport.py] [_log()] starting thread (client mode): 0xa5740490
2026-02-15T22:50:35.853 [DEBUG] [Thread-212612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:50:35.869 [DEBUG] [Thread-212612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:50:35.870 [INFO] [Thread-212612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:50:35.877 [DEBUG] [Thread-212612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:50:35.877 [DEBUG] [Thread-212612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:50:35.877 [DEBUG] [Thread-212612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:50:35.877 [DEBUG] [Thread-212612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] client lang: <none>
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] server lang: <none>
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] kex follows: False
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] Compression: none
2026-02-15T22:50:35.878 [DEBUG] [Thread-212612] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:50:35.934 [DEBUG] [Thread-212612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:50:35.934 [DEBUG] [Thread-212612] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:50:35.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:50:35.935 [DEBUG] [Thread-212612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:50:35.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:50:35.990 [DEBUG] [Thread-212612] [transport.py] [_log()] userauth is OK
2026-02-15T22:50:35.991 [DEBUG] [Thread-212612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:50:35.991 [DEBUG] [Thread-212612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:50:35.991 [DEBUG] [Thread-212612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:50:35.991 [DEBUG] [Thread-212612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:50:36.010 [INFO] [Thread-212612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:50:36.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:50:36.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:50:36.841 [DEBUG] [Thread-212612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:50:36.841 [DEBUG] [Thread-212612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:50:36.889 [DEBUG] [Thread-212612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:50:36.890 [DEBUG] [Thread-212612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:50:36.899 [DEBUG] [Thread-212612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:50:36.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:50:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:50:36.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:50:36.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:50:36.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:50:36.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:50:36.936 [DEBUG] [Thread-212612] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:50:46.412 [DEBUG] [Thread-212614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:56.563 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:50:56.564 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:01.462 [DEBUG] [Thread-212615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:06.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:51:06.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:51:06.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:51:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 50, 50), 11.71, 45.53, 0.0, 25.0, 15.02, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:51:09.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:50:50
2026-02-15T22:51:09.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:51:09.973 [DEBUG] [Thread-212616] [transport.py] [_log()] starting thread (client mode): 0xa81d5150
2026-02-15T22:51:09.974 [DEBUG] [Thread-212616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:51:09.988 [DEBUG] [Thread-212616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:51:09.988 [INFO] [Thread-212616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] client lang: <none>
2026-02-15T22:51:09.990 [DEBUG] [Thread-212616] [transport.py] [_log()] server lang: <none>
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] kex follows: False
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] Compression: none
2026-02-15T22:51:09.991 [DEBUG] [Thread-212616] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:51:10.010 [DEBUG] [Thread-212616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:51:10.011 [DEBUG] [Thread-212616] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:51:10.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:51:10.012 [DEBUG] [Thread-212616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:51:10.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:51:10.015 [DEBUG] [Thread-212616] [transport.py] [_log()] userauth is OK
2026-02-15T22:51:10.015 [DEBUG] [Thread-212616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:51:10.015 [DEBUG] [Thread-212616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:51:10.015 [DEBUG] [Thread-212616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:51:10.015 [DEBUG] [Thread-212616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:51:10.039 [INFO] [Thread-212616] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:51:10.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:51:10.635 [DEBUG] [Thread-212616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:51:10.635 [DEBUG] [Thread-212616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:51:10.636 [DEBUG] [Thread-212616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:51:10.676 [DEBUG] [Thread-212616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:51:10.677 [DEBUG] [Thread-212616] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:51:10.680 [DEBUG] [Thread-212616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:51:10.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:51:10.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:51:10.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:51:10.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:51:10.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:51:10.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:51:10.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:51:10.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:51:10.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:51:10.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.868505 -999.00  +15.00  16.51     50   +4.80 1 1 1 1 1     0    0 8.97 -50.89 ZNESW 16.9 16.5 153.4 23.3 15.3 -24.7 15.2 -23.7 15.0 -22.5 15.3 -23.8
2026-02-15T22:51:10.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:51:10.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:51:10.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.868505
2026-02-15T22:51:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:51:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:51:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:51:10.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:51:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:51:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:50:50', tmtdew=11.71, humidity=45.53, cloud=0.0, wind=25.0, temperature=15.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:50:50', seeing=1.63, atlas_timestamp='2026-02-15T20:50:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:49:00')
2026-02-15T22:51:10.706 [DEBUG] [Thread-212616] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:51:10.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:51:10.802 [DEBUG] [Thread-212619] [transport.py] [_log()] starting thread (client mode): 0xa2dc0340
2026-02-15T22:51:10.802 [DEBUG] [Thread-212619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:51:10.816 [DEBUG] [Thread-212619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:51:10.817 [INFO] [Thread-212619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:51:10.824 [DEBUG] [Thread-212619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] client lang: <none>
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] server lang: <none>
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] kex follows: False
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] Compression: none
2026-02-15T22:51:10.825 [DEBUG] [Thread-212619] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:51:10.882 [DEBUG] [Thread-212619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:51:10.883 [DEBUG] [Thread-212619] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:51:10.883 [DEBUG] [Thread-212619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:51:10.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:51:10.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:51:10.939 [DEBUG] [Thread-212619] [transport.py] [_log()] userauth is OK
2026-02-15T22:51:10.939 [DEBUG] [Thread-212619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:51:10.940 [DEBUG] [Thread-212619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:51:10.940 [DEBUG] [Thread-212619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:51:10.940 [DEBUG] [Thread-212619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:51:10.966 [INFO] [Thread-212619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:51:10.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:51:10.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:51:11.790 [DEBUG] [Thread-212619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:51:11.790 [DEBUG] [Thread-212619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:51:11.838 [DEBUG] [Thread-212619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:51:11.838 [DEBUG] [Thread-212619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:51:11.847 [DEBUG] [Thread-212619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:51:11.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:51:11.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:51:11.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:51:11.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:51:11.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:51:11.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:51:11.881 [DEBUG] [Thread-212619] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:51:16.495 [DEBUG] [Thread-212621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:31.551 [DEBUG] [Thread-212622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:32.096 [DEBUG] [Thread-212623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:41.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:51:41.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:51:41.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:51:43.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 51, 26), 11.68, 45.62, 0.0, 26.54, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:51:43.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:51:26
2026-02-15T22:51:44.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:51:44.262 [DEBUG] [Thread-212624] [transport.py] [_log()] starting thread (client mode): 0xa2dc38e0
2026-02-15T22:51:44.262 [DEBUG] [Thread-212624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:51:44.284 [DEBUG] [Thread-212624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:51:44.284 [INFO] [Thread-212624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:44.286 [DEBUG] [Thread-212624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] client lang: <none>
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] server lang: <none>
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] kex follows: False
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] Compression: none
2026-02-15T22:51:44.287 [DEBUG] [Thread-212624] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:51:44.300 [DEBUG] [Thread-212624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:51:44.301 [DEBUG] [Thread-212624] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:51:44.301 [DEBUG] [Thread-212624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:51:44.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:51:44.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:51:44.303 [DEBUG] [Thread-212624] [transport.py] [_log()] userauth is OK
2026-02-15T22:51:44.304 [DEBUG] [Thread-212624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:51:44.304 [DEBUG] [Thread-212624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:51:44.304 [DEBUG] [Thread-212624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:51:44.304 [DEBUG] [Thread-212624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:51:44.323 [INFO] [Thread-212624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:51:44.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:51:44.992 [DEBUG] [Thread-212624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:51:44.992 [DEBUG] [Thread-212624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:51:44.993 [DEBUG] [Thread-212624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:51:45.033 [DEBUG] [Thread-212624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:51:45.033 [DEBUG] [Thread-212624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:51:45.037 [DEBUG] [Thread-212624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:51:45.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:51:45.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:51:45.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:51:45.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:51:45.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:51:45.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:51:45.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:51:45.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:51:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:51:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.868852 -999.00  +15.00  17.91     50   +4.80 1 1 1 1 1     0    0 9.41 -45.14 ZNESW 20.6 17.9 157.6 20.9 15.3 -24.7 15.2 -23.6 15.0 -22.3 15.2 -23.6
2026-02-15T22:51:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:51:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:51:45.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.868852
2026-02-15T22:51:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:51:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:51:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:51:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:51:45.064 [DEBUG] [Thread-212624] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:51:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:51:45.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:51:26', tmtdew=11.68, humidity=45.62, cloud=0.0, wind=26.54, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:51:26', seeing=1.49, atlas_timestamp='2026-02-15T20:51:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:49:00')
2026-02-15T22:51:45.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:51:45.160 [DEBUG] [Thread-212627] [transport.py] [_log()] starting thread (client mode): 0xa2db5210
2026-02-15T22:51:45.160 [DEBUG] [Thread-212627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:51:45.174 [DEBUG] [Thread-212627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:51:45.174 [INFO] [Thread-212627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] client lang: <none>
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] server lang: <none>
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] kex follows: False
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] Compression: none
2026-02-15T22:51:45.182 [DEBUG] [Thread-212627] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:51:45.241 [DEBUG] [Thread-212627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:51:45.241 [DEBUG] [Thread-212627] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:51:45.242 [DEBUG] [Thread-212627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:51:45.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:51:45.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:51:45.298 [DEBUG] [Thread-212627] [transport.py] [_log()] userauth is OK
2026-02-15T22:51:45.298 [DEBUG] [Thread-212627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:51:45.298 [DEBUG] [Thread-212627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:51:45.298 [DEBUG] [Thread-212627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:51:45.298 [DEBUG] [Thread-212627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:51:45.318 [INFO] [Thread-212627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:51:45.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:51:45.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:51:46.139 [DEBUG] [Thread-212627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:51:46.140 [DEBUG] [Thread-212627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:51:46.187 [DEBUG] [Thread-212627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:51:46.187 [DEBUG] [Thread-212627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:51:46.196 [DEBUG] [Thread-212627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:51:46.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:51:46.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:51:46.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:51:46.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:51:46.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:51:46.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:51:46.232 [DEBUG] [Thread-212627] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:51:46.588 [DEBUG] [Thread-212629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:53.322 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:56.767 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:51:56.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:01.646 [DEBUG] [Thread-212630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:16.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:52:16.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:52:16.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:52:16.680 [DEBUG] [Thread-212631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 52, 2), 11.69, 45.59, 0.0, 27.17, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:52:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:52:02
2026-02-15T22:52:18.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:52:18.603 [DEBUG] [Thread-212632] [transport.py] [_log()] starting thread (client mode): 0xa2db6590
2026-02-15T22:52:18.603 [DEBUG] [Thread-212632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:52:18.622 [DEBUG] [Thread-212632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:52:18.622 [INFO] [Thread-212632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] client lang: <none>
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] server lang: <none>
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] kex follows: False
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] Compression: none
2026-02-15T22:52:18.626 [DEBUG] [Thread-212632] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:52:18.643 [DEBUG] [Thread-212632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:52:18.644 [DEBUG] [Thread-212632] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:52:18.644 [DEBUG] [Thread-212632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:52:18.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:52:18.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:52:18.646 [DEBUG] [Thread-212632] [transport.py] [_log()] userauth is OK
2026-02-15T22:52:18.646 [DEBUG] [Thread-212632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:52:18.646 [DEBUG] [Thread-212632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:52:18.646 [DEBUG] [Thread-212632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:52:18.646 [DEBUG] [Thread-212632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:52:18.668 [INFO] [Thread-212632] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:52:18.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:52:19.270 [DEBUG] [Thread-212632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:52:19.270 [DEBUG] [Thread-212632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:52:19.270 [DEBUG] [Thread-212632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:52:19.310 [DEBUG] [Thread-212632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:52:19.311 [DEBUG] [Thread-212632] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:52:19.314 [DEBUG] [Thread-212632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:52:19.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:52:19.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:52:19.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:52:19.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:52:19.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:52:19.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:52:19.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:52:19.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:52:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:52:19.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.869199 -999.00  +15.10  23.52     50   +4.90 1 1 1 1 1     0    0 9.49 -42.29 ZNESW 22.8 23.5 143.6 26.5 15.3 -24.5 15.2 -23.5 14.9 -22.2 15.3 -23.6
2026-02-15T22:52:19.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:52:19.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:52:19.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.869199
2026-02-15T22:52:19.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:52:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:52:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:52:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:52:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:52:19.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:52:02', tmtdew=11.69, humidity=45.59, cloud=0.0, wind=27.17, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:52:02', seeing=1.59, atlas_timestamp='2026-02-15T20:51:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:49:00')
2026-02-15T22:52:19.341 [DEBUG] [Thread-212632] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:52:19.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:52:19.437 [DEBUG] [Thread-212635] [transport.py] [_log()] starting thread (client mode): 0xa57d77c0
2026-02-15T22:52:19.437 [DEBUG] [Thread-212635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:52:19.451 [DEBUG] [Thread-212635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:52:19.451 [INFO] [Thread-212635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:52:19.459 [DEBUG] [Thread-212635] [transport.py] [_log()] client lang: <none>
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] server lang: <none>
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] kex follows: False
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] Compression: none
2026-02-15T22:52:19.460 [DEBUG] [Thread-212635] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:52:19.518 [DEBUG] [Thread-212635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:52:19.518 [DEBUG] [Thread-212635] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:52:19.519 [DEBUG] [Thread-212635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:52:19.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:52:19.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:52:19.574 [DEBUG] [Thread-212635] [transport.py] [_log()] userauth is OK
2026-02-15T22:52:19.574 [DEBUG] [Thread-212635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:52:19.574 [DEBUG] [Thread-212635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:52:19.574 [DEBUG] [Thread-212635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:52:19.574 [DEBUG] [Thread-212635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:52:19.598 [INFO] [Thread-212635] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:52:19.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:52:19.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:52:20.408 [DEBUG] [Thread-212635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:52:20.409 [DEBUG] [Thread-212635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:52:20.457 [DEBUG] [Thread-212635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:52:20.457 [DEBUG] [Thread-212635] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:52:20.468 [DEBUG] [Thread-212635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:52:20.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:52:20.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:52:20.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:52:20.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:52:20.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:52:20.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:52:20.505 [DEBUG] [Thread-212635] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:52:31.717 [DEBUG] [Thread-212637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:32.163 [DEBUG] [Thread-212638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:46.766 [DEBUG] [Thread-212639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:50.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:52:50.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:52:50.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:52:52.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 52, 38), 11.76, 45.25, 0.0, 25.3, 15.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:52:52.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:52:38
2026-02-15T22:52:53.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:52:53.535 [DEBUG] [Thread-212640] [transport.py] [_log()] starting thread (client mode): 0xa81d7fd0
2026-02-15T22:52:53.535 [DEBUG] [Thread-212640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:52:53.555 [DEBUG] [Thread-212640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:52:53.555 [INFO] [Thread-212640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:52:53.558 [DEBUG] [Thread-212640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:52:53.558 [DEBUG] [Thread-212640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:52:53.558 [DEBUG] [Thread-212640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:52:53.558 [DEBUG] [Thread-212640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] client lang: <none>
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] server lang: <none>
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] kex follows: False
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] Compression: none
2026-02-15T22:52:53.559 [DEBUG] [Thread-212640] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:52:53.572 [DEBUG] [Thread-212640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:52:53.572 [DEBUG] [Thread-212640] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:52:53.572 [DEBUG] [Thread-212640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:52:53.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:52:53.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:52:53.573 [DEBUG] [Thread-212640] [transport.py] [_log()] userauth is OK
2026-02-15T22:52:53.573 [DEBUG] [Thread-212640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:52:53.573 [DEBUG] [Thread-212640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:52:53.573 [DEBUG] [Thread-212640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:52:53.573 [DEBUG] [Thread-212640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:52:53.588 [INFO] [Thread-212640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:52:53.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:52:54.377 [DEBUG] [Thread-212640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:52:54.377 [DEBUG] [Thread-212640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:52:54.377 [DEBUG] [Thread-212640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:52:54.417 [DEBUG] [Thread-212640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:52:54.418 [DEBUG] [Thread-212640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:52:54.421 [DEBUG] [Thread-212640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:52:54.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:52:54.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:52:54.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:52:54.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:52:54.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:52:54.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:52:54.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:52:54.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:52:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:52:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.869547 -999.00  +15.10  17.67     50   +4.90 1 1 1 1 1     0    0 9.28 -41.91 ZNESW 20.7 17.7 156.2 30.3 15.2 -24.4 15.2 -23.4 14.9 -22.3 15.2 -23.7
2026-02-15T22:52:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:52:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:52:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.869547
2026-02-15T22:52:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:52:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:52:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:52:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:52:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:52:54.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:52:38', tmtdew=11.76, humidity=45.25, cloud=0.0, wind=25.3, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:52:39', seeing=1.37, atlas_timestamp='2026-02-15T20:52:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:49:00')
2026-02-15T22:52:54.447 [DEBUG] [Thread-212640] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:52:54.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:52:54.543 [DEBUG] [Thread-212643] [transport.py] [_log()] starting thread (client mode): 0xa81d7b80
2026-02-15T22:52:54.543 [DEBUG] [Thread-212643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:52:54.561 [DEBUG] [Thread-212643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:52:54.561 [INFO] [Thread-212643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:52:54.569 [DEBUG] [Thread-212643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] client lang: <none>
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] server lang: <none>
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] kex follows: False
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:52:54.570 [DEBUG] [Thread-212643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:52:54.571 [DEBUG] [Thread-212643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:52:54.571 [DEBUG] [Thread-212643] [transport.py] [_log()] Compression: none
2026-02-15T22:52:54.571 [DEBUG] [Thread-212643] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:52:54.625 [DEBUG] [Thread-212643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:52:54.626 [DEBUG] [Thread-212643] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:52:54.626 [DEBUG] [Thread-212643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:52:54.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:52:54.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:52:54.682 [DEBUG] [Thread-212643] [transport.py] [_log()] userauth is OK
2026-02-15T22:52:54.682 [DEBUG] [Thread-212643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:52:54.682 [DEBUG] [Thread-212643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:52:54.682 [DEBUG] [Thread-212643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:52:54.683 [DEBUG] [Thread-212643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:52:54.702 [INFO] [Thread-212643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:52:54.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:52:54.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:52:55.501 [DEBUG] [Thread-212643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:52:55.501 [DEBUG] [Thread-212643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:52:55.548 [DEBUG] [Thread-212643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:52:55.548 [DEBUG] [Thread-212643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:52:55.558 [DEBUG] [Thread-212643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:52:55.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:52:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:52:55.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:52:55.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:52:55.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:52:55.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:52:55.596 [DEBUG] [Thread-212643] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:52:56.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:52:56.972 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:01.804 [DEBUG] [Thread-212645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:16.854 [DEBUG] [Thread-212646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:25.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:53:25.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:53:25.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:53:27.302 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:27.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 53, 14), 11.7, 45.59, 0.0, 25.62, 15.07, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:53:27.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:53:14
2026-02-15T22:53:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:53:27.940 [DEBUG] [Thread-212647] [transport.py] [_log()] starting thread (client mode): 0xa2d7b9d0
2026-02-15T22:53:27.940 [DEBUG] [Thread-212647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:53:27.960 [DEBUG] [Thread-212647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:53:27.960 [INFO] [Thread-212647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] client lang: <none>
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] server lang: <none>
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] kex follows: False
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:53:27.963 [DEBUG] [Thread-212647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:53:27.964 [DEBUG] [Thread-212647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:53:27.964 [DEBUG] [Thread-212647] [transport.py] [_log()] Compression: none
2026-02-15T22:53:27.964 [DEBUG] [Thread-212647] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:53:27.982 [DEBUG] [Thread-212647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:53:27.982 [DEBUG] [Thread-212647] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:53:27.983 [DEBUG] [Thread-212647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:53:27.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:53:27.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:53:27.984 [DEBUG] [Thread-212647] [transport.py] [_log()] userauth is OK
2026-02-15T22:53:27.984 [DEBUG] [Thread-212647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:53:27.985 [DEBUG] [Thread-212647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:53:27.985 [DEBUG] [Thread-212647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:53:27.985 [DEBUG] [Thread-212647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:53:28.005 [INFO] [Thread-212647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:53:28.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:53:28.625 [DEBUG] [Thread-212647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:53:28.625 [DEBUG] [Thread-212647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:53:28.625 [DEBUG] [Thread-212647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:53:28.666 [DEBUG] [Thread-212647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:53:28.666 [DEBUG] [Thread-212647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:53:28.669 [DEBUG] [Thread-212647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:53:28.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:53:28.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:53:28.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:53:28.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:53:28.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:53:28.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:53:28.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:53:28.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:53:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:53:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.869894 -999.00  +15.10  22.36     50   +4.90 1 1 1 1 1     0    0 9.56 -40.35 ZNESW 23.4 22.4 148.0 26.8 15.3 -24.5 15.2 -23.5 15.0 -22.2 15.3 -23.6
2026-02-15T22:53:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:53:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:53:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.869894
2026-02-15T22:53:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:53:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:53:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:53:28.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:53:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:53:28.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:53:14', tmtdew=11.7, humidity=45.59, cloud=0.0, wind=25.62, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:53:14', seeing=1.4, atlas_timestamp='2026-02-15T20:52:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:49:00')
2026-02-15T22:53:28.697 [DEBUG] [Thread-212647] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:53:28.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:53:28.785 [DEBUG] [Thread-212650] [transport.py] [_log()] starting thread (client mode): 0xa2dc0400
2026-02-15T22:53:28.785 [DEBUG] [Thread-212650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:53:28.800 [DEBUG] [Thread-212650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:53:28.800 [INFO] [Thread-212650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:53:28.807 [DEBUG] [Thread-212650] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] client lang: <none>
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] server lang: <none>
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] kex follows: False
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:53:28.808 [DEBUG] [Thread-212650] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:53:28.809 [DEBUG] [Thread-212650] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:53:28.809 [DEBUG] [Thread-212650] [transport.py] [_log()] Compression: none
2026-02-15T22:53:28.809 [DEBUG] [Thread-212650] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:53:28.869 [DEBUG] [Thread-212650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:53:28.870 [DEBUG] [Thread-212650] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:53:28.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:53:28.871 [DEBUG] [Thread-212650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:53:28.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:53:28.925 [DEBUG] [Thread-212650] [transport.py] [_log()] userauth is OK
2026-02-15T22:53:28.925 [DEBUG] [Thread-212650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:53:28.925 [DEBUG] [Thread-212650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:53:28.925 [DEBUG] [Thread-212650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:53:28.925 [DEBUG] [Thread-212650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:53:28.938 [INFO] [Thread-212650] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:53:28.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:53:28.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:53:29.777 [DEBUG] [Thread-212650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:53:29.777 [DEBUG] [Thread-212650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:53:29.825 [DEBUG] [Thread-212650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:53:29.825 [DEBUG] [Thread-212650] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:53:29.834 [DEBUG] [Thread-212650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:53:29.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:53:29.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:53:29.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:53:29.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:53:29.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:53:29.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:53:29.866 [DEBUG] [Thread-212650] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:53:31.892 [DEBUG] [Thread-212652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:32.233 [DEBUG] [Thread-212653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:46.943 [DEBUG] [Thread-212654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:57.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:57.173 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:53:59.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:53:59.861 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:53:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:54:01.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 53, 49), 11.59, 45.61, 0.0, 27.56, 15.0, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:54:01.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:53:49
2026-02-15T22:54:01.977 [DEBUG] [Thread-212655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:54:02.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:54:02.227 [DEBUG] [Thread-212656] [transport.py] [_log()] starting thread (client mode): 0xa2d79420
2026-02-15T22:54:02.227 [DEBUG] [Thread-212656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:54:02.238 [DEBUG] [Thread-212656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:54:02.238 [INFO] [Thread-212656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] client lang: <none>
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] server lang: <none>
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] kex follows: False
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] Compression: none
2026-02-15T22:54:02.240 [DEBUG] [Thread-212656] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:54:02.248 [DEBUG] [Thread-212656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:54:02.248 [DEBUG] [Thread-212656] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:54:02.248 [DEBUG] [Thread-212656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:54:02.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:54:02.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:54:02.249 [DEBUG] [Thread-212656] [transport.py] [_log()] userauth is OK
2026-02-15T22:54:02.249 [DEBUG] [Thread-212656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:54:02.250 [DEBUG] [Thread-212656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:54:02.250 [DEBUG] [Thread-212656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:54:02.250 [DEBUG] [Thread-212656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:54:02.261 [INFO] [Thread-212656] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:54:02.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:54:02.902 [DEBUG] [Thread-212656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:54:02.902 [DEBUG] [Thread-212656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:54:02.903 [DEBUG] [Thread-212656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:54:02.943 [DEBUG] [Thread-212656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:54:02.943 [DEBUG] [Thread-212656] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:54:02.945 [DEBUG] [Thread-212656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:54:02.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:54:02.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:54:02.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:54:02.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:54:02.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:54:02.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:54:02.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.870588 -999.00  +15.10  17.95     50   +4.90 1 1 1 1 1     0    0 9.64 -35.79 ZNESW 15.7 17.9 151.6 20.6 15.2 -24.6 15.2 -23.6 14.9 -22.5 15.3 -23.6
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.870588
2026-02-15T22:54:02.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:54:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:54:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:54:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:54:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:54:02.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:53:49', tmtdew=11.59, humidity=45.61, cloud=0.0, wind=27.56, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:53:50', seeing=1.37, atlas_timestamp='2026-02-15T20:53:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:52:00')
2026-02-15T22:54:02.968 [DEBUG] [Thread-212656] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:54:03.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:54:03.057 [DEBUG] [Thread-212659] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-15T22:54:03.058 [DEBUG] [Thread-212659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:54:03.072 [DEBUG] [Thread-212659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:54:03.072 [INFO] [Thread-212659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:03.080 [DEBUG] [Thread-212659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] client lang: <none>
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] server lang: <none>
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] kex follows: False
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:54:03.081 [DEBUG] [Thread-212659] [transport.py] [_log()] Compression: none
2026-02-15T22:54:03.082 [DEBUG] [Thread-212659] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:54:03.137 [DEBUG] [Thread-212659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:54:03.138 [DEBUG] [Thread-212659] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:54:03.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:54:03.140 [DEBUG] [Thread-212659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:54:03.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:54:03.193 [DEBUG] [Thread-212659] [transport.py] [_log()] userauth is OK
2026-02-15T22:54:03.194 [DEBUG] [Thread-212659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:54:03.194 [DEBUG] [Thread-212659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:54:03.194 [DEBUG] [Thread-212659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:54:03.194 [DEBUG] [Thread-212659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:54:03.223 [INFO] [Thread-212659] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:54:03.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:54:03.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:54:04.075 [DEBUG] [Thread-212659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:54:04.075 [DEBUG] [Thread-212659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:54:04.123 [DEBUG] [Thread-212659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:54:04.123 [DEBUG] [Thread-212659] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:54:04.132 [DEBUG] [Thread-212659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:54:04.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:54:04.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:54:04.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:54:04.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:54:04.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:54:04.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:54:04.166 [DEBUG] [Thread-212659] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:54:17.011 [DEBUG] [Thread-212661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:54:32.062 [DEBUG] [Thread-212662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:54:32.290 [DEBUG] [Thread-212663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:54:34.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:54:34.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:54:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:54:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 54, 25), 11.57, 45.64, 0.0, 26.03, 14.94, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:54:36.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:54:25
2026-02-15T22:54:36.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:54:36.675 [DEBUG] [Thread-212664] [transport.py] [_log()] starting thread (client mode): 0xa57d5ea0
2026-02-15T22:54:36.675 [DEBUG] [Thread-212664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:54:36.695 [DEBUG] [Thread-212664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:54:36.695 [INFO] [Thread-212664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:36.698 [DEBUG] [Thread-212664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] client lang: <none>
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] server lang: <none>
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] kex follows: False
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] Compression: none
2026-02-15T22:54:36.699 [DEBUG] [Thread-212664] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:54:36.717 [DEBUG] [Thread-212664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:54:36.718 [DEBUG] [Thread-212664] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:54:36.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:54:36.718 [DEBUG] [Thread-212664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:54:36.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:54:36.719 [DEBUG] [Thread-212664] [transport.py] [_log()] userauth is OK
2026-02-15T22:54:36.719 [DEBUG] [Thread-212664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:54:36.719 [DEBUG] [Thread-212664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:54:36.719 [DEBUG] [Thread-212664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:54:36.719 [DEBUG] [Thread-212664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:54:36.745 [INFO] [Thread-212664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:54:36.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:54:37.393 [DEBUG] [Thread-212664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:54:37.393 [DEBUG] [Thread-212664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:54:37.394 [DEBUG] [Thread-212664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:54:37.435 [DEBUG] [Thread-212664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:54:37.436 [DEBUG] [Thread-212664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:54:37.439 [DEBUG] [Thread-212664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:54:37.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:54:37.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:54:37.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:54:37.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:54:37.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:54:37.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:54:37.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:54:37.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:54:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:54:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.870936 -999.00  +15.00  16.37     50   +4.90 1 1 1 1 1     0    0 9.46 -36.41 ZNESW 18.2 16.4 139.0 23.5 15.3 -24.6 15.2 -23.5 14.9 -22.3 15.2 -23.7
2026-02-15T22:54:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:54:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:54:37.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.870936
2026-02-15T22:54:37.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:54:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:54:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:54:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:54:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:54:37.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:54:25', tmtdew=11.57, humidity=45.64, cloud=0.0, wind=26.03, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:54:25', seeing=1.54, atlas_timestamp='2026-02-15T20:54:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:52:00')
2026-02-15T22:54:37.464 [DEBUG] [Thread-212664] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:54:37.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:54:37.561 [DEBUG] [Thread-212667] [transport.py] [_log()] starting thread (client mode): 0xa2dc12a0
2026-02-15T22:54:37.561 [DEBUG] [Thread-212667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:54:37.575 [DEBUG] [Thread-212667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:54:37.576 [INFO] [Thread-212667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:54:37.584 [DEBUG] [Thread-212667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:54:37.584 [DEBUG] [Thread-212667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:54:37.584 [DEBUG] [Thread-212667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] client lang: <none>
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] server lang: <none>
2026-02-15T22:54:37.585 [DEBUG] [Thread-212667] [transport.py] [_log()] kex follows: False
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] Compression: none
2026-02-15T22:54:37.586 [DEBUG] [Thread-212667] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:54:37.642 [DEBUG] [Thread-212667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:54:37.643 [DEBUG] [Thread-212667] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:54:37.643 [DEBUG] [Thread-212667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:54:37.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:54:37.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:54:37.698 [DEBUG] [Thread-212667] [transport.py] [_log()] userauth is OK
2026-02-15T22:54:37.698 [DEBUG] [Thread-212667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:54:37.698 [DEBUG] [Thread-212667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:54:37.698 [DEBUG] [Thread-212667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:54:37.699 [DEBUG] [Thread-212667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:54:37.718 [INFO] [Thread-212667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:54:37.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:54:37.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:54:38.543 [DEBUG] [Thread-212667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:54:38.543 [DEBUG] [Thread-212667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:54:38.591 [DEBUG] [Thread-212667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:54:38.591 [DEBUG] [Thread-212667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:54:38.601 [DEBUG] [Thread-212667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:54:38.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:54:38.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:54:38.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:54:38.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:54:38.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:54:38.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:54:38.639 [DEBUG] [Thread-212667] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:54:47.099 [DEBUG] [Thread-212669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:54:57.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:54:57.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:01.660 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:02.159 [DEBUG] [Thread-212670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:08.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:55:08.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:55:08.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:55:10.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 55, 1), 11.57, 45.66, 0.0, 24.07, 14.99, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:55:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:55:01
2026-02-15T22:55:10.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:55:10.979 [DEBUG] [Thread-212671] [transport.py] [_log()] starting thread (client mode): 0xa57d5540
2026-02-15T22:55:10.979 [DEBUG] [Thread-212671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:55:10.998 [DEBUG] [Thread-212671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:55:10.998 [INFO] [Thread-212671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:55:11.001 [DEBUG] [Thread-212671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] client lang: <none>
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] server lang: <none>
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] kex follows: False
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] Compression: none
2026-02-15T22:55:11.002 [DEBUG] [Thread-212671] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:55:11.021 [DEBUG] [Thread-212671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:55:11.022 [DEBUG] [Thread-212671] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:55:11.023 [DEBUG] [Thread-212671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:55:11.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:55:11.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:55:11.024 [DEBUG] [Thread-212671] [transport.py] [_log()] userauth is OK
2026-02-15T22:55:11.025 [DEBUG] [Thread-212671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:55:11.025 [DEBUG] [Thread-212671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:55:11.025 [DEBUG] [Thread-212671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:55:11.025 [DEBUG] [Thread-212671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:55:11.039 [INFO] [Thread-212671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:55:11.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:55:14.877 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:17.198 [DEBUG] [Thread-212673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:18.555 [DEBUG] [Thread-212671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:55:18.555 [DEBUG] [Thread-212671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:55:18.556 [DEBUG] [Thread-212671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:55:18.596 [DEBUG] [Thread-212671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:55:18.596 [DEBUG] [Thread-212671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:55:18.599 [DEBUG] [Thread-212671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:55:18.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:55:18.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:55:18.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:55:18.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:55:18.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:55:18.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:55:18.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:55:18.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:55:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:55:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.871283 -999.00  +15.00  16.95     50   +4.90 1 1 1 1 1     0    0 9.32 -35.04 ZNESW 12.6 16.9 144.2 19.8 15.2 -24.7 15.2 -23.6 14.9 -22.5 15.2 -23.7
2026-02-15T22:55:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:55:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:55:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.871283
2026-02-15T22:55:18.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:55:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:55:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:55:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:55:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:55:18.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:55:01', tmtdew=11.57, humidity=45.66, cloud=0.0, wind=24.07, temperature=14.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:55:02', seeing=1.53, atlas_timestamp='2026-02-15T20:54:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:52:00')
2026-02-15T22:55:18.751 [DEBUG] [Thread-212671] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:55:18.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:55:18.846 [DEBUG] [Thread-212675] [transport.py] [_log()] starting thread (client mode): 0xa5773ee0
2026-02-15T22:55:18.846 [DEBUG] [Thread-212675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:55:18.860 [DEBUG] [Thread-212675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:55:18.861 [INFO] [Thread-212675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:55:18.868 [DEBUG] [Thread-212675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:55:18.869 [DEBUG] [Thread-212675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] client lang: <none>
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] server lang: <none>
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] kex follows: False
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:55:18.870 [DEBUG] [Thread-212675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:55:18.871 [DEBUG] [Thread-212675] [transport.py] [_log()] Compression: none
2026-02-15T22:55:18.871 [DEBUG] [Thread-212675] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:55:18.926 [DEBUG] [Thread-212675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:55:18.927 [DEBUG] [Thread-212675] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:55:18.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:55:18.928 [DEBUG] [Thread-212675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:55:18.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:55:18.982 [DEBUG] [Thread-212675] [transport.py] [_log()] userauth is OK
2026-02-15T22:55:18.982 [DEBUG] [Thread-212675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:55:18.982 [DEBUG] [Thread-212675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:55:18.983 [DEBUG] [Thread-212675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:55:18.983 [DEBUG] [Thread-212675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:55:19.007 [INFO] [Thread-212675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:55:19.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:55:19.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:55:19.804 [DEBUG] [Thread-212675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:55:19.804 [DEBUG] [Thread-212675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:55:19.852 [DEBUG] [Thread-212675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:55:19.852 [DEBUG] [Thread-212675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:55:19.861 [DEBUG] [Thread-212675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:55:19.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:55:19.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:55: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') -> 00000000
2026-02-15T22:55:19.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:55:19.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:55:19.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:55:19.895 [DEBUG] [Thread-212675] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:55:32.232 [DEBUG] [Thread-212677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:32.363 [DEBUG] [Thread-212678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:47.283 [DEBUG] [Thread-212679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:49.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:55:49.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:55:49.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:55:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 55, 36), 11.67, 45.55, 0.0, 25.55, 15.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:55:51.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:55:36
2026-02-15T22:55:52.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:55:52.295 [DEBUG] [Thread-212680] [transport.py] [_log()] starting thread (client mode): 0xa81d5b40
2026-02-15T22:55:52.295 [DEBUG] [Thread-212680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:55:52.316 [DEBUG] [Thread-212680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:55:52.316 [INFO] [Thread-212680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:55:52.319 [DEBUG] [Thread-212680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:55:52.319 [DEBUG] [Thread-212680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] client lang: <none>
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] server lang: <none>
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] kex follows: False
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] Compression: none
2026-02-15T22:55:52.320 [DEBUG] [Thread-212680] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:55:52.337 [DEBUG] [Thread-212680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:55:52.338 [DEBUG] [Thread-212680] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:55:52.339 [DEBUG] [Thread-212680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:55:52.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:55:52.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:55:52.340 [DEBUG] [Thread-212680] [transport.py] [_log()] userauth is OK
2026-02-15T22:55:52.341 [DEBUG] [Thread-212680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:55:52.341 [DEBUG] [Thread-212680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:55:52.341 [DEBUG] [Thread-212680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:55:52.341 [DEBUG] [Thread-212680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:55:52.366 [INFO] [Thread-212680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:55:52.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:55:53.007 [DEBUG] [Thread-212680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:55:53.007 [DEBUG] [Thread-212680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:55:53.007 [DEBUG] [Thread-212680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:55:53.048 [DEBUG] [Thread-212680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:55:53.048 [DEBUG] [Thread-212680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:55:53.050 [DEBUG] [Thread-212680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:55:53.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:55:53.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:55:53.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:55:53.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:55:53.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:55:53.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:55:53.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.871630 -999.00  +15.00  16.28     51   +4.90 1 1 1 1 1     0    0 9.32 -36.36 ZNESW 16.0 16.3 144.0 24.9 15.2 -24.4 15.1 -23.4 14.9 -22.4 15.2 -23.7
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.871630
2026-02-15T22:55:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:55:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:55:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:55:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:55:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:55:53.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:55:36', tmtdew=11.67, humidity=45.55, cloud=0.0, wind=25.55, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:55:37', seeing=1.65, atlas_timestamp='2026-02-15T20:55:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:52:00')
2026-02-15T22:55:53.071 [DEBUG] [Thread-212680] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:55:53.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:55:53.159 [DEBUG] [Thread-212683] [transport.py] [_log()] starting thread (client mode): 0xa57b0be0
2026-02-15T22:55:53.159 [DEBUG] [Thread-212683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:55:53.174 [DEBUG] [Thread-212683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:55:53.174 [INFO] [Thread-212683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:55:53.181 [DEBUG] [Thread-212683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] client lang: <none>
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] server lang: <none>
2026-02-15T22:55:53.182 [DEBUG] [Thread-212683] [transport.py] [_log()] kex follows: False
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] Compression: none
2026-02-15T22:55:53.183 [DEBUG] [Thread-212683] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:55:53.240 [DEBUG] [Thread-212683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:55:53.241 [DEBUG] [Thread-212683] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:55:53.241 [DEBUG] [Thread-212683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:55:53.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:55:53.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:55:53.302 [DEBUG] [Thread-212683] [transport.py] [_log()] userauth is OK
2026-02-15T22:55:53.302 [DEBUG] [Thread-212683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:55:53.302 [DEBUG] [Thread-212683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:55:53.302 [DEBUG] [Thread-212683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:55:53.302 [DEBUG] [Thread-212683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:55:53.324 [INFO] [Thread-212683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:55:53.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:55:53.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:55:54.141 [DEBUG] [Thread-212683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:55:54.141 [DEBUG] [Thread-212683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:55:54.189 [DEBUG] [Thread-212683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:55:54.189 [DEBUG] [Thread-212683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:55:54.197 [DEBUG] [Thread-212683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:55:54.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:55:54.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:55:54.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:55:54.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:55:54.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:55:54.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:55:54.229 [DEBUG] [Thread-212683] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:55:57.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:55:57.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:02.322 [DEBUG] [Thread-212685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:17.374 [DEBUG] [Thread-212686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:24.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:56:24.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:56:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:56:26.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 56, 11), 11.52, 45.82, 0.0, 22.21, 14.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:56:26.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:56:11
2026-02-15T22:56:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:56:26.694 [DEBUG] [Thread-212687] [transport.py] [_log()] starting thread (client mode): 0xa2d076a0
2026-02-15T22:56:26.694 [DEBUG] [Thread-212687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:56:26.714 [DEBUG] [Thread-212687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:56:26.714 [INFO] [Thread-212687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] client lang: <none>
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] server lang: <none>
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] kex follows: False
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] Compression: none
2026-02-15T22:56:26.717 [DEBUG] [Thread-212687] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:56:26.736 [DEBUG] [Thread-212687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:56:26.736 [DEBUG] [Thread-212687] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:56:26.736 [DEBUG] [Thread-212687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:56:26.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:56:26.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:56:26.738 [DEBUG] [Thread-212687] [transport.py] [_log()] userauth is OK
2026-02-15T22:56:26.738 [DEBUG] [Thread-212687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:56:26.738 [DEBUG] [Thread-212687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:56:26.738 [DEBUG] [Thread-212687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:56:26.739 [DEBUG] [Thread-212687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:56:26.760 [INFO] [Thread-212687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:56:26.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:56:27.374 [DEBUG] [Thread-212687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:56:27.374 [DEBUG] [Thread-212687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:56:27.374 [DEBUG] [Thread-212687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:56:27.415 [DEBUG] [Thread-212687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:56:27.415 [DEBUG] [Thread-212687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:56:27.417 [DEBUG] [Thread-212687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:56:27.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:56:27.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:56:27.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:56:27.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:56:27.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:56:27.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:56:27.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:56:27.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.871977 -999.00  +15.00  21.18     50   +4.90 1 1 1 1 1     0    0 9.51 -34.34 ZNESW 16.2 21.2 159.0 25.4 15.2 -24.5 15.1 -23.5 14.9 -22.2 15.2 -23.6
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.871977
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:56:27.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:56:11', tmtdew=11.52, humidity=45.82, cloud=0.0, wind=22.21, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:56:12', seeing=1.36, atlas_timestamp='2026-02-15T20:55:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.02275000000000027, -0.012749999999998707, -0.002000000000000668, 0.03149999999999942, -0.012749999999998707, -0.0010000000000012221, -0.04875000000000007, -0.007500000000000284, 0.005000000000000782, -0.06475000000000009, 0.006000000000000227, 0.05850000000000044, 0.010749999999999815, -0.008000000000000895, -0.004000000000001336, 0.045249999999999346, 0.042500000000000426, -0.015000000000000568, 0.01624999999999943, 0.036999999999999034, -0.0012500000000024158, -0.05274999999999963, 0.006750000000000256, 0.01899999999999835, 0.03500000000000014, -0.013249999999999318, 0.009999999999999787, 0.08500000000000085, 0.10250000000000092, 0.04300000000000104, 0.028999999999999915, 0.04724999999999824], zp_timestamp='2026-02-15T20:52:00')
2026-02-15T22:56:27.436 [DEBUG] [Thread-212687] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:56:27.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:56:27.524 [DEBUG] [Thread-212690] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-15T22:56:27.524 [DEBUG] [Thread-212690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:56:27.539 [DEBUG] [Thread-212690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:56:27.539 [INFO] [Thread-212690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:56:27.546 [DEBUG] [Thread-212690] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:56:27.546 [DEBUG] [Thread-212690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:56:27.546 [DEBUG] [Thread-212690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:56:27.546 [DEBUG] [Thread-212690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:56:27.546 [DEBUG] [Thread-212690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] client lang: <none>
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] server lang: <none>
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] kex follows: False
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] Compression: none
2026-02-15T22:56:27.547 [DEBUG] [Thread-212690] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:56:27.604 [DEBUG] [Thread-212690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:56:27.604 [DEBUG] [Thread-212690] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:56:27.604 [DEBUG] [Thread-212690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:56:27.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:56:27.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:56:27.661 [DEBUG] [Thread-212690] [transport.py] [_log()] userauth is OK
2026-02-15T22:56:27.661 [DEBUG] [Thread-212690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:56:27.661 [DEBUG] [Thread-212690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:56:27.661 [DEBUG] [Thread-212690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:56:27.661 [DEBUG] [Thread-212690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:56:27.675 [INFO] [Thread-212690] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:56:27.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:56:27.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:56:28.483 [DEBUG] [Thread-212690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:56:28.483 [DEBUG] [Thread-212690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:56:28.531 [DEBUG] [Thread-212690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:56:28.531 [DEBUG] [Thread-212690] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:56:28.541 [DEBUG] [Thread-212690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:56:28.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:56:28.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:56:28.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:56:28.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:56:28.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:56:28.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:56:28.577 [DEBUG] [Thread-212690] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:56:32.404 [DEBUG] [Thread-212692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:32.441 [DEBUG] [Thread-212693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:35.547 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:47.443 [DEBUG] [Thread-212694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:57.795 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:57.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:56:58.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:56:58.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:56:58.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:57:00.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 56, 47), 11.45, 46.37, 0.0, 23.4, 14.85, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:57:00.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:56:47
2026-02-15T22:57:00.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:57:01.061 [DEBUG] [Thread-212695] [transport.py] [_log()] starting thread (client mode): 0xa57e07c0
2026-02-15T22:57:01.061 [DEBUG] [Thread-212695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:57:01.082 [DEBUG] [Thread-212695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:57:01.082 [INFO] [Thread-212695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] client lang: <none>
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] server lang: <none>
2026-02-15T22:57:01.085 [DEBUG] [Thread-212695] [transport.py] [_log()] kex follows: False
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] Compression: none
2026-02-15T22:57:01.086 [DEBUG] [Thread-212695] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:57:01.104 [DEBUG] [Thread-212695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:57:01.105 [DEBUG] [Thread-212695] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:57:01.105 [DEBUG] [Thread-212695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:57:01.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:57:01.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:57:01.108 [DEBUG] [Thread-212695] [transport.py] [_log()] userauth is OK
2026-02-15T22:57:01.108 [DEBUG] [Thread-212695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:57:01.108 [DEBUG] [Thread-212695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:57:01.108 [DEBUG] [Thread-212695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:57:01.108 [DEBUG] [Thread-212695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:57:01.143 [INFO] [Thread-212695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:57:01.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:57:01.797 [DEBUG] [Thread-212695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:57:01.798 [DEBUG] [Thread-212695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:57:01.798 [DEBUG] [Thread-212695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:57:01.838 [DEBUG] [Thread-212695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:57:01.839 [DEBUG] [Thread-212695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:57:01.842 [DEBUG] [Thread-212695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:57:01.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:57:01.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:57:01.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:57:01.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:57:01.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:57:01.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:57:01.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:57:01.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:57:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:57:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.872324 -999.00  +14.90  18.55     50   +4.90 1 1 1 1 1     0    0 9.42 -33.36 ZNESW 17.0 18.6 147.0 21.9 15.2 -24.7 15.2 -23.5 14.9 -22.4 15.2 -23.6
2026-02-15T22:57:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:57:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:57:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.872324
2026-02-15T22:57:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:57:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:57:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:57:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:57:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:57:01.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:56:47', tmtdew=11.45, humidity=46.37, cloud=0.0, wind=23.4, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:56:48', seeing=1.55, atlas_timestamp='2026-02-15T20:56:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:55:00')
2026-02-15T22:57:01.875 [DEBUG] [Thread-212695] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:57:01.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:57:01.977 [DEBUG] [Thread-212698] [transport.py] [_log()] starting thread (client mode): 0xa2d11c60
2026-02-15T22:57:01.977 [DEBUG] [Thread-212698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:57:01.991 [DEBUG] [Thread-212698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:57:01.991 [INFO] [Thread-212698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] client lang: <none>
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] server lang: <none>
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] kex follows: False
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] Compression: none
2026-02-15T22:57:01.999 [DEBUG] [Thread-212698] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:57:02.056 [DEBUG] [Thread-212698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:57:02.056 [DEBUG] [Thread-212698] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:57:02.057 [DEBUG] [Thread-212698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:57:02.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:57:02.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:57:02.113 [DEBUG] [Thread-212698] [transport.py] [_log()] userauth is OK
2026-02-15T22:57:02.113 [DEBUG] [Thread-212698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:57:02.113 [DEBUG] [Thread-212698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:57:02.113 [DEBUG] [Thread-212698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:57:02.113 [DEBUG] [Thread-212698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:57:02.129 [INFO] [Thread-212698] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:57:02.129 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:57:02.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:57:02.480 [DEBUG] [Thread-212700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:57:03.034 [DEBUG] [Thread-212698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:57:03.034 [DEBUG] [Thread-212698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:57:03.082 [DEBUG] [Thread-212698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:57:03.082 [DEBUG] [Thread-212698] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:57:03.090 [DEBUG] [Thread-212698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:57:03.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:57:03.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:57:03.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:57:03.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:57:03.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:57:03.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:57:03.124 [DEBUG] [Thread-212698] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:57:17.534 [DEBUG] [Thread-212701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:57:32.503 [DEBUG] [Thread-212702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:57:32.572 [DEBUG] [Thread-212703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:57:33.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:57:33.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:57:33.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:57:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 57, 23), 11.45, 46.37, 0.0, 23.59, 14.92, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:57:35.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:57:23
2026-02-15T22:57:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:57:35.582 [DEBUG] [Thread-212704] [transport.py] [_log()] starting thread (client mode): 0xa57b00a0
2026-02-15T22:57:35.582 [DEBUG] [Thread-212704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:57:35.602 [DEBUG] [Thread-212704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:57:35.602 [INFO] [Thread-212704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:57:35.605 [DEBUG] [Thread-212704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] client lang: <none>
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] server lang: <none>
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] kex follows: False
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] Compression: none
2026-02-15T22:57:35.606 [DEBUG] [Thread-212704] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:57:35.621 [DEBUG] [Thread-212704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:57:35.622 [DEBUG] [Thread-212704] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:57:35.622 [DEBUG] [Thread-212704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:57:35.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:57:35.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:57:35.625 [DEBUG] [Thread-212704] [transport.py] [_log()] userauth is OK
2026-02-15T22:57:35.625 [DEBUG] [Thread-212704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:57:35.625 [DEBUG] [Thread-212704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:57:35.625 [DEBUG] [Thread-212704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:57:35.625 [DEBUG] [Thread-212704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:57:35.650 [INFO] [Thread-212704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:57:35.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:57:36.257 [DEBUG] [Thread-212704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:57:36.258 [DEBUG] [Thread-212704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:57:36.258 [DEBUG] [Thread-212704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:57:36.298 [DEBUG] [Thread-212704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:57:36.299 [DEBUG] [Thread-212704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:57:36.302 [DEBUG] [Thread-212704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:57:36.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:57:36.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:57:36.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:57:36.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:57:36.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:57:36.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:57:36.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:57:36.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:57:36.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:57:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.873019 -999.00  +14.90  17.09     51   +4.80 1 1 1 1 1     0    0 9.53 -35.08 ZNESW 16.4 17.1 144.8 20.2 15.2 -24.6 15.1 -23.6 14.9 -22.4 15.1 -23.7
2026-02-15T22:57:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:57:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:57:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.873019
2026-02-15T22:57:36.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:57:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:57:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:57:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:57:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:57:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:57:23', tmtdew=11.45, humidity=46.37, cloud=0.0, wind=23.59, temperature=14.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:57:23', seeing=1.92, atlas_timestamp='2026-02-15T20:57:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:55:00')
2026-02-15T22:57:36.330 [DEBUG] [Thread-212704] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:57:36.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:57:36.427 [DEBUG] [Thread-212707] [transport.py] [_log()] starting thread (client mode): 0xa57e0be0
2026-02-15T22:57:36.427 [DEBUG] [Thread-212707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:57:36.441 [DEBUG] [Thread-212707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:57:36.442 [INFO] [Thread-212707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] client lang: <none>
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] server lang: <none>
2026-02-15T22:57:36.450 [DEBUG] [Thread-212707] [transport.py] [_log()] kex follows: False
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] Compression: none
2026-02-15T22:57:36.451 [DEBUG] [Thread-212707] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:57:36.513 [DEBUG] [Thread-212707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:57:36.514 [DEBUG] [Thread-212707] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:57:36.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:57:36.515 [DEBUG] [Thread-212707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:57:36.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:57:36.570 [DEBUG] [Thread-212707] [transport.py] [_log()] userauth is OK
2026-02-15T22:57:36.570 [DEBUG] [Thread-212707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:57:36.571 [DEBUG] [Thread-212707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:57:36.571 [DEBUG] [Thread-212707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:57:36.571 [DEBUG] [Thread-212707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:57:36.589 [INFO] [Thread-212707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:57:36.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:57:36.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:57:37.462 [DEBUG] [Thread-212707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:57:37.462 [DEBUG] [Thread-212707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:57:37.510 [DEBUG] [Thread-212707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:57:37.510 [DEBUG] [Thread-212707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:57:37.520 [DEBUG] [Thread-212707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:57:37.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:57:37.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:57:37.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:57:37.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:57:37.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:57:37.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:57:37.555 [DEBUG] [Thread-212707] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:57:47.606 [DEBUG] [Thread-212709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:57:57.995 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:57:57.996 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:02.664 [DEBUG] [Thread-212710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:07.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:58:07.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:58:07.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:58:09.098 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 57, 58), 11.46, 45.97, 0.0, 21.39, 14.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:58:09.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:57:58
2026-02-15T22:58:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:58:10.122 [DEBUG] [Thread-212711] [transport.py] [_log()] starting thread (client mode): 0xa57e1210
2026-02-15T22:58:10.122 [DEBUG] [Thread-212711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:58:10.141 [DEBUG] [Thread-212711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:58:10.141 [INFO] [Thread-212711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] client lang: <none>
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] server lang: <none>
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] kex follows: False
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:58:10.144 [DEBUG] [Thread-212711] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:58:10.145 [DEBUG] [Thread-212711] [transport.py] [_log()] Compression: none
2026-02-15T22:58:10.145 [DEBUG] [Thread-212711] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:58:10.161 [DEBUG] [Thread-212711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:58:10.161 [DEBUG] [Thread-212711] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:58:10.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:58:10.162 [DEBUG] [Thread-212711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:58:10.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:58:10.164 [DEBUG] [Thread-212711] [transport.py] [_log()] userauth is OK
2026-02-15T22:58:10.165 [DEBUG] [Thread-212711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:58:10.165 [DEBUG] [Thread-212711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:58:10.165 [DEBUG] [Thread-212711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:58:10.165 [DEBUG] [Thread-212711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:58:10.189 [INFO] [Thread-212711] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:58:10.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:58:11.011 [DEBUG] [Thread-212711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:58:11.011 [DEBUG] [Thread-212711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:58:11.012 [DEBUG] [Thread-212711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:58:11.052 [DEBUG] [Thread-212711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:58:11.053 [DEBUG] [Thread-212711] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:58:11.056 [DEBUG] [Thread-212711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:58:11.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:58:11.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:58:11.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:58:11.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:58:11.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:58:11.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:58:11.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:58:11.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:58:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:58:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.873366 -999.00  +14.80  14.00     51   +4.80 1 1 1 1 1     0    0 9.43 -38.77 ZNESW 16.2 14.0 147.6 18.8 15.2 -24.6 15.1 -23.5 14.8 -22.3 15.1 -23.7
2026-02-15T22:58:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:58:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:58:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.873366
2026-02-15T22:58:11.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:58:11.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:58:11.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:58:11.083 [DEBUG] [Thread-212711] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:58:11.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:58:11.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:58:11.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:57:58', tmtdew=11.46, humidity=45.97, cloud=0.0, wind=21.39, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:57:58', seeing=1.59, atlas_timestamp='2026-02-15T20:57:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:55:00')
2026-02-15T22:58:11.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:58:11.191 [DEBUG] [Thread-212714] [transport.py] [_log()] starting thread (client mode): 0xa2d56200
2026-02-15T22:58:11.192 [DEBUG] [Thread-212714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:58:11.206 [DEBUG] [Thread-212714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:58:11.206 [INFO] [Thread-212714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:58:11.214 [DEBUG] [Thread-212714] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:58:11.214 [DEBUG] [Thread-212714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:58:11.214 [DEBUG] [Thread-212714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:58:11.214 [DEBUG] [Thread-212714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] client lang: <none>
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] server lang: <none>
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] kex follows: False
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] Compression: none
2026-02-15T22:58:11.215 [DEBUG] [Thread-212714] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:58:11.274 [DEBUG] [Thread-212714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:58:11.274 [DEBUG] [Thread-212714] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:58:11.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:58:11.275 [DEBUG] [Thread-212714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:58:11.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:58:11.330 [DEBUG] [Thread-212714] [transport.py] [_log()] userauth is OK
2026-02-15T22:58:11.331 [DEBUG] [Thread-212714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:58:11.331 [DEBUG] [Thread-212714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:58:11.331 [DEBUG] [Thread-212714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:58:11.331 [DEBUG] [Thread-212714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:58:11.351 [INFO] [Thread-212714] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:58:11.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:58:11.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:58:12.175 [DEBUG] [Thread-212714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:58:12.175 [DEBUG] [Thread-212714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:58:12.222 [DEBUG] [Thread-212714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:58:12.222 [DEBUG] [Thread-212714] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:58:12.232 [DEBUG] [Thread-212714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:58:12.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:58:12.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:58:12.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:58:12.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:58:12.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:58:12.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:58:12.268 [DEBUG] [Thread-212714] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:58:17.701 [DEBUG] [Thread-212716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:32.571 [DEBUG] [Thread-212717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:32.749 [DEBUG] [Thread-212718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:42.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:58:42.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:58:42.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:58:44.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 58, 33), 11.58, 45.81, 0.0, 28.51, 15.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:58:44.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:58:33
2026-02-15T22:58:44.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:58:44.656 [DEBUG] [Thread-212719] [transport.py] [_log()] starting thread (client mode): 0xa81d6c20
2026-02-15T22:58:44.656 [DEBUG] [Thread-212719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:58:44.677 [DEBUG] [Thread-212719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:58:44.677 [INFO] [Thread-212719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:58:44.680 [DEBUG] [Thread-212719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:58:44.680 [DEBUG] [Thread-212719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:58:44.680 [DEBUG] [Thread-212719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] client lang: <none>
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] server lang: <none>
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] kex follows: False
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:58:44.681 [DEBUG] [Thread-212719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:58:44.682 [DEBUG] [Thread-212719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:58:44.682 [DEBUG] [Thread-212719] [transport.py] [_log()] Compression: none
2026-02-15T22:58:44.682 [DEBUG] [Thread-212719] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:58:44.700 [DEBUG] [Thread-212719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:58:44.701 [DEBUG] [Thread-212719] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:58:44.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:58:44.702 [DEBUG] [Thread-212719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:58:44.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:58:44.704 [DEBUG] [Thread-212719] [transport.py] [_log()] userauth is OK
2026-02-15T22:58:44.705 [DEBUG] [Thread-212719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:58:44.705 [DEBUG] [Thread-212719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:58:44.705 [DEBUG] [Thread-212719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:58:44.705 [DEBUG] [Thread-212719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:58:44.722 [INFO] [Thread-212719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:58:44.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:58:45.378 [DEBUG] [Thread-212719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:58:45.379 [DEBUG] [Thread-212719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:58:45.379 [DEBUG] [Thread-212719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:58:45.419 [DEBUG] [Thread-212719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:58:45.420 [DEBUG] [Thread-212719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:58:45.423 [DEBUG] [Thread-212719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:58:45.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:58:45.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:58:45.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:58:45.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:58:45.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:58:45.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:58:45.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:58:45.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:58:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:58:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.873713 -999.00  +14.80  16.06     51   +4.90 1 1 1 1 1     0    0 9.04 -38.37 ZNESW 16.8 16.1 153.2 20.6 15.2 -24.6 15.1 -23.5 14.8 -22.4 15.1 -23.8
2026-02-15T22:58:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:58:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:58:45.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.873713
2026-02-15T22:58:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:58:45.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:58:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:58:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:58:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:58:45.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:58:33', tmtdew=11.58, humidity=45.81, cloud=0.0, wind=28.51, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:58:33', seeing=1.86, atlas_timestamp='2026-02-15T20:58:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:55:00')
2026-02-15T22:58:45.452 [DEBUG] [Thread-212719] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:58:45.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:58:45.545 [DEBUG] [Thread-212722] [transport.py] [_log()] starting thread (client mode): 0xa5770c70
2026-02-15T22:58:45.545 [DEBUG] [Thread-212722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:58:45.560 [DEBUG] [Thread-212722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:58:45.560 [INFO] [Thread-212722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:58:45.568 [DEBUG] [Thread-212722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:58:45.568 [DEBUG] [Thread-212722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:58:45.568 [DEBUG] [Thread-212722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:58:45.568 [DEBUG] [Thread-212722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:45.568 [DEBUG] [Thread-212722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] client lang: <none>
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] server lang: <none>
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] kex follows: False
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:58:45.569 [DEBUG] [Thread-212722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:58:45.570 [DEBUG] [Thread-212722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:58:45.570 [DEBUG] [Thread-212722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:58:45.570 [DEBUG] [Thread-212722] [transport.py] [_log()] Compression: none
2026-02-15T22:58:45.570 [DEBUG] [Thread-212722] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:58:45.625 [DEBUG] [Thread-212722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:58:45.626 [DEBUG] [Thread-212722] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:58:45.626 [DEBUG] [Thread-212722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:58:45.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:58:45.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:58:45.681 [DEBUG] [Thread-212722] [transport.py] [_log()] userauth is OK
2026-02-15T22:58:45.681 [DEBUG] [Thread-212722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:58:45.681 [DEBUG] [Thread-212722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:58:45.681 [DEBUG] [Thread-212722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:58:45.681 [DEBUG] [Thread-212722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:58:45.695 [INFO] [Thread-212722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:58:45.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:58:45.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:58:46.547 [DEBUG] [Thread-212722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:58:46.548 [DEBUG] [Thread-212722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:58:46.595 [DEBUG] [Thread-212722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:58:46.595 [DEBUG] [Thread-212722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:58:46.605 [DEBUG] [Thread-212722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:58:46.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:58:46.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:58:46.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:58:46.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:58:46.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:58:46.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:58:46.641 [DEBUG] [Thread-212722] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:58:47.783 [DEBUG] [Thread-212724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:58.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:58:58.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:02.835 [DEBUG] [Thread-212725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:16.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:59:16.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:59:16.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:59:17.875 [DEBUG] [Thread-212726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:18.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 59, 8), 11.4, 46.52, 0.0, 27.86, 14.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:59:18.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:59:08
2026-02-15T22:59:18.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:59:18.925 [DEBUG] [Thread-212727] [transport.py] [_log()] starting thread (client mode): 0xa57e3fd0
2026-02-15T22:59:18.925 [DEBUG] [Thread-212727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:59:18.948 [DEBUG] [Thread-212727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:59:18.949 [INFO] [Thread-212727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] client lang: <none>
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] server lang: <none>
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] kex follows: False
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:59:18.952 [DEBUG] [Thread-212727] [transport.py] [_log()] Compression: none
2026-02-15T22:59:18.953 [DEBUG] [Thread-212727] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:59:18.969 [DEBUG] [Thread-212727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:59:18.970 [DEBUG] [Thread-212727] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:59:18.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:59:18.971 [DEBUG] [Thread-212727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:59:18.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:59:18.973 [DEBUG] [Thread-212727] [transport.py] [_log()] userauth is OK
2026-02-15T22:59:18.973 [DEBUG] [Thread-212727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:59:18.974 [DEBUG] [Thread-212727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:59:18.974 [DEBUG] [Thread-212727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:59:18.974 [DEBUG] [Thread-212727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:59:18.998 [INFO] [Thread-212727] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:59:18.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:59:19.719 [DEBUG] [Thread-212727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:59:19.720 [DEBUG] [Thread-212727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:59:19.720 [DEBUG] [Thread-212727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:59:19.761 [DEBUG] [Thread-212727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:59:19.761 [DEBUG] [Thread-212727] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:59:19.764 [DEBUG] [Thread-212727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:59:19.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:59:19.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:59:19.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:59:19.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:59:19.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:59:19.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:59:19.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:59:19.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:59:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:59:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.874061 -999.00  +14.80  18.62     51   +4.90 1 1 1 1 1     0    0 9.27 -42.23 ZNESW 19.9 18.6 146.8 25.9 15.2 -24.5 15.0 -23.4 14.8 -22.2 15.1 -23.4
2026-02-15T22:59:19.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:59:19.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:59:19.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.874061
2026-02-15T22:59:19.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:59:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:59:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:59:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:59:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:59:19.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:59:08', tmtdew=11.4, humidity=46.52, cloud=0.0, wind=27.86, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:59:09', seeing=1.86, atlas_timestamp='2026-02-15T20:58:38.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:55:00')
2026-02-15T22:59:19.792 [DEBUG] [Thread-212727] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:59:19.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:59:19.895 [DEBUG] [Thread-212730] [transport.py] [_log()] starting thread (client mode): 0xa2d7a170
2026-02-15T22:59:19.895 [DEBUG] [Thread-212730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:59:19.909 [DEBUG] [Thread-212730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:59:19.910 [INFO] [Thread-212730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:19.917 [DEBUG] [Thread-212730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] client lang: <none>
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] server lang: <none>
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] kex follows: False
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] Compression: none
2026-02-15T22:59:19.918 [DEBUG] [Thread-212730] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:59:19.978 [DEBUG] [Thread-212730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:59:19.978 [DEBUG] [Thread-212730] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:59:19.979 [DEBUG] [Thread-212730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:59:19.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:59:19.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:59:20.034 [DEBUG] [Thread-212730] [transport.py] [_log()] userauth is OK
2026-02-15T22:59:20.035 [DEBUG] [Thread-212730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:59:20.035 [DEBUG] [Thread-212730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:59:20.035 [DEBUG] [Thread-212730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:59:20.035 [DEBUG] [Thread-212730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:59:20.054 [INFO] [Thread-212730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:59:20.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:59:20.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:59:20.879 [DEBUG] [Thread-212730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:59:20.879 [DEBUG] [Thread-212730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:59:20.926 [DEBUG] [Thread-212730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:59:20.926 [DEBUG] [Thread-212730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:59:20.935 [DEBUG] [Thread-212730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:59:20.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:59:20.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:59: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') -> 00000000
2026-02-15T22:59:20.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:59:20.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:59:20.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:59:20.972 [DEBUG] [Thread-212730] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:59:32.627 [DEBUG] [Thread-212732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:32.908 [DEBUG] [Thread-212733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:43.287 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:47.959 [DEBUG] [Thread-212734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:50.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T22:59:50.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T22:59:51.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T22:59:52.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 22, 59, 44), 11.4, 46.52, 0.0, 23.17, 14.89, 0, 0, 0, 2, 0, 0),)
2026-02-15T22:59:52.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 22:59:44
2026-02-15T22:59:53.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T22:59:53.358 [DEBUG] [Thread-212735] [transport.py] [_log()] starting thread (client mode): 0xa2d6fa60
2026-02-15T22:59:53.358 [DEBUG] [Thread-212735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:59:53.378 [DEBUG] [Thread-212735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T22:59:53.378 [INFO] [Thread-212735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T22:59:53.381 [DEBUG] [Thread-212735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] client lang: <none>
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] server lang: <none>
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] kex follows: False
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] Compression: none
2026-02-15T22:59:53.382 [DEBUG] [Thread-212735] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:59:53.399 [DEBUG] [Thread-212735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:59:53.399 [DEBUG] [Thread-212735] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:59:53.399 [DEBUG] [Thread-212735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T22:59:53.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T22:59:53.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:59:53.400 [DEBUG] [Thread-212735] [transport.py] [_log()] userauth is OK
2026-02-15T22:59:53.400 [DEBUG] [Thread-212735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:59:53.400 [DEBUG] [Thread-212735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:59:53.400 [DEBUG] [Thread-212735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T22:59:53.400 [DEBUG] [Thread-212735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:59:53.410 [INFO] [Thread-212735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:59:53.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:59:54.046 [DEBUG] [Thread-212735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:59:54.046 [DEBUG] [Thread-212735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:59:54.047 [DEBUG] [Thread-212735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T22:59:54.087 [DEBUG] [Thread-212735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:59:54.088 [DEBUG] [Thread-212735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:59:54.091 [DEBUG] [Thread-212735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:59:54.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:59:54.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T22:59:54.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T22:59:54.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T22:59:54.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:59:54.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T22:59:54.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:59:54.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:59:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T22:59:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.874408 -999.00  +14.90  18.45     51   +4.90 1 1 1 1 1     0    0 9.01 -40.76 ZNESW 17.0 18.4 146.0 25.3 15.2 -24.4 15.0 -23.3 14.8 -22.2 15.1 -23.4
2026-02-15T22:59:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T22:59:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T22:59:54.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.874408
2026-02-15T22:59:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T22:59:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T22:59:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T22:59:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T22:59:54.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T22:59:54.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T22:59:44', tmtdew=11.4, humidity=46.52, cloud=0.0, wind=23.17, temperature=14.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T22:59:44', seeing=1.5, atlas_timestamp='2026-02-15T20:59:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:58:00')
2026-02-15T22:59:54.116 [DEBUG] [Thread-212735] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:59:54.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T22:59:54.212 [DEBUG] [Thread-212738] [transport.py] [_log()] starting thread (client mode): 0xa57c2530
2026-02-15T22:59:54.212 [DEBUG] [Thread-212738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T22:59:54.226 [DEBUG] [Thread-212738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T22:59:54.226 [INFO] [Thread-212738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T22:59:54.233 [DEBUG] [Thread-212738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T22:59:54.233 [DEBUG] [Thread-212738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] client lang: <none>
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] server lang: <none>
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] kex follows: False
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] Compression: none
2026-02-15T22:59:54.234 [DEBUG] [Thread-212738] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T22:59:54.294 [DEBUG] [Thread-212738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T22:59:54.294 [DEBUG] [Thread-212738] [transport.py] [_log()] Switch to new keys ...
2026-02-15T22:59:54.295 [DEBUG] [Thread-212738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T22:59:54.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T22:59:54.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T22:59:54.350 [DEBUG] [Thread-212738] [transport.py] [_log()] userauth is OK
2026-02-15T22:59:54.350 [DEBUG] [Thread-212738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T22:59:54.351 [DEBUG] [Thread-212738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T22:59:54.351 [DEBUG] [Thread-212738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T22:59:54.351 [DEBUG] [Thread-212738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T22:59:54.369 [INFO] [Thread-212738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T22:59:54.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T22:59:54.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T22:59:55.190 [DEBUG] [Thread-212738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T22:59:55.190 [DEBUG] [Thread-212738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T22:59:55.238 [DEBUG] [Thread-212738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T22:59:55.238 [DEBUG] [Thread-212738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T22:59:55.247 [DEBUG] [Thread-212738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T22:59:55.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T22:59:55.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T22:59:55.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T22:59:55.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T22:59:55.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T22:59:55.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T22:59:55.282 [DEBUG] [Thread-212738] [transport.py] [_log()] EOF in transport thread
2026-02-15T22:59:58.397 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T22:59:58.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:02.990 [DEBUG] [Thread-212740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:18.031 [DEBUG] [Thread-212741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:25.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:00:25.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:00:25.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:00:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 0, 19), 11.43, 46.46, 0.0, 24.26, 14.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:00:27.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:00:19
2026-02-15T23:00:27.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:00:27.635 [DEBUG] [Thread-212742] [transport.py] [_log()] starting thread (client mode): 0xa2dc2200
2026-02-15T23:00:27.635 [DEBUG] [Thread-212742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:00:27.656 [DEBUG] [Thread-212742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:00:27.656 [INFO] [Thread-212742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] client lang: <none>
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] server lang: <none>
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] kex follows: False
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] Compression: none
2026-02-15T23:00:27.659 [DEBUG] [Thread-212742] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:00:27.675 [DEBUG] [Thread-212742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:00:27.675 [DEBUG] [Thread-212742] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:00:27.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:00:27.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:00:27.675 [DEBUG] [Thread-212742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:00:27.676 [DEBUG] [Thread-212742] [transport.py] [_log()] userauth is OK
2026-02-15T23:00:27.676 [DEBUG] [Thread-212742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:00:27.676 [DEBUG] [Thread-212742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:00:27.676 [DEBUG] [Thread-212742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:00:27.676 [DEBUG] [Thread-212742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:00:27.691 [INFO] [Thread-212742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:00:27.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:00:28.329 [DEBUG] [Thread-212742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:00:28.329 [DEBUG] [Thread-212742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:00:28.330 [DEBUG] [Thread-212742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:00:28.370 [DEBUG] [Thread-212742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:00:28.371 [DEBUG] [Thread-212742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:00:28.374 [DEBUG] [Thread-212742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:00:28.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:00:28.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:00:28.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:00:28.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:00:28.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:00:28.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:00:28.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:00:28.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:00:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:00:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.874755 -999.00  +14.90  15.37     51   +4.90 1 1 1 1 1     0    0 9.10 -39.59 ZNESW 13.8 15.4 151.2 24.1 15.2 -24.4 15.0 -23.4 14.9 -22.3 15.1 -23.5
2026-02-15T23:00:28.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:00:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:00:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.874755
2026-02-15T23:00:28.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:00:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:00:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:00:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:00:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:00:28.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:00:19', tmtdew=11.43, humidity=46.46, cloud=0.0, wind=24.26, temperature=14.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:00:20', seeing=1.64, atlas_timestamp='2026-02-15T20:59:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:58:00')
2026-02-15T23:00:28.400 [DEBUG] [Thread-212742] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:00:28.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:00:28.495 [DEBUG] [Thread-212745] [transport.py] [_log()] starting thread (client mode): 0xa2d55f60
2026-02-15T23:00:28.495 [DEBUG] [Thread-212745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:00:28.509 [DEBUG] [Thread-212745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:00:28.509 [INFO] [Thread-212745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:00:28.517 [DEBUG] [Thread-212745] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:00:28.517 [DEBUG] [Thread-212745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:00:28.517 [DEBUG] [Thread-212745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] client lang: <none>
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] server lang: <none>
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] kex follows: False
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] Compression: none
2026-02-15T23:00:28.518 [DEBUG] [Thread-212745] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:00:28.574 [DEBUG] [Thread-212745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:00:28.574 [DEBUG] [Thread-212745] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:00:28.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:00:28.576 [DEBUG] [Thread-212745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:00:28.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:00:28.634 [DEBUG] [Thread-212745] [transport.py] [_log()] userauth is OK
2026-02-15T23:00:28.634 [DEBUG] [Thread-212745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:00:28.635 [DEBUG] [Thread-212745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:00:28.635 [DEBUG] [Thread-212745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:00:28.635 [DEBUG] [Thread-212745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:00:28.654 [INFO] [Thread-212745] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:00:28.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:00:28.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:00:29.461 [DEBUG] [Thread-212745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:00:29.461 [DEBUG] [Thread-212745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:00:29.509 [DEBUG] [Thread-212745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:00:29.510 [DEBUG] [Thread-212745] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:00:29.519 [DEBUG] [Thread-212745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:00:29.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:00:29.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:00:29.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:00:29.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:00:29.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:00:29.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:00:29.556 [DEBUG] [Thread-212745] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:00:32.716 [DEBUG] [Thread-212747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:33.063 [DEBUG] [Thread-212748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:48.108 [DEBUG] [Thread-212749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:58.599 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:58.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:00:59.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:00:59.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:00:59.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:01:02.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 0, 19), 11.43, 46.46, 0.0, 24.26, 14.95, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:01:02.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:00:19
2026-02-15T23:01:02.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:01:02.713 [DEBUG] [Thread-212750] [transport.py] [_log()] starting thread (client mode): 0xa57e3550
2026-02-15T23:01:02.713 [DEBUG] [Thread-212750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:01:02.734 [DEBUG] [Thread-212750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:01:02.734 [INFO] [Thread-212750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:01:02.737 [DEBUG] [Thread-212750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:01:02.737 [DEBUG] [Thread-212750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] client lang: <none>
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] server lang: <none>
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] kex follows: False
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:01:02.738 [DEBUG] [Thread-212750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:01:02.739 [DEBUG] [Thread-212750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:01:02.739 [DEBUG] [Thread-212750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:01:02.739 [DEBUG] [Thread-212750] [transport.py] [_log()] Compression: none
2026-02-15T23:01:02.739 [DEBUG] [Thread-212750] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:01:02.757 [DEBUG] [Thread-212750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:01:02.758 [DEBUG] [Thread-212750] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:01:02.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:01:02.760 [DEBUG] [Thread-212750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:01:02.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:01:02.762 [DEBUG] [Thread-212750] [transport.py] [_log()] userauth is OK
2026-02-15T23:01:02.762 [DEBUG] [Thread-212750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:01:02.762 [DEBUG] [Thread-212750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:01:02.763 [DEBUG] [Thread-212750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:01:02.763 [DEBUG] [Thread-212750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:01:02.785 [INFO] [Thread-212750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:01:02.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:01:03.139 [DEBUG] [Thread-212752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:03.339 [DEBUG] [Thread-212750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:01:03.340 [DEBUG] [Thread-212750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:01:03.340 [DEBUG] [Thread-212750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:01:03.381 [DEBUG] [Thread-212750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:01:03.381 [DEBUG] [Thread-212750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:01:03.384 [DEBUG] [Thread-212750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:01:03.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:01:03.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:01:03.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:01:03.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:01:03.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:01:03.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:01:03.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:01:03.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:01:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:01:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.875449 -999.00  +14.80  15.84     51   +4.90 1 1 1 1 1     0    0 9.21 -39.70 ZNESW 17.1 15.8 158.4 21.4 15.1 -24.4 15.0 -23.4 14.8 -22.3 15.1 -23.5
2026-02-15T23:01:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:01:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:01:03.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.875449
2026-02-15T23:01:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:01:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:01:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:01:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:01:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:01:03.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:00:19', tmtdew=11.43, humidity=46.46, cloud=0.0, wind=24.26, temperature=14.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:00:55', seeing=1.64, atlas_timestamp='2026-02-15T21:00:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:58:00')
2026-02-15T23:01:03.410 [DEBUG] [Thread-212750] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:01:03.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:01:03.507 [DEBUG] [Thread-212754] [transport.py] [_log()] starting thread (client mode): 0xa57e3fd0
2026-02-15T23:01:03.508 [DEBUG] [Thread-212754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:01:03.526 [DEBUG] [Thread-212754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:01:03.526 [INFO] [Thread-212754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:01:03.533 [DEBUG] [Thread-212754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:01:03.534 [DEBUG] [Thread-212754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:01:03.534 [DEBUG] [Thread-212754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:01:03.534 [DEBUG] [Thread-212754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:03.534 [DEBUG] [Thread-212754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:03.534 [DEBUG] [Thread-212754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:03.534 [DEBUG] [Thread-212754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:03.535 [DEBUG] [Thread-212754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:01:03.535 [DEBUG] [Thread-212754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:01:03.535 [DEBUG] [Thread-212754] [transport.py] [_log()] client lang: <none>
2026-02-15T23:01:03.535 [DEBUG] [Thread-212754] [transport.py] [_log()] server lang: <none>
2026-02-15T23:01:03.535 [DEBUG] [Thread-212754] [transport.py] [_log()] kex follows: False
2026-02-15T23:01:03.535 [DEBUG] [Thread-212754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:01:03.536 [DEBUG] [Thread-212754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:01:03.536 [DEBUG] [Thread-212754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:01:03.536 [DEBUG] [Thread-212754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:01:03.536 [DEBUG] [Thread-212754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:01:03.536 [DEBUG] [Thread-212754] [transport.py] [_log()] Compression: none
2026-02-15T23:01:03.536 [DEBUG] [Thread-212754] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:01:03.594 [DEBUG] [Thread-212754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:01:03.594 [DEBUG] [Thread-212754] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:01:03.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:01:03.596 [DEBUG] [Thread-212754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:01:03.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:01:03.650 [DEBUG] [Thread-212754] [transport.py] [_log()] userauth is OK
2026-02-15T23:01:03.650 [DEBUG] [Thread-212754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:01:03.650 [DEBUG] [Thread-212754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:01:03.651 [DEBUG] [Thread-212754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:01:03.651 [DEBUG] [Thread-212754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:01:03.670 [INFO] [Thread-212754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:01:03.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:01:03.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:01:04.548 [DEBUG] [Thread-212754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:01:04.548 [DEBUG] [Thread-212754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:01:04.596 [DEBUG] [Thread-212754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:01:04.596 [DEBUG] [Thread-212754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:01:04.605 [DEBUG] [Thread-212754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:01:04.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:01:04.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:01:04.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:01:04.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:01:04.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:01:04.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:01:04.642 [DEBUG] [Thread-212754] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:01:17.595 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:18.174 [DEBUG] [Thread-212756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:32.788 [DEBUG] [Thread-212757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:33.222 [DEBUG] [Thread-212758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:34.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:01:34.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:01:34.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:01:36.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 0, 54), 11.38, 46.44, 0.0, 25.09, 14.9, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:01:36.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:00:54
2026-02-15T23:01:37.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:01:37.335 [DEBUG] [Thread-212759] [transport.py] [_log()] starting thread (client mode): 0xa81d6110
2026-02-15T23:01:37.336 [DEBUG] [Thread-212759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:01:37.355 [DEBUG] [Thread-212759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:01:37.355 [INFO] [Thread-212759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:01:37.359 [DEBUG] [Thread-212759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] client lang: <none>
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] server lang: <none>
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] kex follows: False
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] Compression: none
2026-02-15T23:01:37.360 [DEBUG] [Thread-212759] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:01:37.377 [DEBUG] [Thread-212759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:01:37.378 [DEBUG] [Thread-212759] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:01:37.378 [DEBUG] [Thread-212759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:01:37.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:01:37.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:01:37.380 [DEBUG] [Thread-212759] [transport.py] [_log()] userauth is OK
2026-02-15T23:01:37.381 [DEBUG] [Thread-212759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:01:37.381 [DEBUG] [Thread-212759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:01:37.381 [DEBUG] [Thread-212759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:01:37.381 [DEBUG] [Thread-212759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:01:37.405 [INFO] [Thread-212759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:01:37.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:01:38.045 [DEBUG] [Thread-212759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:01:38.046 [DEBUG] [Thread-212759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:01:38.046 [DEBUG] [Thread-212759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:01:38.086 [DEBUG] [Thread-212759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:01:38.087 [DEBUG] [Thread-212759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:01:38.090 [DEBUG] [Thread-212759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:01:38.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:01:38.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:01:38.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:01:38.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:01:38.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:01:38.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:01:38.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:01:38.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:01:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:01:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.875797 -999.00  +14.80  21.36     51   +4.90 1 1 1 1 1     0    0 9.01 -41.22 ZNESW 18.9 21.4 142.4 26.3 15.1 -24.5 15.0 -23.5 14.8 -22.3 15.1 -23.6
2026-02-15T23:01:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:01:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:01:38.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.875797
2026-02-15T23:01:38.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:01:38.130 [DEBUG] [Thread-212759] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:01:38.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:01:38.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:01:38.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:01:38.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:01:38.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:00:54', tmtdew=11.38, humidity=46.44, cloud=0.0, wind=25.09, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:01:31', seeing=1.76, atlas_timestamp='2026-02-15T21:01:08.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:58:00')
2026-02-15T23:01:38.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:01:38.228 [DEBUG] [Thread-212762] [transport.py] [_log()] starting thread (client mode): 0xa2d3d1b0
2026-02-15T23:01:38.228 [DEBUG] [Thread-212762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:01:38.242 [DEBUG] [Thread-212762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:01:38.242 [INFO] [Thread-212762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] client lang: <none>
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] server lang: <none>
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] kex follows: False
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] Compression: none
2026-02-15T23:01:38.250 [DEBUG] [Thread-212762] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:01:38.310 [DEBUG] [Thread-212762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:01:38.310 [DEBUG] [Thread-212762] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:01:38.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:01:38.312 [DEBUG] [Thread-212762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:01:38.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:01:38.366 [DEBUG] [Thread-212762] [transport.py] [_log()] userauth is OK
2026-02-15T23:01:38.366 [DEBUG] [Thread-212762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:01:38.366 [DEBUG] [Thread-212762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:01:38.366 [DEBUG] [Thread-212762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:01:38.366 [DEBUG] [Thread-212762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:01:38.395 [INFO] [Thread-212762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:01:38.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:01:38.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:01:39.221 [DEBUG] [Thread-212762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:01:39.222 [DEBUG] [Thread-212762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:01:39.270 [DEBUG] [Thread-212762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:01:39.270 [DEBUG] [Thread-212762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:01:39.279 [DEBUG] [Thread-212762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:01:39.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:01:39.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:01:39.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:01:39.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:01:39.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:01:39.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:01:39.315 [DEBUG] [Thread-212762] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:01:48.255 [DEBUG] [Thread-212764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:58.798 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:01:58.799 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:03.304 [DEBUG] [Thread-212765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:09.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:02:09.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:02:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:02:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 1, 31), 11.36, 46.49, 0.0, 25.48, 14.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:02:11.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:01:31
2026-02-15T23:02:11.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:02:12.054 [DEBUG] [Thread-212766] [transport.py] [_log()] starting thread (client mode): 0xa2d55480
2026-02-15T23:02:12.054 [DEBUG] [Thread-212766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:02:12.075 [DEBUG] [Thread-212766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:02:12.075 [INFO] [Thread-212766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:02:12.078 [DEBUG] [Thread-212766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] client lang: <none>
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] server lang: <none>
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] kex follows: False
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] Compression: none
2026-02-15T23:02:12.079 [DEBUG] [Thread-212766] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:02:12.093 [DEBUG] [Thread-212766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:02:12.093 [DEBUG] [Thread-212766] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:02:12.094 [DEBUG] [Thread-212766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:02:12.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:02:12.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:02:12.095 [DEBUG] [Thread-212766] [transport.py] [_log()] userauth is OK
2026-02-15T23:02:12.096 [DEBUG] [Thread-212766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:02:12.096 [DEBUG] [Thread-212766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:02:12.096 [DEBUG] [Thread-212766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:02:12.096 [DEBUG] [Thread-212766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:02:12.113 [INFO] [Thread-212766] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:02:12.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:02:12.713 [DEBUG] [Thread-212766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:02:12.714 [DEBUG] [Thread-212766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:02:12.714 [DEBUG] [Thread-212766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:02:12.754 [DEBUG] [Thread-212766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:02:12.755 [DEBUG] [Thread-212766] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:02:12.758 [DEBUG] [Thread-212766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:02:12.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:02:12.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:02:12.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:02:12.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:02:12.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:02:12.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:02:12.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:02:12.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:02:12.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:02:12.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.876144 -999.00  +14.80  16.30     51   +4.90 1 1 1 1 1     0    0 9.36 -42.34 ZNESW 12.0 16.3 157.6 23.1 15.1 -24.5 15.0 -23.4 14.8 -22.3 15.1 -23.4
2026-02-15T23:02:12.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:02:12.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:02:12.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.876144
2026-02-15T23:02:12.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:02:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:02:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:02:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:02:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:02:12.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:01:31', tmtdew=11.36, humidity=46.49, cloud=0.0, wind=25.48, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:02:07', seeing=1.89, atlas_timestamp='2026-02-15T21:01:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.040749999999999176, -0.03074999999999939, -0.01574999999999882, -0.0015000000000000568, 0.02149999999999963, 0.030250000000000554, -0.0035000000000007248, -0.01425000000000054, 0.028499999999999304, -0.005499999999999616, -0.02224999999999966, -0.010999999999999233, 0.06299999999999883, 0.006249999999999645, 0.015999999999998238, -0.010000000000001563, 0.047250000000000014, 0.050499999999999545, -0.008000000000000895, 0.0037499999999983658, 0.03599999999999781, -0.0032500000000013074, -0.05074999999999896, 0.021750000000000824, 0.02099999999999902, 0.042500000000000426, 0.014749999999999375, 0.017000000000001236, 0.09299999999999997, 0.0815000000000019, 0.032000000000001805, 0.04300000000000104, 0.036249999999999005], zp_timestamp='2026-02-15T20:58:00')
2026-02-15T23:02:12.785 [DEBUG] [Thread-212766] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:02:12.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:02:12.880 [DEBUG] [Thread-212769] [transport.py] [_log()] starting thread (client mode): 0xa2d3ee30
2026-02-15T23:02:12.880 [DEBUG] [Thread-212769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:02:12.895 [DEBUG] [Thread-212769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:02:12.895 [INFO] [Thread-212769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:02:12.903 [DEBUG] [Thread-212769] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:02:12.903 [DEBUG] [Thread-212769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:02:12.903 [DEBUG] [Thread-212769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:02:12.903 [DEBUG] [Thread-212769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:12.903 [DEBUG] [Thread-212769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:12.903 [DEBUG] [Thread-212769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] client lang: <none>
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] server lang: <none>
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] kex follows: False
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] Compression: none
2026-02-15T23:02:12.904 [DEBUG] [Thread-212769] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:02:12.960 [DEBUG] [Thread-212769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:02:12.960 [DEBUG] [Thread-212769] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:02:12.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:02:12.961 [DEBUG] [Thread-212769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:02:12.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:02:13.018 [DEBUG] [Thread-212769] [transport.py] [_log()] userauth is OK
2026-02-15T23:02:13.018 [DEBUG] [Thread-212769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:02:13.018 [DEBUG] [Thread-212769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:02:13.018 [DEBUG] [Thread-212769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:02:13.018 [DEBUG] [Thread-212769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:02:13.047 [INFO] [Thread-212769] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:02:13.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:02:13.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:02:13.875 [DEBUG] [Thread-212769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:02:13.875 [DEBUG] [Thread-212769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:02:13.923 [DEBUG] [Thread-212769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:02:13.924 [DEBUG] [Thread-212769] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:02:13.933 [DEBUG] [Thread-212769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:02:13.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:02:13.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:02:13.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:02:13.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:02:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:02:13.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:02:13.970 [DEBUG] [Thread-212769] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:02:18.343 [DEBUG] [Thread-212771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:32.851 [DEBUG] [Thread-212772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:33.402 [DEBUG] [Thread-212773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:43.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:02:43.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:02:43.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:02:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 2, 6), 11.36, 46.49, 0.0, 23.98, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:02:46.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:02:06
2026-02-15T23:02:46.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:02:46.616 [DEBUG] [Thread-212774] [transport.py] [_log()] starting thread (client mode): 0xa2d57190
2026-02-15T23:02:46.617 [DEBUG] [Thread-212774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:02:46.637 [DEBUG] [Thread-212774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:02:46.637 [INFO] [Thread-212774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:02:46.638 [DEBUG] [Thread-212774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:02:46.638 [DEBUG] [Thread-212774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:02:46.638 [DEBUG] [Thread-212774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:02:46.638 [DEBUG] [Thread-212774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:46.638 [DEBUG] [Thread-212774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:46.638 [DEBUG] [Thread-212774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] client lang: <none>
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] server lang: <none>
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] kex follows: False
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] Compression: none
2026-02-15T23:02:46.639 [DEBUG] [Thread-212774] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:02:46.658 [DEBUG] [Thread-212774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:02:46.658 [DEBUG] [Thread-212774] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:02:46.659 [DEBUG] [Thread-212774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:02:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:02:46.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:02:46.661 [DEBUG] [Thread-212774] [transport.py] [_log()] userauth is OK
2026-02-15T23:02:46.661 [DEBUG] [Thread-212774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:02:46.661 [DEBUG] [Thread-212774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:02:46.661 [DEBUG] [Thread-212774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:02:46.662 [DEBUG] [Thread-212774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:02:46.679 [INFO] [Thread-212774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:02:46.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:02:47.280 [DEBUG] [Thread-212774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:02:47.281 [DEBUG] [Thread-212774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:02:47.281 [DEBUG] [Thread-212774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:02:47.322 [DEBUG] [Thread-212774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:02:47.322 [DEBUG] [Thread-212774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:02:47.325 [DEBUG] [Thread-212774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:02:47.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:02:47.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:02:47.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:02:47.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:02:47.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:02:47.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:02:47.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:02:47.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:02:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:02:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.876491 -999.00  +14.80  17.68     51   +4.90 1 1 1 1 1     0    0 9.18 -36.30 ZNESW 15.3 17.7 144.3 23.0 15.1 -24.5 14.9 -23.3 14.8 -22.2 15.1 -23.5
2026-02-15T23:02:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:02:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:02:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.876491
2026-02-15T23:02:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:02:47.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:02:47.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:02:47.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:02:47.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:02:47.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:02:06', tmtdew=11.36, humidity=46.49, cloud=0.0, wind=23.98, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:02:43', seeing=2.07, atlas_timestamp='2026-02-15T21:02:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.026250000000000995, 0.0027500000000006963, -0.0015000000000000568, -0.010999999999999233, 0.03125, -0.049999999999998934, 0.006250000000001421, 0.0024999999999995026, 0.0039999999999995595, -0.06125000000000114, -0.0129999999999999, 0.05799999999999983, 0.02024999999999899, 0.007999999999999119, -0.021000000000000796, 0.04824999999999946, 0.027499999999999858, -0.008000000000000895, 0.003249999999999531, 0.050499999999999545, -0.0022500000000018616, -0.020749999999999602, 0.014749999999999375, 0.02099999999999902, 0.0495000000000001, -0.013249999999999318, 0.03149999999999942, 0.120000000000001, 0.12350000000000172, -0.012999999999998124, 0.025500000000000966, 0.00274999999999892], zp_timestamp='2026-02-15T21:01:00')
2026-02-15T23:02:47.352 [DEBUG] [Thread-212774] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:02:47.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:02:47.455 [DEBUG] [Thread-212777] [transport.py] [_log()] starting thread (client mode): 0xa2dc1480
2026-02-15T23:02:47.456 [DEBUG] [Thread-212777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:02:47.470 [DEBUG] [Thread-212777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:02:47.470 [INFO] [Thread-212777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:02:47.478 [DEBUG] [Thread-212777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:02:47.478 [DEBUG] [Thread-212777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:02:47.478 [DEBUG] [Thread-212777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:02:47.478 [DEBUG] [Thread-212777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:47.478 [DEBUG] [Thread-212777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] client lang: <none>
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] server lang: <none>
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] kex follows: False
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:02:47.479 [DEBUG] [Thread-212777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:02:47.480 [DEBUG] [Thread-212777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:02:47.480 [DEBUG] [Thread-212777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:02:47.480 [DEBUG] [Thread-212777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:02:47.480 [DEBUG] [Thread-212777] [transport.py] [_log()] Compression: none
2026-02-15T23:02:47.480 [DEBUG] [Thread-212777] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:02:47.543 [DEBUG] [Thread-212777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:02:47.544 [DEBUG] [Thread-212777] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:02:47.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:02:47.545 [DEBUG] [Thread-212777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:02:47.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:02:47.602 [DEBUG] [Thread-212777] [transport.py] [_log()] userauth is OK
2026-02-15T23:02:47.603 [DEBUG] [Thread-212777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:02:47.603 [DEBUG] [Thread-212777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:02:47.603 [DEBUG] [Thread-212777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:02:47.603 [DEBUG] [Thread-212777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:02:47.628 [INFO] [Thread-212777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:02:47.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:02:47.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:02:48.440 [DEBUG] [Thread-212779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:48.469 [DEBUG] [Thread-212777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:02:48.469 [DEBUG] [Thread-212777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:02:48.517 [DEBUG] [Thread-212777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:02:48.517 [DEBUG] [Thread-212777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:02:48.525 [DEBUG] [Thread-212777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:02:48.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:02: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')
2026-02-15T23:02: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
2026-02-15T23:02:48.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:02:48.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:02:48.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:02:48.556 [DEBUG] [Thread-212777] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:02:51.338 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:58.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:02:58.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:03.491 [DEBUG] [Thread-212780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:18.527 [DEBUG] [Thread-212781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:18.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:03:18.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:03:18.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:03:20.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 2, 42), 11.31, 46.66, 0.0, 23.71, 14.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:03:20.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:02:42
2026-02-15T23:03:21.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:03:21.169 [DEBUG] [Thread-212782] [transport.py] [_log()] starting thread (client mode): 0xa2d57dc0
2026-02-15T23:03:21.169 [DEBUG] [Thread-212782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:03:21.189 [DEBUG] [Thread-212782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:03:21.189 [INFO] [Thread-212782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] client lang: <none>
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] server lang: <none>
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] kex follows: False
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:03:21.192 [DEBUG] [Thread-212782] [transport.py] [_log()] Compression: none
2026-02-15T23:03:21.193 [DEBUG] [Thread-212782] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:03:21.211 [DEBUG] [Thread-212782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:03:21.212 [DEBUG] [Thread-212782] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:03:21.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:03:21.213 [DEBUG] [Thread-212782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:03:21.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:03:21.215 [DEBUG] [Thread-212782] [transport.py] [_log()] userauth is OK
2026-02-15T23:03:21.215 [DEBUG] [Thread-212782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:03:21.215 [DEBUG] [Thread-212782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:03:21.215 [DEBUG] [Thread-212782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:03:21.215 [DEBUG] [Thread-212782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:03:21.231 [INFO] [Thread-212782] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:03:21.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:03:21.867 [DEBUG] [Thread-212782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:03:21.867 [DEBUG] [Thread-212782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:03:21.868 [DEBUG] [Thread-212782] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:03:21.908 [DEBUG] [Thread-212782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:03:21.909 [DEBUG] [Thread-212782] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:03:21.912 [DEBUG] [Thread-212782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:03:21.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:03:21.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:03:21.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:03:21.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:03:21.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:03:21.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:03:21.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:03:21.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:03:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:03:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.877186 -999.00  +14.80  19.40     51   +4.90 1 1 1 1 1     0    0 9.04 -37.15 ZNESW 17.7 19.4 162.8 23.1 15.0 -24.4 15.0 -23.4 14.8 -22.1 15.1 -23.5
2026-02-15T23:03:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:03:21.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:03:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.877186
2026-02-15T23:03:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:03:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:03:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:03:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:03:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:03:21.940 [DEBUG] [Thread-212782] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:03:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:02:42', tmtdew=11.31, humidity=46.66, cloud=0.0, wind=23.71, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:02:43', seeing=2.07, atlas_timestamp='2026-02-15T21:03:08.870', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.026250000000000995, 0.0027500000000006963, -0.0015000000000000568, -0.010999999999999233, 0.03125, -0.049999999999998934, 0.006250000000001421, 0.0024999999999995026, 0.0039999999999995595, -0.06125000000000114, -0.0129999999999999, 0.05799999999999983, 0.02024999999999899, 0.007999999999999119, -0.021000000000000796, 0.04824999999999946, 0.027499999999999858, -0.008000000000000895, 0.003249999999999531, 0.050499999999999545, -0.0022500000000018616, -0.020749999999999602, 0.014749999999999375, 0.02099999999999902, 0.0495000000000001, -0.013249999999999318, 0.03149999999999942, 0.120000000000001, 0.12350000000000172, -0.012999999999998124, 0.025500000000000966, 0.00274999999999892], zp_timestamp='2026-02-15T21:01:00')
2026-02-15T23:03:22.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:03:22.033 [DEBUG] [Thread-212785] [transport.py] [_log()] starting thread (client mode): 0xa2d57af0
2026-02-15T23:03:22.034 [DEBUG] [Thread-212785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:03:22.048 [DEBUG] [Thread-212785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:03:22.048 [INFO] [Thread-212785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] client lang: <none>
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] server lang: <none>
2026-02-15T23:03:22.056 [DEBUG] [Thread-212785] [transport.py] [_log()] kex follows: False
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] Compression: none
2026-02-15T23:03:22.057 [DEBUG] [Thread-212785] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:03:22.118 [DEBUG] [Thread-212785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:03:22.119 [DEBUG] [Thread-212785] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:03:22.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:03:22.120 [DEBUG] [Thread-212785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:03:22.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:03:22.174 [DEBUG] [Thread-212785] [transport.py] [_log()] userauth is OK
2026-02-15T23:03:22.174 [DEBUG] [Thread-212785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:03:22.174 [DEBUG] [Thread-212785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:03:22.175 [DEBUG] [Thread-212785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:03:22.175 [DEBUG] [Thread-212785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:03:22.193 [INFO] [Thread-212785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:03:22.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:03:22.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:03:22.983 [DEBUG] [Thread-212785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:03:22.983 [DEBUG] [Thread-212785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:03:23.031 [DEBUG] [Thread-212785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:03:23.031 [DEBUG] [Thread-212785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:03:23.040 [DEBUG] [Thread-212785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:03:23.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:03:23.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:03:23.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:03:23.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:03:23.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:03:23.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:03:23.073 [DEBUG] [Thread-212785] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:03:32.922 [DEBUG] [Thread-212787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:33.562 [DEBUG] [Thread-212788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:48.616 [DEBUG] [Thread-212789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:53.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:03:53.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:03:53.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:03:54.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 3, 18), 11.33, 46.59, 0.0, 25.43, 14.84, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:03:54.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:03:18
2026-02-15T23:03:55.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:03:55.515 [DEBUG] [Thread-212790] [transport.py] [_log()] starting thread (client mode): 0xa2d57730
2026-02-15T23:03:55.515 [DEBUG] [Thread-212790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:03:55.535 [DEBUG] [Thread-212790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:03:55.535 [INFO] [Thread-212790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] client lang: <none>
2026-02-15T23:03:55.538 [DEBUG] [Thread-212790] [transport.py] [_log()] server lang: <none>
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] kex follows: False
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] Compression: none
2026-02-15T23:03:55.539 [DEBUG] [Thread-212790] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:03:55.557 [DEBUG] [Thread-212790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:03:55.557 [DEBUG] [Thread-212790] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:03:55.558 [DEBUG] [Thread-212790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:03:55.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:03:55.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:03:55.559 [DEBUG] [Thread-212790] [transport.py] [_log()] userauth is OK
2026-02-15T23:03:55.560 [DEBUG] [Thread-212790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:03:55.560 [DEBUG] [Thread-212790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:03:55.560 [DEBUG] [Thread-212790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:03:55.560 [DEBUG] [Thread-212790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:03:55.584 [INFO] [Thread-212790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:03:55.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:03:56.197 [DEBUG] [Thread-212790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:03:56.197 [DEBUG] [Thread-212790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:03:56.198 [DEBUG] [Thread-212790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:03:56.238 [DEBUG] [Thread-212790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:03:56.239 [DEBUG] [Thread-212790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:03:56.242 [DEBUG] [Thread-212790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:03:56.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:03:56.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:03:56.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:03:56.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:03:56.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:03:56.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:03:56.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:03:56.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:03:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:03:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.877533 -999.00  +14.80  23.70     51   +5.00 1 1 1 1 1     0    0 9.08 -38.03 ZNESW 17.0 23.7 145.8 27.7 15.1 -24.4 14.9 -23.3 14.8 -22.1 15.1 -23.5
2026-02-15T23:03:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:03:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:03:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.877533
2026-02-15T23:03:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:03:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:03:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:03:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:03:56.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:03:56.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:03:18', tmtdew=11.33, humidity=46.59, cloud=0.0, wind=25.43, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:03:19', seeing=1.74, atlas_timestamp='2026-02-15T21:03:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.026250000000000995, 0.0027500000000006963, -0.0015000000000000568, -0.010999999999999233, 0.03125, -0.049999999999998934, 0.006250000000001421, 0.0024999999999995026, 0.0039999999999995595, -0.06125000000000114, -0.0129999999999999, 0.05799999999999983, 0.02024999999999899, 0.007999999999999119, -0.021000000000000796, 0.04824999999999946, 0.027499999999999858, -0.008000000000000895, 0.003249999999999531, 0.050499999999999545, -0.0022500000000018616, -0.020749999999999602, 0.014749999999999375, 0.02099999999999902, 0.0495000000000001, -0.013249999999999318, 0.03149999999999942, 0.120000000000001, 0.12350000000000172, -0.012999999999998124, 0.025500000000000966, 0.00274999999999892], zp_timestamp='2026-02-15T21:01:00')
2026-02-15T23:03:56.270 [DEBUG] [Thread-212790] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:03:56.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:03:56.363 [DEBUG] [Thread-212793] [transport.py] [_log()] starting thread (client mode): 0xa2d55780
2026-02-15T23:03:56.363 [DEBUG] [Thread-212793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:03:56.377 [DEBUG] [Thread-212793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:03:56.377 [INFO] [Thread-212793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] client lang: <none>
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] server lang: <none>
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] kex follows: False
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:03:56.385 [DEBUG] [Thread-212793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:03:56.386 [DEBUG] [Thread-212793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:03:56.386 [DEBUG] [Thread-212793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:03:56.386 [DEBUG] [Thread-212793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:03:56.386 [DEBUG] [Thread-212793] [transport.py] [_log()] Compression: none
2026-02-15T23:03:56.386 [DEBUG] [Thread-212793] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:03:56.441 [DEBUG] [Thread-212793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:03:56.442 [DEBUG] [Thread-212793] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:03:56.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:03:56.443 [DEBUG] [Thread-212793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:03:56.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:03:56.498 [DEBUG] [Thread-212793] [transport.py] [_log()] userauth is OK
2026-02-15T23:03:56.498 [DEBUG] [Thread-212793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:03:56.499 [DEBUG] [Thread-212793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:03:56.499 [DEBUG] [Thread-212793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:03:56.499 [DEBUG] [Thread-212793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:03:56.518 [INFO] [Thread-212793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:03:56.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:03:56.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:03:57.333 [DEBUG] [Thread-212793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:03:57.333 [DEBUG] [Thread-212793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:03:57.381 [DEBUG] [Thread-212793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:03:57.381 [DEBUG] [Thread-212793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:03:57.390 [DEBUG] [Thread-212793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:03:57.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:03:57.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:03:57.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:03:57.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:03:57.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:03:57.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:03:57.425 [DEBUG] [Thread-212793] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:03:59.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:03:59.201 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:03.648 [DEBUG] [Thread-212795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:18.700 [DEBUG] [Thread-212796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:24.783 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:27.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:04:27.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:04:27.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:04:29.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 3, 54), 11.31, 46.66, 0.0, 26.64, 14.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:04:29.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:03:54
2026-02-15T23:04:29.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:04:29.809 [DEBUG] [Thread-212797] [transport.py] [_log()] starting thread (client mode): 0xa2db6bf0
2026-02-15T23:04:29.809 [DEBUG] [Thread-212797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:04:29.830 [DEBUG] [Thread-212797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:04:29.830 [INFO] [Thread-212797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] client lang: <none>
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] server lang: <none>
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] kex follows: False
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] Compression: none
2026-02-15T23:04:29.833 [DEBUG] [Thread-212797] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:04:29.850 [DEBUG] [Thread-212797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:04:29.850 [DEBUG] [Thread-212797] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:04:29.851 [DEBUG] [Thread-212797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:04:29.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:04:29.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:04:29.852 [DEBUG] [Thread-212797] [transport.py] [_log()] userauth is OK
2026-02-15T23:04:29.852 [DEBUG] [Thread-212797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:04:29.852 [DEBUG] [Thread-212797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:04:29.852 [DEBUG] [Thread-212797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:04:29.852 [DEBUG] [Thread-212797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:04:29.870 [INFO] [Thread-212797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:04:29.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:04:30.504 [DEBUG] [Thread-212797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:04:30.505 [DEBUG] [Thread-212797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:04:30.505 [DEBUG] [Thread-212797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:04:30.545 [DEBUG] [Thread-212797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:04:30.546 [DEBUG] [Thread-212797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:04:30.550 [DEBUG] [Thread-212797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:04:30.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:04:30.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:04:30.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:04:30.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:04:30.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:04:30.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:04:30.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:04:30.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:04:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:04:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.877880 -999.00  +14.90  20.21     51   +5.00 1 1 1 1 1     0    0 9.09 -36.97 ZNESW 18.9 20.2 150.6 26.5 15.1 -24.2 15.0 -23.3 14.8 -22.2 15.1 -23.4
2026-02-15T23:04:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:04:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:04:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.877880
2026-02-15T23:04:30.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:04:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:04:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:04:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:04:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:04:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:03:54', tmtdew=11.31, humidity=46.66, cloud=0.0, wind=26.64, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:03:54', seeing=1.62, atlas_timestamp='2026-02-15T21:04:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.026250000000000995, 0.0027500000000006963, -0.0015000000000000568, -0.010999999999999233, 0.03125, -0.049999999999998934, 0.006250000000001421, 0.0024999999999995026, 0.0039999999999995595, -0.06125000000000114, -0.0129999999999999, 0.05799999999999983, 0.02024999999999899, 0.007999999999999119, -0.021000000000000796, 0.04824999999999946, 0.027499999999999858, -0.008000000000000895, 0.003249999999999531, 0.050499999999999545, -0.0022500000000018616, -0.020749999999999602, 0.014749999999999375, 0.02099999999999902, 0.0495000000000001, -0.013249999999999318, 0.03149999999999942, 0.120000000000001, 0.12350000000000172, -0.012999999999998124, 0.025500000000000966, 0.00274999999999892], zp_timestamp='2026-02-15T21:01:00')
2026-02-15T23:04:30.580 [DEBUG] [Thread-212797] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:04:30.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:04:30.674 [DEBUG] [Thread-212800] [transport.py] [_log()] starting thread (client mode): 0xa2d11330
2026-02-15T23:04:30.675 [DEBUG] [Thread-212800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:04:30.689 [DEBUG] [Thread-212800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:04:30.689 [INFO] [Thread-212800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:04:30.699 [DEBUG] [Thread-212800] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:04:30.700 [DEBUG] [Thread-212800] [transport.py] [_log()] client lang: <none>
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] server lang: <none>
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] kex follows: False
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:04:30.701 [DEBUG] [Thread-212800] [transport.py] [_log()] Compression: none
2026-02-15T23:04:30.702 [DEBUG] [Thread-212800] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:04:30.758 [DEBUG] [Thread-212800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:04:30.759 [DEBUG] [Thread-212800] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:04:30.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:04:30.760 [DEBUG] [Thread-212800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:04:30.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:04:30.814 [DEBUG] [Thread-212800] [transport.py] [_log()] userauth is OK
2026-02-15T23:04:30.814 [DEBUG] [Thread-212800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:04:30.814 [DEBUG] [Thread-212800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:04:30.814 [DEBUG] [Thread-212800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:04:30.814 [DEBUG] [Thread-212800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:04:30.834 [INFO] [Thread-212800] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:04:30.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:04:30.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:04:31.671 [DEBUG] [Thread-212800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:04:31.672 [DEBUG] [Thread-212800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:04:31.720 [DEBUG] [Thread-212800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:04:31.721 [DEBUG] [Thread-212800] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:04:31.734 [DEBUG] [Thread-212800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:04:31.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:04:31.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:04: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
2026-02-15T23:04:31.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:04:31.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:04:31.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:04:31.773 [DEBUG] [Thread-212800] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:04:32.998 [DEBUG] [Thread-212802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:33.736 [DEBUG] [Thread-212803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:48.792 [DEBUG] [Thread-212804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:59.401 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:04:59.402 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:01.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:05:01.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:05:01.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:05:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 4, 29), 11.32, 46.64, 0.0, 27.03, 14.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:05:03.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:04:29
2026-02-15T23:05:03.827 [DEBUG] [Thread-212805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:04.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:05:04.196 [DEBUG] [Thread-212806] [transport.py] [_log()] starting thread (client mode): 0xa2db4df0
2026-02-15T23:05:04.196 [DEBUG] [Thread-212806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:05:04.217 [DEBUG] [Thread-212806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:05:04.217 [INFO] [Thread-212806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:05:04.220 [DEBUG] [Thread-212806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:05:04.220 [DEBUG] [Thread-212806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:05:04.220 [DEBUG] [Thread-212806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] client lang: <none>
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] server lang: <none>
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] kex follows: False
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] Compression: none
2026-02-15T23:05:04.221 [DEBUG] [Thread-212806] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:05:04.238 [DEBUG] [Thread-212806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:05:04.238 [DEBUG] [Thread-212806] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:05:04.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:05:04.239 [DEBUG] [Thread-212806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:05:04.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:05:04.282 [DEBUG] [Thread-212806] [transport.py] [_log()] userauth is OK
2026-02-15T23:05:04.282 [DEBUG] [Thread-212806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:05:04.283 [DEBUG] [Thread-212806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:05:04.283 [DEBUG] [Thread-212806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:05:04.283 [DEBUG] [Thread-212806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:05:04.303 [INFO] [Thread-212806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:05:04.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:05:06.632 [DEBUG] [Thread-212806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:05:06.633 [DEBUG] [Thread-212806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:05:06.633 [DEBUG] [Thread-212806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:05:06.673 [DEBUG] [Thread-212806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:05:06.674 [DEBUG] [Thread-212806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:05:06.677 [DEBUG] [Thread-212806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:05:06.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:05:06.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:05:06.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:05:06.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:05:06.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:05:06.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:05:06.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:05:06.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:05:06.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:05:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.878227 -999.00  +14.90  17.04     51   +5.00 1 1 1 1 1     0    0 8.97 -35.84 ZNESW 17.8 17.0 145.5 24.4 15.1 -24.4 15.0 -23.4 14.8 -22.3 15.1 -23.6
2026-02-15T23:05:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:05:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:05:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.878227
2026-02-15T23:05:06.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:05:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:05:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:05:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:05:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:05:06.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:04:29', tmtdew=11.32, humidity=46.64, cloud=0.0, wind=27.03, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:04:29', seeing=1.63, atlas_timestamp='2026-02-15T21:04:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.026250000000000995, 0.0027500000000006963, -0.0015000000000000568, -0.010999999999999233, 0.03125, -0.049999999999998934, 0.006250000000001421, 0.0024999999999995026, 0.0039999999999995595, -0.06125000000000114, -0.0129999999999999, 0.05799999999999983, 0.02024999999999899, 0.007999999999999119, -0.021000000000000796, 0.04824999999999946, 0.027499999999999858, -0.008000000000000895, 0.003249999999999531, 0.050499999999999545, -0.0022500000000018616, -0.020749999999999602, 0.014749999999999375, 0.02099999999999902, 0.0495000000000001, -0.013249999999999318, 0.03149999999999942, 0.120000000000001, 0.12350000000000172, -0.012999999999998124, 0.025500000000000966, 0.00274999999999892], zp_timestamp='2026-02-15T21:01:00')
2026-02-15T23:05:06.780 [DEBUG] [Thread-212806] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:05:06.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:05:06.876 [DEBUG] [Thread-212809] [transport.py] [_log()] starting thread (client mode): 0xa57c0850
2026-02-15T23:05:06.877 [DEBUG] [Thread-212809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:05:06.890 [DEBUG] [Thread-212809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:05:06.891 [INFO] [Thread-212809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:05:06.898 [DEBUG] [Thread-212809] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] client lang: <none>
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] server lang: <none>
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] kex follows: False
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] Compression: none
2026-02-15T23:05:06.899 [DEBUG] [Thread-212809] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:05:06.958 [DEBUG] [Thread-212809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:05:06.958 [DEBUG] [Thread-212809] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:05:06.959 [DEBUG] [Thread-212809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:05:06.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:05:06.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:05:07.018 [DEBUG] [Thread-212809] [transport.py] [_log()] userauth is OK
2026-02-15T23:05:07.019 [DEBUG] [Thread-212809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:05:07.019 [DEBUG] [Thread-212809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:05:07.019 [DEBUG] [Thread-212809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:05:07.019 [DEBUG] [Thread-212809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:05:07.037 [INFO] [Thread-212809] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:05:07.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:05:07.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:05:07.869 [DEBUG] [Thread-212809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:05:07.869 [DEBUG] [Thread-212809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:05:07.917 [DEBUG] [Thread-212809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:05:07.917 [DEBUG] [Thread-212809] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:05:07.925 [DEBUG] [Thread-212809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:05:07.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:05:07.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:05:07.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:05:07.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:05:07.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:05:07.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:05:07.959 [DEBUG] [Thread-212809] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:05:16.120 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:18.863 [DEBUG] [Thread-212811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:19.847 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:22.884 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:28.249 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:33.066 [DEBUG] [Thread-212812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:33.915 [DEBUG] [Thread-212813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:37.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:05:37.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:05:37.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:05:39.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 5, 4), 11.32, 46.62, 0.0, 25.09, 14.87, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:05:39.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:05:04
2026-02-15T23:05:40.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:05:40.361 [DEBUG] [Thread-212814] [transport.py] [_log()] starting thread (client mode): 0xa2d6d840
2026-02-15T23:05:40.361 [DEBUG] [Thread-212814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:05:40.382 [DEBUG] [Thread-212814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:05:40.382 [INFO] [Thread-212814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:05:40.385 [DEBUG] [Thread-212814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:05:40.385 [DEBUG] [Thread-212814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] client lang: <none>
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] server lang: <none>
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] kex follows: False
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] Compression: none
2026-02-15T23:05:40.386 [DEBUG] [Thread-212814] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:05:40.405 [DEBUG] [Thread-212814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:05:40.405 [DEBUG] [Thread-212814] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:05:40.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:05:40.406 [DEBUG] [Thread-212814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:05:40.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:05:40.408 [DEBUG] [Thread-212814] [transport.py] [_log()] userauth is OK
2026-02-15T23:05:40.409 [DEBUG] [Thread-212814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:05:40.409 [DEBUG] [Thread-212814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:05:40.409 [DEBUG] [Thread-212814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:05:40.409 [DEBUG] [Thread-212814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:05:40.445 [INFO] [Thread-212814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:05:40.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:05:41.074 [DEBUG] [Thread-212814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:05:41.074 [DEBUG] [Thread-212814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:05:41.075 [DEBUG] [Thread-212814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:05:41.115 [DEBUG] [Thread-212814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:05:41.115 [DEBUG] [Thread-212814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:05:41.119 [DEBUG] [Thread-212814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:05:41.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:05:41.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:05:41.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:05:41.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:05:41.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:05:41.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:05:41.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:05:41.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:05:41.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:05:41.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.878574 -999.00  +14.80  13.41     51   +4.90 1 1 1 1 1     0    0 9.25 -34.25 ZNESW 15.5 13.4 151.4 23.2 15.0 -24.4 14.9 -23.3 14.8 -22.4 15.1 -23.5
2026-02-15T23:05:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:05:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:05:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.878574
2026-02-15T23:05:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:05:41.144 [DEBUG] [Thread-212814] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:05:41.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:05:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:05:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:05:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:05:41.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:05:04', tmtdew=11.32, humidity=46.62, cloud=0.0, wind=25.09, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:05:04', seeing=1.83, atlas_timestamp='2026-02-15T21:05:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03325000000000067, -0.026250000000000995, 0.0027500000000006963, -0.0015000000000000568, -0.010999999999999233, 0.03125, -0.049999999999998934, 0.006250000000001421, 0.0024999999999995026, 0.0039999999999995595, -0.06125000000000114, -0.0129999999999999, 0.05799999999999983, 0.02024999999999899, 0.007999999999999119, -0.021000000000000796, 0.04824999999999946, 0.027499999999999858, -0.008000000000000895, 0.003249999999999531, 0.050499999999999545, -0.0022500000000018616, -0.020749999999999602, 0.014749999999999375, 0.02099999999999902, 0.0495000000000001, -0.013249999999999318, 0.03149999999999942, 0.120000000000001, 0.12350000000000172, -0.012999999999998124, 0.025500000000000966, 0.00274999999999892], zp_timestamp='2026-02-15T21:01:00')
2026-02-15T23:05:41.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:05:41.245 [DEBUG] [Thread-212817] [transport.py] [_log()] starting thread (client mode): 0xa57d6020
2026-02-15T23:05:41.245 [DEBUG] [Thread-212817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:05:41.259 [DEBUG] [Thread-212817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:05:41.259 [INFO] [Thread-212817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:05:41.267 [DEBUG] [Thread-212817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] client lang: <none>
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] server lang: <none>
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] kex follows: False
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:05:41.268 [DEBUG] [Thread-212817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:05:41.269 [DEBUG] [Thread-212817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:05:41.269 [DEBUG] [Thread-212817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:05:41.269 [DEBUG] [Thread-212817] [transport.py] [_log()] Compression: none
2026-02-15T23:05:41.269 [DEBUG] [Thread-212817] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:05:41.326 [DEBUG] [Thread-212817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:05:41.327 [DEBUG] [Thread-212817] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:05:41.328 [DEBUG] [Thread-212817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:05:41.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:05:41.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:05:41.386 [DEBUG] [Thread-212817] [transport.py] [_log()] userauth is OK
2026-02-15T23:05:41.386 [DEBUG] [Thread-212817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:05:41.386 [DEBUG] [Thread-212817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:05:41.386 [DEBUG] [Thread-212817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:05:41.386 [DEBUG] [Thread-212817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:05:41.405 [INFO] [Thread-212817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:05:41.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:05:41.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:05:42.229 [DEBUG] [Thread-212817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:05:42.229 [DEBUG] [Thread-212817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:05:42.276 [DEBUG] [Thread-212817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:05:42.277 [DEBUG] [Thread-212817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:05:42.289 [DEBUG] [Thread-212817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:05:42.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:05:42.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:05:42.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:05:42.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:05:42.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:05:42.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:05:42.333 [DEBUG] [Thread-212817] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:05:48.955 [DEBUG] [Thread-212819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:58.709 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:59.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:05:59.603 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:04.006 [DEBUG] [Thread-212820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:12.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:06:12.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:06:12.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:06:14.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 5, 39), 11.44, 46.28, 0.0, 29.25, 15.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:06:14.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:05:39
2026-02-15T23:06:14.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:06:14.704 [DEBUG] [Thread-212821] [transport.py] [_log()] starting thread (client mode): 0xa57c1ed0
2026-02-15T23:06:14.704 [DEBUG] [Thread-212821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:06:14.723 [DEBUG] [Thread-212821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:06:14.723 [INFO] [Thread-212821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] client lang: <none>
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] server lang: <none>
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] kex follows: False
2026-02-15T23:06:14.726 [DEBUG] [Thread-212821] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:06:14.727 [DEBUG] [Thread-212821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:06:14.727 [DEBUG] [Thread-212821] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:06:14.727 [DEBUG] [Thread-212821] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:06:14.727 [DEBUG] [Thread-212821] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:06:14.727 [DEBUG] [Thread-212821] [transport.py] [_log()] Compression: none
2026-02-15T23:06:14.727 [DEBUG] [Thread-212821] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:06:14.739 [DEBUG] [Thread-212821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:06:14.740 [DEBUG] [Thread-212821] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:06:14.741 [DEBUG] [Thread-212821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:06:14.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:06:14.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:06:14.743 [DEBUG] [Thread-212821] [transport.py] [_log()] userauth is OK
2026-02-15T23:06:14.743 [DEBUG] [Thread-212821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:06:14.743 [DEBUG] [Thread-212821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:06:14.744 [DEBUG] [Thread-212821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:06:14.744 [DEBUG] [Thread-212821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:06:14.768 [INFO] [Thread-212821] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:06:14.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:06:15.410 [DEBUG] [Thread-212821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:06:15.410 [DEBUG] [Thread-212821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:06:15.410 [DEBUG] [Thread-212821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:06:15.451 [DEBUG] [Thread-212821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:06:15.451 [DEBUG] [Thread-212821] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:06:15.454 [DEBUG] [Thread-212821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:06:15.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:06:15.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:06:15.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:06:15.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:06:15.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:06:15.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:06:15.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:06:15.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:06:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:06:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.878922 -999.00  +14.80  18.37     51   +5.00 1 1 1 1 1     0    0 9.26 -35.07 ZNESW 25.9 18.4 151.7 21.8 15.1 -24.4 14.9 -23.5 14.8 -22.1 15.0 -23.5
2026-02-15T23:06:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:06:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:06:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.878922
2026-02-15T23:06:15.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:06:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:06:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:06:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:06:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:06:15.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:05:39', tmtdew=11.44, humidity=46.28, cloud=0.0, wind=29.25, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:05:39', seeing=1.83, atlas_timestamp='2026-02-15T21:05:38.861', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:04:00')
2026-02-15T23:06:15.479 [DEBUG] [Thread-212821] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:06:15.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:06:15.584 [DEBUG] [Thread-212824] [transport.py] [_log()] starting thread (client mode): 0xa57c2b60
2026-02-15T23:06:15.584 [DEBUG] [Thread-212824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:06:15.600 [DEBUG] [Thread-212824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:06:15.600 [INFO] [Thread-212824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:06:15.613 [DEBUG] [Thread-212824] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] client lang: <none>
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] server lang: <none>
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] kex follows: False
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:06:15.614 [DEBUG] [Thread-212824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:06:15.615 [DEBUG] [Thread-212824] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:06:15.615 [DEBUG] [Thread-212824] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:06:15.615 [DEBUG] [Thread-212824] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:06:15.615 [DEBUG] [Thread-212824] [transport.py] [_log()] Compression: none
2026-02-15T23:06:15.615 [DEBUG] [Thread-212824] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:06:15.671 [DEBUG] [Thread-212824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:06:15.672 [DEBUG] [Thread-212824] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:06:15.672 [DEBUG] [Thread-212824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:06:15.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:06:15.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:06:15.736 [DEBUG] [Thread-212824] [transport.py] [_log()] userauth is OK
2026-02-15T23:06:15.736 [DEBUG] [Thread-212824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:06:15.737 [DEBUG] [Thread-212824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:06:15.737 [DEBUG] [Thread-212824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:06:15.737 [DEBUG] [Thread-212824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:06:15.759 [INFO] [Thread-212824] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:06:15.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:06:15.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:06:16.571 [DEBUG] [Thread-212824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:06:16.571 [DEBUG] [Thread-212824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:06:16.628 [DEBUG] [Thread-212824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:06:16.628 [DEBUG] [Thread-212824] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:06:16.641 [DEBUG] [Thread-212824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:06:16.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:06:16.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:06:16.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:06:16.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:06:16.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:06:16.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:06:16.687 [DEBUG] [Thread-212824] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:06:19.040 [DEBUG] [Thread-212826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:33.129 [DEBUG] [Thread-212827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:34.091 [DEBUG] [Thread-212828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:06:46.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:06:46.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:06:48.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 6, 14), 11.26, 46.51, 0.0, 23.87, 14.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:06:48.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:06:14
2026-02-15T23:06:49.127 [DEBUG] [Thread-212829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:49.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:06:49.326 [DEBUG] [Thread-212830] [transport.py] [_log()] starting thread (client mode): 0xa2d13e20
2026-02-15T23:06:49.326 [DEBUG] [Thread-212830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:06:49.353 [DEBUG] [Thread-212830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:06:49.353 [INFO] [Thread-212830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:06:49.354 [DEBUG] [Thread-212830] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:06:49.354 [DEBUG] [Thread-212830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:06:49.354 [DEBUG] [Thread-212830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:06:49.354 [DEBUG] [Thread-212830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] client lang: <none>
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] server lang: <none>
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] kex follows: False
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] Compression: none
2026-02-15T23:06:49.355 [DEBUG] [Thread-212830] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:06:49.364 [DEBUG] [Thread-212830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:06:49.364 [DEBUG] [Thread-212830] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:06:49.365 [DEBUG] [Thread-212830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:06:49.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:06:49.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:06:49.367 [DEBUG] [Thread-212830] [transport.py] [_log()] userauth is OK
2026-02-15T23:06:49.367 [DEBUG] [Thread-212830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:06:49.367 [DEBUG] [Thread-212830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:06:49.367 [DEBUG] [Thread-212830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:06:49.367 [DEBUG] [Thread-212830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:06:49.390 [INFO] [Thread-212830] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:06:49.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:06:49.979 [DEBUG] [Thread-212830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:06:49.979 [DEBUG] [Thread-212830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:06:49.980 [DEBUG] [Thread-212830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:06:50.020 [DEBUG] [Thread-212830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:06:50.020 [DEBUG] [Thread-212830] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:06:50.023 [DEBUG] [Thread-212830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:06:50.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:06:50.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:06:50.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:06:50.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:06:50.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:06:50.046 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:06:50.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:06:50.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:06:50.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:06:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.879616 -999.00  +14.90  18.41     51   +5.00 1 1 1 1 1     0    0 9.06 -34.76 ZNESW 18.7 18.4 160.4 30.8 15.1 -24.3 15.0 -23.2 14.8 -22.1 15.1 -23.3
2026-02-15T23:06:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:06:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:06:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.879616
2026-02-15T23:06:50.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:06:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:06:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:06:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:06:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:06:50.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:06:14', tmtdew=11.26, humidity=46.51, cloud=0.0, wind=23.87, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:06:15', seeing=1.64, atlas_timestamp='2026-02-15T21:06:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:04:00')
2026-02-15T23:06:50.049 [DEBUG] [Thread-212830] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:06:50.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:06:50.142 [DEBUG] [Thread-212833] [transport.py] [_log()] starting thread (client mode): 0xa57c3be0
2026-02-15T23:06:50.142 [DEBUG] [Thread-212833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:06:50.157 [DEBUG] [Thread-212833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:06:50.157 [INFO] [Thread-212833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:06:50.164 [DEBUG] [Thread-212833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:06:50.164 [DEBUG] [Thread-212833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:06:50.164 [DEBUG] [Thread-212833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:06:50.164 [DEBUG] [Thread-212833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:50.164 [DEBUG] [Thread-212833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] client lang: <none>
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] server lang: <none>
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] kex follows: False
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] Compression: none
2026-02-15T23:06:50.165 [DEBUG] [Thread-212833] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:06:50.222 [DEBUG] [Thread-212833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:06:50.222 [DEBUG] [Thread-212833] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:06:50.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:06:50.224 [DEBUG] [Thread-212833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:06:50.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:06:50.278 [DEBUG] [Thread-212833] [transport.py] [_log()] userauth is OK
2026-02-15T23:06:50.278 [DEBUG] [Thread-212833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:06:50.278 [DEBUG] [Thread-212833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:06:50.278 [DEBUG] [Thread-212833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:06:50.279 [DEBUG] [Thread-212833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:06:50.303 [INFO] [Thread-212833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:06:50.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:06:50.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:06:51.191 [DEBUG] [Thread-212833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:06:51.191 [DEBUG] [Thread-212833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:06:51.239 [DEBUG] [Thread-212833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:06:51.240 [DEBUG] [Thread-212833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:06:51.249 [DEBUG] [Thread-212833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:06:51.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:06:51.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:06:51.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:06:51.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:06:51.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:06:51.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:06:51.286 [DEBUG] [Thread-212833] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:06:59.800 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:06:59.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:04.160 [DEBUG] [Thread-212835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:19.220 [DEBUG] [Thread-212836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:21.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:07:21.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:07:21.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:07:23.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 6, 49), 11.23, 46.59, 0.0, 23.15, 14.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:07:23.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:06:49
2026-02-15T23:07:23.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:07:23.979 [DEBUG] [Thread-212837] [transport.py] [_log()] starting thread (client mode): 0xa2d57dc0
2026-02-15T23:07:23.979 [DEBUG] [Thread-212837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:07:23.999 [DEBUG] [Thread-212837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:07:23.999 [INFO] [Thread-212837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] client lang: <none>
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] server lang: <none>
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] kex follows: False
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] Compression: none
2026-02-15T23:07:24.001 [DEBUG] [Thread-212837] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:07:24.013 [DEBUG] [Thread-212837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:07:24.014 [DEBUG] [Thread-212837] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:07:24.014 [DEBUG] [Thread-212837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:07:24.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:07:24.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:07:24.016 [DEBUG] [Thread-212837] [transport.py] [_log()] userauth is OK
2026-02-15T23:07:24.016 [DEBUG] [Thread-212837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:07:24.016 [DEBUG] [Thread-212837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:07:24.016 [DEBUG] [Thread-212837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:07:24.017 [DEBUG] [Thread-212837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:07:24.053 [INFO] [Thread-212837] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:07:24.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:07:24.668 [DEBUG] [Thread-212837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:07:24.668 [DEBUG] [Thread-212837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:07:24.668 [DEBUG] [Thread-212837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:07:24.709 [DEBUG] [Thread-212837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:07:24.709 [DEBUG] [Thread-212837] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:07:24.711 [DEBUG] [Thread-212837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:07:24.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:07:24.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:07:24.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:07:24.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:07:24.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:07:24.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:07:24.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:07:24.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:07:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:07:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.879963 -999.00  +14.90  15.75     51   +5.00 1 1 1 1 1     0    0 8.97 -36.91 ZNESW 15.3 15.8 155.2 23.8 15.1 -24.4 14.9 -23.4 14.8 -22.3 15.1 -23.4
2026-02-15T23:07:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:07:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:07:24.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.879963
2026-02-15T23:07:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:07:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:07:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:07:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:07:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:07:24.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:06:49', tmtdew=11.23, humidity=46.59, cloud=0.0, wind=23.15, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:06:50', seeing=2.04, atlas_timestamp='2026-02-15T21:07:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:04:00')
2026-02-15T23:07:24.733 [DEBUG] [Thread-212837] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:07:24.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:07:24.824 [DEBUG] [Thread-212840] [transport.py] [_log()] starting thread (client mode): 0xa57c2290
2026-02-15T23:07:24.824 [DEBUG] [Thread-212840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:07:24.839 [DEBUG] [Thread-212840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:07:24.839 [INFO] [Thread-212840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] client lang: <none>
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] server lang: <none>
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] kex follows: False
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] Compression: none
2026-02-15T23:07:24.847 [DEBUG] [Thread-212840] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:07:24.910 [DEBUG] [Thread-212840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:07:24.911 [DEBUG] [Thread-212840] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:07:24.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:07:24.912 [DEBUG] [Thread-212840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:07:24.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:07:24.969 [DEBUG] [Thread-212840] [transport.py] [_log()] userauth is OK
2026-02-15T23:07:24.970 [DEBUG] [Thread-212840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:07:24.970 [DEBUG] [Thread-212840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:07:24.970 [DEBUG] [Thread-212840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:07:24.970 [DEBUG] [Thread-212840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:07:24.989 [INFO] [Thread-212840] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:07:24.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:07:24.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:07:25.812 [DEBUG] [Thread-212840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:07:25.812 [DEBUG] [Thread-212840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:07:25.860 [DEBUG] [Thread-212840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:07:25.860 [DEBUG] [Thread-212840] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:07:25.868 [DEBUG] [Thread-212840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:07:25.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:07:25.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:07: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') -> 00000000
2026-02-15T23:07:25.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:07:25.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:07:25.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:07:25.902 [DEBUG] [Thread-212840] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:07:33.067 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:33.199 [DEBUG] [Thread-212842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:34.258 [DEBUG] [Thread-212843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:49.318 [DEBUG] [Thread-212844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:07:55.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:07:55.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:07:55.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:07:57.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 7, 24), 11.24, 46.56, 0.0, 22.55, 14.74, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:07:57.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:07:24
2026-02-15T23:07:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:07:58.390 [DEBUG] [Thread-212845] [transport.py] [_log()] starting thread (client mode): 0xa57d6bf0
2026-02-15T23:07:58.390 [DEBUG] [Thread-212845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:07:58.411 [DEBUG] [Thread-212845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:07:58.411 [INFO] [Thread-212845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:07:58.412 [DEBUG] [Thread-212845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] client lang: <none>
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] server lang: <none>
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] kex follows: False
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] Compression: none
2026-02-15T23:07:58.413 [DEBUG] [Thread-212845] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:07:58.430 [DEBUG] [Thread-212845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:07:58.431 [DEBUG] [Thread-212845] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:07:58.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:07:58.432 [DEBUG] [Thread-212845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:07:58.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:07:58.434 [DEBUG] [Thread-212845] [transport.py] [_log()] userauth is OK
2026-02-15T23:07:58.434 [DEBUG] [Thread-212845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:07:58.434 [DEBUG] [Thread-212845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:07:58.434 [DEBUG] [Thread-212845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:07:58.434 [DEBUG] [Thread-212845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:07:58.458 [INFO] [Thread-212845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:07:58.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:07:59.021 [DEBUG] [Thread-212845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:07:59.022 [DEBUG] [Thread-212845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:07:59.022 [DEBUG] [Thread-212845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:07:59.063 [DEBUG] [Thread-212845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:07:59.063 [DEBUG] [Thread-212845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:07:59.065 [DEBUG] [Thread-212845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:07:59.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:07:59.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:07:59.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:07:59.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:07:59.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:07:59.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:07:59.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:07:59.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.880310 -999.00  +14.80  15.31     51   +4.90 1 1 1 1 1     0    0 8.91 -36.94 ZNESW 14.1 15.3 157.7 21.0 15.0 -24.6 14.9 -23.5 14.8 -22.4 15.0 -23.7
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.880310
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:07:59.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:07:24', tmtdew=11.24, humidity=46.56, cloud=0.0, wind=22.55, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:07:25', seeing=1.68, atlas_timestamp='2026-02-15T21:07:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:04:00')
2026-02-15T23:07:59.086 [DEBUG] [Thread-212845] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:07:59.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:07:59.168 [DEBUG] [Thread-212848] [transport.py] [_log()] starting thread (client mode): 0xa2d6cf70
2026-02-15T23:07:59.169 [DEBUG] [Thread-212848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:07:59.184 [DEBUG] [Thread-212848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:07:59.184 [INFO] [Thread-212848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:07:59.192 [DEBUG] [Thread-212848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:07:59.192 [DEBUG] [Thread-212848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:07:59.192 [DEBUG] [Thread-212848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] client lang: <none>
2026-02-15T23:07:59.193 [DEBUG] [Thread-212848] [transport.py] [_log()] server lang: <none>
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] kex follows: False
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:07:59.194 [DEBUG] [Thread-212848] [transport.py] [_log()] Compression: none
2026-02-15T23:07:59.195 [DEBUG] [Thread-212848] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:07:59.251 [DEBUG] [Thread-212848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:07:59.251 [DEBUG] [Thread-212848] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:07:59.252 [DEBUG] [Thread-212848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:07:59.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:07:59.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:07:59.310 [DEBUG] [Thread-212848] [transport.py] [_log()] userauth is OK
2026-02-15T23:07:59.310 [DEBUG] [Thread-212848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:07:59.310 [DEBUG] [Thread-212848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:07:59.311 [DEBUG] [Thread-212848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:07:59.311 [DEBUG] [Thread-212848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:07:59.330 [INFO] [Thread-212848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:07:59.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:07:59.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:08:00.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:08:00.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:08:00.170 [DEBUG] [Thread-212848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:08:00.171 [DEBUG] [Thread-212848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:08:00.219 [DEBUG] [Thread-212848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:08:00.219 [DEBUG] [Thread-212848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:08:00.228 [DEBUG] [Thread-212848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:08:00.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:08:00.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:08:00.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:08:00.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:08:00.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:08:00.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:08:00.265 [DEBUG] [Thread-212848] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:08:04.356 [DEBUG] [Thread-212850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:08:19.407 [DEBUG] [Thread-212851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:08:30.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:08:30.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:08:30.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:08:32.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 8), 11.28, 46.59, 0.0, 24.17, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:08:32.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:08:00
2026-02-15T23:08:32.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:08:32.730 [DEBUG] [Thread-212852] [transport.py] [_log()] starting thread (client mode): 0xa2d6fa60
2026-02-15T23:08:32.730 [DEBUG] [Thread-212852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:08:32.749 [DEBUG] [Thread-212852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:08:32.749 [INFO] [Thread-212852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:08:32.750 [DEBUG] [Thread-212852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] client lang: <none>
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] server lang: <none>
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] kex follows: False
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] Compression: none
2026-02-15T23:08:32.751 [DEBUG] [Thread-212852] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:08:32.760 [DEBUG] [Thread-212852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:08:32.761 [DEBUG] [Thread-212852] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:08:32.761 [DEBUG] [Thread-212852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:08:32.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:08:32.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:08:32.763 [DEBUG] [Thread-212852] [transport.py] [_log()] userauth is OK
2026-02-15T23:08:32.763 [DEBUG] [Thread-212852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:08:32.763 [DEBUG] [Thread-212852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:08:32.763 [DEBUG] [Thread-212852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:08:32.764 [DEBUG] [Thread-212852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:08:32.784 [INFO] [Thread-212852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:08:32.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:08:33.263 [DEBUG] [Thread-212854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:08:33.365 [DEBUG] [Thread-212852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:08:33.366 [DEBUG] [Thread-212852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:08:33.366 [DEBUG] [Thread-212852] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:08:33.406 [DEBUG] [Thread-212852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:08:33.406 [DEBUG] [Thread-212852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:08:33.410 [DEBUG] [Thread-212852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:08:33.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:08:33.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:08:33.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:08:33.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:08:33.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:08:33.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:08:33.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:08:33.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:08:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:08:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.880658 -999.00  +14.70  17.44     51   +4.90 1 1 1 1 1     0    0 8.90 -36.10 ZNESW 20.0 17.4 163.4 23.6 15.0 -24.5 14.9 -23.5 14.8 -22.1 15.0 -23.7
2026-02-15T23:08:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:08:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:08:33.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.880658
2026-02-15T23:08:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:08:33.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:08:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:08:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:08:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:08:33.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:08:00', tmtdew=11.28, humidity=46.59, cloud=0.0, wind=24.17, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:08:00', seeing=1.86, atlas_timestamp='2026-02-15T21:08:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:04:00')
2026-02-15T23:08:33.440 [DEBUG] [Thread-212852] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:08:33.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:08:33.540 [DEBUG] [Thread-212856] [transport.py] [_log()] starting thread (client mode): 0xa57420e0
2026-02-15T23:08:33.540 [DEBUG] [Thread-212856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:08:33.555 [DEBUG] [Thread-212856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:08:33.555 [INFO] [Thread-212856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:08:33.562 [DEBUG] [Thread-212856] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] client lang: <none>
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] server lang: <none>
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] kex follows: False
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:08:33.563 [DEBUG] [Thread-212856] [transport.py] [_log()] Compression: none
2026-02-15T23:08:33.564 [DEBUG] [Thread-212856] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:08:33.621 [DEBUG] [Thread-212856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:08:33.622 [DEBUG] [Thread-212856] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:08:33.622 [DEBUG] [Thread-212856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:08:33.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:08:33.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:08:33.679 [DEBUG] [Thread-212856] [transport.py] [_log()] userauth is OK
2026-02-15T23:08:33.679 [DEBUG] [Thread-212856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:08:33.679 [DEBUG] [Thread-212856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:08:33.679 [DEBUG] [Thread-212856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:08:33.679 [DEBUG] [Thread-212856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:08:33.700 [INFO] [Thread-212856] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:08:33.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:08:33.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:08:34.444 [DEBUG] [Thread-212858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:08:34.499 [DEBUG] [Thread-212856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:08:34.499 [DEBUG] [Thread-212856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:08:34.547 [DEBUG] [Thread-212856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:08:34.548 [DEBUG] [Thread-212856] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:08:34.557 [DEBUG] [Thread-212856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:08:34.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:08:34.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:08:34.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:08:34.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:08:34.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:08:34.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:08:34.594 [DEBUG] [Thread-212856] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:08:49.495 [DEBUG] [Thread-212859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:00.210 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:00.211 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:04.532 [DEBUG] [Thread-212860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:04.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:09:04.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:09:04.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:09:06.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 8, 35), 11.37, 46.51, 0.0, 22.83, 15.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:09:06.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:08:35
2026-02-15T23:09:07.117 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:07.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:09:07.383 [DEBUG] [Thread-212861] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T23:09:07.383 [DEBUG] [Thread-212861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:09:07.404 [DEBUG] [Thread-212861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:09:07.404 [INFO] [Thread-212861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] client lang: <none>
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] server lang: <none>
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] kex follows: False
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] Compression: none
2026-02-15T23:09:07.405 [DEBUG] [Thread-212861] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:09:07.414 [DEBUG] [Thread-212861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:09:07.414 [DEBUG] [Thread-212861] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:09:07.414 [DEBUG] [Thread-212861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:09:07.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:09:07.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:09:07.416 [DEBUG] [Thread-212861] [transport.py] [_log()] userauth is OK
2026-02-15T23:09:07.416 [DEBUG] [Thread-212861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:09:07.416 [DEBUG] [Thread-212861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:09:07.416 [DEBUG] [Thread-212861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:09:07.416 [DEBUG] [Thread-212861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:09:07.427 [INFO] [Thread-212861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:09:07.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:09:08.060 [DEBUG] [Thread-212861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:09:08.060 [DEBUG] [Thread-212861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:09:08.061 [DEBUG] [Thread-212861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:09:08.101 [DEBUG] [Thread-212861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:09:08.101 [DEBUG] [Thread-212861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:09:08.104 [DEBUG] [Thread-212861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:09:08.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:09:08.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:09:08.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:09:08.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:09:08.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:09:08.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:09:08.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:09:08.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:09:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:09:08.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.881005 -999.00  +14.80  18.79     51   +5.00 1 1 1 1 1     0    0 9.01 -36.22 ZNESW 16.9 18.8 138.6 26.2 15.0 -24.5 14.9 -23.3 14.7 -22.3 15.1 -23.4
2026-02-15T23:09:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:09:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:09:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.881005
2026-02-15T23:09:08.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:09:08.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:08:35', tmtdew=11.37, humidity=46.51, cloud=0.0, wind=22.83, temperature=15.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:08:36', seeing=1.61, atlas_timestamp='2026-02-15T21:08:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:07:00')
2026-02-15T23:09:08.132 [DEBUG] [Thread-212861] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:09:08.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:09:08.228 [DEBUG] [Thread-212864] [transport.py] [_log()] starting thread (client mode): 0xa5743910
2026-02-15T23:09:08.228 [DEBUG] [Thread-212864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:09:08.243 [DEBUG] [Thread-212864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:09:08.243 [INFO] [Thread-212864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:09:08.251 [DEBUG] [Thread-212864] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:09:08.251 [DEBUG] [Thread-212864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:09:08.251 [DEBUG] [Thread-212864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] client lang: <none>
2026-02-15T23:09:08.252 [DEBUG] [Thread-212864] [transport.py] [_log()] server lang: <none>
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] kex follows: False
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:09:08.253 [DEBUG] [Thread-212864] [transport.py] [_log()] Compression: none
2026-02-15T23:09:08.254 [DEBUG] [Thread-212864] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:09:08.314 [DEBUG] [Thread-212864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:09:08.315 [DEBUG] [Thread-212864] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:09:08.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:09:08.316 [DEBUG] [Thread-212864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:09:08.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:09:08.370 [DEBUG] [Thread-212864] [transport.py] [_log()] userauth is OK
2026-02-15T23:09:08.371 [DEBUG] [Thread-212864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:09:08.371 [DEBUG] [Thread-212864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:09:08.371 [DEBUG] [Thread-212864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:09:08.371 [DEBUG] [Thread-212864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:09:08.390 [INFO] [Thread-212864] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:09:08.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:09:08.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:09:09.225 [DEBUG] [Thread-212864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:09:09.225 [DEBUG] [Thread-212864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:09:09.273 [DEBUG] [Thread-212864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:09:09.274 [DEBUG] [Thread-212864] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:09:09.283 [DEBUG] [Thread-212864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:09:09.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:09:09.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:09:09.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:09:09.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:09:09.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:09:09.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:09:09.321 [DEBUG] [Thread-212864] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:09:19.568 [DEBUG] [Thread-212866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:33.330 [DEBUG] [Thread-212867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:34.631 [DEBUG] [Thread-212868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:09:39.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:09:39.328 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:09:39.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:09:41.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 9, 11), 11.18, 46.76, 0.0, 21.95, 14.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:09:41.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:09:11
2026-02-15T23:09:41.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:09:41.744 [DEBUG] [Thread-212869] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T23:09:41.744 [DEBUG] [Thread-212869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:09:41.763 [DEBUG] [Thread-212869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:09:41.764 [INFO] [Thread-212869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] client lang: <none>
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] server lang: <none>
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] kex follows: False
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] Compression: none
2026-02-15T23:09:41.767 [DEBUG] [Thread-212869] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:09:41.775 [DEBUG] [Thread-212869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:09:41.776 [DEBUG] [Thread-212869] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:09:41.776 [DEBUG] [Thread-212869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:09:41.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:09:41.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:09:41.777 [DEBUG] [Thread-212869] [transport.py] [_log()] userauth is OK
2026-02-15T23:09:41.777 [DEBUG] [Thread-212869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:09:41.777 [DEBUG] [Thread-212869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:09:41.777 [DEBUG] [Thread-212869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:09:41.777 [DEBUG] [Thread-212869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:09:41.789 [INFO] [Thread-212869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:09:41.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:09:42.427 [DEBUG] [Thread-212869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:09:42.427 [DEBUG] [Thread-212869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:09:42.427 [DEBUG] [Thread-212869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:09:42.467 [DEBUG] [Thread-212869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:09:42.468 [DEBUG] [Thread-212869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:09:42.470 [DEBUG] [Thread-212869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:09:42.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:09:42.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:09:42.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:09:42.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:09:42.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:09:42.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:09:42.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:09:42.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:09:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:09:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.881352 -999.00  +14.80  14.31     51   +5.00 1 1 1 1 1     0    0 9.08 -33.94 ZNESW 17.4 14.3 152.0 23.3 15.0 -24.6 14.9 -23.4 14.7 -22.3 15.0 -23.8
2026-02-15T23:09:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:09:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:09:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.881352
2026-02-15T23:09:42.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:09:42.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:09:42.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:09:42.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:09:42.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:09:42.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:09:11', tmtdew=11.18, humidity=46.76, cloud=0.0, wind=21.95, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:09:11', seeing=2.27, atlas_timestamp='2026-02-15T21:09:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:07:00')
2026-02-15T23:09:42.490 [DEBUG] [Thread-212869] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:09:42.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:09:42.587 [DEBUG] [Thread-212872] [transport.py] [_log()] starting thread (client mode): 0xa2d54e20
2026-02-15T23:09:42.587 [DEBUG] [Thread-212872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:09:42.603 [DEBUG] [Thread-212872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:09:42.603 [INFO] [Thread-212872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:09:42.613 [DEBUG] [Thread-212872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:09:42.613 [DEBUG] [Thread-212872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:09:42.613 [DEBUG] [Thread-212872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:09:42.613 [DEBUG] [Thread-212872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:42.613 [DEBUG] [Thread-212872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] client lang: <none>
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] server lang: <none>
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] kex follows: False
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:09:42.614 [DEBUG] [Thread-212872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:09:42.615 [DEBUG] [Thread-212872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:09:42.615 [DEBUG] [Thread-212872] [transport.py] [_log()] Compression: none
2026-02-15T23:09:42.615 [DEBUG] [Thread-212872] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:09:42.673 [DEBUG] [Thread-212872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:09:42.673 [DEBUG] [Thread-212872] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:09:42.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:09:42.674 [DEBUG] [Thread-212872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:09:42.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:09:42.733 [DEBUG] [Thread-212872] [transport.py] [_log()] userauth is OK
2026-02-15T23:09:42.734 [DEBUG] [Thread-212872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:09:42.734 [DEBUG] [Thread-212872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:09:42.734 [DEBUG] [Thread-212872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:09:42.734 [DEBUG] [Thread-212872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:09:42.757 [INFO] [Thread-212872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:09:42.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:09:42.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:09:43.585 [DEBUG] [Thread-212872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:09:43.585 [DEBUG] [Thread-212872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:09:43.633 [DEBUG] [Thread-212872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:09:43.634 [DEBUG] [Thread-212872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:09:43.644 [DEBUG] [Thread-212872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:09:43.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:09:43.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:09:43.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:09:43.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:09:43.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:09:43.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:09:43.682 [DEBUG] [Thread-212872] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:09:49.671 [DEBUG] [Thread-212874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:00.412 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:00.413 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:04.724 [DEBUG] [Thread-212875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:13.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:10:13.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:10:13.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:10:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 9, 46), 11.22, 46.77, 0.0, 24.72, 14.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:10:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:09:46
2026-02-15T23:10:15.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:10:16.009 [DEBUG] [Thread-212876] [transport.py] [_log()] starting thread (client mode): 0xa2d6cee0
2026-02-15T23:10:16.009 [DEBUG] [Thread-212876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:10:16.030 [DEBUG] [Thread-212876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:10:16.030 [INFO] [Thread-212876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:16.033 [DEBUG] [Thread-212876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] client lang: <none>
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] server lang: <none>
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] kex follows: False
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] Compression: none
2026-02-15T23:10:16.034 [DEBUG] [Thread-212876] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:10:16.050 [DEBUG] [Thread-212876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:10:16.050 [DEBUG] [Thread-212876] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:10:16.050 [DEBUG] [Thread-212876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:10:16.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:10:16.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:10:16.050 [DEBUG] [Thread-212876] [transport.py] [_log()] userauth is OK
2026-02-15T23:10:16.051 [DEBUG] [Thread-212876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:10:16.051 [DEBUG] [Thread-212876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:10:16.051 [DEBUG] [Thread-212876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:10:16.051 [DEBUG] [Thread-212876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:10:16.070 [INFO] [Thread-212876] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:10:16.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:10:16.911 [DEBUG] [Thread-212876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:10:16.911 [DEBUG] [Thread-212876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:10:16.912 [DEBUG] [Thread-212876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:10:16.952 [DEBUG] [Thread-212876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:10:16.952 [DEBUG] [Thread-212876] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:10:16.955 [DEBUG] [Thread-212876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:10:17.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:10:17.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:10:17.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:10:17.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:10:17.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:10:17.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:10:17.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:10:17.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.881352 -999.00  +14.80  14.31     51   +5.00 1 1 1 1 1     0    0 9.08 -33.94 ZNESW 17.4 14.3 152.0 23.3 15.0 -24.6 14.9 -23.4 14.7 -22.3 15.0 -23.8
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.881352
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:10:17.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:09:46', tmtdew=11.22, humidity=46.77, cloud=0.0, wind=24.72, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:09:46', seeing=2.27, atlas_timestamp='2026-02-15T21:09:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:07:00')
2026-02-15T23:10:17.042 [DEBUG] [Thread-212876] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:10:17.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:10:17.126 [DEBUG] [Thread-212879] [transport.py] [_log()] starting thread (client mode): 0xa81d6560
2026-02-15T23:10:17.126 [DEBUG] [Thread-212879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:10:17.141 [DEBUG] [Thread-212879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:10:17.141 [INFO] [Thread-212879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:10:17.148 [DEBUG] [Thread-212879] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] client lang: <none>
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] server lang: <none>
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] kex follows: False
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:10:17.149 [DEBUG] [Thread-212879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:10:17.150 [DEBUG] [Thread-212879] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:10:17.150 [DEBUG] [Thread-212879] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:10:17.150 [DEBUG] [Thread-212879] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:10:17.150 [DEBUG] [Thread-212879] [transport.py] [_log()] Compression: none
2026-02-15T23:10:17.150 [DEBUG] [Thread-212879] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:10:17.206 [DEBUG] [Thread-212879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:10:17.207 [DEBUG] [Thread-212879] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:10:17.207 [DEBUG] [Thread-212879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:10:17.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:10:17.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:10:17.262 [DEBUG] [Thread-212879] [transport.py] [_log()] userauth is OK
2026-02-15T23:10:17.262 [DEBUG] [Thread-212879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:10:17.262 [DEBUG] [Thread-212879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:10:17.262 [DEBUG] [Thread-212879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:10:17.263 [DEBUG] [Thread-212879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:10:17.282 [INFO] [Thread-212879] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:10:17.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:10:17.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:10:18.115 [DEBUG] [Thread-212879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:10:18.120 [DEBUG] [Thread-212879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:10:18.164 [DEBUG] [Thread-212879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:10:18.164 [DEBUG] [Thread-212879] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:10:18.173 [DEBUG] [Thread-212879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:10:18.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:10:18.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:10:18.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:10:18.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:10:18.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:10:18.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:10:18.211 [DEBUG] [Thread-212879] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:10:19.761 [DEBUG] [Thread-212881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:33.402 [DEBUG] [Thread-212882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:34.818 [DEBUG] [Thread-212883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:41.138 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:48.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:10:48.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:10:48.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:10:49.856 [DEBUG] [Thread-212884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:10:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 10, 22), 11.21, 46.81, 0.0, 24.38, 14.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:10:50.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:10:22
2026-02-15T23:10:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:10:50.779 [DEBUG] [Thread-212885] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-15T23:10:50.780 [DEBUG] [Thread-212885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:10:50.800 [DEBUG] [Thread-212885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:10:50.800 [INFO] [Thread-212885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] client lang: <none>
2026-02-15T23:10:50.803 [DEBUG] [Thread-212885] [transport.py] [_log()] server lang: <none>
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] kex follows: False
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] Compression: none
2026-02-15T23:10:50.804 [DEBUG] [Thread-212885] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:10:50.824 [DEBUG] [Thread-212885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:10:50.825 [DEBUG] [Thread-212885] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:10:50.826 [DEBUG] [Thread-212885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:10:50.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:10:50.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:10:50.828 [DEBUG] [Thread-212885] [transport.py] [_log()] userauth is OK
2026-02-15T23:10:50.828 [DEBUG] [Thread-212885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:10:50.828 [DEBUG] [Thread-212885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:10:50.828 [DEBUG] [Thread-212885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:10:50.828 [DEBUG] [Thread-212885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:10:50.854 [INFO] [Thread-212885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:10:50.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:10:51.482 [DEBUG] [Thread-212885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:10:51.483 [DEBUG] [Thread-212885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:10:51.483 [DEBUG] [Thread-212885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:10:51.523 [DEBUG] [Thread-212885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:10:51.524 [DEBUG] [Thread-212885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:10:51.527 [DEBUG] [Thread-212885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:10:51.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:10:51.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:10:51.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:10:51.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:10:51.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:10:51.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:10:51.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:10:51.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.882046 -999.00  +14.70  16.60     52   +4.90 1 1 1 1 1     0    0 9.09 -30.85 ZNESW 17.7 16.6 156.0 22.8 15.0 -24.5 14.9 -23.4 14.7 -22.3 15.0 -23.7
2026-02-15T23:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.882046
2026-02-15T23:10:51.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:10:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:10:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:10:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:10:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:10:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:10:22', tmtdew=11.21, humidity=46.81, cloud=0.0, wind=24.38, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:10:22', seeing=1.62, atlas_timestamp='2026-02-15T21:10:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:07:00')
2026-02-15T23:10:51.552 [DEBUG] [Thread-212885] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:10:51.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:10:51.647 [DEBUG] [Thread-212888] [transport.py] [_log()] starting thread (client mode): 0xa2d139d0
2026-02-15T23:10:51.648 [DEBUG] [Thread-212888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:10:51.663 [DEBUG] [Thread-212888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:10:51.663 [INFO] [Thread-212888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:10:51.671 [DEBUG] [Thread-212888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] client lang: <none>
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] server lang: <none>
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] kex follows: False
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:10:51.672 [DEBUG] [Thread-212888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:10:51.673 [DEBUG] [Thread-212888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:10:51.673 [DEBUG] [Thread-212888] [transport.py] [_log()] Compression: none
2026-02-15T23:10:51.673 [DEBUG] [Thread-212888] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:10:51.730 [DEBUG] [Thread-212888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:10:51.731 [DEBUG] [Thread-212888] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:10:51.731 [DEBUG] [Thread-212888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:10:51.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:10:51.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:10:51.789 [DEBUG] [Thread-212888] [transport.py] [_log()] userauth is OK
2026-02-15T23:10:51.789 [DEBUG] [Thread-212888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:10:51.789 [DEBUG] [Thread-212888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:10:51.789 [DEBUG] [Thread-212888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:10:51.790 [DEBUG] [Thread-212888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:10:51.809 [INFO] [Thread-212888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:10:51.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:10:51.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:10:52.704 [DEBUG] [Thread-212888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:10:52.705 [DEBUG] [Thread-212888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:10:52.753 [DEBUG] [Thread-212888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:10:52.753 [DEBUG] [Thread-212888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:10:52.762 [DEBUG] [Thread-212888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:10:52.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:10:52.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:10:52.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:10:52.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:10:52.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:10:52.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:10:52.798 [DEBUG] [Thread-212888] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:11:00.612 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:00.613 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:04.890 [DEBUG] [Thread-212890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:19.944 [DEBUG] [Thread-212891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:22.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:11:22.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:11:22.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:11:24.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 10, 57), 11.14, 47.21, 0.0, 26.48, 14.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:11:24.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:10:57
2026-02-15T23:11:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:11:25.246 [DEBUG] [Thread-212892] [transport.py] [_log()] starting thread (client mode): 0xa57b0d60
2026-02-15T23:11:25.247 [DEBUG] [Thread-212892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:11:25.267 [DEBUG] [Thread-212892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:11:25.267 [INFO] [Thread-212892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] client lang: <none>
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] server lang: <none>
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] kex follows: False
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] Compression: none
2026-02-15T23:11:25.270 [DEBUG] [Thread-212892] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:11:25.287 [DEBUG] [Thread-212892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:11:25.287 [DEBUG] [Thread-212892] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:11:25.288 [DEBUG] [Thread-212892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:11:25.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:11:25.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:11:25.290 [DEBUG] [Thread-212892] [transport.py] [_log()] userauth is OK
2026-02-15T23:11:25.290 [DEBUG] [Thread-212892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:11:25.291 [DEBUG] [Thread-212892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:11:25.291 [DEBUG] [Thread-212892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:11:25.291 [DEBUG] [Thread-212892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:11:25.325 [INFO] [Thread-212892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:11:25.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:11:25.959 [DEBUG] [Thread-212892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:11:25.959 [DEBUG] [Thread-212892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:11:25.960 [DEBUG] [Thread-212892] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:11:26.000 [DEBUG] [Thread-212892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:11:26.000 [DEBUG] [Thread-212892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:11:26.003 [DEBUG] [Thread-212892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:11:26.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:11:26.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:11:26.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:11:26.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:11:26.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:11:26.027 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:11:26.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:11:26.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.882394 -999.00  +14.70  14.54     52   +5.00 1 1 1 1 1     0    0 9.17 -32.27 ZNESW 18.8 14.5 141.8 26.1 15.0 -24.5 14.9 -23.3 14.7 -22.2 14.9 -23.4
2026-02-15T23:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.882394
2026-02-15T23:11:26.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:11:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:11:26.029 [DEBUG] [Thread-212892] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:11:26.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:11:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:11:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:11:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:10:57', tmtdew=11.14, humidity=47.21, cloud=0.0, wind=26.48, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:10:57', seeing=1.56, atlas_timestamp='2026-02-15T21:10:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03275000000000006, -0.01774999999999949, -0.007749999999999702, -0.025500000000000966, 0.010999999999999233, 0.021250000000000213, 0.0259999999999998, 0.007250000000000867, -0.005500000000001393, -0.0039999999999995595, -0.03375000000000128, 0.03599999999999959, 0.09399999999999942, 0.020749999999999602, 0.02499999999999858, 0.012000000000000455, 0.05925000000000047, 0.06649999999999956, -0.0024999999999995026, 0.019249999999999545, 0.06599999999999895, 0.005250000000000199, -0.008749999999999147, 0.009249999999999758, 0.08499999999999908, 0.05550000000000033, 0.01875000000000071, 0.012500000000001066, 0.07700000000000173, 0.0710000000000015, 0.030000000000001137, 0.0600000000000005, 0.03824999999999967], zp_timestamp='2026-02-15T21:07:00')
2026-02-15T23:11:26.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:11:26.130 [DEBUG] [Thread-212895] [transport.py] [_log()] starting thread (client mode): 0xa57434f0
2026-02-15T23:11:26.130 [DEBUG] [Thread-212895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:11:26.144 [DEBUG] [Thread-212895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:11:26.144 [INFO] [Thread-212895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:11:26.152 [DEBUG] [Thread-212895] [transport.py] [_log()] client lang: <none>
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] server lang: <none>
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] kex follows: False
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] Compression: none
2026-02-15T23:11:26.153 [DEBUG] [Thread-212895] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:11:26.213 [DEBUG] [Thread-212895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:11:26.214 [DEBUG] [Thread-212895] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:11:26.214 [DEBUG] [Thread-212895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:11:26.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:11:26.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:11:26.269 [DEBUG] [Thread-212895] [transport.py] [_log()] userauth is OK
2026-02-15T23:11:26.269 [DEBUG] [Thread-212895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:11:26.270 [DEBUG] [Thread-212895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:11:26.270 [DEBUG] [Thread-212895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:11:26.270 [DEBUG] [Thread-212895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:11:26.289 [INFO] [Thread-212895] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:11:26.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:11:26.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:11:27.123 [DEBUG] [Thread-212895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:11:27.123 [DEBUG] [Thread-212895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:11:27.171 [DEBUG] [Thread-212895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:11:27.171 [DEBUG] [Thread-212895] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:11:27.179 [DEBUG] [Thread-212895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:11:27.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:11:27.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:11:27.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:11:27.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:11:27.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:11:27.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:11:27.211 [DEBUG] [Thread-212895] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:11:33.460 [DEBUG] [Thread-212897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:34.981 [DEBUG] [Thread-212898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:50.041 [DEBUG] [Thread-212899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:11:57.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:11:57.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:11:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:11:59.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 11, 32), 11.14, 47.24, 0.0, 25.07, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:11:59.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:11:32
2026-02-15T23:11:59.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:11:59.564 [DEBUG] [Thread-212900] [transport.py] [_log()] starting thread (client mode): 0xa2db6bf0
2026-02-15T23:11:59.564 [DEBUG] [Thread-212900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:11:59.584 [DEBUG] [Thread-212900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:11:59.584 [INFO] [Thread-212900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] client lang: <none>
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] server lang: <none>
2026-02-15T23:11:59.587 [DEBUG] [Thread-212900] [transport.py] [_log()] kex follows: False
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] Compression: none
2026-02-15T23:11:59.588 [DEBUG] [Thread-212900] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:11:59.602 [DEBUG] [Thread-212900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:11:59.603 [DEBUG] [Thread-212900] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:11:59.603 [DEBUG] [Thread-212900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:11:59.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:11:59.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:11:59.604 [DEBUG] [Thread-212900] [transport.py] [_log()] userauth is OK
2026-02-15T23:11:59.604 [DEBUG] [Thread-212900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:11:59.604 [DEBUG] [Thread-212900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:11:59.604 [DEBUG] [Thread-212900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:11:59.604 [DEBUG] [Thread-212900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:11:59.627 [INFO] [Thread-212900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:11:59.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:12:00.223 [DEBUG] [Thread-212900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:12:00.223 [DEBUG] [Thread-212900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:12:00.224 [DEBUG] [Thread-212900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:12:00.264 [DEBUG] [Thread-212900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:12:00.265 [DEBUG] [Thread-212900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:12:00.268 [DEBUG] [Thread-212900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:12:00.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:12:00.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:12:00.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:12:00.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:12:00.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:12:00.294 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:12:00.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:12:00.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:12:00.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:12:00.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.882741 -999.00  +14.70  19.04     52   +5.00 1 1 1 1 1     0    0 9.07 -32.97 ZNESW 16.3 19.0 142.6 23.2 15.0 -24.4 14.9 -23.5 14.7 -22.3 14.9 -23.5
2026-02-15T23:12:00.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:12:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:12:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.882741
2026-02-15T23:12:00.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:12:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:12:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:12:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:12:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:12:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:11:32', tmtdew=11.14, humidity=47.24, cloud=0.0, wind=25.07, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:11:32', seeing=1.64, atlas_timestamp='2026-02-15T21:11:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:10:00')
2026-02-15T23:12:00.297 [DEBUG] [Thread-212900] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:12:00.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:12:00.394 [DEBUG] [Thread-212903] [transport.py] [_log()] starting thread (client mode): 0xa2d7a590
2026-02-15T23:12:00.395 [DEBUG] [Thread-212903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:12:00.409 [DEBUG] [Thread-212903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:12:00.410 [INFO] [Thread-212903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:12:00.417 [DEBUG] [Thread-212903] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:12:00.418 [DEBUG] [Thread-212903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] client lang: <none>
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] server lang: <none>
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] kex follows: False
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:12:00.419 [DEBUG] [Thread-212903] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:12:00.420 [DEBUG] [Thread-212903] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:12:00.420 [DEBUG] [Thread-212903] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:12:00.420 [DEBUG] [Thread-212903] [transport.py] [_log()] Compression: none
2026-02-15T23:12:00.420 [DEBUG] [Thread-212903] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:12:00.478 [DEBUG] [Thread-212903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:12:00.479 [DEBUG] [Thread-212903] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:12:00.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:12:00.481 [DEBUG] [Thread-212903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:12:00.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:12:00.534 [DEBUG] [Thread-212903] [transport.py] [_log()] userauth is OK
2026-02-15T23:12:00.535 [DEBUG] [Thread-212903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:12:00.535 [DEBUG] [Thread-212903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:12:00.535 [DEBUG] [Thread-212903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:12:00.535 [DEBUG] [Thread-212903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:12:00.554 [INFO] [Thread-212903] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:12:00.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:12:00.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:12:00.815 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:00.816 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:01.367 [DEBUG] [Thread-212903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:12:01.367 [DEBUG] [Thread-212903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:12:01.415 [DEBUG] [Thread-212903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:12:01.416 [DEBUG] [Thread-212903] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:12:01.425 [DEBUG] [Thread-212903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:12:01.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:12:01.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:12:01.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:12:01.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:12:01.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:12:01.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:12:01.462 [DEBUG] [Thread-212903] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:12:05.076 [DEBUG] [Thread-212905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:14.956 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:20.139 [DEBUG] [Thread-212906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:31.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:12:31.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:12:31.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:12:33.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 12, 7), 11.19, 47.09, 0.0, 25.14, 14.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:12:33.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:12:07
2026-02-15T23:12:33.525 [DEBUG] [Thread-212907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:33.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:12:33.790 [DEBUG] [Thread-212908] [transport.py] [_log()] starting thread (client mode): 0xa81d68c0
2026-02-15T23:12:33.790 [DEBUG] [Thread-212908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:12:33.810 [DEBUG] [Thread-212908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:12:33.810 [INFO] [Thread-212908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:12:33.813 [DEBUG] [Thread-212908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] client lang: <none>
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] server lang: <none>
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] kex follows: False
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] Compression: none
2026-02-15T23:12:33.814 [DEBUG] [Thread-212908] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:12:33.833 [DEBUG] [Thread-212908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:12:33.833 [DEBUG] [Thread-212908] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:12:33.834 [DEBUG] [Thread-212908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:12:33.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:12:33.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:12:33.835 [DEBUG] [Thread-212908] [transport.py] [_log()] userauth is OK
2026-02-15T23:12:33.836 [DEBUG] [Thread-212908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:12:33.836 [DEBUG] [Thread-212908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:12:33.836 [DEBUG] [Thread-212908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:12:33.836 [DEBUG] [Thread-212908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:12:33.871 [INFO] [Thread-212908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:12:33.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:12:34.500 [DEBUG] [Thread-212908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:12:34.501 [DEBUG] [Thread-212908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:12:34.501 [DEBUG] [Thread-212908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:12:34.542 [DEBUG] [Thread-212908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:12:34.542 [DEBUG] [Thread-212908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:12:34.545 [DEBUG] [Thread-212908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:12:34.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:12:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:12:34.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:12:34.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:12:34.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:12:34.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:12:34.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:12:34.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.883088 -999.00  +14.70  18.49     52   +4.90 1 1 1 1 1     0    0 8.99 -31.21 ZNESW 17.0 18.5 144.8 22.4 15.0 -24.5 14.9 -23.5 14.7 -22.2 14.9 -23.3
2026-02-15T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:12:34.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.883088
2026-02-15T23:12:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:12:34.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:12:34.566 [DEBUG] [Thread-212908] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:12:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:12:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:12:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:12:34.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:12:07', tmtdew=11.19, humidity=47.09, cloud=0.0, wind=25.14, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:12:08', seeing=1.47, atlas_timestamp='2026-02-15T21:11:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:10:00')
2026-02-15T23:12:34.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:12:34.664 [DEBUG] [Thread-212911] [transport.py] [_log()] starting thread (client mode): 0xa81d5390
2026-02-15T23:12:34.664 [DEBUG] [Thread-212911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:12:34.679 [DEBUG] [Thread-212911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:12:34.679 [INFO] [Thread-212911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:12:34.687 [DEBUG] [Thread-212911] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:12:34.687 [DEBUG] [Thread-212911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] client lang: <none>
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] server lang: <none>
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] kex follows: False
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] Compression: none
2026-02-15T23:12:34.688 [DEBUG] [Thread-212911] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:12:34.746 [DEBUG] [Thread-212911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:12:34.747 [DEBUG] [Thread-212911] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:12:34.747 [DEBUG] [Thread-212911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:12:34.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:12:34.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:12:34.806 [DEBUG] [Thread-212911] [transport.py] [_log()] userauth is OK
2026-02-15T23:12:34.806 [DEBUG] [Thread-212911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:12:34.806 [DEBUG] [Thread-212911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:12:34.806 [DEBUG] [Thread-212911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:12:34.806 [DEBUG] [Thread-212911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:12:34.820 [INFO] [Thread-212911] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:12:34.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:12:34.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:12:35.183 [DEBUG] [Thread-212913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:12:35.653 [DEBUG] [Thread-212911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:12:35.653 [DEBUG] [Thread-212911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:12:35.703 [DEBUG] [Thread-212911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:12:35.703 [DEBUG] [Thread-212911] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:12:35.713 [DEBUG] [Thread-212911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:12:35.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:12:35.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:12:35.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:12:35.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:12:35.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:12:35.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:12:35.750 [DEBUG] [Thread-212911] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:12:50.234 [DEBUG] [Thread-212914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:01.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:01.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:05.271 [DEBUG] [Thread-212915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:05.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:13:05.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:13:05.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:13:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 12, 43), 11.3, 46.54, 0.0, 18.42, 14.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:13:07.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:12:43
2026-02-15T23:13:07.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:13:08.112 [DEBUG] [Thread-212916] [transport.py] [_log()] starting thread (client mode): 0xa81d6f80
2026-02-15T23:13:08.112 [DEBUG] [Thread-212916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:13:08.142 [DEBUG] [Thread-212916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:13:08.143 [INFO] [Thread-212916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:13:08.144 [DEBUG] [Thread-212916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:13:08.144 [DEBUG] [Thread-212916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:13:08.144 [DEBUG] [Thread-212916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:13:08.144 [DEBUG] [Thread-212916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] client lang: <none>
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] server lang: <none>
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] kex follows: False
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] Compression: none
2026-02-15T23:13:08.145 [DEBUG] [Thread-212916] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:13:08.162 [DEBUG] [Thread-212916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:13:08.163 [DEBUG] [Thread-212916] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:13:08.163 [DEBUG] [Thread-212916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:13:08.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:13:08.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:13:08.165 [DEBUG] [Thread-212916] [transport.py] [_log()] userauth is OK
2026-02-15T23:13:08.165 [DEBUG] [Thread-212916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:13:08.165 [DEBUG] [Thread-212916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:13:08.165 [DEBUG] [Thread-212916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:13:08.166 [DEBUG] [Thread-212916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:13:08.182 [INFO] [Thread-212916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:13:08.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:13:08.908 [DEBUG] [Thread-212916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:13:08.908 [DEBUG] [Thread-212916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:13:08.908 [DEBUG] [Thread-212916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:13:08.948 [DEBUG] [Thread-212916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:13:08.949 [DEBUG] [Thread-212916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:13:08.952 [DEBUG] [Thread-212916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:13:08.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:13:08.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:13:08.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:13:08.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:13:08.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:13:08.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:13:08.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:13:08.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:13:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:13:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.883435 -999.00  +14.70  20.12     52   +4.90 1 1 1 1 1     0    0 9.28 -29.86 ZNESW 16.9 20.1 144.0 22.5 15.0 -24.5 14.9 -23.4 14.7 -22.1 15.0 -23.5
2026-02-15T23:13:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:13:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:13:08.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.883435
2026-02-15T23:13:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:13:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:13:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:13:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:13:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:13:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:12:43', tmtdew=11.3, humidity=46.54, cloud=0.0, wind=18.42, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:12:44', seeing=1.62, atlas_timestamp='2026-02-15T21:12:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:10:00')
2026-02-15T23:13:08.977 [DEBUG] [Thread-212916] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:13:09.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:13:09.073 [DEBUG] [Thread-212919] [transport.py] [_log()] starting thread (client mode): 0xa57d7d60
2026-02-15T23:13:09.073 [DEBUG] [Thread-212919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:13:09.089 [DEBUG] [Thread-212919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:13:09.089 [INFO] [Thread-212919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:13:09.096 [DEBUG] [Thread-212919] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] client lang: <none>
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] server lang: <none>
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] kex follows: False
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] Compression: none
2026-02-15T23:13:09.097 [DEBUG] [Thread-212919] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:13:09.155 [DEBUG] [Thread-212919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:13:09.155 [DEBUG] [Thread-212919] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:13:09.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:13:09.156 [DEBUG] [Thread-212919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:13:09.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:13:09.214 [DEBUG] [Thread-212919] [transport.py] [_log()] userauth is OK
2026-02-15T23:13:09.215 [DEBUG] [Thread-212919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:13:09.215 [DEBUG] [Thread-212919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:13:09.215 [DEBUG] [Thread-212919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:13:09.215 [DEBUG] [Thread-212919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:13:09.240 [INFO] [Thread-212919] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:13:09.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:13:09.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:13:10.050 [DEBUG] [Thread-212919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:13:10.050 [DEBUG] [Thread-212919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:13:10.099 [DEBUG] [Thread-212919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:13:10.099 [DEBUG] [Thread-212919] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:13:10.108 [DEBUG] [Thread-212919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:13:10.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:13:10.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:13:10.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:13:10.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:13:10.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:13:10.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:13:10.145 [DEBUG] [Thread-212919] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:13:20.306 [DEBUG] [Thread-212921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:33.594 [DEBUG] [Thread-212922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:35.354 [DEBUG] [Thread-212923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:40.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:13:40.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:13:40.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:13:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 13, 19), 11.28, 46.61, 0.0, 19.94, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:13:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:13:19
2026-02-15T23:13:42.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:13:42.633 [DEBUG] [Thread-212924] [transport.py] [_log()] starting thread (client mode): 0xa2db4df0
2026-02-15T23:13:42.633 [DEBUG] [Thread-212924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:13:42.653 [DEBUG] [Thread-212924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:13:42.653 [INFO] [Thread-212924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] client lang: <none>
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] server lang: <none>
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] kex follows: False
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] Compression: none
2026-02-15T23:13:42.656 [DEBUG] [Thread-212924] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:13:42.673 [DEBUG] [Thread-212924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:13:42.674 [DEBUG] [Thread-212924] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:13:42.674 [DEBUG] [Thread-212924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:13:42.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:13:42.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:13:42.718 [DEBUG] [Thread-212924] [transport.py] [_log()] userauth is OK
2026-02-15T23:13:42.718 [DEBUG] [Thread-212924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:13:42.718 [DEBUG] [Thread-212924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:13:42.719 [DEBUG] [Thread-212924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:13:42.719 [DEBUG] [Thread-212924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:13:42.744 [INFO] [Thread-212924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:13:42.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:13:43.350 [DEBUG] [Thread-212924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:13:43.350 [DEBUG] [Thread-212924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:13:43.350 [DEBUG] [Thread-212924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:13:43.391 [DEBUG] [Thread-212924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:13:43.391 [DEBUG] [Thread-212924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:13:43.395 [DEBUG] [Thread-212924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:13:43.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:13:43.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:13:43.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:13:43.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:13:43.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:13:43.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:13:43.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:13:43.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:13:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:13:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.883783 -999.00  +14.70  12.50     52   +5.00 1 1 1 1 1     0    0 9.20 -31.32 ZNESW 19.1 12.5 144.8 22.2 14.9 -24.3 14.9 -23.4 14.7 -22.2 14.9 -23.5
2026-02-15T23:13:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:13:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:13:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.883783
2026-02-15T23:13:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:13:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:13:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:13:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:13:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:13:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:13:19', tmtdew=11.28, humidity=46.61, cloud=0.0, wind=19.94, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:13:20', seeing=1.69, atlas_timestamp='2026-02-15T21:12:38.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:10:00')
2026-02-15T23:13:43.422 [DEBUG] [Thread-212924] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:13:43.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:13:43.513 [DEBUG] [Thread-212927] [transport.py] [_log()] starting thread (client mode): 0xa5740160
2026-02-15T23:13:43.513 [DEBUG] [Thread-212927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:13:43.528 [DEBUG] [Thread-212927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:13:43.528 [INFO] [Thread-212927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:13:43.535 [DEBUG] [Thread-212927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] client lang: <none>
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] server lang: <none>
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] kex follows: False
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:13:43.536 [DEBUG] [Thread-212927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:13:43.537 [DEBUG] [Thread-212927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:13:43.537 [DEBUG] [Thread-212927] [transport.py] [_log()] Compression: none
2026-02-15T23:13:43.537 [DEBUG] [Thread-212927] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:13:43.594 [DEBUG] [Thread-212927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:13:43.594 [DEBUG] [Thread-212927] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:13:43.595 [DEBUG] [Thread-212927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:13:43.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:13:43.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:13:43.650 [DEBUG] [Thread-212927] [transport.py] [_log()] userauth is OK
2026-02-15T23:13:43.650 [DEBUG] [Thread-212927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:13:43.650 [DEBUG] [Thread-212927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:13:43.650 [DEBUG] [Thread-212927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:13:43.651 [DEBUG] [Thread-212927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:13:43.669 [INFO] [Thread-212927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:13:43.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:13:43.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:13:44.544 [DEBUG] [Thread-212927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:13:44.544 [DEBUG] [Thread-212927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:13:44.592 [DEBUG] [Thread-212927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:13:44.592 [DEBUG] [Thread-212927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:13:44.601 [DEBUG] [Thread-212927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:13:44.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:13:44.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:13:44.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:13:44.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:13:44.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:13:44.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:13:44.638 [DEBUG] [Thread-212927] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:13:49.012 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:13:50.391 [DEBUG] [Thread-212929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:01.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:01.220 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:05.443 [DEBUG] [Thread-212930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:14.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:14:14.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:14: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
2026-02-15T23:14:16.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 13, 55), 11.22, 47.14, 0.0, 26.24, 14.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:14:16.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:13:55
2026-02-15T23:14:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:14:17.002 [DEBUG] [Thread-212931] [transport.py] [_log()] starting thread (client mode): 0xa5742560
2026-02-15T23:14:17.002 [DEBUG] [Thread-212931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:14:17.022 [DEBUG] [Thread-212931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:14:17.022 [INFO] [Thread-212931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] client lang: <none>
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] server lang: <none>
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] kex follows: False
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] Compression: none
2026-02-15T23:14:17.024 [DEBUG] [Thread-212931] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:14:17.044 [DEBUG] [Thread-212931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:14:17.044 [DEBUG] [Thread-212931] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:14:17.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:14:17.045 [DEBUG] [Thread-212931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:14:17.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:14:17.047 [DEBUG] [Thread-212931] [transport.py] [_log()] userauth is OK
2026-02-15T23:14:17.047 [DEBUG] [Thread-212931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:14:17.048 [DEBUG] [Thread-212931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:14:17.048 [DEBUG] [Thread-212931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:14:17.048 [DEBUG] [Thread-212931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:14:17.072 [INFO] [Thread-212931] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:14:17.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:14:17.837 [DEBUG] [Thread-212931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:14:17.838 [DEBUG] [Thread-212931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:14:17.838 [DEBUG] [Thread-212931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:14:17.878 [DEBUG] [Thread-212931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:14:17.878 [DEBUG] [Thread-212931] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:14:17.882 [DEBUG] [Thread-212931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:14:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:14:17.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:14:17.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:14:17.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:14:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:14:17.906 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:14:17.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:14:17.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:14:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:14:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.884477 -999.00  +14.70  19.22     52   +5.00 1 1 1 1 1     0    0 8.99 -32.24 ZNESW 18.6 19.2 156.6 21.5 14.9 -24.4 14.9 -23.2 14.7 -22.1 15.0 -23.5
2026-02-15T23:14:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:14:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:14:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.884477
2026-02-15T23:14:17.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:14:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:14:17.908 [DEBUG] [Thread-212931] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:14:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:14:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:14:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:14:17.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:13:55', tmtdew=11.22, humidity=47.14, cloud=0.0, wind=26.24, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:13:55', seeing=1.35, atlas_timestamp='2026-02-15T21:13:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:10:00')
2026-02-15T23:14:17.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:14:18.009 [DEBUG] [Thread-212934] [transport.py] [_log()] starting thread (client mode): 0xa2d3e650
2026-02-15T23:14:18.009 [DEBUG] [Thread-212934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:14:18.027 [DEBUG] [Thread-212934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:14:18.028 [INFO] [Thread-212934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:14:18.043 [DEBUG] [Thread-212934] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:14:18.043 [DEBUG] [Thread-212934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:14:18.043 [DEBUG] [Thread-212934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] client lang: <none>
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] server lang: <none>
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] kex follows: False
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] Compression: none
2026-02-15T23:14:18.044 [DEBUG] [Thread-212934] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:14:18.098 [DEBUG] [Thread-212934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:14:18.098 [DEBUG] [Thread-212934] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:14:18.099 [DEBUG] [Thread-212934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:14:18.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:14:18.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:14:18.154 [DEBUG] [Thread-212934] [transport.py] [_log()] userauth is OK
2026-02-15T23:14:18.154 [DEBUG] [Thread-212934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:14:18.154 [DEBUG] [Thread-212934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:14:18.154 [DEBUG] [Thread-212934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:14:18.154 [DEBUG] [Thread-212934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:14:18.173 [INFO] [Thread-212934] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:14:18.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:14:18.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:14:18.983 [DEBUG] [Thread-212934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:14:18.984 [DEBUG] [Thread-212934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:14:19.032 [DEBUG] [Thread-212934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:14:19.033 [DEBUG] [Thread-212934] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:14:19.042 [DEBUG] [Thread-212934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:14:19.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:14:19.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:14:19.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:14:19.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:14:19.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:14:19.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:14:19.081 [DEBUG] [Thread-212934] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:14:20.484 [DEBUG] [Thread-212936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:33.660 [DEBUG] [Thread-212937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:35.538 [DEBUG] [Thread-212938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:49.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:14:49.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:14:49.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:14:50.572 [DEBUG] [Thread-212939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:14:50.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 14, 30), 11.21, 47.16, 0.0, 25.66, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:14:50.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:14:30
2026-02-15T23:14:51.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:14:51.473 [DEBUG] [Thread-212940] [transport.py] [_log()] starting thread (client mode): 0xa2d3f670
2026-02-15T23:14:51.473 [DEBUG] [Thread-212940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:14:51.494 [DEBUG] [Thread-212940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:14:51.494 [INFO] [Thread-212940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] client lang: <none>
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] server lang: <none>
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] kex follows: False
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:14:51.497 [DEBUG] [Thread-212940] [transport.py] [_log()] Compression: none
2026-02-15T23:14:51.498 [DEBUG] [Thread-212940] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:14:51.514 [DEBUG] [Thread-212940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:14:51.515 [DEBUG] [Thread-212940] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:14:51.516 [DEBUG] [Thread-212940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:14:51.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:14:51.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:14:51.518 [DEBUG] [Thread-212940] [transport.py] [_log()] userauth is OK
2026-02-15T23:14:51.518 [DEBUG] [Thread-212940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:14:51.519 [DEBUG] [Thread-212940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:14:51.519 [DEBUG] [Thread-212940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:14:51.519 [DEBUG] [Thread-212940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:14:51.542 [INFO] [Thread-212940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:14:51.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:14:52.188 [DEBUG] [Thread-212940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:14:52.188 [DEBUG] [Thread-212940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:14:52.188 [DEBUG] [Thread-212940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:14:52.229 [DEBUG] [Thread-212940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:14:52.229 [DEBUG] [Thread-212940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:14:52.231 [DEBUG] [Thread-212940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:14:52.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:14:52.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:14:52.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:14:52.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:14:52.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:14:52.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:14:52.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.884824 -999.00  +14.80  18.73     51   +5.00 1 1 1 1 1     0    0 8.94 -31.60 ZNESW 15.2 18.7 148.6 27.0 15.0 -24.4 14.8 -23.2 14.7 -22.1 15.0 -23.5
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.884824
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:14:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:14:30', tmtdew=11.21, humidity=47.16, cloud=0.0, wind=25.66, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:14:31', seeing=1.35, atlas_timestamp='2026-02-15T21:14:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:13:00')
2026-02-15T23:14:52.251 [DEBUG] [Thread-212940] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:14:52.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:14:52.335 [DEBUG] [Thread-212943] [transport.py] [_log()] starting thread (client mode): 0xa2d78fd0
2026-02-15T23:14:52.335 [DEBUG] [Thread-212943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:14:52.349 [DEBUG] [Thread-212943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:14:52.349 [INFO] [Thread-212943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] client lang: <none>
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] server lang: <none>
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] kex follows: False
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:14:52.357 [DEBUG] [Thread-212943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:14:52.358 [DEBUG] [Thread-212943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:14:52.358 [DEBUG] [Thread-212943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:14:52.358 [DEBUG] [Thread-212943] [transport.py] [_log()] Compression: none
2026-02-15T23:14:52.358 [DEBUG] [Thread-212943] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:14:52.413 [DEBUG] [Thread-212943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:14:52.413 [DEBUG] [Thread-212943] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:14:52.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:14:52.414 [DEBUG] [Thread-212943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:14:52.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:14:52.470 [DEBUG] [Thread-212943] [transport.py] [_log()] userauth is OK
2026-02-15T23:14:52.470 [DEBUG] [Thread-212943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:14:52.470 [DEBUG] [Thread-212943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:14:52.470 [DEBUG] [Thread-212943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:14:52.470 [DEBUG] [Thread-212943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:14:52.488 [INFO] [Thread-212943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:14:52.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:14:52.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:14:53.326 [DEBUG] [Thread-212943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:14:53.326 [DEBUG] [Thread-212943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:14:53.374 [DEBUG] [Thread-212943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:14:53.374 [DEBUG] [Thread-212943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:14:53.382 [DEBUG] [Thread-212943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:14:53.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:14:53.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:14:53.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:14:53.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:14:53.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:14:53.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:14:53.414 [DEBUG] [Thread-212943] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:15:01.419 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:01.420 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:05.607 [DEBUG] [Thread-212945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:20.662 [DEBUG] [Thread-212946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:22.768 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:23.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:15:23.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:15:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:15:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 15, 6), 11.19, 47.21, 0.0, 24.74, 14.77, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:15:25.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:15:06
2026-02-15T23:15:25.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:15:26.013 [DEBUG] [Thread-212947] [transport.py] [_log()] starting thread (client mode): 0xa57e1030
2026-02-15T23:15:26.013 [DEBUG] [Thread-212947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:15:26.033 [DEBUG] [Thread-212947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:15:26.033 [INFO] [Thread-212947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:15:26.036 [DEBUG] [Thread-212947] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:15:26.036 [DEBUG] [Thread-212947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:15:26.036 [DEBUG] [Thread-212947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:15:26.036 [DEBUG] [Thread-212947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:15:26.036 [DEBUG] [Thread-212947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:15:26.036 [DEBUG] [Thread-212947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] client lang: <none>
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] server lang: <none>
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] kex follows: False
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] Compression: none
2026-02-15T23:15:26.037 [DEBUG] [Thread-212947] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:15:26.053 [DEBUG] [Thread-212947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:15:26.054 [DEBUG] [Thread-212947] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:15:26.054 [DEBUG] [Thread-212947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:15:26.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:15:26.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:15:26.055 [DEBUG] [Thread-212947] [transport.py] [_log()] userauth is OK
2026-02-15T23:15:26.055 [DEBUG] [Thread-212947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:15:26.055 [DEBUG] [Thread-212947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:15:26.055 [DEBUG] [Thread-212947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:15:26.055 [DEBUG] [Thread-212947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:15:26.063 [INFO] [Thread-212947] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:15:26.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:15:26.717 [DEBUG] [Thread-212947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:15:26.717 [DEBUG] [Thread-212947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:15:26.717 [DEBUG] [Thread-212947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:15:26.760 [DEBUG] [Thread-212947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:15:26.760 [DEBUG] [Thread-212947] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:15:26.763 [DEBUG] [Thread-212947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:15:26.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:15:26.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:15:26.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:15:26.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:15:26.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:15:26.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:15:26.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:15:26.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:15:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:15:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.885171 -999.00  +14.80  17.25     51   +5.00 1 1 1 1 1     0    0 9.05 -31.57 ZNESW 12.9 17.2 149.0 25.5 15.0 -24.3 14.9 -23.3 14.7 -22.1 14.9 -23.4
2026-02-15T23:15:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:15:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:15:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.885171
2026-02-15T23:15:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:15:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:15:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:15:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:15:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:15:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:15:06', tmtdew=11.19, humidity=47.21, cloud=0.0, wind=24.74, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:15:06', seeing=1.46, atlas_timestamp='2026-02-15T21:14:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:13:00')
2026-02-15T23:15:26.790 [DEBUG] [Thread-212947] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:15:26.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:15:26.897 [DEBUG] [Thread-212950] [transport.py] [_log()] starting thread (client mode): 0xa81d5ff0
2026-02-15T23:15:26.897 [DEBUG] [Thread-212950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:15:26.913 [DEBUG] [Thread-212950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:15:26.913 [INFO] [Thread-212950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:15:26.921 [DEBUG] [Thread-212950] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:15:26.921 [DEBUG] [Thread-212950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:15:26.921 [DEBUG] [Thread-212950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:15:26.921 [DEBUG] [Thread-212950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] client lang: <none>
2026-02-15T23:15:26.922 [DEBUG] [Thread-212950] [transport.py] [_log()] server lang: <none>
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] kex follows: False
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:15:26.923 [DEBUG] [Thread-212950] [transport.py] [_log()] Compression: none
2026-02-15T23:15:26.924 [DEBUG] [Thread-212950] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:15:26.981 [DEBUG] [Thread-212950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:15:26.982 [DEBUG] [Thread-212950] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:15:26.983 [DEBUG] [Thread-212950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:15:26.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:15:26.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:15:27.041 [DEBUG] [Thread-212950] [transport.py] [_log()] userauth is OK
2026-02-15T23:15:27.041 [DEBUG] [Thread-212950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:15:27.042 [DEBUG] [Thread-212950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:15:27.042 [DEBUG] [Thread-212950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:15:27.042 [DEBUG] [Thread-212950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:15:27.065 [INFO] [Thread-212950] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:15:27.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:15:27.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:15:27.946 [DEBUG] [Thread-212950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:15:27.946 [DEBUG] [Thread-212950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:15:27.994 [DEBUG] [Thread-212950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:15:27.995 [DEBUG] [Thread-212950] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:15:28.004 [DEBUG] [Thread-212950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:15:28.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:15:28.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:15:28.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:15:28.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:15:28.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:15:28.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:15:28.042 [DEBUG] [Thread-212950] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:15:33.730 [DEBUG] [Thread-212952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:35.698 [DEBUG] [Thread-212953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:50.758 [DEBUG] [Thread-212954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:15:58.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:15:58.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:15:58.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:15:59.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 15, 41), 11.39, 46.41, 0.0, 23.78, 15.01, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:15:59.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:15:41
2026-02-15T23:16:00.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:16:00.433 [DEBUG] [Thread-212955] [transport.py] [_log()] starting thread (client mode): 0xa57b1cc0
2026-02-15T23:16:00.433 [DEBUG] [Thread-212955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:16:00.454 [DEBUG] [Thread-212955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:16:00.454 [INFO] [Thread-212955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:16:00.457 [DEBUG] [Thread-212955] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:16:00.457 [DEBUG] [Thread-212955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:16:00.457 [DEBUG] [Thread-212955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:16:00.457 [DEBUG] [Thread-212955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:00.457 [DEBUG] [Thread-212955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:00.457 [DEBUG] [Thread-212955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] client lang: <none>
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] server lang: <none>
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] kex follows: False
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:16:00.458 [DEBUG] [Thread-212955] [transport.py] [_log()] Compression: none
2026-02-15T23:16:00.459 [DEBUG] [Thread-212955] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:16:00.478 [DEBUG] [Thread-212955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:16:00.479 [DEBUG] [Thread-212955] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:16:00.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:16:00.480 [DEBUG] [Thread-212955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:16:00.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:16:00.482 [DEBUG] [Thread-212955] [transport.py] [_log()] userauth is OK
2026-02-15T23:16:00.482 [DEBUG] [Thread-212955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:16:00.482 [DEBUG] [Thread-212955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:16:00.482 [DEBUG] [Thread-212955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:16:00.482 [DEBUG] [Thread-212955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:16:00.506 [INFO] [Thread-212955] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:16:00.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:16:01.259 [DEBUG] [Thread-212955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:16:01.259 [DEBUG] [Thread-212955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:16:01.260 [DEBUG] [Thread-212955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:16:01.300 [DEBUG] [Thread-212955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:16:01.301 [DEBUG] [Thread-212955] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:16:01.303 [DEBUG] [Thread-212955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:16:01.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:16:01.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:16:01.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:16:01.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:16:01.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:16:01.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:16:01.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:16:01.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:16:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:16:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.885518 -999.00  +14.90  19.61     51   +5.00 1 1 1 1 1     0    0 9.32 -32.21 ZNESW 17.9 19.6 140.8 25.4 15.0 -24.3 14.9 -23.3 14.7 -22.2 15.0 -23.3
2026-02-15T23:16:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:16:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:16:01.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.885518
2026-02-15T23:16:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:16:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:16:01.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:16:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:16:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:16:01.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:15:41', tmtdew=11.39, humidity=46.41, cloud=0.0, wind=23.78, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:15:41', seeing=1.71, atlas_timestamp='2026-02-15T21:15:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:13:00')
2026-02-15T23:16:01.330 [DEBUG] [Thread-212955] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:16:01.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:16:01.427 [DEBUG] [Thread-212958] [transport.py] [_log()] starting thread (client mode): 0xa57b2470
2026-02-15T23:16:01.427 [DEBUG] [Thread-212958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:16:01.441 [DEBUG] [Thread-212958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:16:01.441 [INFO] [Thread-212958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] client lang: <none>
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] server lang: <none>
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] kex follows: False
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:16:01.449 [DEBUG] [Thread-212958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:16:01.450 [DEBUG] [Thread-212958] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:16:01.450 [DEBUG] [Thread-212958] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:16:01.450 [DEBUG] [Thread-212958] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:16:01.450 [DEBUG] [Thread-212958] [transport.py] [_log()] Compression: none
2026-02-15T23:16:01.450 [DEBUG] [Thread-212958] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:16:01.507 [DEBUG] [Thread-212958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:16:01.507 [DEBUG] [Thread-212958] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:16:01.508 [DEBUG] [Thread-212958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:16:01.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:16:01.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:16:01.567 [DEBUG] [Thread-212958] [transport.py] [_log()] userauth is OK
2026-02-15T23:16:01.567 [DEBUG] [Thread-212958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:16:01.568 [DEBUG] [Thread-212958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:16:01.568 [DEBUG] [Thread-212958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:16:01.568 [DEBUG] [Thread-212958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:16:01.590 [INFO] [Thread-212958] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:16:01.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:16:01.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:16:01.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:01.622 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:02.448 [DEBUG] [Thread-212958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:16:02.448 [DEBUG] [Thread-212958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:16:02.498 [DEBUG] [Thread-212958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:16:02.498 [DEBUG] [Thread-212958] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:16:02.506 [DEBUG] [Thread-212958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:16:02.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:16: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')
2026-02-15T23:16:02.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:16:02.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:16:02.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:16:02.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:16:02.540 [DEBUG] [Thread-212958] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:16:05.795 [DEBUG] [Thread-212960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:20.843 [DEBUG] [Thread-212961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:32.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:16:32.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:16:32.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:16:33.782 [DEBUG] [Thread-212962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:34.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 16, 16), 11.22, 46.77, 0.0, 26.06, 14.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:16:34.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:16:16
2026-02-15T23:16:34.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:16:34.959 [DEBUG] [Thread-212963] [transport.py] [_log()] starting thread (client mode): 0xa5743d60
2026-02-15T23:16:34.959 [DEBUG] [Thread-212963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:16:34.980 [DEBUG] [Thread-212963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:16:34.981 [INFO] [Thread-212963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] client lang: <none>
2026-02-15T23:16:34.982 [DEBUG] [Thread-212963] [transport.py] [_log()] server lang: <none>
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] kex follows: False
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] Compression: none
2026-02-15T23:16:34.983 [DEBUG] [Thread-212963] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:16:35.003 [DEBUG] [Thread-212963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:16:35.004 [DEBUG] [Thread-212963] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:16:35.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:16:35.005 [DEBUG] [Thread-212963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:16:35.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:16:35.007 [DEBUG] [Thread-212963] [transport.py] [_log()] userauth is OK
2026-02-15T23:16:35.007 [DEBUG] [Thread-212963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:16:35.007 [DEBUG] [Thread-212963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:16:35.007 [DEBUG] [Thread-212963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:16:35.007 [DEBUG] [Thread-212963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:16:35.032 [INFO] [Thread-212963] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:16:35.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:16:35.680 [DEBUG] [Thread-212963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:16:35.680 [DEBUG] [Thread-212963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:16:35.680 [DEBUG] [Thread-212963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:16:35.721 [DEBUG] [Thread-212963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:16:35.721 [DEBUG] [Thread-212963] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:16:35.725 [DEBUG] [Thread-212963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:16:35.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:16:35.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:16:35.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:16:35.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:16:35.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:16:35.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:16:35.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:16:35.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:16:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:16:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.885866 -999.00  +14.80  18.44     51   +5.00 1 1 1 1 1     0    0 9.07 -30.12 ZNESW 19.0 18.4 147.8 25.8 15.0 -24.3 14.9 -23.4 14.7 -22.1 15.0 -23.3
2026-02-15T23:16:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:16:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:16:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.885866
2026-02-15T23:16:35.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:16:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:16:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:16:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:16:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:16:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:16:16', tmtdew=11.22, humidity=46.77, cloud=0.0, wind=26.06, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:16:16', seeing=1.64, atlas_timestamp='2026-02-15T21:15:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:13:00')
2026-02-15T23:16:35.759 [DEBUG] [Thread-212963] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:16:35.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:16:35.856 [DEBUG] [Thread-212966] [transport.py] [_log()] starting thread (client mode): 0xa2d3d6c0
2026-02-15T23:16:35.856 [DEBUG] [Thread-212966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:16:35.873 [DEBUG] [Thread-212966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:16:35.873 [INFO] [Thread-212966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:16:35.879 [DEBUG] [Thread-212968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:16:35.883 [DEBUG] [Thread-212966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] client lang: <none>
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] server lang: <none>
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] kex follows: False
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] Compression: none
2026-02-15T23:16:35.884 [DEBUG] [Thread-212966] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:16:35.941 [DEBUG] [Thread-212966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:16:35.942 [DEBUG] [Thread-212966] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:16:35.942 [DEBUG] [Thread-212966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:16:35.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:16:35.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:16:35.998 [DEBUG] [Thread-212966] [transport.py] [_log()] userauth is OK
2026-02-15T23:16:35.998 [DEBUG] [Thread-212966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:16:35.998 [DEBUG] [Thread-212966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:16:35.998 [DEBUG] [Thread-212966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:16:35.998 [DEBUG] [Thread-212966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:16:36.017 [INFO] [Thread-212966] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:16: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-02-15T23:16:36.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:16:36.815 [DEBUG] [Thread-212966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:16:36.815 [DEBUG] [Thread-212966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:16:36.864 [DEBUG] [Thread-212966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:16:36.864 [DEBUG] [Thread-212966] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:16:36.874 [DEBUG] [Thread-212966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:16:36.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:16:36.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:16:36.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:16:36.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:16:36.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:16:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:16:36.921 [DEBUG] [Thread-212966] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:16:50.924 [DEBUG] [Thread-212969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:16:56.570 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:01.839 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:01.840 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:05.957 [DEBUG] [Thread-212970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:06.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:17:06.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:17:06.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:17:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 16, 51), 11.23, 46.74, 0.0, 23.31, 14.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:17:08.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:16:51
2026-02-15T23:17:09.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:17:09.310 [DEBUG] [Thread-212971] [transport.py] [_log()] starting thread (client mode): 0xa57b3ac0
2026-02-15T23:17:09.310 [DEBUG] [Thread-212971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:17:09.330 [DEBUG] [Thread-212971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:17:09.330 [INFO] [Thread-212971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] client lang: <none>
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] server lang: <none>
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] kex follows: False
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] Compression: none
2026-02-15T23:17:09.334 [DEBUG] [Thread-212971] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:17:09.353 [DEBUG] [Thread-212971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:17:09.353 [DEBUG] [Thread-212971] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:17:09.354 [DEBUG] [Thread-212971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:17:09.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:17:09.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:17:09.355 [DEBUG] [Thread-212971] [transport.py] [_log()] userauth is OK
2026-02-15T23:17:09.356 [DEBUG] [Thread-212971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:17:09.356 [DEBUG] [Thread-212971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:17:09.356 [DEBUG] [Thread-212971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:17:09.356 [DEBUG] [Thread-212971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:17:09.377 [INFO] [Thread-212971] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:17:09.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:17:10.002 [DEBUG] [Thread-212971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:17:10.003 [DEBUG] [Thread-212971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:17:10.003 [DEBUG] [Thread-212971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:17:10.043 [DEBUG] [Thread-212971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:17:10.043 [DEBUG] [Thread-212971] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:17:10.047 [DEBUG] [Thread-212971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:17:10.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:17:10.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:17:10.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:17:10.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:17:10.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:17:10.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:17:10.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:17:10.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:17:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:17:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.886213 -999.00  +14.90  15.87     51   +5.00 1 1 1 1 1     0    0 9.02 -27.85 ZNESW 17.7 15.9 146.5 28.1 15.0 -24.5 14.9 -23.3 14.7 -22.1 14.9 -23.6
2026-02-15T23:17:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:17:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:17:10.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.886213
2026-02-15T23:17:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:17:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:17:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:17:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:17:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:17:10.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:16:51', tmtdew=11.23, humidity=46.74, cloud=0.0, wind=23.31, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:16:52', seeing=1.48, atlas_timestamp='2026-02-15T21:16:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:13:00')
2026-02-15T23:17:10.069 [DEBUG] [Thread-212971] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:17:10.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:17:10.163 [DEBUG] [Thread-212974] [transport.py] [_log()] starting thread (client mode): 0xa5773d60
2026-02-15T23:17:10.163 [DEBUG] [Thread-212974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:17:10.178 [DEBUG] [Thread-212974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:17:10.178 [INFO] [Thread-212974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] client lang: <none>
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] server lang: <none>
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] kex follows: False
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:17:10.186 [DEBUG] [Thread-212974] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:17:10.187 [DEBUG] [Thread-212974] [transport.py] [_log()] Compression: none
2026-02-15T23:17:10.187 [DEBUG] [Thread-212974] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:17:10.244 [DEBUG] [Thread-212974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:17:10.244 [DEBUG] [Thread-212974] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:17:10.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:17:10.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:17:10.245 [DEBUG] [Thread-212974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:17:10.302 [DEBUG] [Thread-212974] [transport.py] [_log()] userauth is OK
2026-02-15T23:17:10.302 [DEBUG] [Thread-212974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:17:10.302 [DEBUG] [Thread-212974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:17:10.302 [DEBUG] [Thread-212974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:17:10.302 [DEBUG] [Thread-212974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:17:10.324 [INFO] [Thread-212974] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:17:10.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:17:10.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:17:11.158 [DEBUG] [Thread-212974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:17:11.158 [DEBUG] [Thread-212974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:17:11.205 [DEBUG] [Thread-212974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:17:11.206 [DEBUG] [Thread-212974] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:17:11.215 [DEBUG] [Thread-212974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:17:11.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:17:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:17:11.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:17:11.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:17:11.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:17:11.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:17:11.252 [DEBUG] [Thread-212974] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:17:20.991 [DEBUG] [Thread-212976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:33.862 [DEBUG] [Thread-212977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:36.031 [DEBUG] [Thread-212978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:17:41.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:17:41.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:17:41.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:17:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 17, 27), 11.22, 46.79, 0.0, 25.46, 14.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:17:43.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:17:27
2026-02-15T23:17:43.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:17:43.655 [DEBUG] [Thread-212979] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-15T23:17:43.655 [DEBUG] [Thread-212979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:17:43.676 [DEBUG] [Thread-212979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:17:43.676 [INFO] [Thread-212979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:17:43.677 [DEBUG] [Thread-212979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:17:43.677 [DEBUG] [Thread-212979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:17:43.677 [DEBUG] [Thread-212979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] client lang: <none>
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] server lang: <none>
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] kex follows: False
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] Compression: none
2026-02-15T23:17:43.678 [DEBUG] [Thread-212979] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:17:43.695 [DEBUG] [Thread-212979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:17:43.696 [DEBUG] [Thread-212979] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:17:43.696 [DEBUG] [Thread-212979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:17:43.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:17:43.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:17:43.697 [DEBUG] [Thread-212979] [transport.py] [_log()] userauth is OK
2026-02-15T23:17:43.697 [DEBUG] [Thread-212979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:17:43.697 [DEBUG] [Thread-212979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:17:43.697 [DEBUG] [Thread-212979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:17:43.697 [DEBUG] [Thread-212979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:17:43.712 [INFO] [Thread-212979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:17:43.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:17:44.358 [DEBUG] [Thread-212979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:17:44.358 [DEBUG] [Thread-212979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:17:44.358 [DEBUG] [Thread-212979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:17:44.400 [DEBUG] [Thread-212979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:17:44.401 [DEBUG] [Thread-212979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:17:44.404 [DEBUG] [Thread-212979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:17:44.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:17:44.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:17:44.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:17:44.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:17:44.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:17:44.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:17:44.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:17:44.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:17:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:17:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.886908 -999.00  +14.80  17.66     51   +5.00 1 1 1 1 1     0    0 9.22 -26.75 ZNESW 17.3 17.7 149.8 24.6 15.0 -24.4 14.9 -23.3 14.6 -22.1 15.0 -23.6
2026-02-15T23:17:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:17:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:17:44.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.886908
2026-02-15T23:17:44.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:17:44.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:17:44.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:17:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:17:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:17:44.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:17:27', tmtdew=11.22, humidity=46.79, cloud=0.0, wind=25.46, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:17:27', seeing=1.41, atlas_timestamp='2026-02-15T21:17:08.851', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, -0.005749999999999034, -0.03474999999999895, -0.007500000000000284, -0.002500000000001279, 0.015249999999999986, -0.016000000000000014, -0.007749999999999702, 0.010999999999999233, 0.0034999999999989484, -0.030750000000001165, 0.0009999999999994458, 0.03500000000000014, 0.01624999999999943, 0.013999999999999346, -0.014500000000001734, 0.03524999999999956, 0.041999999999999815, -0.030000000000001137, 0.016749999999998266, 0.04049999999999798, 0.013749999999998153, -0.01774999999999949, 0.009249999999999758, 0.06049999999999933, 0.022500000000000853, 0.0017499999999994742, -0.02099999999999902, 0.07049999999999912, 0.08300000000000018, 0.03500000000000014, 0.036000000000001364, -0.006750000000000256], zp_timestamp='2026-02-15T21:13:00')
2026-02-15T23:17:44.429 [DEBUG] [Thread-212979] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:17:44.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:17:44.525 [DEBUG] [Thread-212982] [transport.py] [_log()] starting thread (client mode): 0xa2d3f7f0
2026-02-15T23:17:44.525 [DEBUG] [Thread-212982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:17:44.540 [DEBUG] [Thread-212982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:17:44.540 [INFO] [Thread-212982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:17:44.547 [DEBUG] [Thread-212982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:17:44.547 [DEBUG] [Thread-212982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:17:44.547 [DEBUG] [Thread-212982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:17:44.547 [DEBUG] [Thread-212982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] client lang: <none>
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] server lang: <none>
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] kex follows: False
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:17:44.548 [DEBUG] [Thread-212982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:17:44.549 [DEBUG] [Thread-212982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:17:44.549 [DEBUG] [Thread-212982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:17:44.549 [DEBUG] [Thread-212982] [transport.py] [_log()] Compression: none
2026-02-15T23:17:44.549 [DEBUG] [Thread-212982] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:17:44.606 [DEBUG] [Thread-212982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:17:44.606 [DEBUG] [Thread-212982] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:17:44.607 [DEBUG] [Thread-212982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:17:44.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:17:44.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:17:44.662 [DEBUG] [Thread-212982] [transport.py] [_log()] userauth is OK
2026-02-15T23:17:44.662 [DEBUG] [Thread-212982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:17:44.662 [DEBUG] [Thread-212982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:17:44.663 [DEBUG] [Thread-212982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:17:44.663 [DEBUG] [Thread-212982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:17:44.687 [INFO] [Thread-212982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:17:44.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:17:44.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:17:45.523 [DEBUG] [Thread-212982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:17:45.523 [DEBUG] [Thread-212982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:17:45.572 [DEBUG] [Thread-212982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:17:45.572 [DEBUG] [Thread-212982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:17:45.581 [DEBUG] [Thread-212982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:17:45.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:17:45.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:17: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
2026-02-15T23:17:45.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:17:45.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:17:45.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:17:45.620 [DEBUG] [Thread-212982] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:17:51.069 [DEBUG] [Thread-212984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:02.038 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:02.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:06.118 [DEBUG] [Thread-212985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:15.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:18:15.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:18:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:18:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 18, 2), 11.23, 46.76, 0.0, 24.58, 14.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:18:17.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:18:02
2026-02-15T23:18:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:18:18.196 [DEBUG] [Thread-212986] [transport.py] [_log()] starting thread (client mode): 0xa57b0a90
2026-02-15T23:18:18.196 [DEBUG] [Thread-212986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:18:18.215 [DEBUG] [Thread-212986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:18:18.215 [INFO] [Thread-212986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] client lang: <none>
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] server lang: <none>
2026-02-15T23:18:18.219 [DEBUG] [Thread-212986] [transport.py] [_log()] kex follows: False
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] Compression: none
2026-02-15T23:18:18.220 [DEBUG] [Thread-212986] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:18:18.238 [DEBUG] [Thread-212986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:18:18.239 [DEBUG] [Thread-212986] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:18:18.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:18:18.240 [DEBUG] [Thread-212986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:18:18.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:18:18.242 [DEBUG] [Thread-212986] [transport.py] [_log()] userauth is OK
2026-02-15T23:18:18.242 [DEBUG] [Thread-212986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:18:18.243 [DEBUG] [Thread-212986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:18:18.243 [DEBUG] [Thread-212986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:18:18.243 [DEBUG] [Thread-212986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:18:18.266 [INFO] [Thread-212986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:18:18.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:18:18.910 [DEBUG] [Thread-212986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:18:18.910 [DEBUG] [Thread-212986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:18:18.911 [DEBUG] [Thread-212986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:18:18.951 [DEBUG] [Thread-212986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:18:18.952 [DEBUG] [Thread-212986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:18:18.955 [DEBUG] [Thread-212986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:18:18.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:18:18.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:18:18.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:18:18.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:18:18.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:18:18.978 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:18:18.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:18:18.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:18:18.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:18:18.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.887255 -999.00  +14.80  15.33     51   +5.00 1 1 1 1 1     0    0 9.32 -26.94 ZNESW 16.1 15.3 154.8 25.6 15.0 -24.3 14.9 -23.3 14.7 -22.2 15.0 -23.6
2026-02-15T23:18:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:18:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:18:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.887255
2026-02-15T23:18:18.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:18:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:18:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:18:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:18:18.981 [DEBUG] [Thread-212986] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:18:18.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:18:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:18:02', tmtdew=11.23, humidity=46.76, cloud=0.0, wind=24.58, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:18:02', seeing=1.38, atlas_timestamp='2026-02-15T21:17:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.028249999999999886, -0.019249999999999545, -0.0005000000000006111, -0.009499999999999176, 0.0022500000000000853, 0.02200000000000024, -0.003750000000000142, 0.02949999999999875, 0.002000000000000668, -0.006250000000001421, -0.0030000000000001137, 0.04649999999999821, 0.030249999999998778, 0.028999999999999915, 0.006999999999999673, 0.04574999999999996, 0.07599999999999874, -0.004000000000001336, -0.00975000000000037, 0.07499999999999929, 0.0012499999999988631, -0.008749999999999147, 0.008750000000000924, 0.0389999999999997, 0.05150000000000077, -0.01425000000000054, -0.00849999999999973, 0.0990000000000002, 0.09950000000000081, 0.02900000000000169, 0.06400000000000006, 0.0067499999999984794], zp_timestamp='2026-02-15T21:16:00')
2026-02-15T23:18:19.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:18:19.076 [DEBUG] [Thread-212989] [transport.py] [_log()] starting thread (client mode): 0xa2d13d00
2026-02-15T23:18:19.076 [DEBUG] [Thread-212989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:18:19.090 [DEBUG] [Thread-212989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:18:19.090 [INFO] [Thread-212989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:18:19.098 [DEBUG] [Thread-212989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] client lang: <none>
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] server lang: <none>
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] kex follows: False
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] Compression: none
2026-02-15T23:18:19.099 [DEBUG] [Thread-212989] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:18:19.158 [DEBUG] [Thread-212989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:18:19.159 [DEBUG] [Thread-212989] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:18:19.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:18:19.160 [DEBUG] [Thread-212989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:18:19.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:18:19.213 [DEBUG] [Thread-212989] [transport.py] [_log()] userauth is OK
2026-02-15T23:18:19.214 [DEBUG] [Thread-212989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:18:19.214 [DEBUG] [Thread-212989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:18:19.214 [DEBUG] [Thread-212989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:18:19.214 [DEBUG] [Thread-212989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:18:19.232 [INFO] [Thread-212989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:18:19.233 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:18:19.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:18:20.100 [DEBUG] [Thread-212989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:18:20.100 [DEBUG] [Thread-212989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:18:20.148 [DEBUG] [Thread-212989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:18:20.148 [DEBUG] [Thread-212989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:18:20.157 [DEBUG] [Thread-212989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:18:20.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:18:20.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:18:20.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:18:20.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:18:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:18:20.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:18:20.192 [DEBUG] [Thread-212989] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:18:21.157 [DEBUG] [Thread-212991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:30.326 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:33.914 [DEBUG] [Thread-212992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:36.219 [DEBUG] [Thread-212993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:50.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:18:50.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:18:50.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:18:51.260 [DEBUG] [Thread-212994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:18:52.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 18, 38), 11.41, 46.35, 0.0, 25.33, 15.08, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:18:52.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:18:38
2026-02-15T23:18:52.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:18:52.851 [DEBUG] [Thread-212995] [transport.py] [_log()] starting thread (client mode): 0xa2d11600
2026-02-15T23:18:52.851 [DEBUG] [Thread-212995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:18:52.870 [DEBUG] [Thread-212995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:18:52.870 [INFO] [Thread-212995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] client lang: <none>
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] server lang: <none>
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] kex follows: False
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:18:52.873 [DEBUG] [Thread-212995] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:18:52.874 [DEBUG] [Thread-212995] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:18:52.874 [DEBUG] [Thread-212995] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:18:52.874 [DEBUG] [Thread-212995] [transport.py] [_log()] Compression: none
2026-02-15T23:18:52.874 [DEBUG] [Thread-212995] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:18:52.888 [DEBUG] [Thread-212995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:18:52.888 [DEBUG] [Thread-212995] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:18:52.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:18:52.888 [DEBUG] [Thread-212995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:18:52.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:18:52.889 [DEBUG] [Thread-212995] [transport.py] [_log()] userauth is OK
2026-02-15T23:18:52.890 [DEBUG] [Thread-212995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:18:52.890 [DEBUG] [Thread-212995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:18:52.890 [DEBUG] [Thread-212995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:18:52.890 [DEBUG] [Thread-212995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:18:52.909 [INFO] [Thread-212995] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:18:52.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:18:53.749 [DEBUG] [Thread-212995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:18:53.750 [DEBUG] [Thread-212995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:18:53.750 [DEBUG] [Thread-212995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:18:53.790 [DEBUG] [Thread-212995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:18:53.791 [DEBUG] [Thread-212995] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:18:53.794 [DEBUG] [Thread-212995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:18:53.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:18:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:18:53.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:18:53.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:18:53.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:18:53.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:18:53.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:18:53.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:18:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:18:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.887602 -999.00  +14.80  15.16     52   +5.00 1 1 1 1 1     0    0 9.17 -24.08 ZNESW 18.5 15.2 141.0 24.9 15.0 -24.4 14.9 -23.4 14.7 -22.2 14.9 -23.5
2026-02-15T23:18:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:18:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:18:53.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.887602
2026-02-15T23:18:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:18:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:18:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:18:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:18:53.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:18:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:18:38', tmtdew=11.41, humidity=46.35, cloud=0.0, wind=25.33, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:18:38', seeing=1.37, atlas_timestamp='2026-02-15T21:18:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.028249999999999886, -0.019249999999999545, -0.0005000000000006111, -0.009499999999999176, 0.0022500000000000853, 0.02200000000000024, -0.003750000000000142, 0.02949999999999875, 0.002000000000000668, -0.006250000000001421, -0.0030000000000001137, 0.04649999999999821, 0.030249999999998778, 0.028999999999999915, 0.006999999999999673, 0.04574999999999996, 0.07599999999999874, -0.004000000000001336, -0.00975000000000037, 0.07499999999999929, 0.0012499999999988631, -0.008749999999999147, 0.008750000000000924, 0.0389999999999997, 0.05150000000000077, -0.01425000000000054, -0.00849999999999973, 0.0990000000000002, 0.09950000000000081, 0.02900000000000169, 0.06400000000000006, 0.0067499999999984794], zp_timestamp='2026-02-15T21:16:00')
2026-02-15T23:18:53.823 [DEBUG] [Thread-212995] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:18:53.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:18:53.921 [DEBUG] [Thread-212998] [transport.py] [_log()] starting thread (client mode): 0xa57c0cd0
2026-02-15T23:18:53.921 [DEBUG] [Thread-212998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:18:53.936 [DEBUG] [Thread-212998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:18:53.936 [INFO] [Thread-212998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:18:53.943 [DEBUG] [Thread-212998] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] client lang: <none>
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] server lang: <none>
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] kex follows: False
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:18:53.944 [DEBUG] [Thread-212998] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:18:53.945 [DEBUG] [Thread-212998] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:18:53.945 [DEBUG] [Thread-212998] [transport.py] [_log()] Compression: none
2026-02-15T23:18:53.945 [DEBUG] [Thread-212998] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:18:54.002 [DEBUG] [Thread-212998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:18:54.002 [DEBUG] [Thread-212998] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:18:54.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:18:54.004 [DEBUG] [Thread-212998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:18:54.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:18:54.058 [DEBUG] [Thread-212998] [transport.py] [_log()] userauth is OK
2026-02-15T23:18:54.058 [DEBUG] [Thread-212998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:18:54.058 [DEBUG] [Thread-212998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:18:54.058 [DEBUG] [Thread-212998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:18:54.058 [DEBUG] [Thread-212998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:18:54.077 [INFO] [Thread-212998] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:18:54.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:18:54.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:18:54.865 [DEBUG] [Thread-212998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:18:54.866 [DEBUG] [Thread-212998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:18:54.914 [DEBUG] [Thread-212998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:18:54.914 [DEBUG] [Thread-212998] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:18:54.924 [DEBUG] [Thread-212998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:18:54.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:18:54.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:18:54.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:18:54.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:18:54.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:18:54.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:18:54.960 [DEBUG] [Thread-212998] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:19:02.241 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:02.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:06.296 [DEBUG] [Thread-213000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:21.349 [DEBUG] [Thread-213001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:24.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:19:24.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:19:24.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:19:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 19, 15), 11.11, 47.14, 0.0, 23.47, 14.82, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:19:27.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:19:15
2026-02-15T23:19:27.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:19:27.660 [DEBUG] [Thread-213002] [transport.py] [_log()] starting thread (client mode): 0xa57c0070
2026-02-15T23:19:27.660 [DEBUG] [Thread-213002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:19:27.681 [DEBUG] [Thread-213002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:19:27.681 [INFO] [Thread-213002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] client lang: <none>
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] server lang: <none>
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] kex follows: False
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] Compression: none
2026-02-15T23:19:27.684 [DEBUG] [Thread-213002] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:19:27.701 [DEBUG] [Thread-213002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:19:27.701 [DEBUG] [Thread-213002] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:19:27.701 [DEBUG] [Thread-213002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:19:27.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:19:27.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:19:27.702 [DEBUG] [Thread-213002] [transport.py] [_log()] userauth is OK
2026-02-15T23:19:27.702 [DEBUG] [Thread-213002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:19:27.702 [DEBUG] [Thread-213002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:19:27.702 [DEBUG] [Thread-213002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:19:27.702 [DEBUG] [Thread-213002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:19:27.711 [INFO] [Thread-213002] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:19:27.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:19:28.348 [DEBUG] [Thread-213002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:19:28.348 [DEBUG] [Thread-213002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:19:28.348 [DEBUG] [Thread-213002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:19:28.389 [DEBUG] [Thread-213002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:19:28.389 [DEBUG] [Thread-213002] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:19:28.392 [DEBUG] [Thread-213002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:19:28.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:19:28.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:19:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:19:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:19:28.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:19:28.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:19:28.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:19:28.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:19:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:19:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.887949 -999.00  +14.80  17.99     51   +5.00 1 1 1 1 1     0    0 9.04 -24.95 ZNESW 20.9 18.0 146.0 24.8 15.0 -24.5 14.9 -23.3 -999.0 -999.0 15.0 -23.5
2026-02-15T23:19:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:19:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:19:28.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.887949
2026-02-15T23:19:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:19:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:19:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:19:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:19:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:19:28.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:19:15', tmtdew=11.11, humidity=47.14, cloud=0.0, wind=23.47, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:19:15', seeing=1.36, atlas_timestamp='2026-02-15T21:18:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.028249999999999886, -0.019249999999999545, -0.0005000000000006111, -0.009499999999999176, 0.0022500000000000853, 0.02200000000000024, -0.003750000000000142, 0.02949999999999875, 0.002000000000000668, -0.006250000000001421, -0.0030000000000001137, 0.04649999999999821, 0.030249999999998778, 0.028999999999999915, 0.006999999999999673, 0.04574999999999996, 0.07599999999999874, -0.004000000000001336, -0.00975000000000037, 0.07499999999999929, 0.0012499999999988631, -0.008749999999999147, 0.008750000000000924, 0.0389999999999997, 0.05150000000000077, -0.01425000000000054, -0.00849999999999973, 0.0990000000000002, 0.09950000000000081, 0.02900000000000169, 0.06400000000000006, 0.0067499999999984794], zp_timestamp='2026-02-15T21:16:00')
2026-02-15T23:19:28.413 [DEBUG] [Thread-213002] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:19:28.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:19:28.499 [DEBUG] [Thread-213005] [transport.py] [_log()] starting thread (client mode): 0xa81d64d0
2026-02-15T23:19:28.499 [DEBUG] [Thread-213005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:19:28.514 [DEBUG] [Thread-213005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:19:28.514 [INFO] [Thread-213005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:19:28.522 [DEBUG] [Thread-213005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:19:28.522 [DEBUG] [Thread-213005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:19:28.522 [DEBUG] [Thread-213005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] client lang: <none>
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] server lang: <none>
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] kex follows: False
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:19:28.523 [DEBUG] [Thread-213005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:19:28.524 [DEBUG] [Thread-213005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:19:28.524 [DEBUG] [Thread-213005] [transport.py] [_log()] Compression: none
2026-02-15T23:19:28.524 [DEBUG] [Thread-213005] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:19:28.583 [DEBUG] [Thread-213005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:19:28.583 [DEBUG] [Thread-213005] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:19:28.584 [DEBUG] [Thread-213005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:19:28.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:19:28.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:19:28.642 [DEBUG] [Thread-213005] [transport.py] [_log()] userauth is OK
2026-02-15T23:19:28.643 [DEBUG] [Thread-213005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:19:28.643 [DEBUG] [Thread-213005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:19:28.643 [DEBUG] [Thread-213005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:19:28.643 [DEBUG] [Thread-213005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:19:28.662 [INFO] [Thread-213005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:19:28.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:19:28.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:19:29.525 [DEBUG] [Thread-213005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:19:29.525 [DEBUG] [Thread-213005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:19:29.573 [DEBUG] [Thread-213005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:19:29.574 [DEBUG] [Thread-213005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:19:29.583 [DEBUG] [Thread-213005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:19:29.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:19:29.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:19:29.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:19:29.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:19:29.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:19:29.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:19:29.621 [DEBUG] [Thread-213005] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:19:33.988 [DEBUG] [Thread-213007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:36.384 [DEBUG] [Thread-213008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:51.437 [DEBUG] [Thread-213009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:19:59.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:19:59.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:19:59.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:20:01.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 19, 50), 11.3, 46.67, 0.0, 24.88, 14.79, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:20:01.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:19:50
2026-02-15T23:20:01.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:20:02.041 [DEBUG] [Thread-213010] [transport.py] [_log()] starting thread (client mode): 0xa2d3ce20
2026-02-15T23:20:02.041 [DEBUG] [Thread-213010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:20:02.058 [DEBUG] [Thread-213010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:20:02.058 [INFO] [Thread-213010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:20:02.061 [DEBUG] [Thread-213010] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:20:02.061 [DEBUG] [Thread-213010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:20:02.061 [DEBUG] [Thread-213010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:20:02.061 [DEBUG] [Thread-213010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:02.061 [DEBUG] [Thread-213010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] client lang: <none>
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] server lang: <none>
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] kex follows: False
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] Compression: none
2026-02-15T23:20:02.062 [DEBUG] [Thread-213010] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:20:02.078 [DEBUG] [Thread-213010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:20:02.079 [DEBUG] [Thread-213010] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:20:02.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:20:02.080 [DEBUG] [Thread-213010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:20:02.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:20:02.083 [DEBUG] [Thread-213010] [transport.py] [_log()] userauth is OK
2026-02-15T23:20:02.083 [DEBUG] [Thread-213010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:20:02.083 [DEBUG] [Thread-213010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:20:02.083 [DEBUG] [Thread-213010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:20:02.083 [DEBUG] [Thread-213010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:20:02.103 [INFO] [Thread-213010] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:20:02.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:20:02.450 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:02.451 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:04.123 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:05.485 [DEBUG] [Thread-213010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:20:05.486 [DEBUG] [Thread-213010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:20:05.486 [DEBUG] [Thread-213010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:20:05.526 [DEBUG] [Thread-213010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:20:05.526 [DEBUG] [Thread-213010] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:20:05.528 [DEBUG] [Thread-213010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:20:05.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:20:05.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:20:05.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:20:05.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:20:05.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:20:05.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:20:05.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:20:05.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:20:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:20:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.888296 -999.00  +14.70  15.96     51   +4.90 1 1 1 1 1     0    0 9.23 -23.92 ZNESW 15.3 16.0 139.6 21.6 15.0 -24.4 14.9 -23.5 14.7 -22.3 14.9 -23.6
2026-02-15T23:20:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:20:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:20:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.888296
2026-02-15T23:20:05.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:20:05.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:20:05.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:20:05.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:20:05.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:20:05.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:19:50', tmtdew=11.3, humidity=46.67, cloud=0.0, wind=24.88, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:19:50', seeing=1.47, atlas_timestamp='2026-02-15T21:19:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.028249999999999886, -0.019249999999999545, -0.0005000000000006111, -0.009499999999999176, 0.0022500000000000853, 0.02200000000000024, -0.003750000000000142, 0.02949999999999875, 0.002000000000000668, -0.006250000000001421, -0.0030000000000001137, 0.04649999999999821, 0.030249999999998778, 0.028999999999999915, 0.006999999999999673, 0.04574999999999996, 0.07599999999999874, -0.004000000000001336, -0.00975000000000037, 0.07499999999999929, 0.0012499999999988631, -0.008749999999999147, 0.008750000000000924, 0.0389999999999997, 0.05150000000000077, -0.01425000000000054, -0.00849999999999973, 0.0990000000000002, 0.09950000000000081, 0.02900000000000169, 0.06400000000000006, 0.0067499999999984794], zp_timestamp='2026-02-15T21:16:00')
2026-02-15T23:20:05.565 [DEBUG] [Thread-213010] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:20:05.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:20:05.661 [DEBUG] [Thread-213013] [transport.py] [_log()] starting thread (client mode): 0xa2d6d8a0
2026-02-15T23:20:05.661 [DEBUG] [Thread-213013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:20:05.676 [DEBUG] [Thread-213013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:20:05.676 [INFO] [Thread-213013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:20:05.684 [DEBUG] [Thread-213013] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:20:05.684 [DEBUG] [Thread-213013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:20:05.684 [DEBUG] [Thread-213013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:20:05.684 [DEBUG] [Thread-213013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] client lang: <none>
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] server lang: <none>
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] kex follows: False
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] Compression: none
2026-02-15T23:20:05.685 [DEBUG] [Thread-213013] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:20:05.742 [DEBUG] [Thread-213013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:20:05.743 [DEBUG] [Thread-213013] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:20:05.743 [DEBUG] [Thread-213013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:20:05.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:20:05.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:20:05.798 [DEBUG] [Thread-213013] [transport.py] [_log()] userauth is OK
2026-02-15T23:20:05.799 [DEBUG] [Thread-213013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:20:05.799 [DEBUG] [Thread-213013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:20:05.799 [DEBUG] [Thread-213013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:20:05.799 [DEBUG] [Thread-213013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:20:05.818 [INFO] [Thread-213013] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:20:05.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:20:05.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:20:06.474 [DEBUG] [Thread-213015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:06.614 [DEBUG] [Thread-213013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:20:06.614 [DEBUG] [Thread-213013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:20:06.663 [DEBUG] [Thread-213013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:20:06.663 [DEBUG] [Thread-213013] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:20:06.673 [DEBUG] [Thread-213013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:20:06.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:20:06.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:20:06.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:20:06.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:20:06.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:20:06.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:20:06.709 [DEBUG] [Thread-213013] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:20:21.531 [DEBUG] [Thread-213016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:34.044 [DEBUG] [Thread-213017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:36.565 [DEBUG] [Thread-213018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:20:36.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:20:36.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:20:36.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:20:38.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 20, 25), 11.28, 46.74, 0.0, 23.08, 14.8, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:20:38.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:20:25
2026-02-15T23:20:38.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:20:39.146 [DEBUG] [Thread-213019] [transport.py] [_log()] starting thread (client mode): 0xa81d7880
2026-02-15T23:20:39.147 [DEBUG] [Thread-213019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:20:39.167 [DEBUG] [Thread-213019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:20:39.167 [INFO] [Thread-213019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:20:39.170 [DEBUG] [Thread-213019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:20:39.170 [DEBUG] [Thread-213019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:20:39.170 [DEBUG] [Thread-213019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:20:39.170 [DEBUG] [Thread-213019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] client lang: <none>
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] server lang: <none>
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] kex follows: False
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] Compression: none
2026-02-15T23:20:39.171 [DEBUG] [Thread-213019] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:20:39.188 [DEBUG] [Thread-213019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:20:39.189 [DEBUG] [Thread-213019] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:20:39.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:20:39.190 [DEBUG] [Thread-213019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:20:39.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:20:39.192 [DEBUG] [Thread-213019] [transport.py] [_log()] userauth is OK
2026-02-15T23:20:39.192 [DEBUG] [Thread-213019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:20:39.192 [DEBUG] [Thread-213019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:20:39.192 [DEBUG] [Thread-213019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:20:39.193 [DEBUG] [Thread-213019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:20:39.229 [INFO] [Thread-213019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:20:39.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:20:41.105 [DEBUG] [Thread-213019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:20:41.105 [DEBUG] [Thread-213019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:20:41.106 [DEBUG] [Thread-213019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:20:41.147 [DEBUG] [Thread-213019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:20:41.147 [DEBUG] [Thread-213019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:20:41.150 [DEBUG] [Thread-213019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:20:41.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:20:41.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:20:41.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:20:41.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:20:41.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:20:41.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:20:41.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:20:41.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:20:41.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:20:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.888644 -999.00  +14.70  23.08     52   +4.90 1 1 1 1 1     0    0 9.28 -22.88 ZNESW 15.4 23.1 142.4 27.6 15.0 -24.4 14.9 -23.4 14.7 -22.3 14.9 -23.3
2026-02-15T23:20:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:20:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:20:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.888644
2026-02-15T23:20:41.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:20:41.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:20:41.177 [DEBUG] [Thread-213019] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:20:41.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:20:25', tmtdew=11.28, humidity=46.74, cloud=0.0, wind=23.08, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:20:25', seeing=1.35, atlas_timestamp='2026-02-15T21:19:38.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.028249999999999886, -0.019249999999999545, -0.0005000000000006111, -0.009499999999999176, 0.0022500000000000853, 0.02200000000000024, -0.003750000000000142, 0.02949999999999875, 0.002000000000000668, -0.006250000000001421, -0.0030000000000001137, 0.04649999999999821, 0.030249999999998778, 0.028999999999999915, 0.006999999999999673, 0.04574999999999996, 0.07599999999999874, -0.004000000000001336, -0.00975000000000037, 0.07499999999999929, 0.0012499999999988631, -0.008749999999999147, 0.008750000000000924, 0.0389999999999997, 0.05150000000000077, -0.01425000000000054, -0.00849999999999973, 0.0990000000000002, 0.09950000000000081, 0.02900000000000169, 0.06400000000000006, 0.0067499999999984794], zp_timestamp='2026-02-15T21:16:00')
2026-02-15T23:20:41.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:20:41.273 [DEBUG] [Thread-213022] [transport.py] [_log()] starting thread (client mode): 0xa57e3850
2026-02-15T23:20:41.273 [DEBUG] [Thread-213022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:20:41.288 [DEBUG] [Thread-213022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:20:41.288 [INFO] [Thread-213022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] client lang: <none>
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] server lang: <none>
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] kex follows: False
2026-02-15T23:20:41.296 [DEBUG] [Thread-213022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:20:41.297 [DEBUG] [Thread-213022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:20:41.297 [DEBUG] [Thread-213022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:20:41.297 [DEBUG] [Thread-213022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:20:41.297 [DEBUG] [Thread-213022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:20:41.297 [DEBUG] [Thread-213022] [transport.py] [_log()] Compression: none
2026-02-15T23:20:41.297 [DEBUG] [Thread-213022] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:20:41.355 [DEBUG] [Thread-213022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:20:41.355 [DEBUG] [Thread-213022] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:20:41.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:20:41.356 [DEBUG] [Thread-213022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:20:41.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:20:41.414 [DEBUG] [Thread-213022] [transport.py] [_log()] userauth is OK
2026-02-15T23:20:41.414 [DEBUG] [Thread-213022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:20:41.415 [DEBUG] [Thread-213022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:20:41.415 [DEBUG] [Thread-213022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:20:41.415 [DEBUG] [Thread-213022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:20:41.434 [INFO] [Thread-213022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:20:41.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:20:41.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:20:42.253 [DEBUG] [Thread-213022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:20:42.253 [DEBUG] [Thread-213022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:20:42.302 [DEBUG] [Thread-213022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:20:42.302 [DEBUG] [Thread-213022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:20:42.311 [DEBUG] [Thread-213022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:20:42.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:20:42.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:20:42.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:20:42.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:20:42.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:20:42.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:20:42.358 [DEBUG] [Thread-213022] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:20:51.597 [DEBUG] [Thread-213024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:02.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:02.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:06.654 [DEBUG] [Thread-213025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:21:12.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:21:12.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:21:14.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 21), 11.17, 47.27, 0.0, 23.06, 14.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:21:14.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:21:00
2026-02-15T23:21:15.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:21:15.181 [DEBUG] [Thread-213026] [transport.py] [_log()] starting thread (client mode): 0xa57e22f0
2026-02-15T23:21:15.182 [DEBUG] [Thread-213026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:21:15.202 [DEBUG] [Thread-213026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:21:15.202 [INFO] [Thread-213026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:21:15.205 [DEBUG] [Thread-213026] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:21:15.205 [DEBUG] [Thread-213026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] client lang: <none>
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] server lang: <none>
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] kex follows: False
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:21:15.206 [DEBUG] [Thread-213026] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:21:15.207 [DEBUG] [Thread-213026] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:21:15.207 [DEBUG] [Thread-213026] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:21:15.207 [DEBUG] [Thread-213026] [transport.py] [_log()] Compression: none
2026-02-15T23:21:15.207 [DEBUG] [Thread-213026] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:21:15.225 [DEBUG] [Thread-213026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:21:15.226 [DEBUG] [Thread-213026] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:21:15.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:21:15.227 [DEBUG] [Thread-213026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:21:15.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:21:15.229 [DEBUG] [Thread-213026] [transport.py] [_log()] userauth is OK
2026-02-15T23:21:15.229 [DEBUG] [Thread-213026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:21:15.230 [DEBUG] [Thread-213026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:21:15.230 [DEBUG] [Thread-213026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:21:15.230 [DEBUG] [Thread-213026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:21:15.254 [INFO] [Thread-213026] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:21:15.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:21:15.896 [DEBUG] [Thread-213026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:21:15.896 [DEBUG] [Thread-213026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:21:15.896 [DEBUG] [Thread-213026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:21:15.937 [DEBUG] [Thread-213026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:21:15.938 [DEBUG] [Thread-213026] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:21:15.941 [DEBUG] [Thread-213026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:21:15.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:21:15.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:21:15.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:21:15.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:21:15.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:21:15.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:21:15.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:21:15.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:21:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:21:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.889338 -999.00  +14.80  18.00     52   +5.00 1 1 1 1 1     0    0 9.32 -23.67 ZNESW 13.2 18.0 156.0 22.0 15.0 -24.4 14.9 -23.3 14.6 -22.2 14.9 -23.3
2026-02-15T23:21:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:21:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:21:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.889338
2026-02-15T23:21:15.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:21:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:21:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:21:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:21:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:21:15.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:21:00', tmtdew=11.17, humidity=47.27, cloud=0.0, wind=23.06, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:21:00', seeing=1.51, atlas_timestamp='2026-02-15T21:20:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.04974999999999952, -0.03474999999999895, -0.01750000000000007, -0.02549999999999919, -0.003750000000000142, 0.0009999999999994458, 0.01925000000000132, -0.03500000000000014, 0.0009999999999994458, -0.09475000000000122, -0.022999999999999687, 0.042500000000000426, 0.014249999999998764, 0.036999999999999034, -0.0070000000000014495, 0.03125, 0.041499999999999204, -0.009000000000000341, 0.013249999999999318, 0.03199999999999825, -0.007250000000000867, -0.040749999999999176, -0.025249999999999773, 0.03599999999999959, 0.00849999999999973, 0.008250000000000313, -0.02149999999999963, 0.07600000000000051, 0.07200000000000095, 0.015000000000000568, 0.02450000000000152, -0.003750000000000142], zp_timestamp='2026-02-15T21:19:00')
2026-02-15T23:21:15.968 [DEBUG] [Thread-213026] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:21:16.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:21:21.688 [DEBUG] [Thread-213029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:34.126 [DEBUG] [Thread-213030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:36.745 [DEBUG] [Thread-213031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:37.768 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:21:51.780 [DEBUG] [Thread-213032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:02.849 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:02.850 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:06.813 [DEBUG] [Thread-213033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:21.851 [DEBUG] [Thread-213034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:34.195 [DEBUG] [Thread-213035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:36.888 [DEBUG] [Thread-213036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:22:51.924 [DEBUG] [Thread-213037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:03.048 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:03.049 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:06.959 [DEBUG] [Thread-213038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:11.131 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:21.992 [DEBUG] [Thread-213039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:29.976 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T23:23:34.251 [DEBUG] [Thread-213040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:37.026 [DEBUG] [Thread-213041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:52.062 [DEBUG] [Thread-213042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:23:59.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:23:59.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:24:00.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:24:02.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 23, 23), 11.1, 47.49, 0.0, 24.07, 14.72, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:24:02.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:23:23
2026-02-15T23:24:02.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:24:02.671 [DEBUG] [Thread-213043] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-15T23:24:02.672 [DEBUG] [Thread-213043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:24:02.694 [DEBUG] [Thread-213043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:24:02.694 [INFO] [Thread-213043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] client lang: <none>
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] server lang: <none>
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] kex follows: False
2026-02-15T23:24:02.696 [DEBUG] [Thread-213043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:24:02.697 [DEBUG] [Thread-213043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:24:02.697 [DEBUG] [Thread-213043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:24:02.697 [DEBUG] [Thread-213043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:24:02.697 [DEBUG] [Thread-213043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:24:02.697 [DEBUG] [Thread-213043] [transport.py] [_log()] Compression: none
2026-02-15T23:24:02.697 [DEBUG] [Thread-213043] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:24:02.713 [DEBUG] [Thread-213043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:24:02.714 [DEBUG] [Thread-213043] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:24:02.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:24:02.715 [DEBUG] [Thread-213043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:24:02.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:24:02.719 [DEBUG] [Thread-213043] [transport.py] [_log()] userauth is OK
2026-02-15T23:24:02.719 [DEBUG] [Thread-213043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:24:02.720 [DEBUG] [Thread-213043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:24:02.720 [DEBUG] [Thread-213043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:24:02.720 [DEBUG] [Thread-213043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:24:02.739 [INFO] [Thread-213043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:24:02.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:24:03.247 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:03.248 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:03.381 [DEBUG] [Thread-213043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:24:03.381 [DEBUG] [Thread-213043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:24:03.381 [DEBUG] [Thread-213043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:24:03.422 [DEBUG] [Thread-213043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:24:03.422 [DEBUG] [Thread-213043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:24:03.426 [DEBUG] [Thread-213043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:24:03.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:24:03.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:24:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:24:03.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:24:03.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:24:03.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:24:03.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:24:03.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:24:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:24:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.891421 -999.00  +14.70  16.78     52   +5.00 1 1 1 1 1     0    0 9.15 -23.26 ZNESW 17.3 16.8 152.0 23.0 14.9 -24.2 14.8 -23.3 14.6 -22.1 14.9 -23.4
2026-02-15T23:24:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:24:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:24:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.891421
2026-02-15T23:24:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:24:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:24:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:24:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:24:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:24:03.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:23:23', tmtdew=11.1, humidity=47.49, cloud=0.0, wind=24.07, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:23:59', seeing=1.17, atlas_timestamp='2026-02-15T21:23:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.04974999999999952, -0.03474999999999895, -0.01750000000000007, -0.02549999999999919, -0.003750000000000142, 0.0009999999999994458, 0.01925000000000132, -0.03500000000000014, 0.0009999999999994458, -0.09475000000000122, -0.022999999999999687, 0.042500000000000426, 0.014249999999998764, 0.036999999999999034, -0.0070000000000014495, 0.03125, 0.041499999999999204, -0.009000000000000341, 0.013249999999999318, 0.03199999999999825, -0.007250000000000867, -0.040749999999999176, -0.025249999999999773, 0.03599999999999959, 0.00849999999999973, 0.008250000000000313, -0.02149999999999963, 0.07600000000000051, 0.07200000000000095, 0.015000000000000568, 0.02450000000000152, -0.003750000000000142], zp_timestamp='2026-02-15T21:22:00')
2026-02-15T23:24:03.452 [DEBUG] [Thread-213043] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:24:03.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:24:03.547 [DEBUG] [Thread-213046] [transport.py] [_log()] starting thread (client mode): 0xa81d4cd0
2026-02-15T23:24:03.547 [DEBUG] [Thread-213046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:24:03.561 [DEBUG] [Thread-213046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:24:03.562 [INFO] [Thread-213046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:03.569 [DEBUG] [Thread-213046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] client lang: <none>
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] server lang: <none>
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] kex follows: False
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] Compression: none
2026-02-15T23:24:03.570 [DEBUG] [Thread-213046] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:24:03.630 [DEBUG] [Thread-213046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:24:03.631 [DEBUG] [Thread-213046] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:24:03.631 [DEBUG] [Thread-213046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:24:03.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:24:03.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:24:03.686 [DEBUG] [Thread-213046] [transport.py] [_log()] userauth is OK
2026-02-15T23:24:03.687 [DEBUG] [Thread-213046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:24:03.687 [DEBUG] [Thread-213046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:24:03.687 [DEBUG] [Thread-213046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:24:03.687 [DEBUG] [Thread-213046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:24:03.706 [INFO] [Thread-213046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:24:03.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:24:03.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:24:04.538 [DEBUG] [Thread-213046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:24:04.538 [DEBUG] [Thread-213046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:24:04.586 [DEBUG] [Thread-213046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:24:04.587 [DEBUG] [Thread-213046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:24:04.596 [DEBUG] [Thread-213046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:24:04.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:24:04.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:24:04.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:24:04.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:24:04.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:24:04.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:24:04.632 [DEBUG] [Thread-213046] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:24:07.098 [DEBUG] [Thread-213048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:22.151 [DEBUG] [Thread-213049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:34.311 [DEBUG] [Thread-213050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:24:34.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:24:34.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:24:36.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 23, 59), 11.1, 47.49, 0.0, 24.16, 14.71, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:24:36.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:23:59
2026-02-15T23:24:36.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:24:37.083 [DEBUG] [Thread-213051] [transport.py] [_log()] starting thread (client mode): 0xa2dc1390
2026-02-15T23:24:37.083 [DEBUG] [Thread-213051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:24:37.102 [DEBUG] [Thread-213051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:24:37.102 [INFO] [Thread-213051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] client lang: <none>
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] server lang: <none>
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] kex follows: False
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] Compression: none
2026-02-15T23:24:37.104 [DEBUG] [Thread-213051] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:24:37.121 [DEBUG] [Thread-213051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:24:37.121 [DEBUG] [Thread-213051] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:24:37.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:24:37.122 [DEBUG] [Thread-213051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:24:37.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:24:37.124 [DEBUG] [Thread-213051] [transport.py] [_log()] userauth is OK
2026-02-15T23:24:37.124 [DEBUG] [Thread-213051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:24:37.124 [DEBUG] [Thread-213051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:24:37.124 [DEBUG] [Thread-213051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:24:37.125 [DEBUG] [Thread-213051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:24:37.160 [INFO] [Thread-213051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:24:37.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:24:37.186 [DEBUG] [Thread-213053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:37.788 [DEBUG] [Thread-213051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:24:37.789 [DEBUG] [Thread-213051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:24:37.789 [DEBUG] [Thread-213051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:24:37.829 [DEBUG] [Thread-213051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:24:37.830 [DEBUG] [Thread-213051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:24:37.833 [DEBUG] [Thread-213051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:24:37.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:24:37.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:24:37.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:24:37.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:24:37.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:24:37.857 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:24:37.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:24:37.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:24:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:24:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.891769 -999.00  +14.70  15.69     52   +5.00 1 1 1 1 1     0    0 9.50 -19.54 ZNESW 16.0 15.7 143.4 22.3 14.9 -24.5 14.8 -23.4 14.6 -22.2 14.9 -23.5
2026-02-15T23:24:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:24:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:24:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.891769
2026-02-15T23:24:37.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:24:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:24:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:24:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:24:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:24:37.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:23:59', tmtdew=11.1, humidity=47.49, cloud=0.0, wind=24.16, temperature=14.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:23:59', seeing=1.17, atlas_timestamp='2026-02-15T21:24:08.842', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.04974999999999952, -0.03474999999999895, -0.01750000000000007, -0.02549999999999919, -0.003750000000000142, 0.0009999999999994458, 0.01925000000000132, -0.03500000000000014, 0.0009999999999994458, -0.09475000000000122, -0.022999999999999687, 0.042500000000000426, 0.014249999999998764, 0.036999999999999034, -0.0070000000000014495, 0.03125, 0.041499999999999204, -0.009000000000000341, 0.013249999999999318, 0.03199999999999825, -0.007250000000000867, -0.040749999999999176, -0.025249999999999773, 0.03599999999999959, 0.00849999999999973, 0.008250000000000313, -0.02149999999999963, 0.07600000000000051, 0.07200000000000095, 0.015000000000000568, 0.02450000000000152, -0.003750000000000142], zp_timestamp='2026-02-15T21:22:00')
2026-02-15T23:24:37.860 [DEBUG] [Thread-213051] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:24:37.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:24:37.954 [DEBUG] [Thread-213055] [transport.py] [_log()] starting thread (client mode): 0xa2d56fb0
2026-02-15T23:24:37.954 [DEBUG] [Thread-213055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:24:37.968 [DEBUG] [Thread-213055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:24:37.968 [INFO] [Thread-213055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] client lang: <none>
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] server lang: <none>
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] kex follows: False
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:24:37.976 [DEBUG] [Thread-213055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:24:37.977 [DEBUG] [Thread-213055] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:24:37.977 [DEBUG] [Thread-213055] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:24:37.977 [DEBUG] [Thread-213055] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:24:37.977 [DEBUG] [Thread-213055] [transport.py] [_log()] Compression: none
2026-02-15T23:24:37.977 [DEBUG] [Thread-213055] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:24:38.033 [DEBUG] [Thread-213055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:24:38.034 [DEBUG] [Thread-213055] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:24:38.035 [DEBUG] [Thread-213055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:24:38.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:24:38.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:24:38.094 [DEBUG] [Thread-213055] [transport.py] [_log()] userauth is OK
2026-02-15T23:24:38.095 [DEBUG] [Thread-213055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:24:38.095 [DEBUG] [Thread-213055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:24:38.095 [DEBUG] [Thread-213055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:24:38.095 [DEBUG] [Thread-213055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:24:38.117 [INFO] [Thread-213055] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:24:38.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:24:38.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:24:38.954 [DEBUG] [Thread-213055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:24:38.954 [DEBUG] [Thread-213055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:24:39.001 [DEBUG] [Thread-213055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:24:39.002 [DEBUG] [Thread-213055] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:24:39.011 [DEBUG] [Thread-213055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:24:39.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:24:39.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:24:39.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:24:39.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:24:39.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:24:39.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:24:39.048 [DEBUG] [Thread-213055] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:24:44.712 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:24:52.221 [DEBUG] [Thread-213057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:03.451 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:03.452 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:07.273 [DEBUG] [Thread-213058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:09.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:25:09.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:25:09.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:25:11.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 24, 34), 11.19, 47.01, 0.0, 25.3, 14.88, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:25:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:24:34
2026-02-15T23:25:12.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:25:12.171 [DEBUG] [Thread-213059] [transport.py] [_log()] starting thread (client mode): 0xa2d6cee0
2026-02-15T23:25:12.172 [DEBUG] [Thread-213059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:25:12.191 [DEBUG] [Thread-213059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:25:12.191 [INFO] [Thread-213059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:25:12.194 [DEBUG] [Thread-213059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] client lang: <none>
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] server lang: <none>
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] kex follows: False
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] Compression: none
2026-02-15T23:25:12.195 [DEBUG] [Thread-213059] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:25:12.203 [DEBUG] [Thread-213059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:25:12.203 [DEBUG] [Thread-213059] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:25:12.204 [DEBUG] [Thread-213059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:25:12.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:25:12.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:25:12.205 [DEBUG] [Thread-213059] [transport.py] [_log()] userauth is OK
2026-02-15T23:25:12.206 [DEBUG] [Thread-213059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:25:12.206 [DEBUG] [Thread-213059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:25:12.206 [DEBUG] [Thread-213059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:25:12.206 [DEBUG] [Thread-213059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:25:12.224 [INFO] [Thread-213059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:25:12.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:25:12.994 [DEBUG] [Thread-213059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:25:12.995 [DEBUG] [Thread-213059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:25:12.995 [DEBUG] [Thread-213059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:25:13.035 [DEBUG] [Thread-213059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:25:13.035 [DEBUG] [Thread-213059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:25:13.038 [DEBUG] [Thread-213059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:25:13.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:25:13.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:25:13.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:25:13.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:25:13.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:25:13.058 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:25:13.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:25:13.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:25:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:25:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.892116 -999.00  +14.60  18.59     52   +5.00 1 1 1 1 1     0    0 9.13 -18.57 ZNESW 22.8 18.6 158.2 24.4 14.9 -24.4 14.8 -23.3 14.6 -22.2 14.9 -23.5
2026-02-15T23:25:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:25:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:25:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.892116
2026-02-15T23:25:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:25:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:25:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:25:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:25:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:25:13.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:24:34', tmtdew=11.19, humidity=47.01, cloud=0.0, wind=25.3, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:24:35', seeing=1.21, atlas_timestamp='2026-02-15T21:24:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.04974999999999952, -0.03474999999999895, -0.01750000000000007, -0.02549999999999919, -0.003750000000000142, 0.0009999999999994458, 0.01925000000000132, -0.03500000000000014, 0.0009999999999994458, -0.09475000000000122, -0.022999999999999687, 0.042500000000000426, 0.014249999999998764, 0.036999999999999034, -0.0070000000000014495, 0.03125, 0.041499999999999204, -0.009000000000000341, 0.013249999999999318, 0.03199999999999825, -0.007250000000000867, -0.040749999999999176, -0.025249999999999773, 0.03599999999999959, 0.00849999999999973, 0.008250000000000313, -0.02149999999999963, 0.07600000000000051, 0.07200000000000095, 0.015000000000000568, 0.02450000000000152, -0.003750000000000142], zp_timestamp='2026-02-15T21:22:00')
2026-02-15T23:25:13.060 [DEBUG] [Thread-213059] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:25:13.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:25:13.154 [DEBUG] [Thread-213062] [transport.py] [_log()] starting thread (client mode): 0xa57d5ea0
2026-02-15T23:25:13.154 [DEBUG] [Thread-213062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:25:13.169 [DEBUG] [Thread-213062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:25:13.169 [INFO] [Thread-213062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:13.176 [DEBUG] [Thread-213062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] client lang: <none>
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] server lang: <none>
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] kex follows: False
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] Compression: none
2026-02-15T23:25:13.177 [DEBUG] [Thread-213062] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:25:13.234 [DEBUG] [Thread-213062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:25:13.235 [DEBUG] [Thread-213062] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:25:13.236 [DEBUG] [Thread-213062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:25:13.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:25:13.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:25:13.289 [DEBUG] [Thread-213062] [transport.py] [_log()] userauth is OK
2026-02-15T23:25:13.289 [DEBUG] [Thread-213062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:25:13.289 [DEBUG] [Thread-213062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:25:13.289 [DEBUG] [Thread-213062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:25:13.289 [DEBUG] [Thread-213062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:25:13.303 [INFO] [Thread-213062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:25:13.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:25:13.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:25:14.124 [DEBUG] [Thread-213062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:25:14.124 [DEBUG] [Thread-213062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:25:14.173 [DEBUG] [Thread-213062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:25:14.173 [DEBUG] [Thread-213062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:25:14.182 [DEBUG] [Thread-213062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:25:14.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:25:14.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:25:14.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:25:14.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:25:14.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:25:14.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:25:14.219 [DEBUG] [Thread-213062] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:25:22.305 [DEBUG] [Thread-213064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:34.386 [DEBUG] [Thread-213065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:37.358 [DEBUG] [Thread-213066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:25:44.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:25:44.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:25:44.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:25:46.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 25, 9), 11.06, 47.6, 0.0, 22.71, 14.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:25:46.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:25:09
2026-02-15T23:25:46.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:25:46.601 [DEBUG] [Thread-213067] [transport.py] [_log()] starting thread (client mode): 0xa5771900
2026-02-15T23:25:46.601 [DEBUG] [Thread-213067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:25:46.622 [DEBUG] [Thread-213067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:25:46.622 [INFO] [Thread-213067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:25:46.623 [DEBUG] [Thread-213067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:25:46.623 [DEBUG] [Thread-213067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:25:46.623 [DEBUG] [Thread-213067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:25:46.623 [DEBUG] [Thread-213067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:46.623 [DEBUG] [Thread-213067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:46.623 [DEBUG] [Thread-213067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] client lang: <none>
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] server lang: <none>
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] kex follows: False
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] Compression: none
2026-02-15T23:25:46.624 [DEBUG] [Thread-213067] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:25:46.632 [DEBUG] [Thread-213067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:25:46.633 [DEBUG] [Thread-213067] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:25:46.633 [DEBUG] [Thread-213067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:25:46.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:25:46.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:25:46.635 [DEBUG] [Thread-213067] [transport.py] [_log()] userauth is OK
2026-02-15T23:25:46.635 [DEBUG] [Thread-213067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:25:46.635 [DEBUG] [Thread-213067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:25:46.635 [DEBUG] [Thread-213067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:25:46.635 [DEBUG] [Thread-213067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:25:46.652 [INFO] [Thread-213067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:25:46.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:25:47.238 [DEBUG] [Thread-213067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:25:47.238 [DEBUG] [Thread-213067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:25:47.239 [DEBUG] [Thread-213067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:25:47.279 [DEBUG] [Thread-213067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:25:47.279 [DEBUG] [Thread-213067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:25:47.282 [DEBUG] [Thread-213067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:25:47.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:25:47.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:25:47.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:25:47.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:25:47.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:25:47.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:25:47.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:25:47.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:25:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:25:47.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.892463 -999.00  +14.70  12.68     52   +5.00 1 1 1 1 1     0    0 9.37 -17.95 ZNESW 17.0 12.7 154.8 24.4 14.9 -24.3 14.8 -23.2 14.6 -22.1 14.9 -23.3
2026-02-15T23:25:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:25:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:25:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.892463
2026-02-15T23:25:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:25:47.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:25:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:25:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:25:47.306 [DEBUG] [Thread-213067] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:25:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:25:47.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:25:09', tmtdew=11.06, humidity=47.6, cloud=0.0, wind=22.71, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:25:10', seeing=1.64, atlas_timestamp='2026-02-15T21:25:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.04974999999999952, -0.03474999999999895, -0.01750000000000007, -0.02549999999999919, -0.003750000000000142, 0.0009999999999994458, 0.01925000000000132, -0.03500000000000014, 0.0009999999999994458, -0.09475000000000122, -0.022999999999999687, 0.042500000000000426, 0.014249999999998764, 0.036999999999999034, -0.0070000000000014495, 0.03125, 0.041499999999999204, -0.009000000000000341, 0.013249999999999318, 0.03199999999999825, -0.007250000000000867, -0.040749999999999176, -0.025249999999999773, 0.03599999999999959, 0.00849999999999973, 0.008250000000000313, -0.02149999999999963, 0.07600000000000051, 0.07200000000000095, 0.015000000000000568, 0.02450000000000152, -0.003750000000000142], zp_timestamp='2026-02-15T21:22:00')
2026-02-15T23:25:47.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:25:47.403 [DEBUG] [Thread-213070] [transport.py] [_log()] starting thread (client mode): 0xa2dc3b20
2026-02-15T23:25:47.403 [DEBUG] [Thread-213070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:25:47.417 [DEBUG] [Thread-213070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:25:47.417 [INFO] [Thread-213070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:25:47.425 [DEBUG] [Thread-213070] [transport.py] [_log()] client lang: <none>
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] server lang: <none>
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] kex follows: False
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] Compression: none
2026-02-15T23:25:47.426 [DEBUG] [Thread-213070] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:25:47.482 [DEBUG] [Thread-213070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:25:47.482 [DEBUG] [Thread-213070] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:25:47.483 [DEBUG] [Thread-213070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:25:47.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:25:47.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:25:47.539 [DEBUG] [Thread-213070] [transport.py] [_log()] userauth is OK
2026-02-15T23:25:47.540 [DEBUG] [Thread-213070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:25:47.540 [DEBUG] [Thread-213070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:25:47.540 [DEBUG] [Thread-213070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:25:47.540 [DEBUG] [Thread-213070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:25:47.559 [INFO] [Thread-213070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:25:47.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:25:47.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:25:48.399 [DEBUG] [Thread-213070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:25:48.399 [DEBUG] [Thread-213070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:25:48.447 [DEBUG] [Thread-213070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:25:48.448 [DEBUG] [Thread-213070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:25:48.457 [DEBUG] [Thread-213070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:25:48.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:25:48.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')
2026-02-15T23:25:48.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:25:48.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:25:48.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:25:48.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:25:48.494 [DEBUG] [Thread-213070] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:25:52.400 [DEBUG] [Thread-213072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:03.656 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:03.657 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:07.447 [DEBUG] [Thread-213073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:18.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:26:18.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:26:18.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:26:19.027 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:20.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 25, 46), 11.02, 47.6, 0.0, 28.41, 14.64, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:26:20.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:25:46
2026-02-15T23:26:20.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:26:20.907 [DEBUG] [Thread-213074] [transport.py] [_log()] starting thread (client mode): 0xa2d6c670
2026-02-15T23:26:20.907 [DEBUG] [Thread-213074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:26:20.928 [DEBUG] [Thread-213074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:26:20.928 [INFO] [Thread-213074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] client lang: <none>
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] server lang: <none>
2026-02-15T23:26:20.931 [DEBUG] [Thread-213074] [transport.py] [_log()] kex follows: False
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] Compression: none
2026-02-15T23:26:20.932 [DEBUG] [Thread-213074] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:26:20.950 [DEBUG] [Thread-213074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:26:20.951 [DEBUG] [Thread-213074] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:26:20.951 [DEBUG] [Thread-213074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:26:20.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:26:20.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:26:20.953 [DEBUG] [Thread-213074] [transport.py] [_log()] userauth is OK
2026-02-15T23:26:20.953 [DEBUG] [Thread-213074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:26:20.954 [DEBUG] [Thread-213074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:26:20.954 [DEBUG] [Thread-213074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:26:20.954 [DEBUG] [Thread-213074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:26:20.978 [INFO] [Thread-213074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:26:20.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:26:21.624 [DEBUG] [Thread-213074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:26:21.624 [DEBUG] [Thread-213074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:26:21.625 [DEBUG] [Thread-213074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:26:21.665 [DEBUG] [Thread-213074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:26:21.665 [DEBUG] [Thread-213074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:26:21.668 [DEBUG] [Thread-213074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:26:21.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:26:21.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:26:21.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:26:21.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:26:21.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:26:21.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:26:21.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:26:21.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.892810 -999.00  +14.70  14.78     52   +5.00 1 1 1 1 1     0    0 8.95 -16.66 ZNESW 18.5 14.8 157.4 24.8 14.9 -24.3 14.8 -23.3 14.6 -22.0 14.9 -23.3
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.892810
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:26:21.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:26:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:26:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:26:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:26:21.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:25:46', tmtdew=11.02, humidity=47.6, cloud=0.0, wind=28.41, temperature=14.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:25:46', seeing=1.35, atlas_timestamp='2026-02-15T21:25:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05525000000000091, -0.04974999999999952, -0.03474999999999895, -0.01750000000000007, -0.02549999999999919, -0.003750000000000142, 0.0009999999999994458, 0.01925000000000132, -0.03500000000000014, 0.0009999999999994458, -0.09475000000000122, -0.022999999999999687, 0.042500000000000426, 0.014249999999998764, 0.036999999999999034, -0.0070000000000014495, 0.03125, 0.041499999999999204, -0.009000000000000341, 0.013249999999999318, 0.03199999999999825, -0.007250000000000867, -0.040749999999999176, -0.025249999999999773, 0.03599999999999959, 0.00849999999999973, 0.008250000000000313, -0.02149999999999963, 0.07600000000000051, 0.07200000000000095, 0.015000000000000568, 0.02450000000000152, -0.003750000000000142], zp_timestamp='2026-02-15T21:22:00')
2026-02-15T23:26:21.687 [DEBUG] [Thread-213074] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:26:21.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:26:21.784 [DEBUG] [Thread-213077] [transport.py] [_log()] starting thread (client mode): 0xa2d57190
2026-02-15T23:26:21.784 [DEBUG] [Thread-213077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:26:21.799 [DEBUG] [Thread-213077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:26:21.799 [INFO] [Thread-213077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] client lang: <none>
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] server lang: <none>
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] kex follows: False
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:26:21.807 [DEBUG] [Thread-213077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:26:21.808 [DEBUG] [Thread-213077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:26:21.808 [DEBUG] [Thread-213077] [transport.py] [_log()] Compression: none
2026-02-15T23:26:21.808 [DEBUG] [Thread-213077] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:26:21.867 [DEBUG] [Thread-213077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:26:21.868 [DEBUG] [Thread-213077] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:26:21.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:26:21.869 [DEBUG] [Thread-213077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:26:21.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:26:21.926 [DEBUG] [Thread-213077] [transport.py] [_log()] userauth is OK
2026-02-15T23:26:21.927 [DEBUG] [Thread-213077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:26:21.927 [DEBUG] [Thread-213077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:26:21.927 [DEBUG] [Thread-213077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:26:21.927 [DEBUG] [Thread-213077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:26:21.946 [INFO] [Thread-213077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:26:21.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:26:21.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:26:22.496 [DEBUG] [Thread-213079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:22.754 [DEBUG] [Thread-213077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:26:22.755 [DEBUG] [Thread-213077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:26:22.807 [DEBUG] [Thread-213077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:26:22.807 [DEBUG] [Thread-213077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:26:22.819 [DEBUG] [Thread-213077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:26:22.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:26:22.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:26:22.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:26:22.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:26:22.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:26:22.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:26:22.867 [DEBUG] [Thread-213077] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:26:34.442 [DEBUG] [Thread-213080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:37.547 [DEBUG] [Thread-213081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:52.583 [DEBUG] [Thread-213082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:26:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:26:52.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:26:52.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:26:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 26, 21), 11.03, 47.54, 0.0, 28.3, 14.61, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:26:55.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:26:21
2026-02-15T23:26:55.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:26:55.778 [DEBUG] [Thread-213083] [transport.py] [_log()] starting thread (client mode): 0xa2d55780
2026-02-15T23:26:55.778 [DEBUG] [Thread-213083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:26:55.798 [DEBUG] [Thread-213083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:26:55.799 [INFO] [Thread-213083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] client lang: <none>
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] server lang: <none>
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] kex follows: False
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] Compression: none
2026-02-15T23:26:55.800 [DEBUG] [Thread-213083] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:26:55.813 [DEBUG] [Thread-213083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:26:55.814 [DEBUG] [Thread-213083] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:26:55.814 [DEBUG] [Thread-213083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:26:55.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:26:55.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:26:55.816 [DEBUG] [Thread-213083] [transport.py] [_log()] userauth is OK
2026-02-15T23:26:55.816 [DEBUG] [Thread-213083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:26:55.816 [DEBUG] [Thread-213083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:26:55.816 [DEBUG] [Thread-213083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:26:55.817 [DEBUG] [Thread-213083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:26:55.852 [INFO] [Thread-213083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:26:55.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:26:56.611 [DEBUG] [Thread-213083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:26:56.611 [DEBUG] [Thread-213083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:26:56.612 [DEBUG] [Thread-213083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:26:56.652 [DEBUG] [Thread-213083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:26:56.652 [DEBUG] [Thread-213083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:26:56.655 [DEBUG] [Thread-213083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:26:56.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:26:56.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:26:56.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:26:56.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:26:56.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:26:56.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:26:56.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:26:56.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:26:56.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:26:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.893157 -999.00  +14.70  13.20     52   +5.00 1 1 1 1 1     0    0 9.33 -13.77 ZNESW 12.1 13.2 150.2 25.6 14.9 -24.3 14.8 -23.1 14.6 -22.0 14.9 -23.5
2026-02-15T23:26:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:26:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:26:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.893157
2026-02-15T23:26:56.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:26:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:26:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:26:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:26:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:26:56.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:26:21', tmtdew=11.03, humidity=47.54, cloud=0.0, wind=28.3, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:26:21', seeing=1.13, atlas_timestamp='2026-02-15T21:26:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:25:00')
2026-02-15T23:26:56.681 [DEBUG] [Thread-213083] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:26:56.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:26:56.777 [DEBUG] [Thread-213086] [transport.py] [_log()] starting thread (client mode): 0xa2d6eaa0
2026-02-15T23:26:56.777 [DEBUG] [Thread-213086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:26:56.792 [DEBUG] [Thread-213086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:26:56.793 [INFO] [Thread-213086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:26:56.801 [DEBUG] [Thread-213086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] client lang: <none>
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] server lang: <none>
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] kex follows: False
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:26:56.802 [DEBUG] [Thread-213086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:26:56.803 [DEBUG] [Thread-213086] [transport.py] [_log()] Compression: none
2026-02-15T23:26:56.803 [DEBUG] [Thread-213086] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:26:56.858 [DEBUG] [Thread-213086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:26:56.859 [DEBUG] [Thread-213086] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:26:56.859 [DEBUG] [Thread-213086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:26:56.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:26:56.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:26:56.914 [DEBUG] [Thread-213086] [transport.py] [_log()] userauth is OK
2026-02-15T23:26:56.915 [DEBUG] [Thread-213086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:26:56.915 [DEBUG] [Thread-213086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:26:56.915 [DEBUG] [Thread-213086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:26:56.915 [DEBUG] [Thread-213086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:26:56.934 [INFO] [Thread-213086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:26:56.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:26:56.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:26:57.760 [DEBUG] [Thread-213086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:26:57.761 [DEBUG] [Thread-213086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:26:57.808 [DEBUG] [Thread-213086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:26:57.808 [DEBUG] [Thread-213086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:26:57.818 [DEBUG] [Thread-213086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:26:57.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:26:57.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:26:57.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:26:57.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:26:57.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:26:57.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:26:57.854 [DEBUG] [Thread-213086] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:27:03.858 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:03.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:07.616 [DEBUG] [Thread-213088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:22.670 [DEBUG] [Thread-213089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:27.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:27:27.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:27:27.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:27:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 26, 56), 11.0, 47.67, 0.0, 23.73, 14.66, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:27:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:26:56
2026-02-15T23:27:30.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:27:30.844 [DEBUG] [Thread-213090] [transport.py] [_log()] starting thread (client mode): 0xa5773400
2026-02-15T23:27:30.844 [DEBUG] [Thread-213090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:27:30.864 [DEBUG] [Thread-213090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:27:30.864 [INFO] [Thread-213090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] client lang: <none>
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] server lang: <none>
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] kex follows: False
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:27:30.867 [DEBUG] [Thread-213090] [transport.py] [_log()] Compression: none
2026-02-15T23:27:30.868 [DEBUG] [Thread-213090] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:27:30.886 [DEBUG] [Thread-213090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:27:30.887 [DEBUG] [Thread-213090] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:27:30.887 [DEBUG] [Thread-213090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:27:30.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:27:30.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:27:30.889 [DEBUG] [Thread-213090] [transport.py] [_log()] userauth is OK
2026-02-15T23:27:30.889 [DEBUG] [Thread-213090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:27:30.889 [DEBUG] [Thread-213090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:27:30.889 [DEBUG] [Thread-213090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:27:30.889 [DEBUG] [Thread-213090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:27:30.913 [INFO] [Thread-213090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:27:30.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:27:31.548 [DEBUG] [Thread-213090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:27:31.548 [DEBUG] [Thread-213090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:27:31.549 [DEBUG] [Thread-213090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:27:31.589 [DEBUG] [Thread-213090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:27:31.589 [DEBUG] [Thread-213090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:27:31.592 [DEBUG] [Thread-213090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:27:31.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:27:31.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:27:31.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:27:31.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:27:31.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:27:31.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:27:31.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:27:31.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:27:31.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.893852 -999.00  +14.60  16.16     52   +4.90 1 1 1 1 1     0    0 9.47 -11.74 ZNESW 18.7 16.2 143.2 20.9 14.9 -24.4 14.8 -23.4 14.5 -22.2 14.8 -23.5
2026-02-15T23:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.893852
2026-02-15T23:27:31.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:27:31.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:26:56', tmtdew=11.0, humidity=47.67, cloud=0.0, wind=23.73, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:26:56', seeing=1.37, atlas_timestamp='2026-02-15T21:27:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:25:00')
2026-02-15T23:27:31.615 [DEBUG] [Thread-213090] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:27:31.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:27:31.711 [DEBUG] [Thread-213093] [transport.py] [_log()] starting thread (client mode): 0xa2db6590
2026-02-15T23:27:31.711 [DEBUG] [Thread-213093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:27:31.727 [DEBUG] [Thread-213093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:27:31.728 [INFO] [Thread-213093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:27:31.735 [DEBUG] [Thread-213093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] client lang: <none>
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] server lang: <none>
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] kex follows: False
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] Compression: none
2026-02-15T23:27:31.736 [DEBUG] [Thread-213093] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:27:31.793 [DEBUG] [Thread-213093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:27:31.793 [DEBUG] [Thread-213093] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:27:31.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:27:31.795 [DEBUG] [Thread-213093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:27:31.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:27:31.850 [DEBUG] [Thread-213093] [transport.py] [_log()] userauth is OK
2026-02-15T23:27:31.850 [DEBUG] [Thread-213093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:27:31.850 [DEBUG] [Thread-213093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:27:31.850 [DEBUG] [Thread-213093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:27:31.850 [DEBUG] [Thread-213093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:27:31.869 [INFO] [Thread-213093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:27:31.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:27:31.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:27:32.707 [DEBUG] [Thread-213093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:27:32.708 [DEBUG] [Thread-213093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:27:32.756 [DEBUG] [Thread-213093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:27:32.756 [DEBUG] [Thread-213093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:27:32.765 [DEBUG] [Thread-213093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:27:32.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:27:32.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:27:32.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:27:32.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:27:32.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:27:32.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:27:32.799 [DEBUG] [Thread-213093] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:27:34.504 [DEBUG] [Thread-213095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:37.703 [DEBUG] [Thread-213096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:52.722 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:27:52.762 [DEBUG] [Thread-213097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:02.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:28:02.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:28:02.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:28:04.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:04.061 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:04.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 27, 32), 10.99, 47.7, 0.0, 21.88, 14.62, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:28:04.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:27:32
2026-02-15T23:28:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:28:05.453 [DEBUG] [Thread-213098] [transport.py] [_log()] starting thread (client mode): 0xa2d02440
2026-02-15T23:28:05.453 [DEBUG] [Thread-213098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:28:05.473 [DEBUG] [Thread-213098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:28:05.473 [INFO] [Thread-213098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] client lang: <none>
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] server lang: <none>
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] kex follows: False
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] Compression: none
2026-02-15T23:28:05.475 [DEBUG] [Thread-213098] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:28:05.484 [DEBUG] [Thread-213098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:28:05.484 [DEBUG] [Thread-213098] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:28:05.484 [DEBUG] [Thread-213098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:28:05.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:28:05.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:28:05.485 [DEBUG] [Thread-213098] [transport.py] [_log()] userauth is OK
2026-02-15T23:28:05.485 [DEBUG] [Thread-213098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:28:05.485 [DEBUG] [Thread-213098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:28:05.485 [DEBUG] [Thread-213098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:28:05.485 [DEBUG] [Thread-213098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:28:05.497 [INFO] [Thread-213098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:28:05.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:28:06.128 [DEBUG] [Thread-213098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:28:06.128 [DEBUG] [Thread-213098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:28:06.128 [DEBUG] [Thread-213098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:28:06.168 [DEBUG] [Thread-213098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:28:06.169 [DEBUG] [Thread-213098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:28:06.172 [DEBUG] [Thread-213098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:28:06.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:28:06.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:28:06.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:28:06.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:28:06.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:28:06.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:28:06.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:28:06.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:28:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:28:06.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.894199 -999.00  +14.60  19.89     52   +5.00 1 1 1 1 1     0    0 9.39 -11.62 ZNESW 18.9 19.9 145.6 25.3 14.8 -24.4 14.8 -23.3 14.6 -22.2 14.8 -23.4
2026-02-15T23:28:06.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:28:06.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:28:06.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.894199
2026-02-15T23:28:06.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:28:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:28:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:28:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:28:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:28:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:27:32', tmtdew=10.99, humidity=47.7, cloud=0.0, wind=21.88, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:27:32', seeing=1.27, atlas_timestamp='2026-02-15T21:27:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:25:00')
2026-02-15T23:28:06.201 [DEBUG] [Thread-213098] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:28:06.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:28:06.300 [DEBUG] [Thread-213101] [transport.py] [_log()] starting thread (client mode): 0xa2d01cc0
2026-02-15T23:28:06.300 [DEBUG] [Thread-213101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:28:06.315 [DEBUG] [Thread-213101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:28:06.315 [INFO] [Thread-213101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:28:06.323 [DEBUG] [Thread-213101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:06.324 [DEBUG] [Thread-213101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] client lang: <none>
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] server lang: <none>
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] kex follows: False
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:28:06.325 [DEBUG] [Thread-213101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:28:06.326 [DEBUG] [Thread-213101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:28:06.326 [DEBUG] [Thread-213101] [transport.py] [_log()] Compression: none
2026-02-15T23:28:06.326 [DEBUG] [Thread-213101] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:28:06.386 [DEBUG] [Thread-213101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:28:06.387 [DEBUG] [Thread-213101] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:28:06.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:28:06.388 [DEBUG] [Thread-213101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:28:06.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:28:06.443 [DEBUG] [Thread-213101] [transport.py] [_log()] userauth is OK
2026-02-15T23:28:06.443 [DEBUG] [Thread-213101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:28:06.443 [DEBUG] [Thread-213101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:28:06.444 [DEBUG] [Thread-213101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:28:06.444 [DEBUG] [Thread-213101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:28:06.463 [INFO] [Thread-213101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:28:06.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:28:06.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:28:07.266 [DEBUG] [Thread-213101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:28:07.266 [DEBUG] [Thread-213101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:28:07.314 [DEBUG] [Thread-213101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:28:07.315 [DEBUG] [Thread-213101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:28:07.324 [DEBUG] [Thread-213101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:28:07.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:28:07.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-02-15T23:28: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-02-15T23:28:07.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:28:07.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:28:07.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:28:07.366 [DEBUG] [Thread-213101] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:28:07.798 [DEBUG] [Thread-213103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:22.850 [DEBUG] [Thread-213104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:34.569 [DEBUG] [Thread-213105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:37.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:28:37.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:28:37.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:28:37.886 [DEBUG] [Thread-213106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:28:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 28, 7), 10.99, 47.69, 0.0, 23.87, 14.59, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:28:39.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:28:07
2026-02-15T23:28:40.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:28:40.218 [DEBUG] [Thread-213107] [transport.py] [_log()] starting thread (client mode): 0xa2d01570
2026-02-15T23:28:40.218 [DEBUG] [Thread-213107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:28:40.238 [DEBUG] [Thread-213107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:28:40.238 [INFO] [Thread-213107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:28:40.241 [DEBUG] [Thread-213107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] client lang: <none>
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] server lang: <none>
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] kex follows: False
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:28:40.242 [DEBUG] [Thread-213107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:28:40.243 [DEBUG] [Thread-213107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:28:40.243 [DEBUG] [Thread-213107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:28:40.243 [DEBUG] [Thread-213107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:28:40.243 [DEBUG] [Thread-213107] [transport.py] [_log()] Compression: none
2026-02-15T23:28:40.243 [DEBUG] [Thread-213107] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:28:40.261 [DEBUG] [Thread-213107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:28:40.262 [DEBUG] [Thread-213107] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:28:40.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:28:40.264 [DEBUG] [Thread-213107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:28:40.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:28:40.266 [DEBUG] [Thread-213107] [transport.py] [_log()] userauth is OK
2026-02-15T23:28:40.266 [DEBUG] [Thread-213107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:28:40.266 [DEBUG] [Thread-213107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:28:40.267 [DEBUG] [Thread-213107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:28:40.267 [DEBUG] [Thread-213107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:28:40.298 [INFO] [Thread-213107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:28:40.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:28:40.931 [DEBUG] [Thread-213107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:28:40.931 [DEBUG] [Thread-213107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:28:40.932 [DEBUG] [Thread-213107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:28:40.972 [DEBUG] [Thread-213107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:28:40.973 [DEBUG] [Thread-213107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:28:40.976 [DEBUG] [Thread-213107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:28:40.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:28:40.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:28:40.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:28:40.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:28:40.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:28:41.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:28:41.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:28:41.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:28:41.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:28:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.894546 -999.00  +14.60  17.85     52   +5.00 1 1 1 1 1     0    0 9.62 -10.94 ZNESW 15.8 17.9 155.2 27.9 14.9 -24.3 14.8 -23.3 14.6 -22.2 14.8 -23.4
2026-02-15T23:28:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:28:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:28:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.894546
2026-02-15T23:28:41.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:28:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:28:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:28:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:28:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:28:41.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:28:07', tmtdew=10.99, humidity=47.69, cloud=0.0, wind=23.87, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:28:08', seeing=1.36, atlas_timestamp='2026-02-15T21:28:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:25:00')
2026-02-15T23:28:41.005 [DEBUG] [Thread-213107] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:28:41.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:28:41.100 [DEBUG] [Thread-213110] [transport.py] [_log()] starting thread (client mode): 0xa57d5540
2026-02-15T23:28:41.101 [DEBUG] [Thread-213110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:28:41.114 [DEBUG] [Thread-213110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:28:41.114 [INFO] [Thread-213110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:41.124 [DEBUG] [Thread-213110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] client lang: <none>
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] server lang: <none>
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] kex follows: False
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:28:41.125 [DEBUG] [Thread-213110] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:28:41.126 [DEBUG] [Thread-213110] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:28:41.126 [DEBUG] [Thread-213110] [transport.py] [_log()] Compression: none
2026-02-15T23:28:41.126 [DEBUG] [Thread-213110] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:28:41.184 [DEBUG] [Thread-213110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:28:41.184 [DEBUG] [Thread-213110] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:28:41.185 [DEBUG] [Thread-213110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:28:41.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:28:41.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:28:41.242 [DEBUG] [Thread-213110] [transport.py] [_log()] userauth is OK
2026-02-15T23:28:41.242 [DEBUG] [Thread-213110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:28:41.242 [DEBUG] [Thread-213110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:28:41.243 [DEBUG] [Thread-213110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:28:41.243 [DEBUG] [Thread-213110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:28:41.262 [INFO] [Thread-213110] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:28:41.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:28:41.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:28:42.140 [DEBUG] [Thread-213110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:28:42.141 [DEBUG] [Thread-213110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:28:42.188 [DEBUG] [Thread-213110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:28:42.189 [DEBUG] [Thread-213110] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:28:42.198 [DEBUG] [Thread-213110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:28:42.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:28: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')
2026-02-15T23:28: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
2026-02-15T23:28:42.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:28:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:28:42.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:28:42.235 [DEBUG] [Thread-213110] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:28:52.923 [DEBUG] [Thread-213112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:04.264 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:04.265 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:07.982 [DEBUG] [Thread-213113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:12.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:29:12.239 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:29:12.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:29:14.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 28, 43), 10.97, 47.74, 0.0, 22.13, 14.54, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:29:14.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:28:43
2026-02-15T23:29:14.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:29:14.781 [DEBUG] [Thread-213114] [transport.py] [_log()] starting thread (client mode): 0xa2d01f90
2026-02-15T23:29:14.781 [DEBUG] [Thread-213114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:29:14.803 [DEBUG] [Thread-213114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:29:14.803 [INFO] [Thread-213114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:29:14.806 [DEBUG] [Thread-213114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:29:14.806 [DEBUG] [Thread-213114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] client lang: <none>
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] server lang: <none>
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] kex follows: False
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:29:14.807 [DEBUG] [Thread-213114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:29:14.808 [DEBUG] [Thread-213114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:29:14.808 [DEBUG] [Thread-213114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:29:14.808 [DEBUG] [Thread-213114] [transport.py] [_log()] Compression: none
2026-02-15T23:29:14.808 [DEBUG] [Thread-213114] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:29:14.826 [DEBUG] [Thread-213114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:29:14.828 [DEBUG] [Thread-213114] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:29:14.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:29:14.829 [DEBUG] [Thread-213114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:29:14.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:29:14.831 [DEBUG] [Thread-213114] [transport.py] [_log()] userauth is OK
2026-02-15T23:29:14.831 [DEBUG] [Thread-213114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:29:14.831 [DEBUG] [Thread-213114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:29:14.831 [DEBUG] [Thread-213114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:29:14.831 [DEBUG] [Thread-213114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:29:14.856 [INFO] [Thread-213114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:29:14.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:29:15.482 [DEBUG] [Thread-213114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:29:15.483 [DEBUG] [Thread-213114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:29:15.483 [DEBUG] [Thread-213114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:29:15.523 [DEBUG] [Thread-213114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:29:15.524 [DEBUG] [Thread-213114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:29:15.527 [DEBUG] [Thread-213114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:29:15.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:29:15.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:29:15.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:29:15.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:29:15.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:29:15.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:29:15.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:29:15.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:29:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:29:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.894893 -999.00  +14.60  17.27     52   +5.00 1 1 1 1 1     0    0 9.26 -11.37 ZNESW 21.7 17.3 154.4 24.7 14.8 -24.3 14.8 -23.3 14.5 -22.2 14.8 -23.4
2026-02-15T23:29:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:29:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:29:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.894893
2026-02-15T23:29:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:29:15.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:29:15.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:29:15.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:29:15.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:29:15.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:28:43', tmtdew=10.97, humidity=47.74, cloud=0.0, wind=22.13, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:28:43', seeing=1.39, atlas_timestamp='2026-02-15T21:28:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:25:00')
2026-02-15T23:29:15.553 [DEBUG] [Thread-213114] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:29:15.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:29:15.648 [DEBUG] [Thread-213117] [transport.py] [_log()] starting thread (client mode): 0xa2d03850
2026-02-15T23:29:15.648 [DEBUG] [Thread-213117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:29:15.663 [DEBUG] [Thread-213117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:29:15.663 [INFO] [Thread-213117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:29:15.670 [DEBUG] [Thread-213117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] client lang: <none>
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] server lang: <none>
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] kex follows: False
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:29:15.671 [DEBUG] [Thread-213117] [transport.py] [_log()] Compression: none
2026-02-15T23:29:15.672 [DEBUG] [Thread-213117] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:29:15.729 [DEBUG] [Thread-213117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:29:15.730 [DEBUG] [Thread-213117] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:29:15.730 [DEBUG] [Thread-213117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:29:15.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:29:15.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:29:15.786 [DEBUG] [Thread-213117] [transport.py] [_log()] userauth is OK
2026-02-15T23:29:15.787 [DEBUG] [Thread-213117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:29:15.787 [DEBUG] [Thread-213117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:29:15.787 [DEBUG] [Thread-213117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:29:15.787 [DEBUG] [Thread-213117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:29:15.806 [INFO] [Thread-213117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:29:15.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:29:15.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:29:16.592 [DEBUG] [Thread-213117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:29:16.592 [DEBUG] [Thread-213117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:29:16.640 [DEBUG] [Thread-213117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:29:16.640 [DEBUG] [Thread-213117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:29:16.648 [DEBUG] [Thread-213117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:29:16.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:29:16.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:29:16.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:29:16.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:29:16.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:29:16.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:29:16.689 [DEBUG] [Thread-213117] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:29:23.017 [DEBUG] [Thread-213119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:26.453 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:34.642 [DEBUG] [Thread-213120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:38.066 [DEBUG] [Thread-213121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:29:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:29:46.694 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:29:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:29:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 29, 18), 10.97, 47.74, 0.0, 23.1, 14.51, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:29:48.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:29:18
2026-02-15T23:29:48.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:29:49.078 [DEBUG] [Thread-213122] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-15T23:29:49.078 [DEBUG] [Thread-213122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:29:49.099 [DEBUG] [Thread-213122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:29:49.099 [INFO] [Thread-213122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:49.102 [DEBUG] [Thread-213122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] client lang: <none>
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] server lang: <none>
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] kex follows: False
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] Compression: none
2026-02-15T23:29:49.103 [DEBUG] [Thread-213122] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:29:49.121 [DEBUG] [Thread-213122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:29:49.121 [DEBUG] [Thread-213122] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:29:49.121 [DEBUG] [Thread-213122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:29:49.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:29:49.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:29:49.123 [DEBUG] [Thread-213122] [transport.py] [_log()] userauth is OK
2026-02-15T23:29:49.123 [DEBUG] [Thread-213122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:29:49.124 [DEBUG] [Thread-213122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:29:49.124 [DEBUG] [Thread-213122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:29:49.124 [DEBUG] [Thread-213122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:29:49.148 [INFO] [Thread-213122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:29:49.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:29:49.763 [DEBUG] [Thread-213122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:29:49.763 [DEBUG] [Thread-213122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:29:49.763 [DEBUG] [Thread-213122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:29:49.804 [DEBUG] [Thread-213122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:29:49.804 [DEBUG] [Thread-213122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:29:49.806 [DEBUG] [Thread-213122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:29:49.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:29:49.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:29:49.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:29:49.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:29:49.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:29:49.824 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:29:49.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.895241 -999.00  +14.60  14.89     52   +5.00 1 1 1 1 1     0    0 9.29 -11.51 ZNESW 15.8 14.9 162.4 23.0 14.8 -24.3 14.8 -23.3 14.6 -22.2 14.8 -23.5
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.895241
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:29:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:29:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:29:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:29:49.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:29:18', tmtdew=10.97, humidity=47.74, cloud=0.0, wind=23.1, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:29:19', seeing=2.29, atlas_timestamp='2026-02-15T21:29:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:25:00')
2026-02-15T23:29:49.825 [DEBUG] [Thread-213122] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:29:49.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:29:49.910 [DEBUG] [Thread-213125] [transport.py] [_log()] starting thread (client mode): 0xa2dc3520
2026-02-15T23:29:49.910 [DEBUG] [Thread-213125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:29:49.929 [DEBUG] [Thread-213125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:29:49.929 [INFO] [Thread-213125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:29:49.939 [DEBUG] [Thread-213125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] client lang: <none>
2026-02-15T23:29:49.940 [DEBUG] [Thread-213125] [transport.py] [_log()] server lang: <none>
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] kex follows: False
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] Compression: none
2026-02-15T23:29:49.941 [DEBUG] [Thread-213125] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:29:49.999 [DEBUG] [Thread-213125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:29:50.000 [DEBUG] [Thread-213125] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:29:50.000 [DEBUG] [Thread-213125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:29:50.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:29:50.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:29:50.058 [DEBUG] [Thread-213125] [transport.py] [_log()] userauth is OK
2026-02-15T23:29:50.059 [DEBUG] [Thread-213125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:29:50.059 [DEBUG] [Thread-213125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:29:50.059 [DEBUG] [Thread-213125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:29:50.059 [DEBUG] [Thread-213125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:29:50.084 [INFO] [Thread-213125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:29:50.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:29:50.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:29:50.926 [DEBUG] [Thread-213125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:29:50.926 [DEBUG] [Thread-213125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:29:50.978 [DEBUG] [Thread-213125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:29:50.978 [DEBUG] [Thread-213125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:29:50.987 [DEBUG] [Thread-213125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:29:50.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:29:51.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:29:51.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:29:51.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:29:51.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:29:51.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:29:51.034 [DEBUG] [Thread-213125] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:29:53.101 [DEBUG] [Thread-213127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:04.467 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:04.469 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:08.151 [DEBUG] [Thread-213128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:21.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:30:21.053 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:30:21.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:30:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 29, 54), 10.85, 48.32, 0.0, 22.46, 14.46, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:30:22.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:29:54
2026-02-15T23:30:23.189 [DEBUG] [Thread-213129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:23.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:30:23.394 [DEBUG] [Thread-213130] [transport.py] [_log()] starting thread (client mode): 0xa2dc1180
2026-02-15T23:30:23.394 [DEBUG] [Thread-213130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:30:23.415 [DEBUG] [Thread-213130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:30:23.415 [INFO] [Thread-213130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:30:23.418 [DEBUG] [Thread-213130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] client lang: <none>
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] server lang: <none>
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] kex follows: False
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] Compression: none
2026-02-15T23:30:23.419 [DEBUG] [Thread-213130] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:30:23.437 [DEBUG] [Thread-213130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:30:23.437 [DEBUG] [Thread-213130] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:30:23.447 [DEBUG] [Thread-213130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:30:23.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:30:23.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:30:23.449 [DEBUG] [Thread-213130] [transport.py] [_log()] userauth is OK
2026-02-15T23:30:23.449 [DEBUG] [Thread-213130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:30:23.449 [DEBUG] [Thread-213130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:30:23.449 [DEBUG] [Thread-213130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:30:23.450 [DEBUG] [Thread-213130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:30:23.487 [INFO] [Thread-213130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:30:23.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:30:24.126 [DEBUG] [Thread-213130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:30:24.126 [DEBUG] [Thread-213130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:30:24.127 [DEBUG] [Thread-213130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:30:24.167 [DEBUG] [Thread-213130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:30:24.168 [DEBUG] [Thread-213130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:30:24.171 [DEBUG] [Thread-213130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:30:24.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:30:24.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:30:24.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:30:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:30:24.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:30:24.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:30:24.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:30:24.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:30:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:30:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.895588 -999.00  +14.60  22.80     52   +5.00 1 1 1 1 1     0    0 9.42 -11.98 ZNESW 21.4 22.8 153.8 28.0 14.8 -24.3 14.7 -23.3 14.5 -22.1 14.8 -23.4
2026-02-15T23:30:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:30:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:30:24.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.895588
2026-02-15T23:30:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:30:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:30:24.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:30:24.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:30:24.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:30:24.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:29:54', tmtdew=10.85, humidity=48.32, cloud=0.0, wind=22.46, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:29:54', seeing=1.77, atlas_timestamp='2026-02-15T21:29:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:28:00')
2026-02-15T23:30:24.199 [DEBUG] [Thread-213130] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:30:24.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:30:24.294 [DEBUG] [Thread-213133] [transport.py] [_log()] starting thread (client mode): 0xa2d6d570
2026-02-15T23:30:24.294 [DEBUG] [Thread-213133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:30:24.309 [DEBUG] [Thread-213133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:30:24.309 [INFO] [Thread-213133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:30:24.316 [DEBUG] [Thread-213133] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:24.317 [DEBUG] [Thread-213133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] client lang: <none>
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] server lang: <none>
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] kex follows: False
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:30:24.318 [DEBUG] [Thread-213133] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:30:24.319 [DEBUG] [Thread-213133] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:30:24.319 [DEBUG] [Thread-213133] [transport.py] [_log()] Compression: none
2026-02-15T23:30:24.319 [DEBUG] [Thread-213133] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:30:24.378 [DEBUG] [Thread-213133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:30:24.379 [DEBUG] [Thread-213133] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:30:24.379 [DEBUG] [Thread-213133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:30:24.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:30:24.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:30:24.438 [DEBUG] [Thread-213133] [transport.py] [_log()] userauth is OK
2026-02-15T23:30:24.439 [DEBUG] [Thread-213133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:30:24.439 [DEBUG] [Thread-213133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:30:24.439 [DEBUG] [Thread-213133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:30:24.439 [DEBUG] [Thread-213133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:30:24.461 [INFO] [Thread-213133] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:30:24.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:30:24.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:30:25.312 [DEBUG] [Thread-213133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:30:25.312 [DEBUG] [Thread-213133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:30:25.362 [DEBUG] [Thread-213133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:30:25.363 [DEBUG] [Thread-213133] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:30:25.372 [DEBUG] [Thread-213133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:30:25.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:30:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:30: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-02-15T23:30:25.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:30:25.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:30:25.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:30:25.417 [DEBUG] [Thread-213133] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:30:34.713 [DEBUG] [Thread-213135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:38.223 [DEBUG] [Thread-213136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:53.277 [DEBUG] [Thread-213137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:30:55.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:30:55.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:30: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-02-15T23:30:57.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 30, 29), 10.86, 48.29, 0.0, 22.73, 14.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:30:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:30:29
2026-02-15T23:30:57.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:30:58.008 [DEBUG] [Thread-213138] [transport.py] [_log()] starting thread (client mode): 0xa57d7a60
2026-02-15T23:30:58.008 [DEBUG] [Thread-213138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:30:58.028 [DEBUG] [Thread-213138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:30:58.028 [INFO] [Thread-213138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:30:58.031 [DEBUG] [Thread-213138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:30:58.031 [DEBUG] [Thread-213138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:30:58.031 [DEBUG] [Thread-213138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:30:58.031 [DEBUG] [Thread-213138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:58.031 [DEBUG] [Thread-213138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] client lang: <none>
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] server lang: <none>
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] kex follows: False
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] Compression: none
2026-02-15T23:30:58.032 [DEBUG] [Thread-213138] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:30:58.049 [DEBUG] [Thread-213138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:30:58.049 [DEBUG] [Thread-213138] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:30:58.050 [DEBUG] [Thread-213138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:30:58.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:30:58.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:30:58.094 [DEBUG] [Thread-213138] [transport.py] [_log()] userauth is OK
2026-02-15T23:30:58.094 [DEBUG] [Thread-213138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:30:58.094 [DEBUG] [Thread-213138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:30:58.094 [DEBUG] [Thread-213138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:30:58.095 [DEBUG] [Thread-213138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:30:58.115 [INFO] [Thread-213138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:30:58.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:30:58.740 [DEBUG] [Thread-213138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:30:58.741 [DEBUG] [Thread-213138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:30:58.741 [DEBUG] [Thread-213138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:30:58.781 [DEBUG] [Thread-213138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:30:58.782 [DEBUG] [Thread-213138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:30:58.785 [DEBUG] [Thread-213138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:30:58.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:30:58.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:30:58.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:30:58.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:30:58.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:30:58.809 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:30:58.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:30:58.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:30:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:30:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.896282 -999.00  +14.60  15.36     52   +5.00 1 1 1 1 1     0    0 9.40 -12.75 ZNESW 14.0 15.4 152.6 21.9 14.8 -24.4 14.8 -23.4 14.5 -22.1 14.8 -23.4
2026-02-15T23:30:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:30:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:30:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.896282
2026-02-15T23:30:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:30:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:30:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:30:58.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:30:58.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:30:58.812 [DEBUG] [Thread-213138] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:30:58.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:30:29', tmtdew=10.86, humidity=48.29, cloud=0.0, wind=22.73, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:30:29', seeing=1.18, atlas_timestamp='2026-02-15T21:30:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:28:00')
2026-02-15T23:30: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-02-15T23:30:58.909 [DEBUG] [Thread-213141] [transport.py] [_log()] starting thread (client mode): 0xa2dc24a0
2026-02-15T23:30:58.910 [DEBUG] [Thread-213141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:30:58.924 [DEBUG] [Thread-213141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:30:58.925 [INFO] [Thread-213141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:30:58.932 [DEBUG] [Thread-213141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:30:58.932 [DEBUG] [Thread-213141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:30:58.932 [DEBUG] [Thread-213141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:30:58.932 [DEBUG] [Thread-213141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] client lang: <none>
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] server lang: <none>
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] kex follows: False
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] Compression: none
2026-02-15T23:30:58.933 [DEBUG] [Thread-213141] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:30:58.990 [DEBUG] [Thread-213141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:30:58.991 [DEBUG] [Thread-213141] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:30:58.991 [DEBUG] [Thread-213141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:30:58.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:30:58.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:30:59.046 [DEBUG] [Thread-213141] [transport.py] [_log()] userauth is OK
2026-02-15T23:30:59.046 [DEBUG] [Thread-213141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:30:59.046 [DEBUG] [Thread-213141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:30:59.046 [DEBUG] [Thread-213141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:30:59.046 [DEBUG] [Thread-213141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:30:59.066 [INFO] [Thread-213141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:30:59.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:30:59.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:30:59.866 [DEBUG] [Thread-213141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:30:59.866 [DEBUG] [Thread-213141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:30:59.914 [DEBUG] [Thread-213141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:30:59.914 [DEBUG] [Thread-213141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:30:59.922 [DEBUG] [Thread-213141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:30:59.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:30:59.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:30:59.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:30:59.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:30:59.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:30:59.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:30:59.955 [DEBUG] [Thread-213141] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:31:00.113 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:04.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:04.670 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:08.316 [DEBUG] [Thread-213143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:23.376 [DEBUG] [Thread-213144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:31:29.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:31:29.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:31:31.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 31, 4), 10.86, 48.27, 0.0, 21.62, 14.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:31:31.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:31:04
2026-02-15T23:31:32.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:31:32.495 [DEBUG] [Thread-213145] [transport.py] [_log()] starting thread (client mode): 0xa2dc1060
2026-02-15T23:31:32.496 [DEBUG] [Thread-213145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:31:32.515 [DEBUG] [Thread-213145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:31:32.515 [INFO] [Thread-213145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:31:32.518 [DEBUG] [Thread-213145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:31:32.518 [DEBUG] [Thread-213145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:31:32.518 [DEBUG] [Thread-213145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:31:32.518 [DEBUG] [Thread-213145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:31:32.518 [DEBUG] [Thread-213145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] client lang: <none>
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] server lang: <none>
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] kex follows: False
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] Compression: none
2026-02-15T23:31:32.519 [DEBUG] [Thread-213145] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:31:32.537 [DEBUG] [Thread-213145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:31:32.538 [DEBUG] [Thread-213145] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:31:32.538 [DEBUG] [Thread-213145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:31:32.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:31:32.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:31:32.541 [DEBUG] [Thread-213145] [transport.py] [_log()] userauth is OK
2026-02-15T23:31:32.541 [DEBUG] [Thread-213145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:31:32.541 [DEBUG] [Thread-213145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:31:32.541 [DEBUG] [Thread-213145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:31:32.542 [DEBUG] [Thread-213145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:31:32.574 [INFO] [Thread-213145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:31:32.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:31:33.230 [DEBUG] [Thread-213145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:31:33.231 [DEBUG] [Thread-213145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:31:33.231 [DEBUG] [Thread-213145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:31:33.272 [DEBUG] [Thread-213145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:31:33.272 [DEBUG] [Thread-213145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:31:33.274 [DEBUG] [Thread-213145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:31:33.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:31:33.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:31:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:31:33.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:31:33.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:31:33.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:31:33.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.896630 -999.00  +14.50  17.32     52   +5.00 1 1 1 1 1     0    0 9.40 -14.53 ZNESW 13.4 17.3 145.4 20.7 14.8 -24.3 14.8 -23.4 14.5 -22.3 14.8 -23.5
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.896630
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:31:33.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:31:04', tmtdew=10.86, humidity=48.27, cloud=0.0, wind=21.62, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:31:05', seeing=1.18, atlas_timestamp='2026-02-15T21:31:08.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:28:00')
2026-02-15T23:31:33.294 [DEBUG] [Thread-213145] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:31:33.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:31:33.379 [DEBUG] [Thread-213148] [transport.py] [_log()] starting thread (client mode): 0xa2d54e20
2026-02-15T23:31:33.379 [DEBUG] [Thread-213148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:31:33.394 [DEBUG] [Thread-213148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:31:33.394 [INFO] [Thread-213148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] client lang: <none>
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] server lang: <none>
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] kex follows: False
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] Compression: none
2026-02-15T23:31:33.402 [DEBUG] [Thread-213148] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:31:33.460 [DEBUG] [Thread-213148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:31:33.460 [DEBUG] [Thread-213148] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:31:33.461 [DEBUG] [Thread-213148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:31:33.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:31:33.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:31:33.517 [DEBUG] [Thread-213148] [transport.py] [_log()] userauth is OK
2026-02-15T23:31:33.517 [DEBUG] [Thread-213148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:31:33.517 [DEBUG] [Thread-213148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:31:33.517 [DEBUG] [Thread-213148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:31:33.517 [DEBUG] [Thread-213148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:31:33.531 [INFO] [Thread-213148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:31:33.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:31:33.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:31:34.365 [DEBUG] [Thread-213148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:31:34.365 [DEBUG] [Thread-213148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:31:34.413 [DEBUG] [Thread-213148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:31:34.413 [DEBUG] [Thread-213148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:31:34.422 [DEBUG] [Thread-213148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:31:34.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:31:34.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:31:34.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:31:34.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:31:34.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:31:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:31:34.459 [DEBUG] [Thread-213148] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:31:34.789 [DEBUG] [Thread-213150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:38.412 [DEBUG] [Thread-213151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:31:53.461 [DEBUG] [Thread-213152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:04.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:32:04.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:32:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:32:04.872 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:04.873 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 31, 39), 11.01, 47.61, 0.0, 18.6, 14.81, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:32:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:31:39
2026-02-15T23:32:07.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:32:07.447 [DEBUG] [Thread-213153] [transport.py] [_log()] starting thread (client mode): 0xa2d03be0
2026-02-15T23:32:07.447 [DEBUG] [Thread-213153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:32:07.468 [DEBUG] [Thread-213153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:32:07.468 [INFO] [Thread-213153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] client lang: <none>
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] server lang: <none>
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] kex follows: False
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] Compression: none
2026-02-15T23:32:07.472 [DEBUG] [Thread-213153] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:32:07.488 [DEBUG] [Thread-213153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:32:07.488 [DEBUG] [Thread-213153] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:32:07.489 [DEBUG] [Thread-213153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:32:07.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:32:07.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:32:07.490 [DEBUG] [Thread-213153] [transport.py] [_log()] userauth is OK
2026-02-15T23:32:07.490 [DEBUG] [Thread-213153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:32:07.490 [DEBUG] [Thread-213153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:32:07.490 [DEBUG] [Thread-213153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:32:07.490 [DEBUG] [Thread-213153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:32:07.509 [INFO] [Thread-213153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:32:07.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:32:08.115 [DEBUG] [Thread-213153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:32:08.116 [DEBUG] [Thread-213153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:32:08.116 [DEBUG] [Thread-213153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:32:08.156 [DEBUG] [Thread-213153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:32:08.156 [DEBUG] [Thread-213153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:32:08.159 [DEBUG] [Thread-213153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:32:08.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:32:08.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:32:08.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:32:08.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:32:08.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:32:08.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:32:08.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:32:08.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:32:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:32:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.896977 -999.00  +14.50  20.76     53   +5.00 1 1 1 1 1     0    0 9.18 -15.25 ZNESW 17.0 20.8 145.2 24.8 14.8 -24.3 14.7 -23.3 14.5 -22.2 14.8 -23.4
2026-02-15T23:32:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:32:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:32:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.896977
2026-02-15T23:32:08.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:32:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:32:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:32:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:32:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:32:08.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:31:39', tmtdew=11.01, humidity=47.61, cloud=0.0, wind=18.6, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:31:40', seeing=1.15, atlas_timestamp='2026-02-15T21:31:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:28:00')
2026-02-15T23:32:08.183 [DEBUG] [Thread-213153] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:32:08.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:32:08.275 [DEBUG] [Thread-213156] [transport.py] [_log()] starting thread (client mode): 0xa57d58a0
2026-02-15T23:32:08.276 [DEBUG] [Thread-213156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:32:08.290 [DEBUG] [Thread-213156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:32:08.290 [INFO] [Thread-213156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:08.298 [DEBUG] [Thread-213156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] client lang: <none>
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] server lang: <none>
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] kex follows: False
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] Compression: none
2026-02-15T23:32:08.299 [DEBUG] [Thread-213156] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:32:08.359 [DEBUG] [Thread-213156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:32:08.360 [DEBUG] [Thread-213156] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:32:08.360 [DEBUG] [Thread-213156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:32:08.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:32:08.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:32:08.418 [DEBUG] [Thread-213156] [transport.py] [_log()] userauth is OK
2026-02-15T23:32:08.419 [DEBUG] [Thread-213156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:32:08.419 [DEBUG] [Thread-213156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:32:08.419 [DEBUG] [Thread-213156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:32:08.419 [DEBUG] [Thread-213156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:32:08.438 [INFO] [Thread-213156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:32:08.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:32:08.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:32:08.498 [DEBUG] [Thread-213158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:09.275 [DEBUG] [Thread-213156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:32:09.275 [DEBUG] [Thread-213156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:32:09.326 [DEBUG] [Thread-213156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:32:09.327 [DEBUG] [Thread-213156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:32:09.338 [DEBUG] [Thread-213156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:32:09.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:32:09.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:32:09.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:32:09.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:32:09.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:32:09.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:32:09.387 [DEBUG] [Thread-213156] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:32:23.552 [DEBUG] [Thread-213159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:34.252 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:34.846 [DEBUG] [Thread-213160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:38.588 [DEBUG] [Thread-213161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:32:39.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:32:39.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:32:39.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:32:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 32, 16), 10.86, 47.77, 0.0, 22.76, 14.47, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:32:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:32:16
2026-02-15T23:32:41.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:32:42.117 [DEBUG] [Thread-213162] [transport.py] [_log()] starting thread (client mode): 0xa2d6c490
2026-02-15T23:32:42.117 [DEBUG] [Thread-213162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:32:42.138 [DEBUG] [Thread-213162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:32:42.138 [INFO] [Thread-213162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:32:42.141 [DEBUG] [Thread-213162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:32:42.141 [DEBUG] [Thread-213162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:32:42.141 [DEBUG] [Thread-213162] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:32:42.141 [DEBUG] [Thread-213162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:42.141 [DEBUG] [Thread-213162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] client lang: <none>
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] server lang: <none>
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] kex follows: False
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] Compression: none
2026-02-15T23:32:42.142 [DEBUG] [Thread-213162] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:32:42.159 [DEBUG] [Thread-213162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:32:42.160 [DEBUG] [Thread-213162] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:32:42.160 [DEBUG] [Thread-213162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:32:42.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:32:42.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:32:42.162 [DEBUG] [Thread-213162] [transport.py] [_log()] userauth is OK
2026-02-15T23:32:42.163 [DEBUG] [Thread-213162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:32:42.163 [DEBUG] [Thread-213162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:32:42.163 [DEBUG] [Thread-213162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:32:42.163 [DEBUG] [Thread-213162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:32:42.186 [INFO] [Thread-213162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:32:42.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:32:42.801 [DEBUG] [Thread-213162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:32:42.801 [DEBUG] [Thread-213162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:32:42.802 [DEBUG] [Thread-213162] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:32:42.842 [DEBUG] [Thread-213162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:32:42.842 [DEBUG] [Thread-213162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:32:42.845 [DEBUG] [Thread-213162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:32:42.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:32:42.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:32:42.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:32:42.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:32:42.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:32:42.867 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:32:42.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:32:42.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:32:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:32:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.897324 -999.00  +14.50  18.79     53   +5.00 1 1 1 1 1     0    0 9.17 -15.73 ZNESW 16.4 18.8 147.6 25.2 14.8 -24.2 14.7 -23.3 14.5 -22.1 14.8 -23.3
2026-02-15T23:32:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:32:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:32:42.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.897324
2026-02-15T23:32:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:32:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:32:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:32:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:32:42.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:32:42.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:32:16', tmtdew=10.86, humidity=47.77, cloud=0.0, wind=22.76, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:32:16', seeing=1.28, atlas_timestamp='2026-02-15T21:32:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.051249999999999574, -0.03524999999999956, -0.006750000000000256, -0.022500000000000853, -0.026499999999998636, -0.0007500000000000284, -0.010500000000000398, -0.031749999999998835, 0.008499999999997954, 0.01750000000000007, -0.0757500000000011, -0.009999999999999787, 0.05150000000000077, 0.012249999999999872, 0.026999999999999247, 0.0019999999999988916, 0.05925000000000047, 0.05550000000000033, -0.02450000000000152, -0.039250000000000895, 0.017999999999998906, -0.008250000000002089, -0.008749999999999147, 0.003249999999999531, 0.027999999999998693, 0.014000000000001123, -0.012249999999999872, 0.002000000000000668, 0.10400000000000098, 0.05150000000000077, 0.04400000000000048, 0.061500000000000554, 0.06874999999999964], zp_timestamp='2026-02-15T21:28:00')
2026-02-15T23:32:42.871 [DEBUG] [Thread-213162] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:32:42.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:32:42.972 [DEBUG] [Thread-213165] [transport.py] [_log()] starting thread (client mode): 0xa57d6380
2026-02-15T23:32:42.973 [DEBUG] [Thread-213165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:32:42.988 [DEBUG] [Thread-213165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:32:42.989 [INFO] [Thread-213165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] client lang: <none>
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] server lang: <none>
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] kex follows: False
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] Compression: none
2026-02-15T23:32:42.996 [DEBUG] [Thread-213165] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:32:43.063 [DEBUG] [Thread-213165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:32:43.063 [DEBUG] [Thread-213165] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:32:43.064 [DEBUG] [Thread-213165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:32:43.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:32:43.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:32:43.122 [DEBUG] [Thread-213165] [transport.py] [_log()] userauth is OK
2026-02-15T23:32:43.122 [DEBUG] [Thread-213165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:32:43.122 [DEBUG] [Thread-213165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:32:43.122 [DEBUG] [Thread-213165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:32:43.122 [DEBUG] [Thread-213165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:32:43.143 [INFO] [Thread-213165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:32:43.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:32:43.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:32:43.981 [DEBUG] [Thread-213165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:32:43.982 [DEBUG] [Thread-213165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:32:44.029 [DEBUG] [Thread-213165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:32:44.029 [DEBUG] [Thread-213165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:32:44.037 [DEBUG] [Thread-213165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:32:44.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:32:44.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:32:44.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:32:44.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:32:44.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:32:44.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:32:44.071 [DEBUG] [Thread-213165] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:32:53.623 [DEBUG] [Thread-213167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:05.072 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:05.073 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:08.687 [DEBUG] [Thread-213168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:14.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:33:14.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:33:14.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:33:15.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 32, 51), 10.81, 48.42, 0.0, 22.27, 14.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:33:15.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:32:51
2026-02-15T23:33:16.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:33:16.507 [DEBUG] [Thread-213169] [transport.py] [_log()] starting thread (client mode): 0xa2d54520
2026-02-15T23:33:16.507 [DEBUG] [Thread-213169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:33:16.528 [DEBUG] [Thread-213169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:33:16.529 [INFO] [Thread-213169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:33:16.532 [DEBUG] [Thread-213169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] client lang: <none>
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] server lang: <none>
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] kex follows: False
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] Compression: none
2026-02-15T23:33:16.533 [DEBUG] [Thread-213169] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:33:16.553 [DEBUG] [Thread-213169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:33:16.553 [DEBUG] [Thread-213169] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:33:16.554 [DEBUG] [Thread-213169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:33:16.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:33:16.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:33:16.556 [DEBUG] [Thread-213169] [transport.py] [_log()] userauth is OK
2026-02-15T23:33:16.556 [DEBUG] [Thread-213169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:33:16.557 [DEBUG] [Thread-213169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:33:16.557 [DEBUG] [Thread-213169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:33:16.557 [DEBUG] [Thread-213169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:33:16.581 [INFO] [Thread-213169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:33:16.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:33:17.215 [DEBUG] [Thread-213169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:33:17.216 [DEBUG] [Thread-213169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:33:17.216 [DEBUG] [Thread-213169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:33:17.256 [DEBUG] [Thread-213169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:33:17.256 [DEBUG] [Thread-213169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:33:17.259 [DEBUG] [Thread-213169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:33:17.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:33:17.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:33:17.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:33:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:33:17.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:33:17.275 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:33:17.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:33:17.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.897671 -999.00  +14.50  13.78     53   +5.00 1 1 1 1 1     0    0 9.44 -16.35 ZNESW 12.7 13.8 147.4 23.2 14.8 -24.3 14.7 -23.2 14.4 -22.0 14.8 -23.3
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.897671
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:33:17.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:32:51', tmtdew=10.81, humidity=48.42, cloud=0.0, wind=22.27, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:32:51', seeing=1.23, atlas_timestamp='2026-02-15T21:32:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0547500000000003, -0.01574999999999882, -0.042749999999999844, -0.057500000000000995, -0.0024999999999995026, -0.0017499999999976978, -0.022999999999999687, -0.02624999999999922, 0.015499999999999403, 0.016000000000000014, -0.0627500000000012, -0.008000000000000895, 0.05599999999999916, 0.013249999999999318, 0.006000000000000227, 0.006000000000000227, 0.02224999999999966, 0.05299999999999905, -0.034000000000000696, -0.012750000000000483, 0.04099999999999859, -0.011250000000000426, -0.018749999999998934, 0.025750000000000384, 0.01750000000000007, 0.0015000000000000568, 0.012750000000000483, -0.01750000000000007, 0.06450000000000067, 0.049500000000001876, 0.03850000000000087, 0.05500000000000149, 0.005250000000000199], zp_timestamp='2026-02-15T21:31:00')
2026-02-15T23:33:17.276 [DEBUG] [Thread-213169] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:33:17.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:33:17.360 [DEBUG] [Thread-213172] [transport.py] [_log()] starting thread (client mode): 0xa57c0d60
2026-02-15T23:33:17.360 [DEBUG] [Thread-213172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:33:17.379 [DEBUG] [Thread-213172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:33:17.380 [INFO] [Thread-213172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:33:17.387 [DEBUG] [Thread-213172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] client lang: <none>
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] server lang: <none>
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] kex follows: False
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:33:17.388 [DEBUG] [Thread-213172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:33:17.389 [DEBUG] [Thread-213172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:33:17.389 [DEBUG] [Thread-213172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:33:17.389 [DEBUG] [Thread-213172] [transport.py] [_log()] Compression: none
2026-02-15T23:33:17.389 [DEBUG] [Thread-213172] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:33:17.446 [DEBUG] [Thread-213172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:33:17.447 [DEBUG] [Thread-213172] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:33:17.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:33:17.448 [DEBUG] [Thread-213172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:33:17.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:33:17.502 [DEBUG] [Thread-213172] [transport.py] [_log()] userauth is OK
2026-02-15T23:33:17.502 [DEBUG] [Thread-213172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:33:17.502 [DEBUG] [Thread-213172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:33:17.502 [DEBUG] [Thread-213172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:33:17.502 [DEBUG] [Thread-213172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:33:17.516 [INFO] [Thread-213172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:33:17.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:33:17.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:33:18.344 [DEBUG] [Thread-213172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:33:18.344 [DEBUG] [Thread-213172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:33:18.392 [DEBUG] [Thread-213172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:33:18.392 [DEBUG] [Thread-213172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:33:18.402 [DEBUG] [Thread-213172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:33:18.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:33:18.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:33:18.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:33:18.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:33:18.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:33:18.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:33:18.440 [DEBUG] [Thread-213172] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:33:23.722 [DEBUG] [Thread-213174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:34.907 [DEBUG] [Thread-213175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:38.790 [DEBUG] [Thread-213176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:48.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:33:48.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:33:48.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:33:50.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 33, 26), 10.79, 48.49, 0.0, 23.19, 14.41, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:33:50.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:33:26
2026-02-15T23:33:50.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:33:50.833 [DEBUG] [Thread-213177] [transport.py] [_log()] starting thread (client mode): 0xa2d6ca30
2026-02-15T23:33:50.833 [DEBUG] [Thread-213177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:33:50.853 [DEBUG] [Thread-213177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:33:50.853 [INFO] [Thread-213177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] client lang: <none>
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] server lang: <none>
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] kex follows: False
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:33:50.856 [DEBUG] [Thread-213177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:33:50.857 [DEBUG] [Thread-213177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:33:50.857 [DEBUG] [Thread-213177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:33:50.857 [DEBUG] [Thread-213177] [transport.py] [_log()] Compression: none
2026-02-15T23:33:50.857 [DEBUG] [Thread-213177] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:33:50.869 [DEBUG] [Thread-213177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:33:50.870 [DEBUG] [Thread-213177] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:33:50.870 [DEBUG] [Thread-213177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:33:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:33:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:33:50.872 [DEBUG] [Thread-213177] [transport.py] [_log()] userauth is OK
2026-02-15T23:33:50.873 [DEBUG] [Thread-213177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:33:50.873 [DEBUG] [Thread-213177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:33:50.873 [DEBUG] [Thread-213177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:33:50.873 [DEBUG] [Thread-213177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:33:50.897 [INFO] [Thread-213177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:33:50.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:33:51.522 [DEBUG] [Thread-213177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:33:51.522 [DEBUG] [Thread-213177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:33:51.523 [DEBUG] [Thread-213177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:33:51.539 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:51.563 [DEBUG] [Thread-213177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:33:51.564 [DEBUG] [Thread-213177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:33:51.566 [DEBUG] [Thread-213177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:33:51.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:33:51.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:33:51.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:33:51.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:33:51.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:33:51.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:33:51.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:33:51.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:33:51.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:33:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.898366 -999.00  +14.50  19.22     53   +5.00 1 1 1 1 1     0    0 8.93 -19.04 ZNESW 15.4 19.2 162.0 23.4 -999.0 -999.0 14.7 -23.1 14.5 -22.1 14.7 -23.4
2026-02-15T23:33:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:33:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:33:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.898366
2026-02-15T23:33:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:33:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:33:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:33:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:33:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:33:51.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:33:26', tmtdew=10.79, humidity=48.49, cloud=0.0, wind=23.19, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:33:26', seeing=1.46, atlas_timestamp='2026-02-15T21:33:38.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0547500000000003, -0.01574999999999882, -0.042749999999999844, -0.057500000000000995, -0.0024999999999995026, -0.0017499999999976978, -0.022999999999999687, -0.02624999999999922, 0.015499999999999403, 0.016000000000000014, -0.0627500000000012, -0.008000000000000895, 0.05599999999999916, 0.013249999999999318, 0.006000000000000227, 0.006000000000000227, 0.02224999999999966, 0.05299999999999905, -0.034000000000000696, -0.012750000000000483, 0.04099999999999859, -0.011250000000000426, -0.018749999999998934, 0.025750000000000384, 0.01750000000000007, 0.0015000000000000568, 0.012750000000000483, -0.01750000000000007, 0.06450000000000067, 0.049500000000001876, 0.03850000000000087, 0.05500000000000149, 0.005250000000000199], zp_timestamp='2026-02-15T21:31:00')
2026-02-15T23:33:51.591 [DEBUG] [Thread-213177] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:33:51.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:33:51.690 [DEBUG] [Thread-213180] [transport.py] [_log()] starting thread (client mode): 0xa2d027d0
2026-02-15T23:33:51.690 [DEBUG] [Thread-213180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:33:51.707 [DEBUG] [Thread-213180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:33:51.707 [INFO] [Thread-213180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:33:51.714 [DEBUG] [Thread-213180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:33:51.715 [DEBUG] [Thread-213180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] client lang: <none>
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] server lang: <none>
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] kex follows: False
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:33:51.716 [DEBUG] [Thread-213180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:33:51.717 [DEBUG] [Thread-213180] [transport.py] [_log()] Compression: none
2026-02-15T23:33:51.717 [DEBUG] [Thread-213180] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:33:51.774 [DEBUG] [Thread-213180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:33:51.774 [DEBUG] [Thread-213180] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:33:51.775 [DEBUG] [Thread-213180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:33:51.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:33:51.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:33:51.829 [DEBUG] [Thread-213180] [transport.py] [_log()] userauth is OK
2026-02-15T23:33:51.829 [DEBUG] [Thread-213180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:33:51.830 [DEBUG] [Thread-213180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:33:51.830 [DEBUG] [Thread-213180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:33:51.830 [DEBUG] [Thread-213180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:33:51.849 [INFO] [Thread-213180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:33:51.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:33:51.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:33:52.702 [DEBUG] [Thread-213180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:33:52.702 [DEBUG] [Thread-213180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:33:52.751 [DEBUG] [Thread-213180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:33:52.751 [DEBUG] [Thread-213180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:33:52.760 [DEBUG] [Thread-213180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:33:52.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:33:52.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:33:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:33:52.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:33:52.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:33:52.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:33:52.794 [DEBUG] [Thread-213180] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:33:53.823 [DEBUG] [Thread-213182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:54.698 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:33:59.759 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:05.134 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:05.271 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:05.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:08.585 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:08.876 [DEBUG] [Thread-213183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:34:22.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:34:22.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:34:23.911 [DEBUG] [Thread-213184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:24.577 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:24.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 34, 2), 10.78, 48.54, 0.0, 21.33, 14.44, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:34:24.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:34:02
2026-02-15T23:34:25.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:34:25.154 [DEBUG] [Thread-213185] [transport.py] [_log()] starting thread (client mode): 0xa2d03af0
2026-02-15T23:34:25.154 [DEBUG] [Thread-213185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:34:25.175 [DEBUG] [Thread-213185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:34:25.175 [INFO] [Thread-213185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:34:25.178 [DEBUG] [Thread-213185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] client lang: <none>
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] server lang: <none>
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] kex follows: False
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] Compression: none
2026-02-15T23:34:25.179 [DEBUG] [Thread-213185] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:34:25.191 [DEBUG] [Thread-213185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:34:25.192 [DEBUG] [Thread-213185] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:34:25.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:34:25.193 [DEBUG] [Thread-213185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:34:25.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:34:25.195 [DEBUG] [Thread-213185] [transport.py] [_log()] userauth is OK
2026-02-15T23:34:25.195 [DEBUG] [Thread-213185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:34:25.195 [DEBUG] [Thread-213185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:34:25.195 [DEBUG] [Thread-213185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:34:25.195 [DEBUG] [Thread-213185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:34:25.220 [INFO] [Thread-213185] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:34:25.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:34:25.890 [DEBUG] [Thread-213185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:34:25.890 [DEBUG] [Thread-213185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:34:25.890 [DEBUG] [Thread-213185] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:34:25.931 [DEBUG] [Thread-213185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:34:25.931 [DEBUG] [Thread-213185] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:34:25.935 [DEBUG] [Thread-213185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:34:25.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:34:25.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:34:25.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:34:25.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:34:25.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:34:25.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:34:25.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.898713 -999.00  +14.40  13.36     53   +5.00 1 1 1 1 1     0    0 9.36 -20.36 ZNESW 16.7 13.4 147.2 21.8 14.8 -24.4 14.7 -23.3 14.5 -22.2 14.7 -23.4
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.898713
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:34:25.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:34:02', tmtdew=10.78, humidity=48.54, cloud=0.0, wind=21.33, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:34:03', seeing=1.67, atlas_timestamp='2026-02-15T21:34:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0547500000000003, -0.01574999999999882, -0.042749999999999844, -0.057500000000000995, -0.0024999999999995026, -0.0017499999999976978, -0.022999999999999687, -0.02624999999999922, 0.015499999999999403, 0.016000000000000014, -0.0627500000000012, -0.008000000000000895, 0.05599999999999916, 0.013249999999999318, 0.006000000000000227, 0.006000000000000227, 0.02224999999999966, 0.05299999999999905, -0.034000000000000696, -0.012750000000000483, 0.04099999999999859, -0.011250000000000426, -0.018749999999998934, 0.025750000000000384, 0.01750000000000007, 0.0015000000000000568, 0.012750000000000483, -0.01750000000000007, 0.06450000000000067, 0.049500000000001876, 0.03850000000000087, 0.05500000000000149, 0.005250000000000199], zp_timestamp='2026-02-15T21:31:00')
2026-02-15T23:34:25.954 [DEBUG] [Thread-213185] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:34:26.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:34:26.039 [DEBUG] [Thread-213188] [transport.py] [_log()] starting thread (client mode): 0xa57e0b50
2026-02-15T23:34:26.040 [DEBUG] [Thread-213188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:34:26.057 [DEBUG] [Thread-213188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:34:26.057 [INFO] [Thread-213188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:34:26.065 [DEBUG] [Thread-213188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] client lang: <none>
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] server lang: <none>
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] kex follows: False
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] Compression: none
2026-02-15T23:34:26.066 [DEBUG] [Thread-213188] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:34:26.125 [DEBUG] [Thread-213188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:34:26.125 [DEBUG] [Thread-213188] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:34:26.125 [DEBUG] [Thread-213188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:34:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:34:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:34:26.183 [DEBUG] [Thread-213188] [transport.py] [_log()] userauth is OK
2026-02-15T23:34:26.183 [DEBUG] [Thread-213188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:34:26.183 [DEBUG] [Thread-213188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:34:26.183 [DEBUG] [Thread-213188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:34:26.183 [DEBUG] [Thread-213188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:34:26.200 [INFO] [Thread-213188] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:34:26.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:34:26.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:34:27.003 [DEBUG] [Thread-213188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:34:27.004 [DEBUG] [Thread-213188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:34:27.051 [DEBUG] [Thread-213188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:34:27.051 [DEBUG] [Thread-213188] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:34:27.064 [DEBUG] [Thread-213188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:34:27.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:34:27.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:34:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:34:27.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:34:27.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:34:27.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:34:27.096 [DEBUG] [Thread-213188] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:34:28.967 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:34.976 [DEBUG] [Thread-213190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:38.946 [DEBUG] [Thread-213191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:48.400 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:52.751 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:53.999 [DEBUG] [Thread-213192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:57.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:34:57.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:34:57.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:34:59.509 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:34:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 34, 38), 10.91, 47.91, 0.0, 20.96, 14.75, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:34:59.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:34:38
2026-02-15T23:35:00.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:35:00.190 [DEBUG] [Thread-213193] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-15T23:35:00.190 [DEBUG] [Thread-213193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:35:00.206 [DEBUG] [Thread-213193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:35:00.206 [INFO] [Thread-213193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] client lang: <none>
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] server lang: <none>
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] kex follows: False
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:35:00.209 [DEBUG] [Thread-213193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:35:00.210 [DEBUG] [Thread-213193] [transport.py] [_log()] Compression: none
2026-02-15T23:35:00.210 [DEBUG] [Thread-213193] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:35:00.223 [DEBUG] [Thread-213193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:35:00.223 [DEBUG] [Thread-213193] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:35:00.223 [DEBUG] [Thread-213193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:35:00.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:35:00.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:35:00.224 [DEBUG] [Thread-213193] [transport.py] [_log()] userauth is OK
2026-02-15T23:35:00.224 [DEBUG] [Thread-213193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:35:00.224 [DEBUG] [Thread-213193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:35:00.224 [DEBUG] [Thread-213193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:35:00.224 [DEBUG] [Thread-213193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:35:00.233 [INFO] [Thread-213193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:35:00.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:35:00.871 [DEBUG] [Thread-213193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:35:00.871 [DEBUG] [Thread-213193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:35:00.871 [DEBUG] [Thread-213193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:35:00.911 [DEBUG] [Thread-213193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:35:00.912 [DEBUG] [Thread-213193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:35:00.915 [DEBUG] [Thread-213193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:35:00.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:35:00.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:35:00.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:35:00.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:35:00.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:35:00.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:35:00.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:35:00.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:35:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:35:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.899060 -999.00  +14.40  13.53     53   +5.00 1 1 1 1 1     0    0 9.14 -21.78 ZNESW 13.2 13.5 156.9 22.5 14.8 -24.3 14.7 -23.3 14.4 -22.0 14.8 -23.3
2026-02-15T23:35:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:35:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:35:00.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.899060
2026-02-15T23:35:00.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:35:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:35:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:35:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:35:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:35:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:34:38', tmtdew=10.91, humidity=47.91, cloud=0.0, wind=20.96, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:34:38', seeing=1.39, atlas_timestamp='2026-02-15T21:34:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0547500000000003, -0.01574999999999882, -0.042749999999999844, -0.057500000000000995, -0.0024999999999995026, -0.0017499999999976978, -0.022999999999999687, -0.02624999999999922, 0.015499999999999403, 0.016000000000000014, -0.0627500000000012, -0.008000000000000895, 0.05599999999999916, 0.013249999999999318, 0.006000000000000227, 0.006000000000000227, 0.02224999999999966, 0.05299999999999905, -0.034000000000000696, -0.012750000000000483, 0.04099999999999859, -0.011250000000000426, -0.018749999999998934, 0.025750000000000384, 0.01750000000000007, 0.0015000000000000568, 0.012750000000000483, -0.01750000000000007, 0.06450000000000067, 0.049500000000001876, 0.03850000000000087, 0.05500000000000149, 0.005250000000000199], zp_timestamp='2026-02-15T21:31:00')
2026-02-15T23:35:00.941 [DEBUG] [Thread-213193] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:35:01.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:35:01.036 [DEBUG] [Thread-213196] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1f0
2026-02-15T23:35:01.036 [DEBUG] [Thread-213196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:35:01.050 [DEBUG] [Thread-213196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:35:01.050 [INFO] [Thread-213196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:35:01.058 [DEBUG] [Thread-213196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:35:01.058 [DEBUG] [Thread-213196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:35:01.058 [DEBUG] [Thread-213196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] client lang: <none>
2026-02-15T23:35:01.059 [DEBUG] [Thread-213196] [transport.py] [_log()] server lang: <none>
2026-02-15T23:35:01.060 [DEBUG] [Thread-213196] [transport.py] [_log()] kex follows: False
2026-02-15T23:35:01.060 [DEBUG] [Thread-213196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:35:01.060 [DEBUG] [Thread-213196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:35:01.060 [DEBUG] [Thread-213196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:35:01.060 [DEBUG] [Thread-213196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:35:01.060 [DEBUG] [Thread-213196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:35:01.061 [DEBUG] [Thread-213196] [transport.py] [_log()] Compression: none
2026-02-15T23:35:01.061 [DEBUG] [Thread-213196] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:35:01.118 [DEBUG] [Thread-213196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:35:01.119 [DEBUG] [Thread-213196] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:35:01.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:35:01.120 [DEBUG] [Thread-213196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:35:01.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:35:01.174 [DEBUG] [Thread-213196] [transport.py] [_log()] userauth is OK
2026-02-15T23:35:01.175 [DEBUG] [Thread-213196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:35:01.175 [DEBUG] [Thread-213196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:35:01.175 [DEBUG] [Thread-213196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:35:01.175 [DEBUG] [Thread-213196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:35:01.194 [INFO] [Thread-213196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:35:01.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:35:01.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:35:02.029 [DEBUG] [Thread-213196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:35:02.029 [DEBUG] [Thread-213196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:35:02.081 [DEBUG] [Thread-213196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:35:02.081 [DEBUG] [Thread-213196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:35:02.096 [DEBUG] [Thread-213196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:35:02.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:35:02.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:35:02.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:35:02.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:35:02.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:35:02.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:35:02.138 [DEBUG] [Thread-213196] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:35:03.882 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:05.471 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:05.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:09.036 [DEBUG] [Thread-213198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:24.096 [DEBUG] [Thread-213199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:32.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:35:32.151 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:35:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:35:34.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 35, 13), 10.76, 48.44, 0.0, 25.2, 14.36, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:35:34.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:35:13
2026-02-15T23:35:34.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:35:34.533 [DEBUG] [Thread-213200] [transport.py] [_log()] starting thread (client mode): 0xa57b3e50
2026-02-15T23:35:34.533 [DEBUG] [Thread-213200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:35:34.547 [DEBUG] [Thread-213200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:35:34.548 [INFO] [Thread-213200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] client lang: <none>
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] server lang: <none>
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] kex follows: False
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] Compression: none
2026-02-15T23:35:34.550 [DEBUG] [Thread-213200] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:35:34.563 [DEBUG] [Thread-213200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:35:34.564 [DEBUG] [Thread-213200] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:35:34.564 [DEBUG] [Thread-213200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:35:34.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:35:34.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:35:34.566 [DEBUG] [Thread-213200] [transport.py] [_log()] userauth is OK
2026-02-15T23:35:34.566 [DEBUG] [Thread-213200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:35:34.566 [DEBUG] [Thread-213200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:35:34.566 [DEBUG] [Thread-213200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:35:34.566 [DEBUG] [Thread-213200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:35:34.590 [INFO] [Thread-213200] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:35:34.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:35:35.045 [DEBUG] [Thread-213202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:35.194 [DEBUG] [Thread-213200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:35:35.195 [DEBUG] [Thread-213200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:35:35.195 [DEBUG] [Thread-213200] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:35:35.235 [DEBUG] [Thread-213200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:35:35.235 [DEBUG] [Thread-213200] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:35:35.238 [DEBUG] [Thread-213200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:35:35.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:35:35.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:35:35.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:35:35.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:35:35.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:35:35.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:35:35.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:35:35.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:35:35.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:35:35.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.899407 -999.00  +14.40  18.31     53   +5.00 1 1 1 1 1     0    0 9.17 -21.66 ZNESW 15.7 18.3 142.0 23.0 14.8 -24.3 14.7 -23.2 14.4 -22.1 14.8 -23.3
2026-02-15T23:35:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:35:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:35:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.899407
2026-02-15T23:35:35.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:35:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:35:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:35:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:35:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:35:35.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:35:13', tmtdew=10.76, humidity=48.44, cloud=0.0, wind=25.2, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:35:14', seeing=1.53, atlas_timestamp='2026-02-15T21:35:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0547500000000003, -0.01574999999999882, -0.042749999999999844, -0.057500000000000995, -0.0024999999999995026, -0.0017499999999976978, -0.022999999999999687, -0.02624999999999922, 0.015499999999999403, 0.016000000000000014, -0.0627500000000012, -0.008000000000000895, 0.05599999999999916, 0.013249999999999318, 0.006000000000000227, 0.006000000000000227, 0.02224999999999966, 0.05299999999999905, -0.034000000000000696, -0.012750000000000483, 0.04099999999999859, -0.011250000000000426, -0.018749999999998934, 0.025750000000000384, 0.01750000000000007, 0.0015000000000000568, 0.012750000000000483, -0.01750000000000007, 0.06450000000000067, 0.049500000000001876, 0.03850000000000087, 0.05500000000000149, 0.005250000000000199], zp_timestamp='2026-02-15T21:31:00')
2026-02-15T23:35:35.258 [DEBUG] [Thread-213200] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:35:35.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:35:35.354 [DEBUG] [Thread-213204] [transport.py] [_log()] starting thread (client mode): 0xa57b3ca0
2026-02-15T23:35:35.354 [DEBUG] [Thread-213204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:35:35.368 [DEBUG] [Thread-213204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:35:35.368 [INFO] [Thread-213204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:35.377 [DEBUG] [Thread-213204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] client lang: <none>
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] server lang: <none>
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] kex follows: False
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] Compression: none
2026-02-15T23:35:35.378 [DEBUG] [Thread-213204] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:35:35.433 [DEBUG] [Thread-213204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:35:35.434 [DEBUG] [Thread-213204] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:35:35.435 [DEBUG] [Thread-213204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:35:35.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:35:35.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:35:35.490 [DEBUG] [Thread-213204] [transport.py] [_log()] userauth is OK
2026-02-15T23:35:35.490 [DEBUG] [Thread-213204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:35:35.490 [DEBUG] [Thread-213204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:35:35.490 [DEBUG] [Thread-213204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:35:35.490 [DEBUG] [Thread-213204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:35:35.509 [INFO] [Thread-213204] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:35:35.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:35:35.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:35:36.314 [DEBUG] [Thread-213204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:35:36.315 [DEBUG] [Thread-213204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:35:36.362 [DEBUG] [Thread-213204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:35:36.363 [DEBUG] [Thread-213204] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:35:36.372 [DEBUG] [Thread-213204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:35:36.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:35:36.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:35:36.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:35:36.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:35:36.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:35:36.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:35:36.409 [DEBUG] [Thread-213204] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:35:39.131 [DEBUG] [Thread-213206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:42.831 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:35:54.178 [DEBUG] [Thread-213207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:03.223 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:05.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:05.676 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:06.263 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:36:06.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:36:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:36:08.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 35, 49), 10.71, 48.57, 0.0, 24.19, 14.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:36:08.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:35:49
2026-02-15T23:36:08.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:36:09.128 [DEBUG] [Thread-213208] [transport.py] [_log()] starting thread (client mode): 0xa57e0820
2026-02-15T23:36:09.128 [DEBUG] [Thread-213208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:36:09.148 [DEBUG] [Thread-213208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:36:09.148 [INFO] [Thread-213208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:36:09.151 [DEBUG] [Thread-213208] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] client lang: <none>
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] server lang: <none>
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] kex follows: False
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] Compression: none
2026-02-15T23:36:09.152 [DEBUG] [Thread-213208] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:36:09.164 [DEBUG] [Thread-213208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:36:09.165 [DEBUG] [Thread-213208] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:36:09.165 [DEBUG] [Thread-213208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:36:09.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:36:09.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:36:09.210 [DEBUG] [Thread-213208] [transport.py] [_log()] userauth is OK
2026-02-15T23:36:09.210 [DEBUG] [Thread-213208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:36:09.210 [DEBUG] [Thread-213208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:36:09.210 [DEBUG] [Thread-213208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:36:09.210 [DEBUG] [Thread-213208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:36:09.214 [DEBUG] [Thread-213210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:09.237 [INFO] [Thread-213208] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:36:09.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:36:09.825 [DEBUG] [Thread-213208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:36:09.825 [DEBUG] [Thread-213208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:36:09.826 [DEBUG] [Thread-213208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:36:09.866 [DEBUG] [Thread-213208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:36:09.866 [DEBUG] [Thread-213208] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:36:09.869 [DEBUG] [Thread-213208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:36:09.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:36:09.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:36:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:36:09.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:36:09.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:36:09.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:36:09.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:36:09.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:36:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:36:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.899755 -999.00  +14.40  22.89     53   +5.00 1 1 1 1 1     0    0 8.90 -23.30 ZNESW 20.6 22.9 141.8 24.3 14.8 -24.2 14.7 -23.2 14.4 -22.1 14.8 -23.3
2026-02-15T23:36:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:36:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:36:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.899755
2026-02-15T23:36:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:36:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:36:09.888 [DEBUG] [Thread-213208] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:36:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:36:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:36:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:36:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:35:49', tmtdew=10.71, humidity=48.57, cloud=0.0, wind=24.19, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:35:49', seeing=1.28, atlas_timestamp='2026-02-15T21:35:38.832', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:34:00')
2026-02-15T23:36:09.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:36:09.986 [DEBUG] [Thread-213212] [transport.py] [_log()] starting thread (client mode): 0xa5770c10
2026-02-15T23:36:09.987 [DEBUG] [Thread-213212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:36:10.001 [DEBUG] [Thread-213212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:36:10.001 [INFO] [Thread-213212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] client lang: <none>
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] server lang: <none>
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] kex follows: False
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] Compression: none
2026-02-15T23:36:10.011 [DEBUG] [Thread-213212] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:36:10.068 [DEBUG] [Thread-213212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:36:10.068 [DEBUG] [Thread-213212] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:36:10.068 [DEBUG] [Thread-213212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:36:10.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:36:10.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:36:10.126 [DEBUG] [Thread-213212] [transport.py] [_log()] userauth is OK
2026-02-15T23:36:10.126 [DEBUG] [Thread-213212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:36:10.127 [DEBUG] [Thread-213212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:36:10.127 [DEBUG] [Thread-213212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:36:10.127 [DEBUG] [Thread-213212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:36:10.146 [INFO] [Thread-213212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:36:10.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:36:10.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:36:10.966 [DEBUG] [Thread-213212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:36:10.966 [DEBUG] [Thread-213212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:36:11.014 [DEBUG] [Thread-213212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:36:11.015 [DEBUG] [Thread-213212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:36:11.024 [DEBUG] [Thread-213212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:36:11.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:36:11.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:36:11.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:36:11.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:36:11.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:36:11.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:36:11.061 [DEBUG] [Thread-213212] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:36:24.263 [DEBUG] [Thread-213214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:32.704 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:35.123 [DEBUG] [Thread-213215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:37.480 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:39.317 [DEBUG] [Thread-213216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:40.518 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:41.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:36:41.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:36:41.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:36:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 36, 24), 10.71, 48.6, 0.0, 22.11, 14.42, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:36:43.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:36:24
2026-02-15T23:36:43.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:36:43.932 [DEBUG] [Thread-213217] [transport.py] [_log()] starting thread (client mode): 0xa57d78e0
2026-02-15T23:36:43.933 [DEBUG] [Thread-213217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:36:43.953 [DEBUG] [Thread-213217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:36:43.953 [INFO] [Thread-213217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] client lang: <none>
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] server lang: <none>
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] kex follows: False
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] Compression: none
2026-02-15T23:36:43.956 [DEBUG] [Thread-213217] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:36:43.970 [DEBUG] [Thread-213217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:36:43.970 [DEBUG] [Thread-213217] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:36:43.971 [DEBUG] [Thread-213217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:36:43.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:36:43.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:36:43.973 [DEBUG] [Thread-213217] [transport.py] [_log()] userauth is OK
2026-02-15T23:36:43.973 [DEBUG] [Thread-213217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:36:43.973 [DEBUG] [Thread-213217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:36:43.973 [DEBUG] [Thread-213217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:36:43.974 [DEBUG] [Thread-213217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:36:43.993 [INFO] [Thread-213217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:36:43.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:36:44.573 [DEBUG] [Thread-213217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:36:44.573 [DEBUG] [Thread-213217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:36:44.574 [DEBUG] [Thread-213217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:36:44.614 [DEBUG] [Thread-213217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:36:44.614 [DEBUG] [Thread-213217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:36:44.618 [DEBUG] [Thread-213217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:36:44.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:36:44.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:36:44.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:36:44.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:36:44.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:36:44.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:36:44.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:36:44.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:36:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:36:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.900102 -999.00  +14.40  20.55     53   +5.00 1 1 1 1 1     0    0 8.90 -22.20 ZNESW 23.1 20.6 142.2 26.9 14.8 -24.2 14.7 -23.3 14.4 -22.1 14.7 -23.5
2026-02-15T23:36:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:36:44.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:36:44.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.900102
2026-02-15T23:36:44.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:36:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:36:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:36:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:36:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:36:44.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:36:24', tmtdew=10.71, humidity=48.6, cloud=0.0, wind=22.11, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:36:25', seeing=1.37, atlas_timestamp='2026-02-15T21:36:08.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:34:00')
2026-02-15T23:36:44.652 [DEBUG] [Thread-213217] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:36:44.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:36:44.753 [DEBUG] [Thread-213220] [transport.py] [_log()] starting thread (client mode): 0xa57c1a20
2026-02-15T23:36:44.753 [DEBUG] [Thread-213220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:36:44.772 [DEBUG] [Thread-213220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:36:44.772 [INFO] [Thread-213220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:36:44.781 [DEBUG] [Thread-213220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:36:44.781 [DEBUG] [Thread-213220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] client lang: <none>
2026-02-15T23:36:44.782 [DEBUG] [Thread-213220] [transport.py] [_log()] server lang: <none>
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] kex follows: False
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] Compression: none
2026-02-15T23:36:44.783 [DEBUG] [Thread-213220] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:36:44.842 [DEBUG] [Thread-213220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:36:44.843 [DEBUG] [Thread-213220] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:36:44.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:36:44.844 [DEBUG] [Thread-213220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:36:44.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:36:44.902 [DEBUG] [Thread-213220] [transport.py] [_log()] userauth is OK
2026-02-15T23:36:44.902 [DEBUG] [Thread-213220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:36:44.902 [DEBUG] [Thread-213220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:36:44.902 [DEBUG] [Thread-213220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:36:44.902 [DEBUG] [Thread-213220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:36:44.921 [INFO] [Thread-213220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:36:44.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:36:44.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:36:45.761 [DEBUG] [Thread-213220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:36:45.762 [DEBUG] [Thread-213220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:36:45.810 [DEBUG] [Thread-213220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:36:45.811 [DEBUG] [Thread-213220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:36:45.820 [DEBUG] [Thread-213220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:36:45.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:36:45.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:36:45.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:36:45.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:36:45.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:36:45.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:36:45.857 [DEBUG] [Thread-213220] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:36:46.886 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:36:54.352 [DEBUG] [Thread-213222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:05.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:05.881 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:09.402 [DEBUG] [Thread-213223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:15.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:37:15.870 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:37:15.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:37:17.139 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 36, 24), 10.66, 48.6, 0.0, 23.91, 14.37, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:37:17.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:36:24
2026-02-15T23:37:18.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:37:18.263 [DEBUG] [Thread-213224] [transport.py] [_log()] starting thread (client mode): 0xa57b0880
2026-02-15T23:37:18.264 [DEBUG] [Thread-213224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:37:18.281 [DEBUG] [Thread-213224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:37:18.282 [INFO] [Thread-213224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] client lang: <none>
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] server lang: <none>
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] kex follows: False
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:37:18.285 [DEBUG] [Thread-213224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:37:18.286 [DEBUG] [Thread-213224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:37:18.286 [DEBUG] [Thread-213224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:37:18.286 [DEBUG] [Thread-213224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:37:18.286 [DEBUG] [Thread-213224] [transport.py] [_log()] Compression: none
2026-02-15T23:37:18.286 [DEBUG] [Thread-213224] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:37:18.295 [DEBUG] [Thread-213224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:37:18.296 [DEBUG] [Thread-213224] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:37:18.297 [DEBUG] [Thread-213224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:37:18.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:37:18.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:37:18.299 [DEBUG] [Thread-213224] [transport.py] [_log()] userauth is OK
2026-02-15T23:37:18.299 [DEBUG] [Thread-213224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:37:18.300 [DEBUG] [Thread-213224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:37:18.300 [DEBUG] [Thread-213224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:37:18.300 [DEBUG] [Thread-213224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:37:18.317 [INFO] [Thread-213224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:37:18.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:37:18.937 [DEBUG] [Thread-213224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:37:18.937 [DEBUG] [Thread-213224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:37:18.938 [DEBUG] [Thread-213224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:37:18.978 [DEBUG] [Thread-213224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:37:18.978 [DEBUG] [Thread-213224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:37:18.981 [DEBUG] [Thread-213224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:37:18.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:37:18.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:37:18.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:37:18.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:37:19.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:37:19.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:37:19.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:37:19.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:37:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:37:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.900796 -999.00  +14.40  17.63     53   +5.00 1 1 1 1 1     0    0 8.98 -20.67 ZNESW 16.2 17.6 140.4 22.5 14.7 -24.3 14.6 -23.2 14.4 -22.1 14.7 -23.6
2026-02-15T23:37:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:37:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:37:19.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.900796
2026-02-15T23:37:19.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:37:19.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:37:19.006 [DEBUG] [Thread-213224] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:37:19.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:37:19.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:37:19.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:37:19.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:36:24', tmtdew=10.66, humidity=48.6, cloud=0.0, wind=23.91, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:37:00', seeing=1.71, atlas_timestamp='2026-02-15T21:37:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:34:00')
2026-02-15T23:37:19.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:37:19.104 [DEBUG] [Thread-213227] [transport.py] [_log()] starting thread (client mode): 0xa57b37f0
2026-02-15T23:37:19.104 [DEBUG] [Thread-213227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:37:19.119 [DEBUG] [Thread-213227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:37:19.120 [INFO] [Thread-213227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:37:19.128 [DEBUG] [Thread-213227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:37:19.128 [DEBUG] [Thread-213227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:37:19.128 [DEBUG] [Thread-213227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:37:19.128 [DEBUG] [Thread-213227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] client lang: <none>
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] server lang: <none>
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] kex follows: False
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] Compression: none
2026-02-15T23:37:19.129 [DEBUG] [Thread-213227] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:37:19.190 [DEBUG] [Thread-213227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:37:19.190 [DEBUG] [Thread-213227] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:37:19.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:37:19.191 [DEBUG] [Thread-213227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:37:19.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:37:19.246 [DEBUG] [Thread-213227] [transport.py] [_log()] userauth is OK
2026-02-15T23:37:19.247 [DEBUG] [Thread-213227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:37:19.247 [DEBUG] [Thread-213227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:37:19.247 [DEBUG] [Thread-213227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:37:19.247 [DEBUG] [Thread-213227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:37:19.266 [INFO] [Thread-213227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:37:19.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:37:19.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:37:20.105 [DEBUG] [Thread-213227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:37:20.106 [DEBUG] [Thread-213227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:37:20.153 [DEBUG] [Thread-213227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:37:20.154 [DEBUG] [Thread-213227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:37:20.163 [DEBUG] [Thread-213227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:37:20.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:37:20.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:37:20.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
2026-02-15T23:37:20.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:37:20.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:37:20.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:37:20.202 [DEBUG] [Thread-213227] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:37:24.439 [DEBUG] [Thread-213229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:35.180 [DEBUG] [Thread-213230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:39.492 [DEBUG] [Thread-213231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:37:50.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:37:50.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:37:50.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:37:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 37, 35), 10.81, 48.2, 0.0, 23.18, 14.58, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:37:52.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:37:35
2026-02-15T23:37:52.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:37:52.553 [DEBUG] [Thread-213232] [transport.py] [_log()] starting thread (client mode): 0xa2d54070
2026-02-15T23:37:52.553 [DEBUG] [Thread-213232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:37:52.573 [DEBUG] [Thread-213232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:37:52.573 [INFO] [Thread-213232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:37:52.576 [DEBUG] [Thread-213232] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] client lang: <none>
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] server lang: <none>
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] kex follows: False
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] Compression: none
2026-02-15T23:37:52.577 [DEBUG] [Thread-213232] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:37:52.594 [DEBUG] [Thread-213232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:37:52.595 [DEBUG] [Thread-213232] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:37:52.595 [DEBUG] [Thread-213232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:37:52.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:37:52.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:37:52.597 [DEBUG] [Thread-213232] [transport.py] [_log()] userauth is OK
2026-02-15T23:37:52.597 [DEBUG] [Thread-213232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:37:52.597 [DEBUG] [Thread-213232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:37:52.597 [DEBUG] [Thread-213232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:37:52.597 [DEBUG] [Thread-213232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:37:52.621 [INFO] [Thread-213232] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:37:52.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:37:53.230 [DEBUG] [Thread-213232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:37:53.230 [DEBUG] [Thread-213232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:37:53.230 [DEBUG] [Thread-213232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:37:53.271 [DEBUG] [Thread-213232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:37:53.271 [DEBUG] [Thread-213232] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:37:53.273 [DEBUG] [Thread-213232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:37:53.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:37:53.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:37:53.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:37:53.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:37:53.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:37:53.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:37:53.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.901143 -999.00  +14.40  24.83     53   +5.00 1 1 1 1 1     0    0 8.89 -22.53 ZNESW 20.9 24.8 141.4 26.0 14.7 -24.2 14.6 -23.3 14.4 -22.1 14.7 -23.1
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.901143
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:37:53.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:37:35', tmtdew=10.81, humidity=48.2, cloud=0.0, wind=23.18, temperature=14.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:37:35', seeing=1.66, atlas_timestamp='2026-02-15T21:37:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:34:00')
2026-02-15T23:37:53.291 [DEBUG] [Thread-213232] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:37:53.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:37:53.376 [DEBUG] [Thread-213235] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-15T23:37:53.376 [DEBUG] [Thread-213235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:37:53.391 [DEBUG] [Thread-213235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:37:53.391 [INFO] [Thread-213235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:37:53.398 [DEBUG] [Thread-213235] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:37:53.398 [DEBUG] [Thread-213235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:37:53.398 [DEBUG] [Thread-213235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] client lang: <none>
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] server lang: <none>
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] kex follows: False
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] Compression: none
2026-02-15T23:37:53.399 [DEBUG] [Thread-213235] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:37:53.455 [DEBUG] [Thread-213235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:37:53.455 [DEBUG] [Thread-213235] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:37:53.455 [DEBUG] [Thread-213235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:37:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:37:53.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:37:53.513 [DEBUG] [Thread-213235] [transport.py] [_log()] userauth is OK
2026-02-15T23:37:53.513 [DEBUG] [Thread-213235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:37:53.513 [DEBUG] [Thread-213235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:37:53.513 [DEBUG] [Thread-213235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:37:53.513 [DEBUG] [Thread-213235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:37:53.527 [INFO] [Thread-213235] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:37:53.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:37:53.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:37:54.357 [DEBUG] [Thread-213235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:37:54.357 [DEBUG] [Thread-213235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:37:54.405 [DEBUG] [Thread-213235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:37:54.406 [DEBUG] [Thread-213235] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:37:54.415 [DEBUG] [Thread-213235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:37:54.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:37:54.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:37:54.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:37:54.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:37:54.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:37:54.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:37:54.453 [DEBUG] [Thread-213235] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:37:54.530 [DEBUG] [Thread-213237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:06.083 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:06.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:09.588 [DEBUG] [Thread-213238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:13.929 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:17.088 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:22.146 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:24.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:38:24.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:38:24.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:38:24.626 [DEBUG] [Thread-213239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 38, 10), 10.59, 48.67, 0.0, 23.56, 14.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:38:26.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:38:10
2026-02-15T23:38:27.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:38:27.275 [DEBUG] [Thread-213240] [transport.py] [_log()] starting thread (client mode): 0xa2d6d750
2026-02-15T23:38:27.276 [DEBUG] [Thread-213240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:38:27.296 [DEBUG] [Thread-213240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:38:27.297 [INFO] [Thread-213240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:38:27.299 [DEBUG] [Thread-213240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] client lang: <none>
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] server lang: <none>
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] kex follows: False
2026-02-15T23:38:27.300 [DEBUG] [Thread-213240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:38:27.301 [DEBUG] [Thread-213240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:38:27.301 [DEBUG] [Thread-213240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:38:27.301 [DEBUG] [Thread-213240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:38:27.301 [DEBUG] [Thread-213240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:38:27.301 [DEBUG] [Thread-213240] [transport.py] [_log()] Compression: none
2026-02-15T23:38:27.301 [DEBUG] [Thread-213240] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:38:27.324 [DEBUG] [Thread-213240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:38:27.325 [DEBUG] [Thread-213240] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:38:27.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:38:27.325 [DEBUG] [Thread-213240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:38:27.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:38:27.328 [DEBUG] [Thread-213240] [transport.py] [_log()] userauth is OK
2026-02-15T23:38:27.328 [DEBUG] [Thread-213240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:38:27.328 [DEBUG] [Thread-213240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:38:27.328 [DEBUG] [Thread-213240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:38:27.328 [DEBUG] [Thread-213240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:38:27.351 [INFO] [Thread-213240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:38:27.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:38:27.634 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:27.915 [DEBUG] [Thread-213240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:38:27.915 [DEBUG] [Thread-213240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:38:27.916 [DEBUG] [Thread-213240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:38:27.956 [DEBUG] [Thread-213240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:38:27.957 [DEBUG] [Thread-213240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:38:27.960 [DEBUG] [Thread-213240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:38:27.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:38:27.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:38:27.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:38:27.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:38:27.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:38:27.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:38:27.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:38:27.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:38:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:38:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.901491 -999.00  +14.40  23.55     53   +5.00 1 1 1 1 1     0    0 8.99 -21.18 ZNESW 22.1 23.6 143.0 25.4 14.7 -24.3 14.6 -23.3 14.3 -22.0 14.7 -23.7
2026-02-15T23:38:27.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:38:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:38:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.901491
2026-02-15T23:38:27.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:38:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:38:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:38:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:38:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:38:27.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:38:10', tmtdew=10.59, humidity=48.67, cloud=0.0, wind=23.56, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:38:10', seeing=1.66, atlas_timestamp='2026-02-15T21:38:08.822', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:34:00')
2026-02-15T23:38:27.988 [DEBUG] [Thread-213240] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:38:28.082 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:38:28.094 [DEBUG] [Thread-213243] [transport.py] [_log()] starting thread (client mode): 0xa57d4220
2026-02-15T23:38:28.095 [DEBUG] [Thread-213243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:38:28.110 [DEBUG] [Thread-213243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:38:28.110 [INFO] [Thread-213243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:38:28.118 [DEBUG] [Thread-213243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:38:28.118 [DEBUG] [Thread-213243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] client lang: <none>
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] server lang: <none>
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] kex follows: False
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] Compression: none
2026-02-15T23:38:28.119 [DEBUG] [Thread-213243] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:38:28.180 [DEBUG] [Thread-213243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:38:28.181 [DEBUG] [Thread-213243] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:38:28.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:38:28.182 [DEBUG] [Thread-213243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:38:28.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:38:28.240 [DEBUG] [Thread-213243] [transport.py] [_log()] userauth is OK
2026-02-15T23:38:28.240 [DEBUG] [Thread-213243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:38:28.240 [DEBUG] [Thread-213243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:38:28.240 [DEBUG] [Thread-213243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:38:28.240 [DEBUG] [Thread-213243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:38:28.260 [INFO] [Thread-213243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:38:28.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:38:28.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:38:29.126 [DEBUG] [Thread-213243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:38:29.126 [DEBUG] [Thread-213243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:38:29.174 [DEBUG] [Thread-213243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:38:29.174 [DEBUG] [Thread-213243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:38:29.183 [DEBUG] [Thread-213243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:38:29.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:38:29.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:38:29.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:38:29.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:38:29.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:38:29.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:38:29.227 [DEBUG] [Thread-213243] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:38:35.239 [DEBUG] [Thread-213245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:39.659 [DEBUG] [Thread-213246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:46.965 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:51.326 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:51.338 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:54.700 [DEBUG] [Thread-213247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:38:59.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:38:59.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:38:59.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:39:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 38, 46), 10.52, 49.2, 0.0, 22.66, 14.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:39:01.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:38:46
2026-02-15T23:39:01.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:39:01.576 [DEBUG] [Thread-213248] [transport.py] [_log()] starting thread (client mode): 0xa2d3fc70
2026-02-15T23:39:01.585 [DEBUG] [Thread-213248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:39:01.594 [DEBUG] [Thread-213248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:39:01.594 [INFO] [Thread-213248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] client lang: <none>
2026-02-15T23:39:01.597 [DEBUG] [Thread-213248] [transport.py] [_log()] server lang: <none>
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] kex follows: False
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] Compression: none
2026-02-15T23:39:01.598 [DEBUG] [Thread-213248] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:39:01.606 [DEBUG] [Thread-213248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:39:01.606 [DEBUG] [Thread-213248] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:39:01.607 [DEBUG] [Thread-213248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:39:01.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:39:01.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:39:01.608 [DEBUG] [Thread-213248] [transport.py] [_log()] userauth is OK
2026-02-15T23:39:01.609 [DEBUG] [Thread-213248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:39:01.609 [DEBUG] [Thread-213248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:39:01.609 [DEBUG] [Thread-213248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:39:01.609 [DEBUG] [Thread-213248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:39:01.626 [INFO] [Thread-213248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:39:01.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:39:02.244 [DEBUG] [Thread-213248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:39:02.244 [DEBUG] [Thread-213248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:39:02.245 [DEBUG] [Thread-213248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:39:02.285 [DEBUG] [Thread-213248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:39:02.285 [DEBUG] [Thread-213248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:39:02.288 [DEBUG] [Thread-213248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:39:02.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:39:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:39:02.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:39:02.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:39:02.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:39:02.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:39:02.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:39:02.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:39:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:39:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.901838 -999.00  +14.40  17.17     53   +5.00 1 1 1 1 1     0    0 8.85 -21.20 ZNESW 21.6 17.2 144.6 23.1 14.7 -24.3 14.6 -23.2 14.4 -22.1 14.7 -23.5
2026-02-15T23:39:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:39:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:39:02.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.901838
2026-02-15T23:39:02.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:39:02.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:39:02.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:39:02.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:39:02.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:39:02.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:38:46', tmtdew=10.52, humidity=49.2, cloud=0.0, wind=22.66, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:38:46', seeing=1.36, atlas_timestamp='2026-02-15T21:38:38.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:37:00')
2026-02-15T23:39:02.314 [DEBUG] [Thread-213248] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:39:02.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:39:02.411 [DEBUG] [Thread-213251] [transport.py] [_log()] starting thread (client mode): 0xa2d3eaa0
2026-02-15T23:39:02.411 [DEBUG] [Thread-213251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:39:02.427 [DEBUG] [Thread-213251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:39:02.428 [INFO] [Thread-213251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:39:02.435 [DEBUG] [Thread-213251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:39:02.435 [DEBUG] [Thread-213251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] client lang: <none>
2026-02-15T23:39:02.436 [DEBUG] [Thread-213251] [transport.py] [_log()] server lang: <none>
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] kex follows: False
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:39:02.437 [DEBUG] [Thread-213251] [transport.py] [_log()] Compression: none
2026-02-15T23:39:02.438 [DEBUG] [Thread-213251] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:39:02.495 [DEBUG] [Thread-213251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:39:02.496 [DEBUG] [Thread-213251] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:39:02.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:39:02.497 [DEBUG] [Thread-213251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:39:02.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:39:02.553 [DEBUG] [Thread-213251] [transport.py] [_log()] userauth is OK
2026-02-15T23:39:02.554 [DEBUG] [Thread-213251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:39:02.554 [DEBUG] [Thread-213251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:39:02.554 [DEBUG] [Thread-213251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:39:02.554 [DEBUG] [Thread-213251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:39:02.573 [INFO] [Thread-213251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:39:02.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:39:02.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:39:03.425 [DEBUG] [Thread-213251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:39:03.425 [DEBUG] [Thread-213251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:39:03.473 [DEBUG] [Thread-213251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:39:03.473 [DEBUG] [Thread-213251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:39:03.482 [DEBUG] [Thread-213251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:39:03.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:39:03.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:39:03.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:39:03.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:39:03.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:39:03.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:39:03.519 [DEBUG] [Thread-213251] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:39:06.299 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:06.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:09.735 [DEBUG] [Thread-213253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:10.785 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:15.139 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:21.890 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:24.792 [DEBUG] [Thread-213254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:26.270 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:33.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:39:33.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:39:33.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:39:35.300 [DEBUG] [Thread-213255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 39, 21), 10.53, 49.19, 0.0, 22.44, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:39:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:39:21
2026-02-15T23:39:35.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:39:35.900 [DEBUG] [Thread-213256] [transport.py] [_log()] starting thread (client mode): 0xa2d057b0
2026-02-15T23:39:35.901 [DEBUG] [Thread-213256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:39:35.914 [DEBUG] [Thread-213256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:39:35.914 [INFO] [Thread-213256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] client lang: <none>
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] server lang: <none>
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] kex follows: False
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] Compression: none
2026-02-15T23:39:35.917 [DEBUG] [Thread-213256] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:39:35.931 [DEBUG] [Thread-213256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:39:35.931 [DEBUG] [Thread-213256] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:39:35.931 [DEBUG] [Thread-213256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:39:35.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:39:35.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:39:35.932 [DEBUG] [Thread-213256] [transport.py] [_log()] userauth is OK
2026-02-15T23:39:35.932 [DEBUG] [Thread-213256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:39:35.932 [DEBUG] [Thread-213256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:39:35.932 [DEBUG] [Thread-213256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:39:35.932 [DEBUG] [Thread-213256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:39:35.947 [INFO] [Thread-213256] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:39:35.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:39:36.546 [DEBUG] [Thread-213256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:39:36.546 [DEBUG] [Thread-213256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:39:36.547 [DEBUG] [Thread-213256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:39:36.587 [DEBUG] [Thread-213256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:39:36.588 [DEBUG] [Thread-213256] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:39:36.590 [DEBUG] [Thread-213256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:39:36.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:39:36.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:39:36.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:39:36.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:39:36.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:39:36.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:39:36.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:39:36.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:39:36.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:39:36.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.902185 -999.00  +14.30  17.29     53   +5.00 1 1 1 1 1     0    0 8.87 -21.26 ZNESW 16.6 17.3 160.0 25.9 14.6 -24.2 14.6 -23.3 14.4 -22.0 14.7 -23.3
2026-02-15T23:39:36.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:39:36.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:39:36.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.902185
2026-02-15T23:39:36.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:39:36.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:39:36.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:39:36.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:39:36.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:39:36.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:39:21', tmtdew=10.53, humidity=49.19, cloud=0.0, wind=22.44, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:39:22', seeing=1.15, atlas_timestamp='2026-02-15T21:39:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:37:00')
2026-02-15T23:39:36.612 [DEBUG] [Thread-213256] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:39:36.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:39:36.706 [DEBUG] [Thread-213259] [transport.py] [_log()] starting thread (client mode): 0xa2d55180
2026-02-15T23:39:36.706 [DEBUG] [Thread-213259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:39:36.726 [DEBUG] [Thread-213259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:39:36.726 [INFO] [Thread-213259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:39:36.736 [DEBUG] [Thread-213259] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:39:36.736 [DEBUG] [Thread-213259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:39:36.736 [DEBUG] [Thread-213259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:39:36.736 [DEBUG] [Thread-213259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:36.736 [DEBUG] [Thread-213259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] client lang: <none>
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] server lang: <none>
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] kex follows: False
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] Compression: none
2026-02-15T23:39:36.737 [DEBUG] [Thread-213259] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:39:36.798 [DEBUG] [Thread-213259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:39:36.798 [DEBUG] [Thread-213259] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:39:36.799 [DEBUG] [Thread-213259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:39:36.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:39:36.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:39:36.858 [DEBUG] [Thread-213259] [transport.py] [_log()] userauth is OK
2026-02-15T23:39:36.858 [DEBUG] [Thread-213259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:39:36.858 [DEBUG] [Thread-213259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:39:36.858 [DEBUG] [Thread-213259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:39:36.858 [DEBUG] [Thread-213259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:39:36.877 [INFO] [Thread-213259] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:39:36.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:39:36.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:39:37.693 [DEBUG] [Thread-213259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:39:37.693 [DEBUG] [Thread-213259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:39:37.741 [DEBUG] [Thread-213259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:39:37.742 [DEBUG] [Thread-213259] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:39:37.751 [DEBUG] [Thread-213259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:39:37.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:39:37.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:39:37.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:39:37.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:39:37.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:39:37.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:39:37.789 [DEBUG] [Thread-213259] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:39:39.828 [DEBUG] [Thread-213261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:39:54.881 [DEBUG] [Thread-213262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:06.505 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:06.506 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:07.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:40:07.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:40:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:40:09.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 39, 57), 10.57, 49.2, 0.0, 21.54, 14.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:40:09.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:39:57
2026-02-15T23:40:09.921 [DEBUG] [Thread-213263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:10.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:40:10.383 [DEBUG] [Thread-213264] [transport.py] [_log()] starting thread (client mode): 0xa2d564d0
2026-02-15T23:40:10.383 [DEBUG] [Thread-213264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:40:10.405 [DEBUG] [Thread-213264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:40:10.406 [INFO] [Thread-213264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:40:10.409 [DEBUG] [Thread-213264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] client lang: <none>
2026-02-15T23:40:10.410 [DEBUG] [Thread-213264] [transport.py] [_log()] server lang: <none>
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] kex follows: False
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] Compression: none
2026-02-15T23:40:10.411 [DEBUG] [Thread-213264] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:40:10.429 [DEBUG] [Thread-213264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:40:10.430 [DEBUG] [Thread-213264] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:40:10.430 [DEBUG] [Thread-213264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:40:10.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:40:10.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:40:10.432 [DEBUG] [Thread-213264] [transport.py] [_log()] userauth is OK
2026-02-15T23:40:10.433 [DEBUG] [Thread-213264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:40:10.433 [DEBUG] [Thread-213264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:40:10.433 [DEBUG] [Thread-213264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:40:10.433 [DEBUG] [Thread-213264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:40:10.455 [INFO] [Thread-213264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:40:10.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:40:12.289 [DEBUG] [Thread-213264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:40:12.289 [DEBUG] [Thread-213264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:40:12.290 [DEBUG] [Thread-213264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:40:12.330 [DEBUG] [Thread-213264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:40:12.330 [DEBUG] [Thread-213264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:40:12.333 [DEBUG] [Thread-213264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:40:12.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:40:12.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:40:12.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:40:12.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:40:12.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:40:12.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:40:12.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:40:12.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:40:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:40:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.902532 -999.00  +14.30  17.11     53   +5.00 1 1 1 1 1     0    0 8.97 -24.80 ZNESW 20.4 17.1 152.6 22.7 14.7 -24.3 14.6 -23.2 14.3 -22.2 14.6 -23.4
2026-02-15T23:40:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:40:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:40:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.902532
2026-02-15T23:40:12.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:40:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:40:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:40:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:40:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:40:12.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:39:57', tmtdew=10.57, humidity=49.2, cloud=0.0, wind=21.54, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:39:57', seeing=1.16, atlas_timestamp='2026-02-15T21:39:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:37:00')
2026-02-15T23:40:12.361 [DEBUG] [Thread-213264] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:40:12.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:40:12.468 [DEBUG] [Thread-213267] [transport.py] [_log()] starting thread (client mode): 0xa2d54460
2026-02-15T23:40:12.468 [DEBUG] [Thread-213267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:40:12.482 [DEBUG] [Thread-213267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:40:12.482 [INFO] [Thread-213267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] client lang: <none>
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] server lang: <none>
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] kex follows: False
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:40:12.490 [DEBUG] [Thread-213267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:40:12.491 [DEBUG] [Thread-213267] [transport.py] [_log()] Compression: none
2026-02-15T23:40:12.491 [DEBUG] [Thread-213267] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:40:12.548 [DEBUG] [Thread-213267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:40:12.548 [DEBUG] [Thread-213267] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:40:12.549 [DEBUG] [Thread-213267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:40:12.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:40:12.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:40:12.605 [DEBUG] [Thread-213267] [transport.py] [_log()] userauth is OK
2026-02-15T23:40:12.605 [DEBUG] [Thread-213267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:40:12.605 [DEBUG] [Thread-213267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:40:12.606 [DEBUG] [Thread-213267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:40:12.606 [DEBUG] [Thread-213267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:40:12.624 [INFO] [Thread-213267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:40:12.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:40:12.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:40:13.441 [DEBUG] [Thread-213267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:40:13.441 [DEBUG] [Thread-213267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:40:13.489 [DEBUG] [Thread-213267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:40:13.489 [DEBUG] [Thread-213267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:40:13.497 [DEBUG] [Thread-213267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:40:13.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:40:13.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:40:13.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:40:13.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:40:13.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:40:13.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:40:13.529 [DEBUG] [Thread-213267] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:40:24.949 [DEBUG] [Thread-213269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:25.158 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:25.161 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:28.235 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:35.358 [DEBUG] [Thread-213270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:39.989 [DEBUG] [Thread-213271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:43.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:40:43.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:40:43.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:40:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 40, 32), 10.72, 48.5, 0.0, 23.39, 14.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:40:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:40:32
2026-02-15T23:40:45.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:40:45.991 [DEBUG] [Thread-213272] [transport.py] [_log()] starting thread (client mode): 0xa81d5ed0
2026-02-15T23:40:45.991 [DEBUG] [Thread-213272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:40:46.011 [DEBUG] [Thread-213272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:40:46.011 [INFO] [Thread-213272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:40:46.014 [DEBUG] [Thread-213272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] client lang: <none>
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] server lang: <none>
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] kex follows: False
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] Compression: none
2026-02-15T23:40:46.015 [DEBUG] [Thread-213272] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:40:46.032 [DEBUG] [Thread-213272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:40:46.033 [DEBUG] [Thread-213272] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:40:46.033 [DEBUG] [Thread-213272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:40:46.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:40:46.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:40:46.035 [DEBUG] [Thread-213272] [transport.py] [_log()] userauth is OK
2026-02-15T23:40:46.036 [DEBUG] [Thread-213272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:40:46.036 [DEBUG] [Thread-213272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:40:46.036 [DEBUG] [Thread-213272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:40:46.036 [DEBUG] [Thread-213272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:40:46.054 [INFO] [Thread-213272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:40:46.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:40:46.633 [DEBUG] [Thread-213272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:40:46.633 [DEBUG] [Thread-213272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:40:46.633 [DEBUG] [Thread-213272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:40:46.674 [DEBUG] [Thread-213272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:40:46.675 [DEBUG] [Thread-213272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:40:46.678 [DEBUG] [Thread-213272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:40:46.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:40:46.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:40:46.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:40:46.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:40:46.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:40:46.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:40:46.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:40:46.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:40:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:40:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.902532 -999.00  +14.30  17.11     53   +5.00 1 1 1 1 1     0    0 8.97 -24.80 ZNESW 20.4 17.1 152.6 22.7 14.7 -24.3 14.6 -23.2 14.3 -22.2 14.6 -23.4
2026-02-15T23:40:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:40:46.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:40:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.902532
2026-02-15T23:40:46.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:40:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:40:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:40:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:40:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:40:46.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:40:32', tmtdew=10.72, humidity=48.5, cloud=0.0, wind=23.39, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:40:33', seeing=1.25, atlas_timestamp='2026-02-15T21:39:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:37:00')
2026-02-15T23:40:46.703 [DEBUG] [Thread-213272] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:40:46.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:40:46.799 [DEBUG] [Thread-213275] [transport.py] [_log()] starting thread (client mode): 0xa2d79ae0
2026-02-15T23:40:46.799 [DEBUG] [Thread-213275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:40:46.814 [DEBUG] [Thread-213275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:40:46.814 [INFO] [Thread-213275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:40:46.822 [DEBUG] [Thread-213275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:40:46.822 [DEBUG] [Thread-213275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:40:46.822 [DEBUG] [Thread-213275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] client lang: <none>
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] server lang: <none>
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] kex follows: False
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:40:46.823 [DEBUG] [Thread-213275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:40:46.824 [DEBUG] [Thread-213275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:40:46.824 [DEBUG] [Thread-213275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:40:46.824 [DEBUG] [Thread-213275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:40:46.824 [DEBUG] [Thread-213275] [transport.py] [_log()] Compression: none
2026-02-15T23:40:46.824 [DEBUG] [Thread-213275] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:40:46.883 [DEBUG] [Thread-213275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:40:46.883 [DEBUG] [Thread-213275] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:40:46.884 [DEBUG] [Thread-213275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:40:46.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:40:46.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:40:46.941 [DEBUG] [Thread-213275] [transport.py] [_log()] userauth is OK
2026-02-15T23:40:46.941 [DEBUG] [Thread-213275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:40:46.941 [DEBUG] [Thread-213275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:40:46.941 [DEBUG] [Thread-213275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:40:46.941 [DEBUG] [Thread-213275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:40:46.965 [INFO] [Thread-213275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:40:46.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:40:46.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:40:47.790 [DEBUG] [Thread-213275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:40:47.791 [DEBUG] [Thread-213275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:40:47.839 [DEBUG] [Thread-213275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:40:47.839 [DEBUG] [Thread-213275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:40:47.848 [DEBUG] [Thread-213275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:40:47.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:40:47.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:40:47.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:40:47.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:40:47.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:40:47.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:40:47.885 [DEBUG] [Thread-213275] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:40:54.635 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:55.021 [DEBUG] [Thread-213277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:40:59.494 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:02.570 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:06.705 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:06.706 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:09.089 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:10.062 [DEBUG] [Thread-213278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:17.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:41:17.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:41:17.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:41:19.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 41, 8), 10.49, 49.32, 0.0, 22.2, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:41:19.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:41:08
2026-02-15T23:41:20.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:41:20.216 [DEBUG] [Thread-213279] [transport.py] [_log()] starting thread (client mode): 0xa2d3d0f0
2026-02-15T23:41:20.216 [DEBUG] [Thread-213279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:41:20.235 [DEBUG] [Thread-213279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:41:20.235 [INFO] [Thread-213279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:41:20.238 [DEBUG] [Thread-213279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:41:20.238 [DEBUG] [Thread-213279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] client lang: <none>
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] server lang: <none>
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] kex follows: False
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:41:20.239 [DEBUG] [Thread-213279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:41:20.240 [DEBUG] [Thread-213279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:41:20.240 [DEBUG] [Thread-213279] [transport.py] [_log()] Compression: none
2026-02-15T23:41:20.240 [DEBUG] [Thread-213279] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:41:20.256 [DEBUG] [Thread-213279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:41:20.257 [DEBUG] [Thread-213279] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:41:20.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:41:20.259 [DEBUG] [Thread-213279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:41:20.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:41:20.302 [DEBUG] [Thread-213279] [transport.py] [_log()] userauth is OK
2026-02-15T23:41:20.302 [DEBUG] [Thread-213279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:41:20.302 [DEBUG] [Thread-213279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:41:20.302 [DEBUG] [Thread-213279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:41:20.302 [DEBUG] [Thread-213279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:41:20.322 [INFO] [Thread-213279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:41:20.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:41:21.097 [DEBUG] [Thread-213279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:41:21.097 [DEBUG] [Thread-213279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:41:21.097 [DEBUG] [Thread-213279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:41:21.138 [DEBUG] [Thread-213279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:41:21.139 [DEBUG] [Thread-213279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:41:21.142 [DEBUG] [Thread-213279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:41:21.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:41:21.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:41:21.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:41:21.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:41:21.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:41:21.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:41:21.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:41:21.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:41:21.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:41:21.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.903227 -999.00  +14.30  18.27     53   +5.00 1 1 1 1 1     0    0 9.02 -22.77 ZNESW 17.8 18.3 146.4 26.5 14.7 -24.3 14.6 -23.3 14.3 -22.1 14.6 -23.3
2026-02-15T23:41:21.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:41:21.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:41:21.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.903227
2026-02-15T23:41:21.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:41:21.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:41:21.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:41:21.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:41:21.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:41:21.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:41:08', tmtdew=10.49, humidity=49.32, cloud=0.0, wind=22.2, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:41:08', seeing=1.5, atlas_timestamp='2026-02-15T21:40:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:37:00')
2026-02-15T23:41:21.170 [DEBUG] [Thread-213279] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:41:21.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:41:21.268 [DEBUG] [Thread-213282] [transport.py] [_log()] starting thread (client mode): 0xa2d7be80
2026-02-15T23:41:21.268 [DEBUG] [Thread-213282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:41:21.283 [DEBUG] [Thread-213282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:41:21.283 [INFO] [Thread-213282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] client lang: <none>
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] server lang: <none>
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] kex follows: False
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] Compression: none
2026-02-15T23:41:21.291 [DEBUG] [Thread-213282] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:41:21.347 [DEBUG] [Thread-213282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:41:21.347 [DEBUG] [Thread-213282] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:41:21.347 [DEBUG] [Thread-213282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:41:21.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:41:21.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:41:21.404 [DEBUG] [Thread-213282] [transport.py] [_log()] userauth is OK
2026-02-15T23:41:21.404 [DEBUG] [Thread-213282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:41:21.405 [DEBUG] [Thread-213282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:41:21.405 [DEBUG] [Thread-213282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:41:21.405 [DEBUG] [Thread-213282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:41:21.418 [INFO] [Thread-213282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:41:21.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:41:21.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:41:22.264 [DEBUG] [Thread-213282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:41:22.264 [DEBUG] [Thread-213282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:41:22.313 [DEBUG] [Thread-213282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:41:22.313 [DEBUG] [Thread-213282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:41:22.322 [DEBUG] [Thread-213282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:41:22.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:41:22.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:41:22.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:41:22.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:41:22.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:41:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:41:22.359 [DEBUG] [Thread-213282] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:41:25.096 [DEBUG] [Thread-213284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:35.414 [DEBUG] [Thread-213285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:40.146 [DEBUG] [Thread-213286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:52.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:41:52.381 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:41:52.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:41:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 41, 43), 10.67, 48.67, 0.0, 24.06, 14.52, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:41:54.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:41:43
2026-02-15T23:41:54.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:41:54.732 [DEBUG] [Thread-213287] [transport.py] [_log()] starting thread (client mode): 0xa81d7d60
2026-02-15T23:41:54.733 [DEBUG] [Thread-213287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:41:54.753 [DEBUG] [Thread-213287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:41:54.753 [INFO] [Thread-213287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] client lang: <none>
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] server lang: <none>
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] kex follows: False
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] Compression: none
2026-02-15T23:41:54.756 [DEBUG] [Thread-213287] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:41:54.774 [DEBUG] [Thread-213287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:41:54.774 [DEBUG] [Thread-213287] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:41:54.775 [DEBUG] [Thread-213287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:41:54.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:41:54.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:41:54.777 [DEBUG] [Thread-213287] [transport.py] [_log()] userauth is OK
2026-02-15T23:41:54.777 [DEBUG] [Thread-213287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:41:54.777 [DEBUG] [Thread-213287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:41:54.777 [DEBUG] [Thread-213287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:41:54.777 [DEBUG] [Thread-213287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:41:54.812 [INFO] [Thread-213287] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:41:54.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:41:55.185 [DEBUG] [Thread-213289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:41:55.426 [DEBUG] [Thread-213287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:41:55.427 [DEBUG] [Thread-213287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:41:55.427 [DEBUG] [Thread-213287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:41:55.467 [DEBUG] [Thread-213287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:41:55.467 [DEBUG] [Thread-213287] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:41:55.471 [DEBUG] [Thread-213287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:41:55.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:41:55.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:41:55.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:41:55.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:41:55.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:41:55.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:41:55.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:41:55.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:41:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:41:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.903574 -999.00  +14.30  21.24     53   +5.00 1 1 1 1 1     0    0 9.02 -22.15 ZNESW 17.6 21.2 139.0 23.9 14.6 -24.3 14.5 -23.2 14.3 -22.1 14.7 -23.5
2026-02-15T23:41:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:41:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:41:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.903574
2026-02-15T23:41:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:41:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:41:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:41:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:41:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:41:55.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:41:43', tmtdew=10.67, humidity=48.67, cloud=0.0, wind=24.06, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:41:43', seeing=1.26, atlas_timestamp='2026-02-15T21:41:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.060249999999999915, -0.03074999999999939, -0.00274999999999892, -0.015499999999999403, -0.041499999999999204, -0.008749999999999147, -0.0030000000000001137, -0.03575000000000017, 0.0259999999999998, 0.034000000000000696, -0.06375000000000064, 0.017000000000001236, 0.04899999999999949, 0.03775000000000084, 0.02099999999999902, 0.01899999999999835, 0.03924999999999912, 0.03799999999999848, -0.005000000000000782, -0.0027500000000006963, 0.027999999999998693, 0.020749999999999602, -0.007749999999999702, 0.014749999999999375, 0.04899999999999949, 0.013500000000000512, 0.0012500000000006395, -0.026500000000000412, 0.09999999999999964, -0.0024999999999995026, 0.04600000000000115, 0.09550000000000125, 0.036749999999999616], zp_timestamp='2026-02-15T21:37:00')
2026-02-15T23:41:55.499 [DEBUG] [Thread-213287] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:41:55.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:41:55.596 [DEBUG] [Thread-213291] [transport.py] [_log()] starting thread (client mode): 0xa57d78e0
2026-02-15T23:41:55.596 [DEBUG] [Thread-213291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:41:55.611 [DEBUG] [Thread-213291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:41:55.611 [INFO] [Thread-213291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:41:55.618 [DEBUG] [Thread-213291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] client lang: <none>
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] server lang: <none>
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] kex follows: False
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:41:55.619 [DEBUG] [Thread-213291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:41:55.620 [DEBUG] [Thread-213291] [transport.py] [_log()] Compression: none
2026-02-15T23:41:55.620 [DEBUG] [Thread-213291] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:41:55.676 [DEBUG] [Thread-213291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:41:55.676 [DEBUG] [Thread-213291] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:41:55.676 [DEBUG] [Thread-213291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:41:55.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:41:55.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:41:55.732 [DEBUG] [Thread-213291] [transport.py] [_log()] userauth is OK
2026-02-15T23:41:55.732 [DEBUG] [Thread-213291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:41:55.732 [DEBUG] [Thread-213291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:41:55.732 [DEBUG] [Thread-213291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:41:55.732 [DEBUG] [Thread-213291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:41:55.748 [INFO] [Thread-213291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:41:55.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:41:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:41:56.530 [DEBUG] [Thread-213291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:41:56.530 [DEBUG] [Thread-213291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:41:56.577 [DEBUG] [Thread-213291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:41:56.578 [DEBUG] [Thread-213291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:41:56.587 [DEBUG] [Thread-213291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:41:56.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:41:56.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:41:56.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:41:56.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:41:56.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:41:56.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:41:56.624 [DEBUG] [Thread-213291] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:41:58.751 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:06.904 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:06.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:10.224 [DEBUG] [Thread-213293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:10.825 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:14.022 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:19.079 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:24.567 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:25.274 [DEBUG] [Thread-213294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:26.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:42:26.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:42:26.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:42:28.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 42, 18), 10.48, 49.35, 0.0, 22.89, 14.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:42:28.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:42:18
2026-02-15T23:42:29.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:42:29.196 [DEBUG] [Thread-213295] [transport.py] [_log()] starting thread (client mode): 0xa5773a90
2026-02-15T23:42:29.196 [DEBUG] [Thread-213295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:42:29.216 [DEBUG] [Thread-213295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:42:29.216 [INFO] [Thread-213295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:42:29.219 [DEBUG] [Thread-213295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:42:29.219 [DEBUG] [Thread-213295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:42:29.219 [DEBUG] [Thread-213295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:42:29.219 [DEBUG] [Thread-213295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] client lang: <none>
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] server lang: <none>
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] kex follows: False
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:42:29.220 [DEBUG] [Thread-213295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:42:29.221 [DEBUG] [Thread-213295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:42:29.221 [DEBUG] [Thread-213295] [transport.py] [_log()] Compression: none
2026-02-15T23:42:29.221 [DEBUG] [Thread-213295] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:42:29.241 [DEBUG] [Thread-213295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:42:29.242 [DEBUG] [Thread-213295] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:42:29.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:42:29.243 [DEBUG] [Thread-213295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:42:29.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:42:29.245 [DEBUG] [Thread-213295] [transport.py] [_log()] userauth is OK
2026-02-15T23:42:29.245 [DEBUG] [Thread-213295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:42:29.245 [DEBUG] [Thread-213295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:42:29.245 [DEBUG] [Thread-213295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:42:29.246 [DEBUG] [Thread-213295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:42:29.268 [INFO] [Thread-213295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:42:29.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:42:29.922 [DEBUG] [Thread-213295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:42:29.922 [DEBUG] [Thread-213295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:42:29.922 [DEBUG] [Thread-213295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:42:29.963 [DEBUG] [Thread-213295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:42:29.963 [DEBUG] [Thread-213295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:42:29.965 [DEBUG] [Thread-213295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:42:29.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:42:29.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:42:29.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:42:29.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:42:29.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:42:29.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:42:29.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.903921 -999.00  +14.30  16.01     53   +5.00 1 1 1 1 1     0    0 8.79 -24.35 ZNESW 16.3 16.0 151.2 21.4 14.6 -24.4 14.5 -23.2 14.3 -22.2 14.7 -23.5
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.903921
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:42:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:42:18', tmtdew=10.48, humidity=49.35, cloud=0.0, wind=22.89, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:42:18', seeing=1.22, atlas_timestamp='2026-02-15T21:41:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:40:00')
2026-02-15T23:42:29.988 [DEBUG] [Thread-213295] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:42:30.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:42:30.084 [DEBUG] [Thread-213298] [transport.py] [_log()] starting thread (client mode): 0xa2d3fbb0
2026-02-15T23:42:30.084 [DEBUG] [Thread-213298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:42:30.098 [DEBUG] [Thread-213298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:42:30.098 [INFO] [Thread-213298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] client lang: <none>
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] server lang: <none>
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] kex follows: False
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] Compression: none
2026-02-15T23:42:30.106 [DEBUG] [Thread-213298] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:42:30.163 [DEBUG] [Thread-213298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:42:30.163 [DEBUG] [Thread-213298] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:42:30.163 [DEBUG] [Thread-213298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:42:30.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:42:30.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:42:30.224 [DEBUG] [Thread-213298] [transport.py] [_log()] userauth is OK
2026-02-15T23:42:30.224 [DEBUG] [Thread-213298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:42:30.225 [DEBUG] [Thread-213298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:42:30.225 [DEBUG] [Thread-213298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:42:30.225 [DEBUG] [Thread-213298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:42:30.239 [INFO] [Thread-213298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:42:30.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:42:30.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:42:31.079 [DEBUG] [Thread-213298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:42:31.079 [DEBUG] [Thread-213298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:42:31.127 [DEBUG] [Thread-213298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:42:31.127 [DEBUG] [Thread-213298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:42:31.137 [DEBUG] [Thread-213298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:42:31.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:42:31.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:42:31.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:42:31.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:42:31.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:42:31.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:42:31.177 [DEBUG] [Thread-213298] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:42:35.491 [DEBUG] [Thread-213300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:40.307 [DEBUG] [Thread-213301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:43.897 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:48.271 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:42:55.359 [DEBUG] [Thread-213302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:01.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:43:01.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:43:01.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:43:03.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 42, 53), 10.46, 49.4, 0.0, 22.5, 14.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:43:03.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:42:53
2026-02-15T23:43:03.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:43:03.536 [DEBUG] [Thread-213303] [transport.py] [_log()] starting thread (client mode): 0xa2d3e350
2026-02-15T23:43:03.536 [DEBUG] [Thread-213303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:43:03.556 [DEBUG] [Thread-213303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:43:03.556 [INFO] [Thread-213303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:43:03.559 [DEBUG] [Thread-213303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:43:03.559 [DEBUG] [Thread-213303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:43:03.559 [DEBUG] [Thread-213303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] client lang: <none>
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] server lang: <none>
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] kex follows: False
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:43:03.560 [DEBUG] [Thread-213303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:43:03.561 [DEBUG] [Thread-213303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:43:03.561 [DEBUG] [Thread-213303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:43:03.561 [DEBUG] [Thread-213303] [transport.py] [_log()] Compression: none
2026-02-15T23:43:03.561 [DEBUG] [Thread-213303] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:43:03.580 [DEBUG] [Thread-213303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:43:03.581 [DEBUG] [Thread-213303] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:43:03.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:43:03.582 [DEBUG] [Thread-213303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:43:03.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:43:03.584 [DEBUG] [Thread-213303] [transport.py] [_log()] userauth is OK
2026-02-15T23:43:03.584 [DEBUG] [Thread-213303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:43:03.584 [DEBUG] [Thread-213303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:43:03.584 [DEBUG] [Thread-213303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:43:03.584 [DEBUG] [Thread-213303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:43:03.620 [INFO] [Thread-213303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:43:03.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:43:04.230 [DEBUG] [Thread-213303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:43:04.231 [DEBUG] [Thread-213303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:43:04.231 [DEBUG] [Thread-213303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:43:04.271 [DEBUG] [Thread-213303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:43:04.272 [DEBUG] [Thread-213303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:43:04.275 [DEBUG] [Thread-213303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:43:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:43:04.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:43:04.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:43:04.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:43:04.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:43:04.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:43:04.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:43:04.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:43:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:43:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.904268 -999.00  +14.30  17.71     53   +5.00 1 1 1 1 1     0    0 8.79 -24.48 ZNESW 14.9 17.7 149.6 24.2 14.6 -24.3 14.5 -23.3 14.3 -22.3 14.6 -23.4
2026-02-15T23:43:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:43:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:43:04.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.904268
2026-02-15T23:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:43:04.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:43:04.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:42:53', tmtdew=10.46, humidity=49.4, cloud=0.0, wind=22.5, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:42:54', seeing=1.22, atlas_timestamp='2026-02-15T21:42:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:40:00')
2026-02-15T23:43:04.303 [DEBUG] [Thread-213303] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:43:04.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:43:04.399 [DEBUG] [Thread-213306] [transport.py] [_log()] starting thread (client mode): 0xa2d574f0
2026-02-15T23:43:04.399 [DEBUG] [Thread-213306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:43:04.414 [DEBUG] [Thread-213306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:43:04.414 [INFO] [Thread-213306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:43:04.422 [DEBUG] [Thread-213306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] client lang: <none>
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] server lang: <none>
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] kex follows: False
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:43:04.423 [DEBUG] [Thread-213306] [transport.py] [_log()] Compression: none
2026-02-15T23:43:04.424 [DEBUG] [Thread-213306] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:43:04.481 [DEBUG] [Thread-213306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:43:04.482 [DEBUG] [Thread-213306] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:43:04.482 [DEBUG] [Thread-213306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:43:04.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:43:04.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:43:04.537 [DEBUG] [Thread-213306] [transport.py] [_log()] userauth is OK
2026-02-15T23:43:04.537 [DEBUG] [Thread-213306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:43:04.537 [DEBUG] [Thread-213306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:43:04.537 [DEBUG] [Thread-213306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:43:04.537 [DEBUG] [Thread-213306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:43:04.556 [INFO] [Thread-213306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:43:04.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:43:04.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:43:05.380 [DEBUG] [Thread-213306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:43:05.380 [DEBUG] [Thread-213306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:43:05.428 [DEBUG] [Thread-213306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:43:05.428 [DEBUG] [Thread-213306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:43:05.436 [DEBUG] [Thread-213306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:43:05.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:43:05.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:43:05.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:43:05.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:43:05.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:43:05.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:43:05.468 [DEBUG] [Thread-213306] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:43:07.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:07.108 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:07.763 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:10.410 [DEBUG] [Thread-213308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:12.132 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:18.871 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:23.241 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:25.460 [DEBUG] [Thread-213309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:32.378 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:35.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:43:35.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:43:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:43:35.579 [DEBUG] [Thread-213310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 43, 29), 10.43, 49.52, 0.0, 22.94, 14.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:43:37.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:43:29
2026-02-15T23:43:37.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:43:37.867 [DEBUG] [Thread-213311] [transport.py] [_log()] starting thread (client mode): 0xa2d558d0
2026-02-15T23:43:37.868 [DEBUG] [Thread-213311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:43:37.886 [DEBUG] [Thread-213311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:43:37.887 [INFO] [Thread-213311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:43:37.890 [DEBUG] [Thread-213311] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:43:37.890 [DEBUG] [Thread-213311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:43:37.890 [DEBUG] [Thread-213311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:43:37.890 [DEBUG] [Thread-213311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] client lang: <none>
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] server lang: <none>
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] kex follows: False
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:43:37.891 [DEBUG] [Thread-213311] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:43:37.892 [DEBUG] [Thread-213311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:43:37.892 [DEBUG] [Thread-213311] [transport.py] [_log()] Compression: none
2026-02-15T23:43:37.892 [DEBUG] [Thread-213311] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:43:37.909 [DEBUG] [Thread-213311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:43:37.910 [DEBUG] [Thread-213311] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:43:37.910 [DEBUG] [Thread-213311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:43:37.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:43:37.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:43:37.953 [DEBUG] [Thread-213311] [transport.py] [_log()] userauth is OK
2026-02-15T23:43:37.953 [DEBUG] [Thread-213311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:43:37.954 [DEBUG] [Thread-213311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:43:37.954 [DEBUG] [Thread-213311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:43:37.954 [DEBUG] [Thread-213311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:43:37.973 [INFO] [Thread-213311] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:43:37.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:43:38.578 [DEBUG] [Thread-213311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:43:38.578 [DEBUG] [Thread-213311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:43:38.578 [DEBUG] [Thread-213311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:43:38.619 [DEBUG] [Thread-213311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:43:38.619 [DEBUG] [Thread-213311] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:43:38.622 [DEBUG] [Thread-213311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:43:38.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:43:38.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:43:38.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:43:38.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:43:38.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:43:38.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:43:38.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:43:38.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:43:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:43:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.904615 -999.00  +14.20  21.51     53   +5.00 1 1 1 1 1     0    0 8.65 -24.81 ZNESW 20.2 21.5 144.8 24.7 14.6 -24.3 14.6 -23.4 14.3 -22.2 14.6 -23.5
2026-02-15T23:43:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:43:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:43:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.904615
2026-02-15T23:43:38.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:43:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:43:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:43:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:43:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:43:38.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:43:29', tmtdew=10.43, humidity=49.52, cloud=0.0, wind=22.94, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:43:29', seeing=1.28, atlas_timestamp='2026-02-15T21:42:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:40:00')
2026-02-15T23:43:38.649 [DEBUG] [Thread-213311] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:43:38.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:43:38.746 [DEBUG] [Thread-213314] [transport.py] [_log()] starting thread (client mode): 0xa5772680
2026-02-15T23:43:38.746 [DEBUG] [Thread-213314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:43:38.761 [DEBUG] [Thread-213314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:43:38.762 [INFO] [Thread-213314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:43:38.769 [DEBUG] [Thread-213314] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:43:38.769 [DEBUG] [Thread-213314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:43:38.769 [DEBUG] [Thread-213314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] client lang: <none>
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] server lang: <none>
2026-02-15T23:43:38.770 [DEBUG] [Thread-213314] [transport.py] [_log()] kex follows: False
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] Compression: none
2026-02-15T23:43:38.771 [DEBUG] [Thread-213314] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:43:38.829 [DEBUG] [Thread-213314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:43:38.830 [DEBUG] [Thread-213314] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:43:38.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:43:38.831 [DEBUG] [Thread-213314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:43:38.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:43:38.889 [DEBUG] [Thread-213314] [transport.py] [_log()] userauth is OK
2026-02-15T23:43:38.889 [DEBUG] [Thread-213314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:43:38.890 [DEBUG] [Thread-213314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:43:38.890 [DEBUG] [Thread-213314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:43:38.890 [DEBUG] [Thread-213314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:43:38.909 [INFO] [Thread-213314] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:43:38.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:43:38.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:43:39.734 [DEBUG] [Thread-213314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:43:39.734 [DEBUG] [Thread-213314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:43:39.781 [DEBUG] [Thread-213314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:43:39.782 [DEBUG] [Thread-213314] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:43:39.791 [DEBUG] [Thread-213314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:43:39.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:43:39.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:43:39.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:43:39.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:43:39.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:43:39.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:43:39.828 [DEBUG] [Thread-213314] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:43:40.499 [DEBUG] [Thread-213316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:43:55.550 [DEBUG] [Thread-213317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:07.306 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:07.307 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:09.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:44:09.850 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:44:09.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:44:10.589 [DEBUG] [Thread-213318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:11.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 44, 4), 10.43, 49.5, 0.0, 21.44, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:44:11.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:44:04
2026-02-15T23:44:12.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:44:12.193 [DEBUG] [Thread-213319] [transport.py] [_log()] starting thread (client mode): 0xa5771390
2026-02-15T23:44:12.193 [DEBUG] [Thread-213319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:44:12.215 [DEBUG] [Thread-213319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:44:12.215 [INFO] [Thread-213319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:12.218 [DEBUG] [Thread-213319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] client lang: <none>
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] server lang: <none>
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] kex follows: False
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] Compression: none
2026-02-15T23:44:12.219 [DEBUG] [Thread-213319] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:44:12.236 [DEBUG] [Thread-213319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:44:12.236 [DEBUG] [Thread-213319] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:44:12.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:44:12.237 [DEBUG] [Thread-213319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:44:12.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:44:12.239 [DEBUG] [Thread-213319] [transport.py] [_log()] userauth is OK
2026-02-15T23:44:12.240 [DEBUG] [Thread-213319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:44:12.240 [DEBUG] [Thread-213319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:44:12.240 [DEBUG] [Thread-213319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:44:12.240 [DEBUG] [Thread-213319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:44:12.257 [INFO] [Thread-213319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:44:12.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:44:13.041 [DEBUG] [Thread-213319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:44:13.042 [DEBUG] [Thread-213319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:44:13.042 [DEBUG] [Thread-213319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:44:13.083 [DEBUG] [Thread-213319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:44:13.083 [DEBUG] [Thread-213319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:44:13.086 [DEBUG] [Thread-213319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:44:13.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:44:13.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:44:13.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:44:13.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:44:13.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:44:13.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:44:13.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:44:13.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:44:13.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:44:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.904963 -999.00  +14.20  17.46     54   +5.00 1 1 1 1 1     0    0 8.62 -26.87 ZNESW 19.7 17.5 146.4 24.7 14.6 -24.2 14.5 -23.2 14.3 -22.2 14.6 -23.3
2026-02-15T23:44:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:44:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:44:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.904963
2026-02-15T23:44:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:44:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:44:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:44:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:44:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:44:13.108 [DEBUG] [Thread-213319] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:44:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:44:04', tmtdew=10.43, humidity=49.5, cloud=0.0, wind=21.44, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:44:04', seeing=1.25, atlas_timestamp='2026-02-15T21:43:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:40:00')
2026-02-15T23:44:13.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:44:13.207 [DEBUG] [Thread-213322] [transport.py] [_log()] starting thread (client mode): 0xa57e2110
2026-02-15T23:44:13.207 [DEBUG] [Thread-213322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:44:13.221 [DEBUG] [Thread-213322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:44:13.221 [INFO] [Thread-213322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:44:13.229 [DEBUG] [Thread-213322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:44:13.229 [DEBUG] [Thread-213322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:44:13.229 [DEBUG] [Thread-213322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:44:13.229 [DEBUG] [Thread-213322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:13.229 [DEBUG] [Thread-213322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:13.229 [DEBUG] [Thread-213322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] client lang: <none>
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] server lang: <none>
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] kex follows: False
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] Compression: none
2026-02-15T23:44:13.230 [DEBUG] [Thread-213322] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:44:13.289 [DEBUG] [Thread-213322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:44:13.289 [DEBUG] [Thread-213322] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:44:13.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:44:13.290 [DEBUG] [Thread-213322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:44:13.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:44:13.345 [DEBUG] [Thread-213322] [transport.py] [_log()] userauth is OK
2026-02-15T23:44:13.345 [DEBUG] [Thread-213322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:44:13.345 [DEBUG] [Thread-213322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:44:13.345 [DEBUG] [Thread-213322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:44:13.345 [DEBUG] [Thread-213322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:44:13.371 [INFO] [Thread-213322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:44:13.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:44:13.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:44:14.178 [DEBUG] [Thread-213322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:44:14.178 [DEBUG] [Thread-213322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:44:14.226 [DEBUG] [Thread-213322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:44:14.226 [DEBUG] [Thread-213322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:44:14.234 [DEBUG] [Thread-213322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:44:14.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:44:14.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:44:14.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:44:14.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:44:14.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:44:14.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:44:14.268 [DEBUG] [Thread-213322] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:44:23.076 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:25.623 [DEBUG] [Thread-213324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:26.158 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:35.636 [DEBUG] [Thread-213325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:40.665 [DEBUG] [Thread-213326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:44.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:44:44.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:44:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:44:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 44, 4), 10.43, 49.5, 0.0, 21.44, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:44:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:44:04
2026-02-15T23:44:47.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:44:47.302 [DEBUG] [Thread-213327] [transport.py] [_log()] starting thread (client mode): 0xa2d3fd60
2026-02-15T23:44:47.302 [DEBUG] [Thread-213327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:44:47.322 [DEBUG] [Thread-213327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:44:47.322 [INFO] [Thread-213327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] client lang: <none>
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] server lang: <none>
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] kex follows: False
2026-02-15T23:44:47.326 [DEBUG] [Thread-213327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:44:47.327 [DEBUG] [Thread-213327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:44:47.327 [DEBUG] [Thread-213327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:44:47.327 [DEBUG] [Thread-213327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:44:47.327 [DEBUG] [Thread-213327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:44:47.327 [DEBUG] [Thread-213327] [transport.py] [_log()] Compression: none
2026-02-15T23:44:47.327 [DEBUG] [Thread-213327] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:44:47.343 [DEBUG] [Thread-213327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:44:47.344 [DEBUG] [Thread-213327] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:44:47.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:44:47.345 [DEBUG] [Thread-213327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:44:47.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:44:47.347 [DEBUG] [Thread-213327] [transport.py] [_log()] userauth is OK
2026-02-15T23:44:47.347 [DEBUG] [Thread-213327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:44:47.347 [DEBUG] [Thread-213327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:44:47.347 [DEBUG] [Thread-213327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:44:47.347 [DEBUG] [Thread-213327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:44:47.368 [INFO] [Thread-213327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:44:47.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:44:47.974 [DEBUG] [Thread-213327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:44:47.974 [DEBUG] [Thread-213327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:44:47.974 [DEBUG] [Thread-213327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:44:48.015 [DEBUG] [Thread-213327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:44:48.016 [DEBUG] [Thread-213327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:44:48.019 [DEBUG] [Thread-213327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:44:48.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:44:48.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:44:48.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:44:48.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:44:48.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:44:48.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:44:48.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:44:48.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:44:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:44:48.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.905657 -999.00  +14.20  17.50     53   +5.00 1 1 1 1 1     0    0 8.55 -29.75 ZNESW 16.2 17.5 147.8 19.8 14.6 -24.3 14.5 -23.3 14.3 -22.2 14.6 -23.2
2026-02-15T23:44:48.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:44:48.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:44:48.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.905657
2026-02-15T23:44:48.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:44:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:44:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:44:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:44:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:44:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:44:04', tmtdew=10.43, humidity=49.5, cloud=0.0, wind=21.44, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:44:39', seeing=1.81, atlas_timestamp='2026-02-15T21:44:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:40:00')
2026-02-15T23:44:48.047 [DEBUG] [Thread-213327] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:44:48.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:44:48.148 [DEBUG] [Thread-213330] [transport.py] [_log()] starting thread (client mode): 0xa2d79cf0
2026-02-15T23:44:48.148 [DEBUG] [Thread-213330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:44:48.163 [DEBUG] [Thread-213330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:44:48.163 [INFO] [Thread-213330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:44:48.170 [DEBUG] [Thread-213330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] client lang: <none>
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] server lang: <none>
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] kex follows: False
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] Compression: none
2026-02-15T23:44:48.171 [DEBUG] [Thread-213330] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:44:48.233 [DEBUG] [Thread-213330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:44:48.234 [DEBUG] [Thread-213330] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:44:48.234 [DEBUG] [Thread-213330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:44:48.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:44:48.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:44:48.289 [DEBUG] [Thread-213330] [transport.py] [_log()] userauth is OK
2026-02-15T23:44:48.290 [DEBUG] [Thread-213330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:44:48.290 [DEBUG] [Thread-213330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:44:48.290 [DEBUG] [Thread-213330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:44:48.290 [DEBUG] [Thread-213330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:44:48.308 [INFO] [Thread-213330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:44:48.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:44:48.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:44:49.199 [DEBUG] [Thread-213330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:44:49.199 [DEBUG] [Thread-213330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:44:49.247 [DEBUG] [Thread-213330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:44:49.248 [DEBUG] [Thread-213330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:44:49.257 [DEBUG] [Thread-213330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:44:49.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:44:49.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:44:49.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:44:49.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:44:49.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:44:49.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:44:49.294 [DEBUG] [Thread-213330] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:44:52.657 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:55.704 [DEBUG] [Thread-213332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:44:57.633 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:00.707 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:06.165 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:07.072 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:07.508 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:07.510 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:10.756 [DEBUG] [Thread-213333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:45:19.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:45:19.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:45:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 44, 39), 10.59, 48.93, 0.0, 21.52, 14.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:45:21.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:44:39
2026-02-15T23:45:21.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:45:22.051 [DEBUG] [Thread-213334] [transport.py] [_log()] starting thread (client mode): 0xa57e2830
2026-02-15T23:45:22.051 [DEBUG] [Thread-213334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:45:22.072 [DEBUG] [Thread-213334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:45:22.072 [INFO] [Thread-213334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:45:22.075 [DEBUG] [Thread-213334] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:45:22.075 [DEBUG] [Thread-213334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:45:22.075 [DEBUG] [Thread-213334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:45:22.075 [DEBUG] [Thread-213334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:22.075 [DEBUG] [Thread-213334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:22.075 [DEBUG] [Thread-213334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] client lang: <none>
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] server lang: <none>
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] kex follows: False
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] Compression: none
2026-02-15T23:45:22.076 [DEBUG] [Thread-213334] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:45:22.096 [DEBUG] [Thread-213334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:45:22.097 [DEBUG] [Thread-213334] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:45:22.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:45:22.099 [DEBUG] [Thread-213334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:45:22.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:45:22.101 [DEBUG] [Thread-213334] [transport.py] [_log()] userauth is OK
2026-02-15T23:45:22.101 [DEBUG] [Thread-213334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:45:22.102 [DEBUG] [Thread-213334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:45:22.102 [DEBUG] [Thread-213334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:45:22.102 [DEBUG] [Thread-213334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:45:22.126 [INFO] [Thread-213334] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:45:22.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:45:22.877 [DEBUG] [Thread-213334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:45:22.877 [DEBUG] [Thread-213334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:45:22.877 [DEBUG] [Thread-213334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:45:22.918 [DEBUG] [Thread-213334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:45:22.918 [DEBUG] [Thread-213334] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:45:22.920 [DEBUG] [Thread-213334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:45:22.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:45:22.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:45:22.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:45:22.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:45:22.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:45:22.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:45:22.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.906004 -999.00  +14.20  16.70     54   +5.00 1 1 1 1 1     0    0 8.68 -28.48 ZNESW 18.5 16.7 141.8 22.1 14.6 -24.3 14.5 -23.2 14.3 -22.2 14.5 -23.3
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.906004
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:45:22.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:44:39', tmtdew=10.59, humidity=48.93, cloud=0.0, wind=21.52, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:45:15', seeing=1.49, atlas_timestamp='2026-02-15T21:44:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:43:00')
2026-02-15T23:45:22.937 [DEBUG] [Thread-213334] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:45:23.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:45:23.022 [DEBUG] [Thread-213337] [transport.py] [_log()] starting thread (client mode): 0xa57e0190
2026-02-15T23:45:23.022 [DEBUG] [Thread-213337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:45:23.036 [DEBUG] [Thread-213337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:45:23.036 [INFO] [Thread-213337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] client lang: <none>
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] server lang: <none>
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] kex follows: False
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] Compression: none
2026-02-15T23:45:23.044 [DEBUG] [Thread-213337] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:45:23.103 [DEBUG] [Thread-213337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:45:23.103 [DEBUG] [Thread-213337] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:45:23.103 [DEBUG] [Thread-213337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:45:23.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:45:23.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:45:23.160 [DEBUG] [Thread-213337] [transport.py] [_log()] userauth is OK
2026-02-15T23:45:23.160 [DEBUG] [Thread-213337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:45:23.160 [DEBUG] [Thread-213337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:45:23.160 [DEBUG] [Thread-213337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:45:23.160 [DEBUG] [Thread-213337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:45:23.174 [INFO] [Thread-213337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:45:23.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:45:23.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:45:23.988 [DEBUG] [Thread-213337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:45:23.988 [DEBUG] [Thread-213337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:45:24.036 [DEBUG] [Thread-213337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:45:24.036 [DEBUG] [Thread-213337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:45:24.046 [DEBUG] [Thread-213337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:45:24.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:45:24.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:45:24.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:45:24.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:45:24.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:45:24.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:45:24.084 [DEBUG] [Thread-213337] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:45:25.791 [DEBUG] [Thread-213339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:35.700 [DEBUG] [Thread-213340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:40.835 [DEBUG] [Thread-213341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:54.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:45:54.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:45: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
2026-02-15T23:45:55.869 [DEBUG] [Thread-213342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:45:56.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 45, 15), 10.5, 49.47, 0.0, 21.49, 14.24, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:45:56.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:45:15
2026-02-15T23:45:56.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:45:56.738 [DEBUG] [Thread-213343] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-15T23:45:56.738 [DEBUG] [Thread-213343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:45:56.758 [DEBUG] [Thread-213343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:45:56.758 [INFO] [Thread-213343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:45:56.761 [DEBUG] [Thread-213343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:45:56.762 [DEBUG] [Thread-213343] [transport.py] [_log()] client lang: <none>
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] server lang: <none>
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] kex follows: False
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] Compression: none
2026-02-15T23:45:56.763 [DEBUG] [Thread-213343] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:45:56.782 [DEBUG] [Thread-213343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:45:56.782 [DEBUG] [Thread-213343] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:45:56.783 [DEBUG] [Thread-213343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:45:56.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:45:56.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:45:56.785 [DEBUG] [Thread-213343] [transport.py] [_log()] userauth is OK
2026-02-15T23:45:56.785 [DEBUG] [Thread-213343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:45:56.785 [DEBUG] [Thread-213343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:45:56.785 [DEBUG] [Thread-213343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:45:56.785 [DEBUG] [Thread-213343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:45:56.809 [INFO] [Thread-213343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:45:56.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:45:57.444 [DEBUG] [Thread-213343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:45:57.444 [DEBUG] [Thread-213343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:45:57.445 [DEBUG] [Thread-213343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:45:57.486 [DEBUG] [Thread-213343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:45:57.486 [DEBUG] [Thread-213343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:45:57.489 [DEBUG] [Thread-213343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:45:57.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:45:57.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:45:57.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:45:57.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:45:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:45:57.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:45:57.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:45:57.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:45:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:45:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.906351 -999.00  +14.20  14.62     54   +5.00 1 1 1 1 1     0    0 8.59 -28.21 ZNESW 13.3 14.6 133.4 20.7 14.5 -24.3 14.5 -23.3 14.3 -22.2 14.5 -23.5
2026-02-15T23:45:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:45:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:45:57.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.906351
2026-02-15T23:45:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:45:57.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:45:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:45:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:45:57.517 [DEBUG] [Thread-213343] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:45:57.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:45:57.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:45:15', tmtdew=10.5, humidity=49.47, cloud=0.0, wind=21.49, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:45:51', seeing=1.47, atlas_timestamp='2026-02-15T21:45:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:43:00')
2026-02-15T23:45:57.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:45:57.613 [DEBUG] [Thread-213346] [transport.py] [_log()] starting thread (client mode): 0xa2d12980
2026-02-15T23:45:57.613 [DEBUG] [Thread-213346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:45:57.629 [DEBUG] [Thread-213346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:45:57.629 [INFO] [Thread-213346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:57.637 [DEBUG] [Thread-213346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] client lang: <none>
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] server lang: <none>
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] kex follows: False
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] Compression: none
2026-02-15T23:45:57.638 [DEBUG] [Thread-213346] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:45:57.697 [DEBUG] [Thread-213346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:45:57.697 [DEBUG] [Thread-213346] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:45:57.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:45:57.698 [DEBUG] [Thread-213346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:45:57.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:45:57.752 [DEBUG] [Thread-213346] [transport.py] [_log()] userauth is OK
2026-02-15T23:45:57.753 [DEBUG] [Thread-213346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:45:57.753 [DEBUG] [Thread-213346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:45:57.753 [DEBUG] [Thread-213346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:45:57.753 [DEBUG] [Thread-213346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:45:57.771 [INFO] [Thread-213346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:45:57.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:45:57.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:45:58.584 [DEBUG] [Thread-213346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:45:58.585 [DEBUG] [Thread-213346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:45:58.633 [DEBUG] [Thread-213346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:45:58.633 [DEBUG] [Thread-213346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:45:58.642 [DEBUG] [Thread-213346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:45:58.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:45:58.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:45:58.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:45:58.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:45:58.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:45:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:45:58.680 [DEBUG] [Thread-213346] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:46:07.709 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:07.710 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:10.906 [DEBUG] [Thread-213348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:25.952 [DEBUG] [Thread-213349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:28.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:46:28.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:46:28.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:46:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 45, 50), 10.49, 49.48, 0.0, 22.46, 14.23, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:46:31.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:45:50
2026-02-15T23:46:31.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:46:31.611 [DEBUG] [Thread-213350] [transport.py] [_log()] starting thread (client mode): 0xa2d11330
2026-02-15T23:46:31.611 [DEBUG] [Thread-213350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:46:31.631 [DEBUG] [Thread-213350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:46:31.631 [INFO] [Thread-213350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] client lang: <none>
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] server lang: <none>
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] kex follows: False
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:46:31.634 [DEBUG] [Thread-213350] [transport.py] [_log()] Compression: none
2026-02-15T23:46:31.635 [DEBUG] [Thread-213350] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:46:31.652 [DEBUG] [Thread-213350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:46:31.652 [DEBUG] [Thread-213350] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:46:31.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:46:31.653 [DEBUG] [Thread-213350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:46:31.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:46:31.697 [DEBUG] [Thread-213350] [transport.py] [_log()] userauth is OK
2026-02-15T23:46:31.697 [DEBUG] [Thread-213350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:46:31.697 [DEBUG] [Thread-213350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:46:31.697 [DEBUG] [Thread-213350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:46:31.697 [DEBUG] [Thread-213350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:46:31.733 [INFO] [Thread-213350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:46:31.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:46:32.383 [DEBUG] [Thread-213350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:46:32.384 [DEBUG] [Thread-213350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:46:32.384 [DEBUG] [Thread-213350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:46:32.424 [DEBUG] [Thread-213350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:46:32.424 [DEBUG] [Thread-213350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:46:32.427 [DEBUG] [Thread-213350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:46:32.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:46:32.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:46:32.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:46:32.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:46:32.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:46:32.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:46:32.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:46:32.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:46:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:46:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.906699 -999.00  +14.20  13.07     54   +5.00 1 1 1 1 1     0    0 8.84 -26.69 ZNESW 16.3 13.1 140.8 19.9 14.5 -24.2 14.4 -23.3 14.2 -22.2 14.5 -23.4
2026-02-15T23:46:32.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:46:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:46:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.906699
2026-02-15T23:46:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:46:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:46:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:46:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:46:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:46:32.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:45:50', tmtdew=10.49, humidity=49.48, cloud=0.0, wind=22.46, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:46:26', seeing=1.73, atlas_timestamp='2026-02-15T21:45:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:43:00')
2026-02-15T23:46:32.451 [DEBUG] [Thread-213350] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:46:32.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:46:32.547 [DEBUG] [Thread-213353] [transport.py] [_log()] starting thread (client mode): 0xa81d7e20
2026-02-15T23:46:32.547 [DEBUG] [Thread-213353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:46:32.562 [DEBUG] [Thread-213353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:46:32.562 [INFO] [Thread-213353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] client lang: <none>
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] server lang: <none>
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] kex follows: False
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:46:32.570 [DEBUG] [Thread-213353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:46:32.571 [DEBUG] [Thread-213353] [transport.py] [_log()] Compression: none
2026-02-15T23:46:32.571 [DEBUG] [Thread-213353] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:46:32.627 [DEBUG] [Thread-213353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:46:32.628 [DEBUG] [Thread-213353] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:46:32.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:46:32.629 [DEBUG] [Thread-213353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:46:32.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:46:32.684 [DEBUG] [Thread-213353] [transport.py] [_log()] userauth is OK
2026-02-15T23:46:32.685 [DEBUG] [Thread-213353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:46:32.685 [DEBUG] [Thread-213353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:46:32.685 [DEBUG] [Thread-213353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:46:32.685 [DEBUG] [Thread-213353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:46:32.704 [INFO] [Thread-213353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:46:32.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:46:32.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:46:33.531 [DEBUG] [Thread-213353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:46:33.531 [DEBUG] [Thread-213353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:46:33.579 [DEBUG] [Thread-213353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:46:33.580 [DEBUG] [Thread-213353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:46:33.589 [DEBUG] [Thread-213353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:46:33.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:46:33.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:46:33.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:46:33.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:46:33.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:46:33.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:46:33.629 [DEBUG] [Thread-213353] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:46:35.769 [DEBUG] [Thread-213355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:39.987 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:40.982 [DEBUG] [Thread-213356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:46:56.029 [DEBUG] [Thread-213357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:03.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:47:03.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:47:03.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:47:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 46, 26), 10.46, 49.58, 0.0, 22.27, 14.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:47:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:46:26
2026-02-15T23:47:06.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:47:06.489 [DEBUG] [Thread-213358] [transport.py] [_log()] starting thread (client mode): 0xa2d795d0
2026-02-15T23:47:06.489 [DEBUG] [Thread-213358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:47:06.510 [DEBUG] [Thread-213358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:47:06.510 [INFO] [Thread-213358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] client lang: <none>
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] server lang: <none>
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] kex follows: False
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] Compression: none
2026-02-15T23:47:06.513 [DEBUG] [Thread-213358] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:47:06.532 [DEBUG] [Thread-213358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:47:06.532 [DEBUG] [Thread-213358] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:47:06.532 [DEBUG] [Thread-213358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:47:06.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:47:06.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:47:06.533 [DEBUG] [Thread-213358] [transport.py] [_log()] userauth is OK
2026-02-15T23:47:06.533 [DEBUG] [Thread-213358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:47:06.533 [DEBUG] [Thread-213358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:47:06.533 [DEBUG] [Thread-213358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:47:06.534 [DEBUG] [Thread-213358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:47:06.564 [INFO] [Thread-213358] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:47:06.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:47:07.186 [DEBUG] [Thread-213358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:47:07.186 [DEBUG] [Thread-213358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:47:07.187 [DEBUG] [Thread-213358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:47:07.227 [DEBUG] [Thread-213358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:47:07.228 [DEBUG] [Thread-213358] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:47:07.231 [DEBUG] [Thread-213358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:47:07.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:47:07.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:47:07.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:47:07.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:47:07.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:47:07.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:47:07.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:47:07.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:47:07.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:47:07.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.907046 -999.00  +14.10  18.66     54   +5.00 1 1 1 1 1     0    0 8.56 -28.16 ZNESW 21.0 18.7 142.8 23.0 14.5 -24.3 14.4 -23.3 14.3 -22.2 14.4 -23.4
2026-02-15T23:47:07.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:47:07.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:47:07.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.907046
2026-02-15T23:47:07.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:47:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:47:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:47:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:47:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:47:07.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:46:26', tmtdew=10.46, humidity=49.58, cloud=0.0, wind=22.27, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:47:02', seeing=1.73, atlas_timestamp='2026-02-15T21:46:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.019750000000000156, -0.010749999999999815, -0.01600000000000179, 0.006999999999999673, 0.05125000000000135, -0.0035000000000007248, -0.011749999999999261, 0.013499999999998735, 0.051000000000000156, -0.04824999999999946, 0.01550000000000118, 0.07199999999999918, 0.03775000000000084, 0.04099999999999859, 0.01699999999999946, 0.06225000000000058, 0.07450000000000045, 0.0, 0.000249999999997641, 0.06799999999999784, 0.018749999999998934, -0.008749999999999147, 0.02275000000000027, 0.03799999999999848, 0.05250000000000021, 0.013749999999999929, -0.0029999999999983373, 0.1120000000000001, 0.07500000000000107, 0.02200000000000024, 0.05000000000000071, 0.03924999999999912], zp_timestamp='2026-02-15T21:43:00')
2026-02-15T23:47:07.259 [DEBUG] [Thread-213358] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:47:07.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:47:07.914 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:07.916 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:11.067 [DEBUG] [Thread-213361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:26.117 [DEBUG] [Thread-213362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:35.838 [DEBUG] [Thread-213363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:41.152 [DEBUG] [Thread-213364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:47:56.183 [DEBUG] [Thread-213365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:08.123 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:08.124 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:11.219 [DEBUG] [Thread-213366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:13.358 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:26.257 [DEBUG] [Thread-213367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:35.899 [DEBUG] [Thread-213368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:41.294 [DEBUG] [Thread-213369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:48:56.330 [DEBUG] [Thread-213370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:08.327 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:08.328 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:11.367 [DEBUG] [Thread-213371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:22.360 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-15T23:49:26.402 [DEBUG] [Thread-213372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:35.964 [DEBUG] [Thread-213373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:41.433 [DEBUG] [Thread-213374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:47.102 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:52.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:49:52.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:49:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:49:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 49, 25), 10.41, 49.58, 0.0, 25.57, 14.19, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:49:54.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:49:25
2026-02-15T23:49:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:49:54.855 [DEBUG] [Thread-213375] [transport.py] [_log()] starting thread (client mode): 0xa57433a0
2026-02-15T23:49:54.855 [DEBUG] [Thread-213375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:49:54.875 [DEBUG] [Thread-213375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:49:54.875 [INFO] [Thread-213375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] client lang: <none>
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] server lang: <none>
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] kex follows: False
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] Compression: none
2026-02-15T23:49:54.879 [DEBUG] [Thread-213375] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:49:54.899 [DEBUG] [Thread-213375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:49:54.900 [DEBUG] [Thread-213375] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:49:54.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:49:54.901 [DEBUG] [Thread-213375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:49:54.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:49:54.944 [DEBUG] [Thread-213375] [transport.py] [_log()] userauth is OK
2026-02-15T23:49:54.945 [DEBUG] [Thread-213375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:49:54.945 [DEBUG] [Thread-213375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:49:54.945 [DEBUG] [Thread-213375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:49:54.945 [DEBUG] [Thread-213375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:49:54.977 [INFO] [Thread-213375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:49:54.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:49:55.811 [DEBUG] [Thread-213375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:49:55.811 [DEBUG] [Thread-213375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:49:55.811 [DEBUG] [Thread-213375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:49:55.851 [DEBUG] [Thread-213375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:49:55.852 [DEBUG] [Thread-213375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:49:55.855 [DEBUG] [Thread-213375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:49:55.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:49:55.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:49:55.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:49:55.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:49:55.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:49:55.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:49:55.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:49:55.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:49:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:49:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.909129 -999.00  +14.20  14.36     54   +5.00 1 1 1 1 1     0    0 8.26 -34.85 ZNESW 19.4 14.4 161.2 23.1 14.4 -24.2 14.4 -23.1 14.2 -22.0 14.4 -23.2
2026-02-15T23:49:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:49:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:49:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.909129
2026-02-15T23:49:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:49:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:49:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:49:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:49:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:49:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:49:25', tmtdew=10.41, humidity=49.58, cloud=0.0, wind=25.57, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:49:25', seeing=1.21, atlas_timestamp='2026-02-15T21:49:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.019750000000000156, -0.021749999999999048, -0.0035000000000007248, 0.010500000000000398, 0.00975000000000037, -0.014000000000001123, 0.015249999999999986, 0.03549999999999898, 0.024499999999999744, -0.08774999999999977, -0.005000000000000782, 0.07399999999999984, 0.029749999999999943, 0.023499999999998522, 0.0019999999999988916, 0.028249999999999886, 0.06450000000000067, 0.010999999999999233, -0.013250000000001094, 0.03999999999999915, 0.02024999999999899, -0.006750000000000256, 0.01124999999999865, 0.02899999999999814, 0.01950000000000074, 0.007749999999999702, -0.005499999999999616, 0.12349999999999994, 0.07600000000000051, 0.02800000000000047, 0.04100000000000037, 0.027749999999999275], zp_timestamp='2026-02-15T21:46:00')
2026-02-15T23:49:55.882 [DEBUG] [Thread-213375] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:49:55.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:49:55.979 [DEBUG] [Thread-213378] [transport.py] [_log()] starting thread (client mode): 0xa2dc1120
2026-02-15T23:49:55.979 [DEBUG] [Thread-213378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:49:55.994 [DEBUG] [Thread-213378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:49:55.994 [INFO] [Thread-213378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:49:56.001 [DEBUG] [Thread-213378] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:49:56.001 [DEBUG] [Thread-213378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:49:56.001 [DEBUG] [Thread-213378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] client lang: <none>
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] server lang: <none>
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] kex follows: False
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:49:56.002 [DEBUG] [Thread-213378] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:49:56.003 [DEBUG] [Thread-213378] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:49:56.003 [DEBUG] [Thread-213378] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:49:56.003 [DEBUG] [Thread-213378] [transport.py] [_log()] Compression: none
2026-02-15T23:49:56.003 [DEBUG] [Thread-213378] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:49:56.061 [DEBUG] [Thread-213378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:49:56.061 [DEBUG] [Thread-213378] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:49:56.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:49:56.063 [DEBUG] [Thread-213378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:49:56.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:49:56.121 [DEBUG] [Thread-213378] [transport.py] [_log()] userauth is OK
2026-02-15T23:49:56.121 [DEBUG] [Thread-213378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:49:56.121 [DEBUG] [Thread-213378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:49:56.121 [DEBUG] [Thread-213378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:49:56.122 [DEBUG] [Thread-213378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:49:56.140 [INFO] [Thread-213378] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:49:56.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:49:56.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:49:56.466 [DEBUG] [Thread-213380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:49:56.982 [DEBUG] [Thread-213378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:49:56.983 [DEBUG] [Thread-213378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:49:57.030 [DEBUG] [Thread-213378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:49:57.030 [DEBUG] [Thread-213378] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:49:57.038 [DEBUG] [Thread-213378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:49:57.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:49:57.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:49:57.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:49:57.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:49:57.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:49:57.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:49:57.071 [DEBUG] [Thread-213378] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:50:08.526 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:50:08.528 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:50:11.529 [DEBUG] [Thread-213381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:50:26.564 [DEBUG] [Thread-213382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:50:27.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:50:27.093 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:50:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:50:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 50, 1), 10.41, 49.57, 0.0, 25.32, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:50:29.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:50:01
2026-02-15T23:50:29.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:50:29.954 [DEBUG] [Thread-213383] [transport.py] [_log()] starting thread (client mode): 0xa81d4dc0
2026-02-15T23:50:29.954 [DEBUG] [Thread-213383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:50:29.974 [DEBUG] [Thread-213383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:50:29.974 [INFO] [Thread-213383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:50:29.977 [DEBUG] [Thread-213383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] client lang: <none>
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] server lang: <none>
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] kex follows: False
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] Compression: none
2026-02-15T23:50:29.978 [DEBUG] [Thread-213383] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:50:29.996 [DEBUG] [Thread-213383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:50:29.996 [DEBUG] [Thread-213383] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:50:29.997 [DEBUG] [Thread-213383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:50:29.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:50:29.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:50:29.999 [DEBUG] [Thread-213383] [transport.py] [_log()] userauth is OK
2026-02-15T23:50:29.999 [DEBUG] [Thread-213383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:50:29.999 [DEBUG] [Thread-213383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:50:29.999 [DEBUG] [Thread-213383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:50:29.999 [DEBUG] [Thread-213383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:50:30.024 [INFO] [Thread-213383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:50:30.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:50:30.645 [DEBUG] [Thread-213383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:50:30.646 [DEBUG] [Thread-213383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:50:30.646 [DEBUG] [Thread-213383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:50:30.686 [DEBUG] [Thread-213383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:50:30.687 [DEBUG] [Thread-213383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:50:30.690 [DEBUG] [Thread-213383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:50:30.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:50:30.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:50:30.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:50:30.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:50:30.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:50:30.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:50:30.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:50:30.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:50:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:50:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.909477 -999.00  +14.20  16.19     54   +5.10 1 1 1 1 1     0    0 8.08 -42.69 ZNESW 17.2 16.2 150.2 23.6 14.5 -24.2 14.4 -23.2 14.2 -21.9 14.4 -23.3
2026-02-15T23:50:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:50:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:50:30.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.909477
2026-02-15T23:50:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:50:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:50:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:50:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:50:30.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:50:30.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:50:01', tmtdew=10.41, humidity=49.57, cloud=0.0, wind=25.32, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:50:02', seeing=1.39, atlas_timestamp='2026-02-15T21:49:38.813', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.019750000000000156, -0.021749999999999048, -0.0035000000000007248, 0.010500000000000398, 0.00975000000000037, -0.014000000000001123, 0.015249999999999986, 0.03549999999999898, 0.024499999999999744, -0.08774999999999977, -0.005000000000000782, 0.07399999999999984, 0.029749999999999943, 0.023499999999998522, 0.0019999999999988916, 0.028249999999999886, 0.06450000000000067, 0.010999999999999233, -0.013250000000001094, 0.03999999999999915, 0.02024999999999899, -0.006750000000000256, 0.01124999999999865, 0.02899999999999814, 0.01950000000000074, 0.007749999999999702, -0.005499999999999616, 0.12349999999999994, 0.07600000000000051, 0.02800000000000047, 0.04100000000000037, 0.027749999999999275], zp_timestamp='2026-02-15T21:46:00')
2026-02-15T23:50:30.719 [DEBUG] [Thread-213383] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:50:30.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:50:30.818 [DEBUG] [Thread-213386] [transport.py] [_log()] starting thread (client mode): 0xa2dc0340
2026-02-15T23:50:30.818 [DEBUG] [Thread-213386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:50:30.833 [DEBUG] [Thread-213386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:50:30.834 [INFO] [Thread-213386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:50:30.846 [DEBUG] [Thread-213386] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] client lang: <none>
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] server lang: <none>
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] kex follows: False
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:50:30.847 [DEBUG] [Thread-213386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:50:30.848 [DEBUG] [Thread-213386] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:50:30.848 [DEBUG] [Thread-213386] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:50:30.848 [DEBUG] [Thread-213386] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:50:30.848 [DEBUG] [Thread-213386] [transport.py] [_log()] Compression: none
2026-02-15T23:50:30.848 [DEBUG] [Thread-213386] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:50:30.906 [DEBUG] [Thread-213386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:50:30.907 [DEBUG] [Thread-213386] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:50:30.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:50:30.908 [DEBUG] [Thread-213386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:50:30.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:50:30.964 [DEBUG] [Thread-213386] [transport.py] [_log()] userauth is OK
2026-02-15T23:50:30.965 [DEBUG] [Thread-213386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:50:30.965 [DEBUG] [Thread-213386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:50:30.965 [DEBUG] [Thread-213386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:50:30.965 [DEBUG] [Thread-213386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:50:30.991 [INFO] [Thread-213386] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:50:30.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:50:30.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:50:31.885 [DEBUG] [Thread-213386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:50:31.885 [DEBUG] [Thread-213386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:50:31.937 [DEBUG] [Thread-213386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:50:31.937 [DEBUG] [Thread-213386] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:50:31.950 [DEBUG] [Thread-213386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:50:31.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:50:31.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:50:31.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:50:31.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:50:31.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:50:31.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:50:31.997 [DEBUG] [Thread-213386] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:50:36.051 [DEBUG] [Thread-213388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:50:41.600 [DEBUG] [Thread-213389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:50:56.649 [DEBUG] [Thread-213390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:02.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:51:02.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:51:02.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:51:03.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 50, 36), 10.56, 49.0, 0.0, 27.45, 14.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:51:03.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:50:36
2026-02-15T23:51:04.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:51:04.406 [DEBUG] [Thread-213391] [transport.py] [_log()] starting thread (client mode): 0xa81d6c80
2026-02-15T23:51:04.406 [DEBUG] [Thread-213391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:51:04.427 [DEBUG] [Thread-213391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:51:04.427 [INFO] [Thread-213391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:51:04.430 [DEBUG] [Thread-213391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:51:04.430 [DEBUG] [Thread-213391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] client lang: <none>
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] server lang: <none>
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] kex follows: False
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] Compression: none
2026-02-15T23:51:04.431 [DEBUG] [Thread-213391] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:51:04.448 [DEBUG] [Thread-213391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:51:04.448 [DEBUG] [Thread-213391] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:51:04.449 [DEBUG] [Thread-213391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:51:04.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:51:04.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:51:04.451 [DEBUG] [Thread-213391] [transport.py] [_log()] userauth is OK
2026-02-15T23:51:04.451 [DEBUG] [Thread-213391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:51:04.451 [DEBUG] [Thread-213391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:51:04.451 [DEBUG] [Thread-213391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:51:04.451 [DEBUG] [Thread-213391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:51:04.476 [INFO] [Thread-213391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:51:04.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:51:05.191 [DEBUG] [Thread-213391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:51:05.191 [DEBUG] [Thread-213391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:51:05.191 [DEBUG] [Thread-213391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:51:05.232 [DEBUG] [Thread-213391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:51:05.232 [DEBUG] [Thread-213391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:51:05.234 [DEBUG] [Thread-213391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:51:05.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:51:05.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:51:05.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:51:05.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:51:05.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:51:05.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:51:05.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:51:05.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.910171 -999.00  +14.20  14.39     54   +5.00 1 1 1 1 1     0    0 8.06 -43.79 ZNESW 15.1 14.4 154.2 24.9 14.5 -24.0 14.4 -23.2 14.2 -22.1 14.4 -23.3
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.910171
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:51:05.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:50:36', tmtdew=10.56, humidity=49.0, cloud=0.0, wind=27.45, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:50:37', seeing=1.39, atlas_timestamp='2026-02-15T21:50:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:50:00')
2026-02-15T23:51:05.255 [DEBUG] [Thread-213391] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:51:05.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:51:05.338 [DEBUG] [Thread-213394] [transport.py] [_log()] starting thread (client mode): 0xa81d5240
2026-02-15T23:51:05.338 [DEBUG] [Thread-213394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:51:05.353 [DEBUG] [Thread-213394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:51:05.353 [INFO] [Thread-213394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:51:05.360 [DEBUG] [Thread-213394] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] client lang: <none>
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] server lang: <none>
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] kex follows: False
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] Compression: none
2026-02-15T23:51:05.361 [DEBUG] [Thread-213394] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:51:05.420 [DEBUG] [Thread-213394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:51:05.421 [DEBUG] [Thread-213394] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:51:05.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:51:05.422 [DEBUG] [Thread-213394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:51:05.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:51:05.476 [DEBUG] [Thread-213394] [transport.py] [_log()] userauth is OK
2026-02-15T23:51:05.476 [DEBUG] [Thread-213394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:51:05.476 [DEBUG] [Thread-213394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:51:05.476 [DEBUG] [Thread-213394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:51:05.476 [DEBUG] [Thread-213394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:51:05.495 [INFO] [Thread-213394] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:51:05.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:51:05.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:51:06.315 [DEBUG] [Thread-213394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:51:06.315 [DEBUG] [Thread-213394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:51:06.363 [DEBUG] [Thread-213394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:51:06.364 [DEBUG] [Thread-213394] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:51:06.373 [DEBUG] [Thread-213394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:51:06.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:51:06.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:51:06.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:51:06.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:51:06.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:51:06.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:51:06.410 [DEBUG] [Thread-213394] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:51:08.726 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:08.727 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:11.684 [DEBUG] [Thread-213396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:20.604 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:26.734 [DEBUG] [Thread-213397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:36.122 [DEBUG] [Thread-213398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:36.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:51:36.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:51:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:51:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 51, 12), 10.38, 49.5, 0.0, 22.6, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:51:38.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:51:12
2026-02-15T23:51:38.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:51:38.759 [DEBUG] [Thread-213399] [transport.py] [_log()] starting thread (client mode): 0xa81d76d0
2026-02-15T23:51:38.759 [DEBUG] [Thread-213399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:51:38.779 [DEBUG] [Thread-213399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:51:38.779 [INFO] [Thread-213399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] client lang: <none>
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] server lang: <none>
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] kex follows: False
2026-02-15T23:51:38.783 [DEBUG] [Thread-213399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:51:38.784 [DEBUG] [Thread-213399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:51:38.784 [DEBUG] [Thread-213399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:51:38.784 [DEBUG] [Thread-213399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:51:38.784 [DEBUG] [Thread-213399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:51:38.784 [DEBUG] [Thread-213399] [transport.py] [_log()] Compression: none
2026-02-15T23:51:38.784 [DEBUG] [Thread-213399] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:51:38.800 [DEBUG] [Thread-213399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:51:38.800 [DEBUG] [Thread-213399] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:51:38.800 [DEBUG] [Thread-213399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:51:38.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:51:38.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:51:38.802 [DEBUG] [Thread-213399] [transport.py] [_log()] userauth is OK
2026-02-15T23:51:38.802 [DEBUG] [Thread-213399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:51:38.802 [DEBUG] [Thread-213399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:51:38.802 [DEBUG] [Thread-213399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:51:38.803 [DEBUG] [Thread-213399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:51:38.816 [INFO] [Thread-213399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:51:38.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:51:39.464 [DEBUG] [Thread-213399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:51:39.464 [DEBUG] [Thread-213399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:51:39.464 [DEBUG] [Thread-213399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:51:39.504 [DEBUG] [Thread-213399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:51:39.505 [DEBUG] [Thread-213399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:51:39.508 [DEBUG] [Thread-213399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:51:39.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:51:39.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:51:39.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:51:39.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:51:39.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:51:39.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:51:39.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:51:39.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:51:39.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:51:39.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.910518 -999.00  +14.10  16.95     54   +5.00 1 1 1 1 1     0    0 8.41 -40.96 ZNESW 14.2 16.9 157.0 20.4 14.4 -24.2 14.3 -23.1 14.2 -22.0 14.4 -23.3
2026-02-15T23:51:39.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:51:39.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:51:39.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.910518
2026-02-15T23:51:39.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:51:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:51:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:51:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:51:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:51:39.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:51:12', tmtdew=10.38, humidity=49.5, cloud=0.0, wind=22.6, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:51:12', seeing=1.56, atlas_timestamp='2026-02-15T21:51:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:50:00')
2026-02-15T23:51:39.537 [DEBUG] [Thread-213399] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:51:39.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:51:39.625 [DEBUG] [Thread-213402] [transport.py] [_log()] starting thread (client mode): 0xa57e0ee0
2026-02-15T23:51:39.625 [DEBUG] [Thread-213402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:51:39.639 [DEBUG] [Thread-213402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:51:39.639 [INFO] [Thread-213402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:39.647 [DEBUG] [Thread-213402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] client lang: <none>
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] server lang: <none>
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] kex follows: False
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] Compression: none
2026-02-15T23:51:39.648 [DEBUG] [Thread-213402] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:51:39.704 [DEBUG] [Thread-213402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:51:39.704 [DEBUG] [Thread-213402] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:51:39.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:51:39.705 [DEBUG] [Thread-213402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:51:39.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:51:39.760 [DEBUG] [Thread-213402] [transport.py] [_log()] userauth is OK
2026-02-15T23:51:39.760 [DEBUG] [Thread-213402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:51:39.760 [DEBUG] [Thread-213402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:51:39.760 [DEBUG] [Thread-213402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:51:39.761 [DEBUG] [Thread-213402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:51:39.782 [INFO] [Thread-213402] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:51:39.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:51:39.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:51:40.580 [DEBUG] [Thread-213402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:51:40.580 [DEBUG] [Thread-213402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:51:40.628 [DEBUG] [Thread-213402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:51:40.629 [DEBUG] [Thread-213402] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:51:40.638 [DEBUG] [Thread-213402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:51:40.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:51:40.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:51:40.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:51:40.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:51:40.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:51:40.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:51:40.675 [DEBUG] [Thread-213402] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:51:41.770 [DEBUG] [Thread-213404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:51:56.827 [DEBUG] [Thread-213405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:08.925 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:08.926 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:10.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:52:10.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:52:10.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:52:11.865 [DEBUG] [Thread-213406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:12.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 51, 48), 10.37, 49.53, 0.0, 21.1, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:52:12.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:51:48
2026-02-15T23:52:13.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:52:13.331 [DEBUG] [Thread-213407] [transport.py] [_log()] starting thread (client mode): 0xa57e2da0
2026-02-15T23:52:13.331 [DEBUG] [Thread-213407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:52:13.347 [DEBUG] [Thread-213407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:52:13.347 [INFO] [Thread-213407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] client lang: <none>
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] server lang: <none>
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] kex follows: False
2026-02-15T23:52:13.350 [DEBUG] [Thread-213407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:52:13.351 [DEBUG] [Thread-213407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:52:13.351 [DEBUG] [Thread-213407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:52:13.351 [DEBUG] [Thread-213407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:52:13.351 [DEBUG] [Thread-213407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:52:13.351 [DEBUG] [Thread-213407] [transport.py] [_log()] Compression: none
2026-02-15T23:52:13.351 [DEBUG] [Thread-213407] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:52:13.368 [DEBUG] [Thread-213407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:52:13.368 [DEBUG] [Thread-213407] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:52:13.369 [DEBUG] [Thread-213407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:52:13.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:52:13.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:52:13.371 [DEBUG] [Thread-213407] [transport.py] [_log()] userauth is OK
2026-02-15T23:52:13.371 [DEBUG] [Thread-213407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:52:13.371 [DEBUG] [Thread-213407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:52:13.371 [DEBUG] [Thread-213407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:52:13.371 [DEBUG] [Thread-213407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:52:13.394 [INFO] [Thread-213407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:52:13.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:52:14.064 [DEBUG] [Thread-213407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:52:14.065 [DEBUG] [Thread-213407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:52:14.065 [DEBUG] [Thread-213407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:52:14.105 [DEBUG] [Thread-213407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:52:14.106 [DEBUG] [Thread-213407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:52:14.109 [DEBUG] [Thread-213407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:52:14.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:52:14.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:52:14.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:52:14.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:52:14.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:52:14.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:52:14.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:52:14.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:52:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:52:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.910865 -999.00  +14.10  20.75     54   +5.00 1 1 1 1 1     0    0 7.83 -40.27 ZNESW 21.5 20.8 142.4 22.4 14.5 -24.2 14.3 -23.1 14.1 -21.9 14.4 -23.3
2026-02-15T23:52:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:52:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:52:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.910865
2026-02-15T23:52:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:52:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:52:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:52:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:52:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:52:14.135 [DEBUG] [Thread-213407] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:52:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:51:48', tmtdew=10.37, humidity=49.53, cloud=0.0, wind=21.1, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:51:48', seeing=1.56, atlas_timestamp='2026-02-15T21:51:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:50:00')
2026-02-15T23:52:14.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:52:14.231 [DEBUG] [Thread-213410] [transport.py] [_log()] starting thread (client mode): 0xa57405b0
2026-02-15T23:52:14.231 [DEBUG] [Thread-213410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:52:14.249 [DEBUG] [Thread-213410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:52:14.250 [INFO] [Thread-213410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:52:14.257 [DEBUG] [Thread-213410] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] client lang: <none>
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] server lang: <none>
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] kex follows: False
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:52:14.258 [DEBUG] [Thread-213410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:52:14.259 [DEBUG] [Thread-213410] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:52:14.259 [DEBUG] [Thread-213410] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:52:14.259 [DEBUG] [Thread-213410] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:52:14.259 [DEBUG] [Thread-213410] [transport.py] [_log()] Compression: none
2026-02-15T23:52:14.259 [DEBUG] [Thread-213410] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:52:14.316 [DEBUG] [Thread-213410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:52:14.316 [DEBUG] [Thread-213410] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:52:14.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:52:14.318 [DEBUG] [Thread-213410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:52:14.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:52:14.372 [DEBUG] [Thread-213410] [transport.py] [_log()] userauth is OK
2026-02-15T23:52:14.373 [DEBUG] [Thread-213410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:52:14.373 [DEBUG] [Thread-213410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:52:14.373 [DEBUG] [Thread-213410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:52:14.373 [DEBUG] [Thread-213410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:52:14.392 [INFO] [Thread-213410] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:52:14.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:52:14.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:52:15.247 [DEBUG] [Thread-213410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:52:15.248 [DEBUG] [Thread-213410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:52:15.295 [DEBUG] [Thread-213410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:52:15.296 [DEBUG] [Thread-213410] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:52:15.305 [DEBUG] [Thread-213410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:52:15.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:52: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')
2026-02-15T23:52:15.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:52:15.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:52:15.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:52:15.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:52:15.343 [DEBUG] [Thread-213410] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:52:26.988 [DEBUG] [Thread-213412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:36.179 [DEBUG] [Thread-213413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:42.042 [DEBUG] [Thread-213414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:45.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:52:45.364 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:52:45.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:52:47.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 52, 23), 10.35, 49.6, 0.0, 22.43, 14.09, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:52:47.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:52:23
2026-02-15T23:52:47.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:52:47.720 [DEBUG] [Thread-213415] [transport.py] [_log()] starting thread (client mode): 0xa81d7f40
2026-02-15T23:52:47.720 [DEBUG] [Thread-213415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:52:47.741 [DEBUG] [Thread-213415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:52:47.741 [INFO] [Thread-213415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:52:47.744 [DEBUG] [Thread-213415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:52:47.744 [DEBUG] [Thread-213415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:52:47.744 [DEBUG] [Thread-213415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:52:47.744 [DEBUG] [Thread-213415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:47.744 [DEBUG] [Thread-213415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:47.744 [DEBUG] [Thread-213415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] client lang: <none>
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] server lang: <none>
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] kex follows: False
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] Compression: none
2026-02-15T23:52:47.745 [DEBUG] [Thread-213415] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:52:47.762 [DEBUG] [Thread-213415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:52:47.762 [DEBUG] [Thread-213415] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:52:47.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:52:47.763 [DEBUG] [Thread-213415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:52:47.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:52:47.765 [DEBUG] [Thread-213415] [transport.py] [_log()] userauth is OK
2026-02-15T23:52:47.765 [DEBUG] [Thread-213415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:52:47.765 [DEBUG] [Thread-213415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:52:47.766 [DEBUG] [Thread-213415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:52:47.766 [DEBUG] [Thread-213415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:52:47.788 [INFO] [Thread-213415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:52:47.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:52:48.423 [DEBUG] [Thread-213415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:52:48.423 [DEBUG] [Thread-213415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:52:48.424 [DEBUG] [Thread-213415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:52:48.464 [DEBUG] [Thread-213415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:52:48.464 [DEBUG] [Thread-213415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:52:48.468 [DEBUG] [Thread-213415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:52:48.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:52:48.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:52:48.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:52:48.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:52:48.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:52:48.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:52:48.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:52:48.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:52:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:52:48.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.911213 -999.00  +14.10  17.65     54   +5.00 1 1 1 1 1     0    0 7.83 -40.67 ZNESW 15.8 17.6 145.6 23.0 14.5 -24.2 14.3 -23.0 14.2 -21.9 14.4 -23.1
2026-02-15T23:52:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:52:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:52:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.911213
2026-02-15T23:52:48.502 [DEBUG] [Thread-213415] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:52:48.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:52:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:52:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:52:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:52:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:52:48.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:52:23', tmtdew=10.35, humidity=49.6, cloud=0.0, wind=22.43, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:52:23', seeing=1.56, atlas_timestamp='2026-02-15T21:52:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:50:00')
2026-02-15T23:52:48.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:52:48.602 [DEBUG] [Thread-213418] [transport.py] [_log()] starting thread (client mode): 0xa81d5ea0
2026-02-15T23:52:48.602 [DEBUG] [Thread-213418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:52:48.617 [DEBUG] [Thread-213418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:52:48.617 [INFO] [Thread-213418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:52:48.634 [DEBUG] [Thread-213418] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:52:48.634 [DEBUG] [Thread-213418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:52:48.634 [DEBUG] [Thread-213418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:52:48.634 [DEBUG] [Thread-213418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:48.634 [DEBUG] [Thread-213418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:52:48.634 [DEBUG] [Thread-213418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] client lang: <none>
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] server lang: <none>
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] kex follows: False
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:52:48.635 [DEBUG] [Thread-213418] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:52:48.636 [DEBUG] [Thread-213418] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:52:48.636 [DEBUG] [Thread-213418] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:52:48.636 [DEBUG] [Thread-213418] [transport.py] [_log()] Compression: none
2026-02-15T23:52:48.636 [DEBUG] [Thread-213418] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:52:48.687 [DEBUG] [Thread-213418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:52:48.688 [DEBUG] [Thread-213418] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:52:48.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:52:48.689 [DEBUG] [Thread-213418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:52:48.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:52:48.744 [DEBUG] [Thread-213418] [transport.py] [_log()] userauth is OK
2026-02-15T23:52:48.745 [DEBUG] [Thread-213418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:52:48.745 [DEBUG] [Thread-213418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:52:48.745 [DEBUG] [Thread-213418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:52:48.745 [DEBUG] [Thread-213418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:52:48.764 [INFO] [Thread-213418] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:52:48.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:52:48.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:52:49.572 [DEBUG] [Thread-213418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:52:49.574 [DEBUG] [Thread-213418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:52:49.622 [DEBUG] [Thread-213418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:52:49.622 [DEBUG] [Thread-213418] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:52:49.631 [DEBUG] [Thread-213418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:52:49.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:52:49.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:52:49.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:52:49.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:52:49.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:52:49.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:52:49.669 [DEBUG] [Thread-213418] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:52:54.182 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:52:57.079 [DEBUG] [Thread-213420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:09.131 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:09.132 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:12.129 [DEBUG] [Thread-213421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:19.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:53:19.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:53:19.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:53:21.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 52, 58), 10.29, 49.65, 0.0, 23.54, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:53:21.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:52:58
2026-02-15T23:53:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:53:22.007 [DEBUG] [Thread-213422] [transport.py] [_log()] starting thread (client mode): 0xa5740dc0
2026-02-15T23:53:22.007 [DEBUG] [Thread-213422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:53:22.027 [DEBUG] [Thread-213422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:53:22.027 [INFO] [Thread-213422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] client lang: <none>
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] server lang: <none>
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] kex follows: False
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:53:22.030 [DEBUG] [Thread-213422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:53:22.031 [DEBUG] [Thread-213422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:53:22.031 [DEBUG] [Thread-213422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:53:22.031 [DEBUG] [Thread-213422] [transport.py] [_log()] Compression: none
2026-02-15T23:53:22.031 [DEBUG] [Thread-213422] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:53:22.048 [DEBUG] [Thread-213422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:53:22.048 [DEBUG] [Thread-213422] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:53:22.049 [DEBUG] [Thread-213422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:53:22.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:53:22.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:53:22.051 [DEBUG] [Thread-213422] [transport.py] [_log()] userauth is OK
2026-02-15T23:53:22.051 [DEBUG] [Thread-213422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:53:22.051 [DEBUG] [Thread-213422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:53:22.051 [DEBUG] [Thread-213422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:53:22.051 [DEBUG] [Thread-213422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:53:22.076 [INFO] [Thread-213422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:53:22.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:53:22.651 [DEBUG] [Thread-213422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:53:22.652 [DEBUG] [Thread-213422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:53:22.652 [DEBUG] [Thread-213422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:53:22.692 [DEBUG] [Thread-213422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:53:22.693 [DEBUG] [Thread-213422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:53:22.696 [DEBUG] [Thread-213422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:53:22.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:53:22.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:53:22.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:53:22.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:53:22.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:53:22.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:53:22.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:53:22.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:53:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:53:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.911560 -999.00  +14.10  20.18     54   +5.10 1 1 1 1 1     0    0 8.25 -38.31 ZNESW 17.4 20.2 143.8 22.5 14.5 -24.1 14.3 -23.1 14.1 -22.0 14.4 -23.2
2026-02-15T23:53:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:53:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:53:22.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.911560
2026-02-15T23:53:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:53:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:53:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:53:22.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:53:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:53:22.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:52:58', tmtdew=10.29, humidity=49.65, cloud=0.0, wind=23.54, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:53:00', seeing=1.77, atlas_timestamp='2026-02-15T21:52:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:50:00')
2026-02-15T23:53:22.726 [DEBUG] [Thread-213422] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:53:22.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:53:22.820 [DEBUG] [Thread-213425] [transport.py] [_log()] starting thread (client mode): 0xa2d6f670
2026-02-15T23:53:22.821 [DEBUG] [Thread-213425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:53:22.835 [DEBUG] [Thread-213425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:53:22.835 [INFO] [Thread-213425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] client lang: <none>
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] server lang: <none>
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] kex follows: False
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:53:22.843 [DEBUG] [Thread-213425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:53:22.844 [DEBUG] [Thread-213425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:53:22.844 [DEBUG] [Thread-213425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:53:22.844 [DEBUG] [Thread-213425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:53:22.844 [DEBUG] [Thread-213425] [transport.py] [_log()] Compression: none
2026-02-15T23:53:22.844 [DEBUG] [Thread-213425] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:53:22.903 [DEBUG] [Thread-213425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:53:22.903 [DEBUG] [Thread-213425] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:53:22.903 [DEBUG] [Thread-213425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:53:22.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:53:22.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:53:22.960 [DEBUG] [Thread-213425] [transport.py] [_log()] userauth is OK
2026-02-15T23:53:22.960 [DEBUG] [Thread-213425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:53:22.960 [DEBUG] [Thread-213425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:53:22.960 [DEBUG] [Thread-213425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:53:22.960 [DEBUG] [Thread-213425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:53:22.983 [INFO] [Thread-213425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:53:22.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:53:22.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:53:23.865 [DEBUG] [Thread-213425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:53:23.865 [DEBUG] [Thread-213425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:53:23.913 [DEBUG] [Thread-213425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:53:23.913 [DEBUG] [Thread-213425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:53:23.923 [DEBUG] [Thread-213425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:53:23.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:53:23.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:53:23.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:53:23.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:53:23.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:53:23.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:53:23.960 [DEBUG] [Thread-213425] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:53:27.164 [DEBUG] [Thread-213427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:36.249 [DEBUG] [Thread-213428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:42.207 [DEBUG] [Thread-213429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:53.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:53:53.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:53:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:53:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 53, 35), 10.47, 49.33, 0.0, 25.93, 14.45, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:53:55.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:53:35
2026-02-15T23:53:56.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:53:56.299 [DEBUG] [Thread-213430] [transport.py] [_log()] starting thread (client mode): 0xa2d13c10
2026-02-15T23:53:56.299 [DEBUG] [Thread-213430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:53:56.319 [DEBUG] [Thread-213430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:53:56.319 [INFO] [Thread-213430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] client lang: <none>
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] server lang: <none>
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] kex follows: False
2026-02-15T23:53:56.322 [DEBUG] [Thread-213430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:53:56.323 [DEBUG] [Thread-213430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:53:56.323 [DEBUG] [Thread-213430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:53:56.323 [DEBUG] [Thread-213430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:53:56.323 [DEBUG] [Thread-213430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:53:56.323 [DEBUG] [Thread-213430] [transport.py] [_log()] Compression: none
2026-02-15T23:53:56.323 [DEBUG] [Thread-213430] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:53:56.341 [DEBUG] [Thread-213430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:53:56.342 [DEBUG] [Thread-213430] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:53:56.342 [DEBUG] [Thread-213430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:53:56.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:53:56.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:53:56.344 [DEBUG] [Thread-213430] [transport.py] [_log()] userauth is OK
2026-02-15T23:53:56.344 [DEBUG] [Thread-213430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:53:56.344 [DEBUG] [Thread-213430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:53:56.345 [DEBUG] [Thread-213430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:53:56.345 [DEBUG] [Thread-213430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:53:56.367 [INFO] [Thread-213430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:53:56.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:53:57.154 [DEBUG] [Thread-213430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:53:57.154 [DEBUG] [Thread-213430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:53:57.155 [DEBUG] [Thread-213430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:53:57.195 [DEBUG] [Thread-213430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:53:57.195 [DEBUG] [Thread-213430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:53:57.198 [DEBUG] [Thread-213430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:53:57.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:53:57.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:53:57.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:53:57.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:53:57.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:53:57.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:53:57.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:53:57.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:53:57.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:53:57.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.911907 -999.00  +14.20  17.18     54   +5.10 1 1 1 1 1     0    0 8.21 -36.36 ZNESW 17.5 17.2 157.9 19.1 14.4 -23.9 14.3 -23.0 14.1 -21.8 14.4 -23.2
2026-02-15T23:53:57.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:53:57.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:53:57.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.911907
2026-02-15T23:53:57.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:53:57.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:53:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:53:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:53:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:53:57.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:53:35', tmtdew=10.47, humidity=49.33, cloud=0.0, wind=25.93, temperature=14.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:53:35', seeing=1.68, atlas_timestamp='2026-02-15T21:53:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:50:00')
2026-02-15T23:53:57.227 [DEBUG] [Thread-213430] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:53:57.240 [DEBUG] [Thread-213433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:53:57.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:53:57.324 [DEBUG] [Thread-213434] [transport.py] [_log()] starting thread (client mode): 0xa2d11cc0
2026-02-15T23:53:57.324 [DEBUG] [Thread-213434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:53:57.345 [DEBUG] [Thread-213434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:53:57.345 [INFO] [Thread-213434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:53:57.353 [DEBUG] [Thread-213434] [transport.py] [_log()] client lang: <none>
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] server lang: <none>
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] kex follows: False
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] Compression: none
2026-02-15T23:53:57.354 [DEBUG] [Thread-213434] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:53:57.411 [DEBUG] [Thread-213434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:53:57.412 [DEBUG] [Thread-213434] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:53:57.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:53:57.413 [DEBUG] [Thread-213434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:53:57.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:53:57.468 [DEBUG] [Thread-213434] [transport.py] [_log()] userauth is OK
2026-02-15T23:53:57.468 [DEBUG] [Thread-213434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:53:57.468 [DEBUG] [Thread-213434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:53:57.468 [DEBUG] [Thread-213434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:53:57.468 [DEBUG] [Thread-213434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:53:57.487 [INFO] [Thread-213434] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:53:57.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:53:57.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:53:58.333 [DEBUG] [Thread-213434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:53:58.337 [DEBUG] [Thread-213434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:53:58.381 [DEBUG] [Thread-213434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:53:58.382 [DEBUG] [Thread-213434] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:53:58.391 [DEBUG] [Thread-213434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:53:58.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:53:58.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:53:58.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:53:58.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:53:58.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:53:58.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:53:58.427 [DEBUG] [Thread-213434] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:54:09.330 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:09.332 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:12.283 [DEBUG] [Thread-213436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:27.320 [DEBUG] [Thread-213437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:28.166 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:54:28.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:54:28.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:54:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 54, 10), 10.28, 49.68, 0.0, 24.01, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:54:30.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:54:10
2026-02-15T23:54:30.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:54:30.813 [DEBUG] [Thread-213438] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-15T23:54:30.813 [DEBUG] [Thread-213438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:54:30.834 [DEBUG] [Thread-213438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:54:30.834 [INFO] [Thread-213438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] client lang: <none>
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] server lang: <none>
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] kex follows: False
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:54:30.837 [DEBUG] [Thread-213438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:54:30.838 [DEBUG] [Thread-213438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:54:30.838 [DEBUG] [Thread-213438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:54:30.838 [DEBUG] [Thread-213438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:54:30.838 [DEBUG] [Thread-213438] [transport.py] [_log()] Compression: none
2026-02-15T23:54:30.838 [DEBUG] [Thread-213438] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:54:30.855 [DEBUG] [Thread-213438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:54:30.856 [DEBUG] [Thread-213438] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:54:30.856 [DEBUG] [Thread-213438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:54:30.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:54:30.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:54:30.858 [DEBUG] [Thread-213438] [transport.py] [_log()] userauth is OK
2026-02-15T23:54:30.859 [DEBUG] [Thread-213438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:54:30.859 [DEBUG] [Thread-213438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:54:30.859 [DEBUG] [Thread-213438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:54:30.859 [DEBUG] [Thread-213438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:54:30.884 [INFO] [Thread-213438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:54:30.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:54:31.505 [DEBUG] [Thread-213438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:54:31.505 [DEBUG] [Thread-213438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:54:31.505 [DEBUG] [Thread-213438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:54:31.546 [DEBUG] [Thread-213438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:54:31.546 [DEBUG] [Thread-213438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:54:31.549 [DEBUG] [Thread-213438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:54:31.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:54:31.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:54:31.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:54:31.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:54:31.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:54:31.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:54:31.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:54:31.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:54:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:54:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.912601 -999.00  +14.20  16.36     54   +5.10 1 1 1 1 1     0    0 8.26 -31.54 ZNESW 17.7 16.4 155.7 26.0 14.4 -24.0 14.3 -23.0 14.1 -21.7 14.4 -23.1
2026-02-15T23:54:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:54:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:54:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.912601
2026-02-15T23:54:31.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:54:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:54:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:54:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:54:31.573 [DEBUG] [Thread-213438] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:54:31.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:54:31.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:54:10', tmtdew=10.28, humidity=49.68, cloud=0.0, wind=24.01, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:54:11', seeing=1.71, atlas_timestamp='2026-02-15T21:54:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:52:00')
2026-02-15T23:54:31.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:54:31.676 [DEBUG] [Thread-213441] [transport.py] [_log()] starting thread (client mode): 0xa2d13a00
2026-02-15T23:54:31.676 [DEBUG] [Thread-213441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:54:31.696 [DEBUG] [Thread-213441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:54:31.696 [INFO] [Thread-213441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:54:31.709 [DEBUG] [Thread-213441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:54:31.709 [DEBUG] [Thread-213441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] client lang: <none>
2026-02-15T23:54:31.710 [DEBUG] [Thread-213441] [transport.py] [_log()] server lang: <none>
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] kex follows: False
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] Compression: none
2026-02-15T23:54:31.711 [DEBUG] [Thread-213441] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:54:31.774 [DEBUG] [Thread-213441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:54:31.774 [DEBUG] [Thread-213441] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:54:31.775 [DEBUG] [Thread-213441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:54:31.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:54:31.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:54:31.836 [DEBUG] [Thread-213441] [transport.py] [_log()] userauth is OK
2026-02-15T23:54:31.836 [DEBUG] [Thread-213441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:54:31.836 [DEBUG] [Thread-213441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:54:31.836 [DEBUG] [Thread-213441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:54:31.836 [DEBUG] [Thread-213441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:54:31.856 [INFO] [Thread-213441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:54:31.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:54:31.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:54:32.658 [DEBUG] [Thread-213441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:54:32.658 [DEBUG] [Thread-213441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:54:32.706 [DEBUG] [Thread-213441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:54:32.706 [DEBUG] [Thread-213441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:54:32.715 [DEBUG] [Thread-213441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:54:32.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:54:32.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:54:32.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:54:32.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:54:32.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:54:32.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:54:32.750 [DEBUG] [Thread-213441] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:54:36.307 [DEBUG] [Thread-213443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:42.357 [DEBUG] [Thread-213444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:54:57.410 [DEBUG] [Thread-213445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:55:02.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:55:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:55:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 54, 46), 10.31, 49.57, 0.0, 23.71, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:55:04.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:54:46
2026-02-15T23:55:05.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:55:05.177 [DEBUG] [Thread-213446] [transport.py] [_log()] starting thread (client mode): 0xa2d6dc60
2026-02-15T23:55:05.177 [DEBUG] [Thread-213446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:55:05.197 [DEBUG] [Thread-213446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:55:05.197 [INFO] [Thread-213446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] client lang: <none>
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] server lang: <none>
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] kex follows: False
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] Compression: none
2026-02-15T23:55:05.200 [DEBUG] [Thread-213446] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:55:05.218 [DEBUG] [Thread-213446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:55:05.218 [DEBUG] [Thread-213446] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:55:05.218 [DEBUG] [Thread-213446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:55:05.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:55:05.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:55:05.219 [DEBUG] [Thread-213446] [transport.py] [_log()] userauth is OK
2026-02-15T23:55:05.219 [DEBUG] [Thread-213446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:55:05.219 [DEBUG] [Thread-213446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:55:05.219 [DEBUG] [Thread-213446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:55:05.219 [DEBUG] [Thread-213446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:55:05.245 [INFO] [Thread-213446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:55:05.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:55:09.533 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:09.534 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:12.442 [DEBUG] [Thread-213448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:13.351 [DEBUG] [Thread-213446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:55:13.352 [DEBUG] [Thread-213446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:55:13.352 [DEBUG] [Thread-213446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:55:13.392 [DEBUG] [Thread-213446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:55:13.392 [DEBUG] [Thread-213446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:55:13.395 [DEBUG] [Thread-213446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:55:13.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:55:13.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:55:13.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:55:13.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:55:13.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:55:13.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:55:13.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:55:13.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:55:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:55:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.912949 -999.00  +14.10  17.85     54   +5.10 1 1 1 1 1     0    0 8.23 -33.18 ZNESW 17.1 17.9 144.6 21.1 14.4 -24.1 14.3 -22.9 14.1 -22.0 14.4 -23.2
2026-02-15T23:55:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:55:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:55:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.912949
2026-02-15T23:55:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:55:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:55:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:55:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:55:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:55:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:54:46', tmtdew=10.31, humidity=49.57, cloud=0.0, wind=23.71, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:54:46', seeing=1.44, atlas_timestamp='2026-02-15T21:54:38.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:52:00')
2026-02-15T23:55:13.464 [DEBUG] [Thread-213446] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:55:13.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:55:13.550 [DEBUG] [Thread-213450] [transport.py] [_log()] starting thread (client mode): 0xa2d03e80
2026-02-15T23:55:13.550 [DEBUG] [Thread-213450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:55:13.564 [DEBUG] [Thread-213450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:55:13.564 [INFO] [Thread-213450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:55:13.572 [DEBUG] [Thread-213450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:55:13.572 [DEBUG] [Thread-213450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:55:13.572 [DEBUG] [Thread-213450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] client lang: <none>
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] server lang: <none>
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] kex follows: False
2026-02-15T23:55:13.573 [DEBUG] [Thread-213450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:55:13.574 [DEBUG] [Thread-213450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:55:13.574 [DEBUG] [Thread-213450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:55:13.574 [DEBUG] [Thread-213450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:55:13.574 [DEBUG] [Thread-213450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:55:13.574 [DEBUG] [Thread-213450] [transport.py] [_log()] Compression: none
2026-02-15T23:55:13.574 [DEBUG] [Thread-213450] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:55:13.634 [DEBUG] [Thread-213450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:55:13.635 [DEBUG] [Thread-213450] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:55:13.635 [DEBUG] [Thread-213450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:55:13.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:55:13.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:55:13.691 [DEBUG] [Thread-213450] [transport.py] [_log()] userauth is OK
2026-02-15T23:55:13.691 [DEBUG] [Thread-213450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:55:13.691 [DEBUG] [Thread-213450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:55:13.692 [DEBUG] [Thread-213450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:55:13.692 [DEBUG] [Thread-213450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:55:13.712 [INFO] [Thread-213450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:55:13.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:55:13.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:55:14.552 [DEBUG] [Thread-213450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:55:14.552 [DEBUG] [Thread-213450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:55:14.602 [DEBUG] [Thread-213450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:55:14.602 [DEBUG] [Thread-213450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:55:14.611 [DEBUG] [Thread-213450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:55:14.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:55:14.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:55:14.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:55:14.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:55:14.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:55:14.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:55:14.648 [DEBUG] [Thread-213450] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:55:27.476 [DEBUG] [Thread-213452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:36.364 [DEBUG] [Thread-213453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:42.543 [DEBUG] [Thread-213454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:55:44.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:55:44.646 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:55:44.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:55:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 55, 21), 10.31, 49.6, 0.0, 24.35, 14.14, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:55:46.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:55:21
2026-02-15T23:55:46.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:55:46.977 [DEBUG] [Thread-213455] [transport.py] [_log()] starting thread (client mode): 0xa2d02230
2026-02-15T23:55:46.977 [DEBUG] [Thread-213455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:55:46.997 [DEBUG] [Thread-213455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:55:46.998 [INFO] [Thread-213455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:55:47.001 [DEBUG] [Thread-213455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] client lang: <none>
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] server lang: <none>
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] kex follows: False
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] Compression: none
2026-02-15T23:55:47.002 [DEBUG] [Thread-213455] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:55:47.011 [DEBUG] [Thread-213455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:55:47.011 [DEBUG] [Thread-213455] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:55:47.011 [DEBUG] [Thread-213455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:55:47.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:55:47.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:55:47.013 [DEBUG] [Thread-213455] [transport.py] [_log()] userauth is OK
2026-02-15T23:55:47.014 [DEBUG] [Thread-213455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:55:47.014 [DEBUG] [Thread-213455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:55:47.014 [DEBUG] [Thread-213455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:55:47.014 [DEBUG] [Thread-213455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:55:47.038 [INFO] [Thread-213455] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:55:47.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:55:47.693 [DEBUG] [Thread-213455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:55:47.694 [DEBUG] [Thread-213455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:55:47.694 [DEBUG] [Thread-213455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:55:47.734 [DEBUG] [Thread-213455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:55:47.735 [DEBUG] [Thread-213455] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:55:47.738 [DEBUG] [Thread-213455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:55:47.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:55:47.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:55:47.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:55:47.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:55:47.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:55:47.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:55:47.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:55:47.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:55:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:55:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.913296 -999.00  +14.10  15.78     54   +5.00 1 1 1 1 1     0    0 8.03 -35.33 ZNESW 16.8 15.8 153.0 21.6 14.4 -24.1 14.4 -23.1 14.1 -21.8 14.4 -23.3
2026-02-15T23:55:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:55:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:55:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.913296
2026-02-15T23:55:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:55:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:55:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:55:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:55:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:55:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:55:21', tmtdew=10.31, humidity=49.6, cloud=0.0, wind=24.35, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:55:22', seeing=1.4, atlas_timestamp='2026-02-15T21:55:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:52:00')
2026-02-15T23:55:47.762 [DEBUG] [Thread-213455] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:55:47.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:55:47.858 [DEBUG] [Thread-213458] [transport.py] [_log()] starting thread (client mode): 0xa2d11600
2026-02-15T23:55:47.859 [DEBUG] [Thread-213458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:55:47.873 [DEBUG] [Thread-213458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:55:47.873 [INFO] [Thread-213458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:55:47.880 [DEBUG] [Thread-213458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:55:47.880 [DEBUG] [Thread-213458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:55:47.880 [DEBUG] [Thread-213458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:55:47.880 [DEBUG] [Thread-213458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] client lang: <none>
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] server lang: <none>
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] kex follows: False
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] Compression: none
2026-02-15T23:55:47.881 [DEBUG] [Thread-213458] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:55:47.940 [DEBUG] [Thread-213458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:55:47.941 [DEBUG] [Thread-213458] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:55:47.942 [DEBUG] [Thread-213458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:55:47.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:55:47.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:55:48.000 [DEBUG] [Thread-213458] [transport.py] [_log()] userauth is OK
2026-02-15T23:55:48.000 [DEBUG] [Thread-213458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:55:48.001 [DEBUG] [Thread-213458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:55:48.001 [DEBUG] [Thread-213458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:55:48.001 [DEBUG] [Thread-213458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:55:48.022 [INFO] [Thread-213458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:55:48.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:55:48.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:55:48.857 [DEBUG] [Thread-213458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:55:48.858 [DEBUG] [Thread-213458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:55:48.906 [DEBUG] [Thread-213458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:55:48.906 [DEBUG] [Thread-213458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:55:48.916 [DEBUG] [Thread-213458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:55:48.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:55:48.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:55:48.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:55:48.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:55:48.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:55:48.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:55:48.953 [DEBUG] [Thread-213458] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:55:57.579 [DEBUG] [Thread-213460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:01.552 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:09.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:09.733 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:12.629 [DEBUG] [Thread-213461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:18.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:56:18.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:56:18.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:56:20.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 55, 57), 10.35, 49.63, 0.0, 23.84, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:56:20.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:55:57
2026-02-15T23:56:21.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:56:21.298 [DEBUG] [Thread-213462] [transport.py] [_log()] starting thread (client mode): 0xa2d6c370
2026-02-15T23:56:21.298 [DEBUG] [Thread-213462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:56:21.318 [DEBUG] [Thread-213462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:56:21.318 [INFO] [Thread-213462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:56:21.320 [DEBUG] [Thread-213462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] client lang: <none>
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] server lang: <none>
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] kex follows: False
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:56:21.321 [DEBUG] [Thread-213462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:56:21.322 [DEBUG] [Thread-213462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:56:21.322 [DEBUG] [Thread-213462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:56:21.322 [DEBUG] [Thread-213462] [transport.py] [_log()] Compression: none
2026-02-15T23:56:21.322 [DEBUG] [Thread-213462] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:56:21.338 [DEBUG] [Thread-213462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:56:21.339 [DEBUG] [Thread-213462] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:56:21.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:56:21.341 [DEBUG] [Thread-213462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:56:21.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:56:21.343 [DEBUG] [Thread-213462] [transport.py] [_log()] userauth is OK
2026-02-15T23:56:21.344 [DEBUG] [Thread-213462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:56:21.344 [DEBUG] [Thread-213462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:56:21.344 [DEBUG] [Thread-213462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:56:21.344 [DEBUG] [Thread-213462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:56:21.364 [INFO] [Thread-213462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:56:21.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:56:21.954 [DEBUG] [Thread-213462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:56:21.954 [DEBUG] [Thread-213462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:56:21.954 [DEBUG] [Thread-213462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:56:21.994 [DEBUG] [Thread-213462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:56:21.995 [DEBUG] [Thread-213462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:56:21.998 [DEBUG] [Thread-213462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:56:22.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:56:22.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:56:22.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:56:22.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:56:22.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:56:22.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:56:22.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:56:22.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:56:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:56:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.913643 -999.00  +14.10  15.40     54   +5.00 1 1 1 1 1     0    0 8.14 -30.61 ZNESW 17.0 15.4 163.1 24.8 14.4 -24.2 14.3 -23.0 14.1 -21.9 14.4 -23.1
2026-02-15T23:56:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:56:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:56:22.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.913643
2026-02-15T23:56:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:56:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:56:22.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:56:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:56:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:56:22.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:55:57', tmtdew=10.35, humidity=49.63, cloud=0.0, wind=23.84, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:55:57', seeing=1.4, atlas_timestamp='2026-02-15T21:55:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:52:00')
2026-02-15T23:56:22.027 [DEBUG] [Thread-213462] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:56:22.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:56:22.118 [DEBUG] [Thread-213465] [transport.py] [_log()] starting thread (client mode): 0xa57c3100
2026-02-15T23:56:22.118 [DEBUG] [Thread-213465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:56:22.132 [DEBUG] [Thread-213465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:56:22.133 [INFO] [Thread-213465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:56:22.140 [DEBUG] [Thread-213465] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:56:22.140 [DEBUG] [Thread-213465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:56:22.140 [DEBUG] [Thread-213465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:56:22.140 [DEBUG] [Thread-213465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] client lang: <none>
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] server lang: <none>
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] kex follows: False
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] Compression: none
2026-02-15T23:56:22.141 [DEBUG] [Thread-213465] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:56:22.200 [DEBUG] [Thread-213465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:56:22.200 [DEBUG] [Thread-213465] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:56:22.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:56:22.201 [DEBUG] [Thread-213465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:56:22.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:56:22.256 [DEBUG] [Thread-213465] [transport.py] [_log()] userauth is OK
2026-02-15T23:56:22.256 [DEBUG] [Thread-213465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:56:22.257 [DEBUG] [Thread-213465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:56:22.257 [DEBUG] [Thread-213465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:56:22.257 [DEBUG] [Thread-213465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:56:22.276 [INFO] [Thread-213465] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:56:22.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:56:22.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:56:23.093 [DEBUG] [Thread-213465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:56:23.093 [DEBUG] [Thread-213465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:56:23.141 [DEBUG] [Thread-213465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:56:23.141 [DEBUG] [Thread-213465] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:56:23.151 [DEBUG] [Thread-213465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:56:23.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:56:23.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:56:23.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:56:23.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:56:23.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:56:23.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:56:23.193 [DEBUG] [Thread-213465] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:56:27.666 [DEBUG] [Thread-213467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:36.438 [DEBUG] [Thread-213468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:42.718 [DEBUG] [Thread-213469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:53.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:56:53.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:56:53.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:56:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 56, 32), 10.52, 49.17, 0.0, 27.91, 14.38, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:56:55.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:56:32
2026-02-15T23:56:56.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:56:56.204 [DEBUG] [Thread-213470] [transport.py] [_log()] starting thread (client mode): 0xa2d6c160
2026-02-15T23:56:56.204 [DEBUG] [Thread-213470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:56:56.226 [DEBUG] [Thread-213470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:56:56.226 [INFO] [Thread-213470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] client lang: <none>
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] server lang: <none>
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] kex follows: False
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:56:56.229 [DEBUG] [Thread-213470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:56:56.230 [DEBUG] [Thread-213470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:56:56.230 [DEBUG] [Thread-213470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:56:56.230 [DEBUG] [Thread-213470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:56:56.230 [DEBUG] [Thread-213470] [transport.py] [_log()] Compression: none
2026-02-15T23:56:56.230 [DEBUG] [Thread-213470] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:56:56.247 [DEBUG] [Thread-213470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:56:56.248 [DEBUG] [Thread-213470] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:56:56.249 [DEBUG] [Thread-213470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:56:56.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:56:56.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:56:56.251 [DEBUG] [Thread-213470] [transport.py] [_log()] userauth is OK
2026-02-15T23:56:56.251 [DEBUG] [Thread-213470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:56:56.251 [DEBUG] [Thread-213470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:56:56.251 [DEBUG] [Thread-213470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:56:56.251 [DEBUG] [Thread-213470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:56:56.270 [INFO] [Thread-213470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:56:56.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:56:56.871 [DEBUG] [Thread-213470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:56:56.871 [DEBUG] [Thread-213470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:56:56.872 [DEBUG] [Thread-213470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:56:56.912 [DEBUG] [Thread-213470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:56:56.913 [DEBUG] [Thread-213470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:56:56.916 [DEBUG] [Thread-213470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:56:56.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:56:56.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:56:56.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:56:56.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:56:56.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:56:56.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:56:56.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:56:56.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:56:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:56:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.913990 -999.00  +14.10  14.97     54   +5.10 1 1 1 1 1     0    0 8.30 -31.22 ZNESW 17.1 15.0 156.4 22.3 14.4 -24.1 14.3 -23.1 14.1 -22.0 14.4 -23.2
2026-02-15T23:56:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:56:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:56:56.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.913990
2026-02-15T23:56:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:56:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:56:56.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:56:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:56:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:56:56.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:56:32', tmtdew=10.52, humidity=49.17, cloud=0.0, wind=27.91, temperature=14.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:56:33', seeing=1.36, atlas_timestamp='2026-02-15T21:56:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.043250000000000455, -0.03275000000000006, -0.044749999999998735, -0.031500000000001194, 0.013500000000000512, 0.034250000000000114, -0.03149999999999942, -0.003750000000000142, 0.01750000000000007, 0.025000000000000355, -0.052250000000000796, 0.015000000000000568, 0.06449999999999889, 0.04124999999999979, 0.026499999999998636, -0.0015000000000000568, 0.06724999999999959, 0.05850000000000044, 0.006999999999999673, -0.006250000000001421, 0.03799999999999848, -0.0022500000000018616, 0.003750000000000142, 0.019750000000000156, 0.03250000000000064, 0.0365000000000002, -0.008250000000000313, -0.007500000000000284, 0.08099999999999952, 0.050499999999999545, -0.0034999999999989484, 0.08950000000000102, 0.03874999999999851], zp_timestamp='2026-02-15T21:52:00')
2026-02-15T23:56:56.940 [DEBUG] [Thread-213470] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:56:57.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:56:57.038 [DEBUG] [Thread-213473] [transport.py] [_log()] starting thread (client mode): 0xa2d6d750
2026-02-15T23:56:57.038 [DEBUG] [Thread-213473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:56:57.052 [DEBUG] [Thread-213473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:56:57.052 [INFO] [Thread-213473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:56:57.060 [DEBUG] [Thread-213473] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:56:57.060 [DEBUG] [Thread-213473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:56:57.060 [DEBUG] [Thread-213473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:56:57.060 [DEBUG] [Thread-213473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] client lang: <none>
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] server lang: <none>
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] kex follows: False
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] Compression: none
2026-02-15T23:56:57.061 [DEBUG] [Thread-213473] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:56:57.119 [DEBUG] [Thread-213473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:56:57.119 [DEBUG] [Thread-213473] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:56:57.119 [DEBUG] [Thread-213473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:56:57.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:56:57.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:56:57.176 [DEBUG] [Thread-213473] [transport.py] [_log()] userauth is OK
2026-02-15T23:56:57.176 [DEBUG] [Thread-213473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:56:57.176 [DEBUG] [Thread-213473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:56:57.176 [DEBUG] [Thread-213473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:56:57.176 [DEBUG] [Thread-213473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:56:57.195 [INFO] [Thread-213473] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:56:57.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:56:57.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:56:57.756 [DEBUG] [Thread-213475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:56:58.007 [DEBUG] [Thread-213473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:56:58.008 [DEBUG] [Thread-213473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:56:58.055 [DEBUG] [Thread-213473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:56:58.055 [DEBUG] [Thread-213473] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:56:58.064 [DEBUG] [Thread-213473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:56:58.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:56:58.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:56:58.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:56:58.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:56:58.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:56:58.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:56:58.098 [DEBUG] [Thread-213473] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:57:09.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:09.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:12.806 [DEBUG] [Thread-213476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:27.839 [DEBUG] [Thread-213477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:57:28.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:57:28.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:57:30.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 57, 7), 10.33, 49.7, 0.0, 24.44, 14.21, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:57:30.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:57:07
2026-02-15T23:57:30.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:57:30.686 [DEBUG] [Thread-213478] [transport.py] [_log()] starting thread (client mode): 0xa2d005b0
2026-02-15T23:57:30.686 [DEBUG] [Thread-213478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:57:30.706 [DEBUG] [Thread-213478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:57:30.706 [INFO] [Thread-213478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] client lang: <none>
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] server lang: <none>
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] kex follows: False
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] Compression: none
2026-02-15T23:57:30.709 [DEBUG] [Thread-213478] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:57:30.727 [DEBUG] [Thread-213478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:57:30.727 [DEBUG] [Thread-213478] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:57:30.728 [DEBUG] [Thread-213478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:57:30.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:57:30.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:57:30.730 [DEBUG] [Thread-213478] [transport.py] [_log()] userauth is OK
2026-02-15T23:57:30.730 [DEBUG] [Thread-213478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:57:30.730 [DEBUG] [Thread-213478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:57:30.730 [DEBUG] [Thread-213478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:57:30.730 [DEBUG] [Thread-213478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:57:30.765 [INFO] [Thread-213478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:57:30.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:57:31.387 [DEBUG] [Thread-213478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:57:31.387 [DEBUG] [Thread-213478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:57:31.388 [DEBUG] [Thread-213478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:57:31.427 [DEBUG] [Thread-213478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:57:31.428 [DEBUG] [Thread-213478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:57:31.431 [DEBUG] [Thread-213478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:57:31.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:57:31.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:57:31.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:57:31.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:57:31.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:57:31.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:57:31.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:57:31.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:57:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:57:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.914685 -999.00  +14.00  16.39     54   +5.10 1 1 1 1 1     0    0 8.25 -29.28 ZNESW 17.6 16.4 153.1 20.6 14.4 -24.1 14.3 -23.2 14.1 -21.9 14.4 -23.3
2026-02-15T23:57:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:57:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:57:31.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.914685
2026-02-15T23:57:31.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:57:31.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:57:31.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:57:31.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:57:31.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:57:31.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:57:07', tmtdew=10.33, humidity=49.7, cloud=0.0, wind=24.44, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:57:08', seeing=1.2, atlas_timestamp='2026-02-15T21:57:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:56:00')
2026-02-15T23:57:31.458 [DEBUG] [Thread-213478] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:57:31.542 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:57:31.555 [DEBUG] [Thread-213481] [transport.py] [_log()] starting thread (client mode): 0xa2d6f490
2026-02-15T23:57:31.556 [DEBUG] [Thread-213481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:57:31.570 [DEBUG] [Thread-213481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:57:31.570 [INFO] [Thread-213481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:57:31.578 [DEBUG] [Thread-213481] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:57:31.578 [DEBUG] [Thread-213481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:57:31.578 [DEBUG] [Thread-213481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:57:31.578 [DEBUG] [Thread-213481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:57:31.578 [DEBUG] [Thread-213481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] client lang: <none>
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] server lang: <none>
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] kex follows: False
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] Compression: none
2026-02-15T23:57:31.579 [DEBUG] [Thread-213481] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:57:31.636 [DEBUG] [Thread-213481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:57:31.637 [DEBUG] [Thread-213481] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:57:31.637 [DEBUG] [Thread-213481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:57:31.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:57:31.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:57:31.696 [DEBUG] [Thread-213481] [transport.py] [_log()] userauth is OK
2026-02-15T23:57:31.696 [DEBUG] [Thread-213481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:57:31.696 [DEBUG] [Thread-213481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:57:31.696 [DEBUG] [Thread-213481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:57:31.696 [DEBUG] [Thread-213481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:57:31.715 [INFO] [Thread-213481] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:57:31.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:57:31.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:57:32.528 [DEBUG] [Thread-213481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:57:32.529 [DEBUG] [Thread-213481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:57:32.577 [DEBUG] [Thread-213481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:57:32.577 [DEBUG] [Thread-213481] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:57:32.586 [DEBUG] [Thread-213481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:57:32.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:57:32.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:57:32.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:57:32.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:57:32.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:57:32.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:57:32.621 [DEBUG] [Thread-213481] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:57:35.162 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:36.500 [DEBUG] [Thread-213483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:42.873 [DEBUG] [Thread-213484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:57:57.914 [DEBUG] [Thread-213485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:02.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:58:02.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:58:02.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:58:04.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 57, 42), 10.34, 49.63, 0.0, 25.85, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:58:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:57:42
2026-02-15T23:58:04.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:58:04.963 [DEBUG] [Thread-213486] [transport.py] [_log()] starting thread (client mode): 0xa2dc1390
2026-02-15T23:58:04.963 [DEBUG] [Thread-213486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:58:04.985 [DEBUG] [Thread-213486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:58:04.986 [INFO] [Thread-213486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] client lang: <none>
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] server lang: <none>
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] kex follows: False
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:58:04.988 [DEBUG] [Thread-213486] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:58:04.989 [DEBUG] [Thread-213486] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:58:04.989 [DEBUG] [Thread-213486] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:58:04.989 [DEBUG] [Thread-213486] [transport.py] [_log()] Compression: none
2026-02-15T23:58:04.989 [DEBUG] [Thread-213486] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:58:05.005 [DEBUG] [Thread-213486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:58:05.006 [DEBUG] [Thread-213486] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:58:05.007 [DEBUG] [Thread-213486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:58:05.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:58:05.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:58:05.009 [DEBUG] [Thread-213486] [transport.py] [_log()] userauth is OK
2026-02-15T23:58:05.009 [DEBUG] [Thread-213486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:58:05.009 [DEBUG] [Thread-213486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:58:05.009 [DEBUG] [Thread-213486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:58:05.009 [DEBUG] [Thread-213486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:58:05.045 [INFO] [Thread-213486] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:58:05.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:58:05.648 [DEBUG] [Thread-213486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:58:05.648 [DEBUG] [Thread-213486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:58:05.648 [DEBUG] [Thread-213486] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:58:05.689 [DEBUG] [Thread-213486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:58:05.689 [DEBUG] [Thread-213486] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:58:05.691 [DEBUG] [Thread-213486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:58:05.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:58:05.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:58:05.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:58:05.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:58:05.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:58:05.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:58:05.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.915032 -999.00  +14.00  17.23     54   +5.00 1 1 1 1 1     0    0 8.34 -27.51 ZNESW 17.7 17.2 144.6 19.3 14.4 -24.1 14.2 -23.1 14.1 -21.9 14.4 -23.3
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.915032
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:58:05.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:57:42', tmtdew=10.34, humidity=49.63, cloud=0.0, wind=25.85, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:57:43', seeing=1.26, atlas_timestamp='2026-02-15T21:57:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:56:00')
2026-02-15T23:58:05.711 [DEBUG] [Thread-213486] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:58:05.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:58:05.794 [DEBUG] [Thread-213489] [transport.py] [_log()] starting thread (client mode): 0xa57e1900
2026-02-15T23:58:05.794 [DEBUG] [Thread-213489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:58:05.809 [DEBUG] [Thread-213489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:58:05.809 [INFO] [Thread-213489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:58:05.817 [DEBUG] [Thread-213489] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:58:05.817 [DEBUG] [Thread-213489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:58:05.817 [DEBUG] [Thread-213489] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:58:05.817 [DEBUG] [Thread-213489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:05.817 [DEBUG] [Thread-213489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] client lang: <none>
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] server lang: <none>
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] kex follows: False
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:58:05.818 [DEBUG] [Thread-213489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:58:05.819 [DEBUG] [Thread-213489] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:58:05.819 [DEBUG] [Thread-213489] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:58:05.819 [DEBUG] [Thread-213489] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:58:05.819 [DEBUG] [Thread-213489] [transport.py] [_log()] Compression: none
2026-02-15T23:58:05.819 [DEBUG] [Thread-213489] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:58:05.880 [DEBUG] [Thread-213489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:58:05.881 [DEBUG] [Thread-213489] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:58:05.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:58:05.882 [DEBUG] [Thread-213489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:58:05.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:58:05.936 [DEBUG] [Thread-213489] [transport.py] [_log()] userauth is OK
2026-02-15T23:58:05.937 [DEBUG] [Thread-213489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:58:05.937 [DEBUG] [Thread-213489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:58:05.937 [DEBUG] [Thread-213489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:58:05.937 [DEBUG] [Thread-213489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:58:05.956 [INFO] [Thread-213489] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:58:05.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:58:05.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:58:06.798 [DEBUG] [Thread-213489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:58:06.798 [DEBUG] [Thread-213489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:58:06.847 [DEBUG] [Thread-213489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:58:06.847 [DEBUG] [Thread-213489] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:58:06.856 [DEBUG] [Thread-213489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:58:06.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:58:06.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:58:06.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:58:06.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:58:06.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:58:06.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:58:06.893 [DEBUG] [Thread-213489] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:58:10.133 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:10.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:12.950 [DEBUG] [Thread-213491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:28.000 [DEBUG] [Thread-213492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:36.561 [DEBUG] [Thread-213493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:36.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:58:36.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:58:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:58:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 58, 18), 10.31, 49.75, 0.0, 27.05, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:58:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:58:18
2026-02-15T23:58:39.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:58:39.269 [DEBUG] [Thread-213494] [transport.py] [_log()] starting thread (client mode): 0xa2d03040
2026-02-15T23:58:39.269 [DEBUG] [Thread-213494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:58:39.289 [DEBUG] [Thread-213494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:58:39.289 [INFO] [Thread-213494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] client lang: <none>
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] server lang: <none>
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] kex follows: False
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:58:39.293 [DEBUG] [Thread-213494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:58:39.294 [DEBUG] [Thread-213494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:58:39.294 [DEBUG] [Thread-213494] [transport.py] [_log()] Compression: none
2026-02-15T23:58:39.294 [DEBUG] [Thread-213494] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:58:39.313 [DEBUG] [Thread-213494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:58:39.313 [DEBUG] [Thread-213494] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:58:39.314 [DEBUG] [Thread-213494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:58:39.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:58:39.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:58:39.316 [DEBUG] [Thread-213494] [transport.py] [_log()] userauth is OK
2026-02-15T23:58:39.316 [DEBUG] [Thread-213494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:58:39.316 [DEBUG] [Thread-213494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:58:39.317 [DEBUG] [Thread-213494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:58:39.317 [DEBUG] [Thread-213494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:58:39.352 [INFO] [Thread-213494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:58:39.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:58:39.963 [DEBUG] [Thread-213494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:58:39.963 [DEBUG] [Thread-213494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:58:39.964 [DEBUG] [Thread-213494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:58:40.004 [DEBUG] [Thread-213494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:58:40.005 [DEBUG] [Thread-213494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:58:40.008 [DEBUG] [Thread-213494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:58:40.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:58:40.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:58:40.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:58:40.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:58:40.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:58:40.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:58:40.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:58:40.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:58:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:58:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.915379 -999.00  +14.00  20.22     54   +5.00 1 1 1 1 1     0    0 8.61 -28.23 ZNESW 17.9 20.2 142.4 24.0 14.4 -24.0 14.3 -23.0 14.1 -21.9 14.3 -23.3
2026-02-15T23:58:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:58:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:58:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.915379
2026-02-15T23:58:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:58:40.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:58:40.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:58:40.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:58:40.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:58:40.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:58:18', tmtdew=10.31, humidity=49.75, cloud=0.0, wind=27.05, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:58:18', seeing=1.36, atlas_timestamp='2026-02-15T21:58:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:56:00')
2026-02-15T23:58:40.033 [DEBUG] [Thread-213494] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:58:40.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:58:40.132 [DEBUG] [Thread-213497] [transport.py] [_log()] starting thread (client mode): 0xa2d00880
2026-02-15T23:58:40.133 [DEBUG] [Thread-213497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:58:40.147 [DEBUG] [Thread-213497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:58:40.148 [INFO] [Thread-213497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:58:40.155 [DEBUG] [Thread-213497] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:58:40.156 [DEBUG] [Thread-213497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:58:40.157 [DEBUG] [Thread-213497] [transport.py] [_log()] client lang: <none>
2026-02-15T23:58:40.157 [DEBUG] [Thread-213497] [transport.py] [_log()] server lang: <none>
2026-02-15T23:58:40.157 [DEBUG] [Thread-213497] [transport.py] [_log()] kex follows: False
2026-02-15T23:58:40.157 [DEBUG] [Thread-213497] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:58:40.157 [DEBUG] [Thread-213497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:58:40.158 [DEBUG] [Thread-213497] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:58:40.158 [DEBUG] [Thread-213497] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:58:40.158 [DEBUG] [Thread-213497] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:58:40.158 [DEBUG] [Thread-213497] [transport.py] [_log()] Compression: none
2026-02-15T23:58:40.158 [DEBUG] [Thread-213497] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:58:40.215 [DEBUG] [Thread-213497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:58:40.216 [DEBUG] [Thread-213497] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:58:40.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:58:40.217 [DEBUG] [Thread-213497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:58:40.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:58:40.272 [DEBUG] [Thread-213497] [transport.py] [_log()] userauth is OK
2026-02-15T23:58:40.272 [DEBUG] [Thread-213497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:58:40.272 [DEBUG] [Thread-213497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:58:40.272 [DEBUG] [Thread-213497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:58:40.272 [DEBUG] [Thread-213497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:58:40.291 [INFO] [Thread-213497] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:58:40.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:58:40.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:58:41.114 [DEBUG] [Thread-213497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:58:41.114 [DEBUG] [Thread-213497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:58:41.162 [DEBUG] [Thread-213497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:58:41.162 [DEBUG] [Thread-213497] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:58:41.170 [DEBUG] [Thread-213497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:58:41.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:58:41.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:58:41.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:58:41.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:58:41.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:58:41.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:58:41.203 [DEBUG] [Thread-213497] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:58:43.035 [DEBUG] [Thread-213499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:58:58.085 [DEBUG] [Thread-213500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:08.569 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:10.337 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:10.338 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:11.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:59:11.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:59:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:59:13.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 58, 53), 10.31, 49.75, 0.0, 24.7, 14.18, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:59:13.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:58:53
2026-02-15T23:59:13.120 [DEBUG] [Thread-213501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:13.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:59:13.543 [DEBUG] [Thread-213502] [transport.py] [_log()] starting thread (client mode): 0xa57d58a0
2026-02-15T23:59:13.543 [DEBUG] [Thread-213502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:59:13.563 [DEBUG] [Thread-213502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:59:13.563 [INFO] [Thread-213502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:59:13.566 [DEBUG] [Thread-213502] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:59:13.566 [DEBUG] [Thread-213502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:59:13.566 [DEBUG] [Thread-213502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] client lang: <none>
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] server lang: <none>
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] kex follows: False
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:59:13.567 [DEBUG] [Thread-213502] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:59:13.568 [DEBUG] [Thread-213502] [transport.py] [_log()] Compression: none
2026-02-15T23:59:13.568 [DEBUG] [Thread-213502] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:59:13.587 [DEBUG] [Thread-213502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:59:13.588 [DEBUG] [Thread-213502] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:59:13.588 [DEBUG] [Thread-213502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:59:13.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:59:13.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:59:13.632 [DEBUG] [Thread-213502] [transport.py] [_log()] userauth is OK
2026-02-15T23:59:13.632 [DEBUG] [Thread-213502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:59:13.633 [DEBUG] [Thread-213502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:59:13.633 [DEBUG] [Thread-213502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:59:13.633 [DEBUG] [Thread-213502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:59:13.655 [INFO] [Thread-213502] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:59:13.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:59:14.445 [DEBUG] [Thread-213502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:59:14.445 [DEBUG] [Thread-213502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:59:14.446 [DEBUG] [Thread-213502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:59:14.486 [DEBUG] [Thread-213502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:59:14.486 [DEBUG] [Thread-213502] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:59:14.489 [DEBUG] [Thread-213502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:59:14.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:59:14.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:59:14.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:59:14.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:59:14.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:59:14.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:59:14.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:59:14.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:59:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:59:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.915726 -999.00  +14.00  17.56     54   +5.00 1 1 1 1 1     0    0 8.52 -28.20 ZNESW 18.2 17.6 136.0 22.1 14.3 -24.1 14.3 -23.1 14.1 -22.0 14.3 -23.2
2026-02-15T23:59:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:59:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:59:14.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.915726
2026-02-15T23:59:14.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:59:14.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:59:14.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:59:14.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:59:14.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:59:14.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:58:53', tmtdew=10.31, humidity=49.75, cloud=0.0, wind=24.7, temperature=14.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:58:54', seeing=1.25, atlas_timestamp='2026-02-15T21:58:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:56:00')
2026-02-15T23:59:14.518 [DEBUG] [Thread-213502] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:59:14.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:59:14.614 [DEBUG] [Thread-213505] [transport.py] [_log()] starting thread (client mode): 0xa57b2830
2026-02-15T23:59:14.614 [DEBUG] [Thread-213505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:59:14.629 [DEBUG] [Thread-213505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:59:14.629 [INFO] [Thread-213505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] client lang: <none>
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] server lang: <none>
2026-02-15T23:59:14.637 [DEBUG] [Thread-213505] [transport.py] [_log()] kex follows: False
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] Compression: none
2026-02-15T23:59:14.638 [DEBUG] [Thread-213505] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:59:14.695 [DEBUG] [Thread-213505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:59:14.696 [DEBUG] [Thread-213505] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:59:14.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:59:14.697 [DEBUG] [Thread-213505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:59:14.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:59:14.751 [DEBUG] [Thread-213505] [transport.py] [_log()] userauth is OK
2026-02-15T23:59:14.752 [DEBUG] [Thread-213505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:59:14.752 [DEBUG] [Thread-213505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:59:14.752 [DEBUG] [Thread-213505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:59:14.752 [DEBUG] [Thread-213505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:59:14.771 [INFO] [Thread-213505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:59:14.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:59:14.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:59:15.603 [DEBUG] [Thread-213505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:59:15.604 [DEBUG] [Thread-213505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:59:15.651 [DEBUG] [Thread-213505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:59:15.651 [DEBUG] [Thread-213505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:59:15.663 [DEBUG] [Thread-213505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:59:15.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:59:15.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:59:15.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-15T23:59:15.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:59:15.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:59:15.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:59:15.699 [DEBUG] [Thread-213505] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:59:28.154 [DEBUG] [Thread-213507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:36.613 [DEBUG] [Thread-213508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:43.200 [DEBUG] [Thread-213509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-15T23:59:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-15T23:59:45.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-15T23:59:45.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-15T23:59:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 15, 23, 59, 28), 10.31, 49.77, 0.0, 24.79, 14.16, 0, 0, 0, 2, 0, 0),)
2026-02-15T23:59:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-15 23:59:28
2026-02-15T23:59:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-15T23:59:48.116 [DEBUG] [Thread-213510] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-15T23:59:48.116 [DEBUG] [Thread-213510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:59:48.139 [DEBUG] [Thread-213510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-15T23:59:48.139 [INFO] [Thread-213510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] client lang: <none>
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] server lang: <none>
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] kex follows: False
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:59:48.143 [DEBUG] [Thread-213510] [transport.py] [_log()] Compression: none
2026-02-15T23:59:48.144 [DEBUG] [Thread-213510] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:59:48.162 [DEBUG] [Thread-213510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:59:48.163 [DEBUG] [Thread-213510] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:59:48.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-15T23:59:48.163 [DEBUG] [Thread-213510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-15T23:59:48.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:59:48.165 [DEBUG] [Thread-213510] [transport.py] [_log()] userauth is OK
2026-02-15T23:59:48.165 [DEBUG] [Thread-213510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:59:48.165 [DEBUG] [Thread-213510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:59:48.165 [DEBUG] [Thread-213510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-15T23:59:48.165 [DEBUG] [Thread-213510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:59:48.189 [INFO] [Thread-213510] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:59:48.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:59:48.823 [DEBUG] [Thread-213510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:59:48.823 [DEBUG] [Thread-213510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:59:48.823 [DEBUG] [Thread-213510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-15T23:59:48.864 [DEBUG] [Thread-213510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:59:48.864 [DEBUG] [Thread-213510] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:59:48.867 [DEBUG] [Thread-213510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:59:48.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:59:48.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-15T23:59:48.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-15T23:59:48.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-15T23:59:48.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:59:48.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-15T23:59:48.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:59:48.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:59:48.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-15T23:59:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.916074 -999.00  +13.90  18.86     55   +5.00 1 1 1 1 1     0    0 8.43 -28.95 ZNESW 22.7 18.9 143.2 23.4 14.3 -24.0 14.2 -23.1 14.0 -22.0 14.4 -23.1
2026-02-15T23:59:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-15T23:59:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-15T23:59:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.916074
2026-02-15T23:59:48.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-15T23:59:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-15T23:59:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-15T23:59:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-15T23:59:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-15T23:59:48.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-15T23:59:28', tmtdew=10.31, humidity=49.77, cloud=0.0, wind=24.79, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-15T23:59:29', seeing=1.24, atlas_timestamp='2026-02-15T21:59:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:56:00')
2026-02-15T23:59:48.893 [DEBUG] [Thread-213510] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:59:48.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-15T23:59:48.984 [DEBUG] [Thread-213513] [transport.py] [_log()] starting thread (client mode): 0xa2d6f100
2026-02-15T23:59:48.985 [DEBUG] [Thread-213513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-15T23:59:48.999 [DEBUG] [Thread-213513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-15T23:59:49.000 [INFO] [Thread-213513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-15T23:59:49.007 [DEBUG] [Thread-213513] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-15T23:59:49.007 [DEBUG] [Thread-213513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-15T23:59:49.007 [DEBUG] [Thread-213513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] client lang: <none>
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] server lang: <none>
2026-02-15T23:59:49.008 [DEBUG] [Thread-213513] [transport.py] [_log()] kex follows: False
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] === Key exchange agreements ===
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] Compression: none
2026-02-15T23:59:49.009 [DEBUG] [Thread-213513] [transport.py] [_log()] === End of kex handshake ===
2026-02-15T23:59:49.075 [DEBUG] [Thread-213513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-15T23:59:49.075 [DEBUG] [Thread-213513] [transport.py] [_log()] Switch to new keys ...
2026-02-15T23:59:49.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-15T23:59:49.076 [DEBUG] [Thread-213513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-15T23:59:49.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-15T23:59:49.141 [DEBUG] [Thread-213513] [transport.py] [_log()] userauth is OK
2026-02-15T23:59:49.141 [DEBUG] [Thread-213513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-15T23:59:49.141 [DEBUG] [Thread-213513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-15T23:59:49.141 [DEBUG] [Thread-213513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-15T23:59:49.141 [DEBUG] [Thread-213513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-15T23:59:49.160 [INFO] [Thread-213513] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-15T23:59:49.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-15T23:59:49.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-15T23:59:49.963 [DEBUG] [Thread-213513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-15T23:59:49.963 [DEBUG] [Thread-213513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-15T23:59:50.011 [DEBUG] [Thread-213513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-15T23:59:50.012 [DEBUG] [Thread-213513] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-15T23:59:50.021 [DEBUG] [Thread-213513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-15T23:59:50.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-15T23:59:50.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-15T23:59:50.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
2026-02-15T23:59:50.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-15T23:59:50.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-15T23:59:50.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-15T23:59:50.057 [DEBUG] [Thread-213513] [transport.py] [_log()] EOF in transport thread
2026-02-15T23:59:58.232 [DEBUG] [Thread-213515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:10.540 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:10.541 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:13.273 [DEBUG] [Thread-213516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:20.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:00:20.052 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:00:20.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:00:21.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 0, 4), 10.29, 49.82, 0.0, 24.65, 14.13, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:00:21.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:00:04
2026-02-16T00:00:22.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:00:22.493 [DEBUG] [Thread-213517] [transport.py] [_log()] starting thread (client mode): 0xa57e2b90
2026-02-16T00:00:22.494 [DEBUG] [Thread-213517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:00:22.513 [DEBUG] [Thread-213517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:00:22.514 [INFO] [Thread-213517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:00:22.517 [DEBUG] [Thread-213517] [transport.py] [_log()] client lang: <none>
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] server lang: <none>
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] kex follows: False
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] Compression: none
2026-02-16T00:00:22.518 [DEBUG] [Thread-213517] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:00:22.533 [DEBUG] [Thread-213517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:00:22.534 [DEBUG] [Thread-213517] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:00:22.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:00:22.535 [DEBUG] [Thread-213517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:00:22.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:00:22.537 [DEBUG] [Thread-213517] [transport.py] [_log()] userauth is OK
2026-02-16T00:00:22.537 [DEBUG] [Thread-213517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:00:22.537 [DEBUG] [Thread-213517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:00:22.537 [DEBUG] [Thread-213517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:00:22.537 [DEBUG] [Thread-213517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:00:22.562 [INFO] [Thread-213517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:00:22.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:00:25.471 [DEBUG] [Thread-213517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:00:25.471 [DEBUG] [Thread-213517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:00:25.471 [DEBUG] [Thread-213517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:00:25.512 [DEBUG] [Thread-213517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:00:25.512 [DEBUG] [Thread-213517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:00:25.514 [DEBUG] [Thread-213517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:00:25.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:00:25.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:00:25.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:00:25.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:00:25.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:00:25.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:00:25.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.916074 -999.00  +13.90  18.86     55   +5.00 1 1 1 1 1     0    0 8.43 -28.95 ZNESW 22.7 18.9 143.2 23.4 14.3 -24.0 14.2 -23.1 14.0 -22.0 14.4 -23.1
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.916074
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:00:25.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:00:04', tmtdew=10.29, humidity=49.82, cloud=0.0, wind=24.65, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:00:04', seeing=1.2, atlas_timestamp='2026-02-15T21:59:08.794', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:58:00')
2026-02-16T00:00:25.672 [DEBUG] [Thread-213517] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:00:25.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:00:25.756 [DEBUG] [Thread-213520] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-16T00:00:25.756 [DEBUG] [Thread-213520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:00:25.771 [DEBUG] [Thread-213520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:00:25.771 [INFO] [Thread-213520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] client lang: <none>
2026-02-16T00:00:25.778 [DEBUG] [Thread-213520] [transport.py] [_log()] server lang: <none>
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] kex follows: False
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] Compression: none
2026-02-16T00:00:25.779 [DEBUG] [Thread-213520] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:00:25.834 [DEBUG] [Thread-213520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:00:25.835 [DEBUG] [Thread-213520] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:00:25.835 [DEBUG] [Thread-213520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:00:25.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:00:25.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:00:25.891 [DEBUG] [Thread-213520] [transport.py] [_log()] userauth is OK
2026-02-16T00:00:25.891 [DEBUG] [Thread-213520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:00:25.891 [DEBUG] [Thread-213520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:00:25.891 [DEBUG] [Thread-213520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:00:25.891 [DEBUG] [Thread-213520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:00:25.908 [INFO] [Thread-213520] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:00:25.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:00:25.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:00:26.721 [DEBUG] [Thread-213520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:00:26.721 [DEBUG] [Thread-213520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:00:26.769 [DEBUG] [Thread-213520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:00:26.769 [DEBUG] [Thread-213520] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:00:26.779 [DEBUG] [Thread-213520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:00:26.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:00:26.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:00:26.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:00:26.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:00:26.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:00:26.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:00:26.815 [DEBUG] [Thread-213520] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:00:28.305 [DEBUG] [Thread-213522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:36.680 [DEBUG] [Thread-213523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:42.325 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:43.356 [DEBUG] [Thread-213524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:56.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:00:56.834 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:00:56.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:00:58.391 [DEBUG] [Thread-213525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:00:58.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 0, 40), 10.36, 49.73, 0.0, 29.39, 14.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:00:58.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:00:40
2026-02-16T00:00:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:00:59.367 [DEBUG] [Thread-213526] [transport.py] [_log()] starting thread (client mode): 0xa57b2e60
2026-02-16T00:00:59.367 [DEBUG] [Thread-213526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:00:59.387 [DEBUG] [Thread-213526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:00:59.387 [INFO] [Thread-213526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:00:59.390 [DEBUG] [Thread-213526] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:00:59.390 [DEBUG] [Thread-213526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:00:59.390 [DEBUG] [Thread-213526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:00:59.390 [DEBUG] [Thread-213526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:00:59.390 [DEBUG] [Thread-213526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] client lang: <none>
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] server lang: <none>
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] kex follows: False
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] Compression: none
2026-02-16T00:00:59.391 [DEBUG] [Thread-213526] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:00:59.405 [DEBUG] [Thread-213526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:00:59.405 [DEBUG] [Thread-213526] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:00:59.405 [DEBUG] [Thread-213526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:00:59.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:00:59.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:00:59.406 [DEBUG] [Thread-213526] [transport.py] [_log()] userauth is OK
2026-02-16T00:00:59.406 [DEBUG] [Thread-213526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:00:59.406 [DEBUG] [Thread-213526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:00:59.406 [DEBUG] [Thread-213526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:00:59.406 [DEBUG] [Thread-213526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:00:59.415 [INFO] [Thread-213526] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:00:59.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:01:00.040 [DEBUG] [Thread-213526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:01:00.040 [DEBUG] [Thread-213526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:01:00.040 [DEBUG] [Thread-213526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:01:00.081 [DEBUG] [Thread-213526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:01:00.081 [DEBUG] [Thread-213526] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:01:00.084 [DEBUG] [Thread-213526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:01:00.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:01:00.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:01:00.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:01:00.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:01:00.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:01:00.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:01:00.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:01:00.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:01:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:01:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.916421 -999.00  +14.00  22.92     55   +5.10 1 1 1 1 1     0    0 8.39 -27.75 ZNESW 20.5 22.9 143.6 25.2 14.3 -24.0 14.3 -23.0 14.1 -21.9 14.3 -23.2
2026-02-16T00:01:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:01:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:01:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.916421
2026-02-16T00:01:00.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:01:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:01:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:01:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:01:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:01:00.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:00:40', tmtdew=10.36, humidity=49.73, cloud=0.0, wind=29.39, temperature=14.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:00:41', seeing=1.46, atlas_timestamp='2026-02-15T21:59:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:58:00')
2026-02-16T00:01:00.110 [DEBUG] [Thread-213526] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:01:00.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:01:00.209 [DEBUG] [Thread-213529] [transport.py] [_log()] starting thread (client mode): 0xa81d4ac0
2026-02-16T00:01:00.209 [DEBUG] [Thread-213529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:01:00.222 [DEBUG] [Thread-213529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:01:00.223 [INFO] [Thread-213529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:01:00.230 [DEBUG] [Thread-213529] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] client lang: <none>
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] server lang: <none>
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] kex follows: False
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:01:00.231 [DEBUG] [Thread-213529] [transport.py] [_log()] Compression: none
2026-02-16T00:01:00.232 [DEBUG] [Thread-213529] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:01:00.294 [DEBUG] [Thread-213529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:01:00.296 [DEBUG] [Thread-213529] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:01:00.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:01:00.298 [DEBUG] [Thread-213529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:01:00.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:01:00.351 [DEBUG] [Thread-213529] [transport.py] [_log()] userauth is OK
2026-02-16T00:01:00.351 [DEBUG] [Thread-213529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:01:00.351 [DEBUG] [Thread-213529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:01:00.351 [DEBUG] [Thread-213529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:01:00.351 [DEBUG] [Thread-213529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:01:00.368 [INFO] [Thread-213529] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:01:00.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:01:00.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:01:01.177 [DEBUG] [Thread-213529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:01:01.177 [DEBUG] [Thread-213529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:01:01.225 [DEBUG] [Thread-213529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:01:01.225 [DEBUG] [Thread-213529] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:01:01.235 [DEBUG] [Thread-213529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:01:01.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:01:01.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:01:01.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:01:01.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:01:01.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:01:01.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:01:01.272 [DEBUG] [Thread-213529] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:01:10.743 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:01:10.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:01:13.425 [DEBUG] [Thread-213531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:01:28.472 [DEBUG] [Thread-213532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:01:31.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:01:31.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:01:31.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:01:33.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 1, 16), 10.23, 50.35, 0.0, 23.27, 14.09, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:01:33.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:01:16
2026-02-16T00:01:33.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:01:34.126 [DEBUG] [Thread-213533] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1f0
2026-02-16T00:01:34.126 [DEBUG] [Thread-213533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:01:34.146 [DEBUG] [Thread-213533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:01:34.146 [INFO] [Thread-213533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] client lang: <none>
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] server lang: <none>
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] kex follows: False
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:01:34.149 [DEBUG] [Thread-213533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:01:34.150 [DEBUG] [Thread-213533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:01:34.150 [DEBUG] [Thread-213533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:01:34.150 [DEBUG] [Thread-213533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:01:34.150 [DEBUG] [Thread-213533] [transport.py] [_log()] Compression: none
2026-02-16T00:01:34.150 [DEBUG] [Thread-213533] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:01:34.165 [DEBUG] [Thread-213533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:01:34.166 [DEBUG] [Thread-213533] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:01:34.166 [DEBUG] [Thread-213533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:01:34.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:01:34.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:01:34.168 [DEBUG] [Thread-213533] [transport.py] [_log()] userauth is OK
2026-02-16T00:01:34.168 [DEBUG] [Thread-213533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:01:34.168 [DEBUG] [Thread-213533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:01:34.168 [DEBUG] [Thread-213533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:01:34.168 [DEBUG] [Thread-213533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:01:34.182 [INFO] [Thread-213533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:01:34.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:01:34.840 [DEBUG] [Thread-213533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:01:34.840 [DEBUG] [Thread-213533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:01:34.841 [DEBUG] [Thread-213533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:01:34.881 [DEBUG] [Thread-213533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:01:34.881 [DEBUG] [Thread-213533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:01:34.884 [DEBUG] [Thread-213533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:01:34.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:01:34.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:01:34.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:01:34.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:01:34.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:01:34.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:01:34.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:01:34.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:01:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:01:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.917115 -999.00  +14.00  18.44     55   +5.10 1 1 1 1 1     0    0 8.26 -29.36 ZNESW 20.1 18.4 142.4 25.4 14.3 -24.1 14.2 -23.1 14.1 -22.0 14.3 -23.1
2026-02-16T00:01:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:01:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:01:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.917115
2026-02-16T00:01:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:01:34.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:01:34.906 [DEBUG] [Thread-213533] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:01:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:01:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:01:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:01:34.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:01:16', tmtdew=10.23, humidity=50.35, cloud=0.0, wind=23.27, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:01:16', seeing=1.07, atlas_timestamp='2026-02-15T22:00:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:58:00')
2026-02-16T00:01:34.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:01:35.004 [DEBUG] [Thread-213536] [transport.py] [_log()] starting thread (client mode): 0xa2d01510
2026-02-16T00:01:35.004 [DEBUG] [Thread-213536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:01:35.018 [DEBUG] [Thread-213536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:01:35.018 [INFO] [Thread-213536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:01:35.026 [DEBUG] [Thread-213536] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:01:35.026 [DEBUG] [Thread-213536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:01:35.026 [DEBUG] [Thread-213536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:01:35.026 [DEBUG] [Thread-213536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:01:35.026 [DEBUG] [Thread-213536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:01:35.026 [DEBUG] [Thread-213536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] client lang: <none>
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] server lang: <none>
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] kex follows: False
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] Compression: none
2026-02-16T00:01:35.027 [DEBUG] [Thread-213536] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:01:35.087 [DEBUG] [Thread-213536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:01:35.087 [DEBUG] [Thread-213536] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:01:35.088 [DEBUG] [Thread-213536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:01:35.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:01:35.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:01:35.150 [DEBUG] [Thread-213536] [transport.py] [_log()] userauth is OK
2026-02-16T00:01:35.150 [DEBUG] [Thread-213536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:01:35.150 [DEBUG] [Thread-213536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:01:35.150 [DEBUG] [Thread-213536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:01:35.150 [DEBUG] [Thread-213536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:01:35.174 [INFO] [Thread-213536] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:01:35.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:01:35.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:01:35.984 [DEBUG] [Thread-213536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:01:35.984 [DEBUG] [Thread-213536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:01:36.032 [DEBUG] [Thread-213536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:01:36.032 [DEBUG] [Thread-213536] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:01:36.041 [DEBUG] [Thread-213536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:01:36.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:01:36.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:01:36.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:01:36.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:01:36.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:01:36.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:01:36.075 [DEBUG] [Thread-213536] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:01:36.752 [DEBUG] [Thread-213538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:01:43.509 [DEBUG] [Thread-213539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:01:58.571 [DEBUG] [Thread-213540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:06.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:02:06.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:02:06.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:02:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 1, 51), 10.23, 50.35, 0.0, 25.07, 14.13, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:02:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:01:51
2026-02-16T00:02:08.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:02:08.495 [DEBUG] [Thread-213541] [transport.py] [_log()] starting thread (client mode): 0xa57b3a00
2026-02-16T00:02:08.495 [DEBUG] [Thread-213541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:02:08.517 [DEBUG] [Thread-213541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:02:08.517 [INFO] [Thread-213541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] client lang: <none>
2026-02-16T00:02:08.519 [DEBUG] [Thread-213541] [transport.py] [_log()] server lang: <none>
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] kex follows: False
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] Compression: none
2026-02-16T00:02:08.520 [DEBUG] [Thread-213541] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:02:08.539 [DEBUG] [Thread-213541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:02:08.539 [DEBUG] [Thread-213541] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:02:08.540 [DEBUG] [Thread-213541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:02:08.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:02:08.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:02:08.542 [DEBUG] [Thread-213541] [transport.py] [_log()] userauth is OK
2026-02-16T00:02:08.542 [DEBUG] [Thread-213541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:02:08.542 [DEBUG] [Thread-213541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:02:08.542 [DEBUG] [Thread-213541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:02:08.542 [DEBUG] [Thread-213541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:02:08.561 [INFO] [Thread-213541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:02:08.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:02:09.187 [DEBUG] [Thread-213541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:02:09.187 [DEBUG] [Thread-213541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:02:09.188 [DEBUG] [Thread-213541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:02:09.228 [DEBUG] [Thread-213541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:02:09.228 [DEBUG] [Thread-213541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:02:09.231 [DEBUG] [Thread-213541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:02:09.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:02:09.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:02:09.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:02:09.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:02:09.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:02:09.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:02:09.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:02:09.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:02:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:02:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.917463 -999.00  +14.00  22.62     55   +5.10 1 1 1 1 1     0    0 8.31 -29.53 ZNESW 20.0 22.6 141.6 27.7 14.3 -24.1 14.3 -23.0 14.1 -21.9 14.3 -23.2
2026-02-16T00:02:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:02:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:02:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.917463
2026-02-16T00:02:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:02:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:02:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:02:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:02:09.256 [DEBUG] [Thread-213541] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:02:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:02:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:01:51', tmtdew=10.23, humidity=50.35, cloud=0.0, wind=25.07, temperature=14.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:01:51', seeing=1.21, atlas_timestamp='2026-02-15T22:01:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:58:00')
2026-02-16T00:02:09.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:02:09.351 [DEBUG] [Thread-213544] [transport.py] [_log()] starting thread (client mode): 0xa2d3ceb0
2026-02-16T00:02:09.351 [DEBUG] [Thread-213544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:02:09.365 [DEBUG] [Thread-213544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:02:09.365 [INFO] [Thread-213544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:02:09.373 [DEBUG] [Thread-213544] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:02:09.374 [DEBUG] [Thread-213544] [transport.py] [_log()] client lang: <none>
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] server lang: <none>
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] kex follows: False
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:02:09.375 [DEBUG] [Thread-213544] [transport.py] [_log()] Compression: none
2026-02-16T00:02:09.376 [DEBUG] [Thread-213544] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:02:09.433 [DEBUG] [Thread-213544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:02:09.434 [DEBUG] [Thread-213544] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:02:09.435 [DEBUG] [Thread-213544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:02:09.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:02:09.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:02:09.497 [DEBUG] [Thread-213544] [transport.py] [_log()] userauth is OK
2026-02-16T00:02:09.498 [DEBUG] [Thread-213544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:02:09.498 [DEBUG] [Thread-213544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:02:09.498 [DEBUG] [Thread-213544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:02:09.498 [DEBUG] [Thread-213544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:02:09.522 [INFO] [Thread-213544] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:02:09.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:02:09.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:02:10.380 [DEBUG] [Thread-213544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:02:10.381 [DEBUG] [Thread-213544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:02:10.428 [DEBUG] [Thread-213544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:02:10.428 [DEBUG] [Thread-213544] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:02:10.438 [DEBUG] [Thread-213544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:02:10.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:02:10.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:02:10.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:02:10.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:02:10.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:02:10.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:02:10.480 [DEBUG] [Thread-213544] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:02:10.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:10.946 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:13.609 [DEBUG] [Thread-213546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:15.934 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:28.664 [DEBUG] [Thread-213547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:36.820 [DEBUG] [Thread-213548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:02:40.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:02:40.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
2026-02-16T00:02:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 2, 26), 10.21, 50.43, 0.0, 25.34, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:02:42.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:02:26
2026-02-16T00:02:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:02:43.138 [DEBUG] [Thread-213549] [transport.py] [_log()] starting thread (client mode): 0xa2d00be0
2026-02-16T00:02:43.138 [DEBUG] [Thread-213549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:02:43.159 [DEBUG] [Thread-213549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:02:43.159 [INFO] [Thread-213549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:02:43.162 [DEBUG] [Thread-213549] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:02:43.162 [DEBUG] [Thread-213549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:02:43.162 [DEBUG] [Thread-213549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] client lang: <none>
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] server lang: <none>
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] kex follows: False
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:02:43.163 [DEBUG] [Thread-213549] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:02:43.164 [DEBUG] [Thread-213549] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:02:43.164 [DEBUG] [Thread-213549] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:02:43.164 [DEBUG] [Thread-213549] [transport.py] [_log()] Compression: none
2026-02-16T00:02:43.164 [DEBUG] [Thread-213549] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:02:43.180 [DEBUG] [Thread-213549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:02:43.181 [DEBUG] [Thread-213549] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:02:43.181 [DEBUG] [Thread-213549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:02:43.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:02:43.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:02:43.224 [DEBUG] [Thread-213549] [transport.py] [_log()] userauth is OK
2026-02-16T00:02:43.225 [DEBUG] [Thread-213549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:02:43.225 [DEBUG] [Thread-213549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:02:43.225 [DEBUG] [Thread-213549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:02:43.225 [DEBUG] [Thread-213549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:02:43.257 [INFO] [Thread-213549] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:02:43.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:02:43.700 [DEBUG] [Thread-213551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:02:43.850 [DEBUG] [Thread-213549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:02:43.850 [DEBUG] [Thread-213549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:02:43.850 [DEBUG] [Thread-213549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:02:43.891 [DEBUG] [Thread-213549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:02:43.891 [DEBUG] [Thread-213549] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:02:43.895 [DEBUG] [Thread-213549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:02:43.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:02:43.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:02:43.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:02:43.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:02:43.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:02:43.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:02:43.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:02:43.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:02:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:02:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.917810 -999.00  +14.00  19.89     55   +5.10 1 1 1 1 1     0    0 8.08 -29.44 ZNESW 20.1 19.9 145.6 23.4 14.3 -24.0 -999.0 -999.0 14.0 -22.0 14.3 -23.4
2026-02-16T00:02:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:02:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:02:43.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.917810
2026-02-16T00:02:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:02:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:02:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:02:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:02:43.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:02:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:02:26', tmtdew=10.21, humidity=50.43, cloud=0.0, wind=25.34, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:02:27', seeing=1.67, atlas_timestamp='2026-02-15T22:01:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.06074999999999875, -0.042749999999999844, -0.02050000000000196, 0.01699999999999946, 0.0022500000000000853, -0.02400000000000091, -0.016750000000000043, 0.018499999999999517, -0.004999999999999005, -0.07474999999999987, -0.0030000000000001137, 0.0649999999999995, 0.02024999999999899, 0.007999999999999119, -0.0030000000000001137, 0.05824999999999925, 0.05850000000000044, 0.00849999999999973, -0.016250000000001208, 0.0045000000000001705, -0.011250000000000426, -0.00274999999999892, 0.01624999999999943, 0.045999999999999375, 0.002000000000000668, -0.01425000000000054, -0.046499999999999986, -0.006999999999999673, 0.02400000000000091, -0.0034999999999989484, 0.05900000000000105, 0.011749999999999261], zp_timestamp='2026-02-15T21:58:00')
2026-02-16T00:02:43.921 [DEBUG] [Thread-213549] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:02:44.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:02:44.017 [DEBUG] [Thread-213553] [transport.py] [_log()] starting thread (client mode): 0xa57d77c0
2026-02-16T00:02:44.018 [DEBUG] [Thread-213553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:02:44.032 [DEBUG] [Thread-213553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:02:44.032 [INFO] [Thread-213553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:02:44.039 [DEBUG] [Thread-213553] [transport.py] [_log()] client lang: <none>
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] server lang: <none>
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] kex follows: False
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] Compression: none
2026-02-16T00:02:44.040 [DEBUG] [Thread-213553] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:02:44.097 [DEBUG] [Thread-213553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:02:44.098 [DEBUG] [Thread-213553] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:02:44.098 [DEBUG] [Thread-213553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:02:44.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:02:44.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:02:44.155 [DEBUG] [Thread-213553] [transport.py] [_log()] userauth is OK
2026-02-16T00:02:44.156 [DEBUG] [Thread-213553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:02:44.156 [DEBUG] [Thread-213553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:02:44.156 [DEBUG] [Thread-213553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:02:44.156 [DEBUG] [Thread-213553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:02:44.175 [INFO] [Thread-213553] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:02:44.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:02:44.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:02:44.988 [DEBUG] [Thread-213553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:02:44.988 [DEBUG] [Thread-213553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:02:45.037 [DEBUG] [Thread-213553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:02:45.038 [DEBUG] [Thread-213553] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:02:45.046 [DEBUG] [Thread-213553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:02:45.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:02: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-02-16T00:02:45.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:02:45.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:02:45.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:02:45.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:02:45.078 [DEBUG] [Thread-213553] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:02:58.735 [DEBUG] [Thread-213555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:11.152 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:11.153 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:13.784 [DEBUG] [Thread-213556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:15.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:03:15.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:03:15.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:03:16.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 3, 2), 10.23, 50.35, 0.0, 27.15, 14.11, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:03:16.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:03:02
2026-02-16T00:03:17.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:03:17.514 [DEBUG] [Thread-213557] [transport.py] [_log()] starting thread (client mode): 0xa2d7b880
2026-02-16T00:03:17.514 [DEBUG] [Thread-213557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:03:17.534 [DEBUG] [Thread-213557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:03:17.534 [INFO] [Thread-213557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] client lang: <none>
2026-02-16T00:03:17.537 [DEBUG] [Thread-213557] [transport.py] [_log()] server lang: <none>
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] kex follows: False
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] Compression: none
2026-02-16T00:03:17.538 [DEBUG] [Thread-213557] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:03:17.556 [DEBUG] [Thread-213557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:03:17.557 [DEBUG] [Thread-213557] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:03:17.557 [DEBUG] [Thread-213557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:03:17.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:03:17.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:03:17.560 [DEBUG] [Thread-213557] [transport.py] [_log()] userauth is OK
2026-02-16T00:03:17.560 [DEBUG] [Thread-213557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:03:17.560 [DEBUG] [Thread-213557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:03:17.560 [DEBUG] [Thread-213557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:03:17.560 [DEBUG] [Thread-213557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:03:17.572 [INFO] [Thread-213557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:03:17.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:03:18.360 [DEBUG] [Thread-213557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:03:18.360 [DEBUG] [Thread-213557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:03:18.361 [DEBUG] [Thread-213557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:03:18.401 [DEBUG] [Thread-213557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:03:18.401 [DEBUG] [Thread-213557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:03:18.404 [DEBUG] [Thread-213557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:03:18.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:03:18.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:03:18.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:03:18.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:03:18.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:03:18.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:03:18.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:03:18.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:03:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:03:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.918504 -999.00  +13.90  19.20     55   +5.10 1 1 1 1 1     0    0 8.18 -30.72 ZNESW 17.7 19.2 141.4 25.1 14.3 -24.3 14.2 -23.2 14.0 -21.9 14.3 -23.2
2026-02-16T00:03:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:03:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:03:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.918504
2026-02-16T00:03:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:03:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:03:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:03:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:03:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:03:18.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:03:02', tmtdew=10.23, humidity=50.35, cloud=0.0, wind=27.15, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:03:02', seeing=1.48, atlas_timestamp='2026-02-15T22:02:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.025249999999999773, -0.039250000000000895, -0.029500000000000526, 0.010500000000000398, 0.005250000000000199, -0.014499999999999957, 0.00975000000000037, 0.018499999999999517, 0.0235000000000003, -0.06574999999999953, -0.0039999999999995595, 0.06099999999999994, 0.03625000000000078, 0.032999999999999474, -0.010999999999999233, 0.0442499999999999, 0.046499999999999986, 0.023999999999999133, -0.014750000000001151, 0.007999999999999119, -0.011750000000001037, 0.017250000000000654, 0.04574999999999996, 0.02499999999999858, -0.007500000000000284, -0.013249999999999318, 0.012500000000001066, 0.07600000000000051, 0.0030000000000001137, 0.017000000000001236, 0.014000000000001123, 0.03074999999999939], zp_timestamp='2026-02-15T22:02:00')
2026-02-16T00:03:18.425 [DEBUG] [Thread-213557] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:03:18.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:03:18.520 [DEBUG] [Thread-213560] [transport.py] [_log()] starting thread (client mode): 0xa2d6ca00
2026-02-16T00:03:18.520 [DEBUG] [Thread-213560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:03:18.535 [DEBUG] [Thread-213560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:03:18.535 [INFO] [Thread-213560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:03:18.545 [DEBUG] [Thread-213560] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:03:18.545 [DEBUG] [Thread-213560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:03:18.545 [DEBUG] [Thread-213560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] client lang: <none>
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] server lang: <none>
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] kex follows: False
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] Compression: none
2026-02-16T00:03:18.546 [DEBUG] [Thread-213560] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:03:18.604 [DEBUG] [Thread-213560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:03:18.605 [DEBUG] [Thread-213560] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:03:18.605 [DEBUG] [Thread-213560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:03:18.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:03:18.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:03:18.665 [DEBUG] [Thread-213560] [transport.py] [_log()] userauth is OK
2026-02-16T00:03:18.665 [DEBUG] [Thread-213560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:03:18.665 [DEBUG] [Thread-213560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:03:18.666 [DEBUG] [Thread-213560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:03:18.666 [DEBUG] [Thread-213560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:03:18.684 [INFO] [Thread-213560] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:03:18.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:03:18.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:03:19.477 [DEBUG] [Thread-213560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:03:19.477 [DEBUG] [Thread-213560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:03:19.525 [DEBUG] [Thread-213560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:03:19.525 [DEBUG] [Thread-213560] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:03:19.535 [DEBUG] [Thread-213560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:03:19.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:03:19.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:03:19.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:03:19.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:03:19.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:03:19.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:03:19.570 [DEBUG] [Thread-213560] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:03:28.823 [DEBUG] [Thread-213562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:36.885 [DEBUG] [Thread-213563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:43.888 [DEBUG] [Thread-213564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:49.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:03:49.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:03:49.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:03:49.610 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:03:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 3, 37), 10.38, 49.63, 0.0, 26.29, 14.35, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:03:51.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:03:37
2026-02-16T00:03:51.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:03:51.954 [DEBUG] [Thread-213565] [transport.py] [_log()] starting thread (client mode): 0xa2d7abf0
2026-02-16T00:03:51.955 [DEBUG] [Thread-213565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:03:51.976 [DEBUG] [Thread-213565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:03:51.976 [INFO] [Thread-213565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:03:51.980 [DEBUG] [Thread-213565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] client lang: <none>
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] server lang: <none>
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] kex follows: False
2026-02-16T00:03:51.981 [DEBUG] [Thread-213565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:03:51.982 [DEBUG] [Thread-213565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:03:51.982 [DEBUG] [Thread-213565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:03:51.982 [DEBUG] [Thread-213565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:03:51.982 [DEBUG] [Thread-213565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:03:51.982 [DEBUG] [Thread-213565] [transport.py] [_log()] Compression: none
2026-02-16T00:03:51.982 [DEBUG] [Thread-213565] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:03:52.002 [DEBUG] [Thread-213565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:03:52.002 [DEBUG] [Thread-213565] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:03:52.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:03:52.003 [DEBUG] [Thread-213565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:03:52.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:03:52.005 [DEBUG] [Thread-213565] [transport.py] [_log()] userauth is OK
2026-02-16T00:03:52.006 [DEBUG] [Thread-213565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:03:52.006 [DEBUG] [Thread-213565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:03:52.006 [DEBUG] [Thread-213565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:03:52.006 [DEBUG] [Thread-213565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:03:52.031 [INFO] [Thread-213565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:03:52.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:03:52.681 [DEBUG] [Thread-213565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:03:52.681 [DEBUG] [Thread-213565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:03:52.681 [DEBUG] [Thread-213565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:03:52.722 [DEBUG] [Thread-213565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:03:52.722 [DEBUG] [Thread-213565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:03:52.725 [DEBUG] [Thread-213565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:03:52.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:03:52.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:03:52.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:03:52.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:03:52.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:03:52.747 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:03:52.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:03:52.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:03:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:03:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.918851 -999.00  +14.00  22.87     55   +5.10 1 1 1 1 1     0    0 8.18 -31.18 ZNESW 20.7 22.9 138.6 28.3 14.3 -24.3 14.2 -23.0 14.0 -21.9 14.3 -23.2
2026-02-16T00:03:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:03:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:03:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.918851
2026-02-16T00:03:52.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:03:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:03:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:03:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:03:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:03:52.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:03:37', tmtdew=10.38, humidity=49.63, cloud=0.0, wind=26.29, temperature=14.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:03:37', seeing=1.41, atlas_timestamp='2026-02-15T22:03:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.025249999999999773, -0.039250000000000895, -0.029500000000000526, 0.010500000000000398, 0.005250000000000199, -0.014499999999999957, 0.00975000000000037, 0.018499999999999517, 0.0235000000000003, -0.06574999999999953, -0.0039999999999995595, 0.06099999999999994, 0.03625000000000078, 0.032999999999999474, -0.010999999999999233, 0.0442499999999999, 0.046499999999999986, 0.023999999999999133, -0.014750000000001151, 0.007999999999999119, -0.011750000000001037, 0.017250000000000654, 0.04574999999999996, 0.02499999999999858, -0.007500000000000284, -0.013249999999999318, 0.012500000000001066, 0.07600000000000051, 0.0030000000000001137, 0.017000000000001236, 0.014000000000001123, 0.03074999999999939], zp_timestamp='2026-02-15T22:02:00')
2026-02-16T00:03:52.749 [DEBUG] [Thread-213565] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:03:52.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:03:52.845 [DEBUG] [Thread-213568] [transport.py] [_log()] starting thread (client mode): 0xa2d57310
2026-02-16T00:03:52.845 [DEBUG] [Thread-213568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:03:52.860 [DEBUG] [Thread-213568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:03:52.860 [INFO] [Thread-213568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] client lang: <none>
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] server lang: <none>
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] kex follows: False
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:03:52.867 [DEBUG] [Thread-213568] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:03:52.868 [DEBUG] [Thread-213568] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:03:52.868 [DEBUG] [Thread-213568] [transport.py] [_log()] Compression: none
2026-02-16T00:03:52.868 [DEBUG] [Thread-213568] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:03:52.925 [DEBUG] [Thread-213568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:03:52.925 [DEBUG] [Thread-213568] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:03:52.926 [DEBUG] [Thread-213568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:03:52.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:03:52.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:03:52.982 [DEBUG] [Thread-213568] [transport.py] [_log()] userauth is OK
2026-02-16T00:03:52.982 [DEBUG] [Thread-213568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:03:52.982 [DEBUG] [Thread-213568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:03:52.982 [DEBUG] [Thread-213568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:03:52.982 [DEBUG] [Thread-213568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:03:52.996 [INFO] [Thread-213568] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:03:52.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:03:52.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:03:53.822 [DEBUG] [Thread-213568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:03:53.822 [DEBUG] [Thread-213568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:03:53.870 [DEBUG] [Thread-213568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:03:53.870 [DEBUG] [Thread-213568] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:03:53.880 [DEBUG] [Thread-213568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:03:53.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:03:53.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:03:53.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:03:53.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:03:53.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:03:53.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:03:53.917 [DEBUG] [Thread-213568] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:03:58.921 [DEBUG] [Thread-213570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:11.354 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:11.355 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:13.985 [DEBUG] [Thread-213571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:23.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:04:23.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:04:23.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:04:25.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 4, 12), 10.18, 50.33, 0.0, 23.13, 14.03, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:04:25.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:04:12
2026-02-16T00:04:26.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:04:26.246 [DEBUG] [Thread-213572] [transport.py] [_log()] starting thread (client mode): 0xa57b25c0
2026-02-16T00:04:26.246 [DEBUG] [Thread-213572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:04:26.267 [DEBUG] [Thread-213572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:04:26.267 [INFO] [Thread-213572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:04:26.268 [DEBUG] [Thread-213572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] client lang: <none>
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] server lang: <none>
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] kex follows: False
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] Compression: none
2026-02-16T00:04:26.269 [DEBUG] [Thread-213572] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:04:26.276 [DEBUG] [Thread-213572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:04:26.276 [DEBUG] [Thread-213572] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:04:26.276 [DEBUG] [Thread-213572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:04:26.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:04:26.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:04:26.277 [DEBUG] [Thread-213572] [transport.py] [_log()] userauth is OK
2026-02-16T00:04:26.277 [DEBUG] [Thread-213572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:04:26.277 [DEBUG] [Thread-213572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:04:26.277 [DEBUG] [Thread-213572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:04:26.277 [DEBUG] [Thread-213572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:04:26.287 [INFO] [Thread-213572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:04:26.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:04:27.018 [DEBUG] [Thread-213572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:04:27.018 [DEBUG] [Thread-213572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:04:27.018 [DEBUG] [Thread-213572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:04:27.058 [DEBUG] [Thread-213572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:04:27.058 [DEBUG] [Thread-213572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:04:27.062 [DEBUG] [Thread-213572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:04:27.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:04:27.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:04:27.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:04:27.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:04:27.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:04:27.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:04:27.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:04:27.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:04:27.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:04:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.919198 -999.00  +14.00  18.21     55   +5.20 1 1 1 1 1     0    0 8.24 -28.99 ZNESW 20.7 18.2 145.8 23.9 14.3 -24.0 14.2 -23.1 14.0 -22.0 14.3 -23.3
2026-02-16T00:04:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:04:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:04:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.919198
2026-02-16T00:04:27.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:04:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:04:12', tmtdew=10.18, humidity=50.33, cloud=0.0, wind=23.13, temperature=14.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:04:12', seeing=1.41, atlas_timestamp='2026-02-15T22:03:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.025249999999999773, -0.039250000000000895, -0.029500000000000526, 0.010500000000000398, 0.005250000000000199, -0.014499999999999957, 0.00975000000000037, 0.018499999999999517, 0.0235000000000003, -0.06574999999999953, -0.0039999999999995595, 0.06099999999999994, 0.03625000000000078, 0.032999999999999474, -0.010999999999999233, 0.0442499999999999, 0.046499999999999986, 0.023999999999999133, -0.014750000000001151, 0.007999999999999119, -0.011750000000001037, 0.017250000000000654, 0.04574999999999996, 0.02499999999999858, -0.007500000000000284, -0.013249999999999318, 0.012500000000001066, 0.07600000000000051, 0.0030000000000001137, 0.017000000000001236, 0.014000000000001123, 0.03074999999999939], zp_timestamp='2026-02-15T22:02:00')
2026-02-16T00:04:27.092 [DEBUG] [Thread-213572] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:04:27.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:04:27.187 [DEBUG] [Thread-213575] [transport.py] [_log()] starting thread (client mode): 0xa2d3c640
2026-02-16T00:04:27.188 [DEBUG] [Thread-213575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:04:27.203 [DEBUG] [Thread-213575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:04:27.204 [INFO] [Thread-213575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:04:27.212 [DEBUG] [Thread-213575] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:04:27.212 [DEBUG] [Thread-213575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] client lang: <none>
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] server lang: <none>
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] kex follows: False
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:04:27.213 [DEBUG] [Thread-213575] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:04:27.214 [DEBUG] [Thread-213575] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:04:27.214 [DEBUG] [Thread-213575] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:04:27.214 [DEBUG] [Thread-213575] [transport.py] [_log()] Compression: none
2026-02-16T00:04:27.214 [DEBUG] [Thread-213575] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:04:27.273 [DEBUG] [Thread-213575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:04:27.273 [DEBUG] [Thread-213575] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:04:27.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:04:27.275 [DEBUG] [Thread-213575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:04:27.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:04:27.331 [DEBUG] [Thread-213575] [transport.py] [_log()] userauth is OK
2026-02-16T00:04:27.332 [DEBUG] [Thread-213575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:04:27.332 [DEBUG] [Thread-213575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:04:27.332 [DEBUG] [Thread-213575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:04:27.332 [DEBUG] [Thread-213575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:04:27.351 [INFO] [Thread-213575] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:04:27.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:04:27.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:04:28.190 [DEBUG] [Thread-213575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:04:28.190 [DEBUG] [Thread-213575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:04:28.239 [DEBUG] [Thread-213575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:04:28.239 [DEBUG] [Thread-213575] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:04:28.249 [DEBUG] [Thread-213575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:04:28.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:04:28.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:04:28.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:04:28.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:04:28.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:04:28.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:04:28.285 [DEBUG] [Thread-213575] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:04:29.023 [DEBUG] [Thread-213577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:36.946 [DEBUG] [Thread-213578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:44.078 [DEBUG] [Thread-213579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:04:58.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:04:58.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:04:58.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:04:59.114 [DEBUG] [Thread-213580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:00.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 4, 47), 10.06, 50.58, 0.0, 24.58, 14.04, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:05:00.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:04:47
2026-02-16T00:05:01.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:05:01.232 [DEBUG] [Thread-213581] [transport.py] [_log()] starting thread (client mode): 0xa2d56620
2026-02-16T00:05:01.232 [DEBUG] [Thread-213581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:05:01.251 [DEBUG] [Thread-213581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:05:01.251 [INFO] [Thread-213581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] client lang: <none>
2026-02-16T00:05:01.254 [DEBUG] [Thread-213581] [transport.py] [_log()] server lang: <none>
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] kex follows: False
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] Compression: none
2026-02-16T00:05:01.255 [DEBUG] [Thread-213581] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:05:01.271 [DEBUG] [Thread-213581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:05:01.271 [DEBUG] [Thread-213581] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:05:01.271 [DEBUG] [Thread-213581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:05:01.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:05:01.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:05:01.272 [DEBUG] [Thread-213581] [transport.py] [_log()] userauth is OK
2026-02-16T00:05:01.272 [DEBUG] [Thread-213581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:05:01.272 [DEBUG] [Thread-213581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:05:01.272 [DEBUG] [Thread-213581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:05:01.272 [DEBUG] [Thread-213581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:05:01.281 [INFO] [Thread-213581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:05:01.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:05:01.892 [DEBUG] [Thread-213581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:05:01.892 [DEBUG] [Thread-213581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:05:01.893 [DEBUG] [Thread-213581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:05:01.933 [DEBUG] [Thread-213581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:05:01.934 [DEBUG] [Thread-213581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:05:01.937 [DEBUG] [Thread-213581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:05:01.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:05:01.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:05:01.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:05:01.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:05:01.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:05:01.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:05:01.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:05:01.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:05:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:05:01.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.919546 -999.00  +14.00  18.07     55   +5.20 1 1 1 1 1     0    0 8.08 -30.08 ZNESW 15.2 18.1 144.2 26.5 14.3 -24.2 14.2 -23.1 13.9 -22.1 14.3 -23.3
2026-02-16T00:05:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:05:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:05:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.919546
2026-02-16T00:05:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:05:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:05:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:05:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:05:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:05:01.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:04:47', tmtdew=10.06, humidity=50.58, cloud=0.0, wind=24.58, temperature=14.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:04:48', seeing=1.45, atlas_timestamp='2026-02-15T22:04:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.025249999999999773, -0.039250000000000895, -0.029500000000000526, 0.010500000000000398, 0.005250000000000199, -0.014499999999999957, 0.00975000000000037, 0.018499999999999517, 0.0235000000000003, -0.06574999999999953, -0.0039999999999995595, 0.06099999999999994, 0.03625000000000078, 0.032999999999999474, -0.010999999999999233, 0.0442499999999999, 0.046499999999999986, 0.023999999999999133, -0.014750000000001151, 0.007999999999999119, -0.011750000000001037, 0.017250000000000654, 0.04574999999999996, 0.02499999999999858, -0.007500000000000284, -0.013249999999999318, 0.012500000000001066, 0.07600000000000051, 0.0030000000000001137, 0.017000000000001236, 0.014000000000001123, 0.03074999999999939], zp_timestamp='2026-02-15T22:02:00')
2026-02-16T00:05:01.958 [DEBUG] [Thread-213581] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:05:02.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:05:02.052 [DEBUG] [Thread-213584] [transport.py] [_log()] starting thread (client mode): 0xa2d79ae0
2026-02-16T00:05:02.053 [DEBUG] [Thread-213584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:05:02.068 [DEBUG] [Thread-213584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:05:02.068 [INFO] [Thread-213584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] client lang: <none>
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] server lang: <none>
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] kex follows: False
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:05:02.076 [DEBUG] [Thread-213584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:05:02.077 [DEBUG] [Thread-213584] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:05:02.077 [DEBUG] [Thread-213584] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:05:02.077 [DEBUG] [Thread-213584] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:05:02.077 [DEBUG] [Thread-213584] [transport.py] [_log()] Compression: none
2026-02-16T00:05:02.077 [DEBUG] [Thread-213584] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:05:02.135 [DEBUG] [Thread-213584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:05:02.136 [DEBUG] [Thread-213584] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:05:02.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:05:02.137 [DEBUG] [Thread-213584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:05:02.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:05:02.191 [DEBUG] [Thread-213584] [transport.py] [_log()] userauth is OK
2026-02-16T00:05:02.191 [DEBUG] [Thread-213584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:05:02.191 [DEBUG] [Thread-213584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:05:02.191 [DEBUG] [Thread-213584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:05:02.191 [DEBUG] [Thread-213584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:05:02.205 [INFO] [Thread-213584] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:05:02.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:05:02.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:05:03.047 [DEBUG] [Thread-213584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:05:03.047 [DEBUG] [Thread-213584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:05:03.095 [DEBUG] [Thread-213584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:05:03.096 [DEBUG] [Thread-213584] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:05:03.105 [DEBUG] [Thread-213584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:05:03.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:05:03.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:05:03.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:05:03.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:05:03.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:05:03.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:05:03.140 [DEBUG] [Thread-213584] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:05:11.556 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:11.558 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:14.153 [DEBUG] [Thread-213586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:23.364 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:29.210 [DEBUG] [Thread-213587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:33.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:05:33.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:05:33.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:05:34.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 5, 23), 10.06, 50.6, 0.0, 24.61, 14.01, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:05:35.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:05:23
2026-02-16T00:05:35.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:05:35.494 [DEBUG] [Thread-213588] [transport.py] [_log()] starting thread (client mode): 0xa5771c90
2026-02-16T00:05:35.494 [DEBUG] [Thread-213588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:05:35.515 [DEBUG] [Thread-213588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:05:35.516 [INFO] [Thread-213588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:35.517 [DEBUG] [Thread-213588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] client lang: <none>
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] server lang: <none>
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] kex follows: False
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] Compression: none
2026-02-16T00:05:35.518 [DEBUG] [Thread-213588] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:05:35.528 [DEBUG] [Thread-213588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:05:35.529 [DEBUG] [Thread-213588] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:05:35.529 [DEBUG] [Thread-213588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:05:35.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:05:35.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:05:35.531 [DEBUG] [Thread-213588] [transport.py] [_log()] userauth is OK
2026-02-16T00:05:35.532 [DEBUG] [Thread-213588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:05:35.532 [DEBUG] [Thread-213588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:05:35.532 [DEBUG] [Thread-213588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:05:35.532 [DEBUG] [Thread-213588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:05:35.557 [INFO] [Thread-213588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:05:35.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:05:36.113 [DEBUG] [Thread-213588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:05:36.113 [DEBUG] [Thread-213588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:05:36.113 [DEBUG] [Thread-213588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:05:36.153 [DEBUG] [Thread-213588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:05:36.153 [DEBUG] [Thread-213588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:05:36.155 [DEBUG] [Thread-213588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:05:36.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:05:36.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:05:36.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:05:36.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:05:36.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:05:36.172 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:05:36.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.919893 -999.00  +14.00  23.81     55   +5.10 1 1 1 1 1     0    0 8.00 -32.29 ZNESW 17.2 23.8 144.6 24.8 14.3 -24.2 14.2 -23.2 13.9 -22.2 14.3 -23.3
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.919893
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:05:36.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:05:23', tmtdew=10.06, humidity=50.6, cloud=0.0, wind=24.61, temperature=14.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:05:23', seeing=1.43, atlas_timestamp='2026-02-15T22:04:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, -0.025249999999999773, -0.039250000000000895, -0.029500000000000526, 0.010500000000000398, 0.005250000000000199, -0.014499999999999957, 0.00975000000000037, 0.018499999999999517, 0.0235000000000003, -0.06574999999999953, -0.0039999999999995595, 0.06099999999999994, 0.03625000000000078, 0.032999999999999474, -0.010999999999999233, 0.0442499999999999, 0.046499999999999986, 0.023999999999999133, -0.014750000000001151, 0.007999999999999119, -0.011750000000001037, 0.017250000000000654, 0.04574999999999996, 0.02499999999999858, -0.007500000000000284, -0.013249999999999318, 0.012500000000001066, 0.07600000000000051, 0.0030000000000001137, 0.017000000000001236, 0.014000000000001123, 0.03074999999999939], zp_timestamp='2026-02-15T22:02:00')
2026-02-16T00:05:36.173 [DEBUG] [Thread-213588] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:05:36.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:05:36.257 [DEBUG] [Thread-213591] [transport.py] [_log()] starting thread (client mode): 0xa57d4220
2026-02-16T00:05:36.257 [DEBUG] [Thread-213591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:05:36.272 [DEBUG] [Thread-213591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:05:36.272 [INFO] [Thread-213591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:05:36.279 [DEBUG] [Thread-213591] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:05:36.280 [DEBUG] [Thread-213591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:05:36.280 [DEBUG] [Thread-213591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:05:36.280 [DEBUG] [Thread-213591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] client lang: <none>
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] server lang: <none>
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] kex follows: False
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:05:36.281 [DEBUG] [Thread-213591] [transport.py] [_log()] Compression: none
2026-02-16T00:05:36.282 [DEBUG] [Thread-213591] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:05:36.339 [DEBUG] [Thread-213591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:05:36.340 [DEBUG] [Thread-213591] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:05:36.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:05:36.341 [DEBUG] [Thread-213591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:05:36.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:05:36.396 [DEBUG] [Thread-213591] [transport.py] [_log()] userauth is OK
2026-02-16T00:05:36.396 [DEBUG] [Thread-213591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:05:36.397 [DEBUG] [Thread-213591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:05:36.397 [DEBUG] [Thread-213591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:05:36.397 [DEBUG] [Thread-213591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:05:36.424 [INFO] [Thread-213591] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:05:36.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:05:36.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:05:37.006 [DEBUG] [Thread-213593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:37.260 [DEBUG] [Thread-213591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:05:37.260 [DEBUG] [Thread-213591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:05:37.308 [DEBUG] [Thread-213591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:05:37.309 [DEBUG] [Thread-213591] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:05:37.317 [DEBUG] [Thread-213591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:05:37.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:05:37.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:05:37.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:05:37.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:05:37.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:05:37.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:05:37.354 [DEBUG] [Thread-213591] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:05:44.243 [DEBUG] [Thread-213594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:05:59.295 [DEBUG] [Thread-213595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:07.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:06:07.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:06:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:06:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 5, 59), 10.05, 50.63, 0.0, 22.73, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:06:09.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:05:59
2026-02-16T00:06:09.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:06:10.083 [DEBUG] [Thread-213596] [transport.py] [_log()] starting thread (client mode): 0xa2d57e50
2026-02-16T00:06:10.084 [DEBUG] [Thread-213596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:06:10.099 [DEBUG] [Thread-213596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:06:10.099 [INFO] [Thread-213596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] client lang: <none>
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] server lang: <none>
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] kex follows: False
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:06:10.102 [DEBUG] [Thread-213596] [transport.py] [_log()] Compression: none
2026-02-16T00:06:10.103 [DEBUG] [Thread-213596] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:06:10.111 [DEBUG] [Thread-213596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:06:10.112 [DEBUG] [Thread-213596] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:06:10.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:06:10.113 [DEBUG] [Thread-213596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:06:10.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:06:10.115 [DEBUG] [Thread-213596] [transport.py] [_log()] userauth is OK
2026-02-16T00:06:10.115 [DEBUG] [Thread-213596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:06:10.116 [DEBUG] [Thread-213596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:06:10.116 [DEBUG] [Thread-213596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:06:10.116 [DEBUG] [Thread-213596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:06:10.135 [INFO] [Thread-213596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:06:10.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:06:10.778 [DEBUG] [Thread-213596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:06:10.779 [DEBUG] [Thread-213596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:06:10.779 [DEBUG] [Thread-213596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:06:10.820 [DEBUG] [Thread-213596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:06:10.820 [DEBUG] [Thread-213596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:06:10.823 [DEBUG] [Thread-213596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:06:10.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:06:10.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:06:10.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:06:10.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:06:10.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:06:10.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:06:10.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:06:10.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:06:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:06:10.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.920587 -999.00  +13.90  20.85     55   +5.10 1 1 1 1 1     0    0 8.26 -34.03 ZNESW 20.7 20.9 144.2 22.8 14.3 -24.3 14.2 -23.2 14.0 -22.1 14.2 -23.4
2026-02-16T00:06:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:06:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:06:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.920587
2026-02-16T00:06:10.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:06:10.847 [DEBUG] [Thread-213596] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:06:10.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:06:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:06:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:06:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:06:10.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:05:59', tmtdew=10.05, humidity=50.63, cloud=0.0, wind=22.73, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:05:59', seeing=1.34, atlas_timestamp='2026-02-15T22:05:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:05:00')
2026-02-16T00:06:10.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:06:10.944 [DEBUG] [Thread-213599] [transport.py] [_log()] starting thread (client mode): 0xa2d7b400
2026-02-16T00:06:10.944 [DEBUG] [Thread-213599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:06:10.960 [DEBUG] [Thread-213599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:06:10.960 [INFO] [Thread-213599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:06:10.967 [DEBUG] [Thread-213599] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] client lang: <none>
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] server lang: <none>
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] kex follows: False
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:06:10.968 [DEBUG] [Thread-213599] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:06:10.969 [DEBUG] [Thread-213599] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:06:10.969 [DEBUG] [Thread-213599] [transport.py] [_log()] Compression: none
2026-02-16T00:06:10.969 [DEBUG] [Thread-213599] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:06:11.026 [DEBUG] [Thread-213599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:06:11.027 [DEBUG] [Thread-213599] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:06:11.027 [DEBUG] [Thread-213599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:06:11.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:06:11.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:06:11.083 [DEBUG] [Thread-213599] [transport.py] [_log()] userauth is OK
2026-02-16T00:06:11.083 [DEBUG] [Thread-213599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:06:11.083 [DEBUG] [Thread-213599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:06:11.083 [DEBUG] [Thread-213599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:06:11.083 [DEBUG] [Thread-213599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:06:11.099 [INFO] [Thread-213599] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:06:11.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:06:11.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:06:11.783 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:11.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:11.953 [DEBUG] [Thread-213599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:06:11.954 [DEBUG] [Thread-213599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:06:12.002 [DEBUG] [Thread-213599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:06:12.003 [DEBUG] [Thread-213599] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:06:12.012 [DEBUG] [Thread-213599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:06:12.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:06:12.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:06:12.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:06:12.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:06:12.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:06:12.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:06:12.046 [DEBUG] [Thread-213599] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:06:14.333 [DEBUG] [Thread-213601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:29.382 [DEBUG] [Thread-213602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:37.073 [DEBUG] [Thread-213603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:42.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:06:42.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:06:42.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:06:44.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 6, 34), 10.21, 50.23, 0.0, 19.83, 14.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:06:44.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:06:34
2026-02-16T00:06:44.418 [DEBUG] [Thread-213604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:44.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:06:44.718 [DEBUG] [Thread-213605] [transport.py] [_log()] starting thread (client mode): 0xa2d56950
2026-02-16T00:06:44.718 [DEBUG] [Thread-213605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:06:44.732 [DEBUG] [Thread-213605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:06:44.732 [INFO] [Thread-213605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] client lang: <none>
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] server lang: <none>
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] kex follows: False
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] Compression: none
2026-02-16T00:06:44.735 [DEBUG] [Thread-213605] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:06:44.754 [DEBUG] [Thread-213605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:06:44.755 [DEBUG] [Thread-213605] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:06:44.755 [DEBUG] [Thread-213605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:06:44.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:06:44.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:06:44.757 [DEBUG] [Thread-213605] [transport.py] [_log()] userauth is OK
2026-02-16T00:06:44.757 [DEBUG] [Thread-213605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:06:44.757 [DEBUG] [Thread-213605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:06:44.757 [DEBUG] [Thread-213605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:06:44.757 [DEBUG] [Thread-213605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:06:44.771 [INFO] [Thread-213605] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:06:44.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:06:45.406 [DEBUG] [Thread-213605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:06:45.407 [DEBUG] [Thread-213605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:06:45.407 [DEBUG] [Thread-213605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:06:45.447 [DEBUG] [Thread-213605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:06:45.447 [DEBUG] [Thread-213605] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:06:45.451 [DEBUG] [Thread-213605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:06:45.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:06:45.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:06:45.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:06:45.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:06:45.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:06:45.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:06:45.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:06:45.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:06:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:06:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.920935 -999.00  +13.90  20.59     55   +5.20 1 1 1 1 1     0    0 8.09 -32.74 ZNESW 21.4 20.6 145.4 24.8 14.2 -24.3 14.2 -23.1 13.9 -22.0 14.2 -23.3
2026-02-16T00:06:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:06:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:06:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.920935
2026-02-16T00:06:45.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:06:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:06:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:06:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:06:45.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:06:45.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:06:34', tmtdew=10.21, humidity=50.23, cloud=0.0, wind=19.83, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:06:34', seeing=1.12, atlas_timestamp='2026-02-15T22:06:08.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:05:00')
2026-02-16T00:06:45.479 [DEBUG] [Thread-213605] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:06:45.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:06:45.574 [DEBUG] [Thread-213608] [transport.py] [_log()] starting thread (client mode): 0xa5740fa0
2026-02-16T00:06:45.574 [DEBUG] [Thread-213608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:06:45.588 [DEBUG] [Thread-213608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:06:45.588 [INFO] [Thread-213608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:06:45.596 [DEBUG] [Thread-213608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] client lang: <none>
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] server lang: <none>
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] kex follows: False
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] Compression: none
2026-02-16T00:06:45.597 [DEBUG] [Thread-213608] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:06:45.656 [DEBUG] [Thread-213608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:06:45.657 [DEBUG] [Thread-213608] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:06:45.658 [DEBUG] [Thread-213608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:06:45.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:06:45.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:06:45.716 [DEBUG] [Thread-213608] [transport.py] [_log()] userauth is OK
2026-02-16T00:06:45.716 [DEBUG] [Thread-213608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:06:45.716 [DEBUG] [Thread-213608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:06:45.716 [DEBUG] [Thread-213608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:06:45.716 [DEBUG] [Thread-213608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:06:45.734 [INFO] [Thread-213608] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:06:45.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:06:45.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:06:46.547 [DEBUG] [Thread-213608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:06:46.547 [DEBUG] [Thread-213608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:06:46.594 [DEBUG] [Thread-213608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:06:46.595 [DEBUG] [Thread-213608] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:06:46.604 [DEBUG] [Thread-213608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:06:46.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:06:46.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:06:46.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:06:46.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:06:46.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:06:46.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:06:46.641 [DEBUG] [Thread-213608] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:06:57.687 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:06:59.457 [DEBUG] [Thread-213610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:11.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:11.984 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:14.511 [DEBUG] [Thread-213611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:16.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:07:16.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:07:16.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:07:18.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 7, 10), 10.07, 50.55, 0.0, 22.09, 13.96, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:07:18.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:07:10
2026-02-16T00:07:19.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:07:19.212 [DEBUG] [Thread-213612] [transport.py] [_log()] starting thread (client mode): 0xa2d3cac0
2026-02-16T00:07:19.212 [DEBUG] [Thread-213612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:07:19.233 [DEBUG] [Thread-213612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:07:19.233 [INFO] [Thread-213612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:19.236 [DEBUG] [Thread-213612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] client lang: <none>
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] server lang: <none>
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] kex follows: False
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] Compression: none
2026-02-16T00:07:19.237 [DEBUG] [Thread-213612] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:07:19.254 [DEBUG] [Thread-213612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:07:19.254 [DEBUG] [Thread-213612] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:07:19.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:07:19.255 [DEBUG] [Thread-213612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:07:19.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:07:19.258 [DEBUG] [Thread-213612] [transport.py] [_log()] userauth is OK
2026-02-16T00:07:19.258 [DEBUG] [Thread-213612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:07:19.258 [DEBUG] [Thread-213612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:07:19.258 [DEBUG] [Thread-213612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:07:19.258 [DEBUG] [Thread-213612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:07:19.276 [INFO] [Thread-213612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:07:19.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:07:19.905 [DEBUG] [Thread-213612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:07:19.905 [DEBUG] [Thread-213612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:07:19.906 [DEBUG] [Thread-213612] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:07:19.946 [DEBUG] [Thread-213612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:07:19.946 [DEBUG] [Thread-213612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:07:19.950 [DEBUG] [Thread-213612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:07:19.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:07:19.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:07:19.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:07:19.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:07:19.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:07:19.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:07:19.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:07:19.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:07:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:07:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.921282 -999.00  +13.90  16.58     55   +5.20 1 1 1 1 1     0    0 8.20 -32.87 ZNESW 18.3 16.6 144.0 22.1 14.3 -24.2 14.2 -23.1 14.0 -22.1 14.2 -23.3
2026-02-16T00:07:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:07:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:07:19.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.921282
2026-02-16T00:07:19.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:07:19.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:07:19.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:07:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:07:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:07:19.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:07:10', tmtdew=10.07, humidity=50.55, cloud=0.0, wind=22.09, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:07:11', seeing=1.15, atlas_timestamp='2026-02-15T22:06:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:05:00')
2026-02-16T00:07:19.978 [DEBUG] [Thread-213612] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:07:20.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:07:20.077 [DEBUG] [Thread-213615] [transport.py] [_log()] starting thread (client mode): 0xa57d4fd0
2026-02-16T00:07:20.077 [DEBUG] [Thread-213615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:07:20.095 [DEBUG] [Thread-213615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:07:20.095 [INFO] [Thread-213615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:07:20.102 [DEBUG] [Thread-213615] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] client lang: <none>
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] server lang: <none>
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] kex follows: False
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:07:20.103 [DEBUG] [Thread-213615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:07:20.104 [DEBUG] [Thread-213615] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:07:20.104 [DEBUG] [Thread-213615] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:07:20.104 [DEBUG] [Thread-213615] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:07:20.104 [DEBUG] [Thread-213615] [transport.py] [_log()] Compression: none
2026-02-16T00:07:20.104 [DEBUG] [Thread-213615] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:07:20.163 [DEBUG] [Thread-213615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:07:20.164 [DEBUG] [Thread-213615] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:07:20.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:07:20.165 [DEBUG] [Thread-213615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:07:20.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:07:20.223 [DEBUG] [Thread-213615] [transport.py] [_log()] userauth is OK
2026-02-16T00:07:20.224 [DEBUG] [Thread-213615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:07:20.224 [DEBUG] [Thread-213615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:07:20.224 [DEBUG] [Thread-213615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:07:20.224 [DEBUG] [Thread-213615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:07:20.246 [INFO] [Thread-213615] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:07:20.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:07:20.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:07:21.073 [DEBUG] [Thread-213615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:07:21.073 [DEBUG] [Thread-213615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:07:21.120 [DEBUG] [Thread-213615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:07:21.121 [DEBUG] [Thread-213615] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:07:21.130 [DEBUG] [Thread-213615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:07:21.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:07:21.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:07:21.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:07:21.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:07:21.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:07:21.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:07:21.166 [DEBUG] [Thread-213615] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:07:29.555 [DEBUG] [Thread-213617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:37.131 [DEBUG] [Thread-213618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:44.596 [DEBUG] [Thread-213619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:07:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:07:51.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:07:51.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:07:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 7, 45), 10.04, 50.66, 0.0, 21.97, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:07:53.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:07:45
2026-02-16T00:07:53.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:07:53.576 [DEBUG] [Thread-213620] [transport.py] [_log()] starting thread (client mode): 0xa2d544f0
2026-02-16T00:07:53.576 [DEBUG] [Thread-213620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:07:53.594 [DEBUG] [Thread-213620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:07:53.594 [INFO] [Thread-213620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] client lang: <none>
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] server lang: <none>
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] kex follows: False
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] Compression: none
2026-02-16T00:07:53.596 [DEBUG] [Thread-213620] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:07:53.605 [DEBUG] [Thread-213620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:07:53.606 [DEBUG] [Thread-213620] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:07:53.606 [DEBUG] [Thread-213620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:07:53.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:07:53.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:07:53.606 [DEBUG] [Thread-213620] [transport.py] [_log()] userauth is OK
2026-02-16T00:07:53.606 [DEBUG] [Thread-213620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:07:53.606 [DEBUG] [Thread-213620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:07:53.607 [DEBUG] [Thread-213620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:07:53.607 [DEBUG] [Thread-213620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:07:53.622 [INFO] [Thread-213620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:07:53.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:07:54.233 [DEBUG] [Thread-213620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:07:54.233 [DEBUG] [Thread-213620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:07:54.233 [DEBUG] [Thread-213620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:07:54.274 [DEBUG] [Thread-213620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:07:54.275 [DEBUG] [Thread-213620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:07:54.278 [DEBUG] [Thread-213620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:07:54.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:07:54.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:07:54.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:07:54.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:07:54.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:07:54.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:07:54.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:07:54.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:07:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:07:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.921629 -999.00  +13.90  16.49     55   +5.10 1 1 1 1 1     0    0 8.05 -34.25 ZNESW 19.7 16.5 146.6 23.1 14.2 -24.2 14.2 -23.2 13.9 -22.1 14.2 -23.3
2026-02-16T00:07:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:07:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:07:54.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.921629
2026-02-16T00:07:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:07:54.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:07:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:07:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:07:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:07:54.307 [DEBUG] [Thread-213620] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:07:54.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:07:45', tmtdew=10.04, humidity=50.66, cloud=0.0, wind=21.97, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:07:46', seeing=1.52, atlas_timestamp='2026-02-15T22:07:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:05:00')
2026-02-16T00:07:54.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:07:54.405 [DEBUG] [Thread-213623] [transport.py] [_log()] starting thread (client mode): 0xa57b3a90
2026-02-16T00:07:54.405 [DEBUG] [Thread-213623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:07:54.420 [DEBUG] [Thread-213623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:07:54.420 [INFO] [Thread-213623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:07:54.427 [DEBUG] [Thread-213623] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:07:54.428 [DEBUG] [Thread-213623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:07:54.428 [DEBUG] [Thread-213623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:07:54.428 [DEBUG] [Thread-213623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:54.428 [DEBUG] [Thread-213623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:07:54.428 [DEBUG] [Thread-213623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:54.428 [DEBUG] [Thread-213623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] client lang: <none>
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] server lang: <none>
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] kex follows: False
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:07:54.429 [DEBUG] [Thread-213623] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:07:54.430 [DEBUG] [Thread-213623] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:07:54.430 [DEBUG] [Thread-213623] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:07:54.430 [DEBUG] [Thread-213623] [transport.py] [_log()] Compression: none
2026-02-16T00:07:54.430 [DEBUG] [Thread-213623] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:07:54.487 [DEBUG] [Thread-213623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:07:54.488 [DEBUG] [Thread-213623] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:07:54.488 [DEBUG] [Thread-213623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:07:54.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:07:54.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:07:54.543 [DEBUG] [Thread-213623] [transport.py] [_log()] userauth is OK
2026-02-16T00:07:54.543 [DEBUG] [Thread-213623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:07:54.544 [DEBUG] [Thread-213623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:07:54.544 [DEBUG] [Thread-213623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:07:54.544 [DEBUG] [Thread-213623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:07:54.562 [INFO] [Thread-213623] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:07:54.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:07:54.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:07:55.385 [DEBUG] [Thread-213623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:07:55.386 [DEBUG] [Thread-213623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:07:55.433 [DEBUG] [Thread-213623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:07:55.434 [DEBUG] [Thread-213623] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:07:55.443 [DEBUG] [Thread-213623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:07:55.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:07:55.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:07:55.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:07:55.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:07:55.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:07:55.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:07:55.485 [DEBUG] [Thread-213623] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:07:59.634 [DEBUG] [Thread-213625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:12.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:12.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:14.695 [DEBUG] [Thread-213626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:25.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:08:25.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:08:25.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:08:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 7, 45), 10.04, 50.66, 0.0, 21.97, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:08:27.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:07:45
2026-02-16T00:08:27.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:08:27.811 [DEBUG] [Thread-213627] [transport.py] [_log()] starting thread (client mode): 0xa57b3790
2026-02-16T00:08:27.811 [DEBUG] [Thread-213627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:08:27.831 [DEBUG] [Thread-213627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:08:27.831 [INFO] [Thread-213627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] client lang: <none>
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] server lang: <none>
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] kex follows: False
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] Compression: none
2026-02-16T00:08:27.832 [DEBUG] [Thread-213627] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:08:27.840 [DEBUG] [Thread-213627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:08:27.841 [DEBUG] [Thread-213627] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:08:27.841 [DEBUG] [Thread-213627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:08:27.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:08:27.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:08:27.842 [DEBUG] [Thread-213627] [transport.py] [_log()] userauth is OK
2026-02-16T00:08:27.842 [DEBUG] [Thread-213627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:08:27.843 [DEBUG] [Thread-213627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:08:27.843 [DEBUG] [Thread-213627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:08:27.843 [DEBUG] [Thread-213627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:08:27.866 [INFO] [Thread-213627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:08:27.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:08:28.418 [DEBUG] [Thread-213627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:08:28.418 [DEBUG] [Thread-213627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:08:28.419 [DEBUG] [Thread-213627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:08:28.459 [DEBUG] [Thread-213627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:08:28.460 [DEBUG] [Thread-213627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:08:28.463 [DEBUG] [Thread-213627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:08:28.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:08:28.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:08:28.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:08:28.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:08:28.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:08:28.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:08:28.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:08:28.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:08:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:08:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.921976 -999.00  +13.80  14.35     55   +5.10 1 1 1 1 1     0    0 7.96 -31.81 ZNESW 12.9 14.3 151.8 25.2 14.3 -24.3 14.2 -23.1 13.9 -22.1 14.2 -23.4
2026-02-16T00:08:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:08:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:08:28.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.921976
2026-02-16T00:08:28.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:08:28.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:08:28.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:08:28.489 [DEBUG] [Thread-213627] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:08:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:08:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:08:28.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:07:45', tmtdew=10.04, humidity=50.66, cloud=0.0, wind=21.97, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:08:21', seeing=1.69, atlas_timestamp='2026-02-15T22:07:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:05:00')
2026-02-16T00:08:28.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:08:28.586 [DEBUG] [Thread-213630] [transport.py] [_log()] starting thread (client mode): 0xa57708e0
2026-02-16T00:08:28.586 [DEBUG] [Thread-213630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:08:28.600 [DEBUG] [Thread-213630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:08:28.600 [INFO] [Thread-213630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:08:28.607 [DEBUG] [Thread-213630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] client lang: <none>
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] server lang: <none>
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] kex follows: False
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:08:28.608 [DEBUG] [Thread-213630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:08:28.609 [DEBUG] [Thread-213630] [transport.py] [_log()] Compression: none
2026-02-16T00:08:28.609 [DEBUG] [Thread-213630] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:08:28.672 [DEBUG] [Thread-213630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:08:28.673 [DEBUG] [Thread-213630] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:08:28.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:08:28.674 [DEBUG] [Thread-213630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:08:28.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:08:28.732 [DEBUG] [Thread-213630] [transport.py] [_log()] userauth is OK
2026-02-16T00:08:28.732 [DEBUG] [Thread-213630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:08:28.732 [DEBUG] [Thread-213630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:08:28.732 [DEBUG] [Thread-213630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:08:28.732 [DEBUG] [Thread-213630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:08:28.751 [INFO] [Thread-213630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:08:28.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:08:28.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:08:29.585 [DEBUG] [Thread-213630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:08:29.585 [DEBUG] [Thread-213630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:08:29.633 [DEBUG] [Thread-213630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:08:29.634 [DEBUG] [Thread-213630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:08:29.643 [DEBUG] [Thread-213630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:08:29.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:08: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')
2026-02-16T00:08:29.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:08:29.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:08:29.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:08:29.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:08:29.681 [DEBUG] [Thread-213630] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:08:29.729 [DEBUG] [Thread-213632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:31.683 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:37.196 [DEBUG] [Thread-213633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:44.782 [DEBUG] [Thread-213634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:08:59.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:08:59.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:08:59.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:08:59.819 [DEBUG] [Thread-213635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:09:02.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 8, 20), 10.0, 50.78, 0.0, 23.59, 13.91, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:09:02.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:08:20
2026-02-16T00:09:02.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:09:02.742 [DEBUG] [Thread-213636] [transport.py] [_log()] starting thread (client mode): 0xa5772bf0
2026-02-16T00:09:02.742 [DEBUG] [Thread-213636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:09:02.763 [DEBUG] [Thread-213636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:09:02.764 [INFO] [Thread-213636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] client lang: <none>
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] server lang: <none>
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] kex follows: False
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] Compression: none
2026-02-16T00:09:02.767 [DEBUG] [Thread-213636] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:09:02.783 [DEBUG] [Thread-213636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:09:02.783 [DEBUG] [Thread-213636] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:09:02.783 [DEBUG] [Thread-213636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:09:02.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:09:02.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:09:02.784 [DEBUG] [Thread-213636] [transport.py] [_log()] userauth is OK
2026-02-16T00:09:02.784 [DEBUG] [Thread-213636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:09:02.784 [DEBUG] [Thread-213636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:09:02.784 [DEBUG] [Thread-213636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:09:02.784 [DEBUG] [Thread-213636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:09:02.800 [INFO] [Thread-213636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:09:02.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:09:03.539 [DEBUG] [Thread-213636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:09:03.539 [DEBUG] [Thread-213636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:09:03.540 [DEBUG] [Thread-213636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:09:03.580 [DEBUG] [Thread-213636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:09:03.580 [DEBUG] [Thread-213636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:09:03.584 [DEBUG] [Thread-213636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:09:03.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:09:03.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:09:03.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:09:03.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:09:03.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:09:03.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:09:03.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.922671 -999.00  +13.80  14.63     55   +5.10 1 1 1 1 1     0    0 8.05 -31.56 ZNESW 15.4 14.6 147.0 19.4 14.2 -24.4 14.2 -23.2 13.9 -22.1 14.2 -23.4
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.922671
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:09:03.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:08:20', tmtdew=10.0, humidity=50.78, cloud=0.0, wind=23.59, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:08:56', seeing=1.85, atlas_timestamp='2026-02-15T22:08:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:05:00')
2026-02-16T00:09:03.601 [DEBUG] [Thread-213636] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:09:03.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:09:03.683 [DEBUG] [Thread-213639] [transport.py] [_log()] starting thread (client mode): 0xa57c2230
2026-02-16T00:09:03.683 [DEBUG] [Thread-213639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:09:03.698 [DEBUG] [Thread-213639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:09:03.698 [INFO] [Thread-213639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] client lang: <none>
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] server lang: <none>
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] kex follows: False
2026-02-16T00:09:03.706 [DEBUG] [Thread-213639] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:09:03.707 [DEBUG] [Thread-213639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:09:03.707 [DEBUG] [Thread-213639] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:09:03.707 [DEBUG] [Thread-213639] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:09:03.707 [DEBUG] [Thread-213639] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:09:03.707 [DEBUG] [Thread-213639] [transport.py] [_log()] Compression: none
2026-02-16T00:09:03.707 [DEBUG] [Thread-213639] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:09:03.762 [DEBUG] [Thread-213639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:09:03.763 [DEBUG] [Thread-213639] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:09:03.763 [DEBUG] [Thread-213639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:09:03.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:09:03.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:09:03.821 [DEBUG] [Thread-213639] [transport.py] [_log()] userauth is OK
2026-02-16T00:09:03.821 [DEBUG] [Thread-213639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:09:03.821 [DEBUG] [Thread-213639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:09:03.821 [DEBUG] [Thread-213639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:09:03.821 [DEBUG] [Thread-213639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:09:03.835 [INFO] [Thread-213639] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:09:03.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:09:03.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:09:04.653 [DEBUG] [Thread-213639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:09:04.653 [DEBUG] [Thread-213639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:09:04.701 [DEBUG] [Thread-213639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:09:04.702 [DEBUG] [Thread-213639] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:09:04.713 [DEBUG] [Thread-213639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:09:04.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:09:04.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:09:04.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:09:04.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:09:04.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:09:04.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:09:04.749 [DEBUG] [Thread-213639] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:09:12.393 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:09:12.394 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:09:14.859 [DEBUG] [Thread-213641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:09:29.913 [DEBUG] [Thread-213642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:09:34.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:09:34.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:09:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:09:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 8, 55), 9.98, 50.86, 0.0, 21.24, 13.94, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:09:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:08:55
2026-02-16T00:09:37.267 [DEBUG] [Thread-213643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:09:37.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:09:37.802 [DEBUG] [Thread-213644] [transport.py] [_log()] starting thread (client mode): 0xa57c0340
2026-02-16T00:09:37.802 [DEBUG] [Thread-213644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:09:37.821 [DEBUG] [Thread-213644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:09:37.821 [INFO] [Thread-213644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:37.824 [DEBUG] [Thread-213644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] client lang: <none>
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] server lang: <none>
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] kex follows: False
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] Compression: none
2026-02-16T00:09:37.825 [DEBUG] [Thread-213644] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:09:37.842 [DEBUG] [Thread-213644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:09:37.842 [DEBUG] [Thread-213644] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:09:37.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:09:37.843 [DEBUG] [Thread-213644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:09:37.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:09:37.845 [DEBUG] [Thread-213644] [transport.py] [_log()] userauth is OK
2026-02-16T00:09:37.845 [DEBUG] [Thread-213644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:09:37.846 [DEBUG] [Thread-213644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:09:37.846 [DEBUG] [Thread-213644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:09:37.846 [DEBUG] [Thread-213644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:09:37.864 [INFO] [Thread-213644] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:09:37.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:09:38.458 [DEBUG] [Thread-213644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:09:38.458 [DEBUG] [Thread-213644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:09:38.458 [DEBUG] [Thread-213644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:09:38.499 [DEBUG] [Thread-213644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:09:38.499 [DEBUG] [Thread-213644] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:09:38.502 [DEBUG] [Thread-213644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:09:38.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:09:38.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:09:38.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:09:38.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:09:38.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:09:38.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:09:38.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:09:38.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.923018 -999.00  +13.80  17.31     55   +5.20 1 1 1 1 1     0    0 8.19 -28.98 ZNESW 20.2 17.3 149.4 23.1 14.2 -24.3 14.1 -23.1 13.9 -22.0 14.2 -23.4
2026-02-16T00:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:09:38.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.923018
2026-02-16T00:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:09:38.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:08:55', tmtdew=9.98, humidity=50.86, cloud=0.0, wind=21.24, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:09:32', seeing=1.38, atlas_timestamp='2026-02-15T22:09:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:07:00')
2026-02-16T00:09:38.527 [DEBUG] [Thread-213644] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:09:38.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:09:38.632 [DEBUG] [Thread-213647] [transport.py] [_log()] starting thread (client mode): 0xa57e0bb0
2026-02-16T00:09:38.632 [DEBUG] [Thread-213647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:09:38.647 [DEBUG] [Thread-213647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:09:38.648 [INFO] [Thread-213647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:09:38.655 [DEBUG] [Thread-213647] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:09:38.656 [DEBUG] [Thread-213647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] client lang: <none>
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] server lang: <none>
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] kex follows: False
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:09:38.657 [DEBUG] [Thread-213647] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:09:38.658 [DEBUG] [Thread-213647] [transport.py] [_log()] Compression: none
2026-02-16T00:09:38.658 [DEBUG] [Thread-213647] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:09:38.716 [DEBUG] [Thread-213647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:09:38.716 [DEBUG] [Thread-213647] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:09:38.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:09:38.718 [DEBUG] [Thread-213647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:09:38.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:09:38.774 [DEBUG] [Thread-213647] [transport.py] [_log()] userauth is OK
2026-02-16T00:09:38.775 [DEBUG] [Thread-213647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:09:38.775 [DEBUG] [Thread-213647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:09:38.775 [DEBUG] [Thread-213647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:09:38.775 [DEBUG] [Thread-213647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:09:38.789 [INFO] [Thread-213647] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:09:38.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:09:38.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:09:39.643 [DEBUG] [Thread-213647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:09:39.643 [DEBUG] [Thread-213647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:09:39.691 [DEBUG] [Thread-213647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:09:39.692 [DEBUG] [Thread-213647] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:09:39.701 [DEBUG] [Thread-213647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:09:39.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:09:39.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:09:39.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:09:39.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:09:39.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:09:39.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:09:39.738 [DEBUG] [Thread-213647] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:09:44.952 [DEBUG] [Thread-213649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:00.006 [DEBUG] [Thread-213650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:05.439 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:09.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:10:09.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:10:09.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:10:11.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 9, 31), 9.99, 50.83, 0.0, 20.13, 13.94, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:10:11.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:09:31
2026-02-16T00:10:12.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:10:12.498 [DEBUG] [Thread-213651] [transport.py] [_log()] starting thread (client mode): 0xa81d7b80
2026-02-16T00:10:12.498 [DEBUG] [Thread-213651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:10:12.516 [DEBUG] [Thread-213651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:10:12.516 [INFO] [Thread-213651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:10:12.519 [DEBUG] [Thread-213651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:10:12.519 [DEBUG] [Thread-213651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:10:12.519 [DEBUG] [Thread-213651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] client lang: <none>
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] server lang: <none>
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] kex follows: False
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] Compression: none
2026-02-16T00:10:12.520 [DEBUG] [Thread-213651] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:10:12.534 [DEBUG] [Thread-213651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:10:12.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:10:12.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] userauth is OK
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:10:12.535 [DEBUG] [Thread-213651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:10:12.544 [INFO] [Thread-213651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:10:12.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:10:12.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:12.595 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:15.039 [DEBUG] [Thread-213653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:21.473 [DEBUG] [Thread-213651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:10:21.474 [DEBUG] [Thread-213651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:10:21.474 [DEBUG] [Thread-213651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:10:21.514 [DEBUG] [Thread-213651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:10:21.514 [DEBUG] [Thread-213651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:10:21.518 [DEBUG] [Thread-213651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:10:21.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:10:21.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:10:21.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:10:21.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:10:21.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:10:21.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:10:21.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:10:21.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:10:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:10:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.923365 -999.00  +13.90  20.20     55   +5.20 1 1 1 1 1     0    0 8.07 -30.18 ZNESW 22.3 20.2 141.8 23.8 14.2 -24.2 14.1 -23.2 13.9 -21.9 14.2 -23.2
2026-02-16T00:10:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:10:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:10:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.923365
2026-02-16T00:10:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:10:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:10:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:10:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:10:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:10:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:09:31', tmtdew=9.99, humidity=50.83, cloud=0.0, wind=20.13, temperature=13.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:10:08', seeing=1.56, atlas_timestamp='2026-02-15T22:09:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:07:00')
2026-02-16T00:10:21.728 [DEBUG] [Thread-213651] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:10:21.811 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:10:21.823 [DEBUG] [Thread-213655] [transport.py] [_log()] starting thread (client mode): 0xa57c0190
2026-02-16T00:10:21.823 [DEBUG] [Thread-213655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:10:21.838 [DEBUG] [Thread-213655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:10:21.838 [INFO] [Thread-213655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:10:21.846 [DEBUG] [Thread-213655] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:10:21.846 [DEBUG] [Thread-213655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:10:21.846 [DEBUG] [Thread-213655] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:10:21.846 [DEBUG] [Thread-213655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] client lang: <none>
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] server lang: <none>
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] kex follows: False
2026-02-16T00:10:21.847 [DEBUG] [Thread-213655] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:10:21.848 [DEBUG] [Thread-213655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:10:21.848 [DEBUG] [Thread-213655] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:10:21.848 [DEBUG] [Thread-213655] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:10:21.848 [DEBUG] [Thread-213655] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:10:21.848 [DEBUG] [Thread-213655] [transport.py] [_log()] Compression: none
2026-02-16T00:10:21.848 [DEBUG] [Thread-213655] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:10:21.904 [DEBUG] [Thread-213655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:10:21.904 [DEBUG] [Thread-213655] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:10:21.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:10:21.905 [DEBUG] [Thread-213655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:10:21.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:10:21.959 [DEBUG] [Thread-213655] [transport.py] [_log()] userauth is OK
2026-02-16T00:10:21.959 [DEBUG] [Thread-213655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:10:21.959 [DEBUG] [Thread-213655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:10:21.959 [DEBUG] [Thread-213655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:10:21.960 [DEBUG] [Thread-213655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:10:21.977 [INFO] [Thread-213655] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:10:21.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:10:21.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:10:22.812 [DEBUG] [Thread-213655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:10:22.812 [DEBUG] [Thread-213655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:10:22.860 [DEBUG] [Thread-213655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:10:22.860 [DEBUG] [Thread-213655] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:10:22.869 [DEBUG] [Thread-213655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:10:22.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:10:22.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:10:22.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:10:22.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:10:22.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:10:22.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:10:22.903 [DEBUG] [Thread-213655] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:10:30.077 [DEBUG] [Thread-213657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:37.329 [DEBUG] [Thread-213658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:45.127 [DEBUG] [Thread-213659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:10:52.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:10:52.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:10:52.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:10:54.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 10, 43), 9.87, 51.41, 0.0, 24.44, 13.96, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:10:54.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:10:43
2026-02-16T00:10:55.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:10:55.369 [DEBUG] [Thread-213660] [transport.py] [_log()] starting thread (client mode): 0xa2d6d750
2026-02-16T00:10:55.369 [DEBUG] [Thread-213660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:10:55.389 [DEBUG] [Thread-213660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:10:55.389 [INFO] [Thread-213660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:10:55.392 [DEBUG] [Thread-213660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] client lang: <none>
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] server lang: <none>
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] kex follows: False
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] Compression: none
2026-02-16T00:10:55.393 [DEBUG] [Thread-213660] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:10:55.411 [DEBUG] [Thread-213660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:10:55.412 [DEBUG] [Thread-213660] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:10:55.412 [DEBUG] [Thread-213660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:10:55.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:10:55.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:10:55.414 [DEBUG] [Thread-213660] [transport.py] [_log()] userauth is OK
2026-02-16T00:10:55.414 [DEBUG] [Thread-213660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:10:55.414 [DEBUG] [Thread-213660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:10:55.414 [DEBUG] [Thread-213660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:10:55.415 [DEBUG] [Thread-213660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:10:55.447 [INFO] [Thread-213660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:10:55.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:10:56.092 [DEBUG] [Thread-213660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:10:56.092 [DEBUG] [Thread-213660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:10:56.093 [DEBUG] [Thread-213660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:10:56.133 [DEBUG] [Thread-213660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:10:56.133 [DEBUG] [Thread-213660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:10:56.136 [DEBUG] [Thread-213660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:10:56.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:10:56.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:10:56.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:10:56.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:10:56.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:10:56.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:10:56.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:10:56.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:10:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:10:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.923712 -999.00  +13.90  16.19     55   +5.20 1 1 1 1 1     0    0 8.18 -29.10 ZNESW 15.6 16.2 153.2 26.7 14.2 -24.2 14.1 -23.1 13.9 -22.0 14.2 -23.3
2026-02-16T00:10:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:10:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:10:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.923712
2026-02-16T00:10:56.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:10:56.162 [DEBUG] [Thread-213660] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:10:56.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:10:56.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:10:56.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:10:56.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:10:56.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:10:43', tmtdew=9.87, humidity=51.41, cloud=0.0, wind=24.44, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:10:43', seeing=2.16, atlas_timestamp='2026-02-15T22:10:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:07:00')
2026-02-16T00:10:56.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:10:56.249 [DEBUG] [Thread-213663] [transport.py] [_log()] starting thread (client mode): 0xa2d6e110
2026-02-16T00:10:56.249 [DEBUG] [Thread-213663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:10:56.264 [DEBUG] [Thread-213663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:10:56.264 [INFO] [Thread-213663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:10:56.272 [DEBUG] [Thread-213663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] client lang: <none>
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] server lang: <none>
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] kex follows: False
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] Compression: none
2026-02-16T00:10:56.273 [DEBUG] [Thread-213663] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:10:56.332 [DEBUG] [Thread-213663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:10:56.332 [DEBUG] [Thread-213663] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:10:56.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:10:56.333 [DEBUG] [Thread-213663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:10:56.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:10:56.387 [DEBUG] [Thread-213663] [transport.py] [_log()] userauth is OK
2026-02-16T00:10:56.387 [DEBUG] [Thread-213663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:10:56.388 [DEBUG] [Thread-213663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:10:56.388 [DEBUG] [Thread-213663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:10:56.388 [DEBUG] [Thread-213663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:10:56.406 [INFO] [Thread-213663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:10:56.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:10:56.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:10:57.194 [DEBUG] [Thread-213663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:10:57.195 [DEBUG] [Thread-213663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:10:57.242 [DEBUG] [Thread-213663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:10:57.243 [DEBUG] [Thread-213663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:10:57.252 [DEBUG] [Thread-213663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:10:57.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:10:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:10:57.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:10:57.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:10:57.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:10:57.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:10:57.288 [DEBUG] [Thread-213663] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:11:00.163 [DEBUG] [Thread-213665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:12.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:12.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:15.221 [DEBUG] [Thread-213666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:27.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:11:27.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:11:27.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:11:29.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 11, 18), 9.92, 51.21, 0.0, 25.0, 13.89, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:11:29.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:11:18
2026-02-16T00:11:29.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:11:30.084 [DEBUG] [Thread-213667] [transport.py] [_log()] starting thread (client mode): 0xa2d55a20
2026-02-16T00:11:30.085 [DEBUG] [Thread-213667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:11:30.105 [DEBUG] [Thread-213667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:11:30.105 [INFO] [Thread-213667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:11:30.108 [DEBUG] [Thread-213667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:11:30.108 [DEBUG] [Thread-213667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:11:30.108 [DEBUG] [Thread-213667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:11:30.108 [DEBUG] [Thread-213667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:11:30.108 [DEBUG] [Thread-213667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] client lang: <none>
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] server lang: <none>
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] kex follows: False
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:11:30.109 [DEBUG] [Thread-213667] [transport.py] [_log()] Compression: none
2026-02-16T00:11:30.110 [DEBUG] [Thread-213667] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:11:30.128 [DEBUG] [Thread-213667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:11:30.129 [DEBUG] [Thread-213667] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:11:30.129 [DEBUG] [Thread-213667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:11:30.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:11:30.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:11:30.131 [DEBUG] [Thread-213667] [transport.py] [_log()] userauth is OK
2026-02-16T00:11:30.132 [DEBUG] [Thread-213667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:11:30.132 [DEBUG] [Thread-213667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:11:30.132 [DEBUG] [Thread-213667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:11:30.132 [DEBUG] [Thread-213667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:11:30.156 [INFO] [Thread-213667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:11:30.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:11:30.258 [DEBUG] [Thread-213669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:30.780 [DEBUG] [Thread-213667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:11:30.781 [DEBUG] [Thread-213667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:11:30.781 [DEBUG] [Thread-213667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:11:30.821 [DEBUG] [Thread-213667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:11:30.822 [DEBUG] [Thread-213667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:11:30.825 [DEBUG] [Thread-213667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:11:30.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:11:30.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:11:30.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:11:30.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:11:30.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:11:30.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:11:30.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:11:30.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:11:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:11:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.924060 -999.00  +13.90  16.13     55   +5.20 1 1 1 1 1     0    0 8.17 -28.36 ZNESW 17.7 16.1 143.4 21.3 14.2 -24.3 14.2 -23.3 13.9 -22.1 14.2 -23.4
2026-02-16T00:11:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:11:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:11:30.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.924060
2026-02-16T00:11:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:11:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:11:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:11:30.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:11:30.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:11:30.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:11:18', tmtdew=9.92, humidity=51.21, cloud=0.0, wind=25.0, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:11:19', seeing=2.43, atlas_timestamp='2026-02-15T22:10:38.784', atlas_cloud=1, atlas_rain=1, zp_data=[-0.048250000000001236, -0.023749999999999716, -0.04374999999999929, -0.020500000000000185, 0.02149999999999963, 0.008250000000000313, -0.009999999999999787, 0.013250000000001094, 0.06550000000000011, 0.03599999999999959, -0.05975000000000108, 0.018000000000000682, 0.054999999999999716, 0.04124999999999979, 0.03950000000000031, -0.0065000000000008384, 0.04824999999999946, 0.05850000000000044, 0.0129999999999999, -0.0007500000000018048, 0.030999999999998806, 0.032249999999999446, -0.0017499999999994742, 0.0547500000000003, 0.03649999999999842, 0.0015000000000000568, 0.00975000000000037, -0.029500000000000526, 0.08099999999999952, 0.015000000000000568, 0.032000000000001805, 0.08650000000000091, 0.021249999999998437], zp_timestamp='2026-02-15T22:07:00')
2026-02-16T00:11:30.852 [DEBUG] [Thread-213667] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:11:30.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:11:30.959 [DEBUG] [Thread-213671] [transport.py] [_log()] starting thread (client mode): 0xa57b2b90
2026-02-16T00:11:30.959 [DEBUG] [Thread-213671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:11:30.973 [DEBUG] [Thread-213671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:11:30.973 [INFO] [Thread-213671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:11:30.980 [DEBUG] [Thread-213671] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] client lang: <none>
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] server lang: <none>
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] kex follows: False
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] Compression: none
2026-02-16T00:11:30.981 [DEBUG] [Thread-213671] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:11:31.039 [DEBUG] [Thread-213671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:11:31.040 [DEBUG] [Thread-213671] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:11:31.040 [DEBUG] [Thread-213671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:11:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:11:31.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:11:31.095 [DEBUG] [Thread-213671] [transport.py] [_log()] userauth is OK
2026-02-16T00:11:31.095 [DEBUG] [Thread-213671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:11:31.096 [DEBUG] [Thread-213671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:11:31.096 [DEBUG] [Thread-213671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:11:31.096 [DEBUG] [Thread-213671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:11:31.120 [INFO] [Thread-213671] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:11:31.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:11:31.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:11:31.939 [DEBUG] [Thread-213671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:11:31.940 [DEBUG] [Thread-213671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:11:31.987 [DEBUG] [Thread-213671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:11:31.988 [DEBUG] [Thread-213671] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:11:31.997 [DEBUG] [Thread-213671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:11:32.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:11: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')
2026-02-16T00:11:32.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:11:32.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:11:32.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:11:32.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:11:32.034 [DEBUG] [Thread-213671] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:11:37.389 [DEBUG] [Thread-213673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:39.266 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:11:45.293 [DEBUG] [Thread-213674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:00.344 [DEBUG] [Thread-213675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:02.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:12:02.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:12:02.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
2026-02-16T00:12:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 11, 54), 9.93, 51.35, 0.0, 23.41, 13.96, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:12:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:11:54
2026-02-16T00:12:04.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:12:04.523 [DEBUG] [Thread-213676] [transport.py] [_log()] starting thread (client mode): 0xa57e2a40
2026-02-16T00:12:04.523 [DEBUG] [Thread-213676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:12:04.543 [DEBUG] [Thread-213676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:12:04.543 [INFO] [Thread-213676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] client lang: <none>
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] server lang: <none>
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] kex follows: False
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] Compression: none
2026-02-16T00:12:04.546 [DEBUG] [Thread-213676] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:12:04.564 [DEBUG] [Thread-213676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:12:04.565 [DEBUG] [Thread-213676] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:12:04.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:12:04.566 [DEBUG] [Thread-213676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:12:04.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:12:04.608 [DEBUG] [Thread-213676] [transport.py] [_log()] userauth is OK
2026-02-16T00:12:04.608 [DEBUG] [Thread-213676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:12:04.608 [DEBUG] [Thread-213676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:12:04.608 [DEBUG] [Thread-213676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:12:04.608 [DEBUG] [Thread-213676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:12:04.640 [INFO] [Thread-213676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:12:04.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:12:05.281 [DEBUG] [Thread-213676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:12:05.281 [DEBUG] [Thread-213676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:12:05.282 [DEBUG] [Thread-213676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:12:05.322 [DEBUG] [Thread-213676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:12:05.322 [DEBUG] [Thread-213676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:12:05.324 [DEBUG] [Thread-213676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:12:05.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:12:05.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:12:05.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:12:05.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:12:05.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:12:05.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.924407 -999.00  +13.80  16.73     55   +5.20 1 1 1 1 1     0    0 8.29 -26.01 ZNESW 18.4 16.7 141.2 22.1 14.2 -24.3 14.1 -23.1 13.9 -22.1 14.2 -23.3
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:12:05.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.924407
2026-02-16T00:12:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:12:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:12:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:12:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:12:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:12:05.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:11:54', tmtdew=9.93, humidity=51.35, cloud=0.0, wind=23.41, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:11:54', seeing=1.8, atlas_timestamp='2026-02-15T22:11:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:10:00')
2026-02-16T00:12:05.342 [DEBUG] [Thread-213676] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:12:05.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:12:05.425 [DEBUG] [Thread-213679] [transport.py] [_log()] starting thread (client mode): 0xa5773730
2026-02-16T00:12:05.425 [DEBUG] [Thread-213679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:12:05.440 [DEBUG] [Thread-213679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:12:05.440 [INFO] [Thread-213679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:12:05.448 [DEBUG] [Thread-213679] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:12:05.448 [DEBUG] [Thread-213679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:12:05.448 [DEBUG] [Thread-213679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:12:05.448 [DEBUG] [Thread-213679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] client lang: <none>
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] server lang: <none>
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] kex follows: False
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] Compression: none
2026-02-16T00:12:05.449 [DEBUG] [Thread-213679] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:12:05.507 [DEBUG] [Thread-213679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:12:05.508 [DEBUG] [Thread-213679] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:12:05.509 [DEBUG] [Thread-213679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:12:05.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:12:05.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:12:05.564 [DEBUG] [Thread-213679] [transport.py] [_log()] userauth is OK
2026-02-16T00:12:05.564 [DEBUG] [Thread-213679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:12:05.564 [DEBUG] [Thread-213679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:12:05.564 [DEBUG] [Thread-213679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:12:05.564 [DEBUG] [Thread-213679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:12:05.583 [INFO] [Thread-213679] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:12:05.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:12:05.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:12:06.411 [DEBUG] [Thread-213679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:12:06.411 [DEBUG] [Thread-213679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:12:06.459 [DEBUG] [Thread-213679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:12:06.459 [DEBUG] [Thread-213679] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:12:06.469 [DEBUG] [Thread-213679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:12:06.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:12:06.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:12: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') -> 00000000
2026-02-16T00:12:06.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:12:06.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:12:06.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:12:06.506 [DEBUG] [Thread-213679] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:12:13.002 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:13.003 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:15.377 [DEBUG] [Thread-213681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:30.427 [DEBUG] [Thread-213682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:36.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:12:36.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:12:36.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:12:37.461 [DEBUG] [Thread-213683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:12:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 12, 29), 9.95, 51.3, 0.0, 22.69, 13.96, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:12:38.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:12:29
2026-02-16T00:12:38.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:12:38.887 [DEBUG] [Thread-213684] [transport.py] [_log()] starting thread (client mode): 0xa57e09a0
2026-02-16T00:12:38.887 [DEBUG] [Thread-213684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:12:38.907 [DEBUG] [Thread-213684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:12:38.907 [INFO] [Thread-213684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:12:38.918 [DEBUG] [Thread-213684] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:12:38.918 [DEBUG] [Thread-213684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:12:38.918 [DEBUG] [Thread-213684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] client lang: <none>
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] server lang: <none>
2026-02-16T00:12:38.919 [DEBUG] [Thread-213684] [transport.py] [_log()] kex follows: False
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] Compression: none
2026-02-16T00:12:38.920 [DEBUG] [Thread-213684] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:12:38.939 [DEBUG] [Thread-213684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:12:38.940 [DEBUG] [Thread-213684] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:12:38.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:12:38.941 [DEBUG] [Thread-213684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:12:38.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:12:38.943 [DEBUG] [Thread-213684] [transport.py] [_log()] userauth is OK
2026-02-16T00:12:38.944 [DEBUG] [Thread-213684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:12:38.944 [DEBUG] [Thread-213684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:12:38.944 [DEBUG] [Thread-213684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:12:38.944 [DEBUG] [Thread-213684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:12:38.971 [INFO] [Thread-213684] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:12:38.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:12:39.598 [DEBUG] [Thread-213684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:12:39.598 [DEBUG] [Thread-213684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:12:39.599 [DEBUG] [Thread-213684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:12:39.639 [DEBUG] [Thread-213684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:12:39.639 [DEBUG] [Thread-213684] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:12:39.642 [DEBUG] [Thread-213684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:12:39.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:12:39.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:12:39.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:12:39.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:12:39.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:12:39.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:12:39.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:12:39.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:12:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:12:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.925101 -999.00  +13.80  17.49     55   +5.20 1 1 1 1 1     0    0 8.13 -25.50 ZNESW 15.7 17.5 144.2 26.4 14.2 -24.3 14.1 -23.2 13.9 -22.0 14.2 -23.4
2026-02-16T00:12:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:12:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:12:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.925101
2026-02-16T00:12:39.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:12:39.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:12:39.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:12:39.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:12:39.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:12:39.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:12:29', tmtdew=9.95, humidity=51.3, cloud=0.0, wind=22.69, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:12:30', seeing=1.8, atlas_timestamp='2026-02-15T22:12:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:10:00')
2026-02-16T00:12:39.667 [DEBUG] [Thread-213684] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:12:39.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:12:39.762 [DEBUG] [Thread-213687] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-16T00:12:39.762 [DEBUG] [Thread-213687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:12:39.776 [DEBUG] [Thread-213687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:12:39.776 [INFO] [Thread-213687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] client lang: <none>
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] server lang: <none>
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] kex follows: False
2026-02-16T00:12:39.784 [DEBUG] [Thread-213687] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:12:39.785 [DEBUG] [Thread-213687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:12:39.785 [DEBUG] [Thread-213687] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:12:39.785 [DEBUG] [Thread-213687] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:12:39.785 [DEBUG] [Thread-213687] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:12:39.785 [DEBUG] [Thread-213687] [transport.py] [_log()] Compression: none
2026-02-16T00:12:39.785 [DEBUG] [Thread-213687] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:12:39.844 [DEBUG] [Thread-213687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:12:39.844 [DEBUG] [Thread-213687] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:12:39.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:12:39.845 [DEBUG] [Thread-213687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:12:39.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:12:39.901 [DEBUG] [Thread-213687] [transport.py] [_log()] userauth is OK
2026-02-16T00:12:39.902 [DEBUG] [Thread-213687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:12:39.902 [DEBUG] [Thread-213687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:12:39.902 [DEBUG] [Thread-213687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:12:39.902 [DEBUG] [Thread-213687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:12:39.920 [INFO] [Thread-213687] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:12:39.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:12:39.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:12:40.781 [DEBUG] [Thread-213687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:12:40.781 [DEBUG] [Thread-213687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:12:40.829 [DEBUG] [Thread-213687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:12:40.830 [DEBUG] [Thread-213687] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:12:40.839 [DEBUG] [Thread-213687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:12:40.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:12:40.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:12:40.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:12:40.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:12:40.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:12:40.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:12:40.875 [DEBUG] [Thread-213687] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:12:45.465 [DEBUG] [Thread-213689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:00.509 [DEBUG] [Thread-213690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:10.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:13:10.898 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:13:10.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:13:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 12, 29), 9.95, 51.3, 0.0, 22.69, 13.96, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:13:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:12:29
2026-02-16T00:13:13.009 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:13.203 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:13.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:13:13.495 [DEBUG] [Thread-213691] [transport.py] [_log()] starting thread (client mode): 0xa5773fd0
2026-02-16T00:13:13.496 [DEBUG] [Thread-213691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:13:13.515 [DEBUG] [Thread-213691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:13:13.516 [INFO] [Thread-213691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:13:13.518 [DEBUG] [Thread-213691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:13:13.518 [DEBUG] [Thread-213691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] client lang: <none>
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] server lang: <none>
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] kex follows: False
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] Compression: none
2026-02-16T00:13:13.519 [DEBUG] [Thread-213691] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:13:13.538 [DEBUG] [Thread-213691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:13:13.539 [DEBUG] [Thread-213691] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:13:13.539 [DEBUG] [Thread-213691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:13:13.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:13:13.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:13:13.541 [DEBUG] [Thread-213691] [transport.py] [_log()] userauth is OK
2026-02-16T00:13:13.541 [DEBUG] [Thread-213691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:13:13.541 [DEBUG] [Thread-213691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:13:13.542 [DEBUG] [Thread-213691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:13:13.542 [DEBUG] [Thread-213691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:13:13.557 [INFO] [Thread-213691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:13:13.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:13:14.370 [DEBUG] [Thread-213691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:13:14.370 [DEBUG] [Thread-213691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:13:14.370 [DEBUG] [Thread-213691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:13:14.411 [DEBUG] [Thread-213691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:13:14.412 [DEBUG] [Thread-213691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:13:14.415 [DEBUG] [Thread-213691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:13:14.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:13:14.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:13:14.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:13:14.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:13:14.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:13:14.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:13:14.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:13:14.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:13:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:13:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.925448 -999.00  +13.80  18.25     56   +5.20 1 1 1 1 1     0    0 8.34 -26.02 ZNESW 16.4 18.2 142.4 23.2 14.2 -24.3 14.1 -23.1 13.9 -22.0 14.2 -23.4
2026-02-16T00:13:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:13:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:13:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.925448
2026-02-16T00:13:14.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:13:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:13:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:13:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:13:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:13:14.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:12:29', tmtdew=9.95, humidity=51.3, cloud=0.0, wind=22.69, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:13:05', seeing=1.5, atlas_timestamp='2026-02-15T22:12:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:10:00')
2026-02-16T00:13:14.444 [DEBUG] [Thread-213691] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:13:14.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:13:14.533 [DEBUG] [Thread-213694] [transport.py] [_log()] starting thread (client mode): 0xa2d3eaa0
2026-02-16T00:13:14.533 [DEBUG] [Thread-213694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:13:14.547 [DEBUG] [Thread-213694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:13:14.547 [INFO] [Thread-213694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:13:14.555 [DEBUG] [Thread-213694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:13:14.555 [DEBUG] [Thread-213694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:13:14.555 [DEBUG] [Thread-213694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:13:14.555 [DEBUG] [Thread-213694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:14.555 [DEBUG] [Thread-213694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:14.555 [DEBUG] [Thread-213694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] client lang: <none>
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] server lang: <none>
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] kex follows: False
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] Compression: none
2026-02-16T00:13:14.556 [DEBUG] [Thread-213694] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:13:14.616 [DEBUG] [Thread-213694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:13:14.617 [DEBUG] [Thread-213694] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:13:14.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:13:14.618 [DEBUG] [Thread-213694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:13:14.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:13:14.672 [DEBUG] [Thread-213694] [transport.py] [_log()] userauth is OK
2026-02-16T00:13:14.672 [DEBUG] [Thread-213694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:13:14.672 [DEBUG] [Thread-213694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:13:14.672 [DEBUG] [Thread-213694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:13:14.672 [DEBUG] [Thread-213694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:13:14.691 [INFO] [Thread-213694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:13:14.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:13:14.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:13:15.514 [DEBUG] [Thread-213694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:13:15.514 [DEBUG] [Thread-213694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:13:15.546 [DEBUG] [Thread-213696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:15.563 [DEBUG] [Thread-213694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:13:15.563 [DEBUG] [Thread-213694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:13:15.571 [DEBUG] [Thread-213694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:13:15.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:13:15.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:13:15.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:13:15.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:13:15.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:13:15.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:13:15.603 [DEBUG] [Thread-213694] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:13:30.586 [DEBUG] [Thread-213697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:37.519 [DEBUG] [Thread-213698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:45.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:13:45.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:13:45.623 [DEBUG] [Thread-213699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:13:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:13:47.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 13, 4), 9.95, 51.26, 0.0, 21.49, 13.91, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:13:47.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:13:04
2026-02-16T00:13:47.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:13:48.119 [DEBUG] [Thread-213700] [transport.py] [_log()] starting thread (client mode): 0xa2dc2f50
2026-02-16T00:13:48.119 [DEBUG] [Thread-213700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:13:48.138 [DEBUG] [Thread-213700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:13:48.138 [INFO] [Thread-213700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:13:48.141 [DEBUG] [Thread-213700] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:13:48.141 [DEBUG] [Thread-213700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] client lang: <none>
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] server lang: <none>
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] kex follows: False
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:13:48.142 [DEBUG] [Thread-213700] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:13:48.143 [DEBUG] [Thread-213700] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:13:48.143 [DEBUG] [Thread-213700] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:13:48.143 [DEBUG] [Thread-213700] [transport.py] [_log()] Compression: none
2026-02-16T00:13:48.143 [DEBUG] [Thread-213700] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:13:48.162 [DEBUG] [Thread-213700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:13:48.162 [DEBUG] [Thread-213700] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:13:48.163 [DEBUG] [Thread-213700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:13:48.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:13:48.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:13:48.164 [DEBUG] [Thread-213700] [transport.py] [_log()] userauth is OK
2026-02-16T00:13:48.165 [DEBUG] [Thread-213700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:13:48.165 [DEBUG] [Thread-213700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:13:48.165 [DEBUG] [Thread-213700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:13:48.165 [DEBUG] [Thread-213700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:13:48.189 [INFO] [Thread-213700] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:13:48.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:13:48.811 [DEBUG] [Thread-213700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:13:48.812 [DEBUG] [Thread-213700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:13:48.812 [DEBUG] [Thread-213700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:13:48.852 [DEBUG] [Thread-213700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:13:48.853 [DEBUG] [Thread-213700] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:13:48.856 [DEBUG] [Thread-213700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:13:48.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:13:48.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:13:48.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:13:48.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:13:48.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:13:48.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:13:48.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:13:48.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:13:48.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:13:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.925796 -999.00  +13.80  13.62     56   +5.20 1 1 1 1 1     0    0 8.18 -24.97 ZNESW 17.4 13.6 146.3 19.8 14.2 -24.3 14.1 -23.2 13.9 -22.1 14.2 -23.3
2026-02-16T00:13:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:13:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:13:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.925796
2026-02-16T00:13:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:13:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:13:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:13:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:13:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:13:48.882 [DEBUG] [Thread-213700] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:13:48.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:13:04', tmtdew=9.95, humidity=51.26, cloud=0.0, wind=21.49, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:13:41', seeing=1.94, atlas_timestamp='2026-02-15T22:13:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:10:00')
2026-02-16T00:13:48.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:13:48.978 [DEBUG] [Thread-213703] [transport.py] [_log()] starting thread (client mode): 0xa5772650
2026-02-16T00:13:48.978 [DEBUG] [Thread-213703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:13:48.993 [DEBUG] [Thread-213703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:13:48.993 [INFO] [Thread-213703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:13:49.000 [DEBUG] [Thread-213703] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:13:49.001 [DEBUG] [Thread-213703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:13:49.001 [DEBUG] [Thread-213703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:13:49.001 [DEBUG] [Thread-213703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] client lang: <none>
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] server lang: <none>
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] kex follows: False
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] Compression: none
2026-02-16T00:13:49.002 [DEBUG] [Thread-213703] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:13:49.060 [DEBUG] [Thread-213703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:13:49.060 [DEBUG] [Thread-213703] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:13:49.061 [DEBUG] [Thread-213703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:13:49.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:13:49.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:13:49.116 [DEBUG] [Thread-213703] [transport.py] [_log()] userauth is OK
2026-02-16T00:13:49.116 [DEBUG] [Thread-213703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:13:49.116 [DEBUG] [Thread-213703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:13:49.116 [DEBUG] [Thread-213703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:13:49.117 [DEBUG] [Thread-213703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:13:49.135 [INFO] [Thread-213703] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:13:49.136 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:13:49.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:13:49.960 [DEBUG] [Thread-213703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:13:49.960 [DEBUG] [Thread-213703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:13:50.007 [DEBUG] [Thread-213703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:13:50.008 [DEBUG] [Thread-213703] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:13:50.016 [DEBUG] [Thread-213703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:13:50.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:13:50.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:13:50.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:13:50.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:13:50.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:13:50.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:13:50.048 [DEBUG] [Thread-213703] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:14:00.659 [DEBUG] [Thread-213705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:13.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:13.407 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:15.714 [DEBUG] [Thread-213706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:20.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:14:20.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:14:20.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:14:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 13, 41), 10.04, 50.79, 0.0, 20.85, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:14:22.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:13:41
2026-02-16T00:14:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:14:22.536 [DEBUG] [Thread-213707] [transport.py] [_log()] starting thread (client mode): 0xa57e3610
2026-02-16T00:14:22.536 [DEBUG] [Thread-213707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:14:22.556 [DEBUG] [Thread-213707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:14:22.556 [INFO] [Thread-213707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] client lang: <none>
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] server lang: <none>
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] kex follows: False
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:14:22.560 [DEBUG] [Thread-213707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:14:22.561 [DEBUG] [Thread-213707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:14:22.561 [DEBUG] [Thread-213707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:14:22.561 [DEBUG] [Thread-213707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:14:22.561 [DEBUG] [Thread-213707] [transport.py] [_log()] Compression: none
2026-02-16T00:14:22.561 [DEBUG] [Thread-213707] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:14:22.577 [DEBUG] [Thread-213707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:14:22.577 [DEBUG] [Thread-213707] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:14:22.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:14:22.578 [DEBUG] [Thread-213707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:14:22.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:14:22.580 [DEBUG] [Thread-213707] [transport.py] [_log()] userauth is OK
2026-02-16T00:14:22.580 [DEBUG] [Thread-213707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:14:22.580 [DEBUG] [Thread-213707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:14:22.580 [DEBUG] [Thread-213707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:14:22.580 [DEBUG] [Thread-213707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:14:22.604 [INFO] [Thread-213707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:14:22.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:14:23.229 [DEBUG] [Thread-213707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:14:23.229 [DEBUG] [Thread-213707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:14:23.229 [DEBUG] [Thread-213707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:14:23.270 [DEBUG] [Thread-213707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:14:23.270 [DEBUG] [Thread-213707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:14:23.273 [DEBUG] [Thread-213707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:14:23.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:14:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:14:23.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:14:23.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:14:23.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:14:23.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:14:23.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:14:23.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:14:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:14:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.926143 -999.00  +13.80  14.76     56   +5.20 1 1 1 1 1     0    0 8.19 -25.29 ZNESW 13.4 14.8 147.2 21.8 14.2 -24.3 14.1 -23.2 13.9 -22.1 14.2 -23.3
2026-02-16T00:14:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:14:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:14:23.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.926143
2026-02-16T00:14:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:14:23.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:14:23.302 [DEBUG] [Thread-213707] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:14:23.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:14:23.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:14:23.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:14:23.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:13:41', tmtdew=10.04, humidity=50.79, cloud=0.0, wind=20.85, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:14:16', seeing=1.6, atlas_timestamp='2026-02-15T22:13:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:10:00')
2026-02-16T00:14:23.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:14:23.398 [DEBUG] [Thread-213710] [transport.py] [_log()] starting thread (client mode): 0xa2dc1480
2026-02-16T00:14:23.399 [DEBUG] [Thread-213710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:14:23.413 [DEBUG] [Thread-213710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:14:23.413 [INFO] [Thread-213710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:14:23.420 [DEBUG] [Thread-213710] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] client lang: <none>
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] server lang: <none>
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] kex follows: False
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:14:23.421 [DEBUG] [Thread-213710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:14:23.422 [DEBUG] [Thread-213710] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:14:23.422 [DEBUG] [Thread-213710] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:14:23.422 [DEBUG] [Thread-213710] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:14:23.422 [DEBUG] [Thread-213710] [transport.py] [_log()] Compression: none
2026-02-16T00:14:23.422 [DEBUG] [Thread-213710] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:14:23.478 [DEBUG] [Thread-213710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:14:23.479 [DEBUG] [Thread-213710] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:14:23.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:14:23.480 [DEBUG] [Thread-213710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:14:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:14:23.535 [DEBUG] [Thread-213710] [transport.py] [_log()] userauth is OK
2026-02-16T00:14:23.535 [DEBUG] [Thread-213710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:14:23.535 [DEBUG] [Thread-213710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:14:23.536 [DEBUG] [Thread-213710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:14:23.536 [DEBUG] [Thread-213710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:14:23.554 [INFO] [Thread-213710] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:14:23.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:14:23.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:14:24.387 [DEBUG] [Thread-213710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:14:24.387 [DEBUG] [Thread-213710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:14:24.435 [DEBUG] [Thread-213710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:14:24.435 [DEBUG] [Thread-213710] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:14:24.443 [DEBUG] [Thread-213710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:14:24.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:14:24.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:14:24.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:14:24.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:14:24.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:14:24.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:14:24.477 [DEBUG] [Thread-213710] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:14:30.747 [DEBUG] [Thread-213712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:37.591 [DEBUG] [Thread-213713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:45.800 [DEBUG] [Thread-213714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:46.383 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:14:54.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:14:54.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:14:54.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:14:57.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 14, 16), 9.9, 51.45, 0.0, 22.99, 13.91, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:14:57.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:14:16
2026-02-16T00:14:57.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:14:57.731 [DEBUG] [Thread-213715] [transport.py] [_log()] starting thread (client mode): 0xa57e07c0
2026-02-16T00:14:57.731 [DEBUG] [Thread-213715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:14:57.750 [DEBUG] [Thread-213715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:14:57.750 [INFO] [Thread-213715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:14:57.753 [DEBUG] [Thread-213715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:14:57.753 [DEBUG] [Thread-213715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:14:57.753 [DEBUG] [Thread-213715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:14:57.753 [DEBUG] [Thread-213715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] client lang: <none>
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] server lang: <none>
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] kex follows: False
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] Compression: none
2026-02-16T00:14:57.754 [DEBUG] [Thread-213715] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:14:57.772 [DEBUG] [Thread-213715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:14:57.772 [DEBUG] [Thread-213715] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:14:57.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:14:57.773 [DEBUG] [Thread-213715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:14:57.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:14:57.775 [DEBUG] [Thread-213715] [transport.py] [_log()] userauth is OK
2026-02-16T00:14:57.776 [DEBUG] [Thread-213715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:14:57.776 [DEBUG] [Thread-213715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:14:57.776 [DEBUG] [Thread-213715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:14:57.776 [DEBUG] [Thread-213715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:14:57.792 [INFO] [Thread-213715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:14:57.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:14:58.415 [DEBUG] [Thread-213715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:14:58.416 [DEBUG] [Thread-213715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:14:58.416 [DEBUG] [Thread-213715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:14:58.456 [DEBUG] [Thread-213715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:14:58.457 [DEBUG] [Thread-213715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:14:58.460 [DEBUG] [Thread-213715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:14:58.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:14:58.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:14:58.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:14:58.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:14:58.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:14:58.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:14:58.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:14:58.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:14:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:14:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.926490 -999.00  +13.80  26.06     56   +5.30 1 1 1 1 1     0    0 8.14 -24.96 ZNESW 23.3 26.1 140.8 26.9 14.2 -24.4 14.0 -23.2 13.9 -22.0 14.2 -23.3
2026-02-16T00:14:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:14:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:14:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.926490
2026-02-16T00:14:58.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:14:58.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:14:58.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:14:58.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:14:58.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:14:58.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:14:16', tmtdew=9.9, humidity=51.45, cloud=0.0, wind=22.99, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:14:52', seeing=2.46, atlas_timestamp='2026-02-15T22:14:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:10:00')
2026-02-16T00:14:58.487 [DEBUG] [Thread-213715] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:14:58.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:14:58.582 [DEBUG] [Thread-213718] [transport.py] [_log()] starting thread (client mode): 0xa57e2a40
2026-02-16T00:14:58.582 [DEBUG] [Thread-213718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:14:58.600 [DEBUG] [Thread-213718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:14:58.600 [INFO] [Thread-213718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:14:58.608 [DEBUG] [Thread-213718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:14:58.608 [DEBUG] [Thread-213718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:14:58.608 [DEBUG] [Thread-213718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:14:58.608 [DEBUG] [Thread-213718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:58.608 [DEBUG] [Thread-213718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:14:58.608 [DEBUG] [Thread-213718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] client lang: <none>
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] server lang: <none>
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] kex follows: False
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] Compression: none
2026-02-16T00:14:58.609 [DEBUG] [Thread-213718] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:14:58.667 [DEBUG] [Thread-213718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:14:58.668 [DEBUG] [Thread-213718] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:14:58.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:14:58.669 [DEBUG] [Thread-213718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:14:58.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:14:58.726 [DEBUG] [Thread-213718] [transport.py] [_log()] userauth is OK
2026-02-16T00:14:58.726 [DEBUG] [Thread-213718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:14:58.727 [DEBUG] [Thread-213718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:14:58.727 [DEBUG] [Thread-213718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:14:58.727 [DEBUG] [Thread-213718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:14:58.746 [INFO] [Thread-213718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:14:58.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:14:58.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:14:59.630 [DEBUG] [Thread-213718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:14:59.630 [DEBUG] [Thread-213718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:14:59.679 [DEBUG] [Thread-213718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:14:59.679 [DEBUG] [Thread-213718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:14:59.688 [DEBUG] [Thread-213718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:14:59.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:14:59.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:14:59.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:14:59.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:14:59.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:14:59.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:14:59.722 [DEBUG] [Thread-213718] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:15:00.834 [DEBUG] [Thread-213720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:15:13.606 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:15:13.608 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:15:15.885 [DEBUG] [Thread-213721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:15:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:15:29.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:15:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:15:30.922 [DEBUG] [Thread-213722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:15:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 14, 51), 9.8, 51.65, 0.0, 22.97, 13.91, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:15:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:14:51
2026-02-16T00:15:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:15:33.061 [DEBUG] [Thread-213723] [transport.py] [_log()] starting thread (client mode): 0xa5771c30
2026-02-16T00:15:33.061 [DEBUG] [Thread-213723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:15:33.080 [DEBUG] [Thread-213723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:15:33.081 [INFO] [Thread-213723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] client lang: <none>
2026-02-16T00:15:33.084 [DEBUG] [Thread-213723] [transport.py] [_log()] server lang: <none>
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] kex follows: False
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] Compression: none
2026-02-16T00:15:33.085 [DEBUG] [Thread-213723] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:15:33.102 [DEBUG] [Thread-213723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:15:33.103 [DEBUG] [Thread-213723] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:15:33.103 [DEBUG] [Thread-213723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:15:33.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:15:33.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:15:33.105 [DEBUG] [Thread-213723] [transport.py] [_log()] userauth is OK
2026-02-16T00:15:33.106 [DEBUG] [Thread-213723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:15:33.106 [DEBUG] [Thread-213723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:15:33.106 [DEBUG] [Thread-213723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:15:33.106 [DEBUG] [Thread-213723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:15:33.141 [INFO] [Thread-213723] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:15:33.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:15:33.759 [DEBUG] [Thread-213723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:15:33.759 [DEBUG] [Thread-213723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:15:33.759 [DEBUG] [Thread-213723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:15:33.799 [DEBUG] [Thread-213723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:15:33.800 [DEBUG] [Thread-213723] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:15:33.803 [DEBUG] [Thread-213723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:15:33.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:15:33.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:15:33.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:15:33.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:15:33.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:15:33.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:15:33.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:15:33.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:15:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:15:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.926837 -999.00  +13.80  15.18     56   +5.30 1 1 1 1 1     0    0 7.99 -26.50 ZNESW 18.6 15.2 136.0 23.1 14.2 -24.1 14.1 -23.2 13.8 -21.9 14.2 -23.4
2026-02-16T00:15:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:15:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:15:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.926837
2026-02-16T00:15:33.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:15:33.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:15:33.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:15:33.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:15:33.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:15:33.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:14:51', tmtdew=9.8, humidity=51.65, cloud=0.0, wind=22.97, temperature=13.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:15:28', seeing=1.79, atlas_timestamp='2026-02-15T22:14:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:13:00')
2026-02-16T00:15:33.830 [DEBUG] [Thread-213723] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:15:33.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:15:33.927 [DEBUG] [Thread-213726] [transport.py] [_log()] starting thread (client mode): 0xa57c2290
2026-02-16T00:15:33.928 [DEBUG] [Thread-213726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:15:33.949 [DEBUG] [Thread-213726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:15:33.949 [INFO] [Thread-213726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] client lang: <none>
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] server lang: <none>
2026-02-16T00:15:33.960 [DEBUG] [Thread-213726] [transport.py] [_log()] kex follows: False
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] Compression: none
2026-02-16T00:15:33.961 [DEBUG] [Thread-213726] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:15:34.016 [DEBUG] [Thread-213726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:15:34.017 [DEBUG] [Thread-213726] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:15:34.017 [DEBUG] [Thread-213726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:15:34.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:15:34.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:15:34.072 [DEBUG] [Thread-213726] [transport.py] [_log()] userauth is OK
2026-02-16T00:15:34.072 [DEBUG] [Thread-213726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:15:34.072 [DEBUG] [Thread-213726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:15:34.072 [DEBUG] [Thread-213726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:15:34.072 [DEBUG] [Thread-213726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:15:34.092 [INFO] [Thread-213726] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:15:34.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:15:34.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:15:34.916 [DEBUG] [Thread-213726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:15:34.917 [DEBUG] [Thread-213726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:15:34.967 [DEBUG] [Thread-213726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:15:34.967 [DEBUG] [Thread-213726] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:15:34.978 [DEBUG] [Thread-213726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:15:34.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:15:34.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:15:34.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:15:35.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:15:35.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:15:35.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:15:35.015 [DEBUG] [Thread-213726] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:15:37.645 [DEBUG] [Thread-213728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:15:45.961 [DEBUG] [Thread-213729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:01.023 [DEBUG] [Thread-213730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:05.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:16:05.037 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:16:05.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:16:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 15, 27), 9.84, 51.5, 0.0, 23.86, 13.89, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:16:07.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:15:27
2026-02-16T00:16:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:16:07.975 [DEBUG] [Thread-213731] [transport.py] [_log()] starting thread (client mode): 0xa57e0880
2026-02-16T00:16:07.975 [DEBUG] [Thread-213731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:16:07.996 [DEBUG] [Thread-213731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:16:07.996 [INFO] [Thread-213731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] client lang: <none>
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] server lang: <none>
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] kex follows: False
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] Compression: none
2026-02-16T00:16:07.999 [DEBUG] [Thread-213731] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:16:08.017 [DEBUG] [Thread-213731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:16:08.018 [DEBUG] [Thread-213731] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:16:08.018 [DEBUG] [Thread-213731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:16:08.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:16:08.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:16:08.020 [DEBUG] [Thread-213731] [transport.py] [_log()] userauth is OK
2026-02-16T00:16:08.020 [DEBUG] [Thread-213731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:16:08.021 [DEBUG] [Thread-213731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:16:08.021 [DEBUG] [Thread-213731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:16:08.021 [DEBUG] [Thread-213731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:16:08.037 [INFO] [Thread-213731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:16:08.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:16:08.803 [DEBUG] [Thread-213731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:16:08.804 [DEBUG] [Thread-213731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:16:08.804 [DEBUG] [Thread-213731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:16:08.844 [DEBUG] [Thread-213731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:16:08.844 [DEBUG] [Thread-213731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:16:08.847 [DEBUG] [Thread-213731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:16:08.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:16:08.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:16:08.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:16:08.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:16:08.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:16:08.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:16:08.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:16:08.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:16:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:16:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.927532 -999.00  +13.80  18.35     56   +5.30 1 1 1 1 1     0    0 8.05 -25.23 ZNESW 12.8 18.4 140.6 20.9 14.1 -24.1 14.0 -23.1 13.8 -22.0 14.2 -23.3
2026-02-16T00:16:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:16:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:16:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.927532
2026-02-16T00:16:08.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:16:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:16:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:16:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:16:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:16:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:15:27', tmtdew=9.84, humidity=51.5, cloud=0.0, wind=23.86, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:16:04', seeing=1.6, atlas_timestamp='2026-02-15T22:15:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:13:00')
2026-02-16T00:16:08.875 [DEBUG] [Thread-213731] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:16:08.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:16:08.972 [DEBUG] [Thread-213734] [transport.py] [_log()] starting thread (client mode): 0xa2d025c0
2026-02-16T00:16:08.972 [DEBUG] [Thread-213734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:16:08.987 [DEBUG] [Thread-213734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:16:08.987 [INFO] [Thread-213734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:16:08.994 [DEBUG] [Thread-213734] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:16:08.995 [DEBUG] [Thread-213734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] client lang: <none>
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] server lang: <none>
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] kex follows: False
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:16:08.996 [DEBUG] [Thread-213734] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:16:08.997 [DEBUG] [Thread-213734] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:16:08.997 [DEBUG] [Thread-213734] [transport.py] [_log()] Compression: none
2026-02-16T00:16:08.997 [DEBUG] [Thread-213734] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:16:09.052 [DEBUG] [Thread-213734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:16:09.052 [DEBUG] [Thread-213734] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:16:09.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:16:09.054 [DEBUG] [Thread-213734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:16:09.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:16:09.111 [DEBUG] [Thread-213734] [transport.py] [_log()] userauth is OK
2026-02-16T00:16:09.112 [DEBUG] [Thread-213734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:16:09.112 [DEBUG] [Thread-213734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:16:09.112 [DEBUG] [Thread-213734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:16:09.112 [DEBUG] [Thread-213734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:16:09.134 [INFO] [Thread-213734] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:16:09.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:16:09.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:16:09.953 [DEBUG] [Thread-213734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:16:09.953 [DEBUG] [Thread-213734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:16:10.001 [DEBUG] [Thread-213734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:16:10.001 [DEBUG] [Thread-213734] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:16:10.010 [DEBUG] [Thread-213734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:16:10.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:16:10.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:16:10.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:16:10.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:16:10.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:16:10.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:16:10.055 [DEBUG] [Thread-213734] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:16:13.812 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:13.813 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:16.058 [DEBUG] [Thread-213736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:20.558 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:31.106 [DEBUG] [Thread-213737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:37.704 [DEBUG] [Thread-213738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:16:40.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:16:40.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:16:40.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:16:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 16, 3), 9.83, 51.53, 0.0, 23.04, 13.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:16:42.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:16:03
2026-02-16T00:16:42.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:16:42.841 [DEBUG] [Thread-213739] [transport.py] [_log()] starting thread (client mode): 0xa5742530
2026-02-16T00:16:42.842 [DEBUG] [Thread-213739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:16:42.862 [DEBUG] [Thread-213739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:16:42.862 [INFO] [Thread-213739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:16:42.865 [DEBUG] [Thread-213739] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:16:42.865 [DEBUG] [Thread-213739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:16:42.865 [DEBUG] [Thread-213739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] client lang: <none>
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] server lang: <none>
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] kex follows: False
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:16:42.866 [DEBUG] [Thread-213739] [transport.py] [_log()] Compression: none
2026-02-16T00:16:42.867 [DEBUG] [Thread-213739] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:16:42.883 [DEBUG] [Thread-213739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:16:42.884 [DEBUG] [Thread-213739] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:16:42.884 [DEBUG] [Thread-213739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:16:42.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:16:42.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:16:42.886 [DEBUG] [Thread-213739] [transport.py] [_log()] userauth is OK
2026-02-16T00:16:42.886 [DEBUG] [Thread-213739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:16:42.886 [DEBUG] [Thread-213739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:16:42.886 [DEBUG] [Thread-213739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:16:42.886 [DEBUG] [Thread-213739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:16:42.909 [INFO] [Thread-213739] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:16:42.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:16:43.525 [DEBUG] [Thread-213739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:16:43.525 [DEBUG] [Thread-213739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:16:43.526 [DEBUG] [Thread-213739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:16:43.565 [DEBUG] [Thread-213739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:16:43.566 [DEBUG] [Thread-213739] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:16:43.569 [DEBUG] [Thread-213739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:16:43.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:16:43.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:16:43.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:16:43.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:16:43.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:16:43.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:16:43.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:16:43.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:16:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:16:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.927879 -999.00  +13.80  13.31     56   +5.20 1 1 1 1 1     0    0 8.13 -24.05 ZNESW 13.7 13.3 155.8 20.5 14.1 -24.2 14.0 -23.2 13.8 -22.1 14.1 -23.4
2026-02-16T00:16:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:16:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:16:43.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.927879
2026-02-16T00:16:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:16:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:16:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:16:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:16:43.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:16:43.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:16:03', tmtdew=9.83, humidity=51.53, cloud=0.0, wind=23.04, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:16:04', seeing=1.6, atlas_timestamp='2026-02-15T22:16:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:13:00')
2026-02-16T00:16:43.597 [DEBUG] [Thread-213739] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:16:43.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:16:43.694 [DEBUG] [Thread-213742] [transport.py] [_log()] starting thread (client mode): 0xa2d137f0
2026-02-16T00:16:43.694 [DEBUG] [Thread-213742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:16:43.709 [DEBUG] [Thread-213742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:16:43.709 [INFO] [Thread-213742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:16:43.717 [DEBUG] [Thread-213742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] client lang: <none>
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] server lang: <none>
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] kex follows: False
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] Compression: none
2026-02-16T00:16:43.718 [DEBUG] [Thread-213742] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:16:43.775 [DEBUG] [Thread-213742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:16:43.776 [DEBUG] [Thread-213742] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:16:43.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:16:43.777 [DEBUG] [Thread-213742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:16:43.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:16:43.832 [DEBUG] [Thread-213742] [transport.py] [_log()] userauth is OK
2026-02-16T00:16:43.832 [DEBUG] [Thread-213742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:16:43.833 [DEBUG] [Thread-213742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:16:43.833 [DEBUG] [Thread-213742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:16:43.833 [DEBUG] [Thread-213742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:16:43.851 [INFO] [Thread-213742] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:16:43.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:16:43.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:16:44.643 [DEBUG] [Thread-213742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:16:44.643 [DEBUG] [Thread-213742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:16:44.691 [DEBUG] [Thread-213742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:16:44.692 [DEBUG] [Thread-213742] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:16:44.701 [DEBUG] [Thread-213742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:16:44.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:16:44.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:16:44.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:16:44.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:16:44.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:16:44.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:16:44.737 [DEBUG] [Thread-213742] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:16:46.140 [DEBUG] [Thread-213744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:01.202 [DEBUG] [Thread-213745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:14.013 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:14.014 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:14.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:17:14.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:17:14.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:17:16.236 [DEBUG] [Thread-213746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 16, 40), 9.92, 51.16, 0.0, 21.7, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:17:16.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:16:40
2026-02-16T00:17:17.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:17:17.352 [DEBUG] [Thread-213747] [transport.py] [_log()] starting thread (client mode): 0xa2d11210
2026-02-16T00:17:17.352 [DEBUG] [Thread-213747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:17:17.373 [DEBUG] [Thread-213747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:17:17.373 [INFO] [Thread-213747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:17:17.376 [DEBUG] [Thread-213747] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:17:17.377 [DEBUG] [Thread-213747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:17:17.377 [DEBUG] [Thread-213747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:17:17.377 [DEBUG] [Thread-213747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:17.377 [DEBUG] [Thread-213747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:17.377 [DEBUG] [Thread-213747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:17.377 [DEBUG] [Thread-213747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] client lang: <none>
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] server lang: <none>
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] kex follows: False
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] Compression: none
2026-02-16T00:17:17.378 [DEBUG] [Thread-213747] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:17:17.396 [DEBUG] [Thread-213747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:17:17.397 [DEBUG] [Thread-213747] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:17:17.397 [DEBUG] [Thread-213747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:17:17.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:17:17.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:17:17.399 [DEBUG] [Thread-213747] [transport.py] [_log()] userauth is OK
2026-02-16T00:17:17.399 [DEBUG] [Thread-213747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:17:17.399 [DEBUG] [Thread-213747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:17:17.399 [DEBUG] [Thread-213747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:17:17.399 [DEBUG] [Thread-213747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:17:17.435 [INFO] [Thread-213747] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:17:17.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:17:18.079 [DEBUG] [Thread-213747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:17:18.079 [DEBUG] [Thread-213747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:17:18.079 [DEBUG] [Thread-213747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:17:18.120 [DEBUG] [Thread-213747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:17:18.120 [DEBUG] [Thread-213747] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:17:18.123 [DEBUG] [Thread-213747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:17:18.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:17:18.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:17:18.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:17:18.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:17:18.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:17:18.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:17:18.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:17:18.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:17:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:17:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.928226 -999.00  +13.70  15.11     56   +5.20 1 1 1 1 1     0    0 8.10 -26.52 ZNESW 13.6 15.1 140.4 20.4 14.1 -24.2 14.0 -23.2 13.8 -22.1 14.1 -23.3
2026-02-16T00:17:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:17:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:17:18.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.928226
2026-02-16T00:17:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:17:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:17:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:17:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:17:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:17:18.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:16:40', tmtdew=9.92, humidity=51.16, cloud=0.0, wind=21.7, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:16:40', seeing=1.69, atlas_timestamp='2026-02-15T22:16:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:13:00')
2026-02-16T00:17:18.145 [DEBUG] [Thread-213747] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:17:18.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:17:18.239 [DEBUG] [Thread-213750] [transport.py] [_log()] starting thread (client mode): 0xa2d02d10
2026-02-16T00:17:18.239 [DEBUG] [Thread-213750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:17:18.254 [DEBUG] [Thread-213750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:17:18.254 [INFO] [Thread-213750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:17:18.261 [DEBUG] [Thread-213750] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:17:18.261 [DEBUG] [Thread-213750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:17:18.261 [DEBUG] [Thread-213750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:17:18.261 [DEBUG] [Thread-213750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:18.261 [DEBUG] [Thread-213750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] client lang: <none>
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] server lang: <none>
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] kex follows: False
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] Compression: none
2026-02-16T00:17:18.262 [DEBUG] [Thread-213750] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:17:18.319 [DEBUG] [Thread-213750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:17:18.319 [DEBUG] [Thread-213750] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:17:18.320 [DEBUG] [Thread-213750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:17:18.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:17:18.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:17:18.376 [DEBUG] [Thread-213750] [transport.py] [_log()] userauth is OK
2026-02-16T00:17:18.376 [DEBUG] [Thread-213750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:17:18.376 [DEBUG] [Thread-213750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:17:18.376 [DEBUG] [Thread-213750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:17:18.376 [DEBUG] [Thread-213750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:17:18.393 [INFO] [Thread-213750] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:17:18.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:17:18.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:17:19.198 [DEBUG] [Thread-213750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:17:19.198 [DEBUG] [Thread-213750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:17:19.247 [DEBUG] [Thread-213750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:17:19.247 [DEBUG] [Thread-213750] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:17:19.257 [DEBUG] [Thread-213750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:17:19.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:17:19.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:17:19.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:17:19.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:17:19.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:17:19.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:17:19.294 [DEBUG] [Thread-213750] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:17:31.272 [DEBUG] [Thread-213752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:37.782 [DEBUG] [Thread-213753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:46.326 [DEBUG] [Thread-213754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:17:49.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:17:49.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:17:49.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:17:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 17, 15), 9.8, 51.63, 0.0, 21.33, 13.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:17:51.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:17:15
2026-02-16T00:17:51.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:17:51.801 [DEBUG] [Thread-213755] [transport.py] [_log()] starting thread (client mode): 0xa2d3f4c0
2026-02-16T00:17:51.801 [DEBUG] [Thread-213755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:17:51.822 [DEBUG] [Thread-213755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:17:51.822 [INFO] [Thread-213755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] client lang: <none>
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] server lang: <none>
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] kex follows: False
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] Compression: none
2026-02-16T00:17:51.823 [DEBUG] [Thread-213755] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:17:51.842 [DEBUG] [Thread-213755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:17:51.843 [DEBUG] [Thread-213755] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:17:51.843 [DEBUG] [Thread-213755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:17:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:17:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:17:51.845 [DEBUG] [Thread-213755] [transport.py] [_log()] userauth is OK
2026-02-16T00:17:51.846 [DEBUG] [Thread-213755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:17:51.846 [DEBUG] [Thread-213755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:17:51.846 [DEBUG] [Thread-213755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:17:51.846 [DEBUG] [Thread-213755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:17:51.880 [INFO] [Thread-213755] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:17:51.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:17:52.473 [DEBUG] [Thread-213755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:17:52.473 [DEBUG] [Thread-213755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:17:52.474 [DEBUG] [Thread-213755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:17:52.514 [DEBUG] [Thread-213755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:17:52.514 [DEBUG] [Thread-213755] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:17:52.516 [DEBUG] [Thread-213755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:17:52.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:17:52.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:17:52.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:17:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:17:52.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:17:52.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:17:52.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:17:52.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.928573 -999.00  +13.70  20.14     56   +5.20 1 1 1 1 1     0    0 8.03 -26.54 ZNESW 23.5 20.1 142.0 24.8 14.1 -24.3 14.0 -23.1 13.8 -22.1 14.1 -23.2
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.928573
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:17:52.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:17:15', tmtdew=9.8, humidity=51.63, cloud=0.0, wind=21.33, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:17:16', seeing=2.19, atlas_timestamp='2026-02-15T22:17:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04025000000000034, 0.006250000000001421, -0.032249999999999446, -0.01249999999999929, 0.0005000000000006111, 0.010750000000001592, 0.0029999999999983373, 0.0032500000000013074, 0.05249999999999844, 0.03599999999999959, -0.07025000000000148, 0.009999999999999787, 0.04849999999999888, 0.05325000000000024, 0.026999999999999247, 0.0039999999999995595, 0.02725000000000044, 0.05850000000000044, 0.021499999999997854, 0.003249999999999531, 0.04199999999999804, 0.007749999999997925, 0.0002500000000011937, 0.034750000000000725, 0.049999999999998934, -0.01750000000000007, 0.029249999999999332, -0.0045000000000001705, 0.016500000000000625, -0.0259999999999998, 0.038000000000000256, 0.051000000000000156, 0.008749999999999147], zp_timestamp='2026-02-15T22:13:00')
2026-02-16T00:17:52.536 [DEBUG] [Thread-213755] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:17:52.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:17:52.625 [DEBUG] [Thread-213758] [transport.py] [_log()] starting thread (client mode): 0xa2d3d6c0
2026-02-16T00:17:52.625 [DEBUG] [Thread-213758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:17:52.639 [DEBUG] [Thread-213758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:17:52.639 [INFO] [Thread-213758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] client lang: <none>
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] server lang: <none>
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] kex follows: False
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] Compression: none
2026-02-16T00:17:52.647 [DEBUG] [Thread-213758] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:17:52.703 [DEBUG] [Thread-213758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:17:52.703 [DEBUG] [Thread-213758] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:17:52.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:17:52.704 [DEBUG] [Thread-213758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:17:52.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:17:52.763 [DEBUG] [Thread-213758] [transport.py] [_log()] userauth is OK
2026-02-16T00:17:52.764 [DEBUG] [Thread-213758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:17:52.764 [DEBUG] [Thread-213758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:17:52.764 [DEBUG] [Thread-213758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:17:52.764 [DEBUG] [Thread-213758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:17:52.783 [INFO] [Thread-213758] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:17:52.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:17:52.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:17:53.607 [DEBUG] [Thread-213758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:17:53.607 [DEBUG] [Thread-213758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:17:53.655 [DEBUG] [Thread-213758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:17:53.656 [DEBUG] [Thread-213758] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:17:53.665 [DEBUG] [Thread-213758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:17:53.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:17:53.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:17:53.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:17:53.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:17:53.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:17:53.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:17:53.703 [DEBUG] [Thread-213758] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:17:53.951 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:01.361 [DEBUG] [Thread-213760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:14.218 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:14.219 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:16.404 [DEBUG] [Thread-213761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:23.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:18:23.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:18:23.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:18:25.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 17, 51), 9.66, 51.76, 0.0, 25.04, 13.74, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:18:25.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:17:51
2026-02-16T00:18:25.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:18:26.060 [DEBUG] [Thread-213762] [transport.py] [_log()] starting thread (client mode): 0xa2d01fc0
2026-02-16T00:18:26.060 [DEBUG] [Thread-213762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:18:26.080 [DEBUG] [Thread-213762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:18:26.080 [INFO] [Thread-213762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] client lang: <none>
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] server lang: <none>
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] kex follows: False
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] Compression: none
2026-02-16T00:18:26.084 [DEBUG] [Thread-213762] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:18:26.100 [DEBUG] [Thread-213762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:18:26.100 [DEBUG] [Thread-213762] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:18:26.100 [DEBUG] [Thread-213762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:18:26.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:18:26.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:18:26.101 [DEBUG] [Thread-213762] [transport.py] [_log()] userauth is OK
2026-02-16T00:18:26.101 [DEBUG] [Thread-213762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:18:26.101 [DEBUG] [Thread-213762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:18:26.101 [DEBUG] [Thread-213762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:18:26.101 [DEBUG] [Thread-213762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:18:26.110 [INFO] [Thread-213762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:18:26.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:18:26.752 [DEBUG] [Thread-213762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:18:26.753 [DEBUG] [Thread-213762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:18:26.753 [DEBUG] [Thread-213762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:18:26.793 [DEBUG] [Thread-213762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:18:26.794 [DEBUG] [Thread-213762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:18:26.797 [DEBUG] [Thread-213762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:18:26.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:18:26.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:18:26.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:18:26.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:18:26.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:18:26.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:18:26.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:18:26.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:18:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:18:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.928921 -999.00  +13.80  18.73     57   +5.40 1 1 1 1 1     0    0 7.76 -29.25 ZNESW 18.0 18.7 149.9 28.6 14.1 -23.9 14.0 -22.9 13.8 -21.8 14.1 -23.0
2026-02-16T00:18:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:18:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:18:26.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.928921
2026-02-16T00:18:26.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:18:26.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:18:26.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:18:26.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:18:26.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:18:26.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:17:51', tmtdew=9.66, humidity=51.76, cloud=0.0, wind=25.04, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:17:51', seeing=2.21, atlas_timestamp='2026-02-15T22:17:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.19625000000000092, -0.17474999999999952, -0.20674999999999955, -0.20450000000000124, -0.20650000000000013, -0.1842499999999987, -0.14449999999999896, -0.12674999999999947, -0.1225000000000005, -0.1269999999999989, -0.24575000000000102, -0.18200000000000038, -0.120000000000001, -0.16575000000000095, -0.15200000000000102, -0.1225000000000005, -0.09275000000000055, -0.15249999999999986, -0.18100000000000094, -0.14525000000000077, -0.14300000000000068, -0.20575000000000188, -0.16774999999999984, -0.0702499999999997, -0.10350000000000215, -0.2104999999999997, -0.17525000000000013, -0.13199999999999967, -0.14450000000000074, -0.2494999999999994, -0.14649999999999963, 0.004000000000001336, -0.14425000000000132], zp_timestamp='2026-02-15T22:16:00')
2026-02-16T00:18:26.823 [DEBUG] [Thread-213762] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:18:26.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:18:26.925 [DEBUG] [Thread-213765] [transport.py] [_log()] starting thread (client mode): 0xa57c2890
2026-02-16T00:18:26.925 [DEBUG] [Thread-213765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:18:26.939 [DEBUG] [Thread-213765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:18:26.939 [INFO] [Thread-213765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] client lang: <none>
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] server lang: <none>
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] kex follows: False
2026-02-16T00:18:26.947 [DEBUG] [Thread-213765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:18:26.948 [DEBUG] [Thread-213765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:18:26.948 [DEBUG] [Thread-213765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:18:26.948 [DEBUG] [Thread-213765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:18:26.948 [DEBUG] [Thread-213765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:18:26.948 [DEBUG] [Thread-213765] [transport.py] [_log()] Compression: none
2026-02-16T00:18:26.948 [DEBUG] [Thread-213765] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:18:27.004 [DEBUG] [Thread-213765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:18:27.005 [DEBUG] [Thread-213765] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:18:27.005 [DEBUG] [Thread-213765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:18:27.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:18:27.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:18:27.060 [DEBUG] [Thread-213765] [transport.py] [_log()] userauth is OK
2026-02-16T00:18:27.060 [DEBUG] [Thread-213765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:18:27.060 [DEBUG] [Thread-213765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:18:27.061 [DEBUG] [Thread-213765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:18:27.061 [DEBUG] [Thread-213765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:18:27.079 [INFO] [Thread-213765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:18:27.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:18:27.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:18:27.872 [DEBUG] [Thread-213765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:18:27.873 [DEBUG] [Thread-213765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:18:27.920 [DEBUG] [Thread-213765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:18:27.920 [DEBUG] [Thread-213765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:18:27.929 [DEBUG] [Thread-213765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:18:27.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:18:27.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:18:27.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:18:27.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:18:27.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:18:27.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:18:27.963 [DEBUG] [Thread-213765] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:18:31.440 [DEBUG] [Thread-213767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:37.841 [DEBUG] [Thread-213768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:46.499 [DEBUG] [Thread-213769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:18:57.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:18:57.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:18:57.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:18:59.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 18, 27), 9.63, 51.88, 0.0, 24.6, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:18:59.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:18:27
2026-02-16T00:19:00.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:19:00.306 [DEBUG] [Thread-213770] [transport.py] [_log()] starting thread (client mode): 0xa2d3fc40
2026-02-16T00:19:00.306 [DEBUG] [Thread-213770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:19:00.326 [DEBUG] [Thread-213770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:19:00.327 [INFO] [Thread-213770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:19:00.329 [DEBUG] [Thread-213770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] client lang: <none>
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] server lang: <none>
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] kex follows: False
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] Compression: none
2026-02-16T00:19:00.330 [DEBUG] [Thread-213770] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:19:00.348 [DEBUG] [Thread-213770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:19:00.348 [DEBUG] [Thread-213770] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:19:00.349 [DEBUG] [Thread-213770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:19:00.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:19:00.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:19:00.351 [DEBUG] [Thread-213770] [transport.py] [_log()] userauth is OK
2026-02-16T00:19:00.351 [DEBUG] [Thread-213770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:19:00.351 [DEBUG] [Thread-213770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:19:00.351 [DEBUG] [Thread-213770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:19:00.351 [DEBUG] [Thread-213770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:19:00.376 [INFO] [Thread-213770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:19:00.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:19:01.190 [DEBUG] [Thread-213770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:19:01.190 [DEBUG] [Thread-213770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:19:01.190 [DEBUG] [Thread-213770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:19:01.231 [DEBUG] [Thread-213770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:19:01.232 [DEBUG] [Thread-213770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:19:01.235 [DEBUG] [Thread-213770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:19:01.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:19:01.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:19:01.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:19:01.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:19:01.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:19:01.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:19:01.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:19:01.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.929615 -999.00  +13.80  21.58     56   +5.30 1 1 1 1 1     0    0 7.93 -28.73 ZNESW 18.0 21.6 143.0 23.8 14.1 -24.2 14.0 -23.0 13.8 -21.9 14.1 -23.1
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.929615
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:19:01.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:18:27', tmtdew=9.63, humidity=51.88, cloud=0.0, wind=24.6, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:18:27', seeing=2.28, atlas_timestamp='2026-02-15T22:18:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.19625000000000092, -0.17474999999999952, -0.20674999999999955, -0.20450000000000124, -0.20650000000000013, -0.1842499999999987, -0.14449999999999896, -0.12674999999999947, -0.1225000000000005, -0.1269999999999989, -0.24575000000000102, -0.18200000000000038, -0.120000000000001, -0.16575000000000095, -0.15200000000000102, -0.1225000000000005, -0.09275000000000055, -0.15249999999999986, -0.18100000000000094, -0.14525000000000077, -0.14300000000000068, -0.20575000000000188, -0.16774999999999984, -0.0702499999999997, -0.10350000000000215, -0.2104999999999997, -0.17525000000000013, -0.13199999999999967, -0.14450000000000074, -0.2494999999999994, -0.14649999999999963, 0.004000000000001336, -0.14425000000000132], zp_timestamp='2026-02-15T22:16:00')
2026-02-16T00:19:01.253 [DEBUG] [Thread-213770] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:19:01.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:19:01.342 [DEBUG] [Thread-213773] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc70
2026-02-16T00:19:01.343 [DEBUG] [Thread-213773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:19:01.362 [DEBUG] [Thread-213773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:19:01.362 [INFO] [Thread-213773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:19:01.369 [DEBUG] [Thread-213773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:19:01.370 [DEBUG] [Thread-213773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:19:01.370 [DEBUG] [Thread-213773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:19:01.370 [DEBUG] [Thread-213773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:01.370 [DEBUG] [Thread-213773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:01.370 [DEBUG] [Thread-213773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:01.370 [DEBUG] [Thread-213773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] client lang: <none>
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] server lang: <none>
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] kex follows: False
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:19:01.371 [DEBUG] [Thread-213773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:19:01.372 [DEBUG] [Thread-213773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:19:01.372 [DEBUG] [Thread-213773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:19:01.372 [DEBUG] [Thread-213773] [transport.py] [_log()] Compression: none
2026-02-16T00:19:01.372 [DEBUG] [Thread-213773] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:19:01.427 [DEBUG] [Thread-213773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:19:01.428 [DEBUG] [Thread-213773] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:19:01.428 [DEBUG] [Thread-213773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:19:01.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:19:01.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:19:01.484 [DEBUG] [Thread-213773] [transport.py] [_log()] userauth is OK
2026-02-16T00:19:01.484 [DEBUG] [Thread-213773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:19:01.484 [DEBUG] [Thread-213773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:19:01.484 [DEBUG] [Thread-213773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:19:01.484 [DEBUG] [Thread-213773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:19:01.508 [INFO] [Thread-213773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:19:01.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:19:01.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:19:01.539 [DEBUG] [Thread-213775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:02.430 [DEBUG] [Thread-213773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:19:02.430 [DEBUG] [Thread-213773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:19:02.479 [DEBUG] [Thread-213773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:19:02.479 [DEBUG] [Thread-213773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:19:02.487 [DEBUG] [Thread-213773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:19:02.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:19:02.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:19:02.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:19:02.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:19:02.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:19:02.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:19:02.518 [DEBUG] [Thread-213773] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:19:14.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:14.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:16.587 [DEBUG] [Thread-213776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:27.393 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:31.620 [DEBUG] [Thread-213777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:32.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:19:32.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:19:32.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:19:34.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 19, 2), 9.62, 51.88, 0.0, 25.55, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:19:34.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:19:02
2026-02-16T00:19:34.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:19:35.105 [DEBUG] [Thread-213778] [transport.py] [_log()] starting thread (client mode): 0xa2d12bf0
2026-02-16T00:19:35.105 [DEBUG] [Thread-213778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:19:35.125 [DEBUG] [Thread-213778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:19:35.125 [INFO] [Thread-213778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:19:35.128 [DEBUG] [Thread-213778] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:19:35.128 [DEBUG] [Thread-213778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:19:35.128 [DEBUG] [Thread-213778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] client lang: <none>
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] server lang: <none>
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] kex follows: False
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] Compression: none
2026-02-16T00:19:35.129 [DEBUG] [Thread-213778] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:19:35.146 [DEBUG] [Thread-213778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:19:35.146 [DEBUG] [Thread-213778] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:19:35.147 [DEBUG] [Thread-213778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:19:35.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:19:35.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:19:35.149 [DEBUG] [Thread-213778] [transport.py] [_log()] userauth is OK
2026-02-16T00:19:35.149 [DEBUG] [Thread-213778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:19:35.149 [DEBUG] [Thread-213778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:19:35.149 [DEBUG] [Thread-213778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:19:35.149 [DEBUG] [Thread-213778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:19:35.185 [INFO] [Thread-213778] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:19:35.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:19:35.803 [DEBUG] [Thread-213778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:19:35.803 [DEBUG] [Thread-213778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:19:35.803 [DEBUG] [Thread-213778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:19:35.844 [DEBUG] [Thread-213778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:19:35.844 [DEBUG] [Thread-213778] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:19:35.846 [DEBUG] [Thread-213778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:19:35.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:19:35.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:19:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:19:35.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:19:35.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:19:35.868 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:19:35.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:19:35.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:19:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:19:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.929963 -999.00  +13.80  22.98     56   +5.30 1 1 1 1 1     0    0 7.96 -29.26 ZNESW 21.4 23.0 130.8 25.6 14.1 -24.1 14.0 -23.0 13.8 -21.8 14.1 -23.1
2026-02-16T00:19:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:19:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:19:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.929963
2026-02-16T00:19:35.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:19:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:19:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:19:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:19:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:19:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:19:02', tmtdew=9.62, humidity=51.88, cloud=0.0, wind=25.55, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:19:02', seeing=2.03, atlas_timestamp='2026-02-15T22:19:08.803', atlas_cloud=1, atlas_rain=1, zp_data=[-0.19625000000000092, -0.17474999999999952, -0.20674999999999955, -0.20450000000000124, -0.20650000000000013, -0.1842499999999987, -0.14449999999999896, -0.12674999999999947, -0.1225000000000005, -0.1269999999999989, -0.24575000000000102, -0.18200000000000038, -0.120000000000001, -0.16575000000000095, -0.15200000000000102, -0.1225000000000005, -0.09275000000000055, -0.15249999999999986, -0.18100000000000094, -0.14525000000000077, -0.14300000000000068, -0.20575000000000188, -0.16774999999999984, -0.0702499999999997, -0.10350000000000215, -0.2104999999999997, -0.17525000000000013, -0.13199999999999967, -0.14450000000000074, -0.2494999999999994, -0.14649999999999963, 0.004000000000001336, -0.14425000000000132], zp_timestamp='2026-02-15T22:16:00')
2026-02-16T00:19:35.870 [DEBUG] [Thread-213778] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:19:35.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:19:35.974 [DEBUG] [Thread-213781] [transport.py] [_log()] starting thread (client mode): 0xa2d00cd0
2026-02-16T00:19:35.974 [DEBUG] [Thread-213781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:19:35.990 [DEBUG] [Thread-213781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:19:35.990 [INFO] [Thread-213781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] client lang: <none>
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] server lang: <none>
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] kex follows: False
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:19:36.001 [DEBUG] [Thread-213781] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:19:36.002 [DEBUG] [Thread-213781] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:19:36.002 [DEBUG] [Thread-213781] [transport.py] [_log()] Compression: none
2026-02-16T00:19:36.002 [DEBUG] [Thread-213781] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:19:36.064 [DEBUG] [Thread-213781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:19:36.065 [DEBUG] [Thread-213781] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:19:36.066 [DEBUG] [Thread-213781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:19:36.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:19:36.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:19:36.123 [DEBUG] [Thread-213781] [transport.py] [_log()] userauth is OK
2026-02-16T00:19:36.123 [DEBUG] [Thread-213781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:19:36.123 [DEBUG] [Thread-213781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:19:36.123 [DEBUG] [Thread-213781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:19:36.124 [DEBUG] [Thread-213781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:19:36.151 [INFO] [Thread-213781] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:19:36.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:19:36.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:19:36.999 [DEBUG] [Thread-213781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:19:37.000 [DEBUG] [Thread-213781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:19:37.047 [DEBUG] [Thread-213781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:19:37.048 [DEBUG] [Thread-213781] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:19:37.057 [DEBUG] [Thread-213781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:19:37.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:19:37.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:19:37.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:19:37.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:19:37.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:19:37.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:19:37.094 [DEBUG] [Thread-213781] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:19:37.907 [DEBUG] [Thread-213783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:19:46.655 [DEBUG] [Thread-213784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:01.708 [DEBUG] [Thread-213785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:20:07.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:20: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-02-16T00:20:09.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 19, 37), 9.77, 51.72, 0.0, 22.87, 14.09, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:20:09.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:19:37
2026-02-16T00:20:09.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:20:09.719 [DEBUG] [Thread-213786] [transport.py] [_log()] starting thread (client mode): 0xa2d10be0
2026-02-16T00:20:09.719 [DEBUG] [Thread-213786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:20:09.739 [DEBUG] [Thread-213786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:20:09.740 [INFO] [Thread-213786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:09.743 [DEBUG] [Thread-213786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] client lang: <none>
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] server lang: <none>
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] kex follows: False
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] Compression: none
2026-02-16T00:20:09.744 [DEBUG] [Thread-213786] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:20:09.753 [DEBUG] [Thread-213786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:20:09.753 [DEBUG] [Thread-213786] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:20:09.753 [DEBUG] [Thread-213786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:20:09.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:20:09.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:20:09.796 [DEBUG] [Thread-213786] [transport.py] [_log()] userauth is OK
2026-02-16T00:20:09.797 [DEBUG] [Thread-213786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:20:09.797 [DEBUG] [Thread-213786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:20:09.797 [DEBUG] [Thread-213786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:20:09.797 [DEBUG] [Thread-213786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:20:09.823 [INFO] [Thread-213786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:20:09.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:20:14.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:14.628 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:16.745 [DEBUG] [Thread-213788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:22.429 [DEBUG] [Thread-213786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:20:22.430 [DEBUG] [Thread-213786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:20:22.430 [DEBUG] [Thread-213786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:20:22.471 [DEBUG] [Thread-213786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:20:22.471 [DEBUG] [Thread-213786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:20:22.474 [DEBUG] [Thread-213786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:20:22.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:20:22.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:20:22.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:20:22.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:20:22.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:20:22.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:20:22.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:20:22.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:20:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:20:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.930309 -999.00  +13.80  20.05     56   +5.40 1 1 1 1 1     0    0 7.86 -29.66 ZNESW 19.8 20.1 139.4 24.8 14.1 -24.0 14.0 -23.0 13.8 -21.9 14.1 -23.0
2026-02-16T00:20:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:20:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:20:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.930309
2026-02-16T00:20:22.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:20:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:20:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:20:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:20:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:20:22.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:19:37', tmtdew=9.77, humidity=51.72, cloud=0.0, wind=22.87, temperature=14.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:19:37', seeing=2.03, atlas_timestamp='2026-02-15T22:19:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.19625000000000092, -0.17474999999999952, -0.20674999999999955, -0.20450000000000124, -0.20650000000000013, -0.1842499999999987, -0.14449999999999896, -0.12674999999999947, -0.1225000000000005, -0.1269999999999989, -0.24575000000000102, -0.18200000000000038, -0.120000000000001, -0.16575000000000095, -0.15200000000000102, -0.1225000000000005, -0.09275000000000055, -0.15249999999999986, -0.18100000000000094, -0.14525000000000077, -0.14300000000000068, -0.20575000000000188, -0.16774999999999984, -0.0702499999999997, -0.10350000000000215, -0.2104999999999997, -0.17525000000000013, -0.13199999999999967, -0.14450000000000074, -0.2494999999999994, -0.14649999999999963, 0.004000000000001336, -0.14425000000000132], zp_timestamp='2026-02-15T22:16:00')
2026-02-16T00:20:22.563 [DEBUG] [Thread-213786] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:20:22.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:20:22.657 [DEBUG] [Thread-213790] [transport.py] [_log()] starting thread (client mode): 0xa2d11f30
2026-02-16T00:20:22.657 [DEBUG] [Thread-213790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:20:22.674 [DEBUG] [Thread-213790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:20:22.675 [INFO] [Thread-213790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:20:22.683 [DEBUG] [Thread-213790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:22.684 [DEBUG] [Thread-213790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] client lang: <none>
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] server lang: <none>
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] kex follows: False
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:20:22.685 [DEBUG] [Thread-213790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:20:22.686 [DEBUG] [Thread-213790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:20:22.686 [DEBUG] [Thread-213790] [transport.py] [_log()] Compression: none
2026-02-16T00:20:22.686 [DEBUG] [Thread-213790] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:20:22.745 [DEBUG] [Thread-213790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:20:22.745 [DEBUG] [Thread-213790] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:20:22.746 [DEBUG] [Thread-213790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:20:22.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:20:22.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:20:22.800 [DEBUG] [Thread-213790] [transport.py] [_log()] userauth is OK
2026-02-16T00:20:22.801 [DEBUG] [Thread-213790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:20:22.801 [DEBUG] [Thread-213790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:20:22.801 [DEBUG] [Thread-213790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:20:22.801 [DEBUG] [Thread-213790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:20:22.819 [INFO] [Thread-213790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:20:22.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:20:22.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:20:23.631 [DEBUG] [Thread-213790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:20:23.631 [DEBUG] [Thread-213790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:20:23.679 [DEBUG] [Thread-213790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:20:23.680 [DEBUG] [Thread-213790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:20:23.689 [DEBUG] [Thread-213790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:20:23.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:20:23.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:20:23.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:20:23.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:20:23.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:20:23.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:20:23.725 [DEBUG] [Thread-213790] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:20:31.787 [DEBUG] [Thread-213792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:37.965 [DEBUG] [Thread-213793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:46.839 [DEBUG] [Thread-213794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:20:53.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:20:53.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:20:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:20:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 20, 13), 9.64, 51.86, 0.0, 18.99, 13.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:20:55.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:20:13
2026-02-16T00:20:56.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:20:56.172 [DEBUG] [Thread-213795] [transport.py] [_log()] starting thread (client mode): 0xa57c2110
2026-02-16T00:20:56.173 [DEBUG] [Thread-213795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:20:56.194 [DEBUG] [Thread-213795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:20:56.194 [INFO] [Thread-213795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:20:56.197 [DEBUG] [Thread-213795] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:20:56.197 [DEBUG] [Thread-213795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] client lang: <none>
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] server lang: <none>
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] kex follows: False
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:20:56.198 [DEBUG] [Thread-213795] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:20:56.199 [DEBUG] [Thread-213795] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:20:56.199 [DEBUG] [Thread-213795] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:20:56.199 [DEBUG] [Thread-213795] [transport.py] [_log()] Compression: none
2026-02-16T00:20:56.199 [DEBUG] [Thread-213795] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:20:56.218 [DEBUG] [Thread-213795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:20:56.219 [DEBUG] [Thread-213795] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:20:56.219 [DEBUG] [Thread-213795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:20:56.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:20:56.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:20:56.221 [DEBUG] [Thread-213795] [transport.py] [_log()] userauth is OK
2026-02-16T00:20:56.222 [DEBUG] [Thread-213795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:20:56.222 [DEBUG] [Thread-213795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:20:56.222 [DEBUG] [Thread-213795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:20:56.222 [DEBUG] [Thread-213795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:20:56.258 [INFO] [Thread-213795] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:20:56.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:20:56.886 [DEBUG] [Thread-213795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:20:56.886 [DEBUG] [Thread-213795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:20:56.886 [DEBUG] [Thread-213795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:20:56.927 [DEBUG] [Thread-213795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:20:56.928 [DEBUG] [Thread-213795] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:20:56.931 [DEBUG] [Thread-213795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:20:56.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:20:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:20:56.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:20:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:20:56.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:20:56.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:20:56.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:20:56.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:20:56.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:20:56.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.930657 -999.00  +13.80  19.20     56   +5.30 1 1 1 1 1     0    0 7.91 -31.67 ZNESW 15.3 19.2 133.8 23.9 14.1 -24.1 14.0 -23.0 13.8 -21.8 14.1 -23.2
2026-02-16T00:20:56.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:20:56.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:20:56.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.930657
2026-02-16T00:20:56.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:20:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:20:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:20:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:20:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:20:56.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:20:13', tmtdew=9.64, humidity=51.86, cloud=0.0, wind=18.99, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:20:48', seeing=2.2, atlas_timestamp='2026-02-15T22:20:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.19625000000000092, -0.17474999999999952, -0.20674999999999955, -0.20450000000000124, -0.20650000000000013, -0.1842499999999987, -0.14449999999999896, -0.12674999999999947, -0.1225000000000005, -0.1269999999999989, -0.24575000000000102, -0.18200000000000038, -0.120000000000001, -0.16575000000000095, -0.15200000000000102, -0.1225000000000005, -0.09275000000000055, -0.15249999999999986, -0.18100000000000094, -0.14525000000000077, -0.14300000000000068, -0.20575000000000188, -0.16774999999999984, -0.0702499999999997, -0.10350000000000215, -0.2104999999999997, -0.17525000000000013, -0.13199999999999967, -0.14450000000000074, -0.2494999999999994, -0.14649999999999963, 0.004000000000001336, -0.14425000000000132], zp_timestamp='2026-02-15T22:16:00')
2026-02-16T00:20:56.959 [DEBUG] [Thread-213795] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:20:57.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:20:57.056 [DEBUG] [Thread-213798] [transport.py] [_log()] starting thread (client mode): 0xa2d13dc0
2026-02-16T00:20:57.056 [DEBUG] [Thread-213798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:20:57.071 [DEBUG] [Thread-213798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:20:57.071 [INFO] [Thread-213798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:20:57.078 [DEBUG] [Thread-213798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] client lang: <none>
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] server lang: <none>
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] kex follows: False
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] Compression: none
2026-02-16T00:20:57.079 [DEBUG] [Thread-213798] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:20:57.136 [DEBUG] [Thread-213798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:20:57.137 [DEBUG] [Thread-213798] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:20:57.138 [DEBUG] [Thread-213798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:20:57.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:20:57.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:20:57.192 [DEBUG] [Thread-213798] [transport.py] [_log()] userauth is OK
2026-02-16T00:20:57.192 [DEBUG] [Thread-213798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:20:57.193 [DEBUG] [Thread-213798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:20:57.193 [DEBUG] [Thread-213798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:20:57.193 [DEBUG] [Thread-213798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:20:57.211 [INFO] [Thread-213798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:20:57.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:20:57.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:20:58.016 [DEBUG] [Thread-213798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:20:58.017 [DEBUG] [Thread-213798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:20:58.065 [DEBUG] [Thread-213798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:20:58.065 [DEBUG] [Thread-213798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:20:58.074 [DEBUG] [Thread-213798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:20:58.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:20:58.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:20:58.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:20:58.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:20:58.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:20:58.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:20:58.110 [DEBUG] [Thread-213798] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:21:01.185 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:01.872 [DEBUG] [Thread-213800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:14.828 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:14.829 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:16.928 [DEBUG] [Thread-213801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:28.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:21:28.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:21:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:21:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 20, 48), 9.61, 51.94, 0.0, 20.45, 13.79, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:21:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:20:48
2026-02-16T00:21:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:21:30.740 [DEBUG] [Thread-213802] [transport.py] [_log()] starting thread (client mode): 0xa2d02b30
2026-02-16T00:21:30.741 [DEBUG] [Thread-213802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:21:30.761 [DEBUG] [Thread-213802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:21:30.761 [INFO] [Thread-213802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:21:30.764 [DEBUG] [Thread-213802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] client lang: <none>
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] server lang: <none>
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] kex follows: False
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] Compression: none
2026-02-16T00:21:30.765 [DEBUG] [Thread-213802] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:21:30.781 [DEBUG] [Thread-213802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:21:30.781 [DEBUG] [Thread-213802] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:21:30.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:21:30.783 [DEBUG] [Thread-213802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:21:30.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:21:30.785 [DEBUG] [Thread-213802] [transport.py] [_log()] userauth is OK
2026-02-16T00:21:30.785 [DEBUG] [Thread-213802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:21:30.785 [DEBUG] [Thread-213802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:21:30.785 [DEBUG] [Thread-213802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:21:30.785 [DEBUG] [Thread-213802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:21:30.821 [INFO] [Thread-213802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:21:30.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:21:31.494 [DEBUG] [Thread-213802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:21:31.495 [DEBUG] [Thread-213802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:21:31.495 [DEBUG] [Thread-213802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:21:31.535 [DEBUG] [Thread-213802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:21:31.536 [DEBUG] [Thread-213802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:21:31.539 [DEBUG] [Thread-213802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:21:31.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:21:31.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:21:31.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:21:31.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:21:31.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:21:31.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:21:31.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:21:31.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:21:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:21:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.931004 -999.00  +13.70  17.48     56   +5.30 1 1 1 1 1     0    0 7.83 -34.20 ZNESW 20.8 17.5 145.8 21.4 14.1 -24.1 14.0 -23.0 13.7 -21.9 14.1 -23.1
2026-02-16T00:21:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:21:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:21:31.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.931004
2026-02-16T00:21:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:21:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:21:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:21:31.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:21:31.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:21:31.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:20:48', tmtdew=9.61, humidity=51.94, cloud=0.0, wind=20.45, temperature=13.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:21:23', seeing=2.27, atlas_timestamp='2026-02-15T22:20:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:19:00')
2026-02-16T00:21:31.566 [DEBUG] [Thread-213802] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:21:31.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:21:31.661 [DEBUG] [Thread-213805] [transport.py] [_log()] starting thread (client mode): 0xa57e05b0
2026-02-16T00:21:31.661 [DEBUG] [Thread-213805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:21:31.676 [DEBUG] [Thread-213805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:21:31.677 [INFO] [Thread-213805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:21:31.684 [DEBUG] [Thread-213805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] client lang: <none>
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] server lang: <none>
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] kex follows: False
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] Compression: none
2026-02-16T00:21:31.685 [DEBUG] [Thread-213805] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:21:31.747 [DEBUG] [Thread-213805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:21:31.747 [DEBUG] [Thread-213805] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:21:31.748 [DEBUG] [Thread-213805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:21:31.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:21:31.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:21:31.808 [DEBUG] [Thread-213805] [transport.py] [_log()] userauth is OK
2026-02-16T00:21:31.808 [DEBUG] [Thread-213805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:21:31.809 [DEBUG] [Thread-213805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:21:31.809 [DEBUG] [Thread-213805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:21:31.809 [DEBUG] [Thread-213805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:21:31.828 [INFO] [Thread-213805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:21:31.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:21:31.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:21:31.961 [DEBUG] [Thread-213807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:32.674 [DEBUG] [Thread-213805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:21:32.674 [DEBUG] [Thread-213805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:21:32.722 [DEBUG] [Thread-213805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:21:32.722 [DEBUG] [Thread-213805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:21:32.731 [DEBUG] [Thread-213805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:21:32.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:21:32.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:21:32.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:21:32.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:21:32.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:21:32.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:21:32.766 [DEBUG] [Thread-213805] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:21:38.017 [DEBUG] [Thread-213808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:21:47.012 [DEBUG] [Thread-213809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:02.041 [DEBUG] [Thread-213810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:02.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:22:02.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:22:02.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:22:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 21, 23), 9.61, 51.94, 0.0, 22.43, 13.79, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:22:04.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:21:23
2026-02-16T00:22:05.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:22:05.499 [DEBUG] [Thread-213811] [transport.py] [_log()] starting thread (client mode): 0xa2d6f0d0
2026-02-16T00:22:05.500 [DEBUG] [Thread-213811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:22:05.520 [DEBUG] [Thread-213811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:22:05.520 [INFO] [Thread-213811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:22:05.523 [DEBUG] [Thread-213811] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:22:05.523 [DEBUG] [Thread-213811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:22:05.523 [DEBUG] [Thread-213811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:22:05.523 [DEBUG] [Thread-213811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] client lang: <none>
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] server lang: <none>
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] kex follows: False
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:22:05.524 [DEBUG] [Thread-213811] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:22:05.525 [DEBUG] [Thread-213811] [transport.py] [_log()] Compression: none
2026-02-16T00:22:05.525 [DEBUG] [Thread-213811] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:22:05.543 [DEBUG] [Thread-213811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:22:05.543 [DEBUG] [Thread-213811] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:22:05.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:22:05.545 [DEBUG] [Thread-213811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:22:05.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:22:05.547 [DEBUG] [Thread-213811] [transport.py] [_log()] userauth is OK
2026-02-16T00:22:05.548 [DEBUG] [Thread-213811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:22:05.548 [DEBUG] [Thread-213811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:22:05.548 [DEBUG] [Thread-213811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:22:05.548 [DEBUG] [Thread-213811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:22:05.562 [INFO] [Thread-213811] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:22:05.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:22:06.164 [DEBUG] [Thread-213811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:22:06.164 [DEBUG] [Thread-213811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:22:06.165 [DEBUG] [Thread-213811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:22:06.206 [DEBUG] [Thread-213811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:22:06.206 [DEBUG] [Thread-213811] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:22:06.209 [DEBUG] [Thread-213811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:22:06.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:22:06.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:22:06.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:22:06.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:22:06.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:22:06.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:22:06.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:22:06.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:22:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:22:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.931351 -999.00  +13.70  19.99     57   +5.30 1 1 1 1 1     0    0 7.75 -33.07 ZNESW 18.2 20.0 146.4 25.3 14.0 -24.0 14.0 -22.8 13.8 -21.8 14.1 -23.2
2026-02-16T00:22:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:22:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:22:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.931351
2026-02-16T00:22:06.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:22:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:22:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:22:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:22:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:22:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:21:23', tmtdew=9.61, humidity=51.94, cloud=0.0, wind=22.43, temperature=13.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:21:59', seeing=2.45, atlas_timestamp='2026-02-15T22:21:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:19:00')
2026-02-16T00:22:06.237 [DEBUG] [Thread-213811] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:22:06.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:22:06.332 [DEBUG] [Thread-213814] [transport.py] [_log()] starting thread (client mode): 0xa2d6e440
2026-02-16T00:22:06.332 [DEBUG] [Thread-213814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:22:06.350 [DEBUG] [Thread-213814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:22:06.350 [INFO] [Thread-213814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:06.362 [DEBUG] [Thread-213814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] client lang: <none>
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] server lang: <none>
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] kex follows: False
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] Compression: none
2026-02-16T00:22:06.363 [DEBUG] [Thread-213814] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:22:06.417 [DEBUG] [Thread-213814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:22:06.417 [DEBUG] [Thread-213814] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:22:06.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:22:06.418 [DEBUG] [Thread-213814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:22:06.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:22:06.476 [DEBUG] [Thread-213814] [transport.py] [_log()] userauth is OK
2026-02-16T00:22:06.477 [DEBUG] [Thread-213814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:22:06.477 [DEBUG] [Thread-213814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:22:06.477 [DEBUG] [Thread-213814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:22:06.477 [DEBUG] [Thread-213814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:22:06.495 [INFO] [Thread-213814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:22:06.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:22:06.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:22:07.316 [DEBUG] [Thread-213814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:22:07.317 [DEBUG] [Thread-213814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:22:07.365 [DEBUG] [Thread-213814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:22:07.365 [DEBUG] [Thread-213814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:22:07.375 [DEBUG] [Thread-213814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:22:07.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:22:07.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:22:07.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:22:07.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:22:07.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:22:07.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:22:07.411 [DEBUG] [Thread-213814] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:22:15.030 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:15.031 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:17.072 [DEBUG] [Thread-213816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:32.123 [DEBUG] [Thread-213817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:35.342 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:37.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:22:37.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:22:37.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:22:38.085 [DEBUG] [Thread-213818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:22:39.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 21, 59), 9.56, 52.61, 0.0, 23.27, 13.76, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:22:39.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:21:59
2026-02-16T00:22:40.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:22:40.151 [DEBUG] [Thread-213819] [transport.py] [_log()] starting thread (client mode): 0xa2d6f130
2026-02-16T00:22:40.151 [DEBUG] [Thread-213819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:22:40.171 [DEBUG] [Thread-213819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:22:40.172 [INFO] [Thread-213819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] client lang: <none>
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] server lang: <none>
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] kex follows: False
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] Compression: none
2026-02-16T00:22:40.175 [DEBUG] [Thread-213819] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:22:40.191 [DEBUG] [Thread-213819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:22:40.191 [DEBUG] [Thread-213819] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:22:40.192 [DEBUG] [Thread-213819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:22:40.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:22:40.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:22:40.232 [DEBUG] [Thread-213819] [transport.py] [_log()] userauth is OK
2026-02-16T00:22:40.232 [DEBUG] [Thread-213819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:22:40.232 [DEBUG] [Thread-213819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:22:40.233 [DEBUG] [Thread-213819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:22:40.233 [DEBUG] [Thread-213819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:22:40.253 [INFO] [Thread-213819] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:22:40.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:22:40.858 [DEBUG] [Thread-213819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:22:40.864 [DEBUG] [Thread-213819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:22:40.864 [DEBUG] [Thread-213819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:22:40.899 [DEBUG] [Thread-213819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:22:40.899 [DEBUG] [Thread-213819] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:22:40.901 [DEBUG] [Thread-213819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:22:40.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:22:40.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:22:40.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:22:40.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:22:40.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:22:40.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:22:40.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.932046 -999.00  +13.70  20.29     57   +5.40 1 1 1 1 1     0    0 7.57 -37.68 ZNESW 19.6 20.3 142.6 25.9 14.1 -24.0 14.0 -22.9 13.8 -21.8 14.0 -22.9
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.932046
2026-02-16T00:22:40.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:22:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:22:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:22:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:22:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:22:40.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:21:59', tmtdew=9.56, humidity=52.61, cloud=0.0, wind=23.27, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:22:35', seeing=1.89, atlas_timestamp='2026-02-15T22:22:08.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:19:00')
2026-02-16T00:22:40.923 [DEBUG] [Thread-213819] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:22:40.994 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:22:41.006 [DEBUG] [Thread-213822] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-16T00:22:41.006 [DEBUG] [Thread-213822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:22:41.020 [DEBUG] [Thread-213822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:22:41.020 [INFO] [Thread-213822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:41.028 [DEBUG] [Thread-213822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] client lang: <none>
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] server lang: <none>
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] kex follows: False
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] Compression: none
2026-02-16T00:22:41.029 [DEBUG] [Thread-213822] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:22:41.088 [DEBUG] [Thread-213822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:22:41.089 [DEBUG] [Thread-213822] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:22:41.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:22:41.090 [DEBUG] [Thread-213822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:22:41.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:22:41.145 [DEBUG] [Thread-213822] [transport.py] [_log()] userauth is OK
2026-02-16T00:22:41.145 [DEBUG] [Thread-213822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:22:41.145 [DEBUG] [Thread-213822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:22:41.145 [DEBUG] [Thread-213822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:22:41.146 [DEBUG] [Thread-213822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:22:41.164 [INFO] [Thread-213822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:22:41.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:22:41.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:22:42.018 [DEBUG] [Thread-213822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:22:42.018 [DEBUG] [Thread-213822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:22:42.066 [DEBUG] [Thread-213822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:22:42.066 [DEBUG] [Thread-213822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:22:42.075 [DEBUG] [Thread-213822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:22:42.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:22:42.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:22:42.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:22:42.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:22:42.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:22:42.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:22:42.112 [DEBUG] [Thread-213822] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:22:47.161 [DEBUG] [Thread-213824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:02.211 [DEBUG] [Thread-213825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:12.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:23:12.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:23:12.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:23:14.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 22, 34), 9.63, 52.22, 0.0, 25.83, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:23:14.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:22:34
2026-02-16T00:23:15.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:23:15.162 [DEBUG] [Thread-213826] [transport.py] [_log()] starting thread (client mode): 0xa2d001c0
2026-02-16T00:23:15.162 [DEBUG] [Thread-213826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:23:15.183 [DEBUG] [Thread-213826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:23:15.183 [INFO] [Thread-213826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] client lang: <none>
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] server lang: <none>
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] kex follows: False
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] Compression: none
2026-02-16T00:23:15.186 [DEBUG] [Thread-213826] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:23:15.205 [DEBUG] [Thread-213826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:23:15.205 [DEBUG] [Thread-213826] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:23:15.206 [DEBUG] [Thread-213826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:23:15.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:23:15.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:23:15.208 [DEBUG] [Thread-213826] [transport.py] [_log()] userauth is OK
2026-02-16T00:23:15.208 [DEBUG] [Thread-213826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:23:15.208 [DEBUG] [Thread-213826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:23:15.208 [DEBUG] [Thread-213826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:23:15.208 [DEBUG] [Thread-213826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:23:15.232 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:15.233 [INFO] [Thread-213826] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:23:15.233 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:15.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:23:15.956 [DEBUG] [Thread-213826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:23:15.957 [DEBUG] [Thread-213826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:23:15.957 [DEBUG] [Thread-213826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:23:15.997 [DEBUG] [Thread-213826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:23:15.998 [DEBUG] [Thread-213826] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:23:16.001 [DEBUG] [Thread-213826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:23:16.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:23:16.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:23:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:23:16.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:23:16.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:23:16.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:23:16.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:23:16.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:23:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:23:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.932393 -999.00  +13.80  23.19     57   +5.40 1 1 1 1 1     0    0 7.32 -42.24 ZNESW 19.8 23.2 150.4 27.3 14.1 -23.8 14.0 -22.8 13.8 -21.8 14.1 -23.1
2026-02-16T00:23:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:23:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:23:16.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.932393
2026-02-16T00:23:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:23:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:23:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:23:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:23:16.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:23:16.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:22:34', tmtdew=9.63, humidity=52.22, cloud=0.0, wind=25.83, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:23:10', seeing=2.09, atlas_timestamp='2026-02-15T22:22:38.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:19:00')
2026-02-16T00:23:16.028 [DEBUG] [Thread-213826] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:23:16.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:23:16.123 [DEBUG] [Thread-213829] [transport.py] [_log()] starting thread (client mode): 0xa2d6fc10
2026-02-16T00:23:16.123 [DEBUG] [Thread-213829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:23:16.139 [DEBUG] [Thread-213829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:23:16.139 [INFO] [Thread-213829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] client lang: <none>
2026-02-16T00:23:16.147 [DEBUG] [Thread-213829] [transport.py] [_log()] server lang: <none>
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] kex follows: False
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] Compression: none
2026-02-16T00:23:16.148 [DEBUG] [Thread-213829] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:23:16.204 [DEBUG] [Thread-213829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:23:16.205 [DEBUG] [Thread-213829] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:23:16.205 [DEBUG] [Thread-213829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:23:16.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:23:16.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:23:16.260 [DEBUG] [Thread-213829] [transport.py] [_log()] userauth is OK
2026-02-16T00:23:16.261 [DEBUG] [Thread-213829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:23:16.261 [DEBUG] [Thread-213829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:23:16.261 [DEBUG] [Thread-213829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:23:16.261 [DEBUG] [Thread-213829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:23:16.280 [INFO] [Thread-213829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:23:16.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:23:16.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:23:17.127 [DEBUG] [Thread-213829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:23:17.128 [DEBUG] [Thread-213829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:23:17.177 [DEBUG] [Thread-213829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:23:17.177 [DEBUG] [Thread-213829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:23:17.187 [DEBUG] [Thread-213829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:23:17.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:23:17.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:23:17.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:23:17.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:23:17.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:23:17.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:23:17.223 [DEBUG] [Thread-213829] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:23:17.245 [DEBUG] [Thread-213831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:32.305 [DEBUG] [Thread-213832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:38.139 [DEBUG] [Thread-213833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:23:47.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:23:47.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:23:47.341 [DEBUG] [Thread-213834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:23:49.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 23, 10), 9.56, 52.46, 0.0, 23.87, 13.78, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:23:49.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:23:10
2026-02-16T00:23:49.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:23:49.713 [DEBUG] [Thread-213835] [transport.py] [_log()] starting thread (client mode): 0xa2d120b0
2026-02-16T00:23:49.713 [DEBUG] [Thread-213835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:23:49.732 [DEBUG] [Thread-213835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:23:49.732 [INFO] [Thread-213835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:23:49.735 [DEBUG] [Thread-213835] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:23:49.735 [DEBUG] [Thread-213835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] client lang: <none>
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] server lang: <none>
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] kex follows: False
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:23:49.736 [DEBUG] [Thread-213835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:23:49.737 [DEBUG] [Thread-213835] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:23:49.737 [DEBUG] [Thread-213835] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:23:49.737 [DEBUG] [Thread-213835] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:23:49.737 [DEBUG] [Thread-213835] [transport.py] [_log()] Compression: none
2026-02-16T00:23:49.737 [DEBUG] [Thread-213835] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:23:49.755 [DEBUG] [Thread-213835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:23:49.756 [DEBUG] [Thread-213835] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:23:49.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:23:49.757 [DEBUG] [Thread-213835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:23:49.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:23:49.759 [DEBUG] [Thread-213835] [transport.py] [_log()] userauth is OK
2026-02-16T00:23:49.759 [DEBUG] [Thread-213835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:23:49.760 [DEBUG] [Thread-213835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:23:49.760 [DEBUG] [Thread-213835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:23:49.760 [DEBUG] [Thread-213835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:23:49.784 [INFO] [Thread-213835] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:23:49.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:23:50.428 [DEBUG] [Thread-213835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:23:50.428 [DEBUG] [Thread-213835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:23:50.429 [DEBUG] [Thread-213835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:23:50.469 [DEBUG] [Thread-213835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:23:50.469 [DEBUG] [Thread-213835] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:23:50.473 [DEBUG] [Thread-213835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:23:50.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:23:50.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:23:50.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:23:50.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:23:50.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:23:50.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:23:50.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:23:50.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:23:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:23:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.932740 -999.00  +13.80  16.96     57   +5.40 1 1 1 1 1     0    0 7.24 -43.35 ZNESW 16.3 17.0 141.4 24.3 14.1 -24.0 14.0 -22.8 13.8 -21.8 14.0 -23.0
2026-02-16T00:23:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:23:50.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:23:50.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.932740
2026-02-16T00:23:50.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:23:50.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:23:50.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:23:50.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:23:50.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:23:50.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:23:10', tmtdew=9.56, humidity=52.46, cloud=0.0, wind=23.87, temperature=13.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:23:46', seeing=2.31, atlas_timestamp='2026-02-15T22:23:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:19:00')
2026-02-16T00:23:50.498 [DEBUG] [Thread-213835] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:23:50.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:23:50.596 [DEBUG] [Thread-213838] [transport.py] [_log()] starting thread (client mode): 0xa57e31c0
2026-02-16T00:23:50.596 [DEBUG] [Thread-213838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:23:50.610 [DEBUG] [Thread-213838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:23:50.610 [INFO] [Thread-213838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:23:50.617 [DEBUG] [Thread-213838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:23:50.617 [DEBUG] [Thread-213838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:23:50.617 [DEBUG] [Thread-213838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] client lang: <none>
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] server lang: <none>
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] kex follows: False
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] Compression: none
2026-02-16T00:23:50.618 [DEBUG] [Thread-213838] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:23:50.676 [DEBUG] [Thread-213838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:23:50.677 [DEBUG] [Thread-213838] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:23:50.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:23:50.678 [DEBUG] [Thread-213838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:23:50.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:23:50.732 [DEBUG] [Thread-213838] [transport.py] [_log()] userauth is OK
2026-02-16T00:23:50.733 [DEBUG] [Thread-213838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:23:50.733 [DEBUG] [Thread-213838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:23:50.733 [DEBUG] [Thread-213838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:23:50.733 [DEBUG] [Thread-213838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:23:50.758 [INFO] [Thread-213838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:23:50.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:23:50.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:23:51.608 [DEBUG] [Thread-213838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:23:51.608 [DEBUG] [Thread-213838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:23:51.655 [DEBUG] [Thread-213838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:23:51.656 [DEBUG] [Thread-213838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:23:51.665 [DEBUG] [Thread-213838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:23:51.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:23:51.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:23:51.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:23:51.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:23:51.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:23:51.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:23:51.702 [DEBUG] [Thread-213838] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:24:02.375 [DEBUG] [Thread-213840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:08.974 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:15.434 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:15.436 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:17.427 [DEBUG] [Thread-213841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:21.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:24:21.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:24:21.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:24:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 23, 46), 9.55, 52.51, 0.0, 24.46, 13.81, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:24:23.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:23:46
2026-02-16T00:24:24.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:24:24.359 [DEBUG] [Thread-213842] [transport.py] [_log()] starting thread (client mode): 0xa2d6d780
2026-02-16T00:24:24.359 [DEBUG] [Thread-213842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:24:24.380 [DEBUG] [Thread-213842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:24:24.380 [INFO] [Thread-213842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] client lang: <none>
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] server lang: <none>
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] kex follows: False
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] Compression: none
2026-02-16T00:24:24.383 [DEBUG] [Thread-213842] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:24:24.398 [DEBUG] [Thread-213842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:24:24.398 [DEBUG] [Thread-213842] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:24:24.398 [DEBUG] [Thread-213842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:24:24.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:24:24.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:24:24.399 [DEBUG] [Thread-213842] [transport.py] [_log()] userauth is OK
2026-02-16T00:24:24.399 [DEBUG] [Thread-213842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:24:24.399 [DEBUG] [Thread-213842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:24:24.399 [DEBUG] [Thread-213842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:24:24.399 [DEBUG] [Thread-213842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:24:24.416 [INFO] [Thread-213842] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:24:24.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:24:25.019 [DEBUG] [Thread-213842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:24:25.019 [DEBUG] [Thread-213842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:24:25.020 [DEBUG] [Thread-213842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:24:25.060 [DEBUG] [Thread-213842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:24:25.060 [DEBUG] [Thread-213842] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:24:25.062 [DEBUG] [Thread-213842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:24:25.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:24:25.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:24:25.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:24:25.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:24:25.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:24:25.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:24:25.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:24:25.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:24:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:24:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.933087 -999.00  +13.80  16.70     57   +5.40 1 1 1 1 1     0    0 7.48 -44.31 ZNESW 19.1 16.7 149.6 22.4 14.1 -24.0 13.9 -22.8 13.8 -21.8 14.1 -23.0
2026-02-16T00:24:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:24:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:24:25.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.933087
2026-02-16T00:24:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:24:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:24:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:24:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:24:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:24:25.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:23:46', tmtdew=9.55, humidity=52.51, cloud=0.0, wind=24.46, temperature=13.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:23:46', seeing=2.31, atlas_timestamp='2026-02-15T22:23:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:23:00')
2026-02-16T00:24:25.082 [DEBUG] [Thread-213842] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:24:25.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:24:25.167 [DEBUG] [Thread-213845] [transport.py] [_log()] starting thread (client mode): 0xa81d5270
2026-02-16T00:24:25.167 [DEBUG] [Thread-213845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:24:25.182 [DEBUG] [Thread-213845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:24:25.182 [INFO] [Thread-213845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:24:25.192 [DEBUG] [Thread-213845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:24:25.192 [DEBUG] [Thread-213845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] client lang: <none>
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] server lang: <none>
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] kex follows: False
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] Compression: none
2026-02-16T00:24:25.193 [DEBUG] [Thread-213845] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:24:25.248 [DEBUG] [Thread-213845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:24:25.249 [DEBUG] [Thread-213845] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:24:25.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:24:25.250 [DEBUG] [Thread-213845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:24:25.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:24:25.313 [DEBUG] [Thread-213845] [transport.py] [_log()] userauth is OK
2026-02-16T00:24:25.314 [DEBUG] [Thread-213845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:24:25.314 [DEBUG] [Thread-213845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:24:25.314 [DEBUG] [Thread-213845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:24:25.314 [DEBUG] [Thread-213845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:24:25.359 [INFO] [Thread-213845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:24:25.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:24:25.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:24:26.185 [DEBUG] [Thread-213845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:24:26.185 [DEBUG] [Thread-213845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:24:26.233 [DEBUG] [Thread-213845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:24:26.233 [DEBUG] [Thread-213845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:24:26.243 [DEBUG] [Thread-213845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:24:26.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:24:26.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:24:26.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:24:26.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:24:26.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:24:26.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:24:26.277 [DEBUG] [Thread-213845] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:24:32.461 [DEBUG] [Thread-213847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:38.208 [DEBUG] [Thread-213848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:47.505 [DEBUG] [Thread-213849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:24:56.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:24:56.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:24:56.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:24:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 24, 21), 9.54, 52.51, 0.0, 23.96, 13.78, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:24:58.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:24:21
2026-02-16T00:24:58.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:24:58.797 [DEBUG] [Thread-213850] [transport.py] [_log()] starting thread (client mode): 0xa2d6c910
2026-02-16T00:24:58.797 [DEBUG] [Thread-213850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:24:58.818 [DEBUG] [Thread-213850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:24:58.818 [INFO] [Thread-213850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:24:58.821 [DEBUG] [Thread-213850] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:24:58.821 [DEBUG] [Thread-213850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:24:58.821 [DEBUG] [Thread-213850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:24:58.821 [DEBUG] [Thread-213850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:58.821 [DEBUG] [Thread-213850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] client lang: <none>
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] server lang: <none>
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] kex follows: False
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:24:58.822 [DEBUG] [Thread-213850] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:24:58.823 [DEBUG] [Thread-213850] [transport.py] [_log()] Compression: none
2026-02-16T00:24:58.823 [DEBUG] [Thread-213850] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:24:58.842 [DEBUG] [Thread-213850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:24:58.843 [DEBUG] [Thread-213850] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:24:58.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:24:58.844 [DEBUG] [Thread-213850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:24:58.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:24:58.846 [DEBUG] [Thread-213850] [transport.py] [_log()] userauth is OK
2026-02-16T00:24:58.847 [DEBUG] [Thread-213850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:24:58.847 [DEBUG] [Thread-213850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:24:58.847 [DEBUG] [Thread-213850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:24:58.847 [DEBUG] [Thread-213850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:24:58.881 [INFO] [Thread-213850] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:24:58.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:24:59.504 [DEBUG] [Thread-213850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:24:59.505 [DEBUG] [Thread-213850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:24:59.505 [DEBUG] [Thread-213850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:24:59.546 [DEBUG] [Thread-213850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:24:59.547 [DEBUG] [Thread-213850] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:24:59.550 [DEBUG] [Thread-213850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:24:59.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:24:59.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:24:59.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:24:59.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:24:59.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:24:59.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:24:59.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:24:59.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:24:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:24:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.933434 -999.00  +13.80  16.92     57   +5.50 1 1 1 1 1     0    0 7.42 -44.31 ZNESW 17.7 16.9 156.0 24.5 14.1 -24.0 14.0 -22.9 13.8 -21.8 14.1 -23.0
2026-02-16T00:24:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:24:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:24:59.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.933434
2026-02-16T00:24:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:24:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:24:59.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:24:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:24:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:24:59.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:24:21', tmtdew=9.54, humidity=52.51, cloud=0.0, wind=23.96, temperature=13.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:24:21', seeing=1.89, atlas_timestamp='2026-02-15T22:24:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:23:00')
2026-02-16T00:24:59.573 [DEBUG] [Thread-213850] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:24:59.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:24:59.673 [DEBUG] [Thread-213853] [transport.py] [_log()] starting thread (client mode): 0xa57e33d0
2026-02-16T00:24:59.673 [DEBUG] [Thread-213853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:24:59.688 [DEBUG] [Thread-213853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:24:59.688 [INFO] [Thread-213853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:24:59.696 [DEBUG] [Thread-213853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:24:59.696 [DEBUG] [Thread-213853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:24:59.696 [DEBUG] [Thread-213853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:24:59.696 [DEBUG] [Thread-213853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:59.696 [DEBUG] [Thread-213853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:24:59.696 [DEBUG] [Thread-213853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] client lang: <none>
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] server lang: <none>
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] kex follows: False
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] Compression: none
2026-02-16T00:24:59.697 [DEBUG] [Thread-213853] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:24:59.751 [DEBUG] [Thread-213853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:24:59.752 [DEBUG] [Thread-213853] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:24:59.752 [DEBUG] [Thread-213853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:24:59.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:24:59.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:24:59.808 [DEBUG] [Thread-213853] [transport.py] [_log()] userauth is OK
2026-02-16T00:24:59.808 [DEBUG] [Thread-213853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:24:59.808 [DEBUG] [Thread-213853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:24:59.808 [DEBUG] [Thread-213853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:24:59.808 [DEBUG] [Thread-213853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:24:59.826 [INFO] [Thread-213853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:24:59.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:24:59.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:25:00.643 [DEBUG] [Thread-213853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:25:00.644 [DEBUG] [Thread-213853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:25:00.691 [DEBUG] [Thread-213853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:25:00.691 [DEBUG] [Thread-213853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:25:00.700 [DEBUG] [Thread-213853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:25:00.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:25:00.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:25:00.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:25:00.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:25:00.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:25:00.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:25:00.736 [DEBUG] [Thread-213853] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:25:02.540 [DEBUG] [Thread-213855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:15.650 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:15.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:17.592 [DEBUG] [Thread-213856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:25:30.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:25:30.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:25:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 24, 57), 9.48, 52.56, 0.0, 26.13, 13.76, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:25:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:24:57
2026-02-16T00:25:32.629 [DEBUG] [Thread-213857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:32.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:25:33.090 [DEBUG] [Thread-213858] [transport.py] [_log()] starting thread (client mode): 0xa2d6c550
2026-02-16T00:25:33.090 [DEBUG] [Thread-213858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:25:33.110 [DEBUG] [Thread-213858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:25:33.110 [INFO] [Thread-213858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:25:33.113 [DEBUG] [Thread-213858] [transport.py] [_log()] client lang: <none>
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] server lang: <none>
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] kex follows: False
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] Compression: none
2026-02-16T00:25:33.114 [DEBUG] [Thread-213858] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:25:33.130 [DEBUG] [Thread-213858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:25:33.131 [DEBUG] [Thread-213858] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:25:33.131 [DEBUG] [Thread-213858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:25:33.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:25:33.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:25:33.133 [DEBUG] [Thread-213858] [transport.py] [_log()] userauth is OK
2026-02-16T00:25:33.134 [DEBUG] [Thread-213858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:25:33.134 [DEBUG] [Thread-213858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:25:33.134 [DEBUG] [Thread-213858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:25:33.134 [DEBUG] [Thread-213858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:25:33.158 [INFO] [Thread-213858] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:25:33.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:25:33.810 [DEBUG] [Thread-213858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:25:33.810 [DEBUG] [Thread-213858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:25:33.811 [DEBUG] [Thread-213858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:25:33.851 [DEBUG] [Thread-213858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:25:33.852 [DEBUG] [Thread-213858] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:25:33.855 [DEBUG] [Thread-213858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:25:33.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:25:33.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:25:33.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:25:33.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:25:33.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:25:33.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:25:33.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:25:33.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:25:33.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:25:33.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.933782 -999.00  +13.80  17.96     57   +5.50 1 1 1 1 1     0    0 7.50 -40.26 ZNESW 15.4 18.0 160.6 24.5 14.1 -23.9 14.0 -22.9 13.8 -21.8 14.1 -23.1
2026-02-16T00:25:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:25:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:25:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.933782
2026-02-16T00:25:33.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:25:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:25:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:25:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:25:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:25:33.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:24:57', tmtdew=9.48, humidity=52.56, cloud=0.0, wind=26.13, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:24:57', seeing=1.87, atlas_timestamp='2026-02-15T22:24:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:23:00')
2026-02-16T00:25:33.882 [DEBUG] [Thread-213858] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:25:33.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:25:33.979 [DEBUG] [Thread-213861] [transport.py] [_log()] starting thread (client mode): 0xa5771480
2026-02-16T00:25:33.979 [DEBUG] [Thread-213861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:25:33.994 [DEBUG] [Thread-213861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:25:33.994 [INFO] [Thread-213861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] client lang: <none>
2026-02-16T00:25:34.002 [DEBUG] [Thread-213861] [transport.py] [_log()] server lang: <none>
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] kex follows: False
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] Compression: none
2026-02-16T00:25:34.003 [DEBUG] [Thread-213861] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:25:34.060 [DEBUG] [Thread-213861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:25:34.061 [DEBUG] [Thread-213861] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:25:34.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:25:34.062 [DEBUG] [Thread-213861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:25:34.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:25:34.116 [DEBUG] [Thread-213861] [transport.py] [_log()] userauth is OK
2026-02-16T00:25:34.117 [DEBUG] [Thread-213861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:25:34.117 [DEBUG] [Thread-213861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:25:34.117 [DEBUG] [Thread-213861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:25:34.117 [DEBUG] [Thread-213861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:25:34.135 [INFO] [Thread-213861] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:25:34.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:25:34.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:25:34.945 [DEBUG] [Thread-213861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:25:34.946 [DEBUG] [Thread-213861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:25:34.993 [DEBUG] [Thread-213861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:25:34.993 [DEBUG] [Thread-213861] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:25:35.002 [DEBUG] [Thread-213861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:25:35.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:25:35.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:25:35.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:25:35.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:25:35.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:25:35.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:25:35.039 [DEBUG] [Thread-213861] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:25:38.276 [DEBUG] [Thread-213863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:43.034 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:25:47.666 [DEBUG] [Thread-213864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:02.719 [DEBUG] [Thread-213865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:05.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:26:05.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:26:05.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:26:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 25, 32), 9.49, 52.53, 0.0, 25.0, 13.76, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:26:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:25:32
2026-02-16T00:26:07.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:26:07.596 [DEBUG] [Thread-213866] [transport.py] [_log()] starting thread (client mode): 0xa2d01ea0
2026-02-16T00:26:07.596 [DEBUG] [Thread-213866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:26:07.616 [DEBUG] [Thread-213866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:26:07.616 [INFO] [Thread-213866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] client lang: <none>
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] server lang: <none>
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] kex follows: False
2026-02-16T00:26:07.620 [DEBUG] [Thread-213866] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:26:07.621 [DEBUG] [Thread-213866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:26:07.621 [DEBUG] [Thread-213866] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:26:07.621 [DEBUG] [Thread-213866] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:26:07.621 [DEBUG] [Thread-213866] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:26:07.621 [DEBUG] [Thread-213866] [transport.py] [_log()] Compression: none
2026-02-16T00:26:07.621 [DEBUG] [Thread-213866] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:26:07.640 [DEBUG] [Thread-213866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:26:07.641 [DEBUG] [Thread-213866] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:26:07.641 [DEBUG] [Thread-213866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:26:07.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:26:07.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:26:07.644 [DEBUG] [Thread-213866] [transport.py] [_log()] userauth is OK
2026-02-16T00:26:07.644 [DEBUG] [Thread-213866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:26:07.644 [DEBUG] [Thread-213866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:26:07.644 [DEBUG] [Thread-213866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:26:07.645 [DEBUG] [Thread-213866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:26:07.665 [INFO] [Thread-213866] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:26:07.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:26:08.284 [DEBUG] [Thread-213866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:26:08.284 [DEBUG] [Thread-213866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:26:08.285 [DEBUG] [Thread-213866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:26:08.325 [DEBUG] [Thread-213866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:26:08.326 [DEBUG] [Thread-213866] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:26:08.328 [DEBUG] [Thread-213866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:26:08.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:26:08.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:26:08.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:26:08.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:26:08.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:26:08.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:26:08.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:26:08.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:26:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:26:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.934476 -999.00  +13.70  18.94     57   +5.40 1 1 1 1 1     0    0 7.58 -36.06 ZNESW 19.1 18.9 145.8 24.8 14.1 -24.0 13.9 -22.9 13.7 -21.7 14.1 -22.9
2026-02-16T00:26:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:26:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:26:08.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.934476
2026-02-16T00:26:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:26:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:26:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:26:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:26:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:26:08.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:25:32', tmtdew=9.49, humidity=52.53, cloud=0.0, wind=25.0, temperature=13.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:25:32', seeing=1.66, atlas_timestamp='2026-02-15T22:25:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:23:00')
2026-02-16T00:26:08.355 [DEBUG] [Thread-213866] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:26:08.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:26:08.450 [DEBUG] [Thread-213869] [transport.py] [_log()] starting thread (client mode): 0xa2d03430
2026-02-16T00:26:08.450 [DEBUG] [Thread-213869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:26:08.468 [DEBUG] [Thread-213869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:26:08.468 [INFO] [Thread-213869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:26:08.476 [DEBUG] [Thread-213869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:26:08.476 [DEBUG] [Thread-213869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:26:08.476 [DEBUG] [Thread-213869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:26:08.476 [DEBUG] [Thread-213869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:08.476 [DEBUG] [Thread-213869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:08.476 [DEBUG] [Thread-213869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] client lang: <none>
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] server lang: <none>
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] kex follows: False
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] Compression: none
2026-02-16T00:26:08.477 [DEBUG] [Thread-213869] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:26:08.535 [DEBUG] [Thread-213869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:26:08.535 [DEBUG] [Thread-213869] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:26:08.536 [DEBUG] [Thread-213869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:26:08.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:26:08.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:26:08.593 [DEBUG] [Thread-213869] [transport.py] [_log()] userauth is OK
2026-02-16T00:26:08.593 [DEBUG] [Thread-213869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:26:08.593 [DEBUG] [Thread-213869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:26:08.593 [DEBUG] [Thread-213869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:26:08.593 [DEBUG] [Thread-213869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:26:08.608 [INFO] [Thread-213869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:26:08.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:26:08.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:26:09.419 [DEBUG] [Thread-213869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:26:09.419 [DEBUG] [Thread-213869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:26:09.467 [DEBUG] [Thread-213869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:26:09.468 [DEBUG] [Thread-213869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:26:09.477 [DEBUG] [Thread-213869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:26:09.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:26:09.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:26:09.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:26:09.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:26:09.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:26:09.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:26:09.514 [DEBUG] [Thread-213869] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:26:15.851 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:15.852 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:17.755 [DEBUG] [Thread-213871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:32.807 [DEBUG] [Thread-213872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:38.335 [DEBUG] [Thread-213873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:26:39.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:26:39.524 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:26:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:26:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 26, 7), 9.44, 52.69, 0.0, 24.44, 13.68, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:26:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:26:07
2026-02-16T00:26:41.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:26:41.864 [DEBUG] [Thread-213874] [transport.py] [_log()] starting thread (client mode): 0xa2d6e230
2026-02-16T00:26:41.864 [DEBUG] [Thread-213874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:26:41.883 [DEBUG] [Thread-213874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:26:41.883 [INFO] [Thread-213874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:26:41.886 [DEBUG] [Thread-213874] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:26:41.886 [DEBUG] [Thread-213874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] client lang: <none>
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] server lang: <none>
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] kex follows: False
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:26:41.887 [DEBUG] [Thread-213874] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:26:41.888 [DEBUG] [Thread-213874] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:26:41.888 [DEBUG] [Thread-213874] [transport.py] [_log()] Compression: none
2026-02-16T00:26:41.888 [DEBUG] [Thread-213874] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:26:41.906 [DEBUG] [Thread-213874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:26:41.906 [DEBUG] [Thread-213874] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:26:41.907 [DEBUG] [Thread-213874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:26:41.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:26:41.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:26:41.909 [DEBUG] [Thread-213874] [transport.py] [_log()] userauth is OK
2026-02-16T00:26:41.909 [DEBUG] [Thread-213874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:26:41.909 [DEBUG] [Thread-213874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:26:41.909 [DEBUG] [Thread-213874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:26:41.909 [DEBUG] [Thread-213874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:26:41.927 [INFO] [Thread-213874] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:26:41.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:26:42.698 [DEBUG] [Thread-213874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:26:42.698 [DEBUG] [Thread-213874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:26:42.699 [DEBUG] [Thread-213874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:26:42.739 [DEBUG] [Thread-213874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:26:42.740 [DEBUG] [Thread-213874] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:26:42.743 [DEBUG] [Thread-213874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:26:42.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:26:42.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:26:42.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:26:42.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:26:42.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:26:42.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:26:42.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:26:42.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:26:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:26:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.934823 -999.00  +13.70  19.47     57   +5.50 1 1 1 1 1     0    0 7.58 -35.67 ZNESW 16.0 19.5 142.6 23.2 14.1 -23.9 14.0 -22.8 13.8 -21.8 14.1 -23.0
2026-02-16T00:26:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:26:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:26:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.934823
2026-02-16T00:26:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:26:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:26:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:26:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:26:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:26:42.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:26:07', tmtdew=9.44, humidity=52.69, cloud=0.0, wind=24.44, temperature=13.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:26:07', seeing=2.67, atlas_timestamp='2026-02-15T22:26:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.06125000000000114, -0.03575000000000017, -0.07174999999999976, -0.036000000000001364, -0.042500000000000426, -0.0007500000000000284, -0.031000000000000583, 0.010249999999999204, 0.015499999999999403, 0.030000000000001137, -0.07774999999999999, -0.028999999999999915, 0.022500000000000853, 0.02624999999999922, 0.0024999999999995026, -0.040000000000000924, 0.03725000000000023, 0.015499999999999403, 0.0005000000000006111, -0.003750000000000142, 0.019999999999999574, 0.010749999999998039, -0.025249999999999773, 0.004749999999999588, 0.030999999999998806, -0.04449999999999932, -0.024250000000000327, -0.0005000000000006111, 0.019999999999999574, -0.013999999999999346, 0.025500000000000966, 0.05900000000000105, -0.0002500000000011937], zp_timestamp='2026-02-15T22:23:00')
2026-02-16T00:26:42.770 [DEBUG] [Thread-213874] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:26:42.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:26:42.871 [DEBUG] [Thread-213877] [transport.py] [_log()] starting thread (client mode): 0xa81d5870
2026-02-16T00:26:42.872 [DEBUG] [Thread-213877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:26:42.887 [DEBUG] [Thread-213877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:26:42.887 [INFO] [Thread-213877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:26:42.894 [DEBUG] [Thread-213877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:26:42.894 [DEBUG] [Thread-213877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] client lang: <none>
2026-02-16T00:26:42.895 [DEBUG] [Thread-213877] [transport.py] [_log()] server lang: <none>
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] kex follows: False
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] Compression: none
2026-02-16T00:26:42.896 [DEBUG] [Thread-213877] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:26:42.951 [DEBUG] [Thread-213877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:26:42.952 [DEBUG] [Thread-213877] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:26:42.952 [DEBUG] [Thread-213877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:26:42.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:26:42.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:26:43.008 [DEBUG] [Thread-213877] [transport.py] [_log()] userauth is OK
2026-02-16T00:26:43.009 [DEBUG] [Thread-213877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:26:43.009 [DEBUG] [Thread-213877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:26:43.009 [DEBUG] [Thread-213877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:26:43.009 [DEBUG] [Thread-213877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:26:43.031 [INFO] [Thread-213877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:26:43.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:26:43.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:26:43.839 [DEBUG] [Thread-213877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:26:43.839 [DEBUG] [Thread-213877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:26:43.888 [DEBUG] [Thread-213877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:26:43.888 [DEBUG] [Thread-213877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:26:43.897 [DEBUG] [Thread-213877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:26:43.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:26:43.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:26:43.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:26:43.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:26:43.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:26:43.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:26:43.937 [DEBUG] [Thread-213877] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:26:47.840 [DEBUG] [Thread-213879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:02.898 [DEBUG] [Thread-213880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:13.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:27:13.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:27:13.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:27:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 26, 42), 9.54, 52.55, 0.0, 19.8, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:27:15.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:26:42
2026-02-16T00:27:16.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:16.054 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:16.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:27:16.278 [DEBUG] [Thread-213881] [transport.py] [_log()] starting thread (client mode): 0xa81d56f0
2026-02-16T00:27:16.278 [DEBUG] [Thread-213881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:27:16.300 [DEBUG] [Thread-213881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:27:16.301 [INFO] [Thread-213881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:27:16.304 [DEBUG] [Thread-213881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:27:16.304 [DEBUG] [Thread-213881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:27:16.304 [DEBUG] [Thread-213881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] client lang: <none>
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] server lang: <none>
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] kex follows: False
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] Compression: none
2026-02-16T00:27:16.305 [DEBUG] [Thread-213881] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:27:16.324 [DEBUG] [Thread-213881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:27:16.325 [DEBUG] [Thread-213881] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:27:16.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:27:16.326 [DEBUG] [Thread-213881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:27:16.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:27:16.328 [DEBUG] [Thread-213881] [transport.py] [_log()] userauth is OK
2026-02-16T00:27:16.328 [DEBUG] [Thread-213881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:27:16.328 [DEBUG] [Thread-213881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:27:16.328 [DEBUG] [Thread-213881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:27:16.329 [DEBUG] [Thread-213881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:27:16.364 [INFO] [Thread-213881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:27:16.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:27:17.003 [DEBUG] [Thread-213881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:27:17.004 [DEBUG] [Thread-213881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:27:17.004 [DEBUG] [Thread-213881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:27:17.044 [DEBUG] [Thread-213881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:27:17.045 [DEBUG] [Thread-213881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:27:17.048 [DEBUG] [Thread-213881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:27:17.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:27:17.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:27:17.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:27:17.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:27:17.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:27:17.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:27:17.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:27:17.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:27:17.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:27:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.935171 -999.00  +13.70  17.41     57   +5.40 1 1 1 1 1     0    0 7.35 -38.69 ZNESW 21.4 17.4 143.8 21.2 14.1 -24.0 13.9 -22.8 13.7 -21.8 14.1 -23.1
2026-02-16T00:27:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:27:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:27:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.935171
2026-02-16T00:27:17.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:27:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:27:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:27:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:27:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:27:17.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:26:42', tmtdew=9.54, humidity=52.55, cloud=0.0, wind=19.8, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:26:42', seeing=2.01, atlas_timestamp='2026-02-15T22:26:38.774', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:26:00')
2026-02-16T00:27:17.076 [DEBUG] [Thread-213881] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:27:17.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:27:17.181 [DEBUG] [Thread-213884] [transport.py] [_log()] starting thread (client mode): 0xa2d564d0
2026-02-16T00:27:17.181 [DEBUG] [Thread-213884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:27:17.195 [DEBUG] [Thread-213884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:27:17.195 [INFO] [Thread-213884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:27:17.202 [DEBUG] [Thread-213884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:27:17.202 [DEBUG] [Thread-213884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] client lang: <none>
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] server lang: <none>
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] kex follows: False
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] Compression: none
2026-02-16T00:27:17.203 [DEBUG] [Thread-213884] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:27:17.259 [DEBUG] [Thread-213884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:27:17.259 [DEBUG] [Thread-213884] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:27:17.259 [DEBUG] [Thread-213884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:27:17.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:27:17.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:27:17.323 [DEBUG] [Thread-213884] [transport.py] [_log()] userauth is OK
2026-02-16T00:27:17.323 [DEBUG] [Thread-213884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:27:17.323 [DEBUG] [Thread-213884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:27:17.323 [DEBUG] [Thread-213884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:27:17.323 [DEBUG] [Thread-213884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:27:17.337 [INFO] [Thread-213884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:27:17.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:27:17.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:27:17.368 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:17.931 [DEBUG] [Thread-213886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:18.203 [DEBUG] [Thread-213884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:27:18.204 [DEBUG] [Thread-213884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:27:18.251 [DEBUG] [Thread-213884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:27:18.251 [DEBUG] [Thread-213884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:27:18.260 [DEBUG] [Thread-213884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:27:18.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:27:18.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:27:18.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:27:18.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:27:18.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:27:18.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:27:18.297 [DEBUG] [Thread-213884] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:27:32.975 [DEBUG] [Thread-213887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:38.401 [DEBUG] [Thread-213888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:48.012 [DEBUG] [Thread-213889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:27:48.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:27:48.319 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:27:48.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:27:50.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 27, 17), 9.45, 52.86, 0.0, 24.67, 13.74, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:27:50.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:27:17
2026-02-16T00:27:50.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:27:50.693 [DEBUG] [Thread-213890] [transport.py] [_log()] starting thread (client mode): 0xa57715d0
2026-02-16T00:27:50.694 [DEBUG] [Thread-213890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:27:50.713 [DEBUG] [Thread-213890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:27:50.714 [INFO] [Thread-213890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:27:50.715 [DEBUG] [Thread-213890] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] client lang: <none>
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] server lang: <none>
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] kex follows: False
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:27:50.716 [DEBUG] [Thread-213890] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:27:50.717 [DEBUG] [Thread-213890] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:27:50.717 [DEBUG] [Thread-213890] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:27:50.717 [DEBUG] [Thread-213890] [transport.py] [_log()] Compression: none
2026-02-16T00:27:50.717 [DEBUG] [Thread-213890] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:27:50.737 [DEBUG] [Thread-213890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:27:50.737 [DEBUG] [Thread-213890] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:27:50.738 [DEBUG] [Thread-213890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:27:50.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:27:50.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:27:50.739 [DEBUG] [Thread-213890] [transport.py] [_log()] userauth is OK
2026-02-16T00:27:50.740 [DEBUG] [Thread-213890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:27:50.740 [DEBUG] [Thread-213890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:27:50.740 [DEBUG] [Thread-213890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:27:50.740 [DEBUG] [Thread-213890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:27:50.776 [INFO] [Thread-213890] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:27:50.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:27:51.412 [DEBUG] [Thread-213890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:27:51.412 [DEBUG] [Thread-213890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:27:51.412 [DEBUG] [Thread-213890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:27:51.453 [DEBUG] [Thread-213890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:27:51.453 [DEBUG] [Thread-213890] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:27:51.455 [DEBUG] [Thread-213890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:27:51.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:27:51.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:27:51.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:27:51.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:27:51.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:27:51.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:27:51.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:27:51.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:27:51.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:27:51.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.935518 -999.00  +13.70  13.60     57   +5.40 1 1 1 1 1     0    0 7.44 -39.34 ZNESW 20.6 13.6 147.8 24.9 14.1 -23.8 13.9 -22.8 13.7 -21.7 14.0 -22.9
2026-02-16T00:27:51.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:27:51.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:27:51.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.935518
2026-02-16T00:27:51.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:27:51.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:27:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:27:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:27:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:27:51.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:27:17', tmtdew=9.45, humidity=52.86, cloud=0.0, wind=24.67, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:27:18', seeing=1.83, atlas_timestamp='2026-02-15T22:27:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:26:00')
2026-02-16T00:27:51.480 [DEBUG] [Thread-213890] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:27:51.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:27:51.574 [DEBUG] [Thread-213893] [transport.py] [_log()] starting thread (client mode): 0xa5770a60
2026-02-16T00:27:51.574 [DEBUG] [Thread-213893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:27:51.589 [DEBUG] [Thread-213893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:27:51.589 [INFO] [Thread-213893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:27:51.596 [DEBUG] [Thread-213893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] client lang: <none>
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] server lang: <none>
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] kex follows: False
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] Compression: none
2026-02-16T00:27:51.597 [DEBUG] [Thread-213893] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:27:51.656 [DEBUG] [Thread-213893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:27:51.657 [DEBUG] [Thread-213893] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:27:51.657 [DEBUG] [Thread-213893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:27:51.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:27:51.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:27:51.712 [DEBUG] [Thread-213893] [transport.py] [_log()] userauth is OK
2026-02-16T00:27:51.712 [DEBUG] [Thread-213893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:27:51.712 [DEBUG] [Thread-213893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:27:51.713 [DEBUG] [Thread-213893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:27:51.713 [DEBUG] [Thread-213893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:27:51.735 [INFO] [Thread-213893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:27:51.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:27:51.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:27:52.609 [DEBUG] [Thread-213893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:27:52.609 [DEBUG] [Thread-213893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:27:52.657 [DEBUG] [Thread-213893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:27:52.657 [DEBUG] [Thread-213893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:27:52.666 [DEBUG] [Thread-213893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:27:52.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:27:52.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:27:52.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:27:52.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:27:52.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:27:52.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:27:52.700 [DEBUG] [Thread-213893] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:28:03.046 [DEBUG] [Thread-213895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:16.254 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:16.255 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:18.100 [DEBUG] [Thread-213896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:22.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:28:22.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:28:22.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:28:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 27, 53), 9.38, 53.24, 0.0, 22.99, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:28:24.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:27:53
2026-02-16T00:28:25.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:28:25.313 [DEBUG] [Thread-213897] [transport.py] [_log()] starting thread (client mode): 0xa5771420
2026-02-16T00:28:25.313 [DEBUG] [Thread-213897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:28:25.333 [DEBUG] [Thread-213897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:28:25.333 [INFO] [Thread-213897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:28:25.336 [DEBUG] [Thread-213897] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:28:25.336 [DEBUG] [Thread-213897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:28:25.336 [DEBUG] [Thread-213897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:28:25.336 [DEBUG] [Thread-213897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:28:25.336 [DEBUG] [Thread-213897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:28:25.336 [DEBUG] [Thread-213897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] client lang: <none>
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] server lang: <none>
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] kex follows: False
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] Compression: none
2026-02-16T00:28:25.337 [DEBUG] [Thread-213897] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:28:25.354 [DEBUG] [Thread-213897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:28:25.355 [DEBUG] [Thread-213897] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:28:25.355 [DEBUG] [Thread-213897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:28:25.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:28:25.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:28:25.357 [DEBUG] [Thread-213897] [transport.py] [_log()] userauth is OK
2026-02-16T00:28:25.358 [DEBUG] [Thread-213897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:28:25.358 [DEBUG] [Thread-213897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:28:25.358 [DEBUG] [Thread-213897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:28:25.358 [DEBUG] [Thread-213897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:28:25.381 [INFO] [Thread-213897] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:28:25.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:28:26.032 [DEBUG] [Thread-213897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:28:26.032 [DEBUG] [Thread-213897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:28:26.033 [DEBUG] [Thread-213897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:28:26.073 [DEBUG] [Thread-213897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:28:26.073 [DEBUG] [Thread-213897] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:28:26.076 [DEBUG] [Thread-213897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:28:26.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:28:26.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:28:26.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:28:26.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:28:26.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:28:26.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:28:26.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:28:26.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:28:26.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.935865 -999.00  +13.70  14.57     57   +5.50 1 1 1 1 1     0    0 7.32 -40.26 ZNESW 17.0 14.6 152.6 19.4 14.0 -24.0 13.9 -22.8 13.7 -21.8 14.0 -23.0
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.935865
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:28:26.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:28:26.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:27:53', tmtdew=9.38, humidity=53.24, cloud=0.0, wind=22.99, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:27:53', seeing=1.79, atlas_timestamp='2026-02-15T22:27:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:26:00')
2026-02-16T00:28:26.102 [DEBUG] [Thread-213897] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:28:26.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:28:26.198 [DEBUG] [Thread-213900] [transport.py] [_log()] starting thread (client mode): 0xa2d3cc70
2026-02-16T00:28:26.198 [DEBUG] [Thread-213900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:28:26.214 [DEBUG] [Thread-213900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:28:26.214 [INFO] [Thread-213900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:28:26.222 [DEBUG] [Thread-213900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:28:26.222 [DEBUG] [Thread-213900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:28:26.222 [DEBUG] [Thread-213900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:28:26.222 [DEBUG] [Thread-213900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:28:26.222 [DEBUG] [Thread-213900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] client lang: <none>
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] server lang: <none>
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] kex follows: False
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:28:26.223 [DEBUG] [Thread-213900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:28:26.224 [DEBUG] [Thread-213900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:28:26.224 [DEBUG] [Thread-213900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:28:26.224 [DEBUG] [Thread-213900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:28:26.224 [DEBUG] [Thread-213900] [transport.py] [_log()] Compression: none
2026-02-16T00:28:26.224 [DEBUG] [Thread-213900] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:28:26.281 [DEBUG] [Thread-213900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:28:26.281 [DEBUG] [Thread-213900] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:28:26.282 [DEBUG] [Thread-213900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:28:26.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:28:26.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:28:26.559 [DEBUG] [Thread-213900] [transport.py] [_log()] userauth is OK
2026-02-16T00:28:26.560 [DEBUG] [Thread-213900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:28:26.560 [DEBUG] [Thread-213900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:28:26.560 [DEBUG] [Thread-213900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:28:26.560 [DEBUG] [Thread-213900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:28:26.574 [INFO] [Thread-213900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:28:26.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:28:26.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:28:27.395 [DEBUG] [Thread-213900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:28:27.395 [DEBUG] [Thread-213900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:28:27.444 [DEBUG] [Thread-213900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:28:27.444 [DEBUG] [Thread-213900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:28:27.454 [DEBUG] [Thread-213900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:28:27.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:28:27.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:28:27.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:28:27.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:28:27.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:28:27.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:28:27.493 [DEBUG] [Thread-213900] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:28:33.136 [DEBUG] [Thread-213902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:38.483 [DEBUG] [Thread-213903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:48.183 [DEBUG] [Thread-213904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:51.111 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:28:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:28:57.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:28:57.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:28:59.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 28, 28), 9.36, 53.33, 0.0, 25.11, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:28:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:28:28
2026-02-16T00:28:59.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:28:59.837 [DEBUG] [Thread-213905] [transport.py] [_log()] starting thread (client mode): 0xa2d27ca0
2026-02-16T00:28:59.837 [DEBUG] [Thread-213905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:28:59.857 [DEBUG] [Thread-213905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:28:59.857 [INFO] [Thread-213905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] client lang: <none>
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] server lang: <none>
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] kex follows: False
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] Compression: none
2026-02-16T00:28:59.860 [DEBUG] [Thread-213905] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:28:59.875 [DEBUG] [Thread-213905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:28:59.875 [DEBUG] [Thread-213905] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:28:59.875 [DEBUG] [Thread-213905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:28:59.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:28:59.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:28:59.876 [DEBUG] [Thread-213905] [transport.py] [_log()] userauth is OK
2026-02-16T00:28:59.876 [DEBUG] [Thread-213905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:28:59.876 [DEBUG] [Thread-213905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:28:59.876 [DEBUG] [Thread-213905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:28:59.876 [DEBUG] [Thread-213905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:28:59.891 [INFO] [Thread-213905] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:28:59.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:29:00.538 [DEBUG] [Thread-213905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:29:00.538 [DEBUG] [Thread-213905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:29:00.539 [DEBUG] [Thread-213905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:29:00.579 [DEBUG] [Thread-213905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:29:00.580 [DEBUG] [Thread-213905] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:29:00.583 [DEBUG] [Thread-213905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:29:00.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:29:00.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:29:00.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:29:00.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:29:00.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:29:00.609 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:29:00.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:29:00.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:29:00.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:29:00.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.936559 -999.00  +13.60  17.62     57   +5.50 1 1 1 1 1     0    0 7.13 -44.90 ZNESW 20.2 17.6 141.2 20.3 14.1 -24.1 13.9 -22.8 13.7 -21.8 14.0 -22.9
2026-02-16T00:29:00.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:29:00.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:29:00.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.936559
2026-02-16T00:29:00.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:29:00.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:29:00.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:29:00.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:29:00.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:29:00.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:28:28', tmtdew=9.36, humidity=53.33, cloud=0.0, wind=25.11, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:28:28', seeing=1.79, atlas_timestamp='2026-02-15T22:28:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:26:00')
2026-02-16T00:29:00.612 [DEBUG] [Thread-213905] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:29:00.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:29:00.711 [DEBUG] [Thread-213908] [transport.py] [_log()] starting thread (client mode): 0xa57d6680
2026-02-16T00:29:00.711 [DEBUG] [Thread-213908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:29:00.725 [DEBUG] [Thread-213908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:29:00.726 [INFO] [Thread-213908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:29:00.733 [DEBUG] [Thread-213908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] client lang: <none>
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] server lang: <none>
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] kex follows: False
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:29:00.734 [DEBUG] [Thread-213908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:29:00.735 [DEBUG] [Thread-213908] [transport.py] [_log()] Compression: none
2026-02-16T00:29:00.735 [DEBUG] [Thread-213908] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:29:00.793 [DEBUG] [Thread-213908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:29:00.793 [DEBUG] [Thread-213908] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:29:00.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:29:00.794 [DEBUG] [Thread-213908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:29:00.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:29:00.849 [DEBUG] [Thread-213908] [transport.py] [_log()] userauth is OK
2026-02-16T00:29:00.849 [DEBUG] [Thread-213908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:29:00.849 [DEBUG] [Thread-213908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:29:00.849 [DEBUG] [Thread-213908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:29:00.849 [DEBUG] [Thread-213908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:29:00.868 [INFO] [Thread-213908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:29:00.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:29:00.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:29:01.717 [DEBUG] [Thread-213908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:29:01.718 [DEBUG] [Thread-213908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:29:01.766 [DEBUG] [Thread-213908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:29:01.766 [DEBUG] [Thread-213908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:29:01.775 [DEBUG] [Thread-213908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:29:01.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:29:01.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:29:01.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:29:01.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:29:01.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:29:01.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:29:01.811 [DEBUG] [Thread-213908] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:29:03.219 [DEBUG] [Thread-213910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:29:16.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:29:16.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:29:18.269 [DEBUG] [Thread-213911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:29:31.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:29:31.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:29:31.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:29:33.302 [DEBUG] [Thread-213912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:29:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 29, 3), 9.37, 53.29, 0.0, 22.78, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:29:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:29:03
2026-02-16T00:29:34.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:29:34.221 [DEBUG] [Thread-213913] [transport.py] [_log()] starting thread (client mode): 0xa2d3ee30
2026-02-16T00:29:34.221 [DEBUG] [Thread-213913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:29:34.243 [DEBUG] [Thread-213913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:29:34.243 [INFO] [Thread-213913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] client lang: <none>
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] server lang: <none>
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] kex follows: False
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] Compression: none
2026-02-16T00:29:34.244 [DEBUG] [Thread-213913] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:29:34.253 [DEBUG] [Thread-213913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:29:34.254 [DEBUG] [Thread-213913] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:29:34.254 [DEBUG] [Thread-213913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:29:34.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:29:34.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:29:34.257 [DEBUG] [Thread-213913] [transport.py] [_log()] userauth is OK
2026-02-16T00:29:34.257 [DEBUG] [Thread-213913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:29:34.257 [DEBUG] [Thread-213913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:29:34.257 [DEBUG] [Thread-213913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:29:34.257 [DEBUG] [Thread-213913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:29:34.281 [INFO] [Thread-213913] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:29:34.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:29:34.883 [DEBUG] [Thread-213913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:29:34.883 [DEBUG] [Thread-213913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:29:34.884 [DEBUG] [Thread-213913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:29:34.924 [DEBUG] [Thread-213913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:29:34.925 [DEBUG] [Thread-213913] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:29:34.928 [DEBUG] [Thread-213913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:29:34.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:29:34.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:29:34.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:29:34.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:29:34.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:29:34.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:29:34.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:29:34.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:29:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:29:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.936907 -999.00  +13.60  16.55     58   +5.50 1 1 1 1 1     0    0 7.38 -43.08 ZNESW 16.6 16.6 152.3 24.8 14.0 -23.9 13.9 -22.8 13.7 -21.8 14.0 -23.0
2026-02-16T00:29:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:29:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:29:34.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.936907
2026-02-16T00:29:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:29:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:29:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:29:34.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:29:34.956 [DEBUG] [Thread-213913] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:29:34.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:29:34.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:29:03', tmtdew=9.37, humidity=53.29, cloud=0.0, wind=22.78, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:29:04', seeing=1.59, atlas_timestamp='2026-02-15T22:29:08.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:26:00')
2026-02-16T00:29:35.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:29:35.056 [DEBUG] [Thread-213916] [transport.py] [_log()] starting thread (client mode): 0xa2d578b0
2026-02-16T00:29:35.056 [DEBUG] [Thread-213916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:29:35.071 [DEBUG] [Thread-213916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:29:35.071 [INFO] [Thread-213916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] client lang: <none>
2026-02-16T00:29:35.078 [DEBUG] [Thread-213916] [transport.py] [_log()] server lang: <none>
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] kex follows: False
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] Compression: none
2026-02-16T00:29:35.079 [DEBUG] [Thread-213916] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:29:35.138 [DEBUG] [Thread-213916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:29:35.138 [DEBUG] [Thread-213916] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:29:35.139 [DEBUG] [Thread-213916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:29:35.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:29:35.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:29:35.197 [DEBUG] [Thread-213916] [transport.py] [_log()] userauth is OK
2026-02-16T00:29:35.197 [DEBUG] [Thread-213916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:29:35.197 [DEBUG] [Thread-213916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:29:35.197 [DEBUG] [Thread-213916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:29:35.197 [DEBUG] [Thread-213916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:29:35.216 [INFO] [Thread-213916] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:29:35.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:29:35.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:29:36.023 [DEBUG] [Thread-213916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:29:36.024 [DEBUG] [Thread-213916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:29:36.071 [DEBUG] [Thread-213916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:29:36.072 [DEBUG] [Thread-213916] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:29:36.081 [DEBUG] [Thread-213916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:29:36.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:29:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:29:36.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:29:36.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:29:36.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:29:36.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:29:36.118 [DEBUG] [Thread-213916] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:29:38.551 [DEBUG] [Thread-213918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:29:48.342 [DEBUG] [Thread-213919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:03.395 [DEBUG] [Thread-213920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:30:06.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:30:06.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:30:08.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 29, 39), 9.54, 52.55, 0.0, 22.51, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:30:08.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:29:39
2026-02-16T00:30:08.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:30:09.067 [DEBUG] [Thread-213921] [transport.py] [_log()] starting thread (client mode): 0xa2d56b60
2026-02-16T00:30:09.067 [DEBUG] [Thread-213921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:30:09.086 [DEBUG] [Thread-213921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:30:09.086 [INFO] [Thread-213921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] client lang: <none>
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] server lang: <none>
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] kex follows: False
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] Compression: none
2026-02-16T00:30:09.090 [DEBUG] [Thread-213921] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:30:09.107 [DEBUG] [Thread-213921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:30:09.108 [DEBUG] [Thread-213921] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:30:09.108 [DEBUG] [Thread-213921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:30:09.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:30:09.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:30:09.110 [DEBUG] [Thread-213921] [transport.py] [_log()] userauth is OK
2026-02-16T00:30:09.110 [DEBUG] [Thread-213921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:30:09.110 [DEBUG] [Thread-213921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:30:09.110 [DEBUG] [Thread-213921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:30:09.110 [DEBUG] [Thread-213921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:30:09.135 [INFO] [Thread-213921] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:30:09.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:30:15.858 [DEBUG] [Thread-213921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:30:15.858 [DEBUG] [Thread-213921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:30:15.858 [DEBUG] [Thread-213921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:30:15.898 [DEBUG] [Thread-213921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:30:15.899 [DEBUG] [Thread-213921] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:30:15.902 [DEBUG] [Thread-213921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:30:15.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:30:15.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:30:15.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:30:15.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:30:16.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:30:16.003 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:30:16.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:30:16.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:30:16.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:30:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.937254 -999.00  +13.70  19.01     58   +5.50 1 1 1 1 1     0    0 7.13 -43.10 ZNESW 19.6 19.0 148.4 21.7 14.0 -23.9 13.9 -22.8 13.7 -21.7 14.0 -23.0
2026-02-16T00:30:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:30:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:30:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.937254
2026-02-16T00:30:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:30:16.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:30:16.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:30:16.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:30:16.005 [DEBUG] [Thread-213921] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:30:16.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:30:16.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:29:39', tmtdew=9.54, humidity=52.55, cloud=0.0, wind=22.51, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:29:39', seeing=1.79, atlas_timestamp='2026-02-15T22:29:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:26:00')
2026-02-16T00:30:16.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:30:16.658 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:16.659 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:18.430 [DEBUG] [Thread-213924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:25.275 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:33.480 [DEBUG] [Thread-213925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:38.633 [DEBUG] [Thread-213926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:30:48.518 [DEBUG] [Thread-213927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:03.554 [DEBUG] [Thread-213928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:16.860 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:16.861 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:18.587 [DEBUG] [Thread-213929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:33.619 [DEBUG] [Thread-213930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:38.701 [DEBUG] [Thread-213931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:48.659 [DEBUG] [Thread-213932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:31:59.544 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:03.696 [DEBUG] [Thread-213933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:17.059 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:17.060 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:18.734 [DEBUG] [Thread-213934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:31.032 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-16T00:32:33.770 [DEBUG] [Thread-213935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:38.753 [DEBUG] [Thread-213936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:32:48.809 [DEBUG] [Thread-213937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:01.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:33:01.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:33:01.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:33:02.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 32, 36), 9.38, 53.12, 0.0, 22.83, 13.89, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:33:02.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:32:36
2026-02-16T00:33:03.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:33:03.419 [DEBUG] [Thread-213938] [transport.py] [_log()] starting thread (client mode): 0xa5772500
2026-02-16T00:33:03.419 [DEBUG] [Thread-213938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:33:03.439 [DEBUG] [Thread-213938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:33:03.439 [INFO] [Thread-213938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:03.442 [DEBUG] [Thread-213938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] client lang: <none>
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] server lang: <none>
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] kex follows: False
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] Compression: none
2026-02-16T00:33:03.443 [DEBUG] [Thread-213938] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:33:03.460 [DEBUG] [Thread-213938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:33:03.461 [DEBUG] [Thread-213938] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:33:03.461 [DEBUG] [Thread-213938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:33:03.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:33:03.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:33:03.463 [DEBUG] [Thread-213938] [transport.py] [_log()] userauth is OK
2026-02-16T00:33:03.463 [DEBUG] [Thread-213938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:33:03.463 [DEBUG] [Thread-213938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:33:03.464 [DEBUG] [Thread-213938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:33:03.464 [DEBUG] [Thread-213938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:33:03.488 [INFO] [Thread-213938] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:33:03.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:33:03.848 [DEBUG] [Thread-213940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:04.126 [DEBUG] [Thread-213938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:33:04.126 [DEBUG] [Thread-213938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:33:04.126 [DEBUG] [Thread-213938] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:33:04.168 [DEBUG] [Thread-213938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:33:04.168 [DEBUG] [Thread-213938] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:33:04.172 [DEBUG] [Thread-213938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:33:04.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:33:04.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:33:04.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:33:04.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:33:04.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:33:04.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:33:04.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:33:04.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:33:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:33:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.939337 -999.00  +13.60  16.66     58   +5.60 1 1 1 1 1     0    0 6.90 -45.19 ZNESW 17.8 16.7 148.4 19.9 14.0 -23.9 13.9 -22.8 13.7 -21.8 14.0 -23.0
2026-02-16T00:33:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:33:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:33:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.939337
2026-02-16T00:33:04.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:33:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:33:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:33:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:33:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:33:04.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:32:36', tmtdew=9.38, humidity=53.12, cloud=0.0, wind=22.83, temperature=13.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:32:36', seeing=1.55, atlas_timestamp='2026-02-15T22:32:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03225000000000122, -0.014749999999999375, -0.02874999999999872, -0.008500000000001506, 0.013999999999999346, 0.01925000000000132, 0.0065000000000008384, 0.020250000000000767, 0.020500000000000185, 0.05000000000000071, -0.04824999999999946, 0.009000000000000341, 0.03449999999999953, 0.01624999999999943, 0.0259999999999998, 0.0024999999999995026, 0.06374999999999886, 0.04499999999999993, 0.017999999999998906, 0.008249999999998536, 0.05349999999999966, 0.036249999999999005, 0.00975000000000037, 0.04124999999999979, 0.05149999999999899, -0.01750000000000007, 0.013749999999999929, 0.025500000000000966, 0.06400000000000006, 0.0010000000000012221, 0.0470000000000006, 0.09100000000000108, 0.06574999999999953], zp_timestamp='2026-02-15T22:29:00')
2026-02-16T00:33:04.197 [DEBUG] [Thread-213938] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:33:04.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:33:04.294 [DEBUG] [Thread-213942] [transport.py] [_log()] starting thread (client mode): 0xa2d54070
2026-02-16T00:33:04.294 [DEBUG] [Thread-213942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:33:04.311 [DEBUG] [Thread-213942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:33:04.311 [INFO] [Thread-213942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:33:04.318 [DEBUG] [Thread-213942] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:33:04.318 [DEBUG] [Thread-213942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] client lang: <none>
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] server lang: <none>
2026-02-16T00:33:04.319 [DEBUG] [Thread-213942] [transport.py] [_log()] kex follows: False
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] Compression: none
2026-02-16T00:33:04.320 [DEBUG] [Thread-213942] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:33:04.376 [DEBUG] [Thread-213942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:33:04.377 [DEBUG] [Thread-213942] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:33:04.378 [DEBUG] [Thread-213942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:33:04.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:33:04.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:33:04.437 [DEBUG] [Thread-213942] [transport.py] [_log()] userauth is OK
2026-02-16T00:33:04.437 [DEBUG] [Thread-213942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:33:04.438 [DEBUG] [Thread-213942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:33:04.438 [DEBUG] [Thread-213942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:33:04.438 [DEBUG] [Thread-213942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:33:04.457 [INFO] [Thread-213942] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:33:04.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:33:04.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:33:05.301 [DEBUG] [Thread-213942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:33:05.301 [DEBUG] [Thread-213942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:33:05.350 [DEBUG] [Thread-213942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:33:05.350 [DEBUG] [Thread-213942] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:33:05.359 [DEBUG] [Thread-213942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:33:05.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:33:05.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:33:05.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:33:05.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:33:05.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:33:05.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:33:05.396 [DEBUG] [Thread-213942] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:33:17.261 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:17.263 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:18.883 [DEBUG] [Thread-213944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:33.398 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:33.932 [DEBUG] [Thread-213945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:35.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:33:35.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:33:35.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:33:37.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 33, 11), 9.28, 53.59, 0.0, 23.7, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:33:37.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:33:11
2026-02-16T00:33:37.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:33:37.842 [DEBUG] [Thread-213946] [transport.py] [_log()] starting thread (client mode): 0xa2d25cf0
2026-02-16T00:33:37.842 [DEBUG] [Thread-213946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:33:37.863 [DEBUG] [Thread-213946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:33:37.864 [INFO] [Thread-213946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:33:37.866 [DEBUG] [Thread-213946] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] client lang: <none>
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] server lang: <none>
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] kex follows: False
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] Compression: none
2026-02-16T00:33:37.867 [DEBUG] [Thread-213946] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:33:37.884 [DEBUG] [Thread-213946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:33:37.885 [DEBUG] [Thread-213946] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:33:37.885 [DEBUG] [Thread-213946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:33:37.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:33:37.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:33:37.888 [DEBUG] [Thread-213946] [transport.py] [_log()] userauth is OK
2026-02-16T00:33:37.889 [DEBUG] [Thread-213946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:33:37.889 [DEBUG] [Thread-213946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:33:37.889 [DEBUG] [Thread-213946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:33:37.889 [DEBUG] [Thread-213946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:33:37.913 [INFO] [Thread-213946] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:33:37.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:33:38.469 [DEBUG] [Thread-213946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:33:38.470 [DEBUG] [Thread-213946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:33:38.470 [DEBUG] [Thread-213946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:33:38.510 [DEBUG] [Thread-213946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:33:38.511 [DEBUG] [Thread-213946] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:33:38.514 [DEBUG] [Thread-213946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:33:38.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:33:38.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:33:38.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:33:38.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:33:38.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:33:38.538 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:33:38.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:33:38.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:33:38.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:33:38.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.939684 -999.00  +13.60  21.64     58   +5.50 1 1 1 1 1     0    0 7.05 -48.42 ZNESW 17.2 21.6 143.0 22.9 13.9 -23.9 13.9 -22.8 13.7 -21.8 13.9 -23.1
2026-02-16T00:33:38.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:33:38.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:33:38.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.939684
2026-02-16T00:33:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:33:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:33:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:33:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:33:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:33:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:33:11', tmtdew=9.28, humidity=53.59, cloud=0.0, wind=23.7, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:33:11', seeing=1.86, atlas_timestamp='2026-02-15T22:33:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.014749999999999375, -0.053749999999999076, -0.007500000000000284, 0.022500000000000853, -0.029749999999999943, -0.0389999999999997, 0.017250000000000654, 0.046499999999999986, 0.03249999999999886, -0.07174999999999976, -0.006000000000000227, 0.04699999999999882, 0.04875000000000007, 0.033500000000000085, -0.0045000000000001705, 0.04824999999999946, 0.01750000000000007, -0.011000000000001009, -0.0007500000000018048, 0.05349999999999966, 0.02474999999999916, -0.011749999999999261, 0.042749999999999844, 0.08299999999999841, 0.0035000000000007248, 0.024750000000000938, -0.02149999999999963, 0.025000000000000355, -0.026999999999999247, 0.05500000000000149, 0.07949999999999946, 0.0467499999999994], zp_timestamp='2026-02-15T22:31:00')
2026-02-16T00:33:38.541 [DEBUG] [Thread-213946] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:33:38.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:33:38.636 [DEBUG] [Thread-213949] [transport.py] [_log()] starting thread (client mode): 0xa81d5810
2026-02-16T00:33:38.636 [DEBUG] [Thread-213949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:33:38.651 [DEBUG] [Thread-213949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:33:38.651 [INFO] [Thread-213949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:33:38.658 [DEBUG] [Thread-213949] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:33:38.659 [DEBUG] [Thread-213949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:33:38.659 [DEBUG] [Thread-213949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:33:38.659 [DEBUG] [Thread-213949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:38.659 [DEBUG] [Thread-213949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:33:38.659 [DEBUG] [Thread-213949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:38.659 [DEBUG] [Thread-213949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] client lang: <none>
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] server lang: <none>
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] kex follows: False
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] Compression: none
2026-02-16T00:33:38.660 [DEBUG] [Thread-213949] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:33:38.716 [DEBUG] [Thread-213949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:33:38.717 [DEBUG] [Thread-213949] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:33:38.718 [DEBUG] [Thread-213949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:33:38.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:33:38.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:33:38.772 [DEBUG] [Thread-213949] [transport.py] [_log()] userauth is OK
2026-02-16T00:33:38.773 [DEBUG] [Thread-213949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:33:38.773 [DEBUG] [Thread-213949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:33:38.773 [DEBUG] [Thread-213949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:33:38.773 [DEBUG] [Thread-213949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:33:38.794 [INFO] [Thread-213949] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:33:38.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:33:38.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:33:38.820 [DEBUG] [Thread-213951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:33:39.589 [DEBUG] [Thread-213949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:33:39.589 [DEBUG] [Thread-213949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:33:39.637 [DEBUG] [Thread-213949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:33:39.637 [DEBUG] [Thread-213949] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:33:39.647 [DEBUG] [Thread-213949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:33:39.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:33: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')
2026-02-16T00:33:39.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:33:39.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:33:39.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:33:39.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:33:39.683 [DEBUG] [Thread-213949] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:33:48.971 [DEBUG] [Thread-213952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:04.023 [DEBUG] [Thread-213953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:34:09.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:34:09.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:34:11.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 33, 47), 9.22, 53.62, 0.0, 19.9, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:34:11.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:33:47
2026-02-16T00:34:12.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:34:12.300 [DEBUG] [Thread-213954] [transport.py] [_log()] starting thread (client mode): 0xa5771d50
2026-02-16T00:34:12.300 [DEBUG] [Thread-213954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:34:12.320 [DEBUG] [Thread-213954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:34:12.320 [INFO] [Thread-213954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] client lang: <none>
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] server lang: <none>
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] kex follows: False
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] Compression: none
2026-02-16T00:34:12.323 [DEBUG] [Thread-213954] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:34:12.340 [DEBUG] [Thread-213954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:34:12.341 [DEBUG] [Thread-213954] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:34:12.341 [DEBUG] [Thread-213954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:34:12.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:34:12.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:34:12.343 [DEBUG] [Thread-213954] [transport.py] [_log()] userauth is OK
2026-02-16T00:34:12.343 [DEBUG] [Thread-213954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:34:12.344 [DEBUG] [Thread-213954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:34:12.344 [DEBUG] [Thread-213954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:34:12.344 [DEBUG] [Thread-213954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:34:12.380 [INFO] [Thread-213954] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:34:12.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:34:13.010 [DEBUG] [Thread-213954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:34:13.011 [DEBUG] [Thread-213954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:34:13.011 [DEBUG] [Thread-213954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:34:13.052 [DEBUG] [Thread-213954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:34:13.052 [DEBUG] [Thread-213954] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:34:13.055 [DEBUG] [Thread-213954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:34:13.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:34:13.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:34:13.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:34:13.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:34:13.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:34:13.077 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:34:13.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:34:13.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:34:13.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:34:13.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.940032 -999.00  +13.60  20.35     58   +5.60 1 1 1 1 1     0    0 6.97 -45.75 ZNESW 16.0 20.4 142.6 26.2 14.0 -23.8 13.8 -22.7 13.6 -21.7 13.9 -22.8
2026-02-16T00:34:13.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:34:13.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:34:13.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.940032
2026-02-16T00:34:13.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:34:13.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:34:13.079 [DEBUG] [Thread-213954] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:34:13.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:34:13.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:34:13.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:34:13.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:33:47', tmtdew=9.22, humidity=53.62, cloud=0.0, wind=19.9, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:33:47', seeing=1.94, atlas_timestamp='2026-02-15T22:33:38.765', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.014749999999999375, -0.053749999999999076, -0.007500000000000284, 0.022500000000000853, -0.029749999999999943, -0.0389999999999997, 0.017250000000000654, 0.046499999999999986, 0.03249999999999886, -0.07174999999999976, -0.006000000000000227, 0.04699999999999882, 0.04875000000000007, 0.033500000000000085, -0.0045000000000001705, 0.04824999999999946, 0.01750000000000007, -0.011000000000001009, -0.0007500000000018048, 0.05349999999999966, 0.02474999999999916, -0.011749999999999261, 0.042749999999999844, 0.08299999999999841, 0.0035000000000007248, 0.024750000000000938, -0.02149999999999963, 0.025000000000000355, -0.026999999999999247, 0.05500000000000149, 0.07949999999999946, 0.0467499999999994], zp_timestamp='2026-02-15T22:31:00')
2026-02-16T00:34:13.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:34:13.177 [DEBUG] [Thread-213957] [transport.py] [_log()] starting thread (client mode): 0xa57d7ca0
2026-02-16T00:34:13.177 [DEBUG] [Thread-213957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:34:13.191 [DEBUG] [Thread-213957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:34:13.192 [INFO] [Thread-213957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:34:13.199 [DEBUG] [Thread-213957] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:34:13.199 [DEBUG] [Thread-213957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] client lang: <none>
2026-02-16T00:34:13.200 [DEBUG] [Thread-213957] [transport.py] [_log()] server lang: <none>
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] kex follows: False
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] Compression: none
2026-02-16T00:34:13.201 [DEBUG] [Thread-213957] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:34:13.257 [DEBUG] [Thread-213957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:34:13.258 [DEBUG] [Thread-213957] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:34:13.258 [DEBUG] [Thread-213957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:34:13.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:34:13.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:34:13.312 [DEBUG] [Thread-213957] [transport.py] [_log()] userauth is OK
2026-02-16T00:34:13.313 [DEBUG] [Thread-213957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:34:13.313 [DEBUG] [Thread-213957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:34:13.313 [DEBUG] [Thread-213957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:34:13.313 [DEBUG] [Thread-213957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:34:13.336 [INFO] [Thread-213957] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:34:13.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:34:13.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:34:14.138 [DEBUG] [Thread-213957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:34:14.138 [DEBUG] [Thread-213957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:34:14.189 [DEBUG] [Thread-213957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:34:14.189 [DEBUG] [Thread-213957] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:34:14.197 [DEBUG] [Thread-213957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:34:14.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:34:14.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:34:14.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:34:14.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:34:14.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:34:14.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:34:14.229 [DEBUG] [Thread-213957] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:34:17.462 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:17.463 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:19.059 [DEBUG] [Thread-213959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:34.111 [DEBUG] [Thread-213960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:38.904 [DEBUG] [Thread-213961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:34:44.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:34:44.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:34:44.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:34:46.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 34, 22), 9.24, 53.57, 0.0, 20.15, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:34:46.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:34:22
2026-02-16T00:34:46.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:34:46.920 [DEBUG] [Thread-213962] [transport.py] [_log()] starting thread (client mode): 0xa5771930
2026-02-16T00:34:46.920 [DEBUG] [Thread-213962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:34:46.938 [DEBUG] [Thread-213962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:34:46.938 [INFO] [Thread-213962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:34:46.941 [DEBUG] [Thread-213962] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:34:46.941 [DEBUG] [Thread-213962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:34:46.941 [DEBUG] [Thread-213962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:34:46.941 [DEBUG] [Thread-213962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:46.941 [DEBUG] [Thread-213962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] client lang: <none>
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] server lang: <none>
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] kex follows: False
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] Compression: none
2026-02-16T00:34:46.942 [DEBUG] [Thread-213962] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:34:46.959 [DEBUG] [Thread-213962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:34:46.960 [DEBUG] [Thread-213962] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:34:46.961 [DEBUG] [Thread-213962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:34:46.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:34:46.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:34:46.962 [DEBUG] [Thread-213962] [transport.py] [_log()] userauth is OK
2026-02-16T00:34:46.963 [DEBUG] [Thread-213962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:34:46.963 [DEBUG] [Thread-213962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:34:46.963 [DEBUG] [Thread-213962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:34:46.963 [DEBUG] [Thread-213962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:34:46.988 [INFO] [Thread-213962] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:34:46.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:34:47.638 [DEBUG] [Thread-213962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:34:47.639 [DEBUG] [Thread-213962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:34:47.639 [DEBUG] [Thread-213962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:34:47.680 [DEBUG] [Thread-213962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:34:47.680 [DEBUG] [Thread-213962] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:34:47.683 [DEBUG] [Thread-213962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:34:47.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:34:47.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:34:47.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:34:47.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:34:47.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:34:47.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:34:47.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:34:47.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:34:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:34:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.940379 -999.00  +13.60  12.59     58   +5.60 1 1 1 1 1     0    0 7.02 -46.23 ZNESW 11.6 12.6 142.4 20.5 13.9 -23.9 13.8 -22.8 13.6 -21.7 13.9 -23.1
2026-02-16T00:34:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:34:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:34:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.940379
2026-02-16T00:34:47.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:34:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:34:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:34:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:34:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:34:47.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:34:22', tmtdew=9.24, humidity=53.57, cloud=0.0, wind=20.15, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:34:23', seeing=1.88, atlas_timestamp='2026-02-15T22:34:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.014749999999999375, -0.053749999999999076, -0.007500000000000284, 0.022500000000000853, -0.029749999999999943, -0.0389999999999997, 0.017250000000000654, 0.046499999999999986, 0.03249999999999886, -0.07174999999999976, -0.006000000000000227, 0.04699999999999882, 0.04875000000000007, 0.033500000000000085, -0.0045000000000001705, 0.04824999999999946, 0.01750000000000007, -0.011000000000001009, -0.0007500000000018048, 0.05349999999999966, 0.02474999999999916, -0.011749999999999261, 0.042749999999999844, 0.08299999999999841, 0.0035000000000007248, 0.024750000000000938, -0.02149999999999963, 0.025000000000000355, -0.026999999999999247, 0.05500000000000149, 0.07949999999999946, 0.0467499999999994], zp_timestamp='2026-02-15T22:31:00')
2026-02-16T00:34:47.710 [DEBUG] [Thread-213962] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:34:47.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:34:47.806 [DEBUG] [Thread-213965] [transport.py] [_log()] starting thread (client mode): 0xa57b3a90
2026-02-16T00:34:47.806 [DEBUG] [Thread-213965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:34:47.825 [DEBUG] [Thread-213965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:34:47.826 [INFO] [Thread-213965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:34:47.833 [DEBUG] [Thread-213965] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:34:47.833 [DEBUG] [Thread-213965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:34:47.833 [DEBUG] [Thread-213965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:34:47.833 [DEBUG] [Thread-213965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] client lang: <none>
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] server lang: <none>
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] kex follows: False
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] Compression: none
2026-02-16T00:34:47.834 [DEBUG] [Thread-213965] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:34:47.893 [DEBUG] [Thread-213965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:34:47.893 [DEBUG] [Thread-213965] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:34:47.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:34:47.894 [DEBUG] [Thread-213965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:34:47.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:34:47.948 [DEBUG] [Thread-213965] [transport.py] [_log()] userauth is OK
2026-02-16T00:34:47.949 [DEBUG] [Thread-213965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:34:47.949 [DEBUG] [Thread-213965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:34:47.949 [DEBUG] [Thread-213965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:34:47.949 [DEBUG] [Thread-213965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:34:47.974 [INFO] [Thread-213965] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:34:47.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:34:47.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:34:48.830 [DEBUG] [Thread-213965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:34:48.830 [DEBUG] [Thread-213965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:34:48.878 [DEBUG] [Thread-213965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:34:48.878 [DEBUG] [Thread-213965] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:34:48.887 [DEBUG] [Thread-213965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:34:48.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:34:48.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:34:48.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:34:48.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:34:48.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:34:48.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:34:48.920 [DEBUG] [Thread-213965] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:34:49.149 [DEBUG] [Thread-213967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:04.201 [DEBUG] [Thread-213968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:07.142 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:17.662 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:17.663 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:18.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:35:18.929 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:35:18.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:35:19.237 [DEBUG] [Thread-213969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 34, 58), 9.16, 53.64, 0.0, 23.15, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:35:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:34:58
2026-02-16T00:35:21.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:35:21.394 [DEBUG] [Thread-213970] [transport.py] [_log()] starting thread (client mode): 0xa2d79600
2026-02-16T00:35:21.395 [DEBUG] [Thread-213970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:35:21.413 [DEBUG] [Thread-213970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:35:21.413 [INFO] [Thread-213970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:35:21.416 [DEBUG] [Thread-213970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:35:21.416 [DEBUG] [Thread-213970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:35:21.416 [DEBUG] [Thread-213970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] client lang: <none>
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] server lang: <none>
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] kex follows: False
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] Compression: none
2026-02-16T00:35:21.417 [DEBUG] [Thread-213970] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:35:21.435 [DEBUG] [Thread-213970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:35:21.436 [DEBUG] [Thread-213970] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:35:21.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:35:21.437 [DEBUG] [Thread-213970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:35:21.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:35:21.439 [DEBUG] [Thread-213970] [transport.py] [_log()] userauth is OK
2026-02-16T00:35:21.439 [DEBUG] [Thread-213970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:35:21.439 [DEBUG] [Thread-213970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:35:21.439 [DEBUG] [Thread-213970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:35:21.439 [DEBUG] [Thread-213970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:35:21.464 [INFO] [Thread-213970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:35:21.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:35:22.080 [DEBUG] [Thread-213970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:35:22.080 [DEBUG] [Thread-213970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:35:22.081 [DEBUG] [Thread-213970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:35:22.121 [DEBUG] [Thread-213970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:35:22.122 [DEBUG] [Thread-213970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:35:22.125 [DEBUG] [Thread-213970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:35:22.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:35:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:35:22.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:35:22.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:35:22.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:35:22.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:35:22.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:35:22.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:35:22.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:35:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.940726 -999.00  +13.50  16.86     58   +5.60 1 1 1 1 1     0    0 7.13 -42.31 ZNESW 17.1 16.9 146.4 21.7 13.9 -23.9 13.8 -22.7 13.6 -21.6 13.9 -23.0
2026-02-16T00:35:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:35:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:35:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.940726
2026-02-16T00:35:22.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:35:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:35:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:35:22.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:35:22.153 [DEBUG] [Thread-213970] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:35:22.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:35:22.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:34:58', tmtdew=9.16, humidity=53.64, cloud=0.0, wind=23.15, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:34:58', seeing=1.53, atlas_timestamp='2026-02-15T22:34:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.014749999999999375, -0.053749999999999076, -0.007500000000000284, 0.022500000000000853, -0.029749999999999943, -0.0389999999999997, 0.017250000000000654, 0.046499999999999986, 0.03249999999999886, -0.07174999999999976, -0.006000000000000227, 0.04699999999999882, 0.04875000000000007, 0.033500000000000085, -0.0045000000000001705, 0.04824999999999946, 0.01750000000000007, -0.011000000000001009, -0.0007500000000018048, 0.05349999999999966, 0.02474999999999916, -0.011749999999999261, 0.042749999999999844, 0.08299999999999841, 0.0035000000000007248, 0.024750000000000938, -0.02149999999999963, 0.025000000000000355, -0.026999999999999247, 0.05500000000000149, 0.07949999999999946, 0.0467499999999994], zp_timestamp='2026-02-15T22:31:00')
2026-02-16T00:35:22.237 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:35:22.249 [DEBUG] [Thread-213973] [transport.py] [_log()] starting thread (client mode): 0xa2d27e80
2026-02-16T00:35:22.249 [DEBUG] [Thread-213973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:35:22.268 [DEBUG] [Thread-213973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:35:22.269 [INFO] [Thread-213973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:35:22.276 [DEBUG] [Thread-213973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:35:22.276 [DEBUG] [Thread-213973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:35:22.276 [DEBUG] [Thread-213973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:35:22.276 [DEBUG] [Thread-213973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:22.276 [DEBUG] [Thread-213973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] client lang: <none>
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] server lang: <none>
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] kex follows: False
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] Compression: none
2026-02-16T00:35:22.277 [DEBUG] [Thread-213973] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:35:22.337 [DEBUG] [Thread-213973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:35:22.338 [DEBUG] [Thread-213973] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:35:22.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:35:22.339 [DEBUG] [Thread-213973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:35:22.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:35:22.393 [DEBUG] [Thread-213973] [transport.py] [_log()] userauth is OK
2026-02-16T00:35:22.393 [DEBUG] [Thread-213973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:35:22.393 [DEBUG] [Thread-213973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:35:22.393 [DEBUG] [Thread-213973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:35:22.393 [DEBUG] [Thread-213973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:35:22.411 [INFO] [Thread-213973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:35:22.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:35:22.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:35:23.223 [DEBUG] [Thread-213973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:35:23.224 [DEBUG] [Thread-213973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:35:23.272 [DEBUG] [Thread-213973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:35:23.272 [DEBUG] [Thread-213973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:35:23.281 [DEBUG] [Thread-213973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:35:23.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:35:23.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:35:23.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:35:23.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:35:23.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:35:23.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:35:23.314 [DEBUG] [Thread-213973] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:35:34.272 [DEBUG] [Thread-213975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:38.980 [DEBUG] [Thread-213976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:49.320 [DEBUG] [Thread-213977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:35:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:35:53.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:35:53.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:35:55.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 35, 33), 9.33, 53.31, 0.0, 24.03, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:35:55.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:35:33
2026-02-16T00:35:55.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:35:55.667 [DEBUG] [Thread-213978] [transport.py] [_log()] starting thread (client mode): 0xa81d4f40
2026-02-16T00:35:55.668 [DEBUG] [Thread-213978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:35:55.688 [DEBUG] [Thread-213978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:35:55.688 [INFO] [Thread-213978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:35:55.690 [DEBUG] [Thread-213978] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:35:55.690 [DEBUG] [Thread-213978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:35:55.690 [DEBUG] [Thread-213978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:35:55.690 [DEBUG] [Thread-213978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:55.690 [DEBUG] [Thread-213978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] client lang: <none>
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] server lang: <none>
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] kex follows: False
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] Compression: none
2026-02-16T00:35:55.691 [DEBUG] [Thread-213978] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:35:55.703 [DEBUG] [Thread-213978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:35:55.703 [DEBUG] [Thread-213978] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:35:55.704 [DEBUG] [Thread-213978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:35:55.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:35:55.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:35:55.704 [DEBUG] [Thread-213978] [transport.py] [_log()] userauth is OK
2026-02-16T00:35:55.705 [DEBUG] [Thread-213978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:35:55.705 [DEBUG] [Thread-213978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:35:55.705 [DEBUG] [Thread-213978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:35:55.705 [DEBUG] [Thread-213978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:35:55.727 [INFO] [Thread-213978] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:35:55.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:35:56.313 [DEBUG] [Thread-213978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:35:56.314 [DEBUG] [Thread-213978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:35:56.314 [DEBUG] [Thread-213978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:35:56.354 [DEBUG] [Thread-213978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:35:56.354 [DEBUG] [Thread-213978] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:35:56.359 [DEBUG] [Thread-213978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:35:56.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:35:56.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:35:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:35:56.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:35:56.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:35:56.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:35:56.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:35:56.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:35:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:35:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.941420 -999.00  +13.50  14.95     58   +5.60 1 1 1 1 1     0    0 7.37 -37.70 ZNESW 11.3 14.9 149.6 20.3 13.9 -24.0 13.8 -22.8 13.6 -21.8 13.9 -23.0
2026-02-16T00:35:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:35:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:35:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.941420
2026-02-16T00:35:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:35:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:35:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:35:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:35:56.377 [DEBUG] [Thread-213978] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:35:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:35:56.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:35:33', tmtdew=9.33, humidity=53.31, cloud=0.0, wind=24.03, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:35:33', seeing=1.78, atlas_timestamp='2026-02-15T22:35:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, -0.014749999999999375, -0.053749999999999076, -0.007500000000000284, 0.022500000000000853, -0.029749999999999943, -0.0389999999999997, 0.017250000000000654, 0.046499999999999986, 0.03249999999999886, -0.07174999999999976, -0.006000000000000227, 0.04699999999999882, 0.04875000000000007, 0.033500000000000085, -0.0045000000000001705, 0.04824999999999946, 0.01750000000000007, -0.011000000000001009, -0.0007500000000018048, 0.05349999999999966, 0.02474999999999916, -0.011749999999999261, 0.042749999999999844, 0.08299999999999841, 0.0035000000000007248, 0.024750000000000938, -0.02149999999999963, 0.025000000000000355, -0.026999999999999247, 0.05500000000000149, 0.07949999999999946, 0.0467499999999994], zp_timestamp='2026-02-15T22:31:00')
2026-02-16T00:35:56.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:35:56.474 [DEBUG] [Thread-213981] [transport.py] [_log()] starting thread (client mode): 0xa5771480
2026-02-16T00:35:56.474 [DEBUG] [Thread-213981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:35:56.489 [DEBUG] [Thread-213981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:35:56.489 [INFO] [Thread-213981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:35:56.497 [DEBUG] [Thread-213981] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:35:56.497 [DEBUG] [Thread-213981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:35:56.497 [DEBUG] [Thread-213981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:35:56.497 [DEBUG] [Thread-213981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:56.497 [DEBUG] [Thread-213981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:35:56.497 [DEBUG] [Thread-213981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] client lang: <none>
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] server lang: <none>
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] kex follows: False
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:35:56.498 [DEBUG] [Thread-213981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:35:56.499 [DEBUG] [Thread-213981] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:35:56.499 [DEBUG] [Thread-213981] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:35:56.499 [DEBUG] [Thread-213981] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:35:56.499 [DEBUG] [Thread-213981] [transport.py] [_log()] Compression: none
2026-02-16T00:35:56.499 [DEBUG] [Thread-213981] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:35:56.557 [DEBUG] [Thread-213981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:35:56.558 [DEBUG] [Thread-213981] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:35:56.558 [DEBUG] [Thread-213981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:35:56.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:35:56.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:35:56.613 [DEBUG] [Thread-213981] [transport.py] [_log()] userauth is OK
2026-02-16T00:35:56.613 [DEBUG] [Thread-213981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:35:56.613 [DEBUG] [Thread-213981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:35:56.614 [DEBUG] [Thread-213981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:35:56.614 [DEBUG] [Thread-213981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:35:56.633 [INFO] [Thread-213981] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:35:56.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:35:56.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:35:57.462 [DEBUG] [Thread-213981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:35:57.463 [DEBUG] [Thread-213981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:35:57.510 [DEBUG] [Thread-213981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:35:57.510 [DEBUG] [Thread-213981] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:35:57.520 [DEBUG] [Thread-213981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:35:57.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:35:57.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:35:57.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:35:57.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:35:57.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:35:57.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:35:57.556 [DEBUG] [Thread-213981] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:36:04.357 [DEBUG] [Thread-213983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:17.866 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:17.867 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:19.419 [DEBUG] [Thread-213984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:27.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:36:27.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:36:27.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:36:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 36, 8), 9.19, 53.59, 0.0, 24.86, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:36:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:36:08
2026-02-16T00:36:29.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:36:30.145 [DEBUG] [Thread-213985] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-16T00:36:30.145 [DEBUG] [Thread-213985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:36:30.164 [DEBUG] [Thread-213985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:36:30.165 [INFO] [Thread-213985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:36:30.167 [DEBUG] [Thread-213985] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] client lang: <none>
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] server lang: <none>
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] kex follows: False
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] Compression: none
2026-02-16T00:36:30.168 [DEBUG] [Thread-213985] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:36:30.184 [DEBUG] [Thread-213985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:36:30.185 [DEBUG] [Thread-213985] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:36:30.185 [DEBUG] [Thread-213985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:36:30.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:36:30.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:36:30.187 [DEBUG] [Thread-213985] [transport.py] [_log()] userauth is OK
2026-02-16T00:36:30.187 [DEBUG] [Thread-213985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:36:30.188 [DEBUG] [Thread-213985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:36:30.188 [DEBUG] [Thread-213985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:36:30.188 [DEBUG] [Thread-213985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:36:30.213 [INFO] [Thread-213985] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:36:30.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:36:30.778 [DEBUG] [Thread-213985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:36:30.778 [DEBUG] [Thread-213985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:36:30.779 [DEBUG] [Thread-213985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:36:30.819 [DEBUG] [Thread-213985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:36:30.819 [DEBUG] [Thread-213985] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:36:30.821 [DEBUG] [Thread-213985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:36:30.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:36:30.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:36:30.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:36:30.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:36:30.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:36:30.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:36:30.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:36:30.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:36:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:36:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.941768 -999.00  +13.50  14.67     58   +5.60 1 1 1 1 1     0    0 6.92 -41.90 ZNESW 13.8 14.7 159.0 20.1 13.9 -24.0 13.8 -22.8 13.6 -21.7 13.8 -22.9
2026-02-16T00:36:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:36:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:36:30.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.941768
2026-02-16T00:36:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:36:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:36:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:36:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:36:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:36:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:36:08', tmtdew=9.19, humidity=53.59, cloud=0.0, wind=24.86, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:36:09', seeing=1.78, atlas_timestamp='2026-02-15T22:36:08.755', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:35:00')
2026-02-16T00:36:30.844 [DEBUG] [Thread-213985] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:36:30.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:36:30.938 [DEBUG] [Thread-213988] [transport.py] [_log()] starting thread (client mode): 0xa2d13130
2026-02-16T00:36:30.939 [DEBUG] [Thread-213988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:36:30.956 [DEBUG] [Thread-213988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:36:30.956 [INFO] [Thread-213988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] client lang: <none>
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] server lang: <none>
2026-02-16T00:36:30.964 [DEBUG] [Thread-213988] [transport.py] [_log()] kex follows: False
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] Compression: none
2026-02-16T00:36:30.965 [DEBUG] [Thread-213988] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:36:31.025 [DEBUG] [Thread-213988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:36:31.025 [DEBUG] [Thread-213988] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:36:31.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:36:31.027 [DEBUG] [Thread-213988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:36:31.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:36:31.080 [DEBUG] [Thread-213988] [transport.py] [_log()] userauth is OK
2026-02-16T00:36:31.081 [DEBUG] [Thread-213988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:36:31.081 [DEBUG] [Thread-213988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:36:31.081 [DEBUG] [Thread-213988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:36:31.081 [DEBUG] [Thread-213988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:36:31.099 [INFO] [Thread-213988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:36:31.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:36:31.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:36:31.935 [DEBUG] [Thread-213988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:36:31.935 [DEBUG] [Thread-213988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:36:31.983 [DEBUG] [Thread-213988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:36:31.984 [DEBUG] [Thread-213988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:36:31.993 [DEBUG] [Thread-213988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:36:32.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:36:32.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:36:32.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:36:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:36:32.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:36:32.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:36:32.030 [DEBUG] [Thread-213988] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:36:34.455 [DEBUG] [Thread-213990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:39.047 [DEBUG] [Thread-213991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:40.805 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:36:49.530 [DEBUG] [Thread-213992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:02.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:37:02.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:37:02.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:37:03.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 36, 43), 9.16, 53.99, 0.0, 25.64, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:37:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:36:43
2026-02-16T00:37:04.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:37:04.412 [DEBUG] [Thread-213993] [transport.py] [_log()] starting thread (client mode): 0xa2d56b90
2026-02-16T00:37:04.412 [DEBUG] [Thread-213993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:37:04.427 [DEBUG] [Thread-213993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:37:04.427 [INFO] [Thread-213993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] client lang: <none>
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] server lang: <none>
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] kex follows: False
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] Compression: none
2026-02-16T00:37:04.429 [DEBUG] [Thread-213993] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:37:04.442 [DEBUG] [Thread-213993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:37:04.442 [DEBUG] [Thread-213993] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:37:04.443 [DEBUG] [Thread-213993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:37:04.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:37:04.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:37:04.444 [DEBUG] [Thread-213993] [transport.py] [_log()] userauth is OK
2026-02-16T00:37:04.444 [DEBUG] [Thread-213993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:37:04.445 [DEBUG] [Thread-213993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:37:04.445 [DEBUG] [Thread-213993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:37:04.445 [DEBUG] [Thread-213993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:37:04.462 [INFO] [Thread-213993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:37:04.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:37:04.567 [DEBUG] [Thread-213995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:05.182 [DEBUG] [Thread-213993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:37:05.182 [DEBUG] [Thread-213993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:37:05.182 [DEBUG] [Thread-213993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:37:05.222 [DEBUG] [Thread-213993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:37:05.223 [DEBUG] [Thread-213993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:37:05.225 [DEBUG] [Thread-213993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:37:05.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:37:05.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:37:05.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:37:05.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:37:05.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:37:05.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:37:05.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:37:05.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:37:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:37:05.245 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2026-02-16T00:37:05.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:36:43', tmtdew=9.16, humidity=53.99, cloud=0.0, wind=25.64, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:36:44', seeing=1.84, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:35:00')
2026-02-16T00:37:05.246 [DEBUG] [Thread-213993] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:37:05.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:37:05.346 [DEBUG] [Thread-213997] [transport.py] [_log()] starting thread (client mode): 0xa2d6cee0
2026-02-16T00:37:05.347 [DEBUG] [Thread-213997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:37:05.363 [DEBUG] [Thread-213997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:37:05.363 [INFO] [Thread-213997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:37:05.370 [DEBUG] [Thread-213997] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] client lang: <none>
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] server lang: <none>
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] kex follows: False
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:37:05.371 [DEBUG] [Thread-213997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:37:05.372 [DEBUG] [Thread-213997] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:37:05.372 [DEBUG] [Thread-213997] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:37:05.372 [DEBUG] [Thread-213997] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:37:05.372 [DEBUG] [Thread-213997] [transport.py] [_log()] Compression: none
2026-02-16T00:37:05.372 [DEBUG] [Thread-213997] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:37:05.429 [DEBUG] [Thread-213997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:37:05.429 [DEBUG] [Thread-213997] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:37:05.430 [DEBUG] [Thread-213997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:37:05.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:37:05.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:37:05.488 [DEBUG] [Thread-213997] [transport.py] [_log()] userauth is OK
2026-02-16T00:37:05.489 [DEBUG] [Thread-213997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:37:05.489 [DEBUG] [Thread-213997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:37:05.489 [DEBUG] [Thread-213997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:37:05.489 [DEBUG] [Thread-213997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:37:05.513 [INFO] [Thread-213997] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:37:05.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:37:05.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:37:06.333 [DEBUG] [Thread-213997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:37:06.333 [DEBUG] [Thread-213997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:37:06.381 [DEBUG] [Thread-213997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:37:06.382 [DEBUG] [Thread-213997] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:37:06.391 [DEBUG] [Thread-213997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:37:06.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:37:06.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:37:06.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:37:06.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:37:06.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:37:06.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:37:06.427 [DEBUG] [Thread-213997] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:37:18.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:18.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:19.604 [DEBUG] [Thread-213999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:34.656 [DEBUG] [Thread-214000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:36.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:37:36.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:37:36.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:37:38.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 37, 18), 9.18, 53.92, 0.0, 22.85, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:37:38.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:37:18
2026-02-16T00:37:38.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:37:38.903 [DEBUG] [Thread-214001] [transport.py] [_log()] starting thread (client mode): 0xa5770220
2026-02-16T00:37:38.903 [DEBUG] [Thread-214001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:37:38.923 [DEBUG] [Thread-214001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:37:38.924 [INFO] [Thread-214001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] client lang: <none>
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] server lang: <none>
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] kex follows: False
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:37:38.927 [DEBUG] [Thread-214001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:37:38.928 [DEBUG] [Thread-214001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:37:38.928 [DEBUG] [Thread-214001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:37:38.928 [DEBUG] [Thread-214001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:37:38.928 [DEBUG] [Thread-214001] [transport.py] [_log()] Compression: none
2026-02-16T00:37:38.928 [DEBUG] [Thread-214001] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:37:38.935 [DEBUG] [Thread-214001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:37:38.936 [DEBUG] [Thread-214001] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:37:38.936 [DEBUG] [Thread-214001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:37:38.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:37:38.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:37:38.980 [DEBUG] [Thread-214001] [transport.py] [_log()] userauth is OK
2026-02-16T00:37:38.981 [DEBUG] [Thread-214001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:37:38.981 [DEBUG] [Thread-214001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:37:38.981 [DEBUG] [Thread-214001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:37:38.981 [DEBUG] [Thread-214001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:37:39.018 [INFO] [Thread-214001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:37:39.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:37:39.113 [DEBUG] [Thread-214003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:37:39.632 [DEBUG] [Thread-214001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:37:39.633 [DEBUG] [Thread-214001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:37:39.633 [DEBUG] [Thread-214001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:37:39.673 [DEBUG] [Thread-214001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:37:39.673 [DEBUG] [Thread-214001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:37:39.676 [DEBUG] [Thread-214001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:37:39.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:37:39.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:37:39.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:37:39.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:37:39.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:37:39.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:37:39.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:37:39.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:37:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:37:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.942115 -999.00  +13.50  12.84     58   +5.60 1 1 1 1 1     0    0 7.11 -41.80 ZNESW 16.1 12.8 148.0 21.5 13.9 -23.8 13.8 -22.7 13.6 -21.7 13.9 -22.9
2026-02-16T00:37:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:37:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:37:39.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.942115
2026-02-16T00:37:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:37:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:37:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:37:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:37:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:37:39.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:37:18', tmtdew=9.18, humidity=53.92, cloud=0.0, wind=22.85, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:37:19', seeing=2.28, atlas_timestamp='2026-02-15T22:36:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:35:00')
2026-02-16T00:37:39.692 [DEBUG] [Thread-214001] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:37:39.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:37:39.788 [DEBUG] [Thread-214005] [transport.py] [_log()] starting thread (client mode): 0xa2d54070
2026-02-16T00:37:39.789 [DEBUG] [Thread-214005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:37:39.803 [DEBUG] [Thread-214005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:37:39.803 [INFO] [Thread-214005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:37:39.810 [DEBUG] [Thread-214005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] client lang: <none>
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] server lang: <none>
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] kex follows: False
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] Compression: none
2026-02-16T00:37:39.811 [DEBUG] [Thread-214005] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:37:39.874 [DEBUG] [Thread-214005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:37:39.875 [DEBUG] [Thread-214005] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:37:39.875 [DEBUG] [Thread-214005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:37:39.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:37:39.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:37:39.933 [DEBUG] [Thread-214005] [transport.py] [_log()] userauth is OK
2026-02-16T00:37:39.933 [DEBUG] [Thread-214005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:37:39.933 [DEBUG] [Thread-214005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:37:39.933 [DEBUG] [Thread-214005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:37:39.933 [DEBUG] [Thread-214005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:37:39.952 [INFO] [Thread-214005] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:37:39.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:37:39.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:37:40.756 [DEBUG] [Thread-214005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:37:40.757 [DEBUG] [Thread-214005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:37:40.804 [DEBUG] [Thread-214005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:37:40.805 [DEBUG] [Thread-214005] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:37:40.814 [DEBUG] [Thread-214005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:37:40.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:37:40.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:37:40.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:37:40.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:37:40.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:37:40.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:37:40.850 [DEBUG] [Thread-214005] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:37:49.690 [DEBUG] [Thread-214007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:04.742 [DEBUG] [Thread-214008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:10.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:38:10.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:38:10.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:38:13.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 37, 54), 9.16, 54.01, 0.0, 24.14, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:38:13.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:37:54
2026-02-16T00:38:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:38:13.608 [DEBUG] [Thread-214009] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-16T00:38:13.608 [DEBUG] [Thread-214009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:38:13.629 [DEBUG] [Thread-214009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:38:13.630 [INFO] [Thread-214009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] client lang: <none>
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] server lang: <none>
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] kex follows: False
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] Compression: none
2026-02-16T00:38:13.633 [DEBUG] [Thread-214009] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:38:13.650 [DEBUG] [Thread-214009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:38:13.651 [DEBUG] [Thread-214009] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:38:13.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:38:13.651 [DEBUG] [Thread-214009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:38:13.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:38:13.653 [DEBUG] [Thread-214009] [transport.py] [_log()] userauth is OK
2026-02-16T00:38:13.654 [DEBUG] [Thread-214009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:38:13.654 [DEBUG] [Thread-214009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:38:13.654 [DEBUG] [Thread-214009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:38:13.654 [DEBUG] [Thread-214009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:38:13.669 [INFO] [Thread-214009] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:38:13.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:38:14.426 [DEBUG] [Thread-214009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:38:14.427 [DEBUG] [Thread-214009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:38:14.427 [DEBUG] [Thread-214009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:38:14.467 [DEBUG] [Thread-214009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:38:14.467 [DEBUG] [Thread-214009] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:38:14.471 [DEBUG] [Thread-214009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:38:14.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:38:14.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:38:14.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:38:14.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:38:14.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:38:14.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:38:14.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:38:14.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:38:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:38:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.942462 -999.00  +13.50  13.35     58   +5.50 1 1 1 1 1     0    0 7.12 -41.96 ZNESW 17.0 13.3 145.1 20.4 13.9 -23.9 13.8 -22.7 13.6 -21.8 13.8 -23.0
2026-02-16T00:38:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:38:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:38:14.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.942462
2026-02-16T00:38:14.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:38:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:38:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:38:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:38:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:38:14.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:37:54', tmtdew=9.16, humidity=54.01, cloud=0.0, wind=24.14, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:37:55', seeing=2.29, atlas_timestamp='2026-02-15T22:37:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:35:00')
2026-02-16T00:38:14.498 [DEBUG] [Thread-214009] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:38:14.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:38:14.594 [DEBUG] [Thread-214012] [transport.py] [_log()] starting thread (client mode): 0xa2d133a0
2026-02-16T00:38:14.595 [DEBUG] [Thread-214012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:38:14.609 [DEBUG] [Thread-214012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:38:14.609 [INFO] [Thread-214012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:38:14.616 [DEBUG] [Thread-214012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:38:14.616 [DEBUG] [Thread-214012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:38:14.616 [DEBUG] [Thread-214012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] client lang: <none>
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] server lang: <none>
2026-02-16T00:38:14.617 [DEBUG] [Thread-214012] [transport.py] [_log()] kex follows: False
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] Compression: none
2026-02-16T00:38:14.618 [DEBUG] [Thread-214012] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:38:14.674 [DEBUG] [Thread-214012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:38:14.675 [DEBUG] [Thread-214012] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:38:14.675 [DEBUG] [Thread-214012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:38:14.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:38:14.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:38:14.732 [DEBUG] [Thread-214012] [transport.py] [_log()] userauth is OK
2026-02-16T00:38:14.732 [DEBUG] [Thread-214012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:38:14.733 [DEBUG] [Thread-214012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:38:14.733 [DEBUG] [Thread-214012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:38:14.733 [DEBUG] [Thread-214012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:38:14.749 [INFO] [Thread-214012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:38:14.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:38:14.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:38:15.086 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:15.554 [DEBUG] [Thread-214012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:38:15.554 [DEBUG] [Thread-214012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:38:15.602 [DEBUG] [Thread-214012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:38:15.603 [DEBUG] [Thread-214012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:38:15.612 [DEBUG] [Thread-214012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:38:15.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:38:15.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:38:15.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:38:15.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:38:15.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:38:15.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:38:15.648 [DEBUG] [Thread-214012] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:38:18.270 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:18.271 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:19.779 [DEBUG] [Thread-214014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:34.828 [DEBUG] [Thread-214015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:39.180 [DEBUG] [Thread-214016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:45.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:38:45.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:38:45.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:38:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 38, 30), 9.14, 54.06, 0.0, 23.8, 13.65, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:38:47.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:38:30
2026-02-16T00:38:47.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:38:48.013 [DEBUG] [Thread-214017] [transport.py] [_log()] starting thread (client mode): 0xa2d6f3d0
2026-02-16T00:38:48.013 [DEBUG] [Thread-214017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:38:48.033 [DEBUG] [Thread-214017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:38:48.033 [INFO] [Thread-214017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:38:48.036 [DEBUG] [Thread-214017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:38:48.036 [DEBUG] [Thread-214017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:38:48.036 [DEBUG] [Thread-214017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:38:48.036 [DEBUG] [Thread-214017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:48.036 [DEBUG] [Thread-214017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] client lang: <none>
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] server lang: <none>
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] kex follows: False
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] Compression: none
2026-02-16T00:38:48.037 [DEBUG] [Thread-214017] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:38:48.054 [DEBUG] [Thread-214017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:38:48.054 [DEBUG] [Thread-214017] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:38:48.055 [DEBUG] [Thread-214017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:38:48.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:38:48.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:38:48.057 [DEBUG] [Thread-214017] [transport.py] [_log()] userauth is OK
2026-02-16T00:38:48.057 [DEBUG] [Thread-214017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:38:48.057 [DEBUG] [Thread-214017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:38:48.057 [DEBUG] [Thread-214017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:38:48.057 [DEBUG] [Thread-214017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:38:48.082 [INFO] [Thread-214017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:38:48.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:38:48.712 [DEBUG] [Thread-214017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:38:48.712 [DEBUG] [Thread-214017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:38:48.713 [DEBUG] [Thread-214017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:38:48.753 [DEBUG] [Thread-214017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:38:48.753 [DEBUG] [Thread-214017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:38:48.757 [DEBUG] [Thread-214017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:38:48.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:38:48.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:38:48.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:38:48.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:38:48.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:38:48.782 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:38:48.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:38:48.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:38:48.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:38:48.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.943156 -999.00  +13.50  16.65     59   +5.70 1 1 1 1 1     0    0 6.86 -44.64 ZNESW 16.8 16.6 140.2 19.6 13.9 -23.7 13.8 -22.6 13.5 -21.5 13.8 -22.7
2026-02-16T00:38:48.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:38:48.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:38:48.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.943156
2026-02-16T00:38:48.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:38:48.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:38:48.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:38:48.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:38:48.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:38:48.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:38:30', tmtdew=9.14, humidity=54.06, cloud=0.0, wind=23.8, temperature=13.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:38:30', seeing=2.29, atlas_timestamp='2026-02-15T22:38:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:35:00')
2026-02-16T00:38:48.785 [DEBUG] [Thread-214017] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:38:48.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:38:48.882 [DEBUG] [Thread-214020] [transport.py] [_log()] starting thread (client mode): 0xa81d7640
2026-02-16T00:38:48.882 [DEBUG] [Thread-214020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:38:48.900 [DEBUG] [Thread-214020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:38:48.900 [INFO] [Thread-214020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:38:48.907 [DEBUG] [Thread-214020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] client lang: <none>
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] server lang: <none>
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] kex follows: False
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:38:48.908 [DEBUG] [Thread-214020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:38:48.909 [DEBUG] [Thread-214020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:38:48.909 [DEBUG] [Thread-214020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:38:48.909 [DEBUG] [Thread-214020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:38:48.909 [DEBUG] [Thread-214020] [transport.py] [_log()] Compression: none
2026-02-16T00:38:48.909 [DEBUG] [Thread-214020] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:38:48.969 [DEBUG] [Thread-214020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:38:48.970 [DEBUG] [Thread-214020] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:38:48.971 [DEBUG] [Thread-214020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:38:48.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:38:48.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:38:49.028 [DEBUG] [Thread-214020] [transport.py] [_log()] userauth is OK
2026-02-16T00:38:49.029 [DEBUG] [Thread-214020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:38:49.029 [DEBUG] [Thread-214020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:38:49.029 [DEBUG] [Thread-214020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:38:49.029 [DEBUG] [Thread-214020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:38:49.051 [INFO] [Thread-214020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:38:49.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:38:49.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:38:49.864 [DEBUG] [Thread-214022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:38:49.870 [DEBUG] [Thread-214020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:38:49.870 [DEBUG] [Thread-214020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:38:49.918 [DEBUG] [Thread-214020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:38:49.918 [DEBUG] [Thread-214020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:38:49.927 [DEBUG] [Thread-214020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:38:49.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:38:49.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:38:49.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:38:49.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:38:49.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:38:49.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:38:49.964 [DEBUG] [Thread-214020] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:39:04.911 [DEBUG] [Thread-214023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:18.472 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:18.474 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:19.948 [DEBUG] [Thread-214024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:19.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:39:19.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:39:19.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:39:22.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 39, 5), 9.12, 54.14, 0.0, 23.64, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:39:22.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:39:05
2026-02-16T00:39:22.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:39:22.945 [DEBUG] [Thread-214025] [transport.py] [_log()] starting thread (client mode): 0xa57c2320
2026-02-16T00:39:22.945 [DEBUG] [Thread-214025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:39:22.966 [DEBUG] [Thread-214025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:39:22.966 [INFO] [Thread-214025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] client lang: <none>
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] server lang: <none>
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] kex follows: False
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] Compression: none
2026-02-16T00:39:22.969 [DEBUG] [Thread-214025] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:39:22.987 [DEBUG] [Thread-214025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:39:22.987 [DEBUG] [Thread-214025] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:39:22.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:39:22.988 [DEBUG] [Thread-214025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:39:22.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:39:22.989 [DEBUG] [Thread-214025] [transport.py] [_log()] userauth is OK
2026-02-16T00:39:22.989 [DEBUG] [Thread-214025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:39:22.989 [DEBUG] [Thread-214025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:39:22.989 [DEBUG] [Thread-214025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:39:22.989 [DEBUG] [Thread-214025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:39:23.006 [INFO] [Thread-214025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:39:23.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:39:23.641 [DEBUG] [Thread-214025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:39:23.642 [DEBUG] [Thread-214025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:39:23.642 [DEBUG] [Thread-214025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:39:23.682 [DEBUG] [Thread-214025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:39:23.683 [DEBUG] [Thread-214025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:39:23.686 [DEBUG] [Thread-214025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:39:23.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:39:23.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:39:23.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:39:23.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:39:23.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:39:23.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:39:23.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:39:23.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:39:23.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:39:23.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.943504 -999.00  +13.50  19.89     59   +5.70 1 1 1 1 1     0    0 6.83 -43.45 ZNESW 22.1 19.9 141.2 25.9 13.9 -23.7 13.8 -22.5 13.6 -21.6 13.8 -22.7
2026-02-16T00:39:23.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:39:23.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:39:23.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.943504
2026-02-16T00:39:23.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:39:23.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:39:23.715 [DEBUG] [Thread-214025] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:39:23.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:39:23.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:39:23.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:39:23.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:39:05', tmtdew=9.12, humidity=54.14, cloud=0.0, wind=23.64, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:39:05', seeing=2.56, atlas_timestamp='2026-02-15T22:38:38.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:37:00')
2026-02-16T00:39:23.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:39:23.810 [DEBUG] [Thread-214028] [transport.py] [_log()] starting thread (client mode): 0xa57c0070
2026-02-16T00:39:23.810 [DEBUG] [Thread-214028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:39:23.826 [DEBUG] [Thread-214028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:39:23.826 [INFO] [Thread-214028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:39:23.834 [DEBUG] [Thread-214028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:39:23.834 [DEBUG] [Thread-214028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] client lang: <none>
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] server lang: <none>
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] kex follows: False
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] Compression: none
2026-02-16T00:39:23.835 [DEBUG] [Thread-214028] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:39:23.892 [DEBUG] [Thread-214028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:39:23.893 [DEBUG] [Thread-214028] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:39:23.894 [DEBUG] [Thread-214028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:39:23.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:39:23.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:39:23.949 [DEBUG] [Thread-214028] [transport.py] [_log()] userauth is OK
2026-02-16T00:39:23.950 [DEBUG] [Thread-214028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:39:23.950 [DEBUG] [Thread-214028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:39:23.950 [DEBUG] [Thread-214028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:39:23.950 [DEBUG] [Thread-214028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:39:23.970 [INFO] [Thread-214028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:39:23.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:39:23.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:39:24.789 [DEBUG] [Thread-214028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:39:24.789 [DEBUG] [Thread-214028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:39:24.837 [DEBUG] [Thread-214028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:39:24.837 [DEBUG] [Thread-214028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:39:24.846 [DEBUG] [Thread-214028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:39:24.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:39:24.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:39:24.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:39:24.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:39:24.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:39:24.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:39:24.884 [DEBUG] [Thread-214028] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:39:34.982 [DEBUG] [Thread-214030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:39.255 [DEBUG] [Thread-214031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:48.579 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:50.024 [DEBUG] [Thread-214032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:39:54.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:39:54.908 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:39:54.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:39:56.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 39, 40), 9.35, 53.25, 0.0, 28.4, 14.02, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:39:56.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:39:40
2026-02-16T00:39:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:39:57.296 [DEBUG] [Thread-214033] [transport.py] [_log()] starting thread (client mode): 0xa2d26410
2026-02-16T00:39:57.296 [DEBUG] [Thread-214033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:39:57.316 [DEBUG] [Thread-214033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:39:57.316 [INFO] [Thread-214033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:57.319 [DEBUG] [Thread-214033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] client lang: <none>
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] server lang: <none>
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] kex follows: False
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] Compression: none
2026-02-16T00:39:57.320 [DEBUG] [Thread-214033] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:39:57.335 [DEBUG] [Thread-214033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:39:57.335 [DEBUG] [Thread-214033] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:39:57.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:39:57.336 [DEBUG] [Thread-214033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:39:57.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:39:57.338 [DEBUG] [Thread-214033] [transport.py] [_log()] userauth is OK
2026-02-16T00:39:57.338 [DEBUG] [Thread-214033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:39:57.338 [DEBUG] [Thread-214033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:39:57.338 [DEBUG] [Thread-214033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:39:57.338 [DEBUG] [Thread-214033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:39:57.361 [INFO] [Thread-214033] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:39:57.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:39:57.987 [DEBUG] [Thread-214033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:39:57.987 [DEBUG] [Thread-214033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:39:57.987 [DEBUG] [Thread-214033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:39:58.028 [DEBUG] [Thread-214033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:39:58.028 [DEBUG] [Thread-214033] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:39:58.031 [DEBUG] [Thread-214033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:39:58.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:39:58.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:39:58.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:39:58.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:39:58.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:39:58.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:39:58.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:39:58.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:39:58.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:39:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.943851 -999.00  +13.50  18.54     59   +5.70 1 1 1 1 1     0    0 6.81 -45.99 ZNESW 18.4 18.5 153.7 21.9 13.9 -23.7 13.8 -22.5 13.6 -21.5 13.8 -22.7
2026-02-16T00:39:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:39:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:39:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.943851
2026-02-16T00:39:58.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:39:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:39:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:39:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:39:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:39:58.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:39:40', tmtdew=9.35, humidity=53.25, cloud=0.0, wind=28.4, temperature=14.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:39:40', seeing=2.19, atlas_timestamp='2026-02-15T22:39:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:37:00')
2026-02-16T00:39:58.056 [DEBUG] [Thread-214033] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:39:58.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:39:58.151 [DEBUG] [Thread-214036] [transport.py] [_log()] starting thread (client mode): 0xa57b3ca0
2026-02-16T00:39:58.151 [DEBUG] [Thread-214036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:39:58.165 [DEBUG] [Thread-214036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:39:58.165 [INFO] [Thread-214036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:39:58.172 [DEBUG] [Thread-214036] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:39:58.173 [DEBUG] [Thread-214036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] client lang: <none>
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] server lang: <none>
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] kex follows: False
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] Compression: none
2026-02-16T00:39:58.174 [DEBUG] [Thread-214036] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:39:58.231 [DEBUG] [Thread-214036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:39:58.232 [DEBUG] [Thread-214036] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:39:58.232 [DEBUG] [Thread-214036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:39:58.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:39:58.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:39:58.288 [DEBUG] [Thread-214036] [transport.py] [_log()] userauth is OK
2026-02-16T00:39:58.288 [DEBUG] [Thread-214036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:39:58.288 [DEBUG] [Thread-214036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:39:58.288 [DEBUG] [Thread-214036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:39:58.288 [DEBUG] [Thread-214036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:39:58.306 [INFO] [Thread-214036] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:39:58.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:39:58.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:39:59.170 [DEBUG] [Thread-214036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:39:59.171 [DEBUG] [Thread-214036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:39:59.218 [DEBUG] [Thread-214036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:39:59.218 [DEBUG] [Thread-214036] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:39:59.227 [DEBUG] [Thread-214036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:39:59.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:39:59.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:39:59.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:39:59.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:39:59.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:39:59.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:39:59.260 [DEBUG] [Thread-214036] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:40:05.060 [DEBUG] [Thread-214038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:40:18.674 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:40:18.675 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:40:20.101 [DEBUG] [Thread-214039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:40:29.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:40:29.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:40:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:40:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 40, 16), 9.17, 53.97, 0.0, 23.04, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:40:31.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:40:16
2026-02-16T00:40:31.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:40:31.924 [DEBUG] [Thread-214040] [transport.py] [_log()] starting thread (client mode): 0xa81d7760
2026-02-16T00:40:31.924 [DEBUG] [Thread-214040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:40:31.944 [DEBUG] [Thread-214040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:40:31.944 [INFO] [Thread-214040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:40:31.947 [DEBUG] [Thread-214040] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:40:31.948 [DEBUG] [Thread-214040] [transport.py] [_log()] client lang: <none>
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] server lang: <none>
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] kex follows: False
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] Compression: none
2026-02-16T00:40:31.949 [DEBUG] [Thread-214040] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:40:31.957 [DEBUG] [Thread-214040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:40:31.958 [DEBUG] [Thread-214040] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:40:31.958 [DEBUG] [Thread-214040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:40:31.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:40:31.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:40:31.960 [DEBUG] [Thread-214040] [transport.py] [_log()] userauth is OK
2026-02-16T00:40:31.960 [DEBUG] [Thread-214040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:40:31.960 [DEBUG] [Thread-214040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:40:31.960 [DEBUG] [Thread-214040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:40:31.960 [DEBUG] [Thread-214040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:40:31.995 [INFO] [Thread-214040] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:40:31.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:40:32.632 [DEBUG] [Thread-214040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:40:32.632 [DEBUG] [Thread-214040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:40:32.632 [DEBUG] [Thread-214040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:40:32.673 [DEBUG] [Thread-214040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:40:32.673 [DEBUG] [Thread-214040] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:40:32.675 [DEBUG] [Thread-214040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:40:32.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:40:32.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:40:32.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:40:32.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:40:32.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:40:32.694 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:40:32.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:40:32.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:40:32.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.944198 -999.00  +13.60  16.98     59   +5.70 1 1 1 1 1     0    0 6.66 -52.75 ZNESW 15.4 17.0 148.3 20.2 13.9 -23.7 13.8 -22.5 13.5 -21.4 13.9 -22.6
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.944198
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:40:32.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:40:16', tmtdew=9.17, humidity=53.97, cloud=0.0, wind=23.04, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:40:17', seeing=1.95, atlas_timestamp='2026-02-15T22:39:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:37:00')
2026-02-16T00:40:32.696 [DEBUG] [Thread-214040] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:40:32.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:40:32.779 [DEBUG] [Thread-214043] [transport.py] [_log()] starting thread (client mode): 0xa5773580
2026-02-16T00:40:32.779 [DEBUG] [Thread-214043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:40:32.793 [DEBUG] [Thread-214043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:40:32.793 [INFO] [Thread-214043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:40:32.800 [DEBUG] [Thread-214043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] client lang: <none>
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] server lang: <none>
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] kex follows: False
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] Compression: none
2026-02-16T00:40:32.801 [DEBUG] [Thread-214043] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:40:32.861 [DEBUG] [Thread-214043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:40:32.862 [DEBUG] [Thread-214043] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:40:32.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:40:32.863 [DEBUG] [Thread-214043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:40:32.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:40:32.916 [DEBUG] [Thread-214043] [transport.py] [_log()] userauth is OK
2026-02-16T00:40:32.916 [DEBUG] [Thread-214043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:40:32.917 [DEBUG] [Thread-214043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:40:32.917 [DEBUG] [Thread-214043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:40:32.917 [DEBUG] [Thread-214043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:40:32.940 [INFO] [Thread-214043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:40:32.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:40:32.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:40:33.760 [DEBUG] [Thread-214043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:40:33.761 [DEBUG] [Thread-214043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:40:33.808 [DEBUG] [Thread-214043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:40:33.808 [DEBUG] [Thread-214043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:40:33.817 [DEBUG] [Thread-214043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:40:33.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:40:33.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:40: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
2026-02-16T00:40:33.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:40:33.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:40:33.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:40:33.853 [DEBUG] [Thread-214043] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:40:35.137 [DEBUG] [Thread-214045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:40:39.311 [DEBUG] [Thread-214046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:40:50.187 [DEBUG] [Thread-214047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:03.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:41:03.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:41:03.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:41:05.220 [DEBUG] [Thread-214048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 40, 51), 9.24, 53.89, 0.0, 22.96, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:41:05.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:40:51
2026-02-16T00:41:06.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:41:06.272 [DEBUG] [Thread-214049] [transport.py] [_log()] starting thread (client mode): 0xa57e0df0
2026-02-16T00:41:06.272 [DEBUG] [Thread-214049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:41:06.292 [DEBUG] [Thread-214049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:41:06.292 [INFO] [Thread-214049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] client lang: <none>
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] server lang: <none>
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] kex follows: False
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:41:06.293 [DEBUG] [Thread-214049] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:41:06.294 [DEBUG] [Thread-214049] [transport.py] [_log()] Compression: none
2026-02-16T00:41:06.294 [DEBUG] [Thread-214049] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:41:06.301 [DEBUG] [Thread-214049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:41:06.301 [DEBUG] [Thread-214049] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:41:06.301 [DEBUG] [Thread-214049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:41:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:41:06.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:41:06.302 [DEBUG] [Thread-214049] [transport.py] [_log()] userauth is OK
2026-02-16T00:41:06.302 [DEBUG] [Thread-214049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:41:06.302 [DEBUG] [Thread-214049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:41:06.302 [DEBUG] [Thread-214049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:41:06.302 [DEBUG] [Thread-214049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:41:06.312 [INFO] [Thread-214049] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:41:06.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:41:06.952 [DEBUG] [Thread-214049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:41:06.953 [DEBUG] [Thread-214049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:41:06.953 [DEBUG] [Thread-214049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:41:06.993 [DEBUG] [Thread-214049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:41:06.993 [DEBUG] [Thread-214049] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:41:06.997 [DEBUG] [Thread-214049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:41:07.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:41:07.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:41:07.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:41:07.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:41:07.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:41:07.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:41:07.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:41:07.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:41:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:41:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.944545 -999.00  +13.60  20.68     58   +5.70 1 1 1 1 1     0    0 6.81 -51.56 ZNESW 22.7 20.7 145.2 26.1 13.9 -23.6 13.8 -22.5 13.6 -21.4 13.8 -22.6
2026-02-16T00:41:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:41:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:41:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.944545
2026-02-16T00:41:07.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:41:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:41:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:41:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:41:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:41:07.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:40:51', tmtdew=9.24, humidity=53.89, cloud=0.0, wind=22.96, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:40:52', seeing=2.31, atlas_timestamp='2026-02-15T22:40:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:37:00')
2026-02-16T00:41:07.026 [DEBUG] [Thread-214049] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:41:07.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:41:07.121 [DEBUG] [Thread-214052] [transport.py] [_log()] starting thread (client mode): 0xa2d6d7e0
2026-02-16T00:41:07.121 [DEBUG] [Thread-214052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:41:07.135 [DEBUG] [Thread-214052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:41:07.135 [INFO] [Thread-214052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] client lang: <none>
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] server lang: <none>
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] kex follows: False
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:41:07.143 [DEBUG] [Thread-214052] [transport.py] [_log()] Compression: none
2026-02-16T00:41:07.144 [DEBUG] [Thread-214052] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:41:07.204 [DEBUG] [Thread-214052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:41:07.204 [DEBUG] [Thread-214052] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:41:07.205 [DEBUG] [Thread-214052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:41:07.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:41:07.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:41:07.260 [DEBUG] [Thread-214052] [transport.py] [_log()] userauth is OK
2026-02-16T00:41:07.261 [DEBUG] [Thread-214052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:41:07.261 [DEBUG] [Thread-214052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:41:07.261 [DEBUG] [Thread-214052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:41:07.261 [DEBUG] [Thread-214052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:41:07.280 [INFO] [Thread-214052] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:41:07.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:41:07.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:41:08.127 [DEBUG] [Thread-214052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:41:08.127 [DEBUG] [Thread-214052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:41:08.175 [DEBUG] [Thread-214052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:41:08.175 [DEBUG] [Thread-214052] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:41:08.185 [DEBUG] [Thread-214052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:41:08.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:41:08.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:41:08.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:41:08.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:41:08.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:41:08.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:41:08.222 [DEBUG] [Thread-214052] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:41:18.875 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:18.875 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:20.259 [DEBUG] [Thread-214054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:22.371 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:35.311 [DEBUG] [Thread-214055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:38.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:41:38.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:41:38.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:41:39.389 [DEBUG] [Thread-214056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:41:40.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 41, 27), 9.2, 54.02, 0.0, 22.97, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:41:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:41:27
2026-02-16T00:41:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:41:40.587 [DEBUG] [Thread-214057] [transport.py] [_log()] starting thread (client mode): 0xa2d26860
2026-02-16T00:41:40.587 [DEBUG] [Thread-214057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:41:40.610 [DEBUG] [Thread-214057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:41:40.610 [INFO] [Thread-214057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] client lang: <none>
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] server lang: <none>
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] kex follows: False
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] Compression: none
2026-02-16T00:41:40.614 [DEBUG] [Thread-214057] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:41:40.635 [DEBUG] [Thread-214057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:41:40.636 [DEBUG] [Thread-214057] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:41:40.637 [DEBUG] [Thread-214057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:41:40.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:41:40.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:41:40.639 [DEBUG] [Thread-214057] [transport.py] [_log()] userauth is OK
2026-02-16T00:41:40.639 [DEBUG] [Thread-214057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:41:40.639 [DEBUG] [Thread-214057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:41:40.639 [DEBUG] [Thread-214057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:41:40.639 [DEBUG] [Thread-214057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:41:40.675 [INFO] [Thread-214057] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:41:40.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:41:41.320 [DEBUG] [Thread-214057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:41:41.321 [DEBUG] [Thread-214057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:41:41.321 [DEBUG] [Thread-214057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:41:41.361 [DEBUG] [Thread-214057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:41:41.361 [DEBUG] [Thread-214057] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:41:41.364 [DEBUG] [Thread-214057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:41:41.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:41:41.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:41:41.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:41:41.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:41:41.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:41:41.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:41:41.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:41:41.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:41:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:41:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.945240 -999.00  +13.60  14.76     58   +5.70 1 1 1 1 1     0    0 6.63 -51.27 ZNESW 14.8 14.8 147.6 19.0 13.9 -23.6 13.8 -22.5 13.6 -21.5 13.8 -22.7
2026-02-16T00:41:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:41:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:41:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.945240
2026-02-16T00:41:41.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:41:41.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:41:41.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:41:41.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:41:41.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:41:41.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:41:27', tmtdew=9.2, humidity=54.02, cloud=0.0, wind=22.97, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:41:27', seeing=2.8, atlas_timestamp='2026-02-15T22:41:08.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.045249999999999346, -0.006750000000000256, -0.08375000000000021, -0.021500000000001407, -0.029500000000000526, 0.010750000000001592, -0.019000000000000128, 0.03375000000000128, 0.012999999999998124, 0.04499999999999993, -0.08575000000000088, -0.005000000000000782, 0.0519999999999996, 0.0012499999999988631, 0.028999999999999915, -0.02050000000000196, 0.051249999999999574, 0.022499999999999076, -0.002000000000000668, -0.0007500000000018048, 0.04399999999999871, 0.025749999999998607, -0.031749999999998835, 0.010749999999999815, 0.06999999999999851, -0.0129999999999999, 0.00274999999999892, 0.009500000000000952, 0.025500000000000966, -0.0029999999999983373, 0.03700000000000081, 0.04350000000000165, -0.005250000000000199], zp_timestamp='2026-02-15T22:37:00')
2026-02-16T00:41:41.389 [DEBUG] [Thread-214057] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:41:41.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:41:41.488 [DEBUG] [Thread-214060] [transport.py] [_log()] starting thread (client mode): 0xa2d13130
2026-02-16T00:41:41.488 [DEBUG] [Thread-214060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:41:41.504 [DEBUG] [Thread-214060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:41:41.504 [INFO] [Thread-214060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:41:41.511 [DEBUG] [Thread-214060] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] client lang: <none>
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] server lang: <none>
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] kex follows: False
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:41:41.512 [DEBUG] [Thread-214060] [transport.py] [_log()] Compression: none
2026-02-16T00:41:41.513 [DEBUG] [Thread-214060] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:41:41.568 [DEBUG] [Thread-214060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:41:41.569 [DEBUG] [Thread-214060] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:41:41.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:41:41.570 [DEBUG] [Thread-214060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:41:41.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:41:41.625 [DEBUG] [Thread-214060] [transport.py] [_log()] userauth is OK
2026-02-16T00:41:41.625 [DEBUG] [Thread-214060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:41:41.626 [DEBUG] [Thread-214060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:41:41.626 [DEBUG] [Thread-214060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:41:41.626 [DEBUG] [Thread-214060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:41:41.644 [INFO] [Thread-214060] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:41:41.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:41:41.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:41:42.475 [DEBUG] [Thread-214060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:41:42.475 [DEBUG] [Thread-214060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:41:42.523 [DEBUG] [Thread-214060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:41:42.523 [DEBUG] [Thread-214060] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:41:42.532 [DEBUG] [Thread-214060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:41:42.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:41:42.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:41:42.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:41:42.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:41:42.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:41:42.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:41:42.566 [DEBUG] [Thread-214060] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:41:50.346 [DEBUG] [Thread-214062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:05.395 [DEBUG] [Thread-214063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:12.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:42:12.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:42:12.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:42:14.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 42, 2), 9.19, 54.06, 0.0, 24.93, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:42:14.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:42:02
2026-02-16T00:42:15.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:42:15.559 [DEBUG] [Thread-214064] [transport.py] [_log()] starting thread (client mode): 0xa2d27ca0
2026-02-16T00:42:15.559 [DEBUG] [Thread-214064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:42:15.580 [DEBUG] [Thread-214064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:42:15.580 [INFO] [Thread-214064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] client lang: <none>
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] server lang: <none>
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] kex follows: False
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] Compression: none
2026-02-16T00:42:15.581 [DEBUG] [Thread-214064] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:42:15.598 [DEBUG] [Thread-214064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:42:15.599 [DEBUG] [Thread-214064] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:42:15.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:42:15.600 [DEBUG] [Thread-214064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:42:15.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:42:15.601 [DEBUG] [Thread-214064] [transport.py] [_log()] userauth is OK
2026-02-16T00:42:15.602 [DEBUG] [Thread-214064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:42:15.602 [DEBUG] [Thread-214064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:42:15.602 [DEBUG] [Thread-214064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:42:15.602 [DEBUG] [Thread-214064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:42:15.626 [INFO] [Thread-214064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:42:15.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:42:16.427 [DEBUG] [Thread-214064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:42:16.427 [DEBUG] [Thread-214064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:42:16.427 [DEBUG] [Thread-214064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:42:16.467 [DEBUG] [Thread-214064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:42:16.468 [DEBUG] [Thread-214064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:42:16.471 [DEBUG] [Thread-214064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:42:16.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:42:16.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:42:16.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:42:16.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:42:16.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:42:16.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:42:16.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:42:16.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:42:16.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:42:16.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.945587 -999.00  +13.60  18.09     58   +5.70 1 1 1 1 1     0    0 6.65 -51.52 ZNESW 19.1 18.1 142.6 23.3 13.9 -23.6 13.8 -22.6 13.6 -21.5 13.8 -22.6
2026-02-16T00:42:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:42:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:42:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.945587
2026-02-16T00:42:16.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:42:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:42:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:42:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:42:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:42:16.497 [DEBUG] [Thread-214064] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:42:16.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:42:02', tmtdew=9.19, humidity=54.06, cloud=0.0, wind=24.93, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:42:03', seeing=2.8, atlas_timestamp='2026-02-15T22:41:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.0007500000000000284, -0.0727499999999992, -0.05100000000000193, 0.0070000000000014495, 0.04625000000000057, -0.012000000000000455, 0.020250000000000767, 0.024499999999999744, 0.01699999999999946, -0.03575000000000017, -0.0259999999999998, 0.06449999999999889, 0.012749999999998707, 0.04699999999999882, 0.02049999999999841, 0.034250000000000114, 0.014499999999999957, 0.0129999999999999, -0.023750000000001492, 0.04499999999999815, 0.04974999999999952, -0.011749999999999261, 0.036749999999999616, 0.0600000000000005, 0.005499999999999616, 0.025750000000000384, 0.0365000000000002, 0.034000000000000696, -0.022999999999999687, 0.0710000000000015, 0.09950000000000081, 0.03074999999999939], zp_timestamp='2026-02-15T22:41:00')
2026-02-16T00:42:16.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:42:16.590 [DEBUG] [Thread-214067] [transport.py] [_log()] starting thread (client mode): 0xa2d014b0
2026-02-16T00:42:16.590 [DEBUG] [Thread-214067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:42:16.605 [DEBUG] [Thread-214067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:42:16.605 [INFO] [Thread-214067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:42:16.615 [DEBUG] [Thread-214067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:42:16.615 [DEBUG] [Thread-214067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] client lang: <none>
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] server lang: <none>
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] kex follows: False
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:42:16.616 [DEBUG] [Thread-214067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:42:16.617 [DEBUG] [Thread-214067] [transport.py] [_log()] Compression: none
2026-02-16T00:42:16.617 [DEBUG] [Thread-214067] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:42:16.672 [DEBUG] [Thread-214067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:42:16.673 [DEBUG] [Thread-214067] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:42:16.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:42:16.674 [DEBUG] [Thread-214067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:42:16.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:42:16.729 [DEBUG] [Thread-214067] [transport.py] [_log()] userauth is OK
2026-02-16T00:42:16.729 [DEBUG] [Thread-214067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:42:16.729 [DEBUG] [Thread-214067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:42:16.729 [DEBUG] [Thread-214067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:42:16.729 [DEBUG] [Thread-214067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:42:16.748 [INFO] [Thread-214067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:42:16.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:42:16.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:42:17.588 [DEBUG] [Thread-214067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:42:17.588 [DEBUG] [Thread-214067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:42:17.637 [DEBUG] [Thread-214067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:42:17.637 [DEBUG] [Thread-214067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:42:17.646 [DEBUG] [Thread-214067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:42:17.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:42:17.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:42:17.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:42:17.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:42:17.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:42:17.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:42:17.683 [DEBUG] [Thread-214067] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:42:19.092 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:19.094 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:20.435 [DEBUG] [Thread-214069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:35.489 [DEBUG] [Thread-214070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:39.468 [DEBUG] [Thread-214071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:47.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:42:47.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:42:47.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:42:49.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 42, 39), 9.41, 53.05, 0.0, 21.98, 14.06, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:42:49.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:42:39
2026-02-16T00:42:49.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:42:50.087 [DEBUG] [Thread-214072] [transport.py] [_log()] starting thread (client mode): 0xa2d034c0
2026-02-16T00:42:50.087 [DEBUG] [Thread-214072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:42:50.106 [DEBUG] [Thread-214072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:42:50.107 [INFO] [Thread-214072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] client lang: <none>
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] server lang: <none>
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] kex follows: False
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] Compression: none
2026-02-16T00:42:50.110 [DEBUG] [Thread-214072] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:42:50.126 [DEBUG] [Thread-214072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:42:50.127 [DEBUG] [Thread-214072] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:42:50.127 [DEBUG] [Thread-214072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:42:50.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:42:50.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:42:50.128 [DEBUG] [Thread-214072] [transport.py] [_log()] userauth is OK
2026-02-16T00:42:50.128 [DEBUG] [Thread-214072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:42:50.128 [DEBUG] [Thread-214072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:42:50.128 [DEBUG] [Thread-214072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:42:50.128 [DEBUG] [Thread-214072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:42:50.138 [INFO] [Thread-214072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:42:50.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:42:50.528 [DEBUG] [Thread-214074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:42:50.764 [DEBUG] [Thread-214072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:42:50.764 [DEBUG] [Thread-214072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:42:50.764 [DEBUG] [Thread-214072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:42:50.805 [DEBUG] [Thread-214072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:42:50.806 [DEBUG] [Thread-214072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:42:50.809 [DEBUG] [Thread-214072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:42:50.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:42:50.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:42:50.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:42:50.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:42:50.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:42:50.834 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:42:50.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:42:50.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:42:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:42:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.945934 -999.00  +13.60  16.80     58   +5.70 1 1 1 1 1     0    0 6.75 -49.38 ZNESW 12.3 16.8 149.6 21.6 13.9 -23.6 13.8 -22.5 13.6 -21.5 13.8 -22.8
2026-02-16T00:42:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:42:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:42:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.945934
2026-02-16T00:42:50.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:42:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:42:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:42:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:42:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:42:50.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:42:39', tmtdew=9.41, humidity=53.05, cloud=0.0, wind=21.98, temperature=14.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:42:39', seeing=2.24, atlas_timestamp='2026-02-15T22:42:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.0007500000000000284, -0.0727499999999992, -0.05100000000000193, 0.0070000000000014495, 0.04625000000000057, -0.012000000000000455, 0.020250000000000767, 0.024499999999999744, 0.01699999999999946, -0.03575000000000017, -0.0259999999999998, 0.06449999999999889, 0.012749999999998707, 0.04699999999999882, 0.02049999999999841, 0.034250000000000114, 0.014499999999999957, 0.0129999999999999, -0.023750000000001492, 0.04499999999999815, 0.04974999999999952, -0.011749999999999261, 0.036749999999999616, 0.0600000000000005, 0.005499999999999616, 0.025750000000000384, 0.0365000000000002, 0.034000000000000696, -0.022999999999999687, 0.0710000000000015, 0.09950000000000081, 0.03074999999999939], zp_timestamp='2026-02-15T22:41:00')
2026-02-16T00:42:50.837 [DEBUG] [Thread-214072] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:42:50.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:42:50.932 [DEBUG] [Thread-214076] [transport.py] [_log()] starting thread (client mode): 0xa57c0640
2026-02-16T00:42:50.933 [DEBUG] [Thread-214076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:42:50.948 [DEBUG] [Thread-214076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:42:50.948 [INFO] [Thread-214076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:42:50.956 [DEBUG] [Thread-214076] [transport.py] [_log()] client lang: <none>
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] server lang: <none>
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] kex follows: False
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] Compression: none
2026-02-16T00:42:50.957 [DEBUG] [Thread-214076] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:42:51.017 [DEBUG] [Thread-214076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:42:51.017 [DEBUG] [Thread-214076] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:42:51.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:42:51.019 [DEBUG] [Thread-214076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:42:51.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:42:51.077 [DEBUG] [Thread-214076] [transport.py] [_log()] userauth is OK
2026-02-16T00:42:51.077 [DEBUG] [Thread-214076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:42:51.077 [DEBUG] [Thread-214076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:42:51.077 [DEBUG] [Thread-214076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:42:51.077 [DEBUG] [Thread-214076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:42:51.100 [INFO] [Thread-214076] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:42:51.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:42:51.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:42:51.901 [DEBUG] [Thread-214076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:42:51.901 [DEBUG] [Thread-214076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:42:51.949 [DEBUG] [Thread-214076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:42:51.949 [DEBUG] [Thread-214076] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:42:51.958 [DEBUG] [Thread-214076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:42:51.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:42:51.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:42:51.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:42:51.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:42:51.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:42:51.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:42:51.991 [DEBUG] [Thread-214076] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:42:55.959 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:05.563 [DEBUG] [Thread-214078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:19.295 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:19.296 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:20.616 [DEBUG] [Thread-214079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:22.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:43:22.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:43:22.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:43:23.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 43, 14), 9.19, 53.59, 0.0, 18.62, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:43:23.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:43:14
2026-02-16T00:43:24.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:43:24.575 [DEBUG] [Thread-214080] [transport.py] [_log()] starting thread (client mode): 0xa2dc17e0
2026-02-16T00:43:24.575 [DEBUG] [Thread-214080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:43:24.594 [DEBUG] [Thread-214080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:43:24.595 [INFO] [Thread-214080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:43:24.598 [DEBUG] [Thread-214080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:43:24.598 [DEBUG] [Thread-214080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] client lang: <none>
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] server lang: <none>
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] kex follows: False
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:43:24.599 [DEBUG] [Thread-214080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:43:24.600 [DEBUG] [Thread-214080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:43:24.600 [DEBUG] [Thread-214080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:43:24.600 [DEBUG] [Thread-214080] [transport.py] [_log()] Compression: none
2026-02-16T00:43:24.600 [DEBUG] [Thread-214080] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:43:24.619 [DEBUG] [Thread-214080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:43:24.620 [DEBUG] [Thread-214080] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:43:24.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:43:24.622 [DEBUG] [Thread-214080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:43:24.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:43:24.665 [DEBUG] [Thread-214080] [transport.py] [_log()] userauth is OK
2026-02-16T00:43:24.665 [DEBUG] [Thread-214080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:43:24.665 [DEBUG] [Thread-214080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:43:24.665 [DEBUG] [Thread-214080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:43:24.665 [DEBUG] [Thread-214080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:43:24.685 [INFO] [Thread-214080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:43:24.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:43:25.453 [DEBUG] [Thread-214080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:43:25.453 [DEBUG] [Thread-214080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:43:25.453 [DEBUG] [Thread-214080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:43:25.494 [DEBUG] [Thread-214080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:43:25.494 [DEBUG] [Thread-214080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:43:25.497 [DEBUG] [Thread-214080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:43:25.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:43:25.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:43:25.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:43:25.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:43:25.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:43:25.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:43:25.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:43:25.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:43:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:43:25.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.946281 -999.00  +13.60  16.16     58   +5.70 1 1 1 1 1     0    0 6.57 -48.10 ZNESW 13.2 16.2 142.4 22.5 13.9 -23.6 13.8 -22.5 13.6 -21.6 13.8 -22.6
2026-02-16T00:43:25.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:43:25.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:43:25.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.946281
2026-02-16T00:43:25.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:43:25.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:43:25.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:43:25.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:43:25.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:43:25.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:43:14', tmtdew=9.19, humidity=53.59, cloud=0.0, wind=18.62, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:43:15', seeing=2.14, atlas_timestamp='2026-02-15T22:42:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.0007500000000000284, -0.0727499999999992, -0.05100000000000193, 0.0070000000000014495, 0.04625000000000057, -0.012000000000000455, 0.020250000000000767, 0.024499999999999744, 0.01699999999999946, -0.03575000000000017, -0.0259999999999998, 0.06449999999999889, 0.012749999999998707, 0.04699999999999882, 0.02049999999999841, 0.034250000000000114, 0.014499999999999957, 0.0129999999999999, -0.023750000000001492, 0.04499999999999815, 0.04974999999999952, -0.011749999999999261, 0.036749999999999616, 0.0600000000000005, 0.005499999999999616, 0.025750000000000384, 0.0365000000000002, 0.034000000000000696, -0.022999999999999687, 0.0710000000000015, 0.09950000000000081, 0.03074999999999939], zp_timestamp='2026-02-15T22:41:00')
2026-02-16T00:43:25.520 [DEBUG] [Thread-214080] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:43:25.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:43:25.748 [DEBUG] [Thread-214083] [transport.py] [_log()] starting thread (client mode): 0xa57c2f80
2026-02-16T00:43:25.749 [DEBUG] [Thread-214083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:43:25.763 [DEBUG] [Thread-214083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:43:25.764 [INFO] [Thread-214083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:43:25.771 [DEBUG] [Thread-214083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:43:25.771 [DEBUG] [Thread-214083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:43:25.771 [DEBUG] [Thread-214083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:43:25.771 [DEBUG] [Thread-214083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:43:25.771 [DEBUG] [Thread-214083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] client lang: <none>
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] server lang: <none>
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] kex follows: False
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] Compression: none
2026-02-16T00:43:25.772 [DEBUG] [Thread-214083] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:43:25.827 [DEBUG] [Thread-214083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:43:25.827 [DEBUG] [Thread-214083] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:43:25.827 [DEBUG] [Thread-214083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:43:25.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:43:25.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:43:25.890 [DEBUG] [Thread-214083] [transport.py] [_log()] userauth is OK
2026-02-16T00:43:25.890 [DEBUG] [Thread-214083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:43:25.890 [DEBUG] [Thread-214083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:43:25.890 [DEBUG] [Thread-214083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:43:25.890 [DEBUG] [Thread-214083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:43:25.903 [INFO] [Thread-214083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:43:25.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:43:25.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:43:26.689 [DEBUG] [Thread-214083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:43:26.690 [DEBUG] [Thread-214083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:43:26.740 [DEBUG] [Thread-214083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:43:26.740 [DEBUG] [Thread-214083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:43:26.752 [DEBUG] [Thread-214083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:43:26.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:43:26.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:43:26.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:43:26.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:43:26.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:43:26.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:43:26.798 [DEBUG] [Thread-214083] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:43:35.656 [DEBUG] [Thread-214085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:39.533 [DEBUG] [Thread-214086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:50.707 [DEBUG] [Thread-214087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:43:56.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:43:56.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:43:56.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:43:59.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 43, 50), 9.16, 53.64, 0.0, 20.36, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:43:59.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:43:50
2026-02-16T00:43:59.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:43:59.642 [DEBUG] [Thread-214088] [transport.py] [_log()] starting thread (client mode): 0xa57c2230
2026-02-16T00:43:59.642 [DEBUG] [Thread-214088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:43:59.663 [DEBUG] [Thread-214088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:43:59.663 [INFO] [Thread-214088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:43:59.666 [DEBUG] [Thread-214088] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:43:59.666 [DEBUG] [Thread-214088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] client lang: <none>
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] server lang: <none>
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] kex follows: False
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] Compression: none
2026-02-16T00:43:59.667 [DEBUG] [Thread-214088] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:43:59.685 [DEBUG] [Thread-214088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:43:59.686 [DEBUG] [Thread-214088] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:43:59.686 [DEBUG] [Thread-214088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:43:59.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:43:59.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:43:59.688 [DEBUG] [Thread-214088] [transport.py] [_log()] userauth is OK
2026-02-16T00:43:59.688 [DEBUG] [Thread-214088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:43:59.688 [DEBUG] [Thread-214088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:43:59.689 [DEBUG] [Thread-214088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:43:59.689 [DEBUG] [Thread-214088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:43:59.714 [INFO] [Thread-214088] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:43:59.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:44:00.348 [DEBUG] [Thread-214088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:44:00.348 [DEBUG] [Thread-214088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:44:00.348 [DEBUG] [Thread-214088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:44:00.389 [DEBUG] [Thread-214088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:44:00.390 [DEBUG] [Thread-214088] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:44:00.393 [DEBUG] [Thread-214088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:44:00.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:44:00.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:44:00.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:44:00.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:44:00.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:44:00.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:44:00.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:44:00.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:44:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:44:00.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.946629 -999.00  +13.60  11.89     58   +5.70 1 1 1 1 1     0    0 6.52 -51.64 ZNESW 15.5 11.9 154.2 22.5 13.9 -23.7 13.8 -22.6 13.6 -21.5 13.9 -22.7
2026-02-16T00:44:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:44:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:44:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.946629
2026-02-16T00:44:00.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:44:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:44:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:44:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:44:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:44:00.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:43:50', tmtdew=9.16, humidity=53.64, cloud=0.0, wind=20.36, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:43:50', seeing=2.04, atlas_timestamp='2026-02-15T22:43:08.746', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.0007500000000000284, -0.0727499999999992, -0.05100000000000193, 0.0070000000000014495, 0.04625000000000057, -0.012000000000000455, 0.020250000000000767, 0.024499999999999744, 0.01699999999999946, -0.03575000000000017, -0.0259999999999998, 0.06449999999999889, 0.012749999999998707, 0.04699999999999882, 0.02049999999999841, 0.034250000000000114, 0.014499999999999957, 0.0129999999999999, -0.023750000000001492, 0.04499999999999815, 0.04974999999999952, -0.011749999999999261, 0.036749999999999616, 0.0600000000000005, 0.005499999999999616, 0.025750000000000384, 0.0365000000000002, 0.034000000000000696, -0.022999999999999687, 0.0710000000000015, 0.09950000000000081, 0.03074999999999939], zp_timestamp='2026-02-15T22:41:00')
2026-02-16T00:44:00.422 [DEBUG] [Thread-214088] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:44:00.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:44:00.519 [DEBUG] [Thread-214091] [transport.py] [_log()] starting thread (client mode): 0xa2d6d630
2026-02-16T00:44:00.520 [DEBUG] [Thread-214091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:44:00.533 [DEBUG] [Thread-214091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:44:00.534 [INFO] [Thread-214091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] client lang: <none>
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] server lang: <none>
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] kex follows: False
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:44:00.541 [DEBUG] [Thread-214091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:44:00.542 [DEBUG] [Thread-214091] [transport.py] [_log()] Compression: none
2026-02-16T00:44:00.542 [DEBUG] [Thread-214091] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:44:00.601 [DEBUG] [Thread-214091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:44:00.601 [DEBUG] [Thread-214091] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:44:00.601 [DEBUG] [Thread-214091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:44:00.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:44:00.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:44:00.657 [DEBUG] [Thread-214091] [transport.py] [_log()] userauth is OK
2026-02-16T00:44:00.657 [DEBUG] [Thread-214091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:44:00.657 [DEBUG] [Thread-214091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:44:00.657 [DEBUG] [Thread-214091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:44:00.658 [DEBUG] [Thread-214091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:44:00.676 [INFO] [Thread-214091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:44:00.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:44:00.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:44:01.513 [DEBUG] [Thread-214091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:44:01.513 [DEBUG] [Thread-214091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:44:01.561 [DEBUG] [Thread-214091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:44:01.562 [DEBUG] [Thread-214091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:44:01.571 [DEBUG] [Thread-214091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:44:01.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:44: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')
2026-02-16T00:44:01.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:44:01.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:44:01.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:44:01.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:44:01.607 [DEBUG] [Thread-214091] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:44:05.738 [DEBUG] [Thread-214093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:19.495 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:19.497 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:20.778 [DEBUG] [Thread-214094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:29.637 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:44:31.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:44:31.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:44:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 43, 50), 9.16, 53.64, 0.0, 20.36, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:44:33.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:43:50
2026-02-16T00:44:33.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:44:34.157 [DEBUG] [Thread-214095] [transport.py] [_log()] starting thread (client mode): 0xa2dc39d0
2026-02-16T00:44:34.158 [DEBUG] [Thread-214095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:44:34.178 [DEBUG] [Thread-214095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:44:34.178 [INFO] [Thread-214095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:44:34.179 [DEBUG] [Thread-214095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] client lang: <none>
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] server lang: <none>
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] kex follows: False
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] Compression: none
2026-02-16T00:44:34.180 [DEBUG] [Thread-214095] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:44:34.197 [DEBUG] [Thread-214095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:44:34.198 [DEBUG] [Thread-214095] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:44:34.198 [DEBUG] [Thread-214095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:44:34.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:44:34.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:44:34.200 [DEBUG] [Thread-214095] [transport.py] [_log()] userauth is OK
2026-02-16T00:44:34.200 [DEBUG] [Thread-214095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:44:34.201 [DEBUG] [Thread-214095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:44:34.201 [DEBUG] [Thread-214095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:44:34.201 [DEBUG] [Thread-214095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:44:34.226 [INFO] [Thread-214095] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:44:34.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:44:34.809 [DEBUG] [Thread-214095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:44:34.809 [DEBUG] [Thread-214095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:44:34.809 [DEBUG] [Thread-214095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:44:34.850 [DEBUG] [Thread-214095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:44:34.851 [DEBUG] [Thread-214095] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:44:34.854 [DEBUG] [Thread-214095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:44:34.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:44:34.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:44:34.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:44:34.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:44:34.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:44:34.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:44:34.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:44:34.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:44:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:44:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.946976 -999.00  +13.60  18.35     58   +5.70 1 1 1 1 1     0    0 6.52 -53.53 ZNESW 17.9 18.4 140.8 23.4 13.9 -23.7 13.8 -22.5 13.6 -21.5 13.9 -22.6
2026-02-16T00:44:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:44:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:44:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.946976
2026-02-16T00:44:34.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:44:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:44:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:44:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:44:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:44:34.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:43:50', tmtdew=9.16, humidity=53.64, cloud=0.0, wind=20.36, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:44:26', seeing=2.37, atlas_timestamp='2026-02-15T22:43:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.0007500000000000284, -0.0727499999999992, -0.05100000000000193, 0.0070000000000014495, 0.04625000000000057, -0.012000000000000455, 0.020250000000000767, 0.024499999999999744, 0.01699999999999946, -0.03575000000000017, -0.0259999999999998, 0.06449999999999889, 0.012749999999998707, 0.04699999999999882, 0.02049999999999841, 0.034250000000000114, 0.014499999999999957, 0.0129999999999999, -0.023750000000001492, 0.04499999999999815, 0.04974999999999952, -0.011749999999999261, 0.036749999999999616, 0.0600000000000005, 0.005499999999999616, 0.025750000000000384, 0.0365000000000002, 0.034000000000000696, -0.022999999999999687, 0.0710000000000015, 0.09950000000000081, 0.03074999999999939], zp_timestamp='2026-02-15T22:41:00')
2026-02-16T00:44:34.880 [DEBUG] [Thread-214095] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:44:34.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:44:34.976 [DEBUG] [Thread-214098] [transport.py] [_log()] starting thread (client mode): 0xa57c06d0
2026-02-16T00:44:34.976 [DEBUG] [Thread-214098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:44:34.991 [DEBUG] [Thread-214098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:44:34.991 [INFO] [Thread-214098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:44:34.998 [DEBUG] [Thread-214098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:44:34.999 [DEBUG] [Thread-214098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:44:34.999 [DEBUG] [Thread-214098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:44:34.999 [DEBUG] [Thread-214098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:44:34.999 [DEBUG] [Thread-214098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] client lang: <none>
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] server lang: <none>
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] kex follows: False
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] Compression: none
2026-02-16T00:44:35.000 [DEBUG] [Thread-214098] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:44:35.057 [DEBUG] [Thread-214098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:44:35.057 [DEBUG] [Thread-214098] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:44:35.058 [DEBUG] [Thread-214098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:44:35.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:44:35.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:44:35.114 [DEBUG] [Thread-214098] [transport.py] [_log()] userauth is OK
2026-02-16T00:44:35.114 [DEBUG] [Thread-214098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:44:35.114 [DEBUG] [Thread-214098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:44:35.114 [DEBUG] [Thread-214098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:44:35.114 [DEBUG] [Thread-214098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:44:35.132 [INFO] [Thread-214098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:44:35.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:44:35.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:44:35.815 [DEBUG] [Thread-214100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:35.942 [DEBUG] [Thread-214098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:44:35.942 [DEBUG] [Thread-214098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:44:35.991 [DEBUG] [Thread-214098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:44:35.991 [DEBUG] [Thread-214098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:44:36.000 [DEBUG] [Thread-214098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:44:36.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:44:36.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:44: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') -> 00000000
2026-02-16T00:44:36.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:44:36.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:44:36.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:44:36.037 [DEBUG] [Thread-214098] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:44:39.603 [DEBUG] [Thread-214101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:44:50.877 [DEBUG] [Thread-214102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:05.913 [DEBUG] [Thread-214103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:06.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:45:06.060 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:45:06.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:45:08.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 44, 26), 9.1, 53.89, 0.0, 19.3, 13.65, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:45:08.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:44:26
2026-02-16T00:45:08.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:45:08.787 [DEBUG] [Thread-214104] [transport.py] [_log()] starting thread (client mode): 0xa2d13460
2026-02-16T00:45:08.787 [DEBUG] [Thread-214104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:45:08.807 [DEBUG] [Thread-214104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:45:08.807 [INFO] [Thread-214104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:45:08.809 [DEBUG] [Thread-214104] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] client lang: <none>
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] server lang: <none>
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] kex follows: False
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] Compression: none
2026-02-16T00:45:08.810 [DEBUG] [Thread-214104] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:45:08.819 [DEBUG] [Thread-214104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:45:08.820 [DEBUG] [Thread-214104] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:45:08.821 [DEBUG] [Thread-214104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:45:08.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:45:08.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:45:08.823 [DEBUG] [Thread-214104] [transport.py] [_log()] userauth is OK
2026-02-16T00:45:08.824 [DEBUG] [Thread-214104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:45:08.824 [DEBUG] [Thread-214104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:45:08.824 [DEBUG] [Thread-214104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:45:08.824 [DEBUG] [Thread-214104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:45:08.851 [INFO] [Thread-214104] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:45:08.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:45:15.271 [DEBUG] [Thread-214104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:45:15.272 [DEBUG] [Thread-214104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:45:15.272 [DEBUG] [Thread-214104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:45:15.312 [DEBUG] [Thread-214104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:45:15.313 [DEBUG] [Thread-214104] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:45:15.316 [DEBUG] [Thread-214104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:45:15.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:45:15.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:45:15.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:45:15.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:45:15.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:45:15.385 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:45:15.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:45:15.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:45:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:45:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.947670 -999.00  +13.60  16.44     58   +5.70 1 1 1 1 1     0    0 6.61 -47.72 ZNESW 18.7 16.4 145.4 18.9 13.9 -23.7 13.8 -22.6 13.6 -21.5 13.8 -22.7
2026-02-16T00:45:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:45:15.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:45:15.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.947670
2026-02-16T00:45:15.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:45:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:45:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:45:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:45:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:45:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:44:26', tmtdew=9.1, humidity=53.89, cloud=0.0, wind=19.3, temperature=13.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:45:02', seeing=2.12, atlas_timestamp='2026-02-15T22:44:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.04525000000000112, -0.0007500000000000284, -0.0727499999999992, -0.05100000000000193, 0.0070000000000014495, 0.04625000000000057, -0.012000000000000455, 0.020250000000000767, 0.024499999999999744, 0.01699999999999946, -0.03575000000000017, -0.0259999999999998, 0.06449999999999889, 0.012749999999998707, 0.04699999999999882, 0.02049999999999841, 0.034250000000000114, 0.014499999999999957, 0.0129999999999999, -0.023750000000001492, 0.04499999999999815, 0.04974999999999952, -0.011749999999999261, 0.036749999999999616, 0.0600000000000005, 0.005499999999999616, 0.025750000000000384, 0.0365000000000002, 0.034000000000000696, -0.022999999999999687, 0.0710000000000015, 0.09950000000000081, 0.03074999999999939], zp_timestamp='2026-02-15T22:41:00')
2026-02-16T00:45:15.388 [DEBUG] [Thread-214104] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:45:15.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:45:15.485 [DEBUG] [Thread-214107] [transport.py] [_log()] starting thread (client mode): 0xa2d11fc0
2026-02-16T00:45:15.485 [DEBUG] [Thread-214107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:45:15.499 [DEBUG] [Thread-214107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:45:15.499 [INFO] [Thread-214107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:15.507 [DEBUG] [Thread-214107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] client lang: <none>
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] server lang: <none>
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] kex follows: False
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] Compression: none
2026-02-16T00:45:15.508 [DEBUG] [Thread-214107] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:45:15.563 [DEBUG] [Thread-214107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:45:15.564 [DEBUG] [Thread-214107] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:45:15.564 [DEBUG] [Thread-214107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:45:15.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:45:15.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:45:15.620 [DEBUG] [Thread-214107] [transport.py] [_log()] userauth is OK
2026-02-16T00:45:15.620 [DEBUG] [Thread-214107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:45:15.620 [DEBUG] [Thread-214107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:45:15.620 [DEBUG] [Thread-214107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:45:15.620 [DEBUG] [Thread-214107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:45:15.634 [INFO] [Thread-214107] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:45:15.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:45:15.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:45:16.509 [DEBUG] [Thread-214107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:45:16.510 [DEBUG] [Thread-214107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:45:16.557 [DEBUG] [Thread-214107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:45:16.557 [DEBUG] [Thread-214107] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:45:16.566 [DEBUG] [Thread-214107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:45:16.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:45:16.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:45:16.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:45:16.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:45:16.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:45:16.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:45:16.603 [DEBUG] [Thread-214107] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:45:19.698 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:19.699 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:20.948 [DEBUG] [Thread-214109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:36.003 [DEBUG] [Thread-214110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:39.656 [DEBUG] [Thread-214111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:45:46.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:45:46.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:45:46.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:45:48.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 45, 37), 9.17, 53.85, 0.0, 29.82, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:45:48.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:45:37
2026-02-16T00:45:48.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:45:49.078 [DEBUG] [Thread-214112] [transport.py] [_log()] starting thread (client mode): 0xa2d02ec0
2026-02-16T00:45:49.079 [DEBUG] [Thread-214112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:45:49.099 [DEBUG] [Thread-214112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:45:49.099 [INFO] [Thread-214112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:45:49.102 [DEBUG] [Thread-214112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] client lang: <none>
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] server lang: <none>
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] kex follows: False
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] Compression: none
2026-02-16T00:45:49.103 [DEBUG] [Thread-214112] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:45:49.121 [DEBUG] [Thread-214112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:45:49.121 [DEBUG] [Thread-214112] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:45:49.122 [DEBUG] [Thread-214112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:45:49.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:45:49.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:45:49.124 [DEBUG] [Thread-214112] [transport.py] [_log()] userauth is OK
2026-02-16T00:45:49.124 [DEBUG] [Thread-214112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:45:49.124 [DEBUG] [Thread-214112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:45:49.124 [DEBUG] [Thread-214112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:45:49.124 [DEBUG] [Thread-214112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:45:49.143 [INFO] [Thread-214112] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:45:49.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:45:49.710 [DEBUG] [Thread-214112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:45:49.710 [DEBUG] [Thread-214112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:45:49.711 [DEBUG] [Thread-214112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:45:49.751 [DEBUG] [Thread-214112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:45:49.752 [DEBUG] [Thread-214112] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:45:49.755 [DEBUG] [Thread-214112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:45:49.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:45:49.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:45:49.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:45:49.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:45:49.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:45:49.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:45:49.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:45:49.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:45:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:45:49.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.948017 -999.00  +13.60  18.47     59   +5.70 1 1 1 1 1     0    0 6.70 -47.55 ZNESW 20.5 18.5 147.6 23.7 13.9 -23.7 13.8 -22.6 13.6 -21.5 13.8 -22.7
2026-02-16T00:45:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:45:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:45:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.948017
2026-02-16T00:45:49.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:45:37', tmtdew=9.17, humidity=53.85, cloud=0.0, wind=29.82, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:45:37', seeing=2.35, atlas_timestamp='2026-02-15T22:45:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:43:00')
2026-02-16T00:45:49.783 [DEBUG] [Thread-214112] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:45:49.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:45:49.879 [DEBUG] [Thread-214115] [transport.py] [_log()] starting thread (client mode): 0xa2dc0910
2026-02-16T00:45:49.879 [DEBUG] [Thread-214115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:45:49.894 [DEBUG] [Thread-214115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:45:49.894 [INFO] [Thread-214115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:45:49.902 [DEBUG] [Thread-214115] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:45:49.902 [DEBUG] [Thread-214115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:45:49.902 [DEBUG] [Thread-214115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:45:49.902 [DEBUG] [Thread-214115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:49.902 [DEBUG] [Thread-214115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:45:49.902 [DEBUG] [Thread-214115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] client lang: <none>
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] server lang: <none>
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] kex follows: False
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:45:49.903 [DEBUG] [Thread-214115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:45:49.904 [DEBUG] [Thread-214115] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:45:49.904 [DEBUG] [Thread-214115] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:45:49.904 [DEBUG] [Thread-214115] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:45:49.904 [DEBUG] [Thread-214115] [transport.py] [_log()] Compression: none
2026-02-16T00:45:49.904 [DEBUG] [Thread-214115] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:45:49.962 [DEBUG] [Thread-214115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:45:49.963 [DEBUG] [Thread-214115] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:45:49.963 [DEBUG] [Thread-214115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:45:49.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:45:49.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:45:50.018 [DEBUG] [Thread-214115] [transport.py] [_log()] userauth is OK
2026-02-16T00:45:50.018 [DEBUG] [Thread-214115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:45:50.018 [DEBUG] [Thread-214115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:45:50.019 [DEBUG] [Thread-214115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:45:50.019 [DEBUG] [Thread-214115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:45:50.038 [INFO] [Thread-214115] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:45:50.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:45:50.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:45:50.873 [DEBUG] [Thread-214115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:45:50.873 [DEBUG] [Thread-214115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:45:50.922 [DEBUG] [Thread-214115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:45:50.922 [DEBUG] [Thread-214115] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:45:50.931 [DEBUG] [Thread-214115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:45:50.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:45:50.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:45:50.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:45:50.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:45:50.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:45:50.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:45:50.964 [DEBUG] [Thread-214115] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:45:51.038 [DEBUG] [Thread-214117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:03.062 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:06.098 [DEBUG] [Thread-214118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:19.902 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:19.903 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:20.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:46:20.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:46:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:46:21.131 [DEBUG] [Thread-214119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:23.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 46, 13), 9.01, 54.54, 0.0, 22.14, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:46:23.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:46:13
2026-02-16T00:46:23.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:46:23.603 [DEBUG] [Thread-214120] [transport.py] [_log()] starting thread (client mode): 0xa57c2290
2026-02-16T00:46:23.604 [DEBUG] [Thread-214120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:46:23.620 [DEBUG] [Thread-214120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:46:23.620 [INFO] [Thread-214120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:46:23.622 [DEBUG] [Thread-214120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] client lang: <none>
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] server lang: <none>
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] kex follows: False
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] Compression: none
2026-02-16T00:46:23.623 [DEBUG] [Thread-214120] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:46:23.634 [DEBUG] [Thread-214120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:46:23.634 [DEBUG] [Thread-214120] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:46:23.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:46:23.635 [DEBUG] [Thread-214120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:46:23.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:46:23.637 [DEBUG] [Thread-214120] [transport.py] [_log()] userauth is OK
2026-02-16T00:46:23.637 [DEBUG] [Thread-214120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:46:23.638 [DEBUG] [Thread-214120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:46:23.638 [DEBUG] [Thread-214120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:46:23.638 [DEBUG] [Thread-214120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:46:23.660 [INFO] [Thread-214120] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:46:23.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:46:24.272 [DEBUG] [Thread-214120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:46:24.272 [DEBUG] [Thread-214120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:46:24.272 [DEBUG] [Thread-214120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:46:24.313 [DEBUG] [Thread-214120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:46:24.314 [DEBUG] [Thread-214120] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:46:24.317 [DEBUG] [Thread-214120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:46:24.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:46:24.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:46:24.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:46:24.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:46:24.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:46:24.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:46:24.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:46:24.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:46:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:46:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.948365 -999.00  +13.60  16.47     59   +5.70 1 1 1 1 1     0    0 6.87 -42.91 ZNESW 15.6 16.5 143.6 19.3 13.9 -23.6 13.8 -22.5 13.6 -21.5 13.8 -22.8
2026-02-16T00:46:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:46:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:46:24.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.948365
2026-02-16T00:46:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:46:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:46:24.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:46:24.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:46:24.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:46:24.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:46:13', tmtdew=9.01, humidity=54.54, cloud=0.0, wind=22.14, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:46:13', seeing=2.43, atlas_timestamp='2026-02-15T22:45:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:43:00')
2026-02-16T00:46:24.360 [DEBUG] [Thread-214120] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:46:24.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:46:24.440 [DEBUG] [Thread-214123] [transport.py] [_log()] starting thread (client mode): 0xa2d6f9a0
2026-02-16T00:46:24.440 [DEBUG] [Thread-214123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:46:24.455 [DEBUG] [Thread-214123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:46:24.455 [INFO] [Thread-214123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:46:24.462 [DEBUG] [Thread-214123] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] client lang: <none>
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] server lang: <none>
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] kex follows: False
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:46:24.463 [DEBUG] [Thread-214123] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:46:24.464 [DEBUG] [Thread-214123] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:46:24.464 [DEBUG] [Thread-214123] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:46:24.464 [DEBUG] [Thread-214123] [transport.py] [_log()] Compression: none
2026-02-16T00:46:24.464 [DEBUG] [Thread-214123] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:46:24.527 [DEBUG] [Thread-214123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:46:24.527 [DEBUG] [Thread-214123] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:46:24.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:46:24.529 [DEBUG] [Thread-214123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:46:24.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:46:24.584 [DEBUG] [Thread-214123] [transport.py] [_log()] userauth is OK
2026-02-16T00:46:24.584 [DEBUG] [Thread-214123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:46:24.585 [DEBUG] [Thread-214123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:46:24.585 [DEBUG] [Thread-214123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:46:24.585 [DEBUG] [Thread-214123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:46:24.603 [INFO] [Thread-214123] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:46:24.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:46:24.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:46:25.450 [DEBUG] [Thread-214123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:46:25.450 [DEBUG] [Thread-214123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:46:25.497 [DEBUG] [Thread-214123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:46:25.497 [DEBUG] [Thread-214123] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:46:25.505 [DEBUG] [Thread-214123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:46:25.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:46:25.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:46:25.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:46:25.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:46:25.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:46:25.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:46:25.543 [DEBUG] [Thread-214123] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:46:36.165 [DEBUG] [Thread-214125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:39.730 [DEBUG] [Thread-214126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:51.217 [DEBUG] [Thread-214127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:46:55.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:46:55.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:46:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:46:57.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 46, 48), 8.99, 54.44, 0.0, 24.91, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:46:57.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:46:48
2026-02-16T00:46:57.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:46:57.933 [DEBUG] [Thread-214128] [transport.py] [_log()] starting thread (client mode): 0xa2d024a0
2026-02-16T00:46:57.934 [DEBUG] [Thread-214128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:46:57.954 [DEBUG] [Thread-214128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:46:57.954 [INFO] [Thread-214128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] client lang: <none>
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] server lang: <none>
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] kex follows: False
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] Compression: none
2026-02-16T00:46:57.958 [DEBUG] [Thread-214128] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:46:57.977 [DEBUG] [Thread-214128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:46:57.978 [DEBUG] [Thread-214128] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:46:57.978 [DEBUG] [Thread-214128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:46:57.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:46:57.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:46:57.980 [DEBUG] [Thread-214128] [transport.py] [_log()] userauth is OK
2026-02-16T00:46:57.980 [DEBUG] [Thread-214128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:46:57.980 [DEBUG] [Thread-214128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:46:57.981 [DEBUG] [Thread-214128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:46:57.981 [DEBUG] [Thread-214128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:46:58.006 [INFO] [Thread-214128] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:46:58.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:46:58.605 [DEBUG] [Thread-214128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:46:58.605 [DEBUG] [Thread-214128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:46:58.605 [DEBUG] [Thread-214128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:46:58.646 [DEBUG] [Thread-214128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:46:58.646 [DEBUG] [Thread-214128] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:46:58.648 [DEBUG] [Thread-214128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:46:58.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:46:58.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:46:58.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:46:58.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:46:58.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:46:58.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:46:58.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:46:58.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:46:58.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:46:58.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.948712 -999.00  +13.60  19.63     59   +5.70 1 1 1 1 1     0    0 6.85 -41.84 ZNESW 18.7 19.6 140.0 23.9 13.9 -23.5 13.8 -22.5 13.6 -21.4 13.8 -22.5
2026-02-16T00:46:58.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:46:58.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:46:58.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.948712
2026-02-16T00:46:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:46:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:46:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:46:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:46:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:46:58.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:46:48', tmtdew=8.99, humidity=54.44, cloud=0.0, wind=24.91, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:46:49', seeing=2.43, atlas_timestamp='2026-02-15T22:46:08.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:43:00')
2026-02-16T00:46:58.667 [DEBUG] [Thread-214128] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:46:58.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:46:58.751 [DEBUG] [Thread-214131] [transport.py] [_log()] starting thread (client mode): 0xa57e1b10
2026-02-16T00:46:58.751 [DEBUG] [Thread-214131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:46:58.765 [DEBUG] [Thread-214131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:46:58.765 [INFO] [Thread-214131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] client lang: <none>
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] server lang: <none>
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] kex follows: False
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] Compression: none
2026-02-16T00:46:58.773 [DEBUG] [Thread-214131] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:46:58.831 [DEBUG] [Thread-214131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:46:58.831 [DEBUG] [Thread-214131] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:46:58.831 [DEBUG] [Thread-214131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:46:58.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:46:58.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:46:58.888 [DEBUG] [Thread-214131] [transport.py] [_log()] userauth is OK
2026-02-16T00:46:58.888 [DEBUG] [Thread-214131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:46:58.888 [DEBUG] [Thread-214131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:46:58.889 [DEBUG] [Thread-214131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:46:58.889 [DEBUG] [Thread-214131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:46:58.902 [INFO] [Thread-214131] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:46:58.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:46:58.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:46:59.727 [DEBUG] [Thread-214131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:46:59.728 [DEBUG] [Thread-214131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:46:59.775 [DEBUG] [Thread-214131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:46:59.776 [DEBUG] [Thread-214131] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:46:59.785 [DEBUG] [Thread-214131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:46:59.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:46:59.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:46:59.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:46:59.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:46:59.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:46:59.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:46:59.821 [DEBUG] [Thread-214131] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:47:06.251 [DEBUG] [Thread-214133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:20.109 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:20.111 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:21.306 [DEBUG] [Thread-214134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:29.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:47:29.844 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:47:29.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:47:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 47, 23), 8.99, 54.41, 0.0, 23.79, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:47:31.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:47:23
2026-02-16T00:47:32.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:47:32.176 [DEBUG] [Thread-214135] [transport.py] [_log()] starting thread (client mode): 0xa57e3220
2026-02-16T00:47:32.176 [DEBUG] [Thread-214135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:47:32.196 [DEBUG] [Thread-214135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:47:32.196 [INFO] [Thread-214135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] client lang: <none>
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] server lang: <none>
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] kex follows: False
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] Compression: none
2026-02-16T00:47:32.199 [DEBUG] [Thread-214135] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:47:32.216 [DEBUG] [Thread-214135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:47:32.216 [DEBUG] [Thread-214135] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:47:32.217 [DEBUG] [Thread-214135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:47:32.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:47:32.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:47:32.218 [DEBUG] [Thread-214135] [transport.py] [_log()] userauth is OK
2026-02-16T00:47:32.218 [DEBUG] [Thread-214135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:47:32.218 [DEBUG] [Thread-214135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:47:32.218 [DEBUG] [Thread-214135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:47:32.218 [DEBUG] [Thread-214135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:47:32.249 [INFO] [Thread-214135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:47:32.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:47:32.907 [DEBUG] [Thread-214135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:47:32.907 [DEBUG] [Thread-214135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:47:32.907 [DEBUG] [Thread-214135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:47:32.949 [DEBUG] [Thread-214135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:47:32.949 [DEBUG] [Thread-214135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:47:32.952 [DEBUG] [Thread-214135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:47:32.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:47:32.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:47:32.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:47:32.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:47:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:47:32.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:47:32.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:47:32.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.949059 -999.00  +13.50  17.91     59   +5.70 1 1 1 1 1     0    0 6.80 -41.11 ZNESW 19.6 17.9 160.4 23.9 13.9 -23.7 13.8 -22.6 13.6 -21.4 13.8 -22.6
2026-02-16T00:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.949059
2026-02-16T00:47:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:47:32.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:47:32.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:47:32.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:47:32.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:47:32.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:47:23', tmtdew=8.99, humidity=54.41, cloud=0.0, wind=23.79, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:47:24', seeing=2.43, atlas_timestamp='2026-02-15T22:46:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:43:00')
2026-02-16T00:47:32.976 [DEBUG] [Thread-214135] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:47:33.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:47:33.074 [DEBUG] [Thread-214138] [transport.py] [_log()] starting thread (client mode): 0xa2d6c490
2026-02-16T00:47:33.074 [DEBUG] [Thread-214138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:47:33.088 [DEBUG] [Thread-214138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:47:33.088 [INFO] [Thread-214138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:47:33.095 [DEBUG] [Thread-214138] [transport.py] [_log()] client lang: <none>
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] server lang: <none>
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] kex follows: False
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] Compression: none
2026-02-16T00:47:33.096 [DEBUG] [Thread-214138] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:47:33.159 [DEBUG] [Thread-214138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:47:33.160 [DEBUG] [Thread-214138] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:47:33.160 [DEBUG] [Thread-214138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:47:33.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:47:33.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:47:33.215 [DEBUG] [Thread-214138] [transport.py] [_log()] userauth is OK
2026-02-16T00:47:33.215 [DEBUG] [Thread-214138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:47:33.215 [DEBUG] [Thread-214138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:47:33.215 [DEBUG] [Thread-214138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:47:33.215 [DEBUG] [Thread-214138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:47:33.233 [INFO] [Thread-214138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:47:33.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:47:33.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:47:34.022 [DEBUG] [Thread-214138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:47:34.023 [DEBUG] [Thread-214138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:47:34.070 [DEBUG] [Thread-214138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:47:34.071 [DEBUG] [Thread-214138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:47:34.080 [DEBUG] [Thread-214138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:47:34.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:47:34.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:47:34.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:47:34.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:47:34.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:47:34.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:47:34.129 [DEBUG] [Thread-214138] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:47:36.341 [DEBUG] [Thread-214140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:36.915 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:39.787 [DEBUG] [Thread-214141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:47:51.390 [DEBUG] [Thread-214142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:04.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:48:04.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:48:04.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:48:05.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 47, 23), 8.99, 54.41, 0.0, 23.79, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:48:05.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:47:23
2026-02-16T00:48:06.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:48:06.422 [DEBUG] [Thread-214143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:06.486 [DEBUG] [Thread-214144] [transport.py] [_log()] starting thread (client mode): 0xa57b0c70
2026-02-16T00:48:06.487 [DEBUG] [Thread-214144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:48:06.507 [DEBUG] [Thread-214144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:48:06.507 [INFO] [Thread-214144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:48:06.510 [DEBUG] [Thread-214144] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:48:06.510 [DEBUG] [Thread-214144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:48:06.510 [DEBUG] [Thread-214144] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:48:06.510 [DEBUG] [Thread-214144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:06.510 [DEBUG] [Thread-214144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] client lang: <none>
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] server lang: <none>
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] kex follows: False
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] Compression: none
2026-02-16T00:48:06.511 [DEBUG] [Thread-214144] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:48:06.530 [DEBUG] [Thread-214144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:48:06.530 [DEBUG] [Thread-214144] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:48:06.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:48:06.531 [DEBUG] [Thread-214144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:48:06.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:48:06.533 [DEBUG] [Thread-214144] [transport.py] [_log()] userauth is OK
2026-02-16T00:48:06.534 [DEBUG] [Thread-214144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:48:06.534 [DEBUG] [Thread-214144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:48:06.534 [DEBUG] [Thread-214144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:48:06.534 [DEBUG] [Thread-214144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:48:06.559 [INFO] [Thread-214144] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:48:06.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:48:07.166 [DEBUG] [Thread-214144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:48:07.167 [DEBUG] [Thread-214144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:48:07.167 [DEBUG] [Thread-214144] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:48:07.207 [DEBUG] [Thread-214144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:48:07.207 [DEBUG] [Thread-214144] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:48:07.211 [DEBUG] [Thread-214144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:48:07.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:48:07.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:48:07.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:48:07.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:48:07.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:48:07.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:48:07.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:48:07.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:48:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:48:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.949406 -999.00  +13.60  19.10     59   +5.70 1 1 1 1 1     0    0 6.79 -39.89 ZNESW 17.5 19.1 144.6 25.7 13.9 -23.6 13.8 -22.4 13.6 -21.3 13.8 -22.6
2026-02-16T00:48:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:48:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:48:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.949406
2026-02-16T00:48:07.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:48:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:48:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:48:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:48:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:48:07.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:47:23', tmtdew=8.99, humidity=54.41, cloud=0.0, wind=23.79, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:47:59', seeing=2.42, atlas_timestamp='2026-02-15T22:47:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:43:00')
2026-02-16T00:48:07.236 [DEBUG] [Thread-214144] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:48:07.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:48:07.332 [DEBUG] [Thread-214147] [transport.py] [_log()] starting thread (client mode): 0xa57b38e0
2026-02-16T00:48:07.332 [DEBUG] [Thread-214147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:48:07.346 [DEBUG] [Thread-214147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:48:07.347 [INFO] [Thread-214147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:48:07.354 [DEBUG] [Thread-214147] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] client lang: <none>
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] server lang: <none>
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] kex follows: False
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] Compression: none
2026-02-16T00:48:07.355 [DEBUG] [Thread-214147] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:48:07.416 [DEBUG] [Thread-214147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:48:07.417 [DEBUG] [Thread-214147] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:48:07.417 [DEBUG] [Thread-214147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:48:07.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:48:07.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:48:07.472 [DEBUG] [Thread-214147] [transport.py] [_log()] userauth is OK
2026-02-16T00:48:07.473 [DEBUG] [Thread-214147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:48:07.473 [DEBUG] [Thread-214147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:48:07.473 [DEBUG] [Thread-214147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:48:07.473 [DEBUG] [Thread-214147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:48:07.492 [INFO] [Thread-214147] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:48:07.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:48:07.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:48:08.316 [DEBUG] [Thread-214147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:48:08.316 [DEBUG] [Thread-214147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:48:08.365 [DEBUG] [Thread-214147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:48:08.365 [DEBUG] [Thread-214147] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:48:08.374 [DEBUG] [Thread-214147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:48:08.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:48:08.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:48:08.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:48:08.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:48:08.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:48:08.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:48:08.414 [DEBUG] [Thread-214147] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:48:20.311 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:20.312 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:21.454 [DEBUG] [Thread-214149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:36.501 [DEBUG] [Thread-214150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:38.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:48:38.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:48:38.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:48:39.850 [DEBUG] [Thread-214151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:48:41.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 47, 59), 8.96, 54.56, 0.0, 21.03, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:48:41.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:47:59
2026-02-16T00:48:41.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:48:41.705 [DEBUG] [Thread-214152] [transport.py] [_log()] starting thread (client mode): 0xa2d00760
2026-02-16T00:48:41.706 [DEBUG] [Thread-214152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:48:41.726 [DEBUG] [Thread-214152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:48:41.726 [INFO] [Thread-214152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:48:41.729 [DEBUG] [Thread-214152] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:48:41.729 [DEBUG] [Thread-214152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] client lang: <none>
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] server lang: <none>
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] kex follows: False
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:48:41.730 [DEBUG] [Thread-214152] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:48:41.731 [DEBUG] [Thread-214152] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:48:41.731 [DEBUG] [Thread-214152] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:48:41.731 [DEBUG] [Thread-214152] [transport.py] [_log()] Compression: none
2026-02-16T00:48:41.731 [DEBUG] [Thread-214152] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:48:41.751 [DEBUG] [Thread-214152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:48:41.751 [DEBUG] [Thread-214152] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:48:41.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:48:41.752 [DEBUG] [Thread-214152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:48:41.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:48:41.754 [DEBUG] [Thread-214152] [transport.py] [_log()] userauth is OK
2026-02-16T00:48:41.755 [DEBUG] [Thread-214152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:48:41.755 [DEBUG] [Thread-214152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:48:41.755 [DEBUG] [Thread-214152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:48:41.755 [DEBUG] [Thread-214152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:48:41.773 [INFO] [Thread-214152] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:48:41.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:48:42.431 [DEBUG] [Thread-214152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:48:42.431 [DEBUG] [Thread-214152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:48:42.432 [DEBUG] [Thread-214152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:48:42.472 [DEBUG] [Thread-214152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:48:42.473 [DEBUG] [Thread-214152] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:48:42.476 [DEBUG] [Thread-214152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:48:42.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:48:42.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:48:42.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:48:42.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:48:42.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:48:42.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:48:42.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:48:42.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:48:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:48:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.950101 -999.00  +13.60  15.82     59   +5.70 1 1 1 1 1     0    0 6.99 -38.53 ZNESW 18.0 15.8 154.2 21.7 13.8 -23.6 13.8 -22.5 13.6 -21.3 13.8 -22.7
2026-02-16T00:48:42.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:48:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:48:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.950101
2026-02-16T00:48:42.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:48:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:48:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:48:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:48:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:48:42.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:47:59', tmtdew=8.96, humidity=54.56, cloud=0.0, wind=21.03, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:48:34', seeing=3.63, atlas_timestamp='2026-02-15T22:48:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:47:00')
2026-02-16T00:48:42.503 [DEBUG] [Thread-214152] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:48:42.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:48:42.599 [DEBUG] [Thread-214155] [transport.py] [_log()] starting thread (client mode): 0xa57c3100
2026-02-16T00:48:42.599 [DEBUG] [Thread-214155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:48:42.619 [DEBUG] [Thread-214155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:48:42.620 [INFO] [Thread-214155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:48:42.627 [DEBUG] [Thread-214155] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:48:42.628 [DEBUG] [Thread-214155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] client lang: <none>
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] server lang: <none>
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] kex follows: False
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:48:42.629 [DEBUG] [Thread-214155] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:48:42.630 [DEBUG] [Thread-214155] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:48:42.630 [DEBUG] [Thread-214155] [transport.py] [_log()] Compression: none
2026-02-16T00:48:42.630 [DEBUG] [Thread-214155] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:48:42.690 [DEBUG] [Thread-214155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:48:42.691 [DEBUG] [Thread-214155] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:48:42.691 [DEBUG] [Thread-214155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:48:42.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:48:42.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:48:42.750 [DEBUG] [Thread-214155] [transport.py] [_log()] userauth is OK
2026-02-16T00:48:42.751 [DEBUG] [Thread-214155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:48:42.751 [DEBUG] [Thread-214155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:48:42.751 [DEBUG] [Thread-214155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:48:42.751 [DEBUG] [Thread-214155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:48:42.769 [INFO] [Thread-214155] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:48:42.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:48:42.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:48:43.562 [DEBUG] [Thread-214155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:48:43.563 [DEBUG] [Thread-214155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:48:43.612 [DEBUG] [Thread-214155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:48:43.612 [DEBUG] [Thread-214155] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:48:43.620 [DEBUG] [Thread-214155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:48:43.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:48:43.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:48:43.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:48:43.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:48:43.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:48:43.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:48:43.652 [DEBUG] [Thread-214155] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:48:51.538 [DEBUG] [Thread-214157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:06.589 [DEBUG] [Thread-214158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:11.020 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:13.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:49:13.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:49:13.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:49:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 48, 34), 9.12, 54.01, 0.0, 26.6, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:49:16.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:48:34
2026-02-16T00:49:16.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:49:16.617 [DEBUG] [Thread-214159] [transport.py] [_log()] starting thread (client mode): 0xa2d131c0
2026-02-16T00:49:16.617 [DEBUG] [Thread-214159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:49:16.637 [DEBUG] [Thread-214159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:49:16.637 [INFO] [Thread-214159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] client lang: <none>
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] server lang: <none>
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] kex follows: False
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] Compression: none
2026-02-16T00:49:16.641 [DEBUG] [Thread-214159] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:49:16.660 [DEBUG] [Thread-214159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:49:16.661 [DEBUG] [Thread-214159] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:49:16.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:49:16.661 [DEBUG] [Thread-214159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:49:16.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:49:16.662 [DEBUG] [Thread-214159] [transport.py] [_log()] userauth is OK
2026-02-16T00:49:16.662 [DEBUG] [Thread-214159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:49:16.663 [DEBUG] [Thread-214159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:49:16.663 [DEBUG] [Thread-214159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:49:16.663 [DEBUG] [Thread-214159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:49:16.681 [INFO] [Thread-214159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:49:16.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:49:17.470 [DEBUG] [Thread-214159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:49:17.470 [DEBUG] [Thread-214159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:49:17.471 [DEBUG] [Thread-214159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:49:17.511 [DEBUG] [Thread-214159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:49:17.512 [DEBUG] [Thread-214159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:49:17.515 [DEBUG] [Thread-214159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:49:17.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:49:17.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:49:17.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:49:17.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:49:17.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:49:17.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:49:17.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:49:17.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:49:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:49:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.950448 -999.00  +13.60  20.44     59   +5.70 1 1 1 1 1     0    0 6.89 -39.31 ZNESW 18.8 20.4 142.8 25.5 13.8 -23.6 13.7 -22.4 13.6 -21.4 13.9 -22.5
2026-02-16T00:49:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:49:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:49:17.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.950448
2026-02-16T00:49:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:49:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:49:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:49:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:49:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:49:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:48:34', tmtdew=9.12, humidity=54.01, cloud=0.0, wind=26.6, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:49:10', seeing=3.63, atlas_timestamp='2026-02-15T22:48:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:47:00')
2026-02-16T00:49:17.544 [DEBUG] [Thread-214159] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:49:17.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:49:17.635 [DEBUG] [Thread-214162] [transport.py] [_log()] starting thread (client mode): 0xa57e0e50
2026-02-16T00:49:17.635 [DEBUG] [Thread-214162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:49:17.650 [DEBUG] [Thread-214162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:49:17.651 [INFO] [Thread-214162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:49:17.658 [DEBUG] [Thread-214162] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:49:17.658 [DEBUG] [Thread-214162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:49:17.658 [DEBUG] [Thread-214162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:49:17.658 [DEBUG] [Thread-214162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:17.658 [DEBUG] [Thread-214162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] client lang: <none>
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] server lang: <none>
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] kex follows: False
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] Compression: none
2026-02-16T00:49:17.659 [DEBUG] [Thread-214162] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:49:17.719 [DEBUG] [Thread-214162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:49:17.719 [DEBUG] [Thread-214162] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:49:17.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:49:17.721 [DEBUG] [Thread-214162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:49:17.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:49:17.775 [DEBUG] [Thread-214162] [transport.py] [_log()] userauth is OK
2026-02-16T00:49:17.775 [DEBUG] [Thread-214162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:49:17.775 [DEBUG] [Thread-214162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:49:17.776 [DEBUG] [Thread-214162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:49:17.776 [DEBUG] [Thread-214162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:49:17.794 [INFO] [Thread-214162] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:49:17.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:49:17.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:49:18.617 [DEBUG] [Thread-214162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:49:18.617 [DEBUG] [Thread-214162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:49:18.665 [DEBUG] [Thread-214162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:49:18.666 [DEBUG] [Thread-214162] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:49:18.675 [DEBUG] [Thread-214162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:49:18.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:49: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')
2026-02-16T00:49:18.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:49:18.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:49:18.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:49:18.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:49:18.711 [DEBUG] [Thread-214162] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:49:20.518 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:20.519 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:21.625 [DEBUG] [Thread-214164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:36.674 [DEBUG] [Thread-214165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:39.917 [DEBUG] [Thread-214166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:48.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:49:48.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:49:48.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:49:51.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 49, 9), 8.95, 54.59, 0.0, 22.25, 13.61, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:49:51.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:49:09
2026-02-16T00:49:51.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:49:51.703 [DEBUG] [Thread-214167] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-16T00:49:51.703 [DEBUG] [Thread-214167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:49:51.708 [DEBUG] [Thread-214168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:49:51.722 [DEBUG] [Thread-214167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:49:51.723 [INFO] [Thread-214167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] client lang: <none>
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] server lang: <none>
2026-02-16T00:49:51.724 [DEBUG] [Thread-214167] [transport.py] [_log()] kex follows: False
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] Compression: none
2026-02-16T00:49:51.725 [DEBUG] [Thread-214167] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:49:51.736 [DEBUG] [Thread-214167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:49:51.736 [DEBUG] [Thread-214167] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:49:51.736 [DEBUG] [Thread-214167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:49:51.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:49:51.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:49:51.737 [DEBUG] [Thread-214167] [transport.py] [_log()] userauth is OK
2026-02-16T00:49:51.737 [DEBUG] [Thread-214167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:49:51.737 [DEBUG] [Thread-214167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:49:51.737 [DEBUG] [Thread-214167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:49:51.737 [DEBUG] [Thread-214167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:49:51.746 [INFO] [Thread-214167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:49:51.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:49:52.380 [DEBUG] [Thread-214167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:49:52.380 [DEBUG] [Thread-214167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:49:52.381 [DEBUG] [Thread-214167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:49:52.421 [DEBUG] [Thread-214167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:49:52.421 [DEBUG] [Thread-214167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:49:52.424 [DEBUG] [Thread-214167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:49:52.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:49:52.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:49:52.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:49:52.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:49:52.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:49:52.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:49:52.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.950795 -999.00  +13.50  17.11     59   +5.70 1 1 1 1 1     0    0 6.98 -37.98 ZNESW 23.5 17.1 146.2 22.8 13.8 -23.6 13.8 -22.3 13.6 -21.4 13.8 -22.6
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.950795
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:49:52.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:49:09', tmtdew=8.95, humidity=54.59, cloud=0.0, wind=22.25, temperature=13.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:49:46', seeing=1.89, atlas_timestamp='2026-02-15T22:49:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:47:00')
2026-02-16T00:49:52.444 [DEBUG] [Thread-214167] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:49:52.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:49:52.534 [DEBUG] [Thread-214171] [transport.py] [_log()] starting thread (client mode): 0xa5770fa0
2026-02-16T00:49:52.534 [DEBUG] [Thread-214171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:49:52.549 [DEBUG] [Thread-214171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:49:52.549 [INFO] [Thread-214171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:52.557 [DEBUG] [Thread-214171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] client lang: <none>
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] server lang: <none>
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] kex follows: False
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] Compression: none
2026-02-16T00:49:52.558 [DEBUG] [Thread-214171] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:49:52.615 [DEBUG] [Thread-214171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:49:52.615 [DEBUG] [Thread-214171] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:49:52.616 [DEBUG] [Thread-214171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:49:52.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:49:52.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:49:52.671 [DEBUG] [Thread-214171] [transport.py] [_log()] userauth is OK
2026-02-16T00:49:52.672 [DEBUG] [Thread-214171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:49:52.672 [DEBUG] [Thread-214171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:49:52.672 [DEBUG] [Thread-214171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:49:52.672 [DEBUG] [Thread-214171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:49:52.690 [INFO] [Thread-214171] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:49:52.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:49:52.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:49:53.508 [DEBUG] [Thread-214171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:49:53.508 [DEBUG] [Thread-214171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:49:53.556 [DEBUG] [Thread-214171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:49:53.556 [DEBUG] [Thread-214171] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:49:53.564 [DEBUG] [Thread-214171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:49:53.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:49:53.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')
2026-02-16T00:49:53.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:49:53.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:49:53.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:49:53.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:49:53.599 [DEBUG] [Thread-214171] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:50:06.741 [DEBUG] [Thread-214173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:20.729 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:20.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:21.798 [DEBUG] [Thread-214174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:23.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:50:23.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:50:23.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:50:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 49, 45), 8.99, 54.42, 0.0, 19.96, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:50:25.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:49:45
2026-02-16T00:50:26.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:50:26.271 [DEBUG] [Thread-214175] [transport.py] [_log()] starting thread (client mode): 0xa57e1ae0
2026-02-16T00:50:26.272 [DEBUG] [Thread-214175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:50:26.291 [DEBUG] [Thread-214175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:50:26.291 [INFO] [Thread-214175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] client lang: <none>
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] server lang: <none>
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] kex follows: False
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] Compression: none
2026-02-16T00:50:26.294 [DEBUG] [Thread-214175] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:50:26.310 [DEBUG] [Thread-214175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:50:26.310 [DEBUG] [Thread-214175] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:50:26.310 [DEBUG] [Thread-214175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:50:26.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:50:26.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:50:26.312 [DEBUG] [Thread-214175] [transport.py] [_log()] userauth is OK
2026-02-16T00:50:26.313 [DEBUG] [Thread-214175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:50:26.313 [DEBUG] [Thread-214175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:50:26.313 [DEBUG] [Thread-214175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:50:26.313 [DEBUG] [Thread-214175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:50:26.336 [INFO] [Thread-214175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:50:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:50:26.921 [DEBUG] [Thread-214175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:50:26.921 [DEBUG] [Thread-214175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:50:26.922 [DEBUG] [Thread-214175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:50:26.962 [DEBUG] [Thread-214175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:50:26.963 [DEBUG] [Thread-214175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:50:26.966 [DEBUG] [Thread-214175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:50:26.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:50:26.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:50:26.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:50:26.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:50:26.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:50:26.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:50:26.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:50:26.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:50:26.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:50:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.951142 -999.00  +13.60  15.87     59   +5.70 1 1 1 1 1     0    0 6.79 -35.29 ZNESW 17.7 15.9 134.0 24.2 13.9 -23.5 13.8 -22.3 13.6 -21.4 13.9 -22.4
2026-02-16T00:50:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:50:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:50:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.951142
2026-02-16T00:50:26.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:50:26.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:50:26.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:50:26.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:50:26.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:50:26.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:49:45', tmtdew=8.99, humidity=54.42, cloud=0.0, wind=19.96, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:50:21', seeing=2.21, atlas_timestamp='2026-02-15T22:49:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:47:00')
2026-02-16T00:50:26.994 [DEBUG] [Thread-214175] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:50:27.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:50:27.089 [DEBUG] [Thread-214178] [transport.py] [_log()] starting thread (client mode): 0xa57b18d0
2026-02-16T00:50:27.089 [DEBUG] [Thread-214178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:50:27.104 [DEBUG] [Thread-214178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:50:27.104 [INFO] [Thread-214178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:50:27.111 [DEBUG] [Thread-214178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:50:27.112 [DEBUG] [Thread-214178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:50:27.112 [DEBUG] [Thread-214178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:50:27.112 [DEBUG] [Thread-214178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:50:27.112 [DEBUG] [Thread-214178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:50:27.112 [DEBUG] [Thread-214178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:50:27.112 [DEBUG] [Thread-214178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] client lang: <none>
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] server lang: <none>
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] kex follows: False
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] Compression: none
2026-02-16T00:50:27.113 [DEBUG] [Thread-214178] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:50:27.173 [DEBUG] [Thread-214178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:50:27.174 [DEBUG] [Thread-214178] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:50:27.175 [DEBUG] [Thread-214178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:50:27.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:50:27.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:50:27.229 [DEBUG] [Thread-214178] [transport.py] [_log()] userauth is OK
2026-02-16T00:50:27.229 [DEBUG] [Thread-214178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:50:27.229 [DEBUG] [Thread-214178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:50:27.229 [DEBUG] [Thread-214178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:50:27.229 [DEBUG] [Thread-214178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:50:27.249 [INFO] [Thread-214178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:50:27.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:50:27.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:50:28.104 [DEBUG] [Thread-214178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:50:28.105 [DEBUG] [Thread-214178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:50:28.152 [DEBUG] [Thread-214178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:50:28.152 [DEBUG] [Thread-214178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:50:28.170 [DEBUG] [Thread-214178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:50:28.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:50:28.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:50:28.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:50:28.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:50:28.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:50:28.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:50:28.204 [DEBUG] [Thread-214178] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:50:36.832 [DEBUG] [Thread-214180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:40.004 [DEBUG] [Thread-214181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:44.883 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:51.886 [DEBUG] [Thread-214182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:50:58.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:50:58.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:50:58.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:51:00.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 50, 21), 8.99, 54.41, 0.0, 22.16, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:51:00.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:50:21
2026-02-16T00:51:01.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:51:01.334 [DEBUG] [Thread-214183] [transport.py] [_log()] starting thread (client mode): 0xa57e2d70
2026-02-16T00:51:01.334 [DEBUG] [Thread-214183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:51:01.354 [DEBUG] [Thread-214183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:51:01.354 [INFO] [Thread-214183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] client lang: <none>
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] server lang: <none>
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] kex follows: False
2026-02-16T00:51:01.357 [DEBUG] [Thread-214183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:51:01.358 [DEBUG] [Thread-214183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:51:01.358 [DEBUG] [Thread-214183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:51:01.358 [DEBUG] [Thread-214183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:51:01.358 [DEBUG] [Thread-214183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:51:01.358 [DEBUG] [Thread-214183] [transport.py] [_log()] Compression: none
2026-02-16T00:51:01.358 [DEBUG] [Thread-214183] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:51:01.376 [DEBUG] [Thread-214183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:51:01.377 [DEBUG] [Thread-214183] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:51:01.377 [DEBUG] [Thread-214183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:51:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:51:01.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:51:01.379 [DEBUG] [Thread-214183] [transport.py] [_log()] userauth is OK
2026-02-16T00:51:01.380 [DEBUG] [Thread-214183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:51:01.380 [DEBUG] [Thread-214183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:51:01.380 [DEBUG] [Thread-214183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:51:01.380 [DEBUG] [Thread-214183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:51:01.416 [INFO] [Thread-214183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:51:01.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:51:02.037 [DEBUG] [Thread-214183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:51:02.038 [DEBUG] [Thread-214183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:51:02.038 [DEBUG] [Thread-214183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:51:02.078 [DEBUG] [Thread-214183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:51:02.079 [DEBUG] [Thread-214183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:51:02.082 [DEBUG] [Thread-214183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:51:02.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:51:02.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:51:02.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:51:02.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:51:02.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:51:02.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:51:02.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:51:02.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:51:02.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:51:02.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.951837 -999.00  +13.60  19.45     59   +5.70 1 1 1 1 1     0    0 6.91 -32.06 ZNESW 20.0 19.4 158.0 25.2 13.9 -23.3 13.8 -22.3 13.6 -21.2 13.8 -22.3
2026-02-16T00:51:02.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:51:02.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:51:02.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.951837
2026-02-16T00:51:02.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:51:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:51:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:51:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:51:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:51:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:50:21', tmtdew=8.99, humidity=54.41, cloud=0.0, wind=22.16, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:50:57', seeing=2.32, atlas_timestamp='2026-02-15T22:50:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024750000000000938, 0.006249999999999645, -0.05824999999999925, -0.050499999999999545, -0.009499999999999176, 0.04225000000000101, -0.008000000000000895, 0.03825000000000145, 0.033500000000000085, 0.04499999999999993, -0.06125000000000114, 0.005000000000000782, 0.054999999999999716, 0.03324999999999889, 0.026999999999999247, 0.030999999999998806, 0.047750000000000625, 0.026999999999999247, 0.006999999999999673, -0.0002500000000011937, 0.03549999999999898, 0.035749999999998394, 0.021250000000000213, 0.03974999999999973, 0.05349999999999788, -0.0015000000000000568, 0.04974999999999952, -0.0024999999999995026, 0.05550000000000033, -0.02149999999999963, 0.06900000000000084, 0.10400000000000098, 0.060249999999999915], zp_timestamp='2026-02-15T22:47:00')
2026-02-16T00:51:02.108 [DEBUG] [Thread-214183] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:51:02.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:51:02.203 [DEBUG] [Thread-214186] [transport.py] [_log()] starting thread (client mode): 0xa57b0d60
2026-02-16T00:51:02.204 [DEBUG] [Thread-214186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:51:02.218 [DEBUG] [Thread-214186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:51:02.218 [INFO] [Thread-214186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] client lang: <none>
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] server lang: <none>
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] kex follows: False
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:51:02.226 [DEBUG] [Thread-214186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:51:02.227 [DEBUG] [Thread-214186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:51:02.227 [DEBUG] [Thread-214186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:51:02.227 [DEBUG] [Thread-214186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:51:02.227 [DEBUG] [Thread-214186] [transport.py] [_log()] Compression: none
2026-02-16T00:51:02.227 [DEBUG] [Thread-214186] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:51:02.291 [DEBUG] [Thread-214186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:51:02.291 [DEBUG] [Thread-214186] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:51:02.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:51:02.293 [DEBUG] [Thread-214186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:51:02.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:51:02.346 [DEBUG] [Thread-214186] [transport.py] [_log()] userauth is OK
2026-02-16T00:51:02.347 [DEBUG] [Thread-214186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:51:02.347 [DEBUG] [Thread-214186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:51:02.347 [DEBUG] [Thread-214186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:51:02.347 [DEBUG] [Thread-214186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:51:02.365 [INFO] [Thread-214186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:51:02.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:51:02.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:51:03.231 [DEBUG] [Thread-214186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:51:03.231 [DEBUG] [Thread-214186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:51:03.280 [DEBUG] [Thread-214186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:51:03.280 [DEBUG] [Thread-214186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:51:03.289 [DEBUG] [Thread-214186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:51:03.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:51:03.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:51:03.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:51:03.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:51:03.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:51:03.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:51:03.325 [DEBUG] [Thread-214186] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:51:06.920 [DEBUG] [Thread-214188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:51:20.930 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:51:20.931 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:51:21.969 [DEBUG] [Thread-214189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:51:33.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:51:33.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:51:33.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:51:35.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 50, 57), 9.08, 54.46, 0.0, 24.79, 13.71, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:51:35.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:50:57
2026-02-16T00:51:36.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:51:36.415 [DEBUG] [Thread-214190] [transport.py] [_log()] starting thread (client mode): 0xa81d5c60
2026-02-16T00:51:36.415 [DEBUG] [Thread-214190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:51:36.438 [DEBUG] [Thread-214190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:51:36.438 [INFO] [Thread-214190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] client lang: <none>
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] server lang: <none>
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] kex follows: False
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] Compression: none
2026-02-16T00:51:36.441 [DEBUG] [Thread-214190] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:51:36.458 [DEBUG] [Thread-214190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:51:36.458 [DEBUG] [Thread-214190] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:51:36.459 [DEBUG] [Thread-214190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:51:36.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:51:36.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:51:36.461 [DEBUG] [Thread-214190] [transport.py] [_log()] userauth is OK
2026-02-16T00:51:36.461 [DEBUG] [Thread-214190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:51:36.461 [DEBUG] [Thread-214190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:51:36.461 [DEBUG] [Thread-214190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:51:36.461 [DEBUG] [Thread-214190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:51:36.485 [INFO] [Thread-214190] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:51:36.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:51:37.006 [DEBUG] [Thread-214192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:51:37.120 [DEBUG] [Thread-214190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:51:37.120 [DEBUG] [Thread-214190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:51:37.120 [DEBUG] [Thread-214190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:51:37.161 [DEBUG] [Thread-214190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:51:37.161 [DEBUG] [Thread-214190] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:51:37.165 [DEBUG] [Thread-214190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:51:37.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:51:37.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:51:37.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:51:37.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:51:37.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:51:37.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:51:37.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:51:37.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:51:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:51:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.952184 -999.00  +13.60  26.15     59   +5.80 1 1 1 1 1     0    0 7.06 -30.86 ZNESW 22.0 26.1 142.2 30.1 13.9 -23.5 13.8 -22.3 13.6 -21.2 13.9 -22.4
2026-02-16T00:51:37.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:51:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:51:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.952184
2026-02-16T00:51:37.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:51:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:51:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:51:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:51:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:51:37.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:50:57', tmtdew=9.08, humidity=54.46, cloud=0.0, wind=24.79, temperature=13.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:50:57', seeing=2.32, atlas_timestamp='2026-02-15T22:51:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:49:00')
2026-02-16T00:51:37.193 [DEBUG] [Thread-214190] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:51:37.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:51:37.287 [DEBUG] [Thread-214194] [transport.py] [_log()] starting thread (client mode): 0xa2d01780
2026-02-16T00:51:37.288 [DEBUG] [Thread-214194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:51:37.303 [DEBUG] [Thread-214194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:51:37.303 [INFO] [Thread-214194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:51:37.310 [DEBUG] [Thread-214194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:51:37.311 [DEBUG] [Thread-214194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:51:37.311 [DEBUG] [Thread-214194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:51:37.311 [DEBUG] [Thread-214194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] client lang: <none>
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] server lang: <none>
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] kex follows: False
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] Compression: none
2026-02-16T00:51:37.312 [DEBUG] [Thread-214194] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:51:37.371 [DEBUG] [Thread-214194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:51:37.372 [DEBUG] [Thread-214194] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:51:37.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:51:37.373 [DEBUG] [Thread-214194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:51:37.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:51:37.427 [DEBUG] [Thread-214194] [transport.py] [_log()] userauth is OK
2026-02-16T00:51:37.428 [DEBUG] [Thread-214194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:51:37.428 [DEBUG] [Thread-214194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:51:37.428 [DEBUG] [Thread-214194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:51:37.428 [DEBUG] [Thread-214194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:51:37.446 [INFO] [Thread-214194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:51:37.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:51:37.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:51:38.255 [DEBUG] [Thread-214194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:51:38.256 [DEBUG] [Thread-214194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:51:38.304 [DEBUG] [Thread-214194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:51:38.304 [DEBUG] [Thread-214194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:51:38.313 [DEBUG] [Thread-214194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:51:38.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:51:38.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:51:38.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:51:38.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:51:38.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:51:38.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:51:38.346 [DEBUG] [Thread-214194] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:51:40.083 [DEBUG] [Thread-214196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:51:52.047 [DEBUG] [Thread-214197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:07.099 [DEBUG] [Thread-214198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:08.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:52:08.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:52:08.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:52:10.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 51, 32), 4.58, 76.99, 0.0, 25.44, 6.8, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:52:10.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:51:32
2026-02-16T00:52:11.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:52:11.280 [DEBUG] [Thread-214199] [transport.py] [_log()] starting thread (client mode): 0xa2d6c940
2026-02-16T00:52:11.280 [DEBUG] [Thread-214199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:52:11.295 [DEBUG] [Thread-214199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:52:11.295 [INFO] [Thread-214199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:52:11.298 [DEBUG] [Thread-214199] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] client lang: <none>
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] server lang: <none>
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] kex follows: False
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] Compression: none
2026-02-16T00:52:11.299 [DEBUG] [Thread-214199] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:52:11.316 [DEBUG] [Thread-214199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:52:11.317 [DEBUG] [Thread-214199] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:52:11.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:52:11.318 [DEBUG] [Thread-214199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:52:11.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:52:11.321 [DEBUG] [Thread-214199] [transport.py] [_log()] userauth is OK
2026-02-16T00:52:11.321 [DEBUG] [Thread-214199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:52:11.321 [DEBUG] [Thread-214199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:52:11.321 [DEBUG] [Thread-214199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:52:11.322 [DEBUG] [Thread-214199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:52:11.348 [INFO] [Thread-214199] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:52:11.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:52:12.134 [DEBUG] [Thread-214199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:52:12.134 [DEBUG] [Thread-214199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:52:12.135 [DEBUG] [Thread-214199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:52:12.175 [DEBUG] [Thread-214199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:52:12.176 [DEBUG] [Thread-214199] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:52:12.179 [DEBUG] [Thread-214199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:52:12.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:52:12.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:52:12.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:52:12.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:52:12.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:52:12.205 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:52:12.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:52:12.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:52:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:52:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.952531 -999.00  +13.60  15.51     59   +5.80 1 1 1 1 1     0    0 7.11 -30.38 ZNESW 16.5 15.5 163.8 25.9 13.9 -23.5 13.8 -22.4 13.6 -21.3 13.8 -22.7
2026-02-16T00:52:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:52:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:52:12.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.952531
2026-02-16T00:52:12.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:52:12.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:52:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:52:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:52:12.208 [DEBUG] [Thread-214199] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:52:12.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:52:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:51:32', tmtdew=4.58, humidity=76.99, cloud=0.0, wind=25.44, temperature=6.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:51:33', seeing=2.3, atlas_timestamp='2026-02-15T22:51:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:49:00')
2026-02-16T00:52:12.292 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:52:12.303 [DEBUG] [Thread-214202] [transport.py] [_log()] starting thread (client mode): 0xa2d6ddb0
2026-02-16T00:52:12.304 [DEBUG] [Thread-214202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:52:12.318 [DEBUG] [Thread-214202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:52:12.318 [INFO] [Thread-214202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:12.326 [DEBUG] [Thread-214202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] client lang: <none>
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] server lang: <none>
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] kex follows: False
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:52:12.327 [DEBUG] [Thread-214202] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:52:12.328 [DEBUG] [Thread-214202] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:52:12.328 [DEBUG] [Thread-214202] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:52:12.328 [DEBUG] [Thread-214202] [transport.py] [_log()] Compression: none
2026-02-16T00:52:12.328 [DEBUG] [Thread-214202] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:52:12.384 [DEBUG] [Thread-214202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:52:12.385 [DEBUG] [Thread-214202] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:52:12.385 [DEBUG] [Thread-214202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:52:12.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:52:12.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:52:12.440 [DEBUG] [Thread-214202] [transport.py] [_log()] userauth is OK
2026-02-16T00:52:12.440 [DEBUG] [Thread-214202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:52:12.440 [DEBUG] [Thread-214202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:52:12.441 [DEBUG] [Thread-214202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:52:12.441 [DEBUG] [Thread-214202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:52:12.459 [INFO] [Thread-214202] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:52:12.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:52:12.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:52:13.356 [DEBUG] [Thread-214202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:52:13.356 [DEBUG] [Thread-214202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:52:13.405 [DEBUG] [Thread-214202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:52:13.405 [DEBUG] [Thread-214202] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:52:13.414 [DEBUG] [Thread-214202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:52:13.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:52:13.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:52:13.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:52:13.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:52:13.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:52:13.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:52:13.451 [DEBUG] [Thread-214202] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:52:19.057 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:21.133 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:21.134 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:22.135 [DEBUG] [Thread-214204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:37.185 [DEBUG] [Thread-214205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:40.145 [DEBUG] [Thread-214206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:52:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:52:43.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:52:43.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:52:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 52, 8), 6.02, 69.65, 0.0, 21.3, 8.98, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:52:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:52:08
2026-02-16T00:52:46.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:52:46.289 [DEBUG] [Thread-214207] [transport.py] [_log()] starting thread (client mode): 0xa2d00cd0
2026-02-16T00:52:46.289 [DEBUG] [Thread-214207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:52:46.308 [DEBUG] [Thread-214207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:52:46.308 [INFO] [Thread-214207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] client lang: <none>
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] server lang: <none>
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] kex follows: False
2026-02-16T00:52:46.311 [DEBUG] [Thread-214207] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:52:46.312 [DEBUG] [Thread-214207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:52:46.312 [DEBUG] [Thread-214207] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:52:46.312 [DEBUG] [Thread-214207] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:52:46.312 [DEBUG] [Thread-214207] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:52:46.312 [DEBUG] [Thread-214207] [transport.py] [_log()] Compression: none
2026-02-16T00:52:46.312 [DEBUG] [Thread-214207] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:52:46.328 [DEBUG] [Thread-214207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:52:46.329 [DEBUG] [Thread-214207] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:52:46.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:52:46.330 [DEBUG] [Thread-214207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:52:46.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:52:46.332 [DEBUG] [Thread-214207] [transport.py] [_log()] userauth is OK
2026-02-16T00:52:46.332 [DEBUG] [Thread-214207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:52:46.332 [DEBUG] [Thread-214207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:52:46.332 [DEBUG] [Thread-214207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:52:46.333 [DEBUG] [Thread-214207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:52:46.356 [INFO] [Thread-214207] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:52:46.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:52:46.980 [DEBUG] [Thread-214207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:52:46.981 [DEBUG] [Thread-214207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:52:46.981 [DEBUG] [Thread-214207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:52:47.022 [DEBUG] [Thread-214207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:52:47.022 [DEBUG] [Thread-214207] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:52:47.025 [DEBUG] [Thread-214207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:52:47.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:52:47.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:52:47.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:52:47.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:52:47.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:52:47.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:52:47.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:52:47.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:52:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:52:47.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.952878 -999.00  +13.50  18.30     59   +5.70 1 1 1 1 1     0    0 7.05 -29.30 ZNESW 19.4 18.3 141.2 22.9 13.9 -23.6 13.8 -22.6 13.6 -21.5 13.8 -22.7
2026-02-16T00:52:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:52:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:52:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.952878
2026-02-16T00:52:47.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:52:47.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:52:47.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:52:47.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:52:47.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:52:47.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:52:08', tmtdew=6.02, humidity=69.65, cloud=0.0, wind=21.3, temperature=8.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:52:09', seeing=2.09, atlas_timestamp='2026-02-15T22:52:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:49:00')
2026-02-16T00:52:47.050 [DEBUG] [Thread-214207] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:52:47.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:52:47.144 [DEBUG] [Thread-214210] [transport.py] [_log()] starting thread (client mode): 0xa2d01630
2026-02-16T00:52:47.144 [DEBUG] [Thread-214210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:52:47.158 [DEBUG] [Thread-214210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:52:47.158 [INFO] [Thread-214210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:52:47.165 [DEBUG] [Thread-214210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] client lang: <none>
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] server lang: <none>
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] kex follows: False
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] Compression: none
2026-02-16T00:52:47.166 [DEBUG] [Thread-214210] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:52:47.229 [DEBUG] [Thread-214210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:52:47.230 [DEBUG] [Thread-214210] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:52:47.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:52:47.231 [DEBUG] [Thread-214210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:52:47.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:52:47.285 [DEBUG] [Thread-214210] [transport.py] [_log()] userauth is OK
2026-02-16T00:52:47.285 [DEBUG] [Thread-214210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:52:47.286 [DEBUG] [Thread-214210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:52:47.286 [DEBUG] [Thread-214210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:52:47.286 [DEBUG] [Thread-214210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:52:47.310 [INFO] [Thread-214210] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:52:47.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:52:47.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:52:48.140 [DEBUG] [Thread-214210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:52:48.140 [DEBUG] [Thread-214210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:52:48.188 [DEBUG] [Thread-214210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:52:48.188 [DEBUG] [Thread-214210] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:52:48.197 [DEBUG] [Thread-214210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:52:48.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:52:48.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:52:48.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:52:48.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:52:48.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:52:48.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:52:48.232 [DEBUG] [Thread-214210] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:52:52.219 [DEBUG] [Thread-214212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:07.259 [DEBUG] [Thread-214213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:18.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:53:18.255 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:53:18.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:53:20.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 52, 44), 5.97, 69.69, 0.0, 21.28, 8.99, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:53:20.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:52:44
2026-02-16T00:53:20.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:53:20.574 [DEBUG] [Thread-214214] [transport.py] [_log()] starting thread (client mode): 0xa2d26260
2026-02-16T00:53:20.575 [DEBUG] [Thread-214214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:53:20.594 [DEBUG] [Thread-214214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:53:20.594 [INFO] [Thread-214214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:20.597 [DEBUG] [Thread-214214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] client lang: <none>
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] server lang: <none>
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] kex follows: False
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] Compression: none
2026-02-16T00:53:20.598 [DEBUG] [Thread-214214] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:53:20.616 [DEBUG] [Thread-214214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:53:20.617 [DEBUG] [Thread-214214] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:53:20.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:53:20.618 [DEBUG] [Thread-214214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:53:20.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:53:20.622 [DEBUG] [Thread-214214] [transport.py] [_log()] userauth is OK
2026-02-16T00:53:20.622 [DEBUG] [Thread-214214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:53:20.623 [DEBUG] [Thread-214214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:53:20.623 [DEBUG] [Thread-214214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:53:20.623 [DEBUG] [Thread-214214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:53:20.641 [INFO] [Thread-214214] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:53:20.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:53:21.272 [DEBUG] [Thread-214214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:53:21.272 [DEBUG] [Thread-214214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:53:21.273 [DEBUG] [Thread-214214] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:53:21.313 [DEBUG] [Thread-214214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:53:21.314 [DEBUG] [Thread-214214] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:53:21.317 [DEBUG] [Thread-214214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:53:21.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:53:21.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:53:21.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:53:21.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:53:21.334 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:21.336 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:21.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:53:21.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:53:21.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:53:21.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:53:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:53:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.953226 -999.00  +13.50  18.91     59   +5.80 1 1 1 1 1     0    0 7.18 -26.67 ZNESW 15.9 18.9 149.4 23.0 13.8 -23.5 13.8 -22.4 13.5 -21.3 13.8 -22.5
2026-02-16T00:53:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:53:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:53:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.953226
2026-02-16T00:53:21.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:53:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:53:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:53:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:53:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:53:21.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:52:44', tmtdew=5.97, humidity=69.69, cloud=0.0, wind=21.28, temperature=8.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:52:45', seeing=2.23, atlas_timestamp='2026-02-15T22:52:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:49:00')
2026-02-16T00:53:21.345 [DEBUG] [Thread-214214] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:53:21.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:53:21.440 [DEBUG] [Thread-214217] [transport.py] [_log()] starting thread (client mode): 0xa5771de0
2026-02-16T00:53:21.440 [DEBUG] [Thread-214217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:53:21.455 [DEBUG] [Thread-214217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:53:21.455 [INFO] [Thread-214217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:53:21.462 [DEBUG] [Thread-214217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] client lang: <none>
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] server lang: <none>
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] kex follows: False
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] Compression: none
2026-02-16T00:53:21.464 [DEBUG] [Thread-214217] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:53:21.522 [DEBUG] [Thread-214217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:53:21.523 [DEBUG] [Thread-214217] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:53:21.523 [DEBUG] [Thread-214217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:53:21.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:53:21.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:53:21.578 [DEBUG] [Thread-214217] [transport.py] [_log()] userauth is OK
2026-02-16T00:53:21.578 [DEBUG] [Thread-214217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:53:21.579 [DEBUG] [Thread-214217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:53:21.579 [DEBUG] [Thread-214217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:53:21.579 [DEBUG] [Thread-214217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:53:21.598 [INFO] [Thread-214217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:53:21.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:53:21.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:53:22.297 [DEBUG] [Thread-214219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:22.427 [DEBUG] [Thread-214217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:53:22.428 [DEBUG] [Thread-214217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:53:22.476 [DEBUG] [Thread-214217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:53:22.476 [DEBUG] [Thread-214217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:53:22.485 [DEBUG] [Thread-214217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:53:22.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:53:22.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:53:22.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:53:22.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:53:22.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:53:22.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:53:22.522 [DEBUG] [Thread-214217] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:53:37.351 [DEBUG] [Thread-214220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:40.208 [DEBUG] [Thread-214221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:52.388 [DEBUG] [Thread-214222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:52.443 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:53:52.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:53:52.544 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:53:52.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:53:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 53, 20), 5.94, 69.83, 0.0, 22.14, 8.93, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:53:54.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:53:20
2026-02-16T00:53:54.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:53:54.893 [DEBUG] [Thread-214223] [transport.py] [_log()] starting thread (client mode): 0xa2d27850
2026-02-16T00:53:54.893 [DEBUG] [Thread-214223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:53:54.911 [DEBUG] [Thread-214223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:53:54.911 [INFO] [Thread-214223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] client lang: <none>
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] server lang: <none>
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] kex follows: False
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] Compression: none
2026-02-16T00:53:54.915 [DEBUG] [Thread-214223] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:53:54.932 [DEBUG] [Thread-214223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:53:54.933 [DEBUG] [Thread-214223] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:53:54.933 [DEBUG] [Thread-214223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:53:54.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:53:54.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:53:54.935 [DEBUG] [Thread-214223] [transport.py] [_log()] userauth is OK
2026-02-16T00:53:54.935 [DEBUG] [Thread-214223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:53:54.936 [DEBUG] [Thread-214223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:53:54.936 [DEBUG] [Thread-214223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:53:54.936 [DEBUG] [Thread-214223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:53:54.960 [INFO] [Thread-214223] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:53:54.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:53:55.642 [DEBUG] [Thread-214223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:53:55.642 [DEBUG] [Thread-214223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:53:55.642 [DEBUG] [Thread-214223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:53:55.683 [DEBUG] [Thread-214223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:53:55.684 [DEBUG] [Thread-214223] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:53:55.687 [DEBUG] [Thread-214223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:53:55.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:53:55.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:53:55.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:53:55.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:53:55.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:53:55.710 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:53:55.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:53:55.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:53:55.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:53:55.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.953573 -999.00  +13.50  19.74     59   +5.80 1 1 1 1 1     0    0 7.08 -26.86 ZNESW 20.2 19.7 146.0 22.5 13.9 -23.7 13.8 -22.5 13.6 -21.4 13.8 -22.6
2026-02-16T00:53:55.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:53:55.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:53:55.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.953573
2026-02-16T00:53:55.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:53:55.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:53:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:53:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:53:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:53:55.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:53:20', tmtdew=5.94, humidity=69.83, cloud=0.0, wind=22.14, temperature=8.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:53:20', seeing=2.5, atlas_timestamp='2026-02-15T22:53:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:49:00')
2026-02-16T00:53:55.713 [DEBUG] [Thread-214223] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:53:55.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:53:55.808 [DEBUG] [Thread-214226] [transport.py] [_log()] starting thread (client mode): 0xa57d4040
2026-02-16T00:53:55.808 [DEBUG] [Thread-214226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:53:55.823 [DEBUG] [Thread-214226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:53:55.823 [INFO] [Thread-214226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:53:55.830 [DEBUG] [Thread-214226] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:53:55.830 [DEBUG] [Thread-214226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:53:55.831 [DEBUG] [Thread-214226] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:53:55.831 [DEBUG] [Thread-214226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:55.831 [DEBUG] [Thread-214226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:53:55.831 [DEBUG] [Thread-214226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:55.831 [DEBUG] [Thread-214226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] client lang: <none>
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] server lang: <none>
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] kex follows: False
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] Compression: none
2026-02-16T00:53:55.832 [DEBUG] [Thread-214226] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:53:55.891 [DEBUG] [Thread-214226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:53:55.891 [DEBUG] [Thread-214226] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:53:55.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:53:55.892 [DEBUG] [Thread-214226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:53:55.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:53:55.946 [DEBUG] [Thread-214226] [transport.py] [_log()] userauth is OK
2026-02-16T00:53:55.947 [DEBUG] [Thread-214226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:53:55.947 [DEBUG] [Thread-214226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:53:55.947 [DEBUG] [Thread-214226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:53:55.947 [DEBUG] [Thread-214226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:53:55.966 [INFO] [Thread-214226] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:53:55.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:53:55.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:53:56.773 [DEBUG] [Thread-214226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:53:56.773 [DEBUG] [Thread-214226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:53:56.821 [DEBUG] [Thread-214226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:53:56.821 [DEBUG] [Thread-214226] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:53:56.830 [DEBUG] [Thread-214226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:53:56.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:53:56.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:53:56.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:53:56.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:53:56.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:53:56.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:53:56.864 [DEBUG] [Thread-214226] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:54:07.428 [DEBUG] [Thread-214228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:54:21.538 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:54:21.539 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:54:22.481 [DEBUG] [Thread-214229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:54:26.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:54:26.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:54:26.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:54:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 53, 54), 5.92, 69.89, 0.0, 21.63, 8.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:54:28.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:53:54
2026-02-16T00:54:29.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:54:29.262 [DEBUG] [Thread-214230] [transport.py] [_log()] starting thread (client mode): 0xa2d25e40
2026-02-16T00:54:29.263 [DEBUG] [Thread-214230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:54:29.282 [DEBUG] [Thread-214230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:54:29.283 [INFO] [Thread-214230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:54:29.285 [DEBUG] [Thread-214230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] client lang: <none>
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] server lang: <none>
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] kex follows: False
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] Compression: none
2026-02-16T00:54:29.286 [DEBUG] [Thread-214230] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:54:29.296 [DEBUG] [Thread-214230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:54:29.296 [DEBUG] [Thread-214230] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:54:29.297 [DEBUG] [Thread-214230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:54:29.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:54:29.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:54:29.299 [DEBUG] [Thread-214230] [transport.py] [_log()] userauth is OK
2026-02-16T00:54:29.299 [DEBUG] [Thread-214230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:54:29.299 [DEBUG] [Thread-214230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:54:29.300 [DEBUG] [Thread-214230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:54:29.300 [DEBUG] [Thread-214230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:54:29.325 [INFO] [Thread-214230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:54:29.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:54:29.951 [DEBUG] [Thread-214230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:54:29.951 [DEBUG] [Thread-214230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:54:29.951 [DEBUG] [Thread-214230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:54:29.992 [DEBUG] [Thread-214230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:54:29.993 [DEBUG] [Thread-214230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:54:29.996 [DEBUG] [Thread-214230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:54:30.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:54:30.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:54:30.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:54:30.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:54:30.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:54:30.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:54:30.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:54:30.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:54:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:54:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.953920 -999.00  +13.60  21.92     59   +5.80 1 1 1 1 1     0    0 7.01 -27.17 ZNESW 21.5 21.9 137.6 27.5 13.9 -23.4 13.8 -22.4 13.6 -21.3 13.8 -22.4
2026-02-16T00:54:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:54:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:54:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.953920
2026-02-16T00:54:30.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:54:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:54:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:54:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:54:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:54:30.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:53:54', tmtdew=5.92, humidity=69.89, cloud=0.0, wind=21.63, temperature=8.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:53:55', seeing=2.47, atlas_timestamp='2026-02-15T22:53:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:52:00')
2026-02-16T00:54:30.023 [DEBUG] [Thread-214230] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:54:30.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:54:30.119 [DEBUG] [Thread-214233] [transport.py] [_log()] starting thread (client mode): 0xa2d27d90
2026-02-16T00:54:30.119 [DEBUG] [Thread-214233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:54:30.133 [DEBUG] [Thread-214233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:54:30.134 [INFO] [Thread-214233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:54:30.141 [DEBUG] [Thread-214233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:54:30.141 [DEBUG] [Thread-214233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:54:30.141 [DEBUG] [Thread-214233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:54:30.141 [DEBUG] [Thread-214233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:54:30.141 [DEBUG] [Thread-214233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:54:30.141 [DEBUG] [Thread-214233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] client lang: <none>
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] server lang: <none>
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] kex follows: False
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] Compression: none
2026-02-16T00:54:30.142 [DEBUG] [Thread-214233] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:54:30.199 [DEBUG] [Thread-214233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:54:30.199 [DEBUG] [Thread-214233] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:54:30.200 [DEBUG] [Thread-214233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:54:30.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:54:30.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:54:30.255 [DEBUG] [Thread-214233] [transport.py] [_log()] userauth is OK
2026-02-16T00:54:30.255 [DEBUG] [Thread-214233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:54:30.255 [DEBUG] [Thread-214233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:54:30.255 [DEBUG] [Thread-214233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:54:30.255 [DEBUG] [Thread-214233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:54:30.278 [INFO] [Thread-214233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:54:30.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:54:30.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:54:31.106 [DEBUG] [Thread-214233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:54:31.107 [DEBUG] [Thread-214233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:54:31.154 [DEBUG] [Thread-214233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:54:31.154 [DEBUG] [Thread-214233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:54:31.162 [DEBUG] [Thread-214233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:54:31.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:54:31.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:54:31.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:54:31.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:54:31.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:54:31.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:54:31.199 [DEBUG] [Thread-214233] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:54:37.513 [DEBUG] [Thread-214235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:54:40.284 [DEBUG] [Thread-214236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:54:52.565 [DEBUG] [Thread-214237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:01.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:55:01.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:55:01.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:55:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 54, 30), 5.93, 69.85, 0.0, 21.88, 8.88, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:55:03.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:54:30
2026-02-16T00:55:03.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:55:03.718 [DEBUG] [Thread-214238] [transport.py] [_log()] starting thread (client mode): 0xa2d27190
2026-02-16T00:55:03.718 [DEBUG] [Thread-214238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:55:03.739 [DEBUG] [Thread-214238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:55:03.739 [INFO] [Thread-214238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:55:03.742 [DEBUG] [Thread-214238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] client lang: <none>
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] server lang: <none>
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] kex follows: False
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] Compression: none
2026-02-16T00:55:03.743 [DEBUG] [Thread-214238] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:55:03.759 [DEBUG] [Thread-214238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:55:03.759 [DEBUG] [Thread-214238] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:55:03.760 [DEBUG] [Thread-214238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:55:03.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:55:03.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:55:03.760 [DEBUG] [Thread-214238] [transport.py] [_log()] userauth is OK
2026-02-16T00:55:03.760 [DEBUG] [Thread-214238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:55:03.761 [DEBUG] [Thread-214238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:55:03.761 [DEBUG] [Thread-214238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:55:03.761 [DEBUG] [Thread-214238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:55:03.774 [INFO] [Thread-214238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:55:03.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:55:06.420 [DEBUG] [Thread-214238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:55:06.420 [DEBUG] [Thread-214238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:55:06.420 [DEBUG] [Thread-214238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:55:06.460 [DEBUG] [Thread-214238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:55:06.461 [DEBUG] [Thread-214238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:55:06.464 [DEBUG] [Thread-214238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:55:06.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:55:06.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:55:06.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:55:06.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:55:06.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:55:06.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:55:06.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:55:06.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:55:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:55:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.954615 -999.00  +13.50  14.85     59   +5.80 1 1 1 1 1     0    0 7.23 -23.23 ZNESW 13.4 14.8 142.2 24.5 13.8 -23.5 13.8 -22.4 13.5 -21.2 13.8 -22.6
2026-02-16T00:55:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:55:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:55:06.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.954615
2026-02-16T00:55:06.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:55:06.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:55:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:55:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:55:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:55:06.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:54:30', tmtdew=5.93, humidity=69.85, cloud=0.0, wind=21.88, temperature=8.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:54:31', seeing=2.19, atlas_timestamp='2026-02-15T22:54:38.736', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:52:00')
2026-02-16T00:55:06.494 [DEBUG] [Thread-214238] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:55:06.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:55:06.590 [DEBUG] [Thread-214241] [transport.py] [_log()] starting thread (client mode): 0xa2d26380
2026-02-16T00:55:06.590 [DEBUG] [Thread-214241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:55:06.607 [DEBUG] [Thread-214241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:55:06.607 [INFO] [Thread-214241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] client lang: <none>
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] server lang: <none>
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] kex follows: False
2026-02-16T00:55:06.619 [DEBUG] [Thread-214241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:55:06.620 [DEBUG] [Thread-214241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:55:06.620 [DEBUG] [Thread-214241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:55:06.620 [DEBUG] [Thread-214241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:55:06.620 [DEBUG] [Thread-214241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:55:06.620 [DEBUG] [Thread-214241] [transport.py] [_log()] Compression: none
2026-02-16T00:55:06.620 [DEBUG] [Thread-214241] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:55:06.673 [DEBUG] [Thread-214241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:55:06.673 [DEBUG] [Thread-214241] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:55:06.674 [DEBUG] [Thread-214241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:55:06.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:55:06.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:55:06.733 [DEBUG] [Thread-214241] [transport.py] [_log()] userauth is OK
2026-02-16T00:55:06.733 [DEBUG] [Thread-214241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:55:06.733 [DEBUG] [Thread-214241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:55:06.733 [DEBUG] [Thread-214241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:55:06.733 [DEBUG] [Thread-214241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:55:06.753 [INFO] [Thread-214241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:55:06.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:55:06.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:55:07.570 [DEBUG] [Thread-214241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:55:07.570 [DEBUG] [Thread-214241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:55:07.603 [DEBUG] [Thread-214243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:07.618 [DEBUG] [Thread-214241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:55:07.618 [DEBUG] [Thread-214241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:55:07.627 [DEBUG] [Thread-214241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:55:07.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:55:07.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:55:07.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:55:07.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:55:07.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:55:07.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:55:07.662 [DEBUG] [Thread-214241] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:55:21.750 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:21.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:22.656 [DEBUG] [Thread-214244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:25.897 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:37.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:55:37.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:55:37.693 [DEBUG] [Thread-214245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:37.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:55:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 55, 5), 5.91, 69.9, 0.0, 21.3, 8.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:55:39.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:55:05
2026-02-16T00:55:39.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:55:40.078 [DEBUG] [Thread-214246] [transport.py] [_log()] starting thread (client mode): 0xa2d279a0
2026-02-16T00:55:40.078 [DEBUG] [Thread-214246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:55:40.098 [DEBUG] [Thread-214246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:55:40.098 [INFO] [Thread-214246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] client lang: <none>
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] server lang: <none>
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] kex follows: False
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:55:40.101 [DEBUG] [Thread-214246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:55:40.102 [DEBUG] [Thread-214246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:55:40.102 [DEBUG] [Thread-214246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:55:40.102 [DEBUG] [Thread-214246] [transport.py] [_log()] Compression: none
2026-02-16T00:55:40.102 [DEBUG] [Thread-214246] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:55:40.118 [DEBUG] [Thread-214246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:55:40.118 [DEBUG] [Thread-214246] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:55:40.119 [DEBUG] [Thread-214246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:55:40.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:55:40.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:55:40.120 [DEBUG] [Thread-214246] [transport.py] [_log()] userauth is OK
2026-02-16T00:55:40.120 [DEBUG] [Thread-214246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:55:40.120 [DEBUG] [Thread-214246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:55:40.121 [DEBUG] [Thread-214246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:55:40.121 [DEBUG] [Thread-214246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:55:40.153 [INFO] [Thread-214246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:55:40.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:55:40.354 [DEBUG] [Thread-214248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:55:40.776 [DEBUG] [Thread-214246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:55:40.776 [DEBUG] [Thread-214246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:55:40.776 [DEBUG] [Thread-214246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:55:40.817 [DEBUG] [Thread-214246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:55:40.818 [DEBUG] [Thread-214246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:55:40.821 [DEBUG] [Thread-214246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:55:40.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:55:40.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:55:40.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:55:40.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:55:40.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:55:40.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:55:40.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:55:40.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:55:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:55:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.954961 -999.00  +13.50  14.04     59   +5.80 1 1 1 1 1     0    0 7.34 -21.19 ZNESW 13.0 14.0 161.9 21.5 13.8 -23.6 13.8 -22.5 13.6 -21.5 13.8 -22.7
2026-02-16T00:55:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:55:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:55:40.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.954961
2026-02-16T00:55:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:55:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:55:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:55:40.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:55:40.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:55:40.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:55:05', tmtdew=5.91, humidity=69.9, cloud=0.0, wind=21.3, temperature=8.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:55:06', seeing=2.57, atlas_timestamp='2026-02-15T22:55:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:52:00')
2026-02-16T00:55:40.851 [DEBUG] [Thread-214246] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:55:40.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:55:40.948 [DEBUG] [Thread-214250] [transport.py] [_log()] starting thread (client mode): 0xa57b09d0
2026-02-16T00:55:40.948 [DEBUG] [Thread-214250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:55:40.963 [DEBUG] [Thread-214250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:55:40.963 [INFO] [Thread-214250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:55:40.970 [DEBUG] [Thread-214250] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] client lang: <none>
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] server lang: <none>
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] kex follows: False
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] Compression: none
2026-02-16T00:55:40.971 [DEBUG] [Thread-214250] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:55:41.029 [DEBUG] [Thread-214250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:55:41.029 [DEBUG] [Thread-214250] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:55:41.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:55:41.031 [DEBUG] [Thread-214250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:55:41.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:55:41.085 [DEBUG] [Thread-214250] [transport.py] [_log()] userauth is OK
2026-02-16T00:55:41.086 [DEBUG] [Thread-214250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:55:41.086 [DEBUG] [Thread-214250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:55:41.086 [DEBUG] [Thread-214250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:55:41.086 [DEBUG] [Thread-214250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:55:41.105 [INFO] [Thread-214250] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:55:41.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:55:41.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:55:41.945 [DEBUG] [Thread-214250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:55:41.946 [DEBUG] [Thread-214250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:55:41.993 [DEBUG] [Thread-214250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:55:41.994 [DEBUG] [Thread-214250] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:55:42.003 [DEBUG] [Thread-214250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:55:42.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:55:42.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:55:42.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:55:42.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:55:42.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:55:42.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:55:42.039 [DEBUG] [Thread-214250] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:55:52.732 [DEBUG] [Thread-214252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:07.784 [DEBUG] [Thread-214253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:12.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:56:12.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:56:12.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:56:14.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 55, 42), 4.44, 77.44, 0.0, 24.31, 6.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:56:14.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:55:42
2026-02-16T00:56:14.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:56:14.732 [DEBUG] [Thread-214254] [transport.py] [_log()] starting thread (client mode): 0xa2d27430
2026-02-16T00:56:14.732 [DEBUG] [Thread-214254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:56:14.750 [DEBUG] [Thread-214254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:56:14.750 [INFO] [Thread-214254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:56:14.751 [DEBUG] [Thread-214254] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:56:14.751 [DEBUG] [Thread-214254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] client lang: <none>
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] server lang: <none>
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] kex follows: False
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] Compression: none
2026-02-16T00:56:14.752 [DEBUG] [Thread-214254] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:56:14.762 [DEBUG] [Thread-214254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:56:14.762 [DEBUG] [Thread-214254] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:56:14.763 [DEBUG] [Thread-214254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:56:14.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:56:14.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:56:14.765 [DEBUG] [Thread-214254] [transport.py] [_log()] userauth is OK
2026-02-16T00:56:14.766 [DEBUG] [Thread-214254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:56:14.766 [DEBUG] [Thread-214254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:56:14.766 [DEBUG] [Thread-214254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:56:14.766 [DEBUG] [Thread-214254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:56:14.782 [INFO] [Thread-214254] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:56:14.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:56:15.591 [DEBUG] [Thread-214254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:56:15.592 [DEBUG] [Thread-214254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:56:15.592 [DEBUG] [Thread-214254] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:56:15.632 [DEBUG] [Thread-214254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:56:15.632 [DEBUG] [Thread-214254] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:56:15.636 [DEBUG] [Thread-214254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:56:15.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:56:15.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:56:15.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:56:15.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:56:15.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:56:15.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:56:15.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:56:15.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:56:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:56:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.955309 -999.00  +13.50  16.05     59   +5.80 1 1 1 1 1     0    0 7.35 -23.56 ZNESW 16.0 16.1 137.2 20.2 13.8 -23.6 13.8 -22.4 13.5 -21.5 13.8 -22.5
2026-02-16T00:56:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:56:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:56:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.955309
2026-02-16T00:56:15.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:56:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:56:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:56:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:56:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:56:15.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:55:42', tmtdew=4.44, humidity=77.44, cloud=0.0, wind=24.31, temperature=6.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:55:42', seeing=2.87, atlas_timestamp='2026-02-15T22:55:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:52:00')
2026-02-16T00:56:15.656 [DEBUG] [Thread-214254] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:56:15.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:56:15.751 [DEBUG] [Thread-214257] [transport.py] [_log()] starting thread (client mode): 0xa2d276a0
2026-02-16T00:56:15.751 [DEBUG] [Thread-214257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:56:15.766 [DEBUG] [Thread-214257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:56:15.766 [INFO] [Thread-214257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:56:15.773 [DEBUG] [Thread-214257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:56:15.773 [DEBUG] [Thread-214257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:56:15.773 [DEBUG] [Thread-214257] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:56:15.773 [DEBUG] [Thread-214257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:15.773 [DEBUG] [Thread-214257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:15.773 [DEBUG] [Thread-214257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] client lang: <none>
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] server lang: <none>
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] kex follows: False
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] Compression: none
2026-02-16T00:56:15.774 [DEBUG] [Thread-214257] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:56:15.832 [DEBUG] [Thread-214257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:56:15.832 [DEBUG] [Thread-214257] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:56:15.832 [DEBUG] [Thread-214257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:56:15.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:56:15.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:56:15.889 [DEBUG] [Thread-214257] [transport.py] [_log()] userauth is OK
2026-02-16T00:56:15.890 [DEBUG] [Thread-214257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:56:15.890 [DEBUG] [Thread-214257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:56:15.890 [DEBUG] [Thread-214257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:56:15.890 [DEBUG] [Thread-214257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:56:15.904 [INFO] [Thread-214257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:56:15.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:56:15.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:56:16.756 [DEBUG] [Thread-214257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:56:16.757 [DEBUG] [Thread-214257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:56:16.804 [DEBUG] [Thread-214257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:56:16.804 [DEBUG] [Thread-214257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:56:16.813 [DEBUG] [Thread-214257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:56:16.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:56:16.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:56:16.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:56:16.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:56:16.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:56:16.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:56:16.848 [DEBUG] [Thread-214257] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:56:21.955 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:21.956 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:22.818 [DEBUG] [Thread-214259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:37.861 [DEBUG] [Thread-214260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:40.408 [DEBUG] [Thread-214261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:46.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:56:46.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:56:46.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:56:48.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 56, 17), 5.83, 70.4, 0.0, 23.48, 8.82, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:56:48.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:56:17
2026-02-16T00:56:49.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:56:49.440 [DEBUG] [Thread-214262] [transport.py] [_log()] starting thread (client mode): 0xa81d5570
2026-02-16T00:56:49.440 [DEBUG] [Thread-214262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:56:49.459 [DEBUG] [Thread-214262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:56:49.459 [INFO] [Thread-214262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] client lang: <none>
2026-02-16T00:56:49.463 [DEBUG] [Thread-214262] [transport.py] [_log()] server lang: <none>
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] kex follows: False
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] Compression: none
2026-02-16T00:56:49.464 [DEBUG] [Thread-214262] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:56:49.485 [DEBUG] [Thread-214262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:56:49.485 [DEBUG] [Thread-214262] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:56:49.487 [DEBUG] [Thread-214262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:56:49.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:56:49.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:56:49.529 [DEBUG] [Thread-214262] [transport.py] [_log()] userauth is OK
2026-02-16T00:56:49.529 [DEBUG] [Thread-214262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:56:49.529 [DEBUG] [Thread-214262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:56:49.529 [DEBUG] [Thread-214262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:56:49.529 [DEBUG] [Thread-214262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:56:49.550 [INFO] [Thread-214262] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:56:49.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:56:50.191 [DEBUG] [Thread-214262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:56:50.192 [DEBUG] [Thread-214262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:56:50.192 [DEBUG] [Thread-214262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:56:50.232 [DEBUG] [Thread-214262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:56:50.233 [DEBUG] [Thread-214262] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:56:50.236 [DEBUG] [Thread-214262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:56:50.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:56:50.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:56:50.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:56:50.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:56:50.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:56:50.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:56:50.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:56:50.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:56:50.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:56:50.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.955656 -999.00  +13.50  13.90     59   +5.80 1 1 1 1 1     0    0 7.34 -22.06 ZNESW 14.6 13.9 146.0 15.9 13.8 -23.6 13.7 -22.6 13.5 -21.4 13.8 -22.5
2026-02-16T00:56:50.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:56:50.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:56:50.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.955656
2026-02-16T00:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:56:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:56:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:56:17', tmtdew=5.83, humidity=70.4, cloud=0.0, wind=23.48, temperature=8.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:56:18', seeing=2.56, atlas_timestamp='2026-02-15T22:56:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.030750000000001165, 0.005250000000000199, -0.04174999999999862, -0.04750000000000121, -0.0015000000000000568, -0.0037499999999983658, 0.01249999999999929, 0.015249999999999986, 0.037499999999999645, 0.054999999999999716, -0.051249999999999574, -0.02999999999999936, 0.04800000000000004, 0.029249999999999332, 0.030999999999998806, -0.008000000000000895, 0.057749999999998636, 0.042500000000000426, 0.01699999999999946, -0.012250000000001648, 0.030999999999998806, 0.06024999999999814, -0.03974999999999973, 0.013749999999999929, 0.0519999999999996, -0.019000000000000128, -0.00274999999999892, -0.01750000000000007, 0.027000000000001023, -0.0009999999999994458, 0.05900000000000105, 0.10800000000000054, 0.039749999999997954], zp_timestamp='2026-02-15T22:52:00')
2026-02-16T00:56:50.265 [DEBUG] [Thread-214262] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:56:50.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:56:50.361 [DEBUG] [Thread-214265] [transport.py] [_log()] starting thread (client mode): 0xa57e1270
2026-02-16T00:56:50.361 [DEBUG] [Thread-214265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:56:50.376 [DEBUG] [Thread-214265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:56:50.376 [INFO] [Thread-214265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:56:50.383 [DEBUG] [Thread-214265] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] client lang: <none>
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] server lang: <none>
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] kex follows: False
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:56:50.384 [DEBUG] [Thread-214265] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:56:50.385 [DEBUG] [Thread-214265] [transport.py] [_log()] Compression: none
2026-02-16T00:56:50.385 [DEBUG] [Thread-214265] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:56:50.446 [DEBUG] [Thread-214265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:56:50.446 [DEBUG] [Thread-214265] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:56:50.447 [DEBUG] [Thread-214265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:56:50.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:56:50.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:56:50.502 [DEBUG] [Thread-214265] [transport.py] [_log()] userauth is OK
2026-02-16T00:56:50.503 [DEBUG] [Thread-214265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:56:50.503 [DEBUG] [Thread-214265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:56:50.503 [DEBUG] [Thread-214265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:56:50.503 [DEBUG] [Thread-214265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:56:50.521 [INFO] [Thread-214265] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:56:50.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:56:50.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:56:51.343 [DEBUG] [Thread-214265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:56:51.343 [DEBUG] [Thread-214265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:56:51.391 [DEBUG] [Thread-214265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:56:51.391 [DEBUG] [Thread-214265] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:56:51.401 [DEBUG] [Thread-214265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:56:51.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:56:51.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:56:51.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:56:51.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:56:51.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:56:51.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:56:51.438 [DEBUG] [Thread-214265] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:56:52.895 [DEBUG] [Thread-214267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:56:59.256 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:07.935 [DEBUG] [Thread-214268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:21.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:57:21.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:57:21.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:57:22.167 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:22.168 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:22.970 [DEBUG] [Thread-214269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 56, 52), 5.82, 70.12, 0.0, 23.75, 8.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:57:23.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:56:52
2026-02-16T00:57:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:57:24.262 [DEBUG] [Thread-214270] [transport.py] [_log()] starting thread (client mode): 0xa81d56f0
2026-02-16T00:57:24.263 [DEBUG] [Thread-214270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:57:24.283 [DEBUG] [Thread-214270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:57:24.283 [INFO] [Thread-214270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] client lang: <none>
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] server lang: <none>
2026-02-16T00:57:24.287 [DEBUG] [Thread-214270] [transport.py] [_log()] kex follows: False
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] Compression: none
2026-02-16T00:57:24.288 [DEBUG] [Thread-214270] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:57:24.308 [DEBUG] [Thread-214270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:57:24.308 [DEBUG] [Thread-214270] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:57:24.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:57:24.310 [DEBUG] [Thread-214270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:57:24.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:57:24.312 [DEBUG] [Thread-214270] [transport.py] [_log()] userauth is OK
2026-02-16T00:57:24.313 [DEBUG] [Thread-214270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:57:24.313 [DEBUG] [Thread-214270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:57:24.313 [DEBUG] [Thread-214270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:57:24.313 [DEBUG] [Thread-214270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:57:24.337 [INFO] [Thread-214270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:57:24.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:57:24.983 [DEBUG] [Thread-214270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:57:24.983 [DEBUG] [Thread-214270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:57:24.983 [DEBUG] [Thread-214270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:57:25.024 [DEBUG] [Thread-214270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:57:25.024 [DEBUG] [Thread-214270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:57:25.027 [DEBUG] [Thread-214270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:57:25.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:57:25.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:57:25.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:57:25.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:57:25.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:57:25.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:57:25.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:57:25.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:57:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:57:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.956003 -999.00  +13.50  16.63     59   +5.80 1 1 1 1 1     0    0 7.23 -20.94 ZNESW 15.7 16.6 142.2 20.3 13.8 -23.5 13.8 -22.4 13.5 -21.4 13.8 -22.5
2026-02-16T00:57:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:57:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:57:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.956003
2026-02-16T00:57:25.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:57:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:57:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:57:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:57:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:57:25.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:56:52', tmtdew=5.82, humidity=70.12, cloud=0.0, wind=23.75, temperature=8.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:56:53', seeing=2.67, atlas_timestamp='2026-02-15T22:56:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, 0.0182500000000001, -0.04974999999999952, -0.04899999999999949, -0.033500000000000085, -0.013249999999999318, -0.019000000000000128, 0.013250000000001094, 0.012999999999998124, 0.031000000000000583, -0.04075000000000095, -0.02099999999999902, 0.06349999999999945, 0.034250000000000114, 0.0389999999999997, 0.018499999999999517, 0.00274999999999892, 0.03049999999999997, 0.016000000000000014, 0.018249999999998323, 0.04299999999999926, 0.048749999999998295, 0.015250000000001762, 0.011749999999999261, 0.049999999999998934, -0.011499999999999844, 0.015750000000000597, 0.03250000000000064, 0.032999999999999474, 1.7763568394002505e-15, 0.057500000000000995, 0.0470000000000006, 0.03275000000000006], zp_timestamp='2026-02-15T22:56:00')
2026-02-16T00:57:25.051 [DEBUG] [Thread-214270] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:57:25.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:57:25.141 [DEBUG] [Thread-214273] [transport.py] [_log()] starting thread (client mode): 0xa81d5fc0
2026-02-16T00:57:25.141 [DEBUG] [Thread-214273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:57:25.156 [DEBUG] [Thread-214273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:57:25.157 [INFO] [Thread-214273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:57:25.164 [DEBUG] [Thread-214273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:57:25.164 [DEBUG] [Thread-214273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] client lang: <none>
2026-02-16T00:57:25.165 [DEBUG] [Thread-214273] [transport.py] [_log()] server lang: <none>
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] kex follows: False
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] Compression: none
2026-02-16T00:57:25.166 [DEBUG] [Thread-214273] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:57:25.224 [DEBUG] [Thread-214273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:57:25.225 [DEBUG] [Thread-214273] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:57:25.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:57:25.226 [DEBUG] [Thread-214273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:57:25.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:57:25.284 [DEBUG] [Thread-214273] [transport.py] [_log()] userauth is OK
2026-02-16T00:57:25.285 [DEBUG] [Thread-214273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:57:25.285 [DEBUG] [Thread-214273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:57:25.285 [DEBUG] [Thread-214273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:57:25.285 [DEBUG] [Thread-214273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:57:25.305 [INFO] [Thread-214273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:57:25.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:57:25.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:57:26.136 [DEBUG] [Thread-214273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:57:26.137 [DEBUG] [Thread-214273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:57:26.184 [DEBUG] [Thread-214273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:57:26.184 [DEBUG] [Thread-214273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:57:26.193 [DEBUG] [Thread-214273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:57:26.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:57:26.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:57:26.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:57:26.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:57:26.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:57:26.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:57:26.227 [DEBUG] [Thread-214273] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:57:38.006 [DEBUG] [Thread-214275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:40.472 [DEBUG] [Thread-214276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:53.057 [DEBUG] [Thread-214277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:57:56.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:57:56.250 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:57:56.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:57:58.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 57, 28), 5.85, 70.04, 0.0, 21.39, 8.89, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:57:58.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:57:28
2026-02-16T00:57:58.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:57:58.676 [DEBUG] [Thread-214278] [transport.py] [_log()] starting thread (client mode): 0xa57d5600
2026-02-16T00:57:58.676 [DEBUG] [Thread-214278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:57:58.695 [DEBUG] [Thread-214278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:57:58.695 [INFO] [Thread-214278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] client lang: <none>
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] server lang: <none>
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] kex follows: False
2026-02-16T00:57:58.699 [DEBUG] [Thread-214278] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:57:58.700 [DEBUG] [Thread-214278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:57:58.700 [DEBUG] [Thread-214278] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:57:58.700 [DEBUG] [Thread-214278] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:57:58.700 [DEBUG] [Thread-214278] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:57:58.700 [DEBUG] [Thread-214278] [transport.py] [_log()] Compression: none
2026-02-16T00:57:58.700 [DEBUG] [Thread-214278] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:57:58.717 [DEBUG] [Thread-214278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:57:58.718 [DEBUG] [Thread-214278] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:57:58.719 [DEBUG] [Thread-214278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:57:58.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:57:58.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:57:58.722 [DEBUG] [Thread-214278] [transport.py] [_log()] userauth is OK
2026-02-16T00:57:58.722 [DEBUG] [Thread-214278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:57:58.723 [DEBUG] [Thread-214278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:57:58.723 [DEBUG] [Thread-214278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:57:58.723 [DEBUG] [Thread-214278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:57:58.743 [INFO] [Thread-214278] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:57:58.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:57:59.377 [DEBUG] [Thread-214278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:57:59.377 [DEBUG] [Thread-214278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:57:59.378 [DEBUG] [Thread-214278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:57:59.418 [DEBUG] [Thread-214278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:57:59.419 [DEBUG] [Thread-214278] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:57:59.422 [DEBUG] [Thread-214278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:57:59.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:57:59.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:57:59.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:57:59.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:57:59.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:57:59.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:57:59.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:57:59.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:57:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:57:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.956351 -999.00  +13.50  22.44     59   +5.80 1 1 1 1 1     0    0 7.28 -20.45 ZNESW 21.2 22.4 143.8 26.4 13.8 -23.3 13.7 -22.3 13.4 -21.1 13.8 -22.6
2026-02-16T00:57:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:57:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:57:59.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.956351
2026-02-16T00:57:59.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:57:59.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:57:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:57:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:57:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:57:59.450 [DEBUG] [Thread-214278] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:57:59.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:57:28', tmtdew=5.85, humidity=70.04, cloud=0.0, wind=21.39, temperature=8.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:57:28', seeing=2.33, atlas_timestamp='2026-02-15T22:57:08.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, 0.0182500000000001, -0.04974999999999952, -0.04899999999999949, -0.033500000000000085, -0.013249999999999318, -0.019000000000000128, 0.013250000000001094, 0.012999999999998124, 0.031000000000000583, -0.04075000000000095, -0.02099999999999902, 0.06349999999999945, 0.034250000000000114, 0.0389999999999997, 0.018499999999999517, 0.00274999999999892, 0.03049999999999997, 0.016000000000000014, 0.018249999999998323, 0.04299999999999926, 0.048749999999998295, 0.015250000000001762, 0.011749999999999261, 0.049999999999998934, -0.011499999999999844, 0.015750000000000597, 0.03250000000000064, 0.032999999999999474, 1.7763568394002505e-15, 0.057500000000000995, 0.0470000000000006, 0.03275000000000006], zp_timestamp='2026-02-15T22:56:00')
2026-02-16T00:57:59.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:57:59.547 [DEBUG] [Thread-214281] [transport.py] [_log()] starting thread (client mode): 0xa57b0f70
2026-02-16T00:57:59.547 [DEBUG] [Thread-214281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:57:59.561 [DEBUG] [Thread-214281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:57:59.561 [INFO] [Thread-214281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] client lang: <none>
2026-02-16T00:57:59.569 [DEBUG] [Thread-214281] [transport.py] [_log()] server lang: <none>
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] kex follows: False
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] Compression: none
2026-02-16T00:57:59.570 [DEBUG] [Thread-214281] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:57:59.628 [DEBUG] [Thread-214281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:57:59.628 [DEBUG] [Thread-214281] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:57:59.629 [DEBUG] [Thread-214281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:57:59.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:57:59.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:57:59.684 [DEBUG] [Thread-214281] [transport.py] [_log()] userauth is OK
2026-02-16T00:57:59.684 [DEBUG] [Thread-214281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:57:59.684 [DEBUG] [Thread-214281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:57:59.684 [DEBUG] [Thread-214281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:57:59.684 [DEBUG] [Thread-214281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:57:59.703 [INFO] [Thread-214281] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:57:59.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:57:59.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:58:00.535 [DEBUG] [Thread-214281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:58:00.536 [DEBUG] [Thread-214281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:58:00.583 [DEBUG] [Thread-214281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:58:00.584 [DEBUG] [Thread-214281] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:58:00.593 [DEBUG] [Thread-214281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:58:00.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:58:00.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:58:00.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:58:00.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:58:00.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:58:00.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:58:00.629 [DEBUG] [Thread-214281] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:58:08.092 [DEBUG] [Thread-214283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:22.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:22.369 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:23.150 [DEBUG] [Thread-214284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:30.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:58:30.652 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:58:30.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:58:32.721 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 58, 3), 5.87, 69.95, 0.0, 23.47, 8.9, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:58:32.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:58:03
2026-02-16T00:58:33.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:58:33.618 [DEBUG] [Thread-214285] [transport.py] [_log()] starting thread (client mode): 0xa57e0820
2026-02-16T00:58:33.618 [DEBUG] [Thread-214285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:58:33.639 [DEBUG] [Thread-214285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:58:33.639 [INFO] [Thread-214285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] client lang: <none>
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] server lang: <none>
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] kex follows: False
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:58:33.642 [DEBUG] [Thread-214285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:58:33.643 [DEBUG] [Thread-214285] [transport.py] [_log()] Compression: none
2026-02-16T00:58:33.643 [DEBUG] [Thread-214285] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:58:33.660 [DEBUG] [Thread-214285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:58:33.660 [DEBUG] [Thread-214285] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:58:33.661 [DEBUG] [Thread-214285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:58:33.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:58:33.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:58:33.662 [DEBUG] [Thread-214285] [transport.py] [_log()] userauth is OK
2026-02-16T00:58:33.663 [DEBUG] [Thread-214285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:58:33.663 [DEBUG] [Thread-214285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:58:33.663 [DEBUG] [Thread-214285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:58:33.663 [DEBUG] [Thread-214285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:58:33.688 [INFO] [Thread-214285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:58:33.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:58:34.325 [DEBUG] [Thread-214285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:58:34.325 [DEBUG] [Thread-214285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:58:34.326 [DEBUG] [Thread-214285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:58:34.367 [DEBUG] [Thread-214285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:58:34.367 [DEBUG] [Thread-214285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:58:34.370 [DEBUG] [Thread-214285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:58:34.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:58:34.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:58:34.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:58:34.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:58:34.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:58:34.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:58:34.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:58:34.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:58:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:58:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.957045 -999.00  +13.60  19.68     59   +5.90 1 1 1 1 1     0    0 7.22 -18.89 ZNESW 18.0 19.7 148.0 25.1 13.8 -23.3 13.7 -22.4 13.5 -21.2 13.8 -22.4
2026-02-16T00:58:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:58:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:58:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.957045
2026-02-16T00:58:34.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:58:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:58:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:58:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:58:34.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:58:34.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:58:03', tmtdew=5.87, humidity=69.95, cloud=0.0, wind=23.47, temperature=8.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:58:03', seeing=3.4, atlas_timestamp='2026-02-15T22:58:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, 0.0182500000000001, -0.04974999999999952, -0.04899999999999949, -0.033500000000000085, -0.013249999999999318, -0.019000000000000128, 0.013250000000001094, 0.012999999999998124, 0.031000000000000583, -0.04075000000000095, -0.02099999999999902, 0.06349999999999945, 0.034250000000000114, 0.0389999999999997, 0.018499999999999517, 0.00274999999999892, 0.03049999999999997, 0.016000000000000014, 0.018249999999998323, 0.04299999999999926, 0.048749999999998295, 0.015250000000001762, 0.011749999999999261, 0.049999999999998934, -0.011499999999999844, 0.015750000000000597, 0.03250000000000064, 0.032999999999999474, 1.7763568394002505e-15, 0.057500000000000995, 0.0470000000000006, 0.03275000000000006], zp_timestamp='2026-02-15T22:56:00')
2026-02-16T00:58:34.398 [DEBUG] [Thread-214285] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:58:34.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:58:34.494 [DEBUG] [Thread-214288] [transport.py] [_log()] starting thread (client mode): 0xa5773940
2026-02-16T00:58:34.494 [DEBUG] [Thread-214288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:58:34.509 [DEBUG] [Thread-214288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:58:34.509 [INFO] [Thread-214288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:58:34.516 [DEBUG] [Thread-214288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:58:34.517 [DEBUG] [Thread-214288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:58:34.517 [DEBUG] [Thread-214288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:58:34.517 [DEBUG] [Thread-214288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:58:34.517 [DEBUG] [Thread-214288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:58:34.517 [DEBUG] [Thread-214288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:58:34.517 [DEBUG] [Thread-214288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] client lang: <none>
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] server lang: <none>
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] kex follows: False
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:58:34.518 [DEBUG] [Thread-214288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:58:34.519 [DEBUG] [Thread-214288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:58:34.519 [DEBUG] [Thread-214288] [transport.py] [_log()] Compression: none
2026-02-16T00:58:34.519 [DEBUG] [Thread-214288] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:58:34.577 [DEBUG] [Thread-214288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:58:34.578 [DEBUG] [Thread-214288] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:58:34.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:58:34.580 [DEBUG] [Thread-214288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:58:34.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:58:34.636 [DEBUG] [Thread-214288] [transport.py] [_log()] userauth is OK
2026-02-16T00:58:34.637 [DEBUG] [Thread-214288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:58:34.637 [DEBUG] [Thread-214288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:58:34.637 [DEBUG] [Thread-214288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:58:34.637 [DEBUG] [Thread-214288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:58:34.656 [INFO] [Thread-214288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:58:34.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:58:34.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:58:35.491 [DEBUG] [Thread-214288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:58:35.491 [DEBUG] [Thread-214288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:58:35.539 [DEBUG] [Thread-214288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:58:35.540 [DEBUG] [Thread-214288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:58:35.549 [DEBUG] [Thread-214288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:58:35.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:58:35.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:58:35.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:58:35.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:58:35.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:58:35.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:58:35.586 [DEBUG] [Thread-214288] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:58:38.187 [DEBUG] [Thread-214290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:40.541 [DEBUG] [Thread-214291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:58:53.246 [DEBUG] [Thread-214292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:05.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:59:05.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:59:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:59:07.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 58, 39), 4.46, 77.4, 0.0, 27.38, 6.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:59:07.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:58:39
2026-02-16T00:59:07.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:59:07.955 [DEBUG] [Thread-214293] [transport.py] [_log()] starting thread (client mode): 0xa2dc0910
2026-02-16T00:59:07.955 [DEBUG] [Thread-214293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:59:07.975 [DEBUG] [Thread-214293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:59:07.975 [INFO] [Thread-214293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] client lang: <none>
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] server lang: <none>
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] kex follows: False
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:59:07.977 [DEBUG] [Thread-214293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:59:07.978 [DEBUG] [Thread-214293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:59:07.978 [DEBUG] [Thread-214293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:59:07.978 [DEBUG] [Thread-214293] [transport.py] [_log()] Compression: none
2026-02-16T00:59:07.978 [DEBUG] [Thread-214293] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:59:07.991 [DEBUG] [Thread-214293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:59:07.991 [DEBUG] [Thread-214293] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:59:07.992 [DEBUG] [Thread-214293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:59:07.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:59:07.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:59:07.993 [DEBUG] [Thread-214293] [transport.py] [_log()] userauth is OK
2026-02-16T00:59:07.994 [DEBUG] [Thread-214293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:59:07.994 [DEBUG] [Thread-214293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:59:07.994 [DEBUG] [Thread-214293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:59:07.994 [DEBUG] [Thread-214293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:59:08.012 [INFO] [Thread-214293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:59:08.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:59:08.279 [DEBUG] [Thread-214295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:08.741 [DEBUG] [Thread-214293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:59:08.741 [DEBUG] [Thread-214293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:59:08.742 [DEBUG] [Thread-214293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:59:08.782 [DEBUG] [Thread-214293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:59:08.782 [DEBUG] [Thread-214293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:59:08.784 [DEBUG] [Thread-214293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:59:08.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:59:08.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:59:08.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:59:08.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:59:08.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:59:08.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:59:08.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:59:08.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:59:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:59:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.957392 -999.00  +13.60  19.97     59   +5.90 1 1 1 1 1     0    0 7.28 -18.07 ZNESW 18.5 20.0 141.8 25.9 13.9 -23.5 13.8 -22.3 13.6 -21.2 13.9 -22.5
2026-02-16T00:59:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:59:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:59:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.957392
2026-02-16T00:59:08.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:59:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:59:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:59:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:59:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:59:08.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:58:39', tmtdew=4.46, humidity=77.4, cloud=0.0, wind=27.38, temperature=6.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:58:39', seeing=2.24, atlas_timestamp='2026-02-15T22:58:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, 0.0182500000000001, -0.04974999999999952, -0.04899999999999949, -0.033500000000000085, -0.013249999999999318, -0.019000000000000128, 0.013250000000001094, 0.012999999999998124, 0.031000000000000583, -0.04075000000000095, -0.02099999999999902, 0.06349999999999945, 0.034250000000000114, 0.0389999999999997, 0.018499999999999517, 0.00274999999999892, 0.03049999999999997, 0.016000000000000014, 0.018249999999998323, 0.04299999999999926, 0.048749999999998295, 0.015250000000001762, 0.011749999999999261, 0.049999999999998934, -0.011499999999999844, 0.015750000000000597, 0.03250000000000064, 0.032999999999999474, 1.7763568394002505e-15, 0.057500000000000995, 0.0470000000000006, 0.03275000000000006], zp_timestamp='2026-02-15T22:56:00')
2026-02-16T00:59:08.807 [DEBUG] [Thread-214293] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:59:08.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:59:08.902 [DEBUG] [Thread-214297] [transport.py] [_log()] starting thread (client mode): 0xa57b3bb0
2026-02-16T00:59:08.902 [DEBUG] [Thread-214297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:59:08.917 [DEBUG] [Thread-214297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:59:08.917 [INFO] [Thread-214297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:59:08.924 [DEBUG] [Thread-214297] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] client lang: <none>
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] server lang: <none>
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] kex follows: False
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] Compression: none
2026-02-16T00:59:08.925 [DEBUG] [Thread-214297] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:59:08.983 [DEBUG] [Thread-214297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:59:08.984 [DEBUG] [Thread-214297] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:59:08.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:59:08.985 [DEBUG] [Thread-214297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:59:08.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:59:09.040 [DEBUG] [Thread-214297] [transport.py] [_log()] userauth is OK
2026-02-16T00:59:09.041 [DEBUG] [Thread-214297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:59:09.041 [DEBUG] [Thread-214297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:59:09.041 [DEBUG] [Thread-214297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:59:09.041 [DEBUG] [Thread-214297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:59:09.059 [INFO] [Thread-214297] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:59:09.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:59:09.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:59:09.870 [DEBUG] [Thread-214297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:59:09.870 [DEBUG] [Thread-214297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:59:09.918 [DEBUG] [Thread-214297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:59:09.918 [DEBUG] [Thread-214297] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:59:09.927 [DEBUG] [Thread-214297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:59:09.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:59:09.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:59:09.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:59:09.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:59:09.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:59:09.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:59:09.964 [DEBUG] [Thread-214297] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:59:22.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:22.571 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:23.313 [DEBUG] [Thread-214299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:38.367 [DEBUG] [Thread-214300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:39.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T00:59:39.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T00:59:39.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T00:59:40.597 [DEBUG] [Thread-214301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T00:59:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 59, 15), 5.82, 70.35, 0.0, 23.45, 8.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T00:59:41.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:59:15
2026-02-16T00:59:42.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T00:59:42.330 [DEBUG] [Thread-214302] [transport.py] [_log()] starting thread (client mode): 0xa2d12230
2026-02-16T00:59:42.330 [DEBUG] [Thread-214302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:59:42.350 [DEBUG] [Thread-214302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T00:59:42.350 [INFO] [Thread-214302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] client lang: <none>
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] server lang: <none>
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] kex follows: False
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] Compression: none
2026-02-16T00:59:42.353 [DEBUG] [Thread-214302] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:59:42.371 [DEBUG] [Thread-214302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:59:42.372 [DEBUG] [Thread-214302] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:59:42.372 [DEBUG] [Thread-214302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T00:59:42.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T00:59:42.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:59:42.374 [DEBUG] [Thread-214302] [transport.py] [_log()] userauth is OK
2026-02-16T00:59:42.375 [DEBUG] [Thread-214302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:59:42.375 [DEBUG] [Thread-214302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:59:42.375 [DEBUG] [Thread-214302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T00:59:42.375 [DEBUG] [Thread-214302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:59:42.400 [INFO] [Thread-214302] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:59:42.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:59:43.023 [DEBUG] [Thread-214302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:59:43.023 [DEBUG] [Thread-214302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:59:43.024 [DEBUG] [Thread-214302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T00:59:43.064 [DEBUG] [Thread-214302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:59:43.064 [DEBUG] [Thread-214302] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:59:43.067 [DEBUG] [Thread-214302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:59:43.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:59:43.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T00:59:43.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T00:59:43.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T00:59:43.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:59:43.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T00:59:43.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:59:43.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:59:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T00:59:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.957739 -999.00  +13.60  22.74     59   +5.90 1 1 1 1 1     0    0 7.46 -17.44 ZNESW 21.6 22.7 168.6 25.2 13.9 -23.5 13.8 -22.3 13.5 -21.3 13.8 -22.5
2026-02-16T00:59:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T00:59:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T00:59:43.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.957739
2026-02-16T00:59:43.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T00:59:43.088 [DEBUG] [Thread-214302] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:59:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T00:59:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T00:59:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T00:59:43.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T00:59:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:59:15', tmtdew=5.82, humidity=70.35, cloud=0.0, wind=23.45, temperature=8.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:59:15', seeing=2.31, atlas_timestamp='2026-02-15T22:59:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, 0.0182500000000001, -0.04974999999999952, -0.04899999999999949, -0.033500000000000085, -0.013249999999999318, -0.019000000000000128, 0.013250000000001094, 0.012999999999998124, 0.031000000000000583, -0.04075000000000095, -0.02099999999999902, 0.06349999999999945, 0.034250000000000114, 0.0389999999999997, 0.018499999999999517, 0.00274999999999892, 0.03049999999999997, 0.016000000000000014, 0.018249999999998323, 0.04299999999999926, 0.048749999999998295, 0.015250000000001762, 0.011749999999999261, 0.049999999999998934, -0.011499999999999844, 0.015750000000000597, 0.03250000000000064, 0.032999999999999474, 1.7763568394002505e-15, 0.057500000000000995, 0.0470000000000006, 0.03275000000000006], zp_timestamp='2026-02-15T22:56:00')
2026-02-16T00:59:43.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T00:59:43.184 [DEBUG] [Thread-214305] [transport.py] [_log()] starting thread (client mode): 0xa57e3be0
2026-02-16T00:59:43.184 [DEBUG] [Thread-214305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T00:59:43.199 [DEBUG] [Thread-214305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T00:59:43.199 [INFO] [Thread-214305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T00:59:43.206 [DEBUG] [Thread-214305] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T00:59:43.206 [DEBUG] [Thread-214305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] client lang: <none>
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] server lang: <none>
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] kex follows: False
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] Compression: none
2026-02-16T00:59:43.207 [DEBUG] [Thread-214305] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T00:59:43.265 [DEBUG] [Thread-214305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T00:59:43.265 [DEBUG] [Thread-214305] [transport.py] [_log()] Switch to new keys ...
2026-02-16T00:59:43.266 [DEBUG] [Thread-214305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T00:59:43.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T00:59:43.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T00:59:43.325 [DEBUG] [Thread-214305] [transport.py] [_log()] userauth is OK
2026-02-16T00:59:43.326 [DEBUG] [Thread-214305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T00:59:43.326 [DEBUG] [Thread-214305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T00:59:43.326 [DEBUG] [Thread-214305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T00:59:43.326 [DEBUG] [Thread-214305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T00:59:43.344 [INFO] [Thread-214305] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T00:59:43.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T00:59:43.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T00:59:44.179 [DEBUG] [Thread-214305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T00:59:44.179 [DEBUG] [Thread-214305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T00:59:44.227 [DEBUG] [Thread-214305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T00:59:44.227 [DEBUG] [Thread-214305] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T00:59:44.236 [DEBUG] [Thread-214305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T00:59:44.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T00:59:44.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T00:59:44.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T00:59:44.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T00:59:44.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T00:59:44.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T00:59:44.273 [DEBUG] [Thread-214305] [transport.py] [_log()] EOF in transport thread
2026-02-16T00:59:53.403 [DEBUG] [Thread-214307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:06.161 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:08.444 [DEBUG] [Thread-214308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:14.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:00:14.272 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:00:14.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:00:16.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 0, 59, 50), 5.8, 70.29, 0.0, 19.07, 8.82, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:00:16.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 00:59:50
2026-02-16T01:00:16.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:00:16.675 [DEBUG] [Thread-214309] [transport.py] [_log()] starting thread (client mode): 0xa81d7be0
2026-02-16T01:00:16.675 [DEBUG] [Thread-214309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:00:16.695 [DEBUG] [Thread-214309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:00:16.695 [INFO] [Thread-214309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:16.698 [DEBUG] [Thread-214309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] client lang: <none>
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] server lang: <none>
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] kex follows: False
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] Compression: none
2026-02-16T01:00:16.699 [DEBUG] [Thread-214309] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:00:16.718 [DEBUG] [Thread-214309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:00:16.718 [DEBUG] [Thread-214309] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:00:16.719 [DEBUG] [Thread-214309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:00:16.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:00:16.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:00:16.721 [DEBUG] [Thread-214309] [transport.py] [_log()] userauth is OK
2026-02-16T01:00:16.721 [DEBUG] [Thread-214309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:00:16.721 [DEBUG] [Thread-214309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:00:16.721 [DEBUG] [Thread-214309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:00:16.721 [DEBUG] [Thread-214309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:00:16.746 [INFO] [Thread-214309] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:00:16.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:00:17.382 [DEBUG] [Thread-214309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:00:17.383 [DEBUG] [Thread-214309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:00:17.383 [DEBUG] [Thread-214309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:00:17.424 [DEBUG] [Thread-214309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:00:17.425 [DEBUG] [Thread-214309] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:00:17.428 [DEBUG] [Thread-214309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:00:17.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:00:17.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:00:17.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:00:17.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:00:17.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:00:17.452 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:00:17.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:00:17.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:00:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:00:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.958087 -999.00  +13.60  20.51     59   +5.90 1 1 1 1 1     0    0 7.19 -17.43 ZNESW 16.6 20.5 144.2 29.6 13.9 -23.4 13.8 -22.4 13.6 -21.2 13.8 -22.3
2026-02-16T01:00:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:00:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:00:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.958087
2026-02-16T01:00:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:00:17.454 [DEBUG] [Thread-214309] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:00:17.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:00:17.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:00:17.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:00:17.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:00:17.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T00:59:50', tmtdew=5.8, humidity=70.29, cloud=0.0, wind=19.07, temperature=8.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T00:59:51', seeing=3.27, atlas_timestamp='2026-02-15T22:59:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039250000000000895, 0.0182500000000001, -0.04974999999999952, -0.04899999999999949, -0.033500000000000085, -0.013249999999999318, -0.019000000000000128, 0.013250000000001094, 0.012999999999998124, 0.031000000000000583, -0.04075000000000095, -0.02099999999999902, 0.06349999999999945, 0.034250000000000114, 0.0389999999999997, 0.018499999999999517, 0.00274999999999892, 0.03049999999999997, 0.016000000000000014, 0.018249999999998323, 0.04299999999999926, 0.048749999999998295, 0.015250000000001762, 0.011749999999999261, 0.049999999999998934, -0.011499999999999844, 0.015750000000000597, 0.03250000000000064, 0.032999999999999474, 1.7763568394002505e-15, 0.057500000000000995, 0.0470000000000006, 0.03275000000000006], zp_timestamp='2026-02-15T22:56:00')
2026-02-16T01:00:17.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:00:17.550 [DEBUG] [Thread-214312] [transport.py] [_log()] starting thread (client mode): 0xa2dc07c0
2026-02-16T01:00:17.550 [DEBUG] [Thread-214312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:00:17.565 [DEBUG] [Thread-214312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:00:17.565 [INFO] [Thread-214312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:00:17.572 [DEBUG] [Thread-214312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] client lang: <none>
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] server lang: <none>
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] kex follows: False
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:00:17.573 [DEBUG] [Thread-214312] [transport.py] [_log()] Compression: none
2026-02-16T01:00:17.574 [DEBUG] [Thread-214312] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:00:17.629 [DEBUG] [Thread-214312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:00:17.630 [DEBUG] [Thread-214312] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:00:17.631 [DEBUG] [Thread-214312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:00:17.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:00:17.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:00:17.686 [DEBUG] [Thread-214312] [transport.py] [_log()] userauth is OK
2026-02-16T01:00:17.686 [DEBUG] [Thread-214312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:00:17.686 [DEBUG] [Thread-214312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:00:17.686 [DEBUG] [Thread-214312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:00:17.686 [DEBUG] [Thread-214312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:00:17.705 [INFO] [Thread-214312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:00:17.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:00:17.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:00:18.515 [DEBUG] [Thread-214312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:00:18.515 [DEBUG] [Thread-214312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:00:18.563 [DEBUG] [Thread-214312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:00:18.563 [DEBUG] [Thread-214312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:00:18.572 [DEBUG] [Thread-214312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:00:18.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:00:18.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:00:18.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:00:18.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:00:18.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:00:18.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:00:18.603 [DEBUG] [Thread-214312] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:00:22.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:22.780 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:23.478 [DEBUG] [Thread-214314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:38.530 [DEBUG] [Thread-214315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:40.677 [DEBUG] [Thread-214316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:00:48.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:00:48.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:00:48.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:00:50.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 0, 25), 5.8, 70.28, 0.0, 20.13, 8.78, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:00:50.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:00:25
2026-02-16T01:00:50.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:00:50.923 [DEBUG] [Thread-214317] [transport.py] [_log()] starting thread (client mode): 0xa2d27eb0
2026-02-16T01:00:50.924 [DEBUG] [Thread-214317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:00:50.943 [DEBUG] [Thread-214317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:00:50.943 [INFO] [Thread-214317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] client lang: <none>
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] server lang: <none>
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] kex follows: False
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] Compression: none
2026-02-16T01:00:50.947 [DEBUG] [Thread-214317] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:00:50.965 [DEBUG] [Thread-214317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:00:50.966 [DEBUG] [Thread-214317] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:00:50.966 [DEBUG] [Thread-214317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:00:50.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:00:50.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:00:51.009 [DEBUG] [Thread-214317] [transport.py] [_log()] userauth is OK
2026-02-16T01:00:51.009 [DEBUG] [Thread-214317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:00:51.009 [DEBUG] [Thread-214317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:00:51.009 [DEBUG] [Thread-214317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:00:51.009 [DEBUG] [Thread-214317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:00:51.040 [INFO] [Thread-214317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:00:51.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:00:51.654 [DEBUG] [Thread-214317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:00:51.654 [DEBUG] [Thread-214317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:00:51.654 [DEBUG] [Thread-214317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:00:51.695 [DEBUG] [Thread-214317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:00:51.695 [DEBUG] [Thread-214317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:00:51.698 [DEBUG] [Thread-214317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:00:51.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:00:51.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:00:51.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:00:51.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:00:51.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:00:51.718 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:00:51.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:00:51.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:00:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:00:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.958781 -999.00  +13.50  16.61     59   +5.80 1 1 1 1 1     0    0 7.42 -16.51 ZNESW 17.3 16.6 146.4 21.7 13.8 -23.4 13.7 -22.4 13.5 -21.3 13.8 -22.7
2026-02-16T01:00:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:00:51.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:00:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.958781
2026-02-16T01:00:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:00:51.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:00:51.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:00:51.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:00:51.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:00:51.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:00:25', tmtdew=5.8, humidity=70.28, cloud=0.0, wind=20.13, temperature=8.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:00:26', seeing=3.15, atlas_timestamp='2026-02-15T23:00:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T22:59:00')
2026-02-16T01:00:51.721 [DEBUG] [Thread-214317] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:00:51.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:00:51.817 [DEBUG] [Thread-214320] [transport.py] [_log()] starting thread (client mode): 0xa5773e80
2026-02-16T01:00:51.817 [DEBUG] [Thread-214320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:00:51.833 [DEBUG] [Thread-214320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:00:51.833 [INFO] [Thread-214320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:00:51.840 [DEBUG] [Thread-214320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] client lang: <none>
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] server lang: <none>
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] kex follows: False
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:00:51.841 [DEBUG] [Thread-214320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:00:51.842 [DEBUG] [Thread-214320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:00:51.842 [DEBUG] [Thread-214320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:00:51.842 [DEBUG] [Thread-214320] [transport.py] [_log()] Compression: none
2026-02-16T01:00:51.842 [DEBUG] [Thread-214320] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:00:51.898 [DEBUG] [Thread-214320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:00:51.899 [DEBUG] [Thread-214320] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:00:51.899 [DEBUG] [Thread-214320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:00:51.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:00:51.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:00:51.954 [DEBUG] [Thread-214320] [transport.py] [_log()] userauth is OK
2026-02-16T01:00:51.954 [DEBUG] [Thread-214320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:00:51.955 [DEBUG] [Thread-214320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:00:51.955 [DEBUG] [Thread-214320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:00:51.955 [DEBUG] [Thread-214320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:00:51.974 [INFO] [Thread-214320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:00:51.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:00:51.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:00:52.841 [DEBUG] [Thread-214320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:00:52.841 [DEBUG] [Thread-214320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:00:52.889 [DEBUG] [Thread-214320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:00:52.889 [DEBUG] [Thread-214320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:00:52.898 [DEBUG] [Thread-214320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:00:52.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:00:52.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:00:52.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:00:52.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:00:52.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:00:52.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:00:52.931 [DEBUG] [Thread-214320] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:00:53.571 [DEBUG] [Thread-214322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:08.621 [DEBUG] [Thread-214323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:22.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:01:22.954 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:01:22.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:01:22.981 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:22.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:23.656 [DEBUG] [Thread-214324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:24.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 1, 1), 5.82, 70.25, 0.0, 18.65, 8.88, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:01:24.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:01:01
2026-02-16T01:01:25.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:01:25.487 [DEBUG] [Thread-214325] [transport.py] [_log()] starting thread (client mode): 0xa5770be0
2026-02-16T01:01:25.487 [DEBUG] [Thread-214325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:01:25.507 [DEBUG] [Thread-214325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:01:25.507 [INFO] [Thread-214325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:01:25.510 [DEBUG] [Thread-214325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] client lang: <none>
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] server lang: <none>
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] kex follows: False
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] Compression: none
2026-02-16T01:01:25.511 [DEBUG] [Thread-214325] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:01:25.528 [DEBUG] [Thread-214325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:01:25.528 [DEBUG] [Thread-214325] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:01:25.529 [DEBUG] [Thread-214325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:01:25.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:01:25.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:01:25.531 [DEBUG] [Thread-214325] [transport.py] [_log()] userauth is OK
2026-02-16T01:01:25.531 [DEBUG] [Thread-214325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:01:25.531 [DEBUG] [Thread-214325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:01:25.531 [DEBUG] [Thread-214325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:01:25.531 [DEBUG] [Thread-214325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:01:25.555 [INFO] [Thread-214325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:01:25.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:01:26.226 [DEBUG] [Thread-214325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:01:26.226 [DEBUG] [Thread-214325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:01:26.226 [DEBUG] [Thread-214325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:01:26.268 [DEBUG] [Thread-214325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:01:26.268 [DEBUG] [Thread-214325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:01:26.270 [DEBUG] [Thread-214325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:01:26.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:01:26.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:01:26.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:01:26.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:01:26.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:01:26.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:01:26.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.959128 -999.00  +13.50  11.05     59   +5.90 1 1 1 1 1     0    0 7.44 -15.89 ZNESW 12.7 11.1 152.6 24.2 13.8 -23.5 13.8 -22.4 13.5 -21.3 13.8 -22.5
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.959128
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:01:26.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:01:01', tmtdew=5.82, humidity=70.25, cloud=0.0, wind=18.65, temperature=8.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:01:01', seeing=2.91, atlas_timestamp='2026-02-15T23:01:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T22:59:00')
2026-02-16T01:01:26.288 [DEBUG] [Thread-214325] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:01:26.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:01:26.369 [DEBUG] [Thread-214328] [transport.py] [_log()] starting thread (client mode): 0xa57b3790
2026-02-16T01:01:26.369 [DEBUG] [Thread-214328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:01:26.383 [DEBUG] [Thread-214328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:01:26.383 [INFO] [Thread-214328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] client lang: <none>
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] server lang: <none>
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] kex follows: False
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] Compression: none
2026-02-16T01:01:26.391 [DEBUG] [Thread-214328] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:01:26.453 [DEBUG] [Thread-214328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:01:26.453 [DEBUG] [Thread-214328] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:01:26.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:01:26.453 [DEBUG] [Thread-214328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:01:26.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:01:26.512 [DEBUG] [Thread-214328] [transport.py] [_log()] userauth is OK
2026-02-16T01:01:26.512 [DEBUG] [Thread-214328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:01:26.512 [DEBUG] [Thread-214328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:01:26.512 [DEBUG] [Thread-214328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:01:26.512 [DEBUG] [Thread-214328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:01:26.526 [INFO] [Thread-214328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:01:26.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:01:26.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:01:27.353 [DEBUG] [Thread-214328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:01:27.354 [DEBUG] [Thread-214328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:01:27.401 [DEBUG] [Thread-214328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:01:27.401 [DEBUG] [Thread-214328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:01:27.409 [DEBUG] [Thread-214328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:01:27.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:01:27.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:01:27.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:01:27.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:01:27.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:01:27.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:01:27.442 [DEBUG] [Thread-214328] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:01:38.696 [DEBUG] [Thread-214330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:39.880 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:40.756 [DEBUG] [Thread-214331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:53.750 [DEBUG] [Thread-214332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:55.493 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:57.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:01:57.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:01:57.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:01:58.690 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:01:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 1, 36), 4.5, 77.29, 0.0, 22.34, 6.8, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:01:59.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:01:36
2026-02-16T01:01:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:01:59.878 [DEBUG] [Thread-214333] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb00
2026-02-16T01:01:59.878 [DEBUG] [Thread-214333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:01:59.901 [DEBUG] [Thread-214333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:01:59.901 [INFO] [Thread-214333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:01:59.904 [DEBUG] [Thread-214333] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:01:59.904 [DEBUG] [Thread-214333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:01:59.904 [DEBUG] [Thread-214333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] client lang: <none>
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] server lang: <none>
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] kex follows: False
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] Compression: none
2026-02-16T01:01:59.905 [DEBUG] [Thread-214333] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:01:59.923 [DEBUG] [Thread-214333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:01:59.924 [DEBUG] [Thread-214333] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:01:59.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:01:59.925 [DEBUG] [Thread-214333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:01:59.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:01:59.927 [DEBUG] [Thread-214333] [transport.py] [_log()] userauth is OK
2026-02-16T01:01:59.927 [DEBUG] [Thread-214333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:01:59.927 [DEBUG] [Thread-214333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:01:59.927 [DEBUG] [Thread-214333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:01:59.927 [DEBUG] [Thread-214333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:01:59.950 [INFO] [Thread-214333] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:01:59.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:02:00.535 [DEBUG] [Thread-214333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:02:00.535 [DEBUG] [Thread-214333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:02:00.536 [DEBUG] [Thread-214333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:02:00.576 [DEBUG] [Thread-214333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:02:00.577 [DEBUG] [Thread-214333] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:02:00.580 [DEBUG] [Thread-214333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:02:00.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:02:00.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:02:00.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:02:00.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:02:00.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:02:00.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:02:00.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:02:00.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:02:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:02:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.959476 -999.00  +13.50  15.62     59   +5.80 1 1 1 1 1     0    0 7.32 -14.47 ZNESW 13.0 15.6 158.8 20.4 13.8 -23.4 13.7 -22.2 13.5 -21.3 13.8 -22.6
2026-02-16T01:02:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:02:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:02:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.959476
2026-02-16T01:02:00.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:02:00.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:02:00.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:02:00.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:02:00.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:02:00.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:01:36', tmtdew=4.5, humidity=77.29, cloud=0.0, wind=22.34, temperature=6.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:01:37', seeing=2.23, atlas_timestamp='2026-02-15T23:01:38.726', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T22:59:00')
2026-02-16T01:02:00.607 [DEBUG] [Thread-214333] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:02:00.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:02:00.713 [DEBUG] [Thread-214336] [transport.py] [_log()] starting thread (client mode): 0xa2d6c970
2026-02-16T01:02:00.713 [DEBUG] [Thread-214336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:02:00.728 [DEBUG] [Thread-214336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:02:00.728 [INFO] [Thread-214336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] client lang: <none>
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] server lang: <none>
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] kex follows: False
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:02:00.736 [DEBUG] [Thread-214336] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:02:00.737 [DEBUG] [Thread-214336] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:02:00.737 [DEBUG] [Thread-214336] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:02:00.737 [DEBUG] [Thread-214336] [transport.py] [_log()] Compression: none
2026-02-16T01:02:00.737 [DEBUG] [Thread-214336] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:02:00.795 [DEBUG] [Thread-214336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:02:00.795 [DEBUG] [Thread-214336] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:02:00.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:02:00.797 [DEBUG] [Thread-214336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:02:00.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:02:00.851 [DEBUG] [Thread-214336] [transport.py] [_log()] userauth is OK
2026-02-16T01:02:00.851 [DEBUG] [Thread-214336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:02:00.851 [DEBUG] [Thread-214336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:02:00.851 [DEBUG] [Thread-214336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:02:00.851 [DEBUG] [Thread-214336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:02:00.875 [INFO] [Thread-214336] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:02:00.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:02:00.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:02:01.693 [DEBUG] [Thread-214336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:02:01.693 [DEBUG] [Thread-214336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:02:01.741 [DEBUG] [Thread-214336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:02:01.742 [DEBUG] [Thread-214336] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:02:01.751 [DEBUG] [Thread-214336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:02:01.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:02:01.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:02:01.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:02:01.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:02:01.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:02:01.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:02:01.791 [DEBUG] [Thread-214336] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:02:03.785 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:08.787 [DEBUG] [Thread-214338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:09.160 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:23.184 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:23.185 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:23.844 [DEBUG] [Thread-214339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:28.604 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:31.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:02:31.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:02:31.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:02:33.089 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 2, 12), 5.88, 70.25, 0.0, 22.13, 8.88, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:02:33.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:02:12
2026-02-16T01:02:34.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:02:34.423 [DEBUG] [Thread-214340] [transport.py] [_log()] starting thread (client mode): 0xa2d6eb90
2026-02-16T01:02:34.423 [DEBUG] [Thread-214340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:02:34.444 [DEBUG] [Thread-214340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:02:34.444 [INFO] [Thread-214340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:02:34.447 [DEBUG] [Thread-214340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] client lang: <none>
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] server lang: <none>
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] kex follows: False
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] Compression: none
2026-02-16T01:02:34.448 [DEBUG] [Thread-214340] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:02:34.464 [DEBUG] [Thread-214340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:02:34.464 [DEBUG] [Thread-214340] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:02:34.465 [DEBUG] [Thread-214340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:02:34.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:02:34.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:02:34.466 [DEBUG] [Thread-214340] [transport.py] [_log()] userauth is OK
2026-02-16T01:02:34.466 [DEBUG] [Thread-214340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:02:34.466 [DEBUG] [Thread-214340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:02:34.466 [DEBUG] [Thread-214340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:02:34.466 [DEBUG] [Thread-214340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:02:34.483 [INFO] [Thread-214340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:02:34.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:02:35.119 [DEBUG] [Thread-214340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:02:35.119 [DEBUG] [Thread-214340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:02:35.119 [DEBUG] [Thread-214340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:02:35.160 [DEBUG] [Thread-214340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:02:35.160 [DEBUG] [Thread-214340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:02:35.164 [DEBUG] [Thread-214340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:02:35.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:02:35.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:02:35.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:02:35.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:02:35.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:02:35.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:02:35.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:02:35.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:02:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:02:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.959823 -999.00  +13.50  19.12     60   +5.90 1 1 1 1 1     0    0 7.38 -14.34 ZNESW 18.4 19.1 146.0 23.9 13.8 -23.4 13.7 -22.4 13.5 -21.3 13.8 -22.5
2026-02-16T01:02:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:02:35.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:02:35.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.959823
2026-02-16T01:02:35.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:02:35.196 [DEBUG] [Thread-214340] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:02:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:02:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:02:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:02:35.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:02:35.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:02:12', tmtdew=5.88, humidity=70.25, cloud=0.0, wind=22.13, temperature=8.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:02:12', seeing=2.22, atlas_timestamp='2026-02-15T23:02:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T22:59:00')
2026-02-16T01:02:35.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:02:35.315 [DEBUG] [Thread-214343] [transport.py] [_log()] starting thread (client mode): 0xa2d6f910
2026-02-16T01:02:35.316 [DEBUG] [Thread-214343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:02:35.332 [DEBUG] [Thread-214343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:02:35.332 [INFO] [Thread-214343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:02:35.339 [DEBUG] [Thread-214343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] client lang: <none>
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] server lang: <none>
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] kex follows: False
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:02:35.340 [DEBUG] [Thread-214343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:02:35.341 [DEBUG] [Thread-214343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:02:35.341 [DEBUG] [Thread-214343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:02:35.341 [DEBUG] [Thread-214343] [transport.py] [_log()] Compression: none
2026-02-16T01:02:35.341 [DEBUG] [Thread-214343] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:02:35.404 [DEBUG] [Thread-214343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:02:35.404 [DEBUG] [Thread-214343] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:02:35.404 [DEBUG] [Thread-214343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:02:35.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:02:35.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:02:35.460 [DEBUG] [Thread-214343] [transport.py] [_log()] userauth is OK
2026-02-16T01:02:35.460 [DEBUG] [Thread-214343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:02:35.460 [DEBUG] [Thread-214343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:02:35.460 [DEBUG] [Thread-214343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:02:35.460 [DEBUG] [Thread-214343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:02:35.482 [INFO] [Thread-214343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:02:35.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:02:35.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:02:36.297 [DEBUG] [Thread-214343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:02:36.297 [DEBUG] [Thread-214343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:02:36.345 [DEBUG] [Thread-214343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:02:36.345 [DEBUG] [Thread-214343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:02:36.353 [DEBUG] [Thread-214343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:02:36.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:02:36.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:02:36.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:02:36.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:02:36.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:02:36.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:02:36.385 [DEBUG] [Thread-214343] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:02:38.879 [DEBUG] [Thread-214345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:40.839 [DEBUG] [Thread-214346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:42.387 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:46.737 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:52.899 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:53.930 [DEBUG] [Thread-214347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:02:57.342 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:06.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:03:06.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:03:06.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:03:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 2, 47), 5.83, 70.41, 0.0, 20.13, 8.83, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:03:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:02:47
2026-02-16T01:03:08.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:03:08.743 [DEBUG] [Thread-214348] [transport.py] [_log()] starting thread (client mode): 0xa2d03af0
2026-02-16T01:03:08.743 [DEBUG] [Thread-214348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:03:08.762 [DEBUG] [Thread-214348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:03:08.763 [INFO] [Thread-214348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] client lang: <none>
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] server lang: <none>
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] kex follows: False
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:03:08.766 [DEBUG] [Thread-214348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:03:08.767 [DEBUG] [Thread-214348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:03:08.767 [DEBUG] [Thread-214348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:03:08.767 [DEBUG] [Thread-214348] [transport.py] [_log()] Compression: none
2026-02-16T01:03:08.767 [DEBUG] [Thread-214348] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:03:08.782 [DEBUG] [Thread-214348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:03:08.783 [DEBUG] [Thread-214348] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:03:08.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:03:08.784 [DEBUG] [Thread-214348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:03:08.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:03:08.785 [DEBUG] [Thread-214348] [transport.py] [_log()] userauth is OK
2026-02-16T01:03:08.785 [DEBUG] [Thread-214348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:03:08.786 [DEBUG] [Thread-214348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:03:08.786 [DEBUG] [Thread-214348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:03:08.786 [DEBUG] [Thread-214348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:03:08.803 [INFO] [Thread-214348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:03:08.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:03:08.963 [DEBUG] [Thread-214350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:09.436 [DEBUG] [Thread-214348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:03:09.436 [DEBUG] [Thread-214348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:03:09.437 [DEBUG] [Thread-214348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:03:09.477 [DEBUG] [Thread-214348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:03:09.477 [DEBUG] [Thread-214348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:03:09.480 [DEBUG] [Thread-214348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:03:09.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:03:09.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:03:09.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:03:09.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:03:09.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:03:09.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:03:09.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:03:09.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:03:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:03:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.960170 -999.00  +13.50  17.71     60   +5.90 1 1 1 1 1     0    0 7.34 -14.45 ZNESW 14.9 17.7 154.6 20.6 13.8 -23.3 13.7 -22.2 13.5 -21.3 13.8 -22.5
2026-02-16T01:03:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:03:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:03:09.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.960170
2026-02-16T01:03:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:03:09.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:03:09.502 [DEBUG] [Thread-214348] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:03:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:03:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:03:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:03:09.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:02:47', tmtdew=5.83, humidity=70.41, cloud=0.0, wind=20.13, temperature=8.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:02:47', seeing=2.65, atlas_timestamp='2026-02-15T23:02:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T22:59:00')
2026-02-16T01:03:09.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:03:09.598 [DEBUG] [Thread-214352] [transport.py] [_log()] starting thread (client mode): 0xa81d6380
2026-02-16T01:03:09.598 [DEBUG] [Thread-214352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:03:09.613 [DEBUG] [Thread-214352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:03:09.613 [INFO] [Thread-214352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:03:09.620 [DEBUG] [Thread-214352] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:03:09.620 [DEBUG] [Thread-214352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:03:09.620 [DEBUG] [Thread-214352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:03:09.620 [DEBUG] [Thread-214352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] client lang: <none>
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] server lang: <none>
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] kex follows: False
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] Compression: none
2026-02-16T01:03:09.621 [DEBUG] [Thread-214352] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:03:09.680 [DEBUG] [Thread-214352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:03:09.680 [DEBUG] [Thread-214352] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:03:09.681 [DEBUG] [Thread-214352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:03:09.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:03:09.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:03:09.737 [DEBUG] [Thread-214352] [transport.py] [_log()] userauth is OK
2026-02-16T01:03:09.738 [DEBUG] [Thread-214352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:03:09.738 [DEBUG] [Thread-214352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:03:09.738 [DEBUG] [Thread-214352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:03:09.738 [DEBUG] [Thread-214352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:03:09.760 [INFO] [Thread-214352] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:03:09.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:03:09.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:03:10.578 [DEBUG] [Thread-214352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:03:10.579 [DEBUG] [Thread-214352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:03:10.627 [DEBUG] [Thread-214352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:03:10.627 [DEBUG] [Thread-214352] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:03:10.636 [DEBUG] [Thread-214352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:03:10.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:03:10.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:03:10.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:03:10.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:03:10.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:03:10.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:03:10.675 [DEBUG] [Thread-214352] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:03:13.660 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:23.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:23.387 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:23.993 [DEBUG] [Thread-214354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:39.039 [DEBUG] [Thread-214355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:40.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:03:40.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:03:40.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:03:40.904 [DEBUG] [Thread-214356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:03:42.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 3, 22), 5.82, 70.46, 0.0, 20.2, 8.82, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:03:42.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:03:22
2026-02-16T01:03:42.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:03:43.043 [DEBUG] [Thread-214357] [transport.py] [_log()] starting thread (client mode): 0xa57e3d00
2026-02-16T01:03:43.043 [DEBUG] [Thread-214357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:03:43.063 [DEBUG] [Thread-214357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:03:43.063 [INFO] [Thread-214357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] client lang: <none>
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] server lang: <none>
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] kex follows: False
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] Compression: none
2026-02-16T01:03:43.066 [DEBUG] [Thread-214357] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:03:43.082 [DEBUG] [Thread-214357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:03:43.083 [DEBUG] [Thread-214357] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:03:43.083 [DEBUG] [Thread-214357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:03:43.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:03:43.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:03:43.084 [DEBUG] [Thread-214357] [transport.py] [_log()] userauth is OK
2026-02-16T01:03:43.084 [DEBUG] [Thread-214357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:03:43.084 [DEBUG] [Thread-214357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:03:43.084 [DEBUG] [Thread-214357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:03:43.084 [DEBUG] [Thread-214357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:03:43.103 [INFO] [Thread-214357] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:03:43.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:03:43.757 [DEBUG] [Thread-214357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:03:43.758 [DEBUG] [Thread-214357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:03:43.758 [DEBUG] [Thread-214357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:03:43.798 [DEBUG] [Thread-214357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:03:43.799 [DEBUG] [Thread-214357] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:03:43.802 [DEBUG] [Thread-214357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:03:43.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:03:43.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:03:43.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:03:43.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:03:43.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:03:43.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:03:43.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:03:43.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:03:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:03:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.960517 -999.00  +13.40  14.43     60   +5.80 1 1 1 1 1     0    0 7.32 -14.15 ZNESW 13.6 14.4 141.1 23.0 13.8 -23.5 13.7 -22.3 13.5 -21.4 13.8 -22.5
2026-02-16T01:03:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:03:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:03:43.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.960517
2026-02-16T01:03:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:03:43.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:03:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:03:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:03:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:03:43.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:03:22', tmtdew=5.82, humidity=70.46, cloud=0.0, wind=20.2, temperature=8.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:03:22', seeing=2.77, atlas_timestamp='2026-02-15T23:03:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T23:02:00')
2026-02-16T01:03:43.826 [DEBUG] [Thread-214357] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:03:43.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:03:43.934 [DEBUG] [Thread-214360] [transport.py] [_log()] starting thread (client mode): 0xa81d59f0
2026-02-16T01:03:43.934 [DEBUG] [Thread-214360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:03:43.949 [DEBUG] [Thread-214360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:03:43.949 [INFO] [Thread-214360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:03:43.956 [DEBUG] [Thread-214360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:03:43.957 [DEBUG] [Thread-214360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] client lang: <none>
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] server lang: <none>
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] kex follows: False
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] Compression: none
2026-02-16T01:03:43.958 [DEBUG] [Thread-214360] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:03:44.015 [DEBUG] [Thread-214360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:03:44.016 [DEBUG] [Thread-214360] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:03:44.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:03:44.017 [DEBUG] [Thread-214360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:03:44.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:03:44.072 [DEBUG] [Thread-214360] [transport.py] [_log()] userauth is OK
2026-02-16T01:03:44.072 [DEBUG] [Thread-214360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:03:44.073 [DEBUG] [Thread-214360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:03:44.073 [DEBUG] [Thread-214360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:03:44.073 [DEBUG] [Thread-214360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:03:44.095 [INFO] [Thread-214360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:03:44.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:03:44.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:03:44.891 [DEBUG] [Thread-214360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:03:44.891 [DEBUG] [Thread-214360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:03:44.939 [DEBUG] [Thread-214360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:03:44.939 [DEBUG] [Thread-214360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:03:44.949 [DEBUG] [Thread-214360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:03:44.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:03:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:03:44.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:03:44.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:03:44.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:03:44.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:03:44.984 [DEBUG] [Thread-214360] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:03:54.072 [DEBUG] [Thread-214362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:04.367 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:08.462 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:09.118 [DEBUG] [Thread-214363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:15.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:04:15.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:04:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:04:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 3, 58), 5.77, 70.53, 0.0, 22.06, 8.79, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:04:16.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:03:58
2026-02-16T01:04:17.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:04:17.432 [DEBUG] [Thread-214364] [transport.py] [_log()] starting thread (client mode): 0xa5771d50
2026-02-16T01:04:17.432 [DEBUG] [Thread-214364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:04:17.453 [DEBUG] [Thread-214364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:04:17.453 [INFO] [Thread-214364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:04:17.456 [DEBUG] [Thread-214364] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] client lang: <none>
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] server lang: <none>
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] kex follows: False
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:04:17.457 [DEBUG] [Thread-214364] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:04:17.458 [DEBUG] [Thread-214364] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:04:17.458 [DEBUG] [Thread-214364] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:04:17.458 [DEBUG] [Thread-214364] [transport.py] [_log()] Compression: none
2026-02-16T01:04:17.458 [DEBUG] [Thread-214364] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:04:17.475 [DEBUG] [Thread-214364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:04:17.475 [DEBUG] [Thread-214364] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:04:17.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:04:17.476 [DEBUG] [Thread-214364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:04:17.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:04:17.478 [DEBUG] [Thread-214364] [transport.py] [_log()] userauth is OK
2026-02-16T01:04:17.478 [DEBUG] [Thread-214364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:04:17.478 [DEBUG] [Thread-214364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:04:17.478 [DEBUG] [Thread-214364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:04:17.478 [DEBUG] [Thread-214364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:04:17.496 [INFO] [Thread-214364] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:04:17.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:04:18.088 [DEBUG] [Thread-214364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:04:18.089 [DEBUG] [Thread-214364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:04:18.089 [DEBUG] [Thread-214364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:04:18.131 [DEBUG] [Thread-214364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:04:18.131 [DEBUG] [Thread-214364] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:04:18.134 [DEBUG] [Thread-214364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:04:18.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:04:18.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:04:18.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:04:18.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:04:18.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:04:18.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:04:18.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:04:18.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:04:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:04:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.960864 -999.00  +13.40  12.88     60   +5.80 1 1 1 1 1     0    0 7.34 -14.66 ZNESW 11.3 12.9 137.4 20.9 13.8 -23.5 13.7 -22.4 13.4 -21.2 13.8 -22.6
2026-02-16T01:04:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:04:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:04:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.960864
2026-02-16T01:04:18.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:04:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:04:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:04:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:04:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:04:18.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:03:58', tmtdew=5.77, humidity=70.53, cloud=0.0, wind=22.06, temperature=8.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:03:58', seeing=2.77, atlas_timestamp='2026-02-15T23:03:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T23:02:00')
2026-02-16T01:04:18.157 [DEBUG] [Thread-214364] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:04:18.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:04:18.254 [DEBUG] [Thread-214367] [transport.py] [_log()] starting thread (client mode): 0xa57c0850
2026-02-16T01:04:18.254 [DEBUG] [Thread-214367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:04:18.268 [DEBUG] [Thread-214367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:04:18.268 [INFO] [Thread-214367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:04:18.276 [DEBUG] [Thread-214367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:04:18.276 [DEBUG] [Thread-214367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:04:18.276 [DEBUG] [Thread-214367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:04:18.276 [DEBUG] [Thread-214367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:18.276 [DEBUG] [Thread-214367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] client lang: <none>
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] server lang: <none>
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] kex follows: False
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:04:18.277 [DEBUG] [Thread-214367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:04:18.278 [DEBUG] [Thread-214367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:04:18.278 [DEBUG] [Thread-214367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:04:18.278 [DEBUG] [Thread-214367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:04:18.278 [DEBUG] [Thread-214367] [transport.py] [_log()] Compression: none
2026-02-16T01:04:18.278 [DEBUG] [Thread-214367] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:04:18.332 [DEBUG] [Thread-214367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:04:18.332 [DEBUG] [Thread-214367] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:04:18.333 [DEBUG] [Thread-214367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:04:18.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:04:18.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:04:18.389 [DEBUG] [Thread-214367] [transport.py] [_log()] userauth is OK
2026-02-16T01:04:18.389 [DEBUG] [Thread-214367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:04:18.389 [DEBUG] [Thread-214367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:04:18.389 [DEBUG] [Thread-214367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:04:18.389 [DEBUG] [Thread-214367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:04:18.408 [INFO] [Thread-214367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:04:18.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:04:18.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:04:19.206 [DEBUG] [Thread-214367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:04:19.206 [DEBUG] [Thread-214367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:04:19.254 [DEBUG] [Thread-214367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:04:19.255 [DEBUG] [Thread-214367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:04:19.267 [DEBUG] [Thread-214367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:04:19.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:04:19.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:04:19.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:04:19.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:04:19.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:04:19.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:04:19.303 [DEBUG] [Thread-214367] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:04:23.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:23.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:24.147 [DEBUG] [Thread-214369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:39.195 [DEBUG] [Thread-214370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:40.959 [DEBUG] [Thread-214371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:47.188 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:04:49.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:04:49.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:04:49.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:04:51.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 4, 33), 4.39, 77.67, 0.0, 23.92, 6.65, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:04:51.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:04:33
2026-02-16T01:04:51.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:04:51.606 [DEBUG] [Thread-214372] [transport.py] [_log()] starting thread (client mode): 0xa81d6bf0
2026-02-16T01:04:51.606 [DEBUG] [Thread-214372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:04:51.620 [DEBUG] [Thread-214372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:04:51.620 [INFO] [Thread-214372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] client lang: <none>
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] server lang: <none>
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] kex follows: False
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] Compression: none
2026-02-16T01:04:51.624 [DEBUG] [Thread-214372] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:04:51.633 [DEBUG] [Thread-214372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:04:51.633 [DEBUG] [Thread-214372] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:04:51.633 [DEBUG] [Thread-214372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:04:51.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:04:51.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:04:51.635 [DEBUG] [Thread-214372] [transport.py] [_log()] userauth is OK
2026-02-16T01:04:51.635 [DEBUG] [Thread-214372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:04:51.635 [DEBUG] [Thread-214372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:04:51.635 [DEBUG] [Thread-214372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:04:51.635 [DEBUG] [Thread-214372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:04:51.650 [INFO] [Thread-214372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:04:51.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:04:52.324 [DEBUG] [Thread-214372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:04:52.324 [DEBUG] [Thread-214372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:04:52.324 [DEBUG] [Thread-214372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:04:52.366 [DEBUG] [Thread-214372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:04:52.366 [DEBUG] [Thread-214372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:04:52.368 [DEBUG] [Thread-214372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:04:52.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:04:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:04:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:04:52.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:04:52.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:04:52.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:04:52.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:04:52.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.961559 -999.00  +13.40  15.87     60   +5.90 1 1 1 1 1     0    0 7.46 -14.26 ZNESW 16.9 15.9 161.2 23.0 13.8 -23.5 13.7 -22.3 13.5 -21.3 13.8 -22.3
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.961559
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:04:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:04:33', tmtdew=4.39, humidity=77.67, cloud=0.0, wind=23.92, temperature=6.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:04:34', seeing=2.77, atlas_timestamp='2026-02-15T23:04:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T23:02:00')
2026-02-16T01:04:52.385 [DEBUG] [Thread-214372] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:04:52.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:04:52.474 [DEBUG] [Thread-214375] [transport.py] [_log()] starting thread (client mode): 0xa2d6cd00
2026-02-16T01:04:52.474 [DEBUG] [Thread-214375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:04:52.488 [DEBUG] [Thread-214375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:04:52.488 [INFO] [Thread-214375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] client lang: <none>
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] server lang: <none>
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] kex follows: False
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:04:52.495 [DEBUG] [Thread-214375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:04:52.496 [DEBUG] [Thread-214375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:04:52.496 [DEBUG] [Thread-214375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:04:52.496 [DEBUG] [Thread-214375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:04:52.496 [DEBUG] [Thread-214375] [transport.py] [_log()] Compression: none
2026-02-16T01:04:52.496 [DEBUG] [Thread-214375] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:04:52.552 [DEBUG] [Thread-214375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:04:52.552 [DEBUG] [Thread-214375] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:04:52.553 [DEBUG] [Thread-214375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:04:52.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:04:52.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:04:52.609 [DEBUG] [Thread-214375] [transport.py] [_log()] userauth is OK
2026-02-16T01:04:52.609 [DEBUG] [Thread-214375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:04:52.609 [DEBUG] [Thread-214375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:04:52.609 [DEBUG] [Thread-214375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:04:52.609 [DEBUG] [Thread-214375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:04:52.632 [INFO] [Thread-214375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:04:52.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:04:52.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:04:53.460 [DEBUG] [Thread-214375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:04:53.460 [DEBUG] [Thread-214375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:04:53.508 [DEBUG] [Thread-214375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:04:53.508 [DEBUG] [Thread-214375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:04:53.516 [DEBUG] [Thread-214375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:04:53.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:04:53.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:04:53.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:04:53.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:04:53.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:04:53.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:04:53.549 [DEBUG] [Thread-214375] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:04:54.228 [DEBUG] [Thread-214377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:09.273 [DEBUG] [Thread-214378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:23.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:05:23.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:05:23.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:05:23.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:23.810 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:24.308 [DEBUG] [Thread-214379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:25.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 5, 9), 5.8, 70.28, 0.0, 18.69, 8.84, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:05:25.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:05:09
2026-02-16T01:05:26.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:05:26.180 [DEBUG] [Thread-214380] [transport.py] [_log()] starting thread (client mode): 0xa2d6c160
2026-02-16T01:05:26.181 [DEBUG] [Thread-214380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:05:26.198 [DEBUG] [Thread-214380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:05:26.199 [INFO] [Thread-214380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] client lang: <none>
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] server lang: <none>
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] kex follows: False
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:05:26.202 [DEBUG] [Thread-214380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:05:26.203 [DEBUG] [Thread-214380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:05:26.203 [DEBUG] [Thread-214380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:05:26.203 [DEBUG] [Thread-214380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:05:26.203 [DEBUG] [Thread-214380] [transport.py] [_log()] Compression: none
2026-02-16T01:05:26.203 [DEBUG] [Thread-214380] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:05:26.222 [DEBUG] [Thread-214380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:05:26.223 [DEBUG] [Thread-214380] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:05:26.223 [DEBUG] [Thread-214380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:05:26.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:05:26.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:05:26.226 [DEBUG] [Thread-214380] [transport.py] [_log()] userauth is OK
2026-02-16T01:05:26.226 [DEBUG] [Thread-214380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:05:26.226 [DEBUG] [Thread-214380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:05:26.227 [DEBUG] [Thread-214380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:05:26.227 [DEBUG] [Thread-214380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:05:26.250 [INFO] [Thread-214380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:05:26.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:05:26.810 [DEBUG] [Thread-214380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:05:26.810 [DEBUG] [Thread-214380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:05:26.810 [DEBUG] [Thread-214380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:05:26.850 [DEBUG] [Thread-214380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:05:26.850 [DEBUG] [Thread-214380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:05:26.852 [DEBUG] [Thread-214380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:05:26.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:05:26.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:05:26.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:05:26.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:05:26.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:05:26.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:05:26.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:05:26.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:05:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:05:26.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.961906 -999.00  +13.40  12.58     60   +5.90 1 1 1 1 1     0    0 7.36 -15.64 ZNESW 16.3 12.6 141.4 21.3 13.7 -23.4 13.7 -22.4 13.4 -21.4 13.8 -22.7
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.961906
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:05:26.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:05:09', tmtdew=5.8, humidity=70.28, cloud=0.0, wind=18.69, temperature=8.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:05:09', seeing=2.77, atlas_timestamp='2026-02-15T23:05:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T23:02:00')
2026-02-16T01:05:26.880 [DEBUG] [Thread-214380] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:05:26.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:05:26.962 [DEBUG] [Thread-214383] [transport.py] [_log()] starting thread (client mode): 0xa2d02e60
2026-02-16T01:05:26.962 [DEBUG] [Thread-214383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:05:26.977 [DEBUG] [Thread-214383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:05:26.977 [INFO] [Thread-214383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] client lang: <none>
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] server lang: <none>
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] kex follows: False
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] Compression: none
2026-02-16T01:05:26.984 [DEBUG] [Thread-214383] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:05:27.039 [DEBUG] [Thread-214383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:05:27.040 [DEBUG] [Thread-214383] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:05:27.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:05:27.040 [DEBUG] [Thread-214383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:05:27.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:05:27.101 [DEBUG] [Thread-214383] [transport.py] [_log()] userauth is OK
2026-02-16T01:05:27.101 [DEBUG] [Thread-214383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:05:27.101 [DEBUG] [Thread-214383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:05:27.101 [DEBUG] [Thread-214383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:05:27.102 [DEBUG] [Thread-214383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:05:27.115 [INFO] [Thread-214383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:05:27.115 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:05:27.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:05:27.937 [DEBUG] [Thread-214383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:05:27.937 [DEBUG] [Thread-214383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:05:27.985 [DEBUG] [Thread-214383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:05:27.985 [DEBUG] [Thread-214383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:05:27.994 [DEBUG] [Thread-214383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:05:28.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:05:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:05:28.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:05:28.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:05:28.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:05:28.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:05:28.029 [DEBUG] [Thread-214383] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:05:39.341 [DEBUG] [Thread-214385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:41.019 [DEBUG] [Thread-214386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:54.394 [DEBUG] [Thread-214387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:05:58.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:05:58.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:05:58.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:06:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 5, 44), 5.8, 70.28, 0.0, 21.05, 8.8, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:06:00.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:05:44
2026-02-16T01:06:00.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:06:00.578 [DEBUG] [Thread-214388] [transport.py] [_log()] starting thread (client mode): 0xa2d01240
2026-02-16T01:06:00.578 [DEBUG] [Thread-214388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:06:00.598 [DEBUG] [Thread-214388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:06:00.598 [INFO] [Thread-214388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:00.601 [DEBUG] [Thread-214388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] client lang: <none>
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] server lang: <none>
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] kex follows: False
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] Compression: none
2026-02-16T01:06:00.602 [DEBUG] [Thread-214388] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:06:00.612 [DEBUG] [Thread-214388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:06:00.613 [DEBUG] [Thread-214388] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:06:00.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:06:00.615 [DEBUG] [Thread-214388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:06:00.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:06:00.617 [DEBUG] [Thread-214388] [transport.py] [_log()] userauth is OK
2026-02-16T01:06:00.617 [DEBUG] [Thread-214388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:06:00.618 [DEBUG] [Thread-214388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:06:00.618 [DEBUG] [Thread-214388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:06:00.618 [DEBUG] [Thread-214388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:06:00.647 [INFO] [Thread-214388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:06:00.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:06:01.238 [DEBUG] [Thread-214388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:06:01.238 [DEBUG] [Thread-214388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:06:01.239 [DEBUG] [Thread-214388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:06:01.279 [DEBUG] [Thread-214388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:06:01.280 [DEBUG] [Thread-214388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:06:01.282 [DEBUG] [Thread-214388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:06:01.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:06:01.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:06:01.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:06:01.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:06:01.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:06:01.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:06:01.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:06:01.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:06:01.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:06:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.962253 -999.00  +13.30  13.03     60   +5.90 1 1 1 1 1     0    0 7.21 -16.28 ZNESW 15.2 13.0 168.0 20.3 13.7 -23.4 13.7 -22.5 13.4 -21.3 13.7 -22.7
2026-02-16T01:06:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:06:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:06:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.962253
2026-02-16T01:06:01.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:06:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:06:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:06:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:06:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:06:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:05:44', tmtdew=5.8, humidity=70.28, cloud=0.0, wind=21.05, temperature=8.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:05:44', seeing=2.41, atlas_timestamp='2026-02-15T23:05:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05025000000000013, 0.006249999999999645, -0.042749999999999844, -0.06950000000000145, -0.022999999999999687, -0.00024999999999941735, 0.013999999999999346, 0.008250000000000313, 0.05149999999999899, 0.014000000000001123, -0.0417500000000004, -0.022499999999999076, 0.04499999999999993, -0.0027500000000006963, 0.0039999999999995595, -0.002500000000001279, 0.021250000000000213, -0.00849999999999973, 0.007999999999999119, -0.010750000000001592, 0.03999999999999915, -0.0022500000000018616, -0.005749999999999034, 0.05775000000000041, 0.04399999999999871, -0.040000000000000924, 0.021750000000000824, -0.033500000000000085, 0.028999999999999915, -0.028499999999999304, 0.0710000000000015, 0.045000000000001705, -0.02925000000000111], zp_timestamp='2026-02-15T23:02:00')
2026-02-16T01:06:01.304 [DEBUG] [Thread-214388] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:06:01.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:06:01.414 [DEBUG] [Thread-214391] [transport.py] [_log()] starting thread (client mode): 0xa2d00220
2026-02-16T01:06:01.414 [DEBUG] [Thread-214391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:06:01.429 [DEBUG] [Thread-214391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:06:01.430 [INFO] [Thread-214391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] client lang: <none>
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] server lang: <none>
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] kex follows: False
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] Compression: none
2026-02-16T01:06:01.437 [DEBUG] [Thread-214391] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:06:01.495 [DEBUG] [Thread-214391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:06:01.496 [DEBUG] [Thread-214391] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:06:01.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:06:01.498 [DEBUG] [Thread-214391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:06:01.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:06:01.554 [DEBUG] [Thread-214391] [transport.py] [_log()] userauth is OK
2026-02-16T01:06:01.554 [DEBUG] [Thread-214391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:06:01.554 [DEBUG] [Thread-214391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:06:01.554 [DEBUG] [Thread-214391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:06:01.555 [DEBUG] [Thread-214391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:06:01.573 [INFO] [Thread-214391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:06:01.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:06:01.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:06:02.396 [DEBUG] [Thread-214391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:06:02.397 [DEBUG] [Thread-214391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:06:02.444 [DEBUG] [Thread-214391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:06:02.444 [DEBUG] [Thread-214391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:06:02.453 [DEBUG] [Thread-214391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:06:02.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:06:02.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:06:02.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:06:02.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:06:02.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:06:02.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:06:02.490 [DEBUG] [Thread-214391] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:06:09.432 [DEBUG] [Thread-214393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:20.750 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:24.017 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:24.018 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:24.485 [DEBUG] [Thread-214394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:32.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:06:32.508 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:06:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:06:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 6, 20), 8.72, 55.35, 0.0, 21.33, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:06:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:06:20
2026-02-16T01:06:35.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:06:35.234 [DEBUG] [Thread-214395] [transport.py] [_log()] starting thread (client mode): 0xa2d02530
2026-02-16T01:06:35.234 [DEBUG] [Thread-214395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:06:35.254 [DEBUG] [Thread-214395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:06:35.254 [INFO] [Thread-214395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] client lang: <none>
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] server lang: <none>
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] kex follows: False
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] Compression: none
2026-02-16T01:06:35.255 [DEBUG] [Thread-214395] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:06:35.264 [DEBUG] [Thread-214395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:06:35.264 [DEBUG] [Thread-214395] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:06:35.264 [DEBUG] [Thread-214395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:06:35.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:06:35.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:06:35.266 [DEBUG] [Thread-214395] [transport.py] [_log()] userauth is OK
2026-02-16T01:06:35.266 [DEBUG] [Thread-214395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:06:35.266 [DEBUG] [Thread-214395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:06:35.266 [DEBUG] [Thread-214395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:06:35.266 [DEBUG] [Thread-214395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:06:35.283 [INFO] [Thread-214395] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:06:35.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:06:35.891 [DEBUG] [Thread-214395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:06:35.891 [DEBUG] [Thread-214395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:06:35.891 [DEBUG] [Thread-214395] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:06:35.932 [DEBUG] [Thread-214395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:06:35.932 [DEBUG] [Thread-214395] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:06:35.935 [DEBUG] [Thread-214395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:06:35.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:06:35.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:06:35.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:06:35.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:06:35.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:06:35.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:06:35.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:06:35.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:06:35.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:06:35.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.962600 -999.00  +13.30  14.23     60   +5.90 1 1 1 1 1     0    0 7.43 -16.24 ZNESW 14.9 14.2 149.0 19.8 13.7 -23.4 13.6 -22.4 13.4 -21.3 13.7 -22.6
2026-02-16T01:06:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:06:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:06:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.962600
2026-02-16T01:06:35.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:06:35.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:06:35.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:06:35.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:06:35.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:06:35.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:06:20', tmtdew=8.72, humidity=55.35, cloud=0.0, wind=21.33, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:06:20', seeing=1.97, atlas_timestamp='2026-02-15T23:06:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:05:00')
2026-02-16T01:06:35.972 [DEBUG] [Thread-214395] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:06:36.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:06:36.063 [DEBUG] [Thread-214398] [transport.py] [_log()] starting thread (client mode): 0xa2d00cd0
2026-02-16T01:06:36.063 [DEBUG] [Thread-214398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:06:36.084 [DEBUG] [Thread-214398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:06:36.084 [INFO] [Thread-214398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] client lang: <none>
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] server lang: <none>
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] kex follows: False
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:06:36.091 [DEBUG] [Thread-214398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:06:36.092 [DEBUG] [Thread-214398] [transport.py] [_log()] Compression: none
2026-02-16T01:06:36.092 [DEBUG] [Thread-214398] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:06:36.149 [DEBUG] [Thread-214398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:06:36.149 [DEBUG] [Thread-214398] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:06:36.149 [DEBUG] [Thread-214398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:06:36.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:06:36.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:06:36.209 [DEBUG] [Thread-214398] [transport.py] [_log()] userauth is OK
2026-02-16T01:06:36.210 [DEBUG] [Thread-214398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:06:36.210 [DEBUG] [Thread-214398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:06:36.210 [DEBUG] [Thread-214398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:06:36.210 [DEBUG] [Thread-214398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:06:36.228 [INFO] [Thread-214398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:06:36.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:06:36.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:06:37.040 [DEBUG] [Thread-214398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:06:37.040 [DEBUG] [Thread-214398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:06:37.087 [DEBUG] [Thread-214398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:06:37.088 [DEBUG] [Thread-214398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:06:37.097 [DEBUG] [Thread-214398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:06:37.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:06:37.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:06:37.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:06:37.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:06:37.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:06:37.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:06:37.134 [DEBUG] [Thread-214398] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:06:39.520 [DEBUG] [Thread-214400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:41.085 [DEBUG] [Thread-214401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:06:54.576 [DEBUG] [Thread-214402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:07:07.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:07:07.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:07:09.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 6, 55), 8.62, 56.05, 0.0, 21.14, 13.38, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:07:09.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:06:55
2026-02-16T01:07:09.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:07:09.552 [DEBUG] [Thread-214403] [transport.py] [_log()] starting thread (client mode): 0xa2d6ec50
2026-02-16T01:07:09.552 [DEBUG] [Thread-214403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:07:09.572 [DEBUG] [Thread-214403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:07:09.573 [INFO] [Thread-214403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:07:09.575 [DEBUG] [Thread-214403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] client lang: <none>
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] server lang: <none>
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] kex follows: False
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:07:09.576 [DEBUG] [Thread-214403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:07:09.577 [DEBUG] [Thread-214403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:07:09.577 [DEBUG] [Thread-214403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:07:09.577 [DEBUG] [Thread-214403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:07:09.577 [DEBUG] [Thread-214403] [transport.py] [_log()] Compression: none
2026-02-16T01:07:09.577 [DEBUG] [Thread-214403] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:07:09.593 [DEBUG] [Thread-214403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:07:09.593 [DEBUG] [Thread-214403] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:07:09.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:07:09.594 [DEBUG] [Thread-214403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:07:09.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:07:09.596 [DEBUG] [Thread-214403] [transport.py] [_log()] userauth is OK
2026-02-16T01:07:09.596 [DEBUG] [Thread-214403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:07:09.596 [DEBUG] [Thread-214403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:07:09.596 [DEBUG] [Thread-214403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:07:09.596 [DEBUG] [Thread-214403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:07:09.614 [DEBUG] [Thread-214405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:09.621 [INFO] [Thread-214403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:07:09.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:07:10.202 [DEBUG] [Thread-214403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:07:10.203 [DEBUG] [Thread-214403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:07:10.203 [DEBUG] [Thread-214403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:07:10.243 [DEBUG] [Thread-214403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:07:10.243 [DEBUG] [Thread-214403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:07:10.246 [DEBUG] [Thread-214403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:07:10.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:07:10.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:07:10.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:07:10.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:07:10.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:07:10.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:07:10.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:07:10.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:07:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:07:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.962948 -999.00  +13.30  16.06     60   +5.90 1 1 1 1 1     0    0 7.06 -18.31 ZNESW 13.4 16.1 138.6 21.8 13.7 -23.3 13.6 -22.2 13.4 -21.3 13.7 -22.4
2026-02-16T01:07:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:07:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:07:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.962948
2026-02-16T01:07:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:07:10.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:07:10.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:07:10.271 [DEBUG] [Thread-214403] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:07:10.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:07:10.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:07:10.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:06:55', tmtdew=8.62, humidity=56.05, cloud=0.0, wind=21.14, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:06:55', seeing=1.82, atlas_timestamp='2026-02-15T23:06:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:05:00')
2026-02-16T01:07:10.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:07:10.367 [DEBUG] [Thread-214407] [transport.py] [_log()] starting thread (client mode): 0xa2d10700
2026-02-16T01:07:10.367 [DEBUG] [Thread-214407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:07:10.384 [DEBUG] [Thread-214407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:07:10.385 [INFO] [Thread-214407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:10.392 [DEBUG] [Thread-214407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] client lang: <none>
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] server lang: <none>
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] kex follows: False
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] Compression: none
2026-02-16T01:07:10.393 [DEBUG] [Thread-214407] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:07:10.453 [DEBUG] [Thread-214407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:07:10.454 [DEBUG] [Thread-214407] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:07:10.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:07:10.455 [DEBUG] [Thread-214407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:07:10.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:07:10.511 [DEBUG] [Thread-214407] [transport.py] [_log()] userauth is OK
2026-02-16T01:07:10.511 [DEBUG] [Thread-214407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:07:10.511 [DEBUG] [Thread-214407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:07:10.511 [DEBUG] [Thread-214407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:07:10.512 [DEBUG] [Thread-214407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:07:10.530 [INFO] [Thread-214407] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:07:10.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:07:10.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:07:11.361 [DEBUG] [Thread-214407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:07:11.362 [DEBUG] [Thread-214407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:07:11.409 [DEBUG] [Thread-214407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:07:11.410 [DEBUG] [Thread-214407] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:07:11.421 [DEBUG] [Thread-214407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:07:11.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:07:11.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:07:11.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:07:11.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:07:11.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:07:11.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:07:11.460 [DEBUG] [Thread-214407] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:07:24.221 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:24.223 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:24.652 [DEBUG] [Thread-214409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:32.447 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:39.705 [DEBUG] [Thread-214410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:40.071 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:41.158 [DEBUG] [Thread-214411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:41.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:07:41.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:07:41.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:07:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 7, 30), 8.61, 56.09, 0.0, 20.7, 13.31, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:07:43.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:07:30
2026-02-16T01:07:43.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:07:43.846 [DEBUG] [Thread-214412] [transport.py] [_log()] starting thread (client mode): 0xa2d6e290
2026-02-16T01:07:43.846 [DEBUG] [Thread-214412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:07:43.866 [DEBUG] [Thread-214412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:07:43.866 [INFO] [Thread-214412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] client lang: <none>
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] server lang: <none>
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] kex follows: False
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:07:43.869 [DEBUG] [Thread-214412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:07:43.870 [DEBUG] [Thread-214412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:07:43.870 [DEBUG] [Thread-214412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:07:43.870 [DEBUG] [Thread-214412] [transport.py] [_log()] Compression: none
2026-02-16T01:07:43.870 [DEBUG] [Thread-214412] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:07:43.885 [DEBUG] [Thread-214412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:07:43.886 [DEBUG] [Thread-214412] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:07:43.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:07:43.887 [DEBUG] [Thread-214412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:07:43.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:07:43.889 [DEBUG] [Thread-214412] [transport.py] [_log()] userauth is OK
2026-02-16T01:07:43.889 [DEBUG] [Thread-214412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:07:43.889 [DEBUG] [Thread-214412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:07:43.889 [DEBUG] [Thread-214412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:07:43.889 [DEBUG] [Thread-214412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:07:43.912 [INFO] [Thread-214412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:07:43.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:07:44.126 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:44.530 [DEBUG] [Thread-214412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:07:44.530 [DEBUG] [Thread-214412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:07:44.531 [DEBUG] [Thread-214412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:07:44.571 [DEBUG] [Thread-214412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:07:44.571 [DEBUG] [Thread-214412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:07:44.574 [DEBUG] [Thread-214412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:07:44.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:07:44.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:07:44.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:07:44.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:07:44.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:07:44.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:07:44.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:07:44.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:07:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:07:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.963295 -999.00  +13.30  17.43     60   +5.90 1 1 1 1 1     0    0 7.09 -19.55 ZNESW 17.1 17.4 160.8 23.8 13.7 -23.4 13.6 -22.2 13.4 -21.3 13.7 -22.4
2026-02-16T01:07:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:07:44.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:07:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.963295
2026-02-16T01:07:44.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:07:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:07:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:07:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:07:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:07:44.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:07:30', tmtdew=8.61, humidity=56.09, cloud=0.0, wind=20.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-02-16T01:07:30', seeing=2.21, atlas_timestamp='2026-02-15T23:07:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:05:00')
2026-02-16T01:07:44.599 [DEBUG] [Thread-214412] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:07:44.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:07:44.693 [DEBUG] [Thread-214415] [transport.py] [_log()] starting thread (client mode): 0xa2d6d120
2026-02-16T01:07:44.693 [DEBUG] [Thread-214415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:07:44.707 [DEBUG] [Thread-214415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:07:44.708 [INFO] [Thread-214415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:07:44.716 [DEBUG] [Thread-214415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:07:44.716 [DEBUG] [Thread-214415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] client lang: <none>
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] server lang: <none>
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] kex follows: False
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:07:44.717 [DEBUG] [Thread-214415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:07:44.718 [DEBUG] [Thread-214415] [transport.py] [_log()] Compression: none
2026-02-16T01:07:44.718 [DEBUG] [Thread-214415] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:07:44.775 [DEBUG] [Thread-214415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:07:44.775 [DEBUG] [Thread-214415] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:07:44.776 [DEBUG] [Thread-214415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:07:44.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:07:44.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:07:44.831 [DEBUG] [Thread-214415] [transport.py] [_log()] userauth is OK
2026-02-16T01:07:44.831 [DEBUG] [Thread-214415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:07:44.832 [DEBUG] [Thread-214415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:07:44.832 [DEBUG] [Thread-214415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:07:44.832 [DEBUG] [Thread-214415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:07:44.850 [INFO] [Thread-214415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:07:44.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:07:44.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:07:45.654 [DEBUG] [Thread-214415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:07:45.654 [DEBUG] [Thread-214415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:07:45.702 [DEBUG] [Thread-214415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:07:45.702 [DEBUG] [Thread-214415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:07:45.712 [DEBUG] [Thread-214415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:07:45.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:07:45.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:07:45.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:07:45.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:07:45.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:07:45.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:07:45.750 [DEBUG] [Thread-214415] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:07:54.142 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:07:54.737 [DEBUG] [Thread-214417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:09.778 [DEBUG] [Thread-214418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:15.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:08:15.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:08:15.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:08:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 8, 6), 8.5, 56.52, 0.0, 20.57, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:08:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:08:06
2026-02-16T01:08:17.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:08:18.003 [DEBUG] [Thread-214419] [transport.py] [_log()] starting thread (client mode): 0xa2d54a60
2026-02-16T01:08:18.004 [DEBUG] [Thread-214419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:08:18.024 [DEBUG] [Thread-214419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:08:18.025 [INFO] [Thread-214419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:08:18.027 [DEBUG] [Thread-214419] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:08:18.027 [DEBUG] [Thread-214419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:08:18.027 [DEBUG] [Thread-214419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:08:18.027 [DEBUG] [Thread-214419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:18.027 [DEBUG] [Thread-214419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] client lang: <none>
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] server lang: <none>
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] kex follows: False
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] Compression: none
2026-02-16T01:08:18.028 [DEBUG] [Thread-214419] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:08:18.044 [DEBUG] [Thread-214419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:08:18.045 [DEBUG] [Thread-214419] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:08:18.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:08:18.046 [DEBUG] [Thread-214419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:08:18.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:08:18.048 [DEBUG] [Thread-214419] [transport.py] [_log()] userauth is OK
2026-02-16T01:08:18.048 [DEBUG] [Thread-214419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:08:18.048 [DEBUG] [Thread-214419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:08:18.048 [DEBUG] [Thread-214419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:08:18.048 [DEBUG] [Thread-214419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:08:18.066 [INFO] [Thread-214419] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:08:18.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:08:18.667 [DEBUG] [Thread-214419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:08:18.667 [DEBUG] [Thread-214419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:08:18.668 [DEBUG] [Thread-214419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:08:18.708 [DEBUG] [Thread-214419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:08:18.709 [DEBUG] [Thread-214419] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:08:18.712 [DEBUG] [Thread-214419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:08:18.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:08:18.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:08:18.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:08:18.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:08:18.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:08:18.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:08:18.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:08:18.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:08:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:08:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.963989 -999.00  +13.30  17.60     61   +5.90 1 1 1 1 1     0    0 7.05 -21.55 ZNESW 12.4 17.6 151.4 23.4 13.7 -23.3 13.6 -22.2 13.4 -21.2 13.7 -22.3
2026-02-16T01:08:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:08:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:08:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.963989
2026-02-16T01:08:18.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:08:18.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:08:18.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:08:18.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:08:18.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:08:18.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:08:06', tmtdew=8.5, humidity=56.52, cloud=0.0, wind=20.57, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:08:06', seeing=2.21, atlas_timestamp='2026-02-15T23:08:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:05:00')
2026-02-16T01:08:18.738 [DEBUG] [Thread-214419] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:08:18.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:08:18.838 [DEBUG] [Thread-214422] [transport.py] [_log()] starting thread (client mode): 0xa2d570d0
2026-02-16T01:08:18.838 [DEBUG] [Thread-214422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:08:18.855 [DEBUG] [Thread-214422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:08:18.855 [INFO] [Thread-214422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:08:18.863 [DEBUG] [Thread-214422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] client lang: <none>
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] server lang: <none>
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] kex follows: False
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] Compression: none
2026-02-16T01:08:18.864 [DEBUG] [Thread-214422] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:08:18.923 [DEBUG] [Thread-214422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:08:18.924 [DEBUG] [Thread-214422] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:08:18.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:08:18.925 [DEBUG] [Thread-214422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:08:18.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:08:18.979 [DEBUG] [Thread-214422] [transport.py] [_log()] userauth is OK
2026-02-16T01:08:18.979 [DEBUG] [Thread-214422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:08:18.979 [DEBUG] [Thread-214422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:08:18.980 [DEBUG] [Thread-214422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:08:18.980 [DEBUG] [Thread-214422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:08:18.999 [INFO] [Thread-214422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:08:19.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:08:19.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:08:19.849 [DEBUG] [Thread-214422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:08:19.849 [DEBUG] [Thread-214422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:08:19.897 [DEBUG] [Thread-214422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:08:19.897 [DEBUG] [Thread-214422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:08:19.907 [DEBUG] [Thread-214422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:08:19.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:08:19.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:08:19.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:08:19.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:08:19.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:08:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:08:19.944 [DEBUG] [Thread-214422] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:08:24.424 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:24.425 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:24.816 [DEBUG] [Thread-214424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:39.865 [DEBUG] [Thread-214425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:41.223 [DEBUG] [Thread-214426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:08:49.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:08:49.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:08:49.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:08:51.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 8, 41), 8.63, 55.9, 0.0, 21.59, 13.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:08:51.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:08:41
2026-02-16T01:08:52.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:08:52.313 [DEBUG] [Thread-214427] [transport.py] [_log()] starting thread (client mode): 0xa57c0340
2026-02-16T01:08:52.313 [DEBUG] [Thread-214427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:08:52.333 [DEBUG] [Thread-214427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:08:52.333 [INFO] [Thread-214427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] client lang: <none>
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] server lang: <none>
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] kex follows: False
2026-02-16T01:08:52.336 [DEBUG] [Thread-214427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:08:52.337 [DEBUG] [Thread-214427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:08:52.337 [DEBUG] [Thread-214427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:08:52.337 [DEBUG] [Thread-214427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:08:52.337 [DEBUG] [Thread-214427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:08:52.337 [DEBUG] [Thread-214427] [transport.py] [_log()] Compression: none
2026-02-16T01:08:52.337 [DEBUG] [Thread-214427] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:08:52.344 [DEBUG] [Thread-214427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:08:52.344 [DEBUG] [Thread-214427] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:08:52.344 [DEBUG] [Thread-214427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:08:52.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:08:52.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:08:52.345 [DEBUG] [Thread-214427] [transport.py] [_log()] userauth is OK
2026-02-16T01:08:52.345 [DEBUG] [Thread-214427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:08:52.345 [DEBUG] [Thread-214427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:08:52.345 [DEBUG] [Thread-214427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:08:52.346 [DEBUG] [Thread-214427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:08:52.364 [INFO] [Thread-214427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:08:52.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:08:52.989 [DEBUG] [Thread-214427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:08:52.989 [DEBUG] [Thread-214427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:08:52.991 [DEBUG] [Thread-214427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:08:53.030 [DEBUG] [Thread-214427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:08:53.031 [DEBUG] [Thread-214427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:08:53.033 [DEBUG] [Thread-214427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:08:53.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:08:53.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:08:53.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:08:53.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:08:53.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:08:53.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:08:53.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:08:53.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:08:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:08:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.964337 -999.00  +13.30  14.80     61   +5.90 1 1 1 1 1     0    0 7.00 -23.38 ZNESW 16.2 14.8 143.2 19.6 13.7 -23.4 13.6 -22.2 13.4 -21.4 13.7 -22.7
2026-02-16T01:08:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:08:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:08:53.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.964337
2026-02-16T01:08:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:08:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:08:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:08:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:08:53.057 [DEBUG] [Thread-214427] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:08:53.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:08:53.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:08:41', tmtdew=8.63, humidity=55.9, cloud=0.0, wind=21.59, temperature=13.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:08:41', seeing=2.74, atlas_timestamp='2026-02-15T23:08:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:05:00')
2026-02-16T01:08:53.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:08:53.169 [DEBUG] [Thread-214430] [transport.py] [_log()] starting thread (client mode): 0xa2d02a40
2026-02-16T01:08:53.169 [DEBUG] [Thread-214430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:08:53.183 [DEBUG] [Thread-214430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:08:53.183 [INFO] [Thread-214430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:08:53.190 [DEBUG] [Thread-214430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:08:53.190 [DEBUG] [Thread-214430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] client lang: <none>
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] server lang: <none>
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] kex follows: False
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] Compression: none
2026-02-16T01:08:53.191 [DEBUG] [Thread-214430] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:08:53.247 [DEBUG] [Thread-214430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:08:53.247 [DEBUG] [Thread-214430] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:08:53.248 [DEBUG] [Thread-214430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:08:53.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:08:53.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:08:53.305 [DEBUG] [Thread-214430] [transport.py] [_log()] userauth is OK
2026-02-16T01:08:53.306 [DEBUG] [Thread-214430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:08:53.306 [DEBUG] [Thread-214430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:08:53.306 [DEBUG] [Thread-214430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:08:53.306 [DEBUG] [Thread-214430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:08:53.324 [INFO] [Thread-214430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:08:53.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:08:53.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:08:54.127 [DEBUG] [Thread-214430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:08:54.127 [DEBUG] [Thread-214430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:08:54.175 [DEBUG] [Thread-214430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:08:54.175 [DEBUG] [Thread-214430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:08:54.184 [DEBUG] [Thread-214430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:08:54.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:08: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')
2026-02-16T01:08:54.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:08:54.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:08:54.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:08:54.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:08:54.222 [DEBUG] [Thread-214430] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:08:54.900 [DEBUG] [Thread-214432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:06.647 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:09.955 [DEBUG] [Thread-214433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:15.481 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:19.575 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:24.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:09:24.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:09:24.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:09:24.626 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:24.627 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:24.990 [DEBUG] [Thread-214434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:26.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 9, 17), 8.51, 56.29, 0.0, 24.14, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:09:26.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:09:17
2026-02-16T01:09:26.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:09:26.781 [DEBUG] [Thread-214435] [transport.py] [_log()] starting thread (client mode): 0xa2dc0640
2026-02-16T01:09:26.781 [DEBUG] [Thread-214435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:09:26.802 [DEBUG] [Thread-214435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:09:26.802 [INFO] [Thread-214435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:09:26.805 [DEBUG] [Thread-214435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] client lang: <none>
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] server lang: <none>
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] kex follows: False
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] Compression: none
2026-02-16T01:09:26.806 [DEBUG] [Thread-214435] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:09:26.824 [DEBUG] [Thread-214435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:09:26.824 [DEBUG] [Thread-214435] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:09:26.825 [DEBUG] [Thread-214435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:09:26.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:09:26.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:09:26.827 [DEBUG] [Thread-214435] [transport.py] [_log()] userauth is OK
2026-02-16T01:09:26.827 [DEBUG] [Thread-214435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:09:26.827 [DEBUG] [Thread-214435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:09:26.828 [DEBUG] [Thread-214435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:09:26.828 [DEBUG] [Thread-214435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:09:26.852 [INFO] [Thread-214435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:09:26.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:09:27.439 [DEBUG] [Thread-214435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:09:27.440 [DEBUG] [Thread-214435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:09:27.440 [DEBUG] [Thread-214435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:09:27.481 [DEBUG] [Thread-214435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:09:27.481 [DEBUG] [Thread-214435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:09:27.483 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:27.484 [DEBUG] [Thread-214435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:09:27.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:09:27.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:09:27.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:09:27.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:09:27.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:09:27.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:09:27.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:09:27.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:09:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:09:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.964337 -999.00  +13.30  14.80     61   +5.90 1 1 1 1 1     0    0 7.00 -23.38 ZNESW 16.2 14.8 143.2 19.6 13.7 -23.4 13.6 -22.2 13.4 -21.4 13.7 -22.7
2026-02-16T01:09:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:09:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:09:27.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.964337
2026-02-16T01:09:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:09:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:09:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:09:27.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:09:27.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:09:27.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:09:17', tmtdew=8.51, humidity=56.29, cloud=0.0, wind=24.14, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:09:17', seeing=2.21, atlas_timestamp='2026-02-15T23:08:38.717', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:07:00')
2026-02-16T01:09:27.508 [DEBUG] [Thread-214435] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:09:27.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:09:27.603 [DEBUG] [Thread-214438] [transport.py] [_log()] starting thread (client mode): 0xa2d138b0
2026-02-16T01:09:27.604 [DEBUG] [Thread-214438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:09:27.618 [DEBUG] [Thread-214438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:09:27.618 [INFO] [Thread-214438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:09:27.626 [DEBUG] [Thread-214438] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:09:27.626 [DEBUG] [Thread-214438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] client lang: <none>
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] server lang: <none>
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] kex follows: False
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:09:27.627 [DEBUG] [Thread-214438] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:09:27.628 [DEBUG] [Thread-214438] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:09:27.628 [DEBUG] [Thread-214438] [transport.py] [_log()] Compression: none
2026-02-16T01:09:27.628 [DEBUG] [Thread-214438] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:09:27.684 [DEBUG] [Thread-214438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:09:27.685 [DEBUG] [Thread-214438] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:09:27.685 [DEBUG] [Thread-214438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:09:27.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:09:27.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:09:27.740 [DEBUG] [Thread-214438] [transport.py] [_log()] userauth is OK
2026-02-16T01:09:27.741 [DEBUG] [Thread-214438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:09:27.741 [DEBUG] [Thread-214438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:09:27.741 [DEBUG] [Thread-214438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:09:27.741 [DEBUG] [Thread-214438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:09:27.760 [INFO] [Thread-214438] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:09:27.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:09:27.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:09:28.564 [DEBUG] [Thread-214438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:09:28.564 [DEBUG] [Thread-214438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:09:28.612 [DEBUG] [Thread-214438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:09:28.612 [DEBUG] [Thread-214438] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:09:28.621 [DEBUG] [Thread-214438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:09:28.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:09:28.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:09: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
2026-02-16T01:09:28.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:09:28.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:09:28.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:09:28.657 [DEBUG] [Thread-214438] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:09:40.026 [DEBUG] [Thread-214440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:41.283 [DEBUG] [Thread-214441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:55.076 [DEBUG] [Thread-214442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:09:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:09:58.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:09:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:10:00.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 9, 52), 8.64, 55.69, 0.0, 24.21, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:10:00.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:09:52
2026-02-16T01:10:01.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:10:01.222 [DEBUG] [Thread-214443] [transport.py] [_log()] starting thread (client mode): 0xa2d56170
2026-02-16T01:10:01.222 [DEBUG] [Thread-214443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:10:01.236 [DEBUG] [Thread-214443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:10:01.236 [INFO] [Thread-214443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] client lang: <none>
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] server lang: <none>
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] kex follows: False
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] Compression: none
2026-02-16T01:10:01.239 [DEBUG] [Thread-214443] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:10:01.256 [DEBUG] [Thread-214443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:10:01.256 [DEBUG] [Thread-214443] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:10:01.257 [DEBUG] [Thread-214443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:10:01.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:10:01.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:10:01.258 [DEBUG] [Thread-214443] [transport.py] [_log()] userauth is OK
2026-02-16T01:10:01.259 [DEBUG] [Thread-214443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:10:01.259 [DEBUG] [Thread-214443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:10:01.259 [DEBUG] [Thread-214443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:10:01.259 [DEBUG] [Thread-214443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:10:01.273 [INFO] [Thread-214443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:10:01.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:10:01.915 [DEBUG] [Thread-214443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:10:01.915 [DEBUG] [Thread-214443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:10:01.915 [DEBUG] [Thread-214443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:10:01.956 [DEBUG] [Thread-214443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:10:01.956 [DEBUG] [Thread-214443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:10:01.958 [DEBUG] [Thread-214443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:10:01.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:10:01.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:10:01.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:10:01.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:10:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:10:01.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:10:01.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.964684 -999.00  +13.20  14.01     61   +5.90 1 1 1 1 1     0    0 7.00 -27.42 ZNESW 15.6 14.0 144.0 18.7 13.7 -23.3 13.6 -22.2 13.3 -21.3 13.7 -22.4
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.964684
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:10:01.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:10:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:10:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:10:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:10:01.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:09:52', tmtdew=8.64, humidity=55.69, cloud=0.0, wind=24.21, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:09:52', seeing=1.84, atlas_timestamp='2026-02-15T23:09:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:07:00')
2026-02-16T01:10:01.982 [DEBUG] [Thread-214443] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:10:02.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:10:02.069 [DEBUG] [Thread-214446] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-16T01:10:02.069 [DEBUG] [Thread-214446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:10:02.084 [DEBUG] [Thread-214446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:10:02.084 [INFO] [Thread-214446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:10:02.091 [DEBUG] [Thread-214446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] client lang: <none>
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] server lang: <none>
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] kex follows: False
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] Compression: none
2026-02-16T01:10:02.092 [DEBUG] [Thread-214446] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:10:02.148 [DEBUG] [Thread-214446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:10:02.149 [DEBUG] [Thread-214446] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:10:02.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:10:02.150 [DEBUG] [Thread-214446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:10:02.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:10:02.205 [DEBUG] [Thread-214446] [transport.py] [_log()] userauth is OK
2026-02-16T01:10:02.205 [DEBUG] [Thread-214446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:10:02.205 [DEBUG] [Thread-214446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:10:02.205 [DEBUG] [Thread-214446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:10:02.206 [DEBUG] [Thread-214446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:10:02.225 [INFO] [Thread-214446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:10:02.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:10:02.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:10:03.062 [DEBUG] [Thread-214446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:10:03.062 [DEBUG] [Thread-214446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:10:03.112 [DEBUG] [Thread-214446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:10:03.112 [DEBUG] [Thread-214446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:10:03.120 [DEBUG] [Thread-214446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:10:03.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:10:03.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')
2026-02-16T01:10:03.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:10:03.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:10:03.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:10:03.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:10:03.151 [DEBUG] [Thread-214446] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:10:10.115 [DEBUG] [Thread-214448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:24.836 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:24.837 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:25.168 [DEBUG] [Thread-214449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:33.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:10:33.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:10:33.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
2026-02-16T01:10:35.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 10, 27), 8.67, 55.55, 0.0, 26.26, 13.51, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:10:35.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:10:27
2026-02-16T01:10:35.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:10:35.681 [DEBUG] [Thread-214450] [transport.py] [_log()] starting thread (client mode): 0xa2dc0340
2026-02-16T01:10:35.682 [DEBUG] [Thread-214450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:10:35.701 [DEBUG] [Thread-214450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:10:35.701 [INFO] [Thread-214450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:10:35.704 [DEBUG] [Thread-214450] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] client lang: <none>
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] server lang: <none>
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] kex follows: False
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] Compression: none
2026-02-16T01:10:35.705 [DEBUG] [Thread-214450] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:10:35.722 [DEBUG] [Thread-214450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:10:35.722 [DEBUG] [Thread-214450] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:10:35.723 [DEBUG] [Thread-214450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:10:35.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:10:35.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:10:35.725 [DEBUG] [Thread-214450] [transport.py] [_log()] userauth is OK
2026-02-16T01:10:35.725 [DEBUG] [Thread-214450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:10:35.725 [DEBUG] [Thread-214450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:10:35.725 [DEBUG] [Thread-214450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:10:35.725 [DEBUG] [Thread-214450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:10:35.750 [INFO] [Thread-214450] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:10:35.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:10:36.409 [DEBUG] [Thread-214450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:10:36.409 [DEBUG] [Thread-214450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:10:36.410 [DEBUG] [Thread-214450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:10:36.450 [DEBUG] [Thread-214450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:10:36.451 [DEBUG] [Thread-214450] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:10:36.454 [DEBUG] [Thread-214450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:10:36.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:10:36.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:10:36.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:10:36.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:10:36.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:10:36.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:10:36.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:10:36.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:10:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:10:36.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.965031 -999.00  +13.20  13.51     61   +5.90 1 1 1 1 1     0    0 6.95 -27.26 ZNESW 17.2 13.5 150.8 20.3 13.7 -23.2 13.6 -22.2 13.4 -20.8 13.7 -22.3
2026-02-16T01:10:36.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:10:36.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:10:36.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.965031
2026-02-16T01:10:36.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:10:36.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:10:36.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:10:36.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:10:36.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:10:36.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:10:27', tmtdew=8.67, humidity=55.55, cloud=0.0, wind=26.26, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:10:27', seeing=2.6, atlas_timestamp='2026-02-15T23:09:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:07:00')
2026-02-16T01:10:36.483 [DEBUG] [Thread-214450] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:10:36.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:10:36.590 [DEBUG] [Thread-214453] [transport.py] [_log()] starting thread (client mode): 0xa2d137f0
2026-02-16T01:10:36.590 [DEBUG] [Thread-214453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:10:36.605 [DEBUG] [Thread-214453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:10:36.605 [INFO] [Thread-214453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:10:36.612 [DEBUG] [Thread-214453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:10:36.612 [DEBUG] [Thread-214453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] client lang: <none>
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] server lang: <none>
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] kex follows: False
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:10:36.613 [DEBUG] [Thread-214453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:10:36.614 [DEBUG] [Thread-214453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:10:36.614 [DEBUG] [Thread-214453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:10:36.614 [DEBUG] [Thread-214453] [transport.py] [_log()] Compression: none
2026-02-16T01:10:36.614 [DEBUG] [Thread-214453] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:10:36.673 [DEBUG] [Thread-214453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:10:36.673 [DEBUG] [Thread-214453] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:10:36.674 [DEBUG] [Thread-214453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:10:36.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:10:36.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:10:36.729 [DEBUG] [Thread-214453] [transport.py] [_log()] userauth is OK
2026-02-16T01:10:36.729 [DEBUG] [Thread-214453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:10:36.729 [DEBUG] [Thread-214453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:10:36.730 [DEBUG] [Thread-214453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:10:36.730 [DEBUG] [Thread-214453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:10:36.752 [INFO] [Thread-214453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:10:36.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:10:36.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:10:37.590 [DEBUG] [Thread-214453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:10:37.590 [DEBUG] [Thread-214453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:10:37.638 [DEBUG] [Thread-214453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:10:37.639 [DEBUG] [Thread-214453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:10:37.648 [DEBUG] [Thread-214453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:10:37.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:10:37.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:10:37.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:10:37.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:10:37.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:10:37.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:10:37.684 [DEBUG] [Thread-214453] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:10:40.203 [DEBUG] [Thread-214455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:41.361 [DEBUG] [Thread-214456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:42.196 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:49.886 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:53.983 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:10:55.256 [DEBUG] [Thread-214457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:07.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:11:07.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:11:07.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:11:09.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 10, 27), 8.67, 55.55, 0.0, 26.26, 13.51, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:11:09.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:10:27
2026-02-16T01:11:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:11:10.072 [DEBUG] [Thread-214458] [transport.py] [_log()] starting thread (client mode): 0xa57b0f10
2026-02-16T01:11:10.072 [DEBUG] [Thread-214458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:11:10.090 [DEBUG] [Thread-214458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:11:10.090 [INFO] [Thread-214458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:11:10.094 [DEBUG] [Thread-214458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] client lang: <none>
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] server lang: <none>
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] kex follows: False
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] Compression: none
2026-02-16T01:11:10.095 [DEBUG] [Thread-214458] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:11:10.112 [DEBUG] [Thread-214458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:11:10.112 [DEBUG] [Thread-214458] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:11:10.113 [DEBUG] [Thread-214458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:11:10.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:11:10.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:11:10.114 [DEBUG] [Thread-214458] [transport.py] [_log()] userauth is OK
2026-02-16T01:11:10.115 [DEBUG] [Thread-214458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:11:10.115 [DEBUG] [Thread-214458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:11:10.115 [DEBUG] [Thread-214458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:11:10.115 [DEBUG] [Thread-214458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:11:10.138 [INFO] [Thread-214458] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:11:10.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:11:10.297 [DEBUG] [Thread-214460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:10.744 [DEBUG] [Thread-214458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:11:10.745 [DEBUG] [Thread-214458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:11:10.745 [DEBUG] [Thread-214458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:11:10.786 [DEBUG] [Thread-214458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:11:10.786 [DEBUG] [Thread-214458] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:11:10.788 [DEBUG] [Thread-214458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:11:10.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:11:10.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:11:10.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:11:10.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:11:10.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:11:10.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:11:10.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.965725 -999.00  +13.20  17.19     61   +5.90 1 1 1 1 1     0    0 6.72 -32.75 ZNESW 19.5 17.2 138.4 21.0 13.7 -23.1 13.6 -22.3 13.4 -21.0 13.7 -22.5
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.965725
2026-02-16T01:11:10.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:11:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:11:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:11:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:11:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:11:10.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:10:27', tmtdew=8.67, humidity=55.55, cloud=0.0, wind=26.26, temperature=13.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:11:02', seeing=2.73, atlas_timestamp='2026-02-15T23:10:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:07:00')
2026-02-16T01:11:10.809 [DEBUG] [Thread-214458] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:11:10.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:11:10.905 [DEBUG] [Thread-214462] [transport.py] [_log()] starting thread (client mode): 0xa2dc1180
2026-02-16T01:11:10.905 [DEBUG] [Thread-214462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:11:10.920 [DEBUG] [Thread-214462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:11:10.920 [INFO] [Thread-214462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] client lang: <none>
2026-02-16T01:11:10.931 [DEBUG] [Thread-214462] [transport.py] [_log()] server lang: <none>
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] kex follows: False
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] Compression: none
2026-02-16T01:11:10.932 [DEBUG] [Thread-214462] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:11:10.989 [DEBUG] [Thread-214462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:11:10.989 [DEBUG] [Thread-214462] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:11:10.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:11:10.991 [DEBUG] [Thread-214462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:11:10.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:11:11.045 [DEBUG] [Thread-214462] [transport.py] [_log()] userauth is OK
2026-02-16T01:11:11.046 [DEBUG] [Thread-214462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:11:11.046 [DEBUG] [Thread-214462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:11:11.046 [DEBUG] [Thread-214462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:11:11.046 [DEBUG] [Thread-214462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:11:11.066 [INFO] [Thread-214462] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:11:11.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:11:11.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:11:11.886 [DEBUG] [Thread-214462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:11:11.886 [DEBUG] [Thread-214462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:11:11.934 [DEBUG] [Thread-214462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:11:11.934 [DEBUG] [Thread-214462] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:11:11.942 [DEBUG] [Thread-214462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:11:11.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:11:11.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:11:11.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:11:11.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:11:11.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:11:11.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:11:11.976 [DEBUG] [Thread-214462] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:11:25.041 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:25.042 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:25.332 [DEBUG] [Thread-214464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:40.380 [DEBUG] [Thread-214465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:41.439 [DEBUG] [Thread-214466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:11:41.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:11:42.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:11:42.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:11:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 11, 2), 8.67, 55.57, 0.0, 24.17, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:11:43.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:11:02
2026-02-16T01:11:44.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:11:44.482 [DEBUG] [Thread-214467] [transport.py] [_log()] starting thread (client mode): 0xa2d6f430
2026-02-16T01:11:44.483 [DEBUG] [Thread-214467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:11:44.502 [DEBUG] [Thread-214467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:11:44.502 [INFO] [Thread-214467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:11:44.503 [DEBUG] [Thread-214467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:11:44.503 [DEBUG] [Thread-214467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:11:44.503 [DEBUG] [Thread-214467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:11:44.503 [DEBUG] [Thread-214467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:44.503 [DEBUG] [Thread-214467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] client lang: <none>
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] server lang: <none>
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] kex follows: False
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] Compression: none
2026-02-16T01:11:44.504 [DEBUG] [Thread-214467] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:11:44.524 [DEBUG] [Thread-214467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:11:44.524 [DEBUG] [Thread-214467] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:11:44.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:11:44.525 [DEBUG] [Thread-214467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:11:44.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:11:44.528 [DEBUG] [Thread-214467] [transport.py] [_log()] userauth is OK
2026-02-16T01:11:44.528 [DEBUG] [Thread-214467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:11:44.528 [DEBUG] [Thread-214467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:11:44.528 [DEBUG] [Thread-214467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:11:44.528 [DEBUG] [Thread-214467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:11:44.552 [INFO] [Thread-214467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:11:44.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:11:45.159 [DEBUG] [Thread-214467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:11:45.160 [DEBUG] [Thread-214467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:11:45.160 [DEBUG] [Thread-214467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:11:45.200 [DEBUG] [Thread-214467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:11:45.200 [DEBUG] [Thread-214467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:11:45.203 [DEBUG] [Thread-214467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:11:45.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:11:45.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:11:45.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:11:45.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:11:45.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:11:45.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:11:45.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:11:45.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:11:45.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:11:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.966073 -999.00  +13.30  17.25     60   +5.90 1 1 1 1 1     0    0 6.45 -37.31 ZNESW 18.1 17.2 148.8 21.5 13.7 -23.2 13.6 -22.0 13.4 -21.1 13.7 -22.2
2026-02-16T01:11:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:11:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:11:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.966073
2026-02-16T01:11:45.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:11:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:11:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:11:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:11:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:11:45.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:11:02', tmtdew=8.67, humidity=55.57, cloud=0.0, wind=24.17, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:11:38', seeing=2.73, atlas_timestamp='2026-02-15T23:11:08.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:07:00')
2026-02-16T01:11:45.231 [DEBUG] [Thread-214467] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:11:45.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:11:45.327 [DEBUG] [Thread-214470] [transport.py] [_log()] starting thread (client mode): 0xa2d020e0
2026-02-16T01:11:45.327 [DEBUG] [Thread-214470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:11:45.340 [DEBUG] [Thread-214470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:11:45.340 [INFO] [Thread-214470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:45.348 [DEBUG] [Thread-214470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] client lang: <none>
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] server lang: <none>
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] kex follows: False
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:11:45.349 [DEBUG] [Thread-214470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:11:45.350 [DEBUG] [Thread-214470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:11:45.350 [DEBUG] [Thread-214470] [transport.py] [_log()] Compression: none
2026-02-16T01:11:45.350 [DEBUG] [Thread-214470] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:11:45.405 [DEBUG] [Thread-214470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:11:45.406 [DEBUG] [Thread-214470] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:11:45.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:11:45.407 [DEBUG] [Thread-214470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:11:45.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:11:45.465 [DEBUG] [Thread-214470] [transport.py] [_log()] userauth is OK
2026-02-16T01:11:45.465 [DEBUG] [Thread-214470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:11:45.465 [DEBUG] [Thread-214470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:11:45.466 [DEBUG] [Thread-214470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:11:45.466 [DEBUG] [Thread-214470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:11:45.485 [INFO] [Thread-214470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:11:45.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:11:45.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:11:46.315 [DEBUG] [Thread-214470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:11:46.316 [DEBUG] [Thread-214470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:11:46.363 [DEBUG] [Thread-214470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:11:46.364 [DEBUG] [Thread-214470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:11:46.373 [DEBUG] [Thread-214470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:11:46.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:11:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:11:46.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:11:46.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:11:46.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:11:46.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:11:46.410 [DEBUG] [Thread-214470] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:11:55.414 [DEBUG] [Thread-214472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:10.471 [DEBUG] [Thread-214473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:12:16.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:12:16.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:12:16.467 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 11, 37), 8.84, 55.14, 0.0, 23.29, 13.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:12:18.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:11:37
2026-02-16T01:12:18.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:12:19.152 [DEBUG] [Thread-214474] [transport.py] [_log()] starting thread (client mode): 0xa2d00070
2026-02-16T01:12:19.152 [DEBUG] [Thread-214474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:12:19.172 [DEBUG] [Thread-214474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:12:19.172 [INFO] [Thread-214474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:12:19.175 [DEBUG] [Thread-214474] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:12:19.175 [DEBUG] [Thread-214474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:12:19.175 [DEBUG] [Thread-214474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:12:19.175 [DEBUG] [Thread-214474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] client lang: <none>
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] server lang: <none>
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] kex follows: False
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] Compression: none
2026-02-16T01:12:19.176 [DEBUG] [Thread-214474] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:12:19.193 [DEBUG] [Thread-214474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:12:19.194 [DEBUG] [Thread-214474] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:12:19.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:12:19.195 [DEBUG] [Thread-214474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:12:19.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:12:19.197 [DEBUG] [Thread-214474] [transport.py] [_log()] userauth is OK
2026-02-16T01:12:19.198 [DEBUG] [Thread-214474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:12:19.198 [DEBUG] [Thread-214474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:12:19.198 [DEBUG] [Thread-214474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:12:19.198 [DEBUG] [Thread-214474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:12:19.235 [INFO] [Thread-214474] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:12:19.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:12:19.871 [DEBUG] [Thread-214474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:12:19.872 [DEBUG] [Thread-214474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:12:19.872 [DEBUG] [Thread-214474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:12:19.912 [DEBUG] [Thread-214474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:12:19.913 [DEBUG] [Thread-214474] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:12:19.916 [DEBUG] [Thread-214474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:12:19.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:12:19.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:12:19.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:12:19.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:12:19.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:12:19.941 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:12:19.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:12:19.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:12:19.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:12:19.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.966420 -999.00  +13.30  18.75     61   +6.00 1 1 1 1 1     0    0 6.61 -36.24 ZNESW 13.0 18.8 156.6 22.8 13.7 -23.3 13.6 -22.2 13.4 -21.3 13.6 -22.4
2026-02-16T01:12:19.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:12:19.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:12:19.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.966420
2026-02-16T01:12:19.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:12:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:12:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:12:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:12:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:12:19.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:11:37', tmtdew=8.84, humidity=55.14, cloud=0.0, wind=23.29, temperature=13.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:12:13', seeing=2.37, atlas_timestamp='2026-02-15T23:11:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03524999999999956, 0.019249999999999545, -0.05524999999999913, -0.061500000000000554, -0.038000000000000256, 0.01025000000000098, 0.022999999999999687, 0.015250000000001762, 0.05149999999999899, 0.0600000000000005, -0.015750000000000597, -0.03500000000000014, 0.04499999999999993, 0.01624999999999943, -0.0129999999999999, 0.019999999999999574, 0.017250000000000654, 0.0035000000000007248, 0.019999999999999574, -0.007750000000001478, 0.07099999999999795, 0.031249999999998224, 0.006250000000001421, 0.036749999999999616, 0.0669999999999984, -0.0235000000000003, 0.014749999999999375, 0.008000000000000895, 0.07150000000000034, -0.03500000000000014, 0.07700000000000173, 0.05400000000000027, 0.008749999999999147], zp_timestamp='2026-02-15T23:07:00')
2026-02-16T01:12:19.944 [DEBUG] [Thread-214474] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:12:20.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:12:20.036 [DEBUG] [Thread-214477] [transport.py] [_log()] starting thread (client mode): 0xa57b23e0
2026-02-16T01:12:20.036 [DEBUG] [Thread-214477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:12:20.054 [DEBUG] [Thread-214477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:12:20.055 [INFO] [Thread-214477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:12:20.062 [DEBUG] [Thread-214477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:12:20.063 [DEBUG] [Thread-214477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:12:20.063 [DEBUG] [Thread-214477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:12:20.063 [DEBUG] [Thread-214477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] client lang: <none>
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] server lang: <none>
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] kex follows: False
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:12:20.064 [DEBUG] [Thread-214477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:12:20.065 [DEBUG] [Thread-214477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:12:20.065 [DEBUG] [Thread-214477] [transport.py] [_log()] Compression: none
2026-02-16T01:12:20.065 [DEBUG] [Thread-214477] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:12:20.122 [DEBUG] [Thread-214477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:12:20.122 [DEBUG] [Thread-214477] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:12:20.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:12:20.123 [DEBUG] [Thread-214477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:12:20.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:12:20.178 [DEBUG] [Thread-214477] [transport.py] [_log()] userauth is OK
2026-02-16T01:12:20.179 [DEBUG] [Thread-214477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:12:20.179 [DEBUG] [Thread-214477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:12:20.179 [DEBUG] [Thread-214477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:12:20.179 [DEBUG] [Thread-214477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:12:20.198 [INFO] [Thread-214477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:12:20.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:12:20.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:12:21.000 [DEBUG] [Thread-214477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:12:21.000 [DEBUG] [Thread-214477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:12:21.048 [DEBUG] [Thread-214477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:12:21.048 [DEBUG] [Thread-214477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:12:21.058 [DEBUG] [Thread-214477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:12:21.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:12:21.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:12:21.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:12:21.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:12:21.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:12:21.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:12:21.095 [DEBUG] [Thread-214477] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:12:25.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:25.243 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:25.315 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:25.505 [DEBUG] [Thread-214479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:29.410 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:40.546 [DEBUG] [Thread-214480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:41.505 [DEBUG] [Thread-214481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:51.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:12:51.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:12:51.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:12:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 12, 13), 8.64, 55.69, 0.0, 22.48, 13.53, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:12:53.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:12:13
2026-02-16T01:12:54.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:12:54.220 [DEBUG] [Thread-214482] [transport.py] [_log()] starting thread (client mode): 0xa57e04c0
2026-02-16T01:12:54.221 [DEBUG] [Thread-214482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:12:54.243 [DEBUG] [Thread-214482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:12:54.243 [INFO] [Thread-214482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:12:54.246 [DEBUG] [Thread-214482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:12:54.246 [DEBUG] [Thread-214482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] client lang: <none>
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] server lang: <none>
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] kex follows: False
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:12:54.247 [DEBUG] [Thread-214482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:12:54.248 [DEBUG] [Thread-214482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:12:54.248 [DEBUG] [Thread-214482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:12:54.248 [DEBUG] [Thread-214482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:12:54.248 [DEBUG] [Thread-214482] [transport.py] [_log()] Compression: none
2026-02-16T01:12:54.248 [DEBUG] [Thread-214482] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:12:54.265 [DEBUG] [Thread-214482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:12:54.265 [DEBUG] [Thread-214482] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:12:54.266 [DEBUG] [Thread-214482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:12:54.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:12:54.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:12:54.268 [DEBUG] [Thread-214482] [transport.py] [_log()] userauth is OK
2026-02-16T01:12:54.268 [DEBUG] [Thread-214482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:12:54.268 [DEBUG] [Thread-214482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:12:54.268 [DEBUG] [Thread-214482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:12:54.268 [DEBUG] [Thread-214482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:12:54.291 [INFO] [Thread-214482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:12:54.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:12:55.091 [DEBUG] [Thread-214482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:12:55.092 [DEBUG] [Thread-214482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:12:55.092 [DEBUG] [Thread-214482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:12:55.132 [DEBUG] [Thread-214482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:12:55.132 [DEBUG] [Thread-214482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:12:55.136 [DEBUG] [Thread-214482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:12:55.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:12:55.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:12:55.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:12:55.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:12:55.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:12:55.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:12:55.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:12:55.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:12:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:12:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.966767 -999.00  +13.30  19.88     61   +6.00 1 1 1 1 1     0    0 6.68 -36.37 ZNESW 20.9 19.9 153.8 24.7 13.7 -23.3 13.6 -22.2 13.4 -21.1 13.7 -22.4
2026-02-16T01:12:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:12:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:12:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.966767
2026-02-16T01:12:55.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:12:55.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:12:55.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:12:55.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:12:55.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:12:55.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:12:13', tmtdew=8.64, humidity=55.69, cloud=0.0, wind=22.48, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:12:49', seeing=1.84, atlas_timestamp='2026-02-15T23:12:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03825000000000145, -0.01574999999999882, -0.07824999999999882, -0.06750000000000078, -0.04449999999999932, 0.015249999999999986, 0.02999999999999936, 0.02725000000000044, 0.021999999999998465, 0.040500000000001535, -0.05075000000000074, -0.010500000000000398, 0.047999999999998266, 0.025750000000000384, -0.02200000000000024, 0.03449999999999953, 0.03325000000000067, -0.008000000000000895, 0.010999999999999233, 0.006249999999997868, 0.03999999999999915, 0.048749999999998295, 0.03225000000000122, 0.027749999999999275, 0.03799999999999848, -0.019499999999998963, 0.03074999999999939, -0.02149999999999963, -0.0034999999999989484, -0.05999999999999872, 0.05000000000000071, 0.04200000000000159, 0.02674999999999983], zp_timestamp='2026-02-15T23:11:00')
2026-02-16T01:12:55.162 [DEBUG] [Thread-214482] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:12:55.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:12:55.257 [DEBUG] [Thread-214485] [transport.py] [_log()] starting thread (client mode): 0xa2d131c0
2026-02-16T01:12:55.258 [DEBUG] [Thread-214485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:12:55.272 [DEBUG] [Thread-214485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:12:55.272 [INFO] [Thread-214485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] client lang: <none>
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] server lang: <none>
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] kex follows: False
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:12:55.280 [DEBUG] [Thread-214485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:12:55.281 [DEBUG] [Thread-214485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:12:55.281 [DEBUG] [Thread-214485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:12:55.281 [DEBUG] [Thread-214485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:12:55.281 [DEBUG] [Thread-214485] [transport.py] [_log()] Compression: none
2026-02-16T01:12:55.281 [DEBUG] [Thread-214485] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:12:55.338 [DEBUG] [Thread-214485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:12:55.338 [DEBUG] [Thread-214485] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:12:55.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:12:55.340 [DEBUG] [Thread-214485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:12:55.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:12:55.394 [DEBUG] [Thread-214485] [transport.py] [_log()] userauth is OK
2026-02-16T01:12:55.394 [DEBUG] [Thread-214485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:12:55.394 [DEBUG] [Thread-214485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:12:55.394 [DEBUG] [Thread-214485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:12:55.394 [DEBUG] [Thread-214485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:12:55.414 [INFO] [Thread-214485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:12:55.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:12:55.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:12:55.585 [DEBUG] [Thread-214487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:12:56.223 [DEBUG] [Thread-214485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:12:56.224 [DEBUG] [Thread-214485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:12:56.271 [DEBUG] [Thread-214485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:12:56.272 [DEBUG] [Thread-214485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:12:56.281 [DEBUG] [Thread-214485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:12:56.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:12:56.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:12:56.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:12:56.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:12:56.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:12:56.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:12:56.318 [DEBUG] [Thread-214485] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:13:10.650 [DEBUG] [Thread-214488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:25.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:25.443 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:25.690 [DEBUG] [Thread-214489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:26.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:13:26.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:13:26.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:13:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 12, 48), 8.59, 55.82, 0.0, 22.25, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:13:28.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:12:48
2026-02-16T01:13:28.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:13:28.976 [DEBUG] [Thread-214490] [transport.py] [_log()] starting thread (client mode): 0xa2d57a90
2026-02-16T01:13:28.976 [DEBUG] [Thread-214490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:13:28.999 [DEBUG] [Thread-214490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:13:28.999 [INFO] [Thread-214490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] client lang: <none>
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] server lang: <none>
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] kex follows: False
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] Compression: none
2026-02-16T01:13:29.001 [DEBUG] [Thread-214490] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:13:29.017 [DEBUG] [Thread-214490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:13:29.018 [DEBUG] [Thread-214490] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:13:29.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:13:29.019 [DEBUG] [Thread-214490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:13:29.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:13:29.021 [DEBUG] [Thread-214490] [transport.py] [_log()] userauth is OK
2026-02-16T01:13:29.021 [DEBUG] [Thread-214490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:13:29.021 [DEBUG] [Thread-214490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:13:29.021 [DEBUG] [Thread-214490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:13:29.021 [DEBUG] [Thread-214490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:13:29.047 [INFO] [Thread-214490] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:13:29.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:13:29.917 [DEBUG] [Thread-214490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:13:29.917 [DEBUG] [Thread-214490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:13:29.918 [DEBUG] [Thread-214490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:13:29.958 [DEBUG] [Thread-214490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:13:29.959 [DEBUG] [Thread-214490] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:13:29.962 [DEBUG] [Thread-214490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:13:29.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:13:29.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:13:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:13:29.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:13:29.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:13:29.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:13:29.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:13:29.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:13:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:13:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.967114 -999.00  +13.30  17.16     61   +6.00 1 1 1 1 1     0    0 6.52 -37.16 ZNESW 20.2 17.2 159.4 24.4 13.7 -23.1 13.6 -22.1 13.4 -20.9 13.7 -22.2
2026-02-16T01:13:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:13:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:13:29.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.967114
2026-02-16T01:13:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:13:29.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:13:29.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:13:29.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:13:29.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:13:29.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:12:48', tmtdew=8.59, humidity=55.82, cloud=0.0, wind=22.25, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:13:25', seeing=2.37, atlas_timestamp='2026-02-15T23:12:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03825000000000145, -0.01574999999999882, -0.07824999999999882, -0.06750000000000078, -0.04449999999999932, 0.015249999999999986, 0.02999999999999936, 0.02725000000000044, 0.021999999999998465, 0.040500000000001535, -0.05075000000000074, -0.010500000000000398, 0.047999999999998266, 0.025750000000000384, -0.02200000000000024, 0.03449999999999953, 0.03325000000000067, -0.008000000000000895, 0.010999999999999233, 0.006249999999997868, 0.03999999999999915, 0.048749999999998295, 0.03225000000000122, 0.027749999999999275, 0.03799999999999848, -0.019499999999998963, 0.03074999999999939, -0.02149999999999963, -0.0034999999999989484, -0.05999999999999872, 0.05000000000000071, 0.04200000000000159, 0.02674999999999983], zp_timestamp='2026-02-15T23:11:00')
2026-02-16T01:13:29.988 [DEBUG] [Thread-214490] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:13:30.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:13:30.084 [DEBUG] [Thread-214493] [transport.py] [_log()] starting thread (client mode): 0xa81d5270
2026-02-16T01:13:30.084 [DEBUG] [Thread-214493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:13:30.102 [DEBUG] [Thread-214493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:13:30.102 [INFO] [Thread-214493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:13:30.110 [DEBUG] [Thread-214493] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] client lang: <none>
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] server lang: <none>
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] kex follows: False
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:13:30.111 [DEBUG] [Thread-214493] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:13:30.112 [DEBUG] [Thread-214493] [transport.py] [_log()] Compression: none
2026-02-16T01:13:30.112 [DEBUG] [Thread-214493] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:13:30.171 [DEBUG] [Thread-214493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:13:30.171 [DEBUG] [Thread-214493] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:13:30.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:13:30.173 [DEBUG] [Thread-214493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:13:30.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:13:30.230 [DEBUG] [Thread-214493] [transport.py] [_log()] userauth is OK
2026-02-16T01:13:30.231 [DEBUG] [Thread-214493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:13:30.231 [DEBUG] [Thread-214493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:13:30.231 [DEBUG] [Thread-214493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:13:30.231 [DEBUG] [Thread-214493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:13:30.250 [INFO] [Thread-214493] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:13:30.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:13:30.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:13:31.086 [DEBUG] [Thread-214493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:13:31.086 [DEBUG] [Thread-214493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:13:31.134 [DEBUG] [Thread-214493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:13:31.135 [DEBUG] [Thread-214493] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:13:31.144 [DEBUG] [Thread-214493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:13:31.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:13:31.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:13:31.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:13:31.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:13:31.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:13:31.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:13:31.182 [DEBUG] [Thread-214493] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:13:40.726 [DEBUG] [Thread-214495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:41.557 [DEBUG] [Thread-214496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:51.962 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:13:55.780 [DEBUG] [Thread-214497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:01.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:14:01.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:14:01.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:14:03.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 13, 24), 8.57, 55.92, 0.0, 23.86, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:14:03.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:13:24
2026-02-16T01:14:03.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:14:03.906 [DEBUG] [Thread-214498] [transport.py] [_log()] starting thread (client mode): 0xa2d02b00
2026-02-16T01:14:03.906 [DEBUG] [Thread-214498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:14:03.926 [DEBUG] [Thread-214498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:14:03.926 [INFO] [Thread-214498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:03.929 [DEBUG] [Thread-214498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] client lang: <none>
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] server lang: <none>
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] kex follows: False
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] Compression: none
2026-02-16T01:14:03.930 [DEBUG] [Thread-214498] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:14:03.949 [DEBUG] [Thread-214498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:14:03.949 [DEBUG] [Thread-214498] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:14:03.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:14:03.951 [DEBUG] [Thread-214498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:14:03.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:14:03.953 [DEBUG] [Thread-214498] [transport.py] [_log()] userauth is OK
2026-02-16T01:14:03.954 [DEBUG] [Thread-214498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:14:03.954 [DEBUG] [Thread-214498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:14:03.954 [DEBUG] [Thread-214498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:14:03.955 [DEBUG] [Thread-214498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:14:03.978 [INFO] [Thread-214498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:14:03.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:14:04.642 [DEBUG] [Thread-214498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:14:04.642 [DEBUG] [Thread-214498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:14:04.642 [DEBUG] [Thread-214498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:14:04.682 [DEBUG] [Thread-214498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:14:04.682 [DEBUG] [Thread-214498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:14:04.686 [DEBUG] [Thread-214498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:14:04.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:14:04.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:14:04.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:14:04.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:14:04.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:14:04.712 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:14:04.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:14:04.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:14:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:14:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.967461 -999.00  +13.40  22.07     61   +6.00 1 1 1 1 1     0    0 6.40 -37.87 ZNESW 21.9 22.1 141.2 27.8 13.7 -23.3 13.6 -22.1 13.4 -21.2 13.7 -22.2
2026-02-16T01:14:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:14:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:14:04.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.967461
2026-02-16T01:14:04.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:14:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:14:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:14:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:14:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:14:04.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:13:24', tmtdew=8.57, humidity=55.92, cloud=0.0, wind=23.86, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:14:00', seeing=2.26, atlas_timestamp='2026-02-15T23:13:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03825000000000145, -0.01574999999999882, -0.07824999999999882, -0.06750000000000078, -0.04449999999999932, 0.015249999999999986, 0.02999999999999936, 0.02725000000000044, 0.021999999999998465, 0.040500000000001535, -0.05075000000000074, -0.010500000000000398, 0.047999999999998266, 0.025750000000000384, -0.02200000000000024, 0.03449999999999953, 0.03325000000000067, -0.008000000000000895, 0.010999999999999233, 0.006249999999997868, 0.03999999999999915, 0.048749999999998295, 0.03225000000000122, 0.027749999999999275, 0.03799999999999848, -0.019499999999998963, 0.03074999999999939, -0.02149999999999963, -0.0034999999999989484, -0.05999999999999872, 0.05000000000000071, 0.04200000000000159, 0.02674999999999983], zp_timestamp='2026-02-15T23:11:00')
2026-02-16T01:14:04.715 [DEBUG] [Thread-214498] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:14:04.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:14:04.817 [DEBUG] [Thread-214501] [transport.py] [_log()] starting thread (client mode): 0xa2d26230
2026-02-16T01:14:04.817 [DEBUG] [Thread-214501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:14:04.832 [DEBUG] [Thread-214501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:14:04.832 [INFO] [Thread-214501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:14:04.839 [DEBUG] [Thread-214501] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:14:04.840 [DEBUG] [Thread-214501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:14:04.840 [DEBUG] [Thread-214501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:14:04.840 [DEBUG] [Thread-214501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] client lang: <none>
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] server lang: <none>
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] kex follows: False
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] Compression: none
2026-02-16T01:14:04.841 [DEBUG] [Thread-214501] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:14:04.898 [DEBUG] [Thread-214501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:14:04.899 [DEBUG] [Thread-214501] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:14:04.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:14:04.900 [DEBUG] [Thread-214501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:14:04.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:14:04.954 [DEBUG] [Thread-214501] [transport.py] [_log()] userauth is OK
2026-02-16T01:14:04.955 [DEBUG] [Thread-214501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:14:04.955 [DEBUG] [Thread-214501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:14:04.955 [DEBUG] [Thread-214501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:14:04.955 [DEBUG] [Thread-214501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:14:04.973 [INFO] [Thread-214501] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:14:04.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:14:04.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:14:05.760 [DEBUG] [Thread-214501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:14:05.760 [DEBUG] [Thread-214501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:14:05.808 [DEBUG] [Thread-214501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:14:05.808 [DEBUG] [Thread-214501] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:14:05.818 [DEBUG] [Thread-214501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:14:05.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:14:05.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:14:05.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:14:05.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:14:05.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:14:05.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:14:05.855 [DEBUG] [Thread-214501] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:14:10.817 [DEBUG] [Thread-214503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:25.646 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:25.647 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:25.878 [DEBUG] [Thread-214504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:35.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:14:35.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:14:35.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:14:38.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 13, 24), 8.57, 55.92, 0.0, 23.86, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:14:38.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:13:24
2026-02-16T01:14:38.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:14:38.941 [DEBUG] [Thread-214505] [transport.py] [_log()] starting thread (client mode): 0xa2dc0130
2026-02-16T01:14:38.942 [DEBUG] [Thread-214505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:14:38.961 [DEBUG] [Thread-214505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:14:38.961 [INFO] [Thread-214505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] client lang: <none>
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] server lang: <none>
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] kex follows: False
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:14:38.965 [DEBUG] [Thread-214505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:14:38.966 [DEBUG] [Thread-214505] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:14:38.966 [DEBUG] [Thread-214505] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:14:38.966 [DEBUG] [Thread-214505] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:14:38.966 [DEBUG] [Thread-214505] [transport.py] [_log()] Compression: none
2026-02-16T01:14:38.966 [DEBUG] [Thread-214505] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:14:38.984 [DEBUG] [Thread-214505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:14:38.985 [DEBUG] [Thread-214505] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:14:38.985 [DEBUG] [Thread-214505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:14:38.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:14:38.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:14:38.988 [DEBUG] [Thread-214505] [transport.py] [_log()] userauth is OK
2026-02-16T01:14:38.988 [DEBUG] [Thread-214505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:14:38.988 [DEBUG] [Thread-214505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:14:38.988 [DEBUG] [Thread-214505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:14:38.988 [DEBUG] [Thread-214505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:14:39.012 [INFO] [Thread-214505] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:14:39.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:14:39.629 [DEBUG] [Thread-214505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:14:39.630 [DEBUG] [Thread-214505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:14:39.630 [DEBUG] [Thread-214505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:14:39.670 [DEBUG] [Thread-214505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:14:39.671 [DEBUG] [Thread-214505] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:14:39.674 [DEBUG] [Thread-214505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:14:39.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:14:39.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:14:39.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:14:39.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:14:39.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:14:39.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:14:39.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:14:39.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:14:39.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:14:39.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.968156 -999.00  +13.30  14.96     61   +6.00 1 1 1 1 1     0    0 6.63 -36.31 ZNESW 13.6 15.0 151.8 23.2 13.7 -23.3 13.6 -22.2 13.3 -21.1 13.6 -22.3
2026-02-16T01:14:39.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:14:39.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:14:39.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.968156
2026-02-16T01:14:39.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:14:39.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:14:39.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:14:39.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:14:39.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:14:39.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:13:24', tmtdew=8.57, humidity=55.92, cloud=0.0, wind=23.86, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:14:00', seeing=2.26, atlas_timestamp='2026-02-15T23:14:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03825000000000145, -0.01574999999999882, -0.07824999999999882, -0.06750000000000078, -0.04449999999999932, 0.015249999999999986, 0.02999999999999936, 0.02725000000000044, 0.021999999999998465, 0.040500000000001535, -0.05075000000000074, -0.010500000000000398, 0.047999999999998266, 0.025750000000000384, -0.02200000000000024, 0.03449999999999953, 0.03325000000000067, -0.008000000000000895, 0.010999999999999233, 0.006249999999997868, 0.03999999999999915, 0.048749999999998295, 0.03225000000000122, 0.027749999999999275, 0.03799999999999848, -0.019499999999998963, 0.03074999999999939, -0.02149999999999963, -0.0034999999999989484, -0.05999999999999872, 0.05000000000000071, 0.04200000000000159, 0.02674999999999983], zp_timestamp='2026-02-15T23:11:00')
2026-02-16T01:14:39.702 [DEBUG] [Thread-214505] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:14:39.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:14:39.808 [DEBUG] [Thread-214508] [transport.py] [_log()] starting thread (client mode): 0xa2d11b10
2026-02-16T01:14:39.808 [DEBUG] [Thread-214508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:14:39.822 [DEBUG] [Thread-214508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:14:39.822 [INFO] [Thread-214508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:14:39.829 [DEBUG] [Thread-214508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] client lang: <none>
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] server lang: <none>
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] kex follows: False
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:14:39.830 [DEBUG] [Thread-214508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:14:39.831 [DEBUG] [Thread-214508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:14:39.831 [DEBUG] [Thread-214508] [transport.py] [_log()] Compression: none
2026-02-16T01:14:39.831 [DEBUG] [Thread-214508] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:14:39.892 [DEBUG] [Thread-214508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:14:39.892 [DEBUG] [Thread-214508] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:14:39.893 [DEBUG] [Thread-214508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:14:39.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:14:39.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:14:39.957 [DEBUG] [Thread-214508] [transport.py] [_log()] userauth is OK
2026-02-16T01:14:39.957 [DEBUG] [Thread-214508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:14:39.957 [DEBUG] [Thread-214508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:14:39.957 [DEBUG] [Thread-214508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:14:39.958 [DEBUG] [Thread-214508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:14:39.978 [INFO] [Thread-214508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:14:39.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:14:39.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:14:40.785 [DEBUG] [Thread-214508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:14:40.785 [DEBUG] [Thread-214508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:14:40.833 [DEBUG] [Thread-214508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:14:40.833 [DEBUG] [Thread-214508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:14:40.842 [DEBUG] [Thread-214508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:14:40.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:14:40.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:14:40.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:14:40.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:14:40.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:14:40.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:14:40.879 [DEBUG] [Thread-214508] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:14:40.914 [DEBUG] [Thread-214510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:41.613 [DEBUG] [Thread-214511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:14:55.967 [DEBUG] [Thread-214512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:06.925 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:10.046 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:10.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:15:10.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:15:10.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:15:11.003 [DEBUG] [Thread-214513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:12.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 14, 35), 8.48, 56.47, 0.0, 24.49, 13.53, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:15:12.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:14:35
2026-02-16T01:15:13.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:15:13.580 [DEBUG] [Thread-214514] [transport.py] [_log()] starting thread (client mode): 0xa57e3910
2026-02-16T01:15:13.580 [DEBUG] [Thread-214514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:15:13.601 [DEBUG] [Thread-214514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:15:13.601 [INFO] [Thread-214514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] client lang: <none>
2026-02-16T01:15:13.604 [DEBUG] [Thread-214514] [transport.py] [_log()] server lang: <none>
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] kex follows: False
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] Compression: none
2026-02-16T01:15:13.605 [DEBUG] [Thread-214514] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:15:13.622 [DEBUG] [Thread-214514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:15:13.623 [DEBUG] [Thread-214514] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:15:13.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:15:13.624 [DEBUG] [Thread-214514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:15:13.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:15:13.626 [DEBUG] [Thread-214514] [transport.py] [_log()] userauth is OK
2026-02-16T01:15:13.626 [DEBUG] [Thread-214514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:15:13.626 [DEBUG] [Thread-214514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:15:13.627 [DEBUG] [Thread-214514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:15:13.627 [DEBUG] [Thread-214514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:15:13.650 [INFO] [Thread-214514] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:15:13.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:15:15.081 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:19.039 [DEBUG] [Thread-214514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:15:19.039 [DEBUG] [Thread-214514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:15:19.040 [DEBUG] [Thread-214514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:15:19.080 [DEBUG] [Thread-214514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:15:19.080 [DEBUG] [Thread-214514] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:15:19.084 [DEBUG] [Thread-214514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:15:19.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:15:19.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:15:19.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:15:19.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:15:19.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:15:19.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:15:19.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:15:19.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:15:19.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:15:19.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.968503 -999.00  +13.30  15.55     61   +6.00 1 1 1 1 1     0    0 6.56 -35.05 ZNESW 11.8 15.6 158.4 19.7 13.7 -23.4 13.6 -22.3 13.3 -21.2 13.6 -22.5
2026-02-16T01:15:19.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:15:19.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:15:19.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.968503
2026-02-16T01:15:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:15:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:15:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:15:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:15:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:15:19.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:14:35', tmtdew=8.48, humidity=56.47, cloud=0.0, wind=24.49, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:14:36', seeing=1.89, atlas_timestamp='2026-02-15T23:14:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03825000000000145, -0.01574999999999882, -0.07824999999999882, -0.06750000000000078, -0.04449999999999932, 0.015249999999999986, 0.02999999999999936, 0.02725000000000044, 0.021999999999998465, 0.040500000000001535, -0.05075000000000074, -0.010500000000000398, 0.047999999999998266, 0.025750000000000384, -0.02200000000000024, 0.03449999999999953, 0.03325000000000067, -0.008000000000000895, 0.010999999999999233, 0.006249999999997868, 0.03999999999999915, 0.048749999999998295, 0.03225000000000122, 0.027749999999999275, 0.03799999999999848, -0.019499999999998963, 0.03074999999999939, -0.02149999999999963, -0.0034999999999989484, -0.05999999999999872, 0.05000000000000071, 0.04200000000000159, 0.02674999999999983], zp_timestamp='2026-02-15T23:11:00')
2026-02-16T01:15:19.225 [DEBUG] [Thread-214514] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:15:19.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:15:19.319 [DEBUG] [Thread-214517] [transport.py] [_log()] starting thread (client mode): 0xa2d10640
2026-02-16T01:15:19.319 [DEBUG] [Thread-214517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:15:19.334 [DEBUG] [Thread-214517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:15:19.334 [INFO] [Thread-214517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] client lang: <none>
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] server lang: <none>
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] kex follows: False
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] Compression: none
2026-02-16T01:15:19.342 [DEBUG] [Thread-214517] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:15:19.397 [DEBUG] [Thread-214517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:15:19.397 [DEBUG] [Thread-214517] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:15:19.397 [DEBUG] [Thread-214517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:15:19.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:15:19.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:15:19.454 [DEBUG] [Thread-214517] [transport.py] [_log()] userauth is OK
2026-02-16T01:15:19.454 [DEBUG] [Thread-214517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:15:19.454 [DEBUG] [Thread-214517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:15:19.454 [DEBUG] [Thread-214517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:15:19.454 [DEBUG] [Thread-214517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:15:19.468 [INFO] [Thread-214517] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:15:19.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:15:19.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:15:20.349 [DEBUG] [Thread-214517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:15:20.349 [DEBUG] [Thread-214517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:15:20.396 [DEBUG] [Thread-214517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:15:20.397 [DEBUG] [Thread-214517] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:15:20.406 [DEBUG] [Thread-214517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:15:20.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:15:20.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:15:20.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:15:20.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:15:20.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:15:20.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:15:20.442 [DEBUG] [Thread-214517] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:15:21.473 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:25.847 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:25.847 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:26.037 [DEBUG] [Thread-214519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:39.921 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:41.086 [DEBUG] [Thread-214520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:41.699 [DEBUG] [Thread-214521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:44.313 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:15:50.460 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:15:50.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:15:52.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 15, 11), 8.4, 56.7, 0.0, 23.1, 13.31, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:15:52.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:15:11
2026-02-16T01:15:52.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:15:52.997 [DEBUG] [Thread-214522] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-16T01:15:52.997 [DEBUG] [Thread-214522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:15:53.016 [DEBUG] [Thread-214522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:15:53.017 [INFO] [Thread-214522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] client lang: <none>
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] server lang: <none>
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] kex follows: False
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] Compression: none
2026-02-16T01:15:53.020 [DEBUG] [Thread-214522] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:15:53.034 [DEBUG] [Thread-214522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:15:53.034 [DEBUG] [Thread-214522] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:15:53.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:15:53.035 [DEBUG] [Thread-214522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:15:53.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:15:53.035 [DEBUG] [Thread-214522] [transport.py] [_log()] userauth is OK
2026-02-16T01:15:53.035 [DEBUG] [Thread-214522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:15:53.035 [DEBUG] [Thread-214522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:15:53.035 [DEBUG] [Thread-214522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:15:53.035 [DEBUG] [Thread-214522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:15:53.052 [INFO] [Thread-214522] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:15:53.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:15:53.665 [DEBUG] [Thread-214522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:15:53.665 [DEBUG] [Thread-214522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:15:53.665 [DEBUG] [Thread-214522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:15:53.704 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:53.706 [DEBUG] [Thread-214522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:15:53.706 [DEBUG] [Thread-214522] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:15:53.708 [DEBUG] [Thread-214522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:15:53.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:15:53.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:15:53.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:15:53.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:15:53.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:15:53.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:15:53.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:15:53.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.968850 -999.00  +13.20  16.43     61   +6.00 1 1 1 1 1     0    0 6.45 -35.19 ZNESW 14.6 16.4 150.4 21.2 13.7 -23.2 13.6 -22.2 13.3 -21.1 13.6 -22.3
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.968850
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:15:53.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:15:11', tmtdew=8.4, humidity=56.7, cloud=0.0, wind=23.1, temperature=13.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:15:47', seeing=2.01, atlas_timestamp='2026-02-15T23:15:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:14:00')
2026-02-16T01:15:53.727 [DEBUG] [Thread-214522] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:15:53.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:15:53.818 [DEBUG] [Thread-214525] [transport.py] [_log()] starting thread (client mode): 0xa2d02cb0
2026-02-16T01:15:53.819 [DEBUG] [Thread-214525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:15:53.833 [DEBUG] [Thread-214525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:15:53.833 [INFO] [Thread-214525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] client lang: <none>
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] server lang: <none>
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] kex follows: False
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] Compression: none
2026-02-16T01:15:53.841 [DEBUG] [Thread-214525] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:15:53.897 [DEBUG] [Thread-214525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:15:53.897 [DEBUG] [Thread-214525] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:15:53.897 [DEBUG] [Thread-214525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:15:53.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:15:53.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:15:53.955 [DEBUG] [Thread-214525] [transport.py] [_log()] userauth is OK
2026-02-16T01:15:53.956 [DEBUG] [Thread-214525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:15:53.956 [DEBUG] [Thread-214525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:15:53.956 [DEBUG] [Thread-214525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:15:53.956 [DEBUG] [Thread-214525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:15:53.979 [INFO] [Thread-214525] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:15:53.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:15:53.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:15:54.792 [DEBUG] [Thread-214525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:15:54.792 [DEBUG] [Thread-214525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:15:54.840 [DEBUG] [Thread-214525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:15:54.841 [DEBUG] [Thread-214525] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:15:54.850 [DEBUG] [Thread-214525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:15:54.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:15:54.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:15:54.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:15:54.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:15:54.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:15:54.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:15:54.887 [DEBUG] [Thread-214525] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:15:56.121 [DEBUG] [Thread-214527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:15:58.078 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:04.218 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:08.595 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:11.191 [DEBUG] [Thread-214528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:16:24.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:16:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:16:26.051 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:26.053 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:26.228 [DEBUG] [Thread-214529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 15, 47), 8.35, 56.87, 0.0, 19.97, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:16:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:15:47
2026-02-16T01:16:27.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:16:27.482 [DEBUG] [Thread-214530] [transport.py] [_log()] starting thread (client mode): 0xa2dc3520
2026-02-16T01:16:27.482 [DEBUG] [Thread-214530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:16:27.502 [DEBUG] [Thread-214530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:16:27.502 [INFO] [Thread-214530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] client lang: <none>
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] server lang: <none>
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] kex follows: False
2026-02-16T01:16:27.505 [DEBUG] [Thread-214530] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:16:27.506 [DEBUG] [Thread-214530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:16:27.506 [DEBUG] [Thread-214530] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:16:27.506 [DEBUG] [Thread-214530] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:16:27.506 [DEBUG] [Thread-214530] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:16:27.506 [DEBUG] [Thread-214530] [transport.py] [_log()] Compression: none
2026-02-16T01:16:27.506 [DEBUG] [Thread-214530] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:16:27.523 [DEBUG] [Thread-214530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:16:27.523 [DEBUG] [Thread-214530] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:16:27.524 [DEBUG] [Thread-214530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:16:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:16:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:16:27.525 [DEBUG] [Thread-214530] [transport.py] [_log()] userauth is OK
2026-02-16T01:16:27.526 [DEBUG] [Thread-214530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:16:27.526 [DEBUG] [Thread-214530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:16:27.526 [DEBUG] [Thread-214530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:16:27.526 [DEBUG] [Thread-214530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:16:27.550 [INFO] [Thread-214530] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:16:27.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:16:28.172 [DEBUG] [Thread-214530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:16:28.172 [DEBUG] [Thread-214530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:16:28.173 [DEBUG] [Thread-214530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:16:28.213 [DEBUG] [Thread-214530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:16:28.214 [DEBUG] [Thread-214530] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:16:28.217 [DEBUG] [Thread-214530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:16:28.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:16:28.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:16:28.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:16:28.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:16:28.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:16:28.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:16:28.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:16:28.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:16:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:16:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.969198 -999.00  +13.30  17.65     61   +6.10 1 1 1 1 1     0    0 6.38 -37.40 ZNESW 15.8 17.6 142.0 26.6 13.7 -23.3 13.6 -22.1 13.3 -21.0 13.6 -22.2
2026-02-16T01:16:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:16:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:16:28.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.969198
2026-02-16T01:16:28.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:16:28.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:16:28.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:16:28.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:16:28.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:16:28.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:15:47', tmtdew=8.35, humidity=56.87, cloud=0.0, wind=19.97, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:16:22', seeing=2.02, atlas_timestamp='2026-02-15T23:15:38.707', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:14:00')
2026-02-16T01:16:28.245 [DEBUG] [Thread-214530] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:16:28.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:16:28.354 [DEBUG] [Thread-214533] [transport.py] [_log()] starting thread (client mode): 0xa2d6d480
2026-02-16T01:16:28.354 [DEBUG] [Thread-214533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:16:28.368 [DEBUG] [Thread-214533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:16:28.369 [INFO] [Thread-214533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:16:28.385 [DEBUG] [Thread-214533] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] client lang: <none>
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] server lang: <none>
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] kex follows: False
2026-02-16T01:16:28.386 [DEBUG] [Thread-214533] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:16:28.387 [DEBUG] [Thread-214533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:16:28.387 [DEBUG] [Thread-214533] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:16:28.387 [DEBUG] [Thread-214533] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:16:28.387 [DEBUG] [Thread-214533] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:16:28.387 [DEBUG] [Thread-214533] [transport.py] [_log()] Compression: none
2026-02-16T01:16:28.387 [DEBUG] [Thread-214533] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:16:28.435 [DEBUG] [Thread-214533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:16:28.436 [DEBUG] [Thread-214533] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:16:28.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:16:28.437 [DEBUG] [Thread-214533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:16:28.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:16:28.491 [DEBUG] [Thread-214533] [transport.py] [_log()] userauth is OK
2026-02-16T01:16:28.492 [DEBUG] [Thread-214533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:16:28.492 [DEBUG] [Thread-214533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:16:28.492 [DEBUG] [Thread-214533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:16:28.492 [DEBUG] [Thread-214533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:16:28.514 [INFO] [Thread-214533] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:16:28.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:16:28.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:16:29.386 [DEBUG] [Thread-214533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:16:29.387 [DEBUG] [Thread-214533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:16:29.434 [DEBUG] [Thread-214533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:16:29.434 [DEBUG] [Thread-214533] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:16:29.444 [DEBUG] [Thread-214533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:16:29.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:16:29.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:16:29.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:16:29.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:16:29.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:16:29.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:16:29.481 [DEBUG] [Thread-214533] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:16:41.261 [DEBUG] [Thread-214535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:41.765 [DEBUG] [Thread-214536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:56.321 [DEBUG] [Thread-214537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:16:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:16:59.504 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:16:59.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:17:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 16, 22), 8.36, 56.83, 0.0, 20.1, 13.27, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:17:02.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:16:22
2026-02-16T01:17:02.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:17:02.752 [DEBUG] [Thread-214538] [transport.py] [_log()] starting thread (client mode): 0xa2d562f0
2026-02-16T01:17:02.752 [DEBUG] [Thread-214538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:17:02.769 [DEBUG] [Thread-214538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:17:02.769 [INFO] [Thread-214538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:17:02.771 [DEBUG] [Thread-214538] [transport.py] [_log()] client lang: <none>
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] server lang: <none>
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] kex follows: False
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] Compression: none
2026-02-16T01:17:02.772 [DEBUG] [Thread-214538] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:17:02.780 [DEBUG] [Thread-214538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:17:02.780 [DEBUG] [Thread-214538] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:17:02.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:17:02.781 [DEBUG] [Thread-214538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:17:02.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:17:02.783 [DEBUG] [Thread-214538] [transport.py] [_log()] userauth is OK
2026-02-16T01:17:02.783 [DEBUG] [Thread-214538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:17:02.783 [DEBUG] [Thread-214538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:17:02.783 [DEBUG] [Thread-214538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:17:02.783 [DEBUG] [Thread-214538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:17:02.799 [INFO] [Thread-214538] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:17:02.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:17:03.444 [DEBUG] [Thread-214538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:17:03.444 [DEBUG] [Thread-214538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:17:03.445 [DEBUG] [Thread-214538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:17:03.485 [DEBUG] [Thread-214538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:17:03.486 [DEBUG] [Thread-214538] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:17:03.489 [DEBUG] [Thread-214538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:17:03.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:17:03.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:17:03.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:17:03.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:17:03.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:17:03.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:17:03.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:17:03.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:17:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:17:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.969545 -999.00  +13.30  11.18     61   +6.00 1 1 1 1 1     0    0 6.30 -38.03 ZNESW 11.4 11.2 157.4 17.2 13.7 -23.4 13.6 -22.2 13.3 -21.1 13.6 -22.3
2026-02-16T01:17:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:17:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:17:03.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.969545
2026-02-16T01:17:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:17:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:17:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:17:03.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:17:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:17:03.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:16:22', tmtdew=8.36, humidity=56.83, cloud=0.0, wind=20.1, temperature=13.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:16:58', seeing=1.68, atlas_timestamp='2026-02-15T23:16:08.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:14:00')
2026-02-16T01:17:03.517 [DEBUG] [Thread-214538] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:17:03.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:17:03.611 [DEBUG] [Thread-214541] [transport.py] [_log()] starting thread (client mode): 0xa2deb430
2026-02-16T01:17:03.611 [DEBUG] [Thread-214541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:17:03.626 [DEBUG] [Thread-214541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:17:03.626 [INFO] [Thread-214541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:17:03.633 [DEBUG] [Thread-214541] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:17:03.634 [DEBUG] [Thread-214541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:17:03.634 [DEBUG] [Thread-214541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:17:03.634 [DEBUG] [Thread-214541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:03.634 [DEBUG] [Thread-214541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:03.634 [DEBUG] [Thread-214541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] client lang: <none>
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] server lang: <none>
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] kex follows: False
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] Compression: none
2026-02-16T01:17:03.635 [DEBUG] [Thread-214541] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:17:03.691 [DEBUG] [Thread-214541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:17:03.692 [DEBUG] [Thread-214541] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:17:03.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:17:03.693 [DEBUG] [Thread-214541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:17:03.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:17:03.752 [DEBUG] [Thread-214541] [transport.py] [_log()] userauth is OK
2026-02-16T01:17:03.753 [DEBUG] [Thread-214541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:17:03.753 [DEBUG] [Thread-214541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:17:03.753 [DEBUG] [Thread-214541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:17:03.753 [DEBUG] [Thread-214541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:17:03.778 [INFO] [Thread-214541] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:17:03.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:17:03.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:17:04.601 [DEBUG] [Thread-214541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:17:04.601 [DEBUG] [Thread-214541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:17:04.649 [DEBUG] [Thread-214541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:17:04.650 [DEBUG] [Thread-214541] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:17:04.659 [DEBUG] [Thread-214541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:17:04.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:17:04.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:17:04.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:17:04.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:17:04.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:17:04.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:17:04.697 [DEBUG] [Thread-214541] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:17:11.360 [DEBUG] [Thread-214543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:15.957 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:20.013 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:26.252 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:26.253 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:26.419 [DEBUG] [Thread-214544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:34.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:17:34.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:17:34.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:17:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 16, 58), 8.3, 56.87, 0.0, 19.2, 13.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:17:36.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:16:58
2026-02-16T01:17:37.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:17:37.419 [DEBUG] [Thread-214545] [transport.py] [_log()] starting thread (client mode): 0xa2de8310
2026-02-16T01:17:37.420 [DEBUG] [Thread-214545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:17:37.439 [DEBUG] [Thread-214545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:17:37.439 [INFO] [Thread-214545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] client lang: <none>
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] server lang: <none>
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] kex follows: False
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] Compression: none
2026-02-16T01:17:37.443 [DEBUG] [Thread-214545] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:17:37.460 [DEBUG] [Thread-214545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:17:37.461 [DEBUG] [Thread-214545] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:17:37.461 [DEBUG] [Thread-214545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:17:37.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:17:37.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:17:37.505 [DEBUG] [Thread-214545] [transport.py] [_log()] userauth is OK
2026-02-16T01:17:37.505 [DEBUG] [Thread-214545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:17:37.505 [DEBUG] [Thread-214545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:17:37.505 [DEBUG] [Thread-214545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:17:37.506 [DEBUG] [Thread-214545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:17:37.531 [INFO] [Thread-214545] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:17:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:17:38.158 [DEBUG] [Thread-214545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:17:38.159 [DEBUG] [Thread-214545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:17:38.159 [DEBUG] [Thread-214545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:17:38.199 [DEBUG] [Thread-214545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:17:38.200 [DEBUG] [Thread-214545] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:17:38.203 [DEBUG] [Thread-214545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:17:38.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:17:38.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:17:38.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:17:38.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:17:38.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:17:38.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:17:38.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:17:38.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:17:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:17:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.969892 -999.00  +13.20  15.73     61   +6.00 1 1 1 1 1     0    0 6.28 -38.72 ZNESW 21.7 15.7 153.6 20.5 13.7 -22.9 13.5 -22.2 13.3 -20.8 13.6 -22.3
2026-02-16T01:17:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:17:38.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:17:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.969892
2026-02-16T01:17:38.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:17:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:17:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:17:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:17:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:17:38.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:16:58', tmtdew=8.3, humidity=56.87, cloud=0.0, wind=19.2, temperature=13.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:16:58', seeing=1.68, atlas_timestamp='2026-02-15T23:16:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:14:00')
2026-02-16T01:17:38.231 [DEBUG] [Thread-214545] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:17:38.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:17:38.329 [DEBUG] [Thread-214548] [transport.py] [_log()] starting thread (client mode): 0xa2deab00
2026-02-16T01:17:38.330 [DEBUG] [Thread-214548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:17:38.346 [DEBUG] [Thread-214548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:17:38.346 [INFO] [Thread-214548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:17:38.353 [DEBUG] [Thread-214548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:17:38.353 [DEBUG] [Thread-214548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:17:38.353 [DEBUG] [Thread-214548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] client lang: <none>
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] server lang: <none>
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] kex follows: False
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] Compression: none
2026-02-16T01:17:38.354 [DEBUG] [Thread-214548] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:17:38.411 [DEBUG] [Thread-214548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:17:38.412 [DEBUG] [Thread-214548] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:17:38.413 [DEBUG] [Thread-214548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:17:38.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:17:38.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:17:38.469 [DEBUG] [Thread-214548] [transport.py] [_log()] userauth is OK
2026-02-16T01:17:38.469 [DEBUG] [Thread-214548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:17:38.469 [DEBUG] [Thread-214548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:17:38.469 [DEBUG] [Thread-214548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:17:38.469 [DEBUG] [Thread-214548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:17:38.494 [INFO] [Thread-214548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:17:38.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:17:38.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:17:39.660 [DEBUG] [Thread-214548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:17:39.661 [DEBUG] [Thread-214548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:17:39.709 [DEBUG] [Thread-214548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:17:39.710 [DEBUG] [Thread-214548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:17:39.719 [DEBUG] [Thread-214548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:17:39.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:17:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:17:39.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:17:39.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:17:39.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:17:39.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:17:39.758 [DEBUG] [Thread-214548] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:17:41.456 [DEBUG] [Thread-214550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:41.830 [DEBUG] [Thread-214551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:17:56.507 [DEBUG] [Thread-214552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:09.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:18:09.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:18:09.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:18:10.184 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:11.548 [DEBUG] [Thread-214553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:11.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 17, 35), 8.34, 56.97, 0.0, 27.31, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:18:11.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:17:35
2026-02-16T01:18:12.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:18:12.189 [DEBUG] [Thread-214554] [transport.py] [_log()] starting thread (client mode): 0xa2d54610
2026-02-16T01:18:12.189 [DEBUG] [Thread-214554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:18:12.209 [DEBUG] [Thread-214554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:18:12.209 [INFO] [Thread-214554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] client lang: <none>
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] server lang: <none>
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] kex follows: False
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:18:12.213 [DEBUG] [Thread-214554] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:18:12.214 [DEBUG] [Thread-214554] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:18:12.214 [DEBUG] [Thread-214554] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:18:12.214 [DEBUG] [Thread-214554] [transport.py] [_log()] Compression: none
2026-02-16T01:18:12.214 [DEBUG] [Thread-214554] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:18:12.231 [DEBUG] [Thread-214554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:18:12.231 [DEBUG] [Thread-214554] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:18:12.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:18:12.232 [DEBUG] [Thread-214554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:18:12.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:18:12.234 [DEBUG] [Thread-214554] [transport.py] [_log()] userauth is OK
2026-02-16T01:18:12.234 [DEBUG] [Thread-214554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:18:12.234 [DEBUG] [Thread-214554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:18:12.234 [DEBUG] [Thread-214554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:18:12.234 [DEBUG] [Thread-214554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:18:12.257 [INFO] [Thread-214554] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:18:12.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:18:13.050 [DEBUG] [Thread-214554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:18:13.050 [DEBUG] [Thread-214554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:18:13.050 [DEBUG] [Thread-214554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:18:13.091 [DEBUG] [Thread-214554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:18:13.091 [DEBUG] [Thread-214554] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:18:13.093 [DEBUG] [Thread-214554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:18:13.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:18:13.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:18:13.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:18:13.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:18:13.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:18:13.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:18:13.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.970586 -999.00  +13.30  14.46     61   +6.00 1 1 1 1 1     0    0 6.51 -33.82 ZNESW 16.4 14.5 145.9 21.7 13.6 -23.1 13.5 -22.0 13.3 -21.1 13.6 -22.2
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.970586
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:18:13.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:17:35', tmtdew=8.34, humidity=56.97, cloud=0.0, wind=27.31, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:17:35', seeing=1.66, atlas_timestamp='2026-02-15T23:17:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:14:00')
2026-02-16T01:18:13.110 [DEBUG] [Thread-214554] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:18:13.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:18:13.209 [DEBUG] [Thread-214557] [transport.py] [_log()] starting thread (client mode): 0xa2d57460
2026-02-16T01:18:13.209 [DEBUG] [Thread-214557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:18:13.224 [DEBUG] [Thread-214557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:18:13.224 [INFO] [Thread-214557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:18:13.231 [DEBUG] [Thread-214557] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:18:13.231 [DEBUG] [Thread-214557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:18:13.232 [DEBUG] [Thread-214557] [transport.py] [_log()] client lang: <none>
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] server lang: <none>
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] kex follows: False
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:18:13.233 [DEBUG] [Thread-214557] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:18:13.234 [DEBUG] [Thread-214557] [transport.py] [_log()] Compression: none
2026-02-16T01:18:13.234 [DEBUG] [Thread-214557] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:18:13.288 [DEBUG] [Thread-214557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:18:13.289 [DEBUG] [Thread-214557] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:18:13.289 [DEBUG] [Thread-214557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:18:13.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:18:13.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:18:13.344 [DEBUG] [Thread-214557] [transport.py] [_log()] userauth is OK
2026-02-16T01:18:13.344 [DEBUG] [Thread-214557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:18:13.344 [DEBUG] [Thread-214557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:18:13.344 [DEBUG] [Thread-214557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:18:13.345 [DEBUG] [Thread-214557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:18:13.366 [INFO] [Thread-214557] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:18:13.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:18:13.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:18:14.178 [DEBUG] [Thread-214557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:18:14.179 [DEBUG] [Thread-214557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:18:14.226 [DEBUG] [Thread-214557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:18:14.226 [DEBUG] [Thread-214557] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:18:14.235 [DEBUG] [Thread-214557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:18:14.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:18:14.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:18:14.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:18:14.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:18:14.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:18:14.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:18:14.269 [DEBUG] [Thread-214557] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:18:26.455 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:26.456 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:26.582 [DEBUG] [Thread-214559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:29.072 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:41.632 [DEBUG] [Thread-214560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:41.896 [DEBUG] [Thread-214561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:44.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:18:44.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:18:44.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:18:46.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 18, 10), 8.25, 57.57, 0.0, 23.34, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:18:46.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:18:10
2026-02-16T01:18:46.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:18:46.785 [DEBUG] [Thread-214562] [transport.py] [_log()] starting thread (client mode): 0xa2de9b70
2026-02-16T01:18:46.786 [DEBUG] [Thread-214562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:18:46.805 [DEBUG] [Thread-214562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:18:46.805 [INFO] [Thread-214562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] client lang: <none>
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] server lang: <none>
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] kex follows: False
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] Compression: none
2026-02-16T01:18:46.809 [DEBUG] [Thread-214562] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:18:46.828 [DEBUG] [Thread-214562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:18:46.828 [DEBUG] [Thread-214562] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:18:46.829 [DEBUG] [Thread-214562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:18:46.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:18:46.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:18:46.831 [DEBUG] [Thread-214562] [transport.py] [_log()] userauth is OK
2026-02-16T01:18:46.831 [DEBUG] [Thread-214562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:18:46.831 [DEBUG] [Thread-214562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:18:46.832 [DEBUG] [Thread-214562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:18:46.832 [DEBUG] [Thread-214562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:18:46.868 [INFO] [Thread-214562] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:18:46.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:18:47.517 [DEBUG] [Thread-214562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:18:47.518 [DEBUG] [Thread-214562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:18:47.518 [DEBUG] [Thread-214562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:18:47.558 [DEBUG] [Thread-214562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:18:47.559 [DEBUG] [Thread-214562] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:18:47.562 [DEBUG] [Thread-214562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:18:47.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:18:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:18:47.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:18:47.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:18:47.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:18:47.586 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:18:47.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:18:47.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:18:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:18:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.970934 -999.00  +13.30  13.14     61   +6.00 1 1 1 1 1     0    0 6.65 -33.87 ZNESW 15.5 13.1 146.4 22.8 13.6 -23.2 13.6 -22.1 13.3 -21.1 13.6 -22.2
2026-02-16T01:18:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:18:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:18:47.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.970934
2026-02-16T01:18:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:18:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:18:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:18:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:18:47.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:18:47.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:18:10', tmtdew=8.25, humidity=57.57, cloud=0.0, wind=23.34, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:18:10', seeing=2.03, atlas_timestamp='2026-02-15T23:18:08.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:16:00')
2026-02-16T01:18:47.589 [DEBUG] [Thread-214562] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:18:47.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:18:47.685 [DEBUG] [Thread-214565] [transport.py] [_log()] starting thread (client mode): 0xa2d27580
2026-02-16T01:18:47.685 [DEBUG] [Thread-214565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:18:47.700 [DEBUG] [Thread-214565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:18:47.700 [INFO] [Thread-214565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] client lang: <none>
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] server lang: <none>
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] kex follows: False
2026-02-16T01:18:47.708 [DEBUG] [Thread-214565] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:18:47.709 [DEBUG] [Thread-214565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:18:47.709 [DEBUG] [Thread-214565] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:18:47.709 [DEBUG] [Thread-214565] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:18:47.709 [DEBUG] [Thread-214565] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:18:47.709 [DEBUG] [Thread-214565] [transport.py] [_log()] Compression: none
2026-02-16T01:18:47.709 [DEBUG] [Thread-214565] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:18:47.755 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:18:47.765 [DEBUG] [Thread-214565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:18:47.766 [DEBUG] [Thread-214565] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:18:47.767 [DEBUG] [Thread-214565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:18:47.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:18:47.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:18:47.825 [DEBUG] [Thread-214565] [transport.py] [_log()] userauth is OK
2026-02-16T01:18:47.825 [DEBUG] [Thread-214565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:18:47.825 [DEBUG] [Thread-214565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:18:47.825 [DEBUG] [Thread-214565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:18:47.825 [DEBUG] [Thread-214565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:18:47.844 [INFO] [Thread-214565] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:18:47.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:18:47.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:18:48.666 [DEBUG] [Thread-214565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:18:48.666 [DEBUG] [Thread-214565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:18:48.714 [DEBUG] [Thread-214565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:18:48.715 [DEBUG] [Thread-214565] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:18:48.724 [DEBUG] [Thread-214565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:18:48.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:18:48.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:18:48.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:18:48.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:18:48.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:18:48.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:18:48.760 [DEBUG] [Thread-214565] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:18:56.671 [DEBUG] [Thread-214567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:06.437 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:11.728 [DEBUG] [Thread-214568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:18.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:19:18.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:19:18.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:19:21.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 18, 45), 8.36, 57.02, 0.0, 22.51, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:19:21.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:18:45
2026-02-16T01:19:21.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:19:21.798 [DEBUG] [Thread-214569] [transport.py] [_log()] starting thread (client mode): 0xa2d26770
2026-02-16T01:19:21.798 [DEBUG] [Thread-214569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:19:21.819 [DEBUG] [Thread-214569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:19:21.819 [INFO] [Thread-214569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:19:21.822 [DEBUG] [Thread-214569] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] client lang: <none>
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] server lang: <none>
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] kex follows: False
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:19:21.823 [DEBUG] [Thread-214569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:19:21.824 [DEBUG] [Thread-214569] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:19:21.824 [DEBUG] [Thread-214569] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:19:21.824 [DEBUG] [Thread-214569] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:19:21.824 [DEBUG] [Thread-214569] [transport.py] [_log()] Compression: none
2026-02-16T01:19:21.824 [DEBUG] [Thread-214569] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:19:21.843 [DEBUG] [Thread-214569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:19:21.843 [DEBUG] [Thread-214569] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:19:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:19:21.844 [DEBUG] [Thread-214569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:19:21.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:19:21.847 [DEBUG] [Thread-214569] [transport.py] [_log()] userauth is OK
2026-02-16T01:19:21.847 [DEBUG] [Thread-214569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:19:21.847 [DEBUG] [Thread-214569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:19:21.847 [DEBUG] [Thread-214569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:19:21.848 [DEBUG] [Thread-214569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:19:21.871 [INFO] [Thread-214569] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:19:21.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:19:22.522 [DEBUG] [Thread-214569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:19:22.522 [DEBUG] [Thread-214569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:19:22.523 [DEBUG] [Thread-214569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:19:22.563 [DEBUG] [Thread-214569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:19:22.564 [DEBUG] [Thread-214569] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:19:22.567 [DEBUG] [Thread-214569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:19:22.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:19:22.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:19:22.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:19:22.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:19:22.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:19:22.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:19:22.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:19:22.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:19:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:19:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.971281 -999.00  +13.30  21.59     61   +6.00 1 1 1 1 1     0    0 6.45 -33.82 ZNESW 17.9 21.6 154.2 26.0 13.7 -23.2 13.6 -22.1 13.3 -21.0 13.6 -22.1
2026-02-16T01:19:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:19:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:19:22.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.971281
2026-02-16T01:19:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:19:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:19:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:19:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:19:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:19:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:18:45', tmtdew=8.36, humidity=57.02, cloud=0.0, wind=22.51, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:18:45', seeing=2.52, atlas_timestamp='2026-02-15T23:18:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:16:00')
2026-02-16T01:19:22.592 [DEBUG] [Thread-214569] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:19:22.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:19:22.687 [DEBUG] [Thread-214572] [transport.py] [_log()] starting thread (client mode): 0xa2deb640
2026-02-16T01:19:22.688 [DEBUG] [Thread-214572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:19:22.702 [DEBUG] [Thread-214572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:19:22.702 [INFO] [Thread-214572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:19:22.710 [DEBUG] [Thread-214572] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:19:22.711 [DEBUG] [Thread-214572] [transport.py] [_log()] client lang: <none>
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] server lang: <none>
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] kex follows: False
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:19:22.712 [DEBUG] [Thread-214572] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:19:22.713 [DEBUG] [Thread-214572] [transport.py] [_log()] Compression: none
2026-02-16T01:19:22.713 [DEBUG] [Thread-214572] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:19:22.770 [DEBUG] [Thread-214572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:19:22.771 [DEBUG] [Thread-214572] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:19:22.772 [DEBUG] [Thread-214572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:19:22.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:19:22.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:19:22.829 [DEBUG] [Thread-214572] [transport.py] [_log()] userauth is OK
2026-02-16T01:19:22.830 [DEBUG] [Thread-214572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:19:22.830 [DEBUG] [Thread-214572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:19:22.830 [DEBUG] [Thread-214572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:19:22.830 [DEBUG] [Thread-214572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:19:22.849 [INFO] [Thread-214572] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:19:22.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:19:22.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:19:23.683 [DEBUG] [Thread-214572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:19:23.683 [DEBUG] [Thread-214572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:19:23.731 [DEBUG] [Thread-214572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:19:23.732 [DEBUG] [Thread-214572] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:19:23.741 [DEBUG] [Thread-214572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:19:23.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:19: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')
2026-02-16T01:19:23.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:19:23.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:19:23.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:19:23.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:19:23.779 [DEBUG] [Thread-214572] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:19:25.115 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:26.665 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:26.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:26.767 [DEBUG] [Thread-214574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:41.829 [DEBUG] [Thread-214575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:41.963 [DEBUG] [Thread-214576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:43.866 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:53.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:19:53.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:19:53.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:19:55.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 19, 22), 8.35, 57.08, 0.0, 21.72, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:19:55.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:19:22
2026-02-16T01:19:55.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:19:56.147 [DEBUG] [Thread-214577] [transport.py] [_log()] starting thread (client mode): 0xa2d111e0
2026-02-16T01:19:56.148 [DEBUG] [Thread-214577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:19:56.168 [DEBUG] [Thread-214577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:19:56.169 [INFO] [Thread-214577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] client lang: <none>
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] server lang: <none>
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] kex follows: False
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] Compression: none
2026-02-16T01:19:56.172 [DEBUG] [Thread-214577] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:19:56.190 [DEBUG] [Thread-214577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:19:56.190 [DEBUG] [Thread-214577] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:19:56.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:19:56.192 [DEBUG] [Thread-214577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:19:56.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:19:56.194 [DEBUG] [Thread-214577] [transport.py] [_log()] userauth is OK
2026-02-16T01:19:56.194 [DEBUG] [Thread-214577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:19:56.194 [DEBUG] [Thread-214577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:19:56.194 [DEBUG] [Thread-214577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:19:56.194 [DEBUG] [Thread-214577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:19:56.218 [INFO] [Thread-214577] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:19:56.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:19:56.863 [DEBUG] [Thread-214579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:19:56.893 [DEBUG] [Thread-214577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:19:56.894 [DEBUG] [Thread-214577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:19:56.894 [DEBUG] [Thread-214577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:19:56.934 [DEBUG] [Thread-214577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:19:56.935 [DEBUG] [Thread-214577] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:19:56.938 [DEBUG] [Thread-214577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:19:56.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:19:56.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:19:56.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:19:56.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:19:56.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:19:56.961 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:19:56.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:19:56.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:19:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:19:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.971628 -999.00  +13.30  11.60     61   +6.10 1 1 1 1 1     0    0 6.62 -29.76 ZNESW 13.0 11.6 153.8 24.0 13.7 -23.2 13.6 -22.2 13.3 -21.0 13.6 -22.2
2026-02-16T01:19:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:19:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:19:56.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.971628
2026-02-16T01:19:56.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:19:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:19:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:19:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:19:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:19:56.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:19:22', tmtdew=8.35, humidity=57.08, cloud=0.0, wind=21.72, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:19:22', seeing=1.63, atlas_timestamp='2026-02-15T23:19:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:16:00')
2026-02-16T01:19:56.964 [DEBUG] [Thread-214577] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:19:57.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:19:57.060 [DEBUG] [Thread-214581] [transport.py] [_log()] starting thread (client mode): 0xa2d13340
2026-02-16T01:19:57.060 [DEBUG] [Thread-214581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:19:57.075 [DEBUG] [Thread-214581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:19:57.075 [INFO] [Thread-214581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:19:57.083 [DEBUG] [Thread-214581] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:19:57.083 [DEBUG] [Thread-214581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] client lang: <none>
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] server lang: <none>
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] kex follows: False
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] Compression: none
2026-02-16T01:19:57.084 [DEBUG] [Thread-214581] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:19:57.142 [DEBUG] [Thread-214581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:19:57.142 [DEBUG] [Thread-214581] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:19:57.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:19:57.144 [DEBUG] [Thread-214581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:19:57.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:19:57.202 [DEBUG] [Thread-214581] [transport.py] [_log()] userauth is OK
2026-02-16T01:19:57.202 [DEBUG] [Thread-214581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:19:57.202 [DEBUG] [Thread-214581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:19:57.202 [DEBUG] [Thread-214581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:19:57.202 [DEBUG] [Thread-214581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:19:57.222 [INFO] [Thread-214581] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:19:57.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:19:57.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:19:58.096 [DEBUG] [Thread-214581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:19:58.096 [DEBUG] [Thread-214581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:19:58.145 [DEBUG] [Thread-214581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:19:58.145 [DEBUG] [Thread-214581] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:19:58.154 [DEBUG] [Thread-214581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:19:58.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:19:58.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:19:58.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:19:58.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:19:58.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:19:58.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:19:58.190 [DEBUG] [Thread-214581] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:20:02.523 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:11.896 [DEBUG] [Thread-214583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:21.206 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:26.864 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:26.865 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:26.946 [DEBUG] [Thread-214584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:28.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:20:28.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:20:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:20:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 19, 57), 8.28, 57.13, 0.0, 20.57, 13.25, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:20:30.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:19:57
2026-02-16T01:20:30.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:20:30.684 [DEBUG] [Thread-214585] [transport.py] [_log()] starting thread (client mode): 0xa2deb040
2026-02-16T01:20:30.685 [DEBUG] [Thread-214585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:20:30.705 [DEBUG] [Thread-214585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:20:30.705 [INFO] [Thread-214585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:20:30.708 [DEBUG] [Thread-214585] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:20:30.708 [DEBUG] [Thread-214585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:20:30.708 [DEBUG] [Thread-214585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:20:30.708 [DEBUG] [Thread-214585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:20:30.708 [DEBUG] [Thread-214585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:20:30.708 [DEBUG] [Thread-214585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] client lang: <none>
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] server lang: <none>
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] kex follows: False
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] Compression: none
2026-02-16T01:20:30.709 [DEBUG] [Thread-214585] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:20:30.726 [DEBUG] [Thread-214585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:20:30.726 [DEBUG] [Thread-214585] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:20:30.727 [DEBUG] [Thread-214585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:20:30.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:20:30.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:20:30.729 [DEBUG] [Thread-214585] [transport.py] [_log()] userauth is OK
2026-02-16T01:20:30.729 [DEBUG] [Thread-214585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:20:30.729 [DEBUG] [Thread-214585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:20:30.729 [DEBUG] [Thread-214585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:20:30.730 [DEBUG] [Thread-214585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:20:30.750 [INFO] [Thread-214585] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:20:30.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:20:31.390 [DEBUG] [Thread-214585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:20:31.391 [DEBUG] [Thread-214585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:20:31.391 [DEBUG] [Thread-214585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:20:31.431 [DEBUG] [Thread-214585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:20:31.431 [DEBUG] [Thread-214585] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:20:31.435 [DEBUG] [Thread-214585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:20:31.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:20:31.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:20:31.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:20:31.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:20:31.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:20:31.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:20:31.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:20:31.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:20:31.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:20:31.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.971975 -999.00  +13.30  18.10     61   +6.10 1 1 1 1 1     0    0 6.53 -30.90 ZNESW 16.3 18.1 141.0 26.4 13.7 -23.1 13.5 -21.9 13.3 -21.0 13.6 -22.0
2026-02-16T01:20:31.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:20:31.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:20:31.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.971975
2026-02-16T01:20:31.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:20:31.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:20:31.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:20:31.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:20:31.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:20:31.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:19:57', tmtdew=8.28, humidity=57.13, cloud=0.0, wind=20.57, temperature=13.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:19:58', seeing=1.66, atlas_timestamp='2026-02-15T23:19:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:16:00')
2026-02-16T01:20:31.463 [DEBUG] [Thread-214585] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:20:31.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:20:31.558 [DEBUG] [Thread-214588] [transport.py] [_log()] starting thread (client mode): 0xa2de9ba0
2026-02-16T01:20:31.558 [DEBUG] [Thread-214588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:20:31.573 [DEBUG] [Thread-214588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:20:31.573 [INFO] [Thread-214588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] client lang: <none>
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] server lang: <none>
2026-02-16T01:20:31.582 [DEBUG] [Thread-214588] [transport.py] [_log()] kex follows: False
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] Compression: none
2026-02-16T01:20:31.583 [DEBUG] [Thread-214588] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:20:31.640 [DEBUG] [Thread-214588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:20:31.641 [DEBUG] [Thread-214588] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:20:31.641 [DEBUG] [Thread-214588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:20:31.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:20:31.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:20:31.697 [DEBUG] [Thread-214588] [transport.py] [_log()] userauth is OK
2026-02-16T01:20:31.698 [DEBUG] [Thread-214588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:20:31.698 [DEBUG] [Thread-214588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:20:31.698 [DEBUG] [Thread-214588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:20:31.698 [DEBUG] [Thread-214588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:20:31.721 [INFO] [Thread-214588] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:20:31.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:20:31.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:20:32.554 [DEBUG] [Thread-214588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:20:32.554 [DEBUG] [Thread-214588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:20:32.602 [DEBUG] [Thread-214588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:20:32.602 [DEBUG] [Thread-214588] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:20:32.612 [DEBUG] [Thread-214588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:20:32.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:20:32.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:20:32.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:20:32.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:20:32.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:20:32.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:20:32.648 [DEBUG] [Thread-214588] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:20:40.011 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:41.982 [DEBUG] [Thread-214590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:42.033 [DEBUG] [Thread-214591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:43.868 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:51.585 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:55.713 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:57.033 [DEBUG] [Thread-214592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:20:58.773 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:02.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:21:02.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:21:02.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:21:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 20, 32), 8.21, 57.46, 0.0, 20.25, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:21:04.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:20:32
2026-02-16T01:21:04.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:21:05.098 [DEBUG] [Thread-214593] [transport.py] [_log()] starting thread (client mode): 0xa2d27940
2026-02-16T01:21:05.098 [DEBUG] [Thread-214593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:21:05.118 [DEBUG] [Thread-214593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:21:05.119 [INFO] [Thread-214593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] client lang: <none>
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] server lang: <none>
2026-02-16T01:21:05.122 [DEBUG] [Thread-214593] [transport.py] [_log()] kex follows: False
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] Compression: none
2026-02-16T01:21:05.123 [DEBUG] [Thread-214593] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:21:05.142 [DEBUG] [Thread-214593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:21:05.142 [DEBUG] [Thread-214593] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:21:05.143 [DEBUG] [Thread-214593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:21:05.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:21:05.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:21:05.144 [DEBUG] [Thread-214593] [transport.py] [_log()] userauth is OK
2026-02-16T01:21:05.145 [DEBUG] [Thread-214593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:21:05.145 [DEBUG] [Thread-214593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:21:05.145 [DEBUG] [Thread-214593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:21:05.145 [DEBUG] [Thread-214593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:21:05.168 [INFO] [Thread-214593] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:21:05.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:21:06.898 [DEBUG] [Thread-214593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:21:06.899 [DEBUG] [Thread-214593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:21:06.899 [DEBUG] [Thread-214593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:21:06.939 [DEBUG] [Thread-214593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:21:06.939 [DEBUG] [Thread-214593] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:21:06.946 [DEBUG] [Thread-214593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:21:06.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:21:06.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:21:06.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:21:06.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:21:06.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:21:06.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:21:06.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:21:06.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:21:06.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:21:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.972670 -999.00  +13.20  14.55     61   +6.10 1 1 1 1 1     0    0 6.51 -29.69 ZNESW 16.3 14.6 146.8 21.1 13.6 -23.2 13.5 -22.1 13.3 -21.0 13.6 -22.2
2026-02-16T01:21:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:21:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:21:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.972670
2026-02-16T01:21:06.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:21:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:21:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:21:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:21:06.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:21:06.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:20:32', tmtdew=8.21, humidity=57.46, cloud=0.0, wind=20.25, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:20:33', seeing=1.8, atlas_timestamp='2026-02-15T23:20:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.039750000000001506, 0.0012500000000006395, -0.10124999999999851, -0.05250000000000021, -0.0625, 0.005250000000000199, 0.01649999999999885, 0.007250000000000867, 0.022500000000000853, 0.018000000000000682, -0.02674999999999983, -0.006000000000000227, 0.03950000000000031, 0.006249999999999645, -0.004000000000001336, -0.0070000000000014495, 0.01425000000000054, -0.005499999999999616, -0.014000000000001123, -0.003750000000000142, 0.02099999999999902, 0.040749999999999176, -0.006249999999999645, 0.004250000000000753, 0.04399999999999871, -0.0015000000000000568, 0.036749999999999616, -0.028499999999999304, 0.05400000000000027, -0.010999999999999233, 0.05700000000000216, 0.0470000000000006, 0.042749999999999844], zp_timestamp='2026-02-15T23:16:00')
2026-02-16T01:21:06.968 [DEBUG] [Thread-214593] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:21:07.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:21:07.064 [DEBUG] [Thread-214596] [transport.py] [_log()] starting thread (client mode): 0xa2d26350
2026-02-16T01:21:07.064 [DEBUG] [Thread-214596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:21:07.078 [DEBUG] [Thread-214596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:21:07.078 [INFO] [Thread-214596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] client lang: <none>
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] server lang: <none>
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] kex follows: False
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] Compression: none
2026-02-16T01:21:07.086 [DEBUG] [Thread-214596] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:21:07.149 [DEBUG] [Thread-214596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:21:07.150 [DEBUG] [Thread-214596] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:21:07.151 [DEBUG] [Thread-214596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:21:07.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:21:07.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:21:07.206 [DEBUG] [Thread-214596] [transport.py] [_log()] userauth is OK
2026-02-16T01:21:07.206 [DEBUG] [Thread-214596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:21:07.206 [DEBUG] [Thread-214596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:21:07.206 [DEBUG] [Thread-214596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:21:07.206 [DEBUG] [Thread-214596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:21:07.225 [INFO] [Thread-214596] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:21:07.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:21:07.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:21:08.081 [DEBUG] [Thread-214596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:21:08.081 [DEBUG] [Thread-214596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:21:08.129 [DEBUG] [Thread-214596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:21:08.129 [DEBUG] [Thread-214596] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:21:08.138 [DEBUG] [Thread-214596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:21:08.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:21:08.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:21:08.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:21:08.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:21:08.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:21:08.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:21:08.174 [DEBUG] [Thread-214596] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:21:12.067 [DEBUG] [Thread-214598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:17.465 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:27.069 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:27.070 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:27.111 [DEBUG] [Thread-214599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:36.118 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:38.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:21:38.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:21:38.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:21:40.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 21, 8), 8.1, 57.75, 0.0, 18.83, 13.13, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:21:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:21:08
2026-02-16T01:21:40.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:21:40.681 [DEBUG] [Thread-214600] [transport.py] [_log()] starting thread (client mode): 0xa2deaa40
2026-02-16T01:21:40.681 [DEBUG] [Thread-214600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:21:40.701 [DEBUG] [Thread-214600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:21:40.701 [INFO] [Thread-214600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] client lang: <none>
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] server lang: <none>
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] kex follows: False
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:21:40.704 [DEBUG] [Thread-214600] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:21:40.705 [DEBUG] [Thread-214600] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:21:40.705 [DEBUG] [Thread-214600] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:21:40.705 [DEBUG] [Thread-214600] [transport.py] [_log()] Compression: none
2026-02-16T01:21:40.705 [DEBUG] [Thread-214600] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:21:40.721 [DEBUG] [Thread-214600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:21:40.721 [DEBUG] [Thread-214600] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:21:40.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:21:40.722 [DEBUG] [Thread-214600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:21:40.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:21:40.724 [DEBUG] [Thread-214600] [transport.py] [_log()] userauth is OK
2026-02-16T01:21:40.724 [DEBUG] [Thread-214600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:21:40.725 [DEBUG] [Thread-214600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:21:40.725 [DEBUG] [Thread-214600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:21:40.725 [DEBUG] [Thread-214600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:21:40.761 [INFO] [Thread-214600] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:21:40.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:21:41.414 [DEBUG] [Thread-214600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:21:41.415 [DEBUG] [Thread-214600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:21:41.415 [DEBUG] [Thread-214600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:21:41.455 [DEBUG] [Thread-214600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:21:41.456 [DEBUG] [Thread-214600] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:21:41.459 [DEBUG] [Thread-214600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:21:41.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:21:41.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:21:41.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:21:41.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:21:41.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:21:41.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:21:41.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:21:41.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:21:41.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:21:41.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.973017 -999.00  +13.20  20.42     62   +6.10 1 1 1 1 1     0    0 6.41 -30.74 ZNESW 18.5 20.4 143.0 26.3 13.6 -23.1 13.5 -22.0 13.3 -20.9 13.6 -22.1
2026-02-16T01:21:41.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:21:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:21:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.973017
2026-02-16T01:21:41.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:21:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:21:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:21:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:21:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:21:41.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:21:08', tmtdew=8.1, humidity=57.75, cloud=0.0, wind=18.83, temperature=13.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:21:08', seeing=2.55, atlas_timestamp='2026-02-15T23:21:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:20:00')
2026-02-16T01:21:41.485 [DEBUG] [Thread-214600] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:21:41.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:21:41.581 [DEBUG] [Thread-214603] [transport.py] [_log()] starting thread (client mode): 0xa81d5660
2026-02-16T01:21:41.582 [DEBUG] [Thread-214603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:21:41.596 [DEBUG] [Thread-214603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:21:41.597 [INFO] [Thread-214603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:21:41.604 [DEBUG] [Thread-214603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:21:41.604 [DEBUG] [Thread-214603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:21:41.604 [DEBUG] [Thread-214603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:21:41.604 [DEBUG] [Thread-214603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:41.604 [DEBUG] [Thread-214603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] client lang: <none>
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] server lang: <none>
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] kex follows: False
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] Compression: none
2026-02-16T01:21:41.605 [DEBUG] [Thread-214603] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:21:41.661 [DEBUG] [Thread-214603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:21:41.662 [DEBUG] [Thread-214603] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:21:41.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:21:41.663 [DEBUG] [Thread-214603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:21:41.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:21:41.719 [DEBUG] [Thread-214603] [transport.py] [_log()] userauth is OK
2026-02-16T01:21:41.720 [DEBUG] [Thread-214603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:21:41.720 [DEBUG] [Thread-214603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:21:41.720 [DEBUG] [Thread-214603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:21:41.720 [DEBUG] [Thread-214603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:21:41.739 [INFO] [Thread-214603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:21:41.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:21:41.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:21:42.100 [DEBUG] [Thread-214605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:42.141 [DEBUG] [Thread-214606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:42.590 [DEBUG] [Thread-214603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:21:42.590 [DEBUG] [Thread-214603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:21:42.638 [DEBUG] [Thread-214603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:21:42.638 [DEBUG] [Thread-214603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:21:42.647 [DEBUG] [Thread-214603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:21:42.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:21:42.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:21:42.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:21:42.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:21:42.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:21:42.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:21:42.686 [DEBUG] [Thread-214603] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:21:54.868 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:21:57.185 [DEBUG] [Thread-214607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:12.222 [DEBUG] [Thread-214608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:12.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:22:12.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:22: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
2026-02-16T01:22:13.553 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:14.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 21, 43), 8.17, 57.67, 0.0, 22.97, 13.18, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:22:14.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:21:43
2026-02-16T01:22:14.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:22:15.142 [DEBUG] [Thread-214609] [transport.py] [_log()] starting thread (client mode): 0xa81d5f30
2026-02-16T01:22:15.142 [DEBUG] [Thread-214609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:22:15.162 [DEBUG] [Thread-214609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:22:15.162 [INFO] [Thread-214609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:15.166 [DEBUG] [Thread-214609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] client lang: <none>
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] server lang: <none>
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] kex follows: False
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] Compression: none
2026-02-16T01:22:15.167 [DEBUG] [Thread-214609] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:22:15.184 [DEBUG] [Thread-214609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:22:15.184 [DEBUG] [Thread-214609] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:22:15.185 [DEBUG] [Thread-214609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:22:15.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:22:15.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:22:15.187 [DEBUG] [Thread-214609] [transport.py] [_log()] userauth is OK
2026-02-16T01:22:15.187 [DEBUG] [Thread-214609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:22:15.187 [DEBUG] [Thread-214609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:22:15.187 [DEBUG] [Thread-214609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:22:15.187 [DEBUG] [Thread-214609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:22:15.224 [INFO] [Thread-214609] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:22:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:22:15.892 [DEBUG] [Thread-214609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:22:15.893 [DEBUG] [Thread-214609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:22:15.893 [DEBUG] [Thread-214609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:22:15.933 [DEBUG] [Thread-214609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:22:15.934 [DEBUG] [Thread-214609] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:22:15.937 [DEBUG] [Thread-214609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:22:15.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:22:15.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:22:15.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:22:15.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:22:15.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:22:15.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:22:15.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:22:15.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:22:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:22:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.973364 -999.00  +13.30  17.68     62   +6.10 1 1 1 1 1     0    0 6.54 -30.57 ZNESW 18.2 17.7 140.2 24.6 13.6 -23.2 13.5 -22.0 13.3 -21.0 13.6 -22.1
2026-02-16T01:22:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:22:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:22:15.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.973364
2026-02-16T01:22:15.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:22:15.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:22:15.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:22:15.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:22:15.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:22:15.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:21:43', tmtdew=8.17, humidity=57.67, cloud=0.0, wind=22.97, temperature=13.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:21:44', seeing=2.55, atlas_timestamp='2026-02-15T23:21:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:20:00')
2026-02-16T01:22:15.965 [DEBUG] [Thread-214609] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:22:16.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:22:16.061 [DEBUG] [Thread-214612] [transport.py] [_log()] starting thread (client mode): 0xa2d263b0
2026-02-16T01:22:16.061 [DEBUG] [Thread-214612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:22:16.076 [DEBUG] [Thread-214612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:22:16.076 [INFO] [Thread-214612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:22:16.083 [DEBUG] [Thread-214612] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] client lang: <none>
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] server lang: <none>
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] kex follows: False
2026-02-16T01:22:16.084 [DEBUG] [Thread-214612] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:22:16.085 [DEBUG] [Thread-214612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:22:16.085 [DEBUG] [Thread-214612] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:22:16.085 [DEBUG] [Thread-214612] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:22:16.085 [DEBUG] [Thread-214612] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:22:16.085 [DEBUG] [Thread-214612] [transport.py] [_log()] Compression: none
2026-02-16T01:22:16.085 [DEBUG] [Thread-214612] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:22:16.145 [DEBUG] [Thread-214612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:22:16.146 [DEBUG] [Thread-214612] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:22:16.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:22:16.147 [DEBUG] [Thread-214612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:22:16.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:22:16.202 [DEBUG] [Thread-214612] [transport.py] [_log()] userauth is OK
2026-02-16T01:22:16.202 [DEBUG] [Thread-214612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:22:16.202 [DEBUG] [Thread-214612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:22:16.202 [DEBUG] [Thread-214612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:22:16.202 [DEBUG] [Thread-214612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:22:16.224 [INFO] [Thread-214612] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:22:16.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:22:16.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:22:17.105 [DEBUG] [Thread-214612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:22:17.106 [DEBUG] [Thread-214612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:22:17.153 [DEBUG] [Thread-214612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:22:17.153 [DEBUG] [Thread-214612] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:22:17.162 [DEBUG] [Thread-214612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:22:17.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:22:17.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:22:17.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:22:17.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:22:17.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:22:17.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:22:17.197 [DEBUG] [Thread-214612] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:22:19.277 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:27.065 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:27.256 [DEBUG] [Thread-214614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:27.272 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:27.273 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:31.139 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:32.206 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:42.167 [DEBUG] [Thread-214615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:42.297 [DEBUG] [Thread-214616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:47.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:22:47.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:22:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:22:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 22, 19), 8.16, 57.72, 0.0, 18.81, 13.23, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:22:49.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:22:19
2026-02-16T01:22:50.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:22:50.217 [DEBUG] [Thread-214617] [transport.py] [_log()] starting thread (client mode): 0xa57b0760
2026-02-16T01:22:50.218 [DEBUG] [Thread-214617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:22:50.237 [DEBUG] [Thread-214617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:22:50.238 [INFO] [Thread-214617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:22:50.240 [DEBUG] [Thread-214617] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:22:50.240 [DEBUG] [Thread-214617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:22:50.240 [DEBUG] [Thread-214617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:22:50.240 [DEBUG] [Thread-214617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] client lang: <none>
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] server lang: <none>
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] kex follows: False
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] Compression: none
2026-02-16T01:22:50.241 [DEBUG] [Thread-214617] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:22:50.259 [DEBUG] [Thread-214617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:22:50.259 [DEBUG] [Thread-214617] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:22:50.260 [DEBUG] [Thread-214617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:22:50.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:22:50.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:22:50.262 [DEBUG] [Thread-214617] [transport.py] [_log()] userauth is OK
2026-02-16T01:22:50.262 [DEBUG] [Thread-214617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:22:50.262 [DEBUG] [Thread-214617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:22:50.262 [DEBUG] [Thread-214617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:22:50.262 [DEBUG] [Thread-214617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:22:50.298 [INFO] [Thread-214617] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:22:50.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:22:50.861 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:22:50.908 [DEBUG] [Thread-214617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:22:50.908 [DEBUG] [Thread-214617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:22:50.908 [DEBUG] [Thread-214617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:22:50.949 [DEBUG] [Thread-214617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:22:50.950 [DEBUG] [Thread-214617] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:22:50.953 [DEBUG] [Thread-214617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:22:50.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:22:50.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:22:50.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:22:50.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:22:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:22:50.980 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:22:50.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:22:50.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:22:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:22:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.973711 -999.00  +13.20  16.43     62   +6.10 1 1 1 1 1     0    0 6.65 -27.62 ZNESW 15.1 16.4 147.0 20.1 13.7 -23.1 13.5 -22.2 13.3 -21.1 13.6 -22.2
2026-02-16T01:22:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:22:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:22:50.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.973711
2026-02-16T01:22:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:22:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:22:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:22:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:22:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:22:50.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:22:19', tmtdew=8.16, humidity=57.72, cloud=0.0, wind=18.81, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:22:19', seeing=2.35, atlas_timestamp='2026-02-15T23:22:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:20:00')
2026-02-16T01:22:50.983 [DEBUG] [Thread-214617] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:22:51.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:22:51.082 [DEBUG] [Thread-214620] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-16T01:22:51.082 [DEBUG] [Thread-214620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:22:51.098 [DEBUG] [Thread-214620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:22:51.099 [INFO] [Thread-214620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:22:51.106 [DEBUG] [Thread-214620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] client lang: <none>
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] server lang: <none>
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] kex follows: False
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] Compression: none
2026-02-16T01:22:51.107 [DEBUG] [Thread-214620] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:22:51.167 [DEBUG] [Thread-214620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:22:51.168 [DEBUG] [Thread-214620] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:22:51.168 [DEBUG] [Thread-214620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:22:51.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:22:51.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:22:51.222 [DEBUG] [Thread-214620] [transport.py] [_log()] userauth is OK
2026-02-16T01:22:51.222 [DEBUG] [Thread-214620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:22:51.222 [DEBUG] [Thread-214620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:22:51.222 [DEBUG] [Thread-214620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:22:51.222 [DEBUG] [Thread-214620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:22:51.236 [INFO] [Thread-214620] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:22:51.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:22:51.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:22:52.109 [DEBUG] [Thread-214620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:22:52.109 [DEBUG] [Thread-214620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:22:52.157 [DEBUG] [Thread-214620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:22:52.157 [DEBUG] [Thread-214620] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:22:52.166 [DEBUG] [Thread-214620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:22:52.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:22:52.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:22:52.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:22:52.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:22:52.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:22:52.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:22:52.200 [DEBUG] [Thread-214620] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:22:57.334 [DEBUG] [Thread-214622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:09.732 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:12.387 [DEBUG] [Thread-214623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:22.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:23:22.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:23:22.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:23:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 22, 54), 8.18, 57.45, 0.0, 23.41, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:23:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:22:54
2026-02-16T01:23:24.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:23:24.662 [DEBUG] [Thread-214624] [transport.py] [_log()] starting thread (client mode): 0xa2de8b50
2026-02-16T01:23:24.663 [DEBUG] [Thread-214624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:23:24.684 [DEBUG] [Thread-214624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:23:24.684 [INFO] [Thread-214624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] client lang: <none>
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] server lang: <none>
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] kex follows: False
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:23:24.687 [DEBUG] [Thread-214624] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:23:24.688 [DEBUG] [Thread-214624] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:23:24.688 [DEBUG] [Thread-214624] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:23:24.688 [DEBUG] [Thread-214624] [transport.py] [_log()] Compression: none
2026-02-16T01:23:24.688 [DEBUG] [Thread-214624] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:23:24.704 [DEBUG] [Thread-214624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:23:24.704 [DEBUG] [Thread-214624] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:23:24.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:23:24.705 [DEBUG] [Thread-214624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:23:24.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:23:24.708 [DEBUG] [Thread-214624] [transport.py] [_log()] userauth is OK
2026-02-16T01:23:24.708 [DEBUG] [Thread-214624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:23:24.708 [DEBUG] [Thread-214624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:23:24.708 [DEBUG] [Thread-214624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:23:24.709 [DEBUG] [Thread-214624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:23:24.733 [INFO] [Thread-214624] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:23:24.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:23:25.393 [DEBUG] [Thread-214624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:23:25.393 [DEBUG] [Thread-214624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:23:25.393 [DEBUG] [Thread-214624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:23:25.434 [DEBUG] [Thread-214624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:23:25.434 [DEBUG] [Thread-214624] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:23:25.436 [DEBUG] [Thread-214624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:23:25.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:23:25.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:23:25.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:23:25.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:23:25.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:23:25.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:23:25.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.974059 -999.00  +13.20  13.20     62   +6.10 1 1 1 1 1     0    0 6.67 -26.93 ZNESW 12.5 13.2 148.2 16.7 13.6 -23.2 13.5 -22.1 13.3 -21.0 13.6 -22.2
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.974059
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:23:25.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:23:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:23:25.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:22:54', tmtdew=8.18, humidity=57.45, cloud=0.0, wind=23.41, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:22:54', seeing=2.39, atlas_timestamp='2026-02-15T23:22:38.698', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:20:00')
2026-02-16T01:23:25.454 [DEBUG] [Thread-214624] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:23:25.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:23:25.535 [DEBUG] [Thread-214627] [transport.py] [_log()] starting thread (client mode): 0xa2debc70
2026-02-16T01:23:25.535 [DEBUG] [Thread-214627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:23:25.550 [DEBUG] [Thread-214627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:23:25.550 [INFO] [Thread-214627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] client lang: <none>
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] server lang: <none>
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] kex follows: False
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] Compression: none
2026-02-16T01:23:25.558 [DEBUG] [Thread-214627] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:23:25.613 [DEBUG] [Thread-214627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:23:25.613 [DEBUG] [Thread-214627] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:23:25.613 [DEBUG] [Thread-214627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:23:25.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:23:25.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:23:25.670 [DEBUG] [Thread-214627] [transport.py] [_log()] userauth is OK
2026-02-16T01:23:25.670 [DEBUG] [Thread-214627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:23:25.670 [DEBUG] [Thread-214627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:23:25.670 [DEBUG] [Thread-214627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:23:25.670 [DEBUG] [Thread-214627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:23:25.684 [INFO] [Thread-214627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:23:25.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:23:25.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:23:26.489 [DEBUG] [Thread-214627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:23:26.489 [DEBUG] [Thread-214627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:23:26.536 [DEBUG] [Thread-214627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:23:26.537 [DEBUG] [Thread-214627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:23:26.546 [DEBUG] [Thread-214627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:23:26.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:23:26.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:23:26.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:23:26.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:23:26.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:23:26.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:23:26.586 [DEBUG] [Thread-214627] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:23:27.424 [DEBUG] [Thread-214629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:27.477 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:27.478 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:28.716 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:42.233 [DEBUG] [Thread-214630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:42.480 [DEBUG] [Thread-214631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:47.479 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:53.655 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:56.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:23:56.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:23:56.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:23:57.516 [DEBUG] [Thread-214632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:23:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 23, 30), 8.21, 57.35, 0.0, 20.24, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:23:58.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:23:30
2026-02-16T01:23:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:23:59.338 [DEBUG] [Thread-214633] [transport.py] [_log()] starting thread (client mode): 0xa2d13b80
2026-02-16T01:23:59.338 [DEBUG] [Thread-214633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:23:59.358 [DEBUG] [Thread-214633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:23:59.359 [INFO] [Thread-214633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] client lang: <none>
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] server lang: <none>
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] kex follows: False
2026-02-16T01:23:59.362 [DEBUG] [Thread-214633] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:23:59.363 [DEBUG] [Thread-214633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:23:59.363 [DEBUG] [Thread-214633] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:23:59.363 [DEBUG] [Thread-214633] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:23:59.363 [DEBUG] [Thread-214633] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:23:59.363 [DEBUG] [Thread-214633] [transport.py] [_log()] Compression: none
2026-02-16T01:23:59.363 [DEBUG] [Thread-214633] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:23:59.379 [DEBUG] [Thread-214633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:23:59.380 [DEBUG] [Thread-214633] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:23:59.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:23:59.381 [DEBUG] [Thread-214633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:23:59.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:23:59.383 [DEBUG] [Thread-214633] [transport.py] [_log()] userauth is OK
2026-02-16T01:23:59.383 [DEBUG] [Thread-214633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:23:59.383 [DEBUG] [Thread-214633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:23:59.384 [DEBUG] [Thread-214633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:23:59.384 [DEBUG] [Thread-214633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:23:59.402 [INFO] [Thread-214633] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:23:59.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:24:00.143 [DEBUG] [Thread-214633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:24:00.143 [DEBUG] [Thread-214633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:24:00.144 [DEBUG] [Thread-214633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:24:00.184 [DEBUG] [Thread-214633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:24:00.185 [DEBUG] [Thread-214633] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:24:00.188 [DEBUG] [Thread-214633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:24:00.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:24:00.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:24:00.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:24:00.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:24:00.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:24:00.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:24:00.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:24:00.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:24:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:24:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.974406 -999.00  +13.20  16.40     62   +6.20 1 1 1 1 1     0    0 6.51 -27.57 ZNESW 18.1 16.4 145.0 19.1 13.6 -23.1 13.5 -22.0 13.2 -20.9 13.6 -22.2
2026-02-16T01:24:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:24:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:24:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.974406
2026-02-16T01:24:00.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:24:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:24:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:24:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:24:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:24:00.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:23:30', tmtdew=8.21, humidity=57.35, cloud=0.0, wind=20.24, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:23:31', seeing=2.04, atlas_timestamp='2026-02-15T23:23:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:20:00')
2026-02-16T01:24:00.214 [DEBUG] [Thread-214633] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:24:00.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:24:00.310 [DEBUG] [Thread-214636] [transport.py] [_log()] starting thread (client mode): 0xa57b1c90
2026-02-16T01:24:00.310 [DEBUG] [Thread-214636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:24:00.324 [DEBUG] [Thread-214636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:24:00.324 [INFO] [Thread-214636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] client lang: <none>
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] server lang: <none>
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] kex follows: False
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:24:00.331 [DEBUG] [Thread-214636] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:24:00.332 [DEBUG] [Thread-214636] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:24:00.332 [DEBUG] [Thread-214636] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:24:00.332 [DEBUG] [Thread-214636] [transport.py] [_log()] Compression: none
2026-02-16T01:24:00.332 [DEBUG] [Thread-214636] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:24:00.390 [DEBUG] [Thread-214636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:24:00.390 [DEBUG] [Thread-214636] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:24:00.390 [DEBUG] [Thread-214636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:24:00.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:24:00.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:24:00.447 [DEBUG] [Thread-214636] [transport.py] [_log()] userauth is OK
2026-02-16T01:24:00.448 [DEBUG] [Thread-214636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:24:00.448 [DEBUG] [Thread-214636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:24:00.448 [DEBUG] [Thread-214636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:24:00.448 [DEBUG] [Thread-214636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:24:00.471 [INFO] [Thread-214636] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:24:00.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:24:00.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:24:01.269 [DEBUG] [Thread-214636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:24:01.270 [DEBUG] [Thread-214636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:24:01.317 [DEBUG] [Thread-214636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:24:01.318 [DEBUG] [Thread-214636] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:24:01.326 [DEBUG] [Thread-214636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:24:01.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:24:01.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-02-16T01:24:01.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:24:01.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:24:01.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:24:01.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:24:01.357 [DEBUG] [Thread-214636] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:24:02.542 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:06.137 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:06.636 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:12.556 [DEBUG] [Thread-214638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:24.795 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:27.613 [DEBUG] [Thread-214639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:27.700 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:27.702 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:31.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:24:31.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:24:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:24:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 24, 6), 8.23, 57.28, 0.0, 22.09, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:24:33.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:24:06
2026-02-16T01:24:33.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:24:33.681 [DEBUG] [Thread-214640] [transport.py] [_log()] starting thread (client mode): 0xa81d71c0
2026-02-16T01:24:33.681 [DEBUG] [Thread-214640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:24:33.700 [DEBUG] [Thread-214640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:24:33.701 [INFO] [Thread-214640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:24:33.704 [DEBUG] [Thread-214640] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:24:33.704 [DEBUG] [Thread-214640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:24:33.704 [DEBUG] [Thread-214640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:24:33.704 [DEBUG] [Thread-214640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:24:33.704 [DEBUG] [Thread-214640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:24:33.704 [DEBUG] [Thread-214640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] client lang: <none>
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] server lang: <none>
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] kex follows: False
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] Compression: none
2026-02-16T01:24:33.705 [DEBUG] [Thread-214640] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:24:33.724 [DEBUG] [Thread-214640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:24:33.724 [DEBUG] [Thread-214640] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:24:33.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:24:33.725 [DEBUG] [Thread-214640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:24:33.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:24:33.727 [DEBUG] [Thread-214640] [transport.py] [_log()] userauth is OK
2026-02-16T01:24:33.727 [DEBUG] [Thread-214640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:24:33.727 [DEBUG] [Thread-214640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:24:33.727 [DEBUG] [Thread-214640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:24:33.727 [DEBUG] [Thread-214640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:24:33.748 [INFO] [Thread-214640] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:24:33.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:24:34.392 [DEBUG] [Thread-214640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:24:34.392 [DEBUG] [Thread-214640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:24:34.393 [DEBUG] [Thread-214640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:24:34.433 [DEBUG] [Thread-214640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:24:34.434 [DEBUG] [Thread-214640] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:24:34.437 [DEBUG] [Thread-214640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:24:34.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:24:34.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:24:34.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:24:34.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:24:34.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:24:34.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:24:34.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:24:34.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:24:34.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:24:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.975100 -999.00  +13.20   9.87     62   +6.10 1 1 1 1 1     0    0 6.52 -28.35 ZNESW 12.0 9.9 148.4 23.3 13.6 -23.0 13.4 -22.0 13.3 -20.9 13.6 -22.2
2026-02-16T01:24:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:24:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:24:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.975100
2026-02-16T01:24:34.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:24:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:24:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:24:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:24:34.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:24:34.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:24:06', tmtdew=8.23, humidity=57.28, cloud=0.0, wind=22.09, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:24:06', seeing=2.41, atlas_timestamp='2026-02-15T23:24:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:23:00')
2026-02-16T01:24:34.465 [DEBUG] [Thread-214640] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:24:34.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:24:34.559 [DEBUG] [Thread-214643] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fa0
2026-02-16T01:24:34.559 [DEBUG] [Thread-214643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:24:34.573 [DEBUG] [Thread-214643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:24:34.574 [INFO] [Thread-214643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:24:34.581 [DEBUG] [Thread-214643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] client lang: <none>
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] server lang: <none>
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] kex follows: False
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] Compression: none
2026-02-16T01:24:34.582 [DEBUG] [Thread-214643] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:24:34.639 [DEBUG] [Thread-214643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:24:34.640 [DEBUG] [Thread-214643] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:24:34.640 [DEBUG] [Thread-214643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:24:34.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:24:34.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:24:34.696 [DEBUG] [Thread-214643] [transport.py] [_log()] userauth is OK
2026-02-16T01:24:34.696 [DEBUG] [Thread-214643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:24:34.696 [DEBUG] [Thread-214643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:24:34.696 [DEBUG] [Thread-214643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:24:34.696 [DEBUG] [Thread-214643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:24:34.715 [INFO] [Thread-214643] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:24:34.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:24:34.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:24:35.502 [DEBUG] [Thread-214643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:24:35.503 [DEBUG] [Thread-214643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:24:35.550 [DEBUG] [Thread-214643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:24:35.550 [DEBUG] [Thread-214643] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:24:35.559 [DEBUG] [Thread-214643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:24:35.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:24:35.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:24:35.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:24:35.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:24:35.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:24:35.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:24:35.593 [DEBUG] [Thread-214643] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:24:42.301 [DEBUG] [Thread-214645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:42.648 [DEBUG] [Thread-214646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:43.718 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:24:57.699 [DEBUG] [Thread-214647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:02.683 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:05.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:25:05.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:25:05.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 24, 41), 8.42, 56.67, 0.0, 21.49, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:25:07.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:24:41
2026-02-16T01:25:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:25:08.188 [DEBUG] [Thread-214648] [transport.py] [_log()] starting thread (client mode): 0xa57e31c0
2026-02-16T01:25:08.188 [DEBUG] [Thread-214648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:25:08.208 [DEBUG] [Thread-214648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:25:08.208 [INFO] [Thread-214648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:25:08.211 [DEBUG] [Thread-214648] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:25:08.211 [DEBUG] [Thread-214648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:25:08.211 [DEBUG] [Thread-214648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:25:08.211 [DEBUG] [Thread-214648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] client lang: <none>
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] server lang: <none>
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] kex follows: False
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] Compression: none
2026-02-16T01:25:08.212 [DEBUG] [Thread-214648] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:25:08.230 [DEBUG] [Thread-214648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:25:08.231 [DEBUG] [Thread-214648] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:25:08.231 [DEBUG] [Thread-214648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:25:08.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:25:08.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:25:08.234 [DEBUG] [Thread-214648] [transport.py] [_log()] userauth is OK
2026-02-16T01:25:08.234 [DEBUG] [Thread-214648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:25:08.234 [DEBUG] [Thread-214648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:25:08.234 [DEBUG] [Thread-214648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:25:08.234 [DEBUG] [Thread-214648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:25:08.258 [INFO] [Thread-214648] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:25:08.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:25:12.737 [DEBUG] [Thread-214650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:16.090 [DEBUG] [Thread-214648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:25:16.090 [DEBUG] [Thread-214648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:25:16.091 [DEBUG] [Thread-214648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:25:16.131 [DEBUG] [Thread-214648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:25:16.131 [DEBUG] [Thread-214648] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:25:16.135 [DEBUG] [Thread-214648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:25:16.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:25:16.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:25:16.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:25:16.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:25:16.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:25:16.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:25:16.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:25:16.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:25:16.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:25:16.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.975447 -999.00  +13.20  11.64     62   +6.10 1 1 1 1 1     0    0 6.47 -28.47 ZNESW 12.5 11.6 151.6 18.6 13.6 -23.2 13.5 -21.9 13.2 -21.0 13.6 -22.2
2026-02-16T01:25:16.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:25:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:25:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.975447
2026-02-16T01:25:16.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:25:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:25:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:25:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:25:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:25:16.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:24:41', tmtdew=8.42, humidity=56.67, cloud=0.0, wind=21.49, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:24:41', seeing=1.73, atlas_timestamp='2026-02-15T23:24:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:23:00')
2026-02-16T01:25:16.226 [DEBUG] [Thread-214648] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:25:16.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:25:16.324 [DEBUG] [Thread-214652] [transport.py] [_log()] starting thread (client mode): 0xa81d5540
2026-02-16T01:25:16.324 [DEBUG] [Thread-214652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:25:16.339 [DEBUG] [Thread-214652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:25:16.339 [INFO] [Thread-214652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:25:16.347 [DEBUG] [Thread-214652] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:25:16.347 [DEBUG] [Thread-214652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:25:16.348 [DEBUG] [Thread-214652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] client lang: <none>
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] server lang: <none>
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] kex follows: False
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:25:16.349 [DEBUG] [Thread-214652] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:25:16.350 [DEBUG] [Thread-214652] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:25:16.350 [DEBUG] [Thread-214652] [transport.py] [_log()] Compression: none
2026-02-16T01:25:16.350 [DEBUG] [Thread-214652] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:25:16.404 [DEBUG] [Thread-214652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:25:16.405 [DEBUG] [Thread-214652] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:25:16.406 [DEBUG] [Thread-214652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:25:16.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:25:16.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:25:16.460 [DEBUG] [Thread-214652] [transport.py] [_log()] userauth is OK
2026-02-16T01:25:16.461 [DEBUG] [Thread-214652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:25:16.461 [DEBUG] [Thread-214652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:25:16.461 [DEBUG] [Thread-214652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:25:16.461 [DEBUG] [Thread-214652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:25:16.485 [INFO] [Thread-214652] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:25:16.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:25:16.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:25:17.305 [DEBUG] [Thread-214652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:25:17.305 [DEBUG] [Thread-214652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:25:17.353 [DEBUG] [Thread-214652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:25:17.353 [DEBUG] [Thread-214652] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:25:17.362 [DEBUG] [Thread-214652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:25:17.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:25:17.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:25:17.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:25:17.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:25:17.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:25:17.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:25:17.395 [DEBUG] [Thread-214652] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:25:21.674 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:27.775 [DEBUG] [Thread-214654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:27.902 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:27.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:29.126 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:37.915 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:40.596 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:42.012 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:42.369 [DEBUG] [Thread-214655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:42.829 [DEBUG] [Thread-214656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:25:47.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:25:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:25:49.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 25, 17), 8.2, 57.57, 0.0, 18.62, 13.23, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:25:49.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:25:17
2026-02-16T01:25:49.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:25:49.810 [DEBUG] [Thread-214657] [transport.py] [_log()] starting thread (client mode): 0xa5773b20
2026-02-16T01:25:49.810 [DEBUG] [Thread-214657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:25:49.830 [DEBUG] [Thread-214657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:25:49.830 [INFO] [Thread-214657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] client lang: <none>
2026-02-16T01:25:49.833 [DEBUG] [Thread-214657] [transport.py] [_log()] server lang: <none>
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] kex follows: False
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] Compression: none
2026-02-16T01:25:49.834 [DEBUG] [Thread-214657] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:25:49.854 [DEBUG] [Thread-214657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:25:49.855 [DEBUG] [Thread-214657] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:25:49.856 [DEBUG] [Thread-214657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:25:49.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:25:49.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:25:49.858 [DEBUG] [Thread-214657] [transport.py] [_log()] userauth is OK
2026-02-16T01:25:49.858 [DEBUG] [Thread-214657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:25:49.858 [DEBUG] [Thread-214657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:25:49.858 [DEBUG] [Thread-214657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:25:49.858 [DEBUG] [Thread-214657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:25:49.884 [INFO] [Thread-214657] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:25:49.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:25:50.513 [DEBUG] [Thread-214657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:25:50.514 [DEBUG] [Thread-214657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:25:50.514 [DEBUG] [Thread-214657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:25:50.554 [DEBUG] [Thread-214657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:25:50.554 [DEBUG] [Thread-214657] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:25:50.558 [DEBUG] [Thread-214657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:25:50.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:25:50.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:25:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:25:50.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:25:50.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:25:50.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:25:50.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:25:50.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:25:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:25:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.975794 -999.00  +13.10  10.32     62   +6.10 1 1 1 1 1     0    0 6.52 -27.22 ZNESW 11.2 10.3 165.8 18.2 13.6 -23.2 13.4 -21.9 13.2 -20.9 13.6 -22.2
2026-02-16T01:25:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:25:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:25:50.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.975794
2026-02-16T01:25:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:25:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:25:50.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:25:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:25:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:25:50.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:25:17', tmtdew=8.2, humidity=57.57, cloud=0.0, wind=18.62, temperature=13.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:25:17', seeing=2.48, atlas_timestamp='2026-02-15T23:25:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:23:00')
2026-02-16T01:25:50.582 [DEBUG] [Thread-214657] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:25:50.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:25:50.680 [DEBUG] [Thread-214660] [transport.py] [_log()] starting thread (client mode): 0xa5772050
2026-02-16T01:25:50.681 [DEBUG] [Thread-214660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:25:50.695 [DEBUG] [Thread-214660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:25:50.695 [INFO] [Thread-214660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:25:50.702 [DEBUG] [Thread-214660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] client lang: <none>
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] server lang: <none>
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] kex follows: False
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] Compression: none
2026-02-16T01:25:50.703 [DEBUG] [Thread-214660] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:25:50.760 [DEBUG] [Thread-214660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:25:50.761 [DEBUG] [Thread-214660] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:25:50.762 [DEBUG] [Thread-214660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:25:50.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:25:50.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:25:50.816 [DEBUG] [Thread-214660] [transport.py] [_log()] userauth is OK
2026-02-16T01:25:50.816 [DEBUG] [Thread-214660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:25:50.816 [DEBUG] [Thread-214660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:25:50.816 [DEBUG] [Thread-214660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:25:50.817 [DEBUG] [Thread-214660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:25:50.835 [INFO] [Thread-214660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:25:50.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:25:50.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:25:51.679 [DEBUG] [Thread-214660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:25:51.679 [DEBUG] [Thread-214660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:25:51.728 [DEBUG] [Thread-214660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:25:51.728 [DEBUG] [Thread-214660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:25:51.737 [DEBUG] [Thread-214660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:25:51.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:25:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:25:51.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:25:51.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:25:51.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:25:51.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:25:51.774 [DEBUG] [Thread-214660] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:25:57.866 [DEBUG] [Thread-214662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:25:59.430 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:12.926 [DEBUG] [Thread-214663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:18.216 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:21.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:26:21.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:26:21.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:26:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 25, 53), 8.13, 57.63, 0.0, 20.68, 13.18, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:26:23.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:25:53
2026-02-16T01:26:23.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:26:24.129 [DEBUG] [Thread-214664] [transport.py] [_log()] starting thread (client mode): 0xa2debcd0
2026-02-16T01:26:24.130 [DEBUG] [Thread-214664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:26:24.149 [DEBUG] [Thread-214664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:26:24.150 [INFO] [Thread-214664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:26:24.153 [DEBUG] [Thread-214664] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:26:24.153 [DEBUG] [Thread-214664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:26:24.153 [DEBUG] [Thread-214664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:26:24.153 [DEBUG] [Thread-214664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:24.153 [DEBUG] [Thread-214664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:24.153 [DEBUG] [Thread-214664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] client lang: <none>
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] server lang: <none>
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] kex follows: False
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] Compression: none
2026-02-16T01:26:24.154 [DEBUG] [Thread-214664] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:26:24.172 [DEBUG] [Thread-214664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:26:24.173 [DEBUG] [Thread-214664] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:26:24.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:26:24.174 [DEBUG] [Thread-214664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:26:24.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:26:24.176 [DEBUG] [Thread-214664] [transport.py] [_log()] userauth is OK
2026-02-16T01:26:24.176 [DEBUG] [Thread-214664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:26:24.177 [DEBUG] [Thread-214664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:26:24.177 [DEBUG] [Thread-214664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:26:24.177 [DEBUG] [Thread-214664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:26:24.192 [INFO] [Thread-214664] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:26:24.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:26:24.843 [DEBUG] [Thread-214664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:26:24.843 [DEBUG] [Thread-214664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:26:24.843 [DEBUG] [Thread-214664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:26:24.884 [DEBUG] [Thread-214664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:26:24.884 [DEBUG] [Thread-214664] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:26:24.887 [DEBUG] [Thread-214664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:26:24.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:26:24.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:26:24.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:26:24.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:26:24.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:26:24.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:26:24.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:26:24.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:26:24.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:26:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.976142 -999.00  +13.10  15.53     62   +6.10 1 1 1 1 1     0    0 6.57 -26.72 ZNESW 22.5 15.5 140.2 17.7 13.6 -22.8 13.4 -21.9 13.2 -20.5 13.5 -22.1
2026-02-16T01:26:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:26:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:26:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.976142
2026-02-16T01:26:24.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:26:24.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:26:24.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:26:24.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:26:24.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:26:24.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:25:53', tmtdew=8.13, humidity=57.63, cloud=0.0, wind=20.68, temperature=13.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:25:54', seeing=2.48, atlas_timestamp='2026-02-15T23:25:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:23:00')
2026-02-16T01:26:24.912 [DEBUG] [Thread-214664] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:26:24.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:26:25.005 [DEBUG] [Thread-214667] [transport.py] [_log()] starting thread (client mode): 0xa57b3bb0
2026-02-16T01:26:25.005 [DEBUG] [Thread-214667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:26:25.020 [DEBUG] [Thread-214667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:26:25.020 [INFO] [Thread-214667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:26:25.028 [DEBUG] [Thread-214667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:26:25.028 [DEBUG] [Thread-214667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:26:25.028 [DEBUG] [Thread-214667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:26:25.028 [DEBUG] [Thread-214667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] client lang: <none>
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] server lang: <none>
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] kex follows: False
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:26:25.029 [DEBUG] [Thread-214667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:26:25.030 [DEBUG] [Thread-214667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:26:25.030 [DEBUG] [Thread-214667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:26:25.030 [DEBUG] [Thread-214667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:26:25.030 [DEBUG] [Thread-214667] [transport.py] [_log()] Compression: none
2026-02-16T01:26:25.030 [DEBUG] [Thread-214667] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:26:25.091 [DEBUG] [Thread-214667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:26:25.092 [DEBUG] [Thread-214667] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:26:25.092 [DEBUG] [Thread-214667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:26:25.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:26:25.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:26:25.148 [DEBUG] [Thread-214667] [transport.py] [_log()] userauth is OK
2026-02-16T01:26:25.148 [DEBUG] [Thread-214667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:26:25.148 [DEBUG] [Thread-214667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:26:25.148 [DEBUG] [Thread-214667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:26:25.148 [DEBUG] [Thread-214667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:26:25.167 [INFO] [Thread-214667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:26:25.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:26:25.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:26:25.973 [DEBUG] [Thread-214667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:26:25.973 [DEBUG] [Thread-214667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:26:26.021 [DEBUG] [Thread-214667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:26:26.021 [DEBUG] [Thread-214667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:26:26.030 [DEBUG] [Thread-214667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:26:26.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:26:26.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:26:26.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-02-16T01:26:26.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:26:26.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:26:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:26:26.065 [DEBUG] [Thread-214667] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:26:27.964 [DEBUG] [Thread-214669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:28.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:28.119 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:37.044 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:42.426 [DEBUG] [Thread-214670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:43.015 [DEBUG] [Thread-214671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:55.738 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:56.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:26:56.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:26:56.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:26:58.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 26, 29), 8.11, 57.7, 0.0, 24.63, 13.15, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:26:58.051 [DEBUG] [Thread-214672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:26:58.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:26:29
2026-02-16T01:26:58.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:26:58.613 [DEBUG] [Thread-214673] [transport.py] [_log()] starting thread (client mode): 0xa57b0b50
2026-02-16T01:26:58.613 [DEBUG] [Thread-214673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:26:58.634 [DEBUG] [Thread-214673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:26:58.634 [INFO] [Thread-214673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] client lang: <none>
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] server lang: <none>
2026-02-16T01:26:58.636 [DEBUG] [Thread-214673] [transport.py] [_log()] kex follows: False
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] Compression: none
2026-02-16T01:26:58.637 [DEBUG] [Thread-214673] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:26:58.647 [DEBUG] [Thread-214673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:26:58.648 [DEBUG] [Thread-214673] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:26:58.649 [DEBUG] [Thread-214673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:26:58.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:26:58.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:26:58.652 [DEBUG] [Thread-214673] [transport.py] [_log()] userauth is OK
2026-02-16T01:26:58.652 [DEBUG] [Thread-214673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:26:58.652 [DEBUG] [Thread-214673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:26:58.652 [DEBUG] [Thread-214673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:26:58.652 [DEBUG] [Thread-214673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:26:58.690 [INFO] [Thread-214673] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:26:58.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:26:59.317 [DEBUG] [Thread-214673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:26:59.317 [DEBUG] [Thread-214673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:26:59.318 [DEBUG] [Thread-214673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:26:59.358 [DEBUG] [Thread-214673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:26:59.359 [DEBUG] [Thread-214673] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:26:59.362 [DEBUG] [Thread-214673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:26:59.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:26:59.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:26:59.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:26:59.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:26:59.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:26:59.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:26:59.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:26:59.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:26:59.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:26:59.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.976489 -999.00  +13.20  13.65     62   +6.10 1 1 1 1 1     0    0 6.58 -26.19 ZNESW 14.9 13.7 141.8 19.0 13.6 -23.1 13.4 -21.9 13.2 -20.8 13.5 -21.9
2026-02-16T01:26:59.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:26:59.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:26:59.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.976489
2026-02-16T01:26:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:26:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:26:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:26:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:26:59.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:26:59.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:26:29', tmtdew=8.11, humidity=57.7, cloud=0.0, wind=24.63, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:26:29', seeing=2.48, atlas_timestamp='2026-02-15T23:26:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.004749999999999588, -0.09875000000000078, -0.03550000000000075, -0.042500000000000426, 0.007750000000001478, -0.0129999999999999, 0.03625000000000078, -0.0045000000000001705, 0.015000000000000568, -0.02775000000000105, -0.0519999999999996, 0.0129999999999999, 0.024250000000000327, 0.023999999999999133, 0.016000000000000014, 0.03725000000000023, -0.011499999999999844, 0.006999999999999673, -0.02075000000000138, 0.050499999999999545, 0.02324999999999733, -0.0007500000000000284, 0.016750000000000043, 0.04399999999999871, -0.029500000000000526, 0.030250000000000554, 0.03550000000000075, 0.02850000000000108, -0.018499999999999517, 0.04800000000000182, 0.04499999999999993, 0.021749999999999048], zp_timestamp='2026-02-15T23:23:00')
2026-02-16T01:26:59.387 [DEBUG] [Thread-214673] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:26:59.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:26:59.483 [DEBUG] [Thread-214676] [transport.py] [_log()] starting thread (client mode): 0xa2d12620
2026-02-16T01:26:59.483 [DEBUG] [Thread-214676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:26:59.497 [DEBUG] [Thread-214676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:26:59.497 [INFO] [Thread-214676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:26:59.505 [DEBUG] [Thread-214676] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:26:59.505 [DEBUG] [Thread-214676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:26:59.505 [DEBUG] [Thread-214676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:26:59.505 [DEBUG] [Thread-214676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:59.505 [DEBUG] [Thread-214676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:26:59.505 [DEBUG] [Thread-214676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] client lang: <none>
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] server lang: <none>
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] kex follows: False
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] Compression: none
2026-02-16T01:26:59.506 [DEBUG] [Thread-214676] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:26:59.564 [DEBUG] [Thread-214676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:26:59.565 [DEBUG] [Thread-214676] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:26:59.566 [DEBUG] [Thread-214676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:26:59.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:26:59.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:26:59.620 [DEBUG] [Thread-214676] [transport.py] [_log()] userauth is OK
2026-02-16T01:26:59.621 [DEBUG] [Thread-214676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:26:59.621 [DEBUG] [Thread-214676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:26:59.621 [DEBUG] [Thread-214676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:26:59.621 [DEBUG] [Thread-214676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:26:59.639 [INFO] [Thread-214676] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:26:59.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:26:59.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:27:00.454 [DEBUG] [Thread-214676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:27:00.455 [DEBUG] [Thread-214676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:27:00.502 [DEBUG] [Thread-214676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:27:00.503 [DEBUG] [Thread-214676] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:27:00.512 [DEBUG] [Thread-214676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:27:00.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:27:00.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:27:00.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:27:00.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:27:00.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:27:00.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:27:00.549 [DEBUG] [Thread-214676] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:27:04.590 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:13.087 [DEBUG] [Thread-214678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:14.433 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:28.136 [DEBUG] [Thread-214679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:28.319 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:28.321 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:30.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:27:30.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:27:30.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:27:32.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 27, 4), 8.1, 57.77, 0.0, 21.3, 13.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:27:32.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:27:04
2026-02-16T01:27:32.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:27:32.852 [DEBUG] [Thread-214680] [transport.py] [_log()] starting thread (client mode): 0xa57e0490
2026-02-16T01:27:32.852 [DEBUG] [Thread-214680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:27:32.873 [DEBUG] [Thread-214680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:27:32.873 [INFO] [Thread-214680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] client lang: <none>
2026-02-16T01:27:32.876 [DEBUG] [Thread-214680] [transport.py] [_log()] server lang: <none>
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] kex follows: False
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] Compression: none
2026-02-16T01:27:32.877 [DEBUG] [Thread-214680] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:27:32.893 [DEBUG] [Thread-214680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:27:32.893 [DEBUG] [Thread-214680] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:27:32.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:27:32.894 [DEBUG] [Thread-214680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:27:32.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:27:32.895 [DEBUG] [Thread-214680] [transport.py] [_log()] userauth is OK
2026-02-16T01:27:32.896 [DEBUG] [Thread-214680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:27:32.896 [DEBUG] [Thread-214680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:27:32.896 [DEBUG] [Thread-214680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:27:32.896 [DEBUG] [Thread-214680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:27:32.918 [INFO] [Thread-214680] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:27:32.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:27:33.218 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:33.557 [DEBUG] [Thread-214680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:27:33.557 [DEBUG] [Thread-214680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:27:33.557 [DEBUG] [Thread-214680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:27:33.598 [DEBUG] [Thread-214680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:27:33.599 [DEBUG] [Thread-214680] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:27:33.602 [DEBUG] [Thread-214680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:27:33.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:27:33.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:27:33.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:27:33.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:27:33.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:27:33.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:27:33.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:27:33.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:27:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:27:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.976836 -999.00  +13.20  13.68     62   +6.10 1 1 1 1 1     0    0 6.50 -26.25 ZNESW 13.1 13.7 158.6 19.5 13.5 -22.9 13.4 -21.9 13.3 -20.8 13.5 -22.0
2026-02-16T01:27:33.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:27:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:27:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.976836
2026-02-16T01:27:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:27:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:27:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:27:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:27:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:27:33.627 [DEBUG] [Thread-214680] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:27:33.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:27:04', tmtdew=8.1, humidity=57.77, cloud=0.0, wind=21.3, temperature=13.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:27:04', seeing=2.48, atlas_timestamp='2026-02-15T23:26:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05375000000000085, 0.013750000000001705, -0.10874999999999879, -0.07499999999999929, -0.06649999999999956, 0.005250000000000199, -0.008000000000000895, -0.0337499999999995, -0.008500000000001506, -0.006999999999999673, -0.06874999999999964, -0.05500000000000149, -0.009000000000000341, 0.01124999999999865, 0.0009999999999994458, -0.010500000000000398, 0.021249999999998437, 0.01249999999999929, -0.03350000000000186, -0.026750000000001606, 0.019499999999998963, 0.03524999999999778, 0.022250000000001435, -0.005250000000000199, 0.0129999999999999, -0.022499999999999076, 0.03175000000000061, -0.029500000000000526, 0.04400000000000048, -0.019999999999999574, 0.032000000000001805, 0.03200000000000003, 0.02674999999999983], zp_timestamp='2026-02-15T23:25:00')
2026-02-16T01:27:33.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:27:33.724 [DEBUG] [Thread-214683] [transport.py] [_log()] starting thread (client mode): 0xa2d25d20
2026-02-16T01:27:33.724 [DEBUG] [Thread-214683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:27:33.739 [DEBUG] [Thread-214683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:27:33.739 [INFO] [Thread-214683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] client lang: <none>
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] server lang: <none>
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] kex follows: False
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:27:33.747 [DEBUG] [Thread-214683] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:27:33.748 [DEBUG] [Thread-214683] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:27:33.748 [DEBUG] [Thread-214683] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:27:33.748 [DEBUG] [Thread-214683] [transport.py] [_log()] Compression: none
2026-02-16T01:27:33.748 [DEBUG] [Thread-214683] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:27:33.809 [DEBUG] [Thread-214683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:27:33.810 [DEBUG] [Thread-214683] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:27:33.810 [DEBUG] [Thread-214683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:27:33.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:27:33.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:27:33.865 [DEBUG] [Thread-214683] [transport.py] [_log()] userauth is OK
2026-02-16T01:27:33.865 [DEBUG] [Thread-214683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:27:33.865 [DEBUG] [Thread-214683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:27:33.865 [DEBUG] [Thread-214683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:27:33.865 [DEBUG] [Thread-214683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:27:33.890 [INFO] [Thread-214683] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:27:33.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:27:33.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:27:34.713 [DEBUG] [Thread-214683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:27:34.714 [DEBUG] [Thread-214683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:27:34.761 [DEBUG] [Thread-214683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:27:34.762 [DEBUG] [Thread-214683] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:27:34.771 [DEBUG] [Thread-214683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:27:34.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:27:34.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:27: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') -> 00000000
2026-02-16T01:27:34.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:27:34.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:27:34.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:27:34.812 [DEBUG] [Thread-214683] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:27:42.494 [DEBUG] [Thread-214685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:43.173 [DEBUG] [Thread-214686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:52.090 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:58.226 [DEBUG] [Thread-214687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:27:58.275 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:01.471 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:04.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:28:04.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:28:04.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:28:06.545 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 27, 39), 8.23, 57.43, 0.0, 21.45, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:28:06.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:27:39
2026-02-16T01:28:07.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:28:07.151 [DEBUG] [Thread-214688] [transport.py] [_log()] starting thread (client mode): 0xa2d6f8b0
2026-02-16T01:28:07.151 [DEBUG] [Thread-214688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:28:07.171 [DEBUG] [Thread-214688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:28:07.171 [INFO] [Thread-214688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:07.174 [DEBUG] [Thread-214688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] client lang: <none>
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] server lang: <none>
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] kex follows: False
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] Compression: none
2026-02-16T01:28:07.175 [DEBUG] [Thread-214688] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:28:07.193 [DEBUG] [Thread-214688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:28:07.194 [DEBUG] [Thread-214688] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:28:07.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:28:07.195 [DEBUG] [Thread-214688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:28:07.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:28:07.236 [DEBUG] [Thread-214688] [transport.py] [_log()] userauth is OK
2026-02-16T01:28:07.237 [DEBUG] [Thread-214688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:28:07.237 [DEBUG] [Thread-214688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:28:07.237 [DEBUG] [Thread-214688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:28:07.237 [DEBUG] [Thread-214688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:28:07.268 [INFO] [Thread-214688] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:28:07.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:28:08.058 [DEBUG] [Thread-214688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:28:08.058 [DEBUG] [Thread-214688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:28:08.059 [DEBUG] [Thread-214688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:28:08.100 [DEBUG] [Thread-214688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:28:08.100 [DEBUG] [Thread-214688] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:28:08.102 [DEBUG] [Thread-214688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:28:08.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:28:08.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:28:08.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:28:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:28:08.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:28:08.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:28:08.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.977531 -999.00  +13.20  16.13     62   +6.10 1 1 1 1 1     0    0 6.51 -26.66 ZNESW 16.6 16.1 139.2 20.9 13.6 -23.0 13.4 -21.9 13.2 -20.8 13.6 -22.2
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.977531
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:28:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:27:39', tmtdew=8.23, humidity=57.43, cloud=0.0, wind=21.45, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:27:39', seeing=2.48, atlas_timestamp='2026-02-15T23:27:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05375000000000085, 0.013750000000001705, -0.10874999999999879, -0.07499999999999929, -0.06649999999999956, 0.005250000000000199, -0.008000000000000895, -0.0337499999999995, -0.008500000000001506, -0.006999999999999673, -0.06874999999999964, -0.05500000000000149, -0.009000000000000341, 0.01124999999999865, 0.0009999999999994458, -0.010500000000000398, 0.021249999999998437, 0.01249999999999929, -0.03350000000000186, -0.026750000000001606, 0.019499999999998963, 0.03524999999999778, 0.022250000000001435, -0.005250000000000199, 0.0129999999999999, -0.022499999999999076, 0.03175000000000061, -0.029500000000000526, 0.04400000000000048, -0.019999999999999574, 0.032000000000001805, 0.03200000000000003, 0.02674999999999983], zp_timestamp='2026-02-15T23:25:00')
2026-02-16T01:28:08.121 [DEBUG] [Thread-214688] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:28:08.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:28:08.202 [DEBUG] [Thread-214691] [transport.py] [_log()] starting thread (client mode): 0xa57e26e0
2026-02-16T01:28:08.202 [DEBUG] [Thread-214691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:28:08.217 [DEBUG] [Thread-214691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:28:08.217 [INFO] [Thread-214691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:28:08.224 [DEBUG] [Thread-214691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] client lang: <none>
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] server lang: <none>
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] kex follows: False
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] Compression: none
2026-02-16T01:28:08.225 [DEBUG] [Thread-214691] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:28:08.285 [DEBUG] [Thread-214691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:28:08.286 [DEBUG] [Thread-214691] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:28:08.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:28:08.287 [DEBUG] [Thread-214691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:28:08.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:28:08.341 [DEBUG] [Thread-214691] [transport.py] [_log()] userauth is OK
2026-02-16T01:28:08.342 [DEBUG] [Thread-214691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:28:08.342 [DEBUG] [Thread-214691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:28:08.342 [DEBUG] [Thread-214691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:28:08.342 [DEBUG] [Thread-214691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:28:08.362 [INFO] [Thread-214691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:28:08.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:28:08.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:28:09.185 [DEBUG] [Thread-214691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:28:09.185 [DEBUG] [Thread-214691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:28:09.232 [DEBUG] [Thread-214691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:28:09.232 [DEBUG] [Thread-214691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:28:09.241 [DEBUG] [Thread-214691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:28:09.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:28:09.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:28:09.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:28:09.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:28:09.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:28:09.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:28:09.275 [DEBUG] [Thread-214691] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:28:10.779 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:12.977 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:13.262 [DEBUG] [Thread-214693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:28.313 [DEBUG] [Thread-214694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:28.522 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:28.523 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:29.440 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:32.386 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:36.789 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:39.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:28:39.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:28:39.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:28:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 28, 15), 8.17, 57.67, 0.0, 19.14, 13.18, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:28:41.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:28:15
2026-02-16T01:28:41.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:28:41.702 [DEBUG] [Thread-214695] [transport.py] [_log()] starting thread (client mode): 0xa57e1030
2026-02-16T01:28:41.702 [DEBUG] [Thread-214695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:28:41.721 [DEBUG] [Thread-214695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:28:41.721 [INFO] [Thread-214695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:41.724 [DEBUG] [Thread-214695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] client lang: <none>
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] server lang: <none>
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] kex follows: False
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] Compression: none
2026-02-16T01:28:41.725 [DEBUG] [Thread-214695] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:28:41.744 [DEBUG] [Thread-214695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:28:41.745 [DEBUG] [Thread-214695] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:28:41.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:28:41.747 [DEBUG] [Thread-214695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:28:41.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:28:41.749 [DEBUG] [Thread-214695] [transport.py] [_log()] userauth is OK
2026-02-16T01:28:41.749 [DEBUG] [Thread-214695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:28:41.749 [DEBUG] [Thread-214695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:28:41.750 [DEBUG] [Thread-214695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:28:41.750 [DEBUG] [Thread-214695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:28:41.774 [INFO] [Thread-214695] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:28:41.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:28:42.390 [DEBUG] [Thread-214695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:28:42.390 [DEBUG] [Thread-214695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:28:42.391 [DEBUG] [Thread-214695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:28:42.431 [DEBUG] [Thread-214695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:28:42.432 [DEBUG] [Thread-214695] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:28:42.435 [DEBUG] [Thread-214695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:28:42.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:28:42.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:28:42.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:28:42.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:28:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:28:42.461 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:28:42.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:28:42.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.977878 -999.00  +13.20  20.41     62   +6.20 1 1 1 1 1     0    0 6.60 -25.50 ZNESW 19.6 20.4 135.6 24.4 13.6 -22.7 13.4 -21.9 13.2 -20.8 13.5 -22.0
2026-02-16T01:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:28:42.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.977878
2026-02-16T01:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:28:42.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:28:42.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:28:15', tmtdew=8.17, humidity=57.67, cloud=0.0, wind=19.14, temperature=13.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:28:15', seeing=2.48, atlas_timestamp='2026-02-15T23:28:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05375000000000085, 0.013750000000001705, -0.10874999999999879, -0.07499999999999929, -0.06649999999999956, 0.005250000000000199, -0.008000000000000895, -0.0337499999999995, -0.008500000000001506, -0.006999999999999673, -0.06874999999999964, -0.05500000000000149, -0.009000000000000341, 0.01124999999999865, 0.0009999999999994458, -0.010500000000000398, 0.021249999999998437, 0.01249999999999929, -0.03350000000000186, -0.026750000000001606, 0.019499999999998963, 0.03524999999999778, 0.022250000000001435, -0.005250000000000199, 0.0129999999999999, -0.022499999999999076, 0.03175000000000061, -0.029500000000000526, 0.04400000000000048, -0.019999999999999574, 0.032000000000001805, 0.03200000000000003, 0.02674999999999983], zp_timestamp='2026-02-15T23:25:00')
2026-02-16T01:28:42.464 [DEBUG] [Thread-214695] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:28:42.545 [DEBUG] [Thread-214698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:42.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:28:42.560 [DEBUG] [Thread-214699] [transport.py] [_log()] starting thread (client mode): 0xa2d558d0
2026-02-16T01:28:42.560 [DEBUG] [Thread-214699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:28:42.575 [DEBUG] [Thread-214699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:28:42.575 [INFO] [Thread-214699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] client lang: <none>
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] server lang: <none>
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] kex follows: False
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:28:42.583 [DEBUG] [Thread-214699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:28:42.584 [DEBUG] [Thread-214699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:28:42.584 [DEBUG] [Thread-214699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:28:42.584 [DEBUG] [Thread-214699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:28:42.584 [DEBUG] [Thread-214699] [transport.py] [_log()] Compression: none
2026-02-16T01:28:42.584 [DEBUG] [Thread-214699] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:28:42.641 [DEBUG] [Thread-214699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:28:42.642 [DEBUG] [Thread-214699] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:28:42.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:28:42.643 [DEBUG] [Thread-214699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:28:42.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:28:42.697 [DEBUG] [Thread-214699] [transport.py] [_log()] userauth is OK
2026-02-16T01:28:42.697 [DEBUG] [Thread-214699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:28:42.697 [DEBUG] [Thread-214699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:28:42.697 [DEBUG] [Thread-214699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:28:42.697 [DEBUG] [Thread-214699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:28:42.712 [INFO] [Thread-214699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:28:42.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:28:42.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:28:43.350 [DEBUG] [Thread-214701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:43.523 [DEBUG] [Thread-214699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:28:43.523 [DEBUG] [Thread-214699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:28:43.571 [DEBUG] [Thread-214699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:28:43.572 [DEBUG] [Thread-214699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:28:43.581 [DEBUG] [Thread-214699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:28:43.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:28:43.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:28:43.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:28:43.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:28:43.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:28:43.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:28:43.618 [DEBUG] [Thread-214699] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:28:48.158 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:56.233 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:28:58.409 [DEBUG] [Thread-214702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:00.615 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:06.748 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:06.953 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:11.120 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:13.446 [DEBUG] [Thread-214703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:13.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:29:13.626 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:29:13.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:29:15.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 28, 50), 8.14, 57.8, 0.0, 22.96, 13.17, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:29:15.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:28:50
2026-02-16T01:29:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:29:16.011 [DEBUG] [Thread-214704] [transport.py] [_log()] starting thread (client mode): 0xa2d03df0
2026-02-16T01:29:16.011 [DEBUG] [Thread-214704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:29:16.024 [DEBUG] [Thread-214704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:29:16.024 [INFO] [Thread-214704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] client lang: <none>
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] server lang: <none>
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] kex follows: False
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] Compression: none
2026-02-16T01:29:16.027 [DEBUG] [Thread-214704] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:29:16.038 [DEBUG] [Thread-214704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:29:16.038 [DEBUG] [Thread-214704] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:29:16.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:29:16.038 [DEBUG] [Thread-214704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:29:16.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:29:16.039 [DEBUG] [Thread-214704] [transport.py] [_log()] userauth is OK
2026-02-16T01:29:16.039 [DEBUG] [Thread-214704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:29:16.039 [DEBUG] [Thread-214704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:29:16.039 [DEBUG] [Thread-214704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:29:16.039 [DEBUG] [Thread-214704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:29:16.055 [INFO] [Thread-214704] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:29:16.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:29:16.638 [DEBUG] [Thread-214704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:29:16.638 [DEBUG] [Thread-214704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:29:16.639 [DEBUG] [Thread-214704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:29:16.679 [DEBUG] [Thread-214704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:29:16.679 [DEBUG] [Thread-214704] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:29:16.684 [DEBUG] [Thread-214704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:29:16.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:29:16.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:29:16.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:29:16.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:29:16.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:29:16.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:29:16.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:29:16.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:29:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:29:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.978225 -999.00  +13.20  17.30     62   +6.20 1 1 1 1 1     0    0 6.53 -25.35 ZNESW 18.1 17.3 147.8 20.1 13.6 -22.8 13.5 -21.8 13.2 -20.7 13.5 -21.8
2026-02-16T01:29:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:29:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:29:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.978225
2026-02-16T01:29:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:29:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:29:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:29:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:29:16.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:29:16.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:28:50', tmtdew=8.14, humidity=57.8, cloud=0.0, wind=22.96, temperature=13.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:28:50', seeing=1.74, atlas_timestamp='2026-02-15T23:28:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05375000000000085, 0.013750000000001705, -0.10874999999999879, -0.07499999999999929, -0.06649999999999956, 0.005250000000000199, -0.008000000000000895, -0.0337499999999995, -0.008500000000001506, -0.006999999999999673, -0.06874999999999964, -0.05500000000000149, -0.009000000000000341, 0.01124999999999865, 0.0009999999999994458, -0.010500000000000398, 0.021249999999998437, 0.01249999999999929, -0.03350000000000186, -0.026750000000001606, 0.019499999999998963, 0.03524999999999778, 0.022250000000001435, -0.005250000000000199, 0.0129999999999999, -0.022499999999999076, 0.03175000000000061, -0.029500000000000526, 0.04400000000000048, -0.019999999999999574, 0.032000000000001805, 0.03200000000000003, 0.02674999999999983], zp_timestamp='2026-02-15T23:25:00')
2026-02-16T01:29:16.706 [DEBUG] [Thread-214704] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:29:16.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:29:16.802 [DEBUG] [Thread-214707] [transport.py] [_log()] starting thread (client mode): 0xa2d02f20
2026-02-16T01:29:16.802 [DEBUG] [Thread-214707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:29:16.820 [DEBUG] [Thread-214707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:29:16.821 [INFO] [Thread-214707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:29:16.828 [DEBUG] [Thread-214707] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] client lang: <none>
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] server lang: <none>
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] kex follows: False
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:29:16.829 [DEBUG] [Thread-214707] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:29:16.830 [DEBUG] [Thread-214707] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:29:16.830 [DEBUG] [Thread-214707] [transport.py] [_log()] Compression: none
2026-02-16T01:29:16.830 [DEBUG] [Thread-214707] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:29:16.886 [DEBUG] [Thread-214707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:29:16.887 [DEBUG] [Thread-214707] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:29:16.888 [DEBUG] [Thread-214707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:29:16.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:29:16.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:29:16.945 [DEBUG] [Thread-214707] [transport.py] [_log()] userauth is OK
2026-02-16T01:29:16.946 [DEBUG] [Thread-214707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:29:16.946 [DEBUG] [Thread-214707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:29:16.946 [DEBUG] [Thread-214707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:29:16.946 [DEBUG] [Thread-214707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:29:16.971 [INFO] [Thread-214707] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:29:16.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:29:16.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:29:17.827 [DEBUG] [Thread-214707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:29:17.827 [DEBUG] [Thread-214707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:29:17.876 [DEBUG] [Thread-214707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:29:17.876 [DEBUG] [Thread-214707] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:29:17.885 [DEBUG] [Thread-214707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:29:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:29: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')
2026-02-16T01:29:17.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:29:17.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:29:17.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:29:17.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:29:17.926 [DEBUG] [Thread-214707] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:29:25.654 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:28.480 [DEBUG] [Thread-214709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:28.730 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:28.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:42.629 [DEBUG] [Thread-214710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:43.534 [DEBUG] [Thread-214711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:44.308 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:29:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:29:47.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:29:47.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:29:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 29, 25), 8.13, 57.85, 0.0, 23.43, 13.17, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:29:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:29:25
2026-02-16T01:29:50.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:29:50.324 [DEBUG] [Thread-214712] [transport.py] [_log()] starting thread (client mode): 0xa2d6db10
2026-02-16T01:29:50.324 [DEBUG] [Thread-214712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:29:50.344 [DEBUG] [Thread-214712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:29:50.344 [INFO] [Thread-214712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:29:50.347 [DEBUG] [Thread-214712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] client lang: <none>
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] server lang: <none>
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] kex follows: False
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] Compression: none
2026-02-16T01:29:50.348 [DEBUG] [Thread-214712] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:29:50.366 [DEBUG] [Thread-214712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:29:50.366 [DEBUG] [Thread-214712] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:29:50.367 [DEBUG] [Thread-214712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:29:50.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:29:50.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:29:50.369 [DEBUG] [Thread-214712] [transport.py] [_log()] userauth is OK
2026-02-16T01:29:50.369 [DEBUG] [Thread-214712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:29:50.369 [DEBUG] [Thread-214712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:29:50.369 [DEBUG] [Thread-214712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:29:50.370 [DEBUG] [Thread-214712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:29:50.390 [INFO] [Thread-214712] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:29:50.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:29:51.012 [DEBUG] [Thread-214712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:29:51.013 [DEBUG] [Thread-214712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:29:51.013 [DEBUG] [Thread-214712] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:29:51.053 [DEBUG] [Thread-214712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:29:51.054 [DEBUG] [Thread-214712] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:29:51.057 [DEBUG] [Thread-214712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:29:51.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:29:51.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:29:51.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:29:51.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:29:51.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:29:51.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:29:51.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:29:51.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:29:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:29:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.978572 -999.00  +13.20  12.70     62   +6.20 1 1 1 1 1     0    0 6.42 -26.95 ZNESW 15.8 12.7 148.4 20.8 13.6 -22.9 13.4 -21.8 13.2 -20.8 13.5 -22.0
2026-02-16T01:29:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:29:51.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:29:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.978572
2026-02-16T01:29:51.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:29:51.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:29:51.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:29:51.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:29:51.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:29:51.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:29:25', tmtdew=8.13, humidity=57.85, cloud=0.0, wind=23.43, temperature=13.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:29:25', seeing=1.68, atlas_timestamp='2026-02-15T23:29:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05375000000000085, 0.013750000000001705, -0.10874999999999879, -0.07499999999999929, -0.06649999999999956, 0.005250000000000199, -0.008000000000000895, -0.0337499999999995, -0.008500000000001506, -0.006999999999999673, -0.06874999999999964, -0.05500000000000149, -0.009000000000000341, 0.01124999999999865, 0.0009999999999994458, -0.010500000000000398, 0.021249999999998437, 0.01249999999999929, -0.03350000000000186, -0.026750000000001606, 0.019499999999998963, 0.03524999999999778, 0.022250000000001435, -0.005250000000000199, 0.0129999999999999, -0.022499999999999076, 0.03175000000000061, -0.029500000000000526, 0.04400000000000048, -0.019999999999999574, 0.032000000000001805, 0.03200000000000003, 0.02674999999999983], zp_timestamp='2026-02-15T23:25:00')
2026-02-16T01:29:51.084 [DEBUG] [Thread-214712] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:29:51.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:29:51.179 [DEBUG] [Thread-214715] [transport.py] [_log()] starting thread (client mode): 0xa2d6d660
2026-02-16T01:29:51.180 [DEBUG] [Thread-214715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:29:51.194 [DEBUG] [Thread-214715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:29:51.195 [INFO] [Thread-214715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:29:51.202 [DEBUG] [Thread-214715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:29:51.203 [DEBUG] [Thread-214715] [transport.py] [_log()] client lang: <none>
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] server lang: <none>
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] kex follows: False
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:29:51.204 [DEBUG] [Thread-214715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:29:51.205 [DEBUG] [Thread-214715] [transport.py] [_log()] Compression: none
2026-02-16T01:29:51.205 [DEBUG] [Thread-214715] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:29:51.262 [DEBUG] [Thread-214715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:29:51.263 [DEBUG] [Thread-214715] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:29:51.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:29:51.264 [DEBUG] [Thread-214715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:29:51.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:29:51.317 [DEBUG] [Thread-214715] [transport.py] [_log()] userauth is OK
2026-02-16T01:29:51.317 [DEBUG] [Thread-214715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:29:51.318 [DEBUG] [Thread-214715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:29:51.318 [DEBUG] [Thread-214715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:29:51.318 [DEBUG] [Thread-214715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:29:51.339 [INFO] [Thread-214715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:29:51.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:29:51.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:29:52.212 [DEBUG] [Thread-214715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:29:52.213 [DEBUG] [Thread-214715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:29:52.261 [DEBUG] [Thread-214715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:29:52.261 [DEBUG] [Thread-214715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:29:52.269 [DEBUG] [Thread-214715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:29:52.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:29:52.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:29:52.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:29:52.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:29:52.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:29:52.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:29:52.301 [DEBUG] [Thread-214715] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:29:58.570 [DEBUG] [Thread-214717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:03.116 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:13.632 [DEBUG] [Thread-214718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:15.300 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:18.339 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:21.853 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:22.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:30:22.324 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:30:22.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:30:24.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 30), 8.12, 57.9, 0.0, 22.97, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:30:24.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:30:00
2026-02-16T01:30:24.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:30:24.627 [DEBUG] [Thread-214719] [transport.py] [_log()] starting thread (client mode): 0xa2d6ff70
2026-02-16T01:30:24.627 [DEBUG] [Thread-214719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:30:24.646 [DEBUG] [Thread-214719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:30:24.646 [INFO] [Thread-214719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] client lang: <none>
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] server lang: <none>
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] kex follows: False
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:30:24.649 [DEBUG] [Thread-214719] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:30:24.650 [DEBUG] [Thread-214719] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:30:24.650 [DEBUG] [Thread-214719] [transport.py] [_log()] Compression: none
2026-02-16T01:30:24.650 [DEBUG] [Thread-214719] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:30:24.666 [DEBUG] [Thread-214719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:30:24.666 [DEBUG] [Thread-214719] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:30:24.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:30:24.668 [DEBUG] [Thread-214719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:30:24.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:30:24.669 [DEBUG] [Thread-214719] [transport.py] [_log()] userauth is OK
2026-02-16T01:30:24.670 [DEBUG] [Thread-214719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:30:24.670 [DEBUG] [Thread-214719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:30:24.670 [DEBUG] [Thread-214719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:30:24.670 [DEBUG] [Thread-214719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:30:24.695 [INFO] [Thread-214719] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:30:24.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:30:25.345 [DEBUG] [Thread-214719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:30:25.345 [DEBUG] [Thread-214719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:30:25.345 [DEBUG] [Thread-214719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:30:25.386 [DEBUG] [Thread-214719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:30:25.386 [DEBUG] [Thread-214719] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:30:25.388 [DEBUG] [Thread-214719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:30:25.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:30:25.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:30:25.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:30:25.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:30:25.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:30:25.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:30:25.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.978920 -999.00  +13.20  18.91     62   +6.20 1 1 1 1 1     0    0 6.39 -26.05 ZNESW 14.8 18.9 152.3 24.4 13.6 -22.7 13.5 -21.9 13.2 -20.6 13.6 -22.0
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.978920
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:30:25.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:30:00', tmtdew=8.12, humidity=57.9, cloud=0.0, wind=22.97, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:30:01', seeing=1.93, atlas_timestamp='2026-02-15T23:29:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05375000000000085, 0.013750000000001705, -0.10874999999999879, -0.07499999999999929, -0.06649999999999956, 0.005250000000000199, -0.008000000000000895, -0.0337499999999995, -0.008500000000001506, -0.006999999999999673, -0.06874999999999964, -0.05500000000000149, -0.009000000000000341, 0.01124999999999865, 0.0009999999999994458, -0.010500000000000398, 0.021249999999998437, 0.01249999999999929, -0.03350000000000186, -0.026750000000001606, 0.019499999999998963, 0.03524999999999778, 0.022250000000001435, -0.005250000000000199, 0.0129999999999999, -0.022499999999999076, 0.03175000000000061, -0.029500000000000526, 0.04400000000000048, -0.019999999999999574, 0.032000000000001805, 0.03200000000000003, 0.02674999999999983], zp_timestamp='2026-02-15T23:25:00')
2026-02-16T01:30:25.407 [DEBUG] [Thread-214719] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:30:25.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:30:25.490 [DEBUG] [Thread-214722] [transport.py] [_log()] starting thread (client mode): 0xa2dc0520
2026-02-16T01:30:25.490 [DEBUG] [Thread-214722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:30:25.504 [DEBUG] [Thread-214722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:30:25.504 [INFO] [Thread-214722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] client lang: <none>
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] server lang: <none>
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] kex follows: False
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:30:25.512 [DEBUG] [Thread-214722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:30:25.513 [DEBUG] [Thread-214722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:30:25.513 [DEBUG] [Thread-214722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:30:25.513 [DEBUG] [Thread-214722] [transport.py] [_log()] Compression: none
2026-02-16T01:30:25.513 [DEBUG] [Thread-214722] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:30:25.568 [DEBUG] [Thread-214722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:30:25.568 [DEBUG] [Thread-214722] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:30:25.568 [DEBUG] [Thread-214722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:30:25.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:30:25.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:30:25.625 [DEBUG] [Thread-214722] [transport.py] [_log()] userauth is OK
2026-02-16T01:30:25.625 [DEBUG] [Thread-214722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:30:25.625 [DEBUG] [Thread-214722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:30:25.625 [DEBUG] [Thread-214722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:30:25.625 [DEBUG] [Thread-214722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:30:25.639 [INFO] [Thread-214722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:30:25.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:30:25.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:30:26.469 [DEBUG] [Thread-214722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:30:26.470 [DEBUG] [Thread-214722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:30:26.517 [DEBUG] [Thread-214722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:30:26.517 [DEBUG] [Thread-214722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:30:26.526 [DEBUG] [Thread-214722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:30:26.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:30:26.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:30:26.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:30:26.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:30:26.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:30:26.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:30:26.563 [DEBUG] [Thread-214722] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:30:28.671 [DEBUG] [Thread-214724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:28.933 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:28.934 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:40.493 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:42.693 [DEBUG] [Thread-214725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:43.726 [DEBUG] [Thread-214726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:56.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:30:56.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:30:56.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:30:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 30, 36), 8.26, 57.33, 0.0, 22.37, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:30:58.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:30:36
2026-02-16T01:30:58.760 [DEBUG] [Thread-214727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:59.139 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:30:59.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:30:59.349 [DEBUG] [Thread-214728] [transport.py] [_log()] starting thread (client mode): 0xa57c3fd0
2026-02-16T01:30:59.349 [DEBUG] [Thread-214728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:30:59.368 [DEBUG] [Thread-214728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:30:59.368 [INFO] [Thread-214728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:30:59.371 [DEBUG] [Thread-214728] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:30:59.371 [DEBUG] [Thread-214728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] client lang: <none>
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] server lang: <none>
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] kex follows: False
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:30:59.372 [DEBUG] [Thread-214728] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:30:59.373 [DEBUG] [Thread-214728] [transport.py] [_log()] Compression: none
2026-02-16T01:30:59.373 [DEBUG] [Thread-214728] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:30:59.382 [DEBUG] [Thread-214728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:30:59.383 [DEBUG] [Thread-214728] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:30:59.383 [DEBUG] [Thread-214728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:30:59.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:30:59.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:30:59.386 [DEBUG] [Thread-214728] [transport.py] [_log()] userauth is OK
2026-02-16T01:30:59.386 [DEBUG] [Thread-214728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:30:59.386 [DEBUG] [Thread-214728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:30:59.386 [DEBUG] [Thread-214728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:30:59.386 [DEBUG] [Thread-214728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:30:59.417 [INFO] [Thread-214728] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:30:59.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:31:00.027 [DEBUG] [Thread-214728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:31:00.027 [DEBUG] [Thread-214728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:31:00.028 [DEBUG] [Thread-214728] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:31:00.068 [DEBUG] [Thread-214728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:31:00.068 [DEBUG] [Thread-214728] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:31:00.071 [DEBUG] [Thread-214728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:31:00.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:31:00.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:31:00.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:31:00.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:31:00.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:31:00.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:31:00.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:31:00.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:31:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:31:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.979614 -999.00  +13.20  17.19     61   +6.10 1 1 1 1 1     0    0 6.47 -25.12 ZNESW 16.6 17.2 139.2 20.6 13.6 -22.9 13.4 -21.8 13.3 -20.8 13.6 -22.1
2026-02-16T01:31:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:31:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:31:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.979614
2026-02-16T01:31:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:31:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:31:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:31:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:31:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:31:00.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:30:36', tmtdew=8.26, humidity=57.33, cloud=0.0, wind=22.37, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:30:37', seeing=1.93, atlas_timestamp='2026-02-15T23:30:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:29:00')
2026-02-16T01:31:00.096 [DEBUG] [Thread-214728] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:31:00.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:31:00.192 [DEBUG] [Thread-214731] [transport.py] [_log()] starting thread (client mode): 0xa2d6c970
2026-02-16T01:31:00.192 [DEBUG] [Thread-214731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:31:00.207 [DEBUG] [Thread-214731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:31:00.207 [INFO] [Thread-214731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:31:00.214 [DEBUG] [Thread-214731] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] client lang: <none>
2026-02-16T01:31:00.215 [DEBUG] [Thread-214731] [transport.py] [_log()] server lang: <none>
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] kex follows: False
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] Compression: none
2026-02-16T01:31:00.216 [DEBUG] [Thread-214731] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:31:00.274 [DEBUG] [Thread-214731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:31:00.274 [DEBUG] [Thread-214731] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:31:00.275 [DEBUG] [Thread-214731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:31:00.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:31:00.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:31:00.329 [DEBUG] [Thread-214731] [transport.py] [_log()] userauth is OK
2026-02-16T01:31:00.330 [DEBUG] [Thread-214731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:31:00.330 [DEBUG] [Thread-214731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:31:00.330 [DEBUG] [Thread-214731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:31:00.330 [DEBUG] [Thread-214731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:31:00.348 [INFO] [Thread-214731] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:31:00.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:31:00.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:31:01.160 [DEBUG] [Thread-214731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:31:01.160 [DEBUG] [Thread-214731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:31:01.208 [DEBUG] [Thread-214731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:31:01.208 [DEBUG] [Thread-214731] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:31:01.218 [DEBUG] [Thread-214731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:31:01.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:31: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')
2026-02-16T01:31: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
2026-02-16T01:31:01.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:31:01.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:31:01.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:31:01.253 [DEBUG] [Thread-214731] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:31:13.794 [DEBUG] [Thread-214733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:18.003 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:28.858 [DEBUG] [Thread-214734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:29.143 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:29.144 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:31:31.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:31:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:31:33.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 31, 12), 8.17, 57.72, 0.0, 21.17, 13.25, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:31:33.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:31:12
2026-02-16T01:31:33.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:31:33.639 [DEBUG] [Thread-214735] [transport.py] [_log()] starting thread (client mode): 0xa2dc17e0
2026-02-16T01:31:33.639 [DEBUG] [Thread-214735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:31:33.660 [DEBUG] [Thread-214735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:31:33.660 [INFO] [Thread-214735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:31:33.663 [DEBUG] [Thread-214735] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:31:33.663 [DEBUG] [Thread-214735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] client lang: <none>
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] server lang: <none>
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] kex follows: False
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:31:33.664 [DEBUG] [Thread-214735] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:31:33.665 [DEBUG] [Thread-214735] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:31:33.665 [DEBUG] [Thread-214735] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:31:33.665 [DEBUG] [Thread-214735] [transport.py] [_log()] Compression: none
2026-02-16T01:31:33.665 [DEBUG] [Thread-214735] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:31:33.685 [DEBUG] [Thread-214735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:31:33.686 [DEBUG] [Thread-214735] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:31:33.686 [DEBUG] [Thread-214735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:31:33.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:31:33.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:31:33.729 [DEBUG] [Thread-214735] [transport.py] [_log()] userauth is OK
2026-02-16T01:31:33.730 [DEBUG] [Thread-214735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:31:33.730 [DEBUG] [Thread-214735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:31:33.730 [DEBUG] [Thread-214735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:31:33.730 [DEBUG] [Thread-214735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:31:33.767 [INFO] [Thread-214735] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:31:33.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:31:34.429 [DEBUG] [Thread-214735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:31:34.429 [DEBUG] [Thread-214735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:31:34.429 [DEBUG] [Thread-214735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:31:34.470 [DEBUG] [Thread-214735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:31:34.471 [DEBUG] [Thread-214735] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:31:34.474 [DEBUG] [Thread-214735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:31:34.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:31:34.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:31:34.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:31:34.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:31:34.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:31:34.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:31:34.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:31:34.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:31:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:31:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.979961 -999.00  +13.20  15.37     62   +6.10 1 1 1 1 1     0    0 6.53 -25.34 ZNESW 15.2 15.4 134.8 17.1 13.6 -22.8 13.5 -21.8 13.2 -20.7 13.5 -21.7
2026-02-16T01:31:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:31:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:31:34.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.979961
2026-02-16T01:31:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:31:34.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:31:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:31:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:31:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:31:34.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:31:12', tmtdew=8.17, humidity=57.72, cloud=0.0, wind=21.17, temperature=13.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:31:12', seeing=2.48, atlas_timestamp='2026-02-15T23:31:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:29:00')
2026-02-16T01:31:34.500 [DEBUG] [Thread-214735] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:31:34.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:31:34.604 [DEBUG] [Thread-214738] [transport.py] [_log()] starting thread (client mode): 0xa57e19c0
2026-02-16T01:31:34.605 [DEBUG] [Thread-214738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:31:34.619 [DEBUG] [Thread-214738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:31:34.619 [INFO] [Thread-214738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:31:34.630 [DEBUG] [Thread-214738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] client lang: <none>
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] server lang: <none>
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] kex follows: False
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:31:34.631 [DEBUG] [Thread-214738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:31:34.632 [DEBUG] [Thread-214738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:31:34.632 [DEBUG] [Thread-214738] [transport.py] [_log()] Compression: none
2026-02-16T01:31:34.632 [DEBUG] [Thread-214738] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:31:34.688 [DEBUG] [Thread-214738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:31:34.688 [DEBUG] [Thread-214738] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:31:34.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:31:34.690 [DEBUG] [Thread-214738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:31:34.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:31:34.749 [DEBUG] [Thread-214738] [transport.py] [_log()] userauth is OK
2026-02-16T01:31:34.749 [DEBUG] [Thread-214738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:31:34.749 [DEBUG] [Thread-214738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:31:34.749 [DEBUG] [Thread-214738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:31:34.749 [DEBUG] [Thread-214738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:31:34.771 [INFO] [Thread-214738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:31:34.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:31:34.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:31:35.585 [DEBUG] [Thread-214738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:31:35.585 [DEBUG] [Thread-214738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:31:35.635 [DEBUG] [Thread-214738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:31:35.635 [DEBUG] [Thread-214738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:31:35.646 [DEBUG] [Thread-214738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:31:35.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:31:35.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:31:35.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-02-16T01:31:35.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:31:35.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:31:35.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:31:35.683 [DEBUG] [Thread-214738] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:31:36.959 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:42.760 [DEBUG] [Thread-214740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:43.894 [DEBUG] [Thread-214741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:55.611 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:31:58.935 [DEBUG] [Thread-214742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:05.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:32:05.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:32:05.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:32:07.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 31, 47), 8.16, 57.73, 0.0, 19.16, 13.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:32:07.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:31:47
2026-02-16T01:32:07.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:32:08.093 [DEBUG] [Thread-214743] [transport.py] [_log()] starting thread (client mode): 0xa2d029e0
2026-02-16T01:32:08.093 [DEBUG] [Thread-214743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:32:08.109 [DEBUG] [Thread-214743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:32:08.109 [INFO] [Thread-214743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] client lang: <none>
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] server lang: <none>
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] kex follows: False
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] Compression: none
2026-02-16T01:32:08.112 [DEBUG] [Thread-214743] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:32:08.131 [DEBUG] [Thread-214743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:32:08.131 [DEBUG] [Thread-214743] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:32:08.132 [DEBUG] [Thread-214743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:32:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:32:08.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:32:08.133 [DEBUG] [Thread-214743] [transport.py] [_log()] userauth is OK
2026-02-16T01:32:08.133 [DEBUG] [Thread-214743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:32:08.134 [DEBUG] [Thread-214743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:32:08.134 [DEBUG] [Thread-214743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:32:08.134 [DEBUG] [Thread-214743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:32:08.158 [INFO] [Thread-214743] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:32:08.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:32:08.762 [DEBUG] [Thread-214743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:32:08.762 [DEBUG] [Thread-214743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:32:08.762 [DEBUG] [Thread-214743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:32:08.803 [DEBUG] [Thread-214743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:32:08.803 [DEBUG] [Thread-214743] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:32:08.807 [DEBUG] [Thread-214743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:32:08.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:32:08.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:32:08.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:32:08.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:32:08.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:32:08.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:32:08.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:32:08.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:32:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:32:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.980308 -999.00  +13.30  21.24     61   +6.10 1 1 1 1 1     0    0 6.46 -23.31 ZNESW 18.3 21.2 145.0 23.0 13.6 -22.7 13.5 -21.8 13.3 -20.7 13.6 -21.8
2026-02-16T01:32:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:32:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:32:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.980308
2026-02-16T01:32:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:32:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:32:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:32:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:32:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:32:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:31:47', tmtdew=8.16, humidity=57.73, cloud=0.0, wind=19.16, temperature=13.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:31:47', seeing=2.13, atlas_timestamp='2026-02-15T23:31:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:29:00')
2026-02-16T01:32:08.828 [DEBUG] [Thread-214743] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:32:08.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:32:08.928 [DEBUG] [Thread-214746] [transport.py] [_log()] starting thread (client mode): 0xa2d00040
2026-02-16T01:32:08.929 [DEBUG] [Thread-214746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:32:08.943 [DEBUG] [Thread-214746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:32:08.944 [INFO] [Thread-214746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:32:08.951 [DEBUG] [Thread-214746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] client lang: <none>
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] server lang: <none>
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] kex follows: False
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:32:08.952 [DEBUG] [Thread-214746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:32:08.953 [DEBUG] [Thread-214746] [transport.py] [_log()] Compression: none
2026-02-16T01:32:08.953 [DEBUG] [Thread-214746] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:32:09.011 [DEBUG] [Thread-214746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:32:09.012 [DEBUG] [Thread-214746] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:32:09.012 [DEBUG] [Thread-214746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:32:09.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:32:09.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:32:09.067 [DEBUG] [Thread-214746] [transport.py] [_log()] userauth is OK
2026-02-16T01:32:09.067 [DEBUG] [Thread-214746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:32:09.067 [DEBUG] [Thread-214746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:32:09.067 [DEBUG] [Thread-214746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:32:09.067 [DEBUG] [Thread-214746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:32:09.086 [INFO] [Thread-214746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:32:09.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:32:09.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:32:09.912 [DEBUG] [Thread-214746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:32:09.913 [DEBUG] [Thread-214746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:32:09.960 [DEBUG] [Thread-214746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:32:09.961 [DEBUG] [Thread-214746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:32:09.970 [DEBUG] [Thread-214746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:32:09.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:32:09.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:32:09.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:32:09.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:32:09.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:32:09.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:32:10.005 [DEBUG] [Thread-214746] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:32:13.967 [DEBUG] [Thread-214748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:14.296 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:29.023 [DEBUG] [Thread-214749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:29.347 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:29.348 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:33.027 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:40.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:32:40.029 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:32:40.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:32:42.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 32, 23), 8.15, 57.77, 0.0, 21.33, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:32:42.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:32:23
2026-02-16T01:32:42.832 [DEBUG] [Thread-214750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:42.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:32:43.158 [DEBUG] [Thread-214751] [transport.py] [_log()] starting thread (client mode): 0xa2d57a90
2026-02-16T01:32:43.158 [DEBUG] [Thread-214751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:32:43.177 [DEBUG] [Thread-214751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:32:43.177 [INFO] [Thread-214751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:32:43.178 [DEBUG] [Thread-214751] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:32:43.178 [DEBUG] [Thread-214751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:32:43.178 [DEBUG] [Thread-214751] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] client lang: <none>
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] server lang: <none>
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] kex follows: False
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] Compression: none
2026-02-16T01:32:43.179 [DEBUG] [Thread-214751] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:32:43.188 [DEBUG] [Thread-214751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:32:43.188 [DEBUG] [Thread-214751] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:32:43.189 [DEBUG] [Thread-214751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:32:43.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:32:43.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:32:43.190 [DEBUG] [Thread-214751] [transport.py] [_log()] userauth is OK
2026-02-16T01:32:43.190 [DEBUG] [Thread-214751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:32:43.190 [DEBUG] [Thread-214751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:32:43.190 [DEBUG] [Thread-214751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:32:43.190 [DEBUG] [Thread-214751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:32:43.213 [INFO] [Thread-214751] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:32:43.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:32:43.784 [DEBUG] [Thread-214751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:32:43.785 [DEBUG] [Thread-214751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:32:43.785 [DEBUG] [Thread-214751] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:32:43.825 [DEBUG] [Thread-214751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:32:43.826 [DEBUG] [Thread-214751] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:32:43.829 [DEBUG] [Thread-214751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:32:43.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:32:43.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:32:43.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:32:43.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:32:43.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:32:43.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:32:43.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:32:43.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:32:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:32:43.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.980656 -999.00  +13.30  15.75     61   +6.10 1 1 1 1 1     0    0 6.57 -21.27 ZNESW 17.0 15.8 134.8 17.7 13.6 -22.7 13.5 -21.8 13.2 -20.4 13.6 -21.7
2026-02-16T01:32:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:32:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:32:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.980656
2026-02-16T01:32:43.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:32:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:32:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:32:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:32:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:32:43.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:32:23', tmtdew=8.15, humidity=57.77, cloud=0.0, wind=21.33, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:32:23', seeing=1.89, atlas_timestamp='2026-02-15T23:32:08.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:29:00')
2026-02-16T01:32:43.855 [DEBUG] [Thread-214751] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:32:43.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:32:43.954 [DEBUG] [Thread-214754] [transport.py] [_log()] starting thread (client mode): 0xa2d6d7b0
2026-02-16T01:32:43.954 [DEBUG] [Thread-214754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:32:43.968 [DEBUG] [Thread-214754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:32:43.968 [INFO] [Thread-214754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:43.976 [DEBUG] [Thread-214754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] client lang: <none>
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] server lang: <none>
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] kex follows: False
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] Compression: none
2026-02-16T01:32:43.977 [DEBUG] [Thread-214754] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:32:44.034 [DEBUG] [Thread-214754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:32:44.035 [DEBUG] [Thread-214754] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:32:44.035 [DEBUG] [Thread-214754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:32:44.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:32:44.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:32:44.059 [DEBUG] [Thread-214756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:44.091 [DEBUG] [Thread-214754] [transport.py] [_log()] userauth is OK
2026-02-16T01:32:44.091 [DEBUG] [Thread-214754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:32:44.091 [DEBUG] [Thread-214754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:32:44.091 [DEBUG] [Thread-214754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:32:44.092 [DEBUG] [Thread-214754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:32:44.110 [INFO] [Thread-214754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:32:44.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:32:44.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:32:44.903 [DEBUG] [Thread-214754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:32:44.903 [DEBUG] [Thread-214754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:32:44.951 [DEBUG] [Thread-214754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:32:44.952 [DEBUG] [Thread-214754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:32:44.961 [DEBUG] [Thread-214754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:32:44.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:32:44.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:32:44.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:32:44.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:32:44.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:32:44.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:32:44.998 [DEBUG] [Thread-214754] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:32:51.985 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:32:59.120 [DEBUG] [Thread-214757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:11.096 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:14.153 [DEBUG] [Thread-214758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:14.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:33:15.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:33:15.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:33:16.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 32, 58), 8.22, 57.68, 0.0, 20.5, 13.28, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:33:16.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:32:58
2026-02-16T01:33:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:33:17.487 [DEBUG] [Thread-214759] [transport.py] [_log()] starting thread (client mode): 0xa57737f0
2026-02-16T01:33:17.487 [DEBUG] [Thread-214759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:33:17.509 [DEBUG] [Thread-214759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:33:17.509 [INFO] [Thread-214759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:33:17.510 [DEBUG] [Thread-214759] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:33:17.510 [DEBUG] [Thread-214759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:33:17.510 [DEBUG] [Thread-214759] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:33:17.510 [DEBUG] [Thread-214759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:17.510 [DEBUG] [Thread-214759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] client lang: <none>
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] server lang: <none>
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] kex follows: False
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] Compression: none
2026-02-16T01:33:17.511 [DEBUG] [Thread-214759] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:33:17.519 [DEBUG] [Thread-214759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:33:17.520 [DEBUG] [Thread-214759] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:33:17.520 [DEBUG] [Thread-214759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:33:17.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:33:17.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:33:17.522 [DEBUG] [Thread-214759] [transport.py] [_log()] userauth is OK
2026-02-16T01:33:17.522 [DEBUG] [Thread-214759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:33:17.522 [DEBUG] [Thread-214759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:33:17.522 [DEBUG] [Thread-214759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:33:17.522 [DEBUG] [Thread-214759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:33:17.536 [INFO] [Thread-214759] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:33:17.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:33:18.132 [DEBUG] [Thread-214759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:33:18.132 [DEBUG] [Thread-214759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:33:18.132 [DEBUG] [Thread-214759] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:33:18.173 [DEBUG] [Thread-214759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:33:18.173 [DEBUG] [Thread-214759] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:33:18.176 [DEBUG] [Thread-214759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:33:18.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:33:18.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:33:18.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:33:18.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:33:18.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:33:18.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:33:18.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:33:18.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:33:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:33:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.981003 -999.00  +13.30  22.41     61   +6.10 1 1 1 1 1     0    0 6.45 -20.99 ZNESW 19.9 22.4 142.0 25.6 13.6 -22.7 13.5 -21.7 13.2 -20.5 13.6 -21.6
2026-02-16T01:33:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:33:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:33:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.981003
2026-02-16T01:33:18.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:33:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:33:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:33:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:33:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:33:18.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:32:58', tmtdew=8.22, humidity=57.68, cloud=0.0, wind=20.5, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:32:59', seeing=1.49, atlas_timestamp='2026-02-15T23:32:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:29:00')
2026-02-16T01:33:18.203 [DEBUG] [Thread-214759] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:33:18.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:33:18.298 [DEBUG] [Thread-214762] [transport.py] [_log()] starting thread (client mode): 0xa57b3850
2026-02-16T01:33:18.299 [DEBUG] [Thread-214762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:33:18.313 [DEBUG] [Thread-214762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:33:18.313 [INFO] [Thread-214762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] client lang: <none>
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] server lang: <none>
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] kex follows: False
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:33:18.321 [DEBUG] [Thread-214762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:33:18.322 [DEBUG] [Thread-214762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:33:18.322 [DEBUG] [Thread-214762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:33:18.322 [DEBUG] [Thread-214762] [transport.py] [_log()] Compression: none
2026-02-16T01:33:18.322 [DEBUG] [Thread-214762] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:33:18.379 [DEBUG] [Thread-214762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:33:18.380 [DEBUG] [Thread-214762] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:33:18.380 [DEBUG] [Thread-214762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:33:18.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:33:18.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:33:18.435 [DEBUG] [Thread-214762] [transport.py] [_log()] userauth is OK
2026-02-16T01:33:18.436 [DEBUG] [Thread-214762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:33:18.436 [DEBUG] [Thread-214762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:33:18.436 [DEBUG] [Thread-214762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:33:18.436 [DEBUG] [Thread-214762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:33:18.455 [INFO] [Thread-214762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:33:18.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:33:18.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:33:19.298 [DEBUG] [Thread-214762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:33:19.298 [DEBUG] [Thread-214762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:33:19.346 [DEBUG] [Thread-214762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:33:19.346 [DEBUG] [Thread-214762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:33:19.355 [DEBUG] [Thread-214762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:33:19.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:33:19.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:33:19.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:33:19.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:33:19.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:33:19.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:33:19.392 [DEBUG] [Thread-214762] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:33:29.192 [DEBUG] [Thread-214764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:29.554 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:29.555 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:30.005 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:42.897 [DEBUG] [Thread-214765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:44.246 [DEBUG] [Thread-214766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:49.142 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:33:49.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:33:49.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:33:49.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:33:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 33, 34), 8.31, 57.13, 0.0, 20.92, 13.53, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:33:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:33:34
2026-02-16T01:33:51.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:33:51.790 [DEBUG] [Thread-214767] [transport.py] [_log()] starting thread (client mode): 0xa5772e30
2026-02-16T01:33:51.790 [DEBUG] [Thread-214767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:33:51.814 [DEBUG] [Thread-214767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:33:51.814 [INFO] [Thread-214767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] client lang: <none>
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] server lang: <none>
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] kex follows: False
2026-02-16T01:33:51.817 [DEBUG] [Thread-214767] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:33:51.818 [DEBUG] [Thread-214767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:33:51.818 [DEBUG] [Thread-214767] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:33:51.818 [DEBUG] [Thread-214767] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:33:51.818 [DEBUG] [Thread-214767] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:33:51.818 [DEBUG] [Thread-214767] [transport.py] [_log()] Compression: none
2026-02-16T01:33:51.818 [DEBUG] [Thread-214767] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:33:51.833 [DEBUG] [Thread-214767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:33:51.833 [DEBUG] [Thread-214767] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:33:51.834 [DEBUG] [Thread-214767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:33:51.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:33:51.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:33:51.834 [DEBUG] [Thread-214767] [transport.py] [_log()] userauth is OK
2026-02-16T01:33:51.834 [DEBUG] [Thread-214767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:33:51.834 [DEBUG] [Thread-214767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:33:51.834 [DEBUG] [Thread-214767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:33:51.834 [DEBUG] [Thread-214767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:33:51.845 [INFO] [Thread-214767] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:33:51.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:33:52.495 [DEBUG] [Thread-214767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:33:52.495 [DEBUG] [Thread-214767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:33:52.496 [DEBUG] [Thread-214767] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:33:52.536 [DEBUG] [Thread-214767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:33:52.536 [DEBUG] [Thread-214767] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:33:52.540 [DEBUG] [Thread-214767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:33:52.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:33:52.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:33:52.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:33:52.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:33:52.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:33:52.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:33:52.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:33:52.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:33:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:33:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.981350 -999.00  +13.40  13.03     61   +6.10 1 1 1 1 1     0    0 6.73 -18.37 ZNESW 12.1 13.0 138.6 20.0 13.7 -22.5 13.5 -21.8 13.3 -20.4 13.6 -22.0
2026-02-16T01:33:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:33:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:33:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.981350
2026-02-16T01:33:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:33:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:33:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:33:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:33:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:33:52.566 [DEBUG] [Thread-214767] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:33:52.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:33:34', tmtdew=8.31, humidity=57.13, cloud=0.0, wind=20.92, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:33:34', seeing=1.55, atlas_timestamp='2026-02-15T23:33:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:31:00')
2026-02-16T01:33:52.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:33:52.664 [DEBUG] [Thread-214770] [transport.py] [_log()] starting thread (client mode): 0xa2d6e110
2026-02-16T01:33:52.664 [DEBUG] [Thread-214770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:33:52.679 [DEBUG] [Thread-214770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:33:52.679 [INFO] [Thread-214770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:33:52.686 [DEBUG] [Thread-214770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] client lang: <none>
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] server lang: <none>
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] kex follows: False
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:33:52.687 [DEBUG] [Thread-214770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:33:52.688 [DEBUG] [Thread-214770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:33:52.688 [DEBUG] [Thread-214770] [transport.py] [_log()] Compression: none
2026-02-16T01:33:52.688 [DEBUG] [Thread-214770] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:33:52.743 [DEBUG] [Thread-214770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:33:52.743 [DEBUG] [Thread-214770] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:33:52.743 [DEBUG] [Thread-214770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:33:52.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:33:52.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:33:52.799 [DEBUG] [Thread-214770] [transport.py] [_log()] userauth is OK
2026-02-16T01:33:52.799 [DEBUG] [Thread-214770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:33:52.799 [DEBUG] [Thread-214770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:33:52.799 [DEBUG] [Thread-214770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:33:52.799 [DEBUG] [Thread-214770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:33:52.818 [INFO] [Thread-214770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:33:52.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:33:52.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:33:53.637 [DEBUG] [Thread-214770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:33:53.637 [DEBUG] [Thread-214770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:33:53.685 [DEBUG] [Thread-214770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:33:53.686 [DEBUG] [Thread-214770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:33:53.695 [DEBUG] [Thread-214770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:33:53.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:33:53.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:33:53.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:33:53.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:33:53.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:33:53.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:33:53.732 [DEBUG] [Thread-214770] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:33:59.283 [DEBUG] [Thread-214772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:08.162 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:14.332 [DEBUG] [Thread-214773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:23.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:34:23.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:34: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-02-16T01:34:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 34, 10), 8.34, 56.93, 0.0, 18.05, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:34:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:34:10
2026-02-16T01:34:26.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:34:26.527 [DEBUG] [Thread-214774] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1f0
2026-02-16T01:34:26.527 [DEBUG] [Thread-214774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:34:26.548 [DEBUG] [Thread-214774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:34:26.548 [INFO] [Thread-214774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] client lang: <none>
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] server lang: <none>
2026-02-16T01:34:26.550 [DEBUG] [Thread-214774] [transport.py] [_log()] kex follows: False
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] Compression: none
2026-02-16T01:34:26.551 [DEBUG] [Thread-214774] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:34:26.562 [DEBUG] [Thread-214774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:34:26.563 [DEBUG] [Thread-214774] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:34:26.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:34:26.565 [DEBUG] [Thread-214774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:34:26.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:34:26.567 [DEBUG] [Thread-214774] [transport.py] [_log()] userauth is OK
2026-02-16T01:34:26.567 [DEBUG] [Thread-214774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:34:26.567 [DEBUG] [Thread-214774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:34:26.568 [DEBUG] [Thread-214774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:34:26.568 [DEBUG] [Thread-214774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:34:26.594 [INFO] [Thread-214774] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:34:26.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:34:26.843 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:27.203 [DEBUG] [Thread-214774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:34:27.204 [DEBUG] [Thread-214774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:34:27.204 [DEBUG] [Thread-214774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:34:27.245 [DEBUG] [Thread-214774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:34:27.245 [DEBUG] [Thread-214774] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:34:27.248 [DEBUG] [Thread-214774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:34:27.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:34:27.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:34:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:34:27.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:34:27.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:34:27.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:34:27.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:34:27.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:34:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:34:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.982044 -999.00  +13.30  12.54     61   +6.10 1 1 1 1 1     0    0 6.83 -15.64 ZNESW 13.4 12.5 126.0 18.1 13.7 -22.8 13.6 -21.8 13.2 -20.6 13.6 -21.8
2026-02-16T01:34:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:34:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:34:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.982044
2026-02-16T01:34:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:34:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:34:10', tmtdew=8.34, humidity=56.93, cloud=0.0, wind=18.05, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:34:10', seeing=2.03, atlas_timestamp='2026-02-15T23:34:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:31:00')
2026-02-16T01:34:27.275 [DEBUG] [Thread-214774] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:34:27.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:34:27.364 [DEBUG] [Thread-214777] [transport.py] [_log()] starting thread (client mode): 0xa2d6db10
2026-02-16T01:34:27.364 [DEBUG] [Thread-214777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:34:27.379 [DEBUG] [Thread-214777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:34:27.379 [INFO] [Thread-214777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] client lang: <none>
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] server lang: <none>
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] kex follows: False
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:34:27.387 [DEBUG] [Thread-214777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:34:27.388 [DEBUG] [Thread-214777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:34:27.388 [DEBUG] [Thread-214777] [transport.py] [_log()] Compression: none
2026-02-16T01:34:27.388 [DEBUG] [Thread-214777] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:34:27.444 [DEBUG] [Thread-214777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:34:27.444 [DEBUG] [Thread-214777] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:34:27.445 [DEBUG] [Thread-214777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:34:27.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:34:27.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:34:27.499 [DEBUG] [Thread-214777] [transport.py] [_log()] userauth is OK
2026-02-16T01:34:27.499 [DEBUG] [Thread-214777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:34:27.499 [DEBUG] [Thread-214777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:34:27.499 [DEBUG] [Thread-214777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:34:27.499 [DEBUG] [Thread-214777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:34:27.516 [INFO] [Thread-214777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:34:27.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:34:27.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:34:28.372 [DEBUG] [Thread-214777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:34:28.373 [DEBUG] [Thread-214777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:34:28.420 [DEBUG] [Thread-214777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:34:28.421 [DEBUG] [Thread-214777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:34:28.430 [DEBUG] [Thread-214777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:34:28.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:34:28.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:34:28.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:34:28.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:34:28.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:34:28.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:34:28.467 [DEBUG] [Thread-214777] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:34:29.368 [DEBUG] [Thread-214779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:29.755 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:29.756 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:42.958 [DEBUG] [Thread-214780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:44.422 [DEBUG] [Thread-214781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:45.751 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:34:58.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:34:58.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:34:58.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-02-16T01:34:59.459 [DEBUG] [Thread-214782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:00.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 34, 46), 8.25, 57.6, 0.0, 19.27, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:35:00.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:34:46
2026-02-16T01:35:00.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:35:00.912 [DEBUG] [Thread-214783] [transport.py] [_log()] starting thread (client mode): 0xa57c2ef0
2026-02-16T01:35:00.912 [DEBUG] [Thread-214783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:35:00.933 [DEBUG] [Thread-214783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:35:00.933 [INFO] [Thread-214783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] client lang: <none>
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] server lang: <none>
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] kex follows: False
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:35:00.936 [DEBUG] [Thread-214783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:35:00.937 [DEBUG] [Thread-214783] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:35:00.937 [DEBUG] [Thread-214783] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:35:00.937 [DEBUG] [Thread-214783] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:35:00.937 [DEBUG] [Thread-214783] [transport.py] [_log()] Compression: none
2026-02-16T01:35:00.937 [DEBUG] [Thread-214783] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:35:00.954 [DEBUG] [Thread-214783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:35:00.955 [DEBUG] [Thread-214783] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:35:00.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:35:00.956 [DEBUG] [Thread-214783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:35:00.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:35:00.958 [DEBUG] [Thread-214783] [transport.py] [_log()] userauth is OK
2026-02-16T01:35:00.958 [DEBUG] [Thread-214783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:35:00.959 [DEBUG] [Thread-214783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:35:00.959 [DEBUG] [Thread-214783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:35:00.959 [DEBUG] [Thread-214783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:35:00.979 [INFO] [Thread-214783] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:35:00.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:35:01.595 [DEBUG] [Thread-214783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:35:01.595 [DEBUG] [Thread-214783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:35:01.595 [DEBUG] [Thread-214783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:35:01.636 [DEBUG] [Thread-214783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:35:01.636 [DEBUG] [Thread-214783] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:35:01.638 [DEBUG] [Thread-214783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:35:01.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:35:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:35:01.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:35:01.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:35:01.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:35:01.654 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:35:01.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:35:01.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:35:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:35:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.982392 -999.00  +13.40  15.49     61   +6.10 1 1 1 1 1     0    0 6.78 -14.17 ZNESW 16.6 15.5 142.6 23.3 13.6 -22.8 13.5 -21.7 13.3 -20.6 13.6 -21.7
2026-02-16T01:35:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:35:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:35:01.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.982392
2026-02-16T01:35:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:35:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:35:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:35:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:35:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:35:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:34:46', tmtdew=8.25, humidity=57.6, cloud=0.0, wind=19.27, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:34:46', seeing=1.93, atlas_timestamp='2026-02-15T23:34:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:31:00')
2026-02-16T01:35:01.657 [DEBUG] [Thread-214783] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:35:01.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:35:01.766 [DEBUG] [Thread-214786] [transport.py] [_log()] starting thread (client mode): 0xa57d6e30
2026-02-16T01:35:01.766 [DEBUG] [Thread-214786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:35:01.782 [DEBUG] [Thread-214786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:35:01.783 [INFO] [Thread-214786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:35:01.790 [DEBUG] [Thread-214786] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:35:01.790 [DEBUG] [Thread-214786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] client lang: <none>
2026-02-16T01:35:01.791 [DEBUG] [Thread-214786] [transport.py] [_log()] server lang: <none>
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] kex follows: False
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:35:01.792 [DEBUG] [Thread-214786] [transport.py] [_log()] Compression: none
2026-02-16T01:35:01.793 [DEBUG] [Thread-214786] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:35:01.848 [DEBUG] [Thread-214786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:35:01.849 [DEBUG] [Thread-214786] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:35:01.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:35:01.850 [DEBUG] [Thread-214786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:35:01.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:35:01.904 [DEBUG] [Thread-214786] [transport.py] [_log()] userauth is OK
2026-02-16T01:35:01.905 [DEBUG] [Thread-214786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:35:01.905 [DEBUG] [Thread-214786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:35:01.905 [DEBUG] [Thread-214786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:35:01.905 [DEBUG] [Thread-214786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:35:01.929 [INFO] [Thread-214786] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:35:01.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:35:01.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:35:02.808 [DEBUG] [Thread-214786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:35:02.808 [DEBUG] [Thread-214786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:35:02.857 [DEBUG] [Thread-214786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:35:02.857 [DEBUG] [Thread-214786] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:35:02.866 [DEBUG] [Thread-214786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:35:02.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:35:02.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:35:02.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:35:02.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:35:02.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:35:02.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:35:02.899 [DEBUG] [Thread-214786] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:35:04.412 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:14.496 [DEBUG] [Thread-214788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:23.079 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:29.548 [DEBUG] [Thread-214789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:29.958 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:29.959 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:32.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:35:32.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:35:32.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:35:34.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 35, 21), 8.25, 57.55, 0.0, 19.22, 13.27, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:35:34.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:35:21
2026-02-16T01:35:35.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:35:35.368 [DEBUG] [Thread-214790] [transport.py] [_log()] starting thread (client mode): 0xa2dc0520
2026-02-16T01:35:35.368 [DEBUG] [Thread-214790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:35:35.387 [DEBUG] [Thread-214790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:35:35.387 [INFO] [Thread-214790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] client lang: <none>
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] server lang: <none>
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] kex follows: False
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:35:35.388 [DEBUG] [Thread-214790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:35:35.389 [DEBUG] [Thread-214790] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:35:35.389 [DEBUG] [Thread-214790] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:35:35.389 [DEBUG] [Thread-214790] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:35:35.389 [DEBUG] [Thread-214790] [transport.py] [_log()] Compression: none
2026-02-16T01:35:35.389 [DEBUG] [Thread-214790] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:35:35.397 [DEBUG] [Thread-214790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:35:35.397 [DEBUG] [Thread-214790] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:35:35.398 [DEBUG] [Thread-214790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:35:35.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:35:35.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:35:35.400 [DEBUG] [Thread-214790] [transport.py] [_log()] userauth is OK
2026-02-16T01:35:35.400 [DEBUG] [Thread-214790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:35:35.400 [DEBUG] [Thread-214790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:35:35.400 [DEBUG] [Thread-214790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:35:35.400 [DEBUG] [Thread-214790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:35:35.424 [INFO] [Thread-214790] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:35:35.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:35:36.057 [DEBUG] [Thread-214790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:35:36.057 [DEBUG] [Thread-214790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:35:36.057 [DEBUG] [Thread-214790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:35:36.099 [DEBUG] [Thread-214790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:35:36.100 [DEBUG] [Thread-214790] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:35:36.103 [DEBUG] [Thread-214790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:35:36.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:35:36.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:35:36.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:35:36.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:35:36.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:35:36.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:35:36.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:35:36.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:35:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:35:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.982739 -999.00  +13.40  14.32     61   +6.10 1 1 1 1 1     0    0 6.73 -13.66 ZNESW 17.0 14.3 140.6 23.4 13.7 -22.6 13.5 -21.8 13.3 -20.6 13.6 -22.1
2026-02-16T01:35:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:35:36.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:35:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.982739
2026-02-16T01:35:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:35:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:35:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:35:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:35:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:35:36.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:35:21', tmtdew=8.25, humidity=57.55, cloud=0.0, wind=19.22, temperature=13.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:35:21', seeing=1.7, atlas_timestamp='2026-02-15T23:35:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:31:00')
2026-02-16T01:35:36.132 [DEBUG] [Thread-214790] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:35:36.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:35:36.228 [DEBUG] [Thread-214793] [transport.py] [_log()] starting thread (client mode): 0xa57b1ae0
2026-02-16T01:35:36.228 [DEBUG] [Thread-214793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:35:36.243 [DEBUG] [Thread-214793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:35:36.243 [INFO] [Thread-214793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] client lang: <none>
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] server lang: <none>
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] kex follows: False
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:35:36.251 [DEBUG] [Thread-214793] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:35:36.252 [DEBUG] [Thread-214793] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:35:36.252 [DEBUG] [Thread-214793] [transport.py] [_log()] Compression: none
2026-02-16T01:35:36.252 [DEBUG] [Thread-214793] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:35:36.308 [DEBUG] [Thread-214793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:35:36.308 [DEBUG] [Thread-214793] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:35:36.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:35:36.309 [DEBUG] [Thread-214793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:35:36.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:35:36.365 [DEBUG] [Thread-214793] [transport.py] [_log()] userauth is OK
2026-02-16T01:35:36.365 [DEBUG] [Thread-214793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:35:36.365 [DEBUG] [Thread-214793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:35:36.365 [DEBUG] [Thread-214793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:35:36.365 [DEBUG] [Thread-214793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:35:36.383 [INFO] [Thread-214793] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:35:36.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:35:36.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:35:37.202 [DEBUG] [Thread-214793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:35:37.202 [DEBUG] [Thread-214793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:35:37.249 [DEBUG] [Thread-214793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:35:37.249 [DEBUG] [Thread-214793] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:35:37.259 [DEBUG] [Thread-214793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:35:37.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:35:37.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:35:37.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:35:37.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:35:37.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:35:37.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:35:37.295 [DEBUG] [Thread-214793] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:35:41.742 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:43.021 [DEBUG] [Thread-214795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:44.586 [DEBUG] [Thread-214796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:35:59.647 [DEBUG] [Thread-214797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:00.401 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:36:07.314 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:36:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:36:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 35, 57), 8.31, 57.35, 0.0, 21.09, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:36:09.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:35:57
2026-02-16T01:36:09.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:36:09.651 [DEBUG] [Thread-214798] [transport.py] [_log()] starting thread (client mode): 0xa2d13340
2026-02-16T01:36:09.651 [DEBUG] [Thread-214798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:36:09.671 [DEBUG] [Thread-214798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:36:09.671 [INFO] [Thread-214798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:36:09.674 [DEBUG] [Thread-214798] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] client lang: <none>
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] server lang: <none>
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] kex follows: False
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:36:09.675 [DEBUG] [Thread-214798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:36:09.676 [DEBUG] [Thread-214798] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:36:09.676 [DEBUG] [Thread-214798] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:36:09.676 [DEBUG] [Thread-214798] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:36:09.676 [DEBUG] [Thread-214798] [transport.py] [_log()] Compression: none
2026-02-16T01:36:09.676 [DEBUG] [Thread-214798] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:36:09.695 [DEBUG] [Thread-214798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:36:09.696 [DEBUG] [Thread-214798] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:36:09.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:36:09.697 [DEBUG] [Thread-214798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:36:09.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:36:09.699 [DEBUG] [Thread-214798] [transport.py] [_log()] userauth is OK
2026-02-16T01:36:09.699 [DEBUG] [Thread-214798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:36:09.699 [DEBUG] [Thread-214798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:36:09.699 [DEBUG] [Thread-214798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:36:09.699 [DEBUG] [Thread-214798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:36:09.718 [INFO] [Thread-214798] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:36:09.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:36:10.356 [DEBUG] [Thread-214798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:36:10.357 [DEBUG] [Thread-214798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:36:10.357 [DEBUG] [Thread-214798] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:36:10.397 [DEBUG] [Thread-214798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:36:10.397 [DEBUG] [Thread-214798] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:36:10.401 [DEBUG] [Thread-214798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:36:10.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:36:10.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:36:10.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:36:10.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:36:10.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:36:10.424 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:36:10.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:36:10.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:36:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:36:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.983086 -999.00  +13.30  16.32     61   +6.10 1 1 1 1 1     0    0 6.78 -11.74 ZNESW 19.0 16.3 133.8 19.4 13.7 -22.7 13.5 -21.8 13.3 -20.6 13.6 -21.9
2026-02-16T01:36:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:36:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:36:10.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.983086
2026-02-16T01:36:10.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:36:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:36:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:36:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:36:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:36:10.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:35:57', tmtdew=8.31, humidity=57.35, cloud=0.0, wind=21.09, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:35:57', seeing=1.95, atlas_timestamp='2026-02-15T23:35:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.03125, -0.00274999999999892, -0.11624999999999908, -0.06050000000000111, -0.04349999999999987, 0.021250000000000213, -0.018000000000000682, 0.05325000000000024, 0.028499999999999304, 0.012000000000000455, -0.036249999999999005, -0.027499999999999858, 0.009000000000000341, 0.003249999999999531, -0.0065000000000008384, -0.02200000000000024, 0.0467499999999994, -0.0235000000000003, -0.028999999999999915, -0.0022500000000018616, 0.0039999999999995595, 0.01974999999999838, 0.0022500000000000853, 0.04025000000000034, 0.023999999999999133, -0.028499999999999304, 0.029749999999999943, -0.01750000000000007, 0.07699999999999996, 0.011000000000001009, 0.008000000000000895, 0.05600000000000094, 0.03474999999999895], zp_timestamp='2026-02-15T23:31:00')
2026-02-16T01:36:10.427 [DEBUG] [Thread-214798] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:36:10.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:36:10.521 [DEBUG] [Thread-214801] [transport.py] [_log()] starting thread (client mode): 0xa2d26b00
2026-02-16T01:36:10.521 [DEBUG] [Thread-214801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:36:10.536 [DEBUG] [Thread-214801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:36:10.536 [INFO] [Thread-214801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:36:10.544 [DEBUG] [Thread-214801] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:36:10.544 [DEBUG] [Thread-214801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:36:10.544 [DEBUG] [Thread-214801] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:36:10.544 [DEBUG] [Thread-214801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:10.544 [DEBUG] [Thread-214801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:10.544 [DEBUG] [Thread-214801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] client lang: <none>
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] server lang: <none>
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] kex follows: False
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] Compression: none
2026-02-16T01:36:10.545 [DEBUG] [Thread-214801] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:36:10.605 [DEBUG] [Thread-214801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:36:10.605 [DEBUG] [Thread-214801] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:36:10.606 [DEBUG] [Thread-214801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:36:10.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:36:10.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:36:10.660 [DEBUG] [Thread-214801] [transport.py] [_log()] userauth is OK
2026-02-16T01:36:10.661 [DEBUG] [Thread-214801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:36:10.661 [DEBUG] [Thread-214801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:36:10.661 [DEBUG] [Thread-214801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:36:10.661 [DEBUG] [Thread-214801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:36:10.686 [INFO] [Thread-214801] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:36:10.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:36:10.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:36:11.499 [DEBUG] [Thread-214801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:36:11.499 [DEBUG] [Thread-214801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:36:11.547 [DEBUG] [Thread-214801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:36:11.547 [DEBUG] [Thread-214801] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:36:11.556 [DEBUG] [Thread-214801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:36:11.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:36:11.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:36:11.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:36:11.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:36:11.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:36:11.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:36:11.590 [DEBUG] [Thread-214801] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:36:14.684 [DEBUG] [Thread-214803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:19.061 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:29.749 [DEBUG] [Thread-214804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:30.158 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:30.159 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:37.745 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:41.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:36:41.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:36:41.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:36:43.097 [DEBUG] [Thread-214805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:43.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 36, 32), 8.36, 57.17, 0.0, 20.43, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:36:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:36:32
2026-02-16T01:36:43.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:36:44.130 [DEBUG] [Thread-214806] [transport.py] [_log()] starting thread (client mode): 0xa2d271f0
2026-02-16T01:36:44.130 [DEBUG] [Thread-214806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:36:44.150 [DEBUG] [Thread-214806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:36:44.151 [INFO] [Thread-214806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] client lang: <none>
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] server lang: <none>
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] kex follows: False
2026-02-16T01:36:44.154 [DEBUG] [Thread-214806] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:36:44.155 [DEBUG] [Thread-214806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:36:44.155 [DEBUG] [Thread-214806] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:36:44.155 [DEBUG] [Thread-214806] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:36:44.155 [DEBUG] [Thread-214806] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:36:44.155 [DEBUG] [Thread-214806] [transport.py] [_log()] Compression: none
2026-02-16T01:36:44.155 [DEBUG] [Thread-214806] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:36:44.171 [DEBUG] [Thread-214806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:36:44.172 [DEBUG] [Thread-214806] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:36:44.173 [DEBUG] [Thread-214806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:36:44.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:36:44.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:36:44.174 [DEBUG] [Thread-214806] [transport.py] [_log()] userauth is OK
2026-02-16T01:36:44.174 [DEBUG] [Thread-214806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:36:44.175 [DEBUG] [Thread-214806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:36:44.175 [DEBUG] [Thread-214806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:36:44.175 [DEBUG] [Thread-214806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:36:44.195 [INFO] [Thread-214806] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:36:44.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:36:44.788 [DEBUG] [Thread-214808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:44.821 [DEBUG] [Thread-214806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:36:44.821 [DEBUG] [Thread-214806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:36:44.822 [DEBUG] [Thread-214806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:36:44.862 [DEBUG] [Thread-214806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:36:44.862 [DEBUG] [Thread-214806] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:36:44.865 [DEBUG] [Thread-214806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:36:44.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:36:44.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:36:44.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:36:44.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:36:44.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:36:44.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:36:44.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:36:44.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:36:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:36:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.983433 -999.00  +13.40  12.69     61   +6.10 1 1 1 1 1     0    0 6.85 -12.35 ZNESW 15.3 12.7 152.4 19.8 13.6 -22.7 13.5 -21.6 13.2 -20.5 13.6 -21.8
2026-02-16T01:36:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:36:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:36:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.983433
2026-02-16T01:36:44.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:36:44.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:36:44.891 [DEBUG] [Thread-214806] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:36:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:36:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:36:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:36:44.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:36:32', tmtdew=8.36, humidity=57.17, cloud=0.0, wind=20.43, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:36:33', seeing=1.95, atlas_timestamp='2026-02-15T23:36:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:35:00')
2026-02-16T01:36:44.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:36:44.988 [DEBUG] [Thread-214810] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-16T01:36:44.988 [DEBUG] [Thread-214810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:36:45.002 [DEBUG] [Thread-214810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:36:45.003 [INFO] [Thread-214810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:36:45.010 [DEBUG] [Thread-214810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:36:45.011 [DEBUG] [Thread-214810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] client lang: <none>
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] server lang: <none>
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] kex follows: False
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:36:45.012 [DEBUG] [Thread-214810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:36:45.013 [DEBUG] [Thread-214810] [transport.py] [_log()] Compression: none
2026-02-16T01:36:45.013 [DEBUG] [Thread-214810] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:36:45.073 [DEBUG] [Thread-214810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:36:45.073 [DEBUG] [Thread-214810] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:36:45.074 [DEBUG] [Thread-214810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:36:45.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:36:45.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:36:45.130 [DEBUG] [Thread-214810] [transport.py] [_log()] userauth is OK
2026-02-16T01:36:45.130 [DEBUG] [Thread-214810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:36:45.130 [DEBUG] [Thread-214810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:36:45.131 [DEBUG] [Thread-214810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:36:45.131 [DEBUG] [Thread-214810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:36:45.150 [INFO] [Thread-214810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:36:45.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:36:45.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:36:45.960 [DEBUG] [Thread-214810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:36:45.960 [DEBUG] [Thread-214810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:36:46.008 [DEBUG] [Thread-214810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:36:46.008 [DEBUG] [Thread-214810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:36:46.018 [DEBUG] [Thread-214810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:36:46.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:36:46.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:36:46.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:36:46.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:36:46.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:36:46.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:36:46.053 [DEBUG] [Thread-214810] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:36:56.392 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:36:59.826 [DEBUG] [Thread-214812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:14.888 [DEBUG] [Thread-214813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:15.040 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:16.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:37:16.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:37:16.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:37:18.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 37, 7), 8.36, 57.15, 0.0, 21.21, 13.38, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:37:18.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:37:07
2026-02-16T01:37:18.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:37:18.819 [DEBUG] [Thread-214814] [transport.py] [_log()] starting thread (client mode): 0xa2d26920
2026-02-16T01:37:18.819 [DEBUG] [Thread-214814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:37:18.836 [DEBUG] [Thread-214814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:37:18.836 [INFO] [Thread-214814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:37:18.839 [DEBUG] [Thread-214814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] client lang: <none>
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] server lang: <none>
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] kex follows: False
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] Compression: none
2026-02-16T01:37:18.840 [DEBUG] [Thread-214814] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:37:18.857 [DEBUG] [Thread-214814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:37:18.857 [DEBUG] [Thread-214814] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:37:18.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:37:18.858 [DEBUG] [Thread-214814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:37:18.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:37:18.860 [DEBUG] [Thread-214814] [transport.py] [_log()] userauth is OK
2026-02-16T01:37:18.860 [DEBUG] [Thread-214814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:37:18.861 [DEBUG] [Thread-214814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:37:18.861 [DEBUG] [Thread-214814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:37:18.861 [DEBUG] [Thread-214814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:37:18.885 [INFO] [Thread-214814] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:37:18.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:37:19.508 [DEBUG] [Thread-214814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:37:19.509 [DEBUG] [Thread-214814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:37:19.509 [DEBUG] [Thread-214814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:37:19.549 [DEBUG] [Thread-214814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:37:19.550 [DEBUG] [Thread-214814] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:37:19.553 [DEBUG] [Thread-214814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:37:19.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:37:19.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:37:19.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:37:19.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:37:19.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:37:19.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:37:19.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:37:19.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:37:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:37:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.983781 -999.00  +13.30  16.83     61   +6.10 1 1 1 1 1     0    0 6.81 -12.42 ZNESW 18.4 16.8 131.2 22.5 13.7 -22.7 13.6 -21.8 13.3 -20.5 13.6 -21.8
2026-02-16T01:37:19.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:37:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:37:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.983781
2026-02-16T01:37:19.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:37:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:37:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:37:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:37:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:37:19.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:37:07', tmtdew=8.36, humidity=57.15, cloud=0.0, wind=21.21, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:37:08', seeing=2.06, atlas_timestamp='2026-02-15T23:36:38.678', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:35:00')
2026-02-16T01:37:19.583 [DEBUG] [Thread-214814] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:37:19.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:37:19.679 [DEBUG] [Thread-214817] [transport.py] [_log()] starting thread (client mode): 0xa57c32e0
2026-02-16T01:37:19.679 [DEBUG] [Thread-214817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:37:19.693 [DEBUG] [Thread-214817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:37:19.693 [INFO] [Thread-214817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:37:19.701 [DEBUG] [Thread-214817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] client lang: <none>
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] server lang: <none>
2026-02-16T01:37:19.702 [DEBUG] [Thread-214817] [transport.py] [_log()] kex follows: False
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] Compression: none
2026-02-16T01:37:19.703 [DEBUG] [Thread-214817] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:37:19.762 [DEBUG] [Thread-214817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:37:19.762 [DEBUG] [Thread-214817] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:37:19.763 [DEBUG] [Thread-214817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:37:19.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:37:19.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:37:19.821 [DEBUG] [Thread-214817] [transport.py] [_log()] userauth is OK
2026-02-16T01:37:19.821 [DEBUG] [Thread-214817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:37:19.822 [DEBUG] [Thread-214817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:37:19.822 [DEBUG] [Thread-214817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:37:19.822 [DEBUG] [Thread-214817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:37:19.844 [INFO] [Thread-214817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:37:19.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:37:19.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:37:20.653 [DEBUG] [Thread-214817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:37:20.653 [DEBUG] [Thread-214817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:37:20.700 [DEBUG] [Thread-214817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:37:20.700 [DEBUG] [Thread-214817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:37:20.710 [DEBUG] [Thread-214817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:37:20.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:37:20.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:37:20.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:37:20.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:37:20.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:37:20.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:37:20.747 [DEBUG] [Thread-214817] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:37:29.922 [DEBUG] [Thread-214819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:30.367 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:30.368 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:33.700 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:43.164 [DEBUG] [Thread-214820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:44.973 [DEBUG] [Thread-214821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:50.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:37:50.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:37:50.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:37:52.360 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:37:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 37, 43), 8.59, 56.04, 0.0, 23.39, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:37:52.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:37:43
2026-02-16T01:37:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:37:53.155 [DEBUG] [Thread-214822] [transport.py] [_log()] starting thread (client mode): 0xa57b0be0
2026-02-16T01:37:53.155 [DEBUG] [Thread-214822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:37:53.173 [DEBUG] [Thread-214822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:37:53.173 [INFO] [Thread-214822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] client lang: <none>
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] server lang: <none>
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] kex follows: False
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] Compression: none
2026-02-16T01:37:53.176 [DEBUG] [Thread-214822] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:37:53.191 [DEBUG] [Thread-214822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:37:53.191 [DEBUG] [Thread-214822] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:37:53.191 [DEBUG] [Thread-214822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:37:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:37:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:37:53.192 [DEBUG] [Thread-214822] [transport.py] [_log()] userauth is OK
2026-02-16T01:37:53.192 [DEBUG] [Thread-214822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:37:53.192 [DEBUG] [Thread-214822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:37:53.192 [DEBUG] [Thread-214822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:37:53.192 [DEBUG] [Thread-214822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:37:53.201 [INFO] [Thread-214822] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:37:53.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:37:53.765 [DEBUG] [Thread-214822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:37:53.765 [DEBUG] [Thread-214822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:37:53.765 [DEBUG] [Thread-214822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:37:53.807 [DEBUG] [Thread-214822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:37:53.807 [DEBUG] [Thread-214822] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:37:53.809 [DEBUG] [Thread-214822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:37:53.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:37:53.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:37:53.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:37:53.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:37:53.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:37:53.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:37:53.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.984475 -999.00  +13.30  16.11     61   +6.00 1 1 1 1 1     0    0 6.87 -9.88 ZNESW 19.4 16.1 140.4 20.4 13.7 -22.7 13.6 -21.8 13.3 -20.6 13.6 -21.8
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.984475
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:37:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:37:43', tmtdew=8.59, humidity=56.04, cloud=0.0, wind=23.39, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:37:43', seeing=1.73, atlas_timestamp='2026-02-15T23:37:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:35:00')
2026-02-16T01:37:53.828 [DEBUG] [Thread-214822] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:37:53.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:37:53.914 [DEBUG] [Thread-214825] [transport.py] [_log()] starting thread (client mode): 0xa2d02b00
2026-02-16T01:37:53.914 [DEBUG] [Thread-214825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:37:53.928 [DEBUG] [Thread-214825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:37:53.928 [INFO] [Thread-214825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] client lang: <none>
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] server lang: <none>
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] kex follows: False
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] Compression: none
2026-02-16T01:37:53.936 [DEBUG] [Thread-214825] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:37:53.991 [DEBUG] [Thread-214825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:37:53.992 [DEBUG] [Thread-214825] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:37:53.992 [DEBUG] [Thread-214825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:37:53.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:37:53.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:37:54.049 [DEBUG] [Thread-214825] [transport.py] [_log()] userauth is OK
2026-02-16T01:37:54.049 [DEBUG] [Thread-214825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:37:54.049 [DEBUG] [Thread-214825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:37:54.049 [DEBUG] [Thread-214825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:37:54.049 [DEBUG] [Thread-214825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:37:54.071 [INFO] [Thread-214825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:37:54.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:37:54.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:37:54.855 [DEBUG] [Thread-214825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:37:54.855 [DEBUG] [Thread-214825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:37:54.903 [DEBUG] [Thread-214825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:37:54.904 [DEBUG] [Thread-214825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:37:54.913 [DEBUG] [Thread-214825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:37:54.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:37:54.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:37:54.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:37:54.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:37:54.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:37:54.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:37:54.950 [DEBUG] [Thread-214825] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:38:00.011 [DEBUG] [Thread-214827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:11.008 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:15.060 [DEBUG] [Thread-214828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:24.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:38:24.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:38:24.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:38:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 38, 18), 8.42, 56.44, 0.0, 18.19, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:38:27.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:38:18
2026-02-16T01:38:27.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:38:27.759 [DEBUG] [Thread-214829] [transport.py] [_log()] starting thread (client mode): 0xa2d03370
2026-02-16T01:38:27.768 [DEBUG] [Thread-214829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:38:27.779 [DEBUG] [Thread-214829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:38:27.779 [INFO] [Thread-214829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:38:27.782 [DEBUG] [Thread-214829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] client lang: <none>
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] server lang: <none>
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] kex follows: False
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] Compression: none
2026-02-16T01:38:27.783 [DEBUG] [Thread-214829] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:38:27.799 [DEBUG] [Thread-214829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:38:27.800 [DEBUG] [Thread-214829] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:38:27.800 [DEBUG] [Thread-214829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:38:27.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:38:27.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:38:27.845 [DEBUG] [Thread-214829] [transport.py] [_log()] userauth is OK
2026-02-16T01:38:27.845 [DEBUG] [Thread-214829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:38:27.845 [DEBUG] [Thread-214829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:38:27.845 [DEBUG] [Thread-214829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:38:27.845 [DEBUG] [Thread-214829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:38:27.879 [INFO] [Thread-214829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:38:27.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:38:28.500 [DEBUG] [Thread-214829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:38:28.501 [DEBUG] [Thread-214829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:38:28.501 [DEBUG] [Thread-214829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:38:28.541 [DEBUG] [Thread-214829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:38:28.542 [DEBUG] [Thread-214829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:38:28.545 [DEBUG] [Thread-214829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:38:28.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:38:28.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:38:28.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:38:28.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:38:28.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:38:28.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:38:28.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:38:28.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:38:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:38:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.984822 -999.00  +13.40  18.52     61   +6.10 1 1 1 1 1     0    0 7.01 -8.61 ZNESW 19.8 18.5 135.8 24.8 13.7 -22.7 13.6 -21.7 13.3 -20.4 13.6 -21.6
2026-02-16T01:38:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:38:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:38:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.984822
2026-02-16T01:38:28.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:38:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:38:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:38:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:38:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:38:28.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:38:18', tmtdew=8.42, humidity=56.44, cloud=0.0, wind=18.19, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:38:18', seeing=2.61, atlas_timestamp='2026-02-15T23:38:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:35:00')
2026-02-16T01:38:28.572 [DEBUG] [Thread-214829] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:38:28.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:38:28.673 [DEBUG] [Thread-214832] [transport.py] [_log()] starting thread (client mode): 0xa2d26860
2026-02-16T01:38:28.673 [DEBUG] [Thread-214832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:38:28.687 [DEBUG] [Thread-214832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:38:28.688 [INFO] [Thread-214832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:38:28.695 [DEBUG] [Thread-214832] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:38:28.695 [DEBUG] [Thread-214832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] client lang: <none>
2026-02-16T01:38:28.696 [DEBUG] [Thread-214832] [transport.py] [_log()] server lang: <none>
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] kex follows: False
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] Compression: none
2026-02-16T01:38:28.697 [DEBUG] [Thread-214832] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:38:28.754 [DEBUG] [Thread-214832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:38:28.755 [DEBUG] [Thread-214832] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:38:28.756 [DEBUG] [Thread-214832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:38:28.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:38:28.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:38:28.809 [DEBUG] [Thread-214832] [transport.py] [_log()] userauth is OK
2026-02-16T01:38:28.810 [DEBUG] [Thread-214832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:38:28.810 [DEBUG] [Thread-214832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:38:28.810 [DEBUG] [Thread-214832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:38:28.810 [DEBUG] [Thread-214832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:38:28.830 [INFO] [Thread-214832] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:38:28.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:38:28.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:38:29.703 [DEBUG] [Thread-214832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:38:29.704 [DEBUG] [Thread-214832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:38:29.752 [DEBUG] [Thread-214832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:38:29.752 [DEBUG] [Thread-214832] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:38:29.753 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:29.762 [DEBUG] [Thread-214832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:38:29.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:38:29.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:38:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:38:29.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:38:29.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:38:29.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:38:29.799 [DEBUG] [Thread-214832] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:38:30.097 [DEBUG] [Thread-214834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:30.566 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:30.567 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:43.237 [DEBUG] [Thread-214835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:45.146 [DEBUG] [Thread-214836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:48.424 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:38:59.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:38:59.821 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:38:59.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:39:00.185 [DEBUG] [Thread-214837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:01.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 38, 18), 8.42, 56.44, 0.0, 18.19, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:39:01.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:38:18
2026-02-16T01:39:02.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:39:02.286 [DEBUG] [Thread-214838] [transport.py] [_log()] starting thread (client mode): 0xa2d12e90
2026-02-16T01:39:02.286 [DEBUG] [Thread-214838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:39:02.307 [DEBUG] [Thread-214838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:39:02.307 [INFO] [Thread-214838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:39:02.310 [DEBUG] [Thread-214838] [transport.py] [_log()] client lang: <none>
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] server lang: <none>
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] kex follows: False
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] Compression: none
2026-02-16T01:39:02.311 [DEBUG] [Thread-214838] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:39:02.331 [DEBUG] [Thread-214838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:39:02.331 [DEBUG] [Thread-214838] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:39:02.332 [DEBUG] [Thread-214838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:39:02.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:39:02.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:39:02.334 [DEBUG] [Thread-214838] [transport.py] [_log()] userauth is OK
2026-02-16T01:39:02.334 [DEBUG] [Thread-214838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:39:02.334 [DEBUG] [Thread-214838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:39:02.335 [DEBUG] [Thread-214838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:39:02.335 [DEBUG] [Thread-214838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:39:02.362 [INFO] [Thread-214838] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:39:02.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:39:03.018 [DEBUG] [Thread-214838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:39:03.018 [DEBUG] [Thread-214838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:39:03.019 [DEBUG] [Thread-214838] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:39:03.059 [DEBUG] [Thread-214838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:39:03.066 [DEBUG] [Thread-214838] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:39:03.069 [DEBUG] [Thread-214838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:39:03.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:39:03.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:39:03.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:39:03.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:39:03.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:39:03.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:39:03.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:39:03.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:39:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:39:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.985169 -999.00  +13.40  19.34     61   +6.10 1 1 1 1 1     0    0 7.02 -7.50 ZNESW 15.1 19.3 138.4 26.5 13.7 -22.6 13.6 -21.7 13.3 -20.4 13.6 -21.8
2026-02-16T01:39:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:39:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:39:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.985169
2026-02-16T01:39:03.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:39:03.093 [DEBUG] [Thread-214838] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:39:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:39:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:39:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:39:03.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:39:03.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:38:18', tmtdew=8.42, humidity=56.44, cloud=0.0, wind=18.19, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:38:54', seeing=1.98, atlas_timestamp='2026-02-15T23:38:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:35:00')
2026-02-16T01:39:03.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:39:03.196 [DEBUG] [Thread-214841] [transport.py] [_log()] starting thread (client mode): 0xa57e2470
2026-02-16T01:39:03.196 [DEBUG] [Thread-214841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:39:03.213 [DEBUG] [Thread-214841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:39:03.213 [INFO] [Thread-214841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] client lang: <none>
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] server lang: <none>
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] kex follows: False
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] Compression: none
2026-02-16T01:39:03.224 [DEBUG] [Thread-214841] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:39:03.286 [DEBUG] [Thread-214841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:39:03.287 [DEBUG] [Thread-214841] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:39:03.287 [DEBUG] [Thread-214841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:39:03.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:39:03.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:39:03.342 [DEBUG] [Thread-214841] [transport.py] [_log()] userauth is OK
2026-02-16T01:39:03.342 [DEBUG] [Thread-214841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:39:03.342 [DEBUG] [Thread-214841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:39:03.342 [DEBUG] [Thread-214841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:39:03.342 [DEBUG] [Thread-214841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:39:03.365 [INFO] [Thread-214841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:39:03.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:39:03.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:39:04.213 [DEBUG] [Thread-214841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:39:04.214 [DEBUG] [Thread-214841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:39:04.261 [DEBUG] [Thread-214841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:39:04.262 [DEBUG] [Thread-214841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:39:04.271 [DEBUG] [Thread-214841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:39:04.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:39:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:39:04.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:39:04.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:39:04.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:39:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:39:04.308 [DEBUG] [Thread-214841] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:39:07.117 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:15.218 [DEBUG] [Thread-214843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:25.767 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:30.279 [DEBUG] [Thread-214844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:30.768 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:30.769 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:34.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:39:34.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:39:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:39:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 38, 54), 8.45, 56.5, 0.0, 22.09, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:39:36.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:38:54
2026-02-16T01:39:36.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:39:36.858 [DEBUG] [Thread-214845] [transport.py] [_log()] starting thread (client mode): 0xa57b1cc0
2026-02-16T01:39:36.858 [DEBUG] [Thread-214845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:39:36.877 [DEBUG] [Thread-214845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:39:36.878 [INFO] [Thread-214845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:39:36.880 [DEBUG] [Thread-214845] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] client lang: <none>
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] server lang: <none>
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] kex follows: False
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] Compression: none
2026-02-16T01:39:36.881 [DEBUG] [Thread-214845] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:39:36.898 [DEBUG] [Thread-214845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:39:36.899 [DEBUG] [Thread-214845] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:39:36.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:39:36.900 [DEBUG] [Thread-214845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:39:36.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:39:36.902 [DEBUG] [Thread-214845] [transport.py] [_log()] userauth is OK
2026-02-16T01:39:36.902 [DEBUG] [Thread-214845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:39:36.902 [DEBUG] [Thread-214845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:39:36.902 [DEBUG] [Thread-214845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:39:36.902 [DEBUG] [Thread-214845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:39:36.933 [INFO] [Thread-214845] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:39:36.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:39:37.568 [DEBUG] [Thread-214845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:39:37.568 [DEBUG] [Thread-214845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:39:37.568 [DEBUG] [Thread-214845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:39:37.608 [DEBUG] [Thread-214845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:39:37.609 [DEBUG] [Thread-214845] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:39:37.611 [DEBUG] [Thread-214845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:39:37.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:39:37.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:39:37.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:39:37.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:39:37.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:39:37.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:39:37.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:39:37.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:39:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:39:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.985517 -999.00  +13.40  13.13     61   +6.00 1 1 1 1 1     0    0 6.99 -6.56 ZNESW 13.3 13.1 125.5 21.4 13.7 -22.7 13.6 -21.9 13.3 -20.6 13.7 -21.8
2026-02-16T01:39:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:39:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:39:37.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.985517
2026-02-16T01:39:37.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:39:37.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:39:37.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:39:37.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:39:37.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:39:37.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:38:54', tmtdew=8.45, humidity=56.5, cloud=0.0, wind=22.09, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:39:30', seeing=2.07, atlas_timestamp='2026-02-15T23:39:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:38:00')
2026-02-16T01:39:37.638 [DEBUG] [Thread-214845] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:39:37.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:39:37.734 [DEBUG] [Thread-214848] [transport.py] [_log()] starting thread (client mode): 0xa2de89d0
2026-02-16T01:39:37.734 [DEBUG] [Thread-214848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:39:37.749 [DEBUG] [Thread-214848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:39:37.749 [INFO] [Thread-214848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] client lang: <none>
2026-02-16T01:39:37.757 [DEBUG] [Thread-214848] [transport.py] [_log()] server lang: <none>
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] kex follows: False
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] Compression: none
2026-02-16T01:39:37.758 [DEBUG] [Thread-214848] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:39:37.816 [DEBUG] [Thread-214848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:39:37.816 [DEBUG] [Thread-214848] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:39:37.816 [DEBUG] [Thread-214848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:39:37.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:39:37.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:39:37.874 [DEBUG] [Thread-214848] [transport.py] [_log()] userauth is OK
2026-02-16T01:39:37.874 [DEBUG] [Thread-214848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:39:37.874 [DEBUG] [Thread-214848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:39:37.874 [DEBUG] [Thread-214848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:39:37.874 [DEBUG] [Thread-214848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:39:37.888 [INFO] [Thread-214848] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:39:37.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:39:37.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:39:38.718 [DEBUG] [Thread-214848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:39:38.718 [DEBUG] [Thread-214848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:39:38.766 [DEBUG] [Thread-214848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:39:38.767 [DEBUG] [Thread-214848] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:39:38.776 [DEBUG] [Thread-214848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:39:38.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:39:38.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:39:38.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:39:38.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:39:38.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:39:38.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:39:38.816 [DEBUG] [Thread-214848] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:39:43.303 [DEBUG] [Thread-214850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:44.416 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:39:45.310 [DEBUG] [Thread-214851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:00.363 [DEBUG] [Thread-214852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:03.071 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:40:08.828 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:40:08.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:40:10.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 39, 30), 8.46, 56.49, 0.0, 22.67, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:40:10.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:39:30
2026-02-16T01:40:11.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:40:11.440 [DEBUG] [Thread-214853] [transport.py] [_log()] starting thread (client mode): 0xa2de9e40
2026-02-16T01:40:11.441 [DEBUG] [Thread-214853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:40:11.454 [DEBUG] [Thread-214853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:40:11.454 [INFO] [Thread-214853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:40:11.457 [DEBUG] [Thread-214853] [transport.py] [_log()] client lang: <none>
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] server lang: <none>
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] kex follows: False
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] Compression: none
2026-02-16T01:40:11.458 [DEBUG] [Thread-214853] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:40:11.466 [DEBUG] [Thread-214853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:40:11.467 [DEBUG] [Thread-214853] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:40:11.467 [DEBUG] [Thread-214853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:40:11.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:40:11.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:40:11.469 [DEBUG] [Thread-214853] [transport.py] [_log()] userauth is OK
2026-02-16T01:40:11.469 [DEBUG] [Thread-214853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:40:11.469 [DEBUG] [Thread-214853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:40:11.469 [DEBUG] [Thread-214853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:40:11.469 [DEBUG] [Thread-214853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:40:11.505 [INFO] [Thread-214853] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:40:11.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:40:15.398 [DEBUG] [Thread-214855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:15.684 [DEBUG] [Thread-214853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:40:15.685 [DEBUG] [Thread-214853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:40:15.685 [DEBUG] [Thread-214853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:40:15.725 [DEBUG] [Thread-214853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:40:15.726 [DEBUG] [Thread-214853] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:40:15.729 [DEBUG] [Thread-214853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:40:15.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:40:15.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:40:15.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:40:15.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:40:15.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:40:15.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:40:15.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:40:15.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:40:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:40:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.985517 -999.00  +13.40  13.13     61   +6.00 1 1 1 1 1     0    0 6.99 -6.56 ZNESW 13.3 13.1 125.5 21.4 13.7 -22.7 13.6 -21.9 13.3 -20.6 13.7 -21.8
2026-02-16T01:40:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:40:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:40:15.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.985517
2026-02-16T01:40:15.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:40:15.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:40:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:40:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:40:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:40:15.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:39:30', tmtdew=8.46, humidity=56.49, cloud=0.0, wind=22.67, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:40:05', seeing=2.63, atlas_timestamp='2026-02-15T23:39:08.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:38:00')
2026-02-16T01:40:15.754 [DEBUG] [Thread-214853] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:40:15.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:40:15.849 [DEBUG] [Thread-214857] [transport.py] [_log()] starting thread (client mode): 0xa2dea080
2026-02-16T01:40:15.849 [DEBUG] [Thread-214857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:40:15.865 [DEBUG] [Thread-214857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:40:15.865 [INFO] [Thread-214857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] client lang: <none>
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] server lang: <none>
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] kex follows: False
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] Compression: none
2026-02-16T01:40:15.873 [DEBUG] [Thread-214857] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:40:15.930 [DEBUG] [Thread-214857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:40:15.930 [DEBUG] [Thread-214857] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:40:15.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:40:15.931 [DEBUG] [Thread-214857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:40:15.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:40:15.986 [DEBUG] [Thread-214857] [transport.py] [_log()] userauth is OK
2026-02-16T01:40:15.986 [DEBUG] [Thread-214857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:40:15.986 [DEBUG] [Thread-214857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:40:15.986 [DEBUG] [Thread-214857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:40:15.986 [DEBUG] [Thread-214857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:40:16.006 [INFO] [Thread-214857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:40:16.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:40:16.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:40:16.844 [DEBUG] [Thread-214857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:40:16.845 [DEBUG] [Thread-214857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:40:16.893 [DEBUG] [Thread-214857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:40:16.893 [DEBUG] [Thread-214857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:40:16.902 [DEBUG] [Thread-214857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:40:16.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:40:16.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:40:16.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:40:16.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:40:16.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:40:16.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:40:16.940 [DEBUG] [Thread-214857] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:40:21.901 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:30.434 [DEBUG] [Thread-214859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:30.970 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:30.971 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:40.879 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:43.365 [DEBUG] [Thread-214860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:45.497 [DEBUG] [Thread-214861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:40:46.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:40:46.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:40:46.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:40:49.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 40, 5), 8.44, 56.54, 0.0, 21.6, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:40:49.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:40:05
2026-02-16T01:40:49.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:40:50.027 [DEBUG] [Thread-214862] [transport.py] [_log()] starting thread (client mode): 0xa2debca0
2026-02-16T01:40:50.028 [DEBUG] [Thread-214862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:40:50.047 [DEBUG] [Thread-214862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:40:50.048 [INFO] [Thread-214862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:40:50.050 [DEBUG] [Thread-214862] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:40:50.050 [DEBUG] [Thread-214862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:40:50.050 [DEBUG] [Thread-214862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:40:50.050 [DEBUG] [Thread-214862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:50.050 [DEBUG] [Thread-214862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:50.050 [DEBUG] [Thread-214862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] client lang: <none>
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] server lang: <none>
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] kex follows: False
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] Compression: none
2026-02-16T01:40:50.051 [DEBUG] [Thread-214862] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:40:50.068 [DEBUG] [Thread-214862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:40:50.068 [DEBUG] [Thread-214862] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:40:50.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:40:50.069 [DEBUG] [Thread-214862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:40:50.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:40:50.113 [DEBUG] [Thread-214862] [transport.py] [_log()] userauth is OK
2026-02-16T01:40:50.113 [DEBUG] [Thread-214862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:40:50.114 [DEBUG] [Thread-214862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:40:50.114 [DEBUG] [Thread-214862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:40:50.114 [DEBUG] [Thread-214862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:40:50.140 [INFO] [Thread-214862] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:40:50.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:40:50.740 [DEBUG] [Thread-214862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:40:50.740 [DEBUG] [Thread-214862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:40:50.741 [DEBUG] [Thread-214862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:40:50.781 [DEBUG] [Thread-214862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:40:50.781 [DEBUG] [Thread-214862] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:40:50.784 [DEBUG] [Thread-214862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:40:50.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:40:50.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:40:50.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:40:50.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:40:50.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:40:50.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:40:50.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:40:50.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:40:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:40:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.985864 -999.00  +13.40  13.98     60   +6.00 1 1 1 1 1     0    0 7.00 -4.78 ZNESW 15.4 14.0 137.4 18.2 13.7 -22.7 13.6 -21.8 13.3 -20.7 13.6 -21.9
2026-02-16T01:40:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:40:50.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:40:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.985864
2026-02-16T01:40:50.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:40:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:40:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:40:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:40:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:40:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:40:05', tmtdew=8.44, humidity=56.54, cloud=0.0, wind=21.6, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:40:41', seeing=2.12, atlas_timestamp='2026-02-15T23:39:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:38:00')
2026-02-16T01:40:50.813 [DEBUG] [Thread-214862] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:40:50.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:40:50.920 [DEBUG] [Thread-214865] [transport.py] [_log()] starting thread (client mode): 0xa2deadd0
2026-02-16T01:40:50.920 [DEBUG] [Thread-214865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:40:50.934 [DEBUG] [Thread-214865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:40:50.935 [INFO] [Thread-214865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:40:50.942 [DEBUG] [Thread-214865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] client lang: <none>
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] server lang: <none>
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] kex follows: False
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:40:50.943 [DEBUG] [Thread-214865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:40:50.944 [DEBUG] [Thread-214865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:40:50.944 [DEBUG] [Thread-214865] [transport.py] [_log()] Compression: none
2026-02-16T01:40:50.944 [DEBUG] [Thread-214865] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:40:51.002 [DEBUG] [Thread-214865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:40:51.003 [DEBUG] [Thread-214865] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:40:51.004 [DEBUG] [Thread-214865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:40:51.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:40:51.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:40:51.058 [DEBUG] [Thread-214865] [transport.py] [_log()] userauth is OK
2026-02-16T01:40:51.059 [DEBUG] [Thread-214865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:40:51.059 [DEBUG] [Thread-214865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:40:51.059 [DEBUG] [Thread-214865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:40:51.059 [DEBUG] [Thread-214865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:40:51.078 [INFO] [Thread-214865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:40:51.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:40:51.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:40:51.893 [DEBUG] [Thread-214865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:40:51.894 [DEBUG] [Thread-214865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:40:51.942 [DEBUG] [Thread-214865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:40:51.942 [DEBUG] [Thread-214865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:40:51.951 [DEBUG] [Thread-214865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:40:51.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:40:51.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:40:51.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:40:51.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:40:51.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:40:51.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:40:51.987 [DEBUG] [Thread-214865] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:40:59.716 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:00.537 [DEBUG] [Thread-214867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:15.590 [DEBUG] [Thread-214868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:18.376 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:22.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:41:22.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:41:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:41:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 40, 41), 8.53, 56.27, 0.0, 21.84, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:41:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:40:41
2026-02-16T01:41:24.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:41:25.079 [DEBUG] [Thread-214869] [transport.py] [_log()] starting thread (client mode): 0xa2de9300
2026-02-16T01:41:25.079 [DEBUG] [Thread-214869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:41:25.101 [DEBUG] [Thread-214869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:41:25.101 [INFO] [Thread-214869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:41:25.104 [DEBUG] [Thread-214869] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:41:25.104 [DEBUG] [Thread-214869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:41:25.104 [DEBUG] [Thread-214869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:41:25.104 [DEBUG] [Thread-214869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:41:25.104 [DEBUG] [Thread-214869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:41:25.104 [DEBUG] [Thread-214869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] client lang: <none>
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] server lang: <none>
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] kex follows: False
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] Compression: none
2026-02-16T01:41:25.105 [DEBUG] [Thread-214869] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:41:25.124 [DEBUG] [Thread-214869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:41:25.124 [DEBUG] [Thread-214869] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:41:25.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:41:25.125 [DEBUG] [Thread-214869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:41:25.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:41:25.128 [DEBUG] [Thread-214869] [transport.py] [_log()] userauth is OK
2026-02-16T01:41:25.128 [DEBUG] [Thread-214869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:41:25.128 [DEBUG] [Thread-214869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:41:25.129 [DEBUG] [Thread-214869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:41:25.129 [DEBUG] [Thread-214869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:41:25.163 [INFO] [Thread-214869] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:41:25.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:41:25.750 [DEBUG] [Thread-214869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:41:25.750 [DEBUG] [Thread-214869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:41:25.750 [DEBUG] [Thread-214869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:41:25.791 [DEBUG] [Thread-214869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:41:25.792 [DEBUG] [Thread-214869] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:41:25.795 [DEBUG] [Thread-214869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:41:25.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:41:25.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:41:25.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:41:25.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:41:25.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:41:25.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:41:25.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:41:25.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:41:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:41:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.986905 -999.00  +13.40  23.18     61   +6.10 1 1 1 1 1     0    0 7.30 0.38 ZNESW 18.2 23.2 144.4 25.5 13.7 -22.7 13.6 -21.6 13.3 -20.7 13.6 -21.8
2026-02-16T01:41:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:41:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:41:25.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.986905
2026-02-16T01:41:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:41:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:41:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:41:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:41:25.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:41:25.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:40:41', tmtdew=8.53, humidity=56.27, cloud=0.0, wind=21.84, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:41:17', seeing=2.22, atlas_timestamp='2026-02-15T23:41:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:38:00')
2026-02-16T01:41:25.823 [DEBUG] [Thread-214869] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:41:25.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:41:25.921 [DEBUG] [Thread-214872] [transport.py] [_log()] starting thread (client mode): 0xa2debc70
2026-02-16T01:41:25.921 [DEBUG] [Thread-214872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:41:25.936 [DEBUG] [Thread-214872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:41:25.936 [INFO] [Thread-214872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] client lang: <none>
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] server lang: <none>
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] kex follows: False
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:41:25.943 [DEBUG] [Thread-214872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:41:25.944 [DEBUG] [Thread-214872] [transport.py] [_log()] Compression: none
2026-02-16T01:41:25.944 [DEBUG] [Thread-214872] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:41:26.002 [DEBUG] [Thread-214872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:41:26.003 [DEBUG] [Thread-214872] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:41:26.003 [DEBUG] [Thread-214872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:41:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:41:26.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:41:26.058 [DEBUG] [Thread-214872] [transport.py] [_log()] userauth is OK
2026-02-16T01:41:26.058 [DEBUG] [Thread-214872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:41:26.059 [DEBUG] [Thread-214872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:41:26.059 [DEBUG] [Thread-214872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:41:26.059 [DEBUG] [Thread-214872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:41:26.079 [INFO] [Thread-214872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:41:26.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:41:26.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:41:26.938 [DEBUG] [Thread-214872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:41:26.938 [DEBUG] [Thread-214872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:41:26.987 [DEBUG] [Thread-214872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:41:26.987 [DEBUG] [Thread-214872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:41:26.995 [DEBUG] [Thread-214872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:41:27.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:41:27.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:41:27.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:41:27.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:41:27.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:41:27.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:41:27.027 [DEBUG] [Thread-214872] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:41:30.629 [DEBUG] [Thread-214874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:31.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:31.172 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:37.009 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:43.432 [DEBUG] [Thread-214875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:45.675 [DEBUG] [Thread-214876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:55.664 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:41:57.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:41:57.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:41:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:41:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 41, 17), 8.52, 56.12, 0.0, 20.4, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:41:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:41:17
2026-02-16T01:41:59.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:41:59.662 [DEBUG] [Thread-214877] [transport.py] [_log()] starting thread (client mode): 0xa2dea560
2026-02-16T01:41:59.662 [DEBUG] [Thread-214877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:41:59.683 [DEBUG] [Thread-214877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:41:59.683 [INFO] [Thread-214877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] client lang: <none>
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] server lang: <none>
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] kex follows: False
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:41:59.684 [DEBUG] [Thread-214877] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:41:59.685 [DEBUG] [Thread-214877] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:41:59.685 [DEBUG] [Thread-214877] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:41:59.685 [DEBUG] [Thread-214877] [transport.py] [_log()] Compression: none
2026-02-16T01:41:59.685 [DEBUG] [Thread-214877] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:41:59.693 [DEBUG] [Thread-214877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:41:59.694 [DEBUG] [Thread-214877] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:41:59.694 [DEBUG] [Thread-214877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:41:59.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:41:59.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:41:59.696 [DEBUG] [Thread-214877] [transport.py] [_log()] userauth is OK
2026-02-16T01:41:59.696 [DEBUG] [Thread-214877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:41:59.696 [DEBUG] [Thread-214877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:41:59.696 [DEBUG] [Thread-214877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:41:59.696 [DEBUG] [Thread-214877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:41:59.733 [INFO] [Thread-214877] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:41:59.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:42:00.513 [DEBUG] [Thread-214877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:42:00.513 [DEBUG] [Thread-214877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:42:00.513 [DEBUG] [Thread-214877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:42:00.554 [DEBUG] [Thread-214877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:42:00.555 [DEBUG] [Thread-214877] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:42:00.557 [DEBUG] [Thread-214877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:42:00.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:42:00.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:42:00.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:42:00.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:42:00.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:42:00.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:42:00.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:42:00.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:42:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:42:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.986905 -999.00  +13.40  23.18     61   +6.10 1 1 1 1 1     0    0 7.30 0.38 ZNESW 18.2 23.2 144.4 25.5 13.7 -22.7 13.6 -21.6 13.3 -20.7 13.6 -21.8
2026-02-16T01:42:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:42:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:42:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.986905
2026-02-16T01:42:00.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:42:00.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:42:00.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:42:00.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:42:00.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:42:00.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:41:17', tmtdew=8.52, humidity=56.12, cloud=0.0, wind=20.4, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:41:54', seeing=2.22, atlas_timestamp='2026-02-15T23:41:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02325000000000088, -0.00975000000000037, -0.10574999999999868, -0.031500000000001194, -0.0754999999999999, -0.011749999999999261, 0.03200000000000003, 0.011250000000000426, 0.013499999999998735, 0.01699999999999946, -0.02775000000000105, -0.04249999999999865, 0.0009999999999994458, 0.023749999999999716, -0.0030000000000001137, 0.0015000000000000568, 0.021250000000000213, -0.013999999999999346, -0.023000000000001464, -0.0017500000000012506, 0.03399999999999892, 0.040749999999999176, 0.03825000000000145, 0.0007500000000000284, 0.022999999999999687, -0.01550000000000118, 0.03074999999999939, -0.008999999999998565, 0.019000000000000128, -0.012999999999998124, 0.05400000000000027, 0.017000000000001236, 0.043250000000000455], zp_timestamp='2026-02-15T23:38:00')
2026-02-16T01:42:00.581 [DEBUG] [Thread-214877] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:42:00.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:42:00.675 [DEBUG] [Thread-214880] [transport.py] [_log()] starting thread (client mode): 0xa2d13280
2026-02-16T01:42:00.675 [DEBUG] [Thread-214880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:42:00.691 [DEBUG] [Thread-214880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:42:00.691 [INFO] [Thread-214880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:42:00.699 [DEBUG] [Thread-214880] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:42:00.699 [DEBUG] [Thread-214880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:42:00.699 [DEBUG] [Thread-214880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:42:00.699 [DEBUG] [Thread-214880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:42:00.699 [DEBUG] [Thread-214880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:42:00.700 [DEBUG] [Thread-214880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:42:00.700 [DEBUG] [Thread-214880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:42:00.700 [DEBUG] [Thread-214880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:42:00.700 [DEBUG] [Thread-214880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:42:00.700 [DEBUG] [Thread-214880] [transport.py] [_log()] client lang: <none>
2026-02-16T01:42:00.700 [DEBUG] [Thread-214880] [transport.py] [_log()] server lang: <none>
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] kex follows: False
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] Compression: none
2026-02-16T01:42:00.701 [DEBUG] [Thread-214880] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:42:00.705 [DEBUG] [Thread-214882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:00.759 [DEBUG] [Thread-214880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:42:00.759 [DEBUG] [Thread-214880] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:42:00.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:42:00.760 [DEBUG] [Thread-214880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:42:00.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:42:00.815 [DEBUG] [Thread-214880] [transport.py] [_log()] userauth is OK
2026-02-16T01:42:00.815 [DEBUG] [Thread-214880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:42:00.815 [DEBUG] [Thread-214880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:42:00.815 [DEBUG] [Thread-214880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:42:00.815 [DEBUG] [Thread-214880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:42:00.835 [INFO] [Thread-214880] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:42:00.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:42:00.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:42:01.669 [DEBUG] [Thread-214880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:42:01.673 [DEBUG] [Thread-214880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:42:01.717 [DEBUG] [Thread-214880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:42:01.717 [DEBUG] [Thread-214880] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:42:01.726 [DEBUG] [Thread-214880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:42:01.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:42:01.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:42:01.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:42:01.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:42:01.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:42:01.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:42:01.761 [DEBUG] [Thread-214880] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:42:14.338 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:15.756 [DEBUG] [Thread-214883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:30.792 [DEBUG] [Thread-214884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:31.371 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:31.373 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:31.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:42:31.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:42:31.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:42:32.992 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 41, 54), 8.44, 56.72, 0.0, 21.24, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:42:33.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:41:54
2026-02-16T01:42:34.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:42:34.156 [DEBUG] [Thread-214885] [transport.py] [_log()] starting thread (client mode): 0xa2d26830
2026-02-16T01:42:34.156 [DEBUG] [Thread-214885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:42:34.175 [DEBUG] [Thread-214885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:42:34.176 [INFO] [Thread-214885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] client lang: <none>
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] server lang: <none>
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] kex follows: False
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] Compression: none
2026-02-16T01:42:34.179 [DEBUG] [Thread-214885] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:42:34.199 [DEBUG] [Thread-214885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:42:34.200 [DEBUG] [Thread-214885] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:42:34.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:42:34.201 [DEBUG] [Thread-214885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:42:34.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:42:34.203 [DEBUG] [Thread-214885] [transport.py] [_log()] userauth is OK
2026-02-16T01:42:34.203 [DEBUG] [Thread-214885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:42:34.203 [DEBUG] [Thread-214885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:42:34.203 [DEBUG] [Thread-214885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:42:34.203 [DEBUG] [Thread-214885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:42:34.229 [INFO] [Thread-214885] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:42:34.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:42:34.827 [DEBUG] [Thread-214885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:42:34.827 [DEBUG] [Thread-214885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:42:34.827 [DEBUG] [Thread-214885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:42:34.868 [DEBUG] [Thread-214885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:42:34.868 [DEBUG] [Thread-214885] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:42:34.871 [DEBUG] [Thread-214885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:42:34.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:42:34.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:42:34.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:42:34.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:42:34.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:42:34.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:42:34.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:42:34.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:42:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:42:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.987253 -999.00  +13.40  14.47     61   +6.00 1 1 1 1 1     0    0 7.28 2.12 ZNESW 11.8 14.5 134.0 20.3 13.7 -22.7 13.6 -21.8 13.3 -20.6 13.6 -21.9
2026-02-16T01:42:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:42:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:42:34.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.987253
2026-02-16T01:42:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:42:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:42:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:42:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:42:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:42:34.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:41:54', tmtdew=8.44, humidity=56.72, cloud=0.0, wind=21.24, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:42:29', seeing=3.5, atlas_timestamp='2026-02-15T23:41:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.027749999999999275, -0.08324999999999783, -0.06450000000000067, -0.09149999999999991, -0.02474999999999916, 0.022999999999999687, 0.0182500000000001, -0.022999999999999687, -0.015000000000000568, -0.060750000000000526, -0.06600000000000072, 0.019000000000000128, 0.012249999999999872, 0.0, -0.009999999999999787, 0.0442499999999999, -0.016500000000000625, -0.023000000000001464, -0.019750000000001933, 0.005999999999998451, 0.022749999999998494, 0.021250000000000213, 0.017250000000000654, 0.01899999999999835, -0.027499999999999858, 0.003750000000000142, 0.012500000000001066, 0.013999999999999346, -0.026999999999999247, 0.049000000000001265, 0.012000000000000455, 0.008250000000000313], zp_timestamp='2026-02-15T23:41:00')
2026-02-16T01:42:34.897 [DEBUG] [Thread-214885] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:42:34.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:42:34.994 [DEBUG] [Thread-214888] [transport.py] [_log()] starting thread (client mode): 0xa2d259c0
2026-02-16T01:42:34.994 [DEBUG] [Thread-214888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:42:35.008 [DEBUG] [Thread-214888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:42:35.008 [INFO] [Thread-214888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:42:35.016 [DEBUG] [Thread-214888] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:42:35.016 [DEBUG] [Thread-214888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:42:35.016 [DEBUG] [Thread-214888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:42:35.016 [DEBUG] [Thread-214888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] client lang: <none>
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] server lang: <none>
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] kex follows: False
2026-02-16T01:42:35.017 [DEBUG] [Thread-214888] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:42:35.018 [DEBUG] [Thread-214888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:42:35.018 [DEBUG] [Thread-214888] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:42:35.018 [DEBUG] [Thread-214888] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:42:35.018 [DEBUG] [Thread-214888] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:42:35.018 [DEBUG] [Thread-214888] [transport.py] [_log()] Compression: none
2026-02-16T01:42:35.018 [DEBUG] [Thread-214888] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:42:35.076 [DEBUG] [Thread-214888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:42:35.076 [DEBUG] [Thread-214888] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:42:35.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:42:35.078 [DEBUG] [Thread-214888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:42:35.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:42:35.131 [DEBUG] [Thread-214888] [transport.py] [_log()] userauth is OK
2026-02-16T01:42:35.131 [DEBUG] [Thread-214888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:42:35.131 [DEBUG] [Thread-214888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:42:35.132 [DEBUG] [Thread-214888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:42:35.132 [DEBUG] [Thread-214888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:42:35.151 [INFO] [Thread-214888] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:42:35.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:42:35.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:42:35.970 [DEBUG] [Thread-214888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:42:35.970 [DEBUG] [Thread-214888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:42:36.017 [DEBUG] [Thread-214888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:42:36.017 [DEBUG] [Thread-214888] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:42:36.025 [DEBUG] [Thread-214888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:42:36.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:42: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')
2026-02-16T01:42:36.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:42:36.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:42:36.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:42:36.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:42:36.060 [DEBUG] [Thread-214888] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:42:43.518 [DEBUG] [Thread-214890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:45.828 [DEBUG] [Thread-214891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:42:51.756 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:00.889 [DEBUG] [Thread-214892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:06.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:43:06.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:43:06.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:43:08.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 42, 29), 8.46, 56.65, 0.0, 21.14, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:43:08.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:42:29
2026-02-16T01:43:08.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:43:08.749 [DEBUG] [Thread-214893] [transport.py] [_log()] starting thread (client mode): 0xa2deb1c0
2026-02-16T01:43:08.749 [DEBUG] [Thread-214893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:43:08.768 [DEBUG] [Thread-214893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:43:08.768 [INFO] [Thread-214893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] client lang: <none>
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] server lang: <none>
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] kex follows: False
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] Compression: none
2026-02-16T01:43:08.770 [DEBUG] [Thread-214893] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:43:08.783 [DEBUG] [Thread-214893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:43:08.783 [DEBUG] [Thread-214893] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:43:08.784 [DEBUG] [Thread-214893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:43:08.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:43:08.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:43:08.785 [DEBUG] [Thread-214893] [transport.py] [_log()] userauth is OK
2026-02-16T01:43:08.786 [DEBUG] [Thread-214893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:43:08.786 [DEBUG] [Thread-214893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:43:08.786 [DEBUG] [Thread-214893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:43:08.786 [DEBUG] [Thread-214893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:43:08.821 [INFO] [Thread-214893] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:43:08.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:43:09.591 [DEBUG] [Thread-214893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:43:09.592 [DEBUG] [Thread-214893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:43:09.592 [DEBUG] [Thread-214893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:43:09.632 [DEBUG] [Thread-214893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:43:09.632 [DEBUG] [Thread-214893] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:43:09.636 [DEBUG] [Thread-214893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:43:09.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:43:09.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:43:09.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:43:09.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:43:09.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:43:09.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:43:09.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:43:09.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:43:09.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:43:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.987600 -999.00  +13.40  15.77     61   +6.00 1 1 1 1 1     0    0 7.22 3.38 ZNESW 16.0 15.8 139.6 18.4 13.7 -22.8 13.6 -21.6 13.3 -20.7 13.6 -21.7
2026-02-16T01:43:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:43:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:43:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.987600
2026-02-16T01:43:09.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:43:09.661 [DEBUG] [Thread-214893] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:43:09.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:43:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:43:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:43:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:43:09.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:42:29', tmtdew=8.46, humidity=56.65, cloud=0.0, wind=21.14, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:43:05', seeing=3.11, atlas_timestamp='2026-02-15T23:42:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.027749999999999275, -0.08324999999999783, -0.06450000000000067, -0.09149999999999991, -0.02474999999999916, 0.022999999999999687, 0.0182500000000001, -0.022999999999999687, -0.015000000000000568, -0.060750000000000526, -0.06600000000000072, 0.019000000000000128, 0.012249999999999872, 0.0, -0.009999999999999787, 0.0442499999999999, -0.016500000000000625, -0.023000000000001464, -0.019750000000001933, 0.005999999999998451, 0.022749999999998494, 0.021250000000000213, 0.017250000000000654, 0.01899999999999835, -0.027499999999999858, 0.003750000000000142, 0.012500000000001066, 0.013999999999999346, -0.026999999999999247, 0.049000000000001265, 0.012000000000000455, 0.008250000000000313], zp_timestamp='2026-02-15T23:41:00')
2026-02-16T01:43:09.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:43:09.759 [DEBUG] [Thread-214896] [transport.py] [_log()] starting thread (client mode): 0xa2de9450
2026-02-16T01:43:09.760 [DEBUG] [Thread-214896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:43:09.774 [DEBUG] [Thread-214896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:43:09.774 [INFO] [Thread-214896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] client lang: <none>
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] server lang: <none>
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] kex follows: False
2026-02-16T01:43:09.782 [DEBUG] [Thread-214896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:43:09.783 [DEBUG] [Thread-214896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:43:09.783 [DEBUG] [Thread-214896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:43:09.783 [DEBUG] [Thread-214896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:43:09.783 [DEBUG] [Thread-214896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:43:09.783 [DEBUG] [Thread-214896] [transport.py] [_log()] Compression: none
2026-02-16T01:43:09.783 [DEBUG] [Thread-214896] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:43:09.839 [DEBUG] [Thread-214896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:43:09.840 [DEBUG] [Thread-214896] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:43:09.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:43:09.841 [DEBUG] [Thread-214896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:43:09.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:43:09.895 [DEBUG] [Thread-214896] [transport.py] [_log()] userauth is OK
2026-02-16T01:43:09.895 [DEBUG] [Thread-214896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:43:09.896 [DEBUG] [Thread-214896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:43:09.896 [DEBUG] [Thread-214896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:43:09.896 [DEBUG] [Thread-214896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:43:09.914 [INFO] [Thread-214896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:43:09.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:43:09.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:43:10.410 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:10.792 [DEBUG] [Thread-214896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:43:10.793 [DEBUG] [Thread-214896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:43:10.839 [DEBUG] [Thread-214896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:43:10.839 [DEBUG] [Thread-214896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:43:10.848 [DEBUG] [Thread-214896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:43:10.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:43:10.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:43:10.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:43:10.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:43:10.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:43:10.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:43:10.880 [DEBUG] [Thread-214896] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:43:15.925 [DEBUG] [Thread-214898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:29.055 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:30.988 [DEBUG] [Thread-214899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:31.572 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:31.574 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:40.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:43:40.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:43:40.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:43:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 43, 4), 8.43, 56.75, 0.0, 22.16, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:43:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:43:04
2026-02-16T01:43:43.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:43:43.518 [DEBUG] [Thread-214900] [transport.py] [_log()] starting thread (client mode): 0xa2d27790
2026-02-16T01:43:43.518 [DEBUG] [Thread-214900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:43:43.538 [DEBUG] [Thread-214900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:43:43.538 [INFO] [Thread-214900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:43:43.541 [DEBUG] [Thread-214900] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:43:43.541 [DEBUG] [Thread-214900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:43:43.541 [DEBUG] [Thread-214900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:43:43.541 [DEBUG] [Thread-214900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:43.541 [DEBUG] [Thread-214900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:43.541 [DEBUG] [Thread-214900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] client lang: <none>
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] server lang: <none>
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] kex follows: False
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] Compression: none
2026-02-16T01:43:43.542 [DEBUG] [Thread-214900] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:43:43.558 [DEBUG] [Thread-214900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:43:43.558 [DEBUG] [Thread-214900] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:43:43.558 [DEBUG] [Thread-214900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:43:43.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:43:43.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:43:43.559 [DEBUG] [Thread-214900] [transport.py] [_log()] userauth is OK
2026-02-16T01:43:43.559 [DEBUG] [Thread-214900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:43:43.559 [DEBUG] [Thread-214900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:43:43.559 [DEBUG] [Thread-214900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:43:43.559 [DEBUG] [Thread-214900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:43:43.572 [INFO] [Thread-214900] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:43:43.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:43:43.593 [DEBUG] [Thread-214902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:44.182 [DEBUG] [Thread-214900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:43:44.182 [DEBUG] [Thread-214900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:43:44.182 [DEBUG] [Thread-214900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:43:44.223 [DEBUG] [Thread-214900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:43:44.224 [DEBUG] [Thread-214900] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:43:44.226 [DEBUG] [Thread-214900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:43:44.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:43:44.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:43:44.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:43:44.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:43:44.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:43:44.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:43:44.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:43:44.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:43:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:43:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.987947 -999.00  +13.40  20.15     60   +6.00 1 1 1 1 1     0    0 7.27 4.48 ZNESW 21.8 20.1 140.2 25.4 13.7 -22.7 13.6 -21.6 13.3 -20.5 13.6 -21.7
2026-02-16T01:43:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:43:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:43:44.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.987947
2026-02-16T01:43:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:43:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:43:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:43:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:43:44.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:43:44.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:43:04', tmtdew=8.43, humidity=56.75, cloud=0.0, wind=22.16, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:43:05', seeing=3.11, atlas_timestamp='2026-02-15T23:42:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.027749999999999275, -0.08324999999999783, -0.06450000000000067, -0.09149999999999991, -0.02474999999999916, 0.022999999999999687, 0.0182500000000001, -0.022999999999999687, -0.015000000000000568, -0.060750000000000526, -0.06600000000000072, 0.019000000000000128, 0.012249999999999872, 0.0, -0.009999999999999787, 0.0442499999999999, -0.016500000000000625, -0.023000000000001464, -0.019750000000001933, 0.005999999999998451, 0.022749999999998494, 0.021250000000000213, 0.017250000000000654, 0.01899999999999835, -0.027499999999999858, 0.003750000000000142, 0.012500000000001066, 0.013999999999999346, -0.026999999999999247, 0.049000000000001265, 0.012000000000000455, 0.008250000000000313], zp_timestamp='2026-02-15T23:41:00')
2026-02-16T01:43:44.256 [DEBUG] [Thread-214900] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:43:44.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:43:44.352 [DEBUG] [Thread-214904] [transport.py] [_log()] starting thread (client mode): 0xa2d10580
2026-02-16T01:43:44.352 [DEBUG] [Thread-214904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:43:44.367 [DEBUG] [Thread-214904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:43:44.367 [INFO] [Thread-214904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:43:44.374 [DEBUG] [Thread-214904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:43:44.375 [DEBUG] [Thread-214904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:43:44.375 [DEBUG] [Thread-214904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:43:44.375 [DEBUG] [Thread-214904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:44.375 [DEBUG] [Thread-214904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] client lang: <none>
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] server lang: <none>
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] kex follows: False
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] Compression: none
2026-02-16T01:43:44.376 [DEBUG] [Thread-214904] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:43:44.431 [DEBUG] [Thread-214904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:43:44.432 [DEBUG] [Thread-214904] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:43:44.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:43:44.433 [DEBUG] [Thread-214904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:43:44.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:43:44.488 [DEBUG] [Thread-214904] [transport.py] [_log()] userauth is OK
2026-02-16T01:43:44.488 [DEBUG] [Thread-214904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:43:44.488 [DEBUG] [Thread-214904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:43:44.488 [DEBUG] [Thread-214904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:43:44.488 [DEBUG] [Thread-214904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:43:44.506 [INFO] [Thread-214904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:43:44.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:43:44.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:43:45.334 [DEBUG] [Thread-214904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:43:45.335 [DEBUG] [Thread-214904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:43:45.382 [DEBUG] [Thread-214904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:43:45.382 [DEBUG] [Thread-214904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:43:45.391 [DEBUG] [Thread-214904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:43:45.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:43:45.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:43:45.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:43:45.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:43:45.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:43:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:43:45.424 [DEBUG] [Thread-214904] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:43:46.022 [DEBUG] [Thread-214906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:43:47.957 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:01.072 [DEBUG] [Thread-214907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:06.773 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:15.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:44:15.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:44:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:44:16.112 [DEBUG] [Thread-214908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:17.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 43, 40), 8.62, 55.91, 0.0, 21.77, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:44:17.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:43:40
2026-02-16T01:44:17.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:44:17.968 [DEBUG] [Thread-214909] [transport.py] [_log()] starting thread (client mode): 0xa2d12e60
2026-02-16T01:44:17.968 [DEBUG] [Thread-214909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:44:17.987 [DEBUG] [Thread-214909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:44:17.987 [INFO] [Thread-214909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] client lang: <none>
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] server lang: <none>
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] kex follows: False
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] Compression: none
2026-02-16T01:44:17.990 [DEBUG] [Thread-214909] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:44:18.008 [DEBUG] [Thread-214909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:44:18.009 [DEBUG] [Thread-214909] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:44:18.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:44:18.009 [DEBUG] [Thread-214909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:44:18.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:44:18.011 [DEBUG] [Thread-214909] [transport.py] [_log()] userauth is OK
2026-02-16T01:44:18.012 [DEBUG] [Thread-214909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:44:18.012 [DEBUG] [Thread-214909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:44:18.012 [DEBUG] [Thread-214909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:44:18.012 [DEBUG] [Thread-214909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:44:18.026 [INFO] [Thread-214909] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:44:18.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:44:18.707 [DEBUG] [Thread-214909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:44:18.708 [DEBUG] [Thread-214909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:44:18.708 [DEBUG] [Thread-214909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:44:18.748 [DEBUG] [Thread-214909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:44:18.749 [DEBUG] [Thread-214909] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:44:18.752 [DEBUG] [Thread-214909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:44:18.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:44:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:44:18.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:44:18.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:44:18.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:44:18.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:44:18.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:44:18.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:44:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:44:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.988642 -999.00  +13.50  17.30     60   +6.00 1 1 1 1 1     0    0 7.43 7.82 ZNESW 16.5 17.3 131.6 21.1 13.7 -22.8 13.6 -21.8 13.4 -20.6 13.6 -22.0
2026-02-16T01:44:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:44:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:44:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.988642
2026-02-16T01:44:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:44:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:44:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:44:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:44:18.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:44:18.780 [DEBUG] [Thread-214909] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:44:18.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:43:40', tmtdew=8.62, humidity=55.91, cloud=0.0, wind=21.77, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:43:40', seeing=3.21, atlas_timestamp='2026-02-15T23:43:38.669', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.027749999999999275, -0.08324999999999783, -0.06450000000000067, -0.09149999999999991, -0.02474999999999916, 0.022999999999999687, 0.0182500000000001, -0.022999999999999687, -0.015000000000000568, -0.060750000000000526, -0.06600000000000072, 0.019000000000000128, 0.012249999999999872, 0.0, -0.009999999999999787, 0.0442499999999999, -0.016500000000000625, -0.023000000000001464, -0.019750000000001933, 0.005999999999998451, 0.022749999999998494, 0.021250000000000213, 0.017250000000000654, 0.01899999999999835, -0.027499999999999858, 0.003750000000000142, 0.012500000000001066, 0.013999999999999346, -0.026999999999999247, 0.049000000000001265, 0.012000000000000455, 0.008250000000000313], zp_timestamp='2026-02-15T23:41:00')
2026-02-16T01:44:18.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:44:18.878 [DEBUG] [Thread-214912] [transport.py] [_log()] starting thread (client mode): 0xa2d26140
2026-02-16T01:44:18.878 [DEBUG] [Thread-214912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:44:18.897 [DEBUG] [Thread-214912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:44:18.897 [INFO] [Thread-214912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:44:18.905 [DEBUG] [Thread-214912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:44:18.905 [DEBUG] [Thread-214912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:44:18.905 [DEBUG] [Thread-214912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] client lang: <none>
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] server lang: <none>
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] kex follows: False
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] Compression: none
2026-02-16T01:44:18.906 [DEBUG] [Thread-214912] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:44:18.964 [DEBUG] [Thread-214912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:44:18.964 [DEBUG] [Thread-214912] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:44:18.965 [DEBUG] [Thread-214912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:44:18.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:44:18.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:44:19.020 [DEBUG] [Thread-214912] [transport.py] [_log()] userauth is OK
2026-02-16T01:44:19.021 [DEBUG] [Thread-214912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:44:19.021 [DEBUG] [Thread-214912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:44:19.021 [DEBUG] [Thread-214912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:44:19.021 [DEBUG] [Thread-214912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:44:19.040 [INFO] [Thread-214912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:44:19.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:44:19.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:44:19.880 [DEBUG] [Thread-214912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:44:19.880 [DEBUG] [Thread-214912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:44:19.928 [DEBUG] [Thread-214912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:44:19.928 [DEBUG] [Thread-214912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:44:19.937 [DEBUG] [Thread-214912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:44:19.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:44:19.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:44:19.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:44:19.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:44:19.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:44:19.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:44:19.975 [DEBUG] [Thread-214912] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:44:25.458 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:31.149 [DEBUG] [Thread-214914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:31.790 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:31.791 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:43.662 [DEBUG] [Thread-214915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:44.105 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:46.201 [DEBUG] [Thread-214916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:44:49.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:44:49.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:44:49.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:44:51.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 44, 15), 8.52, 56.1, 0.0, 18.42, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:44:51.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:44:15
2026-02-16T01:44:52.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:44:52.435 [DEBUG] [Thread-214917] [transport.py] [_log()] starting thread (client mode): 0xa81d6560
2026-02-16T01:44:52.435 [DEBUG] [Thread-214917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:44:52.455 [DEBUG] [Thread-214917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:44:52.455 [INFO] [Thread-214917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:44:52.458 [DEBUG] [Thread-214917] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] client lang: <none>
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] server lang: <none>
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] kex follows: False
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] Compression: none
2026-02-16T01:44:52.459 [DEBUG] [Thread-214917] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:44:52.475 [DEBUG] [Thread-214917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:44:52.476 [DEBUG] [Thread-214917] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:44:52.476 [DEBUG] [Thread-214917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:44:52.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:44:52.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:44:52.478 [DEBUG] [Thread-214917] [transport.py] [_log()] userauth is OK
2026-02-16T01:44:52.478 [DEBUG] [Thread-214917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:44:52.478 [DEBUG] [Thread-214917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:44:52.478 [DEBUG] [Thread-214917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:44:52.478 [DEBUG] [Thread-214917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:44:52.499 [INFO] [Thread-214917] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:44:52.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:44:53.100 [DEBUG] [Thread-214917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:44:53.100 [DEBUG] [Thread-214917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:44:53.100 [DEBUG] [Thread-214917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:44:53.141 [DEBUG] [Thread-214917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:44:53.141 [DEBUG] [Thread-214917] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:44:53.143 [DEBUG] [Thread-214917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:44:53.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:44:53.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:44:53.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:44:53.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:44:53.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:44:53.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:44:53.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:44:53.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:44:53.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:44:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.988989 -999.00  +13.50  17.11     60   +6.00 1 1 1 1 1     0    0 7.40 9.89 ZNESW 16.7 17.1 133.0 20.7 13.7 -22.9 13.6 -21.8 13.4 -20.7 13.6 -22.0
2026-02-16T01:44:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:44:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:44:53.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.988989
2026-02-16T01:44:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:44:53.167 [DEBUG] [Thread-214917] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:44:53.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:44:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:44:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:44:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:44:53.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:44:15', tmtdew=8.52, humidity=56.1, cloud=0.0, wind=18.42, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:44:16', seeing=2.56, atlas_timestamp='2026-02-15T23:44:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.027749999999999275, -0.08324999999999783, -0.06450000000000067, -0.09149999999999991, -0.02474999999999916, 0.022999999999999687, 0.0182500000000001, -0.022999999999999687, -0.015000000000000568, -0.060750000000000526, -0.06600000000000072, 0.019000000000000128, 0.012249999999999872, 0.0, -0.009999999999999787, 0.0442499999999999, -0.016500000000000625, -0.023000000000001464, -0.019750000000001933, 0.005999999999998451, 0.022749999999998494, 0.021250000000000213, 0.017250000000000654, 0.01899999999999835, -0.027499999999999858, 0.003750000000000142, 0.012500000000001066, 0.013999999999999346, -0.026999999999999247, 0.049000000000001265, 0.012000000000000455, 0.008250000000000313], zp_timestamp='2026-02-15T23:41:00')
2026-02-16T01:44:53.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:44:53.268 [DEBUG] [Thread-214920] [transport.py] [_log()] starting thread (client mode): 0xa5772650
2026-02-16T01:44:53.268 [DEBUG] [Thread-214920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:44:53.283 [DEBUG] [Thread-214920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:44:53.283 [INFO] [Thread-214920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] client lang: <none>
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] server lang: <none>
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] kex follows: False
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] Compression: none
2026-02-16T01:44:53.290 [DEBUG] [Thread-214920] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:44:53.353 [DEBUG] [Thread-214920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:44:53.353 [DEBUG] [Thread-214920] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:44:53.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:44:53.353 [DEBUG] [Thread-214920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:44:53.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:44:53.411 [DEBUG] [Thread-214920] [transport.py] [_log()] userauth is OK
2026-02-16T01:44:53.411 [DEBUG] [Thread-214920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:44:53.411 [DEBUG] [Thread-214920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:44:53.411 [DEBUG] [Thread-214920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:44:53.411 [DEBUG] [Thread-214920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:44:53.425 [INFO] [Thread-214920] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:44:53.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:44:53.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:44:54.298 [DEBUG] [Thread-214920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:44:54.298 [DEBUG] [Thread-214920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:44:54.346 [DEBUG] [Thread-214920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:44:54.347 [DEBUG] [Thread-214920] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:44:54.356 [DEBUG] [Thread-214920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:44:54.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:44:54.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:44:54.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:44:54.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:44:54.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:44:54.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:44:54.392 [DEBUG] [Thread-214920] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:45:01.235 [DEBUG] [Thread-214922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:02.753 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:16.276 [DEBUG] [Thread-214923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:18.999 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:21.833 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:24.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:45:24.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:45:24.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:45:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 44, 51), 8.53, 56.57, 0.0, 17.38, 13.38, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:45:26.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:44:51
2026-02-16T01:45:26.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:45:26.668 [DEBUG] [Thread-214924] [transport.py] [_log()] starting thread (client mode): 0xa2d271f0
2026-02-16T01:45:26.668 [DEBUG] [Thread-214924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:45:26.687 [DEBUG] [Thread-214924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:45:26.687 [INFO] [Thread-214924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] client lang: <none>
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] server lang: <none>
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] kex follows: False
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] Compression: none
2026-02-16T01:45:26.691 [DEBUG] [Thread-214924] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:45:26.707 [DEBUG] [Thread-214924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:45:26.707 [DEBUG] [Thread-214924] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:45:26.707 [DEBUG] [Thread-214924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:45:26.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:45:26.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:45:26.708 [DEBUG] [Thread-214924] [transport.py] [_log()] userauth is OK
2026-02-16T01:45:26.708 [DEBUG] [Thread-214924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:45:26.708 [DEBUG] [Thread-214924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:45:26.708 [DEBUG] [Thread-214924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:45:26.708 [DEBUG] [Thread-214924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:45:26.724 [INFO] [Thread-214924] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:45:26.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:45:27.379 [DEBUG] [Thread-214924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:45:27.379 [DEBUG] [Thread-214924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:45:27.380 [DEBUG] [Thread-214924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:45:27.420 [DEBUG] [Thread-214924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:45:27.420 [DEBUG] [Thread-214924] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:45:27.423 [DEBUG] [Thread-214924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:45:27.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:45:27.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:45:27.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:45:27.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:45:27.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:45:27.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:45:27.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:45:27.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:45:27.450 [DEBUG] [Thread-214924] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:45:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:45:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.989336 -999.00  +13.50  15.23     60   +6.10 1 1 1 1 1     0    0 7.60 12.64 ZNESW 16.0 15.2 138.0 20.4 13.7 -23.0 13.6 -21.8 13.4 -20.8 13.6 -21.7
2026-02-16T01:45:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:45:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:45:27.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.989336
2026-02-16T01:45:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:45:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:45:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:45:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:45:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:45:27.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:44:51', tmtdew=8.53, humidity=56.57, cloud=0.0, wind=17.38, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:44:51', seeing=3.73, atlas_timestamp='2026-02-15T23:44:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.05424999999999969, -0.027749999999999275, -0.08324999999999783, -0.06450000000000067, -0.09149999999999991, -0.02474999999999916, 0.022999999999999687, 0.0182500000000001, -0.022999999999999687, -0.015000000000000568, -0.060750000000000526, -0.06600000000000072, 0.019000000000000128, 0.012249999999999872, 0.0, -0.009999999999999787, 0.0442499999999999, -0.016500000000000625, -0.023000000000001464, -0.019750000000001933, 0.005999999999998451, 0.022749999999998494, 0.021250000000000213, 0.017250000000000654, 0.01899999999999835, -0.027499999999999858, 0.003750000000000142, 0.012500000000001066, 0.013999999999999346, -0.026999999999999247, 0.049000000000001265, 0.012000000000000455, 0.008250000000000313], zp_timestamp='2026-02-15T23:41:00')
2026-02-16T01:45:27.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:45:27.536 [DEBUG] [Thread-214927] [transport.py] [_log()] starting thread (client mode): 0xa2d13550
2026-02-16T01:45:27.536 [DEBUG] [Thread-214927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:45:27.559 [DEBUG] [Thread-214927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:45:27.559 [INFO] [Thread-214927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:45:27.567 [DEBUG] [Thread-214927] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:45:27.567 [DEBUG] [Thread-214927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:45:27.567 [DEBUG] [Thread-214927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:45:27.567 [DEBUG] [Thread-214927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:45:27.567 [DEBUG] [Thread-214927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:45:27.567 [DEBUG] [Thread-214927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] client lang: <none>
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] server lang: <none>
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] kex follows: False
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] Compression: none
2026-02-16T01:45:27.568 [DEBUG] [Thread-214927] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:45:27.624 [DEBUG] [Thread-214927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:45:27.624 [DEBUG] [Thread-214927] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:45:27.625 [DEBUG] [Thread-214927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:45:27.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:45:27.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:45:27.679 [DEBUG] [Thread-214927] [transport.py] [_log()] userauth is OK
2026-02-16T01:45:27.680 [DEBUG] [Thread-214927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:45:27.680 [DEBUG] [Thread-214927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:45:27.680 [DEBUG] [Thread-214927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:45:27.680 [DEBUG] [Thread-214927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:45:27.702 [INFO] [Thread-214927] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:45:27.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:45:27.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:45:28.570 [DEBUG] [Thread-214927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:45:28.570 [DEBUG] [Thread-214927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:45:28.619 [DEBUG] [Thread-214927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:45:28.619 [DEBUG] [Thread-214927] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:45:28.629 [DEBUG] [Thread-214927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:45:28.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:45: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-02-16T01:45: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-02-16T01:45:28.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:45:28.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:45:28.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:45:28.666 [DEBUG] [Thread-214927] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:45:31.314 [DEBUG] [Thread-214929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:31.993 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:31.994 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:40.649 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:43.742 [DEBUG] [Thread-214930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:46.365 [DEBUG] [Thread-214931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:45:58.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:45:58.678 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:45:58.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:45:59.285 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:00.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 45, 26), 8.58, 56.4, 0.0, 19.43, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:46:00.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:45:26
2026-02-16T01:46:01.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:46:01.358 [DEBUG] [Thread-214932] [transport.py] [_log()] starting thread (client mode): 0xa57b1120
2026-02-16T01:46:01.359 [DEBUG] [Thread-214932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:46:01.379 [DEBUG] [Thread-214932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:46:01.379 [INFO] [Thread-214932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] client lang: <none>
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] server lang: <none>
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] kex follows: False
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] Compression: none
2026-02-16T01:46:01.382 [DEBUG] [Thread-214932] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:46:01.398 [DEBUG] [Thread-214934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:01.400 [DEBUG] [Thread-214932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:46:01.400 [DEBUG] [Thread-214932] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:46:01.401 [DEBUG] [Thread-214932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:46:01.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:46:01.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:46:01.403 [DEBUG] [Thread-214932] [transport.py] [_log()] userauth is OK
2026-02-16T01:46:01.403 [DEBUG] [Thread-214932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:46:01.403 [DEBUG] [Thread-214932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:46:01.403 [DEBUG] [Thread-214932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:46:01.403 [DEBUG] [Thread-214932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:46:01.427 [INFO] [Thread-214932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:46:01.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:46:02.172 [DEBUG] [Thread-214932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:46:02.172 [DEBUG] [Thread-214932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:46:02.172 [DEBUG] [Thread-214932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:46:02.213 [DEBUG] [Thread-214932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:46:02.213 [DEBUG] [Thread-214932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:46:02.216 [DEBUG] [Thread-214932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:46:02.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:46:02.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:46:02.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:46:02.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:46:02.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:46:02.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:46:02.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.989683 -999.00  +13.50  11.71     60   +6.00 1 1 1 1 1     0    0 7.61 14.12 ZNESW 10.1 11.7 144.8 20.7 13.7 -23.0 13.6 -21.9 13.4 -20.6 13.7 -21.8
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.989683
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:46:02.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:45:26', tmtdew=8.58, humidity=56.4, cloud=0.0, wind=19.43, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:45:26', seeing=2.61, atlas_timestamp='2026-02-15T23:45:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:44:00')
2026-02-16T01:46:02.244 [DEBUG] [Thread-214932] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:46:02.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:46:02.327 [DEBUG] [Thread-214936] [transport.py] [_log()] starting thread (client mode): 0xa57b1ed0
2026-02-16T01:46:02.327 [DEBUG] [Thread-214936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:46:02.341 [DEBUG] [Thread-214936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:46:02.341 [INFO] [Thread-214936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] client lang: <none>
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] server lang: <none>
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] kex follows: False
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] Compression: none
2026-02-16T01:46:02.349 [DEBUG] [Thread-214936] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:46:02.407 [DEBUG] [Thread-214936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:46:02.407 [DEBUG] [Thread-214936] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:46:02.407 [DEBUG] [Thread-214936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:46:02.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:46:02.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:46:02.464 [DEBUG] [Thread-214936] [transport.py] [_log()] userauth is OK
2026-02-16T01:46:02.464 [DEBUG] [Thread-214936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:46:02.464 [DEBUG] [Thread-214936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:46:02.464 [DEBUG] [Thread-214936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:46:02.464 [DEBUG] [Thread-214936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:46:02.478 [INFO] [Thread-214936] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:46:02.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:46:02.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:46:03.301 [DEBUG] [Thread-214936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:46:03.302 [DEBUG] [Thread-214936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:46:03.349 [DEBUG] [Thread-214936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:46:03.350 [DEBUG] [Thread-214936] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:46:03.359 [DEBUG] [Thread-214936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:46:03.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:46:03.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:46:03.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:46:03.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:46:03.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:46:03.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:46:03.396 [DEBUG] [Thread-214936] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:46:16.433 [DEBUG] [Thread-214938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:17.969 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:31.505 [DEBUG] [Thread-214939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:32.196 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:32.197 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:33.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:46:33.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:46:33.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:46:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 46, 1), 8.6, 56.34, 0.0, 19.92, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:46:35.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:46:01
2026-02-16T01:46:36.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:46:36.317 [DEBUG] [Thread-214940] [transport.py] [_log()] starting thread (client mode): 0xa2d11600
2026-02-16T01:46:36.317 [DEBUG] [Thread-214940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:46:36.338 [DEBUG] [Thread-214940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:46:36.338 [INFO] [Thread-214940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:46:36.341 [DEBUG] [Thread-214940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] client lang: <none>
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] server lang: <none>
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] kex follows: False
2026-02-16T01:46:36.342 [DEBUG] [Thread-214940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:46:36.343 [DEBUG] [Thread-214940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:46:36.343 [DEBUG] [Thread-214940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:46:36.343 [DEBUG] [Thread-214940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:46:36.343 [DEBUG] [Thread-214940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:46:36.343 [DEBUG] [Thread-214940] [transport.py] [_log()] Compression: none
2026-02-16T01:46:36.343 [DEBUG] [Thread-214940] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:46:36.364 [DEBUG] [Thread-214940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:46:36.365 [DEBUG] [Thread-214940] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:46:36.365 [DEBUG] [Thread-214940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:46:36.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:46:36.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:46:36.367 [DEBUG] [Thread-214940] [transport.py] [_log()] userauth is OK
2026-02-16T01:46:36.368 [DEBUG] [Thread-214940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:46:36.368 [DEBUG] [Thread-214940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:46:36.368 [DEBUG] [Thread-214940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:46:36.368 [DEBUG] [Thread-214940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:46:36.391 [INFO] [Thread-214940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:46:36.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:46:36.654 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:37.029 [DEBUG] [Thread-214940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:46:37.029 [DEBUG] [Thread-214940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:46:37.030 [DEBUG] [Thread-214940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:46:37.071 [DEBUG] [Thread-214940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:46:37.071 [DEBUG] [Thread-214940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:46:37.074 [DEBUG] [Thread-214940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:46:37.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:46:37.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:46:37.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:46:37.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:46:37.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:46:37.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:46:37.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:46:37.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:46:37.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:46:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.990030 -999.00  +13.50  17.73     60   +6.00 1 1 1 1 1     0    0 7.76 15.38 ZNESW 15.9 17.7 137.4 22.3 13.7 -23.0 13.6 -21.7 13.4 -20.8 13.7 -21.7
2026-02-16T01:46:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:46:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:46:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.990030
2026-02-16T01:46:37.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:46:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:46:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:46:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:46:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:46:37.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:46:01', tmtdew=8.6, humidity=56.34, cloud=0.0, wind=19.92, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:46:01', seeing=3.11, atlas_timestamp='2026-02-15T23:45:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:44:00')
2026-02-16T01:46:37.101 [DEBUG] [Thread-214940] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:46:37.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:46:37.197 [DEBUG] [Thread-214943] [transport.py] [_log()] starting thread (client mode): 0xa2d25450
2026-02-16T01:46:37.197 [DEBUG] [Thread-214943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:46:37.211 [DEBUG] [Thread-214943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:46:37.212 [INFO] [Thread-214943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:46:37.219 [DEBUG] [Thread-214943] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:46:37.219 [DEBUG] [Thread-214943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:46:37.219 [DEBUG] [Thread-214943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] client lang: <none>
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] server lang: <none>
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] kex follows: False
2026-02-16T01:46:37.220 [DEBUG] [Thread-214943] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:46:37.221 [DEBUG] [Thread-214943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:46:37.221 [DEBUG] [Thread-214943] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:46:37.221 [DEBUG] [Thread-214943] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:46:37.221 [DEBUG] [Thread-214943] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:46:37.221 [DEBUG] [Thread-214943] [transport.py] [_log()] Compression: none
2026-02-16T01:46:37.221 [DEBUG] [Thread-214943] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:46:37.276 [DEBUG] [Thread-214943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:46:37.276 [DEBUG] [Thread-214943] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:46:37.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:46:37.277 [DEBUG] [Thread-214943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:46:37.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:46:37.332 [DEBUG] [Thread-214943] [transport.py] [_log()] userauth is OK
2026-02-16T01:46:37.333 [DEBUG] [Thread-214943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:46:37.333 [DEBUG] [Thread-214943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:46:37.333 [DEBUG] [Thread-214943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:46:37.333 [DEBUG] [Thread-214943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:46:37.355 [INFO] [Thread-214943] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:46:37.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:46:37.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:46:38.140 [DEBUG] [Thread-214943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:46:38.140 [DEBUG] [Thread-214943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:46:38.187 [DEBUG] [Thread-214943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:46:38.187 [DEBUG] [Thread-214943] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:46:38.196 [DEBUG] [Thread-214943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:46:38.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:46:38.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:46:38.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:46:38.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:46:38.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:46:38.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:46:38.233 [DEBUG] [Thread-214943] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:46:43.809 [DEBUG] [Thread-214945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:46.539 [DEBUG] [Thread-214946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:46:55.651 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:01.591 [DEBUG] [Thread-214947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:08.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:47:08.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:47:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:47:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 46, 36), 8.81, 55.28, 0.0, 22.09, 13.93, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:47:10.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:46:36
2026-02-16T01:47:10.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:47:10.604 [DEBUG] [Thread-214948] [transport.py] [_log()] starting thread (client mode): 0xa5772500
2026-02-16T01:47:10.604 [DEBUG] [Thread-214948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:47:10.624 [DEBUG] [Thread-214948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:47:10.624 [INFO] [Thread-214948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:10.627 [DEBUG] [Thread-214948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] client lang: <none>
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] server lang: <none>
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] kex follows: False
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] Compression: none
2026-02-16T01:47:10.628 [DEBUG] [Thread-214948] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:47:10.647 [DEBUG] [Thread-214948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:47:10.648 [DEBUG] [Thread-214948] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:47:10.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:47:10.650 [DEBUG] [Thread-214948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:47:10.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:47:10.652 [DEBUG] [Thread-214948] [transport.py] [_log()] userauth is OK
2026-02-16T01:47:10.652 [DEBUG] [Thread-214948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:47:10.653 [DEBUG] [Thread-214948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:47:10.653 [DEBUG] [Thread-214948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:47:10.653 [DEBUG] [Thread-214948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:47:10.676 [INFO] [Thread-214948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:47:10.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:47:11.330 [DEBUG] [Thread-214948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:47:11.330 [DEBUG] [Thread-214948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:47:11.331 [DEBUG] [Thread-214948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:47:11.371 [DEBUG] [Thread-214948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:47:11.372 [DEBUG] [Thread-214948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:47:11.375 [DEBUG] [Thread-214948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:47:11.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:47:11.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:47:11.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:47:11.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:47:11.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:47:11.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:47:11.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:47:11.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:47:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:47:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.990378 -999.00  +13.50  13.21     60   +6.00 1 1 1 1 1     0    0 7.70 16.93 ZNESW 13.2 13.2 138.4 20.4 13.8 -22.8 13.6 -21.7 13.4 -20.6 13.7 -21.8
2026-02-16T01:47:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:47:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:47:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.990378
2026-02-16T01:47:11.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:47:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:47:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:47:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:47:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:47:11.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:46:36', tmtdew=8.81, humidity=55.28, cloud=0.0, wind=22.09, temperature=13.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:46:37', seeing=1.96, atlas_timestamp='2026-02-15T23:46:08.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:44:00')
2026-02-16T01:47:11.401 [DEBUG] [Thread-214948] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:47:11.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:47:11.496 [DEBUG] [Thread-214951] [transport.py] [_log()] starting thread (client mode): 0xa81d5990
2026-02-16T01:47:11.496 [DEBUG] [Thread-214951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:47:11.511 [DEBUG] [Thread-214951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:47:11.511 [INFO] [Thread-214951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] client lang: <none>
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] server lang: <none>
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] kex follows: False
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:47:11.519 [DEBUG] [Thread-214951] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:47:11.520 [DEBUG] [Thread-214951] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:47:11.520 [DEBUG] [Thread-214951] [transport.py] [_log()] Compression: none
2026-02-16T01:47:11.520 [DEBUG] [Thread-214951] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:47:11.579 [DEBUG] [Thread-214951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:47:11.580 [DEBUG] [Thread-214951] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:47:11.581 [DEBUG] [Thread-214951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:47:11.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:47:11.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:47:11.636 [DEBUG] [Thread-214951] [transport.py] [_log()] userauth is OK
2026-02-16T01:47:11.637 [DEBUG] [Thread-214951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:47:11.637 [DEBUG] [Thread-214951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:47:11.637 [DEBUG] [Thread-214951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:47:11.637 [DEBUG] [Thread-214951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:47:11.659 [INFO] [Thread-214951] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:47:11.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:47:11.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:47:12.486 [DEBUG] [Thread-214951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:47:12.486 [DEBUG] [Thread-214951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:47:12.534 [DEBUG] [Thread-214951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:47:12.535 [DEBUG] [Thread-214951] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:47:12.544 [DEBUG] [Thread-214951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:47:12.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:47:12.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:47:12.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:47:12.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:47:12.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:47:12.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:47:12.580 [DEBUG] [Thread-214951] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:47:14.512 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:16.627 [DEBUG] [Thread-214953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:31.688 [DEBUG] [Thread-214954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:32.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:32.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:33.378 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:42.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:47:42.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:47:42.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:47:43.875 [DEBUG] [Thread-214955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 47, 12), 8.6, 55.97, 0.0, 19.22, 13.52, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:47:44.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:47:12
2026-02-16T01:47:44.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:47:44.961 [DEBUG] [Thread-214956] [transport.py] [_log()] starting thread (client mode): 0xa2d27dc0
2026-02-16T01:47:44.961 [DEBUG] [Thread-214956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:47:44.977 [DEBUG] [Thread-214956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:47:44.978 [INFO] [Thread-214956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:47:44.980 [DEBUG] [Thread-214956] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] client lang: <none>
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] server lang: <none>
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] kex follows: False
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] Compression: none
2026-02-16T01:47:44.981 [DEBUG] [Thread-214956] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:47:44.992 [DEBUG] [Thread-214956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:47:44.993 [DEBUG] [Thread-214956] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:47:44.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:47:44.994 [DEBUG] [Thread-214956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:47:44.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:47:44.996 [DEBUG] [Thread-214956] [transport.py] [_log()] userauth is OK
2026-02-16T01:47:44.997 [DEBUG] [Thread-214956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:47:44.997 [DEBUG] [Thread-214956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:47:44.997 [DEBUG] [Thread-214956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:47:44.997 [DEBUG] [Thread-214956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:47:45.017 [INFO] [Thread-214956] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:47:45.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:47:45.639 [DEBUG] [Thread-214956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:47:45.639 [DEBUG] [Thread-214956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:47:45.640 [DEBUG] [Thread-214956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:47:45.680 [DEBUG] [Thread-214956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:47:45.681 [DEBUG] [Thread-214956] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:47:45.684 [DEBUG] [Thread-214956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:47:45.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:47:45.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:47:45.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:47:45.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:47:45.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:47:45.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:47:45.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:47:45.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:47:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:47:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.991072 -999.00  +13.50  15.78     60   +6.00 1 1 1 1 1     0    0 7.76 18.80 ZNESW 17.5 15.8 145.0 19.7 13.7 -22.7 13.6 -21.8 13.4 -20.7 13.7 -21.9
2026-02-16T01:47:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:47:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:47:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.991072
2026-02-16T01:47:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:47:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:47:45.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:47:45.708 [DEBUG] [Thread-214956] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:47:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:47:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:47:45.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:47:12', tmtdew=8.6, humidity=55.97, cloud=0.0, wind=19.22, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:47:12', seeing=2.01, atlas_timestamp='2026-02-15T23:47:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:44:00')
2026-02-16T01:47:45.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:47:45.805 [DEBUG] [Thread-214959] [transport.py] [_log()] starting thread (client mode): 0xa2dc1060
2026-02-16T01:47:45.806 [DEBUG] [Thread-214959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:47:45.820 [DEBUG] [Thread-214959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:47:45.820 [INFO] [Thread-214959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] client lang: <none>
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] server lang: <none>
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] kex follows: False
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:47:45.828 [DEBUG] [Thread-214959] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:47:45.829 [DEBUG] [Thread-214959] [transport.py] [_log()] Compression: none
2026-02-16T01:47:45.829 [DEBUG] [Thread-214959] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:47:45.885 [DEBUG] [Thread-214959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:47:45.886 [DEBUG] [Thread-214959] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:47:45.886 [DEBUG] [Thread-214959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:47:45.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:47:45.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:47:45.941 [DEBUG] [Thread-214959] [transport.py] [_log()] userauth is OK
2026-02-16T01:47:45.942 [DEBUG] [Thread-214959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:47:45.942 [DEBUG] [Thread-214959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:47:45.942 [DEBUG] [Thread-214959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:47:45.942 [DEBUG] [Thread-214959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:47:45.961 [INFO] [Thread-214959] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:47:45.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:47:45.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:47:46.728 [DEBUG] [Thread-214961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:47:46.791 [DEBUG] [Thread-214959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:47:46.792 [DEBUG] [Thread-214959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:47:46.840 [DEBUG] [Thread-214959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:47:46.840 [DEBUG] [Thread-214959] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:47:46.849 [DEBUG] [Thread-214959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:47:46.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:47:46.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:47:46.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:47:46.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:47:46.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:47:46.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:47:46.887 [DEBUG] [Thread-214959] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:47:52.031 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:01.775 [DEBUG] [Thread-214962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:10.682 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:16.809 [DEBUG] [Thread-214963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:16.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:48:16.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:48:16.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:48:18.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 47, 48), 8.6, 56.12, 0.0, 22.39, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:48:18.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:47:48
2026-02-16T01:48:19.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:48:19.317 [DEBUG] [Thread-214964] [transport.py] [_log()] starting thread (client mode): 0xa57e24a0
2026-02-16T01:48:19.318 [DEBUG] [Thread-214964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:48:19.338 [DEBUG] [Thread-214964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:48:19.338 [INFO] [Thread-214964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:48:19.339 [DEBUG] [Thread-214964] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] client lang: <none>
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] server lang: <none>
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] kex follows: False
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] Compression: none
2026-02-16T01:48:19.340 [DEBUG] [Thread-214964] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:48:19.348 [DEBUG] [Thread-214964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:48:19.348 [DEBUG] [Thread-214964] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:48:19.349 [DEBUG] [Thread-214964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:48:19.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:48:19.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:48:19.350 [DEBUG] [Thread-214964] [transport.py] [_log()] userauth is OK
2026-02-16T01:48:19.350 [DEBUG] [Thread-214964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:48:19.350 [DEBUG] [Thread-214964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:48:19.350 [DEBUG] [Thread-214964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:48:19.350 [DEBUG] [Thread-214964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:48:19.367 [INFO] [Thread-214964] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:48:19.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:48:19.972 [DEBUG] [Thread-214964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:48:19.972 [DEBUG] [Thread-214964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:48:19.972 [DEBUG] [Thread-214964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:48:20.012 [DEBUG] [Thread-214964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:48:20.013 [DEBUG] [Thread-214964] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:48:20.016 [DEBUG] [Thread-214964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:48:20.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:48:20.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:48:20.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:48:20.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:48:20.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:48:20.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:48:20.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:48:20.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:48:20.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:48:20.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.991419 -999.00  +13.60  13.02     60   +6.00 1 1 1 1 1     0    0 7.75 19.22 ZNESW 18.0 13.0 163.6 22.2 13.7 -22.9 13.6 -21.6 13.4 -20.7 13.7 -21.9
2026-02-16T01:48:20.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:48:20.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:48:20.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.991419
2026-02-16T01:48:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:48:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:48:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:48:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:48:20.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:48:20.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:47:48', tmtdew=8.6, humidity=56.12, cloud=0.0, wind=22.39, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:47:49', seeing=2.06, atlas_timestamp='2026-02-15T23:47:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:44:00')
2026-02-16T01:48:20.044 [DEBUG] [Thread-214964] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:48:20.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:48:20.139 [DEBUG] [Thread-214967] [transport.py] [_log()] starting thread (client mode): 0xa5771900
2026-02-16T01:48:20.139 [DEBUG] [Thread-214967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:48:20.154 [DEBUG] [Thread-214967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:48:20.154 [INFO] [Thread-214967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:48:20.161 [DEBUG] [Thread-214967] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] client lang: <none>
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] server lang: <none>
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] kex follows: False
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] Compression: none
2026-02-16T01:48:20.162 [DEBUG] [Thread-214967] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:48:20.222 [DEBUG] [Thread-214967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:48:20.222 [DEBUG] [Thread-214967] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:48:20.223 [DEBUG] [Thread-214967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:48:20.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:48:20.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:48:20.278 [DEBUG] [Thread-214967] [transport.py] [_log()] userauth is OK
2026-02-16T01:48:20.278 [DEBUG] [Thread-214967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:48:20.278 [DEBUG] [Thread-214967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:48:20.278 [DEBUG] [Thread-214967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:48:20.278 [DEBUG] [Thread-214967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:48:20.297 [INFO] [Thread-214967] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:48:20.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:48:20.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:48:21.095 [DEBUG] [Thread-214967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:48:21.096 [DEBUG] [Thread-214967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:48:21.143 [DEBUG] [Thread-214967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:48:21.144 [DEBUG] [Thread-214967] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:48:21.153 [DEBUG] [Thread-214967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:48:21.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:48:21.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:48:21.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:48:21.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:48:21.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:48:21.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:48:21.189 [DEBUG] [Thread-214967] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:48:29.454 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:31.844 [DEBUG] [Thread-214969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:32.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:32.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:43.943 [DEBUG] [Thread-214970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:46.899 [DEBUG] [Thread-214971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:48.113 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:48:51.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:48:51.202 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:48:51.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:48:53.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 48, 23), 8.56, 56.29, 0.0, 22.37, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:48:53.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:48:23
2026-02-16T01:48:53.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:48:54.081 [DEBUG] [Thread-214972] [transport.py] [_log()] starting thread (client mode): 0xa5770be0
2026-02-16T01:48:54.082 [DEBUG] [Thread-214972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:48:54.102 [DEBUG] [Thread-214972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:48:54.102 [INFO] [Thread-214972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:48:54.105 [DEBUG] [Thread-214972] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] client lang: <none>
2026-02-16T01:48:54.106 [DEBUG] [Thread-214972] [transport.py] [_log()] server lang: <none>
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] kex follows: False
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] Compression: none
2026-02-16T01:48:54.107 [DEBUG] [Thread-214972] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:48:54.126 [DEBUG] [Thread-214972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:48:54.127 [DEBUG] [Thread-214972] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:48:54.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:48:54.128 [DEBUG] [Thread-214972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:48:54.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:48:54.130 [DEBUG] [Thread-214972] [transport.py] [_log()] userauth is OK
2026-02-16T01:48:54.130 [DEBUG] [Thread-214972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:48:54.131 [DEBUG] [Thread-214972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:48:54.131 [DEBUG] [Thread-214972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:48:54.131 [DEBUG] [Thread-214972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:48:54.156 [INFO] [Thread-214972] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:48:54.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:48:54.956 [DEBUG] [Thread-214972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:48:54.956 [DEBUG] [Thread-214972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:48:54.956 [DEBUG] [Thread-214972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:48:54.997 [DEBUG] [Thread-214972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:48:54.997 [DEBUG] [Thread-214972] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:48:55.000 [DEBUG] [Thread-214972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:48:55.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:48:55.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:48:55.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:48:55.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:48:55.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:48:55.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:48:55.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:48:55.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:48:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:48:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.991766 -999.00  +13.60  16.78     60   +6.00 1 1 1 1 1     0    0 7.92 22.45 ZNESW 21.7 16.8 144.6 22.0 13.8 -22.8 13.6 -21.8 13.4 -20.5 13.8 -21.7
2026-02-16T01:48:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:48:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:48:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.991766
2026-02-16T01:48:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:48:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:48:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:48:55.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:48:55.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:48:55.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:48:23', tmtdew=8.56, humidity=56.29, cloud=0.0, wind=22.37, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:48:24', seeing=1.96, atlas_timestamp='2026-02-15T23:48:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:47:00')
2026-02-16T01:48:55.027 [DEBUG] [Thread-214972] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:48:55.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:48:55.122 [DEBUG] [Thread-214975] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0b0
2026-02-16T01:48:55.122 [DEBUG] [Thread-214975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:48:55.137 [DEBUG] [Thread-214975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:48:55.137 [INFO] [Thread-214975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:48:55.145 [DEBUG] [Thread-214975] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:48:55.145 [DEBUG] [Thread-214975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] client lang: <none>
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] server lang: <none>
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] kex follows: False
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] Compression: none
2026-02-16T01:48:55.146 [DEBUG] [Thread-214975] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:48:55.206 [DEBUG] [Thread-214975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:48:55.206 [DEBUG] [Thread-214975] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:48:55.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:48:55.207 [DEBUG] [Thread-214975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:48:55.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:48:55.264 [DEBUG] [Thread-214975] [transport.py] [_log()] userauth is OK
2026-02-16T01:48:55.264 [DEBUG] [Thread-214975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:48:55.264 [DEBUG] [Thread-214975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:48:55.265 [DEBUG] [Thread-214975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:48:55.265 [DEBUG] [Thread-214975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:48:55.285 [INFO] [Thread-214975] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:48:55.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:48:55.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:48:56.099 [DEBUG] [Thread-214975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:48:56.099 [DEBUG] [Thread-214975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:48:56.147 [DEBUG] [Thread-214975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:48:56.147 [DEBUG] [Thread-214975] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:48:56.156 [DEBUG] [Thread-214975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:48:56.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:48:56.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:48:56.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:48:56.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:48:56.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:48:56.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:48:56.190 [DEBUG] [Thread-214975] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:49:01.936 [DEBUG] [Thread-214977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:06.773 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:16.997 [DEBUG] [Thread-214978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:25.647 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:26.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:49:26.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:49:26.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:49:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 48, 58), 8.53, 56.4, 0.0, 19.13, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:49:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:48:58
2026-02-16T01:49:28.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:49:28.566 [DEBUG] [Thread-214979] [transport.py] [_log()] starting thread (client mode): 0xa81d50f0
2026-02-16T01:49:28.566 [DEBUG] [Thread-214979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:49:28.585 [DEBUG] [Thread-214979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:49:28.585 [INFO] [Thread-214979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:49:28.588 [DEBUG] [Thread-214979] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:49:28.588 [DEBUG] [Thread-214979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] client lang: <none>
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] server lang: <none>
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] kex follows: False
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] Compression: none
2026-02-16T01:49:28.589 [DEBUG] [Thread-214979] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:49:28.606 [DEBUG] [Thread-214979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:49:28.607 [DEBUG] [Thread-214979] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:49:28.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:49:28.608 [DEBUG] [Thread-214979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:49:28.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:49:28.610 [DEBUG] [Thread-214979] [transport.py] [_log()] userauth is OK
2026-02-16T01:49:28.610 [DEBUG] [Thread-214979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:49:28.610 [DEBUG] [Thread-214979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:49:28.610 [DEBUG] [Thread-214979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:49:28.610 [DEBUG] [Thread-214979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:49:28.625 [INFO] [Thread-214979] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:49:28.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:49:29.251 [DEBUG] [Thread-214979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:49:29.251 [DEBUG] [Thread-214979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:49:29.251 [DEBUG] [Thread-214979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:49:29.291 [DEBUG] [Thread-214979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:49:29.291 [DEBUG] [Thread-214979] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:49:29.295 [DEBUG] [Thread-214979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:49:29.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:49:29.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:49:29.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:49:29.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:49:29.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:49:29.319 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:49:29.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:49:29.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:49:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:49:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.992114 -999.00  +13.60  15.60     60   +6.00 1 1 1 1 1     0    0 8.07 25.02 ZNESW 13.9 15.6 165.0 27.1 13.8 -22.8 13.7 -21.9 13.5 -20.6 13.7 -21.9
2026-02-16T01:49:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:49:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:49:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.992114
2026-02-16T01:49:29.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:49:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:49:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:49:29.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:49:29.321 [DEBUG] [Thread-214979] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:49:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:49:29.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:48:58', tmtdew=8.53, humidity=56.4, cloud=0.0, wind=19.13, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:48:59', seeing=1.67, atlas_timestamp='2026-02-15T23:48:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:47:00')
2026-02-16T01:49:29.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:49:29.417 [DEBUG] [Thread-214982] [transport.py] [_log()] starting thread (client mode): 0xa81d7190
2026-02-16T01:49:29.417 [DEBUG] [Thread-214982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:49:29.433 [DEBUG] [Thread-214982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:49:29.433 [INFO] [Thread-214982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:49:29.441 [DEBUG] [Thread-214982] [transport.py] [_log()] client lang: <none>
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] server lang: <none>
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] kex follows: False
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] Compression: none
2026-02-16T01:49:29.442 [DEBUG] [Thread-214982] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:49:29.498 [DEBUG] [Thread-214982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:49:29.498 [DEBUG] [Thread-214982] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:49:29.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:49:29.500 [DEBUG] [Thread-214982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:49:29.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:49:29.554 [DEBUG] [Thread-214982] [transport.py] [_log()] userauth is OK
2026-02-16T01:49:29.554 [DEBUG] [Thread-214982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:49:29.554 [DEBUG] [Thread-214982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:49:29.554 [DEBUG] [Thread-214982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:49:29.555 [DEBUG] [Thread-214982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:49:29.574 [INFO] [Thread-214982] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:49:29.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:49:29.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:49:30.442 [DEBUG] [Thread-214982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:49:30.443 [DEBUG] [Thread-214982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:49:30.490 [DEBUG] [Thread-214982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:49:30.491 [DEBUG] [Thread-214982] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:49:30.500 [DEBUG] [Thread-214982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:49:30.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:49:30.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:49:30.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:49:30.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:49:30.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:49:30.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:49:30.537 [DEBUG] [Thread-214982] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:49:32.031 [DEBUG] [Thread-214984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:32.803 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:32.804 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:43.996 [DEBUG] [Thread-214985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:44.641 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:49:47.074 [DEBUG] [Thread-214986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:00.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:50:00.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:50:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:50:02.113 [DEBUG] [Thread-214987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 49, 34), 8.57, 56.14, 0.0, 22.65, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:50:02.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:49:34
2026-02-16T01:50:02.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:50:02.981 [DEBUG] [Thread-214988] [transport.py] [_log()] starting thread (client mode): 0xa2deb490
2026-02-16T01:50:02.981 [DEBUG] [Thread-214988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:50:03.003 [DEBUG] [Thread-214988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:50:03.004 [INFO] [Thread-214988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:50:03.008 [DEBUG] [Thread-214988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] client lang: <none>
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] server lang: <none>
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] kex follows: False
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] Compression: none
2026-02-16T01:50:03.009 [DEBUG] [Thread-214988] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:50:03.031 [DEBUG] [Thread-214988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:50:03.031 [DEBUG] [Thread-214988] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:50:03.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:50:03.032 [DEBUG] [Thread-214988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:50:03.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:50:03.034 [DEBUG] [Thread-214988] [transport.py] [_log()] userauth is OK
2026-02-16T01:50:03.034 [DEBUG] [Thread-214988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:50:03.035 [DEBUG] [Thread-214988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:50:03.035 [DEBUG] [Thread-214988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:50:03.035 [DEBUG] [Thread-214988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:50:03.058 [INFO] [Thread-214988] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:50:03.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:50:03.292 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:11.018 [DEBUG] [Thread-214988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:50:11.019 [DEBUG] [Thread-214988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:50:11.019 [DEBUG] [Thread-214988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:50:11.059 [DEBUG] [Thread-214988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:50:11.059 [DEBUG] [Thread-214988] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:50:11.062 [DEBUG] [Thread-214988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:50:11.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:50:11.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:50:11.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:50:11.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:50:11.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:50:11.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:50:11.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:50:11.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:50:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:50:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.992461 -999.00  +13.60  13.17     60   +6.00 1 1 1 1 1     0    0 8.00 26.42 ZNESW 12.4 13.2 138.2 20.8 13.8 -22.8 13.7 -21.9 13.4 -20.7 13.7 -22.1
2026-02-16T01:50:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:50:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:50:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.992461
2026-02-16T01:50:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:50:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:50:11.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:50:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:50:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:50:11.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:49:34', tmtdew=8.57, humidity=56.14, cloud=0.0, wind=22.65, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:49:34', seeing=1.84, atlas_timestamp='2026-02-15T23:49:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:47:00')
2026-02-16T01:50:11.161 [DEBUG] [Thread-214988] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:50:11.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:50:11.256 [DEBUG] [Thread-214991] [transport.py] [_log()] starting thread (client mode): 0xa2dc1690
2026-02-16T01:50:11.256 [DEBUG] [Thread-214991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:50:11.270 [DEBUG] [Thread-214991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:50:11.271 [INFO] [Thread-214991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:50:11.278 [DEBUG] [Thread-214991] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:50:11.278 [DEBUG] [Thread-214991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:50:11.278 [DEBUG] [Thread-214991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:50:11.278 [DEBUG] [Thread-214991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] client lang: <none>
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] server lang: <none>
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] kex follows: False
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:50:11.279 [DEBUG] [Thread-214991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:50:11.280 [DEBUG] [Thread-214991] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:50:11.280 [DEBUG] [Thread-214991] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:50:11.280 [DEBUG] [Thread-214991] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:50:11.280 [DEBUG] [Thread-214991] [transport.py] [_log()] Compression: none
2026-02-16T01:50:11.280 [DEBUG] [Thread-214991] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:50:11.337 [DEBUG] [Thread-214991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:50:11.338 [DEBUG] [Thread-214991] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:50:11.338 [DEBUG] [Thread-214991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:50:11.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:50:11.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:50:11.394 [DEBUG] [Thread-214991] [transport.py] [_log()] userauth is OK
2026-02-16T01:50:11.394 [DEBUG] [Thread-214991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:50:11.394 [DEBUG] [Thread-214991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:50:11.394 [DEBUG] [Thread-214991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:50:11.394 [DEBUG] [Thread-214991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:50:11.413 [INFO] [Thread-214991] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:50:11.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:50:11.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:50:12.244 [DEBUG] [Thread-214991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:50:12.245 [DEBUG] [Thread-214991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:50:12.293 [DEBUG] [Thread-214991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:50:12.293 [DEBUG] [Thread-214991] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:50:12.302 [DEBUG] [Thread-214991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:50:12.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:50:12.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:50:12.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:50:12.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:50:12.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:50:12.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:50:12.335 [DEBUG] [Thread-214991] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:50:17.146 [DEBUG] [Thread-214993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:21.953 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:32.198 [DEBUG] [Thread-214994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:33.004 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:33.005 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:40.612 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:42.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:50:42.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:50:42.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:50:44.061 [DEBUG] [Thread-214995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 50, 9), 8.5, 56.69, 0.0, 19.82, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:50:44.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:50:09
2026-02-16T01:50:44.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:50:44.834 [DEBUG] [Thread-214996] [transport.py] [_log()] starting thread (client mode): 0xa2dc0520
2026-02-16T01:50:44.834 [DEBUG] [Thread-214996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:50:44.853 [DEBUG] [Thread-214996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:50:44.853 [INFO] [Thread-214996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] client lang: <none>
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] server lang: <none>
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] kex follows: False
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:50:44.856 [DEBUG] [Thread-214996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:50:44.865 [DEBUG] [Thread-214996] [transport.py] [_log()] Compression: none
2026-02-16T01:50:44.865 [DEBUG] [Thread-214996] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:50:44.882 [DEBUG] [Thread-214996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:50:44.883 [DEBUG] [Thread-214996] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:50:44.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:50:44.884 [DEBUG] [Thread-214996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:50:44.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:50:44.885 [DEBUG] [Thread-214996] [transport.py] [_log()] userauth is OK
2026-02-16T01:50:44.886 [DEBUG] [Thread-214996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:50:44.886 [DEBUG] [Thread-214996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:50:44.886 [DEBUG] [Thread-214996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:50:44.886 [DEBUG] [Thread-214996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:50:44.900 [INFO] [Thread-214996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:50:44.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:50:45.508 [DEBUG] [Thread-214996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:50:45.508 [DEBUG] [Thread-214996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:50:45.508 [DEBUG] [Thread-214996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:50:45.549 [DEBUG] [Thread-214996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:50:45.549 [DEBUG] [Thread-214996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:50:45.552 [DEBUG] [Thread-214996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:50:45.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:50:45.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:50:45.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:50:45.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:50:45.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:50:45.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:50:45.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:50:45.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:50:45.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:50:45.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.992808 -999.00  +13.50  22.34     60   +6.00 1 1 1 1 1     0    0 8.07 27.01 ZNESW 16.8 22.3 142.0 23.8 13.8 -23.1 13.7 -22.0 13.4 -20.7 13.7 -22.1
2026-02-16T01:50:45.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:50:45.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:50:45.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.992808
2026-02-16T01:50:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:50:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:50:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:50:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:50:45.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:50:45.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:50:09', tmtdew=8.5, humidity=56.69, cloud=0.0, wind=19.82, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:50:09', seeing=2.55, atlas_timestamp='2026-02-15T23:49:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:47:00')
2026-02-16T01:50:45.578 [DEBUG] [Thread-214996] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:50:45.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:50:45.672 [DEBUG] [Thread-214999] [transport.py] [_log()] starting thread (client mode): 0xa57715d0
2026-02-16T01:50:45.672 [DEBUG] [Thread-214999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:50:45.687 [DEBUG] [Thread-214999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:50:45.687 [INFO] [Thread-214999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:50:45.695 [DEBUG] [Thread-214999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] client lang: <none>
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] server lang: <none>
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] kex follows: False
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] Compression: none
2026-02-16T01:50:45.696 [DEBUG] [Thread-214999] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:50:45.754 [DEBUG] [Thread-214999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:50:45.755 [DEBUG] [Thread-214999] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:50:45.755 [DEBUG] [Thread-214999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:50:45.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:50:45.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:50:45.811 [DEBUG] [Thread-214999] [transport.py] [_log()] userauth is OK
2026-02-16T01:50:45.811 [DEBUG] [Thread-214999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:50:45.811 [DEBUG] [Thread-214999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:50:45.811 [DEBUG] [Thread-214999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:50:45.811 [DEBUG] [Thread-214999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:50:45.836 [INFO] [Thread-214999] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:50:45.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:50:45.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:50:46.671 [DEBUG] [Thread-214999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:50:46.672 [DEBUG] [Thread-214999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:50:46.719 [DEBUG] [Thread-214999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:50:46.720 [DEBUG] [Thread-214999] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:50:46.729 [DEBUG] [Thread-214999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:50:46.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:50: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')
2026-02-16T01:50:46.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:50:46.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:50:46.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:50:46.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:50:46.766 [DEBUG] [Thread-214999] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:50:47.236 [DEBUG] [Thread-215001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:50:59.461 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:02.283 [DEBUG] [Thread-215002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:51:16.789 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:51:16.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:51:17.320 [DEBUG] [Thread-215003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:18.269 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 50, 44), 8.46, 56.65, 0.0, 18.61, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:51:18.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:50:44
2026-02-16T01:51:19.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:51:19.416 [DEBUG] [Thread-215004] [transport.py] [_log()] starting thread (client mode): 0xa2dc0400
2026-02-16T01:51:19.416 [DEBUG] [Thread-215004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:51:19.438 [DEBUG] [Thread-215004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:51:19.438 [INFO] [Thread-215004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:51:19.441 [DEBUG] [Thread-215004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:51:19.441 [DEBUG] [Thread-215004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] client lang: <none>
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] server lang: <none>
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] kex follows: False
2026-02-16T01:51:19.442 [DEBUG] [Thread-215004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:51:19.443 [DEBUG] [Thread-215004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:51:19.443 [DEBUG] [Thread-215004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:51:19.443 [DEBUG] [Thread-215004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:51:19.443 [DEBUG] [Thread-215004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:51:19.444 [DEBUG] [Thread-215004] [transport.py] [_log()] Compression: none
2026-02-16T01:51:19.444 [DEBUG] [Thread-215004] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:51:19.461 [DEBUG] [Thread-215004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:51:19.462 [DEBUG] [Thread-215004] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:51:19.463 [DEBUG] [Thread-215004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:51:19.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:51:19.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:51:19.464 [DEBUG] [Thread-215004] [transport.py] [_log()] userauth is OK
2026-02-16T01:51:19.465 [DEBUG] [Thread-215004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:51:19.465 [DEBUG] [Thread-215004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:51:19.465 [DEBUG] [Thread-215004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:51:19.465 [DEBUG] [Thread-215004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:51:19.501 [INFO] [Thread-215004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:51:19.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:51:20.125 [DEBUG] [Thread-215004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:51:20.134 [DEBUG] [Thread-215004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:51:20.135 [DEBUG] [Thread-215004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:51:20.166 [DEBUG] [Thread-215004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:51:20.167 [DEBUG] [Thread-215004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:51:20.170 [DEBUG] [Thread-215004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:51:20.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:51:20.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:51:20.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:51:20.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:51:20.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:51:20.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:51:20.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:51:20.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:51:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:51:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.993503 -999.00  +13.40  16.80     61   +6.10 1 1 1 1 1     0    0 8.14 25.04 ZNESW 14.7 16.8 142.2 20.9 13.8 -23.1 13.6 -22.0 13.4 -20.9 13.7 -22.0
2026-02-16T01:51:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:51:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:51:20.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.993503
2026-02-16T01:51:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:51:20.195 [DEBUG] [Thread-215004] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:51:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:51:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:51:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:51:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:51:20.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:50:44', tmtdew=8.46, humidity=56.65, cloud=0.0, wind=18.61, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:50:44', seeing=1.94, atlas_timestamp='2026-02-15T23:50:38.659', atlas_cloud=1, atlas_rain=1, zp_data=[-0.024250000000000327, 0.019249999999999545, -0.06574999999999953, -0.06650000000000134, -0.05450000000000088, 0.013250000000001094, 0.006999999999999673, 0.0007500000000000284, -0.048500000000000654, 0.027499999999999858, -0.05874999999999986, -0.026500000000000412, 0.019000000000000128, 0.0012499999999988631, 0.013999999999999346, 0.0030000000000001137, 0.03924999999999912, -0.008000000000000895, -0.0065000000000008384, -0.012250000000001648, 0.03749999999999787, 0.03275000000000006, 0.007750000000001478, 0.024750000000000938, 0.007999999999999119, -0.05250000000000021, 0.014749999999999375, 0.02900000000000169, 0.031000000000000583, 0.01150000000000162, 0.06400000000000183, 0.02800000000000047, 0.02024999999999899], zp_timestamp='2026-02-15T23:47:00')
2026-02-16T01:51:20.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:51:20.292 [DEBUG] [Thread-215007] [transport.py] [_log()] starting thread (client mode): 0xa2d6d570
2026-02-16T01:51:20.293 [DEBUG] [Thread-215007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:51:20.307 [DEBUG] [Thread-215007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:51:20.308 [INFO] [Thread-215007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:51:20.324 [DEBUG] [Thread-215007] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] client lang: <none>
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] server lang: <none>
2026-02-16T01:51:20.325 [DEBUG] [Thread-215007] [transport.py] [_log()] kex follows: False
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] Compression: none
2026-02-16T01:51:20.326 [DEBUG] [Thread-215007] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:51:20.374 [DEBUG] [Thread-215007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:51:20.375 [DEBUG] [Thread-215007] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:51:20.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:51:20.376 [DEBUG] [Thread-215007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:51:20.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:51:20.431 [DEBUG] [Thread-215007] [transport.py] [_log()] userauth is OK
2026-02-16T01:51:20.431 [DEBUG] [Thread-215007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:51:20.432 [DEBUG] [Thread-215007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:51:20.432 [DEBUG] [Thread-215007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:51:20.432 [DEBUG] [Thread-215007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:51:20.451 [INFO] [Thread-215007] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:51:20.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:51:20.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:51:21.259 [DEBUG] [Thread-215007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:51:21.260 [DEBUG] [Thread-215007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:51:21.307 [DEBUG] [Thread-215007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:51:21.308 [DEBUG] [Thread-215007] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:51:21.317 [DEBUG] [Thread-215007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:51:21.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:51:21.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:51:21.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:51:21.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:51:21.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:51:21.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:51:21.362 [DEBUG] [Thread-215007] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:51:32.355 [DEBUG] [Thread-215009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:33.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:33.206 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:36.941 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:44.137 [DEBUG] [Thread-215010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:47.413 [DEBUG] [Thread-215011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:51.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:51:51.376 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:51:51.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:51:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 51, 19), 8.51, 56.49, 0.0, 19.14, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:51:53.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:51:19
2026-02-16T01:51:53.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:51:53.700 [DEBUG] [Thread-215012] [transport.py] [_log()] starting thread (client mode): 0xa2dc0640
2026-02-16T01:51:53.700 [DEBUG] [Thread-215012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:51:53.719 [DEBUG] [Thread-215012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:51:53.720 [INFO] [Thread-215012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] client lang: <none>
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] server lang: <none>
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] kex follows: False
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] Compression: none
2026-02-16T01:51:53.723 [DEBUG] [Thread-215012] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:51:53.741 [DEBUG] [Thread-215012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:51:53.742 [DEBUG] [Thread-215012] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:51:53.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:51:53.743 [DEBUG] [Thread-215012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:51:53.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:51:53.785 [DEBUG] [Thread-215012] [transport.py] [_log()] userauth is OK
2026-02-16T01:51:53.786 [DEBUG] [Thread-215012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:51:53.786 [DEBUG] [Thread-215012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:51:53.786 [DEBUG] [Thread-215012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:51:53.786 [DEBUG] [Thread-215012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:51:53.806 [INFO] [Thread-215012] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:51:53.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:51:54.458 [DEBUG] [Thread-215012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:51:54.459 [DEBUG] [Thread-215012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:51:54.459 [DEBUG] [Thread-215012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:51:54.499 [DEBUG] [Thread-215012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:51:54.500 [DEBUG] [Thread-215012] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:51:54.503 [DEBUG] [Thread-215012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:51:54.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:51:54.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:51:54.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:51:54.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:51:54.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:51:54.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:51:54.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:51:54.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:51:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:51:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.993850 -999.00  +13.40  13.03     61   +6.10 1 1 1 1 1     0    0 7.85 22.06 ZNESW 14.0 13.0 134.6 21.7 13.8 -23.0 13.6 -22.0 13.3 -20.9 13.7 -22.1
2026-02-16T01:51:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:51:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:51:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.993850
2026-02-16T01:51:54.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:51:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:51:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:51:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:51:54.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:51:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:51:19', tmtdew=8.51, humidity=56.49, cloud=0.0, wind=19.14, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:51:19', seeing=2.49, atlas_timestamp='2026-02-15T23:51:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:50:00')
2026-02-16T01:51:54.531 [DEBUG] [Thread-215012] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:51:54.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:51:54.626 [DEBUG] [Thread-215015] [transport.py] [_log()] starting thread (client mode): 0xa2d014b0
2026-02-16T01:51:54.626 [DEBUG] [Thread-215015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:51:54.640 [DEBUG] [Thread-215015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:51:54.641 [INFO] [Thread-215015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:51:54.648 [DEBUG] [Thread-215015] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:51:54.648 [DEBUG] [Thread-215015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:51:54.648 [DEBUG] [Thread-215015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] client lang: <none>
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] server lang: <none>
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] kex follows: False
2026-02-16T01:51:54.649 [DEBUG] [Thread-215015] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:51:54.650 [DEBUG] [Thread-215015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:51:54.650 [DEBUG] [Thread-215015] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:51:54.650 [DEBUG] [Thread-215015] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:51:54.650 [DEBUG] [Thread-215015] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:51:54.650 [DEBUG] [Thread-215015] [transport.py] [_log()] Compression: none
2026-02-16T01:51:54.650 [DEBUG] [Thread-215015] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:51:54.707 [DEBUG] [Thread-215015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:51:54.708 [DEBUG] [Thread-215015] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:51:54.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:51:54.709 [DEBUG] [Thread-215015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:51:54.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:51:54.763 [DEBUG] [Thread-215015] [transport.py] [_log()] userauth is OK
2026-02-16T01:51:54.763 [DEBUG] [Thread-215015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:51:54.764 [DEBUG] [Thread-215015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:51:54.764 [DEBUG] [Thread-215015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:51:54.764 [DEBUG] [Thread-215015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:51:54.787 [INFO] [Thread-215015] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:51:54.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:51:54.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:51:55.601 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:51:55.623 [DEBUG] [Thread-215015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:51:55.624 [DEBUG] [Thread-215015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:51:55.671 [DEBUG] [Thread-215015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:51:55.672 [DEBUG] [Thread-215015] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:51:55.680 [DEBUG] [Thread-215015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:51:55.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:51:55.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:51:55.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:51:55.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:51:55.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:51:55.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:51:55.718 [DEBUG] [Thread-215015] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:52:02.457 [DEBUG] [Thread-215017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:14.486 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:17.505 [DEBUG] [Thread-215018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:25.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:52:25.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:52:25.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:52:27.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 51, 55), 8.51, 56.49, 0.0, 23.66, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:52:27.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:51:55
2026-02-16T01:52:27.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:52:28.105 [DEBUG] [Thread-215019] [transport.py] [_log()] starting thread (client mode): 0xa2d6e110
2026-02-16T01:52:28.106 [DEBUG] [Thread-215019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:52:28.125 [DEBUG] [Thread-215019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:52:28.125 [INFO] [Thread-215019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:52:28.128 [DEBUG] [Thread-215019] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] client lang: <none>
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] server lang: <none>
2026-02-16T01:52:28.129 [DEBUG] [Thread-215019] [transport.py] [_log()] kex follows: False
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] Compression: none
2026-02-16T01:52:28.130 [DEBUG] [Thread-215019] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:52:28.139 [DEBUG] [Thread-215019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:52:28.139 [DEBUG] [Thread-215019] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:52:28.139 [DEBUG] [Thread-215019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:52:28.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:52:28.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:52:28.141 [DEBUG] [Thread-215019] [transport.py] [_log()] userauth is OK
2026-02-16T01:52:28.142 [DEBUG] [Thread-215019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:52:28.142 [DEBUG] [Thread-215019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:52:28.142 [DEBUG] [Thread-215019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:52:28.142 [DEBUG] [Thread-215019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:52:28.163 [INFO] [Thread-215019] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:52:28.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:52:28.814 [DEBUG] [Thread-215019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:52:28.814 [DEBUG] [Thread-215019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:52:28.814 [DEBUG] [Thread-215019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:52:28.854 [DEBUG] [Thread-215019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:52:28.855 [DEBUG] [Thread-215019] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:52:28.858 [DEBUG] [Thread-215019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:52:28.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:52:28.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:52:28.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:52:28.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:52:28.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:52:28.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:52:28.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:52:28.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:52:28.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:52:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.994197 -999.00  +13.40  14.31     61   +6.00 1 1 1 1 1     0    0 8.02 20.87 ZNESW 19.1 14.3 149.2 19.9 13.7 -23.0 13.6 -21.8 13.4 -20.9 13.7 -22.0
2026-02-16T01:52:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:52:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:52:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.994197
2026-02-16T01:52:28.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:52:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:52:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:52:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:52:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:52:28.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:51:55', tmtdew=8.51, humidity=56.49, cloud=0.0, wind=23.66, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:51:55', seeing=1.62, atlas_timestamp='2026-02-15T23:51:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:50:00')
2026-02-16T01:52:28.886 [DEBUG] [Thread-215019] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:52:28.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:52:28.982 [DEBUG] [Thread-215022] [transport.py] [_log()] starting thread (client mode): 0xa2dc0220
2026-02-16T01:52:28.982 [DEBUG] [Thread-215022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:52:28.996 [DEBUG] [Thread-215022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:52:28.997 [INFO] [Thread-215022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] client lang: <none>
2026-02-16T01:52:29.004 [DEBUG] [Thread-215022] [transport.py] [_log()] server lang: <none>
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] kex follows: False
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] Compression: none
2026-02-16T01:52:29.005 [DEBUG] [Thread-215022] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:52:29.063 [DEBUG] [Thread-215022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:52:29.063 [DEBUG] [Thread-215022] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:52:29.064 [DEBUG] [Thread-215022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:52:29.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:52:29.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:52:29.119 [DEBUG] [Thread-215022] [transport.py] [_log()] userauth is OK
2026-02-16T01:52:29.119 [DEBUG] [Thread-215022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:52:29.119 [DEBUG] [Thread-215022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:52:29.119 [DEBUG] [Thread-215022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:52:29.120 [DEBUG] [Thread-215022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:52:29.142 [INFO] [Thread-215022] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:52:29.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:52:29.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:52:29.958 [DEBUG] [Thread-215022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:52:29.958 [DEBUG] [Thread-215022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:52:30.006 [DEBUG] [Thread-215022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:52:30.006 [DEBUG] [Thread-215022] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:52:30.016 [DEBUG] [Thread-215022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:52:30.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:52:30.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:52:30.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:52:30.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:52:30.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:52:30.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:52:30.052 [DEBUG] [Thread-215022] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:52:32.540 [DEBUG] [Thread-215024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:33.255 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:33.421 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:33.423 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:44.195 [DEBUG] [Thread-215025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:47.601 [DEBUG] [Thread-215026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:52:51.929 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:00.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:53:00.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:53:00.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:53:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 52, 30), 8.53, 56.37, 0.0, 23.57, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:53:01.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:52:30
2026-02-16T01:53:02.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:53:02.477 [DEBUG] [Thread-215027] [transport.py] [_log()] starting thread (client mode): 0xa2dc2920
2026-02-16T01:53:02.477 [DEBUG] [Thread-215027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:53:02.496 [DEBUG] [Thread-215027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:53:02.496 [INFO] [Thread-215027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] client lang: <none>
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] server lang: <none>
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] kex follows: False
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:53:02.499 [DEBUG] [Thread-215027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:53:02.500 [DEBUG] [Thread-215027] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:53:02.500 [DEBUG] [Thread-215027] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:53:02.500 [DEBUG] [Thread-215027] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:53:02.500 [DEBUG] [Thread-215027] [transport.py] [_log()] Compression: none
2026-02-16T01:53:02.500 [DEBUG] [Thread-215027] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:53:02.518 [DEBUG] [Thread-215027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:53:02.518 [DEBUG] [Thread-215027] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:53:02.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:53:02.519 [DEBUG] [Thread-215027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:53:02.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:53:02.521 [DEBUG] [Thread-215027] [transport.py] [_log()] userauth is OK
2026-02-16T01:53:02.521 [DEBUG] [Thread-215027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:53:02.521 [DEBUG] [Thread-215027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:53:02.522 [DEBUG] [Thread-215027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:53:02.522 [DEBUG] [Thread-215027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:53:02.545 [INFO] [Thread-215027] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:53:02.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:53:02.637 [DEBUG] [Thread-215029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:03.185 [DEBUG] [Thread-215027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:53:03.185 [DEBUG] [Thread-215027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:53:03.186 [DEBUG] [Thread-215027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:53:03.226 [DEBUG] [Thread-215027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:53:03.226 [DEBUG] [Thread-215027] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:53:03.229 [DEBUG] [Thread-215027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:53:03.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:53:03.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:53:03.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:53:03.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:53:03.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:53:03.248 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:53:03.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:53:03.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:53:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:53:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.994544 -999.00  +13.40  14.41     61   +6.00 1 1 1 1 1     0    0 7.89 20.28 ZNESW 13.9 14.4 145.6 18.0 13.8 -23.0 13.7 -22.0 13.4 -20.7 13.7 -22.1
2026-02-16T01:53:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:53:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:53:03.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.994544
2026-02-16T01:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:53:03.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:53:03.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:52:30', tmtdew=8.53, humidity=56.37, cloud=0.0, wind=23.57, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:52:30', seeing=1.8, atlas_timestamp='2026-02-15T23:52:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:50:00')
2026-02-16T01:53:03.251 [DEBUG] [Thread-215027] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:53:03.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:53:03.346 [DEBUG] [Thread-215031] [transport.py] [_log()] starting thread (client mode): 0xa2d6f430
2026-02-16T01:53:03.346 [DEBUG] [Thread-215031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:53:03.361 [DEBUG] [Thread-215031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:53:03.361 [INFO] [Thread-215031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:53:03.368 [DEBUG] [Thread-215031] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:03.369 [DEBUG] [Thread-215031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] client lang: <none>
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] server lang: <none>
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] kex follows: False
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] Compression: none
2026-02-16T01:53:03.370 [DEBUG] [Thread-215031] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:53:03.425 [DEBUG] [Thread-215031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:53:03.425 [DEBUG] [Thread-215031] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:53:03.426 [DEBUG] [Thread-215031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:53:03.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:53:03.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:53:03.481 [DEBUG] [Thread-215031] [transport.py] [_log()] userauth is OK
2026-02-16T01:53:03.481 [DEBUG] [Thread-215031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:53:03.482 [DEBUG] [Thread-215031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:53:03.482 [DEBUG] [Thread-215031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:53:03.482 [DEBUG] [Thread-215031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:53:03.506 [INFO] [Thread-215031] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:53:03.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:53:03.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:53:04.350 [DEBUG] [Thread-215031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:53:04.350 [DEBUG] [Thread-215031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:53:04.398 [DEBUG] [Thread-215031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:53:04.398 [DEBUG] [Thread-215031] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:53:04.414 [DEBUG] [Thread-215031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:53:04.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:53:04.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:53:04.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:53:04.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:53:04.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:53:04.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:53:04.457 [DEBUG] [Thread-215031] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:53:10.612 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:17.675 [DEBUG] [Thread-215033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:29.477 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:32.728 [DEBUG] [Thread-215034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:33.622 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:33.623 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:34.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:53:34.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:53:34.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:53:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 53, 5), 8.51, 56.47, 0.0, 21.28, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:53:36.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:53:05
2026-02-16T01:53:36.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:53:36.816 [DEBUG] [Thread-215035] [transport.py] [_log()] starting thread (client mode): 0xa57e3520
2026-02-16T01:53:36.816 [DEBUG] [Thread-215035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:53:36.836 [DEBUG] [Thread-215035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:53:36.836 [INFO] [Thread-215035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:53:36.837 [DEBUG] [Thread-215035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:53:36.837 [DEBUG] [Thread-215035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] client lang: <none>
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] server lang: <none>
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] kex follows: False
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] Compression: none
2026-02-16T01:53:36.838 [DEBUG] [Thread-215035] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:53:36.846 [DEBUG] [Thread-215035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:53:36.846 [DEBUG] [Thread-215035] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:53:36.847 [DEBUG] [Thread-215035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:53:36.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:53:36.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:53:36.849 [DEBUG] [Thread-215035] [transport.py] [_log()] userauth is OK
2026-02-16T01:53:36.849 [DEBUG] [Thread-215035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:53:36.849 [DEBUG] [Thread-215035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:53:36.849 [DEBUG] [Thread-215035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:53:36.849 [DEBUG] [Thread-215035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:53:36.884 [INFO] [Thread-215035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:53:36.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:53:37.510 [DEBUG] [Thread-215035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:53:37.510 [DEBUG] [Thread-215035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:53:37.510 [DEBUG] [Thread-215035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:53:37.551 [DEBUG] [Thread-215035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:53:37.551 [DEBUG] [Thread-215035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:53:37.554 [DEBUG] [Thread-215035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:53:37.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:53:37.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:53:37.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:53:37.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:53:37.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:53:37.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:53:37.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.994891 -999.00  +13.40  15.57     61   +6.10 1 1 1 1 1     0    0 7.95 19.35 ZNESW 14.7 15.6 131.8 21.7 13.7 -23.0 13.6 -22.0 13.3 -20.8 13.6 -21.9
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.994891
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:53:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:53:05', tmtdew=8.51, humidity=56.47, cloud=0.0, wind=21.28, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:53:06', seeing=1.87, atlas_timestamp='2026-02-15T23:52:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:50:00')
2026-02-16T01:53:37.574 [DEBUG] [Thread-215035] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:53:37.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:53:37.658 [DEBUG] [Thread-215038] [transport.py] [_log()] starting thread (client mode): 0xa57b1ed0
2026-02-16T01:53:37.658 [DEBUG] [Thread-215038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:53:37.672 [DEBUG] [Thread-215038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:53:37.673 [INFO] [Thread-215038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:53:37.680 [DEBUG] [Thread-215038] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:53:37.680 [DEBUG] [Thread-215038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] client lang: <none>
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] server lang: <none>
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] kex follows: False
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] Compression: none
2026-02-16T01:53:37.681 [DEBUG] [Thread-215038] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:53:37.742 [DEBUG] [Thread-215038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:53:37.743 [DEBUG] [Thread-215038] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:53:37.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:53:37.744 [DEBUG] [Thread-215038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:53:37.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:53:37.799 [DEBUG] [Thread-215038] [transport.py] [_log()] userauth is OK
2026-02-16T01:53:37.800 [DEBUG] [Thread-215038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:53:37.800 [DEBUG] [Thread-215038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:53:37.800 [DEBUG] [Thread-215038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:53:37.800 [DEBUG] [Thread-215038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:53:37.817 [INFO] [Thread-215038] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:53:37.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:53:37.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:53:38.640 [DEBUG] [Thread-215038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:53:38.640 [DEBUG] [Thread-215038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:53:38.688 [DEBUG] [Thread-215038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:53:38.688 [DEBUG] [Thread-215038] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:53:38.697 [DEBUG] [Thread-215038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:53:38.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:53:38.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:53:38.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:53:38.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:53:38.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:53:38.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:53:38.733 [DEBUG] [Thread-215038] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:53:44.262 [DEBUG] [Thread-215040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:47.766 [DEBUG] [Thread-215041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:53:48.316 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:02.819 [DEBUG] [Thread-215042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:07.036 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:08.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:54:08.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:54:08.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:54:10.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 53, 40), 8.57, 56.11, 0.0, 21.49, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:54:10.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:53:40
2026-02-16T01:54:10.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:54:11.069 [DEBUG] [Thread-215043] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-16T01:54:11.070 [DEBUG] [Thread-215043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:54:11.092 [DEBUG] [Thread-215043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:54:11.092 [INFO] [Thread-215043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:54:11.095 [DEBUG] [Thread-215043] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] client lang: <none>
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] server lang: <none>
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] kex follows: False
2026-02-16T01:54:11.096 [DEBUG] [Thread-215043] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:54:11.097 [DEBUG] [Thread-215043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:54:11.097 [DEBUG] [Thread-215043] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:54:11.097 [DEBUG] [Thread-215043] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:54:11.097 [DEBUG] [Thread-215043] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:54:11.097 [DEBUG] [Thread-215043] [transport.py] [_log()] Compression: none
2026-02-16T01:54:11.097 [DEBUG] [Thread-215043] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:54:11.111 [DEBUG] [Thread-215043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:54:11.111 [DEBUG] [Thread-215043] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:54:11.112 [DEBUG] [Thread-215043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:54:11.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:54:11.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:54:11.114 [DEBUG] [Thread-215043] [transport.py] [_log()] userauth is OK
2026-02-16T01:54:11.114 [DEBUG] [Thread-215043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:54:11.114 [DEBUG] [Thread-215043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:54:11.114 [DEBUG] [Thread-215043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:54:11.114 [DEBUG] [Thread-215043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:54:11.138 [INFO] [Thread-215043] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:54:11.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:54:11.956 [DEBUG] [Thread-215043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:54:11.956 [DEBUG] [Thread-215043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:54:11.957 [DEBUG] [Thread-215043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:54:11.997 [DEBUG] [Thread-215043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:54:11.997 [DEBUG] [Thread-215043] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:54:12.000 [DEBUG] [Thread-215043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:54:12.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:54:12.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:54:12.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:54:12.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:54:12.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:54:12.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:54:12.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:54:12.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:54:12.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:54:12.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.995239 -999.00  +13.40  14.16     61   +6.10 1 1 1 1 1     0    0 7.82 18.93 ZNESW 15.8 14.2 148.2 20.1 13.7 -23.0 13.6 -21.9 13.4 -20.8 13.7 -22.1
2026-02-16T01:54:12.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:54:12.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:54:12.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.995239
2026-02-16T01:54:12.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:54:12.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:54:12.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:54:12.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:54:12.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:54:12.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:53:40', tmtdew=8.57, humidity=56.11, cloud=0.0, wind=21.49, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:53:41', seeing=2.29, atlas_timestamp='2026-02-15T23:53:08.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:50:00')
2026-02-16T01:54:12.025 [DEBUG] [Thread-215043] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:54:12.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:54:12.124 [DEBUG] [Thread-215046] [transport.py] [_log()] starting thread (client mode): 0xa2dc3130
2026-02-16T01:54:12.124 [DEBUG] [Thread-215046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:54:12.143 [DEBUG] [Thread-215046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:54:12.144 [INFO] [Thread-215046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:54:12.151 [DEBUG] [Thread-215046] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:54:12.152 [DEBUG] [Thread-215046] [transport.py] [_log()] client lang: <none>
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] server lang: <none>
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] kex follows: False
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:54:12.153 [DEBUG] [Thread-215046] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:54:12.154 [DEBUG] [Thread-215046] [transport.py] [_log()] Compression: none
2026-02-16T01:54:12.154 [DEBUG] [Thread-215046] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:54:12.214 [DEBUG] [Thread-215046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:54:12.215 [DEBUG] [Thread-215046] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:54:12.215 [DEBUG] [Thread-215046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:54:12.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:54:12.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:54:12.270 [DEBUG] [Thread-215046] [transport.py] [_log()] userauth is OK
2026-02-16T01:54:12.270 [DEBUG] [Thread-215046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:54:12.270 [DEBUG] [Thread-215046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:54:12.271 [DEBUG] [Thread-215046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:54:12.271 [DEBUG] [Thread-215046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:54:12.289 [INFO] [Thread-215046] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:54:12.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:54:12.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:54:13.105 [DEBUG] [Thread-215046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:54:13.105 [DEBUG] [Thread-215046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:54:13.154 [DEBUG] [Thread-215046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:54:13.154 [DEBUG] [Thread-215046] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:54:13.163 [DEBUG] [Thread-215046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:54:13.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:54:13.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:54:13.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:54:13.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:54:13.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:54:13.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:54:13.197 [DEBUG] [Thread-215046] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:54:17.857 [DEBUG] [Thread-215048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:25.681 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:32.915 [DEBUG] [Thread-215049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:33.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:33.832 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:43.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:54:43.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:54:43.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:54:44.317 [DEBUG] [Thread-215050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:44.331 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:54:45.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 54, 16), 8.44, 56.52, 0.0, 20.13, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:54:45.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:54:16
2026-02-16T01:54:45.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:54:45.650 [DEBUG] [Thread-215051] [transport.py] [_log()] starting thread (client mode): 0xa57b2ef0
2026-02-16T01:54:45.650 [DEBUG] [Thread-215051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:54:45.670 [DEBUG] [Thread-215051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:54:45.671 [INFO] [Thread-215051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] client lang: <none>
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] server lang: <none>
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] kex follows: False
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] Compression: none
2026-02-16T01:54:45.674 [DEBUG] [Thread-215051] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:54:45.691 [DEBUG] [Thread-215051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:54:45.692 [DEBUG] [Thread-215051] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:54:45.692 [DEBUG] [Thread-215051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:54:45.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:54:45.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:54:45.694 [DEBUG] [Thread-215051] [transport.py] [_log()] userauth is OK
2026-02-16T01:54:45.694 [DEBUG] [Thread-215051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:54:45.695 [DEBUG] [Thread-215051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:54:45.695 [DEBUG] [Thread-215051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:54:45.695 [DEBUG] [Thread-215051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:54:45.715 [INFO] [Thread-215051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:54:45.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:54:46.322 [DEBUG] [Thread-215051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:54:46.322 [DEBUG] [Thread-215051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:54:46.322 [DEBUG] [Thread-215051] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:54:46.363 [DEBUG] [Thread-215051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:54:46.363 [DEBUG] [Thread-215051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:54:46.366 [DEBUG] [Thread-215051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:54:46.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:54:46.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:54:46.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:54:46.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:54:46.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:54:46.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:54:46.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:54:46.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:54:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:54:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.995933 -999.00  +13.30  15.65     61   +6.10 1 1 1 1 1     0    0 7.93 17.59 ZNESW 14.3 15.7 140.8 18.5 13.7 -23.0 13.6 -21.9 13.4 -21.0 13.7 -22.1
2026-02-16T01:54:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:54:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:54:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.995933
2026-02-16T01:54:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:54:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:54:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:54:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:54:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:54:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:54:16', tmtdew=8.44, humidity=56.52, cloud=0.0, wind=20.13, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:54:16', seeing=1.52, atlas_timestamp='2026-02-15T23:54:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:53:00')
2026-02-16T01:54:46.392 [DEBUG] [Thread-215051] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:54:46.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:54:46.488 [DEBUG] [Thread-215054] [transport.py] [_log()] starting thread (client mode): 0xa57727a0
2026-02-16T01:54:46.488 [DEBUG] [Thread-215054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:54:46.502 [DEBUG] [Thread-215054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:54:46.503 [INFO] [Thread-215054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:54:46.510 [DEBUG] [Thread-215054] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:54:46.511 [DEBUG] [Thread-215054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:54:46.511 [DEBUG] [Thread-215054] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:54:46.511 [DEBUG] [Thread-215054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:46.511 [DEBUG] [Thread-215054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:54:46.511 [DEBUG] [Thread-215054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:46.511 [DEBUG] [Thread-215054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] client lang: <none>
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] server lang: <none>
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] kex follows: False
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:54:46.512 [DEBUG] [Thread-215054] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:54:46.513 [DEBUG] [Thread-215054] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:54:46.513 [DEBUG] [Thread-215054] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:54:46.513 [DEBUG] [Thread-215054] [transport.py] [_log()] Compression: none
2026-02-16T01:54:46.513 [DEBUG] [Thread-215054] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:54:46.573 [DEBUG] [Thread-215054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:54:46.574 [DEBUG] [Thread-215054] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:54:46.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:54:46.575 [DEBUG] [Thread-215054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:54:46.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:54:46.633 [DEBUG] [Thread-215054] [transport.py] [_log()] userauth is OK
2026-02-16T01:54:46.633 [DEBUG] [Thread-215054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:54:46.633 [DEBUG] [Thread-215054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:54:46.634 [DEBUG] [Thread-215054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:54:46.634 [DEBUG] [Thread-215054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:54:46.653 [INFO] [Thread-215054] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:54:46.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:54:46.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:54:47.507 [DEBUG] [Thread-215054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:54:47.508 [DEBUG] [Thread-215054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:54:47.555 [DEBUG] [Thread-215054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:54:47.555 [DEBUG] [Thread-215054] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:54:47.564 [DEBUG] [Thread-215054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:54:47.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:54:47.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:54:47.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:54:47.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:54:47.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:54:47.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:54:47.601 [DEBUG] [Thread-215054] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:54:47.951 [DEBUG] [Thread-215056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:03.004 [DEBUG] [Thread-215057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:03.006 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:17.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:55:17.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:55:17.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:55:18.042 [DEBUG] [Thread-215058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:19.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 54, 51), 8.41, 56.99, 0.0, 23.13, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:55:19.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:54:51
2026-02-16T01:55:20.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:55:20.266 [DEBUG] [Thread-215059] [transport.py] [_log()] starting thread (client mode): 0xa5770850
2026-02-16T01:55:20.266 [DEBUG] [Thread-215059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:55:20.287 [DEBUG] [Thread-215059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:55:20.288 [INFO] [Thread-215059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:55:20.291 [DEBUG] [Thread-215059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:55:20.291 [DEBUG] [Thread-215059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:55:20.291 [DEBUG] [Thread-215059] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:55:20.291 [DEBUG] [Thread-215059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] client lang: <none>
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] server lang: <none>
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] kex follows: False
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] Compression: none
2026-02-16T01:55:20.292 [DEBUG] [Thread-215059] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:55:20.310 [DEBUG] [Thread-215059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:55:20.311 [DEBUG] [Thread-215059] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:55:20.311 [DEBUG] [Thread-215059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:55:20.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:55:20.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:55:20.313 [DEBUG] [Thread-215059] [transport.py] [_log()] userauth is OK
2026-02-16T01:55:20.314 [DEBUG] [Thread-215059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:55:20.314 [DEBUG] [Thread-215059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:55:20.314 [DEBUG] [Thread-215059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:55:20.314 [DEBUG] [Thread-215059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:55:20.338 [INFO] [Thread-215059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:55:20.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:55:20.942 [DEBUG] [Thread-215059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:55:20.942 [DEBUG] [Thread-215059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:55:20.943 [DEBUG] [Thread-215059] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:55:20.983 [DEBUG] [Thread-215059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:55:20.984 [DEBUG] [Thread-215059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:55:20.987 [DEBUG] [Thread-215059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:55:20.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:55:20.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:55:20.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:55:20.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:55:21.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:55:21.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:55:21.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:55:21.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:55:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:55:21.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.996280 -999.00  +13.30  15.24     61   +6.00 1 1 1 1 1     0    0 7.75 16.98 ZNESW 18.4 15.2 133.6 21.5 13.7 -23.1 13.6 -22.0 13.3 -20.9 13.6 -22.0
2026-02-16T01:55:21.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:55:21.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:55:21.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.996280
2026-02-16T01:55:21.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:55:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:55:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:55:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:55:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:55:21.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:54:51', tmtdew=8.41, humidity=56.99, cloud=0.0, wind=23.13, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:54:51', seeing=2.75, atlas_timestamp='2026-02-15T23:54:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:53:00')
2026-02-16T01:55:21.008 [DEBUG] [Thread-215059] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:55:21.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:55:21.093 [DEBUG] [Thread-215062] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-16T01:55:21.094 [DEBUG] [Thread-215062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:55:21.118 [DEBUG] [Thread-215062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:55:21.118 [INFO] [Thread-215062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:55:21.125 [DEBUG] [Thread-215062] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] client lang: <none>
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] server lang: <none>
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] kex follows: False
2026-02-16T01:55:21.126 [DEBUG] [Thread-215062] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:55:21.127 [DEBUG] [Thread-215062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:55:21.127 [DEBUG] [Thread-215062] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:55:21.127 [DEBUG] [Thread-215062] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:55:21.127 [DEBUG] [Thread-215062] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:55:21.127 [DEBUG] [Thread-215062] [transport.py] [_log()] Compression: none
2026-02-16T01:55:21.127 [DEBUG] [Thread-215062] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:55:21.183 [DEBUG] [Thread-215062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:55:21.183 [DEBUG] [Thread-215062] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:55:21.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:55:21.185 [DEBUG] [Thread-215062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:55:21.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:55:21.239 [DEBUG] [Thread-215062] [transport.py] [_log()] userauth is OK
2026-02-16T01:55:21.240 [DEBUG] [Thread-215062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:55:21.240 [DEBUG] [Thread-215062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:55:21.240 [DEBUG] [Thread-215062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:55:21.240 [DEBUG] [Thread-215062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:55:21.258 [INFO] [Thread-215062] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:55:21.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:55:21.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:55:21.677 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:22.073 [DEBUG] [Thread-215062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:55:22.074 [DEBUG] [Thread-215062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:55:22.121 [DEBUG] [Thread-215062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:55:22.122 [DEBUG] [Thread-215062] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:55:22.131 [DEBUG] [Thread-215062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:55:22.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:55:22.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:55:22.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:55:22.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:55:22.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:55:22.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:55:22.168 [DEBUG] [Thread-215062] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:55:33.078 [DEBUG] [Thread-215064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:34.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:34.034 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:40.472 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:44.375 [DEBUG] [Thread-215065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:48.129 [DEBUG] [Thread-215066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:55:52.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:55:52.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:55:52.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:55:54.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 55, 26), 8.42, 56.92, 0.0, 20.8, 13.38, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:55:54.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:55:26
2026-02-16T01:55:54.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:55:54.589 [DEBUG] [Thread-215067] [transport.py] [_log()] starting thread (client mode): 0xa2d02cb0
2026-02-16T01:55:54.589 [DEBUG] [Thread-215067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:55:54.609 [DEBUG] [Thread-215067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:55:54.609 [INFO] [Thread-215067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:55:54.611 [DEBUG] [Thread-215067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] client lang: <none>
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] server lang: <none>
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] kex follows: False
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:55:54.612 [DEBUG] [Thread-215067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:55:54.613 [DEBUG] [Thread-215067] [transport.py] [_log()] Compression: none
2026-02-16T01:55:54.613 [DEBUG] [Thread-215067] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:55:54.626 [DEBUG] [Thread-215067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:55:54.627 [DEBUG] [Thread-215067] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:55:54.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:55:54.628 [DEBUG] [Thread-215067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:55:54.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:55:54.630 [DEBUG] [Thread-215067] [transport.py] [_log()] userauth is OK
2026-02-16T01:55:54.630 [DEBUG] [Thread-215067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:55:54.630 [DEBUG] [Thread-215067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:55:54.630 [DEBUG] [Thread-215067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:55:54.630 [DEBUG] [Thread-215067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:55:54.655 [INFO] [Thread-215067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:55:54.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:55:55.307 [DEBUG] [Thread-215067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:55:55.307 [DEBUG] [Thread-215067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:55:55.308 [DEBUG] [Thread-215067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:55:55.348 [DEBUG] [Thread-215067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:55:55.349 [DEBUG] [Thread-215067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:55:55.351 [DEBUG] [Thread-215067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:55:55.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:55:55.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:55:55.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:55:55.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:55:55.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:55:55.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:55:55.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:55:55.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:55:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:55:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.996627 -999.00  +13.30  12.41     61   +6.10 1 1 1 1 1     0    0 7.92 16.86 ZNESW 15.1 12.4 138.8 20.4 13.7 -23.1 13.6 -22.1 13.3 -20.9 13.7 -22.0
2026-02-16T01:55:55.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:55:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:55:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.996627
2026-02-16T01:55:55.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:55:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:55:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:55:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:55:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:55:55.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:55:26', tmtdew=8.42, humidity=56.92, cloud=0.0, wind=20.8, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:55:26', seeing=1.76, atlas_timestamp='2026-02-15T23:55:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:53:00')
2026-02-16T01:55:55.379 [DEBUG] [Thread-215067] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:55:55.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:55:55.475 [DEBUG] [Thread-215070] [transport.py] [_log()] starting thread (client mode): 0xa57b0a90
2026-02-16T01:55:55.476 [DEBUG] [Thread-215070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:55:55.492 [DEBUG] [Thread-215070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:55:55.492 [INFO] [Thread-215070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:55:55.500 [DEBUG] [Thread-215070] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:55:55.500 [DEBUG] [Thread-215070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:55:55.500 [DEBUG] [Thread-215070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] client lang: <none>
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] server lang: <none>
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] kex follows: False
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:55:55.501 [DEBUG] [Thread-215070] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:55:55.502 [DEBUG] [Thread-215070] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:55:55.502 [DEBUG] [Thread-215070] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:55:55.502 [DEBUG] [Thread-215070] [transport.py] [_log()] Compression: none
2026-02-16T01:55:55.502 [DEBUG] [Thread-215070] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:55:55.558 [DEBUG] [Thread-215070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:55:55.559 [DEBUG] [Thread-215070] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:55:55.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:55:55.560 [DEBUG] [Thread-215070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:55:55.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:55:55.614 [DEBUG] [Thread-215070] [transport.py] [_log()] userauth is OK
2026-02-16T01:55:55.615 [DEBUG] [Thread-215070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:55:55.615 [DEBUG] [Thread-215070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:55:55.615 [DEBUG] [Thread-215070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:55:55.615 [DEBUG] [Thread-215070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:55:55.633 [INFO] [Thread-215070] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:55:55.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:55:55.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:55:56.443 [DEBUG] [Thread-215070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:55:56.443 [DEBUG] [Thread-215070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:55:56.491 [DEBUG] [Thread-215070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:55:56.492 [DEBUG] [Thread-215070] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:55:56.501 [DEBUG] [Thread-215070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:55:56.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:55:56.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:55:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:55:56.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:55:56.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:55:56.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:55:56.538 [DEBUG] [Thread-215070] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:55:59.368 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:03.161 [DEBUG] [Thread-215072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:18.051 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:18.212 [DEBUG] [Thread-215073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:26.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:56:26.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:56:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:56:28.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 56, 2), 8.41, 56.97, 0.0, 21.54, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:56:28.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:56:02
2026-02-16T01:56:28.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:56:28.934 [DEBUG] [Thread-215074] [transport.py] [_log()] starting thread (client mode): 0xa57b0d60
2026-02-16T01:56:28.934 [DEBUG] [Thread-215074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:56:28.953 [DEBUG] [Thread-215074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:56:28.954 [INFO] [Thread-215074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:56:28.957 [DEBUG] [Thread-215074] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:56:28.957 [DEBUG] [Thread-215074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] client lang: <none>
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] server lang: <none>
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] kex follows: False
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:56:28.958 [DEBUG] [Thread-215074] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:56:28.959 [DEBUG] [Thread-215074] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:56:28.959 [DEBUG] [Thread-215074] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:56:28.959 [DEBUG] [Thread-215074] [transport.py] [_log()] Compression: none
2026-02-16T01:56:28.959 [DEBUG] [Thread-215074] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:56:28.979 [DEBUG] [Thread-215074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:56:28.980 [DEBUG] [Thread-215074] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:56:28.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:56:28.981 [DEBUG] [Thread-215074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:56:28.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:56:28.983 [DEBUG] [Thread-215074] [transport.py] [_log()] userauth is OK
2026-02-16T01:56:28.984 [DEBUG] [Thread-215074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:56:28.984 [DEBUG] [Thread-215074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:56:28.984 [DEBUG] [Thread-215074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:56:28.984 [DEBUG] [Thread-215074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:56:29.008 [INFO] [Thread-215074] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:56:29.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:56:29.667 [DEBUG] [Thread-215074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:56:29.667 [DEBUG] [Thread-215074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:56:29.667 [DEBUG] [Thread-215074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:56:29.708 [DEBUG] [Thread-215074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:56:29.708 [DEBUG] [Thread-215074] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:56:29.711 [DEBUG] [Thread-215074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:56:29.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:56:29.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:56:29.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:56:29.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:56:29.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:56:29.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:56:29.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:56:29.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:56:29.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:56:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.996975 -999.00  +13.30  14.38     61   +6.10 1 1 1 1 1     0    0 7.72 16.21 ZNESW 11.9 14.4 143.8 19.8 13.7 -23.1 13.6 -21.9 13.3 -20.9 13.6 -22.2
2026-02-16T01:56:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:56:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:56:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.996975
2026-02-16T01:56:29.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:56:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:56:29.737 [DEBUG] [Thread-215074] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:56:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:56:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:56:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:56:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:56:02', tmtdew=8.41, humidity=56.97, cloud=0.0, wind=21.54, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:56:02', seeing=2.51, atlas_timestamp='2026-02-15T23:55:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:53:00')
2026-02-16T01:56:29.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:56:29.833 [DEBUG] [Thread-215077] [transport.py] [_log()] starting thread (client mode): 0xa2d25e40
2026-02-16T01:56:29.833 [DEBUG] [Thread-215077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:56:29.849 [DEBUG] [Thread-215077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:56:29.850 [INFO] [Thread-215077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:56:29.857 [DEBUG] [Thread-215077] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:56:29.857 [DEBUG] [Thread-215077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:56:29.858 [DEBUG] [Thread-215077] [transport.py] [_log()] client lang: <none>
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] server lang: <none>
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] kex follows: False
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:56:29.859 [DEBUG] [Thread-215077] [transport.py] [_log()] Compression: none
2026-02-16T01:56:29.860 [DEBUG] [Thread-215077] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:56:29.918 [DEBUG] [Thread-215077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:56:29.919 [DEBUG] [Thread-215077] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:56:29.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:56:29.921 [DEBUG] [Thread-215077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:56:29.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:56:29.977 [DEBUG] [Thread-215077] [transport.py] [_log()] userauth is OK
2026-02-16T01:56:29.977 [DEBUG] [Thread-215077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:56:29.978 [DEBUG] [Thread-215077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:56:29.978 [DEBUG] [Thread-215077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:56:29.978 [DEBUG] [Thread-215077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:56:29.997 [INFO] [Thread-215077] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:56:29.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:56:29.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:56:30.841 [DEBUG] [Thread-215077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:56:30.842 [DEBUG] [Thread-215077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:56:30.889 [DEBUG] [Thread-215077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:56:30.889 [DEBUG] [Thread-215077] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:56:30.898 [DEBUG] [Thread-215077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:56:30.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:56:30.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:56:30.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:56:30.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:56:30.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:56:30.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:56:30.932 [DEBUG] [Thread-215077] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:56:33.246 [DEBUG] [Thread-215079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:34.247 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:34.249 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:36.701 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:44.442 [DEBUG] [Thread-215080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:48.292 [DEBUG] [Thread-215081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:56:55.360 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:00.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:57:00.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:57:00.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:57:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 56, 37), 8.53, 56.27, 0.0, 21.77, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:57:02.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:56:37
2026-02-16T01:57:03.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:57:03.331 [DEBUG] [Thread-215082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:03.426 [DEBUG] [Thread-215083] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fa0
2026-02-16T01:57:03.426 [DEBUG] [Thread-215083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:57:03.445 [DEBUG] [Thread-215083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:57:03.445 [INFO] [Thread-215083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:57:03.449 [DEBUG] [Thread-215083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:57:03.449 [DEBUG] [Thread-215083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:57:03.449 [DEBUG] [Thread-215083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] client lang: <none>
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] server lang: <none>
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] kex follows: False
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] Compression: none
2026-02-16T01:57:03.450 [DEBUG] [Thread-215083] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:57:03.467 [DEBUG] [Thread-215083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:57:03.468 [DEBUG] [Thread-215083] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:57:03.469 [DEBUG] [Thread-215083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:57:03.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:57:03.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:57:03.471 [DEBUG] [Thread-215083] [transport.py] [_log()] userauth is OK
2026-02-16T01:57:03.471 [DEBUG] [Thread-215083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:57:03.471 [DEBUG] [Thread-215083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:57:03.471 [DEBUG] [Thread-215083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:57:03.471 [DEBUG] [Thread-215083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:57:03.495 [INFO] [Thread-215083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:57:03.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:57:04.144 [DEBUG] [Thread-215083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:57:04.145 [DEBUG] [Thread-215083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:57:04.145 [DEBUG] [Thread-215083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:57:04.186 [DEBUG] [Thread-215083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:57:04.186 [DEBUG] [Thread-215083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:57:04.190 [DEBUG] [Thread-215083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:57:04.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:57:04.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:57:04.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:57:04.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:57:04.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:57:04.215 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:57:04.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:57:04.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:57:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:57:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.997322 -999.00  +13.20  12.62     61   +6.00 1 1 1 1 1     0    0 7.78 14.33 ZNESW 13.1 12.6 138.6 17.8 13.7 -22.9 13.6 -21.9 13.4 -20.7 13.6 -22.0
2026-02-16T01:57:04.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:57:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:57:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.997322
2026-02-16T01:57:04.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:57:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:57:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:57:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:57:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:57:04.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:56:37', tmtdew=8.53, humidity=56.27, cloud=0.0, wind=21.77, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:56:37', seeing=1.51, atlas_timestamp='2026-02-15T23:56:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013250000000001094, -0.005749999999999034, -0.0547500000000003, -0.06300000000000061, -0.004999999999999005, 0.026250000000000995, 0.006999999999999673, 0.047250000000000014, -0.01150000000000162, 0.002000000000000668, -0.04675000000000118, -0.04899999999999949, 0.02999999999999936, 0.015249999999999986, 0.0009999999999994458, 0.01249999999999929, 0.052250000000000796, -0.020500000000000185, -0.023000000000001464, -0.023750000000001492, 0.017499999999998295, 0.039749999999997954, 0.005250000000000199, 0.034750000000000725, 0.02099999999999902, -0.03549999999999898, 0.006250000000001421, 0.005000000000000782, 0.04100000000000037, -0.0029999999999983373, 0.049500000000001876, 0.0470000000000006, 0.023749999999999716], zp_timestamp='2026-02-15T23:53:00')
2026-02-16T01:57:04.219 [DEBUG] [Thread-215083] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:57:04.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:57:04.311 [DEBUG] [Thread-215086] [transport.py] [_log()] starting thread (client mode): 0xa57b0c70
2026-02-16T01:57:04.311 [DEBUG] [Thread-215086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:57:04.325 [DEBUG] [Thread-215086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:57:04.326 [INFO] [Thread-215086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:57:04.333 [DEBUG] [Thread-215086] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:57:04.334 [DEBUG] [Thread-215086] [transport.py] [_log()] client lang: <none>
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] server lang: <none>
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] kex follows: False
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:57:04.335 [DEBUG] [Thread-215086] [transport.py] [_log()] Compression: none
2026-02-16T01:57:04.336 [DEBUG] [Thread-215086] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:57:04.392 [DEBUG] [Thread-215086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:57:04.393 [DEBUG] [Thread-215086] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:57:04.393 [DEBUG] [Thread-215086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:57:04.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:57:04.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:57:04.447 [DEBUG] [Thread-215086] [transport.py] [_log()] userauth is OK
2026-02-16T01:57:04.448 [DEBUG] [Thread-215086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:57:04.448 [DEBUG] [Thread-215086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:57:04.448 [DEBUG] [Thread-215086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:57:04.448 [DEBUG] [Thread-215086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:57:04.466 [INFO] [Thread-215086] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:57:04.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:57:04.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:57:05.283 [DEBUG] [Thread-215086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:57:05.283 [DEBUG] [Thread-215086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:57:05.330 [DEBUG] [Thread-215086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:57:05.330 [DEBUG] [Thread-215086] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:57:05.340 [DEBUG] [Thread-215086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:57:05.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:57:05.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:57:05.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:57:05.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:57:05.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:57:05.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:57:05.374 [DEBUG] [Thread-215086] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:57:14.235 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:18.366 [DEBUG] [Thread-215088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:32.895 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:33.420 [DEBUG] [Thread-215089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:34.452 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:34.454 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:35.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:57:35.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:57:35.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:57:37.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 57, 13), 8.33, 57.28, 0.0, 19.74, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:57:37.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:57:13
2026-02-16T01:57:37.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:57:37.809 [DEBUG] [Thread-215090] [transport.py] [_log()] starting thread (client mode): 0xa81d5f30
2026-02-16T01:57:37.810 [DEBUG] [Thread-215090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:57:37.830 [DEBUG] [Thread-215090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:57:37.830 [INFO] [Thread-215090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:57:37.833 [DEBUG] [Thread-215090] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:57:37.833 [DEBUG] [Thread-215090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:57:37.833 [DEBUG] [Thread-215090] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:57:37.833 [DEBUG] [Thread-215090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:37.833 [DEBUG] [Thread-215090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] client lang: <none>
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] server lang: <none>
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] kex follows: False
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] Compression: none
2026-02-16T01:57:37.834 [DEBUG] [Thread-215090] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:57:37.851 [DEBUG] [Thread-215090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:57:37.851 [DEBUG] [Thread-215090] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:57:37.852 [DEBUG] [Thread-215090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:57:37.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:57:37.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:57:37.855 [DEBUG] [Thread-215090] [transport.py] [_log()] userauth is OK
2026-02-16T01:57:37.855 [DEBUG] [Thread-215090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:57:37.855 [DEBUG] [Thread-215090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:57:37.855 [DEBUG] [Thread-215090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:57:37.855 [DEBUG] [Thread-215090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:57:37.879 [INFO] [Thread-215090] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:57:37.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:57:38.536 [DEBUG] [Thread-215090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:57:38.537 [DEBUG] [Thread-215090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:57:38.537 [DEBUG] [Thread-215090] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:57:38.578 [DEBUG] [Thread-215090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:57:38.578 [DEBUG] [Thread-215090] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:57:38.581 [DEBUG] [Thread-215090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:57:38.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:57:38.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:57:38.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:57:38.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:57:38.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:57:38.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:57:38.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.997670 -999.00  +13.30  17.04     61   +6.00 1 1 1 1 1     0    0 7.64 12.83 ZNESW 15.8 17.0 146.2 20.0 13.7 -22.8 13.6 -21.6 13.3 -20.6 13.6 -21.6
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.997670
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:57:38.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:57:13', tmtdew=8.33, humidity=57.28, cloud=0.0, wind=19.74, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:57:13', seeing=2.03, atlas_timestamp='2026-02-15T23:56:38.688', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.015249999999999986, -0.05824999999999925, -0.03049999999999997, -0.016000000000000014, 0.013250000000001094, 0.03999999999999915, 0.048250000000001236, -0.0005000000000006111, 0.009999999999999787, -0.034750000000000725, -0.03200000000000003, 0.047999999999998266, 0.040749999999999176, 0.049999999999998934, 0.03799999999999848, 0.05274999999999963, 0.009499999999999176, 0.009999999999999787, -0.0042500000000025295, 0.03799999999999848, 0.05674999999999919, 0.026250000000000995, 0.03175000000000061, 0.046499999999999986, -0.04099999999999859, 0.03225000000000122, 0.0065000000000008384, 0.06199999999999939, 0.023000000000001464, 0.11400000000000077, 0.016000000000000014, 0.04374999999999929], zp_timestamp='2026-02-15T23:56:00')
2026-02-16T01:57:38.600 [DEBUG] [Thread-215090] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:57:38.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:57:38.684 [DEBUG] [Thread-215093] [transport.py] [_log()] starting thread (client mode): 0xa81d7b80
2026-02-16T01:57:38.684 [DEBUG] [Thread-215093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:57:38.698 [DEBUG] [Thread-215093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:57:38.699 [INFO] [Thread-215093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:57:38.706 [DEBUG] [Thread-215093] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:57:38.706 [DEBUG] [Thread-215093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:57:38.706 [DEBUG] [Thread-215093] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:57:38.706 [DEBUG] [Thread-215093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:38.706 [DEBUG] [Thread-215093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:57:38.706 [DEBUG] [Thread-215093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] client lang: <none>
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] server lang: <none>
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] kex follows: False
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] Compression: none
2026-02-16T01:57:38.707 [DEBUG] [Thread-215093] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:57:38.766 [DEBUG] [Thread-215093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:57:38.767 [DEBUG] [Thread-215093] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:57:38.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:57:38.768 [DEBUG] [Thread-215093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:57:38.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:57:38.822 [DEBUG] [Thread-215093] [transport.py] [_log()] userauth is OK
2026-02-16T01:57:38.823 [DEBUG] [Thread-215093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:57:38.823 [DEBUG] [Thread-215093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:57:38.823 [DEBUG] [Thread-215093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:57:38.823 [DEBUG] [Thread-215093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:57:38.842 [INFO] [Thread-215093] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:57:38.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:57:38.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:57:39.652 [DEBUG] [Thread-215093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:57:39.652 [DEBUG] [Thread-215093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:57:39.700 [DEBUG] [Thread-215093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:57:39.701 [DEBUG] [Thread-215093] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:57:39.710 [DEBUG] [Thread-215093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:57:39.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:57:39.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:57:39.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:57:39.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:57:39.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:57:39.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:57:39.746 [DEBUG] [Thread-215093] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:57:44.510 [DEBUG] [Thread-215095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:48.458 [DEBUG] [Thread-215096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:57:51.544 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:03.520 [DEBUG] [Thread-215097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:09.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:58:09.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:58:09.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:58:10.240 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:11.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 57, 48), 8.38, 56.75, 0.0, 17.12, 13.28, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:58:11.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:57:48
2026-02-16T01:58:11.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:58:12.134 [DEBUG] [Thread-215098] [transport.py] [_log()] starting thread (client mode): 0xa57b0f10
2026-02-16T01:58:12.134 [DEBUG] [Thread-215098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:58:12.156 [DEBUG] [Thread-215098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:58:12.156 [INFO] [Thread-215098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:58:12.159 [DEBUG] [Thread-215098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] client lang: <none>
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] server lang: <none>
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] kex follows: False
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] Compression: none
2026-02-16T01:58:12.160 [DEBUG] [Thread-215098] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:58:12.178 [DEBUG] [Thread-215098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:58:12.179 [DEBUG] [Thread-215098] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:58:12.180 [DEBUG] [Thread-215098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:58:12.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:58:12.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:58:12.182 [DEBUG] [Thread-215098] [transport.py] [_log()] userauth is OK
2026-02-16T01:58:12.182 [DEBUG] [Thread-215098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:58:12.182 [DEBUG] [Thread-215098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:58:12.182 [DEBUG] [Thread-215098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:58:12.182 [DEBUG] [Thread-215098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:58:12.200 [INFO] [Thread-215098] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:58:12.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:58:12.848 [DEBUG] [Thread-215098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:58:12.848 [DEBUG] [Thread-215098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:58:12.849 [DEBUG] [Thread-215098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:58:12.890 [DEBUG] [Thread-215098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:58:12.890 [DEBUG] [Thread-215098] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:58:12.893 [DEBUG] [Thread-215098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:58:12.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:58:12.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:58:12.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:58:12.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:58:12.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:58:12.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:58:12.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:58:12.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:58:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:58:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.998364 -999.00  +13.40  14.31     61   +6.10 1 1 1 1 1     0    0 7.74 11.97 ZNESW 9.0 14.3 140.1 20.3 13.7 -22.9 13.6 -21.9 13.3 -20.7 13.6 -21.9
2026-02-16T01:58:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:58:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:58:12.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.998364
2026-02-16T01:58:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:58:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:58:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:58:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:58:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:58:12.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:57:48', tmtdew=8.38, humidity=56.75, cloud=0.0, wind=17.12, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:57:49', seeing=2.33, atlas_timestamp='2026-02-15T23:57:38.650', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.015249999999999986, -0.05824999999999925, -0.03049999999999997, -0.016000000000000014, 0.013250000000001094, 0.03999999999999915, 0.048250000000001236, -0.0005000000000006111, 0.009999999999999787, -0.034750000000000725, -0.03200000000000003, 0.047999999999998266, 0.040749999999999176, 0.049999999999998934, 0.03799999999999848, 0.05274999999999963, 0.009499999999999176, 0.009999999999999787, -0.0042500000000025295, 0.03799999999999848, 0.05674999999999919, 0.026250000000000995, 0.03175000000000061, 0.046499999999999986, -0.04099999999999859, 0.03225000000000122, 0.0065000000000008384, 0.06199999999999939, 0.023000000000001464, 0.11400000000000077, 0.016000000000000014, 0.04374999999999929], zp_timestamp='2026-02-15T23:56:00')
2026-02-16T01:58:12.914 [DEBUG] [Thread-215098] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:58:12.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:58:13.009 [DEBUG] [Thread-215101] [transport.py] [_log()] starting thread (client mode): 0xa57e3160
2026-02-16T01:58:13.009 [DEBUG] [Thread-215101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:58:13.023 [DEBUG] [Thread-215101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:58:13.023 [INFO] [Thread-215101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:13.030 [DEBUG] [Thread-215101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] client lang: <none>
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] server lang: <none>
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] kex follows: False
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] Compression: none
2026-02-16T01:58:13.031 [DEBUG] [Thread-215101] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:58:13.088 [DEBUG] [Thread-215101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:58:13.088 [DEBUG] [Thread-215101] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:58:13.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:58:13.089 [DEBUG] [Thread-215101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:58:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:58:13.145 [DEBUG] [Thread-215101] [transport.py] [_log()] userauth is OK
2026-02-16T01:58:13.145 [DEBUG] [Thread-215101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:58:13.145 [DEBUG] [Thread-215101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:58:13.145 [DEBUG] [Thread-215101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:58:13.145 [DEBUG] [Thread-215101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:58:13.158 [INFO] [Thread-215101] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:58:13.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:58:13.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:58:13.967 [DEBUG] [Thread-215101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:58:13.967 [DEBUG] [Thread-215101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:58:14.014 [DEBUG] [Thread-215101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:58:14.014 [DEBUG] [Thread-215101] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:58:14.027 [DEBUG] [Thread-215101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:58:14.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:58:14.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:58:14.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:58:14.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:58:14.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:58:14.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:58:14.072 [DEBUG] [Thread-215101] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:58:18.557 [DEBUG] [Thread-215103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:28.889 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:33.608 [DEBUG] [Thread-215104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:34.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:34.718 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:44.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:58:44.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:58:44.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:58:44.567 [DEBUG] [Thread-215105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:46.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 58, 24), 8.36, 56.83, 0.0, 17.87, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:58:46.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:58:24
2026-02-16T01:58:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:58:46.616 [DEBUG] [Thread-215106] [transport.py] [_log()] starting thread (client mode): 0xa2d255a0
2026-02-16T01:58:46.616 [DEBUG] [Thread-215106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:58:46.636 [DEBUG] [Thread-215106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:58:46.636 [INFO] [Thread-215106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:58:46.639 [DEBUG] [Thread-215106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] client lang: <none>
2026-02-16T01:58:46.640 [DEBUG] [Thread-215106] [transport.py] [_log()] server lang: <none>
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] kex follows: False
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] Compression: none
2026-02-16T01:58:46.641 [DEBUG] [Thread-215106] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:58:46.658 [DEBUG] [Thread-215106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:58:46.658 [DEBUG] [Thread-215106] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:58:46.659 [DEBUG] [Thread-215106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:58:46.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:58:46.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:58:46.661 [DEBUG] [Thread-215106] [transport.py] [_log()] userauth is OK
2026-02-16T01:58:46.661 [DEBUG] [Thread-215106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:58:46.661 [DEBUG] [Thread-215106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:58:46.661 [DEBUG] [Thread-215106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:58:46.661 [DEBUG] [Thread-215106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:58:46.697 [INFO] [Thread-215106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:58:46.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:58:47.503 [DEBUG] [Thread-215106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:58:47.504 [DEBUG] [Thread-215106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:58:47.504 [DEBUG] [Thread-215106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:58:47.544 [DEBUG] [Thread-215106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:58:47.545 [DEBUG] [Thread-215106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:58:47.548 [DEBUG] [Thread-215106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:58:47.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:58:47.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:58:47.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:58:47.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:58:47.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:58:47.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:58:47.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:58:47.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:58:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:58:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.998711 -999.00  +13.30  11.91     61   +6.10 1 1 1 1 1     0    0 7.68 11.54 ZNESW 13.0 11.9 134.4 14.7 13.7 -22.9 13.6 -21.8 13.3 -20.8 13.6 -21.9
2026-02-16T01:58:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:58:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:58:47.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.998711
2026-02-16T01:58:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:58:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:58:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:58:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:58:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:58:47.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:58:24', tmtdew=8.36, humidity=56.83, cloud=0.0, wind=17.87, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:58:24', seeing=2.05, atlas_timestamp='2026-02-15T23:58:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.015249999999999986, -0.05824999999999925, -0.03049999999999997, -0.016000000000000014, 0.013250000000001094, 0.03999999999999915, 0.048250000000001236, -0.0005000000000006111, 0.009999999999999787, -0.034750000000000725, -0.03200000000000003, 0.047999999999998266, 0.040749999999999176, 0.049999999999998934, 0.03799999999999848, 0.05274999999999963, 0.009499999999999176, 0.009999999999999787, -0.0042500000000025295, 0.03799999999999848, 0.05674999999999919, 0.026250000000000995, 0.03175000000000061, 0.046499999999999986, -0.04099999999999859, 0.03225000000000122, 0.0065000000000008384, 0.06199999999999939, 0.023000000000001464, 0.11400000000000077, 0.016000000000000014, 0.04374999999999929], zp_timestamp='2026-02-15T23:56:00')
2026-02-16T01:58:47.574 [DEBUG] [Thread-215106] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:58:47.593 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:47.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:58:47.678 [DEBUG] [Thread-215109] [transport.py] [_log()] starting thread (client mode): 0xa2d276a0
2026-02-16T01:58:47.678 [DEBUG] [Thread-215109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:58:47.693 [DEBUG] [Thread-215109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:58:47.693 [INFO] [Thread-215109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] client lang: <none>
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] server lang: <none>
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] kex follows: False
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] Compression: none
2026-02-16T01:58:47.700 [DEBUG] [Thread-215109] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:58:47.756 [DEBUG] [Thread-215109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:58:47.756 [DEBUG] [Thread-215109] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:58:47.757 [DEBUG] [Thread-215109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:58:47.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:58:47.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:58:47.813 [DEBUG] [Thread-215109] [transport.py] [_log()] userauth is OK
2026-02-16T01:58:47.813 [DEBUG] [Thread-215109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:58:47.813 [DEBUG] [Thread-215109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:58:47.813 [DEBUG] [Thread-215109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:58:47.813 [DEBUG] [Thread-215109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:58:47.832 [INFO] [Thread-215109] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:58:47.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:58:47.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:58:48.645 [DEBUG] [Thread-215111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:58:48.753 [DEBUG] [Thread-215109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:58:48.753 [DEBUG] [Thread-215109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:58:48.801 [DEBUG] [Thread-215109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:58:48.801 [DEBUG] [Thread-215109] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:58:48.809 [DEBUG] [Thread-215109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:58:48.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:58:48.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:58:48.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:58:48.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:58:48.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:58:48.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:58:48.842 [DEBUG] [Thread-215109] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:59:03.691 [DEBUG] [Thread-215112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:06.318 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:18.725 [DEBUG] [Thread-215113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:18.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:59:18.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:59:18.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:59:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 58, 59), 8.36, 56.83, 0.0, 18.1, 13.27, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:59:20.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:58:59
2026-02-16T01:59:21.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:59:21.481 [DEBUG] [Thread-215114] [transport.py] [_log()] starting thread (client mode): 0xa5770d30
2026-02-16T01:59:21.481 [DEBUG] [Thread-215114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:59:21.501 [DEBUG] [Thread-215114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:59:21.501 [INFO] [Thread-215114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:59:21.504 [DEBUG] [Thread-215114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:59:21.504 [DEBUG] [Thread-215114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:59:21.504 [DEBUG] [Thread-215114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:59:21.504 [DEBUG] [Thread-215114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:21.504 [DEBUG] [Thread-215114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] client lang: <none>
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] server lang: <none>
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] kex follows: False
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] Compression: none
2026-02-16T01:59:21.505 [DEBUG] [Thread-215114] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:59:21.519 [DEBUG] [Thread-215114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:59:21.520 [DEBUG] [Thread-215114] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:59:21.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:59:21.521 [DEBUG] [Thread-215114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:59:21.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:59:21.523 [DEBUG] [Thread-215114] [transport.py] [_log()] userauth is OK
2026-02-16T01:59:21.524 [DEBUG] [Thread-215114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:59:21.524 [DEBUG] [Thread-215114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:59:21.524 [DEBUG] [Thread-215114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:59:21.524 [DEBUG] [Thread-215114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:59:21.549 [INFO] [Thread-215114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:59:21.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:59:22.186 [DEBUG] [Thread-215114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:59:22.187 [DEBUG] [Thread-215114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:59:22.187 [DEBUG] [Thread-215114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:59:22.227 [DEBUG] [Thread-215114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:59:22.228 [DEBUG] [Thread-215114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:59:22.231 [DEBUG] [Thread-215114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:59:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:59:22.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:59:22.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:59:22.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:59:22.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:59:22.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:59:22.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:59:22.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:59:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:59:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.999058 -999.00  +13.30  14.47     61   +6.00 1 1 1 1 1     0    0 7.66 9.84 ZNESW 12.2 14.5 146.4 16.4 13.7 -22.9 13.6 -21.8 13.3 -20.8 13.6 -21.9
2026-02-16T01:59:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:59:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:59:22.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.999058
2026-02-16T01:59:22.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:59:22.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:59:22.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:59:22.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:59:22.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:59:22.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:58:59', tmtdew=8.36, humidity=56.83, cloud=0.0, wind=18.1, temperature=13.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:59:00', seeing=1.99, atlas_timestamp='2026-02-15T23:58:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.015249999999999986, -0.05824999999999925, -0.03049999999999997, -0.016000000000000014, 0.013250000000001094, 0.03999999999999915, 0.048250000000001236, -0.0005000000000006111, 0.009999999999999787, -0.034750000000000725, -0.03200000000000003, 0.047999999999998266, 0.040749999999999176, 0.049999999999998934, 0.03799999999999848, 0.05274999999999963, 0.009499999999999176, 0.009999999999999787, -0.0042500000000025295, 0.03799999999999848, 0.05674999999999919, 0.026250000000000995, 0.03175000000000061, 0.046499999999999986, -0.04099999999999859, 0.03225000000000122, 0.0065000000000008384, 0.06199999999999939, 0.023000000000001464, 0.11400000000000077, 0.016000000000000014, 0.04374999999999929], zp_timestamp='2026-02-15T23:56:00')
2026-02-16T01:59:22.258 [DEBUG] [Thread-215114] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:59:22.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:59:22.357 [DEBUG] [Thread-215117] [transport.py] [_log()] starting thread (client mode): 0xa2d11b70
2026-02-16T01:59:22.357 [DEBUG] [Thread-215117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:59:22.373 [DEBUG] [Thread-215117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:59:22.373 [INFO] [Thread-215117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] client lang: <none>
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] server lang: <none>
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] kex follows: False
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:59:22.381 [DEBUG] [Thread-215117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:59:22.382 [DEBUG] [Thread-215117] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:59:22.382 [DEBUG] [Thread-215117] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:59:22.382 [DEBUG] [Thread-215117] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:59:22.382 [DEBUG] [Thread-215117] [transport.py] [_log()] Compression: none
2026-02-16T01:59:22.382 [DEBUG] [Thread-215117] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:59:22.440 [DEBUG] [Thread-215117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:59:22.441 [DEBUG] [Thread-215117] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:59:22.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:59:22.442 [DEBUG] [Thread-215117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:59:22.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:59:22.496 [DEBUG] [Thread-215117] [transport.py] [_log()] userauth is OK
2026-02-16T01:59:22.496 [DEBUG] [Thread-215117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:59:22.496 [DEBUG] [Thread-215117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:59:22.496 [DEBUG] [Thread-215117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:59:22.496 [DEBUG] [Thread-215117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:59:22.521 [INFO] [Thread-215117] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:59:22.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:59:22.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:59:23.318 [DEBUG] [Thread-215117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:59:23.318 [DEBUG] [Thread-215117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:59:23.366 [DEBUG] [Thread-215117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:59:23.366 [DEBUG] [Thread-215117] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:59:23.375 [DEBUG] [Thread-215117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:59:23.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:59:23.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:59:23.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:59:23.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:59:23.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:59:23.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:59:23.409 [DEBUG] [Thread-215117] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:59:24.978 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:33.763 [DEBUG] [Thread-215119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:34.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:34.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:43.637 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:44.624 [DEBUG] [Thread-215120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:48.826 [DEBUG] [Thread-215121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T01:59:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T01:59:53.423 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T01:59:53.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T01:59:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 1, 59, 35), 8.44, 56.6, 0.0, 17.29, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T01:59:55.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 01:59:35
2026-02-16T01:59:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T01:59:55.803 [DEBUG] [Thread-215122] [transport.py] [_log()] starting thread (client mode): 0xa2d27e20
2026-02-16T01:59:55.803 [DEBUG] [Thread-215122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:59:55.822 [DEBUG] [Thread-215122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T01:59:55.822 [INFO] [Thread-215122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] client lang: <none>
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] server lang: <none>
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] kex follows: False
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:59:55.825 [DEBUG] [Thread-215122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:59:55.826 [DEBUG] [Thread-215122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:59:55.826 [DEBUG] [Thread-215122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:59:55.826 [DEBUG] [Thread-215122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:59:55.826 [DEBUG] [Thread-215122] [transport.py] [_log()] Compression: none
2026-02-16T01:59:55.826 [DEBUG] [Thread-215122] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:59:55.842 [DEBUG] [Thread-215122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:59:55.843 [DEBUG] [Thread-215122] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:59:55.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T01:59:55.844 [DEBUG] [Thread-215122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T01:59:55.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:59:55.846 [DEBUG] [Thread-215122] [transport.py] [_log()] userauth is OK
2026-02-16T01:59:55.847 [DEBUG] [Thread-215122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:59:55.847 [DEBUG] [Thread-215122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:59:55.847 [DEBUG] [Thread-215122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T01:59:55.847 [DEBUG] [Thread-215122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:59:55.871 [INFO] [Thread-215122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:59:55.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:59:56.503 [DEBUG] [Thread-215122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:59:56.503 [DEBUG] [Thread-215122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:59:56.504 [DEBUG] [Thread-215122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T01:59:56.544 [DEBUG] [Thread-215122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:59:56.544 [DEBUG] [Thread-215122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:59:56.548 [DEBUG] [Thread-215122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:59:56.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:59:56.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T01:59:56.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T01:59:56.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T01:59:56.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:59:56.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T01:59:56.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:59:56.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:59:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T01:59:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.999405 -999.00  +13.30  12.31     61   +6.00 1 1 1 1 1     0    0 7.52 7.40 ZNESW 13.1 12.3 144.6 16.9 13.7 -23.0 13.6 -21.9 13.2 -20.8 13.6 -21.9
2026-02-16T01:59:56.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T01:59:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T01:59:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.999405
2026-02-16T01:59:56.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T01:59:56.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T01:59:56.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T01:59:56.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T01:59:56.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T01:59:56.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T01:59:35', tmtdew=8.44, humidity=56.6, cloud=0.0, wind=17.29, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T01:59:35', seeing=1.69, atlas_timestamp='2026-02-15T23:59:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.015249999999999986, -0.05824999999999925, -0.03049999999999997, -0.016000000000000014, 0.013250000000001094, 0.03999999999999915, 0.048250000000001236, -0.0005000000000006111, 0.009999999999999787, -0.034750000000000725, -0.03200000000000003, 0.047999999999998266, 0.040749999999999176, 0.049999999999998934, 0.03799999999999848, 0.05274999999999963, 0.009499999999999176, 0.009999999999999787, -0.0042500000000025295, 0.03799999999999848, 0.05674999999999919, 0.026250000000000995, 0.03175000000000061, 0.046499999999999986, -0.04099999999999859, 0.03225000000000122, 0.0065000000000008384, 0.06199999999999939, 0.023000000000001464, 0.11400000000000077, 0.016000000000000014, 0.04374999999999929], zp_timestamp='2026-02-15T23:56:00')
2026-02-16T01:59:56.578 [DEBUG] [Thread-215122] [transport.py] [_log()] EOF in transport thread
2026-02-16T01:59:56.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T01:59:56.674 [DEBUG] [Thread-215125] [transport.py] [_log()] starting thread (client mode): 0xa81d5a20
2026-02-16T01:59:56.675 [DEBUG] [Thread-215125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T01:59:56.693 [DEBUG] [Thread-215125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T01:59:56.693 [INFO] [Thread-215125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T01:59:56.702 [DEBUG] [Thread-215125] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T01:59:56.703 [DEBUG] [Thread-215125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] client lang: <none>
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] server lang: <none>
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] kex follows: False
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] Compression: none
2026-02-16T01:59:56.704 [DEBUG] [Thread-215125] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T01:59:56.758 [DEBUG] [Thread-215125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T01:59:56.759 [DEBUG] [Thread-215125] [transport.py] [_log()] Switch to new keys ...
2026-02-16T01:59:56.760 [DEBUG] [Thread-215125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T01:59:56.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T01:59:56.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T01:59:56.815 [DEBUG] [Thread-215125] [transport.py] [_log()] userauth is OK
2026-02-16T01:59:56.816 [DEBUG] [Thread-215125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T01:59:56.816 [DEBUG] [Thread-215125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T01:59:56.816 [DEBUG] [Thread-215125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T01:59:56.816 [DEBUG] [Thread-215125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T01:59:56.835 [INFO] [Thread-215125] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T01:59:56.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T01:59:56.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T01:59:57.616 [DEBUG] [Thread-215125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T01:59:57.616 [DEBUG] [Thread-215125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T01:59:57.664 [DEBUG] [Thread-215125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T01:59:57.664 [DEBUG] [Thread-215125] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T01:59:57.674 [DEBUG] [Thread-215125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T01:59:57.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T01:59:57.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T01:59:57.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T01:59:57.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T01:59:57.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T01:59:57.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T01:59:57.711 [DEBUG] [Thread-215125] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:00:02.437 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:03.862 [DEBUG] [Thread-215127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:18.909 [DEBUG] [Thread-215128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:19.810 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:21.396 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:25.596 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:27.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:00:27.734 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:00:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:00:28.657 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 0, 10), 8.5, 56.17, 0.0, 19.85, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:00:29.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:00:10
2026-02-16T02:00:29.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:00:30.083 [DEBUG] [Thread-215129] [transport.py] [_log()] starting thread (client mode): 0xa2d277f0
2026-02-16T02:00:30.083 [DEBUG] [Thread-215129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:00:30.100 [DEBUG] [Thread-215129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:00:30.100 [INFO] [Thread-215129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:00:30.103 [DEBUG] [Thread-215129] [transport.py] [_log()] client lang: <none>
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] server lang: <none>
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] kex follows: False
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] Compression: none
2026-02-16T02:00:30.104 [DEBUG] [Thread-215129] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:00:30.121 [DEBUG] [Thread-215129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:00:30.122 [DEBUG] [Thread-215129] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:00:30.122 [DEBUG] [Thread-215129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:00:30.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:00:30.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:00:30.124 [DEBUG] [Thread-215129] [transport.py] [_log()] userauth is OK
2026-02-16T02:00:30.124 [DEBUG] [Thread-215129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:00:30.124 [DEBUG] [Thread-215129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:00:30.124 [DEBUG] [Thread-215129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:00:30.125 [DEBUG] [Thread-215129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:00:30.149 [INFO] [Thread-215129] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:00:30.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:00:30.798 [DEBUG] [Thread-215129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:00:30.799 [DEBUG] [Thread-215129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:00:30.799 [DEBUG] [Thread-215129] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:00:30.839 [DEBUG] [Thread-215129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:00:30.839 [DEBUG] [Thread-215129] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:00:30.843 [DEBUG] [Thread-215129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:00:30.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:00:30.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:00:30.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:00:30.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:00:30.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:00:30.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:00:30.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:00:30.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:00:30.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:00:30.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61086.999752 -999.00  +13.30  13.80     61   +6.00 1 1 1 1 1     0    0 7.54 5.55 ZNESW 11.5 13.8 136.2 20.4 13.7 -22.8 13.6 -21.8 13.3 -20.7 13.6 -22.0
2026-02-16T02:00:30.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:00:30.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:00:30.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61086.999752
2026-02-16T02:00:30.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:00:30.868 [DEBUG] [Thread-215129] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:00:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:00:30.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:00:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:00:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:00:30.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:00:10', tmtdew=8.5, humidity=56.17, cloud=0.0, wind=19.85, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:00:10', seeing=1.79, atlas_timestamp='2026-02-15T23:59:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, 0.015249999999999986, -0.05824999999999925, -0.03049999999999997, -0.016000000000000014, 0.013250000000001094, 0.03999999999999915, 0.048250000000001236, -0.0005000000000006111, 0.009999999999999787, -0.034750000000000725, -0.03200000000000003, 0.047999999999998266, 0.040749999999999176, 0.049999999999998934, 0.03799999999999848, 0.05274999999999963, 0.009499999999999176, 0.009999999999999787, -0.0042500000000025295, 0.03799999999999848, 0.05674999999999919, 0.026250000000000995, 0.03175000000000061, 0.046499999999999986, -0.04099999999999859, 0.03225000000000122, 0.0065000000000008384, 0.06199999999999939, 0.023000000000001464, 0.11400000000000077, 0.016000000000000014, 0.04374999999999929], zp_timestamp='2026-02-15T23:56:00')
2026-02-16T02:00:30.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:00:30.969 [DEBUG] [Thread-215132] [transport.py] [_log()] starting thread (client mode): 0xa2d27070
2026-02-16T02:00:30.969 [DEBUG] [Thread-215132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:00:30.983 [DEBUG] [Thread-215132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:00:30.983 [INFO] [Thread-215132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:00:30.991 [DEBUG] [Thread-215132] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:00:30.991 [DEBUG] [Thread-215132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:00:30.991 [DEBUG] [Thread-215132] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:00:30.991 [DEBUG] [Thread-215132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:00:30.991 [DEBUG] [Thread-215132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:00:30.991 [DEBUG] [Thread-215132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] client lang: <none>
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] server lang: <none>
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] kex follows: False
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] Compression: none
2026-02-16T02:00:30.992 [DEBUG] [Thread-215132] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:00:31.050 [DEBUG] [Thread-215132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:00:31.050 [DEBUG] [Thread-215132] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:00:31.051 [DEBUG] [Thread-215132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:00:31.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:00:31.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:00:31.106 [DEBUG] [Thread-215132] [transport.py] [_log()] userauth is OK
2026-02-16T02:00:31.106 [DEBUG] [Thread-215132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:00:31.107 [DEBUG] [Thread-215132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:00:31.107 [DEBUG] [Thread-215132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:00:31.107 [DEBUG] [Thread-215132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:00:31.125 [INFO] [Thread-215132] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:00:31.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:00:31.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:00:31.955 [DEBUG] [Thread-215132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:00:31.956 [DEBUG] [Thread-215132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:00:32.003 [DEBUG] [Thread-215132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:00:32.004 [DEBUG] [Thread-215132] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:00:32.013 [DEBUG] [Thread-215132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:00:32.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:00:32.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:00:32.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:00:32.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:00:32.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:00:32.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:00:32.050 [DEBUG] [Thread-215132] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:00:33.945 [DEBUG] [Thread-215134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:34.058 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:35.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:35.149 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:40.334 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:44.681 [DEBUG] [Thread-215135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:48.997 [DEBUG] [Thread-215136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:00:59.249 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:02.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:01:02.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:01:02.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:01:04.033 [DEBUG] [Thread-215137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:04.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 0, 45), 8.45, 56.69, 0.0, 18.07, 13.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:01:04.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:00:45
2026-02-16T02:01:04.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:01:04.591 [DEBUG] [Thread-215138] [transport.py] [_log()] starting thread (client mode): 0xa2d12f20
2026-02-16T02:01:04.591 [DEBUG] [Thread-215138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:01:04.611 [DEBUG] [Thread-215138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:01:04.612 [INFO] [Thread-215138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] client lang: <none>
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] server lang: <none>
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] kex follows: False
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:01:04.613 [DEBUG] [Thread-215138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:01:04.614 [DEBUG] [Thread-215138] [transport.py] [_log()] Compression: none
2026-02-16T02:01:04.614 [DEBUG] [Thread-215138] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:01:04.622 [DEBUG] [Thread-215138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:01:04.622 [DEBUG] [Thread-215138] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:01:04.622 [DEBUG] [Thread-215138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:01:04.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:01:04.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:01:04.624 [DEBUG] [Thread-215138] [transport.py] [_log()] userauth is OK
2026-02-16T02:01:04.624 [DEBUG] [Thread-215138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:01:04.624 [DEBUG] [Thread-215138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:01:04.624 [DEBUG] [Thread-215138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:01:04.624 [DEBUG] [Thread-215138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:01:04.643 [INFO] [Thread-215138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:01:04.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:01:06.213 [DEBUG] [Thread-215138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:01:06.213 [DEBUG] [Thread-215138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:01:06.214 [DEBUG] [Thread-215138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:01:06.254 [DEBUG] [Thread-215138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:01:06.255 [DEBUG] [Thread-215138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:01:06.258 [DEBUG] [Thread-215138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:01:06.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:01:06.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:01:06.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:01:06.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:01:06.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:01:06.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:01:06.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:01:06.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:01:06.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:01:06.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.000447 -999.00  +13.30  12.36     61   +6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.8 12.4 139.8 15.9 13.6 -22.9 13.6 -21.9 13.3 -20.7 13.6 -21.7
2026-02-16T02:01:06.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:01:06.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:01:06.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.000447
2026-02-16T02:01:06.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:01:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:01:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:01:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:01:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:01:06.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:00:45', tmtdew=8.45, humidity=56.69, cloud=0.0, wind=18.07, temperature=13.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:00:45', seeing=1.92, atlas_timestamp='2026-02-16T00:00:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-15T23:59:00')
2026-02-16T02:01:06.285 [DEBUG] [Thread-215138] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:01:06.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:01:06.383 [DEBUG] [Thread-215141] [transport.py] [_log()] starting thread (client mode): 0xa57b1120
2026-02-16T02:01:06.383 [DEBUG] [Thread-215141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:01:06.397 [DEBUG] [Thread-215141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:01:06.398 [INFO] [Thread-215141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:01:06.407 [DEBUG] [Thread-215141] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:01:06.408 [DEBUG] [Thread-215141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:01:06.408 [DEBUG] [Thread-215141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:01:06.408 [DEBUG] [Thread-215141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] client lang: <none>
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] server lang: <none>
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] kex follows: False
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:01:06.409 [DEBUG] [Thread-215141] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:01:06.410 [DEBUG] [Thread-215141] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:01:06.410 [DEBUG] [Thread-215141] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:01:06.410 [DEBUG] [Thread-215141] [transport.py] [_log()] Compression: none
2026-02-16T02:01:06.410 [DEBUG] [Thread-215141] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:01:06.468 [DEBUG] [Thread-215141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:01:06.469 [DEBUG] [Thread-215141] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:01:06.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:01:06.470 [DEBUG] [Thread-215141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:01:06.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:01:06.526 [DEBUG] [Thread-215141] [transport.py] [_log()] userauth is OK
2026-02-16T02:01:06.526 [DEBUG] [Thread-215141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:01:06.526 [DEBUG] [Thread-215141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:01:06.526 [DEBUG] [Thread-215141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:01:06.526 [DEBUG] [Thread-215141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:01:06.545 [INFO] [Thread-215141] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:01:06.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:01:06.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:01:07.379 [DEBUG] [Thread-215141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:01:07.380 [DEBUG] [Thread-215141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:01:07.427 [DEBUG] [Thread-215141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:01:07.428 [DEBUG] [Thread-215141] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:01:07.437 [DEBUG] [Thread-215141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:01:07.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:01: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')
2026-02-16T02:01:07.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:01:07.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:01:07.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:01:07.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:01:07.475 [DEBUG] [Thread-215141] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:01:17.938 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:19.070 [DEBUG] [Thread-215143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:34.122 [DEBUG] [Thread-215144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:35.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:35.353 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:36.581 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:37.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:01:37.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:01:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:01:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 1, 20), 8.48, 56.57, 0.0, 16.76, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:01:39.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:01:20
2026-02-16T02:01:39.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:01:39.880 [DEBUG] [Thread-215145] [transport.py] [_log()] starting thread (client mode): 0xa2d13460
2026-02-16T02:01:39.880 [DEBUG] [Thread-215145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:01:39.900 [DEBUG] [Thread-215145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:01:39.900 [INFO] [Thread-215145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] client lang: <none>
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] server lang: <none>
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] kex follows: False
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:01:39.903 [DEBUG] [Thread-215145] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:01:39.904 [DEBUG] [Thread-215145] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:01:39.904 [DEBUG] [Thread-215145] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:01:39.904 [DEBUG] [Thread-215145] [transport.py] [_log()] Compression: none
2026-02-16T02:01:39.904 [DEBUG] [Thread-215145] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:01:39.921 [DEBUG] [Thread-215145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:01:39.921 [DEBUG] [Thread-215145] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:01:39.922 [DEBUG] [Thread-215145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:01:39.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:01:39.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:01:39.924 [DEBUG] [Thread-215145] [transport.py] [_log()] userauth is OK
2026-02-16T02:01:39.924 [DEBUG] [Thread-215145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:01:39.924 [DEBUG] [Thread-215145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:01:39.924 [DEBUG] [Thread-215145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:01:39.925 [DEBUG] [Thread-215145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:01:39.949 [INFO] [Thread-215145] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:01:39.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:01:40.598 [DEBUG] [Thread-215145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:01:40.598 [DEBUG] [Thread-215145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:01:40.599 [DEBUG] [Thread-215145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:01:40.640 [DEBUG] [Thread-215145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:01:40.640 [DEBUG] [Thread-215145] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:01:40.644 [DEBUG] [Thread-215145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:01:40.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:01:40.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:01:40.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:01:40.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:01:40.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:01:40.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:01:40.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:01:40.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:01:40.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:01:40.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.000794 -999.00  +13.30  16.95     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.2 16.9 146.4 19.8 13.7 -22.7 13.6 -21.8 13.2 -20.6 13.6 -21.8
2026-02-16T02:01:40.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:01:40.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:01:40.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.000794
2026-02-16T02:01:40.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:01:40.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:01:40.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:01:40.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:01:40.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:01:40.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:01:20', tmtdew=8.48, humidity=56.57, cloud=0.0, wind=16.76, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:01:20', seeing=2.37, atlas_timestamp='2026-02-16T00:01:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-15T23:59:00')
2026-02-16T02:01:40.670 [DEBUG] [Thread-215145] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:01:40.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:01:40.765 [DEBUG] [Thread-215148] [transport.py] [_log()] starting thread (client mode): 0xa81d7760
2026-02-16T02:01:40.766 [DEBUG] [Thread-215148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:01:40.780 [DEBUG] [Thread-215148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:01:40.780 [INFO] [Thread-215148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:01:40.788 [DEBUG] [Thread-215148] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] client lang: <none>
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] server lang: <none>
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] kex follows: False
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] Compression: none
2026-02-16T02:01:40.789 [DEBUG] [Thread-215148] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:01:40.845 [DEBUG] [Thread-215148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:01:40.845 [DEBUG] [Thread-215148] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:01:40.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:01:40.846 [DEBUG] [Thread-215148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:01:40.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:01:40.901 [DEBUG] [Thread-215148] [transport.py] [_log()] userauth is OK
2026-02-16T02:01:40.901 [DEBUG] [Thread-215148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:01:40.902 [DEBUG] [Thread-215148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:01:40.902 [DEBUG] [Thread-215148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:01:40.902 [DEBUG] [Thread-215148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:01:40.920 [INFO] [Thread-215148] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:01:40.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:01:40.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:01:41.750 [DEBUG] [Thread-215148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:01:41.750 [DEBUG] [Thread-215148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:01:41.798 [DEBUG] [Thread-215148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:01:41.799 [DEBUG] [Thread-215148] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:01:41.808 [DEBUG] [Thread-215148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:01:41.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:01:41.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:01:41.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:01:41.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:01:41.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:01:41.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:01:41.845 [DEBUG] [Thread-215148] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:01:44.747 [DEBUG] [Thread-215150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:49.156 [DEBUG] [Thread-215151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:01:55.261 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:04.209 [DEBUG] [Thread-215152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:11.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:02:11.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:02:11.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:02:13.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 1, 55), 8.54, 56.34, 0.0, 18.92, 13.38, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:02:13.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:01:55
2026-02-16T02:02:14.047 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:14.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:02:14.240 [DEBUG] [Thread-215153] [transport.py] [_log()] starting thread (client mode): 0xa2dea5c0
2026-02-16T02:02:14.240 [DEBUG] [Thread-215153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:02:14.260 [DEBUG] [Thread-215153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:02:14.260 [INFO] [Thread-215153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:02:14.263 [DEBUG] [Thread-215153] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:02:14.263 [DEBUG] [Thread-215153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] client lang: <none>
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] server lang: <none>
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] kex follows: False
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:02:14.264 [DEBUG] [Thread-215153] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:02:14.265 [DEBUG] [Thread-215153] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:02:14.265 [DEBUG] [Thread-215153] [transport.py] [_log()] Compression: none
2026-02-16T02:02:14.265 [DEBUG] [Thread-215153] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:02:14.285 [DEBUG] [Thread-215153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:02:14.285 [DEBUG] [Thread-215153] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:02:14.286 [DEBUG] [Thread-215153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:02:14.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:02:14.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:02:14.287 [DEBUG] [Thread-215153] [transport.py] [_log()] userauth is OK
2026-02-16T02:02:14.288 [DEBUG] [Thread-215153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:02:14.288 [DEBUG] [Thread-215153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:02:14.288 [DEBUG] [Thread-215153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:02:14.288 [DEBUG] [Thread-215153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:02:14.308 [INFO] [Thread-215153] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:02:14.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:02:14.938 [DEBUG] [Thread-215153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:02:14.938 [DEBUG] [Thread-215153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:02:14.939 [DEBUG] [Thread-215153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:02:14.979 [DEBUG] [Thread-215153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:02:14.980 [DEBUG] [Thread-215153] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:02:14.983 [DEBUG] [Thread-215153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:02:14.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:02:14.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:02:14.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:02:15.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:02:15.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:02:15.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:02:15.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:02:15.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:02:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:02:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.001141 -999.00  +13.30  12.65     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.8 12.7 144.8 16.1 13.7 -22.9 13.6 -21.9 13.3 -20.7 13.6 -21.8
2026-02-16T02:02:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:02:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:02:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.001141
2026-02-16T02:02:15.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:02:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:02:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:02:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:02:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:02:15.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:01:55', tmtdew=8.54, humidity=56.34, cloud=0.0, wind=18.92, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:01:55', seeing=1.79, atlas_timestamp='2026-02-16T00:01:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-15T23:59:00')
2026-02-16T02:02:15.011 [DEBUG] [Thread-215153] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:02:15.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:02:15.111 [DEBUG] [Thread-215156] [transport.py] [_log()] starting thread (client mode): 0xa57b3520
2026-02-16T02:02:15.111 [DEBUG] [Thread-215156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:02:15.125 [DEBUG] [Thread-215156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:02:15.126 [INFO] [Thread-215156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:02:15.133 [DEBUG] [Thread-215156] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:02:15.133 [DEBUG] [Thread-215156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:02:15.133 [DEBUG] [Thread-215156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:02:15.133 [DEBUG] [Thread-215156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:15.133 [DEBUG] [Thread-215156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] client lang: <none>
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] server lang: <none>
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] kex follows: False
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:02:15.134 [DEBUG] [Thread-215156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:02:15.135 [DEBUG] [Thread-215156] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:02:15.135 [DEBUG] [Thread-215156] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:02:15.135 [DEBUG] [Thread-215156] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:02:15.135 [DEBUG] [Thread-215156] [transport.py] [_log()] Compression: none
2026-02-16T02:02:15.135 [DEBUG] [Thread-215156] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:02:15.193 [DEBUG] [Thread-215156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:02:15.193 [DEBUG] [Thread-215156] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:02:15.194 [DEBUG] [Thread-215156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:02:15.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:02:15.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:02:15.248 [DEBUG] [Thread-215156] [transport.py] [_log()] userauth is OK
2026-02-16T02:02:15.248 [DEBUG] [Thread-215156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:02:15.248 [DEBUG] [Thread-215156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:02:15.248 [DEBUG] [Thread-215156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:02:15.249 [DEBUG] [Thread-215156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:02:15.266 [INFO] [Thread-215156] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:02:15.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:02:15.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:02:16.085 [DEBUG] [Thread-215156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:02:16.085 [DEBUG] [Thread-215156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:02:16.133 [DEBUG] [Thread-215156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:02:16.134 [DEBUG] [Thread-215156] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:02:16.143 [DEBUG] [Thread-215156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:02:16.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:02:16.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:02: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
2026-02-16T02:02:16.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:02:16.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:02:16.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:02:16.180 [DEBUG] [Thread-215156] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:02:19.246 [DEBUG] [Thread-215158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:32.705 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:34.310 [DEBUG] [Thread-215159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:35.552 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:35.554 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:44.805 [DEBUG] [Thread-215160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:46.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:02:46.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:02:46.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:02:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 2, 30), 8.59, 56.15, 0.0, 18.03, 13.42, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:02:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:02:30
2026-02-16T02:02:48.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:02:48.779 [DEBUG] [Thread-215161] [transport.py] [_log()] starting thread (client mode): 0xa81d53f0
2026-02-16T02:02:48.779 [DEBUG] [Thread-215161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:02:48.801 [DEBUG] [Thread-215161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:02:48.801 [INFO] [Thread-215161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:48.804 [DEBUG] [Thread-215161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] client lang: <none>
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] server lang: <none>
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] kex follows: False
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] Compression: none
2026-02-16T02:02:48.805 [DEBUG] [Thread-215161] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:02:48.825 [DEBUG] [Thread-215161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:02:48.826 [DEBUG] [Thread-215161] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:02:48.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:02:48.827 [DEBUG] [Thread-215161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:02:48.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:02:48.829 [DEBUG] [Thread-215161] [transport.py] [_log()] userauth is OK
2026-02-16T02:02:48.829 [DEBUG] [Thread-215161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:02:48.829 [DEBUG] [Thread-215161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:02:48.829 [DEBUG] [Thread-215161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:02:48.829 [DEBUG] [Thread-215161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:02:48.854 [INFO] [Thread-215161] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:02:48.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:02:49.352 [DEBUG] [Thread-215163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:02:49.456 [DEBUG] [Thread-215161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:02:49.456 [DEBUG] [Thread-215161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:02:49.457 [DEBUG] [Thread-215161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:02:49.497 [DEBUG] [Thread-215161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:02:49.498 [DEBUG] [Thread-215161] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:02:49.501 [DEBUG] [Thread-215161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:02:49.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:02:49.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:02:49.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:02:49.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:02:49.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:02:49.524 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:02:49.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:02:49.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:02:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:02:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.001488 -999.00  +13.40  15.32     60   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.9 15.3 139.0 19.4 13.7 -22.6 13.6 -21.8 13.3 -20.4 13.6 -22.0
2026-02-16T02:02:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:02:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:02:49.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.001488
2026-02-16T02:02:49.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:02:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:02:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:02:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:02:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:02:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:02:30', tmtdew=8.59, humidity=56.15, cloud=0.0, wind=18.03, temperature=13.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:02:30', seeing=1.79, atlas_timestamp='2026-02-16T00:02:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-15T23:59:00')
2026-02-16T02:02:49.528 [DEBUG] [Thread-215161] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:02:49.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:02:49.625 [DEBUG] [Thread-215165] [transport.py] [_log()] starting thread (client mode): 0xa2de8970
2026-02-16T02:02:49.625 [DEBUG] [Thread-215165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:02:49.640 [DEBUG] [Thread-215165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:02:49.640 [INFO] [Thread-215165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:02:49.647 [DEBUG] [Thread-215165] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] client lang: <none>
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] server lang: <none>
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] kex follows: False
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:02:49.648 [DEBUG] [Thread-215165] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:02:49.649 [DEBUG] [Thread-215165] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:02:49.649 [DEBUG] [Thread-215165] [transport.py] [_log()] Compression: none
2026-02-16T02:02:49.649 [DEBUG] [Thread-215165] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:02:49.709 [DEBUG] [Thread-215165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:02:49.710 [DEBUG] [Thread-215165] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:02:49.710 [DEBUG] [Thread-215165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:02:49.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:02:49.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:02:49.768 [DEBUG] [Thread-215165] [transport.py] [_log()] userauth is OK
2026-02-16T02:02:49.769 [DEBUG] [Thread-215165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:02:49.769 [DEBUG] [Thread-215165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:02:49.769 [DEBUG] [Thread-215165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:02:49.769 [DEBUG] [Thread-215165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:02:49.790 [INFO] [Thread-215165] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:02:49.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:02:49.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:02:50.621 [DEBUG] [Thread-215165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:02:50.622 [DEBUG] [Thread-215165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:02:50.669 [DEBUG] [Thread-215165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:02:50.670 [DEBUG] [Thread-215165] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:02:50.679 [DEBUG] [Thread-215165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:02:50.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:02:50.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:02:50.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:02:50.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:02:50.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:02:50.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:02:50.716 [DEBUG] [Thread-215165] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:02:51.365 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:04.386 [DEBUG] [Thread-215167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:10.182 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:19.441 [DEBUG] [Thread-215168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:20.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:03:20.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:03:20.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:03:22.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 3, 5), 8.58, 56.19, 0.0, 18.83, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:03:22.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:03:05
2026-02-16T02:03:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:03:23.093 [DEBUG] [Thread-215169] [transport.py] [_log()] starting thread (client mode): 0xa2de8e20
2026-02-16T02:03:23.093 [DEBUG] [Thread-215169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:03:23.112 [DEBUG] [Thread-215169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:03:23.112 [INFO] [Thread-215169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:03:23.115 [DEBUG] [Thread-215169] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] client lang: <none>
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] server lang: <none>
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] kex follows: False
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:03:23.116 [DEBUG] [Thread-215169] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:03:23.117 [DEBUG] [Thread-215169] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:03:23.117 [DEBUG] [Thread-215169] [transport.py] [_log()] Compression: none
2026-02-16T02:03:23.117 [DEBUG] [Thread-215169] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:03:23.135 [DEBUG] [Thread-215169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:03:23.136 [DEBUG] [Thread-215169] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:03:23.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:03:23.137 [DEBUG] [Thread-215169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:03:23.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:03:23.139 [DEBUG] [Thread-215169] [transport.py] [_log()] userauth is OK
2026-02-16T02:03:23.139 [DEBUG] [Thread-215169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:03:23.140 [DEBUG] [Thread-215169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:03:23.140 [DEBUG] [Thread-215169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:03:23.140 [DEBUG] [Thread-215169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:03:23.163 [INFO] [Thread-215169] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:03:23.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:03:23.793 [DEBUG] [Thread-215169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:03:23.793 [DEBUG] [Thread-215169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:03:23.793 [DEBUG] [Thread-215169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:03:23.833 [DEBUG] [Thread-215169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:03:23.834 [DEBUG] [Thread-215169] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:03:23.837 [DEBUG] [Thread-215169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:03:23.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:03:23.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:03:23.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:03:23.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:03:23.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:03:23.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:03:23.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:03:23.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:03:23.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:03:23.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.001835 -999.00  +13.50  13.88     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.0 13.9 151.2 20.0 13.7 -22.8 13.6 -21.8 13.3 -20.6 13.6 -21.6
2026-02-16T02:03:23.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:03:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:03:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.001835
2026-02-16T02:03:23.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:03:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:03:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:03:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:03:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:03:23.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:03:05', tmtdew=8.58, humidity=56.19, cloud=0.0, wind=18.83, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:03:06', seeing=2.24, atlas_timestamp='2026-02-16T00:02:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-15T23:59:00')
2026-02-16T02:03:23.865 [DEBUG] [Thread-215169] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:03:23.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:03:23.961 [DEBUG] [Thread-215172] [transport.py] [_log()] starting thread (client mode): 0xa2deada0
2026-02-16T02:03:23.961 [DEBUG] [Thread-215172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:03:23.975 [DEBUG] [Thread-215172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:03:23.975 [INFO] [Thread-215172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] client lang: <none>
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] server lang: <none>
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] kex follows: False
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:03:23.983 [DEBUG] [Thread-215172] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:03:23.984 [DEBUG] [Thread-215172] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:03:23.984 [DEBUG] [Thread-215172] [transport.py] [_log()] Compression: none
2026-02-16T02:03:23.984 [DEBUG] [Thread-215172] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:03:24.047 [DEBUG] [Thread-215172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:03:24.048 [DEBUG] [Thread-215172] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:03:24.048 [DEBUG] [Thread-215172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:03:24.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:03:24.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:03:24.103 [DEBUG] [Thread-215172] [transport.py] [_log()] userauth is OK
2026-02-16T02:03:24.103 [DEBUG] [Thread-215172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:03:24.103 [DEBUG] [Thread-215172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:03:24.103 [DEBUG] [Thread-215172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:03:24.104 [DEBUG] [Thread-215172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:03:24.122 [INFO] [Thread-215172] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:03:24.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:03:24.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:03:24.961 [DEBUG] [Thread-215172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:03:24.961 [DEBUG] [Thread-215172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:03:25.009 [DEBUG] [Thread-215172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:03:25.009 [DEBUG] [Thread-215172] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:03:25.018 [DEBUG] [Thread-215172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:03:25.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:03:25.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:03:25.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:03:25.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:03:25.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:03:25.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:03:25.052 [DEBUG] [Thread-215172] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:03:29.090 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:34.476 [DEBUG] [Thread-215174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:35.758 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:35.759 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:44.875 [DEBUG] [Thread-215175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:47.753 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:49.527 [DEBUG] [Thread-215176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:03:55.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:03:55.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:03:55.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:03:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 3, 40), 8.77, 55.38, 0.0, 19.83, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:03:57.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:03:40
2026-02-16T02:03:57.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:03:57.772 [DEBUG] [Thread-215177] [transport.py] [_log()] starting thread (client mode): 0xa2deabf0
2026-02-16T02:03:57.773 [DEBUG] [Thread-215177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:03:57.793 [DEBUG] [Thread-215177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:03:57.793 [INFO] [Thread-215177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:03:57.796 [DEBUG] [Thread-215177] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:03:57.796 [DEBUG] [Thread-215177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] client lang: <none>
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] server lang: <none>
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] kex follows: False
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] Compression: none
2026-02-16T02:03:57.797 [DEBUG] [Thread-215177] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:03:57.814 [DEBUG] [Thread-215177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:03:57.815 [DEBUG] [Thread-215177] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:03:57.816 [DEBUG] [Thread-215177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:03:57.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:03:57.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:03:57.817 [DEBUG] [Thread-215177] [transport.py] [_log()] userauth is OK
2026-02-16T02:03:57.818 [DEBUG] [Thread-215177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:03:57.818 [DEBUG] [Thread-215177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:03:57.818 [DEBUG] [Thread-215177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:03:57.818 [DEBUG] [Thread-215177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:03:57.842 [INFO] [Thread-215177] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:03:57.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:03:58.595 [DEBUG] [Thread-215177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:03:58.595 [DEBUG] [Thread-215177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:03:58.595 [DEBUG] [Thread-215177] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:03:58.637 [DEBUG] [Thread-215177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:03:58.637 [DEBUG] [Thread-215177] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:03:58.640 [DEBUG] [Thread-215177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:03:58.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:03:58.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:03:58.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:03:58.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:03:58.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:03:58.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:03:58.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.002183 -999.00  +13.50  16.06     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.2 16.1 135.8 18.7 13.7 -22.8 13.6 -21.7 13.4 -20.6 13.6 -21.9
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.002183
2026-02-16T02:03:58.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:03:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:03:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:03:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:03:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:03:58.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:03:40', tmtdew=8.77, humidity=55.38, cloud=0.0, wind=19.83, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:03:41', seeing=2.06, atlas_timestamp='2026-02-16T00:03:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-16T00:01:00')
2026-02-16T02:03:58.663 [DEBUG] [Thread-215177] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:03:58.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:03:58.749 [DEBUG] [Thread-215180] [transport.py] [_log()] starting thread (client mode): 0xa57e0940
2026-02-16T02:03:58.749 [DEBUG] [Thread-215180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:03:58.764 [DEBUG] [Thread-215180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:03:58.764 [INFO] [Thread-215180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] client lang: <none>
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] server lang: <none>
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] kex follows: False
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] Compression: none
2026-02-16T02:03:58.771 [DEBUG] [Thread-215180] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:03:58.828 [DEBUG] [Thread-215180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:03:58.829 [DEBUG] [Thread-215180] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:03:58.829 [DEBUG] [Thread-215180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:03:58.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:03:58.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:03:58.886 [DEBUG] [Thread-215180] [transport.py] [_log()] userauth is OK
2026-02-16T02:03:58.886 [DEBUG] [Thread-215180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:03:58.886 [DEBUG] [Thread-215180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:03:58.886 [DEBUG] [Thread-215180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:03:58.886 [DEBUG] [Thread-215180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:03:58.899 [INFO] [Thread-215180] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:03:58.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:03:58.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:03:59.702 [DEBUG] [Thread-215180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:03:59.702 [DEBUG] [Thread-215180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:03:59.750 [DEBUG] [Thread-215180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:03:59.751 [DEBUG] [Thread-215180] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:03:59.760 [DEBUG] [Thread-215180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:03:59.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:03:59.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:03:59.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:03:59.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:03:59.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:03:59.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:03:59.801 [DEBUG] [Thread-215180] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:04:04.567 [DEBUG] [Thread-215182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:06.428 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:19.619 [DEBUG] [Thread-215183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:25.084 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:29.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:04:29.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:04:29.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:04:31.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 4, 16), 8.68, 55.52, 0.0, 17.86, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:04:31.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:04:16
2026-02-16T02:04:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:04:32.232 [DEBUG] [Thread-215184] [transport.py] [_log()] starting thread (client mode): 0xa57e3040
2026-02-16T02:04:32.232 [DEBUG] [Thread-215184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:04:32.253 [DEBUG] [Thread-215184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:04:32.253 [INFO] [Thread-215184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] client lang: <none>
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] server lang: <none>
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] kex follows: False
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] Compression: none
2026-02-16T02:04:32.255 [DEBUG] [Thread-215184] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:04:32.263 [DEBUG] [Thread-215184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:04:32.263 [DEBUG] [Thread-215184] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:04:32.263 [DEBUG] [Thread-215184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:04:32.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:04:32.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:04:32.264 [DEBUG] [Thread-215184] [transport.py] [_log()] userauth is OK
2026-02-16T02:04:32.264 [DEBUG] [Thread-215184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:04:32.264 [DEBUG] [Thread-215184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:04:32.264 [DEBUG] [Thread-215184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:04:32.264 [DEBUG] [Thread-215184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:04:32.277 [INFO] [Thread-215184] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:04:32.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:04:32.901 [DEBUG] [Thread-215184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:04:32.901 [DEBUG] [Thread-215184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:04:32.902 [DEBUG] [Thread-215184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:04:32.942 [DEBUG] [Thread-215184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:04:32.942 [DEBUG] [Thread-215184] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:04:32.945 [DEBUG] [Thread-215184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:04:32.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:04:32.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:04:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:04:32.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:04:32.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:04:32.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:04:32.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:04:32.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:04:32.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:04:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.002877 -999.00  +13.50  12.68     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.2 12.7 142.2 18.1 13.7 -22.8 13.6 -21.8 13.4 -20.6 13.6 -21.8
2026-02-16T02:04:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:04:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:04:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.002877
2026-02-16T02:04:32.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:04:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:04:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:04:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:04:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:04:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:04:16', tmtdew=8.68, humidity=55.52, cloud=0.0, wind=17.86, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:04:16', seeing=2.58, atlas_timestamp='2026-02-16T00:04:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-16T00:01:00')
2026-02-16T02:04:32.967 [DEBUG] [Thread-215184] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:04:33.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:04:33.073 [DEBUG] [Thread-215187] [transport.py] [_log()] starting thread (client mode): 0xa57e0190
2026-02-16T02:04:33.073 [DEBUG] [Thread-215187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:04:33.086 [DEBUG] [Thread-215187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:04:33.087 [INFO] [Thread-215187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] client lang: <none>
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] server lang: <none>
2026-02-16T02:04:33.094 [DEBUG] [Thread-215187] [transport.py] [_log()] kex follows: False
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] Compression: none
2026-02-16T02:04:33.095 [DEBUG] [Thread-215187] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:04:33.154 [DEBUG] [Thread-215187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:04:33.155 [DEBUG] [Thread-215187] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:04:33.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:04:33.156 [DEBUG] [Thread-215187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:04:33.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:04:33.209 [DEBUG] [Thread-215187] [transport.py] [_log()] userauth is OK
2026-02-16T02:04:33.210 [DEBUG] [Thread-215187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:04:33.210 [DEBUG] [Thread-215187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:04:33.210 [DEBUG] [Thread-215187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:04:33.210 [DEBUG] [Thread-215187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:04:33.231 [INFO] [Thread-215187] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:04:33.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:04:33.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:04:34.068 [DEBUG] [Thread-215187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:04:34.068 [DEBUG] [Thread-215187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:04:34.116 [DEBUG] [Thread-215187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:04:34.116 [DEBUG] [Thread-215187] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:04:34.126 [DEBUG] [Thread-215187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:04:34.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:04:34.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:04:34.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:04:34.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:04:34.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:04:34.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:04:34.162 [DEBUG] [Thread-215187] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:04:34.654 [DEBUG] [Thread-215189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:35.962 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:35.963 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:44.034 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:44.932 [DEBUG] [Thread-215190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:04:49.706 [DEBUG] [Thread-215191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:03.001 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:05:04.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:05:04.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:05:04.743 [DEBUG] [Thread-215192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 4, 51), 8.78, 55.54, 0.0, 17.75, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:05:06.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:04:51
2026-02-16T02:05:06.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:05:06.783 [DEBUG] [Thread-215193] [transport.py] [_log()] starting thread (client mode): 0xa57e1d20
2026-02-16T02:05:06.783 [DEBUG] [Thread-215193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:05:06.802 [DEBUG] [Thread-215193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:05:06.802 [INFO] [Thread-215193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] client lang: <none>
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] server lang: <none>
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] kex follows: False
2026-02-16T02:05:06.805 [DEBUG] [Thread-215193] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:05:06.806 [DEBUG] [Thread-215193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:05:06.806 [DEBUG] [Thread-215193] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:05:06.806 [DEBUG] [Thread-215193] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:05:06.806 [DEBUG] [Thread-215193] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:05:06.806 [DEBUG] [Thread-215193] [transport.py] [_log()] Compression: none
2026-02-16T02:05:06.806 [DEBUG] [Thread-215193] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:05:06.813 [DEBUG] [Thread-215193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:05:06.813 [DEBUG] [Thread-215193] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:05:06.814 [DEBUG] [Thread-215193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:05:06.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:05:06.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:05:06.815 [DEBUG] [Thread-215193] [transport.py] [_log()] userauth is OK
2026-02-16T02:05:06.815 [DEBUG] [Thread-215193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:05:06.815 [DEBUG] [Thread-215193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:05:06.815 [DEBUG] [Thread-215193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:05:06.815 [DEBUG] [Thread-215193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:05:06.826 [INFO] [Thread-215193] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:05:06.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:05:15.947 [DEBUG] [Thread-215193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:05:15.947 [DEBUG] [Thread-215193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:05:15.948 [DEBUG] [Thread-215193] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:05:15.988 [DEBUG] [Thread-215193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:05:15.988 [DEBUG] [Thread-215193] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:05:15.991 [DEBUG] [Thread-215193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:05:16.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:05:16.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:05:16.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:05:16.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:05:16.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:05:16.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:05:16.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:05:16.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:05:16.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:05:16.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.003225 -999.00  +13.50  10.97     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.1 11.0 140.6 20.3 13.7 -22.8 13.6 -21.8 13.3 -20.5 13.6 -21.8
2026-02-16T02:05:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:05:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:05:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.003225
2026-02-16T02:05:16.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:05:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:05:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:05:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:05:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:05:16.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:04:51', tmtdew=8.78, humidity=55.54, cloud=0.0, wind=17.75, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:04:52', seeing=2.7, atlas_timestamp='2026-02-16T00:04:38.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-16T00:01:00')
2026-02-16T02:05:16.092 [DEBUG] [Thread-215193] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:05:16.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:05:16.193 [DEBUG] [Thread-215196] [transport.py] [_log()] starting thread (client mode): 0xa2d129b0
2026-02-16T02:05:16.193 [DEBUG] [Thread-215196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:05:16.207 [DEBUG] [Thread-215196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:05:16.207 [INFO] [Thread-215196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] client lang: <none>
2026-02-16T02:05:16.215 [DEBUG] [Thread-215196] [transport.py] [_log()] server lang: <none>
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] kex follows: False
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] Compression: none
2026-02-16T02:05:16.216 [DEBUG] [Thread-215196] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:05:16.273 [DEBUG] [Thread-215196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:05:16.274 [DEBUG] [Thread-215196] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:05:16.274 [DEBUG] [Thread-215196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:05:16.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:05:16.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:05:16.330 [DEBUG] [Thread-215196] [transport.py] [_log()] userauth is OK
2026-02-16T02:05:16.330 [DEBUG] [Thread-215196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:05:16.330 [DEBUG] [Thread-215196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:05:16.330 [DEBUG] [Thread-215196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:05:16.330 [DEBUG] [Thread-215196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:05:16.349 [INFO] [Thread-215196] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:05:16.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:05:16.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:05:17.170 [DEBUG] [Thread-215196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:05:17.170 [DEBUG] [Thread-215196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:05:17.220 [DEBUG] [Thread-215196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:05:17.220 [DEBUG] [Thread-215196] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:05:17.233 [DEBUG] [Thread-215196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:05:17.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:05:17.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:05: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-02-16T02:05:17.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:05:17.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:05:17.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:05:17.272 [DEBUG] [Thread-215196] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:05:19.778 [DEBUG] [Thread-215198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:21.952 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:34.835 [DEBUG] [Thread-215199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:36.170 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:36.171 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:40.601 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:44.998 [DEBUG] [Thread-215200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:47.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:05:47.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:05: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
2026-02-16T02:05:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 5, 26), 8.77, 55.54, 0.0, 17.86, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:05:49.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:05:26
2026-02-16T02:05:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:05:49.803 [DEBUG] [Thread-215201] [transport.py] [_log()] starting thread (client mode): 0xa2de9450
2026-02-16T02:05:49.803 [DEBUG] [Thread-215201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:05:49.823 [DEBUG] [Thread-215201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:05:49.823 [INFO] [Thread-215201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:05:49.826 [DEBUG] [Thread-215201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:05:49.826 [DEBUG] [Thread-215201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:05:49.826 [DEBUG] [Thread-215201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:05:49.826 [DEBUG] [Thread-215201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:49.826 [DEBUG] [Thread-215201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:49.826 [DEBUG] [Thread-215201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] client lang: <none>
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] server lang: <none>
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] kex follows: False
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] Compression: none
2026-02-16T02:05:49.827 [DEBUG] [Thread-215201] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:05:49.835 [DEBUG] [Thread-215201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:05:49.835 [DEBUG] [Thread-215201] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:05:49.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:05:49.836 [DEBUG] [Thread-215201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:05:49.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:05:49.838 [DEBUG] [Thread-215201] [transport.py] [_log()] userauth is OK
2026-02-16T02:05:49.838 [DEBUG] [Thread-215201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:05:49.838 [DEBUG] [Thread-215201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:05:49.838 [DEBUG] [Thread-215201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:05:49.838 [DEBUG] [Thread-215201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:05:49.857 [INFO] [Thread-215201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:05:49.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:05:49.872 [DEBUG] [Thread-215203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:05:50.527 [DEBUG] [Thread-215201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:05:50.528 [DEBUG] [Thread-215201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:05:50.528 [DEBUG] [Thread-215201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:05:50.568 [DEBUG] [Thread-215201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:05:50.569 [DEBUG] [Thread-215201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:05:50.572 [DEBUG] [Thread-215201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:05:50.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:05:50.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:05:50.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:05:50.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:05:50.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:05:50.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:05:50.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:05:50.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:05:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:05:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.003571 -999.00  +13.40  12.27     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.9 12.3 143.0 16.4 13.7 -23.0 13.6 -21.9 13.3 -20.8 13.6 -21.9
2026-02-16T02:05:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:05:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:05:50.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.003571
2026-02-16T02:05:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:05:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:05:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:05:50.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:05:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:05:50.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:05:26', tmtdew=8.77, humidity=55.54, cloud=0.0, wind=17.86, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:05:27', seeing=2.41, atlas_timestamp='2026-02-16T00:05:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-16T00:01:00')
2026-02-16T02:05:50.598 [DEBUG] [Thread-215201] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:05:50.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:05:50.695 [DEBUG] [Thread-215205] [transport.py] [_log()] starting thread (client mode): 0xa2deb2b0
2026-02-16T02:05:50.696 [DEBUG] [Thread-215205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:05:50.711 [DEBUG] [Thread-215205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:05:50.711 [INFO] [Thread-215205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:05:50.719 [DEBUG] [Thread-215205] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:05:50.719 [DEBUG] [Thread-215205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] client lang: <none>
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] server lang: <none>
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] kex follows: False
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:05:50.720 [DEBUG] [Thread-215205] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:05:50.721 [DEBUG] [Thread-215205] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:05:50.721 [DEBUG] [Thread-215205] [transport.py] [_log()] Compression: none
2026-02-16T02:05:50.721 [DEBUG] [Thread-215205] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:05:50.778 [DEBUG] [Thread-215205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:05:50.778 [DEBUG] [Thread-215205] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:05:50.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:05:50.780 [DEBUG] [Thread-215205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:05:50.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:05:50.837 [DEBUG] [Thread-215205] [transport.py] [_log()] userauth is OK
2026-02-16T02:05:50.838 [DEBUG] [Thread-215205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:05:50.838 [DEBUG] [Thread-215205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:05:50.838 [DEBUG] [Thread-215205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:05:50.838 [DEBUG] [Thread-215205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:05:50.857 [INFO] [Thread-215205] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:05:50.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:05:50.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:05:51.705 [DEBUG] [Thread-215205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:05:51.705 [DEBUG] [Thread-215205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:05:51.753 [DEBUG] [Thread-215205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:05:51.753 [DEBUG] [Thread-215205] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:05:51.763 [DEBUG] [Thread-215205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:05:51.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:05:51.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:05:51.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:05:51.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:05:51.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:05:51.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:05:51.800 [DEBUG] [Thread-215205] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:05:59.240 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:04.906 [DEBUG] [Thread-215207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:17.896 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:19.956 [DEBUG] [Thread-215208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:21.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:06:21.816 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:06:21.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:06:23.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 6, 1), 8.79, 55.49, 0.0, 17.82, 13.52, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:06:23.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:06:01
2026-02-16T02:06:24.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:06:24.219 [DEBUG] [Thread-215209] [transport.py] [_log()] starting thread (client mode): 0xa2deb640
2026-02-16T02:06:24.220 [DEBUG] [Thread-215209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:06:24.240 [DEBUG] [Thread-215209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:06:24.240 [INFO] [Thread-215209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] client lang: <none>
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] server lang: <none>
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] kex follows: False
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] Compression: none
2026-02-16T02:06:24.243 [DEBUG] [Thread-215209] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:06:24.260 [DEBUG] [Thread-215209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:06:24.260 [DEBUG] [Thread-215209] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:06:24.261 [DEBUG] [Thread-215209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:06:24.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:06:24.261 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:06:24.262 [DEBUG] [Thread-215209] [transport.py] [_log()] userauth is OK
2026-02-16T02:06:24.262 [DEBUG] [Thread-215209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:06:24.262 [DEBUG] [Thread-215209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:06:24.263 [DEBUG] [Thread-215209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:06:24.263 [DEBUG] [Thread-215209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:06:24.278 [INFO] [Thread-215209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:06:24.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:06:24.928 [DEBUG] [Thread-215209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:06:24.928 [DEBUG] [Thread-215209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:06:24.928 [DEBUG] [Thread-215209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:06:24.969 [DEBUG] [Thread-215209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:06:24.969 [DEBUG] [Thread-215209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:06:24.972 [DEBUG] [Thread-215209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:06:24.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:06:24.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:06:24.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:06:24.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:06:24.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:06:24.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:06:24.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:06:24.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:06:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:06:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.003919 -999.00  +13.40  14.14     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.1 14.1 155.8 19.4 13.7 -22.7 13.6 -21.6 13.4 -20.7 13.7 -21.7
2026-02-16T02:06:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:06:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:06:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.003919
2026-02-16T02:06:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:06:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:06:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:06:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:06:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:06:24.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:06:01', tmtdew=8.79, humidity=55.49, cloud=0.0, wind=17.82, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:06:02', seeing=2.12, atlas_timestamp='2026-02-16T00:05:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02275000000000027, 0.02224999999999966, 0.0017499999999994742, -0.05250000000000021, -0.0015000000000000568, 0.015249999999999986, 0.006000000000000227, 0.030250000000000554, 0.013499999999998735, 0.0129999999999999, -0.04625000000000057, -0.038000000000000256, 0.012000000000000455, 0.034750000000000725, 0.023499999999998522, 0.03500000000000014, 0.04625000000000057, -0.029500000000000526, 0.03149999999999942, 0.00024999999999941735, 0.03599999999999959, 0.026749999999998053, -0.0007500000000000284, 0.01025000000000098, 0.03999999999999915, -0.03599999999999959, 0.03324999999999889, -0.01750000000000007, 0.06400000000000006, 0.053000000000000824, 0.10300000000000153, 0.040500000000001535, 0.00024999999999941735], zp_timestamp='2026-02-16T00:01:00')
2026-02-16T02:06:24.996 [DEBUG] [Thread-215209] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:06:25.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:06:25.090 [DEBUG] [Thread-215212] [transport.py] [_log()] starting thread (client mode): 0xa81d6320
2026-02-16T02:06:25.090 [DEBUG] [Thread-215212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:06:25.104 [DEBUG] [Thread-215212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:06:25.104 [INFO] [Thread-215212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] client lang: <none>
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] server lang: <none>
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] kex follows: False
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] Compression: none
2026-02-16T02:06:25.112 [DEBUG] [Thread-215212] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:06:25.169 [DEBUG] [Thread-215212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:06:25.169 [DEBUG] [Thread-215212] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:06:25.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:06:25.170 [DEBUG] [Thread-215212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:06:25.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:06:25.224 [DEBUG] [Thread-215212] [transport.py] [_log()] userauth is OK
2026-02-16T02:06:25.224 [DEBUG] [Thread-215212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:06:25.224 [DEBUG] [Thread-215212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:06:25.224 [DEBUG] [Thread-215212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:06:25.224 [DEBUG] [Thread-215212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:06:25.243 [INFO] [Thread-215212] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:06:25.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:06:25.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:06:26.077 [DEBUG] [Thread-215212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:06:26.077 [DEBUG] [Thread-215212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:06:26.125 [DEBUG] [Thread-215212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:06:26.125 [DEBUG] [Thread-215212] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:06:26.134 [DEBUG] [Thread-215212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:06:26.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:06:26.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:06:26.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:06:26.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:06:26.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:06:26.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:06:26.168 [DEBUG] [Thread-215212] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:06:34.993 [DEBUG] [Thread-215214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:36.377 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:36.378 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:36.823 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:45.065 [DEBUG] [Thread-215215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:50.047 [DEBUG] [Thread-215216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:55.816 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:06:56.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:06:56.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:06:56.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:06:58.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 6, 37), 9.03, 54.35, 0.0, 21.31, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:06:58.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:06:37
2026-02-16T02:06:58.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:06:58.638 [DEBUG] [Thread-215217] [transport.py] [_log()] starting thread (client mode): 0xa2deb490
2026-02-16T02:06:58.638 [DEBUG] [Thread-215217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:06:58.658 [DEBUG] [Thread-215217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:06:58.658 [INFO] [Thread-215217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] client lang: <none>
2026-02-16T02:06:58.662 [DEBUG] [Thread-215217] [transport.py] [_log()] server lang: <none>
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] kex follows: False
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] Compression: none
2026-02-16T02:06:58.663 [DEBUG] [Thread-215217] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:06:58.682 [DEBUG] [Thread-215217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:06:58.682 [DEBUG] [Thread-215217] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:06:58.683 [DEBUG] [Thread-215217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:06:58.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:06:58.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:06:58.684 [DEBUG] [Thread-215217] [transport.py] [_log()] userauth is OK
2026-02-16T02:06:58.685 [DEBUG] [Thread-215217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:06:58.685 [DEBUG] [Thread-215217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:06:58.685 [DEBUG] [Thread-215217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:06:58.685 [DEBUG] [Thread-215217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:06:58.709 [INFO] [Thread-215217] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:06:58.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:06:59.373 [DEBUG] [Thread-215217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:06:59.373 [DEBUG] [Thread-215217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:06:59.373 [DEBUG] [Thread-215217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:06:59.414 [DEBUG] [Thread-215217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:06:59.415 [DEBUG] [Thread-215217] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:06:59.418 [DEBUG] [Thread-215217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:06:59.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:06:59.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:06:59.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:06:59.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:06:59.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:06:59.443 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:06:59.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:06:59.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:06:59.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:06:59.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.004266 -999.00  +13.50  17.06     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.4 17.1 136.6 20.4 13.7 -22.7 13.6 -21.7 13.3 -20.5 13.6 -21.7
2026-02-16T02:06:59.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:06:59.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:06:59.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.004266
2026-02-16T02:06:59.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:06:59.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:06:59.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:06:59.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:06:59.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:06:59.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:06:37', tmtdew=9.03, humidity=54.35, cloud=0.0, wind=21.31, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:06:37', seeing=2.18, atlas_timestamp='2026-02-16T00:06:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:05:00')
2026-02-16T02:06:59.447 [DEBUG] [Thread-215217] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:06:59.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:06:59.542 [DEBUG] [Thread-215220] [transport.py] [_log()] starting thread (client mode): 0xa2de9990
2026-02-16T02:06:59.542 [DEBUG] [Thread-215220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:06:59.563 [DEBUG] [Thread-215220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:06:59.563 [INFO] [Thread-215220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:06:59.570 [DEBUG] [Thread-215220] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] client lang: <none>
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] server lang: <none>
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] kex follows: False
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:06:59.571 [DEBUG] [Thread-215220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:06:59.572 [DEBUG] [Thread-215220] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:06:59.572 [DEBUG] [Thread-215220] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:06:59.572 [DEBUG] [Thread-215220] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:06:59.572 [DEBUG] [Thread-215220] [transport.py] [_log()] Compression: none
2026-02-16T02:06:59.572 [DEBUG] [Thread-215220] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:06:59.628 [DEBUG] [Thread-215220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:06:59.629 [DEBUG] [Thread-215220] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:06:59.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:06:59.630 [DEBUG] [Thread-215220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:06:59.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:06:59.684 [DEBUG] [Thread-215220] [transport.py] [_log()] userauth is OK
2026-02-16T02:06:59.685 [DEBUG] [Thread-215220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:06:59.685 [DEBUG] [Thread-215220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:06:59.685 [DEBUG] [Thread-215220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:06:59.685 [DEBUG] [Thread-215220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:06:59.704 [INFO] [Thread-215220] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:06:59.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:06:59.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:07:00.545 [DEBUG] [Thread-215220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:07:00.545 [DEBUG] [Thread-215220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:07:00.593 [DEBUG] [Thread-215220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:07:00.594 [DEBUG] [Thread-215220] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:07:00.603 [DEBUG] [Thread-215220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:07:00.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:07:00.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:07:00.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:07:00.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:07:00.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:07:00.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:07:00.640 [DEBUG] [Thread-215220] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:07:05.082 [DEBUG] [Thread-215222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:14.500 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:20.144 [DEBUG] [Thread-215223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:30.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:07:30.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:07:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:07:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 7, 13), 8.94, 54.59, 0.0, 19.85, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:07:32.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:07:13
2026-02-16T02:07:33.148 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:33.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:07:33.495 [DEBUG] [Thread-215224] [transport.py] [_log()] starting thread (client mode): 0xa2d12890
2026-02-16T02:07:33.495 [DEBUG] [Thread-215224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:07:33.516 [DEBUG] [Thread-215224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:07:33.516 [INFO] [Thread-215224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] client lang: <none>
2026-02-16T02:07:33.519 [DEBUG] [Thread-215224] [transport.py] [_log()] server lang: <none>
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] kex follows: False
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] Compression: none
2026-02-16T02:07:33.520 [DEBUG] [Thread-215224] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:07:33.539 [DEBUG] [Thread-215224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:07:33.540 [DEBUG] [Thread-215224] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:07:33.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:07:33.541 [DEBUG] [Thread-215224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:07:33.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:07:33.543 [DEBUG] [Thread-215224] [transport.py] [_log()] userauth is OK
2026-02-16T02:07:33.544 [DEBUG] [Thread-215224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:07:33.544 [DEBUG] [Thread-215224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:07:33.544 [DEBUG] [Thread-215224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:07:33.544 [DEBUG] [Thread-215224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:07:33.574 [INFO] [Thread-215224] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:07:33.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:07:34.224 [DEBUG] [Thread-215224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:07:34.224 [DEBUG] [Thread-215224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:07:34.225 [DEBUG] [Thread-215224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:07:34.265 [DEBUG] [Thread-215224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:07:34.266 [DEBUG] [Thread-215224] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:07:34.269 [DEBUG] [Thread-215224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:07:34.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:07:34.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:07:34.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:07:34.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:07:34.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:07:34.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:07:34.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:07:34.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:07:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:07:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.004961 -999.00  +13.40  14.84     60   +6.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.5 14.8 142.2 19.1 13.7 -22.9 13.6 -21.8 13.3 -20.7 13.7 -21.8
2026-02-16T02:07:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:07:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:07:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.004961
2026-02-16T02:07:34.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:07:34.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:07:34.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:07:34.295 [DEBUG] [Thread-215224] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:07:34.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:07:34.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:07:34.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:07:13', tmtdew=8.94, humidity=54.59, cloud=0.0, wind=19.85, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:07:13', seeing=2.02, atlas_timestamp='2026-02-16T00:07:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:05:00')
2026-02-16T02:07:34.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:07:34.389 [DEBUG] [Thread-215227] [transport.py] [_log()] starting thread (client mode): 0xa2deaef0
2026-02-16T02:07:34.390 [DEBUG] [Thread-215227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:07:34.408 [DEBUG] [Thread-215227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:07:34.409 [INFO] [Thread-215227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:07:34.416 [DEBUG] [Thread-215227] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] client lang: <none>
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] server lang: <none>
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] kex follows: False
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:07:34.417 [DEBUG] [Thread-215227] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:07:34.418 [DEBUG] [Thread-215227] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:07:34.418 [DEBUG] [Thread-215227] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:07:34.418 [DEBUG] [Thread-215227] [transport.py] [_log()] Compression: none
2026-02-16T02:07:34.418 [DEBUG] [Thread-215227] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:07:34.476 [DEBUG] [Thread-215227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:07:34.477 [DEBUG] [Thread-215227] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:07:34.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:07:34.478 [DEBUG] [Thread-215227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:07:34.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:07:34.532 [DEBUG] [Thread-215227] [transport.py] [_log()] userauth is OK
2026-02-16T02:07:34.532 [DEBUG] [Thread-215227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:07:34.532 [DEBUG] [Thread-215227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:07:34.532 [DEBUG] [Thread-215227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:07:34.533 [DEBUG] [Thread-215227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:07:34.551 [INFO] [Thread-215227] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:07:34.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:07:34.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:07:35.179 [DEBUG] [Thread-215229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:35.390 [DEBUG] [Thread-215227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:07:35.390 [DEBUG] [Thread-215227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:07:35.438 [DEBUG] [Thread-215227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:07:35.438 [DEBUG] [Thread-215227] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:07:35.446 [DEBUG] [Thread-215227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:07:35.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:07:35.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:07:35.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:07:35.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:07:35.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:07:35.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:07:35.478 [DEBUG] [Thread-215227] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:07:36.580 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:36.581 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:45.123 [DEBUG] [Thread-215230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:50.229 [DEBUG] [Thread-215231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:07:51.792 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:05.264 [DEBUG] [Thread-215232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:05.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:08:05.474 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:08:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:08:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 7, 48), 8.9, 55.07, 0.0, 18.28, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:08:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:07:48
2026-02-16T02:08:07.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:08:07.829 [DEBUG] [Thread-215233] [transport.py] [_log()] starting thread (client mode): 0xa57e24a0
2026-02-16T02:08:07.829 [DEBUG] [Thread-215233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:08:07.849 [DEBUG] [Thread-215233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:08:07.849 [INFO] [Thread-215233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] client lang: <none>
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] server lang: <none>
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] kex follows: False
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:08:07.852 [DEBUG] [Thread-215233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:08:07.853 [DEBUG] [Thread-215233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:08:07.853 [DEBUG] [Thread-215233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:08:07.853 [DEBUG] [Thread-215233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:08:07.853 [DEBUG] [Thread-215233] [transport.py] [_log()] Compression: none
2026-02-16T02:08:07.853 [DEBUG] [Thread-215233] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:08:07.867 [DEBUG] [Thread-215233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:08:07.867 [DEBUG] [Thread-215233] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:08:07.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:08:07.868 [DEBUG] [Thread-215233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:08:07.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:08:07.871 [DEBUG] [Thread-215233] [transport.py] [_log()] userauth is OK
2026-02-16T02:08:07.871 [DEBUG] [Thread-215233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:08:07.871 [DEBUG] [Thread-215233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:08:07.871 [DEBUG] [Thread-215233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:08:07.871 [DEBUG] [Thread-215233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:08:07.890 [INFO] [Thread-215233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:08:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:08:08.666 [DEBUG] [Thread-215233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:08:08.666 [DEBUG] [Thread-215233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:08:08.667 [DEBUG] [Thread-215233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:08:08.707 [DEBUG] [Thread-215233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:08:08.707 [DEBUG] [Thread-215233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:08:08.710 [DEBUG] [Thread-215233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:08:08.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:08:08.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:08:08.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:08:08.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:08:08.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:08:08.733 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:08:08.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:08:08.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:08:08.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:08:08.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.005308 -999.00  +13.40  15.37     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.4 15.4 148.4 19.7 13.7 -22.9 13.6 -21.8 13.3 -20.6 13.6 -21.8
2026-02-16T02:08:08.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:08:08.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:08:08.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.005308
2026-02-16T02:08:08.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:08:08.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:08:08.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:08:08.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:08:08.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:08:08.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:07:48', tmtdew=8.9, humidity=55.07, cloud=0.0, wind=18.28, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:07:48', seeing=1.77, atlas_timestamp='2026-02-16T00:07:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:05:00')
2026-02-16T02:08:08.736 [DEBUG] [Thread-215233] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:08:08.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:08:08.831 [DEBUG] [Thread-215236] [transport.py] [_log()] starting thread (client mode): 0xa57e2470
2026-02-16T02:08:08.831 [DEBUG] [Thread-215236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:08:08.847 [DEBUG] [Thread-215236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:08:08.847 [INFO] [Thread-215236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] client lang: <none>
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] server lang: <none>
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] kex follows: False
2026-02-16T02:08:08.855 [DEBUG] [Thread-215236] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:08:08.856 [DEBUG] [Thread-215236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:08:08.856 [DEBUG] [Thread-215236] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:08:08.856 [DEBUG] [Thread-215236] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:08:08.856 [DEBUG] [Thread-215236] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:08:08.856 [DEBUG] [Thread-215236] [transport.py] [_log()] Compression: none
2026-02-16T02:08:08.856 [DEBUG] [Thread-215236] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:08:08.915 [DEBUG] [Thread-215236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:08:08.916 [DEBUG] [Thread-215236] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:08:08.917 [DEBUG] [Thread-215236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:08:08.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:08:08.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:08:08.972 [DEBUG] [Thread-215236] [transport.py] [_log()] userauth is OK
2026-02-16T02:08:08.972 [DEBUG] [Thread-215236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:08:08.972 [DEBUG] [Thread-215236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:08:08.973 [DEBUG] [Thread-215236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:08:08.973 [DEBUG] [Thread-215236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:08:08.992 [INFO] [Thread-215236] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:08:08.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:08:08.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:08:09.799 [DEBUG] [Thread-215236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:08:09.800 [DEBUG] [Thread-215236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:08:09.847 [DEBUG] [Thread-215236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:08:09.848 [DEBUG] [Thread-215236] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:08:09.857 [DEBUG] [Thread-215236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:08:09.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:08:09.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:08:09.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:08:09.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:08:09.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:08:09.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:08:09.894 [DEBUG] [Thread-215236] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:08:10.551 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:20.301 [DEBUG] [Thread-215238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:29.231 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:35.352 [DEBUG] [Thread-215239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:36.779 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:36.781 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:39.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:08:39.917 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:08:39.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:08:41.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 8, 23), 8.89, 55.11, 0.0, 18.67, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:08:41.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:08:23
2026-02-16T02:08:42.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:08:42.551 [DEBUG] [Thread-215240] [transport.py] [_log()] starting thread (client mode): 0xa81d69b0
2026-02-16T02:08:42.551 [DEBUG] [Thread-215240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:08:42.571 [DEBUG] [Thread-215240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:08:42.572 [INFO] [Thread-215240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:42.575 [DEBUG] [Thread-215240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] client lang: <none>
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] server lang: <none>
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] kex follows: False
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] Compression: none
2026-02-16T02:08:42.576 [DEBUG] [Thread-215240] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:08:42.594 [DEBUG] [Thread-215240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:08:42.594 [DEBUG] [Thread-215240] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:08:42.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:08:42.595 [DEBUG] [Thread-215240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:08:42.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:08:42.598 [DEBUG] [Thread-215240] [transport.py] [_log()] userauth is OK
2026-02-16T02:08:42.598 [DEBUG] [Thread-215240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:08:42.598 [DEBUG] [Thread-215240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:08:42.598 [DEBUG] [Thread-215240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:08:42.598 [DEBUG] [Thread-215240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:08:42.633 [INFO] [Thread-215240] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:08:42.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:08:43.292 [DEBUG] [Thread-215240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:08:43.293 [DEBUG] [Thread-215240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:08:43.293 [DEBUG] [Thread-215240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:08:43.333 [DEBUG] [Thread-215240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:08:43.333 [DEBUG] [Thread-215240] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:08:43.336 [DEBUG] [Thread-215240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:08:43.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:08:43.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:08:43.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:08:43.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:08:43.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:08:43.359 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:08:43.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:08:43.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:08:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:08:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.005655 -999.00  +13.40  13.77     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.7 13.8 142.6 19.4 13.7 -22.7 13.6 -21.8 13.4 -20.7 13.7 -22.0
2026-02-16T02:08:43.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:08:43.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:08:43.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.005655
2026-02-16T02:08:43.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:08:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:08:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:08:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:08:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:08:43.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:08:23', tmtdew=8.89, humidity=55.11, cloud=0.0, wind=18.67, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:08:23', seeing=2.95, atlas_timestamp='2026-02-16T00:08:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:05:00')
2026-02-16T02:08:43.361 [DEBUG] [Thread-215240] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:08:43.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:08:43.458 [DEBUG] [Thread-215243] [transport.py] [_log()] starting thread (client mode): 0xa81d7640
2026-02-16T02:08:43.458 [DEBUG] [Thread-215243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:08:43.472 [DEBUG] [Thread-215243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:08:43.472 [INFO] [Thread-215243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:08:43.480 [DEBUG] [Thread-215243] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:08:43.480 [DEBUG] [Thread-215243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] client lang: <none>
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] server lang: <none>
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] kex follows: False
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:08:43.481 [DEBUG] [Thread-215243] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:08:43.482 [DEBUG] [Thread-215243] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:08:43.482 [DEBUG] [Thread-215243] [transport.py] [_log()] Compression: none
2026-02-16T02:08:43.482 [DEBUG] [Thread-215243] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:08:43.539 [DEBUG] [Thread-215243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:08:43.540 [DEBUG] [Thread-215243] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:08:43.541 [DEBUG] [Thread-215243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:08:43.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:08:43.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:08:43.595 [DEBUG] [Thread-215243] [transport.py] [_log()] userauth is OK
2026-02-16T02:08:43.596 [DEBUG] [Thread-215243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:08:43.596 [DEBUG] [Thread-215243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:08:43.596 [DEBUG] [Thread-215243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:08:43.596 [DEBUG] [Thread-215243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:08:43.615 [INFO] [Thread-215243] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:08:43.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:08:43.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:08:44.398 [DEBUG] [Thread-215243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:08:44.398 [DEBUG] [Thread-215243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:08:44.446 [DEBUG] [Thread-215243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:08:44.446 [DEBUG] [Thread-215243] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:08:44.456 [DEBUG] [Thread-215243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:08:44.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:08:44.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:08:44.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:08:44.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:08:44.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:08:44.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:08:44.493 [DEBUG] [Thread-215243] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:08:45.180 [DEBUG] [Thread-215245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:47.904 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:08:50.389 [DEBUG] [Thread-215246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:05.439 [DEBUG] [Thread-215247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:06.616 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:14.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:09:14.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:09:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:09:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 8, 58), 8.75, 55.44, 0.0, 20.68, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:09:16.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:08:58
2026-02-16T02:09:16.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:09:17.156 [DEBUG] [Thread-215248] [transport.py] [_log()] starting thread (client mode): 0xa2de9930
2026-02-16T02:09:17.156 [DEBUG] [Thread-215248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:09:17.175 [DEBUG] [Thread-215248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:09:17.175 [INFO] [Thread-215248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:09:17.178 [DEBUG] [Thread-215248] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] client lang: <none>
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] server lang: <none>
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] kex follows: False
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:09:17.179 [DEBUG] [Thread-215248] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:09:17.180 [DEBUG] [Thread-215248] [transport.py] [_log()] Compression: none
2026-02-16T02:09:17.180 [DEBUG] [Thread-215248] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:09:17.195 [DEBUG] [Thread-215248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:09:17.196 [DEBUG] [Thread-215248] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:09:17.196 [DEBUG] [Thread-215248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:09:17.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:09:17.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:09:17.198 [DEBUG] [Thread-215248] [transport.py] [_log()] userauth is OK
2026-02-16T02:09:17.199 [DEBUG] [Thread-215248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:09:17.199 [DEBUG] [Thread-215248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:09:17.199 [DEBUG] [Thread-215248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:09:17.199 [DEBUG] [Thread-215248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:09:17.222 [INFO] [Thread-215248] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:09:17.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:09:17.864 [DEBUG] [Thread-215248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:09:17.865 [DEBUG] [Thread-215248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:09:17.865 [DEBUG] [Thread-215248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:09:17.905 [DEBUG] [Thread-215248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:09:17.905 [DEBUG] [Thread-215248] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:09:17.908 [DEBUG] [Thread-215248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:09:17.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:09:17.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:09:17.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:09:17.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:09:17.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:09:17.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:09:17.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:09:17.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:09:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:09:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.006002 -999.00  +13.40  12.41     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.8 12.4 144.2 17.3 13.7 -23.0 13.6 -21.7 13.4 -20.8 13.7 -21.9
2026-02-16T02:09:17.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:09:17.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:09:17.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.006002
2026-02-16T02:09:17.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:09:17.935 [DEBUG] [Thread-215248] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:09:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:09:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:09:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:09:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:09:17.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:08:58', tmtdew=8.75, humidity=55.44, cloud=0.0, wind=20.68, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:08:59', seeing=2.56, atlas_timestamp='2026-02-16T00:08:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:05:00')
2026-02-16T02:09:18.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:09:18.032 [DEBUG] [Thread-215251] [transport.py] [_log()] starting thread (client mode): 0xa2de8c40
2026-02-16T02:09:18.032 [DEBUG] [Thread-215251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:09:18.049 [DEBUG] [Thread-215251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:09:18.049 [INFO] [Thread-215251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:09:18.060 [DEBUG] [Thread-215251] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:09:18.060 [DEBUG] [Thread-215251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:09:18.060 [DEBUG] [Thread-215251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:09:18.060 [DEBUG] [Thread-215251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:18.060 [DEBUG] [Thread-215251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:18.060 [DEBUG] [Thread-215251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] client lang: <none>
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] server lang: <none>
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] kex follows: False
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:09:18.061 [DEBUG] [Thread-215251] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:09:18.062 [DEBUG] [Thread-215251] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:09:18.062 [DEBUG] [Thread-215251] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:09:18.062 [DEBUG] [Thread-215251] [transport.py] [_log()] Compression: none
2026-02-16T02:09:18.062 [DEBUG] [Thread-215251] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:09:18.118 [DEBUG] [Thread-215251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:09:18.118 [DEBUG] [Thread-215251] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:09:18.119 [DEBUG] [Thread-215251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:09:18.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:09:18.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:09:18.174 [DEBUG] [Thread-215251] [transport.py] [_log()] userauth is OK
2026-02-16T02:09:18.174 [DEBUG] [Thread-215251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:09:18.174 [DEBUG] [Thread-215251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:09:18.174 [DEBUG] [Thread-215251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:09:18.174 [DEBUG] [Thread-215251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:09:18.188 [INFO] [Thread-215251] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:09:18.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:09:18.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:09:19.003 [DEBUG] [Thread-215251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:09:19.003 [DEBUG] [Thread-215251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:09:19.051 [DEBUG] [Thread-215251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:09:19.052 [DEBUG] [Thread-215251] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:09:19.061 [DEBUG] [Thread-215251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:09:19.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:09:19.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:09:19.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:09:19.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:09:19.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:09:19.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:09:19.095 [DEBUG] [Thread-215251] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:09:20.473 [DEBUG] [Thread-215253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:25.422 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:35.523 [DEBUG] [Thread-215254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:36.982 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:36.983 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:44.085 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:45.237 [DEBUG] [Thread-215255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:49.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:09:49.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:09:49.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:09:50.562 [DEBUG] [Thread-215256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:09:50.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 9, 34), 8.77, 55.34, 0.0, 20.92, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:09:50.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:09:34
2026-02-16T02:09:51.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:09:51.498 [DEBUG] [Thread-215257] [transport.py] [_log()] starting thread (client mode): 0xa2dea3b0
2026-02-16T02:09:51.499 [DEBUG] [Thread-215257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:09:51.519 [DEBUG] [Thread-215257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:09:51.519 [INFO] [Thread-215257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:51.522 [DEBUG] [Thread-215257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] client lang: <none>
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] server lang: <none>
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] kex follows: False
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] Compression: none
2026-02-16T02:09:51.523 [DEBUG] [Thread-215257] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:09:51.539 [DEBUG] [Thread-215257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:09:51.540 [DEBUG] [Thread-215257] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:09:51.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:09:51.541 [DEBUG] [Thread-215257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:09:51.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:09:51.543 [DEBUG] [Thread-215257] [transport.py] [_log()] userauth is OK
2026-02-16T02:09:51.543 [DEBUG] [Thread-215257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:09:51.544 [DEBUG] [Thread-215257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:09:51.544 [DEBUG] [Thread-215257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:09:51.544 [DEBUG] [Thread-215257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:09:51.569 [INFO] [Thread-215257] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:09:51.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:09:52.173 [DEBUG] [Thread-215257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:09:52.173 [DEBUG] [Thread-215257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:09:52.174 [DEBUG] [Thread-215257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:09:52.215 [DEBUG] [Thread-215257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:09:52.215 [DEBUG] [Thread-215257] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:09:52.217 [DEBUG] [Thread-215257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:09:52.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:09:52.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:09:52.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:09:52.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:09:52.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:09:52.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.006350 -999.00  +13.40  14.83     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.9 14.8 144.0 18.9 13.7 -22.7 13.6 -21.8 13.3 -20.4 13.6 -21.8
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:09:52.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.006350
2026-02-16T02:09:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:09:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:09:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:09:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:09:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:09:52.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:09:34', tmtdew=8.77, humidity=55.34, cloud=0.0, wind=20.92, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:09:34', seeing=2.78, atlas_timestamp='2026-02-16T00:09:08.640', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:08:00')
2026-02-16T02:09:52.237 [DEBUG] [Thread-215257] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:09:52.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:09:52.321 [DEBUG] [Thread-215260] [transport.py] [_log()] starting thread (client mode): 0xa2de86a0
2026-02-16T02:09:52.321 [DEBUG] [Thread-215260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:09:52.335 [DEBUG] [Thread-215260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:09:52.336 [INFO] [Thread-215260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] client lang: <none>
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] server lang: <none>
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] kex follows: False
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:09:52.343 [DEBUG] [Thread-215260] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:09:52.344 [DEBUG] [Thread-215260] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:09:52.344 [DEBUG] [Thread-215260] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:09:52.344 [DEBUG] [Thread-215260] [transport.py] [_log()] Compression: none
2026-02-16T02:09:52.344 [DEBUG] [Thread-215260] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:09:52.402 [DEBUG] [Thread-215260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:09:52.403 [DEBUG] [Thread-215260] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:09:52.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:09:52.404 [DEBUG] [Thread-215260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:09:52.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:09:52.459 [DEBUG] [Thread-215260] [transport.py] [_log()] userauth is OK
2026-02-16T02:09:52.460 [DEBUG] [Thread-215260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:09:52.460 [DEBUG] [Thread-215260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:09:52.460 [DEBUG] [Thread-215260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:09:52.460 [DEBUG] [Thread-215260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:09:52.479 [INFO] [Thread-215260] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:09:52.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:09:52.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:09:53.285 [DEBUG] [Thread-215260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:09:53.286 [DEBUG] [Thread-215260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:09:53.333 [DEBUG] [Thread-215260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:09:53.334 [DEBUG] [Thread-215260] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:09:53.343 [DEBUG] [Thread-215260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:09:53.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:09:53.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:09:53.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:09:53.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:09:53.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:09:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:09:53.378 [DEBUG] [Thread-215260] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:10:02.758 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:05.598 [DEBUG] [Thread-215262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:20.652 [DEBUG] [Thread-215263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:21.591 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:23.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:10:23.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:10:23.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:10:25.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 10, 9), 8.74, 55.64, 0.0, 16.3, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:10:25.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:10:09
2026-02-16T02:10:25.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:10:25.727 [DEBUG] [Thread-215264] [transport.py] [_log()] starting thread (client mode): 0xa2d27eb0
2026-02-16T02:10:25.727 [DEBUG] [Thread-215264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:10:25.747 [DEBUG] [Thread-215264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:10:25.747 [INFO] [Thread-215264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] client lang: <none>
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] server lang: <none>
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] kex follows: False
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] Compression: none
2026-02-16T02:10:25.751 [DEBUG] [Thread-215264] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:10:25.759 [DEBUG] [Thread-215264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:10:25.759 [DEBUG] [Thread-215264] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:10:25.759 [DEBUG] [Thread-215264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:10:25.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:10:25.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:10:25.760 [DEBUG] [Thread-215264] [transport.py] [_log()] userauth is OK
2026-02-16T02:10:25.760 [DEBUG] [Thread-215264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:10:25.760 [DEBUG] [Thread-215264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:10:25.760 [DEBUG] [Thread-215264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:10:25.760 [DEBUG] [Thread-215264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:10:25.769 [INFO] [Thread-215264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:10:25.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:10:26.386 [DEBUG] [Thread-215264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:10:26.386 [DEBUG] [Thread-215264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:10:26.386 [DEBUG] [Thread-215264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:10:26.428 [DEBUG] [Thread-215264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:10:26.428 [DEBUG] [Thread-215264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:10:26.431 [DEBUG] [Thread-215264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:10:26.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:10:26.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:10:26.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:10:26.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:10:26.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:10:26.451 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:10:26.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:10:26.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:10:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:10:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.006697 -999.00  +13.40  13.12     60   +5.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.9 13.1 146.2 18.5 13.7 -22.7 13.6 -21.7 13.3 -20.6 13.6 -21.8
2026-02-16T02:10:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:10:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:10:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.006697
2026-02-16T02:10:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:10:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:10:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:10:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:10:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:10:26.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:10:09', tmtdew=8.74, humidity=55.64, cloud=0.0, wind=16.3, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:10:09', seeing=2.65, atlas_timestamp='2026-02-16T00:09:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:08:00')
2026-02-16T02:10:26.454 [DEBUG] [Thread-215264] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:10:26.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:10:26.544 [DEBUG] [Thread-215267] [transport.py] [_log()] starting thread (client mode): 0xa81d7c10
2026-02-16T02:10:26.544 [DEBUG] [Thread-215267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:10:26.558 [DEBUG] [Thread-215267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:10:26.558 [INFO] [Thread-215267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:10:26.566 [DEBUG] [Thread-215267] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] client lang: <none>
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] server lang: <none>
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] kex follows: False
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] Compression: none
2026-02-16T02:10:26.567 [DEBUG] [Thread-215267] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:10:26.627 [DEBUG] [Thread-215267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:10:26.627 [DEBUG] [Thread-215267] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:10:26.628 [DEBUG] [Thread-215267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:10:26.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:10:26.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:10:26.682 [DEBUG] [Thread-215267] [transport.py] [_log()] userauth is OK
2026-02-16T02:10:26.683 [DEBUG] [Thread-215267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:10:26.683 [DEBUG] [Thread-215267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:10:26.683 [DEBUG] [Thread-215267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:10:26.683 [DEBUG] [Thread-215267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:10:26.701 [INFO] [Thread-215267] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:10:26.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:10:26.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:10:27.593 [DEBUG] [Thread-215267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:10:27.593 [DEBUG] [Thread-215267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:10:27.641 [DEBUG] [Thread-215267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:10:27.641 [DEBUG] [Thread-215267] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:10:27.650 [DEBUG] [Thread-215267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:10:27.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:10:27.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:10:27.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:10:27.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:10:27.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:10:27.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:10:27.688 [DEBUG] [Thread-215267] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:10:35.692 [DEBUG] [Thread-215269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:37.181 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:37.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:40.531 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:45.306 [DEBUG] [Thread-215270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:50.755 [DEBUG] [Thread-215271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:55.660 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:57.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:10:57.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:10:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:10:58.819 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:59.510 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:10:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 10, 44), 8.77, 55.51, 0.0, 20.03, 13.35, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:10:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:10:44
2026-02-16T02:10:59.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:11:00.026 [DEBUG] [Thread-215272] [transport.py] [_log()] starting thread (client mode): 0xa81d7730
2026-02-16T02:11:00.026 [DEBUG] [Thread-215272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:11:00.047 [DEBUG] [Thread-215272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:11:00.047 [INFO] [Thread-215272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:11:00.050 [DEBUG] [Thread-215272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] client lang: <none>
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] server lang: <none>
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] kex follows: False
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] Compression: none
2026-02-16T02:11:00.051 [DEBUG] [Thread-215272] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:11:00.067 [DEBUG] [Thread-215272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:11:00.068 [DEBUG] [Thread-215272] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:11:00.068 [DEBUG] [Thread-215272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:11:00.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:11:00.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:11:00.070 [DEBUG] [Thread-215272] [transport.py] [_log()] userauth is OK
2026-02-16T02:11:00.070 [DEBUG] [Thread-215272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:11:00.070 [DEBUG] [Thread-215272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:11:00.071 [DEBUG] [Thread-215272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:11:00.071 [DEBUG] [Thread-215272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:11:00.085 [INFO] [Thread-215272] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:11:00.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:11:00.739 [DEBUG] [Thread-215272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:11:00.739 [DEBUG] [Thread-215272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:11:00.740 [DEBUG] [Thread-215272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:11:00.780 [DEBUG] [Thread-215272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:11:00.781 [DEBUG] [Thread-215272] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:11:00.784 [DEBUG] [Thread-215272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:11:00.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:11:00.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:11:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:11:00.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:11:00.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:11:00.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:11:00.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:11:00.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:11:00.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:11:00.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.007391 -999.00  +13.50  13.19     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.1 13.2 149.8 18.6 13.7 -22.7 13.6 -21.8 13.3 -20.6 13.6 -21.7
2026-02-16T02:11:00.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:11:00.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:11:00.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.007391
2026-02-16T02:11:00.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:11:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:11:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:11:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:11:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:11:00.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:10:44', tmtdew=8.77, humidity=55.51, cloud=0.0, wind=20.03, temperature=13.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:10:44', seeing=2.27, atlas_timestamp='2026-02-16T00:10:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:08:00')
2026-02-16T02:11:00.810 [DEBUG] [Thread-215272] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:11:00.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:11:00.905 [DEBUG] [Thread-215275] [transport.py] [_log()] starting thread (client mode): 0xa57b1b70
2026-02-16T02:11:00.905 [DEBUG] [Thread-215275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:11:00.922 [DEBUG] [Thread-215275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:11:00.922 [INFO] [Thread-215275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:11:00.930 [DEBUG] [Thread-215275] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:11:00.930 [DEBUG] [Thread-215275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:11:00.930 [DEBUG] [Thread-215275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:11:00.930 [DEBUG] [Thread-215275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] client lang: <none>
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] server lang: <none>
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] kex follows: False
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] Compression: none
2026-02-16T02:11:00.931 [DEBUG] [Thread-215275] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:11:00.990 [DEBUG] [Thread-215275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:11:00.990 [DEBUG] [Thread-215275] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:11:00.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:11:00.991 [DEBUG] [Thread-215275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:11:00.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:11:01.046 [DEBUG] [Thread-215275] [transport.py] [_log()] userauth is OK
2026-02-16T02:11:01.047 [DEBUG] [Thread-215275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:11:01.047 [DEBUG] [Thread-215275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:11:01.047 [DEBUG] [Thread-215275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:11:01.047 [DEBUG] [Thread-215275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:11:01.066 [INFO] [Thread-215275] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:11:01.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:11:01.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:11:01.871 [DEBUG] [Thread-215275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:11:01.871 [DEBUG] [Thread-215275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:11:01.919 [DEBUG] [Thread-215275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:11:01.919 [DEBUG] [Thread-215275] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:11:01.927 [DEBUG] [Thread-215275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:11:01.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:11:01.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:11:01.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
2026-02-16T02:11:01.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:11:01.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:11:01.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:11:01.959 [DEBUG] [Thread-215275] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:11:03.907 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:05.791 [DEBUG] [Thread-215277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:09.300 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:18.482 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:20.830 [DEBUG] [Thread-215278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:28.710 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:31.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:11:31.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:11:31.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:11:33.078 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 11, 19), 8.84, 55.29, 0.0, 18.69, 13.53, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:11:33.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:11:19
2026-02-16T02:11:34.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:11:34.456 [DEBUG] [Thread-215279] [transport.py] [_log()] starting thread (client mode): 0xa5773790
2026-02-16T02:11:34.456 [DEBUG] [Thread-215279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:11:34.477 [DEBUG] [Thread-215279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:11:34.477 [INFO] [Thread-215279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:34.479 [DEBUG] [Thread-215279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] client lang: <none>
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] server lang: <none>
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] kex follows: False
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] Compression: none
2026-02-16T02:11:34.480 [DEBUG] [Thread-215279] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:11:34.489 [DEBUG] [Thread-215279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:11:34.489 [DEBUG] [Thread-215279] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:11:34.490 [DEBUG] [Thread-215279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:11:34.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:11:34.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:11:34.491 [DEBUG] [Thread-215279] [transport.py] [_log()] userauth is OK
2026-02-16T02:11:34.492 [DEBUG] [Thread-215279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:11:34.492 [DEBUG] [Thread-215279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:11:34.492 [DEBUG] [Thread-215279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:11:34.492 [DEBUG] [Thread-215279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:11:34.504 [INFO] [Thread-215279] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:11:34.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:11:35.150 [DEBUG] [Thread-215279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:11:35.150 [DEBUG] [Thread-215279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:11:35.150 [DEBUG] [Thread-215279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:11:35.191 [DEBUG] [Thread-215279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:11:35.192 [DEBUG] [Thread-215279] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:11:35.195 [DEBUG] [Thread-215279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:11:35.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:11:35.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:11:35.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:11:35.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:11:35.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:11:35.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:11:35.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:11:35.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:11:35.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:11:35.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.007738 -999.00  +13.50  19.27     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.9 19.3 136.0 24.1 13.7 -22.7 13.6 -21.5 13.4 -20.5 13.7 -21.8
2026-02-16T02:11:35.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:11:35.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:11:35.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.007738
2026-02-16T02:11:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:11:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:11:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:11:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:11:35.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:11:35.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:11:19', tmtdew=8.84, humidity=55.29, cloud=0.0, wind=18.69, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:11:19', seeing=2.31, atlas_timestamp='2026-02-16T00:11:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:08:00')
2026-02-16T02:11:35.224 [DEBUG] [Thread-215279] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:11:35.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:11:35.324 [DEBUG] [Thread-215282] [transport.py] [_log()] starting thread (client mode): 0xa81d7c40
2026-02-16T02:11:35.324 [DEBUG] [Thread-215282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:11:35.341 [DEBUG] [Thread-215282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:11:35.341 [INFO] [Thread-215282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:11:35.352 [DEBUG] [Thread-215282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] client lang: <none>
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] server lang: <none>
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] kex follows: False
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] Compression: none
2026-02-16T02:11:35.353 [DEBUG] [Thread-215282] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:11:35.411 [DEBUG] [Thread-215282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:11:35.412 [DEBUG] [Thread-215282] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:11:35.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:11:35.413 [DEBUG] [Thread-215282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:11:35.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:11:35.479 [DEBUG] [Thread-215282] [transport.py] [_log()] userauth is OK
2026-02-16T02:11:35.480 [DEBUG] [Thread-215282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:11:35.480 [DEBUG] [Thread-215282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:11:35.480 [DEBUG] [Thread-215282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:11:35.480 [DEBUG] [Thread-215282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:11:35.508 [INFO] [Thread-215282] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:11:35.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:11:35.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:11:35.861 [DEBUG] [Thread-215284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:36.314 [DEBUG] [Thread-215282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:11:36.315 [DEBUG] [Thread-215282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:11:36.366 [DEBUG] [Thread-215282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:11:36.366 [DEBUG] [Thread-215282] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:11:36.378 [DEBUG] [Thread-215282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:11:36.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:11:36.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:11:36.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:11:36.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:11:36.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:11:36.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:11:36.425 [DEBUG] [Thread-215282] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:11:37.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:37.382 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:37.476 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:45.364 [DEBUG] [Thread-215285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:50.908 [DEBUG] [Thread-215286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:52.527 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:56.293 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:11:56.916 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:03.880 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:05.943 [DEBUG] [Thread-215287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:12:06.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:12:06.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:12:08.234 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:08.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 11, 54), 8.91, 55.02, 0.0, 16.62, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:12:08.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:11:54
2026-02-16T02:12:08.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:12:08.777 [DEBUG] [Thread-215288] [transport.py] [_log()] starting thread (client mode): 0xa57737f0
2026-02-16T02:12:08.778 [DEBUG] [Thread-215288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:12:08.797 [DEBUG] [Thread-215288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:12:08.797 [INFO] [Thread-215288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] client lang: <none>
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] server lang: <none>
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] kex follows: False
2026-02-16T02:12:08.800 [DEBUG] [Thread-215288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:12:08.801 [DEBUG] [Thread-215288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:12:08.801 [DEBUG] [Thread-215288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:12:08.801 [DEBUG] [Thread-215288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:12:08.801 [DEBUG] [Thread-215288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:12:08.801 [DEBUG] [Thread-215288] [transport.py] [_log()] Compression: none
2026-02-16T02:12:08.801 [DEBUG] [Thread-215288] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:12:08.818 [DEBUG] [Thread-215288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:12:08.818 [DEBUG] [Thread-215288] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:12:08.819 [DEBUG] [Thread-215288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:12:08.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:12:08.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:12:08.821 [DEBUG] [Thread-215288] [transport.py] [_log()] userauth is OK
2026-02-16T02:12:08.822 [DEBUG] [Thread-215288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:12:08.822 [DEBUG] [Thread-215288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:12:08.822 [DEBUG] [Thread-215288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:12:08.822 [DEBUG] [Thread-215288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:12:08.846 [INFO] [Thread-215288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:12:08.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:12:09.468 [DEBUG] [Thread-215288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:12:09.469 [DEBUG] [Thread-215288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:12:09.469 [DEBUG] [Thread-215288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:12:09.509 [DEBUG] [Thread-215288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:12:09.509 [DEBUG] [Thread-215288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:12:09.513 [DEBUG] [Thread-215288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:12:09.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:12:09.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:12:09.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:12:09.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:12:09.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:12:09.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:12:09.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:12:09.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:12:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:12:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.008086 -999.00  +13.60  11.97     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.4 12.0 139.6 18.0 13.7 -22.8 13.6 -21.5 13.4 -20.5 13.7 -21.8
2026-02-16T02:12:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:12:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:12:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.008086
2026-02-16T02:12:09.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:12:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:12:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:12:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:12:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:12:09.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:11:54', tmtdew=8.91, humidity=55.02, cloud=0.0, wind=16.62, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:11:55', seeing=3.14, atlas_timestamp='2026-02-16T00:11:38.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.015249999999999986, -0.006750000000000256, -0.034750000000000725, -0.0940000000000012, -0.05150000000000077, -0.03074999999999939, 0.025000000000000355, 0.035250000000001336, -0.03750000000000142, -0.0039999999999995595, -0.04475000000000051, -0.053000000000000824, 0.0129999999999999, 0.0182500000000001, -0.005000000000000782, 0.011999999999998678, 0.02674999999999983, -0.01750000000000007, 0.011999999999998678, -0.01675000000000182, 0.008499999999997954, 0.013749999999998153, 0.03825000000000145, 0.038750000000000284, 0.028999999999999915, -0.07200000000000095, 0.010749999999999815, 0.012500000000001066, 0.0730000000000004, 0.021000000000000796, 0.08000000000000185, 0.013000000000001677, 0.00975000000000037], zp_timestamp='2026-02-16T00:08:00')
2026-02-16T02:12:09.536 [DEBUG] [Thread-215288] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:12:09.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:12:09.634 [DEBUG] [Thread-215291] [transport.py] [_log()] starting thread (client mode): 0xa2d6eda0
2026-02-16T02:12:09.634 [DEBUG] [Thread-215291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:12:09.648 [DEBUG] [Thread-215291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:12:09.648 [INFO] [Thread-215291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:12:09.656 [DEBUG] [Thread-215291] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:12:09.656 [DEBUG] [Thread-215291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:12:09.657 [DEBUG] [Thread-215291] [transport.py] [_log()] client lang: <none>
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] server lang: <none>
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] kex follows: False
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:12:09.658 [DEBUG] [Thread-215291] [transport.py] [_log()] Compression: none
2026-02-16T02:12:09.659 [DEBUG] [Thread-215291] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:12:09.715 [DEBUG] [Thread-215291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:12:09.716 [DEBUG] [Thread-215291] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:12:09.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:12:09.717 [DEBUG] [Thread-215291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:12:09.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:12:09.781 [DEBUG] [Thread-215291] [transport.py] [_log()] userauth is OK
2026-02-16T02:12:09.781 [DEBUG] [Thread-215291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:12:09.781 [DEBUG] [Thread-215291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:12:09.782 [DEBUG] [Thread-215291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:12:09.782 [DEBUG] [Thread-215291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:12:09.805 [INFO] [Thread-215291] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:12:09.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:12:09.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:12:10.645 [DEBUG] [Thread-215291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:12:10.645 [DEBUG] [Thread-215291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:12:10.694 [DEBUG] [Thread-215291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:12:10.694 [DEBUG] [Thread-215291] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:12:10.703 [DEBUG] [Thread-215291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:12:10.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:12:10.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:12:10.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:12:10.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:12:10.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:12:10.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:12:10.741 [DEBUG] [Thread-215291] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:12:15.147 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:20.980 [DEBUG] [Thread-215293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:33.785 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:36.032 [DEBUG] [Thread-215294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:37.582 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:37.583 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:40.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:12:40.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:12:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:12:42.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 12, 30), 8.9, 55.04, 0.0, 17.84, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:12:42.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:12:30
2026-02-16T02:12:42.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:12:43.103 [DEBUG] [Thread-215295] [transport.py] [_log()] starting thread (client mode): 0xa2de9420
2026-02-16T02:12:43.103 [DEBUG] [Thread-215295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:12:43.125 [DEBUG] [Thread-215295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:12:43.125 [INFO] [Thread-215295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] client lang: <none>
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] server lang: <none>
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] kex follows: False
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] Compression: none
2026-02-16T02:12:43.128 [DEBUG] [Thread-215295] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:12:43.145 [DEBUG] [Thread-215295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:12:43.145 [DEBUG] [Thread-215295] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:12:43.146 [DEBUG] [Thread-215295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:12:43.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:12:43.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:12:43.148 [DEBUG] [Thread-215295] [transport.py] [_log()] userauth is OK
2026-02-16T02:12:43.148 [DEBUG] [Thread-215295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:12:43.148 [DEBUG] [Thread-215295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:12:43.149 [DEBUG] [Thread-215295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:12:43.149 [DEBUG] [Thread-215295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:12:43.167 [INFO] [Thread-215295] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:12:43.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:12:43.792 [DEBUG] [Thread-215295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:12:43.792 [DEBUG] [Thread-215295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:12:43.793 [DEBUG] [Thread-215295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:12:43.833 [DEBUG] [Thread-215295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:12:43.833 [DEBUG] [Thread-215295] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:12:43.835 [DEBUG] [Thread-215295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:12:43.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:12:43.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:12:43.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:12:43.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:12:43.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:12:43.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:12:43.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.008433 -999.00  +13.70  17.61     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.6 17.6 141.2 21.3 13.8 -22.7 13.7 -21.6 13.3 -20.5 13.7 -21.7
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.008433
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:12:43.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:12:30', tmtdew=8.9, humidity=55.04, cloud=0.0, wind=17.84, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:12:30', seeing=2.38, atlas_timestamp='2026-02-16T00:12:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.028249999999999886, -0.016750000000000043, -0.07949999999999946, -0.048500000000000654, 0.03625000000000078, -0.0030000000000001137, 0.0007500000000000284, -0.010500000000000398, -0.03200000000000003, -0.051750000000000185, -0.05850000000000044, 0.0009999999999994458, 0.03524999999999956, 0.022999999999999687, -0.013999999999999346, 0.03575000000000017, -0.04449999999999932, 0.0039999999999995595, -0.017750000000001265, 0.010999999999999233, 0.03724999999999845, 0.02925000000000111, 0.009249999999999758, 0.011999999999998678, -0.06349999999999945, 0.012750000000000483, -0.016500000000000625, 0.04800000000000004, -0.003999999999997783, 0.06750000000000078, 0.028000000000002245, -0.026250000000000995], zp_timestamp='2026-02-16T00:10:00')
2026-02-16T02:12:43.853 [DEBUG] [Thread-215295] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:12:43.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:12:43.936 [DEBUG] [Thread-215298] [transport.py] [_log()] starting thread (client mode): 0xa5771390
2026-02-16T02:12:43.936 [DEBUG] [Thread-215298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:12:43.951 [DEBUG] [Thread-215298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:12:43.951 [INFO] [Thread-215298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] client lang: <none>
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] server lang: <none>
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] kex follows: False
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:12:43.958 [DEBUG] [Thread-215298] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:12:43.959 [DEBUG] [Thread-215298] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:12:43.959 [DEBUG] [Thread-215298] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:12:43.959 [DEBUG] [Thread-215298] [transport.py] [_log()] Compression: none
2026-02-16T02:12:43.959 [DEBUG] [Thread-215298] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:12:44.015 [DEBUG] [Thread-215298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:12:44.015 [DEBUG] [Thread-215298] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:12:44.015 [DEBUG] [Thread-215298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:12:44.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:12:44.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:12:44.073 [DEBUG] [Thread-215298] [transport.py] [_log()] userauth is OK
2026-02-16T02:12:44.073 [DEBUG] [Thread-215298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:12:44.073 [DEBUG] [Thread-215298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:12:44.073 [DEBUG] [Thread-215298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:12:44.073 [DEBUG] [Thread-215298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:12:44.087 [INFO] [Thread-215298] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:12:44.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:12:44.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:12:44.902 [DEBUG] [Thread-215298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:12:44.903 [DEBUG] [Thread-215298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:12:44.949 [DEBUG] [Thread-215298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:12:44.949 [DEBUG] [Thread-215298] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:12:44.959 [DEBUG] [Thread-215298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:12:44.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:12:44.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:12:44.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:12:44.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:12:44.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:12:44.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:12:44.993 [DEBUG] [Thread-215298] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:12:45.445 [DEBUG] [Thread-215300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:51.069 [DEBUG] [Thread-215301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:12:52.445 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:06.119 [DEBUG] [Thread-215302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:07.948 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:11.002 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:11.345 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:14.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:13:14.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:13:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:13:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 13, 5), 8.93, 54.94, 0.0, 19.16, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:13:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:13:05
2026-02-16T02:13:17.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:13:17.616 [DEBUG] [Thread-215303] [transport.py] [_log()] starting thread (client mode): 0xa81d49a0
2026-02-16T02:13:17.616 [DEBUG] [Thread-215303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:13:17.638 [DEBUG] [Thread-215303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:13:17.638 [INFO] [Thread-215303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:13:17.642 [DEBUG] [Thread-215303] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:13:17.642 [DEBUG] [Thread-215303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:13:17.642 [DEBUG] [Thread-215303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:13:17.642 [DEBUG] [Thread-215303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:17.642 [DEBUG] [Thread-215303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:17.642 [DEBUG] [Thread-215303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] client lang: <none>
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] server lang: <none>
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] kex follows: False
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:13:17.643 [DEBUG] [Thread-215303] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:13:17.644 [DEBUG] [Thread-215303] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:13:17.644 [DEBUG] [Thread-215303] [transport.py] [_log()] Compression: none
2026-02-16T02:13:17.644 [DEBUG] [Thread-215303] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:13:17.664 [DEBUG] [Thread-215303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:13:17.665 [DEBUG] [Thread-215303] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:13:17.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:13:17.666 [DEBUG] [Thread-215303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:13:17.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:13:17.668 [DEBUG] [Thread-215303] [transport.py] [_log()] userauth is OK
2026-02-16T02:13:17.668 [DEBUG] [Thread-215303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:13:17.668 [DEBUG] [Thread-215303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:13:17.669 [DEBUG] [Thread-215303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:13:17.669 [DEBUG] [Thread-215303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:13:17.693 [INFO] [Thread-215303] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:13:17.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:13:18.313 [DEBUG] [Thread-215303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:13:18.314 [DEBUG] [Thread-215303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:13:18.314 [DEBUG] [Thread-215303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:13:18.355 [DEBUG] [Thread-215303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:13:18.355 [DEBUG] [Thread-215303] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:13:18.358 [DEBUG] [Thread-215303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:13:18.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:13:18.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:13:18.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:13:18.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:13:18.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:13:18.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:13:18.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:13:18.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:13:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:13:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.008780 -999.00  +13.70  16.21     58   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.4 16.2 140.4 23.9 13.8 -22.6 13.6 -21.4 13.3 -20.3 13.7 -21.7
2026-02-16T02:13:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:13:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:13:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.008780
2026-02-16T02:13:18.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:13:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:13:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:13:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:13:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:13:18.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:13:05', tmtdew=8.93, humidity=54.94, cloud=0.0, wind=19.16, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:13:05', seeing=2.18, atlas_timestamp='2026-02-16T00:12:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.028249999999999886, -0.016750000000000043, -0.07949999999999946, -0.048500000000000654, 0.03625000000000078, -0.0030000000000001137, 0.0007500000000000284, -0.010500000000000398, -0.03200000000000003, -0.051750000000000185, -0.05850000000000044, 0.0009999999999994458, 0.03524999999999956, 0.022999999999999687, -0.013999999999999346, 0.03575000000000017, -0.04449999999999932, 0.0039999999999995595, -0.017750000000001265, 0.010999999999999233, 0.03724999999999845, 0.02925000000000111, 0.009249999999999758, 0.011999999999998678, -0.06349999999999945, 0.012750000000000483, -0.016500000000000625, 0.04800000000000004, -0.003999999999997783, 0.06750000000000078, 0.028000000000002245, -0.026250000000000995], zp_timestamp='2026-02-16T00:10:00')
2026-02-16T02:13:18.384 [DEBUG] [Thread-215303] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:13:18.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:13:18.480 [DEBUG] [Thread-215306] [transport.py] [_log()] starting thread (client mode): 0xa5771c90
2026-02-16T02:13:18.480 [DEBUG] [Thread-215306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:13:18.494 [DEBUG] [Thread-215306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:13:18.494 [INFO] [Thread-215306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:13:18.502 [DEBUG] [Thread-215306] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:13:18.502 [DEBUG] [Thread-215306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] client lang: <none>
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] server lang: <none>
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] kex follows: False
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] Compression: none
2026-02-16T02:13:18.503 [DEBUG] [Thread-215306] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:13:18.564 [DEBUG] [Thread-215306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:13:18.565 [DEBUG] [Thread-215306] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:13:18.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:13:18.566 [DEBUG] [Thread-215306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:13:18.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:13:18.622 [DEBUG] [Thread-215306] [transport.py] [_log()] userauth is OK
2026-02-16T02:13:18.622 [DEBUG] [Thread-215306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:13:18.622 [DEBUG] [Thread-215306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:13:18.622 [DEBUG] [Thread-215306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:13:18.623 [DEBUG] [Thread-215306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:13:18.646 [INFO] [Thread-215306] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:13:18.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:13:18.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:13:19.485 [DEBUG] [Thread-215306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:13:19.486 [DEBUG] [Thread-215306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:13:19.533 [DEBUG] [Thread-215306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:13:19.534 [DEBUG] [Thread-215306] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:13:19.543 [DEBUG] [Thread-215306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:13:19.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:13:19.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:13:19.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:13:19.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:13:19.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:13:19.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:13:19.580 [DEBUG] [Thread-215306] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:13:21.154 [DEBUG] [Thread-215308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:30.301 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:36.200 [DEBUG] [Thread-215309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:37.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:37.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:45.513 [DEBUG] [Thread-215310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:49.048 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:49.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:13:49.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:13:49.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:13:51.233 [DEBUG] [Thread-215311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:13:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 13, 41), 9.59, 52.36, 0.0, 22.23, 14.0, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:13:51.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:13:41
2026-02-16T02:13:51.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:13:51.890 [DEBUG] [Thread-215312] [transport.py] [_log()] starting thread (client mode): 0xa57b0940
2026-02-16T02:13:51.890 [DEBUG] [Thread-215312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:13:51.901 [DEBUG] [Thread-215312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:13:51.901 [INFO] [Thread-215312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] client lang: <none>
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] server lang: <none>
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] kex follows: False
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] Compression: none
2026-02-16T02:13:51.904 [DEBUG] [Thread-215312] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:13:51.921 [DEBUG] [Thread-215312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:13:51.922 [DEBUG] [Thread-215312] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:13:51.922 [DEBUG] [Thread-215312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:13:51.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:13:51.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:13:51.924 [DEBUG] [Thread-215312] [transport.py] [_log()] userauth is OK
2026-02-16T02:13:51.924 [DEBUG] [Thread-215312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:13:51.924 [DEBUG] [Thread-215312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:13:51.924 [DEBUG] [Thread-215312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:13:51.924 [DEBUG] [Thread-215312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:13:51.942 [INFO] [Thread-215312] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:13:51.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:13:52.608 [DEBUG] [Thread-215312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:13:52.609 [DEBUG] [Thread-215312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:13:52.609 [DEBUG] [Thread-215312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:13:52.650 [DEBUG] [Thread-215312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:13:52.650 [DEBUG] [Thread-215312] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:13:52.653 [DEBUG] [Thread-215312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:13:52.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:13:52.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:13:52.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:13:52.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:13:52.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:13:52.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:13:52.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:13:52.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:13:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:13:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.009474 -999.00  +13.90  14.34     57   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.0 14.3 156.8 21.6 13.8 -22.6 13.7 -21.7 13.5 -20.4 13.8 -21.4
2026-02-16T02:13:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:13:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:13:52.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.009474
2026-02-16T02:13:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:13:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:13:52.677 [DEBUG] [Thread-215312] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:13:52.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:13:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:13:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:13:52.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:13:41', tmtdew=9.59, humidity=52.36, cloud=0.0, wind=22.23, temperature=14.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:13:41', seeing=2.64, atlas_timestamp='2026-02-16T00:13:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.028249999999999886, -0.016750000000000043, -0.07949999999999946, -0.048500000000000654, 0.03625000000000078, -0.0030000000000001137, 0.0007500000000000284, -0.010500000000000398, -0.03200000000000003, -0.051750000000000185, -0.05850000000000044, 0.0009999999999994458, 0.03524999999999956, 0.022999999999999687, -0.013999999999999346, 0.03575000000000017, -0.04449999999999932, 0.0039999999999995595, -0.017750000000001265, 0.010999999999999233, 0.03724999999999845, 0.02925000000000111, 0.009249999999999758, 0.011999999999998678, -0.06349999999999945, 0.012750000000000483, -0.016500000000000625, 0.04800000000000004, -0.003999999999997783, 0.06750000000000078, 0.028000000000002245, -0.026250000000000995], zp_timestamp='2026-02-16T00:10:00')
2026-02-16T02:13:52.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:13:52.773 [DEBUG] [Thread-215315] [transport.py] [_log()] starting thread (client mode): 0xa81d7970
2026-02-16T02:13:52.773 [DEBUG] [Thread-215315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:13:52.787 [DEBUG] [Thread-215315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:13:52.788 [INFO] [Thread-215315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:13:52.795 [DEBUG] [Thread-215315] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:13:52.795 [DEBUG] [Thread-215315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] client lang: <none>
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] server lang: <none>
2026-02-16T02:13:52.796 [DEBUG] [Thread-215315] [transport.py] [_log()] kex follows: False
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] Compression: none
2026-02-16T02:13:52.797 [DEBUG] [Thread-215315] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:13:52.853 [DEBUG] [Thread-215315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:13:52.854 [DEBUG] [Thread-215315] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:13:52.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:13:52.855 [DEBUG] [Thread-215315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:13:52.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:13:52.909 [DEBUG] [Thread-215315] [transport.py] [_log()] userauth is OK
2026-02-16T02:13:52.909 [DEBUG] [Thread-215315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:13:52.909 [DEBUG] [Thread-215315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:13:52.909 [DEBUG] [Thread-215315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:13:52.909 [DEBUG] [Thread-215315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:13:52.925 [INFO] [Thread-215315] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:13:52.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:13:52.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:13:53.739 [DEBUG] [Thread-215315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:13:53.739 [DEBUG] [Thread-215315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:13:53.787 [DEBUG] [Thread-215315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:13:53.788 [DEBUG] [Thread-215315] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:13:53.797 [DEBUG] [Thread-215315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:13:53.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:13:53.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:13:53.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:13:53.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:13:53.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:13:53.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:13:53.834 [DEBUG] [Thread-215315] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:14:06.268 [DEBUG] [Thread-215317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:07.696 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:21.324 [DEBUG] [Thread-215318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:23.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:14:23.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:14:23.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:14:25.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 14, 16), 9.61, 52.16, 0.0, 16.36, 13.98, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:14:25.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:14:16
2026-02-16T02:14:26.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:14:26.191 [DEBUG] [Thread-215319] [transport.py] [_log()] starting thread (client mode): 0xa5772bf0
2026-02-16T02:14:26.191 [DEBUG] [Thread-215319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:14:26.212 [DEBUG] [Thread-215319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:14:26.212 [INFO] [Thread-215319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:14:26.215 [DEBUG] [Thread-215319] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] client lang: <none>
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] server lang: <none>
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] kex follows: False
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:14:26.216 [DEBUG] [Thread-215319] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:14:26.217 [DEBUG] [Thread-215319] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:14:26.217 [DEBUG] [Thread-215319] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:14:26.217 [DEBUG] [Thread-215319] [transport.py] [_log()] Compression: none
2026-02-16T02:14:26.217 [DEBUG] [Thread-215319] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:14:26.232 [DEBUG] [Thread-215319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:14:26.233 [DEBUG] [Thread-215319] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:14:26.233 [DEBUG] [Thread-215319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:14:26.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:14:26.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:14:26.235 [DEBUG] [Thread-215319] [transport.py] [_log()] userauth is OK
2026-02-16T02:14:26.236 [DEBUG] [Thread-215319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:14:26.236 [DEBUG] [Thread-215319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:14:26.236 [DEBUG] [Thread-215319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:14:26.236 [DEBUG] [Thread-215319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:14:26.270 [INFO] [Thread-215319] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:14:26.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:14:26.356 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:26.878 [DEBUG] [Thread-215319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:14:26.878 [DEBUG] [Thread-215319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:14:26.878 [DEBUG] [Thread-215319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:14:26.919 [DEBUG] [Thread-215319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:14:26.919 [DEBUG] [Thread-215319] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:14:26.921 [DEBUG] [Thread-215319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:14:26.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:14:26.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:14:26.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:14:26.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:14:26.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:14:26.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:14:26.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:14:26.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.009822 -999.00  +13.80  16.63     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.1 16.6 143.7 19.0 13.9 -22.6 13.7 -21.6 13.5 -20.4 13.8 -21.7
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.009822
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:14:26.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:14:16', tmtdew=9.61, humidity=52.16, cloud=0.0, wind=16.36, temperature=13.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:14:16', seeing=2.12, atlas_timestamp='2026-02-16T00:14:08.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.028249999999999886, -0.016750000000000043, -0.07949999999999946, -0.048500000000000654, 0.03625000000000078, -0.0030000000000001137, 0.0007500000000000284, -0.010500000000000398, -0.03200000000000003, -0.051750000000000185, -0.05850000000000044, 0.0009999999999994458, 0.03524999999999956, 0.022999999999999687, -0.013999999999999346, 0.03575000000000017, -0.04449999999999932, 0.0039999999999995595, -0.017750000000001265, 0.010999999999999233, 0.03724999999999845, 0.02925000000000111, 0.009249999999999758, 0.011999999999998678, -0.06349999999999945, 0.012750000000000483, -0.016500000000000625, 0.04800000000000004, -0.003999999999997783, 0.06750000000000078, 0.028000000000002245, -0.026250000000000995], zp_timestamp='2026-02-16T00:10:00')
2026-02-16T02:14:26.940 [DEBUG] [Thread-215319] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:14:27.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:14:27.023 [DEBUG] [Thread-215322] [transport.py] [_log()] starting thread (client mode): 0xa2d6fbb0
2026-02-16T02:14:27.023 [DEBUG] [Thread-215322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:14:27.037 [DEBUG] [Thread-215322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:14:27.037 [INFO] [Thread-215322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] client lang: <none>
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] server lang: <none>
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] kex follows: False
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] Compression: none
2026-02-16T02:14:27.045 [DEBUG] [Thread-215322] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:14:27.103 [DEBUG] [Thread-215322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:14:27.103 [DEBUG] [Thread-215322] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:14:27.103 [DEBUG] [Thread-215322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:14:27.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:14:27.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:14:27.160 [DEBUG] [Thread-215322] [transport.py] [_log()] userauth is OK
2026-02-16T02:14:27.160 [DEBUG] [Thread-215322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:14:27.160 [DEBUG] [Thread-215322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:14:27.160 [DEBUG] [Thread-215322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:14:27.160 [DEBUG] [Thread-215322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:14:27.174 [INFO] [Thread-215322] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:14:27.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:14:27.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:14:28.030 [DEBUG] [Thread-215322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:14:28.030 [DEBUG] [Thread-215322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:14:28.078 [DEBUG] [Thread-215322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:14:28.078 [DEBUG] [Thread-215322] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:14:28.087 [DEBUG] [Thread-215322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:14:28.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:14:28.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:14:28.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:14:28.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:14:28.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:14:28.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:14:28.122 [DEBUG] [Thread-215322] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:14:36.360 [DEBUG] [Thread-215324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:37.987 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:37.988 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:44.998 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:45.582 [DEBUG] [Thread-215325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:51.417 [DEBUG] [Thread-215326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:14:58.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:14:58.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:14:58.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:14:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 14, 51), 9.29, 53.56, 0.0, 18.77, 13.83, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:14:59.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:14:51
2026-02-16T02:15:00.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:15:00.459 [DEBUG] [Thread-215327] [transport.py] [_log()] starting thread (client mode): 0xa81d71c0
2026-02-16T02:15:00.459 [DEBUG] [Thread-215327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:15:00.479 [DEBUG] [Thread-215327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:15:00.479 [INFO] [Thread-215327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:15:00.482 [DEBUG] [Thread-215327] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:15:00.482 [DEBUG] [Thread-215327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:15:00.482 [DEBUG] [Thread-215327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:15:00.482 [DEBUG] [Thread-215327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:00.482 [DEBUG] [Thread-215327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:00.482 [DEBUG] [Thread-215327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] client lang: <none>
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] server lang: <none>
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] kex follows: False
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] Compression: none
2026-02-16T02:15:00.483 [DEBUG] [Thread-215327] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:15:00.499 [DEBUG] [Thread-215327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:15:00.499 [DEBUG] [Thread-215327] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:15:00.500 [DEBUG] [Thread-215327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:15:00.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:15:00.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:15:00.541 [DEBUG] [Thread-215327] [transport.py] [_log()] userauth is OK
2026-02-16T02:15:00.541 [DEBUG] [Thread-215327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:15:00.541 [DEBUG] [Thread-215327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:15:00.541 [DEBUG] [Thread-215327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:15:00.541 [DEBUG] [Thread-215327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:15:00.572 [INFO] [Thread-215327] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:15:00.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:15:01.210 [DEBUG] [Thread-215327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:15:01.210 [DEBUG] [Thread-215327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:15:01.211 [DEBUG] [Thread-215327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:15:01.251 [DEBUG] [Thread-215327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:15:01.251 [DEBUG] [Thread-215327] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:15:01.254 [DEBUG] [Thread-215327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:15:01.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:15:01.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:15:01.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:15:01.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:15:01.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:15:01.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:15:01.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:15:01.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:15:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:15:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.010169 -999.00  +13.80  14.76     58   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.8 14.8 143.8 17.0 13.8 -22.8 13.8 -21.7 13.5 -20.6 13.8 -21.8
2026-02-16T02:15:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:15:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:15:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.010169
2026-02-16T02:15:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:15:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:15:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:15:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:15:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:15:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:14:51', tmtdew=9.29, humidity=53.56, cloud=0.0, wind=18.77, temperature=13.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:14:52', seeing=2.59, atlas_timestamp='2026-02-16T00:14:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.028249999999999886, -0.016750000000000043, -0.07949999999999946, -0.048500000000000654, 0.03625000000000078, -0.0030000000000001137, 0.0007500000000000284, -0.010500000000000398, -0.03200000000000003, -0.051750000000000185, -0.05850000000000044, 0.0009999999999994458, 0.03524999999999956, 0.022999999999999687, -0.013999999999999346, 0.03575000000000017, -0.04449999999999932, 0.0039999999999995595, -0.017750000000001265, 0.010999999999999233, 0.03724999999999845, 0.02925000000000111, 0.009249999999999758, 0.011999999999998678, -0.06349999999999945, 0.012750000000000483, -0.016500000000000625, 0.04800000000000004, -0.003999999999997783, 0.06750000000000078, 0.028000000000002245, -0.026250000000000995], zp_timestamp='2026-02-16T00:10:00')
2026-02-16T02:15:01.283 [DEBUG] [Thread-215327] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:15:01.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:15:01.384 [DEBUG] [Thread-215330] [transport.py] [_log()] starting thread (client mode): 0xa2dc2f50
2026-02-16T02:15:01.384 [DEBUG] [Thread-215330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:15:01.399 [DEBUG] [Thread-215330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:15:01.399 [INFO] [Thread-215330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:15:01.406 [DEBUG] [Thread-215330] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] client lang: <none>
2026-02-16T02:15:01.407 [DEBUG] [Thread-215330] [transport.py] [_log()] server lang: <none>
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] kex follows: False
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] Compression: none
2026-02-16T02:15:01.408 [DEBUG] [Thread-215330] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:15:01.463 [DEBUG] [Thread-215330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:15:01.464 [DEBUG] [Thread-215330] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:15:01.464 [DEBUG] [Thread-215330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:15:01.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:15:01.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:15:01.520 [DEBUG] [Thread-215330] [transport.py] [_log()] userauth is OK
2026-02-16T02:15:01.520 [DEBUG] [Thread-215330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:15:01.520 [DEBUG] [Thread-215330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:15:01.520 [DEBUG] [Thread-215330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:15:01.520 [DEBUG] [Thread-215330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:15:01.538 [INFO] [Thread-215330] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:15:01.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:15:01.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:15:02.388 [DEBUG] [Thread-215330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:15:02.389 [DEBUG] [Thread-215330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:15:02.436 [DEBUG] [Thread-215330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:15:02.436 [DEBUG] [Thread-215330] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:15:02.444 [DEBUG] [Thread-215330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:15:02.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:15: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')
2026-02-16T02:15: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
2026-02-16T02:15:02.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:15:02.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:15:02.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:15:02.480 [DEBUG] [Thread-215330] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:15:03.638 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:06.455 [DEBUG] [Thread-215332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:21.517 [DEBUG] [Thread-215333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:22.301 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:15:32.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:15:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:15:34.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 14, 51), 9.29, 53.56, 0.0, 18.77, 13.83, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:15:34.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:14:51
2026-02-16T02:15:35.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:15:35.253 [DEBUG] [Thread-215334] [transport.py] [_log()] starting thread (client mode): 0xa2dc1ab0
2026-02-16T02:15:35.253 [DEBUG] [Thread-215334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:15:35.266 [DEBUG] [Thread-215334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:15:35.266 [INFO] [Thread-215334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] client lang: <none>
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] server lang: <none>
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] kex follows: False
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] Compression: none
2026-02-16T02:15:35.268 [DEBUG] [Thread-215334] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:15:35.277 [DEBUG] [Thread-215334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:15:35.277 [DEBUG] [Thread-215334] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:15:35.277 [DEBUG] [Thread-215334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:15:35.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:15:35.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:15:35.278 [DEBUG] [Thread-215334] [transport.py] [_log()] userauth is OK
2026-02-16T02:15:35.278 [DEBUG] [Thread-215334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:15:35.278 [DEBUG] [Thread-215334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:15:35.278 [DEBUG] [Thread-215334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:15:35.278 [DEBUG] [Thread-215334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:15:35.286 [INFO] [Thread-215334] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:15:35.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:15:35.899 [DEBUG] [Thread-215334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:15:35.899 [DEBUG] [Thread-215334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:15:35.899 [DEBUG] [Thread-215334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:15:35.940 [DEBUG] [Thread-215334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:15:35.940 [DEBUG] [Thread-215334] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:15:35.942 [DEBUG] [Thread-215334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:15:35.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:15:35.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:15:35.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:15:35.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:15:35.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:15:35.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:15:35.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.010516 -999.00  +13.70  15.68     58   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.4 15.7 145.6 18.9 13.8 -22.7 13.7 -21.6 13.5 -20.5 13.8 -21.7
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.010516
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:15:35.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:14:51', tmtdew=9.29, humidity=53.56, cloud=0.0, wind=18.77, temperature=13.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:15:27', seeing=2.25, atlas_timestamp='2026-02-16T00:15:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, 0.028249999999999886, -0.016750000000000043, -0.07949999999999946, -0.048500000000000654, 0.03625000000000078, -0.0030000000000001137, 0.0007500000000000284, -0.010500000000000398, -0.03200000000000003, -0.051750000000000185, -0.05850000000000044, 0.0009999999999994458, 0.03524999999999956, 0.022999999999999687, -0.013999999999999346, 0.03575000000000017, -0.04449999999999932, 0.0039999999999995595, -0.017750000000001265, 0.010999999999999233, 0.03724999999999845, 0.02925000000000111, 0.009249999999999758, 0.011999999999998678, -0.06349999999999945, 0.012750000000000483, -0.016500000000000625, 0.04800000000000004, -0.003999999999997783, 0.06750000000000078, 0.028000000000002245, -0.026250000000000995], zp_timestamp='2026-02-16T00:10:00')
2026-02-16T02:15:35.961 [DEBUG] [Thread-215334] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:15:36.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:15:36.045 [DEBUG] [Thread-215337] [transport.py] [_log()] starting thread (client mode): 0xa57b16c0
2026-02-16T02:15:36.045 [DEBUG] [Thread-215337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:15:36.060 [DEBUG] [Thread-215337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:15:36.060 [INFO] [Thread-215337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] client lang: <none>
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] server lang: <none>
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] kex follows: False
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] Compression: none
2026-02-16T02:15:36.067 [DEBUG] [Thread-215337] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:15:36.131 [DEBUG] [Thread-215337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:15:36.131 [DEBUG] [Thread-215337] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:15:36.131 [DEBUG] [Thread-215337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:15:36.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:15:36.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:15:36.188 [DEBUG] [Thread-215337] [transport.py] [_log()] userauth is OK
2026-02-16T02:15:36.188 [DEBUG] [Thread-215337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:15:36.188 [DEBUG] [Thread-215337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:15:36.188 [DEBUG] [Thread-215337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:15:36.188 [DEBUG] [Thread-215337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:15:36.202 [INFO] [Thread-215337] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:15:36.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:15:36.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:15:36.553 [DEBUG] [Thread-215339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:37.014 [DEBUG] [Thread-215337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:15:37.014 [DEBUG] [Thread-215337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:15:37.061 [DEBUG] [Thread-215337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:15:37.062 [DEBUG] [Thread-215337] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:15:37.071 [DEBUG] [Thread-215337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:15:37.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:15:37.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:15:37.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:15:37.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:15:37.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:15:37.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:15:37.108 [DEBUG] [Thread-215337] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:15:38.189 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:38.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:41.044 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:45.640 [DEBUG] [Thread-215340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:51.602 [DEBUG] [Thread-215341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:15:59.722 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:06.640 [DEBUG] [Thread-215342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:07.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:16:07.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:16:07.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:16:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 15, 26), 9.2, 53.88, 0.0, 17.98, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:16:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:15:26
2026-02-16T02:16:09.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:16:09.527 [DEBUG] [Thread-215343] [transport.py] [_log()] starting thread (client mode): 0xa2dc0220
2026-02-16T02:16:09.527 [DEBUG] [Thread-215343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:16:09.548 [DEBUG] [Thread-215343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:16:09.548 [INFO] [Thread-215343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] client lang: <none>
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] server lang: <none>
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] kex follows: False
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:16:09.551 [DEBUG] [Thread-215343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:16:09.552 [DEBUG] [Thread-215343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:16:09.552 [DEBUG] [Thread-215343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:16:09.552 [DEBUG] [Thread-215343] [transport.py] [_log()] Compression: none
2026-02-16T02:16:09.552 [DEBUG] [Thread-215343] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:16:09.567 [DEBUG] [Thread-215343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:16:09.567 [DEBUG] [Thread-215343] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:16:09.568 [DEBUG] [Thread-215343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:16:09.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:16:09.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:16:09.569 [DEBUG] [Thread-215343] [transport.py] [_log()] userauth is OK
2026-02-16T02:16:09.570 [DEBUG] [Thread-215343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:16:09.570 [DEBUG] [Thread-215343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:16:09.570 [DEBUG] [Thread-215343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:16:09.570 [DEBUG] [Thread-215343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:16:09.594 [INFO] [Thread-215343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:16:09.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:16:10.199 [DEBUG] [Thread-215343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:16:10.199 [DEBUG] [Thread-215343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:16:10.200 [DEBUG] [Thread-215343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:16:10.240 [DEBUG] [Thread-215343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:16:10.241 [DEBUG] [Thread-215343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:16:10.246 [DEBUG] [Thread-215343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:16:10.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:16:10.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:16:10.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:16:10.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:16:10.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:16:10.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:16:10.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:16:10.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:16:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:16:10.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.010863 -999.00  +13.70  14.62     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.3 14.6 141.6 19.3 13.9 -22.7 -999.0 -999.0 13.5 -20.4 13.8 -21.5
2026-02-16T02:16:10.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:16:10.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:16:10.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.010863
2026-02-16T02:16:10.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:16:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:16:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:16:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:16:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:16:10.270 [DEBUG] [Thread-215343] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:16:10.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:15:26', tmtdew=9.2, humidity=53.88, cloud=0.0, wind=17.98, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:16:03', seeing=2.88, atlas_timestamp='2026-02-16T00:15:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:15:00')
2026-02-16T02:16:10.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:16:10.366 [DEBUG] [Thread-215346] [transport.py] [_log()] starting thread (client mode): 0xa57722c0
2026-02-16T02:16:10.367 [DEBUG] [Thread-215346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:16:10.381 [DEBUG] [Thread-215346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:16:10.381 [INFO] [Thread-215346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] client lang: <none>
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] server lang: <none>
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] kex follows: False
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:16:10.389 [DEBUG] [Thread-215346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:16:10.390 [DEBUG] [Thread-215346] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:16:10.390 [DEBUG] [Thread-215346] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:16:10.390 [DEBUG] [Thread-215346] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:16:10.390 [DEBUG] [Thread-215346] [transport.py] [_log()] Compression: none
2026-02-16T02:16:10.390 [DEBUG] [Thread-215346] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:16:10.448 [DEBUG] [Thread-215346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:16:10.449 [DEBUG] [Thread-215346] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:16:10.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:16:10.450 [DEBUG] [Thread-215346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:16:10.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:16:10.506 [DEBUG] [Thread-215346] [transport.py] [_log()] userauth is OK
2026-02-16T02:16:10.506 [DEBUG] [Thread-215346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:16:10.507 [DEBUG] [Thread-215346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:16:10.507 [DEBUG] [Thread-215346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:16:10.507 [DEBUG] [Thread-215346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:16:10.525 [INFO] [Thread-215346] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:16:10.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:16:10.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:16:11.351 [DEBUG] [Thread-215346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:16:11.351 [DEBUG] [Thread-215346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:16:11.399 [DEBUG] [Thread-215346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:16:11.399 [DEBUG] [Thread-215346] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:16:11.408 [DEBUG] [Thread-215346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:16:11.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:16:11.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:16:11.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:16:11.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:16:11.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:16:11.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:16:11.443 [DEBUG] [Thread-215346] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:16:18.401 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:21.679 [DEBUG] [Thread-215348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:34.927 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:36.733 [DEBUG] [Thread-215349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:37.107 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:38.390 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:38.391 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:39.542 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:41.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:16:41.444 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:16:41.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:16:42.586 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:43.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 16, 3), 9.19, 53.94, 0.0, 19.59, 13.77, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:16:43.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:16:03
2026-02-16T02:16:43.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:16:44.051 [DEBUG] [Thread-215350] [transport.py] [_log()] starting thread (client mode): 0xa2d6c6a0
2026-02-16T02:16:44.051 [DEBUG] [Thread-215350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:16:44.070 [DEBUG] [Thread-215350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:16:44.070 [INFO] [Thread-215350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:16:44.071 [DEBUG] [Thread-215350] [transport.py] [_log()] client lang: <none>
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] server lang: <none>
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] kex follows: False
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] Compression: none
2026-02-16T02:16:44.072 [DEBUG] [Thread-215350] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:16:44.080 [DEBUG] [Thread-215350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:16:44.080 [DEBUG] [Thread-215350] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:16:44.080 [DEBUG] [Thread-215350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:16:44.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:16:44.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:16:44.082 [DEBUG] [Thread-215350] [transport.py] [_log()] userauth is OK
2026-02-16T02:16:44.082 [DEBUG] [Thread-215350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:16:44.082 [DEBUG] [Thread-215350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:16:44.082 [DEBUG] [Thread-215350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:16:44.082 [DEBUG] [Thread-215350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:16:44.098 [INFO] [Thread-215350] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:16:44.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:16:44.661 [DEBUG] [Thread-215350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:16:44.662 [DEBUG] [Thread-215350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:16:44.662 [DEBUG] [Thread-215350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:16:44.702 [DEBUG] [Thread-215350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:16:44.702 [DEBUG] [Thread-215350] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:16:44.705 [DEBUG] [Thread-215350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:16:44.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:16:44.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:16:44.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:16:44.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:16:44.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:16:44.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:16:44.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:16:44.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:16:44.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:16:44.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.011211 -999.00  +13.80  12.75     57   +5.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.6 12.8 142.6 17.3 13.9 -22.6 13.8 -21.8 13.5 -20.3 13.8 -21.7
2026-02-16T02:16:44.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:16:44.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:16:44.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.011211
2026-02-16T02:16:44.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:16:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:16:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:16:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:16:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:16:44.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:16:03', tmtdew=9.19, humidity=53.94, cloud=0.0, wind=19.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-02-16T02:16:38', seeing=2.13, atlas_timestamp='2026-02-16T00:16:08.630', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:15:00')
2026-02-16T02:16:44.733 [DEBUG] [Thread-215350] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:16:44.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:16:44.826 [DEBUG] [Thread-215353] [transport.py] [_log()] starting thread (client mode): 0xa2d27610
2026-02-16T02:16:44.826 [DEBUG] [Thread-215353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:16:44.840 [DEBUG] [Thread-215353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:16:44.840 [INFO] [Thread-215353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:16:44.847 [DEBUG] [Thread-215353] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:16:44.847 [DEBUG] [Thread-215353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:16:44.847 [DEBUG] [Thread-215353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] client lang: <none>
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] server lang: <none>
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] kex follows: False
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] Compression: none
2026-02-16T02:16:44.848 [DEBUG] [Thread-215353] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:16:44.908 [DEBUG] [Thread-215353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:16:44.909 [DEBUG] [Thread-215353] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:16:44.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:16:44.910 [DEBUG] [Thread-215353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:16:44.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:16:44.965 [DEBUG] [Thread-215353] [transport.py] [_log()] userauth is OK
2026-02-16T02:16:44.965 [DEBUG] [Thread-215353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:16:44.965 [DEBUG] [Thread-215353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:16:44.965 [DEBUG] [Thread-215353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:16:44.965 [DEBUG] [Thread-215353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:16:44.984 [INFO] [Thread-215353] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:16:44.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:16:44.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:16:45.713 [DEBUG] [Thread-215355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:45.770 [DEBUG] [Thread-215353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:16:45.771 [DEBUG] [Thread-215353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:16:45.819 [DEBUG] [Thread-215353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:16:45.819 [DEBUG] [Thread-215353] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:16:45.828 [DEBUG] [Thread-215353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:16:45.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:16:45.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:16:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:16:45.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:16:45.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:16:45.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:16:45.860 [DEBUG] [Thread-215353] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:16:48.990 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:51.771 [DEBUG] [Thread-215356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:16:56.209 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:06.826 [DEBUG] [Thread-215357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:15.074 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:17:15.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:17:15.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:17:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 16, 38), 9.19, 53.78, 0.0, 20.57, 13.77, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:17:18.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:16:38
2026-02-16T02:17:18.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:17:18.742 [DEBUG] [Thread-215358] [transport.py] [_log()] starting thread (client mode): 0xa57b0d60
2026-02-16T02:17:18.743 [DEBUG] [Thread-215358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:17:18.763 [DEBUG] [Thread-215358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:17:18.763 [INFO] [Thread-215358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:18.766 [DEBUG] [Thread-215358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] client lang: <none>
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] server lang: <none>
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] kex follows: False
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] Compression: none
2026-02-16T02:17:18.767 [DEBUG] [Thread-215358] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:17:18.784 [DEBUG] [Thread-215358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:17:18.784 [DEBUG] [Thread-215358] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:17:18.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:17:18.786 [DEBUG] [Thread-215358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:17:18.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:17:18.788 [DEBUG] [Thread-215358] [transport.py] [_log()] userauth is OK
2026-02-16T02:17:18.788 [DEBUG] [Thread-215358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:17:18.788 [DEBUG] [Thread-215358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:17:18.788 [DEBUG] [Thread-215358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:17:18.788 [DEBUG] [Thread-215358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:17:18.813 [INFO] [Thread-215358] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:17:18.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:17:19.425 [DEBUG] [Thread-215358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:17:19.425 [DEBUG] [Thread-215358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:17:19.426 [DEBUG] [Thread-215358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:17:19.466 [DEBUG] [Thread-215358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:17:19.467 [DEBUG] [Thread-215358] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:17:19.469 [DEBUG] [Thread-215358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:17:19.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:17:19.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:17:19.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:17:19.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:17:19.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:17:19.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:17:19.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:17:19.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:17:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:17:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.011905 -999.00  +13.70  12.70     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.9 12.7 154.0 19.2 13.9 -22.8 13.8 -21.7 13.5 -20.5 13.8 -21.8
2026-02-16T02:17:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:17:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:17:19.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.011905
2026-02-16T02:17:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:17:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:17:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:17:19.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:17:19.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:17:19.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:16:38', tmtdew=9.19, humidity=53.78, cloud=0.0, wind=20.57, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:17:14', seeing=2.28, atlas_timestamp='2026-02-16T00:17:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:15:00')
2026-02-16T02:17:19.495 [DEBUG] [Thread-215358] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:17:19.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:17:19.589 [DEBUG] [Thread-215361] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1f0
2026-02-16T02:17:19.589 [DEBUG] [Thread-215361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:17:19.608 [DEBUG] [Thread-215361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:17:19.608 [INFO] [Thread-215361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:17:19.617 [DEBUG] [Thread-215361] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:17:19.617 [DEBUG] [Thread-215361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] client lang: <none>
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] server lang: <none>
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] kex follows: False
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:17:19.618 [DEBUG] [Thread-215361] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:17:19.619 [DEBUG] [Thread-215361] [transport.py] [_log()] Compression: none
2026-02-16T02:17:19.619 [DEBUG] [Thread-215361] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:17:19.679 [DEBUG] [Thread-215361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:17:19.680 [DEBUG] [Thread-215361] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:17:19.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:17:19.681 [DEBUG] [Thread-215361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:17:19.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:17:19.736 [DEBUG] [Thread-215361] [transport.py] [_log()] userauth is OK
2026-02-16T02:17:19.737 [DEBUG] [Thread-215361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:17:19.737 [DEBUG] [Thread-215361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:17:19.737 [DEBUG] [Thread-215361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:17:19.737 [DEBUG] [Thread-215361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:17:19.757 [INFO] [Thread-215361] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:17:19.757 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:17:19.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:17:20.572 [DEBUG] [Thread-215361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:17:20.572 [DEBUG] [Thread-215361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:17:20.620 [DEBUG] [Thread-215361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:17:20.621 [DEBUG] [Thread-215361] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:17:20.630 [DEBUG] [Thread-215361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:17:20.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:17:20.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:17:20.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:17:20.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:17:20.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:17:20.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:17:20.667 [DEBUG] [Thread-215361] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:17:21.862 [DEBUG] [Thread-215363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:33.737 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:36.912 [DEBUG] [Thread-215364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:38.591 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:38.592 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:45.779 [DEBUG] [Thread-215365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:50.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:17:50.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:17:50.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:17:51.945 [DEBUG] [Thread-215366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:52.385 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:17:52.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 17, 13), 9.51, 52.66, 0.0, 15.4, 13.78, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:17:52.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:17:13
2026-02-16T02:17:53.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:17:53.338 [DEBUG] [Thread-215367] [transport.py] [_log()] starting thread (client mode): 0xa57b3550
2026-02-16T02:17:53.338 [DEBUG] [Thread-215367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:17:53.359 [DEBUG] [Thread-215367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:17:53.359 [INFO] [Thread-215367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:17:53.360 [DEBUG] [Thread-215367] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:17:53.360 [DEBUG] [Thread-215367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] client lang: <none>
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] server lang: <none>
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] kex follows: False
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] Compression: none
2026-02-16T02:17:53.361 [DEBUG] [Thread-215367] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:17:53.375 [DEBUG] [Thread-215367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:17:53.376 [DEBUG] [Thread-215367] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:17:53.376 [DEBUG] [Thread-215367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:17:53.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:17:53.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:17:53.378 [DEBUG] [Thread-215367] [transport.py] [_log()] userauth is OK
2026-02-16T02:17:53.379 [DEBUG] [Thread-215367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:17:53.379 [DEBUG] [Thread-215367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:17:53.379 [DEBUG] [Thread-215367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:17:53.379 [DEBUG] [Thread-215367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:17:53.403 [INFO] [Thread-215367] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:17:53.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:17:54.008 [DEBUG] [Thread-215367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:17:54.008 [DEBUG] [Thread-215367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:17:54.009 [DEBUG] [Thread-215367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:17:54.050 [DEBUG] [Thread-215367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:17:54.050 [DEBUG] [Thread-215367] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:17:54.052 [DEBUG] [Thread-215367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:17:54.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:17:54.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:17:54.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:17:54.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:17:54.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:17:54.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:17:54.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:17:54.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:17:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:17:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.012252 -999.00  +13.60  12.84     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.8 12.8 147.4 22.2 13.9 -22.6 13.8 -21.6 13.5 -20.4 13.8 -21.5
2026-02-16T02:17:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:17:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:17:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.012252
2026-02-16T02:17:54.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:17:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:17:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:17:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:17:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:17:54.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:17:13', tmtdew=9.51, humidity=52.66, cloud=0.0, wind=15.4, temperature=13.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:17:50', seeing=2.2, atlas_timestamp='2026-02-16T00:17:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:15:00')
2026-02-16T02:17:54.075 [DEBUG] [Thread-215367] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:17:54.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:17:54.173 [DEBUG] [Thread-215370] [transport.py] [_log()] starting thread (client mode): 0xa5771d50
2026-02-16T02:17:54.173 [DEBUG] [Thread-215370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:17:54.188 [DEBUG] [Thread-215370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:17:54.188 [INFO] [Thread-215370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:17:54.196 [DEBUG] [Thread-215370] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:17:54.196 [DEBUG] [Thread-215370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:17:54.196 [DEBUG] [Thread-215370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:17:54.196 [DEBUG] [Thread-215370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:54.196 [DEBUG] [Thread-215370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:17:54.196 [DEBUG] [Thread-215370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] client lang: <none>
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] server lang: <none>
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] kex follows: False
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:17:54.197 [DEBUG] [Thread-215370] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:17:54.198 [DEBUG] [Thread-215370] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:17:54.198 [DEBUG] [Thread-215370] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:17:54.198 [DEBUG] [Thread-215370] [transport.py] [_log()] Compression: none
2026-02-16T02:17:54.198 [DEBUG] [Thread-215370] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:17:54.255 [DEBUG] [Thread-215370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:17:54.256 [DEBUG] [Thread-215370] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:17:54.256 [DEBUG] [Thread-215370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:17:54.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:17:54.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:17:54.311 [DEBUG] [Thread-215370] [transport.py] [_log()] userauth is OK
2026-02-16T02:17:54.312 [DEBUG] [Thread-215370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:17:54.312 [DEBUG] [Thread-215370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:17:54.312 [DEBUG] [Thread-215370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:17:54.312 [DEBUG] [Thread-215370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:17:54.330 [INFO] [Thread-215370] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:17:54.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:17:54.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:17:55.197 [DEBUG] [Thread-215370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:17:55.198 [DEBUG] [Thread-215370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:17:55.246 [DEBUG] [Thread-215370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:17:55.246 [DEBUG] [Thread-215370] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:17:55.254 [DEBUG] [Thread-215370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:17:55.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:17: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')
2026-02-16T02:17:55.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:17:55.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:17:55.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:17:55.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:17:55.288 [DEBUG] [Thread-215370] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:18:06.981 [DEBUG] [Thread-215372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:11.199 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:22.032 [DEBUG] [Thread-215373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:25.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:18:25.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:18:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:18:27.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 17, 49), 9.21, 53.66, 0.0, 20.93, 13.68, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:18:27.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:17:49
2026-02-16T02:18:27.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:18:27.864 [DEBUG] [Thread-215374] [transport.py] [_log()] starting thread (client mode): 0xa2dc2f50
2026-02-16T02:18:27.864 [DEBUG] [Thread-215374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:18:27.880 [DEBUG] [Thread-215374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:18:27.880 [INFO] [Thread-215374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] client lang: <none>
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] server lang: <none>
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] kex follows: False
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] Compression: none
2026-02-16T02:18:27.883 [DEBUG] [Thread-215374] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:18:27.901 [DEBUG] [Thread-215374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:18:27.902 [DEBUG] [Thread-215374] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:18:27.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:18:27.903 [DEBUG] [Thread-215374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:18:27.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:18:27.905 [DEBUG] [Thread-215374] [transport.py] [_log()] userauth is OK
2026-02-16T02:18:27.905 [DEBUG] [Thread-215374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:18:27.905 [DEBUG] [Thread-215374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:18:27.905 [DEBUG] [Thread-215374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:18:27.905 [DEBUG] [Thread-215374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:18:27.930 [INFO] [Thread-215374] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:18:27.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:18:28.496 [DEBUG] [Thread-215374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:18:28.497 [DEBUG] [Thread-215374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:18:28.497 [DEBUG] [Thread-215374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:18:28.537 [DEBUG] [Thread-215374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:18:28.537 [DEBUG] [Thread-215374] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:18:28.541 [DEBUG] [Thread-215374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:18:28.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:18:28.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:18:28.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:18:28.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:18:28.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:18:28.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:18:28.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:18:28.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:18:28.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:18:28.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.012599 -999.00  +13.60  14.31     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.6 14.3 145.8 17.6 13.8 -22.8 13.8 -21.6 13.5 -20.5 13.8 -21.7
2026-02-16T02:18:28.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:18:28.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:18:28.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.012599
2026-02-16T02:18:28.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:18:28.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:18:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:18:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:18:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:18:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:17:49', tmtdew=9.21, humidity=53.66, cloud=0.0, wind=20.93, temperature=13.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:17:50', seeing=2.2, atlas_timestamp='2026-02-16T00:18:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:15:00')
2026-02-16T02:18:28.566 [DEBUG] [Thread-215374] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:18:28.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:18:28.661 [DEBUG] [Thread-215377] [transport.py] [_log()] starting thread (client mode): 0xa2d6c550
2026-02-16T02:18:28.661 [DEBUG] [Thread-215377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:18:28.677 [DEBUG] [Thread-215377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:18:28.677 [INFO] [Thread-215377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:18:28.685 [DEBUG] [Thread-215377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] client lang: <none>
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] server lang: <none>
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] kex follows: False
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] Compression: none
2026-02-16T02:18:28.686 [DEBUG] [Thread-215377] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:18:28.745 [DEBUG] [Thread-215377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:18:28.746 [DEBUG] [Thread-215377] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:18:28.746 [DEBUG] [Thread-215377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:18:28.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:18:28.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:18:28.803 [DEBUG] [Thread-215377] [transport.py] [_log()] userauth is OK
2026-02-16T02:18:28.804 [DEBUG] [Thread-215377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:18:28.804 [DEBUG] [Thread-215377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:18:28.804 [DEBUG] [Thread-215377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:18:28.804 [DEBUG] [Thread-215377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:18:28.829 [INFO] [Thread-215377] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:18:28.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:18:28.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:18:29.709 [DEBUG] [Thread-215377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:18:29.709 [DEBUG] [Thread-215377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:18:29.761 [DEBUG] [Thread-215377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:18:29.762 [DEBUG] [Thread-215377] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:18:29.771 [DEBUG] [Thread-215377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:18:29.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:18:29.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:18:29.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:18:29.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:18:29.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:18:29.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:18:29.809 [DEBUG] [Thread-215377] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:18:29.954 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:37.066 [DEBUG] [Thread-215379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:38.797 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:38.798 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:45.851 [DEBUG] [Thread-215380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:48.604 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:52.128 [DEBUG] [Thread-215381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:18:59.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:18:59.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:18:59.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:19:01.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 18, 25), 9.23, 53.59, 0.0, 20.94, 13.72, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:19:01.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:18:25
2026-02-16T02:19:02.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:19:02.200 [DEBUG] [Thread-215382] [transport.py] [_log()] starting thread (client mode): 0xa2d265c0
2026-02-16T02:19:02.200 [DEBUG] [Thread-215382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:19:02.212 [DEBUG] [Thread-215382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:19:02.212 [INFO] [Thread-215382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:19:02.214 [DEBUG] [Thread-215382] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:19:02.214 [DEBUG] [Thread-215382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] client lang: <none>
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] server lang: <none>
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] kex follows: False
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] Compression: none
2026-02-16T02:19:02.215 [DEBUG] [Thread-215382] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:19:02.223 [DEBUG] [Thread-215382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:19:02.223 [DEBUG] [Thread-215382] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:19:02.223 [DEBUG] [Thread-215382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:19:02.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:19:02.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:19:02.225 [DEBUG] [Thread-215382] [transport.py] [_log()] userauth is OK
2026-02-16T02:19:02.225 [DEBUG] [Thread-215382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:19:02.225 [DEBUG] [Thread-215382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:19:02.225 [DEBUG] [Thread-215382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:19:02.225 [DEBUG] [Thread-215382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:19:02.238 [INFO] [Thread-215382] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:19:02.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:19:02.832 [DEBUG] [Thread-215382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:19:02.832 [DEBUG] [Thread-215382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:19:02.833 [DEBUG] [Thread-215382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:19:02.873 [DEBUG] [Thread-215382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:19:02.873 [DEBUG] [Thread-215382] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:19:02.875 [DEBUG] [Thread-215382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:19:02.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:19:02.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:19:02.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:19:02.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:19:02.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:19:02.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:19:02.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:19:02.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:19:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:19:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.012947 -999.00  +13.60  15.47     58   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.3 15.5 136.4 19.4 13.8 -22.7 13.8 -21.7 13.4 -20.4 13.8 -21.7
2026-02-16T02:19:02.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:19:02.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:19:02.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.012947
2026-02-16T02:19:02.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:19:02.896 [DEBUG] [Thread-215382] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:19:02.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:19:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:19:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:19:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:19:02.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:18:25', tmtdew=9.23, humidity=53.59, cloud=0.0, wind=20.94, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:18:25', seeing=2.73, atlas_timestamp='2026-02-16T00:18:38.621', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:17:00')
2026-02-16T02:19:02.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:19:03.001 [DEBUG] [Thread-215385] [transport.py] [_log()] starting thread (client mode): 0xa2d6e110
2026-02-16T02:19:03.001 [DEBUG] [Thread-215385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:19:03.015 [DEBUG] [Thread-215385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:19:03.015 [INFO] [Thread-215385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:03.023 [DEBUG] [Thread-215385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] client lang: <none>
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] server lang: <none>
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] kex follows: False
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] Compression: none
2026-02-16T02:19:03.024 [DEBUG] [Thread-215385] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:19:03.083 [DEBUG] [Thread-215385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:19:03.084 [DEBUG] [Thread-215385] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:19:03.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:19:03.085 [DEBUG] [Thread-215385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:19:03.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:19:03.139 [DEBUG] [Thread-215385] [transport.py] [_log()] userauth is OK
2026-02-16T02:19:03.140 [DEBUG] [Thread-215385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:19:03.140 [DEBUG] [Thread-215385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:19:03.140 [DEBUG] [Thread-215385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:19:03.140 [DEBUG] [Thread-215385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:19:03.162 [INFO] [Thread-215385] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:19:03.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:19:03.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:19:03.981 [DEBUG] [Thread-215385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:19:03.981 [DEBUG] [Thread-215385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:19:04.028 [DEBUG] [Thread-215385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:19:04.029 [DEBUG] [Thread-215385] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:19:04.038 [DEBUG] [Thread-215385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:19:04.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:19: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')
2026-02-16T02:19:04.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:19:04.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:19:04.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:19:04.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:19:04.076 [DEBUG] [Thread-215385] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:19:07.163 [DEBUG] [Thread-215387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:07.269 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:22.214 [DEBUG] [Thread-215388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:26.228 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:34.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:19:34.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:19:34.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:19:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 19), 9.22, 53.46, 0.0, 17.1, 13.72, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:19:36.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:19:00
2026-02-16T02:19:36.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:19:36.506 [DEBUG] [Thread-215389] [transport.py] [_log()] starting thread (client mode): 0xa2d26860
2026-02-16T02:19:36.507 [DEBUG] [Thread-215389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:19:36.525 [DEBUG] [Thread-215389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:19:36.525 [INFO] [Thread-215389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] client lang: <none>
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] server lang: <none>
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] kex follows: False
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:19:36.526 [DEBUG] [Thread-215389] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:19:36.527 [DEBUG] [Thread-215389] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:19:36.527 [DEBUG] [Thread-215389] [transport.py] [_log()] Compression: none
2026-02-16T02:19:36.527 [DEBUG] [Thread-215389] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:19:36.534 [DEBUG] [Thread-215389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:19:36.534 [DEBUG] [Thread-215389] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:19:36.535 [DEBUG] [Thread-215389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:19:36.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:19:36.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:19:36.535 [DEBUG] [Thread-215389] [transport.py] [_log()] userauth is OK
2026-02-16T02:19:36.535 [DEBUG] [Thread-215389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:19:36.535 [DEBUG] [Thread-215389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:19:36.535 [DEBUG] [Thread-215389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:19:36.535 [DEBUG] [Thread-215389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:19:36.544 [INFO] [Thread-215389] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:19:36.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:19:37.116 [DEBUG] [Thread-215389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:19:37.116 [DEBUG] [Thread-215389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:19:37.116 [DEBUG] [Thread-215389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:19:37.157 [DEBUG] [Thread-215389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:19:37.157 [DEBUG] [Thread-215389] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:19:37.159 [DEBUG] [Thread-215389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:19:37.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:19:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:19:37.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:19:37.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:19:37.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:19:37.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:19:37.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:19:37.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:19:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:19:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.013294 -999.00  +13.60  12.22     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.9 12.2 143.6 17.4 13.9 -22.8 13.8 -21.6 13.5 -20.6 13.8 -21.7
2026-02-16T02:19:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:19:37.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:19:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.013294
2026-02-16T02:19:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:19:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:19:37.185 [DEBUG] [Thread-215389] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:19:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:19:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:19:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:19:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:19:00', tmtdew=9.22, humidity=53.46, cloud=0.0, wind=17.1, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:19:00', seeing=2.34, atlas_timestamp='2026-02-16T00:19:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:17:00')
2026-02-16T02:19:37.250 [DEBUG] [Thread-215392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:37.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:19:37.291 [DEBUG] [Thread-215393] [transport.py] [_log()] starting thread (client mode): 0xa2d11cc0
2026-02-16T02:19:37.291 [DEBUG] [Thread-215393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:19:37.307 [DEBUG] [Thread-215393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:19:37.307 [INFO] [Thread-215393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:19:37.314 [DEBUG] [Thread-215393] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] client lang: <none>
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] server lang: <none>
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] kex follows: False
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:19:37.315 [DEBUG] [Thread-215393] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:19:37.316 [DEBUG] [Thread-215393] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:19:37.316 [DEBUG] [Thread-215393] [transport.py] [_log()] Compression: none
2026-02-16T02:19:37.316 [DEBUG] [Thread-215393] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:19:37.372 [DEBUG] [Thread-215393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:19:37.372 [DEBUG] [Thread-215393] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:19:37.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:19:37.374 [DEBUG] [Thread-215393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:19:37.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:19:37.428 [DEBUG] [Thread-215393] [transport.py] [_log()] userauth is OK
2026-02-16T02:19:37.428 [DEBUG] [Thread-215393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:19:37.428 [DEBUG] [Thread-215393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:19:37.428 [DEBUG] [Thread-215393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:19:37.429 [DEBUG] [Thread-215393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:19:37.452 [INFO] [Thread-215393] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:19:37.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:19:37.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:19:38.257 [DEBUG] [Thread-215393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:19:38.258 [DEBUG] [Thread-215393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:19:38.306 [DEBUG] [Thread-215393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:19:38.306 [DEBUG] [Thread-215393] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:19:38.316 [DEBUG] [Thread-215393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:19:38.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:19:38.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:19:38.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:19:38.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:19:38.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:19:38.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:19:38.355 [DEBUG] [Thread-215393] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:19:38.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:39.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:45.015 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:45.920 [DEBUG] [Thread-215395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:19:52.290 [DEBUG] [Thread-215396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:03.667 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:07.320 [DEBUG] [Thread-215397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:08.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:20:08.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:20:08.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:20:10.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 19, 35), 9.35, 53.22, 0.0, 20.01, 13.96, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:20:10.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:19:35
2026-02-16T02:20:10.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:20:10.665 [DEBUG] [Thread-215398] [transport.py] [_log()] starting thread (client mode): 0xa57b0ac0
2026-02-16T02:20:10.665 [DEBUG] [Thread-215398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:20:10.685 [DEBUG] [Thread-215398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:20:10.686 [INFO] [Thread-215398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:10.687 [DEBUG] [Thread-215398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] client lang: <none>
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] server lang: <none>
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] kex follows: False
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] Compression: none
2026-02-16T02:20:10.688 [DEBUG] [Thread-215398] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:20:10.698 [DEBUG] [Thread-215398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:20:10.698 [DEBUG] [Thread-215398] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:20:10.698 [DEBUG] [Thread-215398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:20:10.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:20:10.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:20:10.700 [DEBUG] [Thread-215398] [transport.py] [_log()] userauth is OK
2026-02-16T02:20:10.700 [DEBUG] [Thread-215398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:20:10.700 [DEBUG] [Thread-215398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:20:10.700 [DEBUG] [Thread-215398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:20:10.700 [DEBUG] [Thread-215398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:20:10.724 [INFO] [Thread-215398] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:20:10.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:20:14.821 [DEBUG] [Thread-215398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:20:14.821 [DEBUG] [Thread-215398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:20:14.821 [DEBUG] [Thread-215398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:20:14.862 [DEBUG] [Thread-215398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:20:14.863 [DEBUG] [Thread-215398] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:20:14.866 [DEBUG] [Thread-215398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:20:14.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:20:14.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:20:14.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:20:14.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:20:14.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:20:14.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:20:14.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:20:14.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:20:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:20:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.013294 -999.00  +13.60  12.22     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.9 12.2 143.6 17.4 13.9 -22.8 13.8 -21.6 13.5 -20.6 13.8 -21.7
2026-02-16T02:20:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:20:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:20:14.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.013294
2026-02-16T02:20:14.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:20:14.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:20:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:20:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:20:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:20:14.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:19:35', tmtdew=9.35, humidity=53.22, cloud=0.0, wind=20.01, temperature=13.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:19:36', seeing=2.02, atlas_timestamp='2026-02-16T00:19:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:17:00')
2026-02-16T02:20:14.895 [DEBUG] [Thread-215398] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:20:14.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:20:14.992 [DEBUG] [Thread-215401] [transport.py] [_log()] starting thread (client mode): 0xa5771a80
2026-02-16T02:20:14.993 [DEBUG] [Thread-215401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:20:15.007 [DEBUG] [Thread-215401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:20:15.007 [INFO] [Thread-215401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] client lang: <none>
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] server lang: <none>
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] kex follows: False
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:20:15.015 [DEBUG] [Thread-215401] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:20:15.016 [DEBUG] [Thread-215401] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:20:15.016 [DEBUG] [Thread-215401] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:20:15.016 [DEBUG] [Thread-215401] [transport.py] [_log()] Compression: none
2026-02-16T02:20:15.016 [DEBUG] [Thread-215401] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:20:15.070 [DEBUG] [Thread-215401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:20:15.070 [DEBUG] [Thread-215401] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:20:15.070 [DEBUG] [Thread-215401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:20:15.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:20:15.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:20:15.127 [DEBUG] [Thread-215401] [transport.py] [_log()] userauth is OK
2026-02-16T02:20:15.127 [DEBUG] [Thread-215401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:20:15.127 [DEBUG] [Thread-215401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:20:15.127 [DEBUG] [Thread-215401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:20:15.127 [DEBUG] [Thread-215401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:20:15.140 [INFO] [Thread-215401] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:20:15.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:20:15.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:20:15.950 [DEBUG] [Thread-215401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:20:15.950 [DEBUG] [Thread-215401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:20:15.999 [DEBUG] [Thread-215401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:20:15.999 [DEBUG] [Thread-215401] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:20:16.008 [DEBUG] [Thread-215401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:20:16.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:20:16.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:20:16.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:20:16.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:20:16.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:20:16.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:20:16.045 [DEBUG] [Thread-215401] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:20:22.360 [DEBUG] [Thread-215403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:22.361 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:37.411 [DEBUG] [Thread-215404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:39.200 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:39.201 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:41.246 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:45.979 [DEBUG] [Thread-215405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:20:46.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:20:46.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:20:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 20, 11), 9.26, 53.46, 0.0, 18.46, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:20:48.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:20:11
2026-02-16T02:20:48.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:20:48.726 [DEBUG] [Thread-215406] [transport.py] [_log()] starting thread (client mode): 0xa5771c30
2026-02-16T02:20:48.726 [DEBUG] [Thread-215406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:20:48.745 [DEBUG] [Thread-215406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:20:48.745 [INFO] [Thread-215406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] client lang: <none>
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] server lang: <none>
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] kex follows: False
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] Compression: none
2026-02-16T02:20:48.749 [DEBUG] [Thread-215406] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:20:48.766 [DEBUG] [Thread-215406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:20:48.766 [DEBUG] [Thread-215406] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:20:48.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:20:48.767 [DEBUG] [Thread-215406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:20:48.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:20:48.769 [DEBUG] [Thread-215406] [transport.py] [_log()] userauth is OK
2026-02-16T02:20:48.770 [DEBUG] [Thread-215406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:20:48.770 [DEBUG] [Thread-215406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:20:48.770 [DEBUG] [Thread-215406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:20:48.770 [DEBUG] [Thread-215406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:20:48.795 [INFO] [Thread-215406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:20:48.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:20:49.427 [DEBUG] [Thread-215406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:20:49.427 [DEBUG] [Thread-215406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:20:49.427 [DEBUG] [Thread-215406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:20:49.467 [DEBUG] [Thread-215406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:20:49.468 [DEBUG] [Thread-215406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:20:49.471 [DEBUG] [Thread-215406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:20:49.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:20:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:20:49.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:20:49.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:20:49.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:20:49.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:20:49.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:20:49.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:20:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:20:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.013641 -999.00  +13.60  12.08     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.8 12.1 142.6 17.4 13.9 -22.8 13.8 -21.8 13.5 -20.4 13.8 -21.7
2026-02-16T02:20:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:20:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:20:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.013641
2026-02-16T02:20:49.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:20:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:20:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:20:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:20:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:20:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:20:11', tmtdew=9.26, humidity=53.46, cloud=0.0, wind=18.46, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:20:11', seeing=2.2, atlas_timestamp='2026-02-16T00:19:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:17:00')
2026-02-16T02:20:49.500 [DEBUG] [Thread-215406] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:20:49.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:20:49.595 [DEBUG] [Thread-215409] [transport.py] [_log()] starting thread (client mode): 0xa2d6c1f0
2026-02-16T02:20:49.595 [DEBUG] [Thread-215409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:20:49.610 [DEBUG] [Thread-215409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:20:49.610 [INFO] [Thread-215409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] client lang: <none>
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] server lang: <none>
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] kex follows: False
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:20:49.618 [DEBUG] [Thread-215409] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:20:49.619 [DEBUG] [Thread-215409] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:20:49.619 [DEBUG] [Thread-215409] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:20:49.619 [DEBUG] [Thread-215409] [transport.py] [_log()] Compression: none
2026-02-16T02:20:49.619 [DEBUG] [Thread-215409] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:20:49.676 [DEBUG] [Thread-215409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:20:49.676 [DEBUG] [Thread-215409] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:20:49.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:20:49.678 [DEBUG] [Thread-215409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:20:49.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:20:49.732 [DEBUG] [Thread-215409] [transport.py] [_log()] userauth is OK
2026-02-16T02:20:49.732 [DEBUG] [Thread-215409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:20:49.732 [DEBUG] [Thread-215409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:20:49.732 [DEBUG] [Thread-215409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:20:49.732 [DEBUG] [Thread-215409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:20:49.750 [INFO] [Thread-215409] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:20:49.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:20:49.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:20:50.555 [DEBUG] [Thread-215409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:20:50.555 [DEBUG] [Thread-215409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:20:50.603 [DEBUG] [Thread-215409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:20:50.604 [DEBUG] [Thread-215409] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:20:50.613 [DEBUG] [Thread-215409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:20:50.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:20:50.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:20:50.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:20:50.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:20:50.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:20:50.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:20:50.650 [DEBUG] [Thread-215409] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:20:52.451 [DEBUG] [Thread-215411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:20:59.968 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:07.501 [DEBUG] [Thread-215412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:18.641 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:21:20.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:21:20.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:21:22.537 [DEBUG] [Thread-215413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 20, 45), 9.19, 53.56, 0.0, 18.28, 13.65, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:21:22.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:20:45
2026-02-16T02:21:23.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:21:23.624 [DEBUG] [Thread-215414] [transport.py] [_log()] starting thread (client mode): 0xa2d02e30
2026-02-16T02:21:23.624 [DEBUG] [Thread-215414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:21:23.644 [DEBUG] [Thread-215414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:21:23.644 [INFO] [Thread-215414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] client lang: <none>
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] server lang: <none>
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] kex follows: False
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:21:23.647 [DEBUG] [Thread-215414] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:21:23.648 [DEBUG] [Thread-215414] [transport.py] [_log()] Compression: none
2026-02-16T02:21:23.648 [DEBUG] [Thread-215414] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:21:23.664 [DEBUG] [Thread-215414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:21:23.665 [DEBUG] [Thread-215414] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:21:23.665 [DEBUG] [Thread-215414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:21:23.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:21:23.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:21:23.667 [DEBUG] [Thread-215414] [transport.py] [_log()] userauth is OK
2026-02-16T02:21:23.668 [DEBUG] [Thread-215414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:21:23.668 [DEBUG] [Thread-215414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:21:23.668 [DEBUG] [Thread-215414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:21:23.668 [DEBUG] [Thread-215414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:21:23.692 [INFO] [Thread-215414] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:21:23.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:21:24.337 [DEBUG] [Thread-215414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:21:24.338 [DEBUG] [Thread-215414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:21:24.338 [DEBUG] [Thread-215414] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:21:24.378 [DEBUG] [Thread-215414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:21:24.379 [DEBUG] [Thread-215414] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:21:24.382 [DEBUG] [Thread-215414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:21:24.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:21:24.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:21:24.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:21:24.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:21:24.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:21:24.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:21:24.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:21:24.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:21:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:21:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.014335 -999.00  +13.50  13.36     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.5 13.4 137.6 17.6 13.8 -22.8 13.8 -21.7 13.4 -20.5 13.8 -21.7
2026-02-16T02:21:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:21:24.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:21:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.014335
2026-02-16T02:21:24.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:21:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:21:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:21:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:21:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:21:24.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:20:45', tmtdew=9.19, humidity=53.56, cloud=0.0, wind=18.28, temperature=13.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:20:46', seeing=2.1, atlas_timestamp='2026-02-16T00:20:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.020250000000000767, 0.015249999999999986, -0.03424999999999834, -0.07700000000000173, -0.0005000000000006111, 0.02325000000000088, 0.007999999999999119, 0.015249999999999986, -0.008500000000001506, -0.02800000000000047, -0.06125000000000114, -0.051000000000000156, 0.015000000000000568, 0.0022500000000000853, 0.005499999999999616, -0.019000000000000128, 0.03824999999999967, -0.038000000000000256, 0.0009999999999994458, 0.02224999999999966, 0.027999999999998693, 0.036749999999999616, 0.02925000000000111, -0.006750000000000256, 0.005499999999999616, -0.09600000000000009, 0.007750000000001478, -0.0034999999999989484, 0.040500000000001535, 0.031000000000000583, 0.0519999999999996, 0.02650000000000219, -0.04025000000000034], zp_timestamp='2026-02-16T00:17:00')
2026-02-16T02:21:24.407 [DEBUG] [Thread-215414] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:21:24.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:21:24.500 [DEBUG] [Thread-215417] [transport.py] [_log()] starting thread (client mode): 0xa5771d50
2026-02-16T02:21:24.500 [DEBUG] [Thread-215417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:21:24.514 [DEBUG] [Thread-215417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:21:24.514 [INFO] [Thread-215417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:21:24.522 [DEBUG] [Thread-215417] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:21:24.522 [DEBUG] [Thread-215417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:21:24.522 [DEBUG] [Thread-215417] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:21:24.522 [DEBUG] [Thread-215417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:24.522 [DEBUG] [Thread-215417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] client lang: <none>
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] server lang: <none>
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] kex follows: False
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] Compression: none
2026-02-16T02:21:24.523 [DEBUG] [Thread-215417] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:21:24.582 [DEBUG] [Thread-215417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:21:24.582 [DEBUG] [Thread-215417] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:21:24.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:21:24.583 [DEBUG] [Thread-215417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:21:24.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:21:24.645 [DEBUG] [Thread-215417] [transport.py] [_log()] userauth is OK
2026-02-16T02:21:24.645 [DEBUG] [Thread-215417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:21:24.645 [DEBUG] [Thread-215417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:21:24.645 [DEBUG] [Thread-215417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:21:24.645 [DEBUG] [Thread-215417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:21:24.662 [INFO] [Thread-215417] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:21:24.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:21:24.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:21:25.520 [DEBUG] [Thread-215417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:21:25.521 [DEBUG] [Thread-215417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:21:25.568 [DEBUG] [Thread-215417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:21:25.569 [DEBUG] [Thread-215417] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:21:25.578 [DEBUG] [Thread-215417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:21:25.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:21:25.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:21:25.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:21:25.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:21:25.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:21:25.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:21:25.613 [DEBUG] [Thread-215417] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:21:37.342 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:37.572 [DEBUG] [Thread-215419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:39.401 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:39.402 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:46.037 [DEBUG] [Thread-215420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:52.624 [DEBUG] [Thread-215421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:55.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:21:55.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:21:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:21:56.004 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:21:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 21, 21), 9.14, 53.74, 0.0, 17.77, 13.62, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:21:57.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:21:21
2026-02-16T02:21:58.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:21:58.376 [DEBUG] [Thread-215422] [transport.py] [_log()] starting thread (client mode): 0xa5772950
2026-02-16T02:21:58.376 [DEBUG] [Thread-215422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:21:58.397 [DEBUG] [Thread-215422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:21:58.397 [INFO] [Thread-215422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:21:58.400 [DEBUG] [Thread-215422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] client lang: <none>
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] server lang: <none>
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] kex follows: False
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] Compression: none
2026-02-16T02:21:58.401 [DEBUG] [Thread-215422] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:21:58.421 [DEBUG] [Thread-215422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:21:58.422 [DEBUG] [Thread-215422] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:21:58.422 [DEBUG] [Thread-215422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:21:58.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:21:58.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:21:58.425 [DEBUG] [Thread-215422] [transport.py] [_log()] userauth is OK
2026-02-16T02:21:58.425 [DEBUG] [Thread-215422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:21:58.425 [DEBUG] [Thread-215422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:21:58.425 [DEBUG] [Thread-215422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:21:58.425 [DEBUG] [Thread-215422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:21:58.449 [INFO] [Thread-215422] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:21:58.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:21:59.031 [DEBUG] [Thread-215422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:21:59.031 [DEBUG] [Thread-215422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:21:59.032 [DEBUG] [Thread-215422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:21:59.072 [DEBUG] [Thread-215422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:21:59.072 [DEBUG] [Thread-215422] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:21:59.076 [DEBUG] [Thread-215422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:21:59.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:21:59.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:21:59.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:21:59.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:21:59.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:21:59.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:21:59.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:21:59.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:21:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:21:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.014683 -999.00  +13.50  14.47     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.0 14.5 131.2 18.6 13.8 -22.5 13.8 -21.7 13.4 -20.3 13.8 -21.8
2026-02-16T02:21:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:21:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:21:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.014683
2026-02-16T02:21:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:21:59.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:21:21', tmtdew=9.14, humidity=53.74, cloud=0.0, wind=17.77, temperature=13.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:21:21', seeing=2.7, atlas_timestamp='2026-02-16T00:21:08.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:20:00')
2026-02-16T02:21:59.104 [DEBUG] [Thread-215422] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:21:59.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:21:59.198 [DEBUG] [Thread-215425] [transport.py] [_log()] starting thread (client mode): 0xa81d52a0
2026-02-16T02:21:59.198 [DEBUG] [Thread-215425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:21:59.212 [DEBUG] [Thread-215425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:21:59.213 [INFO] [Thread-215425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:21:59.220 [DEBUG] [Thread-215425] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] client lang: <none>
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] server lang: <none>
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] kex follows: False
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] Compression: none
2026-02-16T02:21:59.221 [DEBUG] [Thread-215425] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:21:59.278 [DEBUG] [Thread-215425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:21:59.279 [DEBUG] [Thread-215425] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:21:59.279 [DEBUG] [Thread-215425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:21:59.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:21:59.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:21:59.335 [DEBUG] [Thread-215425] [transport.py] [_log()] userauth is OK
2026-02-16T02:21:59.335 [DEBUG] [Thread-215425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:21:59.336 [DEBUG] [Thread-215425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:21:59.336 [DEBUG] [Thread-215425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:21:59.336 [DEBUG] [Thread-215425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:21:59.355 [INFO] [Thread-215425] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:21:59.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:21:59.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:22:00.057 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:00.171 [DEBUG] [Thread-215425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:22:00.171 [DEBUG] [Thread-215425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:22:00.219 [DEBUG] [Thread-215425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:22:00.220 [DEBUG] [Thread-215425] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:22:00.229 [DEBUG] [Thread-215425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:22:00.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:22:00.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:22:00.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:22:00.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:22:00.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:22:00.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:22:00.266 [DEBUG] [Thread-215425] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:22:03.217 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:07.655 [DEBUG] [Thread-215427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:08.242 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:13.617 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:14.668 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:22.701 [DEBUG] [Thread-215428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:30.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:22:30.274 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:22:30.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:22:32.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 21, 56), 9.0, 54.54, 0.0, 17.13, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:22:32.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:21:56
2026-02-16T02:22:32.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:22:32.672 [DEBUG] [Thread-215429] [transport.py] [_log()] starting thread (client mode): 0xa81d6380
2026-02-16T02:22:32.672 [DEBUG] [Thread-215429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:22:32.692 [DEBUG] [Thread-215429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:22:32.692 [INFO] [Thread-215429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:22:32.693 [DEBUG] [Thread-215429] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:22:32.693 [DEBUG] [Thread-215429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] client lang: <none>
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] server lang: <none>
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] kex follows: False
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:22:32.694 [DEBUG] [Thread-215429] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:22:32.695 [DEBUG] [Thread-215429] [transport.py] [_log()] Compression: none
2026-02-16T02:22:32.695 [DEBUG] [Thread-215429] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:22:32.702 [DEBUG] [Thread-215429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:22:32.703 [DEBUG] [Thread-215429] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:22:32.703 [DEBUG] [Thread-215429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:22:32.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:22:32.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:22:32.705 [DEBUG] [Thread-215429] [transport.py] [_log()] userauth is OK
2026-02-16T02:22:32.705 [DEBUG] [Thread-215429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:22:32.705 [DEBUG] [Thread-215429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:22:32.705 [DEBUG] [Thread-215429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:22:32.705 [DEBUG] [Thread-215429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:22:32.728 [INFO] [Thread-215429] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:22:32.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:22:33.060 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:33.364 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:33.375 [DEBUG] [Thread-215429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:22:33.376 [DEBUG] [Thread-215429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:22:33.376 [DEBUG] [Thread-215429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:22:33.416 [DEBUG] [Thread-215429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:22:33.417 [DEBUG] [Thread-215429] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:22:33.420 [DEBUG] [Thread-215429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:22:33.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:22:33.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:22:33.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:22:33.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:22:33.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:22:33.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:22:33.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:22:33.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:22:33.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:22:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.015030 -999.00  +13.50  12.06     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.3 12.1 134.4 17.5 13.8 -22.6 13.7 -21.8 13.5 -20.5 13.8 -21.8
2026-02-16T02:22:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:22:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:22:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.015030
2026-02-16T02:22:33.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:22:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:22:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:22:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:22:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:22:33.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:21:56', tmtdew=9.0, humidity=54.54, cloud=0.0, wind=17.13, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:21:57', seeing=2.31, atlas_timestamp='2026-02-16T00:21:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:20:00')
2026-02-16T02:22:33.446 [DEBUG] [Thread-215429] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:22:33.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:22:33.544 [DEBUG] [Thread-215432] [transport.py] [_log()] starting thread (client mode): 0xa2d6cd60
2026-02-16T02:22:33.544 [DEBUG] [Thread-215432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:22:33.559 [DEBUG] [Thread-215432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:22:33.559 [INFO] [Thread-215432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:22:33.566 [DEBUG] [Thread-215432] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:22:33.567 [DEBUG] [Thread-215432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:22:33.567 [DEBUG] [Thread-215432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:22:33.567 [DEBUG] [Thread-215432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] client lang: <none>
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] server lang: <none>
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] kex follows: False
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] Compression: none
2026-02-16T02:22:33.568 [DEBUG] [Thread-215432] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:22:33.627 [DEBUG] [Thread-215432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:22:33.628 [DEBUG] [Thread-215432] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:22:33.628 [DEBUG] [Thread-215432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:22:33.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:22:33.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:22:33.683 [DEBUG] [Thread-215432] [transport.py] [_log()] userauth is OK
2026-02-16T02:22:33.684 [DEBUG] [Thread-215432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:22:33.684 [DEBUG] [Thread-215432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:22:33.684 [DEBUG] [Thread-215432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:22:33.684 [DEBUG] [Thread-215432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:22:33.708 [INFO] [Thread-215432] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:22:33.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:22:33.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:22:34.535 [DEBUG] [Thread-215432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:22:34.535 [DEBUG] [Thread-215432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:22:34.583 [DEBUG] [Thread-215432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:22:34.583 [DEBUG] [Thread-215432] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:22:34.592 [DEBUG] [Thread-215432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:22:34.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:22:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:22:34.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:22:34.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:22:34.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:22:34.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:22:34.624 [DEBUG] [Thread-215432] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:22:37.431 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:37.739 [DEBUG] [Thread-215434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:39.600 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:39.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:46.094 [DEBUG] [Thread-215435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:46.845 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:51.234 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:52.166 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:52.791 [DEBUG] [Thread-215436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:22:58.174 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:02.552 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:04.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:23:04.621 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:23:04.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:23:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 22, 32), 9.19, 53.78, 0.0, 17.57, 13.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:23:06.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:22:32
2026-02-16T02:23:06.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:23:06.930 [DEBUG] [Thread-215437] [transport.py] [_log()] starting thread (client mode): 0xa2d10640
2026-02-16T02:23:06.930 [DEBUG] [Thread-215437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:23:06.950 [DEBUG] [Thread-215437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:23:06.951 [INFO] [Thread-215437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] client lang: <none>
2026-02-16T02:23:06.954 [DEBUG] [Thread-215437] [transport.py] [_log()] server lang: <none>
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] kex follows: False
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] Compression: none
2026-02-16T02:23:06.955 [DEBUG] [Thread-215437] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:23:06.972 [DEBUG] [Thread-215437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:23:06.973 [DEBUG] [Thread-215437] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:23:06.973 [DEBUG] [Thread-215437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:23:06.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:23:06.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:23:06.975 [DEBUG] [Thread-215437] [transport.py] [_log()] userauth is OK
2026-02-16T02:23:06.976 [DEBUG] [Thread-215437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:23:06.976 [DEBUG] [Thread-215437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:23:06.976 [DEBUG] [Thread-215437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:23:06.976 [DEBUG] [Thread-215437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:23:06.990 [INFO] [Thread-215437] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:23:06.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:23:07.789 [DEBUG] [Thread-215437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:23:07.789 [DEBUG] [Thread-215437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:23:07.789 [DEBUG] [Thread-215437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:23:07.826 [DEBUG] [Thread-215439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:07.829 [DEBUG] [Thread-215437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:23:07.829 [DEBUG] [Thread-215437] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:23:07.832 [DEBUG] [Thread-215437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:23:07.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:23:07.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:23:07.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:23:07.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:23:07.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:23:07.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:23:07.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:23:07.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:23:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:23:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.015377 -999.00  +13.50  12.35     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.3 12.3 142.0 17.7 13.8 -22.7 13.8 -21.7 13.4 -20.4 13.8 -21.9
2026-02-16T02:23:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:23:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:23:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.015377
2026-02-16T02:23:07.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:23:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:23:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:23:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:23:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:23:07.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:22:32', tmtdew=9.19, humidity=53.78, cloud=0.0, wind=17.57, temperature=13.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:22:33', seeing=2.39, atlas_timestamp='2026-02-16T00:22:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:20:00')
2026-02-16T02:23:07.859 [DEBUG] [Thread-215437] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:23:07.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:23:07.954 [DEBUG] [Thread-215441] [transport.py] [_log()] starting thread (client mode): 0xa2deb640
2026-02-16T02:23:07.954 [DEBUG] [Thread-215441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:23:07.969 [DEBUG] [Thread-215441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:23:07.970 [INFO] [Thread-215441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:23:07.977 [DEBUG] [Thread-215441] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:23:07.977 [DEBUG] [Thread-215441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:23:07.977 [DEBUG] [Thread-215441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] client lang: <none>
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] server lang: <none>
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] kex follows: False
2026-02-16T02:23:07.978 [DEBUG] [Thread-215441] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:23:07.979 [DEBUG] [Thread-215441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:23:07.979 [DEBUG] [Thread-215441] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:23:07.979 [DEBUG] [Thread-215441] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:23:07.979 [DEBUG] [Thread-215441] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:23:07.979 [DEBUG] [Thread-215441] [transport.py] [_log()] Compression: none
2026-02-16T02:23:07.979 [DEBUG] [Thread-215441] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:23:08.036 [DEBUG] [Thread-215441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:23:08.037 [DEBUG] [Thread-215441] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:23:08.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:23:08.038 [DEBUG] [Thread-215441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:23:08.039 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:23:08.095 [DEBUG] [Thread-215441] [transport.py] [_log()] userauth is OK
2026-02-16T02:23:08.095 [DEBUG] [Thread-215441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:23:08.095 [DEBUG] [Thread-215441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:23:08.095 [DEBUG] [Thread-215441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:23:08.096 [DEBUG] [Thread-215441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:23:08.119 [INFO] [Thread-215441] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:23:08.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:23:08.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:23:08.925 [DEBUG] [Thread-215441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:23:08.925 [DEBUG] [Thread-215441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:23:08.973 [DEBUG] [Thread-215441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:23:08.974 [DEBUG] [Thread-215441] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:23:08.983 [DEBUG] [Thread-215441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:23:08.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:23:08.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:23:09.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:23:09.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:23:09.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:23:09.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:23:09.023 [DEBUG] [Thread-215441] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:23:10.941 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:22.863 [DEBUG] [Thread-215443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:29.585 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:37.907 [DEBUG] [Thread-215444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:39.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:23:39.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:23:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:23:39.809 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:39.811 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 23, 8), 9.0, 54.69, 0.0, 18.49, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:23:40.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:23:08
2026-02-16T02:23:41.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:23:41.534 [DEBUG] [Thread-215445] [transport.py] [_log()] starting thread (client mode): 0xa57e3eb0
2026-02-16T02:23:41.534 [DEBUG] [Thread-215445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:23:41.553 [DEBUG] [Thread-215445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:23:41.553 [INFO] [Thread-215445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:23:41.557 [DEBUG] [Thread-215445] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:23:41.557 [DEBUG] [Thread-215445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:23:41.557 [DEBUG] [Thread-215445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] client lang: <none>
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] server lang: <none>
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] kex follows: False
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] Compression: none
2026-02-16T02:23:41.558 [DEBUG] [Thread-215445] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:23:41.578 [DEBUG] [Thread-215445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:23:41.579 [DEBUG] [Thread-215445] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:23:41.580 [DEBUG] [Thread-215445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:23:41.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:23:41.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:23:41.583 [DEBUG] [Thread-215445] [transport.py] [_log()] userauth is OK
2026-02-16T02:23:41.583 [DEBUG] [Thread-215445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:23:41.583 [DEBUG] [Thread-215445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:23:41.583 [DEBUG] [Thread-215445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:23:41.583 [DEBUG] [Thread-215445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:23:41.596 [INFO] [Thread-215445] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:23:41.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:23:42.236 [DEBUG] [Thread-215445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:23:42.236 [DEBUG] [Thread-215445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:23:42.236 [DEBUG] [Thread-215445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:23:42.278 [DEBUG] [Thread-215445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:23:42.278 [DEBUG] [Thread-215445] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:23:42.281 [DEBUG] [Thread-215445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:23:42.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:23:42.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:23:42.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:23:42.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:23:42.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:23:42.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:23:42.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:23:42.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:23:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:23:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.015724 -999.00  +13.50  12.48     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.6 12.5 141.6 15.2 13.8 -22.8 13.7 -21.6 13.5 -20.7 13.7 -21.8
2026-02-16T02:23:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:23:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:23:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.015724
2026-02-16T02:23:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:23:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:23:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:23:42.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:23:42.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:23:42.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:23:08', tmtdew=9.0, humidity=54.69, cloud=0.0, wind=18.49, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:23:08', seeing=2.43, atlas_timestamp='2026-02-16T00:22:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:20:00')
2026-02-16T02:23:42.308 [DEBUG] [Thread-215445] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:23:42.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:23:42.395 [DEBUG] [Thread-215448] [transport.py] [_log()] starting thread (client mode): 0xa57e1b10
2026-02-16T02:23:42.395 [DEBUG] [Thread-215448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:23:42.410 [DEBUG] [Thread-215448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:23:42.410 [INFO] [Thread-215448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:42.418 [DEBUG] [Thread-215448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] client lang: <none>
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] server lang: <none>
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] kex follows: False
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] Compression: none
2026-02-16T02:23:42.419 [DEBUG] [Thread-215448] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:23:42.474 [DEBUG] [Thread-215448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:23:42.475 [DEBUG] [Thread-215448] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:23:42.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:23:42.476 [DEBUG] [Thread-215448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:23:42.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:23:42.531 [DEBUG] [Thread-215448] [transport.py] [_log()] userauth is OK
2026-02-16T02:23:42.532 [DEBUG] [Thread-215448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:23:42.532 [DEBUG] [Thread-215448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:23:42.532 [DEBUG] [Thread-215448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:23:42.532 [DEBUG] [Thread-215448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:23:42.552 [INFO] [Thread-215448] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:23:42.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:23:42.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:23:43.370 [DEBUG] [Thread-215448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:23:43.371 [DEBUG] [Thread-215448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:23:43.418 [DEBUG] [Thread-215448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:23:43.418 [DEBUG] [Thread-215448] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:23:43.428 [DEBUG] [Thread-215448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:23:43.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:23:43.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:23:43.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:23:43.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:23:43.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:23:43.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:23:43.462 [DEBUG] [Thread-215448] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:23:46.155 [DEBUG] [Thread-215450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:48.224 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:23:52.943 [DEBUG] [Thread-215451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:02.306 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:05.353 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:06.906 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:07.990 [DEBUG] [Thread-215452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:13.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:24:13.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:24:13.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:24:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 23, 42), 9.29, 53.35, 0.0, 18.6, 13.63, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:24:15.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:23:42
2026-02-16T02:24:15.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:24:15.853 [DEBUG] [Thread-215453] [transport.py] [_log()] starting thread (client mode): 0xa57b2ef0
2026-02-16T02:24:15.853 [DEBUG] [Thread-215453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:24:15.873 [DEBUG] [Thread-215453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:24:15.873 [INFO] [Thread-215453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:15.876 [DEBUG] [Thread-215453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] client lang: <none>
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] server lang: <none>
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] kex follows: False
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] Compression: none
2026-02-16T02:24:15.877 [DEBUG] [Thread-215453] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:24:15.891 [DEBUG] [Thread-215453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:24:15.891 [DEBUG] [Thread-215453] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:24:15.892 [DEBUG] [Thread-215453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:24:15.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:24:15.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:24:15.893 [DEBUG] [Thread-215453] [transport.py] [_log()] userauth is OK
2026-02-16T02:24:15.894 [DEBUG] [Thread-215453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:24:15.894 [DEBUG] [Thread-215453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:24:15.894 [DEBUG] [Thread-215453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:24:15.894 [DEBUG] [Thread-215453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:24:15.910 [INFO] [Thread-215453] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:24:15.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:24:16.524 [DEBUG] [Thread-215453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:24:16.524 [DEBUG] [Thread-215453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:24:16.524 [DEBUG] [Thread-215453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:24:16.565 [DEBUG] [Thread-215453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:24:16.565 [DEBUG] [Thread-215453] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:24:16.567 [DEBUG] [Thread-215453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:24:16.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:24:16.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:24:16.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:24:16.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:24:16.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:24:16.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:24:16.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:24:16.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:24:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:24:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.016419 -999.00  +13.40  14.09     59   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.7 14.1 141.6 16.7 13.8 -22.6 13.7 -21.4 13.4 -20.3 13.8 -21.5
2026-02-16T02:24:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:24:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:24:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.016419
2026-02-16T02:24:16.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:24:16.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:24:16.592 [DEBUG] [Thread-215453] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:24:16.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:24:16.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:24:16.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:24:16.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:23:42', tmtdew=9.29, humidity=53.35, cloud=0.0, wind=18.6, temperature=13.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:23:43', seeing=2.07, atlas_timestamp='2026-02-16T00:23:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:20:00')
2026-02-16T02:24:16.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:24:16.699 [DEBUG] [Thread-215456] [transport.py] [_log()] starting thread (client mode): 0xa2deb1c0
2026-02-16T02:24:16.699 [DEBUG] [Thread-215456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:24:16.714 [DEBUG] [Thread-215456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:24:16.714 [INFO] [Thread-215456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:24:16.721 [DEBUG] [Thread-215456] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:16.722 [DEBUG] [Thread-215456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] client lang: <none>
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] server lang: <none>
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] kex follows: False
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:24:16.723 [DEBUG] [Thread-215456] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:24:16.724 [DEBUG] [Thread-215456] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:24:16.724 [DEBUG] [Thread-215456] [transport.py] [_log()] Compression: none
2026-02-16T02:24:16.724 [DEBUG] [Thread-215456] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:24:16.779 [DEBUG] [Thread-215456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:24:16.779 [DEBUG] [Thread-215456] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:24:16.780 [DEBUG] [Thread-215456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:24:16.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:24:16.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:24:16.834 [DEBUG] [Thread-215456] [transport.py] [_log()] userauth is OK
2026-02-16T02:24:16.834 [DEBUG] [Thread-215456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:24:16.835 [DEBUG] [Thread-215456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:24:16.835 [DEBUG] [Thread-215456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:24:16.835 [DEBUG] [Thread-215456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:24:16.849 [INFO] [Thread-215456] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:24:16.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:24:16.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:24:17.687 [DEBUG] [Thread-215456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:24:17.688 [DEBUG] [Thread-215456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:24:17.735 [DEBUG] [Thread-215456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:24:17.735 [DEBUG] [Thread-215456] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:24:17.744 [DEBUG] [Thread-215456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:24:17.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:24:17.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:24:17.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:24:17.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:24:17.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:24:17.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:24:17.777 [DEBUG] [Thread-215456] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:24:23.022 [DEBUG] [Thread-215458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:25.612 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:38.073 [DEBUG] [Thread-215459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:40.022 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:40.024 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:44.257 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:46.226 [DEBUG] [Thread-215460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:24:47.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:24:47.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:24:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:24:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 24, 18), 8.96, 54.31, 0.0, 16.75, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:24:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:24:18
2026-02-16T02:24:50.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:24:50.204 [DEBUG] [Thread-215461] [transport.py] [_log()] starting thread (client mode): 0xa2d12e00
2026-02-16T02:24:50.205 [DEBUG] [Thread-215461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:24:50.225 [DEBUG] [Thread-215461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:24:50.225 [INFO] [Thread-215461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] client lang: <none>
2026-02-16T02:24:50.228 [DEBUG] [Thread-215461] [transport.py] [_log()] server lang: <none>
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] kex follows: False
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] Compression: none
2026-02-16T02:24:50.229 [DEBUG] [Thread-215461] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:24:50.250 [DEBUG] [Thread-215461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:24:50.250 [DEBUG] [Thread-215461] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:24:50.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:24:50.252 [DEBUG] [Thread-215461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:24:50.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:24:50.254 [DEBUG] [Thread-215461] [transport.py] [_log()] userauth is OK
2026-02-16T02:24:50.254 [DEBUG] [Thread-215461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:24:50.254 [DEBUG] [Thread-215461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:24:50.254 [DEBUG] [Thread-215461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:24:50.254 [DEBUG] [Thread-215461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:24:50.277 [INFO] [Thread-215461] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:24:50.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:24:50.919 [DEBUG] [Thread-215461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:24:50.919 [DEBUG] [Thread-215461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:24:50.919 [DEBUG] [Thread-215461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:24:50.959 [DEBUG] [Thread-215461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:24:50.960 [DEBUG] [Thread-215461] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:24:50.963 [DEBUG] [Thread-215461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:24:50.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:24:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:24:50.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:24:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:24:50.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:24:50.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:24:50.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:24:50.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:24:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:24:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.016766 -999.00  +13.50  15.40     58   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.2 15.4 136.8 19.1 13.8 -22.6 13.7 -21.6 13.4 -20.3 13.7 -21.6
2026-02-16T02:24:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:24:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:24:50.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.016766
2026-02-16T02:24:50.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:24:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:24:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:24:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:24:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:24:50.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:24:18', tmtdew=8.96, humidity=54.31, cloud=0.0, wind=16.75, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:24:18', seeing=2.3, atlas_timestamp='2026-02-16T00:24:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:23:00')
2026-02-16T02:24:50.993 [DEBUG] [Thread-215461] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:24:51.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:24:51.089 [DEBUG] [Thread-215464] [transport.py] [_log()] starting thread (client mode): 0xa81d5de0
2026-02-16T02:24:51.089 [DEBUG] [Thread-215464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:24:51.104 [DEBUG] [Thread-215464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:24:51.105 [INFO] [Thread-215464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:24:51.112 [DEBUG] [Thread-215464] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:24:51.112 [DEBUG] [Thread-215464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:24:51.112 [DEBUG] [Thread-215464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:24:51.112 [DEBUG] [Thread-215464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] client lang: <none>
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] server lang: <none>
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] kex follows: False
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:24:51.113 [DEBUG] [Thread-215464] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:24:51.114 [DEBUG] [Thread-215464] [transport.py] [_log()] Compression: none
2026-02-16T02:24:51.114 [DEBUG] [Thread-215464] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:24:51.170 [DEBUG] [Thread-215464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:24:51.171 [DEBUG] [Thread-215464] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:24:51.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:24:51.172 [DEBUG] [Thread-215464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:24:51.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:24:51.227 [DEBUG] [Thread-215464] [transport.py] [_log()] userauth is OK
2026-02-16T02:24:51.227 [DEBUG] [Thread-215464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:24:51.227 [DEBUG] [Thread-215464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:24:51.228 [DEBUG] [Thread-215464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:24:51.228 [DEBUG] [Thread-215464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:24:51.252 [INFO] [Thread-215464] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:24:51.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:24:51.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:24:52.087 [DEBUG] [Thread-215464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:24:52.087 [DEBUG] [Thread-215464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:24:52.134 [DEBUG] [Thread-215464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:24:52.134 [DEBUG] [Thread-215464] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:24:52.143 [DEBUG] [Thread-215464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:24:52.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:24:52.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:24:52.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:24:52.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:24:52.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:24:52.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:24:52.179 [DEBUG] [Thread-215464] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:24:53.104 [DEBUG] [Thread-215466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:02.937 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:08.147 [DEBUG] [Thread-215467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:21.889 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:22.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:25:22.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:25:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:25:23.181 [DEBUG] [Thread-215468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 24, 53), 9.05, 54.56, 0.0, 19.44, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:25:24.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:24:53
2026-02-16T02:25:24.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:25:24.592 [DEBUG] [Thread-215469] [transport.py] [_log()] starting thread (client mode): 0xa2d6dde0
2026-02-16T02:25:24.593 [DEBUG] [Thread-215469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:25:24.612 [DEBUG] [Thread-215469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:25:24.612 [INFO] [Thread-215469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:25:24.615 [DEBUG] [Thread-215469] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:25:24.615 [DEBUG] [Thread-215469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:25:24.615 [DEBUG] [Thread-215469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:25:24.615 [DEBUG] [Thread-215469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:24.615 [DEBUG] [Thread-215469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] client lang: <none>
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] server lang: <none>
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] kex follows: False
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] Compression: none
2026-02-16T02:25:24.616 [DEBUG] [Thread-215469] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:25:24.636 [DEBUG] [Thread-215469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:25:24.637 [DEBUG] [Thread-215469] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:25:24.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:25:24.638 [DEBUG] [Thread-215469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:25:24.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:25:24.640 [DEBUG] [Thread-215469] [transport.py] [_log()] userauth is OK
2026-02-16T02:25:24.640 [DEBUG] [Thread-215469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:25:24.640 [DEBUG] [Thread-215469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:25:24.640 [DEBUG] [Thread-215469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:25:24.640 [DEBUG] [Thread-215469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:25:24.664 [INFO] [Thread-215469] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:25:24.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:25:25.254 [DEBUG] [Thread-215469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:25:25.254 [DEBUG] [Thread-215469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:25:25.255 [DEBUG] [Thread-215469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:25:25.295 [DEBUG] [Thread-215469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:25:25.295 [DEBUG] [Thread-215469] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:25:25.298 [DEBUG] [Thread-215469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:25:25.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:25:25.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:25:25.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:25:25.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:25:25.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:25:25.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:25:25.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:25:25.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:25:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:25:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.017113 -999.00  +13.60  17.75     58   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 18.6 17.8 136.6 19.3 13.8 -22.6 13.8 -21.6 13.4 -20.4 13.8 -21.6
2026-02-16T02:25:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:25:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:25:25.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.017113
2026-02-16T02:25:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:25:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:25:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:25:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:25:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:25:25.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:24:53', tmtdew=9.05, humidity=54.56, cloud=0.0, wind=19.44, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:24:54', seeing=2.02, atlas_timestamp='2026-02-16T00:24:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:23:00')
2026-02-16T02:25:25.324 [DEBUG] [Thread-215469] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:25:25.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:25:25.418 [DEBUG] [Thread-215472] [transport.py] [_log()] starting thread (client mode): 0xa2d6f430
2026-02-16T02:25:25.418 [DEBUG] [Thread-215472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:25:25.432 [DEBUG] [Thread-215472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:25:25.432 [INFO] [Thread-215472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] client lang: <none>
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] server lang: <none>
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] kex follows: False
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:25:25.440 [DEBUG] [Thread-215472] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:25:25.441 [DEBUG] [Thread-215472] [transport.py] [_log()] Compression: none
2026-02-16T02:25:25.441 [DEBUG] [Thread-215472] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:25:25.498 [DEBUG] [Thread-215472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:25:25.499 [DEBUG] [Thread-215472] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:25:25.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:25:25.499 [DEBUG] [Thread-215472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:25:25.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:25:25.554 [DEBUG] [Thread-215472] [transport.py] [_log()] userauth is OK
2026-02-16T02:25:25.555 [DEBUG] [Thread-215472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:25:25.555 [DEBUG] [Thread-215472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:25:25.555 [DEBUG] [Thread-215472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:25:25.555 [DEBUG] [Thread-215472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:25:25.575 [INFO] [Thread-215472] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:25:25.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:25:25.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:25:26.393 [DEBUG] [Thread-215472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:25:26.393 [DEBUG] [Thread-215472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:25:26.441 [DEBUG] [Thread-215472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:25:26.441 [DEBUG] [Thread-215472] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:25:26.450 [DEBUG] [Thread-215472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:25:26.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:25:26.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:25:26.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:25:26.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:25:26.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:25:26.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:25:26.486 [DEBUG] [Thread-215472] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:25:38.213 [DEBUG] [Thread-215474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:40.226 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:40.227 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:40.589 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:46.279 [DEBUG] [Thread-215475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:53.253 [DEBUG] [Thread-215476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:56.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:25:56.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:25:56.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:25:58.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 25, 28), 9.04, 54.57, 0.0, 16.0, 13.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:25:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:25:28
2026-02-16T02:25:58.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:25:58.966 [DEBUG] [Thread-215477] [transport.py] [_log()] starting thread (client mode): 0xa2deba00
2026-02-16T02:25:58.966 [DEBUG] [Thread-215477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:25:58.986 [DEBUG] [Thread-215477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:25:58.987 [INFO] [Thread-215477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] client lang: <none>
2026-02-16T02:25:58.990 [DEBUG] [Thread-215477] [transport.py] [_log()] server lang: <none>
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] kex follows: False
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] Compression: none
2026-02-16T02:25:58.991 [DEBUG] [Thread-215477] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:25:59.009 [DEBUG] [Thread-215477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:25:59.009 [DEBUG] [Thread-215477] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:25:59.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:25:59.011 [DEBUG] [Thread-215477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:25:59.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:25:59.013 [DEBUG] [Thread-215477] [transport.py] [_log()] userauth is OK
2026-02-16T02:25:59.014 [DEBUG] [Thread-215477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:25:59.014 [DEBUG] [Thread-215477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:25:59.014 [DEBUG] [Thread-215477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:25:59.014 [DEBUG] [Thread-215477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:25:59.031 [INFO] [Thread-215477] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:25:59.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:25:59.237 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:25:59.690 [DEBUG] [Thread-215477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:25:59.690 [DEBUG] [Thread-215477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:25:59.691 [DEBUG] [Thread-215477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:25:59.731 [DEBUG] [Thread-215477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:25:59.732 [DEBUG] [Thread-215477] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:25:59.735 [DEBUG] [Thread-215477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:25:59.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:25:59.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:25:59.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:25:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:25:59.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:25:59.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:25:59.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:25:59.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:25:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:25:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.017460 -999.00  +13.60  14.71     58   +5.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.3 14.7 141.8 20.8 13.8 -22.7 13.8 -21.6 13.5 -20.4 13.8 -21.5
2026-02-16T02:25:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:25:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:25:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.017460
2026-02-16T02:25:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:25:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:25:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:25:59.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:25:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:25:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:25:28', tmtdew=9.04, humidity=54.57, cloud=0.0, wind=16.0, temperature=13.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:25:29', seeing=2.41, atlas_timestamp='2026-02-16T00:25:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:23:00')
2026-02-16T02:25:59.764 [DEBUG] [Thread-215477] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:25:59.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:25:59.860 [DEBUG] [Thread-215480] [transport.py] [_log()] starting thread (client mode): 0xa2deaf50
2026-02-16T02:25:59.860 [DEBUG] [Thread-215480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:25:59.875 [DEBUG] [Thread-215480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:25:59.875 [INFO] [Thread-215480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] client lang: <none>
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] server lang: <none>
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] kex follows: False
2026-02-16T02:25:59.883 [DEBUG] [Thread-215480] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:25:59.884 [DEBUG] [Thread-215480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:25:59.884 [DEBUG] [Thread-215480] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:25:59.884 [DEBUG] [Thread-215480] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:25:59.884 [DEBUG] [Thread-215480] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:25:59.884 [DEBUG] [Thread-215480] [transport.py] [_log()] Compression: none
2026-02-16T02:25:59.884 [DEBUG] [Thread-215480] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:25:59.943 [DEBUG] [Thread-215480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:25:59.944 [DEBUG] [Thread-215480] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:25:59.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:25:59.945 [DEBUG] [Thread-215480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:25:59.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:25:59.999 [DEBUG] [Thread-215480] [transport.py] [_log()] userauth is OK
2026-02-16T02:25:59.999 [DEBUG] [Thread-215480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:26:00.000 [DEBUG] [Thread-215480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:26:00.000 [DEBUG] [Thread-215480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:26:00.000 [DEBUG] [Thread-215480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:26:00.024 [INFO] [Thread-215480] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:26:00.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:26:00.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:26:00.840 [DEBUG] [Thread-215480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:26:00.841 [DEBUG] [Thread-215480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:26:00.889 [DEBUG] [Thread-215480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:26:00.889 [DEBUG] [Thread-215480] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:26:00.898 [DEBUG] [Thread-215480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:26:00.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:26:00.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:26: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') -> 00000000
2026-02-16T02:26:00.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:26:00.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:26:00.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:26:00.935 [DEBUG] [Thread-215480] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:26:08.286 [DEBUG] [Thread-215482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:17.911 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:23.333 [DEBUG] [Thread-215483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:30.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:26:30.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:26: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-02-16T02:26:33.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 26, 4), 9.03, 54.62, 0.0, 16.98, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:26:33.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:26:04
2026-02-16T02:26:33.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:26:33.896 [DEBUG] [Thread-215484] [transport.py] [_log()] starting thread (client mode): 0xa2d27dc0
2026-02-16T02:26:33.896 [DEBUG] [Thread-215484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:26:33.914 [DEBUG] [Thread-215484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:26:33.915 [INFO] [Thread-215484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:26:33.917 [DEBUG] [Thread-215484] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] client lang: <none>
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] server lang: <none>
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] kex follows: False
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] Compression: none
2026-02-16T02:26:33.918 [DEBUG] [Thread-215484] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:26:33.933 [DEBUG] [Thread-215484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:26:33.934 [DEBUG] [Thread-215484] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:26:33.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:26:33.935 [DEBUG] [Thread-215484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:26:33.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:26:33.937 [DEBUG] [Thread-215484] [transport.py] [_log()] userauth is OK
2026-02-16T02:26:33.937 [DEBUG] [Thread-215484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:26:33.938 [DEBUG] [Thread-215484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:26:33.938 [DEBUG] [Thread-215484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:26:33.938 [DEBUG] [Thread-215484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:26:33.962 [INFO] [Thread-215484] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:26:33.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:26:34.613 [DEBUG] [Thread-215484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:26:34.614 [DEBUG] [Thread-215484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:26:34.614 [DEBUG] [Thread-215484] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:26:34.654 [DEBUG] [Thread-215484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:26:34.655 [DEBUG] [Thread-215484] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:26:34.658 [DEBUG] [Thread-215484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:26:34.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:26:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:26:34.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:26:34.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:26:34.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:26:34.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:26:34.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:26:34.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:26:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:26:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.017808 -999.00  +13.60  13.28     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.8 13.3 136.6 16.1 13.8 -22.7 13.7 -21.7 13.5 -20.5 13.8 -21.7
2026-02-16T02:26:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:26:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:26:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.017808
2026-02-16T02:26:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:26:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:26:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:26:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:26:34.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:26:34.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:26:04', tmtdew=9.03, humidity=54.62, cloud=0.0, wind=16.98, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:26:04', seeing=2.09, atlas_timestamp='2026-02-16T00:25:38.611', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:23:00')
2026-02-16T02:26:34.687 [DEBUG] [Thread-215484] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:26:34.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:26:34.785 [DEBUG] [Thread-215487] [transport.py] [_log()] starting thread (client mode): 0xa2d863b0
2026-02-16T02:26:34.785 [DEBUG] [Thread-215487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:26:34.800 [DEBUG] [Thread-215487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:26:34.800 [INFO] [Thread-215487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:26:34.808 [DEBUG] [Thread-215487] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] client lang: <none>
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] server lang: <none>
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] kex follows: False
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:26:34.809 [DEBUG] [Thread-215487] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:26:34.810 [DEBUG] [Thread-215487] [transport.py] [_log()] Compression: none
2026-02-16T02:26:34.810 [DEBUG] [Thread-215487] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:26:34.866 [DEBUG] [Thread-215487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:26:34.867 [DEBUG] [Thread-215487] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:26:34.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:26:34.868 [DEBUG] [Thread-215487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:26:34.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:26:34.923 [DEBUG] [Thread-215487] [transport.py] [_log()] userauth is OK
2026-02-16T02:26:34.923 [DEBUG] [Thread-215487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:26:34.923 [DEBUG] [Thread-215487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:26:34.923 [DEBUG] [Thread-215487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:26:34.924 [DEBUG] [Thread-215487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:26:34.942 [INFO] [Thread-215487] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:26:34.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:26:34.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:26:35.799 [DEBUG] [Thread-215487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:26:35.799 [DEBUG] [Thread-215487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:26:35.847 [DEBUG] [Thread-215487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:26:35.848 [DEBUG] [Thread-215487] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:26:35.857 [DEBUG] [Thread-215487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:26:35.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:26: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')
2026-02-16T02:26:35.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:26:35.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:26:35.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:26:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:26:35.895 [DEBUG] [Thread-215487] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:26:36.845 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:38.380 [DEBUG] [Thread-215489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:40.430 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:40.431 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:46.351 [DEBUG] [Thread-215490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:53.431 [DEBUG] [Thread-215491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:26:55.814 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:05.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:27:05.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:27:05.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:27:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 26, 39), 8.95, 54.65, 0.0, 16.27, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:27:07.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:26:39
2026-02-16T02:27:08.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:27:08.199 [DEBUG] [Thread-215492] [transport.py] [_log()] starting thread (client mode): 0xa2d87880
2026-02-16T02:27:08.199 [DEBUG] [Thread-215492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:27:08.219 [DEBUG] [Thread-215492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:27:08.219 [INFO] [Thread-215492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:27:08.222 [DEBUG] [Thread-215492] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:27:08.222 [DEBUG] [Thread-215492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:27:08.222 [DEBUG] [Thread-215492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:27:08.222 [DEBUG] [Thread-215492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] client lang: <none>
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] server lang: <none>
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] kex follows: False
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] Compression: none
2026-02-16T02:27:08.223 [DEBUG] [Thread-215492] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:27:08.242 [DEBUG] [Thread-215492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:27:08.242 [DEBUG] [Thread-215492] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:27:08.243 [DEBUG] [Thread-215492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:27:08.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:27:08.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:27:08.285 [DEBUG] [Thread-215492] [transport.py] [_log()] userauth is OK
2026-02-16T02:27:08.285 [DEBUG] [Thread-215492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:27:08.285 [DEBUG] [Thread-215492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:27:08.285 [DEBUG] [Thread-215492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:27:08.285 [DEBUG] [Thread-215492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:27:08.312 [INFO] [Thread-215492] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:27:08.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:27:08.464 [DEBUG] [Thread-215494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:08.908 [DEBUG] [Thread-215492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:27:08.909 [DEBUG] [Thread-215492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:27:08.909 [DEBUG] [Thread-215492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:27:08.949 [DEBUG] [Thread-215492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:27:08.950 [DEBUG] [Thread-215492] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:27:08.953 [DEBUG] [Thread-215492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:27:08.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:27:08.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:27:08.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:27:08.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:27:08.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:27:08.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:27:08.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:27:08.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:27:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:27:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.018155 -999.00  +13.50  14.35     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.3 14.3 140.8 15.3 13.8 -22.8 13.8 -21.8 13.4 -20.6 13.8 -21.8
2026-02-16T02:27:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:27:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:27:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.018155
2026-02-16T02:27:08.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:27:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:27:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:27:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:27:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:27:08.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:26:39', tmtdew=8.95, humidity=54.65, cloud=0.0, wind=16.27, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:26:39', seeing=2.16, atlas_timestamp='2026-02-16T00:26:08.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.005250000000000199, 0.048250000000001236, 0.03974999999999973, -0.07650000000000112, -0.005499999999999616, 0.07075000000000031, 0.058999999999999275, 0.007750000000001478, -0.0015000000000000568, 0.022999999999999687, -0.02725000000000044, -0.032999999999999474, 0.041499999999999204, 0.04075000000000095, 0.017999999999998906, 0.05799999999999983, 0.10324999999999918, -0.0024999999999995026, 0.04499999999999993, 0.021249999999998437, 0.06149999999999878, 0.06474999999999831, 0.06625000000000014, 0.07275000000000098, 0.04499999999999993, -0.029500000000000526, 0.040749999999999176, -0.014999999999998792, 0.08150000000000013, 0.059499999999999886, 0.0990000000000002, 0.08500000000000085, -0.013250000000001094], zp_timestamp='2026-02-16T00:23:00')
2026-02-16T02:27:08.977 [DEBUG] [Thread-215492] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:27:09.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:27:09.073 [DEBUG] [Thread-215496] [transport.py] [_log()] starting thread (client mode): 0xa2d871c0
2026-02-16T02:27:09.073 [DEBUG] [Thread-215496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:27:09.087 [DEBUG] [Thread-215496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:27:09.088 [INFO] [Thread-215496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] client lang: <none>
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] server lang: <none>
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] kex follows: False
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:27:09.095 [DEBUG] [Thread-215496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:27:09.096 [DEBUG] [Thread-215496] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:27:09.096 [DEBUG] [Thread-215496] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:27:09.096 [DEBUG] [Thread-215496] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:27:09.096 [DEBUG] [Thread-215496] [transport.py] [_log()] Compression: none
2026-02-16T02:27:09.096 [DEBUG] [Thread-215496] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:27:09.152 [DEBUG] [Thread-215496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:27:09.153 [DEBUG] [Thread-215496] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:27:09.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:27:09.154 [DEBUG] [Thread-215496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:27:09.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:27:09.209 [DEBUG] [Thread-215496] [transport.py] [_log()] userauth is OK
2026-02-16T02:27:09.209 [DEBUG] [Thread-215496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:27:09.209 [DEBUG] [Thread-215496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:27:09.209 [DEBUG] [Thread-215496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:27:09.210 [DEBUG] [Thread-215496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:27:09.229 [INFO] [Thread-215496] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:27:09.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:27:09.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:27:10.062 [DEBUG] [Thread-215496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:27:10.062 [DEBUG] [Thread-215496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:27:10.110 [DEBUG] [Thread-215496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:27:10.111 [DEBUG] [Thread-215496] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:27:10.119 [DEBUG] [Thread-215496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:27:10.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:27:10.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:27:10.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:27:10.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:27:10.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:27:10.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:27:10.156 [DEBUG] [Thread-215496] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:27:14.609 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:23.500 [DEBUG] [Thread-215498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:29.418 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:33.289 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:33.904 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:36.942 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:38.559 [DEBUG] [Thread-215499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:40.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:27:40.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:27:40.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:27:40.631 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:40.633 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 27, 14), 8.96, 54.71, 0.0, 16.23, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:27:42.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:27:14
2026-02-16T02:27:42.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:27:42.720 [DEBUG] [Thread-215500] [transport.py] [_log()] starting thread (client mode): 0xa2d86080
2026-02-16T02:27:42.721 [DEBUG] [Thread-215500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:27:42.740 [DEBUG] [Thread-215500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:27:42.740 [INFO] [Thread-215500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:27:42.743 [DEBUG] [Thread-215500] [transport.py] [_log()] client lang: <none>
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] server lang: <none>
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] kex follows: False
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] Compression: none
2026-02-16T02:27:42.744 [DEBUG] [Thread-215500] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:27:42.764 [DEBUG] [Thread-215500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:27:42.765 [DEBUG] [Thread-215500] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:27:42.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:27:42.766 [DEBUG] [Thread-215500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:27:42.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:27:42.768 [DEBUG] [Thread-215500] [transport.py] [_log()] userauth is OK
2026-02-16T02:27:42.768 [DEBUG] [Thread-215500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:27:42.769 [DEBUG] [Thread-215500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:27:42.769 [DEBUG] [Thread-215500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:27:42.769 [DEBUG] [Thread-215500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:27:42.794 [INFO] [Thread-215500] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:27:42.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:27:43.308 [DEBUG] [Thread-94337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:43.412 [DEBUG] [Thread-215500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:27:43.412 [DEBUG] [Thread-215500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:27:43.412 [DEBUG] [Thread-215500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:27:43.453 [DEBUG] [Thread-215500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:27:43.454 [DEBUG] [Thread-215500] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:27:43.457 [DEBUG] [Thread-215500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:27:43.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:27:43.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:27:43.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:27:43.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:27:43.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:27:43.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:27:43.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:27:43.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:27:43.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:27:43.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.018849 -999.00  +13.50  13.80     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.9 13.8 140.8 16.6 13.8 -22.7 13.8 -21.7 13.4 -20.3 13.7 -21.6
2026-02-16T02:27:43.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:27:43.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:27:43.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.018849
2026-02-16T02:27:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:27:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:27:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:27:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:27:43.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:27:43.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:27:14', tmtdew=8.96, humidity=54.71, cloud=0.0, wind=16.23, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:27:14', seeing=2.01, atlas_timestamp='2026-02-16T00:27:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.010249999999999204, -0.014749999999999375, -0.07900000000000063, -0.061500000000000554, 0.007250000000000867, -0.0039999999999995595, 0.008250000000000313, -0.0005000000000006111, -0.03599999999999959, -0.05975000000000108, -0.054999999999999716, 0.01699999999999946, -0.0022500000000018616, -0.018000000000000682, 0.0, 0.03924999999999912, -0.049000000000001265, 0.007999999999999119, -0.03275000000000183, 0.01899999999999835, 0.039749999999997954, 0.021250000000000213, 0.010749999999999815, 0.011999999999998678, -0.03950000000000031, 0.019750000000000156, -0.010500000000000398, 0.019999999999999574, 0.01550000000000118, 0.040000000000000924, -0.005999999999998451, -0.025249999999999773], zp_timestamp='2026-02-16T00:26:00')
2026-02-16T02:27:43.477 [DEBUG] [Thread-215500] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:27:43.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:27:43.575 [DEBUG] [Thread-215503] [transport.py] [_log()] starting thread (client mode): 0xa2d87d60
2026-02-16T02:27:43.575 [DEBUG] [Thread-215503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:27:43.595 [DEBUG] [Thread-215503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:27:43.595 [INFO] [Thread-215503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:43.606 [DEBUG] [Thread-215503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] client lang: <none>
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] server lang: <none>
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] kex follows: False
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] Compression: none
2026-02-16T02:27:43.607 [DEBUG] [Thread-215503] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:27:43.666 [DEBUG] [Thread-215503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:27:43.666 [DEBUG] [Thread-215503] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:27:43.667 [DEBUG] [Thread-215503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:27:43.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:27:43.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:27:43.727 [DEBUG] [Thread-215503] [transport.py] [_log()] userauth is OK
2026-02-16T02:27:43.727 [DEBUG] [Thread-215503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:27:43.727 [DEBUG] [Thread-215503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:27:43.727 [DEBUG] [Thread-215503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:27:43.727 [DEBUG] [Thread-215503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:27:43.746 [INFO] [Thread-215503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:27:43.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:27:43.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:27:44.589 [DEBUG] [Thread-215503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:27:44.590 [DEBUG] [Thread-215503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:27:44.637 [DEBUG] [Thread-215503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:27:44.638 [DEBUG] [Thread-215503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:27:44.647 [DEBUG] [Thread-215503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:27:44.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:27:44.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:27:44.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:27:44.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:27:44.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:27:44.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:27:44.685 [DEBUG] [Thread-215503] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:27:46.419 [DEBUG] [Thread-215505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:51.953 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:27:53.595 [DEBUG] [Thread-215506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:08.647 [DEBUG] [Thread-215507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:10.649 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:14.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:28:14.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:28:14.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:28:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 27, 49), 9.03, 54.11, 0.0, 15.76, 13.52, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:28:16.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:27:49
2026-02-16T02:28:16.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:28:17.029 [DEBUG] [Thread-215508] [transport.py] [_log()] starting thread (client mode): 0xa57e3130
2026-02-16T02:28:17.029 [DEBUG] [Thread-215508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:28:17.048 [DEBUG] [Thread-215508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:28:17.048 [INFO] [Thread-215508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:28:17.051 [DEBUG] [Thread-215508] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:28:17.051 [DEBUG] [Thread-215508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:28:17.051 [DEBUG] [Thread-215508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:28:17.051 [DEBUG] [Thread-215508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:17.051 [DEBUG] [Thread-215508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:17.051 [DEBUG] [Thread-215508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] client lang: <none>
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] server lang: <none>
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] kex follows: False
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] Compression: none
2026-02-16T02:28:17.052 [DEBUG] [Thread-215508] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:28:17.068 [DEBUG] [Thread-215508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:28:17.068 [DEBUG] [Thread-215508] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:28:17.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:28:17.069 [DEBUG] [Thread-215508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:28:17.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:28:17.072 [DEBUG] [Thread-215508] [transport.py] [_log()] userauth is OK
2026-02-16T02:28:17.072 [DEBUG] [Thread-215508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:28:17.072 [DEBUG] [Thread-215508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:28:17.072 [DEBUG] [Thread-215508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:28:17.072 [DEBUG] [Thread-215508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:28:17.098 [INFO] [Thread-215508] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:28:17.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:28:17.718 [DEBUG] [Thread-215508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:28:17.718 [DEBUG] [Thread-215508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:28:17.719 [DEBUG] [Thread-215508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:28:17.759 [DEBUG] [Thread-215508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:28:17.760 [DEBUG] [Thread-215508] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:28:17.763 [DEBUG] [Thread-215508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:28:17.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:28:17.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:28:17.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:28:17.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:28:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:28:17.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:28:17.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:28:17.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:28:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:28:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.019196 -999.00  +13.50  12.84     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.0 12.8 133.4 14.9 13.8 -22.8 13.7 -21.7 13.4 -20.5 13.7 -21.7
2026-02-16T02:28:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:28:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:28:17.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.019196
2026-02-16T02:28:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:28:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:28:17.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:28:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:28:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:28:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:27:49', tmtdew=9.03, humidity=54.11, cloud=0.0, wind=15.76, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:27:50', seeing=2.43, atlas_timestamp='2026-02-16T00:27:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.010249999999999204, -0.014749999999999375, -0.07900000000000063, -0.061500000000000554, 0.007250000000000867, -0.0039999999999995595, 0.008250000000000313, -0.0005000000000006111, -0.03599999999999959, -0.05975000000000108, -0.054999999999999716, 0.01699999999999946, -0.0022500000000018616, -0.018000000000000682, 0.0, 0.03924999999999912, -0.049000000000001265, 0.007999999999999119, -0.03275000000000183, 0.01899999999999835, 0.039749999999997954, 0.021250000000000213, 0.010749999999999815, 0.011999999999998678, -0.03950000000000031, 0.019750000000000156, -0.010500000000000398, 0.019999999999999574, 0.01550000000000118, 0.040000000000000924, -0.005999999999998451, -0.025249999999999773], zp_timestamp='2026-02-16T00:26:00')
2026-02-16T02:28:17.791 [DEBUG] [Thread-215508] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:28:17.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:28:17.878 [DEBUG] [Thread-215511] [transport.py] [_log()] starting thread (client mode): 0xa57e2110
2026-02-16T02:28:17.878 [DEBUG] [Thread-215511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:28:17.893 [DEBUG] [Thread-215511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:28:17.894 [INFO] [Thread-215511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:28:17.901 [DEBUG] [Thread-215511] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] client lang: <none>
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] server lang: <none>
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] kex follows: False
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] Compression: none
2026-02-16T02:28:17.902 [DEBUG] [Thread-215511] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:28:17.960 [DEBUG] [Thread-215511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:28:17.960 [DEBUG] [Thread-215511] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:28:17.960 [DEBUG] [Thread-215511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:28:17.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:28:17.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:28:18.017 [DEBUG] [Thread-215511] [transport.py] [_log()] userauth is OK
2026-02-16T02:28:18.017 [DEBUG] [Thread-215511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:28:18.017 [DEBUG] [Thread-215511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:28:18.017 [DEBUG] [Thread-215511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:28:18.017 [DEBUG] [Thread-215511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:28:18.032 [INFO] [Thread-215511] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:28:18.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:28:18.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:28:18.850 [DEBUG] [Thread-215511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:28:18.850 [DEBUG] [Thread-215511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:28:18.898 [DEBUG] [Thread-215511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:28:18.899 [DEBUG] [Thread-215511] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:28:18.908 [DEBUG] [Thread-215511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:28:18.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:28:18.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:28:18.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:28:18.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:28:18.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:28:18.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:28:18.946 [DEBUG] [Thread-215511] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:28:23.684 [DEBUG] [Thread-215513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:29.296 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:38.743 [DEBUG] [Thread-215514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:40.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:40.842 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:46.482 [DEBUG] [Thread-215515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:47.957 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:28:48.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:28:48.950 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:28:48.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:28:50.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 28, 24), 9.03, 54.14, 0.0, 15.02, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:28:50.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:28:24
2026-02-16T02:28:51.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:28:51.289 [DEBUG] [Thread-215516] [transport.py] [_log()] starting thread (client mode): 0xa2d86080
2026-02-16T02:28:51.289 [DEBUG] [Thread-215516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:28:51.311 [DEBUG] [Thread-215516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:28:51.311 [INFO] [Thread-215516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] client lang: <none>
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] server lang: <none>
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] kex follows: False
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:28:51.314 [DEBUG] [Thread-215516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:28:51.315 [DEBUG] [Thread-215516] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:28:51.315 [DEBUG] [Thread-215516] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:28:51.315 [DEBUG] [Thread-215516] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:28:51.315 [DEBUG] [Thread-215516] [transport.py] [_log()] Compression: none
2026-02-16T02:28:51.315 [DEBUG] [Thread-215516] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:28:51.332 [DEBUG] [Thread-215516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:28:51.332 [DEBUG] [Thread-215516] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:28:51.333 [DEBUG] [Thread-215516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:28:51.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:28:51.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:28:51.334 [DEBUG] [Thread-215516] [transport.py] [_log()] userauth is OK
2026-02-16T02:28:51.334 [DEBUG] [Thread-215516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:28:51.335 [DEBUG] [Thread-215516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:28:51.335 [DEBUG] [Thread-215516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:28:51.335 [DEBUG] [Thread-215516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:28:51.349 [INFO] [Thread-215516] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:28:51.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:28:52.166 [DEBUG] [Thread-215516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:28:52.166 [DEBUG] [Thread-215516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:28:52.167 [DEBUG] [Thread-215516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:28:52.207 [DEBUG] [Thread-215516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:28:52.207 [DEBUG] [Thread-215516] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:28:52.210 [DEBUG] [Thread-215516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:28:52.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:28:52.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:28:52.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:28:52.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:28:52.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:28:52.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:28:52.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.019544 -999.00  +13.50  14.02     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.2 14.0 143.6 19.7 13.8 -22.7 13.7 -21.7 13.4 -20.6 13.8 -21.7
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.019544
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:28:52.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:28:24', tmtdew=9.03, humidity=54.14, cloud=0.0, wind=15.02, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:28:25', seeing=2.22, atlas_timestamp='2026-02-16T00:28:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.010249999999999204, -0.014749999999999375, -0.07900000000000063, -0.061500000000000554, 0.007250000000000867, -0.0039999999999995595, 0.008250000000000313, -0.0005000000000006111, -0.03599999999999959, -0.05975000000000108, -0.054999999999999716, 0.01699999999999946, -0.0022500000000018616, -0.018000000000000682, 0.0, 0.03924999999999912, -0.049000000000001265, 0.007999999999999119, -0.03275000000000183, 0.01899999999999835, 0.039749999999997954, 0.021250000000000213, 0.010749999999999815, 0.011999999999998678, -0.03950000000000031, 0.019750000000000156, -0.010500000000000398, 0.019999999999999574, 0.01550000000000118, 0.040000000000000924, -0.005999999999998451, -0.025249999999999773], zp_timestamp='2026-02-16T00:26:00')
2026-02-16T02:28:52.228 [DEBUG] [Thread-215516] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:28:52.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:28:52.313 [DEBUG] [Thread-215519] [transport.py] [_log()] starting thread (client mode): 0xa2d86680
2026-02-16T02:28:52.313 [DEBUG] [Thread-215519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:28:52.329 [DEBUG] [Thread-215519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:28:52.329 [INFO] [Thread-215519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] client lang: <none>
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] server lang: <none>
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] kex follows: False
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] Compression: none
2026-02-16T02:28:52.336 [DEBUG] [Thread-215519] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:28:52.392 [DEBUG] [Thread-215519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:28:52.393 [DEBUG] [Thread-215519] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:28:52.393 [DEBUG] [Thread-215519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:28:52.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:28:52.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:28:52.451 [DEBUG] [Thread-215519] [transport.py] [_log()] userauth is OK
2026-02-16T02:28:52.451 [DEBUG] [Thread-215519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:28:52.451 [DEBUG] [Thread-215519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:28:52.451 [DEBUG] [Thread-215519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:28:52.451 [DEBUG] [Thread-215519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:28:52.474 [INFO] [Thread-215519] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:28:52.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:28:52.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:28:53.304 [DEBUG] [Thread-215519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:28:53.304 [DEBUG] [Thread-215519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:28:53.352 [DEBUG] [Thread-215519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:28:53.353 [DEBUG] [Thread-215519] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:28:53.362 [DEBUG] [Thread-215519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:28:53.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:28:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:28:53.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:28:53.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:28:53.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:28:53.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:28:53.398 [DEBUG] [Thread-215519] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:28:53.779 [DEBUG] [Thread-215521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:06.891 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:08.834 [DEBUG] [Thread-215522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:23.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:29:23.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:29:23.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:29:23.866 [DEBUG] [Thread-215523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:25.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 29), 9.0, 54.53, 0.0, 18.79, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:29:25.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:29:00
2026-02-16T02:29:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:29:25.913 [DEBUG] [Thread-215524] [transport.py] [_log()] starting thread (client mode): 0xa57e0820
2026-02-16T02:29:25.913 [DEBUG] [Thread-215524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:29:25.933 [DEBUG] [Thread-215524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:29:25.933 [INFO] [Thread-215524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] client lang: <none>
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] server lang: <none>
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] kex follows: False
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] Compression: none
2026-02-16T02:29:25.936 [DEBUG] [Thread-215524] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:29:25.952 [DEBUG] [Thread-215524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:29:25.952 [DEBUG] [Thread-215524] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:29:25.952 [DEBUG] [Thread-215524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:29:25.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:29:25.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:29:25.953 [DEBUG] [Thread-215524] [transport.py] [_log()] userauth is OK
2026-02-16T02:29:25.953 [DEBUG] [Thread-215524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:29:25.953 [DEBUG] [Thread-215524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:29:25.953 [DEBUG] [Thread-215524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:29:25.953 [DEBUG] [Thread-215524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:29:25.962 [INFO] [Thread-215524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:29:25.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:29:25.976 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:26.610 [DEBUG] [Thread-215524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:29:26.610 [DEBUG] [Thread-215524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:29:26.610 [DEBUG] [Thread-215524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:29:26.651 [DEBUG] [Thread-215524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:29:26.651 [DEBUG] [Thread-215524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:29:26.653 [DEBUG] [Thread-215524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:29:26.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:29:26.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:29:26.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:29:26.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:29:26.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:29:26.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:29:26.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.019891 -999.00  +13.50  16.24     59   +5.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.2 16.2 139.2 20.0 13.8 -22.7 13.7 -21.6 13.4 -20.4 13.8 -21.7
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.019891
2026-02-16T02:29:26.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:29:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:29:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:29:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:29:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:29:26.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:29:00', tmtdew=9.0, humidity=54.53, cloud=0.0, wind=18.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-02-16T02:29:00', seeing=2.26, atlas_timestamp='2026-02-16T00:28:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.010249999999999204, -0.014749999999999375, -0.07900000000000063, -0.061500000000000554, 0.007250000000000867, -0.0039999999999995595, 0.008250000000000313, -0.0005000000000006111, -0.03599999999999959, -0.05975000000000108, -0.054999999999999716, 0.01699999999999946, -0.0022500000000018616, -0.018000000000000682, 0.0, 0.03924999999999912, -0.049000000000001265, 0.007999999999999119, -0.03275000000000183, 0.01899999999999835, 0.039749999999997954, 0.021250000000000213, 0.010749999999999815, 0.011999999999998678, -0.03950000000000031, 0.019750000000000156, -0.010500000000000398, 0.019999999999999574, 0.01550000000000118, 0.040000000000000924, -0.005999999999998451, -0.025249999999999773], zp_timestamp='2026-02-16T00:26:00')
2026-02-16T02:29:26.671 [DEBUG] [Thread-215524] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:29:26.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:29:26.755 [DEBUG] [Thread-215527] [transport.py] [_log()] starting thread (client mode): 0xa2de84c0
2026-02-16T02:29:26.755 [DEBUG] [Thread-215527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:29:26.769 [DEBUG] [Thread-215527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:29:26.769 [INFO] [Thread-215527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] client lang: <none>
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] server lang: <none>
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] kex follows: False
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] Compression: none
2026-02-16T02:29:26.777 [DEBUG] [Thread-215527] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:29:26.832 [DEBUG] [Thread-215527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:29:26.832 [DEBUG] [Thread-215527] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:29:26.833 [DEBUG] [Thread-215527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:29:26.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:29:26.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:29:26.889 [DEBUG] [Thread-215527] [transport.py] [_log()] userauth is OK
2026-02-16T02:29:26.889 [DEBUG] [Thread-215527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:29:26.889 [DEBUG] [Thread-215527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:29:26.890 [DEBUG] [Thread-215527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:29:26.890 [DEBUG] [Thread-215527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:29:26.912 [INFO] [Thread-215527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:29:26.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:29:26.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:29:27.738 [DEBUG] [Thread-215527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:29:27.738 [DEBUG] [Thread-215527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:29:27.786 [DEBUG] [Thread-215527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:29:27.786 [DEBUG] [Thread-215527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:29:27.797 [DEBUG] [Thread-215527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:29:27.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:29:27.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:29:27.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:29:27.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:29:27.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:29:27.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:29:27.835 [DEBUG] [Thread-215527] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:29:38.900 [DEBUG] [Thread-215529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:41.047 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:41.048 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:44.633 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:46.552 [DEBUG] [Thread-215530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:53.961 [DEBUG] [Thread-215531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:29:57.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:29:57.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:29:57.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:29:59.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 29, 35), 9.1, 54.05, 0.0, 20.5, 13.53, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:29:59.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:29:35
2026-02-16T02:30:00.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:30:00.269 [DEBUG] [Thread-215532] [transport.py] [_log()] starting thread (client mode): 0xa2d86290
2026-02-16T02:30:00.270 [DEBUG] [Thread-215532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:30:00.285 [DEBUG] [Thread-215532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:30:00.285 [INFO] [Thread-215532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:30:00.288 [DEBUG] [Thread-215532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] client lang: <none>
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] server lang: <none>
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] kex follows: False
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] Compression: none
2026-02-16T02:30:00.289 [DEBUG] [Thread-215532] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:30:00.307 [DEBUG] [Thread-215532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:30:00.308 [DEBUG] [Thread-215532] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:30:00.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:30:00.309 [DEBUG] [Thread-215532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:30:00.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:30:00.311 [DEBUG] [Thread-215532] [transport.py] [_log()] userauth is OK
2026-02-16T02:30:00.311 [DEBUG] [Thread-215532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:30:00.311 [DEBUG] [Thread-215532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:30:00.311 [DEBUG] [Thread-215532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:30:00.311 [DEBUG] [Thread-215532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:30:00.330 [INFO] [Thread-215532] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:30:00.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:30:00.955 [DEBUG] [Thread-215532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:30:00.955 [DEBUG] [Thread-215532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:30:00.955 [DEBUG] [Thread-215532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:30:00.996 [DEBUG] [Thread-215532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:30:00.997 [DEBUG] [Thread-215532] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:30:01.000 [DEBUG] [Thread-215532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:30:01.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:30:01.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:30:01.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:30:01.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:30:01.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:30:01.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:30:01.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:30:01.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:30:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:30:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.020238 -999.00  +13.60  14.26     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.7 14.3 146.0 19.1 13.8 -22.7 13.7 -21.7 13.5 -20.6 13.8 -21.4
2026-02-16T02:30:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:30:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:30:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.020238
2026-02-16T02:30:01.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:30:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:30:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:30:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:30:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:30:01.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:29:35', tmtdew=9.1, humidity=54.05, cloud=0.0, wind=20.5, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:29:36', seeing=2.37, atlas_timestamp='2026-02-16T00:29:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.010249999999999204, -0.014749999999999375, -0.07900000000000063, -0.061500000000000554, 0.007250000000000867, -0.0039999999999995595, 0.008250000000000313, -0.0005000000000006111, -0.03599999999999959, -0.05975000000000108, -0.054999999999999716, 0.01699999999999946, -0.0022500000000018616, -0.018000000000000682, 0.0, 0.03924999999999912, -0.049000000000001265, 0.007999999999999119, -0.03275000000000183, 0.01899999999999835, 0.039749999999997954, 0.021250000000000213, 0.010749999999999815, 0.011999999999998678, -0.03950000000000031, 0.019750000000000156, -0.010500000000000398, 0.019999999999999574, 0.01550000000000118, 0.040000000000000924, -0.005999999999998451, -0.025249999999999773], zp_timestamp='2026-02-16T00:26:00')
2026-02-16T02:30:01.028 [DEBUG] [Thread-215532] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:30:01.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:30:01.129 [DEBUG] [Thread-215535] [transport.py] [_log()] starting thread (client mode): 0xa2d85ba0
2026-02-16T02:30:01.129 [DEBUG] [Thread-215535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:30:01.144 [DEBUG] [Thread-215535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:30:01.144 [INFO] [Thread-215535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:30:01.151 [DEBUG] [Thread-215535] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:30:01.151 [DEBUG] [Thread-215535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:30:01.151 [DEBUG] [Thread-215535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:30:01.151 [DEBUG] [Thread-215535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:01.151 [DEBUG] [Thread-215535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:01.151 [DEBUG] [Thread-215535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] client lang: <none>
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] server lang: <none>
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] kex follows: False
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] Compression: none
2026-02-16T02:30:01.152 [DEBUG] [Thread-215535] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:30:01.206 [DEBUG] [Thread-215535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:30:01.206 [DEBUG] [Thread-215535] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:30:01.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:30:01.207 [DEBUG] [Thread-215535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:30:01.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:30:01.263 [DEBUG] [Thread-215535] [transport.py] [_log()] userauth is OK
2026-02-16T02:30:01.263 [DEBUG] [Thread-215535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:30:01.263 [DEBUG] [Thread-215535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:30:01.263 [DEBUG] [Thread-215535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:30:01.263 [DEBUG] [Thread-215535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:30:01.285 [INFO] [Thread-215535] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:30:01.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:30:01.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:30:02.174 [DEBUG] [Thread-215535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:30:02.174 [DEBUG] [Thread-215535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:30:02.222 [DEBUG] [Thread-215535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:30:02.222 [DEBUG] [Thread-215535] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:30:02.230 [DEBUG] [Thread-215535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:30:02.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:30:02.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:30:02.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:30:02.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:30:02.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:30:02.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:30:02.263 [DEBUG] [Thread-215535] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:30:03.286 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:08.993 [DEBUG] [Thread-215537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:22.313 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:24.043 [DEBUG] [Thread-215538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:32.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:30:32.286 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:30:32.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:30:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 30, 10), 9.11, 53.98, 0.0, 18.16, 13.53, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:30:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:30:10
2026-02-16T02:30:34.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:30:34.937 [DEBUG] [Thread-215539] [transport.py] [_log()] starting thread (client mode): 0xa57e0b80
2026-02-16T02:30:34.937 [DEBUG] [Thread-215539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:30:34.957 [DEBUG] [Thread-215539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:30:34.958 [INFO] [Thread-215539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:30:34.961 [DEBUG] [Thread-215539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] client lang: <none>
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] server lang: <none>
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] kex follows: False
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] Compression: none
2026-02-16T02:30:34.962 [DEBUG] [Thread-215539] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:30:34.980 [DEBUG] [Thread-215539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:30:34.980 [DEBUG] [Thread-215539] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:30:34.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:30:34.982 [DEBUG] [Thread-215539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:30:34.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:30:34.983 [DEBUG] [Thread-215539] [transport.py] [_log()] userauth is OK
2026-02-16T02:30:34.984 [DEBUG] [Thread-215539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:30:34.984 [DEBUG] [Thread-215539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:30:34.984 [DEBUG] [Thread-215539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:30:34.984 [DEBUG] [Thread-215539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:30:35.002 [INFO] [Thread-215539] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:30:35.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:30:35.619 [DEBUG] [Thread-215539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:30:35.619 [DEBUG] [Thread-215539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:30:35.619 [DEBUG] [Thread-215539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:30:35.660 [DEBUG] [Thread-215539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:30:35.660 [DEBUG] [Thread-215539] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:30:35.663 [DEBUG] [Thread-215539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:30:35.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:30:35.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:30:35.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:30:35.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:30:35.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:30:35.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:30:35.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:30:35.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:30:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:30:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.020585 -999.00  +13.50  12.18     59   +5.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.2 12.2 145.6 14.6 13.8 -22.7 13.7 -21.6 13.4 -20.4 13.8 -21.8
2026-02-16T02:30:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:30:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:30:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.020585
2026-02-16T02:30:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:30:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:30:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:30:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:30:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:30:35.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:30:10', tmtdew=9.11, humidity=53.98, cloud=0.0, wind=18.16, temperature=13.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:30:11', seeing=2.37, atlas_timestamp='2026-02-16T00:29:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02925000000000111, -0.010249999999999204, -0.014749999999999375, -0.07900000000000063, -0.061500000000000554, 0.007250000000000867, -0.0039999999999995595, 0.008250000000000313, -0.0005000000000006111, -0.03599999999999959, -0.05975000000000108, -0.054999999999999716, 0.01699999999999946, -0.0022500000000018616, -0.018000000000000682, 0.0, 0.03924999999999912, -0.049000000000001265, 0.007999999999999119, -0.03275000000000183, 0.01899999999999835, 0.039749999999997954, 0.021250000000000213, 0.010749999999999815, 0.011999999999998678, -0.03950000000000031, 0.019750000000000156, -0.010500000000000398, 0.019999999999999574, 0.01550000000000118, 0.040000000000000924, -0.005999999999998451, -0.025249999999999773], zp_timestamp='2026-02-16T00:26:00')
2026-02-16T02:30:35.688 [DEBUG] [Thread-215539] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:30:35.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:30:35.785 [DEBUG] [Thread-215542] [transport.py] [_log()] starting thread (client mode): 0xa2d84940
2026-02-16T02:30:35.785 [DEBUG] [Thread-215542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:30:35.799 [DEBUG] [Thread-215542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:30:35.799 [INFO] [Thread-215542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:30:35.810 [DEBUG] [Thread-215542] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:30:35.811 [DEBUG] [Thread-215542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:30:35.811 [DEBUG] [Thread-215542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:30:35.811 [DEBUG] [Thread-215542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:35.811 [DEBUG] [Thread-215542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:30:35.811 [DEBUG] [Thread-215542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] client lang: <none>
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] server lang: <none>
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] kex follows: False
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] Compression: none
2026-02-16T02:30:35.812 [DEBUG] [Thread-215542] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:30:35.866 [DEBUG] [Thread-215542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:30:35.867 [DEBUG] [Thread-215542] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:30:35.867 [DEBUG] [Thread-215542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:30:35.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:30:35.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:30:35.926 [DEBUG] [Thread-215542] [transport.py] [_log()] userauth is OK
2026-02-16T02:30:35.926 [DEBUG] [Thread-215542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:30:35.926 [DEBUG] [Thread-215542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:30:35.927 [DEBUG] [Thread-215542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:30:35.927 [DEBUG] [Thread-215542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:30:35.946 [INFO] [Thread-215542] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:30:35.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:30:35.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:30:36.771 [DEBUG] [Thread-215542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:30:36.771 [DEBUG] [Thread-215542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:30:36.819 [DEBUG] [Thread-215542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:30:36.819 [DEBUG] [Thread-215542] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:30:36.828 [DEBUG] [Thread-215542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:30:36.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:30:36.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:30:36.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:30:36.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:30:36.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:30:36.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:30:36.862 [DEBUG] [Thread-215542] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:30:39.077 [DEBUG] [Thread-215544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:40.949 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:41.256 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:41.257 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:46.609 [DEBUG] [Thread-215545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:54.124 [DEBUG] [Thread-215546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:30:59.597 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:31:06.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:31:06.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:31:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 30, 46), 9.07, 54.44, 0.0, 17.91, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:31:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:30:46
2026-02-16T02:31:09.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:31:09.158 [DEBUG] [Thread-215547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:09.271 [DEBUG] [Thread-215548] [transport.py] [_log()] starting thread (client mode): 0xa57e03a0
2026-02-16T02:31:09.271 [DEBUG] [Thread-215548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:31:09.291 [DEBUG] [Thread-215548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:31:09.291 [INFO] [Thread-215548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] client lang: <none>
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] server lang: <none>
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] kex follows: False
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:31:09.295 [DEBUG] [Thread-215548] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:31:09.296 [DEBUG] [Thread-215548] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:31:09.296 [DEBUG] [Thread-215548] [transport.py] [_log()] Compression: none
2026-02-16T02:31:09.296 [DEBUG] [Thread-215548] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:31:09.315 [DEBUG] [Thread-215548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:31:09.315 [DEBUG] [Thread-215548] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:31:09.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:31:09.317 [DEBUG] [Thread-215548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:31:09.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:31:09.319 [DEBUG] [Thread-215548] [transport.py] [_log()] userauth is OK
2026-02-16T02:31:09.319 [DEBUG] [Thread-215548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:31:09.320 [DEBUG] [Thread-215548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:31:09.320 [DEBUG] [Thread-215548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:31:09.320 [DEBUG] [Thread-215548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:31:09.343 [INFO] [Thread-215548] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:31:09.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:31:11.006 [DEBUG] [Thread-215548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:31:11.007 [DEBUG] [Thread-215548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:31:11.007 [DEBUG] [Thread-215548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:31:11.047 [DEBUG] [Thread-215548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:31:11.047 [DEBUG] [Thread-215548] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:31:11.050 [DEBUG] [Thread-215548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:31:11.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:31:11.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:31:11.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:31:11.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:31:11.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:31:11.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:31:11.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:31:11.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:31:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:31:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.021280 -999.00  +13.50  13.53     59   +5.80 1 1 1 1 1     0    0 8.41 21.82 ZNESW 15.2 13.5 144.6 15.5 13.8 -22.8 13.7 -21.8 13.4 -20.6 13.7 -21.8
2026-02-16T02:31:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:31:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:31:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.021280
2026-02-16T02:31:11.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:31:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:31:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:31:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:31:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:31:11.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:30:46', tmtdew=9.07, humidity=54.44, cloud=0.0, wind=17.91, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:30:46', seeing=2.47, atlas_timestamp='2026-02-16T00:30:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:29:00')
2026-02-16T02:31:11.073 [DEBUG] [Thread-215548] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:31:11.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:31:11.168 [DEBUG] [Thread-215551] [transport.py] [_log()] starting thread (client mode): 0xa2d13250
2026-02-16T02:31:11.168 [DEBUG] [Thread-215551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:31:11.183 [DEBUG] [Thread-215551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:31:11.183 [INFO] [Thread-215551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:31:11.190 [DEBUG] [Thread-215551] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:31:11.190 [DEBUG] [Thread-215551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:31:11.190 [DEBUG] [Thread-215551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:31:11.190 [DEBUG] [Thread-215551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:11.190 [DEBUG] [Thread-215551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:11.190 [DEBUG] [Thread-215551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] client lang: <none>
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] server lang: <none>
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] kex follows: False
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] Compression: none
2026-02-16T02:31:11.191 [DEBUG] [Thread-215551] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:31:11.248 [DEBUG] [Thread-215551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:31:11.248 [DEBUG] [Thread-215551] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:31:11.249 [DEBUG] [Thread-215551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:31:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:31:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:31:11.304 [DEBUG] [Thread-215551] [transport.py] [_log()] userauth is OK
2026-02-16T02:31:11.305 [DEBUG] [Thread-215551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:31:11.305 [DEBUG] [Thread-215551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:31:11.305 [DEBUG] [Thread-215551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:31:11.305 [DEBUG] [Thread-215551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:31:11.319 [INFO] [Thread-215551] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:31:11.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:31:11.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:31:12.170 [DEBUG] [Thread-215551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:31:12.171 [DEBUG] [Thread-215551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:31:12.218 [DEBUG] [Thread-215551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:31:12.218 [DEBUG] [Thread-215551] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:31:12.227 [DEBUG] [Thread-215551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:31:12.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:31:12.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:31:12.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:31:12.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:31:12.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:31:12.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:31:12.265 [DEBUG] [Thread-215551] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:31:18.310 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:24.190 [DEBUG] [Thread-215553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:37.048 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:39.251 [DEBUG] [Thread-215554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:41.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:41.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:42.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:31:42.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:31:42.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:31:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 31, 21), 9.04, 54.58, 0.0, 17.17, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:31:44.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:31:21
2026-02-16T02:31:44.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:31:44.749 [DEBUG] [Thread-215555] [transport.py] [_log()] starting thread (client mode): 0xa2d13c10
2026-02-16T02:31:44.749 [DEBUG] [Thread-215555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:31:44.771 [DEBUG] [Thread-215555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:31:44.772 [INFO] [Thread-215555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] client lang: <none>
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] server lang: <none>
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] kex follows: False
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:31:44.774 [DEBUG] [Thread-215555] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:31:44.775 [DEBUG] [Thread-215555] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:31:44.775 [DEBUG] [Thread-215555] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:31:44.775 [DEBUG] [Thread-215555] [transport.py] [_log()] Compression: none
2026-02-16T02:31:44.775 [DEBUG] [Thread-215555] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:31:44.790 [DEBUG] [Thread-215555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:31:44.790 [DEBUG] [Thread-215555] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:31:44.791 [DEBUG] [Thread-215555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:31:44.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:31:44.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:31:44.793 [DEBUG] [Thread-215555] [transport.py] [_log()] userauth is OK
2026-02-16T02:31:44.793 [DEBUG] [Thread-215555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:31:44.793 [DEBUG] [Thread-215555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:31:44.793 [DEBUG] [Thread-215555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:31:44.793 [DEBUG] [Thread-215555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:31:44.818 [INFO] [Thread-215555] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:31:44.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:31:45.482 [DEBUG] [Thread-215555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:31:45.482 [DEBUG] [Thread-215555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:31:45.483 [DEBUG] [Thread-215555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:31:45.523 [DEBUG] [Thread-215555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:31:45.524 [DEBUG] [Thread-215555] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:31:45.527 [DEBUG] [Thread-215555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:31:45.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:31:45.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:31:45.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:31:45.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:31:45.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:31:45.550 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:31:45.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:31:45.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:31:45.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:31:45.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.021627 -999.00  +13.50  15.83     59   +5.70 1 1 1 1 1     0    0 8.26 18.66 ZNESW 16.6 15.8 145.4 19.0 13.8 -22.7 13.7 -21.7 13.5 -20.3 13.7 -21.6
2026-02-16T02:31:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:31:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:31:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.021627
2026-02-16T02:31:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:31:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:31:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:31:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:31:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:31:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:31:21', tmtdew=9.04, humidity=54.58, cloud=0.0, wind=17.17, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:31:21', seeing=2.36, atlas_timestamp='2026-02-16T00:31:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:29:00')
2026-02-16T02:31:45.553 [DEBUG] [Thread-215555] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:31:45.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:31:45.650 [DEBUG] [Thread-215558] [transport.py] [_log()] starting thread (client mode): 0xa57e1900
2026-02-16T02:31:45.650 [DEBUG] [Thread-215558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:31:45.665 [DEBUG] [Thread-215558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:31:45.665 [INFO] [Thread-215558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] client lang: <none>
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] server lang: <none>
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] kex follows: False
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:31:45.673 [DEBUG] [Thread-215558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:31:45.674 [DEBUG] [Thread-215558] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:31:45.674 [DEBUG] [Thread-215558] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:31:45.674 [DEBUG] [Thread-215558] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:31:45.674 [DEBUG] [Thread-215558] [transport.py] [_log()] Compression: none
2026-02-16T02:31:45.674 [DEBUG] [Thread-215558] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:31:45.731 [DEBUG] [Thread-215558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:31:45.732 [DEBUG] [Thread-215558] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:31:45.732 [DEBUG] [Thread-215558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:31:45.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:31:45.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:31:45.791 [DEBUG] [Thread-215558] [transport.py] [_log()] userauth is OK
2026-02-16T02:31:45.791 [DEBUG] [Thread-215558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:31:45.791 [DEBUG] [Thread-215558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:31:45.791 [DEBUG] [Thread-215558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:31:45.791 [DEBUG] [Thread-215558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:31:45.805 [INFO] [Thread-215558] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:31:45.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:31:45.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:31:46.662 [DEBUG] [Thread-215558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:31:46.663 [DEBUG] [Thread-215558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:31:46.665 [DEBUG] [Thread-215560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:46.711 [DEBUG] [Thread-215558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:31:46.712 [DEBUG] [Thread-215558] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:31:46.721 [DEBUG] [Thread-215558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:31:46.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:31:46.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:31:46.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:31:46.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:31:46.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:31:46.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:31:46.758 [DEBUG] [Thread-215558] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:31:54.290 [DEBUG] [Thread-215561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:31:55.732 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:09.344 [DEBUG] [Thread-215562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:14.398 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:16.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:32:16.780 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:32:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:32:18.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 31, 56), 9.07, 54.29, 0.0, 15.23, 13.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:32:18.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:31:56
2026-02-16T02:32:18.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:32:19.126 [DEBUG] [Thread-215563] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0b0
2026-02-16T02:32:19.126 [DEBUG] [Thread-215563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:32:19.146 [DEBUG] [Thread-215563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:32:19.147 [INFO] [Thread-215563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] client lang: <none>
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] server lang: <none>
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] kex follows: False
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] Compression: none
2026-02-16T02:32:19.150 [DEBUG] [Thread-215563] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:32:19.168 [DEBUG] [Thread-215563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:32:19.168 [DEBUG] [Thread-215563] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:32:19.169 [DEBUG] [Thread-215563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:32:19.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:32:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:32:19.171 [DEBUG] [Thread-215563] [transport.py] [_log()] userauth is OK
2026-02-16T02:32:19.171 [DEBUG] [Thread-215563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:32:19.171 [DEBUG] [Thread-215563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:32:19.171 [DEBUG] [Thread-215563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:32:19.171 [DEBUG] [Thread-215563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:32:19.196 [INFO] [Thread-215563] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:32:19.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:32:19.852 [DEBUG] [Thread-215563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:32:19.852 [DEBUG] [Thread-215563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:32:19.853 [DEBUG] [Thread-215563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:32:19.893 [DEBUG] [Thread-215563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:32:19.894 [DEBUG] [Thread-215563] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:32:19.897 [DEBUG] [Thread-215563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:32:19.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:32:19.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:32:19.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:32:19.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:32:19.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:32:19.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:32:19.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:32:19.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:32:19.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:32:19.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.021974 -999.00  +13.50  12.90     59   +5.80 1 1 1 1 1     0    0 8.19 16.69 ZNESW 16.1 12.9 139.8 22.0 13.8 -22.8 13.7 -21.8 13.4 -20.5 13.8 -21.7
2026-02-16T02:32:19.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:32:19.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:32:19.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.021974
2026-02-16T02:32:19.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:32:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:32:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:32:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:32:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:32:19.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:31:56', tmtdew=9.07, humidity=54.29, cloud=0.0, wind=15.23, temperature=13.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:31:56', seeing=2.62, atlas_timestamp='2026-02-16T00:31:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:29:00')
2026-02-16T02:32:19.923 [DEBUG] [Thread-215563] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:32:20.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:32:20.018 [DEBUG] [Thread-215566] [transport.py] [_log()] starting thread (client mode): 0xa2d87010
2026-02-16T02:32:20.019 [DEBUG] [Thread-215566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:32:20.033 [DEBUG] [Thread-215566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:32:20.034 [INFO] [Thread-215566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:32:20.041 [DEBUG] [Thread-215566] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] client lang: <none>
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] server lang: <none>
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] kex follows: False
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:32:20.042 [DEBUG] [Thread-215566] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:32:20.043 [DEBUG] [Thread-215566] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:32:20.043 [DEBUG] [Thread-215566] [transport.py] [_log()] Compression: none
2026-02-16T02:32:20.043 [DEBUG] [Thread-215566] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:32:20.098 [DEBUG] [Thread-215566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:32:20.099 [DEBUG] [Thread-215566] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:32:20.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:32:20.100 [DEBUG] [Thread-215566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:32:20.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:32:20.154 [DEBUG] [Thread-215566] [transport.py] [_log()] userauth is OK
2026-02-16T02:32:20.155 [DEBUG] [Thread-215566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:32:20.155 [DEBUG] [Thread-215566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:32:20.155 [DEBUG] [Thread-215566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:32:20.155 [DEBUG] [Thread-215566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:32:20.173 [INFO] [Thread-215566] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:32:20.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:32:20.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:32:21.002 [DEBUG] [Thread-215566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:32:21.002 [DEBUG] [Thread-215566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:32:21.050 [DEBUG] [Thread-215566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:32:21.051 [DEBUG] [Thread-215566] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:32:21.060 [DEBUG] [Thread-215566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:32:21.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:32:21.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:32:21.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:32:21.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:32:21.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:32:21.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:32:21.095 [DEBUG] [Thread-215566] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:32:24.380 [DEBUG] [Thread-215568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:33.048 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:39.432 [DEBUG] [Thread-215569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:41.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:41.667 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:46.734 [DEBUG] [Thread-215570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:51.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:32:51.118 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:32:51.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:32:51.713 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:52.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 32, 31), 9.0, 54.56, 0.0, 14.84, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:32:52.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:32:31
2026-02-16T02:32:53.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:32:53.415 [DEBUG] [Thread-215571] [transport.py] [_log()] starting thread (client mode): 0xa2d6ca30
2026-02-16T02:32:53.415 [DEBUG] [Thread-215571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:32:53.435 [DEBUG] [Thread-215571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:32:53.435 [INFO] [Thread-215571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:32:53.438 [DEBUG] [Thread-215571] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:32:53.438 [DEBUG] [Thread-215571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:32:53.438 [DEBUG] [Thread-215571] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] client lang: <none>
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] server lang: <none>
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] kex follows: False
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] Compression: none
2026-02-16T02:32:53.439 [DEBUG] [Thread-215571] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:32:53.455 [DEBUG] [Thread-215571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:32:53.455 [DEBUG] [Thread-215571] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:32:53.455 [DEBUG] [Thread-215571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:32:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:32:53.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:32:53.456 [DEBUG] [Thread-215571] [transport.py] [_log()] userauth is OK
2026-02-16T02:32:53.456 [DEBUG] [Thread-215571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:32:53.456 [DEBUG] [Thread-215571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:32:53.456 [DEBUG] [Thread-215571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:32:53.456 [DEBUG] [Thread-215571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:32:53.465 [INFO] [Thread-215571] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:32:53.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:32:54.059 [DEBUG] [Thread-215571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:32:54.059 [DEBUG] [Thread-215571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:32:54.060 [DEBUG] [Thread-215571] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:32:54.100 [DEBUG] [Thread-215571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:32:54.101 [DEBUG] [Thread-215571] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:32:54.104 [DEBUG] [Thread-215571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:32:54.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:32:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:32:54.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:32:54.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:32:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:32:54.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:32:54.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:32:54.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:32:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:32:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.022321 -999.00  +13.50  15.82     60   +5.90 1 1 1 1 1     0    0 8.12 14.25 ZNESW 16.0 15.8 145.4 20.2 13.8 -22.8 13.7 -21.7 13.4 -20.6 13.8 -21.7
2026-02-16T02:32:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:32:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:32:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.022321
2026-02-16T02:32:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:32:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:32:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:32:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:32:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:32:54.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:32:31', tmtdew=9.0, humidity=54.56, cloud=0.0, wind=14.84, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:32:32', seeing=2.96, atlas_timestamp='2026-02-16T00:32:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:29:00')
2026-02-16T02:32:54.133 [DEBUG] [Thread-215571] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:32:54.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:32:54.229 [DEBUG] [Thread-215574] [transport.py] [_log()] starting thread (client mode): 0xa57e0e50
2026-02-16T02:32:54.229 [DEBUG] [Thread-215574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:32:54.244 [DEBUG] [Thread-215574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:32:54.244 [INFO] [Thread-215574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] client lang: <none>
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] server lang: <none>
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] kex follows: False
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:32:54.252 [DEBUG] [Thread-215574] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:32:54.253 [DEBUG] [Thread-215574] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:32:54.253 [DEBUG] [Thread-215574] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:32:54.253 [DEBUG] [Thread-215574] [transport.py] [_log()] Compression: none
2026-02-16T02:32:54.253 [DEBUG] [Thread-215574] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:32:54.309 [DEBUG] [Thread-215574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:32:54.310 [DEBUG] [Thread-215574] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:32:54.310 [DEBUG] [Thread-215574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:32:54.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:32:54.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:32:54.366 [DEBUG] [Thread-215574] [transport.py] [_log()] userauth is OK
2026-02-16T02:32:54.366 [DEBUG] [Thread-215574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:32:54.366 [DEBUG] [Thread-215574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:32:54.366 [DEBUG] [Thread-215574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:32:54.366 [DEBUG] [Thread-215574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:32:54.384 [INFO] [Thread-215574] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:32:54.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:32:54.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:32:54.460 [DEBUG] [Thread-215576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:32:55.188 [DEBUG] [Thread-215574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:32:55.188 [DEBUG] [Thread-215574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:32:55.236 [DEBUG] [Thread-215574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:32:55.237 [DEBUG] [Thread-215574] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:32:55.246 [DEBUG] [Thread-215574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:32:55.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:32:55.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:32:55.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:32:55.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:32:55.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:32:55.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:32:55.285 [DEBUG] [Thread-215574] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:33:09.515 [DEBUG] [Thread-215577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:10.381 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:24.554 [DEBUG] [Thread-215578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:25.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:33:25.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:33:25.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:33:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 33, 7), 8.93, 54.81, 0.0, 14.84, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:33:27.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:33:07
2026-02-16T02:33:27.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:33:27.678 [DEBUG] [Thread-215579] [transport.py] [_log()] starting thread (client mode): 0xa2d866e0
2026-02-16T02:33:27.678 [DEBUG] [Thread-215579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:33:27.699 [DEBUG] [Thread-215579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:33:27.699 [INFO] [Thread-215579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] client lang: <none>
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] server lang: <none>
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] kex follows: False
2026-02-16T02:33:27.702 [DEBUG] [Thread-215579] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:33:27.703 [DEBUG] [Thread-215579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:33:27.703 [DEBUG] [Thread-215579] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:33:27.703 [DEBUG] [Thread-215579] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:33:27.703 [DEBUG] [Thread-215579] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:33:27.703 [DEBUG] [Thread-215579] [transport.py] [_log()] Compression: none
2026-02-16T02:33:27.703 [DEBUG] [Thread-215579] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:33:27.721 [DEBUG] [Thread-215579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:33:27.722 [DEBUG] [Thread-215579] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:33:27.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:33:27.723 [DEBUG] [Thread-215579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:33:27.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:33:27.726 [DEBUG] [Thread-215579] [transport.py] [_log()] userauth is OK
2026-02-16T02:33:27.726 [DEBUG] [Thread-215579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:33:27.726 [DEBUG] [Thread-215579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:33:27.726 [DEBUG] [Thread-215579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:33:27.726 [DEBUG] [Thread-215579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:33:27.752 [INFO] [Thread-215579] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:33:27.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:33:28.403 [DEBUG] [Thread-215579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:33:28.403 [DEBUG] [Thread-215579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:33:28.404 [DEBUG] [Thread-215579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:33:28.444 [DEBUG] [Thread-215579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:33:28.445 [DEBUG] [Thread-215579] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:33:28.448 [DEBUG] [Thread-215579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:33:28.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:33:28.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:33:28.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:33:28.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:33:28.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:33:28.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:33:28.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:33:28.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:33:28.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:33:28.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.022669 -999.00  +13.40  14.90     60   +6.00 1 1 1 1 1     0    0 8.00 9.63 ZNESW 12.1 14.9 146.0 19.6 13.8 -22.6 13.7 -21.7 13.4 -20.4 13.7 -21.8
2026-02-16T02:33:28.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:33:28.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:33:28.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.022669
2026-02-16T02:33:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:33:28.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:33:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:33:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:33:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:33:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:33:07', tmtdew=8.93, humidity=54.81, cloud=0.0, wind=14.84, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:33:07', seeing=3.33, atlas_timestamp='2026-02-16T00:32:38.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:29:00')
2026-02-16T02:33:28.475 [DEBUG] [Thread-215579] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:33:28.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:33:28.572 [DEBUG] [Thread-215582] [transport.py] [_log()] starting thread (client mode): 0xa2d111e0
2026-02-16T02:33:28.572 [DEBUG] [Thread-215582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:33:28.586 [DEBUG] [Thread-215582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:33:28.587 [INFO] [Thread-215582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:33:28.594 [DEBUG] [Thread-215582] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:33:28.595 [DEBUG] [Thread-215582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] client lang: <none>
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] server lang: <none>
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] kex follows: False
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:33:28.596 [DEBUG] [Thread-215582] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:33:28.597 [DEBUG] [Thread-215582] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:33:28.597 [DEBUG] [Thread-215582] [transport.py] [_log()] Compression: none
2026-02-16T02:33:28.597 [DEBUG] [Thread-215582] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:33:28.652 [DEBUG] [Thread-215582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:33:28.653 [DEBUG] [Thread-215582] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:33:28.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:33:28.654 [DEBUG] [Thread-215582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:33:28.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:33:28.709 [DEBUG] [Thread-215582] [transport.py] [_log()] userauth is OK
2026-02-16T02:33:28.709 [DEBUG] [Thread-215582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:33:28.709 [DEBUG] [Thread-215582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:33:28.709 [DEBUG] [Thread-215582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:33:28.709 [DEBUG] [Thread-215582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:33:28.727 [INFO] [Thread-215582] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:33:28.728 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:33:28.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:33:29.058 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:29.593 [DEBUG] [Thread-215582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:33:29.593 [DEBUG] [Thread-215582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:33:29.641 [DEBUG] [Thread-215582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:33:29.641 [DEBUG] [Thread-215582] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:33:29.650 [DEBUG] [Thread-215582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:33:29.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:33:29.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:33:29.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:33:29.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:33:29.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:33:29.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:33:29.687 [DEBUG] [Thread-215582] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:33:39.589 [DEBUG] [Thread-215584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:41.869 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:41.871 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:46.813 [DEBUG] [Thread-215585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:47.906 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:54.639 [DEBUG] [Thread-215586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:33:59.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:33:59.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:33:59.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:34:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 33, 42), 8.9, 54.85, 0.0, 16.9, 13.57, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:34:01.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:33:42
2026-02-16T02:34:02.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:34:02.187 [DEBUG] [Thread-215587] [transport.py] [_log()] starting thread (client mode): 0xa2d84130
2026-02-16T02:34:02.187 [DEBUG] [Thread-215587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:34:02.206 [DEBUG] [Thread-215587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:34:02.206 [INFO] [Thread-215587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:34:02.209 [DEBUG] [Thread-215587] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] client lang: <none>
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] server lang: <none>
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] kex follows: False
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] Compression: none
2026-02-16T02:34:02.210 [DEBUG] [Thread-215587] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:34:02.226 [DEBUG] [Thread-215587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:34:02.226 [DEBUG] [Thread-215587] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:34:02.226 [DEBUG] [Thread-215587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:34:02.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:34:02.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:34:02.227 [DEBUG] [Thread-215587] [transport.py] [_log()] userauth is OK
2026-02-16T02:34:02.227 [DEBUG] [Thread-215587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:34:02.227 [DEBUG] [Thread-215587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:34:02.227 [DEBUG] [Thread-215587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:34:02.227 [DEBUG] [Thread-215587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:34:02.236 [INFO] [Thread-215587] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:34:02.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:34:03.028 [DEBUG] [Thread-215587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:34:03.028 [DEBUG] [Thread-215587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:34:03.029 [DEBUG] [Thread-215587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:34:03.069 [DEBUG] [Thread-215587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:34:03.069 [DEBUG] [Thread-215587] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:34:03.071 [DEBUG] [Thread-215587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:34:03.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:34:03.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:34:03.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:34:03.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:34:03.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:34:03.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:34:03.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:34:03.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:34:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:34:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.023363 -999.00  +13.30  15.46     61   +5.90 1 1 1 1 1     0    0 7.76 1.98 ZNESW 14.1 15.5 142.6 19.0 13.8 -22.8 13.7 -21.6 13.4 -20.6 13.7 -21.8
2026-02-16T02:34:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:34:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:34:03.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.023363
2026-02-16T02:34:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:34:03.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:34:03.091 [DEBUG] [Thread-215587] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:34:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:34:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:34:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:34:03.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:33:42', tmtdew=8.9, humidity=54.85, cloud=0.0, wind=16.9, temperature=13.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:33:43', seeing=2.4, atlas_timestamp='2026-02-16T00:33:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:32:00')
2026-02-16T02:34:03.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:34:03.188 [DEBUG] [Thread-215590] [transport.py] [_log()] starting thread (client mode): 0xa2d00fd0
2026-02-16T02:34:03.188 [DEBUG] [Thread-215590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:34:03.208 [DEBUG] [Thread-215590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:34:03.208 [INFO] [Thread-215590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:03.216 [DEBUG] [Thread-215590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] client lang: <none>
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] server lang: <none>
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] kex follows: False
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:34:03.217 [DEBUG] [Thread-215590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:34:03.218 [DEBUG] [Thread-215590] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:34:03.218 [DEBUG] [Thread-215590] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:34:03.218 [DEBUG] [Thread-215590] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:34:03.218 [DEBUG] [Thread-215590] [transport.py] [_log()] Compression: none
2026-02-16T02:34:03.218 [DEBUG] [Thread-215590] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:34:03.275 [DEBUG] [Thread-215590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:34:03.276 [DEBUG] [Thread-215590] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:34:03.276 [DEBUG] [Thread-215590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:34:03.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:34:03.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:34:03.331 [DEBUG] [Thread-215590] [transport.py] [_log()] userauth is OK
2026-02-16T02:34:03.331 [DEBUG] [Thread-215590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:34:03.331 [DEBUG] [Thread-215590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:34:03.331 [DEBUG] [Thread-215590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:34:03.332 [DEBUG] [Thread-215590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:34:03.349 [INFO] [Thread-215590] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:34:03.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:34:03.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:34:04.213 [DEBUG] [Thread-215590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:34:04.213 [DEBUG] [Thread-215590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:34:04.262 [DEBUG] [Thread-215590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:34:04.262 [DEBUG] [Thread-215590] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:34:04.272 [DEBUG] [Thread-215590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:34:04.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:34:04.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:34:04.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:34:04.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:34:04.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:34:04.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:34:04.309 [DEBUG] [Thread-215590] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:34:06.711 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:09.675 [DEBUG] [Thread-215592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:24.728 [DEBUG] [Thread-215593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:25.373 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:34.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:34:34.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:34:34.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:34:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 34, 17), 8.56, 55.92, 0.0, 16.97, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:34:36.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:34:17
2026-02-16T02:34:36.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:34:36.675 [DEBUG] [Thread-215594] [transport.py] [_log()] starting thread (client mode): 0xa2d12230
2026-02-16T02:34:36.675 [DEBUG] [Thread-215594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:34:36.695 [DEBUG] [Thread-215594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:34:36.695 [INFO] [Thread-215594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:34:36.698 [DEBUG] [Thread-215594] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:34:36.698 [DEBUG] [Thread-215594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] client lang: <none>
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] server lang: <none>
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] kex follows: False
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] Compression: none
2026-02-16T02:34:36.699 [DEBUG] [Thread-215594] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:34:36.717 [DEBUG] [Thread-215594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:34:36.717 [DEBUG] [Thread-215594] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:34:36.718 [DEBUG] [Thread-215594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:34:36.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:34:36.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:34:36.760 [DEBUG] [Thread-215594] [transport.py] [_log()] userauth is OK
2026-02-16T02:34:36.761 [DEBUG] [Thread-215594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:34:36.761 [DEBUG] [Thread-215594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:34:36.761 [DEBUG] [Thread-215594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:34:36.761 [DEBUG] [Thread-215594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:34:36.793 [INFO] [Thread-215594] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:34:36.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:34:37.436 [DEBUG] [Thread-215594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:34:37.436 [DEBUG] [Thread-215594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:34:37.436 [DEBUG] [Thread-215594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:34:37.477 [DEBUG] [Thread-215594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:34:37.478 [DEBUG] [Thread-215594] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:34:37.481 [DEBUG] [Thread-215594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:34:37.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:34:37.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:34:37.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:34:37.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:34:37.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:34:37.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:34:37.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:34:37.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:34:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:34:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.023710 -999.00  +13.30  13.85     61   +5.90 1 1 1 1 1     0    0 7.81 -1.36 ZNESW 13.3 13.8 140.8 18.8 13.7 -22.6 13.7 -21.8 13.4 -20.5 13.7 -21.8
2026-02-16T02:34:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:34:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:34:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.023710
2026-02-16T02:34:37.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:34:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:34:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:34:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:34:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:34:37.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:34:17', tmtdew=8.56, humidity=55.92, cloud=0.0, wind=16.97, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:34:18', seeing=2.15, atlas_timestamp='2026-02-16T00:34:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:32:00')
2026-02-16T02:34:37.508 [DEBUG] [Thread-215594] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:34:37.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:34:37.603 [DEBUG] [Thread-215597] [transport.py] [_log()] starting thread (client mode): 0xa2d6cf70
2026-02-16T02:34:37.603 [DEBUG] [Thread-215597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:34:37.618 [DEBUG] [Thread-215597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:34:37.619 [INFO] [Thread-215597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:34:37.626 [DEBUG] [Thread-215597] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:34:37.626 [DEBUG] [Thread-215597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:34:37.626 [DEBUG] [Thread-215597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:34:37.626 [DEBUG] [Thread-215597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] client lang: <none>
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] server lang: <none>
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] kex follows: False
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] Compression: none
2026-02-16T02:34:37.627 [DEBUG] [Thread-215597] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:34:37.686 [DEBUG] [Thread-215597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:34:37.686 [DEBUG] [Thread-215597] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:34:37.687 [DEBUG] [Thread-215597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:34:37.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:34:37.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:34:37.742 [DEBUG] [Thread-215597] [transport.py] [_log()] userauth is OK
2026-02-16T02:34:37.743 [DEBUG] [Thread-215597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:34:37.743 [DEBUG] [Thread-215597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:34:37.743 [DEBUG] [Thread-215597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:34:37.743 [DEBUG] [Thread-215597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:34:37.761 [INFO] [Thread-215597] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:34:37.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:34:37.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:34:38.591 [DEBUG] [Thread-215597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:34:38.591 [DEBUG] [Thread-215597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:34:38.639 [DEBUG] [Thread-215597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:34:38.640 [DEBUG] [Thread-215597] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:34:38.649 [DEBUG] [Thread-215597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:34:38.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:34:38.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:34:38.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:34:38.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:34:38.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:34:38.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:34:38.686 [DEBUG] [Thread-215597] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:34:39.763 [DEBUG] [Thread-215599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:42.073 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:42.074 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:44.007 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:46.875 [DEBUG] [Thread-215600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:34:54.812 [DEBUG] [Thread-215601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:02.918 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:35:08.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:35:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:35:09.845 [DEBUG] [Thread-215602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 34, 53), 8.48, 56.17, 0.0, 17.33, 13.25, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:35:10.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:34:53
2026-02-16T02:35:11.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:35:11.320 [DEBUG] [Thread-215603] [transport.py] [_log()] starting thread (client mode): 0xa2d84df0
2026-02-16T02:35:11.320 [DEBUG] [Thread-215603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:35:11.341 [DEBUG] [Thread-215603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:35:11.341 [INFO] [Thread-215603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:11.342 [DEBUG] [Thread-215603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] client lang: <none>
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] server lang: <none>
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] kex follows: False
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] Compression: none
2026-02-16T02:35:11.343 [DEBUG] [Thread-215603] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:35:11.353 [DEBUG] [Thread-215603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:35:11.354 [DEBUG] [Thread-215603] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:35:11.355 [DEBUG] [Thread-215603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:35:11.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:35:11.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:35:11.357 [DEBUG] [Thread-215603] [transport.py] [_log()] userauth is OK
2026-02-16T02:35:11.358 [DEBUG] [Thread-215603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:35:11.358 [DEBUG] [Thread-215603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:35:11.358 [DEBUG] [Thread-215603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:35:11.358 [DEBUG] [Thread-215603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:35:11.384 [INFO] [Thread-215603] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:35:11.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:35:18.737 [DEBUG] [Thread-215603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:35:18.737 [DEBUG] [Thread-215603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:35:18.737 [DEBUG] [Thread-215603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:35:18.778 [DEBUG] [Thread-215603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:35:18.778 [DEBUG] [Thread-215603] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:35:18.781 [DEBUG] [Thread-215603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:35:18.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:35:18.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:35:18.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:35:18.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:35:18.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:35:18.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:35:18.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:35:18.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:35:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:35:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.024057 -999.00  +13.30  12.74     60   +5.70 1 1 1 1 1     0    0 7.74 -4.34 ZNESW 15.7 12.7 139.4 19.3 13.8 -22.5 13.7 -21.5 13.4 -20.2 13.7 -21.7
2026-02-16T02:35:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:35:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:35:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.024057
2026-02-16T02:35:18.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:35:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:35:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:35:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:35:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:35:18.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:34:53', tmtdew=8.48, humidity=56.17, cloud=0.0, wind=17.33, temperature=13.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:34:53', seeing=2.57, atlas_timestamp='2026-02-16T00:34:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:32:00')
2026-02-16T02:35:18.808 [DEBUG] [Thread-215603] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:35:18.891 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:35:18.903 [DEBUG] [Thread-215606] [transport.py] [_log()] starting thread (client mode): 0xa2d265f0
2026-02-16T02:35:18.903 [DEBUG] [Thread-215606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:35:18.917 [DEBUG] [Thread-215606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:35:18.917 [INFO] [Thread-215606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:35:18.925 [DEBUG] [Thread-215606] [transport.py] [_log()] client lang: <none>
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] server lang: <none>
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] kex follows: False
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] Compression: none
2026-02-16T02:35:18.926 [DEBUG] [Thread-215606] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:35:18.985 [DEBUG] [Thread-215606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:35:18.985 [DEBUG] [Thread-215606] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:35:18.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:35:18.987 [DEBUG] [Thread-215606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:35:18.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:35:19.041 [DEBUG] [Thread-215606] [transport.py] [_log()] userauth is OK
2026-02-16T02:35:19.041 [DEBUG] [Thread-215606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:35:19.041 [DEBUG] [Thread-215606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:35:19.041 [DEBUG] [Thread-215606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:35:19.041 [DEBUG] [Thread-215606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:35:19.060 [INFO] [Thread-215606] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:35:19.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:35:19.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:35:19.879 [DEBUG] [Thread-215606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:35:19.880 [DEBUG] [Thread-215606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:35:19.927 [DEBUG] [Thread-215606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:35:19.928 [DEBUG] [Thread-215606] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:35:19.936 [DEBUG] [Thread-215606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:35:19.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:35:19.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:35:19.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:35:19.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:35:19.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:35:19.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:35:19.973 [DEBUG] [Thread-215606] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:35:21.892 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:24.880 [DEBUG] [Thread-215608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:39.928 [DEBUG] [Thread-215609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:40.528 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:42.275 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:42.276 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:46.944 [DEBUG] [Thread-215610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:49.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:35:49.972 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:35: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-02-16T02:35:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 35, 28), 8.49, 56.17, 0.0, 15.99, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:35:52.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:35:28
2026-02-16T02:35:52.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:35:52.622 [DEBUG] [Thread-215611] [transport.py] [_log()] starting thread (client mode): 0xa81d7880
2026-02-16T02:35:52.622 [DEBUG] [Thread-215611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:35:52.642 [DEBUG] [Thread-215611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:35:52.642 [INFO] [Thread-215611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] client lang: <none>
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] server lang: <none>
2026-02-16T02:35:52.646 [DEBUG] [Thread-215611] [transport.py] [_log()] kex follows: False
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] Compression: none
2026-02-16T02:35:52.647 [DEBUG] [Thread-215611] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:35:52.663 [DEBUG] [Thread-215611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:35:52.664 [DEBUG] [Thread-215611] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:35:52.664 [DEBUG] [Thread-215611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:35:52.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:35:52.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:35:52.667 [DEBUG] [Thread-215611] [transport.py] [_log()] userauth is OK
2026-02-16T02:35:52.667 [DEBUG] [Thread-215611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:35:52.667 [DEBUG] [Thread-215611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:35:52.667 [DEBUG] [Thread-215611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:35:52.667 [DEBUG] [Thread-215611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:35:52.691 [INFO] [Thread-215611] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:35:52.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:35:53.309 [DEBUG] [Thread-215611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:35:53.309 [DEBUG] [Thread-215611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:35:53.309 [DEBUG] [Thread-215611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:35:53.350 [DEBUG] [Thread-215611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:35:53.350 [DEBUG] [Thread-215611] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:35:53.352 [DEBUG] [Thread-215611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:35:53.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:35:53.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:35:53.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:35:53.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:35:53.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:35:53.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:35:53.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.024404 -999.00  +13.40  14.43     59   +5.70 1 1 1 1 1     0    0 7.58 -6.03 ZNESW 15.3 14.4 134.4 19.4 13.7 -22.4 13.7 -21.4 13.4 -20.1 13.7 -21.4
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.024404
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:35:53.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:35:28', tmtdew=8.49, humidity=56.17, cloud=0.0, wind=15.99, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:35:29', seeing=2.54, atlas_timestamp='2026-02-16T00:35:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:32:00')
2026-02-16T02:35:53.372 [DEBUG] [Thread-215611] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:35:53.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:35:53.456 [DEBUG] [Thread-215614] [transport.py] [_log()] starting thread (client mode): 0xa2d6c370
2026-02-16T02:35:53.456 [DEBUG] [Thread-215614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:35:53.472 [DEBUG] [Thread-215614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:35:53.472 [INFO] [Thread-215614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:35:53.479 [DEBUG] [Thread-215614] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:35:53.479 [DEBUG] [Thread-215614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:35:53.479 [DEBUG] [Thread-215614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] client lang: <none>
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] server lang: <none>
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] kex follows: False
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] Compression: none
2026-02-16T02:35:53.480 [DEBUG] [Thread-215614] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:35:53.538 [DEBUG] [Thread-215614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:35:53.538 [DEBUG] [Thread-215614] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:35:53.538 [DEBUG] [Thread-215614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:35:53.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:35:53.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:35:53.595 [DEBUG] [Thread-215614] [transport.py] [_log()] userauth is OK
2026-02-16T02:35:53.595 [DEBUG] [Thread-215614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:35:53.595 [DEBUG] [Thread-215614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:35:53.595 [DEBUG] [Thread-215614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:35:53.595 [DEBUG] [Thread-215614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:35:53.609 [INFO] [Thread-215614] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:35:53.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:35:53.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:35:54.410 [DEBUG] [Thread-215614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:35:54.410 [DEBUG] [Thread-215614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:35:54.458 [DEBUG] [Thread-215614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:35:54.458 [DEBUG] [Thread-215614] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:35:54.467 [DEBUG] [Thread-215614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:35:54.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:35: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')
2026-02-16T02:35:54.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:35:54.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:35:54.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:35:54.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:35:54.504 [DEBUG] [Thread-215614] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:35:54.962 [DEBUG] [Thread-215616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:35:59.186 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:10.016 [DEBUG] [Thread-215617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:17.849 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:24.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:36:24.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:36:24.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:36:25.052 [DEBUG] [Thread-215618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 36, 3), 8.45, 56.29, 0.0, 14.7, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:36:26.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:36:03
2026-02-16T02:36:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:36:27.043 [DEBUG] [Thread-215619] [transport.py] [_log()] starting thread (client mode): 0xa57e33d0
2026-02-16T02:36:27.043 [DEBUG] [Thread-215619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:36:27.063 [DEBUG] [Thread-215619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:36:27.063 [INFO] [Thread-215619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:36:27.066 [DEBUG] [Thread-215619] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:36:27.066 [DEBUG] [Thread-215619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:36:27.066 [DEBUG] [Thread-215619] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:36:27.066 [DEBUG] [Thread-215619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:36:27.066 [DEBUG] [Thread-215619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] client lang: <none>
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] server lang: <none>
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] kex follows: False
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] Compression: none
2026-02-16T02:36:27.067 [DEBUG] [Thread-215619] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:36:27.086 [DEBUG] [Thread-215619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:36:27.087 [DEBUG] [Thread-215619] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:36:27.087 [DEBUG] [Thread-215619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:36:27.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:36:27.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:36:27.128 [DEBUG] [Thread-215619] [transport.py] [_log()] userauth is OK
2026-02-16T02:36:27.129 [DEBUG] [Thread-215619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:36:27.129 [DEBUG] [Thread-215619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:36:27.129 [DEBUG] [Thread-215619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:36:27.129 [DEBUG] [Thread-215619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:36:27.149 [INFO] [Thread-215619] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:36:27.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:36:27.768 [DEBUG] [Thread-215619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:36:27.769 [DEBUG] [Thread-215619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:36:27.769 [DEBUG] [Thread-215619] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:36:27.810 [DEBUG] [Thread-215619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:36:27.810 [DEBUG] [Thread-215619] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:36:27.813 [DEBUG] [Thread-215619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:36:27.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:36:27.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:36:27.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:36:27.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:36:27.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:36:27.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:36:27.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:36:27.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:36:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:36:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.024752 -999.00  +13.50  17.26     59   +5.70 1 1 1 1 1     0    0 7.47 -8.08 ZNESW 16.9 17.3 131.2 19.9 13.8 -22.4 13.7 -21.3 13.4 -20.1 13.7 -21.3
2026-02-16T02:36:27.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:36:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:36:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.024752
2026-02-16T02:36:27.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:36:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:36:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:36:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:36:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:36:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:36:03', tmtdew=8.45, humidity=56.29, cloud=0.0, wind=14.7, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:36:04', seeing=2.59, atlas_timestamp='2026-02-16T00:35:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.005250000000000199, -0.013749999999999929, -0.1255000000000006, -0.033500000000000085, 0.02325000000000088, 0.01699999999999946, 0.006250000000001421, 0.03149999999999942, -0.02999999999999936, -0.05025000000000013, -0.041999999999999815, 0.023499999999998522, 0.045249999999999346, -0.014000000000001123, -0.012000000000000455, 0.02624999999999922, -0.045499999999998764, 0.010999999999999233, -0.014750000000001151, 0.034999999999998366, 0.012749999999998707, 0.024750000000000938, 0.0337499999999995, 0.010499999999998622, -0.05850000000000044, -0.0072499999999990905, -0.02800000000000047, 0.046499999999999986, 0.01550000000000118, 0.08950000000000102, 0.031500000000001194, -0.035250000000001336], zp_timestamp='2026-02-16T00:32:00')
2026-02-16T02:36:27.840 [DEBUG] [Thread-215619] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:36:27.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:36:27.936 [DEBUG] [Thread-215622] [transport.py] [_log()] starting thread (client mode): 0xa2d03dc0
2026-02-16T02:36:27.936 [DEBUG] [Thread-215622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:36:27.951 [DEBUG] [Thread-215622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:36:27.951 [INFO] [Thread-215622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:36:27.958 [DEBUG] [Thread-215622] [transport.py] [_log()] client lang: <none>
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] server lang: <none>
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] kex follows: False
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] Compression: none
2026-02-16T02:36:27.959 [DEBUG] [Thread-215622] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:36:28.017 [DEBUG] [Thread-215622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:36:28.017 [DEBUG] [Thread-215622] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:36:28.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:36:28.017 [DEBUG] [Thread-215622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:36:28.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:36:28.074 [DEBUG] [Thread-215622] [transport.py] [_log()] userauth is OK
2026-02-16T02:36:28.075 [DEBUG] [Thread-215622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:36:28.075 [DEBUG] [Thread-215622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:36:28.075 [DEBUG] [Thread-215622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:36:28.075 [DEBUG] [Thread-215622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:36:28.098 [INFO] [Thread-215622] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:36:28.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:36:28.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:36:28.920 [DEBUG] [Thread-215622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:36:28.920 [DEBUG] [Thread-215622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:36:28.968 [DEBUG] [Thread-215622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:36:28.968 [DEBUG] [Thread-215622] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:36:28.976 [DEBUG] [Thread-215622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:36:28.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:36:28.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:36:28.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:36:29.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:36:29.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:36:29.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:36:29.012 [DEBUG] [Thread-215622] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:36:36.759 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:40.088 [DEBUG] [Thread-215624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:42.475 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:42.476 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:47.011 [DEBUG] [Thread-215625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:55.140 [DEBUG] [Thread-215626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:55.851 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:36:59.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:36:59.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:36:59.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:37:00.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 36, 38), 8.61, 55.94, 0.0, 13.13, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:37:00.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:36:38
2026-02-16T02:37:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:37:01.396 [DEBUG] [Thread-215627] [transport.py] [_log()] starting thread (client mode): 0xa2d26a10
2026-02-16T02:37:01.397 [DEBUG] [Thread-215627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:37:01.416 [DEBUG] [Thread-215627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:37:01.416 [INFO] [Thread-215627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] client lang: <none>
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] server lang: <none>
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] kex follows: False
2026-02-16T02:37:01.419 [DEBUG] [Thread-215627] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:37:01.420 [DEBUG] [Thread-215627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:37:01.420 [DEBUG] [Thread-215627] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:37:01.420 [DEBUG] [Thread-215627] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:37:01.420 [DEBUG] [Thread-215627] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:37:01.420 [DEBUG] [Thread-215627] [transport.py] [_log()] Compression: none
2026-02-16T02:37:01.420 [DEBUG] [Thread-215627] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:37:01.431 [DEBUG] [Thread-215627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:37:01.432 [DEBUG] [Thread-215627] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:37:01.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:37:01.432 [DEBUG] [Thread-215627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:37:01.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:37:01.433 [DEBUG] [Thread-215627] [transport.py] [_log()] userauth is OK
2026-02-16T02:37:01.433 [DEBUG] [Thread-215627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:37:01.433 [DEBUG] [Thread-215627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:37:01.433 [DEBUG] [Thread-215627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:37:01.433 [DEBUG] [Thread-215627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:37:01.445 [INFO] [Thread-215627] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:37:01.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:37:02.097 [DEBUG] [Thread-215627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:37:02.097 [DEBUG] [Thread-215627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:37:02.097 [DEBUG] [Thread-215627] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:37:02.137 [DEBUG] [Thread-215627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:37:02.137 [DEBUG] [Thread-215627] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:37:02.140 [DEBUG] [Thread-215627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:37:02.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:37:02.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:37:02.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:37:02.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:37:02.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:37:02.163 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:37:02.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:37:02.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.025099 -999.00  +13.50  15.55     59   +5.80 1 1 1 1 1     0    0 7.49 -8.66 ZNESW 16.9 15.6 135.8 19.4 13.7 -22.5 13.7 -21.6 13.4 -20.3 13.7 -21.4
2026-02-16T02:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:37:02.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.025099
2026-02-16T02:37:02.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:37:02.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:37:02.166 [DEBUG] [Thread-215627] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:37:02.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:37:02.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:36:38', tmtdew=8.61, humidity=55.94, cloud=0.0, wind=13.13, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:36:39', seeing=2.59, atlas_timestamp='2026-02-16T00:36:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:35:00')
2026-02-16T02:37:02.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:37:02.264 [DEBUG] [Thread-215630] [transport.py] [_log()] starting thread (client mode): 0xa2de83d0
2026-02-16T02:37:02.264 [DEBUG] [Thread-215630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:37:02.279 [DEBUG] [Thread-215630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:37:02.279 [INFO] [Thread-215630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:37:02.286 [DEBUG] [Thread-215630] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] client lang: <none>
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] server lang: <none>
2026-02-16T02:37:02.287 [DEBUG] [Thread-215630] [transport.py] [_log()] kex follows: False
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] Compression: none
2026-02-16T02:37:02.288 [DEBUG] [Thread-215630] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:37:02.345 [DEBUG] [Thread-215630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:37:02.345 [DEBUG] [Thread-215630] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:37:02.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:37:02.347 [DEBUG] [Thread-215630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:37:02.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:37:02.401 [DEBUG] [Thread-215630] [transport.py] [_log()] userauth is OK
2026-02-16T02:37:02.402 [DEBUG] [Thread-215630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:37:02.402 [DEBUG] [Thread-215630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:37:02.402 [DEBUG] [Thread-215630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:37:02.402 [DEBUG] [Thread-215630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:37:02.420 [INFO] [Thread-215630] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:37:02.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:37:02.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:37:03.233 [DEBUG] [Thread-215630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:37:03.234 [DEBUG] [Thread-215630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:37:03.282 [DEBUG] [Thread-215630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:37:03.282 [DEBUG] [Thread-215630] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:37:03.293 [DEBUG] [Thread-215630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:37:03.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:37:03.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:37:03.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:37:03.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:37:03.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:37:03.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:37:03.335 [DEBUG] [Thread-215630] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:37:10.174 [DEBUG] [Thread-215632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:14.809 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:25.233 [DEBUG] [Thread-215633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:33.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:37:33.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:37:33.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:37:33.796 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 37, 14), 8.53, 56.22, 0.0, 16.3, 13.25, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:37:35.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:37:14
2026-02-16T02:37:35.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:37:35.713 [DEBUG] [Thread-215634] [transport.py] [_log()] starting thread (client mode): 0xa2de9300
2026-02-16T02:37:35.713 [DEBUG] [Thread-215634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:37:35.733 [DEBUG] [Thread-215634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:37:35.733 [INFO] [Thread-215634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] client lang: <none>
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] server lang: <none>
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] kex follows: False
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] Compression: none
2026-02-16T02:37:35.737 [DEBUG] [Thread-215634] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:37:35.755 [DEBUG] [Thread-215634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:37:35.755 [DEBUG] [Thread-215634] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:37:35.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:37:35.756 [DEBUG] [Thread-215634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:37:35.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:37:35.759 [DEBUG] [Thread-215634] [transport.py] [_log()] userauth is OK
2026-02-16T02:37:35.759 [DEBUG] [Thread-215634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:37:35.759 [DEBUG] [Thread-215634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:37:35.759 [DEBUG] [Thread-215634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:37:35.760 [DEBUG] [Thread-215634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:37:35.781 [INFO] [Thread-215634] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:37:35.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:37:36.410 [DEBUG] [Thread-215634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:37:36.410 [DEBUG] [Thread-215634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:37:36.410 [DEBUG] [Thread-215634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:37:36.451 [DEBUG] [Thread-215634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:37:36.451 [DEBUG] [Thread-215634] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:37:36.454 [DEBUG] [Thread-215634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:37:36.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:37:36.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:37:36.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:37:36.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:37:36.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:37:36.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:37:36.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:37:36.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:37:36.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:37:36.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.025794 -999.00  +13.30  13.06     60   +5.90 1 1 1 1 1     0    0 7.43 -12.12 ZNESW 11.1 13.1 132.0 16.0 13.8 -22.5 13.6 -21.5 13.4 -20.4 13.7 -21.6
2026-02-16T02:37:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:37:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:37:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.025794
2026-02-16T02:37:36.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:37:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:37:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:37:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:37:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:37:36.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:37:14', tmtdew=8.53, humidity=56.22, cloud=0.0, wind=16.3, temperature=13.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:37:14', seeing=2.75, atlas_timestamp='2026-02-16T00:37:08.602', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:35:00')
2026-02-16T02:37:36.480 [DEBUG] [Thread-215634] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:37:36.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:37:40.268 [DEBUG] [Thread-215637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:42.679 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:42.680 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:47.077 [DEBUG] [Thread-215638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:52.433 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:37:55.318 [DEBUG] [Thread-215639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:10.357 [DEBUG] [Thread-215640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:11.105 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:25.396 [DEBUG] [Thread-215641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:29.750 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:40.434 [DEBUG] [Thread-215642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:42.882 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:42.883 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:47.149 [DEBUG] [Thread-215643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:48.698 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:38:55.470 [DEBUG] [Thread-215644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:07.450 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:10.503 [DEBUG] [Thread-215645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:25.539 [DEBUG] [Thread-215646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:26.116 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:40.574 [DEBUG] [Thread-215647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:43.083 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:43.084 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:44.783 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:47.218 [DEBUG] [Thread-215648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:39:50.083 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-16T02:39:55.610 [DEBUG] [Thread-215649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:03.465 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:10.642 [DEBUG] [Thread-215650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:20.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:40:20.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:40:20.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:40:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 40, 11), 8.38, 56.9, 0.0, 14.96, 13.09, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:40:22.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:40:11
2026-02-16T02:40:22.144 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:22.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:40:22.588 [DEBUG] [Thread-215651] [transport.py] [_log()] starting thread (client mode): 0xa2d11f30
2026-02-16T02:40:22.588 [DEBUG] [Thread-215651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:40:22.607 [DEBUG] [Thread-215651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:40:22.608 [INFO] [Thread-215651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:40:22.618 [DEBUG] [Thread-215651] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:40:22.618 [DEBUG] [Thread-215651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:40:22.618 [DEBUG] [Thread-215651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:40:22.618 [DEBUG] [Thread-215651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:22.618 [DEBUG] [Thread-215651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] client lang: <none>
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] server lang: <none>
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] kex follows: False
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:40:22.619 [DEBUG] [Thread-215651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:40:22.620 [DEBUG] [Thread-215651] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:40:22.620 [DEBUG] [Thread-215651] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:40:22.621 [DEBUG] [Thread-215651] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:40:22.621 [DEBUG] [Thread-215651] [transport.py] [_log()] Compression: none
2026-02-16T02:40:22.621 [DEBUG] [Thread-215651] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:40:22.634 [DEBUG] [Thread-215651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:40:22.635 [DEBUG] [Thread-215651] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:40:22.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:40:22.636 [DEBUG] [Thread-215651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:40:22.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:40:22.638 [DEBUG] [Thread-215651] [transport.py] [_log()] userauth is OK
2026-02-16T02:40:22.639 [DEBUG] [Thread-215651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:40:22.639 [DEBUG] [Thread-215651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:40:22.639 [DEBUG] [Thread-215651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:40:22.639 [DEBUG] [Thread-215651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:40:22.662 [INFO] [Thread-215651] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:40:22.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:40:23.294 [DEBUG] [Thread-215651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:40:23.295 [DEBUG] [Thread-215651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:40:23.295 [DEBUG] [Thread-215651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:40:23.335 [DEBUG] [Thread-215651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:40:23.335 [DEBUG] [Thread-215651] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:40:23.340 [DEBUG] [Thread-215651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:40:23.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:40:23.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:40:23.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:40:23.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:40:23.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:40:23.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:40:23.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:40:23.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:40:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:40:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.027530 -999.00  +13.30  17.11     60   +5.80 1 1 1 1 1     0    0 6.98 -27.96 ZNESW 19.5 17.1 136.4 21.6 13.7 -22.3 13.7 -21.4 13.4 -20.2 13.7 -21.6
2026-02-16T02:40:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:40:23.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.027530
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:40:23.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:40:11', tmtdew=8.38, humidity=56.9, cloud=0.0, wind=14.96, temperature=13.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:40:11', seeing=2.25, atlas_timestamp='2026-02-16T00:39:38.592', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:38:00')
2026-02-16T02:40:23.362 [DEBUG] [Thread-215651] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:40:23.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:40:23.470 [DEBUG] [Thread-215654] [transport.py] [_log()] starting thread (client mode): 0xa2dc3fa0
2026-02-16T02:40:23.471 [DEBUG] [Thread-215654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:40:23.486 [DEBUG] [Thread-215654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:40:23.486 [INFO] [Thread-215654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:40:23.494 [DEBUG] [Thread-215654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] client lang: <none>
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] server lang: <none>
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] kex follows: False
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] Compression: none
2026-02-16T02:40:23.495 [DEBUG] [Thread-215654] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:40:23.558 [DEBUG] [Thread-215654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:40:23.558 [DEBUG] [Thread-215654] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:40:23.559 [DEBUG] [Thread-215654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:40:23.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:40:23.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:40:23.617 [DEBUG] [Thread-215654] [transport.py] [_log()] userauth is OK
2026-02-16T02:40:23.618 [DEBUG] [Thread-215654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:40:23.618 [DEBUG] [Thread-215654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:40:23.618 [DEBUG] [Thread-215654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:40:23.618 [DEBUG] [Thread-215654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:40:23.638 [INFO] [Thread-215654] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:40:23.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:40:23.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:40:24.478 [DEBUG] [Thread-215654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:40:24.478 [DEBUG] [Thread-215654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:40:24.527 [DEBUG] [Thread-215654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:40:24.528 [DEBUG] [Thread-215654] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:40:24.540 [DEBUG] [Thread-215654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:40:24.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:40:24.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:40:24.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:40:24.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:40:24.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:40:24.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:40:24.585 [DEBUG] [Thread-215654] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:40:25.677 [DEBUG] [Thread-215656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:40.730 [DEBUG] [Thread-215657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:40.793 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:43.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:43.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:47.297 [DEBUG] [Thread-215658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:54.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:40:54.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:40:54.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:40:55.766 [DEBUG] [Thread-215659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:40:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 40, 46), 8.33, 57.12, 0.0, 16.53, 13.05, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:40:56.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:40:46
2026-02-16T02:40:56.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:40:57.041 [DEBUG] [Thread-215660] [transport.py] [_log()] starting thread (client mode): 0xa57b3bb0
2026-02-16T02:40:57.041 [DEBUG] [Thread-215660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:40:57.058 [DEBUG] [Thread-215660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:40:57.058 [INFO] [Thread-215660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:40:57.061 [DEBUG] [Thread-215660] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:40:57.061 [DEBUG] [Thread-215660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:40:57.061 [DEBUG] [Thread-215660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:40:57.061 [DEBUG] [Thread-215660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:57.061 [DEBUG] [Thread-215660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] client lang: <none>
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] server lang: <none>
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] kex follows: False
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] Compression: none
2026-02-16T02:40:57.062 [DEBUG] [Thread-215660] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:40:57.080 [DEBUG] [Thread-215660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:40:57.081 [DEBUG] [Thread-215660] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:40:57.081 [DEBUG] [Thread-215660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:40:57.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:40:57.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:40:57.083 [DEBUG] [Thread-215660] [transport.py] [_log()] userauth is OK
2026-02-16T02:40:57.084 [DEBUG] [Thread-215660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:40:57.084 [DEBUG] [Thread-215660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:40:57.084 [DEBUG] [Thread-215660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:40:57.084 [DEBUG] [Thread-215660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:40:57.108 [INFO] [Thread-215660] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:40:57.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:40:57.714 [DEBUG] [Thread-215660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:40:57.714 [DEBUG] [Thread-215660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:40:57.714 [DEBUG] [Thread-215660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:40:57.755 [DEBUG] [Thread-215660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:40:57.756 [DEBUG] [Thread-215660] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:40:57.759 [DEBUG] [Thread-215660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:40:57.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:40:57.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:40:57.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:40:57.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:40:57.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:40:57.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:40:57.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:40:57.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:40:57.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:40:57.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.028224 -999.00  +13.20  14.77     61   +5.90 1 1 1 1 1     0    0 6.78 -31.40 ZNESW 16.8 14.8 134.2 16.5 13.7 -22.4 13.6 -21.4 13.3 -20.0 13.7 -21.4
2026-02-16T02:40:57.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:40:57.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:40:57.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.028224
2026-02-16T02:40:57.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:40:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:40:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:40:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:40:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:40:57.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:40:46', tmtdew=8.33, humidity=57.12, cloud=0.0, wind=16.53, temperature=13.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:40:46', seeing=2.12, atlas_timestamp='2026-02-16T00:40:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:38:00')
2026-02-16T02:40:57.788 [DEBUG] [Thread-215660] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:40:57.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:40:57.884 [DEBUG] [Thread-215663] [transport.py] [_log()] starting thread (client mode): 0xa2dc2200
2026-02-16T02:40:57.884 [DEBUG] [Thread-215663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:40:57.899 [DEBUG] [Thread-215663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:40:57.899 [INFO] [Thread-215663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:40:57.906 [DEBUG] [Thread-215663] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:40:57.907 [DEBUG] [Thread-215663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:40:57.907 [DEBUG] [Thread-215663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:40:57.907 [DEBUG] [Thread-215663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] client lang: <none>
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] server lang: <none>
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] kex follows: False
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] Compression: none
2026-02-16T02:40:57.908 [DEBUG] [Thread-215663] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:40:57.964 [DEBUG] [Thread-215663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:40:57.965 [DEBUG] [Thread-215663] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:40:57.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:40:57.966 [DEBUG] [Thread-215663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:40:57.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:40:58.021 [DEBUG] [Thread-215663] [transport.py] [_log()] userauth is OK
2026-02-16T02:40:58.021 [DEBUG] [Thread-215663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:40:58.021 [DEBUG] [Thread-215663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:40:58.021 [DEBUG] [Thread-215663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:40:58.021 [DEBUG] [Thread-215663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:40:58.046 [INFO] [Thread-215663] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:40:58.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:40:58.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:40:58.886 [DEBUG] [Thread-215663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:40:58.886 [DEBUG] [Thread-215663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:40:58.934 [DEBUG] [Thread-215663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:40:58.935 [DEBUG] [Thread-215663] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:40:58.944 [DEBUG] [Thread-215663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:40:58.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:40:58.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:40:58.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:40:58.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:40:58.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:40:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:40:58.981 [DEBUG] [Thread-215663] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:40:59.679 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:10.803 [DEBUG] [Thread-215665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:18.389 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:25.841 [DEBUG] [Thread-215666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:29.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:41:29.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:41:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:41:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 41, 21), 8.3, 57.25, 0.0, 16.25, 13.08, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:41:30.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:41:21
2026-02-16T02:41:31.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:41:31.434 [DEBUG] [Thread-215667] [transport.py] [_log()] starting thread (client mode): 0xa2d01930
2026-02-16T02:41:31.435 [DEBUG] [Thread-215667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:41:31.453 [DEBUG] [Thread-215667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:41:31.453 [INFO] [Thread-215667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:41:31.456 [DEBUG] [Thread-215667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] client lang: <none>
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] server lang: <none>
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] kex follows: False
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] Compression: none
2026-02-16T02:41:31.457 [DEBUG] [Thread-215667] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:41:31.473 [DEBUG] [Thread-215667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:41:31.474 [DEBUG] [Thread-215667] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:41:31.474 [DEBUG] [Thread-215667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:41:31.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:41:31.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:41:31.476 [DEBUG] [Thread-215667] [transport.py] [_log()] userauth is OK
2026-02-16T02:41:31.476 [DEBUG] [Thread-215667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:41:31.476 [DEBUG] [Thread-215667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:41:31.476 [DEBUG] [Thread-215667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:41:31.477 [DEBUG] [Thread-215667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:41:31.498 [INFO] [Thread-215667] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:41:31.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:41:32.066 [DEBUG] [Thread-215667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:41:32.066 [DEBUG] [Thread-215667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:41:32.067 [DEBUG] [Thread-215667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:41:32.107 [DEBUG] [Thread-215667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:41:32.108 [DEBUG] [Thread-215667] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:41:32.112 [DEBUG] [Thread-215667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:41:32.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:41:32.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:41:32.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:41:32.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:41:32.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:41:32.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:41:32.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.028571 -999.00  +13.20  17.79     61   +5.90 1 1 1 1 1     0    0 6.66 -34.25 ZNESW 15.3 17.8 130.8 21.5 13.7 -22.3 13.6 -21.3 13.4 -20.2 13.6 -21.5
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.028571
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:41:32.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:41:21', tmtdew=8.3, humidity=57.25, cloud=0.0, wind=16.25, temperature=13.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:41:22', seeing=2.67, atlas_timestamp='2026-02-16T00:41:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:38:00')
2026-02-16T02:41:32.128 [DEBUG] [Thread-215667] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:41:32.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:41:32.213 [DEBUG] [Thread-215670] [transport.py] [_log()] starting thread (client mode): 0xa2d02ec0
2026-02-16T02:41:32.213 [DEBUG] [Thread-215670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:41:32.227 [DEBUG] [Thread-215670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:41:32.227 [INFO] [Thread-215670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] client lang: <none>
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] server lang: <none>
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] kex follows: False
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:41:32.235 [DEBUG] [Thread-215670] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:41:32.236 [DEBUG] [Thread-215670] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:41:32.236 [DEBUG] [Thread-215670] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:41:32.236 [DEBUG] [Thread-215670] [transport.py] [_log()] Compression: none
2026-02-16T02:41:32.236 [DEBUG] [Thread-215670] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:41:32.292 [DEBUG] [Thread-215670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:41:32.292 [DEBUG] [Thread-215670] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:41:32.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:41:32.293 [DEBUG] [Thread-215670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:41:32.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:41:32.348 [DEBUG] [Thread-215670] [transport.py] [_log()] userauth is OK
2026-02-16T02:41:32.349 [DEBUG] [Thread-215670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:41:32.349 [DEBUG] [Thread-215670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:41:32.349 [DEBUG] [Thread-215670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:41:32.349 [DEBUG] [Thread-215670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:41:32.367 [INFO] [Thread-215670] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:41:32.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:41:32.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:41:33.241 [DEBUG] [Thread-215670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:41:33.241 [DEBUG] [Thread-215670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:41:33.289 [DEBUG] [Thread-215670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:41:33.289 [DEBUG] [Thread-215670] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:41:33.297 [DEBUG] [Thread-215670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:41:33.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:41:33.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:41:33.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:41:33.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:41:33.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:41:33.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:41:33.331 [DEBUG] [Thread-215670] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:41:37.056 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:40.879 [DEBUG] [Thread-215672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:43.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:43.485 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:47.359 [DEBUG] [Thread-215673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:55.709 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:41:55.931 [DEBUG] [Thread-215674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:03.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:42:03.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:42:03.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:42:05.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 41, 57), 8.31, 57.2, 0.0, 17.68, 13.12, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:42:05.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:41:57
2026-02-16T02:42:05.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:42:05.702 [DEBUG] [Thread-215675] [transport.py] [_log()] starting thread (client mode): 0xa5772f20
2026-02-16T02:42:05.702 [DEBUG] [Thread-215675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:42:05.715 [DEBUG] [Thread-215675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:42:05.715 [INFO] [Thread-215675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] client lang: <none>
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] server lang: <none>
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] kex follows: False
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] Compression: none
2026-02-16T02:42:05.717 [DEBUG] [Thread-215675] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:42:05.725 [DEBUG] [Thread-215675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:42:05.725 [DEBUG] [Thread-215675] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:42:05.726 [DEBUG] [Thread-215675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:42:05.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:42:05.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:42:05.726 [DEBUG] [Thread-215675] [transport.py] [_log()] userauth is OK
2026-02-16T02:42:05.727 [DEBUG] [Thread-215675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:42:05.727 [DEBUG] [Thread-215675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:42:05.727 [DEBUG] [Thread-215675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:42:05.727 [DEBUG] [Thread-215675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:42:05.739 [INFO] [Thread-215675] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:42:05.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:42:06.511 [DEBUG] [Thread-215675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:42:06.511 [DEBUG] [Thread-215675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:42:06.512 [DEBUG] [Thread-215675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:42:06.552 [DEBUG] [Thread-215675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:42:06.552 [DEBUG] [Thread-215675] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:42:06.556 [DEBUG] [Thread-215675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:42:06.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:42:06.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:42:06.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:42:06.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:42:06.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:42:06.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:42:06.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:42:06.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:42:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:42:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.028571 -999.00  +13.20  17.79     61   +5.90 1 1 1 1 1     0    0 6.66 -34.25 ZNESW 15.3 17.8 130.8 21.5 13.7 -22.3 13.6 -21.3 13.4 -20.2 13.6 -21.5
2026-02-16T02:42:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:42:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:42:06.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.028571
2026-02-16T02:42:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:42:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:42:06.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:42:06.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:42:06.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:42:06.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:41:57', tmtdew=8.31, humidity=57.2, cloud=0.0, wind=17.68, temperature=13.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:41:57', seeing=2.22, atlas_timestamp='2026-02-16T00:41:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:38:00')
2026-02-16T02:42:06.577 [DEBUG] [Thread-215675] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:42:06.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:42:06.672 [DEBUG] [Thread-215678] [transport.py] [_log()] starting thread (client mode): 0xa5773c70
2026-02-16T02:42:06.672 [DEBUG] [Thread-215678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:42:06.687 [DEBUG] [Thread-215678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:42:06.687 [INFO] [Thread-215678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:42:06.695 [DEBUG] [Thread-215678] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:42:06.695 [DEBUG] [Thread-215678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] client lang: <none>
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] server lang: <none>
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] kex follows: False
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] Compression: none
2026-02-16T02:42:06.696 [DEBUG] [Thread-215678] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:42:06.756 [DEBUG] [Thread-215678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:42:06.756 [DEBUG] [Thread-215678] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:42:06.757 [DEBUG] [Thread-215678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:42:06.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:42:06.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:42:06.811 [DEBUG] [Thread-215678] [transport.py] [_log()] userauth is OK
2026-02-16T02:42:06.812 [DEBUG] [Thread-215678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:42:06.812 [DEBUG] [Thread-215678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:42:06.812 [DEBUG] [Thread-215678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:42:06.812 [DEBUG] [Thread-215678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:42:06.831 [INFO] [Thread-215678] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:42:06.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:42:06.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:42:07.679 [DEBUG] [Thread-215678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:42:07.679 [DEBUG] [Thread-215678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:42:07.727 [DEBUG] [Thread-215678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:42:07.728 [DEBUG] [Thread-215678] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:42:07.737 [DEBUG] [Thread-215678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:42:07.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:42:07.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:42: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') -> 00000000
2026-02-16T02:42:07.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:42:07.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:42:07.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:42:07.773 [DEBUG] [Thread-215678] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:42:10.966 [DEBUG] [Thread-215680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:14.501 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:26.016 [DEBUG] [Thread-215681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:33.578 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:42:37.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:42:37.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:42:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 42, 32), 8.33, 57.1, 0.0, 16.34, 13.15, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:42:39.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:42:32
2026-02-16T02:42:39.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:42:40.154 [DEBUG] [Thread-215682] [transport.py] [_log()] starting thread (client mode): 0xa5772200
2026-02-16T02:42:40.154 [DEBUG] [Thread-215682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:42:40.173 [DEBUG] [Thread-215682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:42:40.173 [INFO] [Thread-215682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:42:40.176 [DEBUG] [Thread-215682] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:42:40.176 [DEBUG] [Thread-215682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:42:40.176 [DEBUG] [Thread-215682] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:42:40.176 [DEBUG] [Thread-215682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] client lang: <none>
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] server lang: <none>
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] kex follows: False
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] Compression: none
2026-02-16T02:42:40.177 [DEBUG] [Thread-215682] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:42:40.194 [DEBUG] [Thread-215682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:42:40.194 [DEBUG] [Thread-215682] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:42:40.195 [DEBUG] [Thread-215682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:42:40.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:42:40.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:42:40.197 [DEBUG] [Thread-215682] [transport.py] [_log()] userauth is OK
2026-02-16T02:42:40.197 [DEBUG] [Thread-215682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:42:40.197 [DEBUG] [Thread-215682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:42:40.197 [DEBUG] [Thread-215682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:42:40.197 [DEBUG] [Thread-215682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:42:40.215 [INFO] [Thread-215682] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:42:40.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:42:40.843 [DEBUG] [Thread-215682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:42:40.843 [DEBUG] [Thread-215682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:42:40.844 [DEBUG] [Thread-215682] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:42:40.884 [DEBUG] [Thread-215682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:42:40.885 [DEBUG] [Thread-215682] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:42:40.888 [DEBUG] [Thread-215682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:42:40.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:42:40.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:42:40.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:42:40.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:42:40.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:42:40.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:42:40.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:42:40.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:42:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:42:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.028918 -999.00  +13.20  14.40     61   +5.90 1 1 1 1 1     0    0 6.84 -33.03 ZNESW 12.2 14.4 133.4 17.1 13.7 -22.4 13.6 -21.4 13.3 -20.2 13.6 -21.3
2026-02-16T02:42:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:42:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:42:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.028918
2026-02-16T02:42:40.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:42:40.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:42:40.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:42:40.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:42:40.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:42:40.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:42:32', tmtdew=8.33, humidity=57.1, cloud=0.0, wind=16.34, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:42:32', seeing=2.21, atlas_timestamp='2026-02-16T00:41:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.014749999999999375, 0.011750000000001037, -0.03074999999999939, -0.12150000000000105, -0.025500000000000966, -0.010749999999999815, 0.0, 0.004250000000000753, 0.023499999999998522, -0.038000000000000256, -0.030250000000000554, -0.05200000000000138, 0.026999999999999247, 0.051249999999999574, 0.021999999999998465, 0.0019999999999988916, 0.04224999999999923, -0.00849999999999973, 0.011999999999998678, -0.007750000000001478, -0.014000000000001123, 0.014749999999999375, 0.015249999999999986, 0.0417500000000004, 0.030999999999998806, -0.03700000000000081, 0.007750000000001478, 0.013500000000000512, 0.07500000000000107, 0.053000000000000824, 0.05450000000000088, 0.03700000000000081, -0.028250000000001663], zp_timestamp='2026-02-16T00:38:00')
2026-02-16T02:42:40.916 [DEBUG] [Thread-215682] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:42:40.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:42:41.014 [DEBUG] [Thread-215685] [transport.py] [_log()] starting thread (client mode): 0xa57b33d0
2026-02-16T02:42:41.014 [DEBUG] [Thread-215685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:42:41.032 [DEBUG] [Thread-215685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:42:41.032 [INFO] [Thread-215685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:42:41.043 [DEBUG] [Thread-215685] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:42:41.043 [DEBUG] [Thread-215685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:42:41.043 [DEBUG] [Thread-215685] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:42:41.043 [DEBUG] [Thread-215685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:41.043 [DEBUG] [Thread-215685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] client lang: <none>
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] server lang: <none>
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] kex follows: False
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] Compression: none
2026-02-16T02:42:41.044 [DEBUG] [Thread-215685] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:42:41.050 [DEBUG] [Thread-215687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:41.103 [DEBUG] [Thread-215685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:42:41.103 [DEBUG] [Thread-215685] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:42:41.104 [DEBUG] [Thread-215685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:42:41.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:42:41.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:42:41.166 [DEBUG] [Thread-215685] [transport.py] [_log()] userauth is OK
2026-02-16T02:42:41.166 [DEBUG] [Thread-215685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:42:41.167 [DEBUG] [Thread-215685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:42:41.167 [DEBUG] [Thread-215685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:42:41.167 [DEBUG] [Thread-215685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:42:41.186 [INFO] [Thread-215685] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:42:41.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:42:41.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:42:41.990 [DEBUG] [Thread-215685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:42:41.990 [DEBUG] [Thread-215685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:42:42.038 [DEBUG] [Thread-215685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:42:42.039 [DEBUG] [Thread-215685] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:42:42.049 [DEBUG] [Thread-215685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:42:42.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:42:42.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:42:42.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:42:42.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:42:42.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:42:42.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:42:42.089 [DEBUG] [Thread-215685] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:42:43.685 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:43.686 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:47.424 [DEBUG] [Thread-215688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:52.540 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:42:56.099 [DEBUG] [Thread-215689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:11.136 [DEBUG] [Thread-215690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:11.309 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:12.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:43:12.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:43:12.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:43:14.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 42, 32), 8.33, 57.1, 0.0, 16.34, 13.15, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:43:14.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:42:32
2026-02-16T02:43:14.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:43:14.515 [DEBUG] [Thread-215691] [transport.py] [_log()] starting thread (client mode): 0xa2d01510
2026-02-16T02:43:14.516 [DEBUG] [Thread-215691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:43:14.536 [DEBUG] [Thread-215691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:43:14.536 [INFO] [Thread-215691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] client lang: <none>
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] server lang: <none>
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] kex follows: False
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] Compression: none
2026-02-16T02:43:14.539 [DEBUG] [Thread-215691] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:43:14.555 [DEBUG] [Thread-215691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:43:14.556 [DEBUG] [Thread-215691] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:43:14.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:43:14.557 [DEBUG] [Thread-215691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:43:14.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:43:14.559 [DEBUG] [Thread-215691] [transport.py] [_log()] userauth is OK
2026-02-16T02:43:14.559 [DEBUG] [Thread-215691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:43:14.559 [DEBUG] [Thread-215691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:43:14.559 [DEBUG] [Thread-215691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:43:14.559 [DEBUG] [Thread-215691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:43:14.584 [INFO] [Thread-215691] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:43:14.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:43:15.366 [DEBUG] [Thread-215691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:43:15.366 [DEBUG] [Thread-215691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:43:15.366 [DEBUG] [Thread-215691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:43:15.406 [DEBUG] [Thread-215691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:43:15.407 [DEBUG] [Thread-215691] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:43:15.410 [DEBUG] [Thread-215691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:43:15.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:43:15.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:43:15.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:43:15.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:43:15.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:43:15.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:43:15.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:43:15.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:43:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:43:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.029266 -999.00  +13.30  17.22     60   +5.70 1 1 1 1 1     0    0 6.66 -32.75 ZNESW 16.3 17.2 131.6 20.2 13.7 -22.1 13.6 -21.2 13.3 -20.0 13.7 -21.2
2026-02-16T02:43:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:43:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:43:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.029266
2026-02-16T02:43:15.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:43:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:43:15.439 [DEBUG] [Thread-215691] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:43:15.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:43:15.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:43:15.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:43:15.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:42:32', tmtdew=8.33, humidity=57.1, cloud=0.0, wind=16.34, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:43:07', seeing=2.8, atlas_timestamp='2026-02-16T00:42:08.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.015249999999999986, -0.02874999999999872, -0.11650000000000027, -0.014499999999999957, 0.0002500000000011937, 0.03500000000000014, -0.01974999999999838, 0.010499999999998622, -0.019999999999999574, -0.05975000000000108, -0.04399999999999871, 0.012000000000000455, 0.019249999999999545, 0.016500000000000625, 0.02499999999999858, 0.0417500000000004, -0.021000000000000796, 0.026500000000000412, -0.016250000000001208, -0.0070000000000014495, 0.04774999999999885, 0.004250000000000753, 0.034250000000000114, 0.041999999999999815, -0.031000000000000583, 0.03275000000000006, 0.03850000000000087, 0.057000000000000384, 0.06600000000000072, 0.07500000000000107, 0.011000000000001009, -0.013250000000001094], zp_timestamp='2026-02-16T00:41:00')
2026-02-16T02:43:15.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:43:15.538 [DEBUG] [Thread-215694] [transport.py] [_log()] starting thread (client mode): 0xa57e09a0
2026-02-16T02:43:15.538 [DEBUG] [Thread-215694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:43:15.553 [DEBUG] [Thread-215694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:43:15.553 [INFO] [Thread-215694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:43:15.560 [DEBUG] [Thread-215694] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:43:15.560 [DEBUG] [Thread-215694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] client lang: <none>
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] server lang: <none>
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] kex follows: False
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:43:15.561 [DEBUG] [Thread-215694] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:43:15.562 [DEBUG] [Thread-215694] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:43:15.562 [DEBUG] [Thread-215694] [transport.py] [_log()] Compression: none
2026-02-16T02:43:15.562 [DEBUG] [Thread-215694] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:43:15.618 [DEBUG] [Thread-215694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:43:15.619 [DEBUG] [Thread-215694] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:43:15.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:43:15.620 [DEBUG] [Thread-215694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:43:15.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:43:15.678 [DEBUG] [Thread-215694] [transport.py] [_log()] userauth is OK
2026-02-16T02:43:15.678 [DEBUG] [Thread-215694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:43:15.679 [DEBUG] [Thread-215694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:43:15.679 [DEBUG] [Thread-215694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:43:15.679 [DEBUG] [Thread-215694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:43:15.700 [INFO] [Thread-215694] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:43:15.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:43:15.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:43:16.520 [DEBUG] [Thread-215694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:43:16.521 [DEBUG] [Thread-215694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:43:16.569 [DEBUG] [Thread-215694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:43:16.569 [DEBUG] [Thread-215694] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:43:16.578 [DEBUG] [Thread-215694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:43:16.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:43:16.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:43:16.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:43:16.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:43:16.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:43:16.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:43:16.615 [DEBUG] [Thread-215694] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:43:26.171 [DEBUG] [Thread-215696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:30.015 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:41.223 [DEBUG] [Thread-215697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:43.889 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:43.890 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:46.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:43:46.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:43:46.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:43:47.482 [DEBUG] [Thread-215698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:48.665 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:43:48.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 43, 7), 8.39, 56.89, 0.0, 17.43, 13.15, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:43:48.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:43:07
2026-02-16T02:43:49.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:43:49.237 [DEBUG] [Thread-215699] [transport.py] [_log()] starting thread (client mode): 0xa57e28c0
2026-02-16T02:43:49.237 [DEBUG] [Thread-215699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:43:49.257 [DEBUG] [Thread-215699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:43:49.257 [INFO] [Thread-215699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] client lang: <none>
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] server lang: <none>
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] kex follows: False
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:43:49.260 [DEBUG] [Thread-215699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:43:49.261 [DEBUG] [Thread-215699] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:43:49.261 [DEBUG] [Thread-215699] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:43:49.261 [DEBUG] [Thread-215699] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:43:49.261 [DEBUG] [Thread-215699] [transport.py] [_log()] Compression: none
2026-02-16T02:43:49.261 [DEBUG] [Thread-215699] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:43:49.280 [DEBUG] [Thread-215699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:43:49.280 [DEBUG] [Thread-215699] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:43:49.280 [DEBUG] [Thread-215699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:43:49.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:43:49.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:43:49.281 [DEBUG] [Thread-215699] [transport.py] [_log()] userauth is OK
2026-02-16T02:43:49.281 [DEBUG] [Thread-215699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:43:49.281 [DEBUG] [Thread-215699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:43:49.281 [DEBUG] [Thread-215699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:43:49.281 [DEBUG] [Thread-215699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:43:49.291 [INFO] [Thread-215699] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:43:49.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:43:49.903 [DEBUG] [Thread-215699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:43:49.903 [DEBUG] [Thread-215699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:43:49.904 [DEBUG] [Thread-215699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:43:49.944 [DEBUG] [Thread-215699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:43:49.945 [DEBUG] [Thread-215699] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:43:49.948 [DEBUG] [Thread-215699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:43:49.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:43:49.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:43:49.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:43:49.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:43:49.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:43:49.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:43:49.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:43:49.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:43:49.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:43:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.029960 -999.00  +13.30  17.54     60   +5.90 1 1 1 1 1     0    0 6.69 -32.66 ZNESW 15.0 17.5 132.0 18.7 13.7 -22.2 13.6 -21.4 13.3 -20.1 13.6 -21.4
2026-02-16T02:43:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:43:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:43:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.029960
2026-02-16T02:43:49.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:43:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:43:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:43:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:43:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:43:49.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:43:07', tmtdew=8.39, humidity=56.89, cloud=0.0, wind=17.43, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:43:43', seeing=2.54, atlas_timestamp='2026-02-16T00:43:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.015249999999999986, -0.02874999999999872, -0.11650000000000027, -0.014499999999999957, 0.0002500000000011937, 0.03500000000000014, -0.01974999999999838, 0.010499999999998622, -0.019999999999999574, -0.05975000000000108, -0.04399999999999871, 0.012000000000000455, 0.019249999999999545, 0.016500000000000625, 0.02499999999999858, 0.0417500000000004, -0.021000000000000796, 0.026500000000000412, -0.016250000000001208, -0.0070000000000014495, 0.04774999999999885, 0.004250000000000753, 0.034250000000000114, 0.041999999999999815, -0.031000000000000583, 0.03275000000000006, 0.03850000000000087, 0.057000000000000384, 0.06600000000000072, 0.07500000000000107, 0.011000000000001009, -0.013250000000001094], zp_timestamp='2026-02-16T00:41:00')
2026-02-16T02:43:49.978 [DEBUG] [Thread-215699] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:43:50.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:43:50.074 [DEBUG] [Thread-215702] [transport.py] [_log()] starting thread (client mode): 0xa2d24e80
2026-02-16T02:43:50.074 [DEBUG] [Thread-215702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:43:50.088 [DEBUG] [Thread-215702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:43:50.089 [INFO] [Thread-215702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:50.096 [DEBUG] [Thread-215702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] client lang: <none>
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] server lang: <none>
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] kex follows: False
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] Compression: none
2026-02-16T02:43:50.097 [DEBUG] [Thread-215702] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:43:50.153 [DEBUG] [Thread-215702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:43:50.154 [DEBUG] [Thread-215702] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:43:50.154 [DEBUG] [Thread-215702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:43:50.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:43:50.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:43:50.209 [DEBUG] [Thread-215702] [transport.py] [_log()] userauth is OK
2026-02-16T02:43:50.209 [DEBUG] [Thread-215702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:43:50.209 [DEBUG] [Thread-215702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:43:50.209 [DEBUG] [Thread-215702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:43:50.209 [DEBUG] [Thread-215702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:43:50.227 [INFO] [Thread-215702] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:43:50.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:43:50.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:43:51.068 [DEBUG] [Thread-215702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:43:51.068 [DEBUG] [Thread-215702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:43:51.116 [DEBUG] [Thread-215702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:43:51.116 [DEBUG] [Thread-215702] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:43:51.126 [DEBUG] [Thread-215702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:43:51.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:43:51.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:43:51.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:43:51.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:43:51.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:43:51.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:43:51.162 [DEBUG] [Thread-215702] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:43:56.257 [DEBUG] [Thread-215704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:07.397 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:11.299 [DEBUG] [Thread-215705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:21.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:44:21.185 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:44:21.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:44:23.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 43, 42), 8.41, 56.64, 0.0, 17.64, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:44:23.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:43:42
2026-02-16T02:44:24.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:44:24.348 [DEBUG] [Thread-215706] [transport.py] [_log()] starting thread (client mode): 0xa2d03850
2026-02-16T02:44:24.348 [DEBUG] [Thread-215706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:44:24.369 [DEBUG] [Thread-215706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:44:24.369 [INFO] [Thread-215706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] client lang: <none>
2026-02-16T02:44:24.373 [DEBUG] [Thread-215706] [transport.py] [_log()] server lang: <none>
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] kex follows: False
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] Compression: none
2026-02-16T02:44:24.374 [DEBUG] [Thread-215706] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:44:24.391 [DEBUG] [Thread-215706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:44:24.392 [DEBUG] [Thread-215706] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:44:24.392 [DEBUG] [Thread-215706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:44:24.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:44:24.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:44:24.394 [DEBUG] [Thread-215706] [transport.py] [_log()] userauth is OK
2026-02-16T02:44:24.394 [DEBUG] [Thread-215706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:44:24.395 [DEBUG] [Thread-215706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:44:24.395 [DEBUG] [Thread-215706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:44:24.395 [DEBUG] [Thread-215706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:44:24.418 [INFO] [Thread-215706] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:44:24.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:44:25.032 [DEBUG] [Thread-215706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:44:25.032 [DEBUG] [Thread-215706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:44:25.033 [DEBUG] [Thread-215706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:44:25.073 [DEBUG] [Thread-215706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:44:25.073 [DEBUG] [Thread-215706] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:44:25.076 [DEBUG] [Thread-215706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:44:25.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:44:25.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:44:25.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:44:25.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:44:25.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:44:25.099 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:44:25.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:44:25.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:44:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:44:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.030307 -999.00  +13.40  13.90     60   +5.80 1 1 1 1 1     0    0 6.78 -31.38 ZNESW 12.8 13.9 144.0 19.2 13.7 -22.3 13.6 -21.1 13.3 -20.0 13.6 -21.1
2026-02-16T02:44:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:44:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:44:25.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.030307
2026-02-16T02:44:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:44:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:44:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:44:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:44:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:44:25.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:43:42', tmtdew=8.41, humidity=56.64, cloud=0.0, wind=17.64, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:44:18', seeing=2.61, atlas_timestamp='2026-02-16T00:43:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.015249999999999986, -0.02874999999999872, -0.11650000000000027, -0.014499999999999957, 0.0002500000000011937, 0.03500000000000014, -0.01974999999999838, 0.010499999999998622, -0.019999999999999574, -0.05975000000000108, -0.04399999999999871, 0.012000000000000455, 0.019249999999999545, 0.016500000000000625, 0.02499999999999858, 0.0417500000000004, -0.021000000000000796, 0.026500000000000412, -0.016250000000001208, -0.0070000000000014495, 0.04774999999999885, 0.004250000000000753, 0.034250000000000114, 0.041999999999999815, -0.031000000000000583, 0.03275000000000006, 0.03850000000000087, 0.057000000000000384, 0.06600000000000072, 0.07500000000000107, 0.011000000000001009, -0.013250000000001094], zp_timestamp='2026-02-16T00:41:00')
2026-02-16T02:44:25.102 [DEBUG] [Thread-215706] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:44:25.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:44:25.207 [DEBUG] [Thread-215709] [transport.py] [_log()] starting thread (client mode): 0xa81d6080
2026-02-16T02:44:25.207 [DEBUG] [Thread-215709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:44:25.222 [DEBUG] [Thread-215709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:44:25.222 [INFO] [Thread-215709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:44:25.229 [DEBUG] [Thread-215709] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] client lang: <none>
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] server lang: <none>
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] kex follows: False
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] Compression: none
2026-02-16T02:44:25.230 [DEBUG] [Thread-215709] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:44:25.295 [DEBUG] [Thread-215709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:44:25.295 [DEBUG] [Thread-215709] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:44:25.296 [DEBUG] [Thread-215709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:44:25.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:44:25.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:44:25.352 [DEBUG] [Thread-215709] [transport.py] [_log()] userauth is OK
2026-02-16T02:44:25.353 [DEBUG] [Thread-215709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:44:25.353 [DEBUG] [Thread-215709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:44:25.353 [DEBUG] [Thread-215709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:44:25.353 [DEBUG] [Thread-215709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:44:25.373 [INFO] [Thread-215709] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:44:25.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:44:25.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:44:26.215 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:26.223 [DEBUG] [Thread-215709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:44:26.223 [DEBUG] [Thread-215709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:44:26.271 [DEBUG] [Thread-215709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:44:26.271 [DEBUG] [Thread-215709] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:44:26.280 [DEBUG] [Thread-215709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:44:26.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:44:26.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:44:26.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:44:26.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:44:26.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:44:26.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:44:26.314 [DEBUG] [Thread-215709] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:44:26.335 [DEBUG] [Thread-215711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:41.393 [DEBUG] [Thread-215712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:44.089 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:44.090 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:44.872 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:47.550 [DEBUG] [Thread-215713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:56.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:44:56.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:44:56.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:44:56.428 [DEBUG] [Thread-215714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:44:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 44, 17), 8.45, 56.34, 0.0, 17.95, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:44:58.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:44:17
2026-02-16T02:44:59.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:44:59.484 [DEBUG] [Thread-215715] [transport.py] [_log()] starting thread (client mode): 0xa57b3d30
2026-02-16T02:44:59.484 [DEBUG] [Thread-215715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:44:59.504 [DEBUG] [Thread-215715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:44:59.504 [INFO] [Thread-215715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:44:59.507 [DEBUG] [Thread-215715] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:44:59.507 [DEBUG] [Thread-215715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:44:59.507 [DEBUG] [Thread-215715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:44:59.507 [DEBUG] [Thread-215715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:44:59.507 [DEBUG] [Thread-215715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:44:59.507 [DEBUG] [Thread-215715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] client lang: <none>
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] server lang: <none>
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] kex follows: False
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:44:59.508 [DEBUG] [Thread-215715] [transport.py] [_log()] Compression: none
2026-02-16T02:44:59.509 [DEBUG] [Thread-215715] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:44:59.526 [DEBUG] [Thread-215715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:44:59.527 [DEBUG] [Thread-215715] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:44:59.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:44:59.528 [DEBUG] [Thread-215715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:44:59.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:44:59.530 [DEBUG] [Thread-215715] [transport.py] [_log()] userauth is OK
2026-02-16T02:44:59.530 [DEBUG] [Thread-215715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:44:59.530 [DEBUG] [Thread-215715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:44:59.530 [DEBUG] [Thread-215715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:44:59.531 [DEBUG] [Thread-215715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:44:59.555 [INFO] [Thread-215715] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:44:59.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:45:00.196 [DEBUG] [Thread-215715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:45:00.196 [DEBUG] [Thread-215715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:45:00.197 [DEBUG] [Thread-215715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:45:00.237 [DEBUG] [Thread-215715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:45:00.238 [DEBUG] [Thread-215715] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:45:00.241 [DEBUG] [Thread-215715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:45:00.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:45:00.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:45:00.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:45:00.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:45:00.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:45:00.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:45:00.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:45:00.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:45:00.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:45:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.030654 -999.00  +13.40  15.81     59   +5.70 1 1 1 1 1     0    0 6.89 -28.23 ZNESW 13.4 15.8 130.6 19.8 13.7 -22.2 13.6 -21.3 13.4 -20.1 13.6 -21.2
2026-02-16T02:45:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:45:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:45:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.030654
2026-02-16T02:45:00.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:45:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:45:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:45:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:45:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:45:00.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:44:17', tmtdew=8.45, humidity=56.34, cloud=0.0, wind=17.95, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:44:54', seeing=2.72, atlas_timestamp='2026-02-16T00:44:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.015249999999999986, -0.02874999999999872, -0.11650000000000027, -0.014499999999999957, 0.0002500000000011937, 0.03500000000000014, -0.01974999999999838, 0.010499999999998622, -0.019999999999999574, -0.05975000000000108, -0.04399999999999871, 0.012000000000000455, 0.019249999999999545, 0.016500000000000625, 0.02499999999999858, 0.0417500000000004, -0.021000000000000796, 0.026500000000000412, -0.016250000000001208, -0.0070000000000014495, 0.04774999999999885, 0.004250000000000753, 0.034250000000000114, 0.041999999999999815, -0.031000000000000583, 0.03275000000000006, 0.03850000000000087, 0.057000000000000384, 0.06600000000000072, 0.07500000000000107, 0.011000000000001009, -0.013250000000001094], zp_timestamp='2026-02-16T00:41:00')
2026-02-16T02:45:00.267 [DEBUG] [Thread-215715] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:45:00.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:45:00.368 [DEBUG] [Thread-215718] [transport.py] [_log()] starting thread (client mode): 0xa2d270d0
2026-02-16T02:45:00.369 [DEBUG] [Thread-215718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:45:00.383 [DEBUG] [Thread-215718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:45:00.383 [INFO] [Thread-215718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:45:00.391 [DEBUG] [Thread-215718] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:45:00.391 [DEBUG] [Thread-215718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:45:00.391 [DEBUG] [Thread-215718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:45:00.391 [DEBUG] [Thread-215718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] client lang: <none>
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] server lang: <none>
2026-02-16T02:45:00.392 [DEBUG] [Thread-215718] [transport.py] [_log()] kex follows: False
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] Compression: none
2026-02-16T02:45:00.393 [DEBUG] [Thread-215718] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:45:00.448 [DEBUG] [Thread-215718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:45:00.449 [DEBUG] [Thread-215718] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:45:00.449 [DEBUG] [Thread-215718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:45:00.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:45:00.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:45:00.504 [DEBUG] [Thread-215718] [transport.py] [_log()] userauth is OK
2026-02-16T02:45:00.505 [DEBUG] [Thread-215718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:45:00.505 [DEBUG] [Thread-215718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:45:00.505 [DEBUG] [Thread-215718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:45:00.505 [DEBUG] [Thread-215718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:45:00.524 [INFO] [Thread-215718] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:45:00.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:45:00.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:45:01.365 [DEBUG] [Thread-215718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:45:01.365 [DEBUG] [Thread-215718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:45:01.415 [DEBUG] [Thread-215718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:45:01.415 [DEBUG] [Thread-215718] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:45:01.423 [DEBUG] [Thread-215718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:45:01.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:45:01.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:45:01.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:45:01.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:45:01.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:45:01.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:45:01.456 [DEBUG] [Thread-215718] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:45:03.537 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:11.462 [DEBUG] [Thread-215720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:22.322 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:26.514 [DEBUG] [Thread-215721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:31.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:45:31.477 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:45:31.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:45:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 44, 54), 8.59, 56.0, 0.0, 15.16, 13.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:45:33.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:44:54
2026-02-16T02:45:33.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:45:33.850 [DEBUG] [Thread-215722] [transport.py] [_log()] starting thread (client mode): 0xa57e2560
2026-02-16T02:45:33.850 [DEBUG] [Thread-215722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:45:33.869 [DEBUG] [Thread-215722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:45:33.869 [INFO] [Thread-215722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] client lang: <none>
2026-02-16T02:45:33.871 [DEBUG] [Thread-215722] [transport.py] [_log()] server lang: <none>
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] kex follows: False
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] Compression: none
2026-02-16T02:45:33.872 [DEBUG] [Thread-215722] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:45:33.891 [DEBUG] [Thread-215722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:45:33.891 [DEBUG] [Thread-215722] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:45:33.892 [DEBUG] [Thread-215722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:45:33.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:45:33.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:45:33.894 [DEBUG] [Thread-215722] [transport.py] [_log()] userauth is OK
2026-02-16T02:45:33.894 [DEBUG] [Thread-215722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:45:33.894 [DEBUG] [Thread-215722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:45:33.894 [DEBUG] [Thread-215722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:45:33.894 [DEBUG] [Thread-215722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:45:33.918 [INFO] [Thread-215722] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:45:33.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:45:34.544 [DEBUG] [Thread-215722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:45:34.544 [DEBUG] [Thread-215722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:45:34.544 [DEBUG] [Thread-215722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:45:34.585 [DEBUG] [Thread-215722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:45:34.585 [DEBUG] [Thread-215722] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:45:34.588 [DEBUG] [Thread-215722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:45:34.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:45:34.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:45:34.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:45:34.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:45:34.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:45:34.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:45:34.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:45:34.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:45:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:45:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.031002 -999.00  +13.40  14.31     60   +5.80 1 1 1 1 1     0    0 6.78 -28.27 ZNESW 14.9 14.3 129.0 17.9 13.7 -22.2 13.7 -21.1 13.3 -20.0 13.6 -21.2
2026-02-16T02:45:34.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:45:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:45:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.031002
2026-02-16T02:45:34.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:45:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:45:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:45:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:45:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:45:34.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:44:54', tmtdew=8.59, humidity=56.0, cloud=0.0, wind=15.16, temperature=13.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:45:30', seeing=2.16, atlas_timestamp='2026-02-16T00:44:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.004250000000000753, 0.015249999999999986, -0.02874999999999872, -0.11650000000000027, -0.014499999999999957, 0.0002500000000011937, 0.03500000000000014, -0.01974999999999838, 0.010499999999998622, -0.019999999999999574, -0.05975000000000108, -0.04399999999999871, 0.012000000000000455, 0.019249999999999545, 0.016500000000000625, 0.02499999999999858, 0.0417500000000004, -0.021000000000000796, 0.026500000000000412, -0.016250000000001208, -0.0070000000000014495, 0.04774999999999885, 0.004250000000000753, 0.034250000000000114, 0.041999999999999815, -0.031000000000000583, 0.03275000000000006, 0.03850000000000087, 0.057000000000000384, 0.06600000000000072, 0.07500000000000107, 0.011000000000001009, -0.013250000000001094], zp_timestamp='2026-02-16T00:41:00')
2026-02-16T02:45:34.613 [DEBUG] [Thread-215722] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:45:34.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:45:34.709 [DEBUG] [Thread-215725] [transport.py] [_log()] starting thread (client mode): 0xa57e0760
2026-02-16T02:45:34.709 [DEBUG] [Thread-215725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:45:34.724 [DEBUG] [Thread-215725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:45:34.724 [INFO] [Thread-215725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:45:34.731 [DEBUG] [Thread-215725] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:45:34.732 [DEBUG] [Thread-215725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:45:34.732 [DEBUG] [Thread-215725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:45:34.732 [DEBUG] [Thread-215725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:45:34.732 [DEBUG] [Thread-215725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:45:34.732 [DEBUG] [Thread-215725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:45:34.732 [DEBUG] [Thread-215725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] client lang: <none>
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] server lang: <none>
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] kex follows: False
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] Compression: none
2026-02-16T02:45:34.733 [DEBUG] [Thread-215725] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:45:34.791 [DEBUG] [Thread-215725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:45:34.791 [DEBUG] [Thread-215725] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:45:34.792 [DEBUG] [Thread-215725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:45:34.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:45:34.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:45:34.847 [DEBUG] [Thread-215725] [transport.py] [_log()] userauth is OK
2026-02-16T02:45:34.847 [DEBUG] [Thread-215725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:45:34.847 [DEBUG] [Thread-215725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:45:34.847 [DEBUG] [Thread-215725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:45:34.847 [DEBUG] [Thread-215725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:45:34.866 [INFO] [Thread-215725] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:45:34.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:45:34.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:45:35.722 [DEBUG] [Thread-215725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:45:35.722 [DEBUG] [Thread-215725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:45:35.770 [DEBUG] [Thread-215725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:45:35.770 [DEBUG] [Thread-215725] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:45:35.778 [DEBUG] [Thread-215725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:45:35.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:45:35.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:45:35.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:45:35.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:45:35.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:45:35.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:45:35.809 [DEBUG] [Thread-215725] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:45:41.178 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:41.547 [DEBUG] [Thread-215727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:44.292 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:44.294 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:47.632 [DEBUG] [Thread-215728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:45:56.600 [DEBUG] [Thread-215729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:00.088 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:46:05.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:46:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:46:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 45, 30), 8.63, 55.85, 0.0, 15.39, 13.28, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:46:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:45:30
2026-02-16T02:46:08.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:46:08.640 [DEBUG] [Thread-215730] [transport.py] [_log()] starting thread (client mode): 0xa81d7970
2026-02-16T02:46:08.641 [DEBUG] [Thread-215730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:46:08.661 [DEBUG] [Thread-215730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:46:08.661 [INFO] [Thread-215730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] client lang: <none>
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] server lang: <none>
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] kex follows: False
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] Compression: none
2026-02-16T02:46:08.665 [DEBUG] [Thread-215730] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:46:08.682 [DEBUG] [Thread-215730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:46:08.683 [DEBUG] [Thread-215730] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:46:08.683 [DEBUG] [Thread-215730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:46:08.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:46:08.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:46:08.685 [DEBUG] [Thread-215730] [transport.py] [_log()] userauth is OK
2026-02-16T02:46:08.685 [DEBUG] [Thread-215730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:46:08.686 [DEBUG] [Thread-215730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:46:08.686 [DEBUG] [Thread-215730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:46:08.686 [DEBUG] [Thread-215730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:46:08.710 [INFO] [Thread-215730] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:46:08.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:46:09.453 [DEBUG] [Thread-215730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:46:09.453 [DEBUG] [Thread-215730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:46:09.454 [DEBUG] [Thread-215730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:46:09.494 [DEBUG] [Thread-215730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:46:09.494 [DEBUG] [Thread-215730] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:46:09.497 [DEBUG] [Thread-215730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:46:09.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:46:09.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:46:09.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:46:09.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:46:09.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:46:09.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:46:09.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:46:09.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:46:09.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:46:09.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.031696 -999.00  +13.50  16.55     59   +5.80 1 1 1 1 1     0    0 6.83 -26.86 ZNESW 17.3 16.6 141.4 20.9 13.7 -22.3 13.6 -21.3 13.4 -20.1 13.7 -20.8
2026-02-16T02:46:09.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:46:09.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:46:09.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.031696
2026-02-16T02:46:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:46:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:46:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:46:09.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:46:09.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:46:09.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:45:30', tmtdew=8.63, humidity=55.85, cloud=0.0, wind=15.39, temperature=13.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:46:05', seeing=2.56, atlas_timestamp='2026-02-16T00:45:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:44:00')
2026-02-16T02:46:09.522 [DEBUG] [Thread-215730] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:46:09.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:46:09.617 [DEBUG] [Thread-215733] [transport.py] [_log()] starting thread (client mode): 0xa2d6d7b0
2026-02-16T02:46:09.617 [DEBUG] [Thread-215733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:46:09.632 [DEBUG] [Thread-215733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:46:09.632 [INFO] [Thread-215733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:09.640 [DEBUG] [Thread-215733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] client lang: <none>
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] server lang: <none>
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] kex follows: False
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] Compression: none
2026-02-16T02:46:09.641 [DEBUG] [Thread-215733] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:46:09.699 [DEBUG] [Thread-215733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:46:09.700 [DEBUG] [Thread-215733] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:46:09.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:46:09.701 [DEBUG] [Thread-215733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:46:09.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:46:09.754 [DEBUG] [Thread-215733] [transport.py] [_log()] userauth is OK
2026-02-16T02:46:09.755 [DEBUG] [Thread-215733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:46:09.755 [DEBUG] [Thread-215733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:46:09.755 [DEBUG] [Thread-215733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:46:09.755 [DEBUG] [Thread-215733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:46:09.778 [INFO] [Thread-215733] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:46:09.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:46:09.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:46:10.633 [DEBUG] [Thread-215733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:46:10.633 [DEBUG] [Thread-215733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:46:10.681 [DEBUG] [Thread-215733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:46:10.682 [DEBUG] [Thread-215733] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:46:10.691 [DEBUG] [Thread-215733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:46:10.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:46:10.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:46:10.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:46:10.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:46:10.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:46:10.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:46:10.725 [DEBUG] [Thread-215733] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:46:11.635 [DEBUG] [Thread-215735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:19.014 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:26.690 [DEBUG] [Thread-215736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:37.673 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:40.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:46:40.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:46:40.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:46:41.726 [DEBUG] [Thread-215737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:42.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 46, 5), 8.69, 55.62, 0.0, 15.4, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:46:42.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:46:05
2026-02-16T02:46:43.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:46:43.565 [DEBUG] [Thread-215738] [transport.py] [_log()] starting thread (client mode): 0xa2d02ec0
2026-02-16T02:46:43.565 [DEBUG] [Thread-215738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:46:43.585 [DEBUG] [Thread-215738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:46:43.585 [INFO] [Thread-215738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:43.589 [DEBUG] [Thread-215738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] client lang: <none>
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] server lang: <none>
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] kex follows: False
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] Compression: none
2026-02-16T02:46:43.590 [DEBUG] [Thread-215738] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:46:43.611 [DEBUG] [Thread-215738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:46:43.611 [DEBUG] [Thread-215738] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:46:43.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:46:43.612 [DEBUG] [Thread-215738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:46:43.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:46:43.614 [DEBUG] [Thread-215738] [transport.py] [_log()] userauth is OK
2026-02-16T02:46:43.614 [DEBUG] [Thread-215738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:46:43.615 [DEBUG] [Thread-215738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:46:43.615 [DEBUG] [Thread-215738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:46:43.615 [DEBUG] [Thread-215738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:46:43.651 [INFO] [Thread-215738] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:46:43.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:46:44.303 [DEBUG] [Thread-215738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:46:44.303 [DEBUG] [Thread-215738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:46:44.303 [DEBUG] [Thread-215738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:46:44.344 [DEBUG] [Thread-215738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:46:44.345 [DEBUG] [Thread-215738] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:46:44.348 [DEBUG] [Thread-215738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:46:44.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:46:44.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:46:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:46:44.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:46:44.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:46:44.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:46:44.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:46:44.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:46:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:46:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.032043 -999.00  +13.40  13.72     59   +5.70 1 1 1 1 1     0    0 6.90 -25.83 ZNESW 13.1 13.7 134.2 19.1 13.7 -22.3 13.6 -21.2 13.4 -20.2 13.7 -21.5
2026-02-16T02:46:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:46:44.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:46:44.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.032043
2026-02-16T02:46:44.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:46:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:46:44.369 [DEBUG] [Thread-215738] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:46:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:46:44.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:46:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:46:44.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:46:05', tmtdew=8.69, humidity=55.62, cloud=0.0, wind=15.4, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:46:05', seeing=2.56, atlas_timestamp='2026-02-16T00:46:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:44:00')
2026-02-16T02:46:44.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:46:44.473 [DEBUG] [Thread-215741] [transport.py] [_log()] starting thread (client mode): 0xa57e1b10
2026-02-16T02:46:44.473 [DEBUG] [Thread-215741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:46:44.487 [DEBUG] [Thread-215741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:46:44.487 [INFO] [Thread-215741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:46:44.494 [DEBUG] [Thread-215741] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] client lang: <none>
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] server lang: <none>
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] kex follows: False
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] Compression: none
2026-02-16T02:46:44.495 [DEBUG] [Thread-215741] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:46:44.499 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:44.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:44.555 [DEBUG] [Thread-215741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:46:44.555 [DEBUG] [Thread-215741] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:46:44.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:46:44.556 [DEBUG] [Thread-215741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:46:44.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:46:44.611 [DEBUG] [Thread-215741] [transport.py] [_log()] userauth is OK
2026-02-16T02:46:44.611 [DEBUG] [Thread-215741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:46:44.611 [DEBUG] [Thread-215741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:46:44.612 [DEBUG] [Thread-215741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:46:44.612 [DEBUG] [Thread-215741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:46:44.630 [INFO] [Thread-215741] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:46:44.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:46:44.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:46:45.445 [DEBUG] [Thread-215741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:46:45.446 [DEBUG] [Thread-215741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:46:45.494 [DEBUG] [Thread-215741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:46:45.495 [DEBUG] [Thread-215741] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:46:45.504 [DEBUG] [Thread-215741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:46:45.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:46:45.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:46:45.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:46:45.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:46:45.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:46:45.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:46:45.540 [DEBUG] [Thread-215741] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:46:47.703 [DEBUG] [Thread-215743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:56.360 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:46:56.767 [DEBUG] [Thread-215744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:11.820 [DEBUG] [Thread-215745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:15.146 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:15.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:47:15.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:47:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:47:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 46, 40), 8.7, 55.61, 0.0, 17.4, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:47:17.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:46:40
2026-02-16T02:47:18.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:47:18.217 [DEBUG] [Thread-215746] [transport.py] [_log()] starting thread (client mode): 0xa81d50c0
2026-02-16T02:47:18.218 [DEBUG] [Thread-215746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:47:18.237 [DEBUG] [Thread-215746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:47:18.237 [INFO] [Thread-215746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:47:18.240 [DEBUG] [Thread-215746] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] client lang: <none>
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] server lang: <none>
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] kex follows: False
2026-02-16T02:47:18.241 [DEBUG] [Thread-215746] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:47:18.242 [DEBUG] [Thread-215746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:47:18.242 [DEBUG] [Thread-215746] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:47:18.242 [DEBUG] [Thread-215746] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:47:18.242 [DEBUG] [Thread-215746] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:47:18.242 [DEBUG] [Thread-215746] [transport.py] [_log()] Compression: none
2026-02-16T02:47:18.242 [DEBUG] [Thread-215746] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:47:18.258 [DEBUG] [Thread-215746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:47:18.259 [DEBUG] [Thread-215746] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:47:18.259 [DEBUG] [Thread-215746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:47:18.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:47:18.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:47:18.261 [DEBUG] [Thread-215746] [transport.py] [_log()] userauth is OK
2026-02-16T02:47:18.261 [DEBUG] [Thread-215746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:47:18.262 [DEBUG] [Thread-215746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:47:18.262 [DEBUG] [Thread-215746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:47:18.262 [DEBUG] [Thread-215746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:47:18.281 [INFO] [Thread-215746] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:47:18.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:47:18.855 [DEBUG] [Thread-215746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:47:18.855 [DEBUG] [Thread-215746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:47:18.855 [DEBUG] [Thread-215746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:47:18.896 [DEBUG] [Thread-215746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:47:18.896 [DEBUG] [Thread-215746] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:47:18.899 [DEBUG] [Thread-215746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:47:18.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:47:18.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:47:18.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:47:18.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:47:18.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:47:18.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:47:18.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:47:18.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:47:18.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:47:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.032391 -999.00  +13.50  15.71     59   +5.70 1 1 1 1 1     0    0 7.03 -22.18 ZNESW 15.4 15.7 138.0 20.4 13.8 -22.3 13.7 -21.3 13.4 -20.0 13.6 -21.4
2026-02-16T02:47:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:47:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:47:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.032391
2026-02-16T02:47:18.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:47:18.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:47:18.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:47:18.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:47:18.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:47:18.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:46:40', tmtdew=8.7, humidity=55.61, cloud=0.0, wind=17.4, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:46:41', seeing=2.32, atlas_timestamp='2026-02-16T00:46:38.582', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:44:00')
2026-02-16T02:47:18.923 [DEBUG] [Thread-215746] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:47:19.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:47:19.018 [DEBUG] [Thread-215749] [transport.py] [_log()] starting thread (client mode): 0xa57e1e40
2026-02-16T02:47:19.018 [DEBUG] [Thread-215749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:47:19.032 [DEBUG] [Thread-215749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:47:19.032 [INFO] [Thread-215749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:47:19.040 [DEBUG] [Thread-215749] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:47:19.040 [DEBUG] [Thread-215749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] client lang: <none>
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] server lang: <none>
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] kex follows: False
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] Compression: none
2026-02-16T02:47:19.041 [DEBUG] [Thread-215749] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:47:19.098 [DEBUG] [Thread-215749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:47:19.098 [DEBUG] [Thread-215749] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:47:19.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:47:19.099 [DEBUG] [Thread-215749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:47:19.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:47:19.154 [DEBUG] [Thread-215749] [transport.py] [_log()] userauth is OK
2026-02-16T02:47:19.154 [DEBUG] [Thread-215749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:47:19.154 [DEBUG] [Thread-215749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:47:19.154 [DEBUG] [Thread-215749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:47:19.155 [DEBUG] [Thread-215749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:47:19.179 [INFO] [Thread-215749] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:47:19.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:47:19.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:47:19.999 [DEBUG] [Thread-215749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:47:19.999 [DEBUG] [Thread-215749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:47:20.047 [DEBUG] [Thread-215749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:47:20.047 [DEBUG] [Thread-215749] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:47:20.055 [DEBUG] [Thread-215749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:47:20.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:47:20.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:47:20.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:47:20.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:47:20.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:47:20.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:47:20.091 [DEBUG] [Thread-215749] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:47:26.860 [DEBUG] [Thread-215751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:34.037 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:41.898 [DEBUG] [Thread-215752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:44.716 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:44.718 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:47.761 [DEBUG] [Thread-215753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:47:50.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:47:50.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:47:52.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 47, 16), 8.64, 56.02, 0.0, 18.16, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:47:52.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:47:16
2026-02-16T02:47:52.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:47:52.775 [DEBUG] [Thread-215754] [transport.py] [_log()] starting thread (client mode): 0xa2d11210
2026-02-16T02:47:52.775 [DEBUG] [Thread-215754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:47:52.794 [DEBUG] [Thread-215754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:47:52.794 [INFO] [Thread-215754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] client lang: <none>
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] server lang: <none>
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] kex follows: False
2026-02-16T02:47:52.798 [DEBUG] [Thread-215754] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:47:52.799 [DEBUG] [Thread-215754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:47:52.799 [DEBUG] [Thread-215754] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:47:52.799 [DEBUG] [Thread-215754] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:47:52.799 [DEBUG] [Thread-215754] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:47:52.799 [DEBUG] [Thread-215754] [transport.py] [_log()] Compression: none
2026-02-16T02:47:52.799 [DEBUG] [Thread-215754] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:47:52.817 [DEBUG] [Thread-215754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:47:52.817 [DEBUG] [Thread-215754] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:47:52.818 [DEBUG] [Thread-215754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:47:52.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:47:52.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:47:52.820 [DEBUG] [Thread-215754] [transport.py] [_log()] userauth is OK
2026-02-16T02:47:52.820 [DEBUG] [Thread-215754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:47:52.820 [DEBUG] [Thread-215754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:47:52.820 [DEBUG] [Thread-215754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:47:52.820 [DEBUG] [Thread-215754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:47:52.844 [INFO] [Thread-215754] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:47:52.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:47:53.076 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:47:53.465 [DEBUG] [Thread-215754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:47:53.465 [DEBUG] [Thread-215754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:47:53.465 [DEBUG] [Thread-215754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:47:53.506 [DEBUG] [Thread-215754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:47:53.506 [DEBUG] [Thread-215754] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:47:53.508 [DEBUG] [Thread-215754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:47:53.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:47:53.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:47:53.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:47:53.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:47:53.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:47:53.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:47:53.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.032738 -999.00  +13.50  15.88     59   +5.70 1 1 1 1 1     0    0 7.07 -20.33 ZNESW 17.1 15.9 127.4 18.7 13.7 -22.2 13.7 -21.1 13.4 -19.9 13.7 -21.3
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.032738
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:47:53.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:47:16', tmtdew=8.64, humidity=56.02, cloud=0.0, wind=18.16, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:47:16', seeing=2.03, atlas_timestamp='2026-02-16T00:47:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:44:00')
2026-02-16T02:47:53.530 [DEBUG] [Thread-215754] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:47:53.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:47:53.613 [DEBUG] [Thread-215757] [transport.py] [_log()] starting thread (client mode): 0xa81d7850
2026-02-16T02:47:53.613 [DEBUG] [Thread-215757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:47:53.627 [DEBUG] [Thread-215757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:47:53.628 [INFO] [Thread-215757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] client lang: <none>
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] server lang: <none>
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] kex follows: False
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] Compression: none
2026-02-16T02:47:53.635 [DEBUG] [Thread-215757] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:47:53.692 [DEBUG] [Thread-215757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:47:53.692 [DEBUG] [Thread-215757] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:47:53.693 [DEBUG] [Thread-215757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:47:53.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:47:53.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:47:53.750 [DEBUG] [Thread-215757] [transport.py] [_log()] userauth is OK
2026-02-16T02:47:53.750 [DEBUG] [Thread-215757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:47:53.750 [DEBUG] [Thread-215757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:47:53.750 [DEBUG] [Thread-215757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:47:53.750 [DEBUG] [Thread-215757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:47:53.774 [INFO] [Thread-215757] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:47:53.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:47:53.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:47:54.575 [DEBUG] [Thread-215757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:47:54.575 [DEBUG] [Thread-215757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:47:54.623 [DEBUG] [Thread-215757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:47:54.623 [DEBUG] [Thread-215757] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:47:54.631 [DEBUG] [Thread-215757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:47:54.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:47:54.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:47:54.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:47:54.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:47:54.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:47:54.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:47:54.668 [DEBUG] [Thread-215757] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:47:56.933 [DEBUG] [Thread-215759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:11.985 [DEBUG] [Thread-215760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:12.150 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:24.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:48:24.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:48:24.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:48:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 47, 51), 8.61, 55.82, 0.0, 18.79, 13.25, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:48:26.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:47:51
2026-02-16T02:48:27.021 [DEBUG] [Thread-215761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:27.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:48:27.350 [DEBUG] [Thread-215762] [transport.py] [_log()] starting thread (client mode): 0xa5772200
2026-02-16T02:48:27.350 [DEBUG] [Thread-215762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:48:27.369 [DEBUG] [Thread-215762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:48:27.369 [INFO] [Thread-215762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:48:27.372 [DEBUG] [Thread-215762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] client lang: <none>
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] server lang: <none>
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] kex follows: False
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] Compression: none
2026-02-16T02:48:27.373 [DEBUG] [Thread-215762] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:48:27.382 [DEBUG] [Thread-215762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:48:27.383 [DEBUG] [Thread-215762] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:48:27.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:48:27.384 [DEBUG] [Thread-215762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:48:27.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:48:27.386 [DEBUG] [Thread-215762] [transport.py] [_log()] userauth is OK
2026-02-16T02:48:27.386 [DEBUG] [Thread-215762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:48:27.386 [DEBUG] [Thread-215762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:48:27.386 [DEBUG] [Thread-215762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:48:27.386 [DEBUG] [Thread-215762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:48:27.405 [INFO] [Thread-215762] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:48:27.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:48:28.026 [DEBUG] [Thread-215762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:48:28.026 [DEBUG] [Thread-215762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:48:28.027 [DEBUG] [Thread-215762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:48:28.067 [DEBUG] [Thread-215762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:48:28.067 [DEBUG] [Thread-215762] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:48:28.070 [DEBUG] [Thread-215762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:48:28.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:48:28.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:48:28.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:48:28.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:48:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:48:28.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:48:28.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:48:28.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:48:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:48:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.033085 -999.00  +13.50  17.66     59   +5.80 1 1 1 1 1     0    0 7.11 -17.90 ZNESW 14.0 17.7 134.2 20.1 13.8 -22.3 13.7 -21.2 13.4 -20.0 13.7 -21.2
2026-02-16T02:48:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:48:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:48:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.033085
2026-02-16T02:48:28.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:48:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:48:28.093 [DEBUG] [Thread-215762] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:48:28.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:48:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:48:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:48:28.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:47:51', tmtdew=8.61, humidity=55.82, cloud=0.0, wind=18.79, temperature=13.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:47:52', seeing=2.36, atlas_timestamp='2026-02-16T00:47:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:44:00')
2026-02-16T02:48:28.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:48:28.190 [DEBUG] [Thread-215765] [transport.py] [_log()] starting thread (client mode): 0xa2d6e3e0
2026-02-16T02:48:28.190 [DEBUG] [Thread-215765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:48:28.206 [DEBUG] [Thread-215765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:48:28.207 [INFO] [Thread-215765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:48:28.214 [DEBUG] [Thread-215765] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] client lang: <none>
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] server lang: <none>
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] kex follows: False
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] Compression: none
2026-02-16T02:48:28.215 [DEBUG] [Thread-215765] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:48:28.273 [DEBUG] [Thread-215765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:48:28.274 [DEBUG] [Thread-215765] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:48:28.274 [DEBUG] [Thread-215765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:48:28.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:48:28.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:48:28.329 [DEBUG] [Thread-215765] [transport.py] [_log()] userauth is OK
2026-02-16T02:48:28.329 [DEBUG] [Thread-215765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:48:28.330 [DEBUG] [Thread-215765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:48:28.330 [DEBUG] [Thread-215765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:48:28.330 [DEBUG] [Thread-215765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:48:28.348 [INFO] [Thread-215765] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:48:28.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:48:28.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:48:29.310 [DEBUG] [Thread-215765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:48:29.310 [DEBUG] [Thread-215765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:48:29.358 [DEBUG] [Thread-215765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:48:29.358 [DEBUG] [Thread-215765] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:48:29.368 [DEBUG] [Thread-215765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:48:29.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:48:29.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:48:29.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:48:29.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:48:29.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:48:29.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:48:29.404 [DEBUG] [Thread-215765] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:48:31.180 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:42.061 [DEBUG] [Thread-215767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:44.918 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:44.919 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:47.819 [DEBUG] [Thread-215768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:49.948 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:57.110 [DEBUG] [Thread-215769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:48:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:48:59.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:48:59.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:49:01.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 48, 27), 8.56, 55.98, 0.0, 18.33, 13.25, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:49:01.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:48:27
2026-02-16T02:49:01.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:49:01.751 [DEBUG] [Thread-215770] [transport.py] [_log()] starting thread (client mode): 0xa57702e0
2026-02-16T02:49:01.751 [DEBUG] [Thread-215770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:49:01.769 [DEBUG] [Thread-215770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:49:01.769 [INFO] [Thread-215770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] client lang: <none>
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] server lang: <none>
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] kex follows: False
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] Compression: none
2026-02-16T02:49:01.771 [DEBUG] [Thread-215770] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:49:01.778 [DEBUG] [Thread-215770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:49:01.778 [DEBUG] [Thread-215770] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:49:01.778 [DEBUG] [Thread-215770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:49:01.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:49:01.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:49:01.779 [DEBUG] [Thread-215770] [transport.py] [_log()] userauth is OK
2026-02-16T02:49:01.779 [DEBUG] [Thread-215770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:49:01.779 [DEBUG] [Thread-215770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:49:01.779 [DEBUG] [Thread-215770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:49:01.779 [DEBUG] [Thread-215770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:49:01.788 [INFO] [Thread-215770] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:49:01.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:49:02.432 [DEBUG] [Thread-215770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:49:02.432 [DEBUG] [Thread-215770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:49:02.433 [DEBUG] [Thread-215770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:49:02.473 [DEBUG] [Thread-215770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:49:02.474 [DEBUG] [Thread-215770] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:49:02.477 [DEBUG] [Thread-215770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:49:02.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:49:02.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:49:02.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:49:02.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:49:02.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:49:02.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:49:02.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:49:02.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:49:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:49:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.033432 -999.00  +13.50  15.70     58   +5.60 1 1 1 1 1     0    0 7.15 -16.37 ZNESW 17.0 15.7 146.6 22.0 13.8 -22.1 13.7 -21.3 13.4 -19.8 13.7 -21.1
2026-02-16T02:49:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:49:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:49:02.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.033432
2026-02-16T02:49:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:49:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:49:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:49:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:49:02.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:49:02.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:48:27', tmtdew=8.56, humidity=55.98, cloud=0.0, wind=18.33, temperature=13.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:48:28', seeing=2.26, atlas_timestamp='2026-02-16T00:48:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:47:00')
2026-02-16T02:49:02.504 [DEBUG] [Thread-215770] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:49:02.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:49:02.598 [DEBUG] [Thread-215773] [transport.py] [_log()] starting thread (client mode): 0xa57e2920
2026-02-16T02:49:02.598 [DEBUG] [Thread-215773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:49:02.613 [DEBUG] [Thread-215773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:49:02.613 [INFO] [Thread-215773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:49:02.620 [DEBUG] [Thread-215773] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] client lang: <none>
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] server lang: <none>
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] kex follows: False
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] Compression: none
2026-02-16T02:49:02.621 [DEBUG] [Thread-215773] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:49:02.681 [DEBUG] [Thread-215773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:49:02.682 [DEBUG] [Thread-215773] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:49:02.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:49:02.683 [DEBUG] [Thread-215773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:49:02.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:49:02.737 [DEBUG] [Thread-215773] [transport.py] [_log()] userauth is OK
2026-02-16T02:49:02.737 [DEBUG] [Thread-215773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:49:02.738 [DEBUG] [Thread-215773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:49:02.738 [DEBUG] [Thread-215773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:49:02.738 [DEBUG] [Thread-215773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:49:02.751 [INFO] [Thread-215773] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:49:02.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:49:02.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:49:03.583 [DEBUG] [Thread-215773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:49:03.584 [DEBUG] [Thread-215773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:49:03.631 [DEBUG] [Thread-215773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:49:03.631 [DEBUG] [Thread-215773] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:49:03.641 [DEBUG] [Thread-215773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:49:03.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:49:03.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:49:03.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:49:03.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:49:03.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:49:03.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:49:03.679 [DEBUG] [Thread-215773] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:49:08.608 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:12.148 [DEBUG] [Thread-215775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:27.205 [DEBUG] [Thread-215776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:27.266 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:33.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:49:33.700 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:49:33.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:49:35.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 49, 2), 8.58, 55.92, 0.0, 19.02, 13.24, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:49:35.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:49:02
2026-02-16T02:49:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:49:36.061 [DEBUG] [Thread-215777] [transport.py] [_log()] starting thread (client mode): 0xa57e0af0
2026-02-16T02:49:36.061 [DEBUG] [Thread-215777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:49:36.082 [DEBUG] [Thread-215777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:49:36.083 [INFO] [Thread-215777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] client lang: <none>
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] server lang: <none>
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] kex follows: False
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:49:36.086 [DEBUG] [Thread-215777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:49:36.087 [DEBUG] [Thread-215777] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:49:36.087 [DEBUG] [Thread-215777] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:49:36.087 [DEBUG] [Thread-215777] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:49:36.087 [DEBUG] [Thread-215777] [transport.py] [_log()] Compression: none
2026-02-16T02:49:36.087 [DEBUG] [Thread-215777] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:49:36.103 [DEBUG] [Thread-215777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:49:36.104 [DEBUG] [Thread-215777] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:49:36.104 [DEBUG] [Thread-215777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:49:36.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:49:36.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:49:36.106 [DEBUG] [Thread-215777] [transport.py] [_log()] userauth is OK
2026-02-16T02:49:36.107 [DEBUG] [Thread-215777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:49:36.107 [DEBUG] [Thread-215777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:49:36.107 [DEBUG] [Thread-215777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:49:36.107 [DEBUG] [Thread-215777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:49:36.131 [INFO] [Thread-215777] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:49:36.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:49:36.781 [DEBUG] [Thread-215777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:49:36.781 [DEBUG] [Thread-215777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:49:36.781 [DEBUG] [Thread-215777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:49:36.821 [DEBUG] [Thread-215777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:49:36.821 [DEBUG] [Thread-215777] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:49:36.825 [DEBUG] [Thread-215777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:49:36.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:49:36.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:49:36.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:49:36.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:49:36.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:49:36.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:49:36.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:49:36.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:49:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:49:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.034127 -999.00  +13.60  14.44     58   +5.70 1 1 1 1 1     0    0 7.36 -10.27 ZNESW 14.6 14.4 131.0 22.6 13.8 -22.3 13.7 -21.2 13.4 -20.1 13.7 -21.4
2026-02-16T02:49:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:49:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:49:36.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.034127
2026-02-16T02:49:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:49:36.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:49:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:49:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:49:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:49:36.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:49:02', tmtdew=8.58, humidity=55.92, cloud=0.0, wind=19.02, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:49:03', seeing=2.6, atlas_timestamp='2026-02-16T00:49:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:47:00')
2026-02-16T02:49:36.851 [DEBUG] [Thread-215777] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:49:36.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:49:36.946 [DEBUG] [Thread-215780] [transport.py] [_log()] starting thread (client mode): 0xa2deabc0
2026-02-16T02:49:36.947 [DEBUG] [Thread-215780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:49:36.961 [DEBUG] [Thread-215780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:49:36.961 [INFO] [Thread-215780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] client lang: <none>
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] server lang: <none>
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] kex follows: False
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:49:36.970 [DEBUG] [Thread-215780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:49:36.971 [DEBUG] [Thread-215780] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:49:36.971 [DEBUG] [Thread-215780] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:49:36.971 [DEBUG] [Thread-215780] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:49:36.971 [DEBUG] [Thread-215780] [transport.py] [_log()] Compression: none
2026-02-16T02:49:36.971 [DEBUG] [Thread-215780] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:49:37.029 [DEBUG] [Thread-215780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:49:37.030 [DEBUG] [Thread-215780] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:49:37.030 [DEBUG] [Thread-215780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:49:37.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:49:37.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:49:37.088 [DEBUG] [Thread-215780] [transport.py] [_log()] userauth is OK
2026-02-16T02:49:37.088 [DEBUG] [Thread-215780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:49:37.089 [DEBUG] [Thread-215780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:49:37.089 [DEBUG] [Thread-215780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:49:37.089 [DEBUG] [Thread-215780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:49:37.113 [INFO] [Thread-215780] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:49:37.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:49:37.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:49:37.907 [DEBUG] [Thread-215780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:49:37.907 [DEBUG] [Thread-215780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:49:37.955 [DEBUG] [Thread-215780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:49:37.956 [DEBUG] [Thread-215780] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:49:37.965 [DEBUG] [Thread-215780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:49:37.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:49:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:49:37.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:49:37.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:49:37.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:49:37.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:49:38.003 [DEBUG] [Thread-215780] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:49:42.240 [DEBUG] [Thread-215782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:45.117 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:45.118 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:46.168 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:47.897 [DEBUG] [Thread-215783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:49:57.296 [DEBUG] [Thread-215784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:05.202 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:07.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:50:07.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:50:08.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:50:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 49, 38), 8.63, 55.78, 0.0, 19.09, 13.27, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:50:10.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:49:38
2026-02-16T02:50:10.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:50:10.603 [DEBUG] [Thread-215785] [transport.py] [_log()] starting thread (client mode): 0xa2d6dd80
2026-02-16T02:50:10.603 [DEBUG] [Thread-215785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:50:10.623 [DEBUG] [Thread-215785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:50:10.623 [INFO] [Thread-215785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] client lang: <none>
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] server lang: <none>
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] kex follows: False
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] Compression: none
2026-02-16T02:50:10.626 [DEBUG] [Thread-215785] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:50:10.643 [DEBUG] [Thread-215785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:50:10.644 [DEBUG] [Thread-215785] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:50:10.644 [DEBUG] [Thread-215785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:50:10.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:50:10.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:50:10.689 [DEBUG] [Thread-215785] [transport.py] [_log()] userauth is OK
2026-02-16T02:50:10.689 [DEBUG] [Thread-215785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:50:10.689 [DEBUG] [Thread-215785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:50:10.689 [DEBUG] [Thread-215785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:50:10.689 [DEBUG] [Thread-215785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:50:10.720 [INFO] [Thread-215785] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:50:10.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:50:12.329 [DEBUG] [Thread-215787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:19.456 [DEBUG] [Thread-215785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:50:19.456 [DEBUG] [Thread-215785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:50:19.456 [DEBUG] [Thread-215785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:50:19.497 [DEBUG] [Thread-215785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:50:19.498 [DEBUG] [Thread-215785] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:50:19.501 [DEBUG] [Thread-215785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:50:19.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:50:19.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:50:19.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:50:19.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:50:19.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:50:19.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:50:19.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:50:19.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:50:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:50:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.034474 -999.00  +13.60  15.80     58   +5.60 1 1 1 1 1     0    0 7.58 -7.55 ZNESW 13.5 15.8 129.2 18.6 13.8 -22.4 13.7 -21.4 13.4 -20.1 13.7 -21.2
2026-02-16T02:50:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:50:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:50:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.034474
2026-02-16T02:50:19.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:50:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:50:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:50:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:50:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:50:19.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:49:38', tmtdew=8.63, humidity=55.78, cloud=0.0, wind=19.09, temperature=13.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:49:38', seeing=2.6, atlas_timestamp='2026-02-16T00:49:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:47:00')
2026-02-16T02:50:19.537 [DEBUG] [Thread-215785] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:50:19.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:50:19.643 [DEBUG] [Thread-215789] [transport.py] [_log()] starting thread (client mode): 0xa57b0940
2026-02-16T02:50:19.643 [DEBUG] [Thread-215789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:50:19.657 [DEBUG] [Thread-215789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:50:19.658 [INFO] [Thread-215789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:50:19.665 [DEBUG] [Thread-215789] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:50:19.665 [DEBUG] [Thread-215789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:50:19.665 [DEBUG] [Thread-215789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] client lang: <none>
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] server lang: <none>
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] kex follows: False
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] Compression: none
2026-02-16T02:50:19.666 [DEBUG] [Thread-215789] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:50:19.723 [DEBUG] [Thread-215789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:50:19.724 [DEBUG] [Thread-215789] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:50:19.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:50:19.725 [DEBUG] [Thread-215789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:50:19.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:50:19.779 [DEBUG] [Thread-215789] [transport.py] [_log()] userauth is OK
2026-02-16T02:50:19.780 [DEBUG] [Thread-215789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:50:19.780 [DEBUG] [Thread-215789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:50:19.780 [DEBUG] [Thread-215789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:50:19.780 [DEBUG] [Thread-215789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:50:19.802 [INFO] [Thread-215789] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:50:19.802 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:50:19.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:50:20.598 [DEBUG] [Thread-215789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:50:20.599 [DEBUG] [Thread-215789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:50:20.646 [DEBUG] [Thread-215789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:50:20.647 [DEBUG] [Thread-215789] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:50:20.656 [DEBUG] [Thread-215789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:50:20.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:50:20.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:50:20.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:50:20.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:50:20.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:50:20.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:50:20.692 [DEBUG] [Thread-215789] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:50:24.111 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:27.366 [DEBUG] [Thread-215791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:42.407 [DEBUG] [Thread-215792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:42.808 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:45.320 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:45.321 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:47.953 [DEBUG] [Thread-215793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:50:50.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:50:50.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:50:50.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:50:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 50, 13), 8.76, 55.57, 0.0, 16.41, 13.38, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:50:52.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:50:13
2026-02-16T02:50:53.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:50:53.295 [DEBUG] [Thread-215794] [transport.py] [_log()] starting thread (client mode): 0xa2dea4a0
2026-02-16T02:50:53.295 [DEBUG] [Thread-215794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:50:53.316 [DEBUG] [Thread-215794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:50:53.316 [INFO] [Thread-215794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] client lang: <none>
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] server lang: <none>
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] kex follows: False
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] Compression: none
2026-02-16T02:50:53.319 [DEBUG] [Thread-215794] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:50:53.336 [DEBUG] [Thread-215794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:50:53.336 [DEBUG] [Thread-215794] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:50:53.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:50:53.336 [DEBUG] [Thread-215794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:50:53.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:50:53.337 [DEBUG] [Thread-215794] [transport.py] [_log()] userauth is OK
2026-02-16T02:50:53.337 [DEBUG] [Thread-215794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:50:53.337 [DEBUG] [Thread-215794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:50:53.337 [DEBUG] [Thread-215794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:50:53.337 [DEBUG] [Thread-215794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:50:53.347 [INFO] [Thread-215794] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:50:53.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:50:53.964 [DEBUG] [Thread-215794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:50:53.964 [DEBUG] [Thread-215794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:50:53.964 [DEBUG] [Thread-215794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:50:54.005 [DEBUG] [Thread-215794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:50:54.005 [DEBUG] [Thread-215794] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:50:54.008 [DEBUG] [Thread-215794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:50:54.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:50:54.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:50:54.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:50:54.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:50:54.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:50:54.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:50:54.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:50:54.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:50:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:50:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.034821 -999.00  +13.60  14.41     58   +5.70 1 1 1 1 1     0    0 7.42 -5.86 ZNESW 14.8 14.4 132.0 16.7 13.8 -22.2 13.7 -21.1 13.4 -19.8 13.7 -21.1
2026-02-16T02:50:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:50:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:50:54.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.034821
2026-02-16T02:50:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:50:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:50:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:50:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:50:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:50:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:50:13', tmtdew=8.76, humidity=55.57, cloud=0.0, wind=16.41, temperature=13.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:50:49', seeing=2.81, atlas_timestamp='2026-02-16T00:50:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:47:00')
2026-02-16T02:50:54.034 [DEBUG] [Thread-215794] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:50:54.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:50:54.129 [DEBUG] [Thread-215797] [transport.py] [_log()] starting thread (client mode): 0xa2d6d1b0
2026-02-16T02:50:54.129 [DEBUG] [Thread-215797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:50:54.144 [DEBUG] [Thread-215797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:50:54.144 [INFO] [Thread-215797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] client lang: <none>
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] server lang: <none>
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] kex follows: False
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:50:54.151 [DEBUG] [Thread-215797] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:50:54.152 [DEBUG] [Thread-215797] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:50:54.152 [DEBUG] [Thread-215797] [transport.py] [_log()] Compression: none
2026-02-16T02:50:54.152 [DEBUG] [Thread-215797] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:50:54.209 [DEBUG] [Thread-215797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:50:54.209 [DEBUG] [Thread-215797] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:50:54.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:50:54.210 [DEBUG] [Thread-215797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:50:54.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:50:54.267 [DEBUG] [Thread-215797] [transport.py] [_log()] userauth is OK
2026-02-16T02:50:54.267 [DEBUG] [Thread-215797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:50:54.267 [DEBUG] [Thread-215797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:50:54.267 [DEBUG] [Thread-215797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:50:54.267 [DEBUG] [Thread-215797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:50:54.285 [INFO] [Thread-215797] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:50:54.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:50:54.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:50:55.130 [DEBUG] [Thread-215797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:50:55.130 [DEBUG] [Thread-215797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:50:55.178 [DEBUG] [Thread-215797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:50:55.178 [DEBUG] [Thread-215797] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:50:55.186 [DEBUG] [Thread-215797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:50:55.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:50:55.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:50:55.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:50:55.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:50:55.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:50:55.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:50:55.218 [DEBUG] [Thread-215797] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:50:57.442 [DEBUG] [Thread-215799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:01.475 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:12.493 [DEBUG] [Thread-215800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:20.153 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:25.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:51:25.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:51:25.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
2026-02-16T02:51:27.524 [DEBUG] [Thread-215801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 50, 48), 8.9, 54.72, 0.0, 15.7, 13.43, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:51:27.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:50:48
2026-02-16T02:51:28.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:51:28.211 [DEBUG] [Thread-215802] [transport.py] [_log()] starting thread (client mode): 0xa2d01840
2026-02-16T02:51:28.211 [DEBUG] [Thread-215802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:51:28.231 [DEBUG] [Thread-215802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:51:28.231 [INFO] [Thread-215802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] client lang: <none>
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] server lang: <none>
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] kex follows: False
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] Compression: none
2026-02-16T02:51:28.234 [DEBUG] [Thread-215802] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:51:28.249 [DEBUG] [Thread-215802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:51:28.250 [DEBUG] [Thread-215802] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:51:28.250 [DEBUG] [Thread-215802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:51:28.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:51:28.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:51:28.292 [DEBUG] [Thread-215802] [transport.py] [_log()] userauth is OK
2026-02-16T02:51:28.292 [DEBUG] [Thread-215802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:51:28.292 [DEBUG] [Thread-215802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:51:28.292 [DEBUG] [Thread-215802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:51:28.292 [DEBUG] [Thread-215802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:51:28.307 [INFO] [Thread-215802] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:51:28.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:51:28.954 [DEBUG] [Thread-215802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:51:28.955 [DEBUG] [Thread-215802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:51:28.955 [DEBUG] [Thread-215802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:51:28.996 [DEBUG] [Thread-215802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:51:28.997 [DEBUG] [Thread-215802] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:51:29.000 [DEBUG] [Thread-215802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:51:29.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:51:29.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:51:29.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:51:29.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:51:29.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:51:29.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:51:29.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:51:29.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:51:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:51:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.035168 -999.00  +13.50  13.51     59   +5.70 1 1 1 1 1     0    0 7.59 -4.87 ZNESW 14.1 13.5 128.6 15.8 13.9 -22.3 13.7 -21.4 13.4 -20.2 13.7 -21.4
2026-02-16T02:51:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:51:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:51:29.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.035168
2026-02-16T02:51:29.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:51:29.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:51:29.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:51:29.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:51:29.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:51:29.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:50:48', tmtdew=8.9, humidity=54.72, cloud=0.0, wind=15.7, temperature=13.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:51:24', seeing=2.95, atlas_timestamp='2026-02-16T00:50:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.025249999999999773, -0.008749999999999147, -0.02874999999999872, -0.057500000000000995, -0.0495000000000001, 0.016250000000001208, -0.0039999999999995595, -0.02874999999999872, 0.02949999999999875, -0.05299999999999905, -0.03575000000000017, -0.08450000000000024, -0.018000000000000682, 0.03824999999999967, 0.019499999999998963, 0.010499999999998622, 0.003750000000000142, -0.042500000000000426, 0.009999999999999787, -0.02125000000000199, -0.012500000000001066, 0.036249999999999005, 0.007250000000000867, 0.015249999999999986, 0.014999999999998792, -0.06349999999999945, -0.005250000000000199, -0.037499999999999645, 0.002000000000000668, 0.05200000000000138, 0.08250000000000135, 0.0010000000000012221, -0.045750000000001734], zp_timestamp='2026-02-16T00:47:00')
2026-02-16T02:51:29.027 [DEBUG] [Thread-215802] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:51:29.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:51:29.126 [DEBUG] [Thread-215805] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-16T02:51:29.126 [DEBUG] [Thread-215805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:51:29.143 [DEBUG] [Thread-215805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:51:29.143 [INFO] [Thread-215805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:51:29.154 [DEBUG] [Thread-215805] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:51:29.154 [DEBUG] [Thread-215805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:51:29.154 [DEBUG] [Thread-215805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:51:29.154 [DEBUG] [Thread-215805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:51:29.154 [DEBUG] [Thread-215805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] client lang: <none>
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] server lang: <none>
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] kex follows: False
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] Compression: none
2026-02-16T02:51:29.155 [DEBUG] [Thread-215805] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:51:29.215 [DEBUG] [Thread-215805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:51:29.215 [DEBUG] [Thread-215805] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:51:29.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:51:29.216 [DEBUG] [Thread-215805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:51:29.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:51:29.271 [DEBUG] [Thread-215805] [transport.py] [_log()] userauth is OK
2026-02-16T02:51:29.271 [DEBUG] [Thread-215805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:51:29.271 [DEBUG] [Thread-215805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:51:29.271 [DEBUG] [Thread-215805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:51:29.271 [DEBUG] [Thread-215805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:51:29.289 [INFO] [Thread-215805] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:51:29.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:51:29.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:51:30.193 [DEBUG] [Thread-215805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:51:30.193 [DEBUG] [Thread-215805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:51:30.241 [DEBUG] [Thread-215805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:51:30.241 [DEBUG] [Thread-215805] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:51:30.250 [DEBUG] [Thread-215805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:51:30.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:51:30.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:51:30.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:51:30.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:51:30.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:51:30.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:51:30.286 [DEBUG] [Thread-215805] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:51:38.921 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:42.559 [DEBUG] [Thread-215807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:45.524 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:45.525 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:48.022 [DEBUG] [Thread-215808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:57.597 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:51:57.607 [DEBUG] [Thread-215809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:00.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:52:00.309 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:52:00.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:52:02.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 51, 24), 8.94, 54.58, 0.0, 17.56, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:52:02.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:51:24
2026-02-16T02:52:02.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:52:02.886 [DEBUG] [Thread-215810] [transport.py] [_log()] starting thread (client mode): 0xa57e2830
2026-02-16T02:52:02.886 [DEBUG] [Thread-215810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:52:02.906 [DEBUG] [Thread-215810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:52:02.906 [INFO] [Thread-215810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:52:02.918 [DEBUG] [Thread-215810] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:52:02.919 [DEBUG] [Thread-215810] [transport.py] [_log()] client lang: <none>
2026-02-16T02:52:02.920 [DEBUG] [Thread-215810] [transport.py] [_log()] server lang: <none>
2026-02-16T02:52:02.920 [DEBUG] [Thread-215810] [transport.py] [_log()] kex follows: False
2026-02-16T02:52:02.920 [DEBUG] [Thread-215810] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:52:02.920 [DEBUG] [Thread-215810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:52:02.920 [DEBUG] [Thread-215810] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:52:02.920 [DEBUG] [Thread-215810] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:52:02.921 [DEBUG] [Thread-215810] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:52:02.921 [DEBUG] [Thread-215810] [transport.py] [_log()] Compression: none
2026-02-16T02:52:02.921 [DEBUG] [Thread-215810] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:52:02.938 [DEBUG] [Thread-215810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:52:02.938 [DEBUG] [Thread-215810] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:52:02.939 [DEBUG] [Thread-215810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:52:02.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:52:02.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:52:02.941 [DEBUG] [Thread-215810] [transport.py] [_log()] userauth is OK
2026-02-16T02:52:02.941 [DEBUG] [Thread-215810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:52:02.941 [DEBUG] [Thread-215810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:52:02.941 [DEBUG] [Thread-215810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:52:02.941 [DEBUG] [Thread-215810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:52:02.964 [INFO] [Thread-215810] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:52:02.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:52:03.623 [DEBUG] [Thread-215810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:52:03.623 [DEBUG] [Thread-215810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:52:03.623 [DEBUG] [Thread-215810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:52:03.663 [DEBUG] [Thread-215810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:52:03.664 [DEBUG] [Thread-215810] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:52:03.667 [DEBUG] [Thread-215810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:52:03.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:52:03.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:52:03.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:52:03.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:52:03.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:52:03.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:52:03.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:52:03.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:52:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:52:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.035515 -999.00  +13.50  19.19     59   +5.70 1 1 1 1 1     0    0 7.50 -3.51 ZNESW 21.1 19.2 132.2 20.8 13.8 -22.4 13.7 -21.4 13.4 -20.2 13.7 -21.4
2026-02-16T02:52:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:52:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:52:03.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.035515
2026-02-16T02:52:03.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:52:03.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:52:03.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:52:03.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:52:03.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:52:03.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:51:24', tmtdew=8.94, humidity=54.58, cloud=0.0, wind=17.56, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:51:24', seeing=2.95, atlas_timestamp='2026-02-16T00:51:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:50:00')
2026-02-16T02:52:03.694 [DEBUG] [Thread-215810] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:52:03.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:52:03.787 [DEBUG] [Thread-215813] [transport.py] [_log()] starting thread (client mode): 0xa2dc2f50
2026-02-16T02:52:03.787 [DEBUG] [Thread-215813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:52:03.801 [DEBUG] [Thread-215813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:52:03.801 [INFO] [Thread-215813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:52:03.809 [DEBUG] [Thread-215813] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:52:03.809 [DEBUG] [Thread-215813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:52:03.809 [DEBUG] [Thread-215813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:52:03.809 [DEBUG] [Thread-215813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] client lang: <none>
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] server lang: <none>
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] kex follows: False
2026-02-16T02:52:03.810 [DEBUG] [Thread-215813] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:52:03.811 [DEBUG] [Thread-215813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:52:03.811 [DEBUG] [Thread-215813] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:52:03.811 [DEBUG] [Thread-215813] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:52:03.811 [DEBUG] [Thread-215813] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:52:03.811 [DEBUG] [Thread-215813] [transport.py] [_log()] Compression: none
2026-02-16T02:52:03.811 [DEBUG] [Thread-215813] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:52:03.866 [DEBUG] [Thread-215813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:52:03.867 [DEBUG] [Thread-215813] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:52:03.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:52:03.868 [DEBUG] [Thread-215813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:52:03.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:52:03.923 [DEBUG] [Thread-215813] [transport.py] [_log()] userauth is OK
2026-02-16T02:52:03.923 [DEBUG] [Thread-215813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:52:03.923 [DEBUG] [Thread-215813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:52:03.923 [DEBUG] [Thread-215813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:52:03.924 [DEBUG] [Thread-215813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:52:03.943 [INFO] [Thread-215813] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:52:03.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:52:03.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:52:04.773 [DEBUG] [Thread-215813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:52:04.773 [DEBUG] [Thread-215813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:52:04.821 [DEBUG] [Thread-215813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:52:04.821 [DEBUG] [Thread-215813] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:52:04.829 [DEBUG] [Thread-215813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:52:04.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:52:04.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:52:04.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:52:04.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:52:04.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:52:04.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:52:04.861 [DEBUG] [Thread-215813] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:52:12.643 [DEBUG] [Thread-215815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:16.265 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:27.706 [DEBUG] [Thread-215816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:34.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:52:34.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:52:34.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:52:35.152 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 51, 24), 8.94, 54.58, 0.0, 21.16, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:52:37.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:51:24
2026-02-16T02:52:37.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:52:37.935 [DEBUG] [Thread-215817] [transport.py] [_log()] starting thread (client mode): 0xa2dc33d0
2026-02-16T02:52:37.935 [DEBUG] [Thread-215817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:52:37.957 [DEBUG] [Thread-215817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:52:37.957 [INFO] [Thread-215817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:52:37.960 [DEBUG] [Thread-215817] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:52:37.960 [DEBUG] [Thread-215817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] client lang: <none>
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] server lang: <none>
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] kex follows: False
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:52:37.961 [DEBUG] [Thread-215817] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:52:37.962 [DEBUG] [Thread-215817] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:52:37.962 [DEBUG] [Thread-215817] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:52:37.962 [DEBUG] [Thread-215817] [transport.py] [_log()] Compression: none
2026-02-16T02:52:37.962 [DEBUG] [Thread-215817] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:52:37.982 [DEBUG] [Thread-215817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:52:37.982 [DEBUG] [Thread-215817] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:52:37.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:52:37.984 [DEBUG] [Thread-215817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:52:37.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:52:37.986 [DEBUG] [Thread-215817] [transport.py] [_log()] userauth is OK
2026-02-16T02:52:37.986 [DEBUG] [Thread-215817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:52:37.986 [DEBUG] [Thread-215817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:52:37.986 [DEBUG] [Thread-215817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:52:37.986 [DEBUG] [Thread-215817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:52:38.023 [INFO] [Thread-215817] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:52:38.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:52:38.619 [DEBUG] [Thread-215817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:52:38.620 [DEBUG] [Thread-215817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:52:38.620 [DEBUG] [Thread-215817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:52:38.661 [DEBUG] [Thread-215817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:52:38.661 [DEBUG] [Thread-215817] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:52:38.664 [DEBUG] [Thread-215817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:52:38.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:52:38.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:52:38.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:52:38.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:52:38.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:52:38.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:52:38.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:52:38.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:52:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:52:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.035863 -999.00  +13.60  14.13     59   +5.70 1 1 1 1 1     0    0 7.51 -1.86 ZNESW 14.7 14.1 136.4 22.2 13.8 -22.4 13.7 -21.3 13.4 -20.0 13.8 -21.5
2026-02-16T02:52:38.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:52:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:52:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.035863
2026-02-16T02:52:38.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:52:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:52:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:52:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:52:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:52:38.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:51:24', tmtdew=8.94, humidity=54.58, cloud=0.0, wind=21.16, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:52:00', seeing=2.28, atlas_timestamp='2026-02-16T00:51:38.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:50:00')
2026-02-16T02:52:38.692 [DEBUG] [Thread-215817] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:52:38.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:52:38.788 [DEBUG] [Thread-215820] [transport.py] [_log()] starting thread (client mode): 0xa2d854b0
2026-02-16T02:52:38.789 [DEBUG] [Thread-215820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:52:38.803 [DEBUG] [Thread-215820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:52:38.803 [INFO] [Thread-215820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:52:38.811 [DEBUG] [Thread-215820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] client lang: <none>
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] server lang: <none>
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] kex follows: False
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] Compression: none
2026-02-16T02:52:38.812 [DEBUG] [Thread-215820] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:52:38.870 [DEBUG] [Thread-215820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:52:38.871 [DEBUG] [Thread-215820] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:52:38.871 [DEBUG] [Thread-215820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:52:38.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:52:38.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:52:38.926 [DEBUG] [Thread-215820] [transport.py] [_log()] userauth is OK
2026-02-16T02:52:38.926 [DEBUG] [Thread-215820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:52:38.926 [DEBUG] [Thread-215820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:52:38.926 [DEBUG] [Thread-215820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:52:38.926 [DEBUG] [Thread-215820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:52:38.944 [INFO] [Thread-215820] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:52:38.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:52:38.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:52:39.834 [DEBUG] [Thread-215820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:52:39.834 [DEBUG] [Thread-215820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:52:39.882 [DEBUG] [Thread-215820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:52:39.883 [DEBUG] [Thread-215820] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:52:39.892 [DEBUG] [Thread-215820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:52:39.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:52:39.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:52:39.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:52:39.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:52:39.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:52:39.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:52:39.930 [DEBUG] [Thread-215820] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:52:42.744 [DEBUG] [Thread-215822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:45.731 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:45.732 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:48.092 [DEBUG] [Thread-215823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:53.801 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:52:57.804 [DEBUG] [Thread-215824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:09.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:53:09.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:53:09.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:53:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 52, 35), 8.79, 55.28, 0.0, 16.23, 13.64, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:53:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:52:35
2026-02-16T02:53:12.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:53:12.360 [DEBUG] [Thread-215825] [transport.py] [_log()] starting thread (client mode): 0xa2d85a50
2026-02-16T02:53:12.360 [DEBUG] [Thread-215825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:53:12.380 [DEBUG] [Thread-215825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:53:12.380 [INFO] [Thread-215825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] client lang: <none>
2026-02-16T02:53:12.382 [DEBUG] [Thread-215825] [transport.py] [_log()] server lang: <none>
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] kex follows: False
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] Compression: none
2026-02-16T02:53:12.383 [DEBUG] [Thread-215825] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:53:12.392 [DEBUG] [Thread-215825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:53:12.393 [DEBUG] [Thread-215825] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:53:12.393 [DEBUG] [Thread-215825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:53:12.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:53:12.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:53:12.395 [DEBUG] [Thread-215825] [transport.py] [_log()] userauth is OK
2026-02-16T02:53:12.395 [DEBUG] [Thread-215825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:53:12.395 [DEBUG] [Thread-215825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:53:12.395 [DEBUG] [Thread-215825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:53:12.395 [DEBUG] [Thread-215825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:53:12.413 [INFO] [Thread-215825] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:53:12.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:53:12.474 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:12.843 [DEBUG] [Thread-215827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:13.135 [DEBUG] [Thread-215825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:53:13.135 [DEBUG] [Thread-215825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:53:13.136 [DEBUG] [Thread-215825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:53:13.177 [DEBUG] [Thread-215825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:53:13.177 [DEBUG] [Thread-215825] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:53:13.180 [DEBUG] [Thread-215825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:53:13.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:53:13.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:53:13.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:53:13.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:53:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:53:13.201 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:53:13.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:53:13.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:53:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:53:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.036557 -999.00  +13.50  11.06     59   +5.80 1 1 1 1 1     0    0 7.70 -0.95 ZNESW 10.6 11.1 130.6 14.5 13.8 -22.1 13.7 -21.2 13.4 -19.9 13.7 -21.2
2026-02-16T02:53:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:53:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:53:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.036557
2026-02-16T02:53:13.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:53:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:53:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:53:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:53:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:53:13.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:52:35', tmtdew=8.79, humidity=55.28, cloud=0.0, wind=16.23, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:52:35', seeing=2.83, atlas_timestamp='2026-02-16T00:52:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:50:00')
2026-02-16T02:53:13.203 [DEBUG] [Thread-215825] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:53:13.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:53:13.300 [DEBUG] [Thread-215829] [transport.py] [_log()] starting thread (client mode): 0xa2d87a90
2026-02-16T02:53:13.300 [DEBUG] [Thread-215829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:53:13.315 [DEBUG] [Thread-215829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:53:13.315 [INFO] [Thread-215829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] client lang: <none>
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] server lang: <none>
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] kex follows: False
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:53:13.323 [DEBUG] [Thread-215829] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:53:13.324 [DEBUG] [Thread-215829] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:53:13.324 [DEBUG] [Thread-215829] [transport.py] [_log()] Compression: none
2026-02-16T02:53:13.324 [DEBUG] [Thread-215829] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:53:13.381 [DEBUG] [Thread-215829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:53:13.382 [DEBUG] [Thread-215829] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:53:13.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:53:13.383 [DEBUG] [Thread-215829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:53:13.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:53:13.438 [DEBUG] [Thread-215829] [transport.py] [_log()] userauth is OK
2026-02-16T02:53:13.438 [DEBUG] [Thread-215829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:53:13.438 [DEBUG] [Thread-215829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:53:13.438 [DEBUG] [Thread-215829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:53:13.438 [DEBUG] [Thread-215829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:53:13.457 [INFO] [Thread-215829] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:53:13.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:53:13.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:53:14.282 [DEBUG] [Thread-215829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:53:14.283 [DEBUG] [Thread-215829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:53:14.330 [DEBUG] [Thread-215829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:53:14.330 [DEBUG] [Thread-215829] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:53:14.339 [DEBUG] [Thread-215829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:53:14.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:53:14.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:53:14.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:53:14.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:53:14.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:53:14.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:53:14.376 [DEBUG] [Thread-215829] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:53:27.876 [DEBUG] [Thread-215831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:31.130 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:42.915 [DEBUG] [Thread-215832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:44.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:53:44.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:53:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:53:45.938 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:45.939 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 53, 11), 8.64, 55.82, 0.0, 14.79, 13.35, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:53:46.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:53:11
2026-02-16T02:53:46.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:53:46.865 [DEBUG] [Thread-215833] [transport.py] [_log()] starting thread (client mode): 0xa2d859c0
2026-02-16T02:53:46.866 [DEBUG] [Thread-215833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:53:46.886 [DEBUG] [Thread-215833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:53:46.887 [INFO] [Thread-215833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:53:46.889 [DEBUG] [Thread-215833] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] client lang: <none>
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] server lang: <none>
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] kex follows: False
2026-02-16T02:53:46.890 [DEBUG] [Thread-215833] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:53:46.891 [DEBUG] [Thread-215833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:53:46.891 [DEBUG] [Thread-215833] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:53:46.891 [DEBUG] [Thread-215833] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:53:46.891 [DEBUG] [Thread-215833] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:53:46.891 [DEBUG] [Thread-215833] [transport.py] [_log()] Compression: none
2026-02-16T02:53:46.891 [DEBUG] [Thread-215833] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:53:46.909 [DEBUG] [Thread-215833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:53:46.910 [DEBUG] [Thread-215833] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:53:46.911 [DEBUG] [Thread-215833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:53:46.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:53:46.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:53:46.914 [DEBUG] [Thread-215833] [transport.py] [_log()] userauth is OK
2026-02-16T02:53:46.914 [DEBUG] [Thread-215833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:53:46.915 [DEBUG] [Thread-215833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:53:46.915 [DEBUG] [Thread-215833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:53:46.915 [DEBUG] [Thread-215833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:53:46.941 [INFO] [Thread-215833] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:53:46.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:53:47.576 [DEBUG] [Thread-215833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:53:47.576 [DEBUG] [Thread-215833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:53:47.577 [DEBUG] [Thread-215833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:53:47.617 [DEBUG] [Thread-215833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:53:47.618 [DEBUG] [Thread-215833] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:53:47.621 [DEBUG] [Thread-215833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:53:47.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:53:47.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:53:47.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:53:47.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:53:47.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:53:47.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:53:47.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:53:47.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:53:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:53:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.036904 -999.00  +13.50  11.35     59   +5.70 1 1 1 1 1     0    0 7.65 -0.40 ZNESW 12.6 11.3 124.2 13.2 13.8 -22.5 13.7 -21.4 13.4 -20.1 13.7 -21.4
2026-02-16T02:53:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:53:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:53:47.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.036904
2026-02-16T02:53:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:53:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:53:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:53:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:53:47.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:53:47.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:53:11', tmtdew=8.64, humidity=55.82, cloud=0.0, wind=14.79, temperature=13.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:53:12', seeing=3.03, atlas_timestamp='2026-02-16T00:53:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:50:00')
2026-02-16T02:53:47.647 [DEBUG] [Thread-215833] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:53:47.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:53:47.743 [DEBUG] [Thread-215836] [transport.py] [_log()] starting thread (client mode): 0xa2d02ce0
2026-02-16T02:53:47.743 [DEBUG] [Thread-215836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:53:47.757 [DEBUG] [Thread-215836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:53:47.757 [INFO] [Thread-215836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:53:47.765 [DEBUG] [Thread-215836] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:53:47.765 [DEBUG] [Thread-215836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:53:47.765 [DEBUG] [Thread-215836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:53:47.765 [DEBUG] [Thread-215836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:47.765 [DEBUG] [Thread-215836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] client lang: <none>
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] server lang: <none>
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] kex follows: False
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] Compression: none
2026-02-16T02:53:47.766 [DEBUG] [Thread-215836] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:53:47.824 [DEBUG] [Thread-215836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:53:47.824 [DEBUG] [Thread-215836] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:53:47.825 [DEBUG] [Thread-215836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:53:47.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:53:47.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:53:47.881 [DEBUG] [Thread-215836] [transport.py] [_log()] userauth is OK
2026-02-16T02:53:47.881 [DEBUG] [Thread-215836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:53:47.881 [DEBUG] [Thread-215836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:53:47.881 [DEBUG] [Thread-215836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:53:47.882 [DEBUG] [Thread-215836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:53:47.901 [INFO] [Thread-215836] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:53:47.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:53:47.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:53:48.160 [DEBUG] [Thread-215838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:48.810 [DEBUG] [Thread-215836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:53:48.811 [DEBUG] [Thread-215836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:53:48.858 [DEBUG] [Thread-215836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:53:48.859 [DEBUG] [Thread-215836] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:53:48.868 [DEBUG] [Thread-215836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:53:48.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:53:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:53:48.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:53:48.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:53:48.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:53:48.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:53:48.905 [DEBUG] [Thread-215836] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:53:49.781 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:53:57.947 [DEBUG] [Thread-215839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:08.442 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:12.998 [DEBUG] [Thread-215840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:18.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:54:18.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:54:18.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:54:21.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 53, 46), 8.61, 55.92, 0.0, 14.35, 13.24, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:54:21.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:53:46
2026-02-16T02:54:21.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:54:21.631 [DEBUG] [Thread-215841] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-16T02:54:21.631 [DEBUG] [Thread-215841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:54:21.651 [DEBUG] [Thread-215841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:54:21.651 [INFO] [Thread-215841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:54:21.654 [DEBUG] [Thread-215841] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:54:21.654 [DEBUG] [Thread-215841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] client lang: <none>
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] server lang: <none>
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] kex follows: False
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:54:21.655 [DEBUG] [Thread-215841] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:54:21.656 [DEBUG] [Thread-215841] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:54:21.656 [DEBUG] [Thread-215841] [transport.py] [_log()] Compression: none
2026-02-16T02:54:21.656 [DEBUG] [Thread-215841] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:54:21.674 [DEBUG] [Thread-215841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:54:21.675 [DEBUG] [Thread-215841] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:54:21.675 [DEBUG] [Thread-215841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:54:21.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:54:21.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:54:21.717 [DEBUG] [Thread-215841] [transport.py] [_log()] userauth is OK
2026-02-16T02:54:21.718 [DEBUG] [Thread-215841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:54:21.718 [DEBUG] [Thread-215841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:54:21.718 [DEBUG] [Thread-215841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:54:21.718 [DEBUG] [Thread-215841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:54:21.740 [INFO] [Thread-215841] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:54:21.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:54:22.368 [DEBUG] [Thread-215841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:54:22.368 [DEBUG] [Thread-215841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:54:22.368 [DEBUG] [Thread-215841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:54:22.409 [DEBUG] [Thread-215841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:54:22.410 [DEBUG] [Thread-215841] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:54:22.413 [DEBUG] [Thread-215841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:54:22.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:54:22.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:54:22.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:54:22.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:54:22.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:54:22.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:54:22.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:54:22.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:54:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:54:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.037252 -999.00  +13.40  13.41     59   +5.70 1 1 1 1 1     0    0 7.62 0.29 ZNESW 15.1 13.4 126.8 15.9 13.8 -22.3 13.7 -21.3 13.4 -20.1 13.7 -21.6
2026-02-16T02:54:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:54:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:54:22.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.037252
2026-02-16T02:54:22.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:54:22.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:54:22.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:54:22.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:54:22.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:54:22.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:53:46', tmtdew=8.61, humidity=55.92, cloud=0.0, wind=14.35, temperature=13.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:53:47', seeing=2.18, atlas_timestamp='2026-02-16T00:53:38.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:50:00')
2026-02-16T02:54:22.441 [DEBUG] [Thread-215841] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:54:22.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:54:22.534 [DEBUG] [Thread-215844] [transport.py] [_log()] starting thread (client mode): 0xa2d85990
2026-02-16T02:54:22.534 [DEBUG] [Thread-215844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:54:22.548 [DEBUG] [Thread-215844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:54:22.548 [INFO] [Thread-215844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] client lang: <none>
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] server lang: <none>
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] kex follows: False
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] Compression: none
2026-02-16T02:54:22.556 [DEBUG] [Thread-215844] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:54:22.617 [DEBUG] [Thread-215844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:54:22.617 [DEBUG] [Thread-215844] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:54:22.618 [DEBUG] [Thread-215844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:54:22.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:54:22.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:54:22.672 [DEBUG] [Thread-215844] [transport.py] [_log()] userauth is OK
2026-02-16T02:54:22.673 [DEBUG] [Thread-215844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:54:22.673 [DEBUG] [Thread-215844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:54:22.673 [DEBUG] [Thread-215844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:54:22.673 [DEBUG] [Thread-215844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:54:22.692 [INFO] [Thread-215844] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:54:22.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:54:22.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:54:23.541 [DEBUG] [Thread-215844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:54:23.541 [DEBUG] [Thread-215844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:54:23.590 [DEBUG] [Thread-215844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:54:23.590 [DEBUG] [Thread-215844] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:54:23.598 [DEBUG] [Thread-215844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:54:23.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:54:23.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:54:23.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:54:23.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:54:23.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:54:23.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:54:23.630 [DEBUG] [Thread-215844] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:54:27.089 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:28.033 [DEBUG] [Thread-215846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:43.085 [DEBUG] [Thread-215847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:45.939 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:46.138 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:46.140 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:48.234 [DEBUG] [Thread-215848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:54:53.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:54:53.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:54:53.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:54:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 54, 22), 8.59, 55.99, 0.0, 14.45, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:54:55.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:54:22
2026-02-16T02:54:55.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:54:56.019 [DEBUG] [Thread-215849] [transport.py] [_log()] starting thread (client mode): 0xa2d01510
2026-02-16T02:54:56.020 [DEBUG] [Thread-215849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:54:56.042 [DEBUG] [Thread-215849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:54:56.042 [INFO] [Thread-215849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:54:56.045 [DEBUG] [Thread-215849] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] client lang: <none>
2026-02-16T02:54:56.046 [DEBUG] [Thread-215849] [transport.py] [_log()] server lang: <none>
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] kex follows: False
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] Compression: none
2026-02-16T02:54:56.047 [DEBUG] [Thread-215849] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:54:56.067 [DEBUG] [Thread-215849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:54:56.067 [DEBUG] [Thread-215849] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:54:56.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:54:56.068 [DEBUG] [Thread-215849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:54:56.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:54:56.070 [DEBUG] [Thread-215849] [transport.py] [_log()] userauth is OK
2026-02-16T02:54:56.070 [DEBUG] [Thread-215849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:54:56.070 [DEBUG] [Thread-215849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:54:56.070 [DEBUG] [Thread-215849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:54:56.070 [DEBUG] [Thread-215849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:54:56.105 [INFO] [Thread-215849] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:54:56.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:54:56.730 [DEBUG] [Thread-215849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:54:56.731 [DEBUG] [Thread-215849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:54:56.731 [DEBUG] [Thread-215849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:54:56.771 [DEBUG] [Thread-215849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:54:56.772 [DEBUG] [Thread-215849] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:54:56.775 [DEBUG] [Thread-215849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:54:56.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:54:56.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:54:56.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:54:56.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:54:56.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:54:56.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:54:56.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:54:56.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:54:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:54:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.037599 -999.00  +13.40  13.84     59   +5.70 1 1 1 1 1     0    0 7.92 1.33 ZNESW 12.3 13.8 121.6 17.9 13.8 -22.5 13.7 -21.3 13.5 -20.3 13.7 -21.6
2026-02-16T02:54:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:54:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:54:56.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.037599
2026-02-16T02:54:56.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:54:56.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:54:56.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:54:56.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:54:56.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:54:56.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:54:22', tmtdew=8.59, humidity=55.99, cloud=0.0, wind=14.45, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:54:22', seeing=2.8, atlas_timestamp='2026-02-16T00:54:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:53:00')
2026-02-16T02:54:56.800 [DEBUG] [Thread-215849] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:54:56.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:54:56.896 [DEBUG] [Thread-215852] [transport.py] [_log()] starting thread (client mode): 0xa2d01b70
2026-02-16T02:54:56.896 [DEBUG] [Thread-215852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:54:56.911 [DEBUG] [Thread-215852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:54:56.911 [INFO] [Thread-215852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:54:56.919 [DEBUG] [Thread-215852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] client lang: <none>
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] server lang: <none>
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] kex follows: False
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] Compression: none
2026-02-16T02:54:56.920 [DEBUG] [Thread-215852] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:54:56.980 [DEBUG] [Thread-215852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:54:56.981 [DEBUG] [Thread-215852] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:54:56.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:54:56.982 [DEBUG] [Thread-215852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:54:56.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:54:57.036 [DEBUG] [Thread-215852] [transport.py] [_log()] userauth is OK
2026-02-16T02:54:57.036 [DEBUG] [Thread-215852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:54:57.036 [DEBUG] [Thread-215852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:54:57.037 [DEBUG] [Thread-215852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:54:57.037 [DEBUG] [Thread-215852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:54:57.056 [INFO] [Thread-215852] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:54:57.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:54:57.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:54:57.876 [DEBUG] [Thread-215852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:54:57.876 [DEBUG] [Thread-215852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:54:57.925 [DEBUG] [Thread-215852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:54:57.925 [DEBUG] [Thread-215852] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:54:57.934 [DEBUG] [Thread-215852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:54:57.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:54:57.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:54:57.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:54:57.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:54:57.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:54:57.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:54:57.971 [DEBUG] [Thread-215852] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:54:58.121 [DEBUG] [Thread-215854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:04.885 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:13.181 [DEBUG] [Thread-215855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:23.878 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:27.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:55:27.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:55:27.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:55:28.217 [DEBUG] [Thread-215856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 54, 57), 8.59, 56.19, 0.0, 15.9, 13.17, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:55:29.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:54:57
2026-02-16T02:55:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:55:30.332 [DEBUG] [Thread-215857] [transport.py] [_log()] starting thread (client mode): 0xa2de8c40
2026-02-16T02:55:30.333 [DEBUG] [Thread-215857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:55:30.354 [DEBUG] [Thread-215857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:55:30.354 [INFO] [Thread-215857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:55:30.357 [DEBUG] [Thread-215857] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] client lang: <none>
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] server lang: <none>
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] kex follows: False
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] Compression: none
2026-02-16T02:55:30.358 [DEBUG] [Thread-215857] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:55:30.378 [DEBUG] [Thread-215857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:55:30.378 [DEBUG] [Thread-215857] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:55:30.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:55:30.380 [DEBUG] [Thread-215857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:55:30.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:55:30.382 [DEBUG] [Thread-215857] [transport.py] [_log()] userauth is OK
2026-02-16T02:55:30.382 [DEBUG] [Thread-215857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:55:30.382 [DEBUG] [Thread-215857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:55:30.382 [DEBUG] [Thread-215857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:55:30.382 [DEBUG] [Thread-215857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:55:30.407 [INFO] [Thread-215857] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:55:30.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:55:31.045 [DEBUG] [Thread-215857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:55:31.045 [DEBUG] [Thread-215857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:55:31.045 [DEBUG] [Thread-215857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:55:31.085 [DEBUG] [Thread-215857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:55:31.086 [DEBUG] [Thread-215857] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:55:31.089 [DEBUG] [Thread-215857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:55:31.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:55:31.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:55:31.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:55:31.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:55:31.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:55:31.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:55:31.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:55:31.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:55:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:55:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.037946 -999.00  +13.40  15.06     60   +5.80 1 1 1 1 1     0    0 7.68 2.42 ZNESW 13.5 15.1 131.0 17.8 13.8 -22.4 13.7 -21.3 13.4 -20.1 13.7 -21.3
2026-02-16T02:55:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:55:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:55:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.037946
2026-02-16T02:55:31.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:55:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:55:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:55:31.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:55:31.117 [DEBUG] [Thread-215857] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:55:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:55:31.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:54:57', tmtdew=8.59, humidity=56.19, cloud=0.0, wind=15.9, temperature=13.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:54:57', seeing=2.48, atlas_timestamp='2026-02-16T00:54:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:53:00')
2026-02-16T02:55:31.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:55:31.214 [DEBUG] [Thread-215860] [transport.py] [_log()] starting thread (client mode): 0xa2de9870
2026-02-16T02:55:31.214 [DEBUG] [Thread-215860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:55:31.229 [DEBUG] [Thread-215860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:55:31.229 [INFO] [Thread-215860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:55:31.238 [DEBUG] [Thread-215860] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] client lang: <none>
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] server lang: <none>
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] kex follows: False
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:55:31.239 [DEBUG] [Thread-215860] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:55:31.240 [DEBUG] [Thread-215860] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:55:31.240 [DEBUG] [Thread-215860] [transport.py] [_log()] Compression: none
2026-02-16T02:55:31.240 [DEBUG] [Thread-215860] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:55:31.296 [DEBUG] [Thread-215860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:55:31.296 [DEBUG] [Thread-215860] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:55:31.297 [DEBUG] [Thread-215860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:55:31.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:55:31.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:55:31.356 [DEBUG] [Thread-215860] [transport.py] [_log()] userauth is OK
2026-02-16T02:55:31.356 [DEBUG] [Thread-215860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:55:31.356 [DEBUG] [Thread-215860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:55:31.356 [DEBUG] [Thread-215860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:55:31.357 [DEBUG] [Thread-215860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:55:31.375 [INFO] [Thread-215860] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:55:31.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:55:31.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:55:32.187 [DEBUG] [Thread-215860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:55:32.187 [DEBUG] [Thread-215860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:55:32.235 [DEBUG] [Thread-215860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:55:32.235 [DEBUG] [Thread-215860] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:55:32.244 [DEBUG] [Thread-215860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:55:32.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:55:32.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:55:32.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:55:32.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:55:32.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:55:32.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:55:32.277 [DEBUG] [Thread-215860] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:55:42.842 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:43.255 [DEBUG] [Thread-215862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:46.344 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:46.345 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:48.291 [DEBUG] [Thread-215863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:55:58.314 [DEBUG] [Thread-215864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:01.678 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:02.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:56:02.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:56:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:56:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 55, 32), 8.54, 56.37, 0.0, 16.16, 13.15, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:56:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:55:32
2026-02-16T02:56:04.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:56:04.797 [DEBUG] [Thread-215865] [transport.py] [_log()] starting thread (client mode): 0xa2d86bc0
2026-02-16T02:56:04.797 [DEBUG] [Thread-215865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:56:04.816 [DEBUG] [Thread-215865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:56:04.816 [INFO] [Thread-215865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] client lang: <none>
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] server lang: <none>
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] kex follows: False
2026-02-16T02:56:04.818 [DEBUG] [Thread-215865] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:56:04.819 [DEBUG] [Thread-215865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:56:04.819 [DEBUG] [Thread-215865] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:56:04.819 [DEBUG] [Thread-215865] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:56:04.819 [DEBUG] [Thread-215865] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:56:04.819 [DEBUG] [Thread-215865] [transport.py] [_log()] Compression: none
2026-02-16T02:56:04.819 [DEBUG] [Thread-215865] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:56:04.835 [DEBUG] [Thread-215865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:56:04.835 [DEBUG] [Thread-215865] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:56:04.836 [DEBUG] [Thread-215865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:56:04.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:56:04.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:56:04.838 [DEBUG] [Thread-215865] [transport.py] [_log()] userauth is OK
2026-02-16T02:56:04.838 [DEBUG] [Thread-215865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:56:04.838 [DEBUG] [Thread-215865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:56:04.838 [DEBUG] [Thread-215865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:56:04.839 [DEBUG] [Thread-215865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:56:04.863 [INFO] [Thread-215865] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:56:04.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:56:05.498 [DEBUG] [Thread-215865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:56:05.499 [DEBUG] [Thread-215865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:56:05.499 [DEBUG] [Thread-215865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:56:05.539 [DEBUG] [Thread-215865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:56:05.540 [DEBUG] [Thread-215865] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:56:05.543 [DEBUG] [Thread-215865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:56:05.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:56:05.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:56:05.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:56:05.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:56:05.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:56:05.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:56:05.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:56:05.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:56:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:56:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.038293 -999.00  +13.30  12.57     60   +5.80 1 1 1 1 1     0    0 7.68 3.38 ZNESW 12.2 12.6 125.2 16.2 13.8 -22.4 13.7 -21.3 13.4 -20.2 13.7 -21.3
2026-02-16T02:56:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:56:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:56:05.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.038293
2026-02-16T02:56:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:56:05.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:56:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:56:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:56:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:56:05.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:55:32', tmtdew=8.54, humidity=56.37, cloud=0.0, wind=16.16, temperature=13.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:55:32', seeing=2.23, atlas_timestamp='2026-02-16T00:55:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:53:00')
2026-02-16T02:56:05.571 [DEBUG] [Thread-215865] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:56:05.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:56:05.667 [DEBUG] [Thread-215868] [transport.py] [_log()] starting thread (client mode): 0xa57b1b70
2026-02-16T02:56:05.667 [DEBUG] [Thread-215868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:56:05.682 [DEBUG] [Thread-215868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:56:05.682 [INFO] [Thread-215868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:05.691 [DEBUG] [Thread-215868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] client lang: <none>
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] server lang: <none>
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] kex follows: False
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] Compression: none
2026-02-16T02:56:05.692 [DEBUG] [Thread-215868] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:56:05.751 [DEBUG] [Thread-215868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:56:05.752 [DEBUG] [Thread-215868] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:56:05.752 [DEBUG] [Thread-215868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:56:05.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:56:05.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:56:05.808 [DEBUG] [Thread-215868] [transport.py] [_log()] userauth is OK
2026-02-16T02:56:05.808 [DEBUG] [Thread-215868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:56:05.808 [DEBUG] [Thread-215868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:56:05.808 [DEBUG] [Thread-215868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:56:05.809 [DEBUG] [Thread-215868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:56:05.829 [INFO] [Thread-215868] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:56:05.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:56:05.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:56:06.650 [DEBUG] [Thread-215868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:56:06.651 [DEBUG] [Thread-215868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:56:06.698 [DEBUG] [Thread-215868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:56:06.698 [DEBUG] [Thread-215868] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:56:06.707 [DEBUG] [Thread-215868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:56:06.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:56:06.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:56:06.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:56:06.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:56:06.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:56:06.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:56:06.741 [DEBUG] [Thread-215868] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:56:13.349 [DEBUG] [Thread-215870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:20.392 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:28.396 [DEBUG] [Thread-215871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:36.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:56:36.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:56:36.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:56:39.052 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 56, 7), 8.52, 56.47, 0.0, 16.2, 13.19, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:56:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:56:07
2026-02-16T02:56:39.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:56:39.780 [DEBUG] [Thread-215872] [transport.py] [_log()] starting thread (client mode): 0xa2d84640
2026-02-16T02:56:39.781 [DEBUG] [Thread-215872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:56:39.800 [DEBUG] [Thread-215872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:56:39.800 [INFO] [Thread-215872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:56:39.803 [DEBUG] [Thread-215872] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:56:39.803 [DEBUG] [Thread-215872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:56:39.803 [DEBUG] [Thread-215872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:56:39.803 [DEBUG] [Thread-215872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] client lang: <none>
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] server lang: <none>
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] kex follows: False
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] Compression: none
2026-02-16T02:56:39.804 [DEBUG] [Thread-215872] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:56:39.821 [DEBUG] [Thread-215872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:56:39.821 [DEBUG] [Thread-215872] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:56:39.822 [DEBUG] [Thread-215872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:56:39.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:56:39.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:56:39.824 [DEBUG] [Thread-215872] [transport.py] [_log()] userauth is OK
2026-02-16T02:56:39.824 [DEBUG] [Thread-215872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:56:39.824 [DEBUG] [Thread-215872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:56:39.824 [DEBUG] [Thread-215872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:56:39.825 [DEBUG] [Thread-215872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:56:39.856 [INFO] [Thread-215872] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:56:39.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:56:40.501 [DEBUG] [Thread-215872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:56:40.501 [DEBUG] [Thread-215872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:56:40.502 [DEBUG] [Thread-215872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:56:40.542 [DEBUG] [Thread-215872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:56:40.543 [DEBUG] [Thread-215872] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:56:40.546 [DEBUG] [Thread-215872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:56:40.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:56:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:56:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:56:40.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:56:40.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:56:40.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:56:40.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:56:40.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:56:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:56:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.038988 -999.00  +13.30  11.97     59   +5.60 1 1 1 1 1     0    0 7.84 5.94 ZNESW 11.5 12.0 123.0 12.8 13.8 -22.2 13.7 -21.2 13.4 -20.0 13.7 -21.2
2026-02-16T02:56:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:56:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:56:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.038988
2026-02-16T02:56:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:56:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:56:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:56:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:56:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:56:40.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:56:07', tmtdew=8.52, humidity=56.47, cloud=0.0, wind=16.2, temperature=13.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:56:08', seeing=2.16, atlas_timestamp='2026-02-16T00:56:08.563', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:53:00')
2026-02-16T02:56:40.574 [DEBUG] [Thread-215872] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:56:40.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:56:40.671 [DEBUG] [Thread-215875] [transport.py] [_log()] starting thread (client mode): 0xa2d842b0
2026-02-16T02:56:40.671 [DEBUG] [Thread-215875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:56:40.685 [DEBUG] [Thread-215875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:56:40.685 [INFO] [Thread-215875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:56:40.693 [DEBUG] [Thread-215875] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:56:40.693 [DEBUG] [Thread-215875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:56:40.693 [DEBUG] [Thread-215875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:56:40.693 [DEBUG] [Thread-215875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:40.693 [DEBUG] [Thread-215875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] client lang: <none>
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] server lang: <none>
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] kex follows: False
2026-02-16T02:56:40.694 [DEBUG] [Thread-215875] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:56:40.695 [DEBUG] [Thread-215875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:56:40.695 [DEBUG] [Thread-215875] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:56:40.695 [DEBUG] [Thread-215875] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:56:40.695 [DEBUG] [Thread-215875] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:56:40.695 [DEBUG] [Thread-215875] [transport.py] [_log()] Compression: none
2026-02-16T02:56:40.695 [DEBUG] [Thread-215875] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:56:40.760 [DEBUG] [Thread-215875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:56:40.761 [DEBUG] [Thread-215875] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:56:40.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:56:40.762 [DEBUG] [Thread-215875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:56:40.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:56:40.819 [DEBUG] [Thread-215875] [transport.py] [_log()] userauth is OK
2026-02-16T02:56:40.820 [DEBUG] [Thread-215875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:56:40.820 [DEBUG] [Thread-215875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:56:40.820 [DEBUG] [Thread-215875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:56:40.820 [DEBUG] [Thread-215875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:56:40.839 [INFO] [Thread-215875] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:56:40.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:56:40.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:56:41.669 [DEBUG] [Thread-215875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:56:41.669 [DEBUG] [Thread-215875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:56:41.717 [DEBUG] [Thread-215875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:56:41.718 [DEBUG] [Thread-215875] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:56:41.727 [DEBUG] [Thread-215875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:56:41.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:56:41.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:56: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
2026-02-16T02:56:41.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:56:41.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:56:41.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:56:41.764 [DEBUG] [Thread-215875] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:56:43.439 [DEBUG] [Thread-215877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:46.544 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:46.545 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:48.374 [DEBUG] [Thread-215878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:57.701 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:56:58.491 [DEBUG] [Thread-215879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:11.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:57:11.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:57:11.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:57:13.527 [DEBUG] [Thread-215880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 56, 43), 8.59, 55.87, 0.0, 15.42, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:57:13.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:56:43
2026-02-16T02:57:14.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:57:14.178 [DEBUG] [Thread-215881] [transport.py] [_log()] starting thread (client mode): 0xa2d11510
2026-02-16T02:57:14.178 [DEBUG] [Thread-215881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:57:14.198 [DEBUG] [Thread-215881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:57:14.199 [INFO] [Thread-215881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] client lang: <none>
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] server lang: <none>
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] kex follows: False
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] Compression: none
2026-02-16T02:57:14.202 [DEBUG] [Thread-215881] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:57:14.215 [DEBUG] [Thread-215881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:57:14.215 [DEBUG] [Thread-215881] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:57:14.216 [DEBUG] [Thread-215881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:57:14.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:57:14.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:57:14.217 [DEBUG] [Thread-215881] [transport.py] [_log()] userauth is OK
2026-02-16T02:57:14.217 [DEBUG] [Thread-215881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:57:14.217 [DEBUG] [Thread-215881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:57:14.217 [DEBUG] [Thread-215881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:57:14.217 [DEBUG] [Thread-215881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:57:14.237 [INFO] [Thread-215881] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:57:14.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:57:15.034 [DEBUG] [Thread-215881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:57:15.034 [DEBUG] [Thread-215881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:57:15.035 [DEBUG] [Thread-215881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:57:15.075 [DEBUG] [Thread-215881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:57:15.075 [DEBUG] [Thread-215881] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:57:15.078 [DEBUG] [Thread-215881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:57:15.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:57:15.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:57:15.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:57:15.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:57:15.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:57:15.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:57:15.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:57:15.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:57:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:57:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.039335 -999.00  +13.30  13.59     59   +5.60 1 1 1 1 1     0    0 7.64 6.31 ZNESW 14.1 13.6 134.8 17.2 13.8 -22.2 13.7 -21.2 13.4 -20.1 13.8 -21.3
2026-02-16T02:57:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:57:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:57:15.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.039335
2026-02-16T02:57:15.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:57:15.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:57:15.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:57:15.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:57:15.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:57:15.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:56:43', tmtdew=8.59, humidity=55.87, cloud=0.0, wind=15.42, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:56:43', seeing=2.66, atlas_timestamp='2026-02-16T00:56:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:53:00')
2026-02-16T02:57:15.104 [DEBUG] [Thread-215881] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:57:15.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:57:15.203 [DEBUG] [Thread-215884] [transport.py] [_log()] starting thread (client mode): 0xa2de9630
2026-02-16T02:57:15.204 [DEBUG] [Thread-215884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:57:15.218 [DEBUG] [Thread-215884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:57:15.218 [INFO] [Thread-215884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:57:15.226 [DEBUG] [Thread-215884] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:57:15.226 [DEBUG] [Thread-215884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] client lang: <none>
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] server lang: <none>
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] kex follows: False
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:57:15.227 [DEBUG] [Thread-215884] [transport.py] [_log()] Compression: none
2026-02-16T02:57:15.228 [DEBUG] [Thread-215884] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:57:15.285 [DEBUG] [Thread-215884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:57:15.286 [DEBUG] [Thread-215884] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:57:15.286 [DEBUG] [Thread-215884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:57:15.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:57:15.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:57:15.342 [DEBUG] [Thread-215884] [transport.py] [_log()] userauth is OK
2026-02-16T02:57:15.343 [DEBUG] [Thread-215884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:57:15.343 [DEBUG] [Thread-215884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:57:15.343 [DEBUG] [Thread-215884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:57:15.343 [DEBUG] [Thread-215884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:57:15.361 [INFO] [Thread-215884] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:57:15.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:57:15.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:57:16.162 [DEBUG] [Thread-215884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:57:16.162 [DEBUG] [Thread-215884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:57:16.210 [DEBUG] [Thread-215884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:57:16.210 [DEBUG] [Thread-215884] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:57:16.219 [DEBUG] [Thread-215884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:57:16.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:57:16.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:57:16.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:57:16.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:57:16.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:57:16.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:57:16.254 [DEBUG] [Thread-215884] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:57:16.598 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:28.563 [DEBUG] [Thread-215886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:35.594 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:43.613 [DEBUG] [Thread-215887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:46.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:57:46.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:57:46.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:57:46.744 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:46.745 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:48.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 57, 19), 8.68, 55.54, 0.0, 15.97, 13.2, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:57:48.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:57:19
2026-02-16T02:57:48.426 [DEBUG] [Thread-215888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:48.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:57:48.627 [DEBUG] [Thread-215889] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-16T02:57:48.627 [DEBUG] [Thread-215889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:57:48.648 [DEBUG] [Thread-215889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:57:48.648 [INFO] [Thread-215889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] client lang: <none>
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] server lang: <none>
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] kex follows: False
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] Compression: none
2026-02-16T02:57:48.652 [DEBUG] [Thread-215889] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:57:48.668 [DEBUG] [Thread-215889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:57:48.668 [DEBUG] [Thread-215889] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:57:48.668 [DEBUG] [Thread-215889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:57:48.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:57:48.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:57:48.669 [DEBUG] [Thread-215889] [transport.py] [_log()] userauth is OK
2026-02-16T02:57:48.669 [DEBUG] [Thread-215889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:57:48.669 [DEBUG] [Thread-215889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:57:48.669 [DEBUG] [Thread-215889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:57:48.669 [DEBUG] [Thread-215889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:57:48.679 [INFO] [Thread-215889] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:57:48.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:57:49.322 [DEBUG] [Thread-215889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:57:49.322 [DEBUG] [Thread-215889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:57:49.323 [DEBUG] [Thread-215889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:57:49.363 [DEBUG] [Thread-215889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:57:49.363 [DEBUG] [Thread-215889] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:57:49.367 [DEBUG] [Thread-215889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:57:49.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:57:49.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:57:49.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:57:49.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:57:49.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:57:49.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:57:49.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:57:49.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:57:49.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:57:49.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.039682 -999.00  +13.40  14.31     59   +5.60 1 1 1 1 1     0    0 7.90 7.18 ZNESW 14.8 14.3 124.4 17.2 13.8 -22.1 13.7 -21.3 13.4 -20.0 13.7 -21.2
2026-02-16T02:57:49.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:57:49.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:57:49.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.039682
2026-02-16T02:57:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:57:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:57:49.393 [DEBUG] [Thread-215889] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:57:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:57:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:57:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:57:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:57:19', tmtdew=8.68, humidity=55.54, cloud=0.0, wind=15.97, temperature=13.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:57:19', seeing=2.46, atlas_timestamp='2026-02-16T00:57:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.004749999999999588, 0.024250000000000327, 0.034250000000000114, -0.06050000000000111, -0.020500000000000185, 0.03825000000000145, 0.02099999999999902, 0.015249999999999986, 0.0470000000000006, -0.038000000000000256, -0.019249999999999545, -0.058000000000001606, 0.0129999999999999, 0.060249999999999915, -0.0010000000000012221, -0.011000000000001009, 0.03824999999999967, -0.025500000000000966, 0.019000000000000128, -0.004750000000001364, 0.023999999999999133, 0.048749999999998295, 0.056250000000000355, 0.042749999999999844, 0.026999999999999247, -0.03599999999999959, 0.0337499999999995, -0.0015000000000000568, 0.06299999999999883, 0.06300000000000061, 0.09000000000000163, 0.013000000000001677, -0.013750000000001705], zp_timestamp='2026-02-16T00:53:00')
2026-02-16T02:57:49.471 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:57:49.485 [DEBUG] [Thread-215892] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1f0
2026-02-16T02:57:49.485 [DEBUG] [Thread-215892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:57:49.500 [DEBUG] [Thread-215892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:57:49.501 [INFO] [Thread-215892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:57:49.508 [DEBUG] [Thread-215892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] client lang: <none>
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] server lang: <none>
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] kex follows: False
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] Compression: none
2026-02-16T02:57:49.509 [DEBUG] [Thread-215892] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:57:49.570 [DEBUG] [Thread-215892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:57:49.570 [DEBUG] [Thread-215892] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:57:49.571 [DEBUG] [Thread-215892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:57:49.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:57:49.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:57:49.626 [DEBUG] [Thread-215892] [transport.py] [_log()] userauth is OK
2026-02-16T02:57:49.626 [DEBUG] [Thread-215892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:57:49.627 [DEBUG] [Thread-215892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:57:49.627 [DEBUG] [Thread-215892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:57:49.627 [DEBUG] [Thread-215892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:57:49.646 [INFO] [Thread-215892] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:57:49.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:57:49.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:57:50.469 [DEBUG] [Thread-215892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:57:50.470 [DEBUG] [Thread-215892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:57:50.517 [DEBUG] [Thread-215892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:57:50.517 [DEBUG] [Thread-215892] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:57:50.526 [DEBUG] [Thread-215892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:57:50.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:57:50.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:57:50.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:57:50.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:57:50.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:57:50.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:57:50.560 [DEBUG] [Thread-215892] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:57:54.542 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:57:58.646 [DEBUG] [Thread-215894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:13.228 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:13.702 [DEBUG] [Thread-215895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:20.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:58:20.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:58:20.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:58:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 57, 54), 8.77, 55.19, 0.0, 16.45, 13.29, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:58:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:57:54
2026-02-16T02:58:23.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:58:23.673 [DEBUG] [Thread-215896] [transport.py] [_log()] starting thread (client mode): 0xa2de9ed0
2026-02-16T02:58:23.673 [DEBUG] [Thread-215896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:58:23.694 [DEBUG] [Thread-215896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:58:23.694 [INFO] [Thread-215896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:58:23.697 [DEBUG] [Thread-215896] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:58:23.697 [DEBUG] [Thread-215896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:58:23.697 [DEBUG] [Thread-215896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] client lang: <none>
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] server lang: <none>
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] kex follows: False
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] Compression: none
2026-02-16T02:58:23.698 [DEBUG] [Thread-215896] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:58:23.716 [DEBUG] [Thread-215896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:58:23.716 [DEBUG] [Thread-215896] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:58:23.717 [DEBUG] [Thread-215896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:58:23.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:58:23.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:58:23.719 [DEBUG] [Thread-215896] [transport.py] [_log()] userauth is OK
2026-02-16T02:58:23.719 [DEBUG] [Thread-215896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:58:23.719 [DEBUG] [Thread-215896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:58:23.720 [DEBUG] [Thread-215896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:58:23.720 [DEBUG] [Thread-215896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:58:23.744 [INFO] [Thread-215896] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:58:23.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:58:24.394 [DEBUG] [Thread-215896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:58:24.394 [DEBUG] [Thread-215896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:58:24.395 [DEBUG] [Thread-215896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:58:24.436 [DEBUG] [Thread-215896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:58:24.436 [DEBUG] [Thread-215896] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:58:24.439 [DEBUG] [Thread-215896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:58:24.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:58:24.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:58:24.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:58:24.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:58:24.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:58:24.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:58:24.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:58:24.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:58:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:58:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.040029 -999.00  +13.50  12.11     59   +5.60 1 1 1 1 1     0    0 7.86 8.84 ZNESW 13.1 12.1 127.6 15.8 13.8 -22.2 13.8 -21.3 13.4 -20.0 13.8 -21.2
2026-02-16T02:58:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:58:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:58:24.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.040029
2026-02-16T02:58:24.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:58:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:58:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:58:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:58:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:58:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:57:54', tmtdew=8.77, humidity=55.19, cloud=0.0, wind=16.45, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:57:55', seeing=2.82, atlas_timestamp='2026-02-16T00:57:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.007250000000000867, 0.0032500000000013074, -0.08750000000000036, -0.02149999999999963, 0.05525000000000091, 0.07399999999999984, 0.005250000000000199, 0.026499999999998636, -0.01950000000000074, -0.02674999999999983, -0.054999999999999716, 0.018000000000000682, 0.05524999999999913, 0.054499999999999105, 0.004999999999999005, 0.02624999999999922, -0.007500000000000284, 0.025999999999998025, 0.010249999999999204, 0.03999999999999915, 0.03924999999999912, 0.012750000000000483, 0.03175000000000061, 0.026999999999999247, -0.0389999999999997, 0.051750000000000185, 0.0005000000000006111, 0.04400000000000048, 0.0860000000000003, 0.1095000000000006, 0.03900000000000148, -0.004250000000000753], zp_timestamp='2026-02-16T00:57:00')
2026-02-16T02:58:24.467 [DEBUG] [Thread-215896] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:58:24.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:58:24.562 [DEBUG] [Thread-215899] [transport.py] [_log()] starting thread (client mode): 0xa2de86d0
2026-02-16T02:58:24.562 [DEBUG] [Thread-215899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:58:24.576 [DEBUG] [Thread-215899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:58:24.577 [INFO] [Thread-215899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:58:24.584 [DEBUG] [Thread-215899] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] client lang: <none>
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] server lang: <none>
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] kex follows: False
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] Compression: none
2026-02-16T02:58:24.585 [DEBUG] [Thread-215899] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:58:24.641 [DEBUG] [Thread-215899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:58:24.642 [DEBUG] [Thread-215899] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:58:24.642 [DEBUG] [Thread-215899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:58:24.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:58:24.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:58:24.701 [DEBUG] [Thread-215899] [transport.py] [_log()] userauth is OK
2026-02-16T02:58:24.702 [DEBUG] [Thread-215899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:58:24.702 [DEBUG] [Thread-215899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:58:24.702 [DEBUG] [Thread-215899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:58:24.702 [DEBUG] [Thread-215899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:58:24.720 [INFO] [Thread-215899] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:58:24.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:58:24.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:58:25.539 [DEBUG] [Thread-215899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:58:25.539 [DEBUG] [Thread-215899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:58:25.587 [DEBUG] [Thread-215899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:58:25.587 [DEBUG] [Thread-215899] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:58:25.596 [DEBUG] [Thread-215899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:58:25.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:58:25.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:58:25.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:58:25.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:58:25.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:58:25.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:58:25.630 [DEBUG] [Thread-215899] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:58:28.737 [DEBUG] [Thread-215901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:31.876 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:43.801 [DEBUG] [Thread-215902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:46.944 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:46.945 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:48.493 [DEBUG] [Thread-215903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:50.524 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:55.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:58:55.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:58:55.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:58:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 58, 29), 8.8, 55.09, 0.0, 16.55, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:58:57.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:58:29
2026-02-16T02:58:58.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:58:58.221 [DEBUG] [Thread-215904] [transport.py] [_log()] starting thread (client mode): 0xa57b0c70
2026-02-16T02:58:58.221 [DEBUG] [Thread-215904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:58:58.241 [DEBUG] [Thread-215904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:58:58.241 [INFO] [Thread-215904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:58:58.244 [DEBUG] [Thread-215904] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:58:58.244 [DEBUG] [Thread-215904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:58:58.244 [DEBUG] [Thread-215904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:58:58.244 [DEBUG] [Thread-215904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] client lang: <none>
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] server lang: <none>
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] kex follows: False
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:58:58.245 [DEBUG] [Thread-215904] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:58:58.246 [DEBUG] [Thread-215904] [transport.py] [_log()] Compression: none
2026-02-16T02:58:58.246 [DEBUG] [Thread-215904] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:58:58.264 [DEBUG] [Thread-215904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:58:58.264 [DEBUG] [Thread-215904] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:58:58.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:58:58.265 [DEBUG] [Thread-215904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:58:58.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:58:58.276 [DEBUG] [Thread-215904] [transport.py] [_log()] userauth is OK
2026-02-16T02:58:58.276 [DEBUG] [Thread-215904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:58:58.277 [DEBUG] [Thread-215904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:58:58.277 [DEBUG] [Thread-215904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:58:58.277 [DEBUG] [Thread-215904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:58:58.301 [INFO] [Thread-215904] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:58:58.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:58:58.837 [DEBUG] [Thread-215906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:58:58.926 [DEBUG] [Thread-215904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:58:58.927 [DEBUG] [Thread-215904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:58:58.927 [DEBUG] [Thread-215904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:58:58.967 [DEBUG] [Thread-215904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:58:58.968 [DEBUG] [Thread-215904] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:58:58.971 [DEBUG] [Thread-215904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:58:58.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:58:58.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:58:58.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:58:58.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:58:58.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:58:58.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:58:58.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:58:58.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:58:58.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:58:58.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.040377 -999.00  +13.40  13.32     59   +5.70 1 1 1 1 1     0    0 8.01 9.77 ZNESW 13.2 13.3 135.2 14.5 13.8 -22.2 13.8 -21.2 13.4 -20.0 13.8 -21.3
2026-02-16T02:58:58.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:58:58.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:58:58.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.040377
2026-02-16T02:58:58.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:58:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:58:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:58:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:58:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:58:58.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:58:29', tmtdew=8.8, humidity=55.09, cloud=0.0, wind=16.55, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:58:30', seeing=2.99, atlas_timestamp='2026-02-16T00:58:08.573', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.007250000000000867, 0.0032500000000013074, -0.08750000000000036, -0.02149999999999963, 0.05525000000000091, 0.07399999999999984, 0.005250000000000199, 0.026499999999998636, -0.01950000000000074, -0.02674999999999983, -0.054999999999999716, 0.018000000000000682, 0.05524999999999913, 0.054499999999999105, 0.004999999999999005, 0.02624999999999922, -0.007500000000000284, 0.025999999999998025, 0.010249999999999204, 0.03999999999999915, 0.03924999999999912, 0.012750000000000483, 0.03175000000000061, 0.026999999999999247, -0.0389999999999997, 0.051750000000000185, 0.0005000000000006111, 0.04400000000000048, 0.0860000000000003, 0.1095000000000006, 0.03900000000000148, -0.004250000000000753], zp_timestamp='2026-02-16T00:57:00')
2026-02-16T02:58:59.000 [DEBUG] [Thread-215904] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:58:59.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:58:59.092 [DEBUG] [Thread-215908] [transport.py] [_log()] starting thread (client mode): 0xa81d5db0
2026-02-16T02:58:59.092 [DEBUG] [Thread-215908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:58:59.107 [DEBUG] [Thread-215908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T02:58:59.107 [INFO] [Thread-215908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T02:58:59.114 [DEBUG] [Thread-215908] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] client lang: <none>
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] server lang: <none>
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] kex follows: False
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] Compression: none
2026-02-16T02:58:59.115 [DEBUG] [Thread-215908] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:58:59.173 [DEBUG] [Thread-215908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:58:59.173 [DEBUG] [Thread-215908] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:58:59.174 [DEBUG] [Thread-215908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T02:58:59.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T02:58:59.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:58:59.229 [DEBUG] [Thread-215908] [transport.py] [_log()] userauth is OK
2026-02-16T02:58:59.230 [DEBUG] [Thread-215908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:58:59.230 [DEBUG] [Thread-215908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:58:59.230 [DEBUG] [Thread-215908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T02:58:59.230 [DEBUG] [Thread-215908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:58:59.250 [INFO] [Thread-215908] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:58:59.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T02:58:59.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:59:00.091 [DEBUG] [Thread-215908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:59:00.092 [DEBUG] [Thread-215908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:59:00.139 [DEBUG] [Thread-215908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:59:00.139 [DEBUG] [Thread-215908] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:59:00.148 [DEBUG] [Thread-215908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:59:00.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:59:00.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T02:59:00.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T02:59:00.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:59:00.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:59:00.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:59:00.180 [DEBUG] [Thread-215908] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:59:09.470 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:13.875 [DEBUG] [Thread-215910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:28.442 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:28.931 [DEBUG] [Thread-215911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:30.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T02:59:30.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T02:59:30.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T02:59:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 2, 59, 5), 8.83, 54.96, 0.0, 16.57, 13.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T02:59:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 02:59:05
2026-02-16T02:59:32.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T02:59:32.680 [DEBUG] [Thread-215912] [transport.py] [_log()] starting thread (client mode): 0xa57b1120
2026-02-16T02:59:32.680 [DEBUG] [Thread-215912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T02:59:32.700 [DEBUG] [Thread-215912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T02:59:32.700 [INFO] [Thread-215912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:59:32.703 [DEBUG] [Thread-215912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] client lang: <none>
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] server lang: <none>
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] kex follows: False
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] Compression: none
2026-02-16T02:59:32.704 [DEBUG] [Thread-215912] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T02:59:32.723 [DEBUG] [Thread-215912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T02:59:32.724 [DEBUG] [Thread-215912] [transport.py] [_log()] Switch to new keys ...
2026-02-16T02:59:32.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T02:59:32.725 [DEBUG] [Thread-215912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T02:59:32.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T02:59:32.727 [DEBUG] [Thread-215912] [transport.py] [_log()] userauth is OK
2026-02-16T02:59:32.727 [DEBUG] [Thread-215912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T02:59:32.728 [DEBUG] [Thread-215912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T02:59:32.728 [DEBUG] [Thread-215912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T02:59:32.728 [DEBUG] [Thread-215912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T02:59:32.762 [INFO] [Thread-215912] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T02:59:32.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T02:59:33.403 [DEBUG] [Thread-215912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T02:59:33.404 [DEBUG] [Thread-215912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T02:59:33.404 [DEBUG] [Thread-215912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T02:59:33.444 [DEBUG] [Thread-215912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T02:59:33.445 [DEBUG] [Thread-215912] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T02:59:33.448 [DEBUG] [Thread-215912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T02:59:33.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T02:59:33.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T02:59:33.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T02:59:33.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T02:59:33.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T02:59:33.470 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T02:59:33.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T02:59:33.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T02:59:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T02:59:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.040724 -999.00  +13.40   9.58     59   +5.70 1 1 1 1 1     0    0 8.00 10.17 ZNESW 12.1 9.6 125.0 13.4 13.8 -22.1 13.7 -21.2 13.4 -20.0 13.8 -21.2
2026-02-16T02:59:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T02:59:33.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T02:59:33.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.040724
2026-02-16T02:59:33.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T02:59:33.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T02:59:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T02:59:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T02:59:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T02:59:33.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T02:59:05', tmtdew=8.83, humidity=54.96, cloud=0.0, wind=16.57, temperature=13.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T02:59:05', seeing=3.49, atlas_timestamp='2026-02-16T00:58:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.007250000000000867, 0.0032500000000013074, -0.08750000000000036, -0.02149999999999963, 0.05525000000000091, 0.07399999999999984, 0.005250000000000199, 0.026499999999998636, -0.01950000000000074, -0.02674999999999983, -0.054999999999999716, 0.018000000000000682, 0.05524999999999913, 0.054499999999999105, 0.004999999999999005, 0.02624999999999922, -0.007500000000000284, 0.025999999999998025, 0.010249999999999204, 0.03999999999999915, 0.03924999999999912, 0.012750000000000483, 0.03175000000000061, 0.026999999999999247, -0.0389999999999997, 0.051750000000000185, 0.0005000000000006111, 0.04400000000000048, 0.0860000000000003, 0.1095000000000006, 0.03900000000000148, -0.004250000000000753], zp_timestamp='2026-02-16T00:57:00')
2026-02-16T02:59:33.473 [DEBUG] [Thread-215912] [transport.py] [_log()] EOF in transport thread
2026-02-16T02:59:33.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T02:59:43.966 [DEBUG] [Thread-215915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:47.146 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:47.148 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:47.379 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:48.547 [DEBUG] [Thread-215916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T02:59:59.015 [DEBUG] [Thread-215917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:06.162 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:14.046 [DEBUG] [Thread-215918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:24.917 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:29.080 [DEBUG] [Thread-215919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:43.746 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:44.116 [DEBUG] [Thread-215920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:47.350 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:47.352 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:48.616 [DEBUG] [Thread-215921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:00:59.152 [DEBUG] [Thread-215922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:02.392 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:14.192 [DEBUG] [Thread-215923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:21.052 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:29.228 [DEBUG] [Thread-215924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:39.796 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:44.269 [DEBUG] [Thread-215925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:47.552 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:47.553 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:48.669 [DEBUG] [Thread-215926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:48.984 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-16T03:01:58.648 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:01:59.306 [DEBUG] [Thread-215927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:14.340 [DEBUG] [Thread-215928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:17.321 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:19.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:02:19.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:02:19.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:02:21.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 2, 4), 9.01, 54.18, 0.0, 16.55, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:02:21.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:02:04
2026-02-16T03:02:21.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:02:21.664 [DEBUG] [Thread-215929] [transport.py] [_log()] starting thread (client mode): 0xa2dea290
2026-02-16T03:02:21.664 [DEBUG] [Thread-215929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:02:21.684 [DEBUG] [Thread-215929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:02:21.684 [INFO] [Thread-215929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:02:21.687 [DEBUG] [Thread-215929] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:02:21.687 [DEBUG] [Thread-215929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:02:21.687 [DEBUG] [Thread-215929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] client lang: <none>
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] server lang: <none>
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] kex follows: False
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] Compression: none
2026-02-16T03:02:21.688 [DEBUG] [Thread-215929] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:02:21.705 [DEBUG] [Thread-215929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:02:21.705 [DEBUG] [Thread-215929] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:02:21.706 [DEBUG] [Thread-215929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:02:21.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:02:21.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:02:21.708 [DEBUG] [Thread-215929] [transport.py] [_log()] userauth is OK
2026-02-16T03:02:21.708 [DEBUG] [Thread-215929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:02:21.708 [DEBUG] [Thread-215929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:02:21.708 [DEBUG] [Thread-215929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:02:21.708 [DEBUG] [Thread-215929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:02:21.732 [INFO] [Thread-215929] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:02:21.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:02:22.342 [DEBUG] [Thread-215929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:02:22.342 [DEBUG] [Thread-215929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:02:22.342 [DEBUG] [Thread-215929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:02:22.383 [DEBUG] [Thread-215929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:02:22.384 [DEBUG] [Thread-215929] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:02:22.387 [DEBUG] [Thread-215929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:02:22.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:02:22.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:02:22.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:02:22.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:02:22.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:02:22.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:02:22.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:02:22.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:02:22.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:02:22.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.042807 -999.00  +13.50  12.54     58   +5.50 1 1 1 1 1     0    0 8.23 19.82 ZNESW 10.6 12.5 122.8 16.8 13.9 -22.2 13.8 -21.2 13.5 -20.2 13.8 -21.4
2026-02-16T03:02:22.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:02:22.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:02:22.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.042807
2026-02-16T03:02:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:02:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:02:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:02:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:02:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:02:22.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:02:04', tmtdew=9.01, humidity=54.18, cloud=0.0, wind=16.55, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:02:04', seeing=2.43, atlas_timestamp='2026-02-16T01:01:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.0022500000000000853, -0.012749999999998707, 0.048250000000001236, -0.034000000000000696, 0.018499999999999517, 0.030250000000000554, 0.06450000000000067, 0.01025000000000098, 0.03849999999999909, -0.012000000000000455, -0.004749999999999588, -0.06199999999999939, 0.023499999999998522, 0.09875000000000078, 0.05799999999999983, 0.03399999999999892, 0.0007500000000000284, -0.0065000000000008384, 0.0389999999999997, 0.002249999999998309, 0.034499999999997755, 0.044749999999998735, 0.02525000000000155, 0.036749999999999616, 0.04099999999999859, -0.0235000000000003, 0.051249999999999574, 0.029500000000000526, 0.06199999999999939, 0.09750000000000014, 0.12400000000000233, 0.05500000000000149, -0.02325000000000088], zp_timestamp='2026-02-16T00:59:00')
2026-02-16T03:02:22.414 [DEBUG] [Thread-215929] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:02:22.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:02:22.508 [DEBUG] [Thread-215932] [transport.py] [_log()] starting thread (client mode): 0xa2d6e470
2026-02-16T03:02:22.508 [DEBUG] [Thread-215932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:02:22.523 [DEBUG] [Thread-215932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:02:22.523 [INFO] [Thread-215932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:22.531 [DEBUG] [Thread-215932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] client lang: <none>
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] server lang: <none>
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] kex follows: False
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] Compression: none
2026-02-16T03:02:22.532 [DEBUG] [Thread-215932] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:02:22.591 [DEBUG] [Thread-215932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:02:22.592 [DEBUG] [Thread-215932] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:02:22.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:02:22.593 [DEBUG] [Thread-215932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:02:22.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:02:22.647 [DEBUG] [Thread-215932] [transport.py] [_log()] userauth is OK
2026-02-16T03:02:22.647 [DEBUG] [Thread-215932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:02:22.648 [DEBUG] [Thread-215932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:02:22.648 [DEBUG] [Thread-215932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:02:22.648 [DEBUG] [Thread-215932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:02:22.666 [INFO] [Thread-215932] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:02:22.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:02:22.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:02:23.468 [DEBUG] [Thread-215932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:02:23.468 [DEBUG] [Thread-215932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:02:23.516 [DEBUG] [Thread-215932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:02:23.516 [DEBUG] [Thread-215932] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:02:23.526 [DEBUG] [Thread-215932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:02:23.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:02:23.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:02:23.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:02:23.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:02:23.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:02:23.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:02:23.571 [DEBUG] [Thread-215932] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:02:29.374 [DEBUG] [Thread-215934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:36.001 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:44.426 [DEBUG] [Thread-215935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:47.751 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:47.753 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:48.738 [DEBUG] [Thread-215936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:53.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:02:53.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:02:53.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:02:54.700 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:02:55.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 2, 39), 9.03, 54.32, 0.0, 13.27, 13.54, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:02:55.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:02:39
2026-02-16T03:02:55.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:02:55.972 [DEBUG] [Thread-215937] [transport.py] [_log()] starting thread (client mode): 0xa2dea6b0
2026-02-16T03:02:55.972 [DEBUG] [Thread-215937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:02:55.992 [DEBUG] [Thread-215937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:02:55.993 [INFO] [Thread-215937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:02:55.995 [DEBUG] [Thread-215937] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:02:55.995 [DEBUG] [Thread-215937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:02:55.995 [DEBUG] [Thread-215937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:02:55.995 [DEBUG] [Thread-215937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:55.995 [DEBUG] [Thread-215937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] client lang: <none>
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] server lang: <none>
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] kex follows: False
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] Compression: none
2026-02-16T03:02:55.996 [DEBUG] [Thread-215937] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:02:56.016 [DEBUG] [Thread-215937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:02:56.017 [DEBUG] [Thread-215937] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:02:56.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:02:56.018 [DEBUG] [Thread-215937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:02:56.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:02:56.020 [DEBUG] [Thread-215937] [transport.py] [_log()] userauth is OK
2026-02-16T03:02:56.020 [DEBUG] [Thread-215937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:02:56.020 [DEBUG] [Thread-215937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:02:56.021 [DEBUG] [Thread-215937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:02:56.021 [DEBUG] [Thread-215937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:02:56.045 [INFO] [Thread-215937] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:02:56.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:02:56.709 [DEBUG] [Thread-215937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:02:56.709 [DEBUG] [Thread-215937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:02:56.710 [DEBUG] [Thread-215937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:02:56.750 [DEBUG] [Thread-215937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:02:56.751 [DEBUG] [Thread-215937] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:02:56.754 [DEBUG] [Thread-215937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:02:56.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:02:56.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:02:56.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:02:56.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:02:56.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:02:56.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:02:56.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:02:56.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:02:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:02:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.043154 -999.00  +13.50  14.34     58   +5.50 1 1 1 1 1     0    0 8.39 22.18 ZNESW 14.1 14.3 115.4 16.0 13.9 -22.2 13.8 -21.4 13.5 -20.2 13.8 -21.4
2026-02-16T03:02:56.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:02:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:02:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.043154
2026-02-16T03:02:56.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:02:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:02:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:02:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:02:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:02:56.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:02:39', tmtdew=9.03, humidity=54.32, cloud=0.0, wind=13.27, temperature=13.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:02:39', seeing=3.53, atlas_timestamp='2026-02-16T01:02:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.0022500000000000853, -0.012749999999998707, 0.048250000000001236, -0.034000000000000696, 0.018499999999999517, 0.030250000000000554, 0.06450000000000067, 0.01025000000000098, 0.03849999999999909, -0.012000000000000455, -0.004749999999999588, -0.06199999999999939, 0.023499999999998522, 0.09875000000000078, 0.05799999999999983, 0.03399999999999892, 0.0007500000000000284, -0.0065000000000008384, 0.0389999999999997, 0.002249999999998309, 0.034499999999997755, 0.044749999999998735, 0.02525000000000155, 0.036749999999999616, 0.04099999999999859, -0.0235000000000003, 0.051249999999999574, 0.029500000000000526, 0.06199999999999939, 0.09750000000000014, 0.12400000000000233, 0.05500000000000149, -0.02325000000000088], zp_timestamp='2026-02-16T00:59:00')
2026-02-16T03:02:56.781 [DEBUG] [Thread-215937] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:02:56.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:02:56.877 [DEBUG] [Thread-215940] [transport.py] [_log()] starting thread (client mode): 0xa57b1c30
2026-02-16T03:02:56.877 [DEBUG] [Thread-215940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:02:56.891 [DEBUG] [Thread-215940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:02:56.891 [INFO] [Thread-215940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] client lang: <none>
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] server lang: <none>
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] kex follows: False
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] Compression: none
2026-02-16T03:02:56.899 [DEBUG] [Thread-215940] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:02:56.955 [DEBUG] [Thread-215940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:02:56.956 [DEBUG] [Thread-215940] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:02:56.956 [DEBUG] [Thread-215940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:02:56.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:02:56.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:02:57.012 [DEBUG] [Thread-215940] [transport.py] [_log()] userauth is OK
2026-02-16T03:02:57.013 [DEBUG] [Thread-215940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:02:57.013 [DEBUG] [Thread-215940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:02:57.013 [DEBUG] [Thread-215940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:02:57.013 [DEBUG] [Thread-215940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:02:57.040 [INFO] [Thread-215940] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:02:57.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:02:57.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:02:57.853 [DEBUG] [Thread-215940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:02:57.853 [DEBUG] [Thread-215940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:02:57.902 [DEBUG] [Thread-215940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:02:57.902 [DEBUG] [Thread-215940] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:02:57.911 [DEBUG] [Thread-215940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:02:57.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:02:57.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:02:57.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:02:57.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:02:57.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:02:57.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:02:57.948 [DEBUG] [Thread-215940] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:02:59.463 [DEBUG] [Thread-215942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:13.360 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:14.514 [DEBUG] [Thread-215943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:27.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:03:27.946 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:03:27.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:03:29.550 [DEBUG] [Thread-215944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 3, 14), 8.92, 54.82, 0.0, 14.1, 13.29, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:03:29.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:03:14
2026-02-16T03:03:30.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:03:30.307 [DEBUG] [Thread-215945] [transport.py] [_log()] starting thread (client mode): 0xa57b10c0
2026-02-16T03:03:30.307 [DEBUG] [Thread-215945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:03:30.328 [DEBUG] [Thread-215945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:03:30.328 [INFO] [Thread-215945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:03:30.331 [DEBUG] [Thread-215945] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:03:30.331 [DEBUG] [Thread-215945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:03:30.331 [DEBUG] [Thread-215945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] client lang: <none>
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] server lang: <none>
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] kex follows: False
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:03:30.332 [DEBUG] [Thread-215945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:03:30.333 [DEBUG] [Thread-215945] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:03:30.333 [DEBUG] [Thread-215945] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:03:30.333 [DEBUG] [Thread-215945] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:03:30.333 [DEBUG] [Thread-215945] [transport.py] [_log()] Compression: none
2026-02-16T03:03:30.333 [DEBUG] [Thread-215945] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:03:30.352 [DEBUG] [Thread-215945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:03:30.353 [DEBUG] [Thread-215945] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:03:30.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:03:30.354 [DEBUG] [Thread-215945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:03:30.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:03:30.397 [DEBUG] [Thread-215945] [transport.py] [_log()] userauth is OK
2026-02-16T03:03:30.397 [DEBUG] [Thread-215945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:03:30.398 [DEBUG] [Thread-215945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:03:30.398 [DEBUG] [Thread-215945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:03:30.398 [DEBUG] [Thread-215945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:03:30.434 [INFO] [Thread-215945] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:03:30.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:03:31.059 [DEBUG] [Thread-215945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:03:31.059 [DEBUG] [Thread-215945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:03:31.060 [DEBUG] [Thread-215945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:03:31.100 [DEBUG] [Thread-215945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:03:31.101 [DEBUG] [Thread-215945] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:03:31.104 [DEBUG] [Thread-215945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:03:31.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:03:31.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:03:31.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:03:31.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:03:31.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:03:31.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:03:31.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:03:31.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:03:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:03:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.043849 -999.00  +13.50  14.41     58   +5.40 1 1 1 1 1     0    0 8.44 24.19 ZNESW 11.8 14.4 128.0 15.9 13.9 -21.6 13.8 -21.0 13.5 -19.6 13.8 -20.7
2026-02-16T03:03:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:03:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:03:31.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.043849
2026-02-16T03:03:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:03:31.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:03:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:03:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:03:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:03:31.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:03:14', tmtdew=8.92, humidity=54.82, cloud=0.0, wind=14.1, temperature=13.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:03:14', seeing=3.99, atlas_timestamp='2026-02-16T01:03:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.0022500000000000853, -0.012749999999998707, 0.048250000000001236, -0.034000000000000696, 0.018499999999999517, 0.030250000000000554, 0.06450000000000067, 0.01025000000000098, 0.03849999999999909, -0.012000000000000455, -0.004749999999999588, -0.06199999999999939, 0.023499999999998522, 0.09875000000000078, 0.05799999999999983, 0.03399999999999892, 0.0007500000000000284, -0.0065000000000008384, 0.0389999999999997, 0.002249999999998309, 0.034499999999997755, 0.044749999999998735, 0.02525000000000155, 0.036749999999999616, 0.04099999999999859, -0.0235000000000003, 0.051249999999999574, 0.029500000000000526, 0.06199999999999939, 0.09750000000000014, 0.12400000000000233, 0.05500000000000149, -0.02325000000000088], zp_timestamp='2026-02-16T00:59:00')
2026-02-16T03:03:31.132 [DEBUG] [Thread-215945] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:03:31.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:03:31.240 [DEBUG] [Thread-215948] [transport.py] [_log()] starting thread (client mode): 0xa57b12a0
2026-02-16T03:03:31.240 [DEBUG] [Thread-215948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:03:31.255 [DEBUG] [Thread-215948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:03:31.255 [INFO] [Thread-215948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:03:31.262 [DEBUG] [Thread-215948] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] client lang: <none>
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] server lang: <none>
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] kex follows: False
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] Compression: none
2026-02-16T03:03:31.263 [DEBUG] [Thread-215948] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:03:31.321 [DEBUG] [Thread-215948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:03:31.321 [DEBUG] [Thread-215948] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:03:31.322 [DEBUG] [Thread-215948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:03:31.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:03:31.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:03:31.376 [DEBUG] [Thread-215948] [transport.py] [_log()] userauth is OK
2026-02-16T03:03:31.377 [DEBUG] [Thread-215948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:03:31.377 [DEBUG] [Thread-215948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:03:31.377 [DEBUG] [Thread-215948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:03:31.377 [DEBUG] [Thread-215948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:03:31.400 [INFO] [Thread-215948] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:03:31.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:03:31.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:03:32.020 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:32.216 [DEBUG] [Thread-215948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:03:32.216 [DEBUG] [Thread-215948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:03:32.264 [DEBUG] [Thread-215948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:03:32.264 [DEBUG] [Thread-215948] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:03:32.273 [DEBUG] [Thread-215948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:03:32.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:03:32.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:03:32.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:03:32.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:03:32.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:03:32.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:03:32.309 [DEBUG] [Thread-215948] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:03:44.588 [DEBUG] [Thread-215950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:47.951 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:47.952 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:48.805 [DEBUG] [Thread-215951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:50.805 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:03:59.649 [DEBUG] [Thread-215952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:02.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:04:02.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:04:02.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:04:04.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 3, 49), 8.91, 54.54, 0.0, 15.37, 13.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:04:04.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:03:49
2026-02-16T03:04:04.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:04:04.770 [DEBUG] [Thread-215953] [transport.py] [_log()] starting thread (client mode): 0xa81d62c0
2026-02-16T03:04:04.770 [DEBUG] [Thread-215953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:04:04.791 [DEBUG] [Thread-215953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:04:04.791 [INFO] [Thread-215953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] client lang: <none>
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] server lang: <none>
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] kex follows: False
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] Compression: none
2026-02-16T03:04:04.795 [DEBUG] [Thread-215953] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:04:04.812 [DEBUG] [Thread-215953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:04:04.812 [DEBUG] [Thread-215953] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:04:04.813 [DEBUG] [Thread-215953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:04:04.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:04:04.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:04:04.814 [DEBUG] [Thread-215953] [transport.py] [_log()] userauth is OK
2026-02-16T03:04:04.814 [DEBUG] [Thread-215953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:04:04.815 [DEBUG] [Thread-215953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:04:04.815 [DEBUG] [Thread-215953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:04:04.815 [DEBUG] [Thread-215953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:04:04.833 [INFO] [Thread-215953] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:04:04.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:04:05.458 [DEBUG] [Thread-215953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:04:05.459 [DEBUG] [Thread-215953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:04:05.459 [DEBUG] [Thread-215953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:04:05.499 [DEBUG] [Thread-215953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:04:05.500 [DEBUG] [Thread-215953] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:04:05.503 [DEBUG] [Thread-215953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:04:05.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:04:05.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:04:05.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:04:05.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:04:05.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:04:05.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:04:05.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:04:05.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:04:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:04:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.044196 -999.00  +13.70  12.84     57   +5.40 1 1 1 1 1     0    0 8.34 26.16 ZNESW 13.8 12.8 136.4 16.0 13.9 -22.1 13.8 -21.0 13.5 -19.6 13.8 -21.1
2026-02-16T03:04:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:04:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:04:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.044196
2026-02-16T03:04:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:04:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:04:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:04:05.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:04:05.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:04:05.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:03:49', tmtdew=8.91, humidity=54.54, cloud=0.0, wind=15.37, temperature=13.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:03:50', seeing=2.72, atlas_timestamp='2026-02-16T01:03:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.0022500000000000853, -0.012749999999998707, 0.048250000000001236, -0.034000000000000696, 0.018499999999999517, 0.030250000000000554, 0.06450000000000067, 0.01025000000000098, 0.03849999999999909, -0.012000000000000455, -0.004749999999999588, -0.06199999999999939, 0.023499999999998522, 0.09875000000000078, 0.05799999999999983, 0.03399999999999892, 0.0007500000000000284, -0.0065000000000008384, 0.0389999999999997, 0.002249999999998309, 0.034499999999997755, 0.044749999999998735, 0.02525000000000155, 0.036749999999999616, 0.04099999999999859, -0.0235000000000003, 0.051249999999999574, 0.029500000000000526, 0.06199999999999939, 0.09750000000000014, 0.12400000000000233, 0.05500000000000149, -0.02325000000000088], zp_timestamp='2026-02-16T01:02:00')
2026-02-16T03:04:05.528 [DEBUG] [Thread-215953] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:04:05.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:04:09.606 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:14.688 [DEBUG] [Thread-215956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:28.241 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:29.741 [DEBUG] [Thread-215957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:44.774 [DEBUG] [Thread-215958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:46.892 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:48.182 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:48.183 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:48.863 [DEBUG] [Thread-215959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:04:59.810 [DEBUG] [Thread-215960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:05.589 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:14.845 [DEBUG] [Thread-215961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:24.233 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:29.882 [DEBUG] [Thread-215962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:42.876 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:44.919 [DEBUG] [Thread-215963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:48.385 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:48.386 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:48.945 [DEBUG] [Thread-215964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:05:59.956 [DEBUG] [Thread-215965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:01.671 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:14.991 [DEBUG] [Thread-215966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:19.320 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-16T03:06:20.404 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:30.030 [DEBUG] [Thread-215967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:39.053 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:45.071 [DEBUG] [Thread-215968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:48.585 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:48.586 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:49.015 [DEBUG] [Thread-215969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:06:49.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:06:49.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:06:49.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:06:51.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 6, 11), 8.93, 54.64, 0.0, 16.04, 13.39, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:06:51.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:06:11
2026-02-16T03:06:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:06:52.296 [DEBUG] [Thread-215970] [transport.py] [_log()] starting thread (client mode): 0xa81d79a0
2026-02-16T03:06:52.296 [DEBUG] [Thread-215970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:06:52.315 [DEBUG] [Thread-215970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:06:52.315 [INFO] [Thread-215970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:06:52.318 [DEBUG] [Thread-215970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] client lang: <none>
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] server lang: <none>
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] kex follows: False
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] Compression: none
2026-02-16T03:06:52.319 [DEBUG] [Thread-215970] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:06:52.333 [DEBUG] [Thread-215970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:06:52.334 [DEBUG] [Thread-215970] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:06:52.334 [DEBUG] [Thread-215970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:06:52.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:06:52.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:06:52.334 [DEBUG] [Thread-215970] [transport.py] [_log()] userauth is OK
2026-02-16T03:06:52.335 [DEBUG] [Thread-215970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:06:52.335 [DEBUG] [Thread-215970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:06:52.335 [DEBUG] [Thread-215970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:06:52.335 [DEBUG] [Thread-215970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:06:52.349 [INFO] [Thread-215970] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:06:52.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:06:52.935 [DEBUG] [Thread-215970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:06:52.935 [DEBUG] [Thread-215970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:06:52.935 [DEBUG] [Thread-215970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:06:52.977 [DEBUG] [Thread-215970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:06:52.977 [DEBUG] [Thread-215970] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:06:52.979 [DEBUG] [Thread-215970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:06:52.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:06:52.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:06:52.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:06:52.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:06:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:06:52.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:06:52.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:06:52.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:06:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:06:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.046279 -999.00  +13.60  11.92     57   +5.40 1 1 1 1 1     0    0 9.04 40.99 ZNESW 13.3 11.9 119.0 13.4 14.0 -22.0 13.8 -20.9 13.6 -19.6 13.8 -21.1
2026-02-16T03:06:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:06:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:06:52.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.046279
2026-02-16T03:06:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:06:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:06:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:06:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:06:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:06:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:06:11', tmtdew=8.93, humidity=54.64, cloud=0.0, wind=16.04, temperature=13.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:06:13', seeing=3.26, atlas_timestamp='2026-02-16T01:06:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.0022500000000000853, -0.012749999999998707, 0.048250000000001236, -0.034000000000000696, 0.018499999999999517, 0.030250000000000554, 0.06450000000000067, 0.01025000000000098, 0.03849999999999909, -0.012000000000000455, -0.004749999999999588, -0.06199999999999939, 0.023499999999998522, 0.09875000000000078, 0.05799999999999983, 0.03399999999999892, 0.0007500000000000284, -0.0065000000000008384, 0.0389999999999997, 0.002249999999998309, 0.034499999999997755, 0.044749999999998735, 0.02525000000000155, 0.036749999999999616, 0.04099999999999859, -0.0235000000000003, 0.051249999999999574, 0.029500000000000526, 0.06199999999999939, 0.09750000000000014, 0.12400000000000233, 0.05500000000000149, -0.02325000000000088], zp_timestamp='2026-02-16T01:02:00')
2026-02-16T03:06:52.995 [DEBUG] [Thread-215970] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:06:53.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:06:53.095 [DEBUG] [Thread-215973] [transport.py] [_log()] starting thread (client mode): 0xa2d26aa0
2026-02-16T03:06:53.095 [DEBUG] [Thread-215973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:06:53.111 [DEBUG] [Thread-215973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:06:53.112 [INFO] [Thread-215973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:06:53.119 [DEBUG] [Thread-215973] [transport.py] [_log()] client lang: <none>
2026-02-16T03:06:53.120 [DEBUG] [Thread-215973] [transport.py] [_log()] server lang: <none>
2026-02-16T03:06:53.120 [DEBUG] [Thread-215973] [transport.py] [_log()] kex follows: False
2026-02-16T03:06:53.120 [DEBUG] [Thread-215973] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:06:53.120 [DEBUG] [Thread-215973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:06:53.120 [DEBUG] [Thread-215973] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:06:53.121 [DEBUG] [Thread-215973] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:06:53.121 [DEBUG] [Thread-215973] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:06:53.121 [DEBUG] [Thread-215973] [transport.py] [_log()] Compression: none
2026-02-16T03:06:53.121 [DEBUG] [Thread-215973] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:06:53.175 [DEBUG] [Thread-215973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:06:53.175 [DEBUG] [Thread-215973] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:06:53.176 [DEBUG] [Thread-215973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:06:53.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:06:53.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:06:53.233 [DEBUG] [Thread-215973] [transport.py] [_log()] userauth is OK
2026-02-16T03:06:53.233 [DEBUG] [Thread-215973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:06:53.233 [DEBUG] [Thread-215973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:06:53.233 [DEBUG] [Thread-215973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:06:53.234 [DEBUG] [Thread-215973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:06:53.259 [INFO] [Thread-215973] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:06:53.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:06:53.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:06:54.092 [DEBUG] [Thread-215973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:06:54.093 [DEBUG] [Thread-215973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:06:54.140 [DEBUG] [Thread-215973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:06:54.141 [DEBUG] [Thread-215973] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:06:54.150 [DEBUG] [Thread-215973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:06:54.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:06:54.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:06:54.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:06:54.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:06:54.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:06:54.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:06:54.187 [DEBUG] [Thread-215973] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:06:57.698 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:00.104 [DEBUG] [Thread-215975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:15.156 [DEBUG] [Thread-215976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:16.467 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:24.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:07:24.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:07:24.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:07:25.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 6, 49), 9.0, 54.24, 0.0, 15.42, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:07:25.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:06:49
2026-02-16T03:07:26.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:07:26.536 [DEBUG] [Thread-215977] [transport.py] [_log()] starting thread (client mode): 0xa2dea200
2026-02-16T03:07:26.536 [DEBUG] [Thread-215977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:07:26.547 [DEBUG] [Thread-215977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:07:26.547 [INFO] [Thread-215977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:07:26.550 [DEBUG] [Thread-215977] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:07:26.550 [DEBUG] [Thread-215977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:07:26.550 [DEBUG] [Thread-215977] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:07:26.550 [DEBUG] [Thread-215977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] client lang: <none>
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] server lang: <none>
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] kex follows: False
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] Compression: none
2026-02-16T03:07:26.551 [DEBUG] [Thread-215977] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:07:26.569 [DEBUG] [Thread-215977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:07:26.569 [DEBUG] [Thread-215977] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:07:26.569 [DEBUG] [Thread-215977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:07:26.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:07:26.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:07:26.569 [DEBUG] [Thread-215977] [transport.py] [_log()] userauth is OK
2026-02-16T03:07:26.569 [DEBUG] [Thread-215977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:07:26.570 [DEBUG] [Thread-215977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:07:26.570 [DEBUG] [Thread-215977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:07:26.570 [DEBUG] [Thread-215977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:07:26.579 [INFO] [Thread-215977] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:07:26.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:07:27.237 [DEBUG] [Thread-215977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:07:27.237 [DEBUG] [Thread-215977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:07:27.238 [DEBUG] [Thread-215977] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:07:27.279 [DEBUG] [Thread-215977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:07:27.279 [DEBUG] [Thread-215977] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:07:27.281 [DEBUG] [Thread-215977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:07:27.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:07:27.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:07:27.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:07:27.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:07:27.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:07:27.297 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:07:27.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:07:27.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.046626 -999.00  +13.70  11.22     56   +5.30 1 1 1 1 1     0    0 9.19 44.19 ZNESW 12.6 11.2 122.6 13.7 13.9 -21.9 13.9 -21.1 13.6 -19.5 13.8 -20.7
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.046626
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:07:27.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:06:49', tmtdew=9.0, humidity=54.24, cloud=0.0, wind=15.42, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:06:49', seeing=3.64, atlas_timestamp='2026-02-16T01:07:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:05:00')
2026-02-16T03:07:27.298 [DEBUG] [Thread-215977] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:07:27.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:07:27.383 [DEBUG] [Thread-215980] [transport.py] [_log()] starting thread (client mode): 0xa81d49a0
2026-02-16T03:07:27.383 [DEBUG] [Thread-215980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:07:27.398 [DEBUG] [Thread-215980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:07:27.398 [INFO] [Thread-215980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] client lang: <none>
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] server lang: <none>
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] kex follows: False
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] Compression: none
2026-02-16T03:07:27.406 [DEBUG] [Thread-215980] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:07:27.463 [DEBUG] [Thread-215980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:07:27.464 [DEBUG] [Thread-215980] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:07:27.464 [DEBUG] [Thread-215980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:07:27.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:07:27.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:07:27.521 [DEBUG] [Thread-215980] [transport.py] [_log()] userauth is OK
2026-02-16T03:07:27.521 [DEBUG] [Thread-215980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:07:27.521 [DEBUG] [Thread-215980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:07:27.521 [DEBUG] [Thread-215980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:07:27.521 [DEBUG] [Thread-215980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:07:27.534 [INFO] [Thread-215980] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:07:27.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:07:27.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:07:28.334 [DEBUG] [Thread-215980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:07:28.335 [DEBUG] [Thread-215980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:07:28.382 [DEBUG] [Thread-215980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:07:28.382 [DEBUG] [Thread-215980] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:07:28.390 [DEBUG] [Thread-215980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:07:28.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:07: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')
2026-02-16T03:07:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:07:28.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:07:28.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:07:28.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:07:28.422 [DEBUG] [Thread-215980] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:07:30.193 [DEBUG] [Thread-215982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:35.157 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:45.247 [DEBUG] [Thread-215983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:48.784 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:48.785 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:49.095 [DEBUG] [Thread-215984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:53.813 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:07:58.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:07:58.445 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:07:58.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:08:00.282 [DEBUG] [Thread-215985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 7, 24), 9.02, 54.16, 0.0, 14.93, 13.34, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:08:00.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:07:24
2026-02-16T03:08:00.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:08:00.942 [DEBUG] [Thread-215986] [transport.py] [_log()] starting thread (client mode): 0xa2dea7d0
2026-02-16T03:08:00.942 [DEBUG] [Thread-215986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:08:00.961 [DEBUG] [Thread-215986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:08:00.961 [INFO] [Thread-215986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] client lang: <none>
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] server lang: <none>
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] kex follows: False
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] Compression: none
2026-02-16T03:08:00.964 [DEBUG] [Thread-215986] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:08:00.980 [DEBUG] [Thread-215986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:08:00.980 [DEBUG] [Thread-215986] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:08:00.981 [DEBUG] [Thread-215986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:08:00.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:08:00.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:08:00.982 [DEBUG] [Thread-215986] [transport.py] [_log()] userauth is OK
2026-02-16T03:08:00.982 [DEBUG] [Thread-215986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:08:00.982 [DEBUG] [Thread-215986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:08:00.982 [DEBUG] [Thread-215986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:08:00.982 [DEBUG] [Thread-215986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:08:00.995 [INFO] [Thread-215986] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:08:00.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:08:01.579 [DEBUG] [Thread-215986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:08:01.579 [DEBUG] [Thread-215986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:08:01.579 [DEBUG] [Thread-215986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:08:01.620 [DEBUG] [Thread-215986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:08:01.620 [DEBUG] [Thread-215986] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:08:01.622 [DEBUG] [Thread-215986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:08:01.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:08:01.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:08:01.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:08:01.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:08:01.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:08:01.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:08:01.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:08:01.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:08:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:08:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.046974 -999.00  +13.80  12.54     55   +5.10 1 1 1 1 1     0    0 9.16 45.38 ZNESW 13.5 12.5 126.8 16.4 14.0 -22.0 13.8 -21.0 13.6 -19.6 13.9 -20.8
2026-02-16T03:08:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:08:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:08:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.046974
2026-02-16T03:08:01.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:08:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:08:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:08:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:08:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:08:01.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:07:24', tmtdew=9.02, humidity=54.16, cloud=0.0, wind=14.93, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:07:25', seeing=2.04, atlas_timestamp='2026-02-16T01:07:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:05:00')
2026-02-16T03:08:01.646 [DEBUG] [Thread-215986] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:08:01.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:08:01.743 [DEBUG] [Thread-215989] [transport.py] [_log()] starting thread (client mode): 0xa57e1540
2026-02-16T03:08:01.744 [DEBUG] [Thread-215989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:08:01.758 [DEBUG] [Thread-215989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:08:01.758 [INFO] [Thread-215989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:01.765 [DEBUG] [Thread-215989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] client lang: <none>
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] server lang: <none>
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] kex follows: False
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] Compression: none
2026-02-16T03:08:01.766 [DEBUG] [Thread-215989] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:08:01.826 [DEBUG] [Thread-215989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:08:01.826 [DEBUG] [Thread-215989] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:08:01.827 [DEBUG] [Thread-215989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:08:01.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:08:01.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:08:01.882 [DEBUG] [Thread-215989] [transport.py] [_log()] userauth is OK
2026-02-16T03:08:01.882 [DEBUG] [Thread-215989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:08:01.882 [DEBUG] [Thread-215989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:08:01.882 [DEBUG] [Thread-215989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:08:01.882 [DEBUG] [Thread-215989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:08:01.901 [INFO] [Thread-215989] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:08:01.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:08:01.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:08:02.743 [DEBUG] [Thread-215989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:08:02.743 [DEBUG] [Thread-215989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:08:02.791 [DEBUG] [Thread-215989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:08:02.791 [DEBUG] [Thread-215989] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:08:02.799 [DEBUG] [Thread-215989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:08:02.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:08:02.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:08:02.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:08:02.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:08:02.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:08:02.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:08:02.831 [DEBUG] [Thread-215989] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:08:12.485 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:15.319 [DEBUG] [Thread-215991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:30.369 [DEBUG] [Thread-215992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:31.171 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:32.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:08:32.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:08:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:08:34.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 8), 9.09, 54.11, 0.0, 15.49, 13.32, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:08:34.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:08:00
2026-02-16T03:08:35.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:08:35.297 [DEBUG] [Thread-215993] [transport.py] [_log()] starting thread (client mode): 0xa81d7220
2026-02-16T03:08:35.297 [DEBUG] [Thread-215993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:08:35.321 [DEBUG] [Thread-215993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:08:35.321 [INFO] [Thread-215993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] client lang: <none>
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] server lang: <none>
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] kex follows: False
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:08:35.323 [DEBUG] [Thread-215993] [transport.py] [_log()] Compression: none
2026-02-16T03:08:35.324 [DEBUG] [Thread-215993] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:08:35.331 [DEBUG] [Thread-215993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:08:35.331 [DEBUG] [Thread-215993] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:08:35.332 [DEBUG] [Thread-215993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:08:35.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:08:35.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:08:35.332 [DEBUG] [Thread-215993] [transport.py] [_log()] userauth is OK
2026-02-16T03:08:35.332 [DEBUG] [Thread-215993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:08:35.332 [DEBUG] [Thread-215993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:08:35.332 [DEBUG] [Thread-215993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:08:35.333 [DEBUG] [Thread-215993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:08:35.346 [INFO] [Thread-215993] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:08:35.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:08:36.018 [DEBUG] [Thread-215993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:08:36.027 [DEBUG] [Thread-215993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:08:36.028 [DEBUG] [Thread-215993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:08:36.059 [DEBUG] [Thread-215993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:08:36.060 [DEBUG] [Thread-215993] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:08:36.062 [DEBUG] [Thread-215993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:08:36.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:08:36.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:08:36.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:08:36.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:08:36.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:08:36.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:08:36.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:08:36.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:08:36.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:08:36.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.047321 -999.00  +13.80  11.70     55   +5.20 1 1 1 1 1     0    0 9.31 50.74 ZNESW 12.5 11.7 135.6 15.4 14.1 -22.2 13.9 -21.0 13.6 -19.7 13.9 -21.0
2026-02-16T03:08:36.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:08:36.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:08:36.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.047321
2026-02-16T03:08:36.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:08:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:08:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:08:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:08:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:08:36.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:08:00', tmtdew=9.09, humidity=54.11, cloud=0.0, wind=15.49, temperature=13.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:08:01', seeing=2.09, atlas_timestamp='2026-02-16T01:08:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:05:00')
2026-02-16T03:08:36.086 [DEBUG] [Thread-215993] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:08:36.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:08:36.179 [DEBUG] [Thread-215996] [transport.py] [_log()] starting thread (client mode): 0xa81d78b0
2026-02-16T03:08:36.179 [DEBUG] [Thread-215996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:08:36.194 [DEBUG] [Thread-215996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:08:36.195 [INFO] [Thread-215996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:08:36.202 [DEBUG] [Thread-215996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] client lang: <none>
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] server lang: <none>
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] kex follows: False
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] Compression: none
2026-02-16T03:08:36.203 [DEBUG] [Thread-215996] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:08:36.275 [DEBUG] [Thread-215996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:08:36.276 [DEBUG] [Thread-215996] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:08:36.277 [DEBUG] [Thread-215996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:08:36.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:08:36.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:08:36.334 [DEBUG] [Thread-215996] [transport.py] [_log()] userauth is OK
2026-02-16T03:08:36.334 [DEBUG] [Thread-215996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:08:36.334 [DEBUG] [Thread-215996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:08:36.335 [DEBUG] [Thread-215996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:08:36.335 [DEBUG] [Thread-215996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:08:36.353 [INFO] [Thread-215996] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:08:36.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:08:36.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:08:37.188 [DEBUG] [Thread-215996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:08:37.188 [DEBUG] [Thread-215996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:08:37.235 [DEBUG] [Thread-215996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:08:37.236 [DEBUG] [Thread-215996] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:08:37.245 [DEBUG] [Thread-215996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:08:37.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:08:37.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:08:37.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:08:37.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:08:37.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:08:37.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:08:37.282 [DEBUG] [Thread-215996] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:08:45.407 [DEBUG] [Thread-215998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:48.990 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:48.991 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:49.176 [DEBUG] [Thread-215999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:08:49.817 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:00.456 [DEBUG] [Thread-216000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:09:07.304 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:09:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:09:08.465 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:09.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 8, 36), 8.85, 54.95, 0.0, 16.37, 13.27, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:09:09.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:08:36
2026-02-16T03:09:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:09:10.007 [DEBUG] [Thread-216001] [transport.py] [_log()] starting thread (client mode): 0xa57e1ea0
2026-02-16T03:09:10.007 [DEBUG] [Thread-216001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:09:10.027 [DEBUG] [Thread-216001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:09:10.027 [INFO] [Thread-216001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:09:10.030 [DEBUG] [Thread-216001] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] client lang: <none>
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] server lang: <none>
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] kex follows: False
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] Compression: none
2026-02-16T03:09:10.031 [DEBUG] [Thread-216001] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:09:10.047 [DEBUG] [Thread-216001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:09:10.047 [DEBUG] [Thread-216001] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:09:10.048 [DEBUG] [Thread-216001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:09:10.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:09:10.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:09:10.093 [DEBUG] [Thread-216001] [transport.py] [_log()] userauth is OK
2026-02-16T03:09:10.093 [DEBUG] [Thread-216001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:09:10.093 [DEBUG] [Thread-216001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:09:10.093 [DEBUG] [Thread-216001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:09:10.093 [DEBUG] [Thread-216001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:09:10.132 [INFO] [Thread-216001] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:09:10.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:09:10.766 [DEBUG] [Thread-216001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:09:10.767 [DEBUG] [Thread-216001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:09:10.767 [DEBUG] [Thread-216001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:09:10.807 [DEBUG] [Thread-216001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:09:10.808 [DEBUG] [Thread-216001] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:09:10.810 [DEBUG] [Thread-216001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:09:10.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:09:10.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:09:10.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:09:10.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:09:10.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:09:10.839 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:09:10.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:09:10.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:09:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:09:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.047321 -999.00  +13.80  11.70     55   +5.20 1 1 1 1 1     0    0 9.31 50.74 ZNESW 12.5 11.7 135.6 15.4 14.1 -22.2 13.9 -21.0 13.6 -19.7 13.9 -21.0
2026-02-16T03:09:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:09:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:09:10.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.047321
2026-02-16T03:09:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:09:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:09:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:09:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:09:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:09:10.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:08:36', tmtdew=8.85, humidity=54.95, cloud=0.0, wind=16.37, temperature=13.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:08:37', seeing=2.55, atlas_timestamp='2026-02-16T01:08:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:05:00')
2026-02-16T03:09:10.842 [DEBUG] [Thread-216001] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:09:10.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:09:10.930 [DEBUG] [Thread-216004] [transport.py] [_log()] starting thread (client mode): 0xa57e1450
2026-02-16T03:09:10.931 [DEBUG] [Thread-216004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:09:10.945 [DEBUG] [Thread-216004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:09:10.945 [INFO] [Thread-216004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:09:10.952 [DEBUG] [Thread-216004] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] client lang: <none>
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] server lang: <none>
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] kex follows: False
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:09:10.953 [DEBUG] [Thread-216004] [transport.py] [_log()] Compression: none
2026-02-16T03:09:10.954 [DEBUG] [Thread-216004] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:09:11.010 [DEBUG] [Thread-216004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:09:11.010 [DEBUG] [Thread-216004] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:09:11.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:09:11.012 [DEBUG] [Thread-216004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:09:11.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:09:11.067 [DEBUG] [Thread-216004] [transport.py] [_log()] userauth is OK
2026-02-16T03:09:11.067 [DEBUG] [Thread-216004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:09:11.067 [DEBUG] [Thread-216004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:09:11.067 [DEBUG] [Thread-216004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:09:11.067 [DEBUG] [Thread-216004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:09:11.086 [INFO] [Thread-216004] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:09:11.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:09:11.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:09:11.908 [DEBUG] [Thread-216004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:09:11.909 [DEBUG] [Thread-216004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:09:11.956 [DEBUG] [Thread-216004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:09:11.956 [DEBUG] [Thread-216004] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:09:11.966 [DEBUG] [Thread-216004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:09:11.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:09:11.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:09:11.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:09:11.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:09:11.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:09:11.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:09:12.000 [DEBUG] [Thread-216004] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:09:15.490 [DEBUG] [Thread-216006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:27.137 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:30.534 [DEBUG] [Thread-216007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:42.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:09:42.000 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:09:42.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:09:44.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 9, 11), 9.18, 53.46, 0.0, 15.18, 13.35, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:09:44.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:09:11
2026-02-16T03:09:44.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:09:44.618 [DEBUG] [Thread-216008] [transport.py] [_log()] starting thread (client mode): 0xa57e26e0
2026-02-16T03:09:44.619 [DEBUG] [Thread-216008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:09:44.639 [DEBUG] [Thread-216008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:09:44.640 [INFO] [Thread-216008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] client lang: <none>
2026-02-16T03:09:44.643 [DEBUG] [Thread-216008] [transport.py] [_log()] server lang: <none>
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] kex follows: False
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] Compression: none
2026-02-16T03:09:44.644 [DEBUG] [Thread-216008] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:09:44.662 [DEBUG] [Thread-216008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:09:44.662 [DEBUG] [Thread-216008] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:09:44.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:09:44.664 [DEBUG] [Thread-216008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:09:44.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:09:44.666 [DEBUG] [Thread-216008] [transport.py] [_log()] userauth is OK
2026-02-16T03:09:44.666 [DEBUG] [Thread-216008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:09:44.666 [DEBUG] [Thread-216008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:09:44.667 [DEBUG] [Thread-216008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:09:44.667 [DEBUG] [Thread-216008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:09:44.690 [INFO] [Thread-216008] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:09:44.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:09:45.297 [DEBUG] [Thread-216008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:09:45.297 [DEBUG] [Thread-216008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:09:45.297 [DEBUG] [Thread-216008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:09:45.338 [DEBUG] [Thread-216008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:09:45.338 [DEBUG] [Thread-216008] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:09:45.340 [DEBUG] [Thread-216008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:09:45.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:09:45.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:09:45.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:09:45.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:09:45.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:09:45.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:09:45.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:09:45.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:09:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:09:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.047668 -999.00  +13.90  11.84     56   +5.30 1 1 1 1 1     0    0 9.85 63.67 ZNESW 12.2 11.8 121.4 14.4 14.0 -22.0 13.9 -21.1 13.6 -19.9 13.9 -21.1
2026-02-16T03:09:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:09:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:09:45.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.047668
2026-02-16T03:09:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:09:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:09:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:09:45.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:09:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:09:45.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:09:11', tmtdew=9.18, humidity=53.46, cloud=0.0, wind=15.18, temperature=13.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:09:12', seeing=2.55, atlas_timestamp='2026-02-16T01:08:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:05:00')
2026-02-16T03:09:45.355 [DEBUG] [Thread-216008] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:09:45.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:09:45.453 [DEBUG] [Thread-216011] [transport.py] [_log()] starting thread (client mode): 0xa2d278e0
2026-02-16T03:09:45.454 [DEBUG] [Thread-216011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:09:45.468 [DEBUG] [Thread-216011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:09:45.468 [INFO] [Thread-216011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:09:45.476 [DEBUG] [Thread-216011] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:09:45.476 [DEBUG] [Thread-216011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:09:45.476 [DEBUG] [Thread-216011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:09:45.476 [DEBUG] [Thread-216011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:45.476 [DEBUG] [Thread-216011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] client lang: <none>
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] server lang: <none>
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] kex follows: False
2026-02-16T03:09:45.477 [DEBUG] [Thread-216011] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:09:45.478 [DEBUG] [Thread-216011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:09:45.478 [DEBUG] [Thread-216011] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:09:45.478 [DEBUG] [Thread-216011] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:09:45.478 [DEBUG] [Thread-216011] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:09:45.478 [DEBUG] [Thread-216011] [transport.py] [_log()] Compression: none
2026-02-16T03:09:45.478 [DEBUG] [Thread-216011] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:09:45.535 [DEBUG] [Thread-216011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:09:45.535 [DEBUG] [Thread-216011] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:09:45.536 [DEBUG] [Thread-216011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:09:45.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:09:45.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:09:45.580 [DEBUG] [Thread-216013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:45.591 [DEBUG] [Thread-216011] [transport.py] [_log()] userauth is OK
2026-02-16T03:09:45.591 [DEBUG] [Thread-216011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:09:45.591 [DEBUG] [Thread-216011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:09:45.592 [DEBUG] [Thread-216011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:09:45.592 [DEBUG] [Thread-216011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:09:45.611 [INFO] [Thread-216011] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:09:45.611 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:09:45.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:09:45.784 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:46.492 [DEBUG] [Thread-216011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:09:46.492 [DEBUG] [Thread-216011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:09:46.539 [DEBUG] [Thread-216011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:09:46.539 [DEBUG] [Thread-216011] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:09:46.548 [DEBUG] [Thread-216011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:09:46.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:09:46.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:09:46.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:09:46.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:09:46.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:09:46.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:09:46.583 [DEBUG] [Thread-216011] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:09:49.190 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:49.191 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:09:49.245 [DEBUG] [Thread-216014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:00.628 [DEBUG] [Thread-216015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:04.546 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:15.664 [DEBUG] [Thread-216016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:16.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:10:16.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:10:16.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:10:18.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 9, 46), 9.24, 53.44, 0.0, 15.55, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:10:18.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:09:46
2026-02-16T03:10:19.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:10:19.396 [DEBUG] [Thread-216017] [transport.py] [_log()] starting thread (client mode): 0xa2dc39a0
2026-02-16T03:10:19.396 [DEBUG] [Thread-216017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:10:19.407 [DEBUG] [Thread-216017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:10:19.407 [INFO] [Thread-216017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] client lang: <none>
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] server lang: <none>
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] kex follows: False
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:10:19.408 [DEBUG] [Thread-216017] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:10:19.409 [DEBUG] [Thread-216017] [transport.py] [_log()] Compression: none
2026-02-16T03:10:19.409 [DEBUG] [Thread-216017] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:10:19.419 [DEBUG] [Thread-216017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:10:19.419 [DEBUG] [Thread-216017] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:10:19.420 [DEBUG] [Thread-216017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:10:19.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:10:19.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:10:19.421 [DEBUG] [Thread-216017] [transport.py] [_log()] userauth is OK
2026-02-16T03:10:19.421 [DEBUG] [Thread-216017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:10:19.421 [DEBUG] [Thread-216017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:10:19.421 [DEBUG] [Thread-216017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:10:19.421 [DEBUG] [Thread-216017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:10:19.434 [INFO] [Thread-216017] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:10:19.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:10:20.089 [DEBUG] [Thread-216017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:10:20.090 [DEBUG] [Thread-216017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:10:20.090 [DEBUG] [Thread-216017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:10:20.130 [DEBUG] [Thread-216017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:10:20.130 [DEBUG] [Thread-216017] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:10:20.133 [DEBUG] [Thread-216017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:10:20.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:10:20.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:10:20.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:10:20.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:10:20.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:10:20.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:10:20.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:10:20.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:10:20.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:10:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.048362 -999.00  +13.90  12.91     55   +5.20 1 1 1 1 1     0    0 9.49 51.35 ZNESW 11.9 12.9 128.8 16.4 14.1 -21.9 13.9 -21.0 13.7 -19.6 13.9 -20.7
2026-02-16T03:10:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:10:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:10:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.048362
2026-02-16T03:10:20.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:10:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:10:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:10:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:10:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:10:20.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:09:46', tmtdew=9.24, humidity=53.44, cloud=0.0, wind=15.55, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:09:47', seeing=2.71, atlas_timestamp='2026-02-16T01:09:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:09:00')
2026-02-16T03:10:20.162 [DEBUG] [Thread-216017] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:10:20.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:10:20.263 [DEBUG] [Thread-216020] [transport.py] [_log()] starting thread (client mode): 0xa2d26350
2026-02-16T03:10:20.264 [DEBUG] [Thread-216020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:10:20.278 [DEBUG] [Thread-216020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:10:20.278 [INFO] [Thread-216020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:10:20.285 [DEBUG] [Thread-216020] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:10:20.285 [DEBUG] [Thread-216020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] client lang: <none>
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] server lang: <none>
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] kex follows: False
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] Compression: none
2026-02-16T03:10:20.286 [DEBUG] [Thread-216020] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:10:20.343 [DEBUG] [Thread-216020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:10:20.343 [DEBUG] [Thread-216020] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:10:20.344 [DEBUG] [Thread-216020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:10:20.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:10:20.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:10:20.399 [DEBUG] [Thread-216020] [transport.py] [_log()] userauth is OK
2026-02-16T03:10:20.400 [DEBUG] [Thread-216020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:10:20.400 [DEBUG] [Thread-216020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:10:20.400 [DEBUG] [Thread-216020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:10:20.400 [DEBUG] [Thread-216020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:10:20.419 [INFO] [Thread-216020] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:10:20.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:10:20.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:10:21.250 [DEBUG] [Thread-216020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:10:21.250 [DEBUG] [Thread-216020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:10:21.298 [DEBUG] [Thread-216020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:10:21.298 [DEBUG] [Thread-216020] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:10:21.308 [DEBUG] [Thread-216020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:10:21.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:10:21.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:10:21.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:10:21.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:10:21.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:10:21.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:10:21.343 [DEBUG] [Thread-216020] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:10:23.513 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:30.700 [DEBUG] [Thread-216022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:42.161 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:45.751 [DEBUG] [Thread-216023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:49.297 [DEBUG] [Thread-216024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:49.388 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:49.389 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:10:51.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:10:51.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:10:51.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:10:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 10, 23), 9.22, 53.51, 0.0, 15.58, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:10:53.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:10:23
2026-02-16T03:10:53.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:10:53.819 [DEBUG] [Thread-216025] [transport.py] [_log()] starting thread (client mode): 0xa5772d10
2026-02-16T03:10:53.819 [DEBUG] [Thread-216025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:10:53.840 [DEBUG] [Thread-216025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:10:53.840 [INFO] [Thread-216025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] client lang: <none>
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] server lang: <none>
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] kex follows: False
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:10:53.843 [DEBUG] [Thread-216025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:10:53.844 [DEBUG] [Thread-216025] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:10:53.844 [DEBUG] [Thread-216025] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:10:53.844 [DEBUG] [Thread-216025] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:10:53.844 [DEBUG] [Thread-216025] [transport.py] [_log()] Compression: none
2026-02-16T03:10:53.844 [DEBUG] [Thread-216025] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:10:53.861 [DEBUG] [Thread-216025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:10:53.862 [DEBUG] [Thread-216025] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:10:53.862 [DEBUG] [Thread-216025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:10:53.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:10:53.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:10:53.864 [DEBUG] [Thread-216025] [transport.py] [_log()] userauth is OK
2026-02-16T03:10:53.864 [DEBUG] [Thread-216025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:10:53.865 [DEBUG] [Thread-216025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:10:53.865 [DEBUG] [Thread-216025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:10:53.865 [DEBUG] [Thread-216025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:10:53.886 [INFO] [Thread-216025] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:10:53.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:10:54.662 [DEBUG] [Thread-216025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:10:54.662 [DEBUG] [Thread-216025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:10:54.662 [DEBUG] [Thread-216025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:10:54.702 [DEBUG] [Thread-216025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:10:54.703 [DEBUG] [Thread-216025] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:10:54.706 [DEBUG] [Thread-216025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:10:54.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:10:54.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:10:54.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:10:54.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:10:54.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:10:54.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:10:54.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:10:54.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:10:54.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:10:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.048709 -999.00  +14.00  13.43     55   +5.20 1 1 1 1 1     0    0 9.51 49.46 ZNESW 13.2 13.4 123.4 16.9 14.1 -22.0 14.0 -21.0 13.7 -19.7 13.9 -20.7
2026-02-16T03:10:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:10:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:10:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.048709
2026-02-16T03:10:54.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:10:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:10:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:10:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:10:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:10:54.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:10:23', tmtdew=9.22, humidity=53.51, cloud=0.0, wind=15.58, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:10:23', seeing=2.51, atlas_timestamp='2026-02-16T01:10:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:09:00')
2026-02-16T03:10:54.736 [DEBUG] [Thread-216025] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:10:54.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:10:54.831 [DEBUG] [Thread-216028] [transport.py] [_log()] starting thread (client mode): 0xa5771ea0
2026-02-16T03:10:54.832 [DEBUG] [Thread-216028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:10:54.846 [DEBUG] [Thread-216028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:10:54.847 [INFO] [Thread-216028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:10:54.854 [DEBUG] [Thread-216028] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:10:54.854 [DEBUG] [Thread-216028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:10:54.854 [DEBUG] [Thread-216028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] client lang: <none>
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] server lang: <none>
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] kex follows: False
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] Compression: none
2026-02-16T03:10:54.855 [DEBUG] [Thread-216028] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:10:54.910 [DEBUG] [Thread-216028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:10:54.911 [DEBUG] [Thread-216028] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:10:54.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:10:54.912 [DEBUG] [Thread-216028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:10:54.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:10:54.967 [DEBUG] [Thread-216028] [transport.py] [_log()] userauth is OK
2026-02-16T03:10:54.967 [DEBUG] [Thread-216028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:10:54.967 [DEBUG] [Thread-216028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:10:54.967 [DEBUG] [Thread-216028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:10:54.967 [DEBUG] [Thread-216028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:10:54.991 [INFO] [Thread-216028] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:10:54.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:10:54.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:10:55.827 [DEBUG] [Thread-216028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:10:55.827 [DEBUG] [Thread-216028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:10:55.875 [DEBUG] [Thread-216028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:10:55.876 [DEBUG] [Thread-216028] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:10:55.885 [DEBUG] [Thread-216028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:10:55.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:10:55.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:10: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') -> 00000000
2026-02-16T03:10:55.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:10:55.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:10:55.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:10:55.921 [DEBUG] [Thread-216028] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:11:00.783 [DEBUG] [Thread-216030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:00.825 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:15.830 [DEBUG] [Thread-216031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:19.696 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:25.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:11:25.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:11:25.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:11:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 10, 58), 9.37, 52.97, 0.0, 17.57, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:11:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:10:58
2026-02-16T03:11:28.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:11:29.056 [DEBUG] [Thread-216032] [transport.py] [_log()] starting thread (client mode): 0xa57e2560
2026-02-16T03:11:29.056 [DEBUG] [Thread-216032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:11:29.077 [DEBUG] [Thread-216032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:11:29.077 [INFO] [Thread-216032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] client lang: <none>
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] server lang: <none>
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] kex follows: False
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:11:29.081 [DEBUG] [Thread-216032] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:11:29.082 [DEBUG] [Thread-216032] [transport.py] [_log()] Compression: none
2026-02-16T03:11:29.082 [DEBUG] [Thread-216032] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:11:29.098 [DEBUG] [Thread-216032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:11:29.099 [DEBUG] [Thread-216032] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:11:29.099 [DEBUG] [Thread-216032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:11:29.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:11:29.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:11:29.101 [DEBUG] [Thread-216032] [transport.py] [_log()] userauth is OK
2026-02-16T03:11:29.102 [DEBUG] [Thread-216032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:11:29.102 [DEBUG] [Thread-216032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:11:29.102 [DEBUG] [Thread-216032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:11:29.102 [DEBUG] [Thread-216032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:11:29.127 [INFO] [Thread-216032] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:11:29.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:11:29.784 [DEBUG] [Thread-216032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:11:29.784 [DEBUG] [Thread-216032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:11:29.784 [DEBUG] [Thread-216032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:11:29.825 [DEBUG] [Thread-216032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:11:29.825 [DEBUG] [Thread-216032] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:11:29.828 [DEBUG] [Thread-216032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:11:29.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:11:29.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:11:29.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:11:29.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:11:29.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:11:29.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:11:29.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:11:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:11:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.049057 -999.00  +14.00  12.52     55   +5.10 1 1 1 1 1     0    0 9.51 51.11 ZNESW 11.8 12.5 121.8 16.0 14.2 -21.9 14.0 -21.0 13.7 -19.6 14.0 -20.9
2026-02-16T03:11:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:11:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:11:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.049057
2026-02-16T03:11:29.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:11:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:11:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:11:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:11:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:11:29.850 [DEBUG] [Thread-216032] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:11:29.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:10:58', tmtdew=9.37, humidity=52.97, cloud=0.0, wind=17.57, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:10:58', seeing=1.79, atlas_timestamp='2026-02-16T01:10:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:09:00')
2026-02-16T03:11:29.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:11:29.959 [DEBUG] [Thread-216035] [transport.py] [_log()] starting thread (client mode): 0xa57e0a00
2026-02-16T03:11:29.959 [DEBUG] [Thread-216035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:11:29.973 [DEBUG] [Thread-216035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:11:29.973 [INFO] [Thread-216035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:11:29.981 [DEBUG] [Thread-216035] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:11:29.981 [DEBUG] [Thread-216035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:11:29.981 [DEBUG] [Thread-216035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:11:29.981 [DEBUG] [Thread-216035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:11:29.981 [DEBUG] [Thread-216035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] client lang: <none>
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] server lang: <none>
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] kex follows: False
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] Compression: none
2026-02-16T03:11:29.982 [DEBUG] [Thread-216035] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:11:30.040 [DEBUG] [Thread-216035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:11:30.040 [DEBUG] [Thread-216035] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:11:30.041 [DEBUG] [Thread-216035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:11:30.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:11:30.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:11:30.095 [DEBUG] [Thread-216035] [transport.py] [_log()] userauth is OK
2026-02-16T03:11:30.096 [DEBUG] [Thread-216035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:11:30.096 [DEBUG] [Thread-216035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:11:30.096 [DEBUG] [Thread-216035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:11:30.096 [DEBUG] [Thread-216035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:11:30.121 [INFO] [Thread-216035] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:11:30.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:11:30.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:11:30.868 [DEBUG] [Thread-216037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:30.968 [DEBUG] [Thread-216035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:11:30.969 [DEBUG] [Thread-216035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:11:31.016 [DEBUG] [Thread-216035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:11:31.017 [DEBUG] [Thread-216035] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:11:31.026 [DEBUG] [Thread-216035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:11:31.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:11:31.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:11:31.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:11:31.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:11:31.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:11:31.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:11:31.062 [DEBUG] [Thread-216035] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:11:38.503 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:45.916 [DEBUG] [Thread-216038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:49.348 [DEBUG] [Thread-216039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:49.593 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:49.594 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:11:57.151 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:00.948 [DEBUG] [Thread-216040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:01.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:12:01.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:12:01.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:12:03.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 11, 34), 8.95, 54.58, 0.0, 18.6, 13.34, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:12:03.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:11:34
2026-02-16T03:12:03.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:12:03.616 [DEBUG] [Thread-216041] [transport.py] [_log()] starting thread (client mode): 0xa2d26ce0
2026-02-16T03:12:03.616 [DEBUG] [Thread-216041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:12:03.635 [DEBUG] [Thread-216041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:12:03.635 [INFO] [Thread-216041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:12:03.638 [DEBUG] [Thread-216041] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:12:03.638 [DEBUG] [Thread-216041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] client lang: <none>
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] server lang: <none>
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] kex follows: False
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] Compression: none
2026-02-16T03:12:03.639 [DEBUG] [Thread-216041] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:12:03.658 [DEBUG] [Thread-216041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:12:03.658 [DEBUG] [Thread-216041] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:12:03.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:12:03.659 [DEBUG] [Thread-216041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:12:03.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:12:03.661 [DEBUG] [Thread-216041] [transport.py] [_log()] userauth is OK
2026-02-16T03:12:03.662 [DEBUG] [Thread-216041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:12:03.662 [DEBUG] [Thread-216041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:12:03.662 [DEBUG] [Thread-216041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:12:03.662 [DEBUG] [Thread-216041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:12:03.686 [INFO] [Thread-216041] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:12:03.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:12:04.295 [DEBUG] [Thread-216041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:12:04.296 [DEBUG] [Thread-216041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:12:04.296 [DEBUG] [Thread-216041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:12:04.336 [DEBUG] [Thread-216041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:12:04.337 [DEBUG] [Thread-216041] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:12:04.340 [DEBUG] [Thread-216041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:12:04.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:12:04.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:12:04.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:12:04.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:12:04.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:12:04.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:12:04.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:12:04.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:12:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:12:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.049404 -999.00  +14.10  14.94     54   +5.00 1 1 1 1 1     0    0 9.66 57.08 ZNESW 16.2 14.9 128.6 16.4 14.2 -22.2 14.0 -21.0 13.7 -19.6 14.0 -20.9
2026-02-16T03:12:04.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:12:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:12:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.049404
2026-02-16T03:12:04.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:12:04.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:12:04.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:12:04.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:12:04.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:12:04.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:11:34', tmtdew=8.95, humidity=54.58, cloud=0.0, wind=18.6, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:11:34', seeing=2.08, atlas_timestamp='2026-02-16T01:11:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:09:00')
2026-02-16T03:12:04.366 [DEBUG] [Thread-216041] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:12:04.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:12:04.460 [DEBUG] [Thread-216044] [transport.py] [_log()] starting thread (client mode): 0xa2d25330
2026-02-16T03:12:04.460 [DEBUG] [Thread-216044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:12:04.474 [DEBUG] [Thread-216044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:12:04.474 [INFO] [Thread-216044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:12:04.482 [DEBUG] [Thread-216044] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:12:04.482 [DEBUG] [Thread-216044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:12:04.482 [DEBUG] [Thread-216044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:12:04.482 [DEBUG] [Thread-216044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:04.482 [DEBUG] [Thread-216044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:04.482 [DEBUG] [Thread-216044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] client lang: <none>
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] server lang: <none>
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] kex follows: False
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:12:04.483 [DEBUG] [Thread-216044] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:12:04.484 [DEBUG] [Thread-216044] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:12:04.484 [DEBUG] [Thread-216044] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:12:04.484 [DEBUG] [Thread-216044] [transport.py] [_log()] Compression: none
2026-02-16T03:12:04.484 [DEBUG] [Thread-216044] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:12:04.540 [DEBUG] [Thread-216044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:12:04.541 [DEBUG] [Thread-216044] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:12:04.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:12:04.542 [DEBUG] [Thread-216044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:12:04.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:12:04.596 [DEBUG] [Thread-216044] [transport.py] [_log()] userauth is OK
2026-02-16T03:12:04.596 [DEBUG] [Thread-216044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:12:04.596 [DEBUG] [Thread-216044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:12:04.596 [DEBUG] [Thread-216044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:12:04.596 [DEBUG] [Thread-216044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:12:04.614 [INFO] [Thread-216044] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:12:04.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:12:04.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:12:05.432 [DEBUG] [Thread-216044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:12:05.432 [DEBUG] [Thread-216044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:12:05.480 [DEBUG] [Thread-216044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:12:05.480 [DEBUG] [Thread-216044] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:12:05.490 [DEBUG] [Thread-216044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:12:05.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:12:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:12:05.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:12:05.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:12:05.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:12:05.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:12:05.533 [DEBUG] [Thread-216044] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:12:15.849 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:15.983 [DEBUG] [Thread-216046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:31.038 [DEBUG] [Thread-216047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:34.530 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:35.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:12:35.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:12:35.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:12:37.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 12, 10), 9.55, 52.24, 0.0, 15.39, 13.74, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:12:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:12:10
2026-02-16T03:12:37.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:12:37.985 [DEBUG] [Thread-216048] [transport.py] [_log()] starting thread (client mode): 0xa57e22f0
2026-02-16T03:12:37.986 [DEBUG] [Thread-216048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:12:38.005 [DEBUG] [Thread-216048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:12:38.005 [INFO] [Thread-216048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:12:38.008 [DEBUG] [Thread-216048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] client lang: <none>
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] server lang: <none>
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] kex follows: False
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] Compression: none
2026-02-16T03:12:38.009 [DEBUG] [Thread-216048] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:12:38.027 [DEBUG] [Thread-216048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:12:38.028 [DEBUG] [Thread-216048] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:12:38.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:12:38.030 [DEBUG] [Thread-216048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:12:38.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:12:38.032 [DEBUG] [Thread-216048] [transport.py] [_log()] userauth is OK
2026-02-16T03:12:38.032 [DEBUG] [Thread-216048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:12:38.033 [DEBUG] [Thread-216048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:12:38.033 [DEBUG] [Thread-216048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:12:38.033 [DEBUG] [Thread-216048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:12:38.053 [INFO] [Thread-216048] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:12:38.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:12:38.646 [DEBUG] [Thread-216048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:12:38.646 [DEBUG] [Thread-216048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:12:38.647 [DEBUG] [Thread-216048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:12:38.687 [DEBUG] [Thread-216048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:12:38.688 [DEBUG] [Thread-216048] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:12:38.691 [DEBUG] [Thread-216048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:12:38.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:12:38.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:12:38.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:12:38.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:12:38.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:12:38.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:12:38.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:12:38.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:12:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:12:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.049751 -999.00  +14.20  12.52     54   +5.10 1 1 1 1 1     0    0 9.71 56.36 ZNESW 14.0 12.5 127.8 17.6 14.2 -22.2 14.1 -21.2 13.7 -19.8 14.1 -21.0
2026-02-16T03:12:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:12:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:12:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.049751
2026-02-16T03:12:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:12:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:12:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:12:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:12:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:12:38.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:12:10', tmtdew=9.55, humidity=52.24, cloud=0.0, wind=15.39, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:12:10', seeing=2.56, atlas_timestamp='2026-02-16T01:11:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.021250000000000213, -0.04774999999999885, 0.015249999999999986, -0.05900000000000105, -0.048500000000000654, 0.021750000000000824, -0.006999999999999673, -0.007749999999999702, 0.014499999999999957, -0.0365000000000002, -0.042749999999999844, -0.09800000000000075, 0.011499999999999844, 0.06724999999999959, -0.009999999999999787, -0.03300000000000125, 0.010249999999999204, -0.05299999999999905, 0.005999999999998451, -0.00975000000000037, -0.007500000000000284, 0.0572499999999998, 0.00575000000000081, 0.014749999999999375, 0.014999999999998792, -0.031000000000000583, 0.03275000000000006, -0.00849999999999973, 0.04749999999999943, 0.0860000000000003, 0.07400000000000162, 0.05200000000000138, -0.034250000000000114], zp_timestamp='2026-02-16T01:09:00')
2026-02-16T03:12:38.720 [DEBUG] [Thread-216048] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:12:38.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:12:38.825 [DEBUG] [Thread-216051] [transport.py] [_log()] starting thread (client mode): 0xa2d6f610
2026-02-16T03:12:38.825 [DEBUG] [Thread-216051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:12:38.841 [DEBUG] [Thread-216051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:12:38.841 [INFO] [Thread-216051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] client lang: <none>
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] server lang: <none>
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] kex follows: False
2026-02-16T03:12:38.849 [DEBUG] [Thread-216051] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:12:38.850 [DEBUG] [Thread-216051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:12:38.850 [DEBUG] [Thread-216051] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:12:38.850 [DEBUG] [Thread-216051] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:12:38.850 [DEBUG] [Thread-216051] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:12:38.850 [DEBUG] [Thread-216051] [transport.py] [_log()] Compression: none
2026-02-16T03:12:38.850 [DEBUG] [Thread-216051] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:12:38.906 [DEBUG] [Thread-216051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:12:38.907 [DEBUG] [Thread-216051] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:12:38.907 [DEBUG] [Thread-216051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:12:38.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:12:38.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:12:38.964 [DEBUG] [Thread-216051] [transport.py] [_log()] userauth is OK
2026-02-16T03:12:38.964 [DEBUG] [Thread-216051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:12:38.964 [DEBUG] [Thread-216051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:12:38.964 [DEBUG] [Thread-216051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:12:38.965 [DEBUG] [Thread-216051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:12:38.984 [INFO] [Thread-216051] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:12:38.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:12:38.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:12:39.862 [DEBUG] [Thread-216051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:12:39.863 [DEBUG] [Thread-216051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:12:39.911 [DEBUG] [Thread-216051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:12:39.911 [DEBUG] [Thread-216051] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:12:39.921 [DEBUG] [Thread-216051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:12:39.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:12:39.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:12:39.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:12:39.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:12:39.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:12:39.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:12:39.957 [DEBUG] [Thread-216051] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:12:46.074 [DEBUG] [Thread-216053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:49.417 [DEBUG] [Thread-216054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:49.794 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:49.796 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:12:53.175 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:01.124 [DEBUG] [Thread-216055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:09.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:13:09.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:13:09.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:13:11.968 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 12, 46), 9.56, 52.36, 0.0, 14.45, 13.72, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:13:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:12:46
2026-02-16T03:13:12.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:13:12.550 [DEBUG] [Thread-216056] [transport.py] [_log()] starting thread (client mode): 0xa81d5a20
2026-02-16T03:13:12.550 [DEBUG] [Thread-216056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:13:12.570 [DEBUG] [Thread-216056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:13:12.570 [INFO] [Thread-216056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:13:12.573 [DEBUG] [Thread-216056] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:13:12.573 [DEBUG] [Thread-216056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:13:12.573 [DEBUG] [Thread-216056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:13:12.573 [DEBUG] [Thread-216056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:12.573 [DEBUG] [Thread-216056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:12.573 [DEBUG] [Thread-216056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] client lang: <none>
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] server lang: <none>
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] kex follows: False
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] Compression: none
2026-02-16T03:13:12.574 [DEBUG] [Thread-216056] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:13:12.590 [DEBUG] [Thread-216056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:13:12.591 [DEBUG] [Thread-216056] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:13:12.591 [DEBUG] [Thread-216056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:13:12.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:13:12.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:13:12.593 [DEBUG] [Thread-216056] [transport.py] [_log()] userauth is OK
2026-02-16T03:13:12.593 [DEBUG] [Thread-216056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:13:12.593 [DEBUG] [Thread-216056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:13:12.593 [DEBUG] [Thread-216056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:13:12.594 [DEBUG] [Thread-216056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:13:12.617 [INFO] [Thread-216056] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:13:12.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:13:13.255 [DEBUG] [Thread-216056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:13:13.255 [DEBUG] [Thread-216056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:13:13.255 [DEBUG] [Thread-216056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:13:13.296 [DEBUG] [Thread-216056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:13:13.296 [DEBUG] [Thread-216056] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:13:13.299 [DEBUG] [Thread-216056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:13:13.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:13:13.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:13:13.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:13:13.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:13:13.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:13:13.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:13:13.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:13:13.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:13:13.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:13:13.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.050099 -999.00  +14.10  12.75     55   +5.30 1 1 1 1 1     0    0 9.90 55.88 ZNESW 13.2 12.8 127.0 16.8 14.2 -22.2 14.0 -21.2 13.7 -19.8 14.1 -21.3
2026-02-16T03:13:13.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:13:13.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:13:13.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.050099
2026-02-16T03:13:13.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:13:13.317 [DEBUG] [Thread-216056] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:13:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:13:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:13:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:13:13.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:13:13.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:12:46', tmtdew=9.56, humidity=52.36, cloud=0.0, wind=14.45, temperature=13.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:12:46', seeing=2.43, atlas_timestamp='2026-02-16T01:12:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12124999999999986, -0.16324999999999967, -0.14724999999999966, -0.20950000000000024, -0.21649999999999991, -0.12074999999999925, -0.10350000000000037, -0.08474999999999966, -0.04749999999999943, -0.19200000000000017, -0.1907500000000013, -0.25099999999999945, -0.17249999999999943, -0.10975000000000001, -0.07200000000000095, -0.07800000000000118, -0.12875000000000014, -0.23349999999999937, -0.15800000000000125, -0.1307500000000026, -0.18100000000000094, -0.1332500000000021, -0.11274999999999835, -0.06124999999999936, -0.0754999999999999, -0.24150000000000027, -0.1427499999999995, -0.1385000000000005, -0.16499999999999915, -0.1664999999999992, -0.036999999999999034, -0.036999999999999034, -0.1407500000000006], zp_timestamp='2026-02-16T01:11:00')
2026-02-16T03:13:13.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:13:13.414 [DEBUG] [Thread-216059] [transport.py] [_log()] starting thread (client mode): 0xa2d27970
2026-02-16T03:13:13.414 [DEBUG] [Thread-216059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:13:13.429 [DEBUG] [Thread-216059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:13:13.429 [INFO] [Thread-216059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:13.437 [DEBUG] [Thread-216059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] client lang: <none>
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] server lang: <none>
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] kex follows: False
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:13:13.438 [DEBUG] [Thread-216059] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:13:13.439 [DEBUG] [Thread-216059] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:13:13.439 [DEBUG] [Thread-216059] [transport.py] [_log()] Compression: none
2026-02-16T03:13:13.439 [DEBUG] [Thread-216059] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:13:13.496 [DEBUG] [Thread-216059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:13:13.496 [DEBUG] [Thread-216059] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:13:13.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:13:13.497 [DEBUG] [Thread-216059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:13:13.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:13:13.552 [DEBUG] [Thread-216059] [transport.py] [_log()] userauth is OK
2026-02-16T03:13:13.552 [DEBUG] [Thread-216059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:13:13.552 [DEBUG] [Thread-216059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:13:13.553 [DEBUG] [Thread-216059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:13:13.553 [DEBUG] [Thread-216059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:13:13.575 [INFO] [Thread-216059] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:13:13.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:13:13.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:13:14.380 [DEBUG] [Thread-216059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:13:14.380 [DEBUG] [Thread-216059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:13:14.429 [DEBUG] [Thread-216059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:13:14.429 [DEBUG] [Thread-216059] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:13:14.437 [DEBUG] [Thread-216059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:13:14.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:13:14.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:13:14.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:13:14.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:13:14.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:13:14.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:13:14.472 [DEBUG] [Thread-216059] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:13:16.156 [DEBUG] [Thread-216061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:30.604 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:31.219 [DEBUG] [Thread-216062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:44.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:13:44.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:13:44.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:13:46.255 [DEBUG] [Thread-216063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 13, 21), 9.55, 52.39, 0.0, 15.02, 13.69, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:13:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:13:21
2026-02-16T03:13:46.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:13:46.902 [DEBUG] [Thread-216064] [transport.py] [_log()] starting thread (client mode): 0xa2d27910
2026-02-16T03:13:46.903 [DEBUG] [Thread-216064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:13:46.923 [DEBUG] [Thread-216064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:13:46.923 [INFO] [Thread-216064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:13:46.926 [DEBUG] [Thread-216064] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] client lang: <none>
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] server lang: <none>
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] kex follows: False
2026-02-16T03:13:46.927 [DEBUG] [Thread-216064] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:13:46.928 [DEBUG] [Thread-216064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:13:46.928 [DEBUG] [Thread-216064] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:13:46.928 [DEBUG] [Thread-216064] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:13:46.928 [DEBUG] [Thread-216064] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:13:46.928 [DEBUG] [Thread-216064] [transport.py] [_log()] Compression: none
2026-02-16T03:13:46.928 [DEBUG] [Thread-216064] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:13:46.945 [DEBUG] [Thread-216064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:13:46.946 [DEBUG] [Thread-216064] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:13:46.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:13:46.947 [DEBUG] [Thread-216064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:13:46.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:13:46.949 [DEBUG] [Thread-216064] [transport.py] [_log()] userauth is OK
2026-02-16T03:13:46.950 [DEBUG] [Thread-216064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:13:46.950 [DEBUG] [Thread-216064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:13:46.950 [DEBUG] [Thread-216064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:13:46.950 [DEBUG] [Thread-216064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:13:46.975 [INFO] [Thread-216064] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:13:46.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:13:47.880 [DEBUG] [Thread-216064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:13:47.880 [DEBUG] [Thread-216064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:13:47.880 [DEBUG] [Thread-216064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:13:47.921 [DEBUG] [Thread-216064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:13:47.922 [DEBUG] [Thread-216064] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:13:47.925 [DEBUG] [Thread-216064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:13:47.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:13:47.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:13:47.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:13:47.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:13:47.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:13:47.948 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:13:47.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:13:47.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:13:47.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:13:47.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.050793 -999.00  +14.00  13.10     56   +5.40 1 1 1 1 1     0    0 9.91 60.11 ZNESW 10.5 13.1 123.6 14.8 14.2 -21.9 14.1 -21.1 13.8 -19.9 14.1 -21.1
2026-02-16T03:13:47.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:13:47.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:13:47.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.050793
2026-02-16T03:13:47.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:13:47.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:13:47.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:13:47.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:13:47.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:13:47.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:13:21', tmtdew=9.55, humidity=52.39, cloud=0.0, wind=15.02, temperature=13.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:13:21', seeing=3.0, atlas_timestamp='2026-02-16T01:13:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12124999999999986, -0.16324999999999967, -0.14724999999999966, -0.20950000000000024, -0.21649999999999991, -0.12074999999999925, -0.10350000000000037, -0.08474999999999966, -0.04749999999999943, -0.19200000000000017, -0.1907500000000013, -0.25099999999999945, -0.17249999999999943, -0.10975000000000001, -0.07200000000000095, -0.07800000000000118, -0.12875000000000014, -0.23349999999999937, -0.15800000000000125, -0.1307500000000026, -0.18100000000000094, -0.1332500000000021, -0.11274999999999835, -0.06124999999999936, -0.0754999999999999, -0.24150000000000027, -0.1427499999999995, -0.1385000000000005, -0.16499999999999915, -0.1664999999999992, -0.036999999999999034, -0.036999999999999034, -0.1407500000000006], zp_timestamp='2026-02-16T01:11:00')
2026-02-16T03:13:47.951 [DEBUG] [Thread-216064] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:13:48.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:13:48.047 [DEBUG] [Thread-216067] [transport.py] [_log()] starting thread (client mode): 0xa2d12230
2026-02-16T03:13:48.047 [DEBUG] [Thread-216067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:13:48.064 [DEBUG] [Thread-216067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:13:48.065 [INFO] [Thread-216067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:13:48.072 [DEBUG] [Thread-216067] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:13:48.072 [DEBUG] [Thread-216067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] client lang: <none>
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] server lang: <none>
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] kex follows: False
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] Compression: none
2026-02-16T03:13:48.073 [DEBUG] [Thread-216067] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:13:48.131 [DEBUG] [Thread-216067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:13:48.132 [DEBUG] [Thread-216067] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:13:48.132 [DEBUG] [Thread-216067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:13:48.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:13:48.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:13:48.192 [DEBUG] [Thread-216067] [transport.py] [_log()] userauth is OK
2026-02-16T03:13:48.192 [DEBUG] [Thread-216067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:13:48.192 [DEBUG] [Thread-216067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:13:48.192 [DEBUG] [Thread-216067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:13:48.192 [DEBUG] [Thread-216067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:13:48.216 [INFO] [Thread-216067] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:13:48.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:13:48.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:13:49.088 [DEBUG] [Thread-216067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:13:49.088 [DEBUG] [Thread-216067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:13:49.136 [DEBUG] [Thread-216067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:13:49.136 [DEBUG] [Thread-216067] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:13:49.145 [DEBUG] [Thread-216067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:13:49.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:13:49.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:13:49.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:13:49.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:13:49.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:13:49.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:13:49.183 [DEBUG] [Thread-216067] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:13:49.242 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:49.473 [DEBUG] [Thread-216069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:49.998 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:13:49.999 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:01.293 [DEBUG] [Thread-216070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:08.092 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:16.353 [DEBUG] [Thread-216071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:19.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:14:19.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:14:19.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:14:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 13, 56), 9.34, 53.44, 0.0, 15.55, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:14:21.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:13:56
2026-02-16T03:14:21.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:14:21.893 [DEBUG] [Thread-216072] [transport.py] [_log()] starting thread (client mode): 0xa2d25ea0
2026-02-16T03:14:21.894 [DEBUG] [Thread-216072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:14:21.911 [DEBUG] [Thread-216072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:14:21.911 [INFO] [Thread-216072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:21.914 [DEBUG] [Thread-216072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] client lang: <none>
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] server lang: <none>
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] kex follows: False
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] Compression: none
2026-02-16T03:14:21.915 [DEBUG] [Thread-216072] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:14:21.935 [DEBUG] [Thread-216072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:14:21.935 [DEBUG] [Thread-216072] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:14:21.935 [DEBUG] [Thread-216072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:14:21.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:14:21.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:14:21.937 [DEBUG] [Thread-216072] [transport.py] [_log()] userauth is OK
2026-02-16T03:14:21.937 [DEBUG] [Thread-216072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:14:21.937 [DEBUG] [Thread-216072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:14:21.937 [DEBUG] [Thread-216072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:14:21.937 [DEBUG] [Thread-216072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:14:21.950 [INFO] [Thread-216072] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:14:21.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:14:22.579 [DEBUG] [Thread-216072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:14:22.579 [DEBUG] [Thread-216072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:14:22.580 [DEBUG] [Thread-216072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:14:22.620 [DEBUG] [Thread-216072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:14:22.621 [DEBUG] [Thread-216072] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:14:22.624 [DEBUG] [Thread-216072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:14:22.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:14:22.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:14:22.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:14:22.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:14:22.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:14:22.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:14:22.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:14:22.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:14:22.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:14:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.051140 -999.00  +14.00  12.29     56   +5.30 1 1 1 1 1     0    0 9.85 56.24 ZNESW 12.5 12.3 128.4 14.1 14.2 -22.2 14.1 -21.3 13.8 -19.8 14.1 -21.1
2026-02-16T03:14:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:14:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:14:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.051140
2026-02-16T03:14:22.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:14:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:14:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:14:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:14:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:14:22.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:13:56', tmtdew=9.34, humidity=53.44, cloud=0.0, wind=15.55, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:13:57', seeing=3.0, atlas_timestamp='2026-02-16T01:13:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12124999999999986, -0.16324999999999967, -0.14724999999999966, -0.20950000000000024, -0.21649999999999991, -0.12074999999999925, -0.10350000000000037, -0.08474999999999966, -0.04749999999999943, -0.19200000000000017, -0.1907500000000013, -0.25099999999999945, -0.17249999999999943, -0.10975000000000001, -0.07200000000000095, -0.07800000000000118, -0.12875000000000014, -0.23349999999999937, -0.15800000000000125, -0.1307500000000026, -0.18100000000000094, -0.1332500000000021, -0.11274999999999835, -0.06124999999999936, -0.0754999999999999, -0.24150000000000027, -0.1427499999999995, -0.1385000000000005, -0.16499999999999915, -0.1664999999999992, -0.036999999999999034, -0.036999999999999034, -0.1407500000000006], zp_timestamp='2026-02-16T01:11:00')
2026-02-16T03:14:22.651 [DEBUG] [Thread-216072] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:14:22.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:14:22.748 [DEBUG] [Thread-216075] [transport.py] [_log()] starting thread (client mode): 0xa81d60b0
2026-02-16T03:14:22.749 [DEBUG] [Thread-216075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:14:22.763 [DEBUG] [Thread-216075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:14:22.764 [INFO] [Thread-216075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:14:22.771 [DEBUG] [Thread-216075] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:14:22.772 [DEBUG] [Thread-216075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:14:22.772 [DEBUG] [Thread-216075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:14:22.772 [DEBUG] [Thread-216075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:22.772 [DEBUG] [Thread-216075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:22.772 [DEBUG] [Thread-216075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] client lang: <none>
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] server lang: <none>
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] kex follows: False
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] Compression: none
2026-02-16T03:14:22.773 [DEBUG] [Thread-216075] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:14:22.828 [DEBUG] [Thread-216075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:14:22.828 [DEBUG] [Thread-216075] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:14:22.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:14:22.829 [DEBUG] [Thread-216075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:14:22.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:14:22.884 [DEBUG] [Thread-216075] [transport.py] [_log()] userauth is OK
2026-02-16T03:14:22.885 [DEBUG] [Thread-216075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:14:22.885 [DEBUG] [Thread-216075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:14:22.885 [DEBUG] [Thread-216075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:14:22.885 [DEBUG] [Thread-216075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:14:22.909 [INFO] [Thread-216075] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:14:22.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:14:22.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:14:23.748 [DEBUG] [Thread-216075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:14:23.749 [DEBUG] [Thread-216075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:14:23.796 [DEBUG] [Thread-216075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:14:23.797 [DEBUG] [Thread-216075] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:14:23.806 [DEBUG] [Thread-216075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:14:23.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:14:23.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:14:23.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:14:23.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:14:23.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:14:23.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:14:23.843 [DEBUG] [Thread-216075] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:14:26.920 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:31.385 [DEBUG] [Thread-216077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:45.580 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:46.435 [DEBUG] [Thread-216078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:49.551 [DEBUG] [Thread-216079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:50.198 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:50.199 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:14:53.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:14:53.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:14:53.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:14:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 14, 32), 8.85, 54.98, 0.0, 16.06, 13.37, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:14:55.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:14:32
2026-02-16T03:14:56.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:14:56.207 [DEBUG] [Thread-216080] [transport.py] [_log()] starting thread (client mode): 0xa2dc1690
2026-02-16T03:14:56.207 [DEBUG] [Thread-216080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:14:56.227 [DEBUG] [Thread-216080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:14:56.227 [INFO] [Thread-216080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:14:56.230 [DEBUG] [Thread-216080] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:14:56.230 [DEBUG] [Thread-216080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:14:56.230 [DEBUG] [Thread-216080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:14:56.230 [DEBUG] [Thread-216080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:56.230 [DEBUG] [Thread-216080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:56.230 [DEBUG] [Thread-216080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] client lang: <none>
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] server lang: <none>
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] kex follows: False
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] Compression: none
2026-02-16T03:14:56.231 [DEBUG] [Thread-216080] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:14:56.251 [DEBUG] [Thread-216080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:14:56.252 [DEBUG] [Thread-216080] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:14:56.252 [DEBUG] [Thread-216080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:14:56.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:14:56.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:14:56.254 [DEBUG] [Thread-216080] [transport.py] [_log()] userauth is OK
2026-02-16T03:14:56.255 [DEBUG] [Thread-216080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:14:56.255 [DEBUG] [Thread-216080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:14:56.255 [DEBUG] [Thread-216080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:14:56.255 [DEBUG] [Thread-216080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:14:56.279 [INFO] [Thread-216080] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:14:56.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:14:57.072 [DEBUG] [Thread-216080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:14:57.072 [DEBUG] [Thread-216080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:14:57.073 [DEBUG] [Thread-216080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:14:57.113 [DEBUG] [Thread-216080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:14:57.114 [DEBUG] [Thread-216080] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:14:57.117 [DEBUG] [Thread-216080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:14:57.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:14:57.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:14:57.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:14:57.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:14:57.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:14:57.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:14:57.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:14:57.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:14:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:14:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.051487 -999.00  +13.90  13.13     56   +5.40 1 1 1 1 1     0    0 9.74 57.85 ZNESW 14.0 13.1 128.2 16.3 14.2 -22.3 14.1 -21.5 13.8 -20.2 14.0 -21.4
2026-02-16T03:14:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:14:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:14:57.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.051487
2026-02-16T03:14:57.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:14:57.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:14:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:14:57.144 [DEBUG] [Thread-216080] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:14:57.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:14:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:14:57.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:14:32', tmtdew=8.85, humidity=54.98, cloud=0.0, wind=16.06, temperature=13.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:14:33', seeing=2.36, atlas_timestamp='2026-02-16T01:14:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12124999999999986, -0.16324999999999967, -0.14724999999999966, -0.20950000000000024, -0.21649999999999991, -0.12074999999999925, -0.10350000000000037, -0.08474999999999966, -0.04749999999999943, -0.19200000000000017, -0.1907500000000013, -0.25099999999999945, -0.17249999999999943, -0.10975000000000001, -0.07200000000000095, -0.07800000000000118, -0.12875000000000014, -0.23349999999999937, -0.15800000000000125, -0.1307500000000026, -0.18100000000000094, -0.1332500000000021, -0.11274999999999835, -0.06124999999999936, -0.0754999999999999, -0.24150000000000027, -0.1427499999999995, -0.1385000000000005, -0.16499999999999915, -0.1664999999999992, -0.036999999999999034, -0.036999999999999034, -0.1407500000000006], zp_timestamp='2026-02-16T01:11:00')
2026-02-16T03:14:57.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:14:57.243 [DEBUG] [Thread-216083] [transport.py] [_log()] starting thread (client mode): 0xa57e2e30
2026-02-16T03:14:57.243 [DEBUG] [Thread-216083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:14:57.258 [DEBUG] [Thread-216083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:14:57.258 [INFO] [Thread-216083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] client lang: <none>
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] server lang: <none>
2026-02-16T03:14:57.266 [DEBUG] [Thread-216083] [transport.py] [_log()] kex follows: False
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] Compression: none
2026-02-16T03:14:57.267 [DEBUG] [Thread-216083] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:14:57.324 [DEBUG] [Thread-216083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:14:57.324 [DEBUG] [Thread-216083] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:14:57.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:14:57.325 [DEBUG] [Thread-216083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:14:57.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:14:57.380 [DEBUG] [Thread-216083] [transport.py] [_log()] userauth is OK
2026-02-16T03:14:57.381 [DEBUG] [Thread-216083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:14:57.381 [DEBUG] [Thread-216083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:14:57.381 [DEBUG] [Thread-216083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:14:57.381 [DEBUG] [Thread-216083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:14:57.401 [INFO] [Thread-216083] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:14:57.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:14:57.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:14:58.258 [DEBUG] [Thread-216083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:14:58.258 [DEBUG] [Thread-216083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:14:58.307 [DEBUG] [Thread-216083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:14:58.307 [DEBUG] [Thread-216083] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:14:58.318 [DEBUG] [Thread-216083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:14:58.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:14:58.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:14:58.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:14:58.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:14:58.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:14:58.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:14:58.357 [DEBUG] [Thread-216083] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:15:01.472 [DEBUG] [Thread-216085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:04.227 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:16.520 [DEBUG] [Thread-216086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:23.030 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:28.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:15:28.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:15:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:15:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 15, 8), 9.25, 53.41, 0.0, 16.09, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:15:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:15:08
2026-02-16T03:15:30.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:15:30.888 [DEBUG] [Thread-216087] [transport.py] [_log()] starting thread (client mode): 0xa2d03490
2026-02-16T03:15:30.888 [DEBUG] [Thread-216087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:15:30.907 [DEBUG] [Thread-216087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:15:30.907 [INFO] [Thread-216087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:15:30.911 [DEBUG] [Thread-216087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] client lang: <none>
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] server lang: <none>
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] kex follows: False
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] Compression: none
2026-02-16T03:15:30.912 [DEBUG] [Thread-216087] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:15:30.932 [DEBUG] [Thread-216087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:15:30.933 [DEBUG] [Thread-216087] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:15:30.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:15:30.935 [DEBUG] [Thread-216087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:15:30.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:15:30.937 [DEBUG] [Thread-216087] [transport.py] [_log()] userauth is OK
2026-02-16T03:15:30.938 [DEBUG] [Thread-216087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:15:30.938 [DEBUG] [Thread-216087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:15:30.938 [DEBUG] [Thread-216087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:15:30.938 [DEBUG] [Thread-216087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:15:30.973 [INFO] [Thread-216087] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:15:30.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:15:31.554 [DEBUG] [Thread-216089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:31.628 [DEBUG] [Thread-216087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:15:31.629 [DEBUG] [Thread-216087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:15:31.629 [DEBUG] [Thread-216087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:15:31.670 [DEBUG] [Thread-216087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:15:31.670 [DEBUG] [Thread-216087] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:15:31.673 [DEBUG] [Thread-216087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:15:31.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:15:31.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:15:31.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:15:31.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:15:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:15:31.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:15:31.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:15:31.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:15:31.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:15:31.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.051835 -999.00  +13.80  12.37     57   +5.50 1 1 1 1 1     0    0 9.81 56.31 ZNESW 12.4 12.4 133.8 17.1 14.2 -22.5 14.0 -21.4 13.8 -20.2 14.1 -21.4
2026-02-16T03:15:31.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:15:31.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:15:31.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.051835
2026-02-16T03:15:31.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:15:31.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:15:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:15:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:15:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:15:31.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:15:08', tmtdew=9.25, humidity=53.41, cloud=0.0, wind=16.09, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:15:08', seeing=2.7, atlas_timestamp='2026-02-16T01:14:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.12124999999999986, -0.16324999999999967, -0.14724999999999966, -0.20950000000000024, -0.21649999999999991, -0.12074999999999925, -0.10350000000000037, -0.08474999999999966, -0.04749999999999943, -0.19200000000000017, -0.1907500000000013, -0.25099999999999945, -0.17249999999999943, -0.10975000000000001, -0.07200000000000095, -0.07800000000000118, -0.12875000000000014, -0.23349999999999937, -0.15800000000000125, -0.1307500000000026, -0.18100000000000094, -0.1332500000000021, -0.11274999999999835, -0.06124999999999936, -0.0754999999999999, -0.24150000000000027, -0.1427499999999995, -0.1385000000000005, -0.16499999999999915, -0.1664999999999992, -0.036999999999999034, -0.036999999999999034, -0.1407500000000006], zp_timestamp='2026-02-16T01:11:00')
2026-02-16T03:15:31.698 [DEBUG] [Thread-216087] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:15:31.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:15:31.794 [DEBUG] [Thread-216091] [transport.py] [_log()] starting thread (client mode): 0xa2d01b40
2026-02-16T03:15:31.795 [DEBUG] [Thread-216091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:15:31.809 [DEBUG] [Thread-216091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:15:31.809 [INFO] [Thread-216091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:15:31.817 [DEBUG] [Thread-216091] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:15:31.817 [DEBUG] [Thread-216091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] client lang: <none>
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] server lang: <none>
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] kex follows: False
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] Compression: none
2026-02-16T03:15:31.818 [DEBUG] [Thread-216091] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:15:31.877 [DEBUG] [Thread-216091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:15:31.877 [DEBUG] [Thread-216091] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:15:31.878 [DEBUG] [Thread-216091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:15:31.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:15:31.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:15:31.932 [DEBUG] [Thread-216091] [transport.py] [_log()] userauth is OK
2026-02-16T03:15:31.933 [DEBUG] [Thread-216091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:15:31.933 [DEBUG] [Thread-216091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:15:31.933 [DEBUG] [Thread-216091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:15:31.933 [DEBUG] [Thread-216091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:15:31.951 [INFO] [Thread-216091] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:15:31.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:15:31.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:15:32.765 [DEBUG] [Thread-216091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:15:32.765 [DEBUG] [Thread-216091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:15:32.813 [DEBUG] [Thread-216091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:15:32.814 [DEBUG] [Thread-216091] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:15:32.823 [DEBUG] [Thread-216091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:15:32.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:15:32.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:15:32.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:15:32.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:15:32.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:15:32.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:15:32.864 [DEBUG] [Thread-216091] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:15:41.801 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:46.591 [DEBUG] [Thread-216093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:49.636 [DEBUG] [Thread-216094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:50.399 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:15:50.400 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:00.438 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:01.644 [DEBUG] [Thread-216095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:02.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:16:02.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:16:02.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:16:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 15, 43), 9.2, 53.89, 0.0, 14.61, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:16:04.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:15:43
2026-02-16T03:16:05.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:16:05.257 [DEBUG] [Thread-216096] [transport.py] [_log()] starting thread (client mode): 0xa2d27820
2026-02-16T03:16:05.257 [DEBUG] [Thread-216096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:16:05.272 [DEBUG] [Thread-216096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:16:05.273 [INFO] [Thread-216096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] client lang: <none>
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] server lang: <none>
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] kex follows: False
2026-02-16T03:16:05.276 [DEBUG] [Thread-216096] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:16:05.277 [DEBUG] [Thread-216096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:16:05.277 [DEBUG] [Thread-216096] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:16:05.277 [DEBUG] [Thread-216096] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:16:05.277 [DEBUG] [Thread-216096] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:16:05.277 [DEBUG] [Thread-216096] [transport.py] [_log()] Compression: none
2026-02-16T03:16:05.277 [DEBUG] [Thread-216096] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:16:05.293 [DEBUG] [Thread-216096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:16:05.294 [DEBUG] [Thread-216096] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:16:05.294 [DEBUG] [Thread-216096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:16:05.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:16:05.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:16:05.296 [DEBUG] [Thread-216096] [transport.py] [_log()] userauth is OK
2026-02-16T03:16:05.296 [DEBUG] [Thread-216096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:16:05.296 [DEBUG] [Thread-216096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:16:05.296 [DEBUG] [Thread-216096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:16:05.296 [DEBUG] [Thread-216096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:16:05.314 [INFO] [Thread-216096] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:16:05.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:16:06.161 [DEBUG] [Thread-216096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:16:06.161 [DEBUG] [Thread-216096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:16:06.161 [DEBUG] [Thread-216096] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:16:06.202 [DEBUG] [Thread-216096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:16:06.203 [DEBUG] [Thread-216096] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:16:06.206 [DEBUG] [Thread-216096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:16:06.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:16:06.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:16:06.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:16:06.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:16:06.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:16:06.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:16:06.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:16:06.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:16:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:16:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.052182 -999.00  +13.70  12.70     57   +5.40 1 1 1 1 1     0    0 9.73 54.47 ZNESW 13.6 12.7 126.8 15.8 14.2 -22.5 14.1 -21.4 13.7 -20.1 14.1 -21.3
2026-02-16T03:16:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:16:06.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:16:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.052182
2026-02-16T03:16:06.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:16:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:16:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:16:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:16:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:16:06.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:15:43', tmtdew=9.2, humidity=53.89, cloud=0.0, wind=14.61, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:15:43', seeing=2.72, atlas_timestamp='2026-02-16T01:15:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:15:00')
2026-02-16T03:16:06.233 [DEBUG] [Thread-216096] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:16:06.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:16:06.342 [DEBUG] [Thread-216099] [transport.py] [_log()] starting thread (client mode): 0xa81d7e80
2026-02-16T03:16:06.343 [DEBUG] [Thread-216099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:16:06.357 [DEBUG] [Thread-216099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:16:06.357 [INFO] [Thread-216099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] client lang: <none>
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] server lang: <none>
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] kex follows: False
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:16:06.366 [DEBUG] [Thread-216099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:16:06.367 [DEBUG] [Thread-216099] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:16:06.367 [DEBUG] [Thread-216099] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:16:06.367 [DEBUG] [Thread-216099] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:16:06.367 [DEBUG] [Thread-216099] [transport.py] [_log()] Compression: none
2026-02-16T03:16:06.367 [DEBUG] [Thread-216099] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:16:06.424 [DEBUG] [Thread-216099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:16:06.425 [DEBUG] [Thread-216099] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:16:06.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:16:06.426 [DEBUG] [Thread-216099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:16:06.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:16:06.480 [DEBUG] [Thread-216099] [transport.py] [_log()] userauth is OK
2026-02-16T03:16:06.481 [DEBUG] [Thread-216099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:16:06.481 [DEBUG] [Thread-216099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:16:06.481 [DEBUG] [Thread-216099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:16:06.481 [DEBUG] [Thread-216099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:16:06.499 [INFO] [Thread-216099] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:16:06.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:16:06.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:16:07.317 [DEBUG] [Thread-216099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:16:07.317 [DEBUG] [Thread-216099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:16:07.365 [DEBUG] [Thread-216099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:16:07.365 [DEBUG] [Thread-216099] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:16:07.375 [DEBUG] [Thread-216099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:16:07.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:16:07.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:16:07.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:16:07.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:16:07.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:16:07.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:16:07.410 [DEBUG] [Thread-216099] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:16:16.679 [DEBUG] [Thread-216101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:19.096 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:31.733 [DEBUG] [Thread-216102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:37.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:16:37.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:16:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:16:37.936 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 16, 18), 9.22, 53.79, 0.0, 17.08, 13.47, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:16:39.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:16:18
2026-02-16T03:16:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:16:39.778 [DEBUG] [Thread-216103] [transport.py] [_log()] starting thread (client mode): 0xa2d264d0
2026-02-16T03:16:39.778 [DEBUG] [Thread-216103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:16:39.798 [DEBUG] [Thread-216103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:16:39.798 [INFO] [Thread-216103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] client lang: <none>
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] server lang: <none>
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] kex follows: False
2026-02-16T03:16:39.801 [DEBUG] [Thread-216103] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:16:39.802 [DEBUG] [Thread-216103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:16:39.802 [DEBUG] [Thread-216103] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:16:39.802 [DEBUG] [Thread-216103] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:16:39.802 [DEBUG] [Thread-216103] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:16:39.802 [DEBUG] [Thread-216103] [transport.py] [_log()] Compression: none
2026-02-16T03:16:39.802 [DEBUG] [Thread-216103] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:16:39.818 [DEBUG] [Thread-216103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:16:39.819 [DEBUG] [Thread-216103] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:16:39.819 [DEBUG] [Thread-216103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:16:39.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:16:39.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:16:39.821 [DEBUG] [Thread-216103] [transport.py] [_log()] userauth is OK
2026-02-16T03:16:39.822 [DEBUG] [Thread-216103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:16:39.822 [DEBUG] [Thread-216103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:16:39.822 [DEBUG] [Thread-216103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:16:39.822 [DEBUG] [Thread-216103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:16:39.859 [INFO] [Thread-216103] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:16:39.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:16:40.472 [DEBUG] [Thread-216103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:16:40.473 [DEBUG] [Thread-216103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:16:40.473 [DEBUG] [Thread-216103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:16:40.513 [DEBUG] [Thread-216103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:16:40.514 [DEBUG] [Thread-216103] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:16:40.517 [DEBUG] [Thread-216103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:16:40.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:16:40.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:16:40.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:16:40.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:16:40.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:16:40.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:16:40.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:16:40.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:16:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:16:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.052529 -999.00  +13.60  11.97     58   +5.50 1 1 1 1 1     0    0 9.66 50.73 ZNESW 11.0 12.0 119.4 16.0 14.2 -22.3 14.0 -21.3 13.7 -20.0 14.0 -21.4
2026-02-16T03:16:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:16:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:16:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.052529
2026-02-16T03:16:40.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:16:40.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:16:40.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:16:40.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:16:40.544 [DEBUG] [Thread-216103] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:16:40.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:16:40.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:16:18', tmtdew=9.22, humidity=53.79, cloud=0.0, wind=17.08, temperature=13.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:16:18', seeing=3.02, atlas_timestamp='2026-02-16T01:15:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:15:00')
2026-02-16T03:16:40.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:16:40.639 [DEBUG] [Thread-216106] [transport.py] [_log()] starting thread (client mode): 0xa2d26290
2026-02-16T03:16:40.639 [DEBUG] [Thread-216106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:16:40.653 [DEBUG] [Thread-216106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:16:40.654 [INFO] [Thread-216106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:16:40.661 [DEBUG] [Thread-216106] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:16:40.661 [DEBUG] [Thread-216106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:16:40.661 [DEBUG] [Thread-216106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:16:40.661 [DEBUG] [Thread-216106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:40.661 [DEBUG] [Thread-216106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:16:40.661 [DEBUG] [Thread-216106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] client lang: <none>
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] server lang: <none>
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] kex follows: False
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] Compression: none
2026-02-16T03:16:40.662 [DEBUG] [Thread-216106] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:16:40.720 [DEBUG] [Thread-216106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:16:40.721 [DEBUG] [Thread-216106] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:16:40.722 [DEBUG] [Thread-216106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:16:40.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:16:40.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:16:40.777 [DEBUG] [Thread-216106] [transport.py] [_log()] userauth is OK
2026-02-16T03:16:40.777 [DEBUG] [Thread-216106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:16:40.777 [DEBUG] [Thread-216106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:16:40.777 [DEBUG] [Thread-216106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:16:40.778 [DEBUG] [Thread-216106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:16:40.797 [INFO] [Thread-216106] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:16:40.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:16:40.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:16:41.603 [DEBUG] [Thread-216106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:16:41.603 [DEBUG] [Thread-216106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:16:41.651 [DEBUG] [Thread-216106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:16:41.652 [DEBUG] [Thread-216106] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:16:41.661 [DEBUG] [Thread-216106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:16:41.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:16:41.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:16:41.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:16:41.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:16:41.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:16:41.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:16:41.697 [DEBUG] [Thread-216106] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:16:46.770 [DEBUG] [Thread-216108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:49.693 [DEBUG] [Thread-216109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:50.601 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:50.602 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:16:56.728 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:01.822 [DEBUG] [Thread-216110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:11.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:17:11.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:17:11.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:17:14.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 16, 54), 9.34, 53.21, 0.0, 17.24, 13.5, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:17:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:16:54
2026-02-16T03:17:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:17:14.591 [DEBUG] [Thread-216111] [transport.py] [_log()] starting thread (client mode): 0xa57e05b0
2026-02-16T03:17:14.591 [DEBUG] [Thread-216111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:17:14.612 [DEBUG] [Thread-216111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:17:14.612 [INFO] [Thread-216111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:14.615 [DEBUG] [Thread-216111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] client lang: <none>
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] server lang: <none>
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] kex follows: False
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] Compression: none
2026-02-16T03:17:14.616 [DEBUG] [Thread-216111] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:17:14.633 [DEBUG] [Thread-216111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:17:14.634 [DEBUG] [Thread-216111] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:17:14.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:17:14.635 [DEBUG] [Thread-216111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:17:14.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:17:14.637 [DEBUG] [Thread-216111] [transport.py] [_log()] userauth is OK
2026-02-16T03:17:14.637 [DEBUG] [Thread-216111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:17:14.637 [DEBUG] [Thread-216111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:17:14.638 [DEBUG] [Thread-216111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:17:14.638 [DEBUG] [Thread-216111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:17:14.662 [INFO] [Thread-216111] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:17:14.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:17:15.305 [DEBUG] [Thread-216111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:17:15.305 [DEBUG] [Thread-216111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:17:15.306 [DEBUG] [Thread-216111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:17:15.346 [DEBUG] [Thread-216111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:17:15.347 [DEBUG] [Thread-216111] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:17:15.350 [DEBUG] [Thread-216111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:17:15.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:17:15.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:17:15.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:17:15.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:17:15.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:17:15.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:17:15.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:17:15.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:17:15.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:17:15.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.053224 -999.00  +13.70  12.20     56   +5.10 1 1 1 1 1     0    0 9.78 49.96 ZNESW 14.2 12.2 113.4 15.7 14.1 -22.0 14.0 -20.6 13.7 -19.3 14.0 -20.7
2026-02-16T03:17:15.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:17:15.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:17:15.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.053224
2026-02-16T03:17:15.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:17:15.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:16:54', tmtdew=9.34, humidity=53.21, cloud=0.0, wind=17.24, temperature=13.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:16:56', seeing=1.88, atlas_timestamp='2026-02-16T01:16:38.554', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:15:00')
2026-02-16T03:17:15.377 [DEBUG] [Thread-216111] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:17:15.390 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:15.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:17:15.473 [DEBUG] [Thread-216114] [transport.py] [_log()] starting thread (client mode): 0xa81d66e0
2026-02-16T03:17:15.473 [DEBUG] [Thread-216114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:17:15.487 [DEBUG] [Thread-216114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:17:15.487 [INFO] [Thread-216114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] client lang: <none>
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] server lang: <none>
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] kex follows: False
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:17:15.495 [DEBUG] [Thread-216114] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:17:15.496 [DEBUG] [Thread-216114] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:17:15.496 [DEBUG] [Thread-216114] [transport.py] [_log()] Compression: none
2026-02-16T03:17:15.496 [DEBUG] [Thread-216114] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:17:15.553 [DEBUG] [Thread-216114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:17:15.553 [DEBUG] [Thread-216114] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:17:15.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:17:15.554 [DEBUG] [Thread-216114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:17:15.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:17:15.609 [DEBUG] [Thread-216114] [transport.py] [_log()] userauth is OK
2026-02-16T03:17:15.609 [DEBUG] [Thread-216114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:17:15.609 [DEBUG] [Thread-216114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:17:15.609 [DEBUG] [Thread-216114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:17:15.609 [DEBUG] [Thread-216114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:17:15.628 [INFO] [Thread-216114] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:17:15.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:17:15.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:17:16.426 [DEBUG] [Thread-216114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:17:16.426 [DEBUG] [Thread-216114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:17:16.474 [DEBUG] [Thread-216114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:17:16.475 [DEBUG] [Thread-216114] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:17:16.484 [DEBUG] [Thread-216114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:17:16.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:17:16.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:17:16.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:17:16.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:17:16.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:17:16.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:17:16.522 [DEBUG] [Thread-216114] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:17:16.858 [DEBUG] [Thread-216116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:31.917 [DEBUG] [Thread-216117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:34.037 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:46.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:17:46.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:17:46.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:17:46.954 [DEBUG] [Thread-216118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:48.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 17, 32), 9.36, 53.11, 0.0, 17.43, 13.52, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:17:48.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:17:32
2026-02-16T03:17:48.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:17:48.886 [DEBUG] [Thread-216119] [transport.py] [_log()] starting thread (client mode): 0xa57e0b50
2026-02-16T03:17:48.886 [DEBUG] [Thread-216119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:17:48.906 [DEBUG] [Thread-216119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:17:48.907 [INFO] [Thread-216119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:17:48.909 [DEBUG] [Thread-216119] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:17:48.909 [DEBUG] [Thread-216119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:17:48.909 [DEBUG] [Thread-216119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:17:48.909 [DEBUG] [Thread-216119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] client lang: <none>
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] server lang: <none>
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] kex follows: False
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] Compression: none
2026-02-16T03:17:48.910 [DEBUG] [Thread-216119] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:17:48.927 [DEBUG] [Thread-216119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:17:48.927 [DEBUG] [Thread-216119] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:17:48.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:17:48.928 [DEBUG] [Thread-216119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:17:48.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:17:48.930 [DEBUG] [Thread-216119] [transport.py] [_log()] userauth is OK
2026-02-16T03:17:48.931 [DEBUG] [Thread-216119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:17:48.931 [DEBUG] [Thread-216119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:17:48.931 [DEBUG] [Thread-216119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:17:48.931 [DEBUG] [Thread-216119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:17:48.956 [INFO] [Thread-216119] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:17:48.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:17:49.571 [DEBUG] [Thread-216119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:17:49.571 [DEBUG] [Thread-216119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:17:49.572 [DEBUG] [Thread-216119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:17:49.613 [DEBUG] [Thread-216119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:17:49.613 [DEBUG] [Thread-216119] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:17:49.616 [DEBUG] [Thread-216119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:17:49.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:17:49.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:17:49.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:17:49.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:17:49.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:17:49.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:17:49.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:17:49.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:17:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:17:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.053571 -999.00  +14.00  11.02     54   +4.80 1 1 1 1 1     0    0 10.08 59.27 ZNESW 13.0 11.0 114.6 14.2 14.1 -21.1 14.0 -21.0 13.8 -19.7 14.1 -20.8
2026-02-16T03:17:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:17:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:17:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.053571
2026-02-16T03:17:49.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:17:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:17:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:17:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:17:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:17:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:17:32', tmtdew=9.36, humidity=53.11, cloud=0.0, wind=17.43, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:17:32', seeing=1.78, atlas_timestamp='2026-02-16T01:17:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:15:00')
2026-02-16T03:17:49.642 [DEBUG] [Thread-216119] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:17:49.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:17:49.737 [DEBUG] [Thread-216122] [transport.py] [_log()] starting thread (client mode): 0xa2d02740
2026-02-16T03:17:49.737 [DEBUG] [Thread-216122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:17:49.745 [DEBUG] [Thread-216123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:49.754 [DEBUG] [Thread-216122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:17:49.754 [INFO] [Thread-216122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:17:49.761 [DEBUG] [Thread-216122] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:17:49.761 [DEBUG] [Thread-216122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:17:49.761 [DEBUG] [Thread-216122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] client lang: <none>
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] server lang: <none>
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] kex follows: False
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] Compression: none
2026-02-16T03:17:49.762 [DEBUG] [Thread-216122] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:17:49.825 [DEBUG] [Thread-216122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:17:49.826 [DEBUG] [Thread-216122] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:17:49.826 [DEBUG] [Thread-216122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:17:49.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:17:49.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:17:49.880 [DEBUG] [Thread-216122] [transport.py] [_log()] userauth is OK
2026-02-16T03:17:49.881 [DEBUG] [Thread-216122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:17:49.881 [DEBUG] [Thread-216122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:17:49.881 [DEBUG] [Thread-216122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:17:49.881 [DEBUG] [Thread-216122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:17:49.906 [INFO] [Thread-216122] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:17:49.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:17:49.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:17:50.792 [DEBUG] [Thread-216122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:17:50.793 [DEBUG] [Thread-216122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:17:50.800 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:50.801 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:17:50.840 [DEBUG] [Thread-216122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:17:50.840 [DEBUG] [Thread-216122] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:17:50.850 [DEBUG] [Thread-216122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:17:50.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:17:50.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:17:50.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:17:50.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:17:50.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:17:50.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:17:50.886 [DEBUG] [Thread-216122] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:17:52.899 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:01.988 [DEBUG] [Thread-216125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:11.714 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:17.030 [DEBUG] [Thread-216126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:20.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:18:20.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:18:20.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:18:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 18, 7), 9.35, 53.15, 0.0, 17.35, 13.45, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:18:22.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:18:07
2026-02-16T03:18:23.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:18:23.497 [DEBUG] [Thread-216127] [transport.py] [_log()] starting thread (client mode): 0xa2d10790
2026-02-16T03:18:23.497 [DEBUG] [Thread-216127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:18:23.517 [DEBUG] [Thread-216127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:18:23.518 [INFO] [Thread-216127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] client lang: <none>
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] server lang: <none>
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] kex follows: False
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] Compression: none
2026-02-16T03:18:23.521 [DEBUG] [Thread-216127] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:18:23.539 [DEBUG] [Thread-216127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:18:23.540 [DEBUG] [Thread-216127] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:18:23.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:18:23.541 [DEBUG] [Thread-216127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:18:23.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:18:23.543 [DEBUG] [Thread-216127] [transport.py] [_log()] userauth is OK
2026-02-16T03:18:23.543 [DEBUG] [Thread-216127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:18:23.543 [DEBUG] [Thread-216127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:18:23.543 [DEBUG] [Thread-216127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:18:23.544 [DEBUG] [Thread-216127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:18:23.569 [INFO] [Thread-216127] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:18:23.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:18:24.188 [DEBUG] [Thread-216127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:18:24.188 [DEBUG] [Thread-216127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:18:24.189 [DEBUG] [Thread-216127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:18:24.229 [DEBUG] [Thread-216127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:18:24.230 [DEBUG] [Thread-216127] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:18:24.233 [DEBUG] [Thread-216127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:18:24.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:18:24.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:18:24.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:18:24.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:18:24.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:18:24.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:18:24.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:18:24.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:18:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:18:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.053918 -999.00  +14.10  12.85     54   +4.90 1 1 1 1 1     0    0 10.07 61.34 ZNESW 11.7 12.8 123.8 16.1 14.2 -22.0 14.1 -21.1 13.8 -19.7 14.1 -20.9
2026-02-16T03:18:24.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:18:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:18:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.053918
2026-02-16T03:18:24.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:18:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:18:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:18:24.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:18:24.259 [DEBUG] [Thread-216127] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:18:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:18:24.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:18:07', tmtdew=9.35, humidity=53.15, cloud=0.0, wind=17.35, temperature=13.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:18:07', seeing=1.33, atlas_timestamp='2026-02-16T01:17:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:15:00')
2026-02-16T03:18:24.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:18:24.361 [DEBUG] [Thread-216130] [transport.py] [_log()] starting thread (client mode): 0xa57b01c0
2026-02-16T03:18:24.361 [DEBUG] [Thread-216130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:18:24.375 [DEBUG] [Thread-216130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:18:24.375 [INFO] [Thread-216130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:18:24.383 [DEBUG] [Thread-216130] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:18:24.383 [DEBUG] [Thread-216130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:18:24.383 [DEBUG] [Thread-216130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:18:24.383 [DEBUG] [Thread-216130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:24.383 [DEBUG] [Thread-216130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] client lang: <none>
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] server lang: <none>
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] kex follows: False
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:18:24.384 [DEBUG] [Thread-216130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:18:24.385 [DEBUG] [Thread-216130] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:18:24.385 [DEBUG] [Thread-216130] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:18:24.385 [DEBUG] [Thread-216130] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:18:24.385 [DEBUG] [Thread-216130] [transport.py] [_log()] Compression: none
2026-02-16T03:18:24.385 [DEBUG] [Thread-216130] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:18:24.442 [DEBUG] [Thread-216130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:18:24.443 [DEBUG] [Thread-216130] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:18:24.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:18:24.444 [DEBUG] [Thread-216130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:18:24.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:18:24.503 [DEBUG] [Thread-216130] [transport.py] [_log()] userauth is OK
2026-02-16T03:18:24.503 [DEBUG] [Thread-216130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:18:24.503 [DEBUG] [Thread-216130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:18:24.503 [DEBUG] [Thread-216130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:18:24.503 [DEBUG] [Thread-216130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:18:24.522 [INFO] [Thread-216130] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:18:24.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:18:24.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:18:25.308 [DEBUG] [Thread-216130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:18:25.308 [DEBUG] [Thread-216130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:18:25.360 [DEBUG] [Thread-216130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:18:25.360 [DEBUG] [Thread-216130] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:18:25.369 [DEBUG] [Thread-216130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:18:25.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:18: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')
2026-02-16T03:18:25.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:18:25.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:18:25.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:18:25.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:18:25.413 [DEBUG] [Thread-216130] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:18:30.378 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:32.066 [DEBUG] [Thread-216132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:47.110 [DEBUG] [Thread-216133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:49.058 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:49.812 [DEBUG] [Thread-216134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:51.000 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:51.001 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:18:55.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:18:55.424 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:18: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-02-16T03:18:57.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 18, 42), 9.28, 53.36, 0.0, 14.75, 13.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:18:57.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:18:42
2026-02-16T03:18:57.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:18:57.900 [DEBUG] [Thread-216135] [transport.py] [_log()] starting thread (client mode): 0xa2d27cd0
2026-02-16T03:18:57.900 [DEBUG] [Thread-216135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:18:57.922 [DEBUG] [Thread-216135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:18:57.922 [INFO] [Thread-216135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:18:57.925 [DEBUG] [Thread-216135] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:18:57.925 [DEBUG] [Thread-216135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:18:57.925 [DEBUG] [Thread-216135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:18:57.925 [DEBUG] [Thread-216135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:57.925 [DEBUG] [Thread-216135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] client lang: <none>
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] server lang: <none>
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] kex follows: False
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] Compression: none
2026-02-16T03:18:57.926 [DEBUG] [Thread-216135] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:18:57.945 [DEBUG] [Thread-216135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:18:57.946 [DEBUG] [Thread-216135] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:18:57.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:18:57.947 [DEBUG] [Thread-216135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:18:57.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:18:57.949 [DEBUG] [Thread-216135] [transport.py] [_log()] userauth is OK
2026-02-16T03:18:57.949 [DEBUG] [Thread-216135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:18:57.949 [DEBUG] [Thread-216135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:18:57.949 [DEBUG] [Thread-216135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:18:57.949 [DEBUG] [Thread-216135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:18:57.974 [INFO] [Thread-216135] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:18:57.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:18:58.762 [DEBUG] [Thread-216135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:18:58.763 [DEBUG] [Thread-216135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:18:58.763 [DEBUG] [Thread-216135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:18:58.803 [DEBUG] [Thread-216135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:18:58.804 [DEBUG] [Thread-216135] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:18:58.807 [DEBUG] [Thread-216135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:18:58.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:18:58.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:18:58.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:18:58.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:18:58.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:18:58.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:18:58.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:18:58.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:18:58.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:18:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.054265 -999.00  +14.10  11.92     54   +5.10 1 1 1 1 1     0    0 10.07 59.74 ZNESW 11.8 11.9 119.0 14.9 14.2 -22.1 14.1 -21.2 13.8 -19.8 14.1 -21.2
2026-02-16T03:18:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:18:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:18:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.054265
2026-02-16T03:18:58.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:18:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:18:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:18:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:18:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:18:58.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:18:42', tmtdew=9.28, humidity=53.36, cloud=0.0, wind=14.75, temperature=13.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:18:42', seeing=1.48, atlas_timestamp='2026-02-16T01:18:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:17:00')
2026-02-16T03:18:58.833 [DEBUG] [Thread-216135] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:18:58.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:18:58.930 [DEBUG] [Thread-216138] [transport.py] [_log()] starting thread (client mode): 0xa2d12230
2026-02-16T03:18:58.930 [DEBUG] [Thread-216138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:18:58.944 [DEBUG] [Thread-216138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:18:58.944 [INFO] [Thread-216138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] client lang: <none>
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] server lang: <none>
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] kex follows: False
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:18:58.952 [DEBUG] [Thread-216138] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:18:58.953 [DEBUG] [Thread-216138] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:18:58.953 [DEBUG] [Thread-216138] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:18:58.953 [DEBUG] [Thread-216138] [transport.py] [_log()] Compression: none
2026-02-16T03:18:58.953 [DEBUG] [Thread-216138] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:18:59.012 [DEBUG] [Thread-216138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:18:59.013 [DEBUG] [Thread-216138] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:18:59.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:18:59.014 [DEBUG] [Thread-216138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:18:59.015 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:18:59.068 [DEBUG] [Thread-216138] [transport.py] [_log()] userauth is OK
2026-02-16T03:18:59.069 [DEBUG] [Thread-216138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:18:59.069 [DEBUG] [Thread-216138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:18:59.069 [DEBUG] [Thread-216138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:18:59.069 [DEBUG] [Thread-216138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:18:59.088 [INFO] [Thread-216138] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:18:59.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:18:59.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:18:59.945 [DEBUG] [Thread-216138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:18:59.946 [DEBUG] [Thread-216138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:18:59.993 [DEBUG] [Thread-216138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:18:59.994 [DEBUG] [Thread-216138] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:19:00.003 [DEBUG] [Thread-216138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:19:00.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:19:00.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:19:00.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:19:00.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:19:00.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:19:00.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:19:00.039 [DEBUG] [Thread-216138] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:19:02.146 [DEBUG] [Thread-216140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:07.938 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:17.196 [DEBUG] [Thread-216141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:26.882 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:30.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:19:30.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:19: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
2026-02-16T03:19:32.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 19, 18), 9.73, 51.73, 0.0, 14.63, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:19:32.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:19:18
2026-02-16T03:19:32.234 [DEBUG] [Thread-216142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:32.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:19:32.666 [DEBUG] [Thread-216143] [transport.py] [_log()] starting thread (client mode): 0xa2d10d00
2026-02-16T03:19:32.666 [DEBUG] [Thread-216143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:19:32.685 [DEBUG] [Thread-216143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:19:32.685 [INFO] [Thread-216143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] client lang: <none>
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] server lang: <none>
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] kex follows: False
2026-02-16T03:19:32.689 [DEBUG] [Thread-216143] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:19:32.690 [DEBUG] [Thread-216143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:19:32.690 [DEBUG] [Thread-216143] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:19:32.690 [DEBUG] [Thread-216143] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:19:32.690 [DEBUG] [Thread-216143] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:19:32.690 [DEBUG] [Thread-216143] [transport.py] [_log()] Compression: none
2026-02-16T03:19:32.690 [DEBUG] [Thread-216143] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:19:32.706 [DEBUG] [Thread-216143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:19:32.707 [DEBUG] [Thread-216143] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:19:32.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:19:32.708 [DEBUG] [Thread-216143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:19:32.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:19:32.710 [DEBUG] [Thread-216143] [transport.py] [_log()] userauth is OK
2026-02-16T03:19:32.710 [DEBUG] [Thread-216143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:19:32.710 [DEBUG] [Thread-216143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:19:32.710 [DEBUG] [Thread-216143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:19:32.710 [DEBUG] [Thread-216143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:19:32.734 [INFO] [Thread-216143] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:19:32.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:19:33.375 [DEBUG] [Thread-216143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:19:33.376 [DEBUG] [Thread-216143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:19:33.376 [DEBUG] [Thread-216143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:19:33.417 [DEBUG] [Thread-216143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:19:33.417 [DEBUG] [Thread-216143] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:19:33.420 [DEBUG] [Thread-216143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:19:33.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:19:33.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:19:33.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:19:33.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:19:33.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:19:33.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:19:33.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:19:33.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:19:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:19:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.054612 -999.00  +14.00  11.30     55   +5.20 1 1 1 1 1     0    0 10.25 63.04 ZNESW 10.5 11.3 124.8 14.5 14.2 -22.1 14.1 -21.1 13.8 -19.8 14.1 -21.0
2026-02-16T03:19:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:19:33.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:19:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.054612
2026-02-16T03:19:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:19:33.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:19:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:19:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:19:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:19:33.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:19:18', tmtdew=9.73, humidity=51.73, cloud=0.0, wind=14.63, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:19:18', seeing=2.27, atlas_timestamp='2026-02-16T01:18:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:17:00')
2026-02-16T03:19:33.450 [DEBUG] [Thread-216143] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:19:33.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:19:33.548 [DEBUG] [Thread-216146] [transport.py] [_log()] starting thread (client mode): 0xa5771ea0
2026-02-16T03:19:33.548 [DEBUG] [Thread-216146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:19:33.562 [DEBUG] [Thread-216146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:19:33.562 [INFO] [Thread-216146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:19:33.570 [DEBUG] [Thread-216146] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:19:33.570 [DEBUG] [Thread-216146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:19:33.570 [DEBUG] [Thread-216146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:19:33.570 [DEBUG] [Thread-216146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:19:33.570 [DEBUG] [Thread-216146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] client lang: <none>
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] server lang: <none>
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] kex follows: False
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:19:33.571 [DEBUG] [Thread-216146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:19:33.572 [DEBUG] [Thread-216146] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:19:33.572 [DEBUG] [Thread-216146] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:19:33.572 [DEBUG] [Thread-216146] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:19:33.572 [DEBUG] [Thread-216146] [transport.py] [_log()] Compression: none
2026-02-16T03:19:33.572 [DEBUG] [Thread-216146] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:19:33.628 [DEBUG] [Thread-216146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:19:33.629 [DEBUG] [Thread-216146] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:19:33.629 [DEBUG] [Thread-216146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:19:33.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:19:33.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:19:33.684 [DEBUG] [Thread-216146] [transport.py] [_log()] userauth is OK
2026-02-16T03:19:33.684 [DEBUG] [Thread-216146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:19:33.685 [DEBUG] [Thread-216146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:19:33.685 [DEBUG] [Thread-216146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:19:33.685 [DEBUG] [Thread-216146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:19:33.707 [INFO] [Thread-216146] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:19:33.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:19:33.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:19:34.531 [DEBUG] [Thread-216146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:19:34.532 [DEBUG] [Thread-216146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:19:34.579 [DEBUG] [Thread-216146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:19:34.579 [DEBUG] [Thread-216146] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:19:34.588 [DEBUG] [Thread-216146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:19:34.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:19: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')
2026-02-16T03:19: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
2026-02-16T03:19:34.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:19:34.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:19:34.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:19:34.622 [DEBUG] [Thread-216146] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:19:45.532 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:47.267 [DEBUG] [Thread-216148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:49.887 [DEBUG] [Thread-216149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:51.204 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:19:51.205 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:02.319 [DEBUG] [Thread-216150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:04.192 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:04.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:20:04.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:20:04.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:20:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 19, 53), 9.59, 52.36, 0.0, 17.13, 13.52, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:20:06.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:19:53
2026-02-16T03:20:06.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:20:07.003 [DEBUG] [Thread-216151] [transport.py] [_log()] starting thread (client mode): 0xa2deb2e0
2026-02-16T03:20:07.003 [DEBUG] [Thread-216151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:20:07.027 [DEBUG] [Thread-216151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:20:07.027 [INFO] [Thread-216151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] client lang: <none>
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] server lang: <none>
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] kex follows: False
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] Compression: none
2026-02-16T03:20:07.030 [DEBUG] [Thread-216151] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:20:07.047 [DEBUG] [Thread-216151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:20:07.048 [DEBUG] [Thread-216151] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:20:07.048 [DEBUG] [Thread-216151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:20:07.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:20:07.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:20:07.049 [DEBUG] [Thread-216151] [transport.py] [_log()] userauth is OK
2026-02-16T03:20:07.049 [DEBUG] [Thread-216151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:20:07.049 [DEBUG] [Thread-216151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:20:07.049 [DEBUG] [Thread-216151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:20:07.049 [DEBUG] [Thread-216151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:20:07.060 [INFO] [Thread-216151] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:20:07.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:20:16.068 [DEBUG] [Thread-216151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:20:16.069 [DEBUG] [Thread-216151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:20:16.069 [DEBUG] [Thread-216151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:20:16.110 [DEBUG] [Thread-216151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:20:16.110 [DEBUG] [Thread-216151] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:20:16.114 [DEBUG] [Thread-216151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:20:16.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:20:16.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:20:16.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:20:16.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:20:16.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:20:16.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:20:16.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:20:16.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:20:16.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:20:16.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.054960 -999.00  +14.00   9.58     55   +5.10 1 1 1 1 1     0    0 10.11 63.29 ZNESW 13.8 9.6 118.2 15.1 14.3 -22.0 14.1 -21.0 13.8 -19.6 14.1 -20.6
2026-02-16T03:20:16.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:20:16.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:20:16.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.054960
2026-02-16T03:20:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:20:16.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:20:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:20:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:20:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:20:16.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:19:53', tmtdew=9.59, humidity=52.36, cloud=0.0, wind=17.13, temperature=13.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:19:53', seeing=2.02, atlas_timestamp='2026-02-16T01:19:08.544', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:17:00')
2026-02-16T03:20:16.150 [DEBUG] [Thread-216151] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:20:16.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:20:16.247 [DEBUG] [Thread-216154] [transport.py] [_log()] starting thread (client mode): 0xa2de8610
2026-02-16T03:20:16.247 [DEBUG] [Thread-216154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:20:16.261 [DEBUG] [Thread-216154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:20:16.261 [INFO] [Thread-216154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:20:16.268 [DEBUG] [Thread-216154] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:20:16.268 [DEBUG] [Thread-216154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:20:16.268 [DEBUG] [Thread-216154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] client lang: <none>
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] server lang: <none>
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] kex follows: False
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] Compression: none
2026-02-16T03:20:16.269 [DEBUG] [Thread-216154] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:20:16.328 [DEBUG] [Thread-216154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:20:16.329 [DEBUG] [Thread-216154] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:20:16.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:20:16.330 [DEBUG] [Thread-216154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:20:16.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:20:16.385 [DEBUG] [Thread-216154] [transport.py] [_log()] userauth is OK
2026-02-16T03:20:16.385 [DEBUG] [Thread-216154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:20:16.385 [DEBUG] [Thread-216154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:20:16.385 [DEBUG] [Thread-216154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:20:16.385 [DEBUG] [Thread-216154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:20:16.405 [INFO] [Thread-216154] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:20:16.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:20:16.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:20:17.296 [DEBUG] [Thread-216154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:20:17.296 [DEBUG] [Thread-216154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:20:17.343 [DEBUG] [Thread-216154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:20:17.344 [DEBUG] [Thread-216154] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:20:17.353 [DEBUG] [Thread-216154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:20:17.355 [DEBUG] [Thread-216156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:17.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:20:17.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:20:17.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:20:17.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:20:17.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:20:17.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:20:17.388 [DEBUG] [Thread-216154] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:20:22.861 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:32.408 [DEBUG] [Thread-216157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:41.630 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:47.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:20:47.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:20:47.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:20:47.448 [DEBUG] [Thread-216158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 20, 28), 9.58, 52.41, 0.0, 17.13, 13.59, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:20:49.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:20:28
2026-02-16T03:20:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:20:49.724 [DEBUG] [Thread-216159] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-16T03:20:49.724 [DEBUG] [Thread-216159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:20:49.746 [DEBUG] [Thread-216159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:20:49.746 [INFO] [Thread-216159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:49.747 [DEBUG] [Thread-216159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] client lang: <none>
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] server lang: <none>
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] kex follows: False
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] Compression: none
2026-02-16T03:20:49.748 [DEBUG] [Thread-216159] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:20:49.761 [DEBUG] [Thread-216159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:20:49.762 [DEBUG] [Thread-216159] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:20:49.763 [DEBUG] [Thread-216159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:20:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:20:49.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:20:49.765 [DEBUG] [Thread-216159] [transport.py] [_log()] userauth is OK
2026-02-16T03:20:49.765 [DEBUG] [Thread-216159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:20:49.765 [DEBUG] [Thread-216159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:20:49.765 [DEBUG] [Thread-216159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:20:49.765 [DEBUG] [Thread-216159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:20:49.799 [INFO] [Thread-216159] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:20:49.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:20:49.955 [DEBUG] [Thread-216161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:50.389 [DEBUG] [Thread-216159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:20:50.389 [DEBUG] [Thread-216159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:20:50.390 [DEBUG] [Thread-216159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:20:50.430 [DEBUG] [Thread-216159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:20:50.431 [DEBUG] [Thread-216159] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:20:50.433 [DEBUG] [Thread-216159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:20:50.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:20:50.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:20:50.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:20:50.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:20:50.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:20:50.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:20:50.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:20:50.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:20:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:20:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.055654 -999.00  +14.20  12.83     54   +5.10 1 1 1 1 1     0    0 10.33 67.71 ZNESW 12.9 12.8 129.0 16.6 14.3 -22.0 14.1 -21.1 13.8 -19.9 14.2 -21.2
2026-02-16T03:20:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:20:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:20:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.055654
2026-02-16T03:20:50.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:20:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:20:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:20:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:20:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:20:50.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:20:28', tmtdew=9.58, humidity=52.41, cloud=0.0, wind=17.13, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:20:28', seeing=1.86, atlas_timestamp='2026-02-16T01:20:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:17:00')
2026-02-16T03:20:50.461 [DEBUG] [Thread-216159] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:20:50.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:20:50.562 [DEBUG] [Thread-216163] [transport.py] [_log()] starting thread (client mode): 0xa2d128f0
2026-02-16T03:20:50.562 [DEBUG] [Thread-216163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:20:50.576 [DEBUG] [Thread-216163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:20:50.577 [INFO] [Thread-216163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:20:50.584 [DEBUG] [Thread-216163] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:20:50.584 [DEBUG] [Thread-216163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] client lang: <none>
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] server lang: <none>
2026-02-16T03:20:50.585 [DEBUG] [Thread-216163] [transport.py] [_log()] kex follows: False
2026-02-16T03:20:50.586 [DEBUG] [Thread-216163] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:20:50.586 [DEBUG] [Thread-216163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:20:50.586 [DEBUG] [Thread-216163] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:20:50.586 [DEBUG] [Thread-216163] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:20:50.587 [DEBUG] [Thread-216163] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:20:50.587 [DEBUG] [Thread-216163] [transport.py] [_log()] Compression: none
2026-02-16T03:20:50.587 [DEBUG] [Thread-216163] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:20:50.645 [DEBUG] [Thread-216163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:20:50.645 [DEBUG] [Thread-216163] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:20:50.646 [DEBUG] [Thread-216163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:20:50.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:20:50.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:20:50.700 [DEBUG] [Thread-216163] [transport.py] [_log()] userauth is OK
2026-02-16T03:20:50.701 [DEBUG] [Thread-216163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:20:50.701 [DEBUG] [Thread-216163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:20:50.701 [DEBUG] [Thread-216163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:20:50.701 [DEBUG] [Thread-216163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:20:50.719 [INFO] [Thread-216163] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:20:50.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:20:50.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:20:51.405 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:51.406 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:20:51.548 [DEBUG] [Thread-216163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:20:51.548 [DEBUG] [Thread-216163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:20:51.596 [DEBUG] [Thread-216163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:20:51.596 [DEBUG] [Thread-216163] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:20:51.605 [DEBUG] [Thread-216163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:20:51.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:20:51.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:20:51.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:20:51.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:20:51.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:20:51.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:20:51.642 [DEBUG] [Thread-216163] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:21:00.332 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:02.484 [DEBUG] [Thread-216165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:17.537 [DEBUG] [Thread-216166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:18.976 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:21.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:21:21.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:21:21.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:21:23.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 21, 3), 9.61, 52.28, 0.0, 16.48, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:21:23.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:21:03
2026-02-16T03:21:23.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:21:24.143 [DEBUG] [Thread-216167] [transport.py] [_log()] starting thread (client mode): 0xa2d13250
2026-02-16T03:21:24.143 [DEBUG] [Thread-216167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:21:24.164 [DEBUG] [Thread-216167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:21:24.164 [INFO] [Thread-216167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] client lang: <none>
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] server lang: <none>
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] kex follows: False
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:21:24.167 [DEBUG] [Thread-216167] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:21:24.168 [DEBUG] [Thread-216167] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:21:24.168 [DEBUG] [Thread-216167] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:21:24.168 [DEBUG] [Thread-216167] [transport.py] [_log()] Compression: none
2026-02-16T03:21:24.168 [DEBUG] [Thread-216167] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:21:24.183 [DEBUG] [Thread-216167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:21:24.183 [DEBUG] [Thread-216167] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:21:24.184 [DEBUG] [Thread-216167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:21:24.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:21:24.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:21:24.184 [DEBUG] [Thread-216167] [transport.py] [_log()] userauth is OK
2026-02-16T03:21:24.184 [DEBUG] [Thread-216167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:21:24.185 [DEBUG] [Thread-216167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:21:24.185 [DEBUG] [Thread-216167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:21:24.185 [DEBUG] [Thread-216167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:21:24.194 [INFO] [Thread-216167] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:21:24.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:21:24.730 [DEBUG] [Thread-216167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:21:24.731 [DEBUG] [Thread-216167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:21:24.731 [DEBUG] [Thread-216167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:21:24.772 [DEBUG] [Thread-216167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:21:24.772 [DEBUG] [Thread-216167] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:21:24.775 [DEBUG] [Thread-216167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:21:24.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:21:24.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:21:24.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:21:24.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:21:24.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:21:24.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:21:24.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:21:24.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:21:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:21:24.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.056001 -999.00  +14.10  10.97     55   +5.30 1 1 1 1 1     0    0 10.48 69.00 ZNESW 11.2 11.0 129.0 13.7 14.3 -22.5 14.1 -21.1 13.9 -19.9 14.2 -21.0
2026-02-16T03:21:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:21:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:21:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.056001
2026-02-16T03:21:24.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:21:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:21:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:21:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:21:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:21:24.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:21:03', tmtdew=9.61, humidity=52.28, cloud=0.0, wind=16.48, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:21:04', seeing=2.08, atlas_timestamp='2026-02-16T01:20:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.0017499999999994742, -0.04025000000000034, 0.03225000000000122, -0.033500000000000085, -0.009999999999999787, 0.020250000000000767, 0.03999999999999915, 0.03625000000000078, 0.0015000000000000568, -0.01950000000000074, -0.008250000000000313, -0.07499999999999929, 0.019000000000000128, 0.05874999999999986, 0.007999999999999119, 0.0004999999999988347, 0.01425000000000054, -0.0035000000000007248, 0.013499999999998735, 0.0072499999999990905, -0.01150000000000162, 0.05874999999999986, 0.04975000000000129, 0.038750000000000284, 0.04299999999999926, -0.04150000000000098, 0.02925000000000111, 0.010500000000000398, 0.04749999999999943, 0.10500000000000043, 0.0730000000000004, 0.07800000000000118, -0.017250000000000654], zp_timestamp='2026-02-16T01:17:00')
2026-02-16T03:21:24.802 [DEBUG] [Thread-216167] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:21:24.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:21:24.905 [DEBUG] [Thread-216170] [transport.py] [_log()] starting thread (client mode): 0xa2d10580
2026-02-16T03:21:24.905 [DEBUG] [Thread-216170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:21:24.919 [DEBUG] [Thread-216170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:21:24.919 [INFO] [Thread-216170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] client lang: <none>
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] server lang: <none>
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] kex follows: False
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:21:24.927 [DEBUG] [Thread-216170] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:21:24.928 [DEBUG] [Thread-216170] [transport.py] [_log()] Compression: none
2026-02-16T03:21:24.928 [DEBUG] [Thread-216170] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:21:24.983 [DEBUG] [Thread-216170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:21:24.984 [DEBUG] [Thread-216170] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:21:24.984 [DEBUG] [Thread-216170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:21:24.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:21:24.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:21:25.040 [DEBUG] [Thread-216170] [transport.py] [_log()] userauth is OK
2026-02-16T03:21:25.040 [DEBUG] [Thread-216170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:21:25.041 [DEBUG] [Thread-216170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:21:25.041 [DEBUG] [Thread-216170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:21:25.041 [DEBUG] [Thread-216170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:21:25.060 [INFO] [Thread-216170] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:21:25.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:21:25.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:21:25.913 [DEBUG] [Thread-216170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:21:25.914 [DEBUG] [Thread-216170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:21:25.961 [DEBUG] [Thread-216170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:21:25.961 [DEBUG] [Thread-216170] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:21:25.969 [DEBUG] [Thread-216170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:21:25.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:21:25.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:21:25.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:21:25.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:21:25.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:21:25.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:21:26.001 [DEBUG] [Thread-216170] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:21:32.574 [DEBUG] [Thread-216172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:37.718 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:47.623 [DEBUG] [Thread-216173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:50.032 [DEBUG] [Thread-216174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:51.621 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:51.622 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:56.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:21:56.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:21:56.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:21:56.442 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:21:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 21, 39), 9.22, 53.56, 0.0, 15.77, 13.34, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:21:58.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:21:39
2026-02-16T03:21:58.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:21:58.656 [DEBUG] [Thread-216175] [transport.py] [_log()] starting thread (client mode): 0xa2de9870
2026-02-16T03:21:58.656 [DEBUG] [Thread-216175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:21:58.676 [DEBUG] [Thread-216175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:21:58.676 [INFO] [Thread-216175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:58.679 [DEBUG] [Thread-216175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] client lang: <none>
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] server lang: <none>
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] kex follows: False
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] Compression: none
2026-02-16T03:21:58.680 [DEBUG] [Thread-216175] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:21:58.699 [DEBUG] [Thread-216175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:21:58.700 [DEBUG] [Thread-216175] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:21:58.700 [DEBUG] [Thread-216175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:21:58.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:21:58.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:21:58.702 [DEBUG] [Thread-216175] [transport.py] [_log()] userauth is OK
2026-02-16T03:21:58.703 [DEBUG] [Thread-216175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:21:58.703 [DEBUG] [Thread-216175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:21:58.703 [DEBUG] [Thread-216175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:21:58.703 [DEBUG] [Thread-216175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:21:58.728 [INFO] [Thread-216175] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:21:58.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:21:59.375 [DEBUG] [Thread-216175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:21:59.375 [DEBUG] [Thread-216175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:21:59.376 [DEBUG] [Thread-216175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:21:59.416 [DEBUG] [Thread-216175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:21:59.416 [DEBUG] [Thread-216175] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:21:59.418 [DEBUG] [Thread-216175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:21:59.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:21:59.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:21:59.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:21:59.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:21:59.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:21:59.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:21:59.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:21:59.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:21:59.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:21:59.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.056348 -999.00  +14.00  12.07     55   +5.30 1 1 1 1 1     0    0 10.36 69.19 ZNESW 10.3 12.1 126.4 15.4 14.3 -22.1 14.1 -21.1 13.8 -19.9 14.2 -21.1
2026-02-16T03:21:59.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:21:59.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:21:59.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.056348
2026-02-16T03:21:59.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:21:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:21:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:21:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:21:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:21:59.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:21:39', tmtdew=9.22, humidity=53.56, cloud=0.0, wind=15.77, temperature=13.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:21:39', seeing=1.64, atlas_timestamp='2026-02-16T01:21:08.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:20:00')
2026-02-16T03:21:59.441 [DEBUG] [Thread-216175] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:21:59.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:21:59.534 [DEBUG] [Thread-216178] [transport.py] [_log()] starting thread (client mode): 0xa2de81f0
2026-02-16T03:21:59.534 [DEBUG] [Thread-216178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:21:59.549 [DEBUG] [Thread-216178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:21:59.549 [INFO] [Thread-216178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:21:59.557 [DEBUG] [Thread-216178] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:21:59.557 [DEBUG] [Thread-216178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:21:59.557 [DEBUG] [Thread-216178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:21:59.557 [DEBUG] [Thread-216178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] client lang: <none>
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] server lang: <none>
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] kex follows: False
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] Compression: none
2026-02-16T03:21:59.558 [DEBUG] [Thread-216178] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:21:59.616 [DEBUG] [Thread-216178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:21:59.617 [DEBUG] [Thread-216178] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:21:59.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:21:59.618 [DEBUG] [Thread-216178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:21:59.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:21:59.681 [DEBUG] [Thread-216178] [transport.py] [_log()] userauth is OK
2026-02-16T03:21:59.681 [DEBUG] [Thread-216178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:21:59.681 [DEBUG] [Thread-216178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:21:59.681 [DEBUG] [Thread-216178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:21:59.681 [DEBUG] [Thread-216178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:21:59.700 [INFO] [Thread-216178] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:21:59.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:21:59.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:22:00.545 [DEBUG] [Thread-216178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:22:00.545 [DEBUG] [Thread-216178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:22:00.593 [DEBUG] [Thread-216178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:22:00.593 [DEBUG] [Thread-216178] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:22:00.601 [DEBUG] [Thread-216178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:22:00.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:22:00.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:22:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:22:00.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:22:00.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:22:00.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:22:00.633 [DEBUG] [Thread-216178] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:22:02.658 [DEBUG] [Thread-216180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:15.101 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:17.711 [DEBUG] [Thread-216181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:30.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:22:30.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:22:30.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:22:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 22, 14), 9.55, 52.31, 0.0, 15.26, 13.6, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:22:32.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:22:14
2026-02-16T03:22:32.748 [DEBUG] [Thread-216182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:32.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:22:33.074 [DEBUG] [Thread-216183] [transport.py] [_log()] starting thread (client mode): 0xa2d03850
2026-02-16T03:22:33.074 [DEBUG] [Thread-216183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:22:33.094 [DEBUG] [Thread-216183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:22:33.094 [INFO] [Thread-216183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:22:33.097 [DEBUG] [Thread-216183] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:22:33.097 [DEBUG] [Thread-216183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:22:33.097 [DEBUG] [Thread-216183] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:22:33.097 [DEBUG] [Thread-216183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:22:33.097 [DEBUG] [Thread-216183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] client lang: <none>
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] server lang: <none>
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] kex follows: False
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] Compression: none
2026-02-16T03:22:33.098 [DEBUG] [Thread-216183] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:22:33.117 [DEBUG] [Thread-216183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:22:33.118 [DEBUG] [Thread-216183] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:22:33.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:22:33.119 [DEBUG] [Thread-216183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:22:33.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:22:33.121 [DEBUG] [Thread-216183] [transport.py] [_log()] userauth is OK
2026-02-16T03:22:33.128 [DEBUG] [Thread-216183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:22:33.128 [DEBUG] [Thread-216183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:22:33.128 [DEBUG] [Thread-216183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:22:33.129 [DEBUG] [Thread-216183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:22:33.163 [INFO] [Thread-216183] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:22:33.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:22:33.789 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:33.812 [DEBUG] [Thread-216183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:22:33.812 [DEBUG] [Thread-216183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:22:33.812 [DEBUG] [Thread-216183] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:22:33.853 [DEBUG] [Thread-216183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:22:33.853 [DEBUG] [Thread-216183] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:22:33.855 [DEBUG] [Thread-216183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:22:33.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:22:33.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:22:33.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:22:33.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:22:33.873 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:22:33.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.056695 -999.00  +14.00  12.79     55   +5.10 1 1 1 1 1     0    0 10.73 76.02 ZNESW 11.7 12.8 129.2 14.9 14.3 -22.2 14.1 -21.0 13.9 -19.8 14.2 -20.9
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:22:33.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.056695
2026-02-16T03:22:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:22:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:22:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:22:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:22:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:22:33.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:22:14', tmtdew=9.55, humidity=52.31, cloud=0.0, wind=15.26, temperature=13.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:22:15', seeing=1.58, atlas_timestamp='2026-02-16T01:21:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:20:00')
2026-02-16T03:22:33.875 [DEBUG] [Thread-216183] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:22:33.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:22:33.964 [DEBUG] [Thread-216186] [transport.py] [_log()] starting thread (client mode): 0xa2d02ec0
2026-02-16T03:22:33.964 [DEBUG] [Thread-216186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:22:33.983 [DEBUG] [Thread-216186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:22:33.984 [INFO] [Thread-216186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] client lang: <none>
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] server lang: <none>
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] kex follows: False
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] Compression: none
2026-02-16T03:22:33.995 [DEBUG] [Thread-216186] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:22:34.048 [DEBUG] [Thread-216186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:22:34.049 [DEBUG] [Thread-216186] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:22:34.049 [DEBUG] [Thread-216186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:22:34.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:22:34.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:22:34.104 [DEBUG] [Thread-216186] [transport.py] [_log()] userauth is OK
2026-02-16T03:22:34.104 [DEBUG] [Thread-216186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:22:34.105 [DEBUG] [Thread-216186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:22:34.105 [DEBUG] [Thread-216186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:22:34.105 [DEBUG] [Thread-216186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:22:34.123 [INFO] [Thread-216186] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:22:34.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:22:34.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:22:34.983 [DEBUG] [Thread-216186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:22:34.983 [DEBUG] [Thread-216186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:22:35.031 [DEBUG] [Thread-216186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:22:35.032 [DEBUG] [Thread-216186] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:22:35.041 [DEBUG] [Thread-216186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:22:35.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:22:35.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:22:35.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:22:35.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:22:35.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:22:35.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:22:35.083 [DEBUG] [Thread-216186] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:22:47.784 [DEBUG] [Thread-216188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:50.086 [DEBUG] [Thread-216189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:51.831 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:51.832 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:22:52.542 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:02.844 [DEBUG] [Thread-216190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:05.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:23:05.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:23:05.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:23:06.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 22, 50), 9.66, 51.78, 0.0, 15.35, 13.67, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:23:06.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:22:50
2026-02-16T03:23:07.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:23:07.447 [DEBUG] [Thread-216191] [transport.py] [_log()] starting thread (client mode): 0xa2d87f10
2026-02-16T03:23:07.447 [DEBUG] [Thread-216191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:23:07.467 [DEBUG] [Thread-216191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:23:07.467 [INFO] [Thread-216191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] client lang: <none>
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] server lang: <none>
2026-02-16T03:23:07.468 [DEBUG] [Thread-216191] [transport.py] [_log()] kex follows: False
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] Compression: none
2026-02-16T03:23:07.469 [DEBUG] [Thread-216191] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:23:07.481 [DEBUG] [Thread-216191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:23:07.482 [DEBUG] [Thread-216191] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:23:07.482 [DEBUG] [Thread-216191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:23:07.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:23:07.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:23:07.484 [DEBUG] [Thread-216191] [transport.py] [_log()] userauth is OK
2026-02-16T03:23:07.484 [DEBUG] [Thread-216191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:23:07.484 [DEBUG] [Thread-216191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:23:07.485 [DEBUG] [Thread-216191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:23:07.485 [DEBUG] [Thread-216191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:23:07.505 [INFO] [Thread-216191] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:23:07.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:23:08.141 [DEBUG] [Thread-216191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:23:08.141 [DEBUG] [Thread-216191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:23:08.142 [DEBUG] [Thread-216191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:23:08.183 [DEBUG] [Thread-216191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:23:08.184 [DEBUG] [Thread-216191] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:23:08.187 [DEBUG] [Thread-216191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:23:08.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:23:08.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:23:08.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:23:08.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:23:08.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:23:08.210 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:23:08.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:23:08.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:23:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:23:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.057043 -999.00  +14.00  12.80     55   +5.10 1 1 1 1 1     0    0 10.50 69.49 ZNESW 14.0 12.8 133.0 15.7 14.3 -22.0 14.1 -21.0 13.9 -19.8 14.2 -20.9
2026-02-16T03:23:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:23:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:23:08.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.057043
2026-02-16T03:23:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:23:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:23:08.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:23:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:23:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:23:08.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:22:50', tmtdew=9.66, humidity=51.78, cloud=0.0, wind=15.35, temperature=13.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:22:50', seeing=1.38, atlas_timestamp='2026-02-16T01:22:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:20:00')
2026-02-16T03:23:08.213 [DEBUG] [Thread-216191] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:23:08.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:23:08.310 [DEBUG] [Thread-216194] [transport.py] [_log()] starting thread (client mode): 0xa2de84f0
2026-02-16T03:23:08.310 [DEBUG] [Thread-216194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:23:08.324 [DEBUG] [Thread-216194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:23:08.324 [INFO] [Thread-216194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] client lang: <none>
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] server lang: <none>
2026-02-16T03:23:08.332 [DEBUG] [Thread-216194] [transport.py] [_log()] kex follows: False
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] Compression: none
2026-02-16T03:23:08.333 [DEBUG] [Thread-216194] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:23:08.392 [DEBUG] [Thread-216194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:23:08.393 [DEBUG] [Thread-216194] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:23:08.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:23:08.394 [DEBUG] [Thread-216194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:23:08.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:23:08.448 [DEBUG] [Thread-216194] [transport.py] [_log()] userauth is OK
2026-02-16T03:23:08.448 [DEBUG] [Thread-216194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:23:08.449 [DEBUG] [Thread-216194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:23:08.449 [DEBUG] [Thread-216194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:23:08.449 [DEBUG] [Thread-216194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:23:08.467 [INFO] [Thread-216194] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:23:08.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:23:08.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:23:09.311 [DEBUG] [Thread-216194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:23:09.312 [DEBUG] [Thread-216194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:23:09.359 [DEBUG] [Thread-216194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:23:09.359 [DEBUG] [Thread-216194] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:23:09.368 [DEBUG] [Thread-216194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:23:09.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:23:09.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:23:09.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:23:09.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:23:09.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:23:09.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:23:09.405 [DEBUG] [Thread-216194] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:23:11.225 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:17.883 [DEBUG] [Thread-216196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:29.877 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:32.943 [DEBUG] [Thread-216197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:39.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:23:39.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:23:39.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:23:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 23, 27), 9.66, 51.78, 0.0, 15.74, 13.64, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:23:41.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:23:27
2026-02-16T03:23:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:23:42.323 [DEBUG] [Thread-216198] [transport.py] [_log()] starting thread (client mode): 0xa2d12410
2026-02-16T03:23:42.323 [DEBUG] [Thread-216198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:23:42.345 [DEBUG] [Thread-216198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:23:42.346 [INFO] [Thread-216198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:23:42.349 [DEBUG] [Thread-216198] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:23:42.355 [DEBUG] [Thread-216198] [transport.py] [_log()] client lang: <none>
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] server lang: <none>
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] kex follows: False
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] Compression: none
2026-02-16T03:23:42.356 [DEBUG] [Thread-216198] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:23:42.378 [DEBUG] [Thread-216198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:23:42.378 [DEBUG] [Thread-216198] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:23:42.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:23:42.379 [DEBUG] [Thread-216198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:23:42.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:23:42.381 [DEBUG] [Thread-216198] [transport.py] [_log()] userauth is OK
2026-02-16T03:23:42.381 [DEBUG] [Thread-216198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:23:42.381 [DEBUG] [Thread-216198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:23:42.381 [DEBUG] [Thread-216198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:23:42.381 [DEBUG] [Thread-216198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:23:42.405 [INFO] [Thread-216198] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:23:42.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:23:43.060 [DEBUG] [Thread-216198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:23:43.061 [DEBUG] [Thread-216198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:23:43.061 [DEBUG] [Thread-216198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:23:43.102 [DEBUG] [Thread-216198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:23:43.102 [DEBUG] [Thread-216198] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:23:43.105 [DEBUG] [Thread-216198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:23:43.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:23:43.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:23:43.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:23:43.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:23:43.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:23:43.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:23:43.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:23:43.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:23:43.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:23:43.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.057390 -999.00  +14.00  12.18     55   +5.20 1 1 1 1 1     0    0 10.77 75.98 ZNESW 12.4 12.2 124.8 15.9 14.3 -22.0 14.2 -21.0 13.9 -19.8 14.2 -21.0
2026-02-16T03:23:43.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:23:43.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:23:43.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.057390
2026-02-16T03:23:43.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:23:43.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:23:43.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:23:43.126 [DEBUG] [Thread-216198] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:23:43.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:23:43.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:23:43.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:23:27', tmtdew=9.66, humidity=51.78, cloud=0.0, wind=15.74, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:23:27', seeing=2.29, atlas_timestamp='2026-02-16T01:22:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:20:00')
2026-02-16T03:23:43.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:23:43.220 [DEBUG] [Thread-216201] [transport.py] [_log()] starting thread (client mode): 0xa2de9cf0
2026-02-16T03:23:43.221 [DEBUG] [Thread-216201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:23:43.239 [DEBUG] [Thread-216201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:23:43.239 [INFO] [Thread-216201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:23:43.246 [DEBUG] [Thread-216201] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:23:43.246 [DEBUG] [Thread-216201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:23:43.246 [DEBUG] [Thread-216201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:23:43.246 [DEBUG] [Thread-216201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] client lang: <none>
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] server lang: <none>
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] kex follows: False
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] Compression: none
2026-02-16T03:23:43.247 [DEBUG] [Thread-216201] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:23:43.303 [DEBUG] [Thread-216201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:23:43.304 [DEBUG] [Thread-216201] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:23:43.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:23:43.305 [DEBUG] [Thread-216201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:23:43.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:23:43.366 [DEBUG] [Thread-216201] [transport.py] [_log()] userauth is OK
2026-02-16T03:23:43.366 [DEBUG] [Thread-216201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:23:43.366 [DEBUG] [Thread-216201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:23:43.366 [DEBUG] [Thread-216201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:23:43.367 [DEBUG] [Thread-216201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:23:43.387 [INFO] [Thread-216201] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:23:43.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:23:43.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:23:44.234 [DEBUG] [Thread-216201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:23:44.234 [DEBUG] [Thread-216201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:23:44.282 [DEBUG] [Thread-216201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:23:44.282 [DEBUG] [Thread-216201] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:23:44.291 [DEBUG] [Thread-216201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:23:44.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:23:44.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:23:44.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:23:44.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:23:44.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:23:44.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:23:44.324 [DEBUG] [Thread-216201] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:23:47.982 [DEBUG] [Thread-216203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:48.532 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:50.138 [DEBUG] [Thread-216204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:52.033 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:23:52.034 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:03.031 [DEBUG] [Thread-216205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:07.515 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:14.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:24:14.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:24:14.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 24, 2), 9.69, 51.68, 0.0, 15.88, 13.64, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:24:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:24:02
2026-02-16T03:24:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:24:16.779 [DEBUG] [Thread-216206] [transport.py] [_log()] starting thread (client mode): 0xa2d00be0
2026-02-16T03:24:16.779 [DEBUG] [Thread-216206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:24:16.799 [DEBUG] [Thread-216206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:24:16.800 [INFO] [Thread-216206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:16.803 [DEBUG] [Thread-216206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] client lang: <none>
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] server lang: <none>
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] kex follows: False
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] Compression: none
2026-02-16T03:24:16.804 [DEBUG] [Thread-216206] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:24:16.823 [DEBUG] [Thread-216206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:24:16.824 [DEBUG] [Thread-216206] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:24:16.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:24:16.825 [DEBUG] [Thread-216206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:24:16.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:24:16.869 [DEBUG] [Thread-216206] [transport.py] [_log()] userauth is OK
2026-02-16T03:24:16.869 [DEBUG] [Thread-216206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:24:16.869 [DEBUG] [Thread-216206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:24:16.869 [DEBUG] [Thread-216206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:24:16.869 [DEBUG] [Thread-216206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:24:16.890 [INFO] [Thread-216206] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:24:16.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:24:17.608 [DEBUG] [Thread-216206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:24:17.608 [DEBUG] [Thread-216206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:24:17.609 [DEBUG] [Thread-216206] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:24:17.649 [DEBUG] [Thread-216206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:24:17.649 [DEBUG] [Thread-216206] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:24:17.653 [DEBUG] [Thread-216206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:24:17.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:24:17.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:24:17.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:24:17.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:24:17.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:24:17.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:24:17.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:24:17.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:24:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:24:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.058085 -999.00  +14.00  11.69     55   +5.20 1 1 1 1 1     0    0 10.92 78.10 ZNESW 10.7 11.7 125.8 13.0 14.3 -22.0 14.2 -21.0 13.9 -19.6 14.2 -20.9
2026-02-16T03:24:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:24:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:24:17.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.058085
2026-02-16T03:24:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:24:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:24:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:24:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:24:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:24:17.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:24:02', tmtdew=9.69, humidity=51.68, cloud=0.0, wind=15.88, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:24:02', seeing=2.6, atlas_timestamp='2026-02-16T01:23:38.544', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:20:00')
2026-02-16T03:24:17.684 [DEBUG] [Thread-216206] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:24:17.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:24:17.780 [DEBUG] [Thread-216209] [transport.py] [_log()] starting thread (client mode): 0xa2d6c280
2026-02-16T03:24:17.780 [DEBUG] [Thread-216209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:24:17.795 [DEBUG] [Thread-216209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:24:17.795 [INFO] [Thread-216209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:24:17.802 [DEBUG] [Thread-216209] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] client lang: <none>
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] server lang: <none>
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] kex follows: False
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:24:17.803 [DEBUG] [Thread-216209] [transport.py] [_log()] Compression: none
2026-02-16T03:24:17.804 [DEBUG] [Thread-216209] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:24:17.860 [DEBUG] [Thread-216209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:24:17.860 [DEBUG] [Thread-216209] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:24:17.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:24:17.861 [DEBUG] [Thread-216209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:24:17.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:24:17.916 [DEBUG] [Thread-216209] [transport.py] [_log()] userauth is OK
2026-02-16T03:24:17.916 [DEBUG] [Thread-216209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:24:17.916 [DEBUG] [Thread-216209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:24:17.916 [DEBUG] [Thread-216209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:24:17.917 [DEBUG] [Thread-216209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:24:17.941 [INFO] [Thread-216209] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:24:17.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:24:17.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:24:18.067 [DEBUG] [Thread-216211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:18.763 [DEBUG] [Thread-216209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:24:18.763 [DEBUG] [Thread-216209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:24:18.811 [DEBUG] [Thread-216209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:24:18.811 [DEBUG] [Thread-216209] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:24:18.821 [DEBUG] [Thread-216209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:24:18.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:24:18.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:24:18.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:24:18.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:24:18.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:24:18.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:24:18.857 [DEBUG] [Thread-216209] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:24:26.587 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:33.121 [DEBUG] [Thread-216212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:45.567 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:48.156 [DEBUG] [Thread-216213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:48.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:24:48.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:24:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:24:50.224 [DEBUG] [Thread-216214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 24, 37), 9.55, 52.43, 0.0, 16.44, 13.7, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:24:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:24:37
2026-02-16T03:24:51.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:24:51.204 [DEBUG] [Thread-216215] [transport.py] [_log()] starting thread (client mode): 0xa2d138b0
2026-02-16T03:24:51.204 [DEBUG] [Thread-216215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:24:51.225 [DEBUG] [Thread-216215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:24:51.225 [INFO] [Thread-216215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:24:51.228 [DEBUG] [Thread-216215] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:24:51.228 [DEBUG] [Thread-216215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:24:51.228 [DEBUG] [Thread-216215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:24:51.228 [DEBUG] [Thread-216215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:51.228 [DEBUG] [Thread-216215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:51.228 [DEBUG] [Thread-216215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] client lang: <none>
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] server lang: <none>
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] kex follows: False
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] Compression: none
2026-02-16T03:24:51.229 [DEBUG] [Thread-216215] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:24:51.246 [DEBUG] [Thread-216215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:24:51.247 [DEBUG] [Thread-216215] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:24:51.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:24:51.247 [DEBUG] [Thread-216215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:24:51.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:24:51.250 [DEBUG] [Thread-216215] [transport.py] [_log()] userauth is OK
2026-02-16T03:24:51.250 [DEBUG] [Thread-216215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:24:51.250 [DEBUG] [Thread-216215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:24:51.250 [DEBUG] [Thread-216215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:24:51.250 [DEBUG] [Thread-216215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:24:51.268 [INFO] [Thread-216215] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:24:51.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:24:51.920 [DEBUG] [Thread-216215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:24:51.920 [DEBUG] [Thread-216215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:24:51.921 [DEBUG] [Thread-216215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:24:51.961 [DEBUG] [Thread-216215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:24:51.962 [DEBUG] [Thread-216215] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:24:51.966 [DEBUG] [Thread-216215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:24:51.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:24:51.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:24:51.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:24:51.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:24:51.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:24:51.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:24:51.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:24:51.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.058432 -999.00  +14.00  10.71     55   +5.20 1 1 1 1 1     0    0 10.67 74.63 ZNESW 10.2 10.7 122.8 11.4 14.3 -22.0 14.2 -21.2 13.9 -19.8 14.2 -20.9
2026-02-16T03:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:24:51.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.058432
2026-02-16T03:24:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:24:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:24:51.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:24:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:24:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:24:51.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:24:37', tmtdew=9.55, humidity=52.43, cloud=0.0, wind=16.44, temperature=13.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:24:38', seeing=2.4, atlas_timestamp='2026-02-16T01:24:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:20:00')
2026-02-16T03:24:51.991 [DEBUG] [Thread-216215] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:24:52.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:24:52.085 [DEBUG] [Thread-216218] [transport.py] [_log()] starting thread (client mode): 0xa2d84970
2026-02-16T03:24:52.085 [DEBUG] [Thread-216218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:24:52.099 [DEBUG] [Thread-216218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:24:52.100 [INFO] [Thread-216218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:24:52.107 [DEBUG] [Thread-216218] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:24:52.107 [DEBUG] [Thread-216218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:24:52.107 [DEBUG] [Thread-216218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] client lang: <none>
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] server lang: <none>
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] kex follows: False
2026-02-16T03:24:52.108 [DEBUG] [Thread-216218] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:24:52.109 [DEBUG] [Thread-216218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:24:52.109 [DEBUG] [Thread-216218] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:24:52.109 [DEBUG] [Thread-216218] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:24:52.109 [DEBUG] [Thread-216218] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:24:52.109 [DEBUG] [Thread-216218] [transport.py] [_log()] Compression: none
2026-02-16T03:24:52.109 [DEBUG] [Thread-216218] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:24:52.163 [DEBUG] [Thread-216218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:24:52.163 [DEBUG] [Thread-216218] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:24:52.164 [DEBUG] [Thread-216218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:24:52.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:24:52.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:24:52.220 [DEBUG] [Thread-216218] [transport.py] [_log()] userauth is OK
2026-02-16T03:24:52.221 [DEBUG] [Thread-216218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:24:52.221 [DEBUG] [Thread-216218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:24:52.221 [DEBUG] [Thread-216218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:24:52.221 [DEBUG] [Thread-216218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:24:52.233 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:52.234 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:24:52.240 [INFO] [Thread-216218] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:24:52.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:24:52.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:24:53.090 [DEBUG] [Thread-216218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:24:53.090 [DEBUG] [Thread-216218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:24:53.139 [DEBUG] [Thread-216218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:24:53.139 [DEBUG] [Thread-216218] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:24:53.147 [DEBUG] [Thread-216218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:24:53.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:24:53.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:24:53.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:24:53.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:24:53.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:24:53.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:24:53.180 [DEBUG] [Thread-216218] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:25:03.190 [DEBUG] [Thread-216220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:04.576 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:18.240 [DEBUG] [Thread-216221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:23.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:25:23.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:25:23.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:25:23.460 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 25, 12), 9.76, 51.61, 0.0, 15.07, 13.77, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:25:25.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:25:12
2026-02-16T03:25:25.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:25:25.521 [DEBUG] [Thread-216222] [transport.py] [_log()] starting thread (client mode): 0xa2d13be0
2026-02-16T03:25:25.521 [DEBUG] [Thread-216222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:25:25.541 [DEBUG] [Thread-216222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:25:25.541 [INFO] [Thread-216222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:25:25.544 [DEBUG] [Thread-216222] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] client lang: <none>
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] server lang: <none>
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] kex follows: False
2026-02-16T03:25:25.545 [DEBUG] [Thread-216222] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:25:25.546 [DEBUG] [Thread-216222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:25:25.546 [DEBUG] [Thread-216222] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:25:25.546 [DEBUG] [Thread-216222] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:25:25.546 [DEBUG] [Thread-216222] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:25:25.546 [DEBUG] [Thread-216222] [transport.py] [_log()] Compression: none
2026-02-16T03:25:25.546 [DEBUG] [Thread-216222] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:25:25.563 [DEBUG] [Thread-216222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:25:25.563 [DEBUG] [Thread-216222] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:25:25.564 [DEBUG] [Thread-216222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:25:25.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:25:25.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:25:25.566 [DEBUG] [Thread-216222] [transport.py] [_log()] userauth is OK
2026-02-16T03:25:25.566 [DEBUG] [Thread-216222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:25:25.566 [DEBUG] [Thread-216222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:25:25.566 [DEBUG] [Thread-216222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:25:25.567 [DEBUG] [Thread-216222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:25:25.601 [INFO] [Thread-216222] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:25:25.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:25:26.240 [DEBUG] [Thread-216222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:25:26.241 [DEBUG] [Thread-216222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:25:26.241 [DEBUG] [Thread-216222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:25:26.281 [DEBUG] [Thread-216222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:25:26.281 [DEBUG] [Thread-216222] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:25:26.284 [DEBUG] [Thread-216222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:25:26.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:25:26.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:25:26.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:25:26.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:25:26.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:25:26.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:25:26.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:25:26.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:25:26.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:25:26.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.058779 -999.00  +14.00  11.23     55   +5.20 1 1 1 1 1     0    0 10.45 68.64 ZNESW 10.4 11.2 122.0 12.2 14.3 -22.2 14.2 -21.1 13.8 -19.8 14.2 -21.1
2026-02-16T03:25:26.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:25:26.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:25:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.058779
2026-02-16T03:25:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:25:26.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:25:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:25:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:25:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:25:26.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:25:12', tmtdew=9.76, humidity=51.61, cloud=0.0, wind=15.07, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:25:13', seeing=1.95, atlas_timestamp='2026-02-16T01:24:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:23:00')
2026-02-16T03:25:26.310 [DEBUG] [Thread-216222] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:25:26.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:25:26.400 [DEBUG] [Thread-216225] [transport.py] [_log()] starting thread (client mode): 0xa57b3850
2026-02-16T03:25:26.400 [DEBUG] [Thread-216225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:25:26.416 [DEBUG] [Thread-216225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:25:26.416 [INFO] [Thread-216225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:25:26.423 [DEBUG] [Thread-216225] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:25:26.423 [DEBUG] [Thread-216225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] client lang: <none>
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] server lang: <none>
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] kex follows: False
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] Compression: none
2026-02-16T03:25:26.424 [DEBUG] [Thread-216225] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:25:26.484 [DEBUG] [Thread-216225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:25:26.484 [DEBUG] [Thread-216225] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:25:26.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:25:26.485 [DEBUG] [Thread-216225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:25:26.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:25:26.540 [DEBUG] [Thread-216225] [transport.py] [_log()] userauth is OK
2026-02-16T03:25:26.540 [DEBUG] [Thread-216225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:25:26.541 [DEBUG] [Thread-216225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:25:26.541 [DEBUG] [Thread-216225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:25:26.541 [DEBUG] [Thread-216225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:25:26.560 [INFO] [Thread-216225] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:25:26.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:25:26.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:25:27.391 [DEBUG] [Thread-216225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:25:27.391 [DEBUG] [Thread-216225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:25:27.439 [DEBUG] [Thread-216225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:25:27.440 [DEBUG] [Thread-216225] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:25:27.448 [DEBUG] [Thread-216225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:25:27.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:25:27.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:25:27.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:25:27.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:25:27.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:25:27.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:25:27.481 [DEBUG] [Thread-216225] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:25:33.277 [DEBUG] [Thread-216227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:42.306 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:48.329 [DEBUG] [Thread-216228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:50.293 [DEBUG] [Thread-216229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:52.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:52.435 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:25:57.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:25:57.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:25:57.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:25:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 25, 48), 9.8, 51.63, 0.0, 14.82, 13.74, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:25:59.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:25:48
2026-02-16T03:25:59.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:25:59.997 [DEBUG] [Thread-216230] [transport.py] [_log()] starting thread (client mode): 0xa2de8640
2026-02-16T03:25:59.998 [DEBUG] [Thread-216230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:26:00.018 [DEBUG] [Thread-216230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:26:00.018 [INFO] [Thread-216230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] client lang: <none>
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] server lang: <none>
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] kex follows: False
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:26:00.021 [DEBUG] [Thread-216230] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:26:00.022 [DEBUG] [Thread-216230] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:26:00.022 [DEBUG] [Thread-216230] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:26:00.022 [DEBUG] [Thread-216230] [transport.py] [_log()] Compression: none
2026-02-16T03:26:00.022 [DEBUG] [Thread-216230] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:26:00.037 [DEBUG] [Thread-216230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:26:00.037 [DEBUG] [Thread-216230] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:26:00.037 [DEBUG] [Thread-216230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:26:00.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:26:00.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:26:00.038 [DEBUG] [Thread-216230] [transport.py] [_log()] userauth is OK
2026-02-16T03:26:00.038 [DEBUG] [Thread-216230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:26:00.038 [DEBUG] [Thread-216230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:26:00.038 [DEBUG] [Thread-216230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:26:00.038 [DEBUG] [Thread-216230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:26:00.058 [INFO] [Thread-216230] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:26:00.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:26:00.920 [DEBUG] [Thread-216230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:26:00.920 [DEBUG] [Thread-216230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:26:00.921 [DEBUG] [Thread-216230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:26:00.954 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:00.961 [DEBUG] [Thread-216230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:26:00.961 [DEBUG] [Thread-216230] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:26:00.964 [DEBUG] [Thread-216230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:26:00.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:26:00.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:26:00.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:26:00.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:26:00.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:26:00.985 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:26:00.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.059126 -999.00  +14.00  11.69     55   +5.20 1 1 1 1 1     0    0 10.24 61.34 ZNESW 11.2 11.7 128.6 12.6 14.3 -22.1 14.2 -21.0 13.9 -19.7 14.2 -20.8
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.059126
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:26:00.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:25:48', tmtdew=9.8, humidity=51.63, cloud=0.0, wind=14.82, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:25:48', seeing=1.62, atlas_timestamp='2026-02-16T01:25:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:23:00')
2026-02-16T03:26:00.986 [DEBUG] [Thread-216230] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:26:01.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:26:01.071 [DEBUG] [Thread-216233] [transport.py] [_log()] starting thread (client mode): 0xa2d87670
2026-02-16T03:26:01.071 [DEBUG] [Thread-216233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:26:01.085 [DEBUG] [Thread-216233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:26:01.086 [INFO] [Thread-216233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:26:01.093 [DEBUG] [Thread-216233] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] client lang: <none>
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] server lang: <none>
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] kex follows: False
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] Compression: none
2026-02-16T03:26:01.094 [DEBUG] [Thread-216233] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:26:01.151 [DEBUG] [Thread-216233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:26:01.152 [DEBUG] [Thread-216233] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:26:01.152 [DEBUG] [Thread-216233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:26:01.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:26:01.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:26:01.208 [DEBUG] [Thread-216233] [transport.py] [_log()] userauth is OK
2026-02-16T03:26:01.208 [DEBUG] [Thread-216233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:26:01.208 [DEBUG] [Thread-216233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:26:01.208 [DEBUG] [Thread-216233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:26:01.208 [DEBUG] [Thread-216233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:26:01.227 [INFO] [Thread-216233] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:26:01.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:26:01.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:26:02.059 [DEBUG] [Thread-216233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:26:02.059 [DEBUG] [Thread-216233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:26:02.107 [DEBUG] [Thread-216233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:26:02.107 [DEBUG] [Thread-216233] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:26:02.115 [DEBUG] [Thread-216233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:26:02.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:26:02.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:26:02.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:26:02.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:26:02.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:26:02.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:26:02.147 [DEBUG] [Thread-216233] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:26:03.361 [DEBUG] [Thread-216235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:18.413 [DEBUG] [Thread-216236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:19.642 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:26:32.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:26:32.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:26:33.450 [DEBUG] [Thread-216237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 26, 23), 9.75, 51.81, 0.0, 14.68, 13.74, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:26:34.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:26:23
2026-02-16T03:26:34.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:26:34.504 [DEBUG] [Thread-216238] [transport.py] [_log()] starting thread (client mode): 0xa2d02140
2026-02-16T03:26:34.504 [DEBUG] [Thread-216238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:26:34.524 [DEBUG] [Thread-216238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:26:34.525 [INFO] [Thread-216238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] client lang: <none>
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] server lang: <none>
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] kex follows: False
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] Compression: none
2026-02-16T03:26:34.528 [DEBUG] [Thread-216238] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:26:34.546 [DEBUG] [Thread-216238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:26:34.547 [DEBUG] [Thread-216238] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:26:34.547 [DEBUG] [Thread-216238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:26:34.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:26:34.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:26:34.549 [DEBUG] [Thread-216238] [transport.py] [_log()] userauth is OK
2026-02-16T03:26:34.550 [DEBUG] [Thread-216238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:26:34.550 [DEBUG] [Thread-216238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:26:34.550 [DEBUG] [Thread-216238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:26:34.550 [DEBUG] [Thread-216238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:26:34.575 [INFO] [Thread-216238] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:26:34.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:26:35.229 [DEBUG] [Thread-216238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:26:35.230 [DEBUG] [Thread-216238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:26:35.230 [DEBUG] [Thread-216238] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:26:35.270 [DEBUG] [Thread-216238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:26:35.270 [DEBUG] [Thread-216238] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:26:35.274 [DEBUG] [Thread-216238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:26:35.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:26:35.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:26:35.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:26:35.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:26:35.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:26:35.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:26:35.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:26:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:26:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:26:35.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.059473 -999.00  +14.10  11.89     55   +5.20 1 1 1 1 1     0    0 10.41 62.12 ZNESW 9.8 11.9 128.2 13.1 14.3 -22.0 14.3 -21.2 13.9 -19.8 14.2 -21.1
2026-02-16T03:26:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:26:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:26:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.059473
2026-02-16T03:26:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:26:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:26:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:26:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:26:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:26:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:26:23', tmtdew=9.75, humidity=51.81, cloud=0.0, wind=14.68, temperature=13.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:26:23', seeing=2.02, atlas_timestamp='2026-02-16T01:25:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:23:00')
2026-02-16T03:26:35.311 [DEBUG] [Thread-216238] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:26:35.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:26:35.408 [DEBUG] [Thread-216241] [transport.py] [_log()] starting thread (client mode): 0xa2d13b80
2026-02-16T03:26:35.408 [DEBUG] [Thread-216241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:26:35.423 [DEBUG] [Thread-216241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:26:35.423 [INFO] [Thread-216241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:26:35.431 [DEBUG] [Thread-216241] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:26:35.431 [DEBUG] [Thread-216241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:26:35.431 [DEBUG] [Thread-216241] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:26:35.431 [DEBUG] [Thread-216241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:35.431 [DEBUG] [Thread-216241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] client lang: <none>
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] server lang: <none>
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] kex follows: False
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:26:35.432 [DEBUG] [Thread-216241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:26:35.433 [DEBUG] [Thread-216241] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:26:35.433 [DEBUG] [Thread-216241] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:26:35.433 [DEBUG] [Thread-216241] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:26:35.433 [DEBUG] [Thread-216241] [transport.py] [_log()] Compression: none
2026-02-16T03:26:35.433 [DEBUG] [Thread-216241] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:26:35.492 [DEBUG] [Thread-216241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:26:35.492 [DEBUG] [Thread-216241] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:26:35.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:26:35.494 [DEBUG] [Thread-216241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:26:35.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:26:35.551 [DEBUG] [Thread-216241] [transport.py] [_log()] userauth is OK
2026-02-16T03:26:35.551 [DEBUG] [Thread-216241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:26:35.552 [DEBUG] [Thread-216241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:26:35.552 [DEBUG] [Thread-216241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:26:35.552 [DEBUG] [Thread-216241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:26:35.570 [INFO] [Thread-216241] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:26:35.570 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:26:35.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:26:36.381 [DEBUG] [Thread-216241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:26:36.381 [DEBUG] [Thread-216241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:26:36.429 [DEBUG] [Thread-216241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:26:36.429 [DEBUG] [Thread-216241] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:26:36.439 [DEBUG] [Thread-216241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:26:36.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:26:36.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:26:36.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:26:36.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:26:36.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:26:36.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:26:36.475 [DEBUG] [Thread-216241] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:26:38.438 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:48.494 [DEBUG] [Thread-216243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:50.354 [DEBUG] [Thread-216244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:52.634 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:52.635 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:26:57.433 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:03.547 [DEBUG] [Thread-216245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:06.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:27:06.498 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:27:06.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:27:08.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 26, 58), 9.79, 51.31, 0.0, 14.54, 13.77, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:27:08.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:26:58
2026-02-16T03:27:08.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:27:08.805 [DEBUG] [Thread-216246] [transport.py] [_log()] starting thread (client mode): 0xa2d6c370
2026-02-16T03:27:08.805 [DEBUG] [Thread-216246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:27:08.825 [DEBUG] [Thread-216246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:27:08.825 [INFO] [Thread-216246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:08.828 [DEBUG] [Thread-216246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] client lang: <none>
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] server lang: <none>
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] kex follows: False
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] Compression: none
2026-02-16T03:27:08.829 [DEBUG] [Thread-216246] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:27:08.847 [DEBUG] [Thread-216246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:27:08.847 [DEBUG] [Thread-216246] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:27:08.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:27:08.848 [DEBUG] [Thread-216246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:27:08.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:27:08.850 [DEBUG] [Thread-216246] [transport.py] [_log()] userauth is OK
2026-02-16T03:27:08.851 [DEBUG] [Thread-216246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:27:08.851 [DEBUG] [Thread-216246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:27:08.851 [DEBUG] [Thread-216246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:27:08.851 [DEBUG] [Thread-216246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:27:08.867 [INFO] [Thread-216246] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:27:08.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:27:09.606 [DEBUG] [Thread-216246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:27:09.606 [DEBUG] [Thread-216246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:27:09.606 [DEBUG] [Thread-216246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:27:09.646 [DEBUG] [Thread-216246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:27:09.647 [DEBUG] [Thread-216246] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:27:09.650 [DEBUG] [Thread-216246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:27:09.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:27:09.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:27:09.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:27:09.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:27:09.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:27:09.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:27:09.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:27:09.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:27:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:27:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.059821 -999.00  +14.10  10.28     55   +5.20 1 1 1 1 1     0    0 10.27 57.98 ZNESW 9.7 10.3 122.0 13.2 14.3 -22.0 14.2 -21.0 13.9 -19.8 14.2 -21.2
2026-02-16T03:27:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:27:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:27:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.059821
2026-02-16T03:27:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:27:09.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:27:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:27:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:27:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:27:09.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:26:58', tmtdew=9.79, humidity=51.31, cloud=0.0, wind=14.54, temperature=13.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:26:58', seeing=2.0, atlas_timestamp='2026-02-16T01:26:08.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:23:00')
2026-02-16T03:27:09.677 [DEBUG] [Thread-216246] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:27:09.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:27:09.773 [DEBUG] [Thread-216249] [transport.py] [_log()] starting thread (client mode): 0xa81d5810
2026-02-16T03:27:09.773 [DEBUG] [Thread-216249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:27:09.788 [DEBUG] [Thread-216249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:27:09.788 [INFO] [Thread-216249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:27:09.796 [DEBUG] [Thread-216249] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:27:09.796 [DEBUG] [Thread-216249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:27:09.796 [DEBUG] [Thread-216249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] client lang: <none>
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] server lang: <none>
2026-02-16T03:27:09.797 [DEBUG] [Thread-216249] [transport.py] [_log()] kex follows: False
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] Compression: none
2026-02-16T03:27:09.798 [DEBUG] [Thread-216249] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:27:09.853 [DEBUG] [Thread-216249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:27:09.854 [DEBUG] [Thread-216249] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:27:09.854 [DEBUG] [Thread-216249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:27:09.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:27:09.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:27:09.912 [DEBUG] [Thread-216249] [transport.py] [_log()] userauth is OK
2026-02-16T03:27:09.912 [DEBUG] [Thread-216249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:27:09.913 [DEBUG] [Thread-216249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:27:09.913 [DEBUG] [Thread-216249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:27:09.913 [DEBUG] [Thread-216249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:27:09.935 [INFO] [Thread-216249] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:27:09.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:27:09.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:27:10.744 [DEBUG] [Thread-216249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:27:10.744 [DEBUG] [Thread-216249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:27:10.793 [DEBUG] [Thread-216249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:27:10.794 [DEBUG] [Thread-216249] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:27:10.803 [DEBUG] [Thread-216249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:27:10.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:27:10.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:27:10.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:27:10.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:27:10.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:27:10.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:27:10.842 [DEBUG] [Thread-216249] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:27:16.402 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:18.588 [DEBUG] [Thread-216251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:33.638 [DEBUG] [Thread-216252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:35.201 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:40.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:27:40.856 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:27:40.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:27:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 27, 33), 9.47, 52.69, 0.0, 13.9, 13.64, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:27:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:27:33
2026-02-16T03:27:43.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:27:43.190 [DEBUG] [Thread-216253] [transport.py] [_log()] starting thread (client mode): 0xa2d6cee0
2026-02-16T03:27:43.190 [DEBUG] [Thread-216253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:27:43.210 [DEBUG] [Thread-216253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:27:43.210 [INFO] [Thread-216253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:43.213 [DEBUG] [Thread-216253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] client lang: <none>
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] server lang: <none>
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] kex follows: False
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] Compression: none
2026-02-16T03:27:43.214 [DEBUG] [Thread-216253] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:27:43.231 [DEBUG] [Thread-216253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:27:43.231 [DEBUG] [Thread-216253] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:27:43.232 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:27:43.232 [DEBUG] [Thread-216253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:27:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:27:43.235 [DEBUG] [Thread-216253] [transport.py] [_log()] userauth is OK
2026-02-16T03:27:43.235 [DEBUG] [Thread-216253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:27:43.235 [DEBUG] [Thread-216253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:27:43.235 [DEBUG] [Thread-216253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:27:43.235 [DEBUG] [Thread-216253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:27:43.253 [INFO] [Thread-216253] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:27:43.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:27:43.870 [DEBUG] [Thread-216253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:27:43.870 [DEBUG] [Thread-216253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:27:43.870 [DEBUG] [Thread-216253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:27:43.911 [DEBUG] [Thread-216253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:27:43.911 [DEBUG] [Thread-216253] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:27:43.915 [DEBUG] [Thread-216253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:27:43.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:27:43.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:27:43.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:27:43.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:27:43.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:27:43.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:27:43.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:27:43.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:27:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:27:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.060515 -999.00  +14.00   9.39     56   +5.30 1 1 1 1 1     0    0 10.40 55.64 ZNESW 9.7 9.4 122.6 11.3 14.3 -22.3 14.2 -21.1 13.9 -19.8 14.2 -21.1
2026-02-16T03:27:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:27:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:27:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.060515
2026-02-16T03:27:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:27:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:27:43.949 [DEBUG] [Thread-216253] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:27:43.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:27:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:27:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:27:43.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:27:33', tmtdew=9.47, humidity=52.69, cloud=0.0, wind=13.9, temperature=13.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:27:34', seeing=2.23, atlas_timestamp='2026-02-16T01:27:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.02224999999999966, -0.05825000000000102, -0.0007500000000000284, -0.038000000000000256, -0.013999999999999346, 0.0012500000000006395, 0.0039999999999995595, 0.05025000000000013, 0.016500000000000625, -0.041499999999999204, -0.021750000000000824, -0.10800000000000054, -0.006999999999999673, 0.07925000000000004, 0.021999999999998465, 0.011999999999998678, 0.01774999999999949, -0.01249999999999929, 0.010999999999999233, -0.021750000000000824, -0.017500000000001847, 0.022749999999998494, 0.039250000000000895, 0.017249999999998877, 0.04899999999999949, -0.04600000000000115, 0.0547500000000003, 0.03200000000000003, 0.03599999999999959, 0.040000000000000924, 0.07500000000000107, 0.04100000000000037, -0.021750000000000824], zp_timestamp='2026-02-16T01:23:00')
2026-02-16T03:27:44.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:27:44.060 [DEBUG] [Thread-216256] [transport.py] [_log()] starting thread (client mode): 0xa2d6dcf0
2026-02-16T03:27:44.060 [DEBUG] [Thread-216256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:27:44.076 [DEBUG] [Thread-216256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:27:44.076 [INFO] [Thread-216256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:27:44.084 [DEBUG] [Thread-216256] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:27:44.084 [DEBUG] [Thread-216256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:27:44.084 [DEBUG] [Thread-216256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:27:44.084 [DEBUG] [Thread-216256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:44.084 [DEBUG] [Thread-216256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] client lang: <none>
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] server lang: <none>
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] kex follows: False
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:27:44.085 [DEBUG] [Thread-216256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:27:44.086 [DEBUG] [Thread-216256] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:27:44.086 [DEBUG] [Thread-216256] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:27:44.086 [DEBUG] [Thread-216256] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:27:44.086 [DEBUG] [Thread-216256] [transport.py] [_log()] Compression: none
2026-02-16T03:27:44.086 [DEBUG] [Thread-216256] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:27:44.145 [DEBUG] [Thread-216256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:27:44.146 [DEBUG] [Thread-216256] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:27:44.146 [DEBUG] [Thread-216256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:27:44.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:27:44.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:27:44.203 [DEBUG] [Thread-216256] [transport.py] [_log()] userauth is OK
2026-02-16T03:27:44.204 [DEBUG] [Thread-216256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:27:44.204 [DEBUG] [Thread-216256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:27:44.204 [DEBUG] [Thread-216256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:27:44.204 [DEBUG] [Thread-216256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:27:44.227 [INFO] [Thread-216256] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:27:44.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:27:44.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:27:45.028 [DEBUG] [Thread-216256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:27:45.028 [DEBUG] [Thread-216256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:27:45.076 [DEBUG] [Thread-216256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:27:45.076 [DEBUG] [Thread-216256] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:27:45.085 [DEBUG] [Thread-216256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:27:45.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:27:45.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:27:45.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:27:45.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:27:45.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:27:45.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:27:45.119 [DEBUG] [Thread-216256] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:27:48.679 [DEBUG] [Thread-216258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:50.411 [DEBUG] [Thread-216259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:52.840 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:52.841 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:27:53.861 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:03.736 [DEBUG] [Thread-216260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:12.549 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:15.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:28:15.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:28:15.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:28:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 28, 9), 9.68, 52.05, 0.0, 14.38, 13.65, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:28:17.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:28:09
2026-02-16T03:28:17.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:28:17.726 [DEBUG] [Thread-216261] [transport.py] [_log()] starting thread (client mode): 0xa2de8490
2026-02-16T03:28:17.726 [DEBUG] [Thread-216261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:28:17.746 [DEBUG] [Thread-216261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:28:17.746 [INFO] [Thread-216261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] client lang: <none>
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] server lang: <none>
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] kex follows: False
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:28:17.749 [DEBUG] [Thread-216261] [transport.py] [_log()] Compression: none
2026-02-16T03:28:17.750 [DEBUG] [Thread-216261] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:28:17.772 [DEBUG] [Thread-216261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:28:17.772 [DEBUG] [Thread-216261] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:28:17.773 [DEBUG] [Thread-216261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:28:17.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:28:17.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:28:17.775 [DEBUG] [Thread-216261] [transport.py] [_log()] userauth is OK
2026-02-16T03:28:17.775 [DEBUG] [Thread-216261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:28:17.775 [DEBUG] [Thread-216261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:28:17.775 [DEBUG] [Thread-216261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:28:17.775 [DEBUG] [Thread-216261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:28:17.800 [INFO] [Thread-216261] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:28:17.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:28:18.446 [DEBUG] [Thread-216261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:28:18.446 [DEBUG] [Thread-216261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:28:18.447 [DEBUG] [Thread-216261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:28:18.487 [DEBUG] [Thread-216261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:28:18.488 [DEBUG] [Thread-216261] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:28:18.491 [DEBUG] [Thread-216261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:28:18.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:28:18.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:28:18.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:28:18.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:28:18.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:28:18.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:28:18.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:28:18.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:28:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:28:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.060862 -999.00  +13.80  10.38     56   +5.40 1 1 1 1 1     0    0 10.15 53.67 ZNESW 9.2 10.4 119.2 11.9 14.3 -22.0 14.2 -20.9 13.9 -19.7 14.2 -20.8
2026-02-16T03:28:18.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:28:18.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:28:18.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.060862
2026-02-16T03:28:18.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:28:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:28:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:28:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:28:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:28:18.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:28:09', tmtdew=9.68, humidity=52.05, cloud=0.0, wind=14.38, temperature=13.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:28:09', seeing=2.1, atlas_timestamp='2026-02-16T01:27:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, -0.02275000000000027, 0.0182500000000001, -0.0005000000000006111, 0.0235000000000003, 0.03125, 0.03999999999999915, 0.05525000000000091, 0.03200000000000003, -0.0389999999999997, -0.017250000000000654, -0.0909999999999993, 0.041999999999999815, 0.07374999999999865, 0.04199999999999804, 0.017999999999998906, -0.0027500000000006963, -0.0235000000000003, 0.02499999999999858, 0.003750000000000142, 0.011999999999998678, 0.03725000000000023, 0.02525000000000155, -0.012249999999999872, 0.03649999999999842, -0.03049999999999997, 0.019750000000000156, 0.02000000000000135, 0.054999999999999716, 0.08500000000000085, 0.10600000000000165, 0.031500000000001194, -0.05725000000000158], zp_timestamp='2026-02-16T01:27:00')
2026-02-16T03:28:18.518 [DEBUG] [Thread-216261] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:28:18.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:28:18.617 [DEBUG] [Thread-216264] [transport.py] [_log()] starting thread (client mode): 0xa5770b20
2026-02-16T03:28:18.617 [DEBUG] [Thread-216264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:28:18.632 [DEBUG] [Thread-216264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:28:18.632 [INFO] [Thread-216264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] client lang: <none>
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] server lang: <none>
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] kex follows: False
2026-02-16T03:28:18.640 [DEBUG] [Thread-216264] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:28:18.641 [DEBUG] [Thread-216264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:28:18.641 [DEBUG] [Thread-216264] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:28:18.641 [DEBUG] [Thread-216264] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:28:18.641 [DEBUG] [Thread-216264] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:28:18.641 [DEBUG] [Thread-216264] [transport.py] [_log()] Compression: none
2026-02-16T03:28:18.641 [DEBUG] [Thread-216264] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:28:18.702 [DEBUG] [Thread-216264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:28:18.702 [DEBUG] [Thread-216264] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:28:18.703 [DEBUG] [Thread-216264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:28:18.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:28:18.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:28:18.761 [DEBUG] [Thread-216264] [transport.py] [_log()] userauth is OK
2026-02-16T03:28:18.761 [DEBUG] [Thread-216264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:28:18.761 [DEBUG] [Thread-216264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:28:18.761 [DEBUG] [Thread-216264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:28:18.761 [DEBUG] [Thread-216264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:28:18.774 [DEBUG] [Thread-216266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:18.779 [INFO] [Thread-216264] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:28:18.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:28:18.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:28:19.580 [DEBUG] [Thread-216264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:28:19.581 [DEBUG] [Thread-216264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:28:19.629 [DEBUG] [Thread-216264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:28:19.629 [DEBUG] [Thread-216264] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:28:19.639 [DEBUG] [Thread-216264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:28:19.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:28:19.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:28:19.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:28:19.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:28:19.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:28:19.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:28:19.676 [DEBUG] [Thread-216264] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:28:31.339 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:33.828 [DEBUG] [Thread-216267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:48.869 [DEBUG] [Thread-216268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:28:49.699 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:28:49.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:28:50.366 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:50.469 [DEBUG] [Thread-216269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:51.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 28, 9), 9.68, 52.05, 0.0, 14.38, 13.65, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:28:51.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:28:09
2026-02-16T03:28:51.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:28:52.059 [DEBUG] [Thread-216270] [transport.py] [_log()] starting thread (client mode): 0xa5772710
2026-02-16T03:28:52.059 [DEBUG] [Thread-216270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:28:52.080 [DEBUG] [Thread-216270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:28:52.080 [INFO] [Thread-216270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] client lang: <none>
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] server lang: <none>
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] kex follows: False
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] Compression: none
2026-02-16T03:28:52.083 [DEBUG] [Thread-216270] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:28:52.100 [DEBUG] [Thread-216270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:28:52.100 [DEBUG] [Thread-216270] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:28:52.101 [DEBUG] [Thread-216270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:28:52.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:28:52.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:28:52.102 [DEBUG] [Thread-216270] [transport.py] [_log()] userauth is OK
2026-02-16T03:28:52.103 [DEBUG] [Thread-216270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:28:52.103 [DEBUG] [Thread-216270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:28:52.103 [DEBUG] [Thread-216270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:28:52.103 [DEBUG] [Thread-216270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:28:52.127 [INFO] [Thread-216270] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:28:52.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:28:52.753 [DEBUG] [Thread-216270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:28:52.754 [DEBUG] [Thread-216270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:28:52.754 [DEBUG] [Thread-216270] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:28:52.794 [DEBUG] [Thread-216270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:28:52.794 [DEBUG] [Thread-216270] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:28:52.797 [DEBUG] [Thread-216270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:28:52.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:28:52.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:28:52.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:28:52.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:28:52.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:28:52.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:28:52.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:28:52.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:28:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:28:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.061209 -999.00  +13.80   8.38     56   +5.30 1 1 1 1 1     0    0 10.27 53.65 ZNESW 8.6 8.4 108.6 11.3 14.3 -22.1 14.2 -20.9 13.9 -19.6 14.2 -21.0
2026-02-16T03:28:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:28:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:28:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.061209
2026-02-16T03:28:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:28:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:28:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:28:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:28:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:28:52.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:28:09', tmtdew=9.68, humidity=52.05, cloud=0.0, wind=14.38, temperature=13.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:28:44', seeing=1.64, atlas_timestamp='2026-02-16T01:28:08.458', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, -0.02275000000000027, 0.0182500000000001, -0.0005000000000006111, 0.0235000000000003, 0.03125, 0.03999999999999915, 0.05525000000000091, 0.03200000000000003, -0.0389999999999997, -0.017250000000000654, -0.0909999999999993, 0.041999999999999815, 0.07374999999999865, 0.04199999999999804, 0.017999999999998906, -0.0027500000000006963, -0.0235000000000003, 0.02499999999999858, 0.003750000000000142, 0.011999999999998678, 0.03725000000000023, 0.02525000000000155, -0.012249999999999872, 0.03649999999999842, -0.03049999999999997, 0.019750000000000156, 0.02000000000000135, 0.054999999999999716, 0.08500000000000085, 0.10600000000000165, 0.031500000000001194, -0.05725000000000158], zp_timestamp='2026-02-16T01:27:00')
2026-02-16T03:28:52.824 [DEBUG] [Thread-216270] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:28:52.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:28:52.922 [DEBUG] [Thread-216273] [transport.py] [_log()] starting thread (client mode): 0xa2d133a0
2026-02-16T03:28:52.922 [DEBUG] [Thread-216273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:28:52.937 [DEBUG] [Thread-216273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:28:52.937 [INFO] [Thread-216273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] client lang: <none>
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] server lang: <none>
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] kex follows: False
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] Compression: none
2026-02-16T03:28:52.945 [DEBUG] [Thread-216273] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:28:53.001 [DEBUG] [Thread-216273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:28:53.001 [DEBUG] [Thread-216273] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:28:53.001 [DEBUG] [Thread-216273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:28:53.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:28:53.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:28:53.039 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:53.040 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:28:53.058 [DEBUG] [Thread-216273] [transport.py] [_log()] userauth is OK
2026-02-16T03:28:53.058 [DEBUG] [Thread-216273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:28:53.058 [DEBUG] [Thread-216273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:28:53.058 [DEBUG] [Thread-216273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:28:53.058 [DEBUG] [Thread-216273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:28:53.073 [INFO] [Thread-216273] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:28:53.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:28:53.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:28:53.884 [DEBUG] [Thread-216273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:28:53.884 [DEBUG] [Thread-216273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:28:53.932 [DEBUG] [Thread-216273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:28:53.932 [DEBUG] [Thread-216273] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:28:53.940 [DEBUG] [Thread-216273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:28:53.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:28:53.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:28:53.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:28:53.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:28:53.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:28:53.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:28:53.972 [DEBUG] [Thread-216273] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:29:03.905 [DEBUG] [Thread-216275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:09.091 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:18.966 [DEBUG] [Thread-216276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:23.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:29:23.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:29:24.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:29:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 28, 44), 9.64, 52.2, 0.0, 14.1, 13.59, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:29:25.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:28:44
2026-02-16T03:29:26.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:29:26.473 [DEBUG] [Thread-216277] [transport.py] [_log()] starting thread (client mode): 0xa2d6e0b0
2026-02-16T03:29:26.473 [DEBUG] [Thread-216277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:29:26.492 [DEBUG] [Thread-216277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:29:26.492 [INFO] [Thread-216277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:29:26.495 [DEBUG] [Thread-216277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] client lang: <none>
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] server lang: <none>
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] kex follows: False
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] Compression: none
2026-02-16T03:29:26.496 [DEBUG] [Thread-216277] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:29:26.511 [DEBUG] [Thread-216277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:29:26.511 [DEBUG] [Thread-216277] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:29:26.511 [DEBUG] [Thread-216277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:29:26.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:29:26.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:29:26.512 [DEBUG] [Thread-216277] [transport.py] [_log()] userauth is OK
2026-02-16T03:29:26.512 [DEBUG] [Thread-216277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:29:26.512 [DEBUG] [Thread-216277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:29:26.512 [DEBUG] [Thread-216277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:29:26.512 [DEBUG] [Thread-216277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:29:26.527 [INFO] [Thread-216277] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:29:26.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:29:27.188 [DEBUG] [Thread-216277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:29:27.189 [DEBUG] [Thread-216277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:29:27.189 [DEBUG] [Thread-216277] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:29:27.229 [DEBUG] [Thread-216277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:29:27.230 [DEBUG] [Thread-216277] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:29:27.233 [DEBUG] [Thread-216277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:29:27.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:29:27.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:29:27.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:29:27.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:29:27.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:29:27.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:29:27.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:29:27.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:29:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:29:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.061557 -999.00  +13.80  10.20     56   +5.20 1 1 1 1 1     0    0 10.15 50.71 ZNESW 9.0 10.2 114.8 10.9 14.3 -22.1 14.2 -20.9 13.9 -19.6 14.2 -21.0
2026-02-16T03:29:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:29:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:29:27.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.061557
2026-02-16T03:29:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:29:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:29:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:29:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:29:27.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:29:27.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:28:44', tmtdew=9.64, humidity=52.2, cloud=0.0, wind=14.1, temperature=13.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:29:20', seeing=1.58, atlas_timestamp='2026-02-16T01:28:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, -0.02275000000000027, 0.0182500000000001, -0.0005000000000006111, 0.0235000000000003, 0.03125, 0.03999999999999915, 0.05525000000000091, 0.03200000000000003, -0.0389999999999997, -0.017250000000000654, -0.0909999999999993, 0.041999999999999815, 0.07374999999999865, 0.04199999999999804, 0.017999999999998906, -0.0027500000000006963, -0.0235000000000003, 0.02499999999999858, 0.003750000000000142, 0.011999999999998678, 0.03725000000000023, 0.02525000000000155, -0.012249999999999872, 0.03649999999999842, -0.03049999999999997, 0.019750000000000156, 0.02000000000000135, 0.054999999999999716, 0.08500000000000085, 0.10600000000000165, 0.031500000000001194, -0.05725000000000158], zp_timestamp='2026-02-16T01:27:00')
2026-02-16T03:29:27.257 [DEBUG] [Thread-216277] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:29:27.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:29:27.350 [DEBUG] [Thread-216280] [transport.py] [_log()] starting thread (client mode): 0xa81d7520
2026-02-16T03:29:27.351 [DEBUG] [Thread-216280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:29:27.364 [DEBUG] [Thread-216280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:29:27.365 [INFO] [Thread-216280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:29:27.372 [DEBUG] [Thread-216280] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:29:27.372 [DEBUG] [Thread-216280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] client lang: <none>
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] server lang: <none>
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] kex follows: False
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] Compression: none
2026-02-16T03:29:27.373 [DEBUG] [Thread-216280] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:29:27.435 [DEBUG] [Thread-216280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:29:27.435 [DEBUG] [Thread-216280] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:29:27.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:29:27.436 [DEBUG] [Thread-216280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:29:27.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:29:27.491 [DEBUG] [Thread-216280] [transport.py] [_log()] userauth is OK
2026-02-16T03:29:27.492 [DEBUG] [Thread-216280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:29:27.492 [DEBUG] [Thread-216280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:29:27.492 [DEBUG] [Thread-216280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:29:27.492 [DEBUG] [Thread-216280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:29:27.511 [INFO] [Thread-216280] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:29:27.511 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:29:27.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:29:27.886 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:28.346 [DEBUG] [Thread-216280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:29:28.346 [DEBUG] [Thread-216280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:29:28.393 [DEBUG] [Thread-216280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:29:28.393 [DEBUG] [Thread-216280] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:29:28.402 [DEBUG] [Thread-216280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:29:28.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:29:28.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:29:28.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:29:28.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:29:28.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:29:28.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:29:28.436 [DEBUG] [Thread-216280] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:29:34.001 [DEBUG] [Thread-216282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:46.527 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:49.046 [DEBUG] [Thread-216283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:50.525 [DEBUG] [Thread-216284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:53.241 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:53.242 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:29:58.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:29:58.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:29:58.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:30:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 29, 19), 9.67, 52.05, 0.0, 14.86, 13.55, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:30:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:29:19
2026-02-16T03:30:00.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:30:00.978 [DEBUG] [Thread-216285] [transport.py] [_log()] starting thread (client mode): 0xa2d6f1c0
2026-02-16T03:30:00.978 [DEBUG] [Thread-216285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:30:01.000 [DEBUG] [Thread-216285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:30:01.000 [INFO] [Thread-216285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:30:01.003 [DEBUG] [Thread-216285] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] client lang: <none>
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] server lang: <none>
2026-02-16T03:30:01.004 [DEBUG] [Thread-216285] [transport.py] [_log()] kex follows: False
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] Compression: none
2026-02-16T03:30:01.005 [DEBUG] [Thread-216285] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:30:01.023 [DEBUG] [Thread-216285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:30:01.024 [DEBUG] [Thread-216285] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:30:01.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:30:01.025 [DEBUG] [Thread-216285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:30:01.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:30:01.027 [DEBUG] [Thread-216285] [transport.py] [_log()] userauth is OK
2026-02-16T03:30:01.027 [DEBUG] [Thread-216285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:30:01.027 [DEBUG] [Thread-216285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:30:01.027 [DEBUG] [Thread-216285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:30:01.027 [DEBUG] [Thread-216285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:30:01.050 [INFO] [Thread-216285] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:30:01.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:30:01.806 [DEBUG] [Thread-216285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:30:01.807 [DEBUG] [Thread-216285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:30:01.807 [DEBUG] [Thread-216285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:30:01.847 [DEBUG] [Thread-216285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:30:01.847 [DEBUG] [Thread-216285] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:30:01.849 [DEBUG] [Thread-216285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:30:01.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:30:01.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:30:01.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:30:01.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:30:01.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:30:01.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:30:01.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:30:01.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:30:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:30:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.061904 -999.00  +13.80  10.50     54   +4.90 1 1 1 1 1     0    0 10.08 46.77 ZNESW 12.1 10.5 119.0 14.0 14.3 -22.1 14.2 -20.9 13.9 -19.5 14.2 -20.7
2026-02-16T03:30:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:30:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:30:01.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.061904
2026-02-16T03:30:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:30:01.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:30:01.873 [DEBUG] [Thread-216285] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:30:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:30:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:30:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:30:01.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:29:19', tmtdew=9.67, humidity=52.05, cloud=0.0, wind=14.86, temperature=13.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:29:55', seeing=1.41, atlas_timestamp='2026-02-16T01:29:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, -0.02275000000000027, 0.0182500000000001, -0.0005000000000006111, 0.0235000000000003, 0.03125, 0.03999999999999915, 0.05525000000000091, 0.03200000000000003, -0.0389999999999997, -0.017250000000000654, -0.0909999999999993, 0.041999999999999815, 0.07374999999999865, 0.04199999999999804, 0.017999999999998906, -0.0027500000000006963, -0.0235000000000003, 0.02499999999999858, 0.003750000000000142, 0.011999999999998678, 0.03725000000000023, 0.02525000000000155, -0.012249999999999872, 0.03649999999999842, -0.03049999999999997, 0.019750000000000156, 0.02000000000000135, 0.054999999999999716, 0.08500000000000085, 0.10600000000000165, 0.031500000000001194, -0.05725000000000158], zp_timestamp='2026-02-16T01:27:00')
2026-02-16T03:30:01.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:30:01.990 [DEBUG] [Thread-216288] [transport.py] [_log()] starting thread (client mode): 0xa2d260e0
2026-02-16T03:30:01.990 [DEBUG] [Thread-216288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:30:02.001 [DEBUG] [Thread-216288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:30:02.001 [INFO] [Thread-216288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] client lang: <none>
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] server lang: <none>
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] kex follows: False
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] Compression: none
2026-02-16T03:30:02.009 [DEBUG] [Thread-216288] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:30:02.073 [DEBUG] [Thread-216288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:30:02.073 [DEBUG] [Thread-216288] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:30:02.074 [DEBUG] [Thread-216288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:30:02.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:30:02.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:30:02.134 [DEBUG] [Thread-216288] [transport.py] [_log()] userauth is OK
2026-02-16T03:30:02.134 [DEBUG] [Thread-216288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:30:02.134 [DEBUG] [Thread-216288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:30:02.134 [DEBUG] [Thread-216288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:30:02.134 [DEBUG] [Thread-216288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:30:02.149 [INFO] [Thread-216288] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:30:02.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:30:02.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:30:03.006 [DEBUG] [Thread-216288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:30:03.006 [DEBUG] [Thread-216288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:30:03.053 [DEBUG] [Thread-216288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:30:03.053 [DEBUG] [Thread-216288] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:30:03.062 [DEBUG] [Thread-216288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:30:03.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:30:03.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:30:03.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:30:03.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:30:03.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:30:03.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:30:03.093 [DEBUG] [Thread-216288] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:30:04.080 [DEBUG] [Thread-216290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:05.236 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:19.118 [DEBUG] [Thread-216291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:23.945 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:30:33.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:30:33.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:30:34.150 [DEBUG] [Thread-216292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:35.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 29, 55), 10.38, 49.63, 0.0, 16.64, 13.97, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:30:35.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:29:55
2026-02-16T03:30:35.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:30:35.746 [DEBUG] [Thread-216293] [transport.py] [_log()] starting thread (client mode): 0xa2d25f90
2026-02-16T03:30:35.746 [DEBUG] [Thread-216293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:30:35.766 [DEBUG] [Thread-216293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:30:35.767 [INFO] [Thread-216293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] client lang: <none>
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] server lang: <none>
2026-02-16T03:30:35.770 [DEBUG] [Thread-216293] [transport.py] [_log()] kex follows: False
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] Compression: none
2026-02-16T03:30:35.771 [DEBUG] [Thread-216293] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:30:35.792 [DEBUG] [Thread-216293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:30:35.793 [DEBUG] [Thread-216293] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:30:35.794 [DEBUG] [Thread-216293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:30:35.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:30:35.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:30:35.796 [DEBUG] [Thread-216293] [transport.py] [_log()] userauth is OK
2026-02-16T03:30:35.796 [DEBUG] [Thread-216293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:30:35.797 [DEBUG] [Thread-216293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:30:35.797 [DEBUG] [Thread-216293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:30:35.797 [DEBUG] [Thread-216293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:30:35.832 [INFO] [Thread-216293] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:30:35.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:30:36.497 [DEBUG] [Thread-216293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:30:36.497 [DEBUG] [Thread-216293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:30:36.497 [DEBUG] [Thread-216293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:30:36.538 [DEBUG] [Thread-216293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:30:36.539 [DEBUG] [Thread-216293] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:30:36.542 [DEBUG] [Thread-216293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:30:36.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:30:36.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:30:36.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:30:36.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:30:36.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:30:36.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:30:36.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:30:36.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:30:36.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:30:36.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.062251 -999.00  +14.00   9.90     53   +4.80 1 1 1 1 1     0    0 10.05 48.52 ZNESW 9.8 9.9 121.4 13.8 14.3 -21.7 14.2 -20.7 13.9 -19.5 14.2 -20.7
2026-02-16T03:30:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:30:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:30:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.062251
2026-02-16T03:30:36.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:30:36.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:30:36.571 [DEBUG] [Thread-216293] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:30:36.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:30:36.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:30:36.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:30:36.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:29:55', tmtdew=10.38, humidity=49.63, cloud=0.0, wind=16.64, temperature=13.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:30:31', seeing=1.47, atlas_timestamp='2026-02-16T01:29:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, -0.02275000000000027, 0.0182500000000001, -0.0005000000000006111, 0.0235000000000003, 0.03125, 0.03999999999999915, 0.05525000000000091, 0.03200000000000003, -0.0389999999999997, -0.017250000000000654, -0.0909999999999993, 0.041999999999999815, 0.07374999999999865, 0.04199999999999804, 0.017999999999998906, -0.0027500000000006963, -0.0235000000000003, 0.02499999999999858, 0.003750000000000142, 0.011999999999998678, 0.03725000000000023, 0.02525000000000155, -0.012249999999999872, 0.03649999999999842, -0.03049999999999997, 0.019750000000000156, 0.02000000000000135, 0.054999999999999716, 0.08500000000000085, 0.10600000000000165, 0.031500000000001194, -0.05725000000000158], zp_timestamp='2026-02-16T01:27:00')
2026-02-16T03:30:36.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:30:36.674 [DEBUG] [Thread-216296] [transport.py] [_log()] starting thread (client mode): 0xa81d4250
2026-02-16T03:30:36.674 [DEBUG] [Thread-216296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:30:36.699 [DEBUG] [Thread-216296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:30:36.700 [INFO] [Thread-216296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:30:36.710 [DEBUG] [Thread-216296] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:30:36.710 [DEBUG] [Thread-216296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:30:36.710 [DEBUG] [Thread-216296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] client lang: <none>
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] server lang: <none>
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] kex follows: False
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:30:36.711 [DEBUG] [Thread-216296] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:30:36.712 [DEBUG] [Thread-216296] [transport.py] [_log()] Compression: none
2026-02-16T03:30:36.712 [DEBUG] [Thread-216296] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:30:36.768 [DEBUG] [Thread-216296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:30:36.768 [DEBUG] [Thread-216296] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:30:36.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:30:36.770 [DEBUG] [Thread-216296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:30:36.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:30:36.836 [DEBUG] [Thread-216296] [transport.py] [_log()] userauth is OK
2026-02-16T03:30:36.836 [DEBUG] [Thread-216296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:30:36.836 [DEBUG] [Thread-216296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:30:36.836 [DEBUG] [Thread-216296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:30:36.836 [DEBUG] [Thread-216296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:30:36.858 [INFO] [Thread-216296] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:30:36.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:30:36.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:30:37.688 [DEBUG] [Thread-216296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:30:37.688 [DEBUG] [Thread-216296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:30:37.737 [DEBUG] [Thread-216296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:30:37.737 [DEBUG] [Thread-216296] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:30:37.750 [DEBUG] [Thread-216296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:30:37.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:30:37.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:30:37.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:30:37.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:30:37.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:30:37.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:30:37.798 [DEBUG] [Thread-216296] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:30:42.582 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:49.186 [DEBUG] [Thread-216298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:50.596 [DEBUG] [Thread-216299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:53.441 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:30:53.442 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:01.228 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:04.238 [DEBUG] [Thread-216300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:07.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:31:07.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:31:07.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:31:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 30, 30), 10.69, 48.62, 0.0, 16.27, 14.22, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:31:09.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:30:30
2026-02-16T03:31:10.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:31:10.476 [DEBUG] [Thread-216301] [transport.py] [_log()] starting thread (client mode): 0xa2d01570
2026-02-16T03:31:10.476 [DEBUG] [Thread-216301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:31:10.496 [DEBUG] [Thread-216301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:31:10.497 [INFO] [Thread-216301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] client lang: <none>
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] server lang: <none>
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] kex follows: False
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] Compression: none
2026-02-16T03:31:10.500 [DEBUG] [Thread-216301] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:31:10.519 [DEBUG] [Thread-216301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:31:10.519 [DEBUG] [Thread-216301] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:31:10.520 [DEBUG] [Thread-216301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:31:10.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:31:10.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:31:10.522 [DEBUG] [Thread-216301] [transport.py] [_log()] userauth is OK
2026-02-16T03:31:10.522 [DEBUG] [Thread-216301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:31:10.522 [DEBUG] [Thread-216301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:31:10.522 [DEBUG] [Thread-216301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:31:10.522 [DEBUG] [Thread-216301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:31:10.558 [INFO] [Thread-216301] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:31:10.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:31:11.360 [DEBUG] [Thread-216301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:31:11.360 [DEBUG] [Thread-216301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:31:11.360 [DEBUG] [Thread-216301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:31:11.401 [DEBUG] [Thread-216301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:31:11.401 [DEBUG] [Thread-216301] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:31:11.404 [DEBUG] [Thread-216301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:31:11.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:31:11.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:31:11.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:31:11.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:31:11.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:31:11.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:31:11.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:31:11.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.062946 -999.00  +14.20  10.17     52   +4.70 1 1 1 1 1     0    0 10.22 45.88 ZNESW 11.3 10.2 125.6 12.1 14.4 -21.9 14.3 -20.9 14.0 -19.5 14.3 -20.8
2026-02-16T03:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.062946
2026-02-16T03:31:11.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:31:11.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:31:11.435 [DEBUG] [Thread-216301] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:31:11.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:30:30', tmtdew=10.69, humidity=48.62, cloud=0.0, wind=16.27, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:31:06', seeing=1.49, atlas_timestamp='2026-02-16T01:30:38.534', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:29:00')
2026-02-16T03:31:11.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:31:11.539 [DEBUG] [Thread-216304] [transport.py] [_log()] starting thread (client mode): 0xa2dbfd30
2026-02-16T03:31:11.539 [DEBUG] [Thread-216304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:31:11.554 [DEBUG] [Thread-216304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:31:11.554 [INFO] [Thread-216304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:31:11.561 [DEBUG] [Thread-216304] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:31:11.562 [DEBUG] [Thread-216304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] client lang: <none>
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] server lang: <none>
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] kex follows: False
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] Compression: none
2026-02-16T03:31:11.563 [DEBUG] [Thread-216304] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:31:11.617 [DEBUG] [Thread-216304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:31:11.618 [DEBUG] [Thread-216304] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:31:11.618 [DEBUG] [Thread-216304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:31:11.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:31:11.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:31:11.674 [DEBUG] [Thread-216304] [transport.py] [_log()] userauth is OK
2026-02-16T03:31:11.674 [DEBUG] [Thread-216304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:31:11.674 [DEBUG] [Thread-216304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:31:11.674 [DEBUG] [Thread-216304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:31:11.674 [DEBUG] [Thread-216304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:31:11.697 [INFO] [Thread-216304] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:31:11.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:31:11.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:31:12.526 [DEBUG] [Thread-216304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:31:12.526 [DEBUG] [Thread-216304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:31:12.574 [DEBUG] [Thread-216304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:31:12.574 [DEBUG] [Thread-216304] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:31:12.583 [DEBUG] [Thread-216304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:31:12.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:31:12.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:31:12.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:31:12.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:31:12.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:31:12.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:31:12.618 [DEBUG] [Thread-216304] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:31:19.274 [DEBUG] [Thread-216306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:19.890 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:34.329 [DEBUG] [Thread-216307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:38.524 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:42.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:31:42.640 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:31:42.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:31:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 31, 6), 10.86, 48.04, 0.0, 15.99, 14.28, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:31:44.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:31:06
2026-02-16T03:31:45.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:31:45.212 [DEBUG] [Thread-216308] [transport.py] [_log()] starting thread (client mode): 0xa5772e30
2026-02-16T03:31:45.212 [DEBUG] [Thread-216308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:31:45.232 [DEBUG] [Thread-216308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:31:45.233 [INFO] [Thread-216308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:31:45.236 [DEBUG] [Thread-216308] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:31:45.236 [DEBUG] [Thread-216308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:31:45.236 [DEBUG] [Thread-216308] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:31:45.236 [DEBUG] [Thread-216308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] client lang: <none>
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] server lang: <none>
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] kex follows: False
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] Compression: none
2026-02-16T03:31:45.237 [DEBUG] [Thread-216308] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:31:45.254 [DEBUG] [Thread-216308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:31:45.255 [DEBUG] [Thread-216308] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:31:45.256 [DEBUG] [Thread-216308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:31:45.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:31:45.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:31:45.258 [DEBUG] [Thread-216308] [transport.py] [_log()] userauth is OK
2026-02-16T03:31:45.258 [DEBUG] [Thread-216308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:31:45.258 [DEBUG] [Thread-216308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:31:45.258 [DEBUG] [Thread-216308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:31:45.258 [DEBUG] [Thread-216308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:31:45.294 [INFO] [Thread-216308] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:31:45.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:31:45.934 [DEBUG] [Thread-216308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:31:45.944 [DEBUG] [Thread-216308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:31:45.944 [DEBUG] [Thread-216308] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:31:45.976 [DEBUG] [Thread-216308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:31:45.977 [DEBUG] [Thread-216308] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:31:45.980 [DEBUG] [Thread-216308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:31:45.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:31:45.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:31:45.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:31:45.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:31:46.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:31:46.004 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:31:46.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:31:46.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:31:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:31:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.063293 -999.00  +14.30  11.30     53   +4.90 1 1 1 1 1     0    0 10.15 46.11 ZNESW 11.1 11.3 127.4 14.5 14.4 -22.0 14.3 -21.1 14.0 -19.7 14.3 -20.9
2026-02-16T03:31:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:31:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:31:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.063293
2026-02-16T03:31:46.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:31:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:31:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:31:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:31:46.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:31:46.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:31:06', tmtdew=10.86, humidity=48.04, cloud=0.0, wind=15.99, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:31:41', seeing=1.86, atlas_timestamp='2026-02-16T01:31:08.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:29:00')
2026-02-16T03:31:46.007 [DEBUG] [Thread-216308] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:31:46.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:31:46.105 [DEBUG] [Thread-216311] [transport.py] [_log()] starting thread (client mode): 0xa5773880
2026-02-16T03:31:46.105 [DEBUG] [Thread-216311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:31:46.121 [DEBUG] [Thread-216311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:31:46.122 [INFO] [Thread-216311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:31:46.129 [DEBUG] [Thread-216311] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:31:46.130 [DEBUG] [Thread-216311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] client lang: <none>
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] server lang: <none>
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] kex follows: False
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:31:46.131 [DEBUG] [Thread-216311] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:31:46.132 [DEBUG] [Thread-216311] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:31:46.132 [DEBUG] [Thread-216311] [transport.py] [_log()] Compression: none
2026-02-16T03:31:46.141 [DEBUG] [Thread-216311] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:31:46.190 [DEBUG] [Thread-216311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:31:46.191 [DEBUG] [Thread-216311] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:31:46.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:31:46.192 [DEBUG] [Thread-216311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:31:46.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:31:46.246 [DEBUG] [Thread-216311] [transport.py] [_log()] userauth is OK
2026-02-16T03:31:46.247 [DEBUG] [Thread-216311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:31:46.247 [DEBUG] [Thread-216311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:31:46.247 [DEBUG] [Thread-216311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:31:46.247 [DEBUG] [Thread-216311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:31:46.266 [INFO] [Thread-216311] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:31:46.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:31:46.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:31:47.124 [DEBUG] [Thread-216311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:31:47.124 [DEBUG] [Thread-216311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:31:47.172 [DEBUG] [Thread-216311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:31:47.172 [DEBUG] [Thread-216311] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:31:47.181 [DEBUG] [Thread-216311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:31:47.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:31:47.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:31:47.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:31:47.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:31:47.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:31:47.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:31:47.215 [DEBUG] [Thread-216311] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:31:49.367 [DEBUG] [Thread-216313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:50.652 [DEBUG] [Thread-216314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:53.651 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:53.652 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:31:57.184 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:04.418 [DEBUG] [Thread-216315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:15.928 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:17.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:32:17.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:32:17.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:32:19.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 31, 41), 10.8, 48.15, 0.0, 14.43, 14.23, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:32:19.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:31:41
2026-02-16T03:32:19.453 [DEBUG] [Thread-216316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:19.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:32:19.796 [DEBUG] [Thread-216317] [transport.py] [_log()] starting thread (client mode): 0xa2dc1a20
2026-02-16T03:32:19.796 [DEBUG] [Thread-216317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:32:19.816 [DEBUG] [Thread-216317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:32:19.816 [INFO] [Thread-216317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:32:19.819 [DEBUG] [Thread-216317] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:32:19.819 [DEBUG] [Thread-216317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] client lang: <none>
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] server lang: <none>
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] kex follows: False
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:32:19.820 [DEBUG] [Thread-216317] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:32:19.821 [DEBUG] [Thread-216317] [transport.py] [_log()] Compression: none
2026-02-16T03:32:19.821 [DEBUG] [Thread-216317] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:32:19.839 [DEBUG] [Thread-216317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:32:19.839 [DEBUG] [Thread-216317] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:32:19.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:32:19.840 [DEBUG] [Thread-216317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:32:19.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:32:19.842 [DEBUG] [Thread-216317] [transport.py] [_log()] userauth is OK
2026-02-16T03:32:19.842 [DEBUG] [Thread-216317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:32:19.842 [DEBUG] [Thread-216317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:32:19.843 [DEBUG] [Thread-216317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:32:19.843 [DEBUG] [Thread-216317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:32:19.866 [INFO] [Thread-216317] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:32:19.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:32:20.484 [DEBUG] [Thread-216317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:32:20.484 [DEBUG] [Thread-216317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:32:20.484 [DEBUG] [Thread-216317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:32:20.525 [DEBUG] [Thread-216317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:32:20.525 [DEBUG] [Thread-216317] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:32:20.527 [DEBUG] [Thread-216317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:32:20.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:32:20.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:32:20.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:32:20.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:32:20.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:32:20.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:32:20.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:32:20.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:32:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:32:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.063640 -999.00  +14.30  11.22     53   +5.00 1 1 1 1 1     0    0 10.21 49.28 ZNESW 10.5 11.2 121.2 13.1 14.4 -22.1 14.3 -20.9 14.0 -19.6 14.3 -20.8
2026-02-16T03:32:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:32:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:32:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.063640
2026-02-16T03:32:20.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:32:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:32:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:32:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:32:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:32:20.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:31:41', tmtdew=10.8, humidity=48.15, cloud=0.0, wind=14.43, temperature=14.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:31:41', seeing=1.86, atlas_timestamp='2026-02-16T01:31:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:29:00')
2026-02-16T03:32:20.549 [DEBUG] [Thread-216317] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:32:20.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:32:20.653 [DEBUG] [Thread-216320] [transport.py] [_log()] starting thread (client mode): 0xa2dbfca0
2026-02-16T03:32:20.653 [DEBUG] [Thread-216320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:32:20.668 [DEBUG] [Thread-216320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:32:20.668 [INFO] [Thread-216320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:32:20.676 [DEBUG] [Thread-216320] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:32:20.676 [DEBUG] [Thread-216320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:32:20.676 [DEBUG] [Thread-216320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:32:20.676 [DEBUG] [Thread-216320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:20.676 [DEBUG] [Thread-216320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] client lang: <none>
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] server lang: <none>
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] kex follows: False
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] Compression: none
2026-02-16T03:32:20.677 [DEBUG] [Thread-216320] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:32:20.732 [DEBUG] [Thread-216320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:32:20.733 [DEBUG] [Thread-216320] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:32:20.733 [DEBUG] [Thread-216320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:32:20.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:32:20.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:32:20.792 [DEBUG] [Thread-216320] [transport.py] [_log()] userauth is OK
2026-02-16T03:32:20.792 [DEBUG] [Thread-216320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:32:20.792 [DEBUG] [Thread-216320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:32:20.792 [DEBUG] [Thread-216320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:32:20.792 [DEBUG] [Thread-216320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:32:20.806 [INFO] [Thread-216320] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:32:20.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:32:20.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:32:21.601 [DEBUG] [Thread-216320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:32:21.601 [DEBUG] [Thread-216320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:32:21.649 [DEBUG] [Thread-216320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:32:21.649 [DEBUG] [Thread-216320] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:32:21.658 [DEBUG] [Thread-216320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:32:21.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:32:21.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:32:21.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:32:21.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:32:21.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:32:21.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:32:21.692 [DEBUG] [Thread-216320] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:32:34.486 [DEBUG] [Thread-216322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:34.588 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:49.540 [DEBUG] [Thread-216323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:50.717 [DEBUG] [Thread-216324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:32:51.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:32:51.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:32:53.264 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 32, 17), 10.68, 48.31, 0.0, 14.52, 14.17, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:32:53.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:32:17
2026-02-16T03:32:53.853 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:53.854 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:32:54.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:32:54.327 [DEBUG] [Thread-216325] [transport.py] [_log()] starting thread (client mode): 0xa2dbceb0
2026-02-16T03:32:54.327 [DEBUG] [Thread-216325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:32:54.347 [DEBUG] [Thread-216325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:32:54.347 [INFO] [Thread-216325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] client lang: <none>
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] server lang: <none>
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] kex follows: False
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] Compression: none
2026-02-16T03:32:54.350 [DEBUG] [Thread-216325] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:32:54.366 [DEBUG] [Thread-216325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:32:54.367 [DEBUG] [Thread-216325] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:32:54.367 [DEBUG] [Thread-216325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:32:54.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:32:54.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:32:54.409 [DEBUG] [Thread-216325] [transport.py] [_log()] userauth is OK
2026-02-16T03:32:54.409 [DEBUG] [Thread-216325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:32:54.409 [DEBUG] [Thread-216325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:32:54.409 [DEBUG] [Thread-216325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:32:54.409 [DEBUG] [Thread-216325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:32:54.436 [INFO] [Thread-216325] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:32:54.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:32:55.001 [DEBUG] [Thread-216325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:32:55.002 [DEBUG] [Thread-216325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:32:55.002 [DEBUG] [Thread-216325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:32:55.003 [DEBUG] [Thread-216325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:32:55.003 [DEBUG] [Thread-216325] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:32:55.005 [DEBUG] [Thread-216325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:32:55.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:32:55.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:32:55.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:32:55.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:32:55.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:32:55.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:32:55.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:32:55.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:32:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:32:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.063987 -999.00  +14.40  11.94     51   +4.70 1 1 1 1 1     0    0 10.05 45.47 ZNESW 11.3 11.9 110.4 18.5 14.5 -21.9 14.3 -20.7 14.0 -19.6 14.3 -21.0
2026-02-16T03:32:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:32:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:32:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.063987
2026-02-16T03:32:55.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:32:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:32:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:32:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:32:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:32:55.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:32:17', tmtdew=10.68, humidity=48.31, cloud=0.0, wind=14.52, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:32:17', seeing=2.49, atlas_timestamp='2026-02-16T01:32:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:29:00')
2026-02-16T03:32:55.026 [DEBUG] [Thread-216325] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:32:55.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:32:55.123 [DEBUG] [Thread-216328] [transport.py] [_log()] starting thread (client mode): 0xa2dbfbb0
2026-02-16T03:32:55.123 [DEBUG] [Thread-216328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:32:55.137 [DEBUG] [Thread-216328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:32:55.137 [INFO] [Thread-216328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:32:55.145 [DEBUG] [Thread-216328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] client lang: <none>
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] server lang: <none>
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] kex follows: False
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:32:55.146 [DEBUG] [Thread-216328] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:32:55.147 [DEBUG] [Thread-216328] [transport.py] [_log()] Compression: none
2026-02-16T03:32:55.147 [DEBUG] [Thread-216328] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:32:55.202 [DEBUG] [Thread-216328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:32:55.203 [DEBUG] [Thread-216328] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:32:55.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:32:55.204 [DEBUG] [Thread-216328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:32:55.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:32:55.258 [DEBUG] [Thread-216328] [transport.py] [_log()] userauth is OK
2026-02-16T03:32:55.258 [DEBUG] [Thread-216328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:32:55.258 [DEBUG] [Thread-216328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:32:55.258 [DEBUG] [Thread-216328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:32:55.258 [DEBUG] [Thread-216328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:32:55.277 [INFO] [Thread-216328] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:32:55.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:32:55.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:32:56.083 [DEBUG] [Thread-216328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:32:56.084 [DEBUG] [Thread-216328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:32:56.131 [DEBUG] [Thread-216328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:32:56.131 [DEBUG] [Thread-216328] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:32:56.140 [DEBUG] [Thread-216328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:32:56.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:32:56.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:32:56.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:32:56.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:32:56.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:32:56.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:32:56.174 [DEBUG] [Thread-216328] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:33:04.575 [DEBUG] [Thread-216330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:12.090 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:19.629 [DEBUG] [Thread-216331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:26.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:33:26.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:33:26.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:33:28.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 32, 52), 10.82, 48.33, 0.0, 14.72, 14.12, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:33:28.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:32:52
2026-02-16T03:33:28.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:33:28.575 [DEBUG] [Thread-216332] [transport.py] [_log()] starting thread (client mode): 0xa2dbe560
2026-02-16T03:33:28.575 [DEBUG] [Thread-216332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:33:28.597 [DEBUG] [Thread-216332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:33:28.597 [INFO] [Thread-216332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] client lang: <none>
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] server lang: <none>
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] kex follows: False
2026-02-16T03:33:28.600 [DEBUG] [Thread-216332] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:33:28.601 [DEBUG] [Thread-216332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:33:28.601 [DEBUG] [Thread-216332] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:33:28.601 [DEBUG] [Thread-216332] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:33:28.601 [DEBUG] [Thread-216332] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:33:28.601 [DEBUG] [Thread-216332] [transport.py] [_log()] Compression: none
2026-02-16T03:33:28.601 [DEBUG] [Thread-216332] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:33:28.619 [DEBUG] [Thread-216332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:33:28.619 [DEBUG] [Thread-216332] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:33:28.620 [DEBUG] [Thread-216332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:33:28.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:33:28.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:33:28.622 [DEBUG] [Thread-216332] [transport.py] [_log()] userauth is OK
2026-02-16T03:33:28.622 [DEBUG] [Thread-216332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:33:28.622 [DEBUG] [Thread-216332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:33:28.622 [DEBUG] [Thread-216332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:33:28.623 [DEBUG] [Thread-216332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:33:28.646 [INFO] [Thread-216332] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:33:28.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:33:29.293 [DEBUG] [Thread-216332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:33:29.293 [DEBUG] [Thread-216332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:33:29.293 [DEBUG] [Thread-216332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:33:29.334 [DEBUG] [Thread-216332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:33:29.335 [DEBUG] [Thread-216332] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:33:29.338 [DEBUG] [Thread-216332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:33:29.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:33:29.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:33:29.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:33:29.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:33:29.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:33:29.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:33:29.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:33:29.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:33:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:33:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.064334 -999.00  +14.60  14.75     51   +4.60 1 1 1 1 1     0    0 10.28 50.50 ZNESW 13.3 14.8 107.8 16.2 14.5 -21.6 14.3 -20.8 14.0 -19.5 14.4 -20.9
2026-02-16T03:33:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:33:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:33:29.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.064334
2026-02-16T03:33:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:33:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:33:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:33:29.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:33:29.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:32:52', tmtdew=10.82, humidity=48.33, cloud=0.0, wind=14.72, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:32:52', seeing=2.21, atlas_timestamp='2026-02-16T01:32:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:29:00')
2026-02-16T03:33:29.363 [DEBUG] [Thread-216332] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:33:29.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:33:29.463 [DEBUG] [Thread-216335] [transport.py] [_log()] starting thread (client mode): 0xa2dbfe50
2026-02-16T03:33:29.463 [DEBUG] [Thread-216335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:33:29.477 [DEBUG] [Thread-216335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:33:29.478 [INFO] [Thread-216335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:33:29.485 [DEBUG] [Thread-216335] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:33:29.485 [DEBUG] [Thread-216335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:33:29.486 [DEBUG] [Thread-216335] [transport.py] [_log()] client lang: <none>
2026-02-16T03:33:29.487 [DEBUG] [Thread-216335] [transport.py] [_log()] server lang: <none>
2026-02-16T03:33:29.487 [DEBUG] [Thread-216335] [transport.py] [_log()] kex follows: False
2026-02-16T03:33:29.487 [DEBUG] [Thread-216335] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:33:29.487 [DEBUG] [Thread-216335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:33:29.488 [DEBUG] [Thread-216335] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:33:29.488 [DEBUG] [Thread-216335] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:33:29.488 [DEBUG] [Thread-216335] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:33:29.488 [DEBUG] [Thread-216335] [transport.py] [_log()] Compression: none
2026-02-16T03:33:29.488 [DEBUG] [Thread-216335] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:33:29.549 [DEBUG] [Thread-216335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:33:29.550 [DEBUG] [Thread-216335] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:33:29.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:33:29.551 [DEBUG] [Thread-216335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:33:29.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:33:29.605 [DEBUG] [Thread-216335] [transport.py] [_log()] userauth is OK
2026-02-16T03:33:29.605 [DEBUG] [Thread-216335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:33:29.605 [DEBUG] [Thread-216335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:33:29.605 [DEBUG] [Thread-216335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:33:29.606 [DEBUG] [Thread-216335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:33:29.623 [INFO] [Thread-216335] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:33:29.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:33:29.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:33:30.461 [DEBUG] [Thread-216335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:33:30.462 [DEBUG] [Thread-216335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:33:30.509 [DEBUG] [Thread-216335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:33:30.510 [DEBUG] [Thread-216335] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:33:30.519 [DEBUG] [Thread-216335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:33:30.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:33:30.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:33: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') -> 00000000
2026-02-16T03:33:30.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:33:30.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:33:30.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:33:30.555 [DEBUG] [Thread-216335] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:33:30.936 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:34.664 [DEBUG] [Thread-216337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:49.718 [DEBUG] [Thread-216338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:49.782 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:50.796 [DEBUG] [Thread-216339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:54.055 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:33:54.056 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:00.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:34:00.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:34:00.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:34:02.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 33, 27), 11.05, 47.61, 0.0, 15.32, 14.28, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:34:02.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:33:27
2026-02-16T03:34:03.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:34:03.194 [DEBUG] [Thread-216340] [transport.py] [_log()] starting thread (client mode): 0xa2dbeaa0
2026-02-16T03:34:03.194 [DEBUG] [Thread-216340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:34:03.214 [DEBUG] [Thread-216340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:34:03.214 [INFO] [Thread-216340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] client lang: <none>
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] server lang: <none>
2026-02-16T03:34:03.218 [DEBUG] [Thread-216340] [transport.py] [_log()] kex follows: False
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] Compression: none
2026-02-16T03:34:03.219 [DEBUG] [Thread-216340] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:34:03.241 [DEBUG] [Thread-216340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:34:03.241 [DEBUG] [Thread-216340] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:34:03.242 [DEBUG] [Thread-216340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:34:03.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:34:03.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:34:03.244 [DEBUG] [Thread-216340] [transport.py] [_log()] userauth is OK
2026-02-16T03:34:03.244 [DEBUG] [Thread-216340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:34:03.244 [DEBUG] [Thread-216340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:34:03.245 [DEBUG] [Thread-216340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:34:03.245 [DEBUG] [Thread-216340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:34:03.268 [INFO] [Thread-216340] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:34:03.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:34:04.068 [DEBUG] [Thread-216340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:34:04.069 [DEBUG] [Thread-216340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:34:04.069 [DEBUG] [Thread-216340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:34:04.109 [DEBUG] [Thread-216340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:34:04.109 [DEBUG] [Thread-216340] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:34:04.111 [DEBUG] [Thread-216340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:34:04.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:34:04.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:34:04.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:34:04.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:34:04.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:34:04.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:34:04.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.064682 -999.00  +14.60   9.35     52   +4.80 1 1 1 1 1     0    0 10.45 56.57 ZNESW 10.4 9.3 112.6 13.5 14.5 -22.1 14.4 -20.9 14.1 -19.6 14.3 -21.0
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.064682
2026-02-16T03:34:04.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:34:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:34:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:34:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:34:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:34:04.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:33:27', tmtdew=11.05, humidity=47.61, cloud=0.0, wind=15.32, temperature=14.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:33:28', seeing=2.21, atlas_timestamp='2026-02-16T01:33:08.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:33:00')
2026-02-16T03:34:04.130 [DEBUG] [Thread-216340] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:34:04.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:34:04.215 [DEBUG] [Thread-216343] [transport.py] [_log()] starting thread (client mode): 0xa2dbd060
2026-02-16T03:34:04.215 [DEBUG] [Thread-216343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:34:04.230 [DEBUG] [Thread-216343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:34:04.231 [INFO] [Thread-216343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:04.238 [DEBUG] [Thread-216343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] client lang: <none>
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] server lang: <none>
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] kex follows: False
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] Compression: none
2026-02-16T03:34:04.239 [DEBUG] [Thread-216343] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:34:04.298 [DEBUG] [Thread-216343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:34:04.298 [DEBUG] [Thread-216343] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:34:04.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:34:04.299 [DEBUG] [Thread-216343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:34:04.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:34:04.354 [DEBUG] [Thread-216343] [transport.py] [_log()] userauth is OK
2026-02-16T03:34:04.354 [DEBUG] [Thread-216343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:34:04.354 [DEBUG] [Thread-216343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:34:04.354 [DEBUG] [Thread-216343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:34:04.354 [DEBUG] [Thread-216343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:34:04.373 [INFO] [Thread-216343] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:34:04.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:34:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:34:04.753 [DEBUG] [Thread-216345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:05.224 [DEBUG] [Thread-216343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:34:05.224 [DEBUG] [Thread-216343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:34:05.263 [DEBUG] [Thread-216343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:34:05.264 [DEBUG] [Thread-216343] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:34:05.273 [DEBUG] [Thread-216343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:34:05.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:34:05.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:34:05.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:34:05.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:34:05.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:34:05.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:34:05.310 [DEBUG] [Thread-216343] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:34:08.453 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:19.808 [DEBUG] [Thread-216346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:27.099 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:34.839 [DEBUG] [Thread-216347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:35.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:34:35.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:34:35.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:34:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 34, 3), 11.21, 47.12, 0.0, 15.09, 14.4, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:34:37.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:34:03
2026-02-16T03:34:37.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:34:37.721 [DEBUG] [Thread-216348] [transport.py] [_log()] starting thread (client mode): 0xa2dbfc70
2026-02-16T03:34:37.721 [DEBUG] [Thread-216348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:34:37.742 [DEBUG] [Thread-216348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:34:37.742 [INFO] [Thread-216348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:34:37.745 [DEBUG] [Thread-216348] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] client lang: <none>
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] server lang: <none>
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] kex follows: False
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] Compression: none
2026-02-16T03:34:37.746 [DEBUG] [Thread-216348] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:34:37.764 [DEBUG] [Thread-216348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:34:37.765 [DEBUG] [Thread-216348] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:34:37.765 [DEBUG] [Thread-216348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:34:37.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:34:37.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:34:37.767 [DEBUG] [Thread-216348] [transport.py] [_log()] userauth is OK
2026-02-16T03:34:37.767 [DEBUG] [Thread-216348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:34:37.768 [DEBUG] [Thread-216348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:34:37.768 [DEBUG] [Thread-216348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:34:37.768 [DEBUG] [Thread-216348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:34:37.792 [INFO] [Thread-216348] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:34:37.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:34:38.428 [DEBUG] [Thread-216348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:34:38.429 [DEBUG] [Thread-216348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:34:38.429 [DEBUG] [Thread-216348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:34:38.470 [DEBUG] [Thread-216348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:34:38.470 [DEBUG] [Thread-216348] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:34:38.473 [DEBUG] [Thread-216348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:34:38.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:34:38.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:34:38.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:34:38.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:34:38.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:34:38.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:34:38.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:34:38.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.065376 -999.00  +14.60  11.10     50   +4.50 1 1 1 1 1     0    0 10.91 59.65 ZNESW 11.3 11.1 107.4 12.2 14.5 -22.0 14.4 -20.9 14.1 -19.7 14.3 -20.9
2026-02-16T03:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.065376
2026-02-16T03:34:38.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:34:38.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:34:38.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:34:38.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:34:38.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:34:38.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:34:03', tmtdew=11.21, humidity=47.12, cloud=0.0, wind=15.09, temperature=14.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:34:03', seeing=1.86, atlas_timestamp='2026-02-16T01:34:08.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:33:00')
2026-02-16T03:34:38.500 [DEBUG] [Thread-216348] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:34:38.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:34:38.595 [DEBUG] [Thread-216351] [transport.py] [_log()] starting thread (client mode): 0xa2dbf760
2026-02-16T03:34:38.595 [DEBUG] [Thread-216351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:34:38.610 [DEBUG] [Thread-216351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:34:38.611 [INFO] [Thread-216351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:34:38.618 [DEBUG] [Thread-216351] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] client lang: <none>
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] server lang: <none>
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] kex follows: False
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:34:38.619 [DEBUG] [Thread-216351] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:34:38.620 [DEBUG] [Thread-216351] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:34:38.620 [DEBUG] [Thread-216351] [transport.py] [_log()] Compression: none
2026-02-16T03:34:38.620 [DEBUG] [Thread-216351] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:34:38.677 [DEBUG] [Thread-216351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:34:38.678 [DEBUG] [Thread-216351] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:34:38.678 [DEBUG] [Thread-216351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:34:38.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:34:38.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:34:38.734 [DEBUG] [Thread-216351] [transport.py] [_log()] userauth is OK
2026-02-16T03:34:38.734 [DEBUG] [Thread-216351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:34:38.734 [DEBUG] [Thread-216351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:34:38.734 [DEBUG] [Thread-216351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:34:38.735 [DEBUG] [Thread-216351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:34:38.759 [INFO] [Thread-216351] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:34:38.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:34:38.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:34:39.601 [DEBUG] [Thread-216351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:34:39.601 [DEBUG] [Thread-216351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:34:39.649 [DEBUG] [Thread-216351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:34:39.650 [DEBUG] [Thread-216351] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:34:39.659 [DEBUG] [Thread-216351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:34:39.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:34:39.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:34:39.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:34:39.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:34:39.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:34:39.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:34:39.696 [DEBUG] [Thread-216351] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:34:45.844 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:49.873 [DEBUG] [Thread-216353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:50.863 [DEBUG] [Thread-216354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:54.256 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:34:54.257 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:04.511 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:04.919 [DEBUG] [Thread-216355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:09.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:35:09.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:35:09.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:35:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 34, 38), 12.61, 42.58, 0.0, 13.62, 15.06, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:35:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:34:38
2026-02-16T03:35:11.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:35:12.103 [DEBUG] [Thread-216356] [transport.py] [_log()] starting thread (client mode): 0xa2dbc3a0
2026-02-16T03:35:12.103 [DEBUG] [Thread-216356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:35:12.123 [DEBUG] [Thread-216356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:35:12.124 [INFO] [Thread-216356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:35:12.126 [DEBUG] [Thread-216356] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] client lang: <none>
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] server lang: <none>
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] kex follows: False
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:35:12.127 [DEBUG] [Thread-216356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:35:12.128 [DEBUG] [Thread-216356] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:35:12.128 [DEBUG] [Thread-216356] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:35:12.128 [DEBUG] [Thread-216356] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:35:12.128 [DEBUG] [Thread-216356] [transport.py] [_log()] Compression: none
2026-02-16T03:35:12.128 [DEBUG] [Thread-216356] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:35:12.144 [DEBUG] [Thread-216356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:35:12.144 [DEBUG] [Thread-216356] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:35:12.144 [DEBUG] [Thread-216356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:35:12.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:35:12.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:35:12.188 [DEBUG] [Thread-216356] [transport.py] [_log()] userauth is OK
2026-02-16T03:35:12.188 [DEBUG] [Thread-216356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:35:12.188 [DEBUG] [Thread-216356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:35:12.188 [DEBUG] [Thread-216356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:35:12.188 [DEBUG] [Thread-216356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:35:12.204 [INFO] [Thread-216356] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:35:12.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:35:19.960 [DEBUG] [Thread-216358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:20.325 [DEBUG] [Thread-216356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:35:20.326 [DEBUG] [Thread-216356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:35:20.326 [DEBUG] [Thread-216356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:35:20.366 [DEBUG] [Thread-216356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:35:20.366 [DEBUG] [Thread-216356] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:35:20.370 [DEBUG] [Thread-216356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:35:20.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:35:20.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:35:20.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:35:20.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:35:20.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:35:20.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:35:20.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:35:20.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:35:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:35:20.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.065723 -999.00  +14.70  11.71     49   +4.20 1 1 1 1 1     0    0 10.65 59.14 ZNESW 11.6 11.7 106.4 14.1 14.5 -21.7 14.4 -20.8 14.1 -19.7 14.4 -20.6
2026-02-16T03:35:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:35:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:35:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.065723
2026-02-16T03:35:20.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:35:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:35:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:35:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:35:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:35:20.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:34:38', tmtdew=12.61, humidity=42.58, cloud=0.0, wind=13.62, temperature=15.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:34:39', seeing=1.7, atlas_timestamp='2026-02-16T01:34:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:33:00')
2026-02-16T03:35:20.399 [DEBUG] [Thread-216356] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:35:20.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:35:20.492 [DEBUG] [Thread-216360] [transport.py] [_log()] starting thread (client mode): 0xa2dbf280
2026-02-16T03:35:20.492 [DEBUG] [Thread-216360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:35:20.507 [DEBUG] [Thread-216360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:35:20.507 [INFO] [Thread-216360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] client lang: <none>
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] server lang: <none>
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] kex follows: False
2026-02-16T03:35:20.515 [DEBUG] [Thread-216360] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:35:20.516 [DEBUG] [Thread-216360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:35:20.516 [DEBUG] [Thread-216360] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:35:20.516 [DEBUG] [Thread-216360] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:35:20.516 [DEBUG] [Thread-216360] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:35:20.516 [DEBUG] [Thread-216360] [transport.py] [_log()] Compression: none
2026-02-16T03:35:20.516 [DEBUG] [Thread-216360] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:35:20.574 [DEBUG] [Thread-216360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:35:20.574 [DEBUG] [Thread-216360] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:35:20.575 [DEBUG] [Thread-216360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:35:20.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:35:20.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:35:20.630 [DEBUG] [Thread-216360] [transport.py] [_log()] userauth is OK
2026-02-16T03:35:20.631 [DEBUG] [Thread-216360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:35:20.631 [DEBUG] [Thread-216360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:35:20.631 [DEBUG] [Thread-216360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:35:20.631 [DEBUG] [Thread-216360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:35:20.649 [INFO] [Thread-216360] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:35:20.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:35:20.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:35:21.468 [DEBUG] [Thread-216360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:35:21.468 [DEBUG] [Thread-216360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:35:21.515 [DEBUG] [Thread-216360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:35:21.515 [DEBUG] [Thread-216360] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:35:21.524 [DEBUG] [Thread-216360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:35:21.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:35:21.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:35:21.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:35:21.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:35:21.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:35:21.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:35:21.559 [DEBUG] [Thread-216360] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:35:23.161 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:34.996 [DEBUG] [Thread-216362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:41.897 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:50.047 [DEBUG] [Thread-216363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:50.933 [DEBUG] [Thread-216364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:51.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:35:51.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:35:51.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:35:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 35, 13), 13.21, 41.24, 0.0, 16.92, 15.58, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:35:53.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:35:13
2026-02-16T03:35:53.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:35:53.936 [DEBUG] [Thread-216365] [transport.py] [_log()] starting thread (client mode): 0xa2dbd720
2026-02-16T03:35:53.936 [DEBUG] [Thread-216365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:35:53.957 [DEBUG] [Thread-216365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:35:53.957 [INFO] [Thread-216365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] client lang: <none>
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] server lang: <none>
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] kex follows: False
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] Compression: none
2026-02-16T03:35:53.961 [DEBUG] [Thread-216365] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:35:53.975 [DEBUG] [Thread-216365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:35:53.975 [DEBUG] [Thread-216365] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:35:53.975 [DEBUG] [Thread-216365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:35:53.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:35:53.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:35:53.976 [DEBUG] [Thread-216365] [transport.py] [_log()] userauth is OK
2026-02-16T03:35:53.976 [DEBUG] [Thread-216365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:35:53.976 [DEBUG] [Thread-216365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:35:53.976 [DEBUG] [Thread-216365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:35:53.976 [DEBUG] [Thread-216365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:35:54.002 [INFO] [Thread-216365] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:35:54.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:35:54.459 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:54.460 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:35:54.649 [DEBUG] [Thread-216365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:35:54.650 [DEBUG] [Thread-216365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:35:54.650 [DEBUG] [Thread-216365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:35:54.690 [DEBUG] [Thread-216365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:35:54.691 [DEBUG] [Thread-216365] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:35:54.694 [DEBUG] [Thread-216365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:35:54.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:35:54.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:35:54.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:35:54.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:35:54.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:35:54.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:35:54.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:35:54.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:35:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:35:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.066070 -999.00  +15.00  12.36     48   +4.10 1 1 1 1 1     0    0 10.74 56.73 ZNESW 11.5 12.4 106.6 14.4 14.6 -21.7 14.4 -20.9 14.1 -19.4 14.4 -20.8
2026-02-16T03:35:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:35:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:35:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.066070
2026-02-16T03:35:54.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:35:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:35:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:35:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:35:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:35:54.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:35:13', tmtdew=13.21, humidity=41.24, cloud=0.0, wind=16.92, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:35:49', seeing=1.61, atlas_timestamp='2026-02-16T01:35:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:33:00')
2026-02-16T03:35:54.719 [DEBUG] [Thread-216365] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:35:54.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:35:54.814 [DEBUG] [Thread-216368] [transport.py] [_log()] starting thread (client mode): 0xa2dbe4a0
2026-02-16T03:35:54.814 [DEBUG] [Thread-216368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:35:54.829 [DEBUG] [Thread-216368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:35:54.829 [INFO] [Thread-216368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:35:54.837 [DEBUG] [Thread-216368] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] client lang: <none>
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] server lang: <none>
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] kex follows: False
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:35:54.838 [DEBUG] [Thread-216368] [transport.py] [_log()] Compression: none
2026-02-16T03:35:54.839 [DEBUG] [Thread-216368] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:35:54.894 [DEBUG] [Thread-216368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:35:54.895 [DEBUG] [Thread-216368] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:35:54.895 [DEBUG] [Thread-216368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:35:54.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:35:54.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:35:54.951 [DEBUG] [Thread-216368] [transport.py] [_log()] userauth is OK
2026-02-16T03:35:54.951 [DEBUG] [Thread-216368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:35:54.951 [DEBUG] [Thread-216368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:35:54.951 [DEBUG] [Thread-216368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:35:54.951 [DEBUG] [Thread-216368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:35:54.970 [INFO] [Thread-216368] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:35:54.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:35:54.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:35:55.778 [DEBUG] [Thread-216368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:35:55.778 [DEBUG] [Thread-216368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:35:55.825 [DEBUG] [Thread-216368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:35:55.826 [DEBUG] [Thread-216368] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:35:55.835 [DEBUG] [Thread-216368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:35:55.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:35:55.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:35:55.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:35:55.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:35:55.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:35:55.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:35:55.872 [DEBUG] [Thread-216368] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:36:00.615 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:05.083 [DEBUG] [Thread-216370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:19.288 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:20.134 [DEBUG] [Thread-216371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:25.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:36:25.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:36:25.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:36:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 35, 49), 13.68, 39.56, 0.0, 15.67, 15.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:36:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:35:49
2026-02-16T03:36:28.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:36:29.007 [DEBUG] [Thread-216372] [transport.py] [_log()] starting thread (client mode): 0xa57c0520
2026-02-16T03:36:29.007 [DEBUG] [Thread-216372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:36:29.026 [DEBUG] [Thread-216372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:36:29.027 [INFO] [Thread-216372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:36:29.030 [DEBUG] [Thread-216372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] client lang: <none>
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] server lang: <none>
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] kex follows: False
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] Compression: none
2026-02-16T03:36:29.031 [DEBUG] [Thread-216372] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:36:29.050 [DEBUG] [Thread-216372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:36:29.050 [DEBUG] [Thread-216372] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:36:29.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:36:29.051 [DEBUG] [Thread-216372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:36:29.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:36:29.053 [DEBUG] [Thread-216372] [transport.py] [_log()] userauth is OK
2026-02-16T03:36:29.054 [DEBUG] [Thread-216372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:36:29.054 [DEBUG] [Thread-216372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:36:29.054 [DEBUG] [Thread-216372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:36:29.054 [DEBUG] [Thread-216372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:36:29.090 [INFO] [Thread-216372] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:36:29.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:36:29.723 [DEBUG] [Thread-216372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:36:29.723 [DEBUG] [Thread-216372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:36:29.723 [DEBUG] [Thread-216372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:36:29.763 [DEBUG] [Thread-216372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:36:29.763 [DEBUG] [Thread-216372] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:36:29.767 [DEBUG] [Thread-216372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:36:29.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:36:29.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:36:29.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:36:29.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:36:29.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:36:29.790 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:36:29.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:36:29.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:36:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:36:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.066418 -999.00  +15.10  12.67     47   +4.00 1 1 1 1 1     0    0 10.61 60.29 ZNESW 13.0 12.7 107.6 14.3 14.6 -21.9 14.5 -20.9 14.1 -19.7 14.4 -20.9
2026-02-16T03:36:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:36:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:36:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.066418
2026-02-16T03:36:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:36:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:36:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:36:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:36:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:36:29.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:35:49', tmtdew=13.68, humidity=39.56, cloud=0.0, wind=15.67, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:36:24', seeing=1.77, atlas_timestamp='2026-02-16T01:35:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[-0.016250000000001208, -0.0012499999999988631, -0.014749999999999375, -0.03550000000000075, -0.048500000000000654, 0.015250000000001762, -0.027500000000001634, 0.009250000000001535, -0.0035000000000007248, -0.0495000000000001, -0.01875000000000071, -0.10299999999999976, 0.016500000000000625, 0.04974999999999952, 0.036999999999999034, 0.0030000000000001137, -0.01624999999999943, -0.04800000000000004, -0.005000000000000782, -0.03725000000000023, -0.010000000000001563, 0.024749999999997385, 0.0022500000000000853, 0.004749999999999588, 0.030499999999998195, -0.03449999999999953, 0.007749999999999702, 0.0005000000000006111, 0.048500000000000654, 0.07350000000000101, 0.07600000000000051, 0.031000000000000583, -0.011250000000000426], zp_timestamp='2026-02-16T01:33:00')
2026-02-16T03:36:29.793 [DEBUG] [Thread-216372] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:36:29.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:36:29.888 [DEBUG] [Thread-216375] [transport.py] [_log()] starting thread (client mode): 0xa2dbce50
2026-02-16T03:36:29.888 [DEBUG] [Thread-216375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:36:29.904 [DEBUG] [Thread-216375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:36:29.904 [INFO] [Thread-216375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:36:29.911 [DEBUG] [Thread-216375] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:36:29.911 [DEBUG] [Thread-216375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:36:29.911 [DEBUG] [Thread-216375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] client lang: <none>
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] server lang: <none>
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] kex follows: False
2026-02-16T03:36:29.912 [DEBUG] [Thread-216375] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:36:29.913 [DEBUG] [Thread-216375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:36:29.913 [DEBUG] [Thread-216375] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:36:29.913 [DEBUG] [Thread-216375] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:36:29.913 [DEBUG] [Thread-216375] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:36:29.913 [DEBUG] [Thread-216375] [transport.py] [_log()] Compression: none
2026-02-16T03:36:29.913 [DEBUG] [Thread-216375] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:36:29.971 [DEBUG] [Thread-216375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:36:29.972 [DEBUG] [Thread-216375] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:36:29.972 [DEBUG] [Thread-216375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:36:29.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:36:29.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:36:30.027 [DEBUG] [Thread-216375] [transport.py] [_log()] userauth is OK
2026-02-16T03:36:30.028 [DEBUG] [Thread-216375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:36:30.028 [DEBUG] [Thread-216375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:36:30.028 [DEBUG] [Thread-216375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:36:30.028 [DEBUG] [Thread-216375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:36:30.047 [INFO] [Thread-216375] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:36:30.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:36:30.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:36:30.890 [DEBUG] [Thread-216375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:36:30.890 [DEBUG] [Thread-216375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:36:30.938 [DEBUG] [Thread-216375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:36:30.939 [DEBUG] [Thread-216375] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:36:30.948 [DEBUG] [Thread-216375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:36:30.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:36:30.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:36:30.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:36:30.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:36:30.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:36:30.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:36:30.985 [DEBUG] [Thread-216375] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:36:35.166 [DEBUG] [Thread-216377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:37.946 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:50.213 [DEBUG] [Thread-216378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:50.990 [DEBUG] [Thread-216379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:54.665 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:54.666 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:36:56.645 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:01.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:37:01.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:37:01.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:37:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 36, 24), 13.73, 39.41, 0.0, 15.93, 15.86, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:37:03.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:36:24
2026-02-16T03:37:03.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:37:03.716 [DEBUG] [Thread-216380] [transport.py] [_log()] starting thread (client mode): 0xa2dbf4c0
2026-02-16T03:37:03.716 [DEBUG] [Thread-216380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:37:03.737 [DEBUG] [Thread-216380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:37:03.737 [INFO] [Thread-216380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] client lang: <none>
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] server lang: <none>
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] kex follows: False
2026-02-16T03:37:03.740 [DEBUG] [Thread-216380] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:37:03.741 [DEBUG] [Thread-216380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:37:03.741 [DEBUG] [Thread-216380] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:37:03.741 [DEBUG] [Thread-216380] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:37:03.741 [DEBUG] [Thread-216380] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:37:03.741 [DEBUG] [Thread-216380] [transport.py] [_log()] Compression: none
2026-02-16T03:37:03.741 [DEBUG] [Thread-216380] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:37:03.756 [DEBUG] [Thread-216380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:37:03.756 [DEBUG] [Thread-216380] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:37:03.756 [DEBUG] [Thread-216380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:37:03.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:37:03.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:37:03.757 [DEBUG] [Thread-216380] [transport.py] [_log()] userauth is OK
2026-02-16T03:37:03.757 [DEBUG] [Thread-216380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:37:03.757 [DEBUG] [Thread-216380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:37:03.757 [DEBUG] [Thread-216380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:37:03.757 [DEBUG] [Thread-216380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:37:03.773 [INFO] [Thread-216380] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:37:03.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:37:04.418 [DEBUG] [Thread-216380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:37:04.418 [DEBUG] [Thread-216380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:37:04.419 [DEBUG] [Thread-216380] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:37:04.459 [DEBUG] [Thread-216380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:37:04.460 [DEBUG] [Thread-216380] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:37:04.463 [DEBUG] [Thread-216380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:37:04.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:37:04.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:37:04.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:37:04.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:37:04.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:37:04.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:37:04.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:37:04.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:37:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:37:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.066765 -999.00  +15.10  11.84     47   +4.00 1 1 1 1 1     0    0 11.18 69.63 ZNESW 10.8 11.8 108.8 14.5 14.7 -21.4 14.5 -21.0 14.2 -19.7 14.5 -20.8
2026-02-16T03:37:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:37:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:37:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.066765
2026-02-16T03:37:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:37:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:37:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:37:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:37:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:37:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:36:24', tmtdew=13.73, humidity=39.41, cloud=0.0, wind=15.93, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:37:00', seeing=1.77, atlas_timestamp='2026-02-16T01:36:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:35:00')
2026-02-16T03:37:04.492 [DEBUG] [Thread-216380] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:37:04.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:37:04.588 [DEBUG] [Thread-216383] [transport.py] [_log()] starting thread (client mode): 0xa2dbe890
2026-02-16T03:37:04.588 [DEBUG] [Thread-216383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:37:04.602 [DEBUG] [Thread-216383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:37:04.602 [INFO] [Thread-216383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] client lang: <none>
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] server lang: <none>
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] kex follows: False
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:37:04.610 [DEBUG] [Thread-216383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:37:04.611 [DEBUG] [Thread-216383] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:37:04.611 [DEBUG] [Thread-216383] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:37:04.611 [DEBUG] [Thread-216383] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:37:04.611 [DEBUG] [Thread-216383] [transport.py] [_log()] Compression: none
2026-02-16T03:37:04.611 [DEBUG] [Thread-216383] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:37:04.668 [DEBUG] [Thread-216383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:37:04.669 [DEBUG] [Thread-216383] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:37:04.669 [DEBUG] [Thread-216383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:37:04.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:37:04.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:37:04.724 [DEBUG] [Thread-216383] [transport.py] [_log()] userauth is OK
2026-02-16T03:37:04.724 [DEBUG] [Thread-216383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:37:04.724 [DEBUG] [Thread-216383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:37:04.724 [DEBUG] [Thread-216383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:37:04.725 [DEBUG] [Thread-216383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:37:04.744 [INFO] [Thread-216383] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:37:04.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:37:04.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:37:05.247 [DEBUG] [Thread-216385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:05.581 [DEBUG] [Thread-216383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:37:05.581 [DEBUG] [Thread-216383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:37:05.630 [DEBUG] [Thread-216383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:37:05.630 [DEBUG] [Thread-216383] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:37:05.639 [DEBUG] [Thread-216383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:37:05.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:37:05.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:37:05.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:37:05.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:37:05.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:37:05.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:37:05.676 [DEBUG] [Thread-216383] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:37:15.306 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:20.313 [DEBUG] [Thread-216386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:33.976 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:35.357 [DEBUG] [Thread-216387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:35.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:37:35.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:37:35.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:37:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 36, 24), 13.48, 40.41, 0.0, 15.93, 15.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:37:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:36:24
2026-02-16T03:37:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:37:38.264 [DEBUG] [Thread-216388] [transport.py] [_log()] starting thread (client mode): 0xa57c2470
2026-02-16T03:37:38.264 [DEBUG] [Thread-216388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:37:38.285 [DEBUG] [Thread-216388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:37:38.285 [INFO] [Thread-216388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:37:38.288 [DEBUG] [Thread-216388] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:37:38.288 [DEBUG] [Thread-216388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:37:38.288 [DEBUG] [Thread-216388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] client lang: <none>
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] server lang: <none>
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] kex follows: False
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] Compression: none
2026-02-16T03:37:38.289 [DEBUG] [Thread-216388] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:37:38.305 [DEBUG] [Thread-216388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:37:38.305 [DEBUG] [Thread-216388] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:37:38.306 [DEBUG] [Thread-216388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:37:38.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:37:38.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:37:38.308 [DEBUG] [Thread-216388] [transport.py] [_log()] userauth is OK
2026-02-16T03:37:38.308 [DEBUG] [Thread-216388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:37:38.308 [DEBUG] [Thread-216388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:37:38.308 [DEBUG] [Thread-216388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:37:38.308 [DEBUG] [Thread-216388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:37:38.329 [INFO] [Thread-216388] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:37:38.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:37:38.925 [DEBUG] [Thread-216388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:37:38.926 [DEBUG] [Thread-216388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:37:38.926 [DEBUG] [Thread-216388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:37:38.966 [DEBUG] [Thread-216388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:37:38.967 [DEBUG] [Thread-216388] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:37:38.970 [DEBUG] [Thread-216388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:37:38.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:37:38.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:37:38.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:37:38.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:37:38.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:37:38.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:37:38.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:37:38.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:37:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:37:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.067112 -999.00  +14.90   8.88     48   +4.20 1 1 1 1 1     0    0 11.39 74.42 ZNESW 10.7 8.9 117.0 13.2 14.7 -22.1 14.5 -21.1 14.2 -19.6 14.5 -21.1
2026-02-16T03:37:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:37:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:37:38.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.067112
2026-02-16T03:37:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:37:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:37:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:37:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:37:38.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:37:38.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:36:24', tmtdew=13.48, humidity=40.41, cloud=0.0, wind=15.93, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:37:00', seeing=1.77, atlas_timestamp='2026-02-16T01:36:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:35:00')
2026-02-16T03:37:38.998 [DEBUG] [Thread-216388] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:37:39.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:37:39.096 [DEBUG] [Thread-216391] [transport.py] [_log()] starting thread (client mode): 0xa57c0160
2026-02-16T03:37:39.096 [DEBUG] [Thread-216391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:37:39.111 [DEBUG] [Thread-216391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:37:39.111 [INFO] [Thread-216391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] client lang: <none>
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] server lang: <none>
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] kex follows: False
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:37:39.119 [DEBUG] [Thread-216391] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:37:39.120 [DEBUG] [Thread-216391] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:37:39.120 [DEBUG] [Thread-216391] [transport.py] [_log()] Compression: none
2026-02-16T03:37:39.120 [DEBUG] [Thread-216391] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:37:39.176 [DEBUG] [Thread-216391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:37:39.176 [DEBUG] [Thread-216391] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:37:39.177 [DEBUG] [Thread-216391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:37:39.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:37:39.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:37:39.237 [DEBUG] [Thread-216391] [transport.py] [_log()] userauth is OK
2026-02-16T03:37:39.237 [DEBUG] [Thread-216391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:37:39.237 [DEBUG] [Thread-216391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:37:39.238 [DEBUG] [Thread-216391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:37:39.238 [DEBUG] [Thread-216391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:37:39.262 [INFO] [Thread-216391] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:37:39.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:37:39.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:37:40.050 [DEBUG] [Thread-216391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:37:40.050 [DEBUG] [Thread-216391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:37:40.098 [DEBUG] [Thread-216391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:37:40.099 [DEBUG] [Thread-216391] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:37:40.108 [DEBUG] [Thread-216391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:37:40.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:37:40.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:37:40.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:37:40.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:37:40.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:37:40.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:37:40.145 [DEBUG] [Thread-216391] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:37:50.393 [DEBUG] [Thread-216393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:51.069 [DEBUG] [Thread-216394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:52.916 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:54.879 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:37:54.880 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:05.443 [DEBUG] [Thread-216395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:38:10.148 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:38:10.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:38:11.872 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:12.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 37, 35), 13.71, 39.53, 0.0, 16.27, 15.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:38:12.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:37:35
2026-02-16T03:38:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:38:13.231 [DEBUG] [Thread-216396] [transport.py] [_log()] starting thread (client mode): 0xa2dbf760
2026-02-16T03:38:13.232 [DEBUG] [Thread-216396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:38:13.251 [DEBUG] [Thread-216396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:38:13.251 [INFO] [Thread-216396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:38:13.254 [DEBUG] [Thread-216396] [transport.py] [_log()] client lang: <none>
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] server lang: <none>
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] kex follows: False
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] Compression: none
2026-02-16T03:38:13.255 [DEBUG] [Thread-216396] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:38:13.271 [DEBUG] [Thread-216396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:38:13.271 [DEBUG] [Thread-216396] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:38:13.272 [DEBUG] [Thread-216396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:38:13.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:38:13.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:38:13.274 [DEBUG] [Thread-216396] [transport.py] [_log()] userauth is OK
2026-02-16T03:38:13.274 [DEBUG] [Thread-216396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:38:13.275 [DEBUG] [Thread-216396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:38:13.275 [DEBUG] [Thread-216396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:38:13.275 [DEBUG] [Thread-216396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:38:13.294 [INFO] [Thread-216396] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:38:13.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:38:14.074 [DEBUG] [Thread-216396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:38:14.075 [DEBUG] [Thread-216396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:38:14.075 [DEBUG] [Thread-216396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:38:14.116 [DEBUG] [Thread-216396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:38:14.116 [DEBUG] [Thread-216396] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:38:14.118 [DEBUG] [Thread-216396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:38:14.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:38:14.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:38:14.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:38:14.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:38:14.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:38:14.133 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:38:14.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:38:14.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:38:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:38:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.067807 -999.00  +14.90  10.96     48   +4.10 1 1 1 1 1     0    0 11.63 83.38 ZNESW 12.6 11.0 109.4 13.9 14.7 -21.6 14.5 -20.8 14.2 -19.6 14.5 -20.4
2026-02-16T03:38:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:38:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:38:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.067807
2026-02-16T03:38:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:38:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:38:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:38:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:38:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:38:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:37:35', tmtdew=13.71, humidity=39.53, cloud=0.0, wind=16.27, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:37:36', seeing=1.6, atlas_timestamp='2026-02-16T01:37:38.525', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:35:00')
2026-02-16T03:38:14.136 [DEBUG] [Thread-216396] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:38:14.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:38:14.231 [DEBUG] [Thread-216399] [transport.py] [_log()] starting thread (client mode): 0xa2dbf280
2026-02-16T03:38:14.231 [DEBUG] [Thread-216399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:38:14.246 [DEBUG] [Thread-216399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:38:14.246 [INFO] [Thread-216399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:38:14.253 [DEBUG] [Thread-216399] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] client lang: <none>
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] server lang: <none>
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] kex follows: False
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] Compression: none
2026-02-16T03:38:14.254 [DEBUG] [Thread-216399] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:38:14.313 [DEBUG] [Thread-216399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:38:14.313 [DEBUG] [Thread-216399] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:38:14.314 [DEBUG] [Thread-216399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:38:14.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:38:14.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:38:14.369 [DEBUG] [Thread-216399] [transport.py] [_log()] userauth is OK
2026-02-16T03:38:14.369 [DEBUG] [Thread-216399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:38:14.369 [DEBUG] [Thread-216399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:38:14.369 [DEBUG] [Thread-216399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:38:14.369 [DEBUG] [Thread-216399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:38:14.387 [INFO] [Thread-216399] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:38:14.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:38:14.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:38:15.182 [DEBUG] [Thread-216399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:38:15.183 [DEBUG] [Thread-216399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:38:15.231 [DEBUG] [Thread-216399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:38:15.231 [DEBUG] [Thread-216399] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:38:15.240 [DEBUG] [Thread-216399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:38:15.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:38:15.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:38: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
2026-02-16T03:38:15.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:38:15.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:38:15.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:38:15.275 [DEBUG] [Thread-216399] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:38:20.482 [DEBUG] [Thread-216401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:30.618 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:35.533 [DEBUG] [Thread-216402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:45.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:38:45.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:38:45.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:38:47.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 38, 11), 13.71, 39.63, 0.0, 17.57, 15.78, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:38:47.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:38:11
2026-02-16T03:38:47.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:38:47.738 [DEBUG] [Thread-216403] [transport.py] [_log()] starting thread (client mode): 0xa57c0460
2026-02-16T03:38:47.738 [DEBUG] [Thread-216403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:38:47.759 [DEBUG] [Thread-216403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:38:47.759 [INFO] [Thread-216403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:38:47.762 [DEBUG] [Thread-216403] [transport.py] [_log()] client lang: <none>
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] server lang: <none>
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] kex follows: False
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] Compression: none
2026-02-16T03:38:47.763 [DEBUG] [Thread-216403] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:38:47.771 [DEBUG] [Thread-216403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:38:47.771 [DEBUG] [Thread-216403] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:38:47.772 [DEBUG] [Thread-216403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:38:47.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:38:47.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:38:47.773 [DEBUG] [Thread-216403] [transport.py] [_log()] userauth is OK
2026-02-16T03:38:47.773 [DEBUG] [Thread-216403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:38:47.773 [DEBUG] [Thread-216403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:38:47.773 [DEBUG] [Thread-216403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:38:47.773 [DEBUG] [Thread-216403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:38:47.792 [INFO] [Thread-216403] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:38:47.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:38:48.437 [DEBUG] [Thread-216403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:38:48.437 [DEBUG] [Thread-216403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:38:48.438 [DEBUG] [Thread-216403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:38:48.478 [DEBUG] [Thread-216403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:38:48.478 [DEBUG] [Thread-216403] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:38:48.481 [DEBUG] [Thread-216403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:38:48.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:38:48.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:38:48.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:38:48.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:38:48.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:38:48.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:38:48.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:38:48.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:38:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:38:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.068154 -999.00  +15.10  11.99     47   +4.10 1 1 1 1 1     0    0 11.85 89.89 ZNESW 11.5 12.0 110.2 15.1 14.8 -21.9 14.5 -20.8 14.2 -19.4 14.5 -21.0
2026-02-16T03:38:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:38:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:38:48.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.068154
2026-02-16T03:38:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:38:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:38:48.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:38:48.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:38:48.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:38:48.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:38:11', tmtdew=13.71, humidity=39.63, cloud=0.0, wind=17.57, temperature=15.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:38:11', seeing=1.79, atlas_timestamp='2026-02-16T01:38:08.506', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:35:00')
2026-02-16T03:38:48.508 [DEBUG] [Thread-216403] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:38:48.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:38:48.604 [DEBUG] [Thread-216406] [transport.py] [_log()] starting thread (client mode): 0xa57c39a0
2026-02-16T03:38:48.604 [DEBUG] [Thread-216406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:38:48.619 [DEBUG] [Thread-216406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:38:48.620 [INFO] [Thread-216406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] client lang: <none>
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] server lang: <none>
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] kex follows: False
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:38:48.628 [DEBUG] [Thread-216406] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:38:48.629 [DEBUG] [Thread-216406] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:38:48.629 [DEBUG] [Thread-216406] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:38:48.629 [DEBUG] [Thread-216406] [transport.py] [_log()] Compression: none
2026-02-16T03:38:48.629 [DEBUG] [Thread-216406] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:38:48.686 [DEBUG] [Thread-216406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:38:48.687 [DEBUG] [Thread-216406] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:38:48.687 [DEBUG] [Thread-216406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:38:48.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:38:48.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:38:48.746 [DEBUG] [Thread-216406] [transport.py] [_log()] userauth is OK
2026-02-16T03:38:48.746 [DEBUG] [Thread-216406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:38:48.746 [DEBUG] [Thread-216406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:38:48.746 [DEBUG] [Thread-216406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:38:48.746 [DEBUG] [Thread-216406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:38:48.765 [INFO] [Thread-216406] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:38:48.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:38:48.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:38:49.295 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:49.579 [DEBUG] [Thread-216406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:38:49.579 [DEBUG] [Thread-216406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:38:49.627 [DEBUG] [Thread-216406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:38:49.627 [DEBUG] [Thread-216406] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:38:49.636 [DEBUG] [Thread-216406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:38:49.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:38:49.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:38:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:38:49.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:38:49.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:38:49.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:38:49.669 [DEBUG] [Thread-216406] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:38:50.571 [DEBUG] [Thread-216408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:51.138 [DEBUG] [Thread-216409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:55.081 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:38:55.082 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:05.623 [DEBUG] [Thread-216410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:07.949 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:19.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:39:19.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:39:19.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:39:20.659 [DEBUG] [Thread-216411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 38, 47), 14.1, 38.67, 0.0, 15.62, 16.05, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:39:21.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:38:47
2026-02-16T03:39:21.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:39:22.042 [DEBUG] [Thread-216412] [transport.py] [_log()] starting thread (client mode): 0xa57c32b0
2026-02-16T03:39:22.042 [DEBUG] [Thread-216412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:39:22.064 [DEBUG] [Thread-216412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:39:22.064 [INFO] [Thread-216412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] client lang: <none>
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] server lang: <none>
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] kex follows: False
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] Compression: none
2026-02-16T03:39:22.067 [DEBUG] [Thread-216412] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:39:22.084 [DEBUG] [Thread-216412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:39:22.084 [DEBUG] [Thread-216412] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:39:22.084 [DEBUG] [Thread-216412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:39:22.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:39:22.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:39:22.086 [DEBUG] [Thread-216412] [transport.py] [_log()] userauth is OK
2026-02-16T03:39:22.086 [DEBUG] [Thread-216412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:39:22.086 [DEBUG] [Thread-216412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:39:22.087 [DEBUG] [Thread-216412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:39:22.087 [DEBUG] [Thread-216412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:39:22.118 [INFO] [Thread-216412] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:39:22.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:39:22.744 [DEBUG] [Thread-216412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:39:22.744 [DEBUG] [Thread-216412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:39:22.744 [DEBUG] [Thread-216412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:39:22.785 [DEBUG] [Thread-216412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:39:22.786 [DEBUG] [Thread-216412] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:39:22.789 [DEBUG] [Thread-216412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:39:22.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:39:22.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:39:22.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:39:22.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:39:22.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:39:22.815 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:39:22.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:39:22.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:39:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:39:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.068501 -999.00  +15.10  12.00     47   +3.90 1 1 1 1 1     0    0 11.94 85.67 ZNESW 11.7 12.0 108.4 14.8 14.7 -21.5 14.5 -20.8 14.3 -19.6 14.6 -20.9
2026-02-16T03:39:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:39:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:39:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.068501
2026-02-16T03:39:22.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:39:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:39:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:39:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:39:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:39:22.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:38:47', tmtdew=14.1, humidity=38.67, cloud=0.0, wind=15.62, temperature=16.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:38:47', seeing=1.47, atlas_timestamp='2026-02-16T01:38:38.486', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:35:00')
2026-02-16T03:39:22.818 [DEBUG] [Thread-216412] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:39:22.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:39:22.915 [DEBUG] [Thread-216415] [transport.py] [_log()] starting thread (client mode): 0xa57c25c0
2026-02-16T03:39:22.915 [DEBUG] [Thread-216415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:39:22.929 [DEBUG] [Thread-216415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:39:22.929 [INFO] [Thread-216415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:39:22.936 [DEBUG] [Thread-216415] [transport.py] [_log()] client lang: <none>
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] server lang: <none>
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] kex follows: False
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] Compression: none
2026-02-16T03:39:22.937 [DEBUG] [Thread-216415] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:39:22.991 [DEBUG] [Thread-216415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:39:22.991 [DEBUG] [Thread-216415] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:39:22.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:39:22.992 [DEBUG] [Thread-216415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:39:22.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:39:23.049 [DEBUG] [Thread-216415] [transport.py] [_log()] userauth is OK
2026-02-16T03:39:23.049 [DEBUG] [Thread-216415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:39:23.049 [DEBUG] [Thread-216415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:39:23.049 [DEBUG] [Thread-216415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:39:23.049 [DEBUG] [Thread-216415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:39:23.062 [INFO] [Thread-216415] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:39:23.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:39:23.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:39:23.942 [DEBUG] [Thread-216415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:39:23.943 [DEBUG] [Thread-216415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:39:23.990 [DEBUG] [Thread-216415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:39:23.990 [DEBUG] [Thread-216415] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:39:23.999 [DEBUG] [Thread-216415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:39:24.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:39:24.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:39:24.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:39:24.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:39:24.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:39:24.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:39:24.036 [DEBUG] [Thread-216415] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:39:26.731 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:35.692 [DEBUG] [Thread-216417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:45.432 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:50.739 [DEBUG] [Thread-216418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:51.217 [DEBUG] [Thread-216419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:54.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:39:54.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:39:54.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:39:55.284 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:55.285 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:39:56.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 39, 22), 14.08, 38.75, 0.0, 15.21, 16.08, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:39:56.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:39:22
2026-02-16T03:39:56.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:39:56.618 [DEBUG] [Thread-216420] [transport.py] [_log()] starting thread (client mode): 0xa2dbfb80
2026-02-16T03:39:56.618 [DEBUG] [Thread-216420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:39:56.638 [DEBUG] [Thread-216420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:39:56.639 [INFO] [Thread-216420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] client lang: <none>
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] server lang: <none>
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] kex follows: False
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] Compression: none
2026-02-16T03:39:56.642 [DEBUG] [Thread-216420] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:39:56.659 [DEBUG] [Thread-216420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:39:56.660 [DEBUG] [Thread-216420] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:39:56.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:39:56.661 [DEBUG] [Thread-216420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:39:56.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:39:56.663 [DEBUG] [Thread-216420] [transport.py] [_log()] userauth is OK
2026-02-16T03:39:56.663 [DEBUG] [Thread-216420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:39:56.663 [DEBUG] [Thread-216420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:39:56.663 [DEBUG] [Thread-216420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:39:56.663 [DEBUG] [Thread-216420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:39:56.684 [INFO] [Thread-216420] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:39:56.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:39:57.300 [DEBUG] [Thread-216420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:39:57.300 [DEBUG] [Thread-216420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:39:57.301 [DEBUG] [Thread-216420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:39:57.341 [DEBUG] [Thread-216420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:39:57.341 [DEBUG] [Thread-216420] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:39:57.343 [DEBUG] [Thread-216420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:39:57.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:39:57.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:39:57.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:39:57.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:39:57.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:39:57.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:39:57.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:39:57.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:39:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:39:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.068849 -999.00  +15.10  11.53     47   +3.90 1 1 1 1 1     0    0 11.85 90.36 ZNESW 13.6 11.5 105.0 15.3 14.8 -22.0 14.6 -21.1 14.2 -19.7 14.6 -20.1
2026-02-16T03:39:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:39:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:39:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.068849
2026-02-16T03:39:57.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:39:57.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:39:57.369 [DEBUG] [Thread-216420] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:39:57.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:39:57.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:39:57.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:39:57.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:39:22', tmtdew=14.08, humidity=38.75, cloud=0.0, wind=15.21, temperature=16.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:39:23', seeing=1.66, atlas_timestamp='2026-02-16T01:39:08.554', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:35:00')
2026-02-16T03:39:57.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:39:57.468 [DEBUG] [Thread-216423] [transport.py] [_log()] starting thread (client mode): 0xa2dbc370
2026-02-16T03:39:57.469 [DEBUG] [Thread-216423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:39:57.483 [DEBUG] [Thread-216423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:39:57.484 [INFO] [Thread-216423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:39:57.491 [DEBUG] [Thread-216423] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:39:57.491 [DEBUG] [Thread-216423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:39:57.491 [DEBUG] [Thread-216423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] client lang: <none>
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] server lang: <none>
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] kex follows: False
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] Compression: none
2026-02-16T03:39:57.492 [DEBUG] [Thread-216423] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:39:57.553 [DEBUG] [Thread-216423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:39:57.554 [DEBUG] [Thread-216423] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:39:57.554 [DEBUG] [Thread-216423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:39:57.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:39:57.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:39:57.610 [DEBUG] [Thread-216423] [transport.py] [_log()] userauth is OK
2026-02-16T03:39:57.610 [DEBUG] [Thread-216423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:39:57.610 [DEBUG] [Thread-216423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:39:57.610 [DEBUG] [Thread-216423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:39:57.610 [DEBUG] [Thread-216423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:39:57.628 [INFO] [Thread-216423] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:39:57.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:39:57.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:39:58.417 [DEBUG] [Thread-216423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:39:58.417 [DEBUG] [Thread-216423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:39:58.465 [DEBUG] [Thread-216423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:39:58.466 [DEBUG] [Thread-216423] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:39:58.475 [DEBUG] [Thread-216423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:39:58.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:39:58.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:39:58.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:39:58.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:39:58.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:39:58.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:39:58.511 [DEBUG] [Thread-216423] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:40:04.109 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:05.774 [DEBUG] [Thread-216425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:20.828 [DEBUG] [Thread-216426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:22.746 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:28.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:40:28.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:40:28.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:40:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 39, 58), 14.28, 37.95, 0.0, 16.55, 16.15, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:40:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:39:58
2026-02-16T03:40:31.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:40:31.407 [DEBUG] [Thread-216427] [transport.py] [_log()] starting thread (client mode): 0xa2dbf430
2026-02-16T03:40:31.408 [DEBUG] [Thread-216427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:40:31.428 [DEBUG] [Thread-216427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:40:31.428 [INFO] [Thread-216427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:40:31.431 [DEBUG] [Thread-216427] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:40:31.431 [DEBUG] [Thread-216427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:40:31.431 [DEBUG] [Thread-216427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] client lang: <none>
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] server lang: <none>
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] kex follows: False
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] Compression: none
2026-02-16T03:40:31.432 [DEBUG] [Thread-216427] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:40:31.452 [DEBUG] [Thread-216427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:40:31.453 [DEBUG] [Thread-216427] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:40:31.453 [DEBUG] [Thread-216427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:40:31.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:40:31.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:40:31.497 [DEBUG] [Thread-216427] [transport.py] [_log()] userauth is OK
2026-02-16T03:40:31.497 [DEBUG] [Thread-216427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:40:31.497 [DEBUG] [Thread-216427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:40:31.497 [DEBUG] [Thread-216427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:40:31.497 [DEBUG] [Thread-216427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:40:31.532 [INFO] [Thread-216427] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:40:31.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:40:32.161 [DEBUG] [Thread-216427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:40:32.161 [DEBUG] [Thread-216427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:40:32.162 [DEBUG] [Thread-216427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:40:32.202 [DEBUG] [Thread-216427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:40:32.203 [DEBUG] [Thread-216427] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:40:32.206 [DEBUG] [Thread-216427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:40:32.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:40:32.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:40:32.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:40:32.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:40:32.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:40:32.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:40:32.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:40:32.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:40:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:40:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.069195 -999.00  +15.30  12.48     45   +3.70 1 1 1 1 1     0    0 12.53 102.62 ZNESW 13.6 12.5 116.8 16.2 14.8 -21.2 14.5 -20.6 14.3 -19.4 14.7 -20.8
2026-02-16T03:40:32.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:40:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:40:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.069195
2026-02-16T03:40:32.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:40:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:40:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:40:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:40:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:40:32.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:39:58', tmtdew=14.28, humidity=37.95, cloud=0.0, wind=16.55, temperature=16.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:39:58', seeing=1.77, atlas_timestamp='2026-02-16T01:39:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:39:00')
2026-02-16T03:40:32.234 [DEBUG] [Thread-216427] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:40:32.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:40:32.341 [DEBUG] [Thread-216430] [transport.py] [_log()] starting thread (client mode): 0xa2dbfeb0
2026-02-16T03:40:32.341 [DEBUG] [Thread-216430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:40:32.356 [DEBUG] [Thread-216430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:40:32.357 [INFO] [Thread-216430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:40:32.364 [DEBUG] [Thread-216430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] client lang: <none>
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] server lang: <none>
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] kex follows: False
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] Compression: none
2026-02-16T03:40:32.365 [DEBUG] [Thread-216430] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:40:32.422 [DEBUG] [Thread-216430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:40:32.422 [DEBUG] [Thread-216430] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:40:32.423 [DEBUG] [Thread-216430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:40:32.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:40:32.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:40:32.479 [DEBUG] [Thread-216430] [transport.py] [_log()] userauth is OK
2026-02-16T03:40:32.479 [DEBUG] [Thread-216430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:40:32.479 [DEBUG] [Thread-216430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:40:32.479 [DEBUG] [Thread-216430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:40:32.479 [DEBUG] [Thread-216430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:40:32.498 [INFO] [Thread-216430] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:40:32.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:40:32.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:40:33.348 [DEBUG] [Thread-216430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:40:33.349 [DEBUG] [Thread-216430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:40:33.397 [DEBUG] [Thread-216430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:40:33.397 [DEBUG] [Thread-216430] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:40:33.406 [DEBUG] [Thread-216430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:40:33.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:40:33.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:40: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
2026-02-16T03:40:33.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:40:33.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:40:33.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:40:33.440 [DEBUG] [Thread-216430] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:40:35.863 [DEBUG] [Thread-216432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:41.680 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:50.913 [DEBUG] [Thread-216433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:51.281 [DEBUG] [Thread-216434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:55.483 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:40:55.484 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:00.626 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:03.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:41:03.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:41:03.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:41:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 40, 33), 14.27, 38.1, 0.0, 17.43, 16.12, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:41:05.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:40:33
2026-02-16T03:41:05.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:41:05.887 [DEBUG] [Thread-216435] [transport.py] [_log()] starting thread (client mode): 0xa57c04c0
2026-02-16T03:41:05.888 [DEBUG] [Thread-216435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:41:05.907 [DEBUG] [Thread-216435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:41:05.907 [INFO] [Thread-216435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] client lang: <none>
2026-02-16T03:41:05.910 [DEBUG] [Thread-216435] [transport.py] [_log()] server lang: <none>
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] kex follows: False
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] Compression: none
2026-02-16T03:41:05.911 [DEBUG] [Thread-216435] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:41:05.927 [DEBUG] [Thread-216435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:41:05.928 [DEBUG] [Thread-216435] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:41:05.928 [DEBUG] [Thread-216435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:41:05.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:41:05.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:41:05.930 [DEBUG] [Thread-216435] [transport.py] [_log()] userauth is OK
2026-02-16T03:41:05.930 [DEBUG] [Thread-216435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:41:05.931 [DEBUG] [Thread-216435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:41:05.931 [DEBUG] [Thread-216435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:41:05.931 [DEBUG] [Thread-216435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:41:05.947 [DEBUG] [Thread-216437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:05.955 [INFO] [Thread-216435] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:41:05.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:41:07.792 [DEBUG] [Thread-216435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:41:07.793 [DEBUG] [Thread-216435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:41:07.793 [DEBUG] [Thread-216435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:41:07.833 [DEBUG] [Thread-216435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:41:07.834 [DEBUG] [Thread-216435] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:41:07.836 [DEBUG] [Thread-216435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:41:07.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:41:07.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:41:07.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:41:07.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:41:07.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:41:07.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:41:07.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:41:07.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:41:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:41:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.069890 -999.00  +15.30  11.04     46   +3.80 1 1 1 1 1     0    0 12.92 116.70 ZNESW 11.6 11.0 107.8 14.7 14.9 -21.8 14.7 -21.0 14.3 -19.8 14.7 -20.9
2026-02-16T03:41:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:41:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:41:07.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.069890
2026-02-16T03:41:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:41:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:41:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:41:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:41:07.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:41:07.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:40:33', tmtdew=14.27, humidity=38.1, cloud=0.0, wind=17.43, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:40:33', seeing=1.41, atlas_timestamp='2026-02-16T01:40:38.496', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:39:00')
2026-02-16T03:41:07.865 [DEBUG] [Thread-216435] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:41:07.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:41:07.960 [DEBUG] [Thread-216439] [transport.py] [_log()] starting thread (client mode): 0xa57c3550
2026-02-16T03:41:07.961 [DEBUG] [Thread-216439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:41:07.976 [DEBUG] [Thread-216439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:41:07.976 [INFO] [Thread-216439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:41:07.983 [DEBUG] [Thread-216439] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:41:07.984 [DEBUG] [Thread-216439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:41:07.984 [DEBUG] [Thread-216439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:41:07.984 [DEBUG] [Thread-216439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:07.984 [DEBUG] [Thread-216439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:07.984 [DEBUG] [Thread-216439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] client lang: <none>
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] server lang: <none>
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] kex follows: False
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:41:07.985 [DEBUG] [Thread-216439] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:41:07.986 [DEBUG] [Thread-216439] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:41:07.986 [DEBUG] [Thread-216439] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:41:07.986 [DEBUG] [Thread-216439] [transport.py] [_log()] Compression: none
2026-02-16T03:41:07.986 [DEBUG] [Thread-216439] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:41:08.046 [DEBUG] [Thread-216439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:41:08.047 [DEBUG] [Thread-216439] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:41:08.047 [DEBUG] [Thread-216439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:41:08.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:41:08.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:41:08.102 [DEBUG] [Thread-216439] [transport.py] [_log()] userauth is OK
2026-02-16T03:41:08.103 [DEBUG] [Thread-216439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:41:08.103 [DEBUG] [Thread-216439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:41:08.103 [DEBUG] [Thread-216439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:41:08.103 [DEBUG] [Thread-216439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:41:08.121 [INFO] [Thread-216439] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:41:08.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:41:08.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:41:08.951 [DEBUG] [Thread-216439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:41:08.951 [DEBUG] [Thread-216439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:41:08.998 [DEBUG] [Thread-216439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:41:08.999 [DEBUG] [Thread-216439] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:41:09.008 [DEBUG] [Thread-216439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:41:09.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:41:09.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:41:09.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:41:09.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:41:09.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:41:09.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:41:09.043 [DEBUG] [Thread-216439] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:41:19.493 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:20.986 [DEBUG] [Thread-216441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:36.040 [DEBUG] [Thread-216442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:38.184 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:41:39.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:41:39.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:41:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 41, 9), 14.58, 37.57, 0.0, 16.89, 16.31, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:41:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:41:09
2026-02-16T03:41:41.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:41:41.561 [DEBUG] [Thread-216443] [transport.py] [_log()] starting thread (client mode): 0xa2dbe890
2026-02-16T03:41:41.561 [DEBUG] [Thread-216443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:41:41.581 [DEBUG] [Thread-216443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:41:41.581 [INFO] [Thread-216443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] client lang: <none>
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] server lang: <none>
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] kex follows: False
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:41:41.585 [DEBUG] [Thread-216443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:41:41.586 [DEBUG] [Thread-216443] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:41:41.586 [DEBUG] [Thread-216443] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:41:41.586 [DEBUG] [Thread-216443] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:41:41.586 [DEBUG] [Thread-216443] [transport.py] [_log()] Compression: none
2026-02-16T03:41:41.586 [DEBUG] [Thread-216443] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:41:41.603 [DEBUG] [Thread-216443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:41:41.603 [DEBUG] [Thread-216443] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:41:41.604 [DEBUG] [Thread-216443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:41:41.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:41:41.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:41:41.605 [DEBUG] [Thread-216443] [transport.py] [_log()] userauth is OK
2026-02-16T03:41:41.606 [DEBUG] [Thread-216443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:41:41.606 [DEBUG] [Thread-216443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:41:41.606 [DEBUG] [Thread-216443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:41:41.606 [DEBUG] [Thread-216443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:41:41.630 [INFO] [Thread-216443] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:41:41.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:41:42.261 [DEBUG] [Thread-216443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:41:42.261 [DEBUG] [Thread-216443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:41:42.261 [DEBUG] [Thread-216443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:41:42.301 [DEBUG] [Thread-216443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:41:42.302 [DEBUG] [Thread-216443] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:41:42.305 [DEBUG] [Thread-216443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:41:42.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:41:42.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:41:42.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:41:42.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:41:42.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:41:42.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:41:42.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:41:42.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:41:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:41:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.070237 -999.00  +15.30  11.66     46   +3.90 1 1 1 1 1     0    0 13.65 133.23 ZNESW 11.6 11.7 108.6 15.1 14.9 -22.3 14.7 -21.0 14.3 -19.6 14.7 -20.9
2026-02-16T03:41:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:41:42.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:41:42.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.070237
2026-02-16T03:41:42.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:41:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:41:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:41:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:41:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:41:42.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:41:09', tmtdew=14.58, humidity=37.57, cloud=0.0, wind=16.89, temperature=16.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:41:10', seeing=1.61, atlas_timestamp='2026-02-16T01:41:08.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:39:00')
2026-02-16T03:41:42.331 [DEBUG] [Thread-216443] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:41:42.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:41:42.431 [DEBUG] [Thread-216446] [transport.py] [_log()] starting thread (client mode): 0xa2dbde70
2026-02-16T03:41:42.431 [DEBUG] [Thread-216446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:41:42.446 [DEBUG] [Thread-216446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:41:42.446 [INFO] [Thread-216446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:41:42.454 [DEBUG] [Thread-216446] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:41:42.454 [DEBUG] [Thread-216446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:41:42.454 [DEBUG] [Thread-216446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:41:42.454 [DEBUG] [Thread-216446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] client lang: <none>
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] server lang: <none>
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] kex follows: False
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] Compression: none
2026-02-16T03:41:42.455 [DEBUG] [Thread-216446] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:41:42.510 [DEBUG] [Thread-216446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:41:42.511 [DEBUG] [Thread-216446] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:41:42.511 [DEBUG] [Thread-216446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:41:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:41:42.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:41:42.567 [DEBUG] [Thread-216446] [transport.py] [_log()] userauth is OK
2026-02-16T03:41:42.567 [DEBUG] [Thread-216446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:41:42.567 [DEBUG] [Thread-216446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:41:42.568 [DEBUG] [Thread-216446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:41:42.568 [DEBUG] [Thread-216446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:41:42.590 [INFO] [Thread-216446] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:41:42.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:41:42.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:41:43.484 [DEBUG] [Thread-216446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:41:43.485 [DEBUG] [Thread-216446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:41:43.532 [DEBUG] [Thread-216446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:41:43.533 [DEBUG] [Thread-216446] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:41:43.542 [DEBUG] [Thread-216446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:41:43.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:41:43.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:41:43.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:41:43.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:41:43.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:41:43.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:41:43.578 [DEBUG] [Thread-216446] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:41:51.078 [DEBUG] [Thread-216448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:51.359 [DEBUG] [Thread-216449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:55.689 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:55.690 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:41:56.825 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:06.127 [DEBUG] [Thread-216450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:13.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:42:13.573 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:42:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:42:15.548 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:16.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 41, 44), 14.78, 36.95, 0.0, 19.11, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:42:16.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:41:44
2026-02-16T03:42:16.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:42:16.681 [DEBUG] [Thread-216451] [transport.py] [_log()] starting thread (client mode): 0xa2db7160
2026-02-16T03:42:16.682 [DEBUG] [Thread-216451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:42:16.702 [DEBUG] [Thread-216451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:42:16.702 [INFO] [Thread-216451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] client lang: <none>
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] server lang: <none>
2026-02-16T03:42:16.706 [DEBUG] [Thread-216451] [transport.py] [_log()] kex follows: False
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] Compression: none
2026-02-16T03:42:16.707 [DEBUG] [Thread-216451] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:42:16.726 [DEBUG] [Thread-216451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:42:16.726 [DEBUG] [Thread-216451] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:42:16.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:42:16.728 [DEBUG] [Thread-216451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:42:16.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:42:16.730 [DEBUG] [Thread-216451] [transport.py] [_log()] userauth is OK
2026-02-16T03:42:16.731 [DEBUG] [Thread-216451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:42:16.731 [DEBUG] [Thread-216451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:42:16.731 [DEBUG] [Thread-216451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:42:16.731 [DEBUG] [Thread-216451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:42:16.766 [INFO] [Thread-216451] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:42:16.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:42:17.396 [DEBUG] [Thread-216451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:42:17.396 [DEBUG] [Thread-216451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:42:17.396 [DEBUG] [Thread-216451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:42:17.437 [DEBUG] [Thread-216451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:42:17.437 [DEBUG] [Thread-216451] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:42:17.441 [DEBUG] [Thread-216451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:42:17.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:42:17.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:42:17.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:42:17.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:42:17.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:42:17.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:42:17.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:42:17.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:42:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:42:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.070584 -999.00  +15.30  13.08     46   +3.80 1 1 1 1 1     0    0 14.13 144.90 ZNESW 10.9 13.1 105.8 15.5 14.9 -21.9 14.7 -20.8 14.3 -19.6 14.7 -21.1
2026-02-16T03:42:17.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:42:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:42:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.070584
2026-02-16T03:42:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:42:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:42:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:42:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:42:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:42:17.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:41:44', tmtdew=14.78, humidity=36.95, cloud=0.0, wind=19.11, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:41:45', seeing=1.48, atlas_timestamp='2026-02-16T01:41:38.458', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:39:00')
2026-02-16T03:42:17.466 [DEBUG] [Thread-216451] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:42:17.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:42:17.572 [DEBUG] [Thread-216454] [transport.py] [_log()] starting thread (client mode): 0xa2db43d0
2026-02-16T03:42:17.573 [DEBUG] [Thread-216454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:42:17.587 [DEBUG] [Thread-216454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:42:17.588 [INFO] [Thread-216454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:17.595 [DEBUG] [Thread-216454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] client lang: <none>
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] server lang: <none>
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] kex follows: False
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] Compression: none
2026-02-16T03:42:17.596 [DEBUG] [Thread-216454] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:42:17.655 [DEBUG] [Thread-216454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:42:17.656 [DEBUG] [Thread-216454] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:42:17.656 [DEBUG] [Thread-216454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:42:17.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:42:17.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:42:17.711 [DEBUG] [Thread-216454] [transport.py] [_log()] userauth is OK
2026-02-16T03:42:17.711 [DEBUG] [Thread-216454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:42:17.712 [DEBUG] [Thread-216454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:42:17.712 [DEBUG] [Thread-216454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:42:17.712 [DEBUG] [Thread-216454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:42:17.737 [INFO] [Thread-216454] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:42:17.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:42:17.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:42:18.554 [DEBUG] [Thread-216454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:42:18.555 [DEBUG] [Thread-216454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:42:18.602 [DEBUG] [Thread-216454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:42:18.603 [DEBUG] [Thread-216454] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:42:18.615 [DEBUG] [Thread-216454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:42:18.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:42:18.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:42:18.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:42:18.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:42:18.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:42:18.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:42:18.651 [DEBUG] [Thread-216454] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:42:21.164 [DEBUG] [Thread-216456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:34.516 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:36.216 [DEBUG] [Thread-216457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:48.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:42:48.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:42:48.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:42:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 42, 20), 14.78, 36.97, 0.0, 17.82, 16.51, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:42:50.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:42:20
2026-02-16T03:42:51.254 [DEBUG] [Thread-216458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:51.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:42:51.416 [DEBUG] [Thread-216459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:51.529 [DEBUG] [Thread-216460] [transport.py] [_log()] starting thread (client mode): 0xa2db7400
2026-02-16T03:42:51.529 [DEBUG] [Thread-216460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:42:51.548 [DEBUG] [Thread-216460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:42:51.548 [INFO] [Thread-216460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] client lang: <none>
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] server lang: <none>
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] kex follows: False
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:42:51.551 [DEBUG] [Thread-216460] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:42:51.552 [DEBUG] [Thread-216460] [transport.py] [_log()] Compression: none
2026-02-16T03:42:51.552 [DEBUG] [Thread-216460] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:42:51.567 [DEBUG] [Thread-216460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:42:51.567 [DEBUG] [Thread-216460] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:42:51.568 [DEBUG] [Thread-216460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:42:51.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:42:51.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:42:51.570 [DEBUG] [Thread-216460] [transport.py] [_log()] userauth is OK
2026-02-16T03:42:51.570 [DEBUG] [Thread-216460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:42:51.570 [DEBUG] [Thread-216460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:42:51.570 [DEBUG] [Thread-216460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:42:51.570 [DEBUG] [Thread-216460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:42:51.589 [INFO] [Thread-216460] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:42:51.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:42:52.208 [DEBUG] [Thread-216460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:42:52.208 [DEBUG] [Thread-216460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:42:52.209 [DEBUG] [Thread-216460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:42:52.249 [DEBUG] [Thread-216460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:42:52.249 [DEBUG] [Thread-216460] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:42:52.251 [DEBUG] [Thread-216460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:42:52.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:42:52.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:42:52.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:42:52.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:42:52.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:42:52.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:42:52.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:42:52.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:42:52.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:42:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.070931 -999.00  +15.30  12.34     46   +3.80 1 1 1 1 1     0    0 14.15 148.14 ZNESW 10.1 12.3 110.0 15.2 14.9 -21.8 14.7 -21.0 14.4 -19.8 14.7 -21.0
2026-02-16T03:42:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:42:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:42:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.070931
2026-02-16T03:42:52.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:42:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:42:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:42:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:42:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:42:52.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:42:20', tmtdew=14.78, humidity=36.97, cloud=0.0, wind=17.82, temperature=16.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:42:20', seeing=1.47, atlas_timestamp='2026-02-16T01:42:08.438', atlas_cloud=1, atlas_rain=1, zp_data=[-0.010750000000001592, -0.04224999999999923, -0.01774999999999949, -0.007500000000000284, -0.053999999999998494, 0.020749999999999602, -0.010500000000000398, 0.02075000000000138, -0.020500000000000185, -0.050499999999999545, -0.014750000000001151, -0.09050000000000047, 0.02099999999999902, 0.06325000000000003, 0.02999999999999936, -0.023000000000001464, 0.0072499999999990905, -0.02149999999999963, 0.007499999999998508, -0.0042500000000025295, -0.02400000000000091, 0.03874999999999851, 0.017250000000000654, -0.015249999999999986, 0.02999999999999936, -0.04349999999999987, 0.04475000000000051, -0.01649999999999885, 0.02949999999999875, 0.062000000000001165, 0.08950000000000102, -0.0029999999999983373, -0.056250000000000355], zp_timestamp='2026-02-16T01:39:00')
2026-02-16T03:42:52.268 [DEBUG] [Thread-216460] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:42:52.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:42:52.365 [DEBUG] [Thread-216463] [transport.py] [_log()] starting thread (client mode): 0xa2dbf550
2026-02-16T03:42:52.365 [DEBUG] [Thread-216463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:42:52.379 [DEBUG] [Thread-216463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:42:52.379 [INFO] [Thread-216463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] client lang: <none>
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] server lang: <none>
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] kex follows: False
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] Compression: none
2026-02-16T03:42:52.386 [DEBUG] [Thread-216463] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:42:52.441 [DEBUG] [Thread-216463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:42:52.441 [DEBUG] [Thread-216463] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:42:52.441 [DEBUG] [Thread-216463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:42:52.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:42:52.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:42:52.499 [DEBUG] [Thread-216463] [transport.py] [_log()] userauth is OK
2026-02-16T03:42:52.499 [DEBUG] [Thread-216463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:42:52.499 [DEBUG] [Thread-216463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:42:52.499 [DEBUG] [Thread-216463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:42:52.499 [DEBUG] [Thread-216463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:42:52.517 [INFO] [Thread-216463] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:42:52.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:42:52.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:42:53.334 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:53.336 [DEBUG] [Thread-216463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:42:53.337 [DEBUG] [Thread-216463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:42:53.384 [DEBUG] [Thread-216463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:42:53.384 [DEBUG] [Thread-216463] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:42:53.393 [DEBUG] [Thread-216463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:42:53.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:42:53.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:42:53.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:42:53.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:42:53.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:42:53.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:42:53.429 [DEBUG] [Thread-216463] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:42:55.894 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:42:55.895 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:06.287 [DEBUG] [Thread-216465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:12.004 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:21.338 [DEBUG] [Thread-216466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:23.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:43:23.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:43: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
2026-02-16T03:43:25.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 42, 56), 14.81, 36.64, 0.0, 17.01, 16.48, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:43:25.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:42:56
2026-02-16T03:43:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:43:25.811 [DEBUG] [Thread-216467] [transport.py] [_log()] starting thread (client mode): 0xa57c25c0
2026-02-16T03:43:25.811 [DEBUG] [Thread-216467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:43:25.832 [DEBUG] [Thread-216467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:43:25.832 [INFO] [Thread-216467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] client lang: <none>
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] server lang: <none>
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] kex follows: False
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] Compression: none
2026-02-16T03:43:25.835 [DEBUG] [Thread-216467] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:43:25.852 [DEBUG] [Thread-216467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:43:25.852 [DEBUG] [Thread-216467] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:43:25.852 [DEBUG] [Thread-216467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:43:25.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:43:25.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:43:25.853 [DEBUG] [Thread-216467] [transport.py] [_log()] userauth is OK
2026-02-16T03:43:25.853 [DEBUG] [Thread-216467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:43:25.853 [DEBUG] [Thread-216467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:43:25.853 [DEBUG] [Thread-216467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:43:25.853 [DEBUG] [Thread-216467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:43:25.862 [INFO] [Thread-216467] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:43:25.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:43:26.491 [DEBUG] [Thread-216467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:43:26.491 [DEBUG] [Thread-216467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:43:26.491 [DEBUG] [Thread-216467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:43:26.532 [DEBUG] [Thread-216467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:43:26.532 [DEBUG] [Thread-216467] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:43:26.534 [DEBUG] [Thread-216467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:43:26.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:43:26.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:43:26.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:43:26.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:43:26.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:43:26.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:43:26.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.071279 -999.00  +15.20  11.66     46   +3.70 1 1 1 1 1     0    0 14.25 153.60 ZNESW 9.1 11.7 108.0 12.8 14.9 -22.0 14.7 -20.9 14.4 -19.8 14.7 -21.0
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.071279
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:43:26.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:42:56', tmtdew=14.81, humidity=36.64, cloud=0.0, wind=17.01, temperature=16.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:42:56', seeing=1.57, atlas_timestamp='2026-02-16T01:42:38.506', atlas_cloud=1, atlas_rain=1, zp_data=[0.012750000000000483, -0.025750000000000384, 0.0032500000000013074, -0.022500000000000853, -0.0035000000000007248, 0.04925000000000068, 0.02200000000000024, 0.043250000000000455, 0.018499999999999517, -0.03599999999999959, -0.008250000000000313, -0.10100000000000087, 0.05299999999999905, 0.04624999999999879, 0.05000000000000071, -0.03700000000000081, 0.016750000000000043, -0.014499999999999957, 0.016000000000000014, -0.0037500000000019185, -0.0045000000000001705, 0.06274999999999764, 0.02224999999999966, 0.008750000000000924, 0.010999999999999233, -0.04049999999999976, 0.06274999999999942, 0.01950000000000074, 0.062000000000001165, 0.10400000000000098, 0.09100000000000108, 0.04550000000000054, -0.015750000000000597], zp_timestamp='2026-02-16T01:41:00')
2026-02-16T03:43:26.553 [DEBUG] [Thread-216467] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:43:26.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:43:26.636 [DEBUG] [Thread-216470] [transport.py] [_log()] starting thread (client mode): 0xa57c2290
2026-02-16T03:43:26.636 [DEBUG] [Thread-216470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:43:26.651 [DEBUG] [Thread-216470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:43:26.651 [INFO] [Thread-216470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] client lang: <none>
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] server lang: <none>
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] kex follows: False
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:43:26.659 [DEBUG] [Thread-216470] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:43:26.660 [DEBUG] [Thread-216470] [transport.py] [_log()] Compression: none
2026-02-16T03:43:26.660 [DEBUG] [Thread-216470] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:43:26.724 [DEBUG] [Thread-216470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:43:26.724 [DEBUG] [Thread-216470] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:43:26.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:43:26.725 [DEBUG] [Thread-216470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:43:26.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:43:26.787 [DEBUG] [Thread-216470] [transport.py] [_log()] userauth is OK
2026-02-16T03:43:26.788 [DEBUG] [Thread-216470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:43:26.788 [DEBUG] [Thread-216470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:43:26.788 [DEBUG] [Thread-216470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:43:26.788 [DEBUG] [Thread-216470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:43:26.809 [INFO] [Thread-216470] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:43:26.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:43:26.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:43:27.670 [DEBUG] [Thread-216470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:43:27.670 [DEBUG] [Thread-216470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:43:27.718 [DEBUG] [Thread-216470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:43:27.718 [DEBUG] [Thread-216470] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:43:27.726 [DEBUG] [Thread-216470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:43:27.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:43:27.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:43:27.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:43:27.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:43:27.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:43:27.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:43:27.758 [DEBUG] [Thread-216470] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:43:30.652 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:36.370 [DEBUG] [Thread-216472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:49.495 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:51.431 [DEBUG] [Thread-216473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:51.472 [DEBUG] [Thread-216474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:56.095 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:56.096 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:43:57.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:43:57.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:43:57.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:44:00.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 43, 31), 14.67, 36.97, 0.0, 15.39, 16.36, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:44:00.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:43:31
2026-02-16T03:44:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:44:00.716 [DEBUG] [Thread-216475] [transport.py] [_log()] starting thread (client mode): 0xa2db5f60
2026-02-16T03:44:00.717 [DEBUG] [Thread-216475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:44:00.735 [DEBUG] [Thread-216475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:44:00.735 [INFO] [Thread-216475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:44:00.738 [DEBUG] [Thread-216475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] client lang: <none>
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] server lang: <none>
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] kex follows: False
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] Compression: none
2026-02-16T03:44:00.739 [DEBUG] [Thread-216475] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:44:00.753 [DEBUG] [Thread-216475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:44:00.753 [DEBUG] [Thread-216475] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:44:00.754 [DEBUG] [Thread-216475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:44:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:44:00.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:44:00.754 [DEBUG] [Thread-216475] [transport.py] [_log()] userauth is OK
2026-02-16T03:44:00.754 [DEBUG] [Thread-216475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:44:00.754 [DEBUG] [Thread-216475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:44:00.754 [DEBUG] [Thread-216475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:44:00.754 [DEBUG] [Thread-216475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:44:00.763 [INFO] [Thread-216475] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:44:00.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:44:01.557 [DEBUG] [Thread-216475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:44:01.557 [DEBUG] [Thread-216475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:44:01.558 [DEBUG] [Thread-216475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:44:01.598 [DEBUG] [Thread-216475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:44:01.598 [DEBUG] [Thread-216475] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:44:01.600 [DEBUG] [Thread-216475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:44:01.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:44:01.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:44:01.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:44:01.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:44:01.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:44:01.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:44:01.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:44:01.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:44:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:44:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.071973 -999.00  +15.10  10.07     47   +3.90 1 1 1 1 1     0    0 14.95 169.08 ZNESW 9.3 10.1 105.6 14.2 14.9 -22.1 14.7 -21.1 14.4 -19.9 14.8 -21.2
2026-02-16T03:44:01.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:44:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:44:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.071973
2026-02-16T03:44:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:44:01.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:44:01.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:44:01.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:44:01.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:44:01.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:43:31', tmtdew=14.67, humidity=36.97, cloud=0.0, wind=15.39, temperature=16.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:43:32', seeing=1.52, atlas_timestamp='2026-02-16T01:43:38.467', atlas_cloud=1, atlas_rain=1, zp_data=[0.012750000000000483, -0.025750000000000384, 0.0032500000000013074, -0.022500000000000853, -0.0035000000000007248, 0.04925000000000068, 0.02200000000000024, 0.043250000000000455, 0.018499999999999517, -0.03599999999999959, -0.008250000000000313, -0.10100000000000087, 0.05299999999999905, 0.04624999999999879, 0.05000000000000071, -0.03700000000000081, 0.016750000000000043, -0.014499999999999957, 0.016000000000000014, -0.0037500000000019185, -0.0045000000000001705, 0.06274999999999764, 0.02224999999999966, 0.008750000000000924, 0.010999999999999233, -0.04049999999999976, 0.06274999999999942, 0.01950000000000074, 0.062000000000001165, 0.10400000000000098, 0.09100000000000108, 0.04550000000000054, -0.015750000000000597], zp_timestamp='2026-02-16T01:41:00')
2026-02-16T03:44:01.623 [DEBUG] [Thread-216475] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:44:01.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:44:01.727 [DEBUG] [Thread-216478] [transport.py] [_log()] starting thread (client mode): 0xa2db4850
2026-02-16T03:44:01.727 [DEBUG] [Thread-216478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:44:01.742 [DEBUG] [Thread-216478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:44:01.742 [INFO] [Thread-216478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:44:01.749 [DEBUG] [Thread-216478] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] client lang: <none>
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] server lang: <none>
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] kex follows: False
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] Compression: none
2026-02-16T03:44:01.750 [DEBUG] [Thread-216478] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:44:01.807 [DEBUG] [Thread-216478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:44:01.808 [DEBUG] [Thread-216478] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:44:01.808 [DEBUG] [Thread-216478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:44:01.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:44:01.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:44:01.863 [DEBUG] [Thread-216478] [transport.py] [_log()] userauth is OK
2026-02-16T03:44:01.864 [DEBUG] [Thread-216478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:44:01.864 [DEBUG] [Thread-216478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:44:01.864 [DEBUG] [Thread-216478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:44:01.864 [DEBUG] [Thread-216478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:44:01.882 [INFO] [Thread-216478] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:44:01.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:44:01.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:44:02.764 [DEBUG] [Thread-216478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:44:02.765 [DEBUG] [Thread-216478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:44:02.813 [DEBUG] [Thread-216478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:44:02.813 [DEBUG] [Thread-216478] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:44:02.821 [DEBUG] [Thread-216478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:44:02.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:44:02.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:44:02.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:44:02.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:44:02.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:44:02.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:44:02.852 [DEBUG] [Thread-216478] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:44:06.464 [DEBUG] [Thread-216480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:08.313 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:21.527 [DEBUG] [Thread-216481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:26.958 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:32.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:44:32.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:44:32.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:44:34.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 44, 7), 14.32, 37.9, 0.0, 16.52, 16.16, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:44:34.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:44:07
2026-02-16T03:44:35.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:44:35.314 [DEBUG] [Thread-216482] [transport.py] [_log()] starting thread (client mode): 0xa2db4700
2026-02-16T03:44:35.315 [DEBUG] [Thread-216482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:44:35.337 [DEBUG] [Thread-216482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:44:35.337 [INFO] [Thread-216482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] client lang: <none>
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] server lang: <none>
2026-02-16T03:44:35.340 [DEBUG] [Thread-216482] [transport.py] [_log()] kex follows: False
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] Compression: none
2026-02-16T03:44:35.341 [DEBUG] [Thread-216482] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:44:35.357 [DEBUG] [Thread-216482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:44:35.357 [DEBUG] [Thread-216482] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:44:35.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:44:35.358 [DEBUG] [Thread-216482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:44:35.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:44:35.360 [DEBUG] [Thread-216482] [transport.py] [_log()] userauth is OK
2026-02-16T03:44:35.361 [DEBUG] [Thread-216482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:44:35.361 [DEBUG] [Thread-216482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:44:35.361 [DEBUG] [Thread-216482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:44:35.361 [DEBUG] [Thread-216482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:44:35.397 [INFO] [Thread-216482] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:44:35.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:44:36.033 [DEBUG] [Thread-216482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:44:36.034 [DEBUG] [Thread-216482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:44:36.034 [DEBUG] [Thread-216482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:44:36.075 [DEBUG] [Thread-216482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:44:36.075 [DEBUG] [Thread-216482] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:44:36.078 [DEBUG] [Thread-216482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:44:36.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:44:36.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:44:36.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:44:36.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:44:36.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:44:36.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:44:36.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:44:36.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:44:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:44:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.072320 -999.00  +15.10  11.13     47   +4.10 1 1 1 1 1     0    0 14.67 166.12 ZNESW 11.3 11.1 110.4 13.3 14.9 -22.2 14.8 -21.2 14.4 -19.9 14.7 -21.2
2026-02-16T03:44:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:44:36.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:44:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.072320
2026-02-16T03:44:36.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:44:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:44:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:44:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:44:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:44:36.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:44:07', tmtdew=14.32, humidity=37.9, cloud=0.0, wind=16.52, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:44:07', seeing=1.89, atlas_timestamp='2026-02-16T01:44:08.448', atlas_cloud=1, atlas_rain=1, zp_data=[0.012750000000000483, -0.025750000000000384, 0.0032500000000013074, -0.022500000000000853, -0.0035000000000007248, 0.04925000000000068, 0.02200000000000024, 0.043250000000000455, 0.018499999999999517, -0.03599999999999959, -0.008250000000000313, -0.10100000000000087, 0.05299999999999905, 0.04624999999999879, 0.05000000000000071, -0.03700000000000081, 0.016750000000000043, -0.014499999999999957, 0.016000000000000014, -0.0037500000000019185, -0.0045000000000001705, 0.06274999999999764, 0.02224999999999966, 0.008750000000000924, 0.010999999999999233, -0.04049999999999976, 0.06274999999999942, 0.01950000000000074, 0.062000000000001165, 0.10400000000000098, 0.09100000000000108, 0.04550000000000054, -0.015750000000000597], zp_timestamp='2026-02-16T01:41:00')
2026-02-16T03:44:36.106 [DEBUG] [Thread-216482] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:44:36.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:44:36.202 [DEBUG] [Thread-216485] [transport.py] [_log()] starting thread (client mode): 0xa2db4a60
2026-02-16T03:44:36.202 [DEBUG] [Thread-216485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:44:36.217 [DEBUG] [Thread-216485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:44:36.217 [INFO] [Thread-216485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:44:36.224 [DEBUG] [Thread-216485] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] client lang: <none>
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] server lang: <none>
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] kex follows: False
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:44:36.225 [DEBUG] [Thread-216485] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:44:36.226 [DEBUG] [Thread-216485] [transport.py] [_log()] Compression: none
2026-02-16T03:44:36.226 [DEBUG] [Thread-216485] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:44:36.284 [DEBUG] [Thread-216485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:44:36.284 [DEBUG] [Thread-216485] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:44:36.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:44:36.286 [DEBUG] [Thread-216485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:44:36.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:44:36.340 [DEBUG] [Thread-216485] [transport.py] [_log()] userauth is OK
2026-02-16T03:44:36.340 [DEBUG] [Thread-216485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:44:36.341 [DEBUG] [Thread-216485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:44:36.341 [DEBUG] [Thread-216485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:44:36.341 [DEBUG] [Thread-216485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:44:36.360 [INFO] [Thread-216485] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:44:36.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:44:36.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:44:36.562 [DEBUG] [Thread-216487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:37.205 [DEBUG] [Thread-216485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:44:37.206 [DEBUG] [Thread-216485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:44:37.253 [DEBUG] [Thread-216485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:44:37.254 [DEBUG] [Thread-216485] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:44:37.263 [DEBUG] [Thread-216485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:44:37.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:44:37.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:44:37.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:44:37.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:44:37.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:44:37.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:44:37.300 [DEBUG] [Thread-216485] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:44:45.605 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:51.541 [DEBUG] [Thread-216488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:51.614 [DEBUG] [Thread-216489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:56.300 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:44:56.301 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:04.300 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:06.649 [DEBUG] [Thread-216490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:07.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:45:07.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:45:07.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:45:09.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 44, 42), 13.48, 40.19, 0.0, 14.43, 15.66, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:45:09.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:44:42
2026-02-16T03:45:09.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:45:09.732 [DEBUG] [Thread-216491] [transport.py] [_log()] starting thread (client mode): 0xa2db4220
2026-02-16T03:45:09.732 [DEBUG] [Thread-216491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:45:09.752 [DEBUG] [Thread-216491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:45:09.752 [INFO] [Thread-216491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:45:09.755 [DEBUG] [Thread-216491] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:45:09.755 [DEBUG] [Thread-216491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:45:09.755 [DEBUG] [Thread-216491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] client lang: <none>
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] server lang: <none>
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] kex follows: False
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] Compression: none
2026-02-16T03:45:09.756 [DEBUG] [Thread-216491] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:45:09.772 [DEBUG] [Thread-216491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:45:09.773 [DEBUG] [Thread-216491] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:45:09.774 [DEBUG] [Thread-216491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:45:09.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:45:09.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:45:09.776 [DEBUG] [Thread-216491] [transport.py] [_log()] userauth is OK
2026-02-16T03:45:09.776 [DEBUG] [Thread-216491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:45:09.776 [DEBUG] [Thread-216491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:45:09.776 [DEBUG] [Thread-216491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:45:09.776 [DEBUG] [Thread-216491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:45:09.801 [INFO] [Thread-216491] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:45:09.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:45:17.198 [DEBUG] [Thread-216491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:45:17.198 [DEBUG] [Thread-216491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:45:17.198 [DEBUG] [Thread-216491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:45:17.239 [DEBUG] [Thread-216491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:45:17.239 [DEBUG] [Thread-216491] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:45:17.242 [DEBUG] [Thread-216491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:45:17.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:45:17.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:45:17.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:45:17.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:45:17.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:45:17.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:45:17.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:45:17.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:45:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:45:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.072668 -999.00  +15.10   9.77     48   +4.20 1 1 1 1 1     0    0 14.56 153.73 ZNESW 11.5 9.8 109.0 13.8 14.8 -22.3 14.7 -21.2 14.4 -20.0 14.7 -21.3
2026-02-16T03:45:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:45:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:45:17.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.072668
2026-02-16T03:45:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:45:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:45:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:45:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:45:17.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:45:17.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:44:42', tmtdew=13.48, humidity=40.19, cloud=0.0, wind=14.43, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:44:42', seeing=1.56, atlas_timestamp='2026-02-16T01:44:38.515', atlas_cloud=1, atlas_rain=1, zp_data=[0.012750000000000483, -0.025750000000000384, 0.0032500000000013074, -0.022500000000000853, -0.0035000000000007248, 0.04925000000000068, 0.02200000000000024, 0.043250000000000455, 0.018499999999999517, -0.03599999999999959, -0.008250000000000313, -0.10100000000000087, 0.05299999999999905, 0.04624999999999879, 0.05000000000000071, -0.03700000000000081, 0.016750000000000043, -0.014499999999999957, 0.016000000000000014, -0.0037500000000019185, -0.0045000000000001705, 0.06274999999999764, 0.02224999999999966, 0.008750000000000924, 0.010999999999999233, -0.04049999999999976, 0.06274999999999942, 0.01950000000000074, 0.062000000000001165, 0.10400000000000098, 0.09100000000000108, 0.04550000000000054, -0.015750000000000597], zp_timestamp='2026-02-16T01:41:00')
2026-02-16T03:45:17.269 [DEBUG] [Thread-216491] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:45:17.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:45:17.365 [DEBUG] [Thread-216494] [transport.py] [_log()] starting thread (client mode): 0xa2db6ad0
2026-02-16T03:45:17.365 [DEBUG] [Thread-216494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:45:17.380 [DEBUG] [Thread-216494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:45:17.380 [INFO] [Thread-216494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:45:17.387 [DEBUG] [Thread-216494] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:45:17.387 [DEBUG] [Thread-216494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:45:17.387 [DEBUG] [Thread-216494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] client lang: <none>
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] server lang: <none>
2026-02-16T03:45:17.388 [DEBUG] [Thread-216494] [transport.py] [_log()] kex follows: False
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] Compression: none
2026-02-16T03:45:17.389 [DEBUG] [Thread-216494] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:45:17.448 [DEBUG] [Thread-216494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:45:17.449 [DEBUG] [Thread-216494] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:45:17.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:45:17.450 [DEBUG] [Thread-216494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:45:17.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:45:17.508 [DEBUG] [Thread-216494] [transport.py] [_log()] userauth is OK
2026-02-16T03:45:17.508 [DEBUG] [Thread-216494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:45:17.508 [DEBUG] [Thread-216494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:45:17.508 [DEBUG] [Thread-216494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:45:17.508 [DEBUG] [Thread-216494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:45:17.526 [INFO] [Thread-216494] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:45:17.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:45:17.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:45:18.354 [DEBUG] [Thread-216494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:45:18.354 [DEBUG] [Thread-216494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:45:18.402 [DEBUG] [Thread-216494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:45:18.403 [DEBUG] [Thread-216494] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:45:18.412 [DEBUG] [Thread-216494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:45:18.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:45:18.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:45:18.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:45:18.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:45:18.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:45:18.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:45:18.448 [DEBUG] [Thread-216494] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:45:21.686 [DEBUG] [Thread-216496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:22.990 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:36.737 [DEBUG] [Thread-216497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:41.633 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:48.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:45:48.468 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:45:48.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-02-16T03:45:50.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 45, 18), 13.64, 39.75, 0.0, 17.47, 15.73, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:45:50.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:45:18
2026-02-16T03:45:50.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:45:50.875 [DEBUG] [Thread-216498] [transport.py] [_log()] starting thread (client mode): 0xa2db40d0
2026-02-16T03:45:50.875 [DEBUG] [Thread-216498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:45:50.894 [DEBUG] [Thread-216498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:45:50.895 [INFO] [Thread-216498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] client lang: <none>
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] server lang: <none>
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] kex follows: False
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] Compression: none
2026-02-16T03:45:50.898 [DEBUG] [Thread-216498] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:45:50.915 [DEBUG] [Thread-216498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:45:50.916 [DEBUG] [Thread-216498] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:45:50.916 [DEBUG] [Thread-216498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:45:50.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:45:50.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:45:50.918 [DEBUG] [Thread-216498] [transport.py] [_log()] userauth is OK
2026-02-16T03:45:50.918 [DEBUG] [Thread-216498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:45:50.919 [DEBUG] [Thread-216498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:45:50.919 [DEBUG] [Thread-216498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:45:50.919 [DEBUG] [Thread-216498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:45:50.943 [INFO] [Thread-216498] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:45:50.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:45:51.597 [DEBUG] [Thread-216500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:51.601 [DEBUG] [Thread-216498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:45:51.601 [DEBUG] [Thread-216498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:45:51.601 [DEBUG] [Thread-216498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:45:51.642 [DEBUG] [Thread-216498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:45:51.643 [DEBUG] [Thread-216498] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:45:51.646 [DEBUG] [Thread-216498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:45:51.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:45:51.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:45:51.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:45:51.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:45:51.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:45:51.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:45:51.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:45:51.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:45:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:45:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.073015 -999.00  +15.10  12.48     47   +4.10 1 1 1 1 1     0    0 14.49 154.55 ZNESW 10.3 12.5 111.2 14.3 14.9 -22.3 14.7 -21.3 14.5 -20.0 14.7 -21.1
2026-02-16T03:45:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:45:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:45:51.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.073015
2026-02-16T03:45:51.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:45:51.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:45:51.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:45:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:45:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:45:51.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:45:18', tmtdew=13.64, humidity=39.75, cloud=0.0, wind=17.47, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:45:18', seeing=1.56, atlas_timestamp='2026-02-16T01:45:08.496', atlas_cloud=1, atlas_rain=1, zp_data=[0.012750000000000483, -0.025750000000000384, 0.0032500000000013074, -0.022500000000000853, -0.0035000000000007248, 0.04925000000000068, 0.02200000000000024, 0.043250000000000455, 0.018499999999999517, -0.03599999999999959, -0.008250000000000313, -0.10100000000000087, 0.05299999999999905, 0.04624999999999879, 0.05000000000000071, -0.03700000000000081, 0.016750000000000043, -0.014499999999999957, 0.016000000000000014, -0.0037500000000019185, -0.0045000000000001705, 0.06274999999999764, 0.02224999999999966, 0.008750000000000924, 0.010999999999999233, -0.04049999999999976, 0.06274999999999942, 0.01950000000000074, 0.062000000000001165, 0.10400000000000098, 0.09100000000000108, 0.04550000000000054, -0.015750000000000597], zp_timestamp='2026-02-16T01:41:00')
2026-02-16T03:45:51.671 [DEBUG] [Thread-216498] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:45:51.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:45:51.768 [DEBUG] [Thread-216503] [transport.py] [_log()] starting thread (client mode): 0xa2db60b0
2026-02-16T03:45:51.768 [DEBUG] [Thread-216503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:45:51.769 [DEBUG] [Thread-216502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:51.783 [DEBUG] [Thread-216503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:45:51.783 [INFO] [Thread-216503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:51.798 [DEBUG] [Thread-216503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] client lang: <none>
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] server lang: <none>
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] kex follows: False
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:45:51.799 [DEBUG] [Thread-216503] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:45:51.800 [DEBUG] [Thread-216503] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:45:51.800 [DEBUG] [Thread-216503] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:45:51.800 [DEBUG] [Thread-216503] [transport.py] [_log()] Compression: none
2026-02-16T03:45:51.800 [DEBUG] [Thread-216503] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:45:51.848 [DEBUG] [Thread-216503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:45:51.849 [DEBUG] [Thread-216503] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:45:51.849 [DEBUG] [Thread-216503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:45:51.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:45:51.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:45:51.904 [DEBUG] [Thread-216503] [transport.py] [_log()] userauth is OK
2026-02-16T03:45:51.904 [DEBUG] [Thread-216503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:45:51.905 [DEBUG] [Thread-216503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:45:51.905 [DEBUG] [Thread-216503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:45:51.905 [DEBUG] [Thread-216503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:45:51.939 [INFO] [Thread-216503] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:45:51.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:45:51.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:45:52.738 [DEBUG] [Thread-216503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:45:52.739 [DEBUG] [Thread-216503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:45:52.789 [DEBUG] [Thread-216503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:45:52.789 [DEBUG] [Thread-216503] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:45:52.798 [DEBUG] [Thread-216503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:45:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:45:52.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2026-02-16T03:45:52.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:45:52.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:45:52.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:45:52.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:45:52.832 [DEBUG] [Thread-216503] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:45:56.500 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:45:56.501 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:00.307 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:06.808 [DEBUG] [Thread-216505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:19.002 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:21.847 [DEBUG] [Thread-216506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:22.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:46:22.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:46:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:46:24.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 45, 53), 14.14, 38.46, 0.0, 15.26, 16.0, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:46:24.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:45:53
2026-02-16T03:46:25.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:46:25.257 [DEBUG] [Thread-216507] [transport.py] [_log()] starting thread (client mode): 0xa2db5b10
2026-02-16T03:46:25.257 [DEBUG] [Thread-216507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:46:25.276 [DEBUG] [Thread-216507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:46:25.276 [INFO] [Thread-216507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] client lang: <none>
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] server lang: <none>
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] kex follows: False
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:46:25.280 [DEBUG] [Thread-216507] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:46:25.281 [DEBUG] [Thread-216507] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:46:25.281 [DEBUG] [Thread-216507] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:46:25.281 [DEBUG] [Thread-216507] [transport.py] [_log()] Compression: none
2026-02-16T03:46:25.281 [DEBUG] [Thread-216507] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:46:25.298 [DEBUG] [Thread-216507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:46:25.299 [DEBUG] [Thread-216507] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:46:25.300 [DEBUG] [Thread-216507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:46:25.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:46:25.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:46:25.302 [DEBUG] [Thread-216507] [transport.py] [_log()] userauth is OK
2026-02-16T03:46:25.302 [DEBUG] [Thread-216507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:46:25.302 [DEBUG] [Thread-216507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:46:25.303 [DEBUG] [Thread-216507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:46:25.303 [DEBUG] [Thread-216507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:46:25.320 [INFO] [Thread-216507] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:46:25.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:46:25.971 [DEBUG] [Thread-216507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:46:25.971 [DEBUG] [Thread-216507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:46:25.971 [DEBUG] [Thread-216507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:46:26.012 [DEBUG] [Thread-216507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:46:26.012 [DEBUG] [Thread-216507] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:46:26.014 [DEBUG] [Thread-216507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:46:26.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:46:26.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:46:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:46:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:46:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:46:26.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:46:26.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:46:26.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:46:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:46:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.073362 -999.00  +15.10  11.56     46   +3.80 1 1 1 1 1     0    0 14.34 144.85 ZNESW 12.9 11.6 110.6 14.8 14.9 -21.8 14.7 -21.0 14.5 -19.8 14.8 -20.9
2026-02-16T03:46:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:46:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:46:26.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.073362
2026-02-16T03:46:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:46:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:46:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:46:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:46:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:46:26.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:45:53', tmtdew=14.14, humidity=38.46, cloud=0.0, wind=15.26, temperature=16.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:45:53', seeing=1.25, atlas_timestamp='2026-02-16T01:45:38.477', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.031749999999998835, -0.008749999999999147, -0.013500000000000512, -0.04100000000000037, -0.03074999999999939, -0.0129999999999999, 0.025249999999999773, 0.02049999999999841, -0.041999999999999815, -0.030750000000001165, -0.11249999999999893, 0.022999999999999687, 0.025750000000000384, 0.0259999999999998, -0.04400000000000048, -0.0012500000000006395, -0.05649999999999977, -0.0030000000000001137, -0.017750000000001265, -0.0070000000000014495, 0.03474999999999895, 0.02575000000000216, 0.007749999999999702, 0.030999999999998806, -0.054999999999999716, 0.036749999999999616, -0.024499999999999744, 0.01699999999999946, 0.04600000000000115, 0.05500000000000149, 0.022500000000000853, -0.06875000000000142], zp_timestamp='2026-02-16T01:44:00')
2026-02-16T03:46:26.034 [DEBUG] [Thread-216507] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:46:26.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:46:36.883 [DEBUG] [Thread-216510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:37.650 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:51.663 [DEBUG] [Thread-216511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:51.938 [DEBUG] [Thread-216512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:56.323 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:56.702 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:46:56.703 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:06.974 [DEBUG] [Thread-216513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:15.273 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:22.011 [DEBUG] [Thread-216514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:33.942 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:37.049 [DEBUG] [Thread-216515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:51.741 [DEBUG] [Thread-216516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:52.083 [DEBUG] [Thread-216517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:52.602 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:56.905 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:47:56.906 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:07.117 [DEBUG] [Thread-216518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:11.296 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:22.155 [DEBUG] [Thread-216519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:30.012 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:37.193 [DEBUG] [Thread-216520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:38.840 [WARNING] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Unable to open ssh connection for writing weather state to io.saao.ac.za: [Errno 110] Connection timed out
2026-02-16T03:48:48.820 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:51.808 [DEBUG] [Thread-216521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:52.229 [DEBUG] [Thread-216522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:57.105 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:48:57.107 [DEBUG] [Thread-20 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:07.263 [DEBUG] [Thread-216523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:07.536 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:08.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:49:08.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:49:08.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:49:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 48, 51), 14.74, 37.05, 0.0, 17.65, 16.33, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:49:10.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:48:51
2026-02-16T03:49:11.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:49:11.221 [DEBUG] [Thread-216524] [transport.py] [_log()] starting thread (client mode): 0xa2db7b50
2026-02-16T03:49:11.221 [DEBUG] [Thread-216524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:49:11.241 [DEBUG] [Thread-216524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:49:11.241 [INFO] [Thread-216524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:49:11.244 [DEBUG] [Thread-216524] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] client lang: <none>
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] server lang: <none>
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] kex follows: False
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] Compression: none
2026-02-16T03:49:11.245 [DEBUG] [Thread-216524] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:49:11.263 [DEBUG] [Thread-216524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:49:11.264 [DEBUG] [Thread-216524] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:49:11.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:49:11.265 [DEBUG] [Thread-216524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:49:11.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:49:11.267 [DEBUG] [Thread-216524] [transport.py] [_log()] userauth is OK
2026-02-16T03:49:11.267 [DEBUG] [Thread-216524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:49:11.267 [DEBUG] [Thread-216524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:49:11.267 [DEBUG] [Thread-216524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:49:11.267 [DEBUG] [Thread-216524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:49:11.291 [INFO] [Thread-216524] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:49:11.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:49:11.890 [DEBUG] [Thread-216524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:49:11.891 [DEBUG] [Thread-216524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:49:11.891 [DEBUG] [Thread-216524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:49:11.931 [DEBUG] [Thread-216524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:49:11.932 [DEBUG] [Thread-216524] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:49:11.935 [DEBUG] [Thread-216524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:49:11.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:49:11.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:49:11.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:49:11.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:49:11.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:49:11.958 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:49:11.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:49:11.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:49:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:49:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.075445 -999.00  +15.50  10.45     44   +3.40 1 1 1 1 1     0    0 15.22 163.05 ZNESW 11.1 10.4 113.0 14.5 15.1 -21.7 14.9 -21.2 14.6 -19.8 14.8 -21.0
2026-02-16T03:49:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:49:11.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:49:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.075445
2026-02-16T03:49:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:49:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:49:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:49:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:49:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:49:11.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2026-02-16T03:48:51', tmtdew=14.74, humidity=37.05, cloud=0.0, wind=17.65, temperature=16.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2026-02-16T03:48:51', seeing=1.31, atlas_timestamp='2026-02-16T01:48:38.448', atlas_cloud=1, atlas_rain=1, zp_data=[-0.026250000000000995, -0.031749999999998835, -0.008749999999999147, -0.013500000000000512, -0.04100000000000037, -0.03074999999999939, -0.0129999999999999, 0.025249999999999773, 0.02049999999999841, -0.041999999999999815, -0.030750000000001165, -0.11249999999999893, 0.022999999999999687, 0.025750000000000384, 0.0259999999999998, -0.04400000000000048, -0.0012500000000006395, -0.05649999999999977, -0.0030000000000001137, -0.017750000000001265, -0.0070000000000014495, 0.03474999999999895, 0.02575000000000216, 0.007749999999999702, 0.030999999999998806, -0.054999999999999716, 0.036749999999999616, -0.024499999999999744, 0.01699999999999946, 0.04600000000000115, 0.05500000000000149, 0.022500000000000853, -0.06875000000000142], zp_timestamp='2026-02-16T01:47:00')
2026-02-16T03:49:11.961 [DEBUG] [Thread-216524] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:49:12.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2026-02-16T03:49:12.056 [DEBUG] [Thread-216527] [transport.py] [_log()] starting thread (client mode): 0xa57c2560
2026-02-16T03:49:12.057 [DEBUG] [Thread-216527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:49:12.071 [DEBUG] [Thread-216527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2026-02-16T03:49:12.072 [INFO] [Thread-216527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2026-02-16T03:49:12.079 [DEBUG] [Thread-216527] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:49:12.080 [DEBUG] [Thread-216527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] client lang: <none>
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] server lang: <none>
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] kex follows: False
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:49:12.081 [DEBUG] [Thread-216527] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:49:12.082 [DEBUG] [Thread-216527] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:49:12.082 [DEBUG] [Thread-216527] [transport.py] [_log()] Compression: none
2026-02-16T03:49:12.082 [DEBUG] [Thread-216527] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:49:12.137 [DEBUG] [Thread-216527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:49:12.138 [DEBUG] [Thread-216527] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:49:12.138 [DEBUG] [Thread-216527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2026-02-16T03:49:12.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2026-02-16T03:49:12.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:49:12.197 [DEBUG] [Thread-216527] [transport.py] [_log()] userauth is OK
2026-02-16T03:49:12.197 [DEBUG] [Thread-216527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:49:12.197 [DEBUG] [Thread-216527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:49:12.197 [DEBUG] [Thread-216527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2026-02-16T03:49:12.197 [DEBUG] [Thread-216527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:49:12.216 [INFO] [Thread-216527] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:49:12.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2026-02-16T03:49:12.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:49:13.014 [DEBUG] [Thread-216527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:49:13.015 [DEBUG] [Thread-216527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:49:13.062 [DEBUG] [Thread-216527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:49:13.062 [DEBUG] [Thread-216527] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:49:13.070 [DEBUG] [Thread-216527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:49:13.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:49:13.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-02-16T03:49:13.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2026-02-16T03:49:13.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:49:13.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:49:13.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:49:13.104 [DEBUG] [Thread-216527] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:49:22.298 [DEBUG] [Thread-216529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:26.188 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:37.349 [DEBUG] [Thread-216530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:43.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2026-02-16T03:49:43.127 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database 10.2.100.54 as user suthweather
2026-02-16T03:49:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2026-02-16T03:49:44.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2026, 2, 16, 3, 49, 26), 14.77, 36.97, 0.0, 17.22, 16.3, 0, 0, 0, 2, 0, 0),)
2026-02-16T03:49:44.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2026-02-16 03:49:26
2026-02-16T03:49:45.056 [DEBUG] [Thread-207442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2026-02-16T03:49:45.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2026-02-16T03:49:45.476 [DEBUG] [Thread-216531] [transport.py] [_log()] starting thread (client mode): 0xa57c3d60
2026-02-16T03:49:45.476 [DEBUG] [Thread-216531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2026-02-16T03:49:45.492 [DEBUG] [Thread-216531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2026-02-16T03:49:45.493 [INFO] [Thread-216531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] === Key exchange possibilities ===
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] client lang: <none>
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] server lang: <none>
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] kex follows: False
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] === Key exchange agreements ===
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] HostKey: ssh-ed25519
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] Cipher: aes128-ctr
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] MAC: hmac-sha2-256
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] Compression: none
2026-02-16T03:49:45.495 [DEBUG] [Thread-216531] [transport.py] [_log()] === End of kex handshake ===
2026-02-16T03:49:45.510 [DEBUG] [Thread-216531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2026-02-16T03:49:45.510 [DEBUG] [Thread-216531] [transport.py] [_log()] Switch to new keys ...
2026-02-16T03:49:45.510 [DEBUG] [Thread-216531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2026-02-16T03:49:45.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2026-02-16T03:49:45.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2026-02-16T03:49:45.511 [DEBUG] [Thread-216531] [transport.py] [_log()] userauth is OK
2026-02-16T03:49:45.511 [DEBUG] [Thread-216531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2026-02-16T03:49:45.511 [DEBUG] [Thread-216531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2026-02-16T03:49:45.511 [DEBUG] [Thread-216531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2026-02-16T03:49:45.511 [DEBUG] [Thread-216531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2026-02-16T03:49:45.521 [INFO] [Thread-216531] [transport.py] [_log()] Authentication (publickey) successful!
2026-02-16T03:49:45.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2026-02-16T03:49:46.148 [DEBUG] [Thread-216531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2026-02-16T03:49:46.149 [DEBUG] [Thread-216531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2026-02-16T03:49:46.149 [DEBUG] [Thread-216531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2026-02-16T03:49:46.190 [DEBUG] [Thread-216531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2026-02-16T03:49:46.190 [DEBUG] [Thread-216531] [transport.py] [_log()] Secsh channel 0 opened.
2026-02-16T03:49:46.193 [DEBUG] [Thread-216531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2026-02-16T03:49:46.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2026-02-16T03:49:46.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2026-02-16T03:49:46.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2026-02-16T03:49:46.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2026-02-16T03:49:46.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2026-02-16T03:49:46.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2026-02-16T03:49:46.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2026-02-16T03:49:46.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2026-02-16T03:49:46.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2026-02-16T03:49:46.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 61087.075792 -999.00  +15.40  11.02     44   +3.40 1 1 1 1 1     0    0 15.59 169.47 ZNESW 12.2 11.0 106.4 14.2 15.1 -22.1 14.9 -21.1 14.6 -20.0 14.9 -21.2
2026-02-16T03:49:46.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2026-02-16T03:49:46.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2026-02-16T03:49:46.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 61087.075792
2026-02-16T03:49:46.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2026-02-16T03:49:46.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2026-02-16T03:49:46.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2026-02-16T03:49:46.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2026-02-16T03:49:46.218 [DEBUG] [Thread-216531] [transport.py] [_log()] EOF in transport thread
2026-02-16T03:49:46.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2026-02-16T03:49:46.219 [DEBUG] [poll_weather_worker] [driver.p
[file cut: first 33554432 bytes kept]
[document cut: first 32641302 of 33554432 characters kept]
